home *** CD-ROM | disk | FTP | other *** search
/ ftp.wwiv.com / ftp.wwiv.com.zip / ftp.wwiv.com / pub / MISC / LORA241S.ZIP / PIPBASE.H < prev    next >
C/C++ Source or Header  |  1998-05-17  |  10KB  |  260 lines

  1.  
  2. // LoraBBS Version 2.41 Free Edition
  3. // Copyright (C) 1987-98 Marco Maccaferri
  4. //
  5. // This program is free software; you can redistribute it and/or modify
  6. // it under the terms of the GNU General Public License as published by
  7. // the Free Software Foundation; either version 2 of the License, or
  8. // (at your option) any later version.
  9. //
  10. // This program is distributed in the hope that it will be useful,
  11. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. // GNU General Public License for more details.
  14. //
  15. // You should have received a copy of the GNU General Public License
  16. // along with this program; if not, write to the Free Software
  17. // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18.  
  19. /* PipBase.H: this file contains all data structure definition and 
  20. notes on how to manage them. All PipBase-compatible programs have to 
  21. refer to these informations */
  22.  
  23. /* data alignment is on bytes */
  24. /* int (and uint) are 16 bits integers, LSB first */
  25.  
  26. #pragma pack(1)
  27.  
  28. #define PIPVERSION 1
  29. #define PIPSUBVERSION 00
  30.  
  31. #define BUFSIZE 512
  32.  
  33. #define PRODUCT 0xAD
  34.  
  35. /* something about file names and location:
  36.  
  37. In your main directory there is the file NODEINFO.CFG, that holds all
  38. general informations: it's an unique record of type NODEINFO.
  39.  
  40. In another directory (well, it may be the same of NodeInfo.Cfg), the
  41. so-called pipbase directory, there are:
  42.  
  43. ORIGINS.PIP:  a file containing 256 char[60] null-terminated strings: your
  44.               origins. (*)
  45.  
  46. BASEDESC.PIP: a file of records of the type AREASTRUCT, containing the area
  47.               definitions. (*)
  48.  
  49. DESTPTR.PIP:  a file of DESTPTR type records. (*)
  50.  
  51. LASTREAD.PIP: a file of 8 or more tables of <cfg.model> integers each.
  52.               First 8 records are for the sysops indicated in NODEINFO.CFG;
  53.               following entries can be used for BBS users. (*)
  54.  
  55. MPTRxxxx.PIP, where xxxx is an hexadecimal number: a file of records of type
  56.               MSGPTR, indexing area xxxx. (*)
  57.  
  58. MPKTxxxx.PIP, where xxxx is an hexadecimal number: a file of packed
  59.               messages, each formed by a MSGPKTHDR record and five
  60.               null-terminated strings; the file is terminated by a double
  61.               null (that, with the terminator of the last string, forms a
  62.               three-zeroes sequence); it contains area xxxx texts;
  63.               the five null'terminated strings are the to, from, subj,
  64.               date and text fields of the standard FTS-0001 packets. (*)
  65.  
  66. FRIENDND.PIP: a file of FRIENDND type records, each of whom has an entry in
  67.               the forward_to bitmap of BASEDESC.PIP.
  68.               Notice that not all forward_to entries has to be assigned to a
  69.               record: a point does not need a large FRIENDND!
  70.  
  71. ROUTE.PIP:    a file of ROUTE records, containing informations on how to
  72.               route netmail 
  73.  
  74. Only files marked with an (*) are the pipbase standard. Other files are used
  75. by PipBase.Exe and PipSetup, but you may change them (and, if possible, inform
  76. the authors of these changes).
  77.  
  78. */
  79.  
  80.  
  81. typedef unsigned short uint;
  82.  
  83.  
  84. typedef struct /* structure of the message headers in MPKTxxxx.PIP files */
  85.                { uint pktype; /* 2= not compressed; 10=compressed with PIP */
  86.                  uint fromnode,tonode,fromnet,tonet; /* for netmail */
  87.                  uint attribute; /* bit 0=private as for SeaDog,
  88.                                         1=crash as for SeaDog,
  89.                                         2=received as for SeaDog,
  90.                                         3=sent as for SeaDog,
  91.                                         4=fileattach as for SeaDog,
  92.                                         5=in transit as for SeaDog,
  93.                                         6=from us(1)/to us(0) (pipbase only),
  94.                                         7=kill/sent as for SeaDog,
  95.                                         8=local as for SeaDog,
  96.                                         9=hold as for SeaDog,
  97.                                         10=locked,
  98.                                         11=filerequest as for SeaDog,
  99.                                         15=fileupdaterequest as for SeaDog */
  100.                                 /* when echomail, bit 3=1 means "processed"; */
  101.                                 /* bits 10,12,13,14 are unused, and they will be..... */
  102.                  uint point; /* FMPT for inbound messages, TOPT for outbound messages */
  103.                } MSGPKTHDR;
  104.  
  105. #define SET_PKT_PRIV 1
  106. #define SET_PKT_CRASH 2
  107. #define SET_PKT_RCVD 4
  108. #define SET_PKT_SENT 8
  109. #define SET_PKT_ATTACH 16
  110. #define SET_PKT_TRANSIT 32
  111. #define SET_PKT_FROMUS 64
  112. #define SET_PKT_KILL 128
  113. #define SET_PKT_LOCAL 256
  114. #define SET_PKT_HOLD 512
  115. #define SET_PKT_LOCK 1024
  116. #define SET_PKT_REQUEST 2048
  117. #define SET_PKT_UPDATE 32768U
  118. #define RESET_PKT_PRIV 0xfffe
  119. #define RESET_PKT_CRASH 0xfffd
  120. #define RESET_PKT_RCVD 0xfffb
  121. #define RESET_PKT_SENT 0xfff7
  122. #define RESET_PKT_ATTACH 0xffef
  123. #define RESET_PKT_TRANSIT 0xffdf
  124. #define RESET_PKT_FROMUS 0xffbf
  125. #define RESET_PKT_KILL 0xff7f
  126. #define RESET_PKT_LOCAL 0xfeff
  127. #define RESET_PKT_HOLD 0xfdff
  128. #define RESET_PKT_LOCK 0xfbff
  129. #define RESET_PKT_REQUEST 0xf7ff
  130. #define RESET_PKT_UPDATE 0x7fff
  131.  
  132. #define SEADOG_MASK 0x8a97
  133.  
  134.  
  135. typedef struct /* structure of each record in MPTRxxxx.PIP files */
  136.                { long pos;       /* pointer to MPKTxxxx.PIP */
  137.                  uint prev,next;  /* pointers to other records in MPTRxxxx */
  138.                  uint status;     /* bit 0=deleted 1=received 2=sent */
  139.                                   /* 3=fromus(1)/tous(0) 4=Locked (Undeletable) */
  140.                } MSGPTR;
  141.  
  142. #define SET_MPTR_DEL 1
  143. #define SET_MPTR_RCVD 2
  144. #define SET_MPTR_SENT 4
  145. #define SET_MPTR_FROMUS 8
  146. #define SET_MPTR_LOCK 16
  147. #define RESET_MPTR_DEL 0xfffe
  148. #define RESET_MPTR_RECV 0xfffd
  149. #define RESET_MPTR_SENT 0xfffb
  150. #define RESET_MPTR_FROMUS 0xfff7
  151. #define RESET_MPTR_LOCK 0xfffef
  152.  
  153.  
  154. typedef struct /* structure of each record in DESTPTR.PIP */
  155.                { char to[36]; /* addressee name */
  156.                  uint area,msg; /* pointers to MPTRarea.PIP records */
  157.                  long next; /* to speed up search (in future) */
  158.                } DESTPTR;
  159.  
  160.  
  161. #define FRI_SET_PIPMAIL 1
  162. #define FRI_RESET_PIPMAIL 0xfffe
  163. #define FRI_SET_ACTIVE 2
  164. #define FRI_RESET_ACTIVE 0xfffd
  165. #define FRI_SET_DEL 4
  166. #define FRI_RESET_DEL 0xfffb
  167. #define FRI_SET_HOLD 8
  168. #define FRI_RESET_HOLD 0xfff7
  169.  
  170.  
  171. typedef struct {
  172.                  unsigned short
  173.                       orig_node,               /* originating node */
  174.                       dest_node,               /* destination node */
  175.                       year,                    /* 1990 - nnnn */
  176.                       month,                   /* month -1 */
  177.                       day,                     
  178.                       hour,
  179.                       minute,
  180.                       second,
  181.                       rate,                    /* unused */
  182.                       ver,                     /* 2 */
  183.                       orig_net,                /* originating net */
  184.                       dest_net;                /* destination net */
  185.                  unsigned char
  186.                       product,                 /* product code */
  187.                       rev_lev,                 /* revision level */
  188.                       password[8];
  189.                  unsigned short
  190.                       qm_orig_zone,            /* QMail orig.zone */
  191.                       qm_dest_zone,            /* QMail dest.zone */
  192.                       wm_orig_point,           /* Wmail orig.point */
  193.                       wm_dest_point;           /* Wmail dest.point */
  194.                  unsigned char
  195.                       TRASH[4];                /* junk[4] */
  196.                  unsigned short
  197.                       orig_zone,               /* originating zone */
  198.                       dest_zone,               /* destination zone */
  199.                       orig_point,              /* originating point */
  200.                       dest_point;              /* destination point */
  201.                  unsigned long
  202.                       pr_data;
  203.                  } MAILPKT;
  204.  
  205.  
  206. typedef struct {
  207.                  char fromwho[36],towho[36],subj[72],date[20];
  208.                  uint times,
  209.                       destnode,orignode,
  210.                       cost,
  211.                       orignet,destnet,
  212.                       destzone,origzone,
  213.                       destpoint,origpoint,
  214.                       reply,attr,nextreply;
  215.                } FIDOMSG;
  216.  
  217.  
  218. // static char *mname[12]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
  219.  
  220. typedef struct /* structure of each record in ROUTE.PIP */
  221.                {
  222.                  unsigned char mode; /* see table below */
  223.                  uint zone,net,node,point;
  224.                  unsigned short via; /* pointer to a friend node */
  225.                } ROUTE;
  226. /* mode can be one of following values:
  227. 0: route all exported matrix via the specified friend
  228.    (zone,net,node and point fields are ignored)
  229. 1: route all the specified zone via the friend
  230.    (net,node and point fields are ignored)
  231. 2: route all the specified net via the friend
  232.    (node and point fields are ignored)
  233. 3: route all the hub via the friend
  234.    (last two digits of the node field and the point field are ignored)
  235. 4: route the node and all his points via the friend
  236.    (point field is ignored)
  237. 5: route that point via that friend
  238.  
  239. If not specified:
  240. - a point routes all his mail via his boss
  241. - a boss routes all his mail via his hub (we maded the asumption that
  242.   the hub of BBS xxx/yyzz has always node number xxx/yy00) or directly
  243.   to his points.
  244. - a hub (or a node without a hub) routes all his mail via the network
  245.   coordinator, or sends it directly to his subnodes
  246. - a host routes all his mail via the other network coordinators, or
  247.   via the hubs if they're defined, or via a zonegate, or to his
  248.   subnodes
  249. - all mail for points is always routed via their boss
  250. - all mail for defined friends is sent directly
  251. */
  252.  
  253. #define ROUTE_ALL 0
  254. #define ROUTE_ZONE 1
  255. #define ROUTE_NET 2
  256. #define ROUTE_HUB 3
  257. #define ROUTE_NODE 4
  258. #define ROUTE_POINT 5
  259.  
  260.