home *** CD-ROM | disk | FTP | other *** search
/ Current Shareware 1994 January / SHAR194.ISO / email / dove0793.zip / FSC-0059.001 < prev    next >
Text File  |  1992-03-08  |  31KB  |  538 lines

  1. Document: FSC-0059
  2. Version:  001
  3. Date:     08-Mar-1992
  4.  
  5.  
  6.  
  7.  
  8.                   Newsgroup Interchange within FidoNet
  9.                               Jack Decker
  10.                             1:154/8@fidonet
  11.  
  12.   A proposed standard for the interchange of USENET News messages among
  13.                              FidoNet nodes.
  14.  
  15.  
  16. Status of this document:
  17.  
  18.      This FSC suggests a proposed protocol for the FidoNet(r) community,
  19.      and requests discussion and suggestions for improvements.
  20.      Distribution of this document is unlimited.
  21.  
  22.      Fido and FidoNet are registered marks of Tom Jennings and Fido
  23.      Software.
  24.  
  25.  
  26.  
  27. Introduction:
  28.  
  29. This document defines the standard format for the interchange of USENET
  30. news messages among FidoNet nodes.  It incorporates by reference the
  31. document RFC-1036, "Standard for Interchange of USENET Messages" by M.
  32. Horton of AT&T Bell Laboratories and R. Adams of the Center for Seismic
  33. Studies.  A copy of RFC-1036 should be included in the distribution
  34. archive of this standard.  However, RFC-1036 is NOT applicable in its
  35. entirety to FidoNet.  Therefore, unless specifically referenced
  36. elsewhere in this document, only section 2 of RFC-1036 should be
  37. considered part of this standard.  Section 3, which deals with "control
  38. messages", may be implemented in FidoNet on an optional basis, and if
  39. processing of control messages is included in a FidoNet implementation,
  40. it should be done in accordance with section 3 of RFC-1036 to the
  41. extent possible.  Section 4 of RFC-1036 is *NOT* applicable to FidoNet
  42. (except for section 4.3, which will be discussed later) and therefore
  43. is NOT included as part of this standard.  Section 5 of RFC-1036 is a
  44. treatise on the News Propagation Algorithm used within UseNet, and
  45. should be studied even though it is not directly applicable to FidoNet,
  46. in particular because it contains a discussion on the prevention of
  47. loops (what we in FidoNet commonly refer to as "dupe loops").
  48.  
  49. Please note that FidoNet implementations do not recognize nor support
  50. what is referred to as the "old format" or the "A format" in section 2
  51. of RFC-1036.
  52.  
  53. The goal of this document is to define a standard for the interchange
  54. of news messages between FidoNet nodes in a format that will also be
  55. acceptable to UseNet hosts.  In order to simplify the creation of
  56. software that conforms to this standard, we do not intend to support
  57. every news format that has ever existed in UseNet.  The standard
  58. described in RFC-1036 is used by the majority of UseNet hosts, and
  59. therefore it is the standard that will be adopted in this document.
  60.  
  61. This standard will contain three sections:  General theory of newsgroup
  62. transmission, Format and protocols of batched newsgroups, and the
  63. translation of newsgroup messages to and from FidoNet message format.
  64.  
  65. 1. General theory of newsgroup transmission:
  66.  
  67. Prior to the introduction of the DoveMail program, the usual method of
  68. gating a UseNet newsgroup into FidoNet was to convert it to FidoNet
  69. echomail, and then send it to "downstream" nodes in echomail format.
  70. This method is still used at the majority of gateway systems at this
  71. writing.  Unfortunately, no conversion process is perfect, and some
  72. useful control information is usually lost in the conversion.  In
  73. addition, most FidoNet echomail processors don't handle long messages
  74. (which are fairly common in newsgroups) well at all, and many gateway
  75. systems either try to split these messages into multiple parts (a
  76. somewhat awkward process) or discard them entirely.  Because the
  77. duplicate message detection algorithms used in many FidoNet echomail
  78. processors incorrectly identify some of the parts of a split message as
  79. duplicates, parts of long messages often get "lost" when transmitted as
  80. echomail.  Also, UseNet allows a message to be posted to multiple
  81. newsgroups, and when such messages are converted to echomail, it may be
  82. necessary to create multiple copies of the message (one for each
  83. echomail area that it would be placed in), thus increasing the
  84. transmission time for such messages.
  85.  
  86. Even normal-length newsgroup messages may be falsely discarded as
  87. duplicates by some "downstream" echomail processors.  The reason this
  88. is a particular problem in newsgroups converted to echomail is because
  89. some echomail processors use a checksum of parts of FidoNet message
  90. headers to determine if messages are duplicates. Since all newsgroup
  91. messages are assumed to be addressed to "All", and since some gateway
  92. software uses the date and time that the message was converted to
  93. echomail rather than the original date and time from the message, it's
  94. quite possible that the remainder of the message header contains
  95. information that is similar enough to information in another message's
  96. header to cause it to be discarded as a duplicate message.  This
  97. happens far more frequently with converted newsgroup messages than with
  98. messages originally entered as echomail.
  99.  
  100. Finally, when a BBS user enters a reply to a news message that has been
  101. converted to echomail, in many cases the information is simply not
  102. available in the original message to generate a proper "References:"
  103. line in the reply, as required by RFC-1036.  If the original message
  104. contained a "Followup-To:" line, which requires that replies be posted
  105. to a different newsgroup than the one in which the original message was
  106. entered, this line may not transmitted in the message as converted to
  107. echomail.  And even if this information is available, no echomail
  108. processor currently available will modify the reply message as required
  109. (to add the "References:" line where necessary, or to move the message
  110. to a different area if it is a reply to a message that contained a
  111. "Followup-To:" line).
  112.  
  113. Under this proposed standard, none of the UseNet message header
  114. information is lost in transmission between nodes, and reply messages
  115. can be generated that conform to UseNet specifications.  If a message
  116. is posted to multiple newsgroups, it is only transmitted once (instead
  117. of multiple times as it might be if converted to echomail).  Also, long
  118. messages are not truncated or changed in transmission between nodes,
  119. and finally, there is no chance that a message will be improperly
  120. discarded as a duplicate.
  121.  
  122. The main thing to remember is that under this standard, news messages
  123. are never converted to echomail.  Echomail is an irrelevant concept in
  124. this context, since we are not passing echomail between nodes.
  125. Instead, newsgroups are transmitted in the native format specified by
  126. RFC-1036, and tossed directly from batched newsgroup packets to the
  127. FidoNet message format (e.g. the *.msg format) if necessary.  Keep in
  128. mind that most FidoNet BBS software uses the same general format not
  129. only for echomail messages, but also for netmail and local message
  130. areas, so it is not necessary to transmit messages between nodes in
  131. echomail format if another format is more suitable for the type of
  132. message being transmitted.
  133.  
  134. 2. Format and protocols of batched newsgroups:
  135.  
  136. When newsgroup messages are transmitted between systems, the individual
  137. messages must conform to the specifications of section 2 of RFC-1036,
  138. and section 3 of this document.  Where section 3 of this document
  139. defines a more restrictive standard than RFC-1036, this document shall
  140. take precedence.
  141.  
  142. When transmitting news messages between FidoNet nodes, they must be
  143. sent in a batched newsgroup file (as described in section 4.3 of
  144. RFC-1036) unless some other format is agreed upon in advance.  The
  145. transmission of unbatched news messages, or the use of any batching
  146. method other than that described in section 4.3 of RFC-1036 shall be
  147. considered non-standard.  Please note that RFC-1036 section 4.3 refers
  148. to this batching process as combining several messages into "one large
  149. message", but we will refer to this "one large message" as a "batched
  150. newsgroup file", or a "UseNet format mail packet" rather than as a
  151. "large message", since FidoNet systems do not normally handle large
  152. "messages".
  153.  
  154. When messages pass through a FidoNet system on their way to other
  155. nodes, the header lines in the message may be modified to conform with
  156. the standards given here.  However, the text (body) of a message should
  157. NEVER be altered (one exception: Carriage Returns MAY be converted to
  158. Line Feeds in order to conform to this standard, but this is neither
  159. required nor expected of software).
  160.  
  161. The standard format for sending a batched newsgroup file to other
  162. FidoNet nodes is as follows:
  163.  
  164. First, as will be noted in section 3 of this document, individual lines
  165. of the batched newsgroup file must be terminated with Line Feeds only,
  166. and the file must NOT contain Carriage Return characters (ASCII 13).
  167.  
  168. Batched newsgroup files shall be transmitted between FidoNet nodes as
  169. files named using the filename ????????.PKU, where the eight character
  170. root name can be any of the hexadecimal digits 0 - 9 or A - F.  The
  171. .PKU extension (which stands for "PacKet - Usenet format") is the news
  172. equivalent of the .PKT file used to transmit FidoNet format netmail and
  173. echomail between nodes.
  174.  
  175. Batched newsgroup files with the filespec ????????.PKU may be archived
  176. into a standard mail archive file (bearing the extension *.MO?, *.TU?,
  177. *.WE? ... *.SU?).  It is assumed that the receiver of batched newsgroup
  178. files will take any necessary steps to make sure that both *.PKU and
  179. *.PKT files are extracted from incoming mail archive files before the
  180. mail archive files are deleted.  In certain cases, this may mean that
  181. an external unarchive shell may have to be used, instead of allowing
  182. the echomail processor to call the unarchiver (typical external
  183. unarchive shell programs at this writing are GUS, POLYXARC, and SPAZ).
  184.  
  185. A batched newsgroup file awaiting transmission may be stored in a
  186. FidoNet system's "outbound" area in uncompressed form, prior to being
  187. archived for transmission or sent in uncompressed form.  It is
  188. suggested that when a system uses the .OUT extension to indicate an
  189. uncompressed netmail or echomail packet, the .UUT extension be used to
  190. indicate an uncompressed batched newsgroup packet.  It is expected that
  191. a .UUT file in a system's "outbound" area will be treated in much the
  192. same way as an .OUT file, except it will be renamed to a file with an
  193. extension of .PKU (rather than .PKT) before being archived into the
  194. mail archive.  This implies that the root name of the .UUT file will
  195. contain the net number and node number of the destination system,
  196. expressed as four hexadecimal digits each for net and node numbers, in
  197. the same manner as the root name for a FidoNet .OUT file is
  198. constructed.
  199.  
  200. The root filename of the *.PKU file should be an eight digit
  201. hexadecimal number, with leading zeroes used if necessary, in order to
  202. make an eight character root filename.  It is suggested that this
  203. hexadecimal number be based on time of year, with 00000000.PKU
  204. generated at exactly midnight on January 1 and FFFFFFFF.PKU generated
  205. at just a moment before midnight on December 31.  However, it is
  206. permissible to use the same algorithm that is used to generate the root
  207. filename for *.PKT files.
  208.  
  209. The normal sequence for transmission of messages between FidoNet nodes
  210. might then be described as follows:
  211.  
  212. a. Messages created on the originating system are placed into a batched
  213. newsgroup file conforming to the specifications of RFC-1036 section
  214. 4.3.  When this batched newsgroup file is destined for another FidoNet
  215. node, it will have a filename of the format:
  216.  
  217.      [4 hex digit net number][4 hex digit node number].UUT
  218.  
  219. This file will then be placed in the outbound mail area for packing.
  220.  
  221. b. A mail packing program will examine the outbound mail area and, upon
  222. finding the .UUT file, will rename it to a file with an extension of
  223. .PKU, and then shell to a compression program in order to place the
  224. *.PKU file into a new or existing mail archive file for the destination
  225. node.  Mail archive files bear extension names consisting of the first
  226. two letters of a day of the week (in the English language) plus a
  227. numeric character in the range 0 - 9 (for example, .MO5 or .TH7).  The
  228. method of compression for the mail archive is as agreed upon between
  229. the originating and destination nodes.  No "standard" method of
  230. compression for the mail archive is specified in this document.  NOTE:
  231. If the compression program fails for any reason (such as running out of
  232. disk space), the mail packing program MUST rename the .PKU file back to
  233. the original *.UUT filename before exiting.  Since batched newsgroup
  234. files do not contain a header that indicates the destination node,
  235. there would be no way to determine the proper destination node if the
  236. file were not renamed back to the original filename.
  237.  
  238. c. The mail archive is transmitted in the usual manner by a FidoNet
  239. compatible mailer, or such other means as may be agreed upon in advance
  240. by the sysops of the originating and destination nodes.
  241.  
  242. d. At the destination system, the individual files are extracted from
  243. the mail archive.  *.PKT files are processed in the usual manner to
  244. extract any netmail or echomail messages, while *.PKU files are
  245. processed by software designed to handle batched newsgroup files.  In
  246. this context, such files could be "handled" by re-processing the
  247. messages and batching them to be sent on to one or more additional
  248. node(s), or by tossing the messages to the local message base, or both.
  249.  
  250. Please note that this standard does not anticipate that batched
  251. newsgroup files will be converted to FidoNet echomail at any point
  252. along the way.  It is realized that this may indeed happen, but such
  253. conversions should be considered as something to be avoided if at all
  254. possible due to the problems discussed in section 1 of this document.
  255.  
  256. 3. Translation of newsgroup messages to and from FidoNet message
  257. format:
  258.  
  259. NOTE: Where applicable, the standards defined in this section for
  260. messages shall apply not only to locally created messages, but also to
  261. all messages sent to "downstream" FidoNet nodes.
  262.  
  263. In this context, "FidoNet message format" means that format in which
  264. messages commonly reside on a FidoNet BBS.  At this writing, there are
  265. three formats commonly used for message storage on FidoNet systems, but
  266. other formats may be in use as well.  The three most common formats are
  267. the "*.msg" format as used by the original Fido program (and a host of
  268. programs since), also commonly referred to as the "single message per
  269. file format"; the "Hudson" format, used by QuickBBS, Remote Access, and
  270. some other products; and the "Squish" format used by the Maximus BBS
  271. and the "Squish" echomail processor.
  272.  
  273. Because there are so many message formats, some other programs have
  274. taken the approach of trying to convert UseNet news into echomail,
  275. creating *.PKT files which can theoretically be processed by any
  276. FidoNet system.  However, since the *.PKT files are processed by the
  277. echomail processor, all the limitations and pitfalls associated with
  278. converting newsgroup messages to echomail come into play.
  279.  
  280. The preferred way of handling incoming messages would be to have the
  281. BBS (or message reader/editor) software directly read batched newsgroup
  282. files.  In this way, the files would not have to be "processed" per se.
  283. As new batched newsgroup files arrived on a system, they could simply
  284. be concatenated to the existing message base, and then a utility could
  285. be run that would build an index to the message base, in a manner
  286. somewhat similar to the way "flat file" message bases are currently
  287. implemented on some BBS's.  Of course, you'd need to occasionally run a
  288. utility to delete old messages in order to keep the message base from
  289. growing too large, and new messages entered on the system would have to
  290. be exported from the system in a separate batched newsgroup file.
  291. However, at this writing no FidoNet-compatible BBS or message editor is
  292. capable of directly reading a batched newsgroup file.
  293.  
  294. The second most preferable method is to convert news messages directly
  295. to the message format used by that system.  At this writing the
  296. DoveMail software includes utilities (NewsToss and NewsScan) that can
  297. convert batched newsgroup files to and from messages in the *.msg
  298. (single message per file) format.  It should be possible to convert
  299. batched newsgroup files to and from other FidoNet message formats as
  300. well.
  301.  
  302. The method in which messages are stored on a BBS, and the method in
  303. which it is determined which new (locally-entered) messages need to be
  304. exported from the system will necessarily be implementation-specific.
  305. One method that can be used with *.msg type message bases is to
  306. maintain a "high water mark" in 1.msg, similar to the "high water mark"
  307. used for echomail messages, and additionally to mark messages received
  308. from other nodes as "sent" when they arrive, and locally-entered
  309. messages as "sent" when they have been exported, and to never re-send a
  310. message marked as "sent".
  311.  
  312. When tossing incoming messages, duplicate messages can be detected by
  313. comparing the contents of the "Message-ID:" line with those of
  314. previously received messages.  This may be slow processing
  315. considerably, however, and would require storage of a history file of
  316. "previously seen" messages.  Another method is to look in the "Path"
  317. line and see if we are already listed in the path; if so, the message
  318. is a duplicate and should be deleted.  This method is faster and does
  319. not require maintenance of a history file, but will not guard against
  320. duplicate messages arriving from one's feed that have not passed
  321. through the system twice (for example, a message that arrived from two
  322. different paths).  Fortunately, UseNet folks seem to understand the
  323. need for proper topology, so those types of dupes are relatively rare.
  324. FidoNet sysops taking UseNet feeds must understand that it is
  325. IMPERATIVE that a feed of any one newsgroup be obtained from only ONE
  326. source, especially if they are then passing that newsgroup to any
  327. "downstream" nodes.  This absolutely does NOT imply that geographic
  328. restrictions on newsgroup distribution are necessary or desirable!
  329.  
  330. Additional comments on preventing "loops" can be found in section 5 of
  331. RFC-1036, in the discussion of the News Propagation Algorithm.  Please
  332. note that only two methods of loop prevention are included in this
  333. standard:
  334.  
  335. 1) The history mechanism.  Each host keeps track of all messages it has
  336. seen (by their Message-ID) and whenever a message comes in that it has
  337. already seen, the incoming message is discarded immediately.
  338.  
  339. 2) Not sending a message to a system listed in the "Path" line of the
  340. header, or to the system that originated the message (which, in
  341. practice, should be listed in the Path line).
  342.  
  343. No other methods of dupe loop prevention are acceptable.  In
  344. particular, checksums of portions of the message header or message
  345. itself are NOT permitted to be used for loop prevention, except perhaps
  346. as a method to quickly identify POTENTIAL duplicate messages before
  347. doing a full string comparison with the Message-ID data in the history
  348. file.  In no case should a checksum be used as the SOLE method of
  349. determining whether a message is a duplicate.
  350.  
  351. When newsgroup messages are created for transmission to other systems,
  352. or when received messages are transmitted other systems, the individual
  353. messages must conform to the specifications of section 2 of RFC-1036.
  354. However, in order to simply programming of software designed to handle
  355. such messages, the following modifications to the standard are proposed
  356. for use within FidoNet.  Please note that these are slightly more
  357. restrictive than the standard permitted by RFC-1036:
  358.  
  359. a. The "old format" or "A format" described in section 2 of RFC-1036 is
  360. NOT supported in FidoNet.  Only the format detailed in RFC-1036
  361. (sometimes referred to as the "B" News format) is supported.  The vast
  362. majority of UseNet sites currently use the "B" News format.
  363.  
  364. b. The UseNet standard permits the use of "white space" to separate
  365. certain items in the message header, with "white space" defined as
  366. blanks or tabs.  It also states that "the Internet convention of
  367. continuation header lines (beginning with a blank or tab) is allowed."
  368. However, it should NOT be ASSUMED that "continuation header lines" will
  369. be used in any message.  It is suggested that when creating newsgroup
  370. messages for transmission to other systems, the use of tab characters
  371. be avoided in header lines, and that "continuation header lines" NOT be
  372. used, even if this means that a header line will be considerably longer
  373. than the length of a screen line.  Software that creates FidoNet-format
  374. messages (for display to BBS callers) from batched newsgroup files
  375. (that is, newsgroup message tossers) should break up such extra-long
  376. header lines, using a single space character ONLY (NOT a tab!) at the
  377. start of "continuation header lines."  Since batched newsgroup files
  378. received from a UseNet site may contain "continuation header lines"
  379. and/or tabs as "white space" in header lines, it is necessary to be
  380. able to decode such header lines properly, but it is strongly suggested
  381. that FidoNet software not CREATE messages with tabs or "continuation
  382. header lines" for transmission through the network.
  383.  
  384. c. All lines in news messages, including header lines, shall be
  385. terminated with a LINE FEED (ASCII 10 decimal) ONLY.  Under NO
  386. circumstances shall a CARRIAGE RETURN (ASCII 13 decimal) appear in news
  387. messages transmitted through FidoNet (if a Carriage Return is found in
  388. an in-transit message it MAY be changed to a Line Feed, this being the
  389. sole exception to the rule about not changing the body of a message,
  390. but the expectation is that no Carriage Returns will appear in a news
  391. message).  Also, spaces appearing at the end of lines (just prior to
  392. the Line Feed character) are strongly discouraged since they convey no
  393. useful information.  Finally, there should be only a single line feed
  394. at the end of each message (blank lines following the last line of a
  395. message are not allowed, again because they convey no useful
  396. information).  Please note that the use of the Line Feed as a line
  397. terminator is fairly standard throughout UseNet, and when a news
  398. message is converted to a FidoNet format message it is a simple matter
  399. to replace Line Feeds with Carriage Returns so that the message will
  400. display properly.
  401.  
  402. d. When constructing or adding to "Path" lines, RFC-1036 (section
  403. 2.1.6) states that "The names may be separated by any punctuation
  404. character or characters (except '.' which is considered part of the
  405. hostname)."  However, in actual practice, only the "!" (exclamation
  406. point or "bang" character) is commonly used to separate names.
  407. Therefore, the "!" character will be considered the "standard"
  408. separator for system names in Path lines in messages generated in
  409. FidoNet.  Also, RFC-1036 states that "Normally, the rightmost name will
  410. be the name of the originating system.  However, it is also permissible
  411. to include an extra entry on the right, which is the name of the
  412. sender.  This is for upward compatibility with older systems." In
  413. actual practice, it appears that most Path lines originating in UseNet
  414. have a user name as the rightmost entry.  Therefore, when a Path line
  415. is created for a message originating in FidoNet, it is suggested that
  416. the following format be used (assuming a message entered by user John
  417. Smith at node 1:123/456):
  418.  
  419.      Path: f456.n123.z1.fidonet.org!john.smith
  420.  
  421. When a user name is placed in the path, all spaces in the user name
  422. must be replaced with periods, and all uppercase characters in the name
  423. should be converted to lowercase.  It is permissible to use an alias in
  424. place of a user's real name if the originating system runs software
  425. that will recognize that alias in incoming netmail messages, and remap
  426. such messages to the proper user if necessary.  Also, note the
  427. restrictions on prohibited characters in the user name as specified in
  428. RFC-1036 section 2.1.1.  Although section 2.1.1. deals with the "From"
  429. line, common sense would indicate that these same restrictions on
  430. prohibited characters should apply if the user name is placed in the
  431. Path line (with the obvious exception of the use of the period to
  432. replace spaces in the user name, which is required).
  433.  
  434. e. Header lines defined as "optional" may be more or less optional
  435. depending on the keyword.  For example, the "Reply-To" and
  436. "Followup-To" lines should be automatically honored, if at all
  437. possible, when reply messages are created, and the "References" line,
  438. even though listed as an "optional" line, is "required for all
  439. follow-up messages" (replies).  On the other hand, lines such as
  440. "Control" and "Distribution" may have little meaning to FidoNet nodes
  441. (in particular, "Distribution" is meant to control distribution of a
  442. message along hierarchial lines, but since FidoNet topology has little
  443. relation to UseNet hierarchies, it is probably best to just ignore
  444. "Distribution" lines on in-transit messages).
  445.  
  446. Additional specifications for messages, including required and optional
  447. header lines, are detailed in section 2 of RFC-1036.
  448.  
  449. When a newsgroup is moderated, it is the responsibility of the sysop of
  450. each participating BBS to prevent users from entering messages in that
  451. area (unless the message exporting software is capable of sending any
  452. locally-entered messages to the conference moderator via MAIL).
  453. However, if a software newsgroup processor is written that both imports
  454. (tosses) messages to a FidoNet-format message base, and exports locally
  455. entered messages, and if the software does not have a way to send
  456. replies to the moderator via mail, then some mechanism must be provided
  457. to prevent the export of messages from a moderated area, so that in the
  458. unlikely event that there is no easy way to prevent users from posting
  459. messages in the moderated area, such messages will still not be sent
  460. out.  Since this standard does not deal with the transport of UseNet
  461. MAIL within FidoNet, the method for transmission of replies in
  462. moderated newsgroups is undefined by this document.  However, software
  463. authors are encouraged to provide some mechanism for private mail
  464. replies to newsgroup messages, in both moderated and unmoderated areas.
  465.  
  466. Note that if a moderated newsgroup is carried on a system, it is the
  467. responsibility of the sysop to provide mail access to users so that
  468. replies can be (manually) sent to the conference moderator, especially
  469. if replies in the newsgroup area cannot be automatically routed to the
  470. conference moderator.
  471.  
  472. One point that needs to be emphasized is there is NO message length
  473. limit on UseNet messages.  If a FidoNet node passes newsgroup messages
  474. to, or on behalf of other FidoNet nodes, it is NOT permissible to
  475. discard or truncate messages that exceed a preset length limit.  Note
  476. that in a batched newsgroup file, each message is preceded by a header
  477. of the form "#! rnews <length in bytes>".  Since the message text
  478. length is never changed in processing, it is possible to determine the
  479. length of a message after processing by reading in all the header
  480. lines, calculating the combined length of the header lines prior to
  481. making changes in the header (e.g. the Path line), then calculating the
  482. combined length of the header lines after making changes.  The
  483. difference between the original and the new length of the header lines
  484. can then be applied to the value given in the "#! rnews" line to
  485. determine the new message length, when is then used in the "#! rnews"
  486. header of the modified message.  Also, the number of bytes given in the
  487. "#! rnews" line, MINUS the length of the message header lines, is the
  488. length of the body of the message.  Once this length is known, the body
  489. of the message can be copied from the input file to the output file(s)
  490. in "chunks" small enough to fit in memory, until the end of the message
  491. is reached.
  492.  
  493. The following comments are implementation suggestions applicable to
  494. current FidoNet-compatible BBS systems, though not necessarily to
  495. software that may be written in the future:
  496.  
  497. It should be noted that when a BBS user enters a reply message, most
  498. FidoNet BBS software will "link" the reply message to the original by
  499. placing the message number of the original message in the message
  500. header (this is almost always the case if messages are stored in the
  501. "*.msg" format, in which case the number of the message being replied
  502. to is found at bytes 185-186 in the message header).  If the
  503. appropriate header lines have been stored in the text of the original
  504. message, it is possible to construct a reply message that meets all
  505. RFC-1036 specifications.  For example, a "References" line can be
  506. constructed from the "Message-ID" line (and the "References" line, if
  507. any) of the original message.  Similarly, if the original message
  508. contains a "Followup-To:" line, the reply can be posted to the
  509. newsgroup(s) specified in that line.  This may not work as expected if
  510. a message renumbering program or similar program messes with the
  511. message base before reply message is exported, so it is highly
  512. recommended that locally-entered newsgroup messages be exported as soon
  513. as practicable after they are entered.
  514.  
  515. Since the user of a BBS may reply to a message entered by another user
  516. of the same BBS, it is recommended that when a message is exported, any
  517. UseNet format header lines created for the exported message also be
  518. written back to the original message if possible.  This will permit
  519. reply linking to remain intact even if two or more users of the same
  520. BBS participate in the same message thread.
  521.  
  522. If a message is received that specifies more than one newsgroup in the
  523. "Newsgroups" header line, and corresponding message areas are available
  524. on the local system, one copy of the message should be placed in each
  525. such area.  For example, if the message is posted to four different
  526. newsgroups, and two of those groups are carried on the local BBS, then
  527. a copy of the message should be placed in the message base for each of
  528. those groups.  If users of a BBS are allowed to post a message to
  529. multiple newsgroups, then any message thus posted should be copied to
  530. the message bases of any of the other areas that are also carried on
  531. that system (and that the message was posted to) at the time the
  532. message is exported.
  533.  
  534. Corrections and Additions to this document:
  535.  
  536. Proposed corrections and additions to this document should be submitted
  537. to Jack Decker at 1:154/8, or jack.decker@f8.n154.z1.fidonet.org
  538.