diff --git a/html/ftsc/fsc-0035.html b/html/ftsc/fsc-0035.html index f8999636..238e765c 100755 --- a/html/ftsc/fsc-0035.html +++ b/html/ftsc/fsc-0035.html @@ -1,79 +1,80 @@ - -
-- Transparent Gateways to and from FidoNet- - Go Back - - - - + + + +- Technical Considerations - FSC-0035 - - Michael Shiels 22 June 89 - -Copyright 1989, Michael Shiels. All rights reserved. The right to distribute -for non-commercial use is granted to the FidoNet Technical Standards Committee, -provided that no fee is charged. This may be posted on FidoNet electronic BBSs -which charge no fee for accessing this document. Any and all other reproduction -or excerpting requires the explicit written consent of the author. - - -Gateways --------- - -Gatewaying between Fidonet and other networks seems to be the latest feature -which hopefully brings more benefits to the users of each network. But there -are some real problems with gatewaying and doing "transparent" replies. -This proposal should allow for almost totally transparent gateways but requires -the co-operation of BBS software writers to support this following protocol. - -Incoming Messages ------------------ - -When a message is entered into fidonet from another network it will be entering -through one machine (say 1/2). The userid on the other network may not match -very will with the 2 word 36 character userid on Fidonet. So the following is -done to store away the proper userid of the sender. - -Two (2) lines are added to the message (usually at the top of the text portion -hidden by the infamous ^A KLUDGE). - -^AREPLYADDR .....\r - -which signifies the FULL userid of the person on the other network. The first -36 characters or the full userid if less than 36 characters long, are stored -in the FROM field of the message header. When replies are done they use a -second line of the following form. - -^REPLYTO zone:net/node firstname lastname - -which is used to signify the "userid" which mail destined to this other network -must be sent to and on which machine that userids resides. Replies are sent -to this zone:net/node and userid with the first line of the message being -changed into 'TO: ....' where .... is the FULL userid from the ^AREPLYADDR -line. - -Should you have constructive correction or criticism, please contact: - -Michael Shiels -FidoNet: 1:250/410 michael.shiels@masnet.fidonet.org -uucp: ?!tmsoft!masnet!michael.shiels -Internet: michael.shiels@masnet.uucp - ----------- -FidoNet is a trademark of Tom Jennings and Fido Software, to whom we all owe - much thanks for the origin and spirit of FidoNet. -
+ Transparent Gateways to and from FidoNet+ +Go Back + + + + diff --git a/html/ftsc/fsc-0039.html b/html/ftsc/fsc-0039.html index 53e8e955..d3c6745a 100755 --- a/html/ftsc/fsc-0039.html +++ b/html/ftsc/fsc-0039.html @@ -1,362 +1,363 @@ - - -+ Technical Considerations + FSC-0035 + + Michael Shiels 22 June 89 + +Copyright 1989, Michael Shiels. All rights reserved. The right to distribute +for non-commercial use is granted to the FidoNet Technical Standards Committee, +provided that no fee is charged. This may be posted on FidoNet electronic BBSs +which charge no fee for accessing this document. Any and all other reproduction +or excerpting requires the explicit written consent of the author. + + +Gateways +-------- + +Gatewaying between Fidonet and other networks seems to be the latest feature +which hopefully brings more benefits to the users of each network. But there +are some real problems with gatewaying and doing "transparent" replies. +This proposal should allow for almost totally transparent gateways but requires +the co-operation of BBS software writers to support this following protocol. + +Incoming Messages +----------------- + +When a message is entered into fidonet from another network it will be entering +through one machine (say 1/2). The userid on the other network may not match +very will with the 2 word 36 character userid on Fidonet. So the following is +done to store away the proper userid of the sender. + +Two (2) lines are added to the message (usually at the top of the text portion +hidden by the infamous ^A KLUDGE). + +^AREPLYADDR .....\r + +which signifies the FULL userid of the person on the other network. The first +36 characters or the full userid if less than 36 characters long, are stored +in the FROM field of the message header. When replies are done they use a +second line of the following form. + +^REPLYTO zone:net/node firstname lastname + +which is used to signify the "userid" which mail destined to this other network +must be sent to and on which machine that userids resides. Replies are sent +to this zone:net/node and userid with the first line of the message being +changed into 'TO: ....' where .... is the FULL userid from the ^AREPLYADDR +line. + +Should you have constructive correction or criticism, please contact: + +Michael Shiels +FidoNet: 1:250/410 michael.shiels@masnet.fidonet.org +uucp: ?!tmsoft!masnet!michael.shiels +Internet: michael.shiels@masnet.uucp + +---------- +FidoNet is a trademark of Tom Jennings and Fido Software, to whom we all owe + much thanks for the origin and spirit of FidoNet. +
-Document: FSC-0039 -Version: 04 -Date: 29-Sep-90 - - - A Type-2 Packet Extension Proposal - Mark A. Howard 1:260/340@FidoNet - - Status of this document: - ------------------------ - This FSC suggests a proposed protocol for the FidoNet(r) community, - and requests discussion and suggestions for improvements. Distribution - of this document is unlimited. - - Fido and FidoNet are registered marks of Tom Jennings and Fido Software. - FTS-0001 is a copyrighted work of Randy Bush. - - Introduction - ------------ - This document serves two major purposes. The first is an attempt to define - and document the Type-2 packet which is widely in use in FidoNet today. - Although FTS-0001 defines the structure of a Type-2 packet, the natural - evolution of our network, mostly with regards to addressing methodology, - has made it necessary to utilize hitherto unused portions of the header - to insert Zone and Point information. Also, it has become apparent that - some of the existing fields are not large enough to accomplish their - original tasks. - - The second is to propose a simple mechanism to allow FidoNet to begin to - utilize advanced mail packing techniques. It is quite apparent that while - Type-2 has served us faithfully for some time now, the evolution of our - network in terms of technical and physical complexity has caused us to - consider more efficient and functional ways to pack mail. - - It should be made clear that with the exception of the Capability Word, - Capability Word Validation Copy, ProductCode(hi), and Revision(minor), - which are proposed extensions to the Type-2 packet header, this FSC is - an attempt to correctly document existing practices with regards to the - insertion of zone and point info by at least three mail processors in - use today. - - - The Type-2 Header (Where's the Zone?) - ------------------------------------- - Although FTS-0001 has recently been updated to reflect the use of some of - the areas in the packed message header for zone data, at least two other - methods for inserting the zone information have been adopted, making it - necessary to provide support for both formats in all of the zone aware mail - processors. The end result is more code, and redundant information in the - packet header. - - This has presented a problem in logistics, as it is difficult to consider - the project of updating mail processors using one type to use the other. - As sufficient indentification is provided, in the form of the product code, - to determine the expected location of the zone information, and because - code already exists in most of the mail processors to overcome this, this - proposal does not attempt to suggest that one method be used over the - other, rather the intent is to attempt to document the extensions in use, - and the products involved. - - See the accompanying chart and cross-reference. - - - The Product Code - ---------------- - Based upon the current rate of requests for product codes from the FTSC, - it is probable that the Product Code byte will not be large enough to - accomodate all of the codes required. While it is not reasonable to - expect that all Type-2 processors will eventually check the hi-order byte - proposed here, it is likely that 'current' mail processors will. This - can be nothing but benefical, as it will force users to upgrade their - mail processors to a product which will as a minimum, support Type-2 - with Zone and Point extensions, and quite possibly, processors that will - utilize more advanced mail packing techniques, making Type-2 extinct once - and for all. - - - The Capability Word (How do we GET there from here?) - ----------------------------------------------------- - Everybody would like to see more efficient and functional ways to pack and - exchange mail. Several Type-3 message bundle proposals exist, but none - really address a problem which must be solved first. The problem is that - since FidoNet is a hobbyist network, no demands can be placed on any one - sysop to upgrade or change their bundling software. Because of this, it - is necessary to consider strategies which allow for the existence of Type-2 - bundlers in the network topology. - - Considerable advantages can be realized, however, between systems that - consent to use advanced bundling techniques. One way to do this is to - simply send netmail to all of your connecting systems, saying "Hey, I've - got a Type-3 bundler now, how about you?" This could become quite - tiresome, and does not represent much of an improvement on the current - situation. - - What would be desirable is a network that would 'upgrade itself'. Given a - situation where mail processors of various capabilities will exist in a - network topology, the goal is to provide a mechanism whereby two links can - determine and utilize the most efficient bundling method to use, in a - manner transparent to the sysop. - - For instance, let's say that the FTSC releases the Type-7 All New Singing - and Dancing bundle format. Well, your current version of SlingToss can - only support Types 2, 3, and 5. One of your downlinks gets a new version - of MailMangle which can support Types 2, 3, 4, and 7. Well, it is quite - obvious that since you and he are exchanging 4 megs of mail each night, - and it's an overseas call, that it would be in your interest to obtain a - new version of SlingToss which can support Type 7. - - Note that this is *optional*. Because both processors can support Type-3, - they will continue to exchange Type-3 mail quite happily, even though - MailMangle is happily advertising the availability of Type-7. Even your - downlinks which are still using stone-age Type-2 processors will be fine, - as SlingToss will always export Type-2 bundles when no higher capability - can be determined. - - So, after dashing off the check to the author, your new version of - SlingToss comes in the mail! You rush over to your system, and install it. - The next time SlingToss exports mail to the MailMangle system, it says - "Hey! I can now support Type 2, 3, 5, and 7! So, whattya got?" This is - no skin off MailMangle's nose, he's had Type-7 for quite a while, and he - begins to export Type-7 bundles to SlingToss. "It's about time.", he says. - - Now, this scenario is made possible by implementing a 'Capability Word' in - the present and future packet headers. The Capability Update mechanism - depends on several assumptions: - - 1) Any Advanced Capability Bundler *MUST* be capable of receiving and - faithfully processing Type-2 bundles. Hopefully, the inbound packets - will be in the new format proposed by this document, but then again, - this is not an exact science. What this means is that it is likely - that some packets may arrive with the Capability Word (CW) set to 0. - In this case, Type-2 is assumed, assuring compatibility. The only - caveat is that it is conceivable that some obscure mail processor - uses the location proposed for the CW for other arcane purposes. This -| can detected through the CWValidation Copy, which is byte-swapped and -| compared with the CW at that time. If a mismatch is found, a CW of -| type 0 is assumed, and a Type-2 bundling method is used. - - 2) An Advanced Capability Bundler, hereafter referred to as a Type-N - Bundler, must have a method to store and maintain the node-by-node - capability information. This can be done many ways, and in fact - several processors already have begun to maintain node information - outside of that found in AREAS.BBS, mostly to implement pre-arranged - alternate compression methods. In a text configuration file, you - might see the following: - - ; Address Comp Send LastCW ; Comments - Node 1:260/340 ZIP Auto 7 ; Auto detect & upgrade - Node 1:135/20 LZH 3 2,3,7 ; Always send Type-3 - Node 1: ARC 2 0 ; Stone-Age processor - Node 1:135/4 --- Auto 7 ; Sent me netmail - Node 1: --- 0 0 ; Don't send CW - - In this example, the fields are: - - Address - downlink address. Note that this is not necessarily - relative to echomail, only, it is possible to append - information to the node database as netmail packets are - receieved from different addresses. - - Comp - desired mail compression method. - - Send - Auto - automatically determined maximum common packing - method to use. Automatically update to LastCW - when packing. - - LastCW - Last CW received from remote system. - - - 3) A Type-N Bundle will always advertise it's capabilities in the CW - regardless of the type being sent. As shown in the above example, - it allows Type-N processors to automatically track the capability - of your system. Again, in cases where a stone-age processor is - being used, this field will be ignored, and in the unusual event - that it is not ignored, and is somehow harmful to the far system, - the Type-N processor can be configured to send a CW of 0. - - The format of the Capability Word is designed to support up to 15 future - bundle types, and is bit-mapped to facilitate the easy determination of - the maximum common level supported between two nodes: - - msb Capability Word lsb - Node Supports ------------FTSC Type Supported---------------- - - U 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 - - 2, 3, and 7 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 - 2, 3, and 5 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 - 2 (this FSC) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - Stone Age** 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - ^ - +--- Indicates UseNet RFC-822 capability - - ** - a mismatch in the CWValidation Copy also - produces a CW=0. - - In this example, the Type-N bundler would first compare the remote CW -| and the byte-swapped remote CWValidation Copy, and check for a mismatch. - Prior to the compare, the MSB of the CW's are masked, as this bit is - reserved to indicate whether the mail processor is capable of also - accepting UseNet RFC-822 bundles. Following the MSB mask, and bit - comparison, if they do not match, a remote CW of 0 is assumed. If they - match, the Type-N processor would AND the local and remote CW words, - obtaining a CW expressing the Types which are in common to both systems. - The most significant Type will be used, by default, but note that this - assumes that new bundling Types will be increasingly more efficient or - in some way more beneficial. - - Because this may not always be the case, there should be a method provided, - as illustrated above, to override the automatic upgrade should this become - the case. - - The MSB of the CW is used to indicate whether the mail processor can accept - UseNet RFC-822 bundles or not. It is a separate indicator, and not intended - to be used as a part of the above comparison, however can be used to also - advertise RFC-822 capability to other systems. Since RFC-822 is 'set in - stone', there is no need to assign more than one capability bit. - - It might seem somewhat limiting to only consider the possibility of 15 - different future bundling methods, but it is my opinion that the careful - use of a 'Sub-Type' byte in the packet header can allow for the variations - on a single theme, and that proposals for new formats should be evaluated - by the FTSC to determine whether sufficient benefit can be realized in - the implementation of the given format, prior to assigning a new type - code. - - - Mailers - ------- - It is quite clear to me that should this concept take hold, that the - logical place to store node capability data is in the local nodelist - database, or an index-associated data file. As above, it is necessary - to generate Type-2 packets for whatever purpose, unless it is known - by prior association, that the far mailer can accept other types of - packets. It is also quite reasonable to assume that a nodelist flag - could be assigned to advertise the CW for a given node, which the - native mailer nodelist compiler could then immediately determine the - preferred bundling method for any given node in FidoNet. - - Another possibility would be to pass a capability advertisement in the - extensible portion of a handshake protocol, which may or may not already - exist in FidoNet. - - The approach suggested previously in this document suggests the use of - a text configuration file, but it is quite obvious that many benefits - can be realized through the use of the nodelist, including the use of - additional flags to indicate the preferred compression method, etc. - - - Summary - ------- - This document has been created in an attempt to define a method to allow - the future expansion and enhancement of FidoNet technology mail processors - and mailers, and in a way that is the least disruptive to existing mail - operations. The intent is to provide for an environment that is as open, - and extensible as possible. - - The mechanism described should allow many different types of processors - (FTSC-registered) to exist in the network at once, and to provide an - environment which is designed to operate at it's maximum efficiency - wherever possible or practical. - - Revision 2 of this document was produced to implement suggestions made - primarily by Jan Vroonhof, who suggested the use of the CW Validation - Copy. Jan presented this idea in his FSC-0048, along with other concepts - relating to the correct indentification and handling of zone and point - addressing. This document sanctions the improvements to the CW as - recommended, but does not address or support the other extensions - recommended in FSC-0048. - - - Thanks - ------ - To Ward Christensen, creator of XModem and BYE. - - Tom Jennings, who started this whole mess. - - Joaquim Homrighausen, for lots of good ideas, and motivation. Here's - another Lamborghini to work on. - - Wynn Wagner, Oliver McDonald, Roeland Meyer, Andrew Farmer, Claude - Warren, Jan Vroonhof, Bob Hartman, and Vince Perriello, who all - contributed in some way to the creation of this document, mostly - through their messages in NET_DEV. - - - - Type-2 Packet Format (proposed, but currently in use) - ----------------------------------------------------- - Field Ofs Siz Type Description Expected value(s) - ------- --- --- ---- -------------------------- ----------------- - OrgNode 0x0 2 Word Origination node address 0-65535 - DstNode 2 2 Word Destination node address 1-65535 - Year 4 2 Int Year packet generated 19??-2??? - Month 6 2 Int Month " " 0-11 (0=Jan) - Day 8 2 Int Day " " 1-31 - Hour A 2 Int Hour " " 0-23 - Min C 2 Int Minute " " 0-59 - Sec E 2 Int Second " " 0-59 - Baud 10 2 Int Baud Rate (not in use) ???? - PktVer 12 2 Int Packet Version Always 2 - OrgNet 14 2 Word Origination net address 1-65535 - DstNet 16 2 Word Destination net address 1-65535 - PrdCodL 18 1 Byte FTSC Product Code (lo) 1-255 - * PVMajor 19 1 Byte FTSC Product Rev (major) 1-255 - Password 1A 8 Char Packet password A-Z,0-9 - * QOrgZone 22 2 Int Orig Zone (ZMailQ,QMail) 1-65535 - * QDstZone 24 2 Int Dest Zone (ZMailQ,QMail) 1-65535 - Filler 26 2 Byte Spare Change ? -| * CapValid 28 2 Word CW Byte-Swapped Valid Copy BitField - * PrdCodH 2A 1 Byte FTSC Product Code (hi) 1-255 - * PVMinor 2B 1 Byte FTSC Product Rev (minor) 1-255 - * CapWord 2C 2 Word Capability Word BitField - * OrigZone 2E 2 Int Origination Zone 1-65535 - * DestZone 30 2 Int Destination Zone 1-65535 - * OrigPoint 32 2 Int Origination Point 1-65535 - * DestPoint 34 2 Int Destination Point 1-65535 - * ProdData 36 4 Long Product-specific data Whatever - PktTerm 3A 2 Word Packet terminator 0000 - - * - extensions to FTS-0001 - - Ofs, Siz are in hex, other values are decimal. - - - Zone/Point Aware Mail Processors (probably a partial list) - ---------------------------------------------------------- - Prod - Code Name - Uses QOrg/QDstZone Orig/DestZone Orig/DestPoint - ---- ----------- ------------- ------------- -------------- - 0x0C FrontDoor Reads/Updates Yes Yes - 0x1A DBridge ????? Yes Yes - 0x45 XRS Reads/Updates Yes Yes - 0x29 QMail Yes ????? Not point-aware - 0x35 ZMailQ Yes ????? Not point-aware - 0x3F TosScan Reads/Updates Yes Yes - - - - - -- - Go Back - - - - + + + +
+Document: FSC-0039 +Version: 04 +Date: 29-Sep-90 + + + A Type-2 Packet Extension Proposal + Mark A. Howard 1:260/340@FidoNet + + Status of this document: + ------------------------ + This FSC suggests a proposed protocol for the FidoNet(r) community, + and requests discussion and suggestions for improvements. Distribution + of this document is unlimited. + + Fido and FidoNet are registered marks of Tom Jennings and Fido Software. + FTS-0001 is a copyrighted work of Randy Bush. + + Introduction + ------------ + This document serves two major purposes. The first is an attempt to define + and document the Type-2 packet which is widely in use in FidoNet today. + Although FTS-0001 defines the structure of a Type-2 packet, the natural + evolution of our network, mostly with regards to addressing methodology, + has made it necessary to utilize hitherto unused portions of the header + to insert Zone and Point information. Also, it has become apparent that + some of the existing fields are not large enough to accomplish their + original tasks. + + The second is to propose a simple mechanism to allow FidoNet to begin to + utilize advanced mail packing techniques. It is quite apparent that while + Type-2 has served us faithfully for some time now, the evolution of our + network in terms of technical and physical complexity has caused us to + consider more efficient and functional ways to pack mail. + + It should be made clear that with the exception of the Capability Word, + Capability Word Validation Copy, ProductCode(hi), and Revision(minor), + which are proposed extensions to the Type-2 packet header, this FSC is + an attempt to correctly document existing practices with regards to the + insertion of zone and point info by at least three mail processors in + use today. + + + The Type-2 Header (Where's the Zone?) + ------------------------------------- + Although FTS-0001 has recently been updated to reflect the use of some of + the areas in the packed message header for zone data, at least two other + methods for inserting the zone information have been adopted, making it + necessary to provide support for both formats in all of the zone aware mail + processors. The end result is more code, and redundant information in the + packet header. + + This has presented a problem in logistics, as it is difficult to consider + the project of updating mail processors using one type to use the other. + As sufficient indentification is provided, in the form of the product code, + to determine the expected location of the zone information, and because + code already exists in most of the mail processors to overcome this, this + proposal does not attempt to suggest that one method be used over the + other, rather the intent is to attempt to document the extensions in use, + and the products involved. + + See the accompanying chart and cross-reference. + + + The Product Code + ---------------- + Based upon the current rate of requests for product codes from the FTSC, + it is probable that the Product Code byte will not be large enough to + accomodate all of the codes required. While it is not reasonable to + expect that all Type-2 processors will eventually check the hi-order byte + proposed here, it is likely that 'current' mail processors will. This + can be nothing but benefical, as it will force users to upgrade their + mail processors to a product which will as a minimum, support Type-2 + with Zone and Point extensions, and quite possibly, processors that will + utilize more advanced mail packing techniques, making Type-2 extinct once + and for all. + + + The Capability Word (How do we GET there from here?) + ----------------------------------------------------- + Everybody would like to see more efficient and functional ways to pack and + exchange mail. Several Type-3 message bundle proposals exist, but none + really address a problem which must be solved first. The problem is that + since FidoNet is a hobbyist network, no demands can be placed on any one + sysop to upgrade or change their bundling software. Because of this, it + is necessary to consider strategies which allow for the existence of Type-2 + bundlers in the network topology. + + Considerable advantages can be realized, however, between systems that + consent to use advanced bundling techniques. One way to do this is to + simply send netmail to all of your connecting systems, saying "Hey, I've + got a Type-3 bundler now, how about you?" This could become quite + tiresome, and does not represent much of an improvement on the current + situation. + + What would be desirable is a network that would 'upgrade itself'. Given a + situation where mail processors of various capabilities will exist in a + network topology, the goal is to provide a mechanism whereby two links can + determine and utilize the most efficient bundling method to use, in a + manner transparent to the sysop. + + For instance, let's say that the FTSC releases the Type-7 All New Singing + and Dancing bundle format. Well, your current version of SlingToss can + only support Types 2, 3, and 5. One of your downlinks gets a new version + of MailMangle which can support Types 2, 3, 4, and 7. Well, it is quite + obvious that since you and he are exchanging 4 megs of mail each night, + and it's an overseas call, that it would be in your interest to obtain a + new version of SlingToss which can support Type 7. + + Note that this is *optional*. Because both processors can support Type-3, + they will continue to exchange Type-3 mail quite happily, even though + MailMangle is happily advertising the availability of Type-7. Even your + downlinks which are still using stone-age Type-2 processors will be fine, + as SlingToss will always export Type-2 bundles when no higher capability + can be determined. + + So, after dashing off the check to the author, your new version of + SlingToss comes in the mail! You rush over to your system, and install it. + The next time SlingToss exports mail to the MailMangle system, it says + "Hey! I can now support Type 2, 3, 5, and 7! So, whattya got?" This is + no skin off MailMangle's nose, he's had Type-7 for quite a while, and he + begins to export Type-7 bundles to SlingToss. "It's about time.", he says. + + Now, this scenario is made possible by implementing a 'Capability Word' in + the present and future packet headers. The Capability Update mechanism + depends on several assumptions: + + 1) Any Advanced Capability Bundler *MUST* be capable of receiving and + faithfully processing Type-2 bundles. Hopefully, the inbound packets + will be in the new format proposed by this document, but then again, + this is not an exact science. What this means is that it is likely + that some packets may arrive with the Capability Word (CW) set to 0. + In this case, Type-2 is assumed, assuring compatibility. The only + caveat is that it is conceivable that some obscure mail processor + uses the location proposed for the CW for other arcane purposes. This +| can detected through the CWValidation Copy, which is byte-swapped and +| compared with the CW at that time. If a mismatch is found, a CW of +| type 0 is assumed, and a Type-2 bundling method is used. + + 2) An Advanced Capability Bundler, hereafter referred to as a Type-N + Bundler, must have a method to store and maintain the node-by-node + capability information. This can be done many ways, and in fact + several processors already have begun to maintain node information + outside of that found in AREAS.BBS, mostly to implement pre-arranged + alternate compression methods. In a text configuration file, you + might see the following: + + ; Address Comp Send LastCW ; Comments + Node 1:260/340 ZIP Auto 7 ; Auto detect & upgrade + Node 1:135/20 LZH 3 2,3,7 ; Always send Type-3 + Node 1: ARC 2 0 ; Stone-Age processor + Node 1:135/4 --- Auto 7 ; Sent me netmail + Node 1: --- 0 0 ; Don't send CW + + In this example, the fields are: + + Address - downlink address. Note that this is not necessarily + relative to echomail, only, it is possible to append + information to the node database as netmail packets are + receieved from different addresses. + + Comp - desired mail compression method. + + Send - Auto - automatically determined maximum common packing + method to use. Automatically update to LastCW + when packing. + + LastCW - Last CW received from remote system. + + + 3) A Type-N Bundle will always advertise it's capabilities in the CW + regardless of the type being sent. As shown in the above example, + it allows Type-N processors to automatically track the capability + of your system. Again, in cases where a stone-age processor is + being used, this field will be ignored, and in the unusual event + that it is not ignored, and is somehow harmful to the far system, + the Type-N processor can be configured to send a CW of 0. + + The format of the Capability Word is designed to support up to 15 future + bundle types, and is bit-mapped to facilitate the easy determination of + the maximum common level supported between two nodes: + + msb Capability Word lsb + Node Supports ------------FTSC Type Supported---------------- + + U 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 + + 2, 3, and 7 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 + 2, 3, and 5 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 + 2 (this FSC) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 + Stone Age** 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + ^ + +--- Indicates UseNet RFC-822 capability + + ** - a mismatch in the CWValidation Copy also + produces a CW=0. + + In this example, the Type-N bundler would first compare the remote CW +| and the byte-swapped remote CWValidation Copy, and check for a mismatch. + Prior to the compare, the MSB of the CW's are masked, as this bit is + reserved to indicate whether the mail processor is capable of also + accepting UseNet RFC-822 bundles. Following the MSB mask, and bit + comparison, if they do not match, a remote CW of 0 is assumed. If they + match, the Type-N processor would AND the local and remote CW words, + obtaining a CW expressing the Types which are in common to both systems. + The most significant Type will be used, by default, but note that this + assumes that new bundling Types will be increasingly more efficient or + in some way more beneficial. + + Because this may not always be the case, there should be a method provided, + as illustrated above, to override the automatic upgrade should this become + the case. + + The MSB of the CW is used to indicate whether the mail processor can accept + UseNet RFC-822 bundles or not. It is a separate indicator, and not intended + to be used as a part of the above comparison, however can be used to also + advertise RFC-822 capability to other systems. Since RFC-822 is 'set in + stone', there is no need to assign more than one capability bit. + + It might seem somewhat limiting to only consider the possibility of 15 + different future bundling methods, but it is my opinion that the careful + use of a 'Sub-Type' byte in the packet header can allow for the variations + on a single theme, and that proposals for new formats should be evaluated + by the FTSC to determine whether sufficient benefit can be realized in + the implementation of the given format, prior to assigning a new type + code. + + + Mailers + ------- + It is quite clear to me that should this concept take hold, that the + logical place to store node capability data is in the local nodelist + database, or an index-associated data file. As above, it is necessary + to generate Type-2 packets for whatever purpose, unless it is known + by prior association, that the far mailer can accept other types of + packets. It is also quite reasonable to assume that a nodelist flag + could be assigned to advertise the CW for a given node, which the + native mailer nodelist compiler could then immediately determine the + preferred bundling method for any given node in FidoNet. + + Another possibility would be to pass a capability advertisement in the + extensible portion of a handshake protocol, which may or may not already + exist in FidoNet. + + The approach suggested previously in this document suggests the use of + a text configuration file, but it is quite obvious that many benefits + can be realized through the use of the nodelist, including the use of + additional flags to indicate the preferred compression method, etc. + + + Summary + ------- + This document has been created in an attempt to define a method to allow + the future expansion and enhancement of FidoNet technology mail processors + and mailers, and in a way that is the least disruptive to existing mail + operations. The intent is to provide for an environment that is as open, + and extensible as possible. + + The mechanism described should allow many different types of processors + (FTSC-registered) to exist in the network at once, and to provide an + environment which is designed to operate at it's maximum efficiency + wherever possible or practical. + + Revision 2 of this document was produced to implement suggestions made + primarily by Jan Vroonhof, who suggested the use of the CW Validation + Copy. Jan presented this idea in his FSC-0048, along with other concepts + relating to the correct indentification and handling of zone and point + addressing. This document sanctions the improvements to the CW as + recommended, but does not address or support the other extensions + recommended in FSC-0048. + + + Thanks + ------ + To Ward Christensen, creator of XModem and BYE. + + Tom Jennings, who started this whole mess. + + Joaquim Homrighausen, for lots of good ideas, and motivation. Here's + another Lamborghini to work on. + + Wynn Wagner, Oliver McDonald, Roeland Meyer, Andrew Farmer, Claude + Warren, Jan Vroonhof, Bob Hartman, and Vince Perriello, who all + contributed in some way to the creation of this document, mostly + through their messages in NET_DEV. + + + + Type-2 Packet Format (proposed, but currently in use) + ----------------------------------------------------- + Field Ofs Siz Type Description Expected value(s) + ------- --- --- ---- -------------------------- ----------------- + OrgNode 0x0 2 Word Origination node address 0-65535 + DstNode 2 2 Word Destination node address 1-65535 + Year 4 2 Int Year packet generated 19??-2??? + Month 6 2 Int Month " " 0-11 (0=Jan) + Day 8 2 Int Day " " 1-31 + Hour A 2 Int Hour " " 0-23 + Min C 2 Int Minute " " 0-59 + Sec E 2 Int Second " " 0-59 + Baud 10 2 Int Baud Rate (not in use) ???? + PktVer 12 2 Int Packet Version Always 2 + OrgNet 14 2 Word Origination net address 1-65535 + DstNet 16 2 Word Destination net address 1-65535 + PrdCodL 18 1 Byte FTSC Product Code (lo) 1-255 + * PVMajor 19 1 Byte FTSC Product Rev (major) 1-255 + Password 1A 8 Char Packet password A-Z,0-9 + * QOrgZone 22 2 Int Orig Zone (ZMailQ,QMail) 1-65535 + * QDstZone 24 2 Int Dest Zone (ZMailQ,QMail) 1-65535 + Filler 26 2 Byte Spare Change ? +| * CapValid 28 2 Word CW Byte-Swapped Valid Copy BitField + * PrdCodH 2A 1 Byte FTSC Product Code (hi) 1-255 + * PVMinor 2B 1 Byte FTSC Product Rev (minor) 1-255 + * CapWord 2C 2 Word Capability Word BitField + * OrigZone 2E 2 Int Origination Zone 1-65535 + * DestZone 30 2 Int Destination Zone 1-65535 + * OrigPoint 32 2 Int Origination Point 1-65535 + * DestPoint 34 2 Int Destination Point 1-65535 + * ProdData 36 4 Long Product-specific data Whatever + PktTerm 3A 2 Word Packet terminator 0000 + + * - extensions to FTS-0001 + + Ofs, Siz are in hex, other values are decimal. + + + Zone/Point Aware Mail Processors (probably a partial list) + ---------------------------------------------------------- + Prod + Code Name - Uses QOrg/QDstZone Orig/DestZone Orig/DestPoint + ---- ----------- ------------- ------------- -------------- + 0x0C FrontDoor Reads/Updates Yes Yes + 0x1A DBridge ????? Yes Yes + 0x45 XRS Reads/Updates Yes Yes + 0x29 QMail Yes ????? Not point-aware + 0x35 ZMailQ Yes ????? Not point-aware + 0x3F TosScan Reads/Updates Yes Yes + + + + + ++ +Go Back + + + + diff --git a/html/ftsc/fsc-0046.html b/html/ftsc/fsc-0046.html index 09688a5d..242cc3c6 100755 --- a/html/ftsc/fsc-0046.html +++ b/html/ftsc/fsc-0046.html @@ -1,227 +1,228 @@ - - -
-Document: FSC-0046 -Version: 005 -Date: 30-Aug-94 - - - - - - - - - A Product Idenfifier for FidoNet Message Handlers - - Joaquim Homrighausen - 2:270/17@fidonet or joho@abs.lu - - August 30, 1994 - - Copyright 1994 Joaquim Homrighausen; All rights reserved. - - - -Status of this document: - - This FSC suggests a proposed protocol for the FidoNet(r) community, - and requests discussion and suggestions for improvements. - Distribution of this document is unlimited. - - Fido and FidoNet are registered marks of Tom Jennings and Fido - Software. - - - Purpose - - This document should serve as a guide for the product identfier, PID - hereafter, format for FidoNet message handlers. The purpose behind PIDs - is related to my attempt to remove the requirement of Origin lines in - conference mail messages. - - While I fully understand that this won't happen in all conferences, I - would like to provide the facility to those who can use it (i.e. for - conferences where all the participants are using software that supports - messages without origin lines). - - Another use for PIDs is to minimize the excessive amount of information - some programs put on the tear lines which increases overall - transportation cost and time of conference mail. - - - PID - - A PID replaces the program identifier often seen on the tear line of - conference mail messages and is hidden behind a ^A (ASCII SOH, 01h). - This also allows for better tracking of software causing problems in - conferences. - -: Only one PID per message is allowed and should only be added by the -: program that creates the message. I.e. programs passing the message on -: to someone else may not add additional PIDs. If a PID is added, no -: program information may be present after the tear line. - - A PID also offers the ability to add serial numbers to identify a - specific copy of a program as being the source of a message with little - or no effort. - - - Format - - ^APID:-[ ] - - - Sample - - ^APID: FM 2.11.b - - Would identify FrontDoor's editor, beta version 2.11 and replace: - - --- FM 2.11 (beta) - - - Fields - - pID The ID of the product responsible for creating the message. - This should be kept as short as possible. The maximum - length for this field is 10 characters. - - version The version of the product including any alpha, beta, or - gamma status. Only the relevant part of the version should - be included. I.e. 1.00 should be expressed as 1, 1.10 as - 1.1 and 1.01 as 1.01. Alpha, beta, or gamma status should - be expressed by appending a / or . followed by a, b, or g - and optionally a revision indicator, such as a1, b2, etc. - The maximum length for this field is 10 characters. - - serial# The serial number of the product, omitted if irrelevant - or zero. The maximum length for this field is ten (10) - characters. - - - TID - - TIDs or "Tosser IDs" started to appear shortly after the first - revision of this document was released. They are added by Conference - Mail ("EchoMail") processors when a message is exported from the - local message base and injected into the network distribution scope - for a conference. - - When a Conference Mail processor adds a TID to a message, it may not - add a PID. An existing TID should, however, be replaced. TIDs follow - the same format used for PIDs, as explained above. - - - List of products - - The accompanying file, PIDLIST.TXT, is a list of products known to - support the PID proposal. Software authors are encouraged to inform - the author of this document of changes and additions to this list. - - --- end of file "fsc-0046.005" --- -
-Document: PIDLIST.TXT (FSC-0046) -Date: 30-Aug-94 - - - - A list of used product idenfifiers - - Joaquim Homrighausen - 2:270/17@fidonet or joho@abs.lu - - - -Product identifiers - -Product Version ID Author ------------------------------------------------------------------------------ -!!MessageBase 1.6+ !!MB Holger Lembke 2:240/500.20 -Alert 2.1+ Alert Richard Kail 2:310/25.2 -ANet 921213+ ANet Thomas Ekstroem 2:201/411 -ArcMail RISC OS 1.04+ AM Philip Blundell 2:440/34.4 -Artmail Mailer System 1.00+ ART Klaus Landefeld 2:247/402 -Auto Message Taker 1.00+ AMT Patrik Torstensson n/a -AVALON 3.10+ AVALON Stephan Slabihoud 2:2401/103.6 -CrossPoint 2.10+ XP Peter Mandrella 2:243/97.80 -EchoSprint 1.02+ ES Ben Elliston 3:620/262 -Enhanced Mail MAnager .01+ EMMA Johan Zwiekhorst 2:292/118 -Enhanced Message EDitor .02+ EMED Johan Zwiekhorst 2:292/118 -EZMail .67+ EZMail Torben Paving 2:234/41 -F_POINT 1.1+ F_POINT Florian Rupp 2:248/107.2 -FastEcho 1.21a+ FastEcho Tobias Burchhardt 2:245/39 -FileScan 1.5+ FileScan Matthias Duesterhoeft 2:241/4513 -Freqit (Windows) 1.0+ FIW Marvin Hart 1:106/462 -Freqit (MS-DOS) 1.0+ FID Marvin Hart 1:106/462 -FrontDoor APX 1.00+ FDAPX Joaquim Homrighausen 2:270/17 -FrontDoor (Editor) 2.00+ FM Joaquim Homrighausen 2:270/17 -FrontDoor (Mailer) 2.00+ FD Joaquim Homrighausen 2:270/17 -FrontEnd FX 1.00+ FEFX Eric Theriault 1:132/220 -GEcho 1.00+ GE Gerard van der Land 2:2802/110 -GeeMail 2.00+ GeeMail Lech Szychowski 2:480/4.7 -HbToSca 1.00+ HTS Jani Laatikainen 2:220/150 -HyperBBS 2.00+ HyperBBS Jani Laatikainen 2:220/150 -JetMail 1.00+ JetMail Daniel Roesen 2:243/93.8 -LazyBBS .5+ LazyBBS Franck Arnaud 2:320/100 -Mail FX 1.00+ MFX Eric Theriault 1:132/220 -MsgTrack 3.20+ MT Andrew Farmer 1:243/1 -NewsFlash 1.01+ NwF Chris Lueders 2:2402/330 -NodeDiff Processor 3.00+ NDP Serge Vikulov 2:5080/5 -Notify 2.1 Notify Frank Schuhardt 2:247/160 -OFFFax 3.03 OFFFax Frank Schuhardt 2:247/160 -Pobble 0.15+ Pobble Josh Parsons 3:771/340 -QBBed 2.64+ qbbed Werner Berghofer 2:310/90.100 -RemoteAccess 1.10+ RA Andrew Milner 2:270/18 -RASS 1.00+ RASS Yossi Gottlieb 2:403/139.75 -SendFile 1.00+ SendFile Mike Shoyher 2:5020/17.3 -Synchronet 1.00+ SYNC Rob Swindell 1:103/705 -TB-Edit 1.10+ TB-Edit Arjen Lentz 2:283/512 -TB-Mailer 1.97+ TB-Mailer Arjen Lentz 2:283/512 -TB-Point .10+ TB-Point Arjen Lentz 2:283/512 -TechBBS 1.00 TECHBBS Marcel Tegelaar 2:281/409 -TechMail 1.00 TECHMAIL Raymond van der Holst 2:281/409.2 -TosScan 1.10+ TosScan Joaquim Homrighausen 2:270/17 -TPCS .89b TPCS Krister Hansson-Renaud 2:201/201.7 - Mikael Kjellstrom 2:201/201.10 -XRobot 3.00+ XRobot Joaquim Homrighausen 2:270/17 -Xrs Alternative Packer 1.04+ XAP Jeroen Smulders 2:512/1.8 -ZeroToss 1.00 ZeroToss Jeff Masud 1:103/115 ------------------------------------------------------------------------------ - - -Product identifier registration - -Simply fill in the required information and send this form to the author of -this document via private netmail. - - Product: _________________________________________ - - Version: __________ - -PID info: _________________________________________ - - Author: _________________________________________ - - Address: ___________________________ (eMail address) - ---- end of file "pidlist.txt" --- -- - Go Back - - - - + + + +
+Document: FSC-0046 +Version: 005 +Date: 30-Aug-94 + + + + + + + + + A Product Idenfifier for FidoNet Message Handlers + + Joaquim Homrighausen + 2:270/17@fidonet or joho@abs.lu + + August 30, 1994 + + Copyright 1994 Joaquim Homrighausen; All rights reserved. + + + +Status of this document: + + This FSC suggests a proposed protocol for the FidoNet(r) community, + and requests discussion and suggestions for improvements. + Distribution of this document is unlimited. + + Fido and FidoNet are registered marks of Tom Jennings and Fido + Software. + + + Purpose + + This document should serve as a guide for the product identfier, PID + hereafter, format for FidoNet message handlers. The purpose behind PIDs + is related to my attempt to remove the requirement of Origin lines in + conference mail messages. + + While I fully understand that this won't happen in all conferences, I + would like to provide the facility to those who can use it (i.e. for + conferences where all the participants are using software that supports + messages without origin lines). + + Another use for PIDs is to minimize the excessive amount of information + some programs put on the tear lines which increases overall + transportation cost and time of conference mail. + + + PID + + A PID replaces the program identifier often seen on the tear line of + conference mail messages and is hidden behind a ^A (ASCII SOH, 01h). + This also allows for better tracking of software causing problems in + conferences. + +: Only one PID per message is allowed and should only be added by the +: program that creates the message. I.e. programs passing the message on +: to someone else may not add additional PIDs. If a PID is added, no +: program information may be present after the tear line. + + A PID also offers the ability to add serial numbers to identify a + specific copy of a program as being the source of a message with little + or no effort. + + + Format + + ^APID:+[ ] + + + Sample + + ^APID: FM 2.11.b + + Would identify FrontDoor's editor, beta version 2.11 and replace: + + --- FM 2.11 (beta) + + + Fields + + pID The ID of the product responsible for creating the message. + This should be kept as short as possible. The maximum + length for this field is 10 characters. + + version The version of the product including any alpha, beta, or + gamma status. Only the relevant part of the version should + be included. I.e. 1.00 should be expressed as 1, 1.10 as + 1.1 and 1.01 as 1.01. Alpha, beta, or gamma status should + be expressed by appending a / or . followed by a, b, or g + and optionally a revision indicator, such as a1, b2, etc. + The maximum length for this field is 10 characters. + + serial# The serial number of the product, omitted if irrelevant + or zero. The maximum length for this field is ten (10) + characters. + + + TID + + TIDs or "Tosser IDs" started to appear shortly after the first + revision of this document was released. They are added by Conference + Mail ("EchoMail") processors when a message is exported from the + local message base and injected into the network distribution scope + for a conference. + + When a Conference Mail processor adds a TID to a message, it may not + add a PID. An existing TID should, however, be replaced. TIDs follow + the same format used for PIDs, as explained above. + + + List of products + + The accompanying file, PIDLIST.TXT, is a list of products known to + support the PID proposal. Software authors are encouraged to inform + the author of this document of changes and additions to this list. + + --- end of file "fsc-0046.005" --- +
+Document: PIDLIST.TXT (FSC-0046) +Date: 30-Aug-94 + + + + A list of used product idenfifiers + + Joaquim Homrighausen + 2:270/17@fidonet or joho@abs.lu + + + +Product identifiers + +Product Version ID Author +----------------------------------------------------------------------------- +!!MessageBase 1.6+ !!MB Holger Lembke 2:240/500.20 +Alert 2.1+ Alert Richard Kail 2:310/25.2 +ANet 921213+ ANet Thomas Ekstroem 2:201/411 +ArcMail RISC OS 1.04+ AM Philip Blundell 2:440/34.4 +Artmail Mailer System 1.00+ ART Klaus Landefeld 2:247/402 +Auto Message Taker 1.00+ AMT Patrik Torstensson n/a +AVALON 3.10+ AVALON Stephan Slabihoud 2:2401/103.6 +CrossPoint 2.10+ XP Peter Mandrella 2:243/97.80 +EchoSprint 1.02+ ES Ben Elliston 3:620/262 +Enhanced Mail MAnager .01+ EMMA Johan Zwiekhorst 2:292/118 +Enhanced Message EDitor .02+ EMED Johan Zwiekhorst 2:292/118 +EZMail .67+ EZMail Torben Paving 2:234/41 +F_POINT 1.1+ F_POINT Florian Rupp 2:248/107.2 +FastEcho 1.21a+ FastEcho Tobias Burchhardt 2:245/39 +FileScan 1.5+ FileScan Matthias Duesterhoeft 2:241/4513 +Freqit (Windows) 1.0+ FIW Marvin Hart 1:106/462 +Freqit (MS-DOS) 1.0+ FID Marvin Hart 1:106/462 +FrontDoor APX 1.00+ FDAPX Joaquim Homrighausen 2:270/17 +FrontDoor (Editor) 2.00+ FM Joaquim Homrighausen 2:270/17 +FrontDoor (Mailer) 2.00+ FD Joaquim Homrighausen 2:270/17 +FrontEnd FX 1.00+ FEFX Eric Theriault 1:132/220 +GEcho 1.00+ GE Gerard van der Land 2:2802/110 +GeeMail 2.00+ GeeMail Lech Szychowski 2:480/4.7 +HbToSca 1.00+ HTS Jani Laatikainen 2:220/150 +HyperBBS 2.00+ HyperBBS Jani Laatikainen 2:220/150 +JetMail 1.00+ JetMail Daniel Roesen 2:243/93.8 +LazyBBS .5+ LazyBBS Franck Arnaud 2:320/100 +Mail FX 1.00+ MFX Eric Theriault 1:132/220 +MsgTrack 3.20+ MT Andrew Farmer 1:243/1 +NewsFlash 1.01+ NwF Chris Lueders 2:2402/330 +NodeDiff Processor 3.00+ NDP Serge Vikulov 2:5080/5 +Notify 2.1 Notify Frank Schuhardt 2:247/160 +OFFFax 3.03 OFFFax Frank Schuhardt 2:247/160 +Pobble 0.15+ Pobble Josh Parsons 3:771/340 +QBBed 2.64+ qbbed Werner Berghofer 2:310/90.100 +RemoteAccess 1.10+ RA Andrew Milner 2:270/18 +RASS 1.00+ RASS Yossi Gottlieb 2:403/139.75 +SendFile 1.00+ SendFile Mike Shoyher 2:5020/17.3 +Synchronet 1.00+ SYNC Rob Swindell 1:103/705 +TB-Edit 1.10+ TB-Edit Arjen Lentz 2:283/512 +TB-Mailer 1.97+ TB-Mailer Arjen Lentz 2:283/512 +TB-Point .10+ TB-Point Arjen Lentz 2:283/512 +TechBBS 1.00 TECHBBS Marcel Tegelaar 2:281/409 +TechMail 1.00 TECHMAIL Raymond van der Holst 2:281/409.2 +TosScan 1.10+ TosScan Joaquim Homrighausen 2:270/17 +TPCS .89b TPCS Krister Hansson-Renaud 2:201/201.7 + Mikael Kjellstrom 2:201/201.10 +XRobot 3.00+ XRobot Joaquim Homrighausen 2:270/17 +Xrs Alternative Packer 1.04+ XAP Jeroen Smulders 2:512/1.8 +ZeroToss 1.00 ZeroToss Jeff Masud 1:103/115 +----------------------------------------------------------------------------- + + +Product identifier registration + +Simply fill in the required information and send this form to the author of +this document via private netmail. + + Product: _________________________________________ + + Version: __________ + +PID info: _________________________________________ + + Author: _________________________________________ + + Address: ___________________________ (eMail address) + +--- end of file "pidlist.txt" --- ++ + Go Back + + + + diff --git a/html/ftsc/fsc-0048.html b/html/ftsc/fsc-0048.html index c43b8505..ae541cd0 100755 --- a/html/ftsc/fsc-0048.html +++ b/html/ftsc/fsc-0048.html @@ -1,417 +1,418 @@ - - -
-Document: FSC-0048 -Version: 002 -Date: 21-Oct-90 - - - - - - A Proposed Type-2 Packet Extension - Jan Vroonhof - 2:281/1.12@fidonet - Oct 21, 1990 - - - - - - Status of this document - ======================= - - This FSC suggests a proposed protocol for the FidoNet(r) - community, and requests discussion and suggestions for - improvements. Distribution of this document is unlimited. - - Fido and FidoNet are registered marks of Tom Jennings and Fido - Software. - - Purpose - ======= - - The final goal of this document is to become a widely used - standardised extension to FTS-0001, like FTS-0006, 0007 and - 0008 are, and provide an elegant way to switch to a new - bundling method without requiring major effort or breaking - anything. - - Prologue - ======== - - The main thing that needs stressing is that the additions - covered by this document are FULLY (I repeat FULLY) BACKWARDS - COMPATIBLE with FTS-0001 (and other existing standards and - practices in FidoNet and WhatEverOtherNets that I know of). - When I say "backwards compatible" I mean that problems it would - create already exist in the current FTS-0001 system (e.g. - zone conflicts when dealing with a non compliant system). In - short it only corrects some flaws in FTS-0001 WITHOUT - generating new ones. - - In this document I have tried to stay as much as possible on - the paths of existing practices. Therefore I think - implementation of the additions it proposes will not be too - hard. - -! Prologue to revision 2 -! ====================== - -! Revision 2 of this document reserves a bit in the -! CapabilityWord for one bundle type already in use outside of -! FidoNet, RFC-822. A small change was made to the "receiving" -! flowchart in order to ensure compatibility with FSC-0039.004. -! In the process a lot of errors and omissions in the spelling, -! credits etc. were corrected. - - =============== - -! All references in the following to FSC-0039 are to Revision 1 -! of that document. - - My thoughts on FSC-0039 and FTS-0001 rev 12 - =========================================== - - First, revision 12 of FTS-0001 introduced the term "(some - impls)" to indicate that some implementations used their own -! extensions to FTS-0001 (Note that in later revisions this was -! changed to "optional"). The problem is that this info cannot be - relied upon, because there is no way to actually validate the - data. One can only check whether the values of these fields are - in the range of valid values and hope for the best. - - Second, FSC-0039 introduced the idea of having a bitfield - (called the Capability Word) indicating whether extension data - was valid. Through the Capability Word, it also made it - possible to indicate the ability to support other, non type 2, - packets, thus allowing for flexible migration towards type 3. - It also documented the addressing extensions used by various - programs. - - However, FSC-0039 has two flaws: - - 1. One cannot be sure the bitfield is zero because other - implementations might use this field for their own purposes. - Therefore this document includes a second validation copy - for the Capability Word (CW hereafter). This copy allows the - FSC-xxxx compliant software to validate the CW by comparing - the two. The chance of some junk portraying itself as a CW - is significantly reduced by this. - -! Please note that the validation copy is byte swapped -! compared to the normal capability word. While this started -! out as a typo, I decided to leave it in as it introduces -! some extra safety, without requiring much extra code effort. -! In later revisions of FSC-0039, Mark adopted this idea of a -! validation copy too and eliminated the problem. - - 2. Although FSC-0039 provides a way to make packet headers 4D - it is not backwards compatible. It cannot be used in FTS- - 0001 sessions to unknown systems, making FidoNet still not - totally 4D capable. Although it implements fields for zone - and point number, an FTS-0001 compliant application is not - required to look at these fields. When a point mails using - these fields to implement its 4D address, a system only - looking at the net/node info, as is required by FTS-0001, - still sees it as a boss node, causing the obvious problems. - - This document provides a way for transparent point handling, - using a technique already exploited by many mailers - internally. It will allow this document to be implemented - and used by mailers not supporting it. At the same time the - danger that a point is seen as the boss node is eliminated. - - It does NOT provide full inter-zone backwards compatibility, - but that is not needed as badly, as problems are not yet too - great. Any measures to ensure backwards compatibility in - this area might harm communication with non-supporting - programs, when the old system could handle the situation. - - Packet Header - ============= - - The "|" character is used to indicate extensions documented in - FTS-0001 revision 12, the ":" character indicates those - documented here and in FSC-0039. - - Offset - dec hex - .-----------------------------------------------------. - 0 0 | origNode (low order) | origNode (high order) | - +--------------------------+--------------------------+ - 2 2 | destNode (low order) | destNode (high order) | - +--------------------------+--------------------------+ - 4 4 | year (low order) | year (high order) | - +--------------------------+--------------------------+ - 6 6 | month (low order) | month (high order) | - +--------------------------+--------------------------+ - 8 8 | day (low order) | day (high order) | - +--------------------------+--------------------------+ - 10 A | hour (low order) | hour (high order) | - +--------------------------+--------------------------+ - 12 C | minute (low order) | minute (high order) | - +--------------------------+--------------------------+ - 14 E | second (low order) | second (high order) | - +--------------------------+--------------------------+ - 16 10 | baud (low order) | baud (high order) | - +--------------------------+--------------------------+ - 18 12 | 0 | 2 | 0 | 0 | - +--------------------------+--------------------------+ - 20 14 | origNet (low order) | origNet (high order) | -: | Set to -1 if from point | - +--------------------------+--------------------------+ - 22 16 | destNet (low order) | destNet (high order) | - +--------------------------+--------------------------+ -| 24 18 | ProductCode (low order) | Revision (major) | -| +--------------------------+--------------------------+ -| 26 1A | password | -| | 8 bytes, null padded | -| +--------------------------+--------------------------+ -|: 34 22 | origZone (low order) | origZone (high order) | } -| +--------------------------+--------------------------+ } As in -|: 36 24 | destZone (low order) | destZone (high order) | } QMail -: +--------------------------+--------------------------+ -: 38 26 | AuxNet (low order) | AuxNet (high order) | -: +--------------------------+--------------------------+ -: 40 28 | CWvalidationCopy (high) | CWvalidationCopy (low) | -: +--------------------------+--------------------------+ -: 42 2A | ProductCode (high order) | Revision (minor) | -: +--------------------------+--------------------------+ -: 44 2C | CapabilWord (low order) | CapabilWord (high order) | -: +--------------------------+--------------------------+ -: 46 2E | origZone (low order) | origZone (high order) | } -: +--------------------------+--------------------------+ } As in -: 48 30 | destZone (low order) | destZone (high order) | } FD etc -: +--------------------------+--------------------------+ -: 50 32 | origPoint (low order) | origPoint (high order) | } -: +--------------------------+--------------------------+ } As in -: 52 34 | destPoint (low order) | destPoint (high order) | } FD etc -: +--------------------------+--------------------------+ -: 54 46 | Product Specific Data | -: + + -: | 4 Bytes | - +--------------------------+--------------------------+ - 58 3A | zero or more | - ~ packed ~ - | messages | - +--------------------------+--------------------------+ - | 0 | 0 | 0 | 0 | - '-----------------------------------------------------' - - Packet = PacketHeader { PakdMessage } 00H 00H - - PacketHeader = origNode (* of packet, not of messages in packet *) - destNode (* of packet, not of messages in packet *) - year (* of packet creation, e.g. 1986 *) - month (* of packet creation, 0-11 for Jan-Dec *) - day (* of packet creation, 1-31 *) - hour (* of packet creation, 0-23 *) - minute (* of packet creation, 0-59 *) - second (* of packet creation, 0-59 *) - baud (* max baud rate of orig and dest *) - PacketType (* old type-1 packets now obsolete *) - origNet (* of packet, not of messages in packet - set to -1 if orig=point *) - destNet (* of packet, not of messages in packet *) -+ productCode Lo (* 0 for Fido, write to FTSC for others *) -|+ serialNo Maj (* binary serial number (otherwise null) *) -| password (* session pasword (otherwise null) *) -| origZone (* zone of pkt sender (otherwise null) *) -| destZone (* zone of pkt receiver (otherwise null) *) -| auxNet (* contains Orignet if Origin is a point *) -+! Bytesw. CWvalidationCopy (* Must be equal to CW to be valid *) -+ ProductCode Hi -+ revision Minor -+ origZone (* zone of pkt sender (otherwise null) *) -+ destZone (* zone of pkt receiver (otherwise null) *) -+ ProdData (* Product specific filler *) - - When the two copies of the CW match they can be asumed to be - valid and used. - - Stone-Aged: Old FTS-0001 - Type-2+ : Old FTS-0001 plus changes indicated by "|" and ":" - are valid - - A Type-N Bundle will always advertise its capabilities in the - CW regardless of the type being sent. As shown in the example - below, the CW allows Type-N processors to automatically track - the capability of your system. Again, in cases where a stone- - age processor is being used, this field will be ignored, and in - the unusual event that it is not ignored, and is somehow - harmful to the far system, the Type-N processor can be - configured to send a CW of 0. - - The format of the Capability Word is designed to support up to - 15 future bundle types, and is bit-mapped to facilitate the - easy determination of the maximum common level supported - between two nodes: - - msb Capability Word lsb - Node Supports ------------FTSC Type Supported **)------------ - - U 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2+ - - 2+,3, and 7 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 - 2+,3, and 5 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 - 2+ (this Doc) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - Stone Age 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -! ^-- "U" Indicates nodes able to process RFC-822 -! bundles. - ** - In the example bit definitions only type 2, - and the Stone-Age type, are defined now. - The rest are to be concidered "reserved by - FTSC". - - The receiving Type-N bundler would AND the two words, obtaining - a word expressing the Types which are common to both the - receiving and the sending system. The most significant Type - will be used for future sessions, by default. Please note that - this assumes that new bundling Types will be increasingly more - efficient or in some way more beneficial. Because this may not - always be the case, there should be a method provided to - override the automatic upgrade, as illustrated above, should - this ever happen. - -! N.B. The one bit left over (Msb) is now used as indicator for -! RFC-822 type bundles. For info on RFC-822 please check out -! the relevant documents themselves. - -! For a more explanatory text on using the CW to its full -! potential, refer to the FSC-0039 text by Mark Howard. -! Mark also gives some more rationale for the origional idea -! of the CW. - - Generating Type-2+ bundles - ========================== - - Do we have a CW Does CW indicate - stored for dest? YES ----> higher packets YES ---> Generate higher - NO we support? packet - | NO - \|/ | - +-----<----------------------+ - | - Fill header with all info - | - \|/ - | - Are we sending from a point? (origPoint != 0) YES --+ - | | - NO | - | \|/ - | set AuxNet = OrigNet - \|/ set OrigNet = -1 - | | - +-----<----------------------------------------+ - | - Add Messages - | - Terminate packet - | - Send packet - - Receiving Type-2+ bundles - ========================= - - Receive Packet - | - Packettype = 2 NO -------------> Process Type-Other - YES - | - | - CWcopies match NO --------+------> Treat as normal Stone-Age packet - YES | | - | | | - Store CW /|\ | - | | /|\ - CW is 0 YES --------------+ | - NO | - | | - | | - CW indicates support for 2+ NO --+ - YES - | - | -! OrigPoint is not 0 and OrigNet = -1 YES -------+ - NO | - | \|/ -! \|/ Set OrigNet is AuxNet - | | - +------<-----------------------------------+ - | - Process using added info - - Credits - ======= - - To Mark Howard, for introducing the idea of a CW in his FSC- - 0039 document and quite rightly pointing out one big omision - in revision 1 of this document. - - To Rick Moore, for doing a good job in processing all these - revisions by Mark and myself, and for his work for the FTSC in - general. - - To Joaquim Homrighausen, for his contributions to FidoNet - software in general, and especially for his time devoted to - reading, discussing and implementing the ideas Mark and I - introduced. - - To Andre van de Wijdeven, for producing and letting me beta - test his TS-MM software, which in my opinion is the best point - software around. (I'm not saying available, because it isn't - :-() - - To john lots, for shipping this stuff to the US. - - To Jon Webb, for doing a much needed grammar and spelling - check. - - To Bob Hartman, Vince Periello, Tom Jennings, Eelco de Graaff, - aXel Horst, Arjen van Loon, jim nutt, Odinn Sorensen, David - Nugent, Peter Janssens and many others, for making FidoNet - what it is now, for me and for everybody. - - Epilog - ====== - - So this it, now it's up to you to decide whether or not to - implement it. A small change was made in the receivers - flowchart and a small incompatibility with the later revisions - of FSC-0039 was removed. That will ensure that FSC-0048 and - FSC-0039 mailers can happily talk to each other.... - - The best way to implement this would be to always support FSC- - 0048 on inbound trafic and generate FSC-0048 on outbound by - default. A switch on a per-node basis will force your software - to be FSC-0039 or even FSC-0001 only, and you will cover all - bases. - - This can be done easily, as FSC-0048 is a superset of FSC-0039 - (The -1 thing on points being the difference) which in turn is - a superset of FTS-0001 (CW). I'd be glad to get some feedback. - You can put it in NET_DEV or netmail me. - - Jan Vroonhof (2:281/1.12@fidonet) - -- - Go Back - - - - + + + +
+Document: FSC-0048 +Version: 002 +Date: 21-Oct-90 + + + + + + A Proposed Type-2 Packet Extension + Jan Vroonhof + 2:281/1.12@fidonet + Oct 21, 1990 + + + + + + Status of this document + ======================= + + This FSC suggests a proposed protocol for the FidoNet(r) + community, and requests discussion and suggestions for + improvements. Distribution of this document is unlimited. + + Fido and FidoNet are registered marks of Tom Jennings and Fido + Software. + + Purpose + ======= + + The final goal of this document is to become a widely used + standardised extension to FTS-0001, like FTS-0006, 0007 and + 0008 are, and provide an elegant way to switch to a new + bundling method without requiring major effort or breaking + anything. + + Prologue + ======== + + The main thing that needs stressing is that the additions + covered by this document are FULLY (I repeat FULLY) BACKWARDS + COMPATIBLE with FTS-0001 (and other existing standards and + practices in FidoNet and WhatEverOtherNets that I know of). + When I say "backwards compatible" I mean that problems it would + create already exist in the current FTS-0001 system (e.g. + zone conflicts when dealing with a non compliant system). In + short it only corrects some flaws in FTS-0001 WITHOUT + generating new ones. + + In this document I have tried to stay as much as possible on + the paths of existing practices. Therefore I think + implementation of the additions it proposes will not be too + hard. + +! Prologue to revision 2 +! ====================== + +! Revision 2 of this document reserves a bit in the +! CapabilityWord for one bundle type already in use outside of +! FidoNet, RFC-822. A small change was made to the "receiving" +! flowchart in order to ensure compatibility with FSC-0039.004. +! In the process a lot of errors and omissions in the spelling, +! credits etc. were corrected. + + =============== + +! All references in the following to FSC-0039 are to Revision 1 +! of that document. + + My thoughts on FSC-0039 and FTS-0001 rev 12 + =========================================== + + First, revision 12 of FTS-0001 introduced the term "(some + impls)" to indicate that some implementations used their own +! extensions to FTS-0001 (Note that in later revisions this was +! changed to "optional"). The problem is that this info cannot be + relied upon, because there is no way to actually validate the + data. One can only check whether the values of these fields are + in the range of valid values and hope for the best. + + Second, FSC-0039 introduced the idea of having a bitfield + (called the Capability Word) indicating whether extension data + was valid. Through the Capability Word, it also made it + possible to indicate the ability to support other, non type 2, + packets, thus allowing for flexible migration towards type 3. + It also documented the addressing extensions used by various + programs. + + However, FSC-0039 has two flaws: + + 1. One cannot be sure the bitfield is zero because other + implementations might use this field for their own purposes. + Therefore this document includes a second validation copy + for the Capability Word (CW hereafter). This copy allows the + FSC-xxxx compliant software to validate the CW by comparing + the two. The chance of some junk portraying itself as a CW + is significantly reduced by this. + +! Please note that the validation copy is byte swapped +! compared to the normal capability word. While this started +! out as a typo, I decided to leave it in as it introduces +! some extra safety, without requiring much extra code effort. +! In later revisions of FSC-0039, Mark adopted this idea of a +! validation copy too and eliminated the problem. + + 2. Although FSC-0039 provides a way to make packet headers 4D + it is not backwards compatible. It cannot be used in FTS- + 0001 sessions to unknown systems, making FidoNet still not + totally 4D capable. Although it implements fields for zone + and point number, an FTS-0001 compliant application is not + required to look at these fields. When a point mails using + these fields to implement its 4D address, a system only + looking at the net/node info, as is required by FTS-0001, + still sees it as a boss node, causing the obvious problems. + + This document provides a way for transparent point handling, + using a technique already exploited by many mailers + internally. It will allow this document to be implemented + and used by mailers not supporting it. At the same time the + danger that a point is seen as the boss node is eliminated. + + It does NOT provide full inter-zone backwards compatibility, + but that is not needed as badly, as problems are not yet too + great. Any measures to ensure backwards compatibility in + this area might harm communication with non-supporting + programs, when the old system could handle the situation. + + Packet Header + ============= + + The "|" character is used to indicate extensions documented in + FTS-0001 revision 12, the ":" character indicates those + documented here and in FSC-0039. + + Offset + dec hex + .-----------------------------------------------------. + 0 0 | origNode (low order) | origNode (high order) | + +--------------------------+--------------------------+ + 2 2 | destNode (low order) | destNode (high order) | + +--------------------------+--------------------------+ + 4 4 | year (low order) | year (high order) | + +--------------------------+--------------------------+ + 6 6 | month (low order) | month (high order) | + +--------------------------+--------------------------+ + 8 8 | day (low order) | day (high order) | + +--------------------------+--------------------------+ + 10 A | hour (low order) | hour (high order) | + +--------------------------+--------------------------+ + 12 C | minute (low order) | minute (high order) | + +--------------------------+--------------------------+ + 14 E | second (low order) | second (high order) | + +--------------------------+--------------------------+ + 16 10 | baud (low order) | baud (high order) | + +--------------------------+--------------------------+ + 18 12 | 0 | 2 | 0 | 0 | + +--------------------------+--------------------------+ + 20 14 | origNet (low order) | origNet (high order) | +: | Set to -1 if from point | + +--------------------------+--------------------------+ + 22 16 | destNet (low order) | destNet (high order) | + +--------------------------+--------------------------+ +| 24 18 | ProductCode (low order) | Revision (major) | +| +--------------------------+--------------------------+ +| 26 1A | password | +| | 8 bytes, null padded | +| +--------------------------+--------------------------+ +|: 34 22 | origZone (low order) | origZone (high order) | } +| +--------------------------+--------------------------+ } As in +|: 36 24 | destZone (low order) | destZone (high order) | } QMail +: +--------------------------+--------------------------+ +: 38 26 | AuxNet (low order) | AuxNet (high order) | +: +--------------------------+--------------------------+ +: 40 28 | CWvalidationCopy (high) | CWvalidationCopy (low) | +: +--------------------------+--------------------------+ +: 42 2A | ProductCode (high order) | Revision (minor) | +: +--------------------------+--------------------------+ +: 44 2C | CapabilWord (low order) | CapabilWord (high order) | +: +--------------------------+--------------------------+ +: 46 2E | origZone (low order) | origZone (high order) | } +: +--------------------------+--------------------------+ } As in +: 48 30 | destZone (low order) | destZone (high order) | } FD etc +: +--------------------------+--------------------------+ +: 50 32 | origPoint (low order) | origPoint (high order) | } +: +--------------------------+--------------------------+ } As in +: 52 34 | destPoint (low order) | destPoint (high order) | } FD etc +: +--------------------------+--------------------------+ +: 54 46 | Product Specific Data | +: + + +: | 4 Bytes | + +--------------------------+--------------------------+ + 58 3A | zero or more | + ~ packed ~ + | messages | + +--------------------------+--------------------------+ + | 0 | 0 | 0 | 0 | + '-----------------------------------------------------' + + Packet = PacketHeader { PakdMessage } 00H 00H + + PacketHeader = origNode (* of packet, not of messages in packet *) + destNode (* of packet, not of messages in packet *) + year (* of packet creation, e.g. 1986 *) + month (* of packet creation, 0-11 for Jan-Dec *) + day (* of packet creation, 1-31 *) + hour (* of packet creation, 0-23 *) + minute (* of packet creation, 0-59 *) + second (* of packet creation, 0-59 *) + baud (* max baud rate of orig and dest *) + PacketType (* old type-1 packets now obsolete *) + origNet (* of packet, not of messages in packet + set to -1 if orig=point *) + destNet (* of packet, not of messages in packet *) ++ productCode Lo (* 0 for Fido, write to FTSC for others *) +|+ serialNo Maj (* binary serial number (otherwise null) *) +| password (* session pasword (otherwise null) *) +| origZone (* zone of pkt sender (otherwise null) *) +| destZone (* zone of pkt receiver (otherwise null) *) +| auxNet (* contains Orignet if Origin is a point *) ++! Bytesw. CWvalidationCopy (* Must be equal to CW to be valid *) ++ ProductCode Hi ++ revision Minor ++ origZone (* zone of pkt sender (otherwise null) *) ++ destZone (* zone of pkt receiver (otherwise null) *) ++ ProdData (* Product specific filler *) + + When the two copies of the CW match they can be asumed to be + valid and used. + + Stone-Aged: Old FTS-0001 + Type-2+ : Old FTS-0001 plus changes indicated by "|" and ":" + are valid + + A Type-N Bundle will always advertise its capabilities in the + CW regardless of the type being sent. As shown in the example + below, the CW allows Type-N processors to automatically track + the capability of your system. Again, in cases where a stone- + age processor is being used, this field will be ignored, and in + the unusual event that it is not ignored, and is somehow + harmful to the far system, the Type-N processor can be + configured to send a CW of 0. + + The format of the Capability Word is designed to support up to + 15 future bundle types, and is bit-mapped to facilitate the + easy determination of the maximum common level supported + between two nodes: + + msb Capability Word lsb + Node Supports ------------FTSC Type Supported **)------------ + + U 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2+ + + 2+,3, and 7 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 + 2+,3, and 5 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 + 2+ (this Doc) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 + Stone Age 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + +! ^-- "U" Indicates nodes able to process RFC-822 +! bundles. + ** - In the example bit definitions only type 2, + and the Stone-Age type, are defined now. + The rest are to be concidered "reserved by + FTSC". + + The receiving Type-N bundler would AND the two words, obtaining + a word expressing the Types which are common to both the + receiving and the sending system. The most significant Type + will be used for future sessions, by default. Please note that + this assumes that new bundling Types will be increasingly more + efficient or in some way more beneficial. Because this may not + always be the case, there should be a method provided to + override the automatic upgrade, as illustrated above, should + this ever happen. + +! N.B. The one bit left over (Msb) is now used as indicator for +! RFC-822 type bundles. For info on RFC-822 please check out +! the relevant documents themselves. + +! For a more explanatory text on using the CW to its full +! potential, refer to the FSC-0039 text by Mark Howard. +! Mark also gives some more rationale for the origional idea +! of the CW. + + Generating Type-2+ bundles + ========================== + + Do we have a CW Does CW indicate + stored for dest? YES ----> higher packets YES ---> Generate higher + NO we support? packet + | NO + \|/ | + +-----<----------------------+ + | + Fill header with all info + | + \|/ + | + Are we sending from a point? (origPoint != 0) YES --+ + | | + NO | + | \|/ + | set AuxNet = OrigNet + \|/ set OrigNet = -1 + | | + +-----<----------------------------------------+ + | + Add Messages + | + Terminate packet + | + Send packet + + Receiving Type-2+ bundles + ========================= + + Receive Packet + | + Packettype = 2 NO -------------> Process Type-Other + YES + | + | + CWcopies match NO --------+------> Treat as normal Stone-Age packet + YES | | + | | | + Store CW /|\ | + | | /|\ + CW is 0 YES --------------+ | + NO | + | | + | | + CW indicates support for 2+ NO --+ + YES + | + | +! OrigPoint is not 0 and OrigNet = -1 YES -------+ + NO | + | \|/ +! \|/ Set OrigNet is AuxNet + | | + +------<-----------------------------------+ + | + Process using added info + + Credits + ======= + + To Mark Howard, for introducing the idea of a CW in his FSC- + 0039 document and quite rightly pointing out one big omision + in revision 1 of this document. + + To Rick Moore, for doing a good job in processing all these + revisions by Mark and myself, and for his work for the FTSC in + general. + + To Joaquim Homrighausen, for his contributions to FidoNet + software in general, and especially for his time devoted to + reading, discussing and implementing the ideas Mark and I + introduced. + + To Andre van de Wijdeven, for producing and letting me beta + test his TS-MM software, which in my opinion is the best point + software around. (I'm not saying available, because it isn't + :-() + + To john lots, for shipping this stuff to the US. + + To Jon Webb, for doing a much needed grammar and spelling + check. + + To Bob Hartman, Vince Periello, Tom Jennings, Eelco de Graaff, + aXel Horst, Arjen van Loon, jim nutt, Odinn Sorensen, David + Nugent, Peter Janssens and many others, for making FidoNet + what it is now, for me and for everybody. + + Epilog + ====== + + So this it, now it's up to you to decide whether or not to + implement it. A small change was made in the receivers + flowchart and a small incompatibility with the later revisions + of FSC-0039 was removed. That will ensure that FSC-0048 and + FSC-0039 mailers can happily talk to each other.... + + The best way to implement this would be to always support FSC- + 0048 on inbound trafic and generate FSC-0048 on outbound by + default. A switch on a per-node basis will force your software + to be FSC-0039 or even FSC-0001 only, and you will cover all + bases. + + This can be done easily, as FSC-0048 is a superset of FSC-0039 + (The -1 thing on points being the difference) which in turn is + a superset of FTS-0001 (CW). I'd be glad to get some feedback. + You can put it in NET_DEV or netmail me. + + Jan Vroonhof (2:281/1.12@fidonet) + ++ +Go Back + + + + diff --git a/html/ftsc/fsc-0049.html b/html/ftsc/fsc-0049.html index d4787917..29152754 100755 --- a/html/ftsc/fsc-0049.html +++ b/html/ftsc/fsc-0049.html @@ -1,103 +1,104 @@ - - -
-Document: FSC-0049 -Version: 001 -Date: 03-Jul-90 - - - - - A Proposal for - Passing Domain Information - During an FTS-0006 Session - - by - Bob Hartman - 1:104/501@fidonet.org - July 3, 1990 - - - - -Status of this document: - - This FSC suggests a proposed protocol for the FidoNet(r) community, - and requests discussion and suggestions for improvements. - Distribution of this document is unlimited. - - Fido and FidoNet are registered marks of Tom Jennings and Fido - Software. - - -FSC-0045 proposes a method for sending five dimensional FidoNet addresses -(ie, zone:net/node.point@domain) via the type 2 packet header. This -document describes a proposed method for sending the same five dimensional -address in the Hello packet of an FTS-0006 session, with the additional -advantage of being able to utilize the full Internet recognized domain name -for various Fidonet technology networks. This proposal, combined with -FSC-0045 will help to solve one of FidoNet's most pressing problems: How to -recognize alternative networks without the need of some centralized -management looking at all of them and what they are doing with Zone numbers, -etc. Like FSC-0045, this proposal remains backwards compatible with what it -is replacing. - -Currently FTS-0006 has provisions for zone, net, node, and point information -to be passed in the Hello packet. To extend this to allow the domain name -to be passed, an extra capability bit is used. This bit corresponds to the -0x4000 bit, and will be called the DO_DOMAIN bit. If this bit is set, it -means that the sender is domain aware, and has enclosed his domain in the -Hello packet. The domain is stored in the system name field, after the null -that terminates the real system name. The system name field is a maximum of -60 characters, so the sender must make the real system name, a null, the -domain name, and another null byte fit within the 60 bytes. The domain will -start at the byte immediately after the first null byte. The domain is -arbitrary length and should correspond to the Internet assigned domain name. -This is NOT the same as the FSC-0045 domain, and therefore there needs to be -a mapping between real Internet domains, and the FSC-0045 style domain name, -if FSC-0045 is accepted by the FTSC as a standard for use by all mailers. -This mapping is normally straightforward (for example, Internet fidonet.org -would correspond to FSC-0045 domain FidoNet). Since most alternative nets -do not have a registered Internet domain, the naming convention should be -"known by" domain (ie, FSC-0045 domain name) followed by .ftn (for FidoNet -Technology Network). So, the FSC-0045 domain "Alternet" would be converted -to alternet.ftn under this proposal. This allows domains which are not -normally FidoNet aware to use FTS-0006 to talk to FidoNet technology mail -programs. For example, a mailer located at Camex in Manchester, NH might -send it's mail as 'man.camex.com' during an FTS-0006 session. When parsing -the domain name, the parsing should try to match the domain from right to -left (Internet naming is hierarchical from right to left), so that if a -mailer knew about man.camex.com, that could also match something of the form -super.machine.silly.name.man.camex.com. The domain name should be case -INSENSITIVE, and the FSC-0045 abbreviation of it should be unique within the -first 8 characters, and also should not include any periods ('.') or at-signs -('@') since those characters are significant in the Internet domain naming -scheme. - -In order for this proposal to be adopted, the FTSC would have to assign the -DO_DOMAIN bit, and have it documented in FTS-0006. This method is fully -backwards compatible, since a domain aware mailer could send the domain -information, and if the other end was not domain aware, it would ignore it. -If the other end was domain aware, it would be able to extract the domain -information easily and would then have a full five dimensional address -available for the sender. This proposal remains fully backward compatible -with the current uses of all FTS-0006 fields, and should not affect operation -of any mailer that has used reserved bytes in the Hello packet. -- - Go Back - - - - + + + +
+Document: FSC-0049 +Version: 001 +Date: 03-Jul-90 + + + + + A Proposal for + Passing Domain Information + During an FTS-0006 Session + + by + Bob Hartman + 1:104/501@fidonet.org + July 3, 1990 + + + + +Status of this document: + + This FSC suggests a proposed protocol for the FidoNet(r) community, + and requests discussion and suggestions for improvements. + Distribution of this document is unlimited. + + Fido and FidoNet are registered marks of Tom Jennings and Fido + Software. + + +FSC-0045 proposes a method for sending five dimensional FidoNet addresses +(ie, zone:net/node.point@domain) via the type 2 packet header. This +document describes a proposed method for sending the same five dimensional +address in the Hello packet of an FTS-0006 session, with the additional +advantage of being able to utilize the full Internet recognized domain name +for various Fidonet technology networks. This proposal, combined with +FSC-0045 will help to solve one of FidoNet's most pressing problems: How to +recognize alternative networks without the need of some centralized +management looking at all of them and what they are doing with Zone numbers, +etc. Like FSC-0045, this proposal remains backwards compatible with what it +is replacing. + +Currently FTS-0006 has provisions for zone, net, node, and point information +to be passed in the Hello packet. To extend this to allow the domain name +to be passed, an extra capability bit is used. This bit corresponds to the +0x4000 bit, and will be called the DO_DOMAIN bit. If this bit is set, it +means that the sender is domain aware, and has enclosed his domain in the +Hello packet. The domain is stored in the system name field, after the null +that terminates the real system name. The system name field is a maximum of +60 characters, so the sender must make the real system name, a null, the +domain name, and another null byte fit within the 60 bytes. The domain will +start at the byte immediately after the first null byte. The domain is +arbitrary length and should correspond to the Internet assigned domain name. +This is NOT the same as the FSC-0045 domain, and therefore there needs to be +a mapping between real Internet domains, and the FSC-0045 style domain name, +if FSC-0045 is accepted by the FTSC as a standard for use by all mailers. +This mapping is normally straightforward (for example, Internet fidonet.org +would correspond to FSC-0045 domain FidoNet). Since most alternative nets +do not have a registered Internet domain, the naming convention should be +"known by" domain (ie, FSC-0045 domain name) followed by .ftn (for FidoNet +Technology Network). So, the FSC-0045 domain "Alternet" would be converted +to alternet.ftn under this proposal. This allows domains which are not +normally FidoNet aware to use FTS-0006 to talk to FidoNet technology mail +programs. For example, a mailer located at Camex in Manchester, NH might +send it's mail as 'man.camex.com' during an FTS-0006 session. When parsing +the domain name, the parsing should try to match the domain from right to +left (Internet naming is hierarchical from right to left), so that if a +mailer knew about man.camex.com, that could also match something of the form +super.machine.silly.name.man.camex.com. The domain name should be case +INSENSITIVE, and the FSC-0045 abbreviation of it should be unique within the +first 8 characters, and also should not include any periods ('.') or at-signs +('@') since those characters are significant in the Internet domain naming +scheme. + +In order for this proposal to be adopted, the FTSC would have to assign the +DO_DOMAIN bit, and have it documented in FTS-0006. This method is fully +backwards compatible, since a domain aware mailer could send the domain +information, and if the other end was not domain aware, it would ignore it. +If the other end was domain aware, it would be able to extract the domain +information easily and would then have a full five dimensional address +available for the sender. This proposal remains fully backward compatible +with the current uses of all FTS-0006 fields, and should not affect operation +of any mailer that has used reserved bytes in the Hello packet. ++ +Go Back + + + + diff --git a/html/ftsc/fsc-0050.html b/html/ftsc/fsc-0050.html index a1a7cb0e..d4671104 100755 --- a/html/ftsc/fsc-0050.html +++ b/html/ftsc/fsc-0050.html @@ -1,98 +1,99 @@ - - -
-Document: FSC-0050 -Version: 001 -Date: 14-Jul-90 - - - - - A Character Set Identifier For FidoNet Message Editors - - Draft I - - Thomas Sundblom - 2:201/114@fidonet - - - - -Status of this document: - - This FSC suggests a proposed protocol for the FidoNet(r) community, - and requests discussion and suggestions for improvements. - Distribution of this document is unlimited. - - Fido and FidoNet are registered marks of Tom Jennings and Fido - Software. - - - Purpose - - This document should serve as a guide for the character set - identifier, CHARSET hereafter, format for FidoNet message Editors. - The purpose behind CHARSET is related to my attempt to make it - easier for each reader of a FidoNet message to identify the - characters used in the messages. - - Since FidoNet messages aren't restricted to use any special character - sets in the messages, there will be differences between computer - kinds and special country dependent characters. To avoid confusion - in such cases, I'm hereby introducing the CHARSET kludge. - - There is no need that each FidoNet Message reader should be able - to understand every possible character set. If the reader can't - handle the special character set found in a message, then it should - use a default character set (as most readers do today). - - - Format - - ^aCHARSET:- - Go Back - - - - + + + +- - Sample - - ^aCHARSET: ISO-11 - - Would identify that the message is written using the ISO-11 - character set, which relates to the character set mainly used - in Sweden. - - - Supported character sets - - No special character set is specified, but it is recomended to - use the ISO numbering of the different character sets. Where no - ISO number is available, an easy to understand code should by used. - - - Character set identifier examples - - ISO-6 Relates to plain ASCII 7 bit character set. - ISO-11 Swedish character set, 7 bit. - ISO-21 Germany character set, 7 bit. - ISO-69 French character set, 7 bit. - - Other character set identifiers could be - PC-8 IBM PC complete character set. - ATARI ATARI ST complete character set - AMIGA AMIGA complete character set -
+Document: FSC-0050 +Version: 001 +Date: 14-Jul-90 + + + + + A Character Set Identifier For FidoNet Message Editors + + Draft I + + Thomas Sundblom + 2:201/114@fidonet + + + + +Status of this document: + + This FSC suggests a proposed protocol for the FidoNet(r) community, + and requests discussion and suggestions for improvements. + Distribution of this document is unlimited. + + Fido and FidoNet are registered marks of Tom Jennings and Fido + Software. + + + Purpose + + This document should serve as a guide for the character set + identifier, CHARSET hereafter, format for FidoNet message Editors. + The purpose behind CHARSET is related to my attempt to make it + easier for each reader of a FidoNet message to identify the + characters used in the messages. + + Since FidoNet messages aren't restricted to use any special character + sets in the messages, there will be differences between computer + kinds and special country dependent characters. To avoid confusion + in such cases, I'm hereby introducing the CHARSET kludge. + + There is no need that each FidoNet Message reader should be able + to understand every possible character set. If the reader can't + handle the special character set found in a message, then it should + use a default character set (as most readers do today). + + + Format + + ^aCHARSET: <Character set identifier> + + Sample + + ^aCHARSET: ISO-11 + + Would identify that the message is written using the ISO-11 + character set, which relates to the character set mainly used + in Sweden. + + + Supported character sets + + No special character set is specified, but it is recomended to + use the ISO numbering of the different character sets. Where no + ISO number is available, an easy to understand code should by used. + + + Character set identifier examples + + ISO-6 Relates to plain ASCII 7 bit character set. + ISO-11 Swedish character set, 7 bit. + ISO-21 Germany character set, 7 bit. + ISO-69 French character set, 7 bit. + + Other character set identifiers could be + PC-8 IBM PC complete character set. + ATARI ATARI ST complete character set + AMIGA AMIGA complete character set ++ +Go Back + + + + diff --git a/html/ftsc/fsc-0053.html b/html/ftsc/fsc-0053.html index fe764e7a..0c5419ad 100755 --- a/html/ftsc/fsc-0053.html +++ b/html/ftsc/fsc-0053.html @@ -1,187 +1,188 @@ - - -
-Document: FSC-0053 -Version: 002 -Date: 08-Dec-92 - - - - - - - Specifications for the ^aFLAGS field - - Joaquim H. Homrighausen - 2:270/17@fidonet or joho@ae.lu - - December 8, 1992 - - - - -Status of this document: - - This FSC suggests a proposed protocol for the FidoNet(r) community, - and requests discussion and suggestions for improvements. - Distribution of this document is unlimited. - - Fido and FidoNet are registered marks of Tom Jennings and Fido - Software. - - - Purpose - - To explain and document the existing usage of the ^aFLAGS field used - by many software packages, including FrontDoor, TosScan, and - D'Bridge. And to inform software authors of its proper usage. - - - Prologue - - One of the problems with the FTS-1 (stored) message format is its - limitations in regards to message attributes. Several bits are used - (reserved) by SEAdog, another by several packers and editors - even - though most mailer authors don't support them, they remain. One - reason would be backward compatibility with older software. - - Unfortunately, this presents a problem for software authors that - would like to pass extended message attributes for use and handling - by other software. - - Some software packages have been using an alternate method called - "FLAGS" which is 7-bit ASCII placed behind- - Go Back - - - - - + + + +FLAGS somewhere near - the beginning of a message. The various flags will now be described. - - - Flags - - The FLAGS string should be placed somewhere near the beginning of - the message text, and is preceeded by a (^a) character. There - is no need to support all or any of the below mentioned flags. - - If flags are stripped when a message passes through a system, all - relevant and correct FTS-1 status bits should be updated to indicate - the original contents of the FLAGS field. - - - Flag Brief Long description - -------------------------------------------------------------------- - PVT Private Indicates that the message may only be read - by its addressee and author. - - HLD Hold Message should be held for pickup by its - destination system. - - CRA Crash High-priority mail. - - K/S Kill/Sent Remove message after it has been success- - fully sent. - - SNT Sent Message has been successfully sent (used - for message without Kill/Sent status). - - RCV Received Message has been read by its addressee. - - A/S Archive/Sent Place message in "sent mail" archival - system after it has been successfully sent. - - DIR Direct Message must be sent directly to its - destination and may not be routed. - - ZON Zonegate Send message through zonegate (if - possible). - - HUB Hub/Host-route Host- or Hub-route message (as - appropriate). - - FIL File attach Message has one or more files attached to - it. - - FRQ File request Message has one or more file requests in - subject field. - - IMM Immediate NOW!-priority mail. Send at first - opportunity, override any transmission - restrictions enforced by events, costs, or - qualification. - - XMA Xmail Message has alternate form of compressed - mail attached. - - KFS Kill file Remove attached file(s) after they have - been successfully sent. Only valid for file - attach message. - - TFS Truncate file Truncate attached file(s) to zero length - after they have been successfully sent. - Only valid for file attach message. - Primarily used by Conference Mail - processors. - - LOK Lock Prevent message from being processed. - This includes sending, deleting, - purging, and editing. - - RRQ Receipt REQ When the mailer/packer at the message's - final destination unpacks the message, it's - asked to generate a receipt to the author - of the message that indicates that the - message arrived at its final destination. - - CFM Confirm REQ When message is read by its addressee, a - Confirmation Receipt should be generated to - the author of the message. - - HIR HiRes FAX: Hi-Resolution image. - - COV CoverLetter FAX: Cover sheet. - - SIG Signature FAX: Signature. - - LET LetterHead FAX: LetterHead. - -| FAX Fax image The filename specified in the message's -| subject field contains a fax document that -| should be viewed using software capable of -| doing so. - -| FPU Force pickup Treated as a message with an IMM flag. This -| instructs the mailer to keep calling the -| destination system, if the connection is -| aborted for some reason, until a valid "End -| of files" signal is received (i.e. no more -| files remain to pick up). - - - Notes - - Xmail is related to the ARCmail 0.60 standard as adopted by the FTSC. - The exception is that any type of compression method may be used and - the naming convention isn't necessarily limited to that of the - ARCmail 0.60 standard. - - - Epilogue - - Feedback would be appreciated and can be sent to me at the addresses - specified on the title page. Please send feedback via netmail. -
+Document: FSC-0053 +Version: 002 +Date: 08-Dec-92 + + + + + + + Specifications for the ^aFLAGS field + + Joaquim H. Homrighausen + 2:270/17@fidonet or joho@ae.lu + + December 8, 1992 + + + + +Status of this document: + + This FSC suggests a proposed protocol for the FidoNet(r) community, + and requests discussion and suggestions for improvements. + Distribution of this document is unlimited. + + Fido and FidoNet are registered marks of Tom Jennings and Fido + Software. + + + Purpose + + To explain and document the existing usage of the ^aFLAGS field used + by many software packages, including FrontDoor, TosScan, and + D'Bridge. And to inform software authors of its proper usage. + + + Prologue + + One of the problems with the FTS-1 (stored) message format is its + limitations in regards to message attributes. Several bits are used + (reserved) by SEAdog, another by several packers and editors - even + though most mailer authors don't support them, they remain. One + reason would be backward compatibility with older software. + + Unfortunately, this presents a problem for software authors that + would like to pass extended message attributes for use and handling + by other software. + + Some software packages have been using an alternate method called + "FLAGS" which is 7-bit ASCII placed behind+ +Go Back + + + + + diff --git a/html/ftsc/fsc-0056.html b/html/ftsc/fsc-0056.html index eeb6b3ad..4a5bf90f 100755 --- a/html/ftsc/fsc-0056.html +++ b/html/ftsc/fsc-0056.html @@ -1,1078 +1,1079 @@ - - -FLAGS somewhere near + the beginning of a message. The various flags will now be described. + + + Flags + + The FLAGS string should be placed somewhere near the beginning of + the message text, and is preceeded by a <SOH> (^a) character. There + is no need to support all or any of the below mentioned flags. + + If flags are stripped when a message passes through a system, all + relevant and correct FTS-1 status bits should be updated to indicate + the original contents of the FLAGS field. + + + Flag Brief Long description + -------------------------------------------------------------------- + PVT Private Indicates that the message may only be read + by its addressee and author. + + HLD Hold Message should be held for pickup by its + destination system. + + CRA Crash High-priority mail. + + K/S Kill/Sent Remove message after it has been success- + fully sent. + + SNT Sent Message has been successfully sent (used + for message without Kill/Sent status). + + RCV Received Message has been read by its addressee. + + A/S Archive/Sent Place message in "sent mail" archival + system after it has been successfully sent. + + DIR Direct Message must be sent directly to its + destination and may not be routed. + + ZON Zonegate Send message through zonegate (if + possible). + + HUB Hub/Host-route Host- or Hub-route message (as + appropriate). + + FIL File attach Message has one or more files attached to + it. + + FRQ File request Message has one or more file requests in + subject field. + + IMM Immediate NOW!-priority mail. Send at first + opportunity, override any transmission + restrictions enforced by events, costs, or + qualification. + + XMA Xmail Message has alternate form of compressed + mail attached. + + KFS Kill file Remove attached file(s) after they have + been successfully sent. Only valid for file + attach message. + + TFS Truncate file Truncate attached file(s) to zero length + after they have been successfully sent. + Only valid for file attach message. + Primarily used by Conference Mail + processors. + + LOK Lock Prevent message from being processed. + This includes sending, deleting, + purging, and editing. + + RRQ Receipt REQ When the mailer/packer at the message's + final destination unpacks the message, it's + asked to generate a receipt to the author + of the message that indicates that the + message arrived at its final destination. + + CFM Confirm REQ When message is read by its addressee, a + Confirmation Receipt should be generated to + the author of the message. + + HIR HiRes FAX: Hi-Resolution image. + + COV CoverLetter FAX: Cover sheet. + + SIG Signature FAX: Signature. + + LET LetterHead FAX: LetterHead. + +| FAX Fax image The filename specified in the message's +| subject field contains a fax document that +| should be viewed using software capable of +| doing so. + +| FPU Force pickup Treated as a message with an IMM flag. This +| instructs the mailer to keep calling the +| destination system, if the connection is +| aborted for some reason, until a valid "End +| of files" signal is received (i.e. no more +| files remain to pick up). + + + Notes + + Xmail is related to the ARCmail 0.60 standard as adopted by the FTSC. + The exception is that any type of compression method may be used and + the naming convention isn't necessarily limited to that of the + ARCmail 0.60 standard. + + + Epilogue + + Feedback would be appreciated and can be sent to me at the addresses + specified on the title page. Please send feedback via netmail. +
-Document: FSC-0056 -Version: 001 -Date: 03-May-1991 - - - - - - EMSI/IEMSI Protocol Definitions - Joaquim H. Homrighausen - May 3, 1991 - - - - - Status of this document: - - This FSC suggests a proposed protocol for the FidoNet(r) community, - and requests discussion and suggestions for improvements. - Distribution of this document is subject to the restrictions - specified on the next page. - - Fido and FidoNet are registered marks of Tom Jennings and Fido - Software. - - - - - (Also known as EMSC-001; Electronic Mail Standards Document #001) - --------------------------------------------------------------------- - Copyright 1989-1991 Joaquim H. Homrighausen. All rights reserved. - --------------------------------------------------------------------- - - - Notice - ===================================================================== - This document obsoletes EMSI_003 and any previous document describing - the EMSI, UZAP, and/or IEMSI handshake protocol. I apologize for the - lack of proper state charts. I am currently under a fairly heavy - work-load and thought it would be better to release something half- - decent than not to release anything at all. - - Restrictions - ===================================================================== - EMSI/IEMSI may be used by any developer as long as these - specifications are followed exactly. The IEMSI and EMSI specifications - may be implemented independently of each other. - - EMSI/IEMSI may be used free-of-charge by any developer for any - purpose, commercially or otherwise. In creating EMSI/IEMSI, we are - taking the first step towards developing a clear protocol definition - for state-of-the-art E-Mail systems to follow. - - This document and its NOTES file (EMSI.NOT) may be freely copied and - distributed, but must NEVER be distributed in a modified form. If you - have an enhancement request, please contact the author of this - document; do not change it yourself. - - Permission is hereby granted to the FTSC (Fidonet Technical Standards - Committee) and other technical organisations to republish this - document in its entirety. Librarians may change the title page and - page headers to match their library format as long as all copyrights - and body text remain unaltered. The original document name and source - (EMSC) must be mentioned in any republished versions of this - document. - - No organization, company, person, or other being may impose any fees - for any reason for providing this document. This document may not be - sold or otherwise transferred for personal or company gain under any - circumstances. - - Layout - ===================================================================== - This document consists of four major parts; A short introduction and - explanation of the EMSI/IEMSI handshake protocol, the EMSI - definitions, the IEMSI definitions, and finally various notes and - credits. - - - PART I - - Introduction - ===================================================================== - The EMSI/IEMSI handshake protocol allows for maximum flexibility in - E-Mail session start-up and control. The YooHoo (FTS-6) standard, - designed by Wynn Wagner III, was a good idea, but did not allow - sufficient room for growth and cannot be used in 7-bit environments. - EMSI/IEMSI should provide for virtually unlimited growth and - expansion of its own scope. By providing variable-length packets, - EMSI/IEMSI is capable of being as simple or as complex as necessary - and entirely backwards compatible when new features and/or protocols - are added. - - All EMSI/IEMSI packets and sequences consists of 7-bit printable - ASCII characters. This format allows us to establish a universal - handshake between "PCs" and "mainframes" alike. The more complicated - the computer system, the more restrictions affect its I/O; there are - many I/O channels that cannot transmit control characters such as XON - and XOFF; for this, we have created a universal handshake protocol - that uses all printable characters. - - EMSI/IEMSI does allow control and 8-bit ASCII characters to be - transmitted. This is, however, accomplished by escaping the data - and converting it to 7-bit printable ASCII characters. - - Data layer - ===================================================================== - EMSI/IEMSI is a protocol based on multi-character sequences rather - than single character flow control. There are several advantages of - using several characters rather than just one, but there is also a - drawback. On very poor-quality telephone lines, EMSI will most likely - require several retransmissions of packets since line noise usually - come in bursts. That aside, there is little advantage in using a - protocol based on single characters. - - All EMSI/IEMSI sequences are terminated by a single- - Go Back - - - - + + + +unless - otherwise specified. This is necessary to force some data collection - equipment to flush their buffers. Appending to EMSI/IEMSI - sequences in a FidoNet environment is a delicate matter and it is - important that you follow the notes regarding this. - - Note regarding file requests - --------------------------------------------------------------------- - The file request concept mentioned in the EMSI document refers to - WaZOO style file requests as specified in FTS-6. No other file - request mechanism is supported in the EMSI specifications. - - - Separator usage - --------------------------------------------------------------------- - To designate the fields within the EMSI/IEMSI packets and retain - complete transparency, both start and stop characters are used. - - The ASCII1 type is used for all fields within the packet. This uses - the brace characters to delimit the fields. The '{' (ASCII 123) - character is the start byte and '}' (ASCII 125) is the stop byte. - If a stop byte is used as literal data within a field, it must be - transmitted twice. The end of a field is designated by a stop byte - that is not followed by another identical stop byte. - - The ASCII2 fields are delimited in exactly the same way, but use the - square brackets as delimiters. The '[' (ASCII 91) is the start byte - and ']' (ASCII 93) is the stop byte. ASCII2 is used to delimit data - within the ASCII1 extra_field information. - - 7-bit data restriction - --------------------------------------------------------------------- - It is the developer's responsibility to ensure that the software - generates EMSI/IEMSI packets and sequences containing only 7-bit - (00H through 7eH) printable ASCII characters. - - It is recommended that all EMSI/IEMSI implementations strip the high- - order bit of all received characters prior to processing the packet/ - sequence and prior to calculating CRC values. - - CRC values - --------------------------------------------------------------------- - The polynomial used to calculate a 16-bit CRC is the same polynomial - used in the Xmodem file transfer protocol. The polynomial used to - calculate a 32-bit CRC is the same polynomial used in the Zmodem file - transfer protocol. - - Binary values - --------------------------------------------------------------------- - Since the EMSI environment specifies only 7-bit printable ASCII - characters to be used, binary values, such as CRC and length - descriptors are expressed as a four character hexadecimal string. The - only exception to this is a 32-bit CRC value which is expressed as an - eight character hexadecimal string. - - The application must treat them case insensitive, eg. ffaa should be - treated identical to FFAA. - - - Handling 8-bit data - --------------------------------------------------------------------- - Although EMSI only uses 7-bit printable ASCII characters, there is an - escape mechanism that allows systems to transmit control and 8-bit - ASCII characters without the requirement of an 8-bit data link. The - escape character is a backslash character ('\') and is followed by two - characters in hexadecimal notation. Eg. "\80" is the ASCII character - 128. To insert an actual backslash character, two backslashes are used - ("\\"), or a backslash followed by the hexadecimal code for a - backslash, eg. "\5c". - - The hexadecimal code following a backslash MUST always be two - characters, ie. to insert ASCII 15 (hexadecimail 'f'), the result - would be "0f". All hexadecimal sequences must be treated case - insensitively. - - - PART II - Electronic Mail Standard Idenfitication - - Connecting two EMSI capable systems - ===================================================================== - This assumes that the two systems are connected and that no data - has been transmitted by the Caller. - - It should be mentioned that sending/monitoring for the "YooHoo", - "TSYNC", and other protocol start characters is optional and not - required for a strict EMSI implementation. - - STEP 1, EMSI INIT - - Calling system Answering system - +-+-------------------------------+----------------------------------+ - :1: Send until ANY character : Send EMSI_REQ and possible : - : : is received. : banner, etc. : - +-+-------------------------------+----------------------------------+ - :2: Receive banner, etc. Monitor : Monitor line for the EMSI_INQ : - : : line for the EMSI_REQ : sequence and if received, : - : : sequence and if received, : attempt to handshake immediately.: - : : transmit EMSI_INQ and attempt : : - : : to handshake immediately. : : - +-+-------------------------------+----------------------------------+ - :3: No EMSI_REQ sequence received,: Monitor line for EMSI_INQ and : - : : send EMSI_INQ twice followed : possible other protocol start : - : : by possible other protocol : characters and if received, : - : : start characters. : attempt to handshake immediately.: - : : : : - : : Transmit : Go to step 3. : - +-+-------------------------------+----------------------------------+ - :4: If EMSI_REQ sequence received,: - : : send EMSI_INQ and attempt to : - : : handshake immediately, : - : : otherwise repeat step 3. : - +-+-------------------------------+ - - In steps 1 and 2, both the Calling and Answering system terminate all - sequences with . In step 3, the Calling system does not terminate - sequences with as it is explicitly transmitted after possible - protocol start characters. In step 4, the Calling system once again - terminate all sequences with a . - - - STEP 2A, RECEIVE EMSI HANDSHAKE - - At this point, all sequences are terminated with a . - - +-+------------------------------------------------------------------+ - :1: Tries=0, T1=20 seconds, T2=60 seconds : - +-+------------------------------------------------------------------+ - :2: Increment Tries : - : : : - : : Tries>6? Terminate, and report failure. : - : +------------------------------------------------------------------+ - : : Are we answering system? Transmit EMSI_REQ, go to step 3. : - : +------------------------------------------------------------------+ - : : Tries>1? Transmit EMSI_NAK, go to step 3. : - : +------------------------------------------------------------------+ - : : Go to step 4. : - +-+------------------------------------------------------------------+ - :3: T1=20 seconds : - +-+------------------------------------------------------------------+ - :4: Wait for EMSI sequence until EMSI_HBT or EMSI_DAT or any of the : - : : timers have expired. : - : : : - : : If T2 has expired, terminate call and report failure. : - : +------------------------------------------------------------------+ - : : If T1 has expired, go to step 2. : - : +------------------------------------------------------------------+ - : : If EMSI_HBT received, go to step 3. : - : +------------------------------------------------------------------+ - : : If EMSI_DAT received, go to step 5. : - : +------------------------------------------------------------------+ - : : Go to step 4. : - +-+------------------------------------------------------------------+ - :5: Receive EMSI_DAT packet : - : +------------------------------------------------------------------+ - : : Packet received OK? Transmit EMSI_ACK twice, and : - : : go to step 6. : - : +------------------------------------------------------------------+ - : : Go to step 2. : - +-+------------------------------------------------------------------+ - :6: Received EMSI_DAT packet OK, exit. : - +-+------------------------------------------------------------------+ - - All processing of the information in the EMSI_DAT packet must be done - after transmitting EMSI_ACK twice to the remote system. It is - recommended that an EMSI_HBT sequence is issued once every seven - seconds while such processing is taking place to avoid unnecessary - handshake collissions. Emitting EMSI_HBT should only be done when - it is obvious that the remote system is waiting for the second phase - of the EMSI handshake to take place. - - - - STEP 2B, TRANSMIT EMSI HANDSHAKE - - At this point, all sequences are terminated with a . - - +-+------------------------------------------------------------------+ - :1: Tries=0, T1=60 seconds : - +-+------------------------------------------------------------------+ - :2: Transmit EMSI_DAT packet and increment Tries : - : : : - : +------------------------------------------------------------------+ - : : Tries>6? Terminate, and report failure. : - : +------------------------------------------------------------------+ - : : Go to step 3. : - +-+------------------------------------------------------------------+ - :3: T2=20 seconds : - +-+------------------------------------------------------------------+ - :4: Wait for EMSI sequence until T1 has expired : - : : : - : : If T1 has expired, terminate call and report failure. : - : +------------------------------------------------------------------+ - : : If T2 has expired, go to step 2. : - : +------------------------------------------------------------------+ - : : If EMSI_REQ received, go to step 4. : - : +------------------------------------------------------------------+ - : : If EMSI_ACK received, go to step 5. : - : +------------------------------------------------------------------+ - : : If any other sequence received, go to step 2. : : - +-+------------------------------------------------------------------+ - :5: Received EMSI_ACK, exit. : - +-+------------------------------------------------------------------+ - - - EMSI packet and sequence definitions - ===================================================================== - - ===================================================================== - EMSI Inquiry **EMSI_INQ - --------------------------------------------------------------------- - EMSI Inquiry is transmitted by the calling system to identify it as - EMSI capable. If an EMSI_REQ sequence is received in response, it is - safe to assume the answering system to be EMSI capable. - - ===================================================================== - EMSI Request **EMSI_REQ - --------------------------------------------------------------------- - EMSI Request is transmitted by the answering system in response to an - EMSI Inquiry sequence. It should also be transmitted prior to or - immediately following the answering system has identified itself by - transmitting its program name and/or banner. If the calling system - receives an EMSI Request sequence, it can safely assume that the - answering system is EMSI capable. - - ===================================================================== - EMSI Client **EMSI_CLI - --------------------------------------------------------------------- - EMSI Client is used by terminal emulation software to force a mailer - front-end to bypass any unnecessary mail session negotiation and - treat the call as an incoming human caller. The EMSI_CLI sequence may - not be issued by any software attempting to establish a mail session - between two systems and must only be acted upon by an answering - system. - - ===================================================================== - EMSI Heartbeat **EMSI_HBT - --------------------------------------------------------------------- - EMSI Heartbeat is used to prevent unnecessary timeouts from occurring - while attempting to handshake. It is most commonly used when the - answering system turns around to transmit its EMSI_DAT packet. It is - quite normal that any of the timers of the calling system (which at - this stage is waiting for an EMSI_DAT packet) expires while the - answering system is processing the recently received EMSI_DAT packet. - - ===================================================================== - EMSI Data **EMSI_DAT - --------------------------------------------------------------------- - EMSI Data is transmitted by both the calling and answering system at - the appropriate time to exchange system information. Following the - header is a four byte number representing the length of - excluding the CRC and terminating . - - The EMSI_DAT packet is a variable length packet. Since this is a - synchronous protocol, the inbound data buffer should be purged - between transmission of the and fields to prevent - accidental EMSI_NAK sequences, etc. - - - ===================================================================== - EMSI ACK **EMSI_ACK - --------------------------------------------------------------------- - EMSI ACK is transmitted by either system as a positive - acknowledgement of the valid receipt of a EMSI_DAT packet. This should - only be used as a response to EMSI_DAT and not any other packet. - Redundant EMSI_ACK sequences should be ignored. - - ===================================================================== - EMSI NAK **EMSI_NAK - --------------------------------------------------------------------- - EMSI NAK is transmitted by either system as a negative - acknowledgement of the valid receipt of a EMSI_DAT packet. This - should only be used as a response to EMSI_DAT and not any other - packet. Redundant EMSI_NAK packets should be ignored. - - The EMSI_DAT packet - ===================================================================== - The EMSI_DAT packet is the core of an EMSI negotiated session. It - contains information vital to the mail session. The following pseudo - structure shows the layout of the EMSI_DAT packet. - - EMSI_DAT - fingerprint, "EMSI" - system_address_list, - password, - link_codes, - compatibility_codes, - mailer_product_code, - mailer_name, - mailer_version, - mailer_serial_number: ASCII1; - extra_field_1, - .. - .. - extra_field_n: EMSI_addon; (optional fields) - end; - - The EMSI_addon structure is defined as follows: - - EMSI_addon - product_ID, - specific_data: ASCII1; - end; - - - Following is an example of the actual data transmitted as an EMSI_DAT - packet: - - {EMSI}{2:270/17}{}{8N1,PUA}{ZAP,ZMO,ARC,XMA}{44}{AirMail}{0.10} - {Beta-2}{IDENT}{[Advanced Engineering S.A.R.L.][Luxembourg] - [Joaquim Homrighausen][-Unpublished-][9600][MO,XA,HST,V32B,V42B]} - - EMSI_DAT field definitions - --------------------------------------------------------------------- - - ===================================================================== - Fingerprint EMSI - --------------------------------------------------------------------- - The constant "EMSI". There is no need for a revision level since this - basic format cannot change and remain backward compatible. - - ===================================================================== - System address list - --------------------------------------------------------------------- - The system address list is a list of system-specific identifiers for - the E-Mail system separated by spaces. - - For FidoNet-technology based networks, it is required that - Zone:Net/Node be presented, and .Point be omitted if zero. Zone and - Net must not be zero. - - In other networks, an address such as "jhom@csource.oz.au" should be - considered valid. - - ===================================================================== - Password - --------------------------------------------------------------------- - For systems using a session level password, it would be passed in - this field. Note that the same password is used for all presented - addresses and that it must be treated case insensitive. - - ===================================================================== - Link codes - --------------------------------------------------------------------- - Link codes is a string of flags that specify desired connect - conditions. These codes are separated by commas. New codes may be - added with prior approval from the author of this document. - - Calling system/answering system options: - - 8N1, - 7E1, - 7O2, - etc. Communication parameters. - - Calling system options: - - PUA Pickup mail for all presented addresses. - PUP Pickup mail for primary address only. - NPU No mail pickup desired. - - - Answering system options: - - HAT Hold ALL traffic. - HXT Hold compressed mail traffic. - HRQ Hold file requests (not processed at this time). - - ===================================================================== - Compatibility codes - --------------------------------------------------------------------- - Compatibility codes is a string of flags that specifies the - capabilities and enabled features of the mailer. These codes are - separated by commas. New codes may be added with prior approval from - the author of this document. - - The calling system must list supported protocols first and descending - order of preference (the most desirable protocol should be listed - first). The answering system should only present one protocol and it - should be the first item in the compatibility_codes field. - - Protocols - ----------------------------------------------------------------- - DZA* DirectZAP (Zmodem variant). - ZAP ZedZap (Zmodem variant). - ZMO** Zmodem w/1,024 byte data packets. - JAN Janus. - KER Kermit. - - Other codes - ----------------------------------------------------------------- - NCP No compatible protocols (failure). - NRQ No file requests accepted by this system. - ARC ARCmail 0.60-capable, as defined by the FTSC. - XMA Supports other forms of compressed mail. - FNC Filename conversion. This indicates that any transmitted - files must follow the MS-DOS restrictions of an eight - character file name followed by a three character - extension; eg. FILENAME.EXT - - (*) DirectZAP is a variant of ZedZap. The difference is that the - transmitter only escapes CAN (18H). It is not recommended to use the - DirectZAP protocol when two systems are connected via a packet - switching network, or via another layer sensitive to control - characters such as XON and XOFF. - - (**) The minimum protocol requirement for an EMSI implementation is - to support plain Zmodem (16- or 32-bit CRC, 1,024 byte packets) which - is represented by the ZMO flag in EMSI. - - ===================================================================== - Mailer product code - --------------------------------------------------------------------- - The hexadecimal representation of the EMSC product code assigned to - the mailer. Currently, the EMSC codes are the same as the FTSC - assigned codes. - - ===================================================================== - Mailer name - --------------------------------------------------------------------- - Specifies the name of the E-Mail system sending the EMSI packet. - - ===================================================================== - Mailer version - --------------------------------------------------------------------- - The version number of the mailer software, ie. "1.10", "2.00". - - ===================================================================== - Mailer serial number - --------------------------------------------------------------------- - The serial number, distribution source, version information, etc. - This field is usually displayed like: - - Name Version/Serial_number - - eg. - - AirMail 0.10/Beta-2 - - ===================================================================== - Extra fields - --------------------------------------------------------------------- - The extra fields make the EMSI handshake protocol extremely flexible. - Any program or mailer may add fields to the end of the pre-defined - structure so that program-specific data may be passed without the - concern of interferring with other systems. - - There may be any number of extra fields added to the end of this - structure. Each EXTRA_FIELD contains two ASCII1 strings: - - PRODUCT_IDENTIFIER A unique "tag" that defines a specific - program (such as a mailer or a utility). - - SPECIFIC_DATA ASCII text that is specific data to the - program defined in PRODUCT_IDENTIFIER. With - this structure, any program can add its own - data to the EMSI packet without affecting - other applications. - - It is recommended that you contact the author of this document should - you have any EXTRA_FIELDS that you may think worthwhile for other - developers to implement and support. - - Predefined extra fields - --------------------------------------------------------------------- - The following extra fields have been defined to date. - - PRODUCT_IDENTIFIER : IDENT - - Purpose : General identification of system that - includes all information to generate a St. - Louis-format nodelist entry. - - SPECIFIC_DATA : system_name, - city, - operator_name, - phone_number, - baud_rate, - flags: ASCII2; - - SYSTEM_NAME The name of the system given by the user. - This would normally be a company name, BBS - name or other identifying text. - - CITY The geographical location of the system. - - OPERATOR_NAME The name of the person primarily responsible - for the system. - - PHONE_NUMBER The telephone number of the system, or - "-Unpublished-" if the telephone number is - unpublished. This MUST be in the standard - format COUNTRY-CITY-NUMBER. Leading zeros - should be stripped from the city code, - ie. Stockholm (Sweden) has a city code of 08, - included in an EMSI packet, it would read - 46-8- . - - BAUD_RATE The maximum baud rate supported by the - system. This is NOT necessarily the same as - the highest DTE rate. - - FLAGS The St. Louis (FTSC) nodelist flags - associated with the system. - - - PART III - Interactive Electronic Mail Standard Idenfitication - - Connecting two IEMSI capable systems - ===================================================================== - Two specific labels are used when discussing the IEMSI definitions. - The Client, which in this case is the Terminal software, and the - Server, which in this case is the interactive on-line software, - such as a BBS package or database system. It is assumed that the - Client and the Server have established a data link and that no - data has been transmitted by the Server. - - STEP 1, IEMSI INIT - - There is no specific sequence of events in the IEMSI definition. The - Client must monitor incoming data and if the EMSI_IRQ sequence is - detected, it attempts to negotiate an IEMSI session with the Server. - Under no circumstances is the Client allowed to transmit an EMSI_ICI - packet prior to receiving the EMSI_IRQ sequence from the Server. - All IEMSI sequences and EMSI sequences used during an IEMSI session - are terminated by a single . There are no exceptions to this. - - - STEP 2A, Server - - +-+------------------------------------------------------------------+ - :1: Tries=0, T2=60 seconds : - +-+------------------------------------------------------------------+ - :2: Transmit EMSI_IRQ sequence : - +-+------------------------------------------------------------------+ - :3: T1=20 seconds, increment Tries : - : : : - : : Tries>3? Discontinue IEMSI negotiation. : - +-+------------------------------------------------------------------+ - :4: Wait for EMSI_ICI packet until any of the timers have expired. : - : : : - : : If T2 has expired, discontinue IEMSI negotiation. : - : +------------------------------------------------------------------+ - : : If T1 has expired, go to step 2. : - : +------------------------------------------------------------------+ - : : If EMSI_ICI seen, go to step 5. : - : +------------------------------------------------------------------+ - : : Go to step 4. : - +-+------------------------------------------------------------------+ - :5: Receive EMSI_ICI packet : - : +------------------------------------------------------------------+ - : : Packet received OK? Transmit EMSI_ISI packet, and : - : : go to step 6. : - : +------------------------------------------------------------------+ - : : Packet not received OK? Transmit EMSI_NAK and go to step : - : : 3. : - +-+------------------------------------------------------------------+ - :6: Tries=0 : - +-+------------------------------------------------------------------+ - :7: T1=20 seconds, increment Tries : - : : : - : : Tries>3? Discontinue IEMSI negotiation. : - +-+------------------------------------------------------------------+ - :8: Wait for EMSI_ACK/EMSI_NAK until any of the timers have expired. : - : : : - : : If T2 has expired, discontinue IEMSI negotiation. : - : +------------------------------------------------------------------+ - : : If T1 has expired or EMSI_NAK received, transmit EMSI_ISI packet : - : : again and go to step 7. : - : +------------------------------------------------------------------+ - : : If EMSI_ACK received, go to step 9. : - : +------------------------------------------------------------------+ - : : Go to step 8. : - +-+------------------------------------------------------------------+ - :9: IEMSI session successfully established, exit. : - +-+------------------------------------------------------------------+ - - The Server must monitor its incoming data channel for 'normal' data, - ie. data not transmitted as IEMSI sequences, to detect if the user is - attempting to log-in without the use of IEMSI. The only basic - restriction this imposes on the Server is that user names and/or IDs - may not start with the character '*' since all EMSI/IEMSI sequences - start with this character. - - All processing of the information in the EMSI_ICI packet must be done - after transmitting the EMSI_ISI packet and receiving two EMSI_ACK - sequences in return. - - - STEP 2B, Client - - Note that this assumes that the Client has seen the EMSI_IRQ sequence - transmitted by the Server and that the negotiation is ready to take - place. - - +-+------------------------------------------------------------------+ - :1: Tries=0, T2=60 seconds : - +-+------------------------------------------------------------------+ - :2: Transmit EMSI_ICI packet : - +-+------------------------------------------------------------------+ - :3: T1=20 seconds, increment Tries : - +-+------------------------------------------------------------------+ - :5: Tries>3 or T2 expired? Discontinue IEMSI negotiation. : - : +------------------------------------------------------------------+ - : : If T1 has expired, go to step 2. : - : +------------------------------------------------------------------+ - : : If EMSI_ISI seen, go to step 6. : - : +------------------------------------------------------------------+ - : : Go to step 5. : - +-+------------------------------------------------------------------+ - :6: Receive EMSI_ISI packet : - : +------------------------------------------------------------------+ - : : Packet received OK? Transmit EMSI_ACK packet twice, : - : : and go to step 7. : - : +------------------------------------------------------------------+ - : : Packet not received OK? Transmit EMSI_NAK and go to step: - : : 3. : - +-+------------------------------------------------------------------+ - :7: IEMSI session successfully established, exit. : - +-+------------------------------------------------------------------+ - - All processing of the information in the EMSI_ISI packet must be done - after transmitting two EMSI_ACK sequences in return. - - If either of the ICI or ISI packets are NAK'd three consecutive times, - the session negotiation attempt is terminated and the Client proceeds - as it would have done should the Server not have supported IEMSI. - - - IEMSI packet and sequence definitions - ===================================================================== - - ===================================================================== - EMSI ACK **EMSI_ACK - --------------------------------------------------------------------- - EMSI ACK is transmitted by either Client or Server as a positive - acknowledgement of the valid receipt of an IEMSI packet such as - EMSI_ISI and EMSI_ICI. During an IEMSI session, this sequence can, - however, be used as a positive acknowledgement for other IEMSI - packets. Redundant EMSI_ACK sequences should be ignored. - - ===================================================================== - EMSI NAK **EMSI_NAK - --------------------------------------------------------------------- - EMSI NAK is transmitted by either Client or Server as a negative - acknowledgement of the valid receipt of an IEMSI packet such as - EMSI_ISI and EMSI_ICI. During an IEMSI session, this sequence can, - however, be used as a negative acknowledgement for other IEMSI - packets. Redundant EMSI_NAK sequences should be ignored. - - ===================================================================== - EMSI IRQ **EMSI_IRQ - --------------------------------------------------------------------- - Similar to EMSI_REQ which is used by mailer software to negotiate a - mail session. IRQ identifies the Server as being capable of - negotiating an IEMSI session. When the Client detects an IRQ sequence - in its inbound data stream, it attempts to negotiate an IEMSI - session. - - ===================================================================== - EMSI IIR **EMSI_IIR - --------------------------------------------------------------------- - The IIR (Interactive Interrupt Request) sequence is used by either - Client or Server to abort the current negotiation. This could be - during the initial IEMSI handshake or during other interactions - between the Client and the Server. - - ===================================================================== - EMSI ICI **EMSI_ICI - --------------------------------------------------------------------- - The ICI packet is used by the Client to transmit its configuration - and Server-related information to the Server. It contains Server - parameters, Client options, and Client capabilities. - - ===================================================================== - EMSI ISI **EMSI_ISI - --------------------------------------------------------------------- - The ISI packet is used by the Server to transmit its configuration - and Client-related information to the Client. It contains Server data - and capabilities. - - ===================================================================== - EMSI ISM **EMSI_ISM - --------------------------------------------------------------------- - The ISM packet is used to transfer ASCII images from the Server to - the Client. These images can then be recalled by the Client when - the Server needs to display a previously displayed image. This will - be further described in future revisions of this document. - - ===================================================================== - EMSI CHT **EMSI_CHT - --------------------------------------------------------------------- - The CHT sequence is used by the Server to instruct the Client - software to enter its full-screen conversation mode function (CHAT). - Whether or not the Client software supports this is indicated in the - ICI packet. - - If the Server transmits this sequence to the Client, it must wait for - an EMSI_ACK prior to engaging its conversation mode. If no EMSI_ACK - sequence is received with ten seconds, it is safe to assume that the - Client does not support EMSI_CHT. If, however, an EMSI_NAK sequence - is received from the Client, the Server must re-transmit the - EMSI_CHT sequence. Once the on-line conversation function has been - sucessfully activated, the Server must not echo any received - characters back to the Client. - - ===================================================================== - EMSI TCH **EMSI_TCH - --------------------------------------------------------------------- - The TCH sequence is used by the Server to instruct the Client - software to terminate its full-screen conversation mode function - (CHAT). - - If the Server transmits this sequence to the Client, it must wait for - an EMSI_ACK prior to leaving its conversation mode. If no EMSI_ACK - sequence is received with ten seconds, a second EMSI_TCH sequence - should be issued before the Server resumes operation. If, however, an - EMSI_NAK sequence is received from the Client, the Server must - re-transmit the EMSI_TCH sequence. - - - The EMSI_ICI packet - ===================================================================== - The following pseudo structure shows the layout of the EMSI_ICI - packet. Note that the information in the EMSI_ICI packet may not - exceed 2,048 bytes. - - EMSI_ICI - name, - alias, - location, - data#, - voice#, - password, - birthdate, - crtdef, - protocols, - capabilities, - requests, - software, - xlattabl: ASCII1; - end; - - EMSI_ICI field definitions - --------------------------------------------------------------------- - - ===================================================================== - Name and Alias (or Handle) - --------------------------------------------------------------------- - The name and possible alias (AKA) of the user (Client). This must be - treated case insensitively by the Server. - - ===================================================================== - Location - --------------------------------------------------------------------- - The geographical location of the user, ie. Stockholm, Sweden. - - ===================================================================== - data# and voice# - --------------------------------------------------------------------- - Unformatted data and voice telephone numbers of the user. Unformatted - is defined as the full telephone number, including country and local - area code. Eg. 46-8-90510 is a telephone number in Stockholm, Sweden. - - ===================================================================== - Password - --------------------------------------------------------------------- - The password for the user. This must be treated case insensitively by - the Server. - - ===================================================================== - Birthdate - --------------------------------------------------------------------- - Hexadecimal string representing a long integer containing the birth- - date of the user in UNIX notation (number of seconds since midnight, - Jan 1 1970). This must be treated case insensitively by the Server. - - ===================================================================== - CrtDef - --------------------------------------------------------------------- - Consisting of four sub-fields separated by commas, this field - contains from left to right: The requested terminal emulation - protocol, the number of rows of the user's CRT, the number of columns - of the user's CRT, and the number of ASCII NUL (00H) characters the - user's software requires to be transmitted between each line of text. - - The following terminal emulation protocols are defined: - - AVT0 AVATAR/0+. Used in conjunction with ANSI. If AVT0 is - specified by the Client, support for ANSI X3.64 emulation - should be assumed to be present. - ANSI ANSI X3.64 - VT52 DEC VT52 - VT100 DEC VT100 - TTY No terminal emulation, also referred to as RAW mode. - - ===================================================================== - Protocols - --------------------------------------------------------------------- - The file transfer protocol option specifies the preferred method of - transferring files between the Client and the Server in either - direction. The Client presents all transfer protocols it is capable - of supporting and the Server chooses the most appropriate protocol. - - DZA* DirectZAP (Zmodem variant) - ZAP ZedZap (Zmodem variant) - ZMO Zmodem w/1,024 byte data packets - SLK SEAlink - KER Kermit - - (*) DirectZAP is a variant of ZedZap. The difference is that the - transmitter only escapes CAN (18H). It is not recommended to use the - DirectZAP protocol when the Client and the Server are connected via a - packet switching network, or via another layer sensitive to control - characters such as XON and XOFF. - - - ===================================================================== - Capabilities - --------------------------------------------------------------------- - The capabilities of the user's software. If more than one capability - is listed, each capability is separated by a comma. - - The following capability codes are defined: - - CHT Can do full-screen on-line conversation (CHAT). - MNU Can do ASCII image download (see ISM packet). - TAB Can handle TAB (ASCII 09H) characters. - ASCII8 Can handle 8-bit IBM PC ASCII characters. - - ===================================================================== - Requests - --------------------------------------------------------------------- - The requests field specifies what the user wishes to do once the - initial IEMSI negotiation has been successfully completed. If more - than one capability is listed, each capability is separated by a - comma. - - The following request codes are defined: - - NEWS Show bulletins, announcements, etc. - MAIL Check for new mail. - FILE Check for new files. - HOT Hot-Keys. - CLR Screen clearing. - HUSH Do not disturb. - MORE Page pausing, often referred to as "More". - FSED* Full-screen editor. - XPRS . - - (*) Note that this allows the Client to request use of a full-screen - editor without requiring that it also supports a full-screen terminal - emulation protocol. - - ===================================================================== - Software - --------------------------------------------------------------------- - The name, version number, and optionally the serial number of the - user's software. Eg. {FrontDoor,2.00,AE000001}. - - ===================================================================== - XlatTabl - --------------------------------------------------------------------- - Used for character translation between the Server and the Client. - This field has not been completely defined yet and should always be - transmitted as {} (empty). - - - The EMSI_ISI packet - ===================================================================== - The following pseudo structure shows the layout of the EMSI_ISI - packet. Note that the information in the EMSI_ISI packet may not - exceed 2,048 bytes. - - EMSI_ISI - id, - name, - location, - operator, - localtime, - notice, - wait, - capabilities: ASCII1; - end; - - EMSI_ISI field definitions - --------------------------------------------------------------------- - - ===================================================================== - ID - --------------------------------------------------------------------- - The name, version number, and optionally the serial number of the - Server software. Eg. {RemoteAccess,1.10/b5,CS000001}. - - ===================================================================== - Name - --------------------------------------------------------------------- - The name of the Server system. Eg. {Advanced Engineering S.A.R.L.}. - - ===================================================================== - Location - --------------------------------------------------------------------- - The geographical location of the user, ie. Stockholm, Sweden. - - ===================================================================== - Operator - --------------------------------------------------------------------- - The name of the primary operator of the Server software. Eg. {Joaquim - H. Homrighausen}. - - - - ===================================================================== - Localtime - --------------------------------------------------------------------- - Hexadecimal string representing a long integer containing the current - time of the Server in UNIX notation (number of seconds since midnight, - Jan 1 1970). This must be treated case insensitively by the Client. - - ===================================================================== - Notice - --------------------------------------------------------------------- - May contain copyright notices, system information, etc. This field - may optionally be displayed by the Client. - - ===================================================================== - Wait - --------------------------------------------------------------------- - A single character used by the Server to indicate that the user - has to press the key to resume operation. This is used in - conjunction with ASCII Image Downloads (see ISM packet). - - ===================================================================== - Capabilities - --------------------------------------------------------------------- - The capabilities of the Server software. No Server software - capabilities have currently been defined. - - Credits and other notes - ===================================================================== - The original EMSI specifications were designed by Chris Irwin and - Joaquim H. Homrighausen. The original IEMSI specifications were - designed by Joaquim H. Homrighausen and Andrew Milner. -
+Document: FSC-0056 +Version: 001 +Date: 03-May-1991 + + + + + + EMSI/IEMSI Protocol Definitions + Joaquim H. Homrighausen + May 3, 1991 + + + + + Status of this document: + + This FSC suggests a proposed protocol for the FidoNet(r) community, + and requests discussion and suggestions for improvements. + Distribution of this document is subject to the restrictions + specified on the next page. + + Fido and FidoNet are registered marks of Tom Jennings and Fido + Software. + + + + + (Also known as EMSC-001; Electronic Mail Standards Document #001) + --------------------------------------------------------------------- + Copyright 1989-1991 Joaquim H. Homrighausen. All rights reserved. + --------------------------------------------------------------------- + + + Notice + ===================================================================== + This document obsoletes EMSI_003 and any previous document describing + the EMSI, UZAP, and/or IEMSI handshake protocol. I apologize for the + lack of proper state charts. I am currently under a fairly heavy + work-load and thought it would be better to release something half- + decent than not to release anything at all. + + Restrictions + ===================================================================== + EMSI/IEMSI may be used by any developer as long as these + specifications are followed exactly. The IEMSI and EMSI specifications + may be implemented independently of each other. + + EMSI/IEMSI may be used free-of-charge by any developer for any + purpose, commercially or otherwise. In creating EMSI/IEMSI, we are + taking the first step towards developing a clear protocol definition + for state-of-the-art E-Mail systems to follow. + + This document and its NOTES file (EMSI.NOT) may be freely copied and + distributed, but must NEVER be distributed in a modified form. If you + have an enhancement request, please contact the author of this + document; do not change it yourself. + + Permission is hereby granted to the FTSC (Fidonet Technical Standards + Committee) and other technical organisations to republish this + document in its entirety. Librarians may change the title page and + page headers to match their library format as long as all copyrights + and body text remain unaltered. The original document name and source + (EMSC) must be mentioned in any republished versions of this + document. + + No organization, company, person, or other being may impose any fees + for any reason for providing this document. This document may not be + sold or otherwise transferred for personal or company gain under any + circumstances. + + Layout + ===================================================================== + This document consists of four major parts; A short introduction and + explanation of the EMSI/IEMSI handshake protocol, the EMSI + definitions, the IEMSI definitions, and finally various notes and + credits. + + + PART I + + Introduction + ===================================================================== + The EMSI/IEMSI handshake protocol allows for maximum flexibility in + E-Mail session start-up and control. The YooHoo (FTS-6) standard, + designed by Wynn Wagner III, was a good idea, but did not allow + sufficient room for growth and cannot be used in 7-bit environments. + EMSI/IEMSI should provide for virtually unlimited growth and + expansion of its own scope. By providing variable-length packets, + EMSI/IEMSI is capable of being as simple or as complex as necessary + and entirely backwards compatible when new features and/or protocols + are added. + + All EMSI/IEMSI packets and sequences consists of 7-bit printable + ASCII characters. This format allows us to establish a universal + handshake between "PCs" and "mainframes" alike. The more complicated + the computer system, the more restrictions affect its I/O; there are + many I/O channels that cannot transmit control characters such as XON + and XOFF; for this, we have created a universal handshake protocol + that uses all printable characters. + + EMSI/IEMSI does allow control and 8-bit ASCII characters to be + transmitted. This is, however, accomplished by escaping the data + and converting it to 7-bit printable ASCII characters. + + Data layer + ===================================================================== + EMSI/IEMSI is a protocol based on multi-character sequences rather + than single character flow control. There are several advantages of + using several characters rather than just one, but there is also a + drawback. On very poor-quality telephone lines, EMSI will most likely + require several retransmissions of packets since line noise usually + come in bursts. That aside, there is little advantage in using a + protocol based on single characters. + + All EMSI/IEMSI sequences are terminated by a single+ +Go Back + + + + diff --git a/html/ftsc/fsc-0057.html b/html/ftsc/fsc-0057.html index 1355fff7..d186b88a 100755 --- a/html/ftsc/fsc-0057.html +++ b/html/ftsc/fsc-0057.html @@ -1,533 +1,534 @@ - - -unless + otherwise specified. This is necessary to force some data collection + equipment to flush their buffers. Appending to EMSI/IEMSI + sequences in a FidoNet environment is a delicate matter and it is + important that you follow the notes regarding this. + + Note regarding file requests + --------------------------------------------------------------------- + The file request concept mentioned in the EMSI document refers to + WaZOO style file requests as specified in FTS-6. No other file + request mechanism is supported in the EMSI specifications. + + + Separator usage + --------------------------------------------------------------------- + To designate the fields within the EMSI/IEMSI packets and retain + complete transparency, both start and stop characters are used. + + The ASCII1 type is used for all fields within the packet. This uses + the brace characters to delimit the fields. The '{' (ASCII 123) + character is the start byte and '}' (ASCII 125) is the stop byte. + If a stop byte is used as literal data within a field, it must be + transmitted twice. The end of a field is designated by a stop byte + that is not followed by another identical stop byte. + + The ASCII2 fields are delimited in exactly the same way, but use the + square brackets as delimiters. The '[' (ASCII 91) is the start byte + and ']' (ASCII 93) is the stop byte. ASCII2 is used to delimit data + within the ASCII1 extra_field information. + + 7-bit data restriction + --------------------------------------------------------------------- + It is the developer's responsibility to ensure that the software + generates EMSI/IEMSI packets and sequences containing only 7-bit + (00H through 7eH) printable ASCII characters. + + It is recommended that all EMSI/IEMSI implementations strip the high- + order bit of all received characters prior to processing the packet/ + sequence and prior to calculating CRC values. + + CRC values + --------------------------------------------------------------------- + The polynomial used to calculate a 16-bit CRC is the same polynomial + used in the Xmodem file transfer protocol. The polynomial used to + calculate a 32-bit CRC is the same polynomial used in the Zmodem file + transfer protocol. + + Binary values + --------------------------------------------------------------------- + Since the EMSI environment specifies only 7-bit printable ASCII + characters to be used, binary values, such as CRC and length + descriptors are expressed as a four character hexadecimal string. The + only exception to this is a 32-bit CRC value which is expressed as an + eight character hexadecimal string. + + The application must treat them case insensitive, eg. ffaa should be + treated identical to FFAA. + + + Handling 8-bit data + --------------------------------------------------------------------- + Although EMSI only uses 7-bit printable ASCII characters, there is an + escape mechanism that allows systems to transmit control and 8-bit + ASCII characters without the requirement of an 8-bit data link. The + escape character is a backslash character ('\') and is followed by two + characters in hexadecimal notation. Eg. "\80" is the ASCII character + 128. To insert an actual backslash character, two backslashes are used + ("\\"), or a backslash followed by the hexadecimal code for a + backslash, eg. "\5c". + + The hexadecimal code following a backslash MUST always be two + characters, ie. to insert ASCII 15 (hexadecimail 'f'), the result + would be "0f". All hexadecimal sequences must be treated case + insensitively. + + + PART II - Electronic Mail Standard Idenfitication + + Connecting two EMSI capable systems + ===================================================================== + This assumes that the two systems are connected and that no data + has been transmitted by the Caller. + + It should be mentioned that sending/monitoring for the "YooHoo", + "TSYNC", and other protocol start characters is optional and not + required for a strict EMSI implementation. + + STEP 1, EMSI INIT + + Calling system Answering system + +-+-------------------------------+----------------------------------+ + :1: Send <CR> until ANY character : Send EMSI_REQ and possible : + : : is received. : banner, etc. : + +-+-------------------------------+----------------------------------+ + :2: Receive banner, etc. Monitor : Monitor line for the EMSI_INQ : + : : line for the EMSI_REQ : sequence and if received, : + : : sequence and if received, : attempt to handshake immediately.: + : : transmit EMSI_INQ and attempt : : + : : to handshake immediately. : : + +-+-------------------------------+----------------------------------+ + :3: No EMSI_REQ sequence received,: Monitor line for EMSI_INQ and : + : : send EMSI_INQ twice followed : possible other protocol start : + : : by possible other protocol : characters and if received, : + : : start characters. : attempt to handshake immediately.: + : : : : + : : Transmit <CR> : Go to step 3. : + +-+-------------------------------+----------------------------------+ + :4: If EMSI_REQ sequence received,: + : : send EMSI_INQ and attempt to : + : : handshake immediately, : + : : otherwise repeat step 3. : + +-+-------------------------------+ + + In steps 1 and 2, both the Calling and Answering system terminate all + sequences with <CR>. In step 3, the Calling system does not terminate + sequences with <CR> as it is explicitly transmitted after possible + protocol start characters. In step 4, the Calling system once again + terminate all sequences with a <CR>. + + + STEP 2A, RECEIVE EMSI HANDSHAKE + + At this point, all sequences are terminated with a <CR>. + + +-+------------------------------------------------------------------+ + :1: Tries=0, T1=20 seconds, T2=60 seconds : + +-+------------------------------------------------------------------+ + :2: Increment Tries : + : : : + : : Tries>6? Terminate, and report failure. : + : +------------------------------------------------------------------+ + : : Are we answering system? Transmit EMSI_REQ, go to step 3. : + : +------------------------------------------------------------------+ + : : Tries>1? Transmit EMSI_NAK, go to step 3. : + : +------------------------------------------------------------------+ + : : Go to step 4. : + +-+------------------------------------------------------------------+ + :3: T1=20 seconds : + +-+------------------------------------------------------------------+ + :4: Wait for EMSI sequence until EMSI_HBT or EMSI_DAT or any of the : + : : timers have expired. : + : : : + : : If T2 has expired, terminate call and report failure. : + : +------------------------------------------------------------------+ + : : If T1 has expired, go to step 2. : + : +------------------------------------------------------------------+ + : : If EMSI_HBT received, go to step 3. : + : +------------------------------------------------------------------+ + : : If EMSI_DAT received, go to step 5. : + : +------------------------------------------------------------------+ + : : Go to step 4. : + +-+------------------------------------------------------------------+ + :5: Receive EMSI_DAT packet : + : +------------------------------------------------------------------+ + : : Packet received OK? Transmit EMSI_ACK twice, and : + : : go to step 6. : + : +------------------------------------------------------------------+ + : : Go to step 2. : + +-+------------------------------------------------------------------+ + :6: Received EMSI_DAT packet OK, exit. : + +-+------------------------------------------------------------------+ + + All processing of the information in the EMSI_DAT packet must be done + after transmitting EMSI_ACK twice to the remote system. It is + recommended that an EMSI_HBT sequence is issued once every seven + seconds while such processing is taking place to avoid unnecessary + handshake collissions. Emitting EMSI_HBT should only be done when + it is obvious that the remote system is waiting for the second phase + of the EMSI handshake to take place. + + + + STEP 2B, TRANSMIT EMSI HANDSHAKE + + At this point, all sequences are terminated with a <CR>. + + +-+------------------------------------------------------------------+ + :1: Tries=0, T1=60 seconds : + +-+------------------------------------------------------------------+ + :2: Transmit EMSI_DAT packet and increment Tries : + : : : + : +------------------------------------------------------------------+ + : : Tries>6? Terminate, and report failure. : + : +------------------------------------------------------------------+ + : : Go to step 3. : + +-+------------------------------------------------------------------+ + :3: T2=20 seconds : + +-+------------------------------------------------------------------+ + :4: Wait for EMSI sequence until T1 has expired : + : : : + : : If T1 has expired, terminate call and report failure. : + : +------------------------------------------------------------------+ + : : If T2 has expired, go to step 2. : + : +------------------------------------------------------------------+ + : : If EMSI_REQ received, go to step 4. : + : +------------------------------------------------------------------+ + : : If EMSI_ACK received, go to step 5. : + : +------------------------------------------------------------------+ + : : If any other sequence received, go to step 2. : : + +-+------------------------------------------------------------------+ + :5: Received EMSI_ACK, exit. : + +-+------------------------------------------------------------------+ + + + EMSI packet and sequence definitions + ===================================================================== + + ===================================================================== + EMSI Inquiry **EMSI_INQ + --------------------------------------------------------------------- + EMSI Inquiry is transmitted by the calling system to identify it as + EMSI capable. If an EMSI_REQ sequence is received in response, it is + safe to assume the answering system to be EMSI capable. + + ===================================================================== + EMSI Request **EMSI_REQ + --------------------------------------------------------------------- + EMSI Request is transmitted by the answering system in response to an + EMSI Inquiry sequence. It should also be transmitted prior to or + immediately following the answering system has identified itself by + transmitting its program name and/or banner. If the calling system + receives an EMSI Request sequence, it can safely assume that the + answering system is EMSI capable. + + ===================================================================== + EMSI Client **EMSI_CLI + --------------------------------------------------------------------- + EMSI Client is used by terminal emulation software to force a mailer + front-end to bypass any unnecessary mail session negotiation and + treat the call as an incoming human caller. The EMSI_CLI sequence may + not be issued by any software attempting to establish a mail session + between two systems and must only be acted upon by an answering + system. + + ===================================================================== + EMSI Heartbeat **EMSI_HBT + --------------------------------------------------------------------- + EMSI Heartbeat is used to prevent unnecessary timeouts from occurring + while attempting to handshake. It is most commonly used when the + answering system turns around to transmit its EMSI_DAT packet. It is + quite normal that any of the timers of the calling system (which at + this stage is waiting for an EMSI_DAT packet) expires while the + answering system is processing the recently received EMSI_DAT packet. + + ===================================================================== + EMSI Data **EMSI_DAT + --------------------------------------------------------------------- + EMSI Data is transmitted by both the calling and answering system at + the appropriate time to exchange system information. Following the + header is a four byte number representing the length of + excluding the CRC and terminating . + + The EMSI_DAT packet is a variable length packet. Since this is a + synchronous protocol, the inbound data buffer should be purged + between transmission of the and fields to prevent + accidental EMSI_NAK sequences, etc. + + + ===================================================================== + EMSI ACK **EMSI_ACK + --------------------------------------------------------------------- + EMSI ACK is transmitted by either system as a positive + acknowledgement of the valid receipt of a EMSI_DAT packet. This should + only be used as a response to EMSI_DAT and not any other packet. + Redundant EMSI_ACK sequences should be ignored. + + ===================================================================== + EMSI NAK **EMSI_NAK + --------------------------------------------------------------------- + EMSI NAK is transmitted by either system as a negative + acknowledgement of the valid receipt of a EMSI_DAT packet. This + should only be used as a response to EMSI_DAT and not any other + packet. Redundant EMSI_NAK packets should be ignored. + + The EMSI_DAT packet + ===================================================================== + The EMSI_DAT packet is the core of an EMSI negotiated session. It + contains information vital to the mail session. The following pseudo + structure shows the layout of the EMSI_DAT packet. + + EMSI_DAT + fingerprint, "EMSI" + system_address_list, + password, + link_codes, + compatibility_codes, + mailer_product_code, + mailer_name, + mailer_version, + mailer_serial_number: ASCII1; + extra_field_1, + .. + .. + extra_field_n: EMSI_addon; (optional fields) + end; + + The EMSI_addon structure is defined as follows: + + EMSI_addon + product_ID, + specific_data: ASCII1; + end; + + + Following is an example of the actual data transmitted as an EMSI_DAT + packet: + + {EMSI}{2:270/17}{}{8N1,PUA}{ZAP,ZMO,ARC,XMA}{44}{AirMail}{0.10} + {Beta-2}{IDENT}{[Advanced Engineering S.A.R.L.][Luxembourg] + [Joaquim Homrighausen][-Unpublished-][9600][MO,XA,HST,V32B,V42B]} + + EMSI_DAT field definitions + --------------------------------------------------------------------- + + ===================================================================== + Fingerprint EMSI + --------------------------------------------------------------------- + The constant "EMSI". There is no need for a revision level since this + basic format cannot change and remain backward compatible. + + ===================================================================== + System address list + --------------------------------------------------------------------- + The system address list is a list of system-specific identifiers for + the E-Mail system separated by spaces. + + For FidoNet-technology based networks, it is required that + Zone:Net/Node be presented, and .Point be omitted if zero. Zone and + Net must not be zero. + + In other networks, an address such as "jhom@csource.oz.au" should be + considered valid. + + ===================================================================== + Password + --------------------------------------------------------------------- + For systems using a session level password, it would be passed in + this field. Note that the same password is used for all presented + addresses and that it must be treated case insensitive. + + ===================================================================== + Link codes + --------------------------------------------------------------------- + Link codes is a string of flags that specify desired connect + conditions. These codes are separated by commas. New codes may be + added with prior approval from the author of this document. + + Calling system/answering system options: + + 8N1, + 7E1, + 7O2, + etc. Communication parameters. + + Calling system options: + + PUA Pickup mail for all presented addresses. + PUP Pickup mail for primary address only. + NPU No mail pickup desired. + + + Answering system options: + + HAT Hold ALL traffic. + HXT Hold compressed mail traffic. + HRQ Hold file requests (not processed at this time). + + ===================================================================== + Compatibility codes + --------------------------------------------------------------------- + Compatibility codes is a string of flags that specifies the + capabilities and enabled features of the mailer. These codes are + separated by commas. New codes may be added with prior approval from + the author of this document. + + The calling system must list supported protocols first and descending + order of preference (the most desirable protocol should be listed + first). The answering system should only present one protocol and it + should be the first item in the compatibility_codes field. + + Protocols + ----------------------------------------------------------------- + DZA* DirectZAP (Zmodem variant). + ZAP ZedZap (Zmodem variant). + ZMO** Zmodem w/1,024 byte data packets. + JAN Janus. + KER Kermit. + + Other codes + ----------------------------------------------------------------- + NCP No compatible protocols (failure). + NRQ No file requests accepted by this system. + ARC ARCmail 0.60-capable, as defined by the FTSC. + XMA Supports other forms of compressed mail. + FNC Filename conversion. This indicates that any transmitted + files must follow the MS-DOS restrictions of an eight + character file name followed by a three character + extension; eg. FILENAME.EXT + + (*) DirectZAP is a variant of ZedZap. The difference is that the + transmitter only escapes CAN (18H). It is not recommended to use the + DirectZAP protocol when two systems are connected via a packet + switching network, or via another layer sensitive to control + characters such as XON and XOFF. + + (**) The minimum protocol requirement for an EMSI implementation is + to support plain Zmodem (16- or 32-bit CRC, 1,024 byte packets) which + is represented by the ZMO flag in EMSI. + + ===================================================================== + Mailer product code + --------------------------------------------------------------------- + The hexadecimal representation of the EMSC product code assigned to + the mailer. Currently, the EMSC codes are the same as the FTSC + assigned codes. + + ===================================================================== + Mailer name + --------------------------------------------------------------------- + Specifies the name of the E-Mail system sending the EMSI packet. + + ===================================================================== + Mailer version + --------------------------------------------------------------------- + The version number of the mailer software, ie. "1.10", "2.00". + + ===================================================================== + Mailer serial number + --------------------------------------------------------------------- + The serial number, distribution source, version information, etc. + This field is usually displayed like: + + Name Version/Serial_number + + eg. + + AirMail 0.10/Beta-2 + + ===================================================================== + Extra fields + --------------------------------------------------------------------- + The extra fields make the EMSI handshake protocol extremely flexible. + Any program or mailer may add fields to the end of the pre-defined + structure so that program-specific data may be passed without the + concern of interferring with other systems. + + There may be any number of extra fields added to the end of this + structure. Each EXTRA_FIELD contains two ASCII1 strings: + + PRODUCT_IDENTIFIER A unique "tag" that defines a specific + program (such as a mailer or a utility). + + SPECIFIC_DATA ASCII text that is specific data to the + program defined in PRODUCT_IDENTIFIER. With + this structure, any program can add its own + data to the EMSI packet without affecting + other applications. + + It is recommended that you contact the author of this document should + you have any EXTRA_FIELDS that you may think worthwhile for other + developers to implement and support. + + Predefined extra fields + --------------------------------------------------------------------- + The following extra fields have been defined to date. + + PRODUCT_IDENTIFIER : IDENT + + Purpose : General identification of system that + includes all information to generate a St. + Louis-format nodelist entry. + + SPECIFIC_DATA : system_name, + city, + operator_name, + phone_number, + baud_rate, + flags: ASCII2; + + SYSTEM_NAME The name of the system given by the user. + This would normally be a company name, BBS + name or other identifying text. + + CITY The geographical location of the system. + + OPERATOR_NAME The name of the person primarily responsible + for the system. + + PHONE_NUMBER The telephone number of the system, or + "-Unpublished-" if the telephone number is + unpublished. This MUST be in the standard + format COUNTRY-CITY-NUMBER. Leading zeros + should be stripped from the city code, + ie. Stockholm (Sweden) has a city code of 08, + included in an EMSI packet, it would read + 46-8- . + + BAUD_RATE The maximum baud rate supported by the + system. This is NOT necessarily the same as + the highest DTE rate. + + FLAGS The St. Louis (FTSC) nodelist flags + associated with the system. + + + PART III - Interactive Electronic Mail Standard Idenfitication + + Connecting two IEMSI capable systems + ===================================================================== + Two specific labels are used when discussing the IEMSI definitions. + The Client, which in this case is the Terminal software, and the + Server, which in this case is the interactive on-line software, + such as a BBS package or database system. It is assumed that the + Client and the Server have established a data link and that no + data has been transmitted by the Server. + + STEP 1, IEMSI INIT + + There is no specific sequence of events in the IEMSI definition. The + Client must monitor incoming data and if the EMSI_IRQ sequence is + detected, it attempts to negotiate an IEMSI session with the Server. + Under no circumstances is the Client allowed to transmit an EMSI_ICI + packet prior to receiving the EMSI_IRQ sequence from the Server. + All IEMSI sequences and EMSI sequences used during an IEMSI session + are terminated by a single . There are no exceptions to this. + + + STEP 2A, Server + + +-+------------------------------------------------------------------+ + :1: Tries=0, T2=60 seconds : + +-+------------------------------------------------------------------+ + :2: Transmit EMSI_IRQ sequence : + +-+------------------------------------------------------------------+ + :3: T1=20 seconds, increment Tries : + : : : + : : Tries>3? Discontinue IEMSI negotiation. : + +-+------------------------------------------------------------------+ + :4: Wait for EMSI_ICI packet until any of the timers have expired. : + : : : + : : If T2 has expired, discontinue IEMSI negotiation. : + : +------------------------------------------------------------------+ + : : If T1 has expired, go to step 2. : + : +------------------------------------------------------------------+ + : : If EMSI_ICI seen, go to step 5. : + : +------------------------------------------------------------------+ + : : Go to step 4. : + +-+------------------------------------------------------------------+ + :5: Receive EMSI_ICI packet : + : +------------------------------------------------------------------+ + : : Packet received OK? Transmit EMSI_ISI packet, and : + : : go to step 6. : + : +------------------------------------------------------------------+ + : : Packet not received OK? Transmit EMSI_NAK and go to step : + : : 3. : + +-+------------------------------------------------------------------+ + :6: Tries=0 : + +-+------------------------------------------------------------------+ + :7: T1=20 seconds, increment Tries : + : : : + : : Tries>3? Discontinue IEMSI negotiation. : + +-+------------------------------------------------------------------+ + :8: Wait for EMSI_ACK/EMSI_NAK until any of the timers have expired. : + : : : + : : If T2 has expired, discontinue IEMSI negotiation. : + : +------------------------------------------------------------------+ + : : If T1 has expired or EMSI_NAK received, transmit EMSI_ISI packet : + : : again and go to step 7. : + : +------------------------------------------------------------------+ + : : If EMSI_ACK received, go to step 9. : + : +------------------------------------------------------------------+ + : : Go to step 8. : + +-+------------------------------------------------------------------+ + :9: IEMSI session successfully established, exit. : + +-+------------------------------------------------------------------+ + + The Server must monitor its incoming data channel for 'normal' data, + ie. data not transmitted as IEMSI sequences, to detect if the user is + attempting to log-in without the use of IEMSI. The only basic + restriction this imposes on the Server is that user names and/or IDs + may not start with the character '*' since all EMSI/IEMSI sequences + start with this character. + + All processing of the information in the EMSI_ICI packet must be done + after transmitting the EMSI_ISI packet and receiving two EMSI_ACK + sequences in return. + + + STEP 2B, Client + + Note that this assumes that the Client has seen the EMSI_IRQ sequence + transmitted by the Server and that the negotiation is ready to take + place. + + +-+------------------------------------------------------------------+ + :1: Tries=0, T2=60 seconds : + +-+------------------------------------------------------------------+ + :2: Transmit EMSI_ICI packet : + +-+------------------------------------------------------------------+ + :3: T1=20 seconds, increment Tries : + +-+------------------------------------------------------------------+ + :5: Tries>3 or T2 expired? Discontinue IEMSI negotiation. : + : +------------------------------------------------------------------+ + : : If T1 has expired, go to step 2. : + : +------------------------------------------------------------------+ + : : If EMSI_ISI seen, go to step 6. : + : +------------------------------------------------------------------+ + : : Go to step 5. : + +-+------------------------------------------------------------------+ + :6: Receive EMSI_ISI packet : + : +------------------------------------------------------------------+ + : : Packet received OK? Transmit EMSI_ACK packet twice, : + : : and go to step 7. : + : +------------------------------------------------------------------+ + : : Packet not received OK? Transmit EMSI_NAK and go to step: + : : 3. : + +-+------------------------------------------------------------------+ + :7: IEMSI session successfully established, exit. : + +-+------------------------------------------------------------------+ + + All processing of the information in the EMSI_ISI packet must be done + after transmitting two EMSI_ACK sequences in return. + + If either of the ICI or ISI packets are NAK'd three consecutive times, + the session negotiation attempt is terminated and the Client proceeds + as it would have done should the Server not have supported IEMSI. + + + IEMSI packet and sequence definitions + ===================================================================== + + ===================================================================== + EMSI ACK **EMSI_ACK + --------------------------------------------------------------------- + EMSI ACK is transmitted by either Client or Server as a positive + acknowledgement of the valid receipt of an IEMSI packet such as + EMSI_ISI and EMSI_ICI. During an IEMSI session, this sequence can, + however, be used as a positive acknowledgement for other IEMSI + packets. Redundant EMSI_ACK sequences should be ignored. + + ===================================================================== + EMSI NAK **EMSI_NAK + --------------------------------------------------------------------- + EMSI NAK is transmitted by either Client or Server as a negative + acknowledgement of the valid receipt of an IEMSI packet such as + EMSI_ISI and EMSI_ICI. During an IEMSI session, this sequence can, + however, be used as a negative acknowledgement for other IEMSI + packets. Redundant EMSI_NAK sequences should be ignored. + + ===================================================================== + EMSI IRQ **EMSI_IRQ + --------------------------------------------------------------------- + Similar to EMSI_REQ which is used by mailer software to negotiate a + mail session. IRQ identifies the Server as being capable of + negotiating an IEMSI session. When the Client detects an IRQ sequence + in its inbound data stream, it attempts to negotiate an IEMSI + session. + + ===================================================================== + EMSI IIR **EMSI_IIR + --------------------------------------------------------------------- + The IIR (Interactive Interrupt Request) sequence is used by either + Client or Server to abort the current negotiation. This could be + during the initial IEMSI handshake or during other interactions + between the Client and the Server. + + ===================================================================== + EMSI ICI **EMSI_ICI + --------------------------------------------------------------------- + The ICI packet is used by the Client to transmit its configuration + and Server-related information to the Server. It contains Server + parameters, Client options, and Client capabilities. + + ===================================================================== + EMSI ISI **EMSI_ISI + --------------------------------------------------------------------- + The ISI packet is used by the Server to transmit its configuration + and Client-related information to the Client. It contains Server data + and capabilities. + + ===================================================================== + EMSI ISM **EMSI_ISM<len><data><lt;crc32><lt;CR> + --------------------------------------------------------------------- + The ISM packet is used to transfer ASCII images from the Server to + the Client. These images can then be recalled by the Client when + the Server needs to display a previously displayed image. This will + be further described in future revisions of this document. + + ===================================================================== + EMSI CHT **EMSI_CHT<crc16><CR> + --------------------------------------------------------------------- + The CHT sequence is used by the Server to instruct the Client + software to enter its full-screen conversation mode function (CHAT). + Whether or not the Client software supports this is indicated in the + ICI packet. + + If the Server transmits this sequence to the Client, it must wait for + an EMSI_ACK prior to engaging its conversation mode. If no EMSI_ACK + sequence is received with ten seconds, it is safe to assume that the + Client does not support EMSI_CHT. If, however, an EMSI_NAK sequence + is received from the Client, the Server must re-transmit the + EMSI_CHT sequence. Once the on-line conversation function has been + sucessfully activated, the Server must not echo any received + characters back to the Client. + + ===================================================================== + EMSI TCH **EMSI_TCH<crc16><CR> + --------------------------------------------------------------------- + The TCH sequence is used by the Server to instruct the Client + software to terminate its full-screen conversation mode function + (CHAT). + + If the Server transmits this sequence to the Client, it must wait for + an EMSI_ACK prior to leaving its conversation mode. If no EMSI_ACK + sequence is received with ten seconds, a second EMSI_TCH sequence + should be issued before the Server resumes operation. If, however, an + EMSI_NAK sequence is received from the Client, the Server must + re-transmit the EMSI_TCH sequence. + + + The EMSI_ICI packet + ===================================================================== + The following pseudo structure shows the layout of the EMSI_ICI + packet. Note that the information in the EMSI_ICI packet may not + exceed 2,048 bytes. + + EMSI_ICI + name, + alias, + location, + data#, + voice#, + password, + birthdate, + crtdef, + protocols, + capabilities, + requests, + software, + xlattabl: ASCII1; + end; + + EMSI_ICI field definitions + --------------------------------------------------------------------- + + ===================================================================== + Name and Alias (or Handle) + --------------------------------------------------------------------- + The name and possible alias (AKA) of the user (Client). This must be + treated case insensitively by the Server. + + ===================================================================== + Location + --------------------------------------------------------------------- + The geographical location of the user, ie. Stockholm, Sweden. + + ===================================================================== + data# and voice# + --------------------------------------------------------------------- + Unformatted data and voice telephone numbers of the user. Unformatted + is defined as the full telephone number, including country and local + area code. Eg. 46-8-90510 is a telephone number in Stockholm, Sweden. + + ===================================================================== + Password + --------------------------------------------------------------------- + The password for the user. This must be treated case insensitively by + the Server. + + ===================================================================== + Birthdate + --------------------------------------------------------------------- + Hexadecimal string representing a long integer containing the birth- + date of the user in UNIX notation (number of seconds since midnight, + Jan 1 1970). This must be treated case insensitively by the Server. + + ===================================================================== + CrtDef + --------------------------------------------------------------------- + Consisting of four sub-fields separated by commas, this field + contains from left to right: The requested terminal emulation + protocol, the number of rows of the user's CRT, the number of columns + of the user's CRT, and the number of ASCII NUL (00H) characters the + user's software requires to be transmitted between each line of text. + + The following terminal emulation protocols are defined: + + AVT0 AVATAR/0+. Used in conjunction with ANSI. If AVT0 is + specified by the Client, support for ANSI X3.64 emulation + should be assumed to be present. + ANSI ANSI X3.64 + VT52 DEC VT52 + VT100 DEC VT100 + TTY No terminal emulation, also referred to as RAW mode. + + ===================================================================== + Protocols + --------------------------------------------------------------------- + The file transfer protocol option specifies the preferred method of + transferring files between the Client and the Server in either + direction. The Client presents all transfer protocols it is capable + of supporting and the Server chooses the most appropriate protocol. + + DZA* DirectZAP (Zmodem variant) + ZAP ZedZap (Zmodem variant) + ZMO Zmodem w/1,024 byte data packets + SLK SEAlink + KER Kermit + + (*) DirectZAP is a variant of ZedZap. The difference is that the + transmitter only escapes CAN (18H). It is not recommended to use the + DirectZAP protocol when the Client and the Server are connected via a + packet switching network, or via another layer sensitive to control + characters such as XON and XOFF. + + + ===================================================================== + Capabilities + --------------------------------------------------------------------- + The capabilities of the user's software. If more than one capability + is listed, each capability is separated by a comma. + + The following capability codes are defined: + + CHT Can do full-screen on-line conversation (CHAT). + MNU Can do ASCII image download (see ISM packet). + TAB Can handle TAB (ASCII 09H) characters. + ASCII8 Can handle 8-bit IBM PC ASCII characters. + + ===================================================================== + Requests + --------------------------------------------------------------------- + The requests field specifies what the user wishes to do once the + initial IEMSI negotiation has been successfully completed. If more + than one capability is listed, each capability is separated by a + comma. + + The following request codes are defined: + + NEWS Show bulletins, announcements, etc. + MAIL Check for new mail. + FILE Check for new files. + HOT Hot-Keys. + CLR Screen clearing. + HUSH Do not disturb. + MORE Page pausing, often referred to as "More". + FSED* Full-screen editor. + XPRS <reserved>. + + (*) Note that this allows the Client to request use of a full-screen + editor without requiring that it also supports a full-screen terminal + emulation protocol. + + ===================================================================== + Software + --------------------------------------------------------------------- + The name, version number, and optionally the serial number of the + user's software. Eg. {FrontDoor,2.00,AE000001}. + + ===================================================================== + XlatTabl + --------------------------------------------------------------------- + Used for character translation between the Server and the Client. + This field has not been completely defined yet and should always be + transmitted as {} (empty). + + + The EMSI_ISI packet + ===================================================================== + The following pseudo structure shows the layout of the EMSI_ISI + packet. Note that the information in the EMSI_ISI packet may not + exceed 2,048 bytes. + + EMSI_ISI + id, + name, + location, + operator, + localtime, + notice, + wait, + capabilities: ASCII1; + end; + + EMSI_ISI field definitions + --------------------------------------------------------------------- + + ===================================================================== + ID + --------------------------------------------------------------------- + The name, version number, and optionally the serial number of the + Server software. Eg. {RemoteAccess,1.10/b5,CS000001}. + + ===================================================================== + Name + --------------------------------------------------------------------- + The name of the Server system. Eg. {Advanced Engineering S.A.R.L.}. + + ===================================================================== + Location + --------------------------------------------------------------------- + The geographical location of the user, ie. Stockholm, Sweden. + + ===================================================================== + Operator + --------------------------------------------------------------------- + The name of the primary operator of the Server software. Eg. {Joaquim + H. Homrighausen}. + + + + ===================================================================== + Localtime + --------------------------------------------------------------------- + Hexadecimal string representing a long integer containing the current + time of the Server in UNIX notation (number of seconds since midnight, + Jan 1 1970). This must be treated case insensitively by the Client. + + ===================================================================== + Notice + --------------------------------------------------------------------- + May contain copyright notices, system information, etc. This field + may optionally be displayed by the Client. + + ===================================================================== + Wait + --------------------------------------------------------------------- + A single character used by the Server to indicate that the user + has to press the <Enter> key to resume operation. This is used in + conjunction with ASCII Image Downloads (see ISM packet). + + ===================================================================== + Capabilities + --------------------------------------------------------------------- + The capabilities of the Server software. No Server software + capabilities have currently been defined. + + Credits and other notes + ===================================================================== + The original EMSI specifications were designed by Chris Irwin and + Joaquim H. Homrighausen. The original IEMSI specifications were + designed by Joaquim H. Homrighausen and Andrew Milner. +
-Document: FSC-0057 -Version: 003 -Date: 07-Dec-92 - - - - - Conference Managers - Specifications for Requests - - December 7, 1992 - - Fabiano Fabris Joaquim H. Homrighausen - 2:285/304.100@fidonet 2:270/17@fidonet - - - - - Status of this document: - - This FSC suggests a proposed protocol for the FidoNet(r) community, and - requests discussion and suggestions for improvements. Revision 3 - presents several additions and enhancements over the previous revision. - - Distribution of this document is unlimited. - - Fido and FidoNet are registered marks of Tom Jennings and Fido - Software. - - - - 1 Purpose - - This document will explore the methods implemented by various - conference managers which process requests (in net mail form) - for changes to the conference mail links on the system on which - they are in use. - - Until now, it would appear that no real standard exists, so most - software authors have either tried to emulate another program, or - to create a new method of their own, or both. - - Here, an attempt will be made to define a standard, one which tries - to maintain compatibility with methods already in use, while also - extending them to provide new functions. - - - - 2 Conventions - - The names of the commands described in the following paragraphs are - given in upper case, for legibility. However, a conference manager - should be able to interpret them even if they are given in lower - or mixed case. - - Similarly, conference names, or tags, are given in upper case, but - the conference manager should be able to handle them even if typed - in lower or mixed case. - - Optional information is enclosed with square brackets, while - variable information is enclosed with angle brackets. For example: - - +CONF [,R=- - Go Back - - - - + + + +] - - indicates that the section within square brackets is optional, and - if supplied, requires a parameter after the equals sign. - - Some conference managers may allow commands to be abbreviated to the - shortest non-ambiguous string. For example, %LIST might be reduced - to %L. - - - - 3 Format of the request - - A request to a conference manager is generally made in a net mail - message containing specific information in some of the fields. In - particular, the addressee is the name of the conference manager - itself, and the subject of the message is a password assigned by - the sysop of the system running the program. - - For example: - - From: John Doe, on 2:123/56 - To: Program, on 2:234/0 - Subject: password - - Here the first problem is encountered. Each of the existing programs - recognizes a different addressee. For this reason it is proposed - that all such programs recognize requests made to a single, - "standard" addressee, besides any other they may wish to implement. - The term "ConfMgr" has been arbitrarily chosen, and should be used - by those programs which adhere fully to all the standards proposed - in this document. - - The text of the message itself contains the request proper, and is - the subject of the following paragraphs. - - - - 4 Linking and Unlinking of conferences. - - The current methods for requesting that a conference be linked are - basically two: - - +CONFNAME - CONFNAME - - For reasons of uniformity, it is proposed that all conference - manager programs recognize the first method. - - Requests that a conference be unlinked are given by: - - -CONFNAME - - It might be interesting to implement some form of pattern matching, - similar to the unix shell. The following basic wildcards should be - considered: - - * matches zero or more characters - ? matches any one (not zero) character - - Since the requests are processed top-down, a request of the form - - +CONFNAME - -* - - would be redundant, since the ConfMgr would link CONFNAME from the - first line, and then immediately unlink it again because of the - second line, which requests that all linked conferenecs be unlinked. - - It should also be possible to specify more than one conference tag - on the same line. For example: - - +CONF1 CONF2 CONF3 - - would link the three conferences CONF1, CONF2 and CONF3. - - - - 5 Rescanning Conference Mail - - Many conference managers currently allow a system to request that an - area be "rescanned". In other words, the system receiving the - request will export all mail in one or more areas to the requesting - system. - - This may be accomplished by specifying the %RESCAN command in the - body of the request. This will force the ConfMgr to generate a scan - request for those areas which the remote system requested with the - message containing the %RESCAN command. - - Rescans of a single area, newly linked, could be requested as - follows: - - +CONFNAME, R[= ] - - where 'n' is the number of messages in that area to be rescanned. - (The space following the comma is optional, but allowed.) - - Rescanning has one serious drawback: dupes! It is very possible for - the requesting system to have already set up the area with several - downlinks. Thus, when the rescanned mail is received, it could be - exported to other systems. In a tree-based topology, this is - harmless, but in circular topologies this would create dupes. - - Thus, it is proposed that system receiving the rescan request add a - kludge to the messages, so that they can be recognized by the - requesting system and not re-exported. - - The proposed kludge is: - - ^ARESCANNED - - where is the network address, including domain, of the - system from which the mail was rescanned. - - In alternative to a rescan, a sysop might request a "sample", - consisting of a series of messages contained in a text file. The - ConfMgr would export some or all messages from an area to a plain - ASCII text file, and send it along with the reply, to the requesting - system. A "sample" request would be made as follows: - - +CONFNAME, S[= ] - - where 'n' indicates how many messages should be sampled. - - a) Updating Conferences - - Update requests allow a sysop to rescan or "sample" an area - without having to first unlink from it, and then relink with the - rescan or "sample" parameter. - - The format of this command is: - - =CONFNAME, [= ] - - Thus a rescan request for the most recent 50 messages would be - specified as: - - =CONFNAME, R=50 - - - - 6 Information Requests - - Requests for information have until now taken two forms. In one - case, they are given as switches after the password on the subject - line, while in the second they are given as "commands" within the - body of the message text. It is proposed that the second method be - chosen as standard, since it is considerably more flexible. - - Below are listed the proposed commands: - - %HELP Sends a (pre-defined) help text to the - requesting system, explaining how the - ConfMgr is to be used. - - %LIST[,B] Lists the conferences currently available - to the requesting system, on the basis - of a method internal to the conference - manager itself. This list would flag the - areas which are already linked. The 'B' - modifier would generate the list in - binary format (see section 8e). - - %BLIST Equivalent to %LIST,B above. - - %QUERY Lists the conferences currently linked to - the requesting system. - - %UNLINKED Lists the conferences which are available - to the requesting system, but not - currently linked. This is the logical - difference between a %LIST and a %QUERY. - - - - 7 Remote Maintenance - - Besides these simple functions, it is becoming more and more - interesting to make handling of the conference mail flow even more - automatic. For this reason, for example, it might be useful to - allow another sysop control over your own system, adding and - removing conferences as need requires. Thus a hub or coordinator - could automatically have a new area added to their conference - lists, or discontinued ones removed. - - Naturally, the ConfMgr must be able to distinguish which system has - the ability to make such changes, but that is beyond the scope of - this document. - - It is proposed that a conference manager be able to automatically - add a new conference to the system's list if/when it is detected. - Thus no special commands would be required. The manager should be - able to determine a default list of down-links for the new area, - and also the "group" of systems which could then request it. - - However, should it be desired to explicitly create a new conference - via remote, this could be done by including a line such as the - following in the message text: - - &CONFNAME - - In order to remote delete an area, the requesting sysop should - include a line like this in the body of the message text: - - ~CONFNAME - - Thus, if the system has remote privileges, the conference would be - deleted (and optionally, all systems linked to the conference could - be informed of this fact). - - Similarly, it would also be possible to allow a system to change the - tag of a conference. This would be accomplished by a line such as: - - # OLD_NAME NEW_NAME - - The ConfMgr should inform all downlinks of the change by sending a - net mail message. - - It might also be desirable to allow a sysop to make changes on - behalf of another system. This could be done by inserting a special - command at the beginning of the request itself. For example: - - From: John Doe, on 2:123/1 - To: Program, on 2:987/65 - Subject: password - Text: - %FROM: 2:234/56 - +CONFNAME - - The %FROM command would make the ConfMgr carry out the changes as if - the system 2:234/56 had requested them. The password should - nonetheless be the one assigned to 2:123/1. - - - - 8 Further Automation - - In order to make the system more powerful, and to reduce the - necessity for human intervention, several extensions are feasible. - - a) ARCmail Compression Method - - One interesting application is the possibility of allowing a - remote system to change the compression program used to "pack" - mail bound for his system. This could be done with the following - command in the message to a ConfMgr: - - %COMPRESS - - where is one of the compression programs supported by - the system. Of course, the remote system should also be able to - determine which compression methods are available; this could be - done with - - %COMPRESS ? - - Requests for an unsupported compression method should also be - responded to with a list of those available. - - From the practical point of view, only systems which pick up - their mail (as opposed to those to whom mail is sent) should be - allowed to change the compression method used. How this - distinction is achieved is beyond the scope of this document. - - b) Passwords - - A sysop should be able to change the password used to make - requests to a ConfMgr without requiring the intervention of the - other system's sysop. This could easily be done if the - conference manager implemented the following command: - - %PWD - - The new password (case insensitive) would replace the current - one as of the next request. - - c) Temporary Unlink - - Should a system's sysop be absent for a prolonged period of time, - he might want to temporarily cut all conferences from his - uplink. This could be accomplished with the - - %PAUSE - - command. This would tell the ConfMgr to temporarily stop sending - conferences to that system. On his return, the sysop could - reactivate them all with the - - %RESUME - - command. - - d) Forwarding Remote Requests - - If a conference manager receives a remote request to delete an - area, it could very easily "forward" that request to all its - downlinks by producing a similar request. In that way, a single - request originating from, for example, a Region Coordinator, - would result in the conference being deleted from all systems - "below" him. - - Similarly, remote requests for conference name changes could - also be passed on to downlinks. - - e) Automatic Requests for Conferences - - A conference manager should also be able to automatically request - an area from an uplink. This would become necessary if, for - example, it processed a request for an area not currently - available on the system. In this case, it would scan a series of - conference lists for the requested area, and if found, would - send a request for that area. - - In order to be able to do this, the ConfMgr would need to have - one or more lists of conferences from the uplinks. These lists - could be produced on request by the ConfMgr itself. In order to - simplify matters, a binary format is proposed. (Note that these - are C-style structures, with everything which that implies.) - This binary file is called a Binary Conference List (BCL). - - The file starts with a header, containing some basic system - information: - - struct bcl_header { - char FingerPrint[4]; /* BCL */ - char ConfMgrName[31]; /* Name of "ConfMgr" */ - char Origin[51]; /* Originating network addr */ - long CreationTime; /* UNIX-timestamp when created */ - long flags; /* Options, see below */ - char Reserved[256]; /* Reserved data */ - } - - The currently defined flags for the header are: - - BCLH_ISLIST 0x00000001L - File is complete list - - BCLH_ISUPDATE 0x00000002L - File contains update/diff information - - The BCL would then contain a series of entries having the - following format: - - struct bcl { - int EntryLength; /* Length of entry data */ - long flags1, flags2; /* Conference flags */ - char *AreaTag; /* Area tag [51] */ - char *Description; /* Description [51] */ - char *Administrator; /* Administrator or contact [51] */ - } - - The flags currently defined are: - - FLG1_READONLY 0x00000001L - Read only, software must not allow users to enter mail. - - FLG1_PRIVATE 0x00000002L - Private attribute of messages is honored. - - FLG1_FILECONF 0x00000004L - File conference. - - FLG1_MAILCONF 0x00000008L - Mail conference. - - FLG1_REMOVE 0x00000010L - Remove specified conference from list (otherwise add/upd). - - Thus, instead of scanning an AREAS.BBS style list, the ConfMgr - would parse and use lists in the above format. Naturally, each - list would be in some way "attached" to a node number, and a - corresponding ConfMgr password. - - Each system may only have one master file, called anything they - want. But when transmitted to other systems, this file must - always be named ????????.BCL. - - The list would be generated in response to a - - %LIST, B - - command in the message text. - - f) Receipts - - It might be useful to have the ConfMgr generate a receipt to be - sent to another system, perhaps a co-sysop or a sysop point - node. This could be done with the command: - - %RECEIPT , - - embedded in the request message. For example: - - %RECEIPT JoHo,2:270/17 - - - - 9 Comments in the request - - It should be possible for a sysop to insert a comment in the request - made to a conference manager. These comments, naturally, would be - destined to the sysop of the system, and not to the conference - manager itself. Such comments should be placed at the end of the - message, following a %NOTE command. - - In all cases except the above, the request can be deleted by the - ConfMgr once processed, but messages containing comments should be - retained. - - Note: the current method used is to supply comments after a tear- - line. This practice is somewhat "messy", but it might be wise to - support it until such time as all conference managers have - implemented the %NOTE command. - - - - 10 Summary - - +CONFNAME[,R|S] Request to link to CONFNAME - -CONFNAME Request to unlink from CONFNAME - =CONFNAME,R|S Rescan or "sample" linked conference - &CONFNAME Request to create CONFNAME - ~CONFNAME Request to delete CONFNAME - #OLD NEW Name change request - - %LIST[,B] List available areas, flag linked - %QUERY Only list linked areas - %UNLINKED List available but unlinked areas - %HELP Send help text - %FROM Simulate request from another system - %RESCAN Rescan conferences linked in current request - %COMPRESS Change compression method - %PWD Change ConfMgr password - %PAUSE Suspend link - %RESUME Resume link - %RECEIPT , Send copy of receipt to another system - %NOTE Introduces comment to the sysop - - - - 11 Final Note - - This document is to be considered as a suggestion for software - developers to make their programs compatible with one another, so as - to make life easier for the average sysop when dealing with - conference managers. - - Feedback would be appreciated and can be sent to us at the addresses - specified on the title page. Please send feedback via netmail only. - -
+Document: FSC-0057 +Version: 003 +Date: 07-Dec-92 + + + + + Conference Managers - Specifications for Requests + + December 7, 1992 + + Fabiano Fabris Joaquim H. Homrighausen + 2:285/304.100@fidonet 2:270/17@fidonet + + + + + Status of this document: + + This FSC suggests a proposed protocol for the FidoNet(r) community, and + requests discussion and suggestions for improvements. Revision 3 + presents several additions and enhancements over the previous revision. + + Distribution of this document is unlimited. + + Fido and FidoNet are registered marks of Tom Jennings and Fido + Software. + + + + 1 Purpose + + This document will explore the methods implemented by various + conference managers which process requests (in net mail form) + for changes to the conference mail links on the system on which + they are in use. + + Until now, it would appear that no real standard exists, so most + software authors have either tried to emulate another program, or + to create a new method of their own, or both. + + Here, an attempt will be made to define a standard, one which tries + to maintain compatibility with methods already in use, while also + extending them to provide new functions. + + + + 2 Conventions + + The names of the commands described in the following paragraphs are + given in upper case, for legibility. However, a conference manager + should be able to interpret them even if they are given in lower + or mixed case. + + Similarly, conference names, or tags, are given in upper case, but + the conference manager should be able to handle them even if typed + in lower or mixed case. + + Optional information is enclosed with square brackets, while + variable information is enclosed with angle brackets. For example: + + +CONF [,R=<n>] + + indicates that the section within square brackets is optional, and + if supplied, requires a parameter after the equals sign. + + Some conference managers may allow commands to be abbreviated to the + shortest non-ambiguous string. For example, %LIST might be reduced + to %L. + + + + 3 Format of the request + + A request to a conference manager is generally made in a net mail + message containing specific information in some of the fields. In + particular, the addressee is the name of the conference manager + itself, and the subject of the message is a password assigned by + the sysop of the system running the program. + + For example: + + From: John Doe, on 2:123/56 + To: Program, on 2:234/0 + Subject: password + + Here the first problem is encountered. Each of the existing programs + recognizes a different addressee. For this reason it is proposed + that all such programs recognize requests made to a single, + "standard" addressee, besides any other they may wish to implement. + The term "ConfMgr" has been arbitrarily chosen, and should be used + by those programs which adhere fully to all the standards proposed + in this document. + + The text of the message itself contains the request proper, and is + the subject of the following paragraphs. + + + + 4 Linking and Unlinking of conferences. + + The current methods for requesting that a conference be linked are + basically two: + + +CONFNAME + CONFNAME + + For reasons of uniformity, it is proposed that all conference + manager programs recognize the first method. + + Requests that a conference be unlinked are given by: + + -CONFNAME + + It might be interesting to implement some form of pattern matching, + similar to the unix shell. The following basic wildcards should be + considered: + + * matches zero or more characters + ? matches any one (not zero) character + + Since the requests are processed top-down, a request of the form + + +CONFNAME + -* + + would be redundant, since the ConfMgr would link CONFNAME from the + first line, and then immediately unlink it again because of the + second line, which requests that all linked conferenecs be unlinked. + + It should also be possible to specify more than one conference tag + on the same line. For example: + + +CONF1 CONF2 CONF3 + + would link the three conferences CONF1, CONF2 and CONF3. + + + + 5 Rescanning Conference Mail + + Many conference managers currently allow a system to request that an + area be "rescanned". In other words, the system receiving the + request will export all mail in one or more areas to the requesting + system. + + This may be accomplished by specifying the %RESCAN command in the + body of the request. This will force the ConfMgr to generate a scan + request for those areas which the remote system requested with the + message containing the %RESCAN command. + + Rescans of a single area, newly linked, could be requested as + follows: + + +CONFNAME, R[=<n>] + + where 'n' is the number of messages in that area to be rescanned. + (The space following the comma is optional, but allowed.) + + Rescanning has one serious drawback: dupes! It is very possible for + the requesting system to have already set up the area with several + downlinks. Thus, when the rescanned mail is received, it could be + exported to other systems. In a tree-based topology, this is + harmless, but in circular topologies this would create dupes. + + Thus, it is proposed that system receiving the rescan request add a + kludge to the messages, so that they can be recognized by the + requesting system and not re-exported. + + The proposed kludge is: + + ^ARESCANNED <addr> + + where <addr> is the network address, including domain, of the + system from which the mail was rescanned. + + In alternative to a rescan, a sysop might request a "sample", + consisting of a series of messages contained in a text file. The + ConfMgr would export some or all messages from an area to a plain + ASCII text file, and send it along with the reply, to the requesting + system. A "sample" request would be made as follows: + + +CONFNAME, S[=<n>] + + where 'n' indicates how many messages should be sampled. + + a) Updating Conferences + + Update requests allow a sysop to rescan or "sample" an area + without having to first unlink from it, and then relink with the + rescan or "sample" parameter. + + The format of this command is: + + =CONFNAME, <param>[=<n>] + + Thus a rescan request for the most recent 50 messages would be + specified as: + + =CONFNAME, R=50 + + + + 6 Information Requests + + Requests for information have until now taken two forms. In one + case, they are given as switches after the password on the subject + line, while in the second they are given as "commands" within the + body of the message text. It is proposed that the second method be + chosen as standard, since it is considerably more flexible. + + Below are listed the proposed commands: + + %HELP Sends a (pre-defined) help text to the + requesting system, explaining how the + ConfMgr is to be used. + + %LIST[,B] Lists the conferences currently available + to the requesting system, on the basis + of a method internal to the conference + manager itself. This list would flag the + areas which are already linked. The 'B' + modifier would generate the list in + binary format (see section 8e). + + %BLIST Equivalent to %LIST,B above. + + %QUERY Lists the conferences currently linked to + the requesting system. + + %UNLINKED Lists the conferences which are available + to the requesting system, but not + currently linked. This is the logical + difference between a %LIST and a %QUERY. + + + + 7 Remote Maintenance + + Besides these simple functions, it is becoming more and more + interesting to make handling of the conference mail flow even more + automatic. For this reason, for example, it might be useful to + allow another sysop control over your own system, adding and + removing conferences as need requires. Thus a hub or coordinator + could automatically have a new area added to their conference + lists, or discontinued ones removed. + + Naturally, the ConfMgr must be able to distinguish which system has + the ability to make such changes, but that is beyond the scope of + this document. + + It is proposed that a conference manager be able to automatically + add a new conference to the system's list if/when it is detected. + Thus no special commands would be required. The manager should be + able to determine a default list of down-links for the new area, + and also the "group" of systems which could then request it. + + However, should it be desired to explicitly create a new conference + via remote, this could be done by including a line such as the + following in the message text: + + &CONFNAME + + In order to remote delete an area, the requesting sysop should + include a line like this in the body of the message text: + + ~CONFNAME + + Thus, if the system has remote privileges, the conference would be + deleted (and optionally, all systems linked to the conference could + be informed of this fact). + + Similarly, it would also be possible to allow a system to change the + tag of a conference. This would be accomplished by a line such as: + + # OLD_NAME NEW_NAME + + The ConfMgr should inform all downlinks of the change by sending a + net mail message. + + It might also be desirable to allow a sysop to make changes on + behalf of another system. This could be done by inserting a special + command at the beginning of the request itself. For example: + + From: John Doe, on 2:123/1 + To: Program, on 2:987/65 + Subject: password + Text: + %FROM: 2:234/56 + +CONFNAME + + The %FROM command would make the ConfMgr carry out the changes as if + the system 2:234/56 had requested them. The password should + nonetheless be the one assigned to 2:123/1. + + + + 8 Further Automation + + In order to make the system more powerful, and to reduce the + necessity for human intervention, several extensions are feasible. + + a) ARCmail Compression Method + + One interesting application is the possibility of allowing a + remote system to change the compression program used to "pack" + mail bound for his system. This could be done with the following + command in the message to a ConfMgr: + + %COMPRESS <method> + + where <method> is one of the compression programs supported by + the system. Of course, the remote system should also be able to + determine which compression methods are available; this could be + done with + + %COMPRESS ? + + Requests for an unsupported compression method should also be + responded to with a list of those available. + + From the practical point of view, only systems which pick up + their mail (as opposed to those to whom mail is sent) should be + allowed to change the compression method used. How this + distinction is achieved is beyond the scope of this document. + + b) Passwords + + A sysop should be able to change the password used to make + requests to a ConfMgr without requiring the intervention of the + other system's sysop. This could easily be done if the + conference manager implemented the following command: + + %PWD <new_password> + + The new password (case insensitive) would replace the current + one as of the next request. + + c) Temporary Unlink + + Should a system's sysop be absent for a prolonged period of time, + he might want to temporarily cut all conferences from his + uplink. This could be accomplished with the + + %PAUSE + + command. This would tell the ConfMgr to temporarily stop sending + conferences to that system. On his return, the sysop could + reactivate them all with the + + %RESUME + + command. + + d) Forwarding Remote Requests + + If a conference manager receives a remote request to delete an + area, it could very easily "forward" that request to all its + downlinks by producing a similar request. In that way, a single + request originating from, for example, a Region Coordinator, + would result in the conference being deleted from all systems + "below" him. + + Similarly, remote requests for conference name changes could + also be passed on to downlinks. + + e) Automatic Requests for Conferences + + A conference manager should also be able to automatically request + an area from an uplink. This would become necessary if, for + example, it processed a request for an area not currently + available on the system. In this case, it would scan a series of + conference lists for the requested area, and if found, would + send a request for that area. + + In order to be able to do this, the ConfMgr would need to have + one or more lists of conferences from the uplinks. These lists + could be produced on request by the ConfMgr itself. In order to + simplify matters, a binary format is proposed. (Note that these + are C-style structures, with everything which that implies.) + This binary file is called a Binary Conference List (BCL). + + The file starts with a header, containing some basic system + information: + + struct bcl_header { + char FingerPrint[4]; /* BCL<NUL> */ + char ConfMgrName[31]; /* Name of "ConfMgr" */ + char Origin[51]; /* Originating network addr */ + long CreationTime; /* UNIX-timestamp when created */ + long flags; /* Options, see below */ + char Reserved[256]; /* Reserved data */ + } + + The currently defined flags for the header are: + + BCLH_ISLIST 0x00000001L + File is complete list + + BCLH_ISUPDATE 0x00000002L + File contains update/diff information + + The BCL would then contain a series of entries having the + following format: + + struct bcl { + int EntryLength; /* Length of entry data */ + long flags1, flags2; /* Conference flags */ + char *AreaTag; /* Area tag [51] */ + char *Description; /* Description [51] */ + char *Administrator; /* Administrator or contact [51] */ + } + + The flags currently defined are: + + FLG1_READONLY 0x00000001L + Read only, software must not allow users to enter mail. + + FLG1_PRIVATE 0x00000002L + Private attribute of messages is honored. + + FLG1_FILECONF 0x00000004L + File conference. + + FLG1_MAILCONF 0x00000008L + Mail conference. + + FLG1_REMOVE 0x00000010L + Remove specified conference from list (otherwise add/upd). + + Thus, instead of scanning an AREAS.BBS style list, the ConfMgr + would parse and use lists in the above format. Naturally, each + list would be in some way "attached" to a node number, and a + corresponding ConfMgr password. + + Each system may only have one master file, called anything they + want. But when transmitted to other systems, this file must + always be named ????????.BCL. + + The list would be generated in response to a + + %LIST, B + + command in the message text. + + f) Receipts + + It might be useful to have the ConfMgr generate a receipt to be + sent to another system, perhaps a co-sysop or a sysop point + node. This could be done with the command: + + %RECEIPT <name>,<address> + + embedded in the request message. For example: + + %RECEIPT JoHo,2:270/17 + + + + 9 Comments in the request + + It should be possible for a sysop to insert a comment in the request + made to a conference manager. These comments, naturally, would be + destined to the sysop of the system, and not to the conference + manager itself. Such comments should be placed at the end of the + message, following a %NOTE command. + + In all cases except the above, the request can be deleted by the + ConfMgr once processed, but messages containing comments should be + retained. + + Note: the current method used is to supply comments after a tear- + line. This practice is somewhat "messy", but it might be wise to + support it until such time as all conference managers have + implemented the %NOTE command. + + + + 10 Summary + + +CONFNAME[,R|S] Request to link to CONFNAME + -CONFNAME Request to unlink from CONFNAME + =CONFNAME,R|S Rescan or "sample" linked conference + &CONFNAME Request to create CONFNAME + ~CONFNAME Request to delete CONFNAME + #OLD NEW Name change request + + %LIST[,B] List available areas, flag linked + %QUERY Only list linked areas + %UNLINKED List available but unlinked areas + %HELP Send help text + %FROM <addr> Simulate request from another system + %RESCAN Rescan conferences linked in current request + %COMPRESS <method> Change compression method + %PWD <new_pwd> Change ConfMgr password + %PAUSE Suspend link + %RESUME Resume link + %RECEIPT <name>,<addr> Send copy of receipt to another system + %NOTE Introduces comment to the sysop + + + + 11 Final Note + + This document is to be considered as a suggestion for software + developers to make their programs compatible with one another, so as + to make life easier for the average sysop when dealing with + conference managers. + + Feedback would be appreciated and can be sent to us at the addresses + specified on the title page. Please send feedback via netmail only. + ++ +Go Back + + + + diff --git a/html/ftsc/fsc-0059.html b/html/ftsc/fsc-0059.html index 1060f8e3..6d9c1e0f 100755 --- a/html/ftsc/fsc-0059.html +++ b/html/ftsc/fsc-0059.html @@ -1,1622 +1,1623 @@ - - -
-Document: FSC-0059 -Version: 001 -Date: 08-Mar-1992 - - - - - Newsgroup Interchange within FidoNet - Jack Decker - 1:154/8@fidonet - - A proposed standard for the interchange of USENET News messages among - FidoNet nodes. - - -Status of this document: - - This FSC suggests a proposed protocol for the FidoNet(r) community, - and requests discussion and suggestions for improvements. - Distribution of this document is unlimited. - - Fido and FidoNet are registered marks of Tom Jennings and Fido - Software. - - - -Introduction: - -This document defines the standard format for the interchange of USENET -news messages among FidoNet nodes. It incorporates by reference the -document RFC-1036, "Standard for Interchange of USENET Messages" by M. -Horton of AT&T Bell Laboratories and R. Adams of the Center for Seismic -Studies. A copy of RFC-1036 should be included in the distribution -archive of this standard. However, RFC-1036 is NOT applicable in its -entirety to FidoNet. Therefore, unless specifically referenced -elsewhere in this document, only section 2 of RFC-1036 should be -considered part of this standard. Section 3, which deals with "control -messages", may be implemented in FidoNet on an optional basis, and if -processing of control messages is included in a FidoNet implementation, -it should be done in accordance with section 3 of RFC-1036 to the -extent possible. Section 4 of RFC-1036 is *NOT* applicable to FidoNet -(except for section 4.3, which will be discussed later) and therefore -is NOT included as part of this standard. Section 5 of RFC-1036 is a -treatise on the News Propagation Algorithm used within UseNet, and -should be studied even though it is not directly applicable to FidoNet, -in particular because it contains a discussion on the prevention of -loops (what we in FidoNet commonly refer to as "dupe loops"). - -Please note that FidoNet implementations do not recognize nor support -what is referred to as the "old format" or the "A format" in section 2 -of RFC-1036. - -The goal of this document is to define a standard for the interchange -of news messages between FidoNet nodes in a format that will also be -acceptable to UseNet hosts. In order to simplify the creation of -software that conforms to this standard, we do not intend to support -every news format that has ever existed in UseNet. The standard -described in RFC-1036 is used by the majority of UseNet hosts, and -therefore it is the standard that will be adopted in this document. - -This standard will contain three sections: General theory of newsgroup -transmission, Format and protocols of batched newsgroups, and the -translation of newsgroup messages to and from FidoNet message format. - -1. General theory of newsgroup transmission: - -Prior to the introduction of the DoveMail program, the usual method of -gating a UseNet newsgroup into FidoNet was to convert it to FidoNet -echomail, and then send it to "downstream" nodes in echomail format. -This method is still used at the majority of gateway systems at this -writing. Unfortunately, no conversion process is perfect, and some -useful control information is usually lost in the conversion. In -addition, most FidoNet echomail processors don't handle long messages -(which are fairly common in newsgroups) well at all, and many gateway -systems either try to split these messages into multiple parts (a -somewhat awkward process) or discard them entirely. Because the -duplicate message detection algorithms used in many FidoNet echomail -processors incorrectly identify some of the parts of a split message as -duplicates, parts of long messages often get "lost" when transmitted as -echomail. Also, UseNet allows a message to be posted to multiple -newsgroups, and when such messages are converted to echomail, it may be -necessary to create multiple copies of the message (one for each -echomail area that it would be placed in), thus increasing the -transmission time for such messages. - -Even normal-length newsgroup messages may be falsely discarded as -duplicates by some "downstream" echomail processors. The reason this -is a particular problem in newsgroups converted to echomail is because -some echomail processors use a checksum of parts of FidoNet message -headers to determine if messages are duplicates. Since all newsgroup -messages are assumed to be addressed to "All", and since some gateway -software uses the date and time that the message was converted to -echomail rather than the original date and time from the message, it's -quite possible that the remainder of the message header contains -information that is similar enough to information in another message's -header to cause it to be discarded as a duplicate message. This -happens far more frequently with converted newsgroup messages than with -messages originally entered as echomail. - -Finally, when a BBS user enters a reply to a news message that has been -converted to echomail, in many cases the information is simply not -available in the original message to generate a proper "References:" -line in the reply, as required by RFC-1036. If the original message -contained a "Followup-To:" line, which requires that replies be posted -to a different newsgroup than the one in which the original message was -entered, this line may not transmitted in the message as converted to -echomail. And even if this information is available, no echomail -processor currently available will modify the reply message as required -(to add the "References:" line where necessary, or to move the message -to a different area if it is a reply to a message that contained a -"Followup-To:" line). - -Under this proposed standard, none of the UseNet message header -information is lost in transmission between nodes, and reply messages -can be generated that conform to UseNet specifications. If a message -is posted to multiple newsgroups, it is only transmitted once (instead -of multiple times as it might be if converted to echomail). Also, long -messages are not truncated or changed in transmission between nodes, -and finally, there is no chance that a message will be improperly -discarded as a duplicate. - -The main thing to remember is that under this standard, news messages -are never converted to echomail. Echomail is an irrelevant concept in -this context, since we are not passing echomail between nodes. -Instead, newsgroups are transmitted in the native format specified by -RFC-1036, and tossed directly from batched newsgroup packets to the -FidoNet message format (e.g. the *.msg format) if necessary. Keep in -mind that most FidoNet BBS software uses the same general format not -only for echomail messages, but also for netmail and local message -areas, so it is not necessary to transmit messages between nodes in -echomail format if another format is more suitable for the type of -message being transmitted. - -2. Format and protocols of batched newsgroups: - -When newsgroup messages are transmitted between systems, the individual -messages must conform to the specifications of section 2 of RFC-1036, -and section 3 of this document. Where section 3 of this document -defines a more restrictive standard than RFC-1036, this document shall -take precedence. - -When transmitting news messages between FidoNet nodes, they must be -sent in a batched newsgroup file (as described in section 4.3 of -RFC-1036) unless some other format is agreed upon in advance. The -transmission of unbatched news messages, or the use of any batching -method other than that described in section 4.3 of RFC-1036 shall be -considered non-standard. Please note that RFC-1036 section 4.3 refers -to this batching process as combining several messages into "one large -message", but we will refer to this "one large message" as a "batched -newsgroup file", or a "UseNet format mail packet" rather than as a -"large message", since FidoNet systems do not normally handle large -"messages". - -When messages pass through a FidoNet system on their way to other -nodes, the header lines in the message may be modified to conform with -the standards given here. However, the text (body) of a message should -NEVER be altered (one exception: Carriage Returns MAY be converted to -Line Feeds in order to conform to this standard, but this is neither -required nor expected of software). - -The standard format for sending a batched newsgroup file to other -FidoNet nodes is as follows: - -First, as will be noted in section 3 of this document, individual lines -of the batched newsgroup file must be terminated with Line Feeds only, -and the file must NOT contain Carriage Return characters (ASCII 13). - -Batched newsgroup files shall be transmitted between FidoNet nodes as -files named using the filename ????????.PKU, where the eight character -root name can be any of the hexadecimal digits 0 - 9 or A - F. The -.PKU extension (which stands for "PacKet - Usenet format") is the news -equivalent of the .PKT file used to transmit FidoNet format netmail and -echomail between nodes. - -Batched newsgroup files with the filespec ????????.PKU may be archived -into a standard mail archive file (bearing the extension *.MO?, *.TU?, -*.WE? ... *.SU?). It is assumed that the receiver of batched newsgroup -files will take any necessary steps to make sure that both *.PKU and -*.PKT files are extracted from incoming mail archive files before the -mail archive files are deleted. In certain cases, this may mean that -an external unarchive shell may have to be used, instead of allowing -the echomail processor to call the unarchiver (typical external -unarchive shell programs at this writing are GUS, POLYXARC, and SPAZ). - -A batched newsgroup file awaiting transmission may be stored in a -FidoNet system's "outbound" area in uncompressed form, prior to being -archived for transmission or sent in uncompressed form. It is -suggested that when a system uses the .OUT extension to indicate an -uncompressed netmail or echomail packet, the .UUT extension be used to -indicate an uncompressed batched newsgroup packet. It is expected that -a .UUT file in a system's "outbound" area will be treated in much the -same way as an .OUT file, except it will be renamed to a file with an -extension of .PKU (rather than .PKT) before being archived into the -mail archive. This implies that the root name of the .UUT file will -contain the net number and node number of the destination system, -expressed as four hexadecimal digits each for net and node numbers, in -the same manner as the root name for a FidoNet .OUT file is -constructed. - -The root filename of the *.PKU file should be an eight digit -hexadecimal number, with leading zeroes used if necessary, in order to -make an eight character root filename. It is suggested that this -hexadecimal number be based on time of year, with 00000000.PKU -generated at exactly midnight on January 1 and FFFFFFFF.PKU generated -at just a moment before midnight on December 31. However, it is -permissible to use the same algorithm that is used to generate the root -filename for *.PKT files. - -The normal sequence for transmission of messages between FidoNet nodes -might then be described as follows: - -a. Messages created on the originating system are placed into a batched -newsgroup file conforming to the specifications of RFC-1036 section -4.3. When this batched newsgroup file is destined for another FidoNet -node, it will have a filename of the format: - - [4 hex digit net number][4 hex digit node number].UUT - -This file will then be placed in the outbound mail area for packing. - -b. A mail packing program will examine the outbound mail area and, upon -finding the .UUT file, will rename it to a file with an extension of -.PKU, and then shell to a compression program in order to place the -*.PKU file into a new or existing mail archive file for the destination -node. Mail archive files bear extension names consisting of the first -two letters of a day of the week (in the English language) plus a -numeric character in the range 0 - 9 (for example, .MO5 or .TH7). The -method of compression for the mail archive is as agreed upon between -the originating and destination nodes. No "standard" method of -compression for the mail archive is specified in this document. NOTE: -If the compression program fails for any reason (such as running out of -disk space), the mail packing program MUST rename the .PKU file back to -the original *.UUT filename before exiting. Since batched newsgroup -files do not contain a header that indicates the destination node, -there would be no way to determine the proper destination node if the -file were not renamed back to the original filename. - -c. The mail archive is transmitted in the usual manner by a FidoNet -compatible mailer, or such other means as may be agreed upon in advance -by the sysops of the originating and destination nodes. - -d. At the destination system, the individual files are extracted from -the mail archive. *.PKT files are processed in the usual manner to -extract any netmail or echomail messages, while *.PKU files are -processed by software designed to handle batched newsgroup files. In -this context, such files could be "handled" by re-processing the -messages and batching them to be sent on to one or more additional -node(s), or by tossing the messages to the local message base, or both. - -Please note that this standard does not anticipate that batched -newsgroup files will be converted to FidoNet echomail at any point -along the way. It is realized that this may indeed happen, but such -conversions should be considered as something to be avoided if at all -possible due to the problems discussed in section 1 of this document. - -3. Translation of newsgroup messages to and from FidoNet message -format: - -NOTE: Where applicable, the standards defined in this section for -messages shall apply not only to locally created messages, but also to -all messages sent to "downstream" FidoNet nodes. - -In this context, "FidoNet message format" means that format in which -messages commonly reside on a FidoNet BBS. At this writing, there are -three formats commonly used for message storage on FidoNet systems, but -other formats may be in use as well. The three most common formats are -the "*.msg" format as used by the original Fido program (and a host of -programs since), also commonly referred to as the "single message per -file format"; the "Hudson" format, used by QuickBBS, Remote Access, and -some other products; and the "Squish" format used by the Maximus BBS -and the "Squish" echomail processor. - -Because there are so many message formats, some other programs have -taken the approach of trying to convert UseNet news into echomail, -creating *.PKT files which can theoretically be processed by any -FidoNet system. However, since the *.PKT files are processed by the -echomail processor, all the limitations and pitfalls associated with -converting newsgroup messages to echomail come into play. - -The preferred way of handling incoming messages would be to have the -BBS (or message reader/editor) software directly read batched newsgroup -files. In this way, the files would not have to be "processed" per se. -As new batched newsgroup files arrived on a system, they could simply -be concatenated to the existing message base, and then a utility could -be run that would build an index to the message base, in a manner -somewhat similar to the way "flat file" message bases are currently -implemented on some BBS's. Of course, you'd need to occasionally run a -utility to delete old messages in order to keep the message base from -growing too large, and new messages entered on the system would have to -be exported from the system in a separate batched newsgroup file. -However, at this writing no FidoNet-compatible BBS or message editor is -capable of directly reading a batched newsgroup file. - -The second most preferable method is to convert news messages directly -to the message format used by that system. At this writing the -DoveMail software includes utilities (NewsToss and NewsScan) that can -convert batched newsgroup files to and from messages in the *.msg -(single message per file) format. It should be possible to convert -batched newsgroup files to and from other FidoNet message formats as -well. - -The method in which messages are stored on a BBS, and the method in -which it is determined which new (locally-entered) messages need to be -exported from the system will necessarily be implementation-specific. -One method that can be used with *.msg type message bases is to -maintain a "high water mark" in 1.msg, similar to the "high water mark" -used for echomail messages, and additionally to mark messages received -from other nodes as "sent" when they arrive, and locally-entered -messages as "sent" when they have been exported, and to never re-send a -message marked as "sent". - -When tossing incoming messages, duplicate messages can be detected by -comparing the contents of the "Message-ID:" line with those of -previously received messages. This may be slow processing -considerably, however, and would require storage of a history file of -"previously seen" messages. Another method is to look in the "Path" -line and see if we are already listed in the path; if so, the message -is a duplicate and should be deleted. This method is faster and does -not require maintenance of a history file, but will not guard against -duplicate messages arriving from one's feed that have not passed -through the system twice (for example, a message that arrived from two -different paths). Fortunately, UseNet folks seem to understand the -need for proper topology, so those types of dupes are relatively rare. -FidoNet sysops taking UseNet feeds must understand that it is -IMPERATIVE that a feed of any one newsgroup be obtained from only ONE -source, especially if they are then passing that newsgroup to any -"downstream" nodes. This absolutely does NOT imply that geographic -restrictions on newsgroup distribution are necessary or desirable! - -Additional comments on preventing "loops" can be found in section 5 of -RFC-1036, in the discussion of the News Propagation Algorithm. Please -note that only two methods of loop prevention are included in this -standard: - -1) The history mechanism. Each host keeps track of all messages it has -seen (by their Message-ID) and whenever a message comes in that it has -already seen, the incoming message is discarded immediately. - -2) Not sending a message to a system listed in the "Path" line of the -header, or to the system that originated the message (which, in -practice, should be listed in the Path line). - -No other methods of dupe loop prevention are acceptable. In -particular, checksums of portions of the message header or message -itself are NOT permitted to be used for loop prevention, except perhaps -as a method to quickly identify POTENTIAL duplicate messages before -doing a full string comparison with the Message-ID data in the history -file. In no case should a checksum be used as the SOLE method of -determining whether a message is a duplicate. - -When newsgroup messages are created for transmission to other systems, -or when received messages are transmitted other systems, the individual -messages must conform to the specifications of section 2 of RFC-1036. -However, in order to simply programming of software designed to handle -such messages, the following modifications to the standard are proposed -for use within FidoNet. Please note that these are slightly more -restrictive than the standard permitted by RFC-1036: - -a. The "old format" or "A format" described in section 2 of RFC-1036 is -NOT supported in FidoNet. Only the format detailed in RFC-1036 -(sometimes referred to as the "B" News format) is supported. The vast -majority of UseNet sites currently use the "B" News format. - -b. The UseNet standard permits the use of "white space" to separate -certain items in the message header, with "white space" defined as -blanks or tabs. It also states that "the Internet convention of -continuation header lines (beginning with a blank or tab) is allowed." -However, it should NOT be ASSUMED that "continuation header lines" will -be used in any message. It is suggested that when creating newsgroup -messages for transmission to other systems, the use of tab characters -be avoided in header lines, and that "continuation header lines" NOT be -used, even if this means that a header line will be considerably longer -than the length of a screen line. Software that creates FidoNet-format -messages (for display to BBS callers) from batched newsgroup files -(that is, newsgroup message tossers) should break up such extra-long -header lines, using a single space character ONLY (NOT a tab!) at the -start of "continuation header lines." Since batched newsgroup files -received from a UseNet site may contain "continuation header lines" -and/or tabs as "white space" in header lines, it is necessary to be -able to decode such header lines properly, but it is strongly suggested -that FidoNet software not CREATE messages with tabs or "continuation -header lines" for transmission through the network. - -c. All lines in news messages, including header lines, shall be -terminated with a LINE FEED (ASCII 10 decimal) ONLY. Under NO -circumstances shall a CARRIAGE RETURN (ASCII 13 decimal) appear in news -messages transmitted through FidoNet (if a Carriage Return is found in -an in-transit message it MAY be changed to a Line Feed, this being the -sole exception to the rule about not changing the body of a message, -but the expectation is that no Carriage Returns will appear in a news -message). Also, spaces appearing at the end of lines (just prior to -the Line Feed character) are strongly discouraged since they convey no -useful information. Finally, there should be only a single line feed -at the end of each message (blank lines following the last line of a -message are not allowed, again because they convey no useful -information). Please note that the use of the Line Feed as a line -terminator is fairly standard throughout UseNet, and when a news -message is converted to a FidoNet format message it is a simple matter -to replace Line Feeds with Carriage Returns so that the message will -display properly. - -d. When constructing or adding to "Path" lines, RFC-1036 (section -2.1.6) states that "The names may be separated by any punctuation -character or characters (except '.' which is considered part of the -hostname)." However, in actual practice, only the "!" (exclamation -point or "bang" character) is commonly used to separate names. -Therefore, the "!" character will be considered the "standard" -separator for system names in Path lines in messages generated in -FidoNet. Also, RFC-1036 states that "Normally, the rightmost name will -be the name of the originating system. However, it is also permissible -to include an extra entry on the right, which is the name of the -sender. This is for upward compatibility with older systems." In -actual practice, it appears that most Path lines originating in UseNet -have a user name as the rightmost entry. Therefore, when a Path line -is created for a message originating in FidoNet, it is suggested that -the following format be used (assuming a message entered by user John -Smith at node 1:123/456): - - Path: f456.n123.z1.fidonet.org!john.smith - -When a user name is placed in the path, all spaces in the user name -must be replaced with periods, and all uppercase characters in the name -should be converted to lowercase. It is permissible to use an alias in -place of a user's real name if the originating system runs software -that will recognize that alias in incoming netmail messages, and remap -such messages to the proper user if necessary. Also, note the -restrictions on prohibited characters in the user name as specified in -RFC-1036 section 2.1.1. Although section 2.1.1. deals with the "From" -line, common sense would indicate that these same restrictions on -prohibited characters should apply if the user name is placed in the -Path line (with the obvious exception of the use of the period to -replace spaces in the user name, which is required). - -e. Header lines defined as "optional" may be more or less optional -depending on the keyword. For example, the "Reply-To" and -"Followup-To" lines should be automatically honored, if at all -possible, when reply messages are created, and the "References" line, -even though listed as an "optional" line, is "required for all -follow-up messages" (replies). On the other hand, lines such as -"Control" and "Distribution" may have little meaning to FidoNet nodes -(in particular, "Distribution" is meant to control distribution of a -message along hierarchial lines, but since FidoNet topology has little -relation to UseNet hierarchies, it is probably best to just ignore -"Distribution" lines on in-transit messages). - -Additional specifications for messages, including required and optional -header lines, are detailed in section 2 of RFC-1036. - -When a newsgroup is moderated, it is the responsibility of the sysop of -each participating BBS to prevent users from entering messages in that -area (unless the message exporting software is capable of sending any -locally-entered messages to the conference moderator via MAIL). -However, if a software newsgroup processor is written that both imports -(tosses) messages to a FidoNet-format message base, and exports locally -entered messages, and if the software does not have a way to send -replies to the moderator via mail, then some mechanism must be provided -to prevent the export of messages from a moderated area, so that in the -unlikely event that there is no easy way to prevent users from posting -messages in the moderated area, such messages will still not be sent -out. Since this standard does not deal with the transport of UseNet -MAIL within FidoNet, the method for transmission of replies in -moderated newsgroups is undefined by this document. However, software -authors are encouraged to provide some mechanism for private mail -replies to newsgroup messages, in both moderated and unmoderated areas. - -Note that if a moderated newsgroup is carried on a system, it is the -responsibility of the sysop to provide mail access to users so that -replies can be (manually) sent to the conference moderator, especially -if replies in the newsgroup area cannot be automatically routed to the -conference moderator. - -One point that needs to be emphasized is there is NO message length -limit on UseNet messages. If a FidoNet node passes newsgroup messages -to, or on behalf of other FidoNet nodes, it is NOT permissible to -discard or truncate messages that exceed a preset length limit. Note -that in a batched newsgroup file, each message is preceded by a header -of the form "#! rnews- -". Since the message text -length is never changed in processing, it is possible to determine the -length of a message after processing by reading in all the header -lines, calculating the combined length of the header lines prior to -making changes in the header (e.g. the Path line), then calculating the -combined length of the header lines after making changes. The -difference between the original and the new length of the header lines -can then be applied to the value given in the "#! rnews" line to -determine the new message length, when is then used in the "#! rnews" -header of the modified message. Also, the number of bytes given in the -"#! rnews" line, MINUS the length of the message header lines, is the -length of the body of the message. Once this length is known, the body -of the message can be copied from the input file to the output file(s) -in "chunks" small enough to fit in memory, until the end of the message -is reached. - -The following comments are implementation suggestions applicable to -current FidoNet-compatible BBS systems, though not necessarily to -software that may be written in the future: - -It should be noted that when a BBS user enters a reply message, most -FidoNet BBS software will "link" the reply message to the original by -placing the message number of the original message in the message -header (this is almost always the case if messages are stored in the -"*.msg" format, in which case the number of the message being replied -to is found at bytes 185-186 in the message header). If the -appropriate header lines have been stored in the text of the original -message, it is possible to construct a reply message that meets all -RFC-1036 specifications. For example, a "References" line can be -constructed from the "Message-ID" line (and the "References" line, if -any) of the original message. Similarly, if the original message -contains a "Followup-To:" line, the reply can be posted to the -newsgroup(s) specified in that line. This may not work as expected if -a message renumbering program or similar program messes with the -message base before reply message is exported, so it is highly -recommended that locally-entered newsgroup messages be exported as soon -as practicable after they are entered. - -Since the user of a BBS may reply to a message entered by another user -of the same BBS, it is recommended that when a message is exported, any -UseNet format header lines created for the exported message also be -written back to the original message if possible. This will permit -reply linking to remain intact even if two or more users of the same -BBS participate in the same message thread. - -If a message is received that specifies more than one newsgroup in the -"Newsgroups" header line, and corresponding message areas are available -on the local system, one copy of the message should be placed in each -such area. For example, if the message is posted to four different -newsgroups, and two of those groups are carried on the local BBS, then -a copy of the message should be placed in the message base for each of -those groups. If users of a BBS are allowed to post a message to -multiple newsgroups, then any message thus posted should be copied to -the message bases of any of the other areas that are also carried on -that system (and that the message was posted to) at the time the -message is exported. - -Corrections and Additions to this document: - -Proposed corrections and additions to this document should be submitted -to Jack Decker at 1:154/8, or jack.decker@f8.n154.z1.fidonet.org -
-Network Working Group M. Horton -Request for Comments: 1036 AT&T Bell Laboratories -Obsoletes: RFC-850 R. Adams - Center for Seismic Studies - December 1987 - - - Standard for Interchange of USENET Messages - - - -STATUS OF THIS MEMO - - This document defines the standard format for the interchange of - network News messages among USENET hosts. It updates and replaces - RFC-850, reflecting version B2.11 of the News program. This memo is - disributed as an RFC to make this information easily accessible to - the Internet community. It does not specify an Internet standard. - Distribution of this memo is unlimited. - -1. Introduction - - This document defines the standard format for the interchange of - network News messages among USENET hosts. It describes the format - for messages themselves and gives partial standards for transmission - of news. The news transmission is not entirely in order to give a - good deal of flexibility to the hosts to choose transmission - hardware and software, to batch news, and so on. - - There are five sections to this document. Section two defines the - format. Section three defines the valid control messages. Section - four specifies some valid transmission methods. Section five - describes the overall news propagation algorithm. - -2. Message Format - - The primary consideration in choosing a message format is that it - fit in with existing tools as well as possible. Existing tools - include implementations of both mail and news. (The notesfiles - system from the University of Illinois is considered a news - implementation.) A standard format for mail messages has existed - for many years on the Internet, and this format meets most of the - needs of USENET. Since the Internet format is extensible, - extensions to meet the additional needs of USENET are easily made - within the Internet standard. Therefore, the rule is adopted that - all USENET news messages must be formatted as valid Internet mail - messages, according to the Internet standard RFC-822. The USENET - News standard is more restrictive than the Internet standard, - - - -Horton & Adams [Page 1] - -RFC 1036 Standard for USENET Messages December 1987 - - - placing additional requirements on each message and forbidding use - of certain Internet features. However, it should always be possible - to use a tool expecting an Internet message to process a news - message. In any situation where this standard conflicts with the - Internet standard, RFC-822 should be considered correct and this - standard in error. - - Here is an example USENET message to illustrate the fields. - - From: jerry@eagle.ATT.COM (Jerry Schwarz) - Path: cbosgd!mhuxj!mhuxt!eagle!jerry - Newsgroups: news.announce - Subject: Usenet Etiquette -- Please Read - Message-ID: <642@eagle.ATT.COM> - Date: Fri, 19 Nov 82 16:14:55 GMT - Followup-To: news.misc - Expires: Sat, 1 Jan 83 00:00:00 -0500 - Organization: AT&T Bell Laboratories, Murray Hill - - The body of the message comes here, after a blank line. - - Here is an example of a message in the old format (before the - existence of this standard). It is recommended that - implementations also accept messages in this format to ease upward - conversion. - - From: cbosgd!mhuxj!mhuxt!eagle!jerry (Jerry Schwarz) - Newsgroups: news.misc - Title: Usenet Etiquette -- Please Read - Article-I.D.: eagle.642 - Posted: Fri Nov 19 16:14:55 1982 - Received: Fri Nov 19 16:59:30 1982 - Expires: Mon Jan 1 00:00:00 1990 - - The body of the message comes here, after a blank line. - - Some news systems transmit news in the A format, which looks like - this: - - Aeagle.642 - news.misc - cbosgd!mhuxj!mhuxt!eagle!jerry - Fri Nov 19 16:14:55 1982 - Usenet Etiquette - Please Read - The body of the message comes here, with no blank line. - - A standard USENET message consists of several header lines, followed - by a blank line, followed by the body of the message. Each header - - - -Horton & Adams [Page 2] - -RFC 1036 Standard for USENET Messages December 1987 - - - line consist of a keyword, a colon, a blank, and some additional - information. This is a subset of the Internet standard, simplified - to allow simpler software to handle it. The "From" line may - optionally include a full name, in the format above, or use the - Internet angle bracket syntax. To keep the implementations simple, - other formats (for example, with part of the machine address after - the close parenthesis) are not allowed. The Internet convention of - continuation header lines (beginning with a blank or tab) is - allowed. - - Certain headers are required, and certain other headers are - optional. Any unrecognized headers are allowed, and will be passed - through unchanged. The required header lines are "From", "Date", - "Newsgroups", "Subject", "Message-ID", and "Path". The optional - header lines are "Followup-To", "Expires", "Reply-To", "Sender", - "References", "Control", "Distribution", "Keywords", "Summary", - "Approved", "Lines", "Xref", and "Organization". Each of these - header lines will be described below. - -2.1. Required Header lines - -2.1.1. From - - The "From" line contains the electronic mailing address of the - person who sent the message, in the Internet syntax. It may - optionally also contain the full name of the person, in parentheses, - after the electronic address. The electronic address is the same as - the entity responsible for originating the message, unless the - "Sender" header is present, in which case the "From" header might - not be verified. Note that in all host and domain names, upper and - lower case are considered the same, thus "mark@cbosgd.ATT.COM", - "mark@cbosgd.att.com", and "mark@CBosgD.ATt.COm" are all equivalent. - User names may or may not be case sensitive, for example, - "Billy@cbosgd.ATT.COM" might be different from - "BillY@cbosgd.ATT.COM". Programs should avoid changing the case of - electronic addresses when forwarding news or mail. - - RFC-822 specifies that all text in parentheses is to be interpreted - as a comment. It is common in Internet mail to place the full name - of the user in a comment at the end of the "From" line. This - standard specifies a more rigid syntax. The full name is not - considered a comment, but an optional part of the header line. - Either the full name is omitted, or it appears in parentheses after - the electronic address of the person posting the message, or it - appears before an electronic address which is enclosed in angle - brackets. Thus, the three permissible forms are: - - - - - -Horton & Adams [Page 3] - -RFC 1036 Standard for USENET Messages December 1987 - - - From: mark@cbosgd.ATT.COM - From: mark@cbosgd.ATT.COM (Mark Horton) - From: Mark Horton - - Full names may contain any printing ASCII characters from space - through tilde, except that they may not contain "(" (left - parenthesis), ")" (right parenthesis), "<" (left angle bracket), or - ">" (right angle bracket). Additional restrictions may be placed on - full names by the mail standard, in particular, the characters "," - (comma), ":" (colon), "@" (at), "!" (bang), "/" (slash), "=" - (equal), and ";" (semicolon) are inadvisable in full names. - -2.1.2. Date - - The "Date" line (formerly "Posted") is the date that the message was - originally posted to the network. Its format must be acceptable - both in RFC-822 and to the getdate(3) routine that is provided with - the Usenet software. This date remains unchanged as the message is - propagated throughout the network. One format that is acceptable to - both is: - - Wdy, DD Mon YY HH:MM:SS TIMEZONE - - Several examples of valid dates appear in the sample message above. - Note in particular that ctime(3) format: - - Wdy Mon DD HH:MM:SS YYYY - - is not acceptable because it is not a valid RFC-822 date. However, - since older software still generates this format, news - implementations are encouraged to accept this format and translate - it into an acceptable format. - - There is no hope of having a complete list of timezones. Universal - Time (GMT), the North American timezones (PST, PDT, MST, MDT, CST, - CDT, EST, EDT) and the +/-hhmm offset specifed in RFC-822 should be - supported. It is recommended that times in message headers be - transmitted in GMT and displayed in the local time zone. - -2.1.3. Newsgroups - - The "Newsgroups" line specifies the newsgroup or newsgroups in which - the message belongs. Multiple newsgroups may be specified, - separated by a comma. Newsgroups specified must all be the names of - existing newsgroups, as no new newsgroups will be created by simply - posting to them. - - - - - -Horton & Adams [Page 4] - -RFC 1036 Standard for USENET Messages December 1987 - - - Wildcards (e.g., the word "all") are never allowed in a "News- - groups" line. For example, a newsgroup comp.all is illegal, - although a newsgroup rec.sport.football is permitted. - - If a message is received with a "Newsgroups" line listing some valid - newsgroups and some invalid newsgroups, a host should not remove - invalid newsgroups from the list. Instead, the invalid newsgroups - should be ignored. For example, suppose host A subscribes to the - classes btl.all and comp.all, and exchanges news messages with host - B, which subscribes to comp.all but not btl.all. Suppose A receives - a message with Newsgroups: comp.unix,btl.general. - - This message is passed on to B because B receives comp.unix, but B - does not receive btl.general. A must leave the "Newsgroups" line - unchanged. If it were to remove btl.general, the edited header - could eventually re-enter the btl.all class, resulting in a message - that is not shown to users subscribing to btl.general. Also, - follow-ups from outside btl.all would not be shown to such users. - -2.1.4. Subject - - The "Subject" line (formerly "Title") tells what the message is - about. It should be suggestive enough of the contents of the - message to enable a reader to make a decision whether to read the - message based on the subject alone. If the message is submitted in - response to another message (e.g., is a follow-up) the default - subject should begin with the four characters "Re:", and the - "References" line is required. For follow-ups, the use of the - "Summary" line is encouraged. - -2.1.5. Message-ID - - The "Message-ID" line gives the message a unique identifier. The - Message-ID may not be reused during the lifetime of any previous - message with the same Message-ID. (It is recommended that no - Message-ID be reused for at least two years.) Message-ID's have the - syntax: - -- Go Back - - - - + + + +"> - - In order to conform to RFC-822, the Message-ID must have the format: - - - - where full_domain_name is the full name of the host at which the - message entered the network, including a domain that host is in, and - unique is any string of printing ASCII characters, not including "<" - (left angle bracket), ">" (right angle bracket), or "@" (at sign). - - - -Horton & Adams [Page 5] - -RFC 1036 Standard for USENET Messages December 1987 - - - For example, the unique part could be an integer representing a - sequence number for messages submitted to the network, or a short - string derived from the date and time the message was created. For - example, a valid Message-ID for a message submitted from host ucbvax - in domain "Berkeley.EDU" would be "<4123@ucbvax.Berkeley.EDU>". - Programmers are urged not to make assumptions about the content of - Message-ID fields from other hosts, but to treat them as unknown - character strings. It is not safe, for example, to assume that a - Message-ID will be under 14 characters, that it is unique in the - first 14 characters, nor that is does not contain a "/". - - The angle brackets are considered part of the Message-ID. Thus, in - references to the Message-ID, such as the ihave/sendme and cancel - control messages, the angle brackets are included. White space - characters (e.g., blank and tab) are not allowed in a Message-ID. - Slashes ("/") are strongly discouraged. All characters between the - angle brackets must be printing ASCII characters. - -2.1.6. Path - - This line shows the path the message took to reach the current - system. When a system forwards the message, it should add its own - name to the list of systems in the "Path" line. The names may be - separated by any punctuation character or characters (except "." - which is considered part of the hostname). Thus, the following are - valid entries: - - cbosgd!mhuxj!mhuxt - cbosgd, mhuxj, mhuxt - @cbosgd.ATT.COM,@mhuxj.ATT.COM,@mhuxt.ATT.COM - teklabs, zehntel, sri-unix@cca!decvax - - (The latter path indicates a message that passed through decvax, - cca, sri-unix, zehntel, and teklabs, in that order.) Additional - names should be added from the left. For example, the most recently - added name in the fourth example was teklabs. Letters, digits, - periods and hyphens are considered part of host names; other - punctuation, including blanks, are considered separators. - - Normally, the rightmost name will be the name of the originating - system. However, it is also permissible to include an extra entry - on the right, which is the name of the sender. This is for upward - compatibility with older systems. - - The "Path" line is not used for replies, and should not be taken as - a mailing address. It is intended to show the route the message - traveled to reach the local host. There are several uses for this - information. One is to monitor USENET routing for performance - - - -Horton & Adams [Page 6] - -RFC 1036 Standard for USENET Messages December 1987 - - - reasons. Another is to establish a path to reach new hosts. - Perhaps the most important use is to cut down on redundant USENET - traffic by failing to forward a message to a host that is known to - have already received it. In particular, when host A sends a - message to host B, the "Path" line includes A, so that host B will - not immediately send the message back to host A. The name each host - uses to identify itself should be the same as the name by which its - neighbors know it, in order to make this optimization possible. - - A host adds its own name to the front of a path when it receives a - message from another host. Thus, if a message with path "A!X!Y!Z" - is passed from host A to host B, B will add its own name to the path - when it receives the message from A, e.g., "B!A!X!Y!Z". If B then - passes the message on to C, the message sent to C will contain the - path "B!A!X!Y!Z", and when C receives it, C will change it to - "C!B!A!X!Y!Z". - - Special upward compatibility note: Since the "From", "Sender", and - "Reply-To" lines are in Internet format, and since many USENET hosts - do not yet have mailers capable of understanding Internet format, it - would break the reply capability to completely sever the connection - between the "Path" header and the reply function. It is recognized - that the path is not always a valid reply string in older - implementations, and no requirement to fix this problem is placed on - implementations. However, the existing convention of placing the - host name and an "!" at the front of the path, and of starting the - path with the host name, an "!", and the user name, should be - maintained when possible. - -2.2. Optional Headers - -2.2.1. Reply-To - - This line has the same format as "From". If present, mailed replies - to the author should be sent to the name given here. Otherwise, - replies are mailed to the name on the "From" line. (This does not - prevent additional copies from being sent to recipients named by the - replier, or on "To" or "Cc" lines.) The full name may be optionally - given, in parentheses, as in the "From" line. - -2.2.2. Sender - - This field is present only if the submitter manually enters a "From" - line. It is intended to record the entity responsible for - submitting the message to the network. It should be verified by the - software at the submitting host. - - - - - -Horton & Adams [Page 7] - -RFC 1036 Standard for USENET Messages December 1987 - - - For example, if John Smith is visiting CCA and wishes to post a - message to the network, using friend Sarah Jones' account, the - message might read: - - From: smith@ucbvax.Berkeley.EDU (John Smith) - Sender: jones@cca.COM (Sarah Jones) - - If a gateway program enters a mail message into the network at host - unix.SRI.COM, the lines might read: - - From: John.Doe@A.CS.CMU.EDU - Sender: network@unix.SRI.COM - - The primary purpose of this field is to be able to track down - messages to determine how they were entered into the network. The - full name may be optionally given, in parentheses, as in the "From" - line. - -2.2.3. Followup-To - - This line has the same format as "Newsgroups". If present, follow- - up messages are to be posted to the newsgroup or newsgroups listed - here. If this line is not present, follow-ups are posted to the - newsgroup or newsgroups listed in the "Newsgroups" line. - - If the keyword poster is present, follow-up messages are not - permitted. The message should be mailed to the submitter of the - message via mail. - -2.2.4. Expires - - This line, if present, is in a legal USENET date format. It - specifies a suggested expiration date for the message. If not - present, the local default expiration date is used. This field is - intended to be used to clean up messages with a limited usefulness, - or to keep important messages around for longer than usual. For - example, a message announcing an upcoming seminar could have an - expiration date the day after the seminar, since the message is not - useful after the seminar is over. Since local hosts have local - policies for expiration of news (depending on available disk space, - for instance), users are discouraged from providing expiration dates - for messages unless there is a natural expiration date associated - with the topic. System software should almost never provide a - default "Expires" line. Leave it out and allow local policies to be - used unless there is a good reason not to. - - - - - - -Horton & Adams [Page 8] - -RFC 1036 Standard for USENET Messages December 1987 - - -2.2.5. References - - This field lists the Message-ID's of any messages prompting the - submission of this message. It is required for all follow-up - messages, and forbidden when a new subject is raised. - Implementations should provide a follow-up command, which allows a - user to post a follow-up message. This command should generate a - "Subject" line which is the same as the original message, except - that if the original subject does not begin with "Re:" or "re:", the - four characters "Re:" are inserted before the subject. If there is - no "References" line on the original header, the "References" line - should contain the Message-ID of the original message (including the - angle brackets). If the original message does have a "References" - line, the follow-up message should have a "References" line - containing the text of the original "References" line, a blank, and - the Message-ID of the original message. - - The purpose of the "References" header is to allow messages to be - grouped into conversations by the user interface program. This - allows conversations within a newsgroup to be kept together, and - potentially users might shut off entire conversations without - unsubscribing to a newsgroup. User interfaces need not make use of - this header, but all automatically generated follow-ups should - generate the "References" line for the benefit of systems that do - use it, and manually generated follow-ups (e.g., typed in well after - the original message has been printed by the machine) should be - encouraged to include them as well. - - It is permissible to not include the entire previous "References" - line if it is too long. An attempt should be made to include a - reasonable number of backwards references. - -2.2.6. Control - - If a message contains a "Control" line, the message is a control - message. Control messages are used for communication among USENET - host machines, not to be read by users. Control messages are - distributed by the same newsgroup mechanism as ordinary messages. - The body of the "Control" header line is the message to the host. - - For upward compatibility, messages that match the newsgroup pattern - "all.all.ctl" should also be interpreted as control messages. If no - "Control" header is present on such messages, the subject is used as - the control message. However, messages on newsgroups matching this - pattern do not conform to this standard. - - - - - - -Horton & Adams [Page 9] - -RFC 1036 Standard for USENET Messages December 1987 - - - Also for upward compatibility, if the first 4 characters of the - "Subject:" line are "cmsg", the rest of the "Subject:" line should - be interpreted as a control message. - -2.2.7. Distribution - - This line is used to alter the distribution scope of the message. - It is a comma separated list similar to the "Newsgroups" line. User - subscriptions are still controlled by "Newsgroups", but the message - is sent to all systems subscribing to the newsgroups on the - "Distribution" line in addition to the "Newsgroups" line. For the - message to be transmitted, the receiving site must normally receive - one of the specified newsgroups AND must receive one of the - specified distributions. Thus, a message concerning a car for sale - in New Jersey might have headers including: - - Newsgroups: rec.auto,misc.forsale - Distribution: nj,ny - - so that it would only go to persons subscribing to rec.auto or misc. - for sale within New Jersey or New York. The intent of this header - is to restrict the distribution of a newsgroup further, not to - increase it. A local newsgroup, such as nj.crazy-eddie, will - probably not be propagated by hosts outside New Jersey that do not - show such a newsgroup as valid. A follow-up message should default - to the same "Distribution" line as the original message, but the - user can change it to a more limited one, or escalate the - distribution if it was originally restricted and a more widely - distributed reply is appropriate. - -2.2.8. Organization - - The text of this line is a short phrase describing the organization - to which the sender belongs, or to which the machine belongs. The - intent of this line is to help identify the person posting the - message, since host names are often cryptic enough to make it hard - to recognize the organization by the electronic address. - -2.2.9. Keywords - - A few well-selected keywords identifying the message should be on - this line. This is used as an aid in determining if this message is - interesting to the reader. - -2.2.10. Summary - - This line should contain a brief summary of the message. It is - usually used as part of a follow-up to another message. Again, it - - - -Horton & Adams [Page 10] - -RFC 1036 Standard for USENET Messages December 1987 - - - is very useful to the reader in determining whether to read the - message. - -2.2.11. Approved - - This line is required for any message posted to a moderated - newsgroup. It should be added by the moderator and consist of his - mail address. It is also required with certain control messages. - -2.2.12. Lines - - This contains a count of the number of lines in the body of the - message. - -2.2.13. Xref - - This line contains the name of the host (with domains omitted) and a - white space separated list of colon-separated pairs of newsgroup - names and message numbers. These are the newsgroups listed in the - "Newsgroups" line and the corresponding message numbers from the - spool directory. - - This is only of value to the local system, so it should not be - transmitted. For example, in: - - Path: seismo!lll-crg!lll-lcc!pyramid!decwrl!reid - From: reid@decwrl.DEC.COM (Brian Reid) - Newsgroups: news.lists,news.groups - Subject: USENET READERSHIP SUMMARY REPORT FOR SEP 86 - Message-ID: <5658@decwrl.DEC.COM> - Date: 1 Oct 86 11:26:15 GMT - Organization: DEC Western Research Laboratory - Lines: 441 - Approved: reid@decwrl.UUCP - Xref: seismo news.lists:461 news.groups:6378 - - the "Xref" line shows that the message is message number 461 in the - newsgroup news.lists, and message number 6378 in the newsgroup - news.groups, on host seismo. This information may be used by - certain user interfaces. - -3. Control Messages - - This section lists the control messages currently defined. The body - of the "Control" header line is the control message. Messages are a - sequence of zero or more words, separated by white space (blanks or - tabs). The first word is the name of the control message, remaining - words are parameters to the message. The remainder of the header - - - -Horton & Adams [Page 11] - -RFC 1036 Standard for USENET Messages December 1987 - - - and the body of the message are also potential parameters; for - example, the "From" line might suggest an address to which a - response is to be mailed. - - Implementors and administrators may choose to allow control messages - to be carried out automatically, or to queue them for annual - processing. However, manually processed messages should be dealt - with promptly. - - Failed control messages should NOT be mailed to the originator of - the message, but to the local "usenet" account. - -3.1. Cancel - - cancel - - - If a message with the given Message-ID is present on the local - system, the message is cancelled. This mechanism allows a user to - cancel a message after the message has been distributed over the - network. - - If the system is unable to cancel the message as requested, it - should not forward the cancellation request to its neighbor systems. - - Only the author of the message or the local news administrator is - allowed to send this message. The verified sender of a message is - the "Sender" line, or if no "Sender" line is present, the "From" - line. The verified sender of the cancel message must be the same as - either the "Sender" or "From" field of the original message. A - verified sender in the cancel message is allowed to match an - unverified "From" in the original message. - -3.2. Ihave/Sendme - - ihave [ ] - sendme [ ] - - This message is part of the ihave/sendme protocol, which allows one - host (say A) to tell another host (B) that a particular message has - been received on A. Suppose that host A receives message - "<1234@ucbvax.Berkeley.edu>", and wishes to transmit the message to - host B. - - A sends the control message "ihave <1234@ucbvax.Berkeley.edu> A" to - host B (by posting it to newsgroup to.B). B responds with the - control message "sendme <1234@ucbvax.Berkeley.edu> B" (on newsgroup - to.A), if it has not already received the message. Upon receiving - - - -Horton & Adams [Page 12] - -RFC 1036 Standard for USENET Messages December 1987 - - - the sendme message, A sends the message to B. - - This protocol can be used to cut down on redundant traffic between - hosts. It is optional and should be used only if the particular - situation makes it worthwhile. Frequently, the outcome is that, - since most original messages are short, and since there is a high - overhead to start sending a new message with UUCP, it costs as much - to send the ihave as it would cost to send the message itself. - - One possible solution to this overhead problem is to batch requests. - Several Message-ID's may be announced or requested in one message. - If no Message-ID's are listed in the control message, the body of - the message should be scanned for Message-ID's, one per line. - -3.3. Newgroup - - newgroup [moderated] - - This control message creates a new newsgroup with the given name. - Since no messages may be posted or forwarded until a newsgroup is - created, this message is required before a newsgroup can be used. - The body of the message is expected to be a short paragraph - describing the intended use of the newsgroup. - - If the second argument is present and it is the keyword moderated, - the group should be created moderated instead of the default of - unmoderated. The newgroup message should be ignored unless there is - an "Approved" line in the same message header. - -3.4. Rmgroup - - rmgroup - - This message removes a newsgroup with the given name. Since the - newsgroup is removed from every host on the network, this command - should be used carefully by a responsible administrator. The - rmgroup message should be ignored unless there is an "Approved:" - line in the same message header. - - - - - - - - - - - - - -Horton & Adams [Page 13] - -RFC 1036 Standard for USENET Messages December 1987 - - -3.5. Sendsys - sendsys (no arguments) - - The sys file, listing all neighbors and the newsgroups to be sent to - each neighbor, will be mailed to the author of the control message - ("Reply-To", if present, otherwise "From"). This information is - considered public information, and it is a requirement of membership - in USENET that this information be provided on request, either - automatically in response to this control message, or manually, by - mailing the requested information to the author of the message. - This information is used to keep the map of USENET up to date, and - to determine where netnews is sent. - - The format of the file mailed back to the author should be the same - as that of the sys file. This format has one line per neighboring - host (plus one line for the local host), containing four colon - separated fields. The first field has the host name of the - neighbor, the second field has a newsgroup pattern describing the - newsgroups sent to the neighbor. The third and fourth fields are - not defined by this standard. The sys file is not the same as the - UUCP L.sys file. A sample response is: - - From: cbosgd!mark (Mark Horton) - Date: Sun, 27 Mar 83 20:39:37 -0500 - Subject: response to your sendsys request - To: mark@cbosgd.ATT.COM - - Responding-System: cbosgd.ATT.COM - cbosgd:osg,cb,btl,bell,world,comp,sci,rec,talk,misc,news,soc,to, - test - ucbvax:world,comp,to.ucbvax:L: - cbosg:world,comp,bell,btl,cb,osg,to.cbosg:F:/usr/spool/outnews - /cbosg - cbosgb:osg,to.cbosgb:F:/usr/spool/outnews/cbosgb - sescent:world,comp,bell,btl,cb,to.sescent:F:/usr/spool/outnews - /sescent - npois:world,comp,bell,btl,ug,to.npois:F:/usr/spool/outnews/npois - mhuxi:world,comp,bell,btl,ug,to.mhuxi:F:/usr/spool/outnews/mhuxi - -3.6. Version - - version (no arguments) - - The name and version of the software running on the local system is - to be mailed back to the author of the message ("Reply-to" if - present, otherwise "From"). - -3.7. Checkgroups - - - -Horton & Adams [Page 14] - -RFC 1036 Standard for USENET Messages December 1987 - - - The message body is a list of "official" newsgroups and their - description, one group per line. They are compared against the list - of active newsgroups on the current host. The names of any obsolete - or new newsgroups are mailed to the user "usenet" and descriptions - of the new newsgroups are added to the help file used when posting - news. - -4. Transmission Methods - - USENET is not a physical network, but rather a logical network - resting on top of several existing physical networks. These - networks include, but are not limited to, UUCP, the Internet, an - Ethernet, the BLICN network, an NSC Hyperchannel, and a BERKNET. - What is important is that two neighboring systems on USENET have - some method to get a new message, in the format listed here, from - one system to the other, and once on the receiving system, processed - by the netnews software on that system. (On UNIX systems, this - usually means the rnews program being run with the message on the - standard input. <1>) - - It is not a requirement that USENET hosts have mail systems capable - of understanding the Internet mail syntax, but it is strongly - recommended. Since "From", "Reply-To", and "Sender" lines use the - Internet syntax, replies will be difficult or impossible without an - Internet mailer. A host without an Internet mailer can attempt to - use the "Path" header line for replies, but this field is not - guaranteed to be a working path for replies. In any event, any host - generating or forwarding news messages must have an Internet address - that allows them to receive mail from hosts with Internet mailers, - and they must include their Internet address on their From line. - -4.1. Remote Execution - - Some networks permit direct remote command execution. On these - networks, news may be forwarded by spooling the rnews command with - the message on the standard input. For example, if the remote - system is called remote, news would be sent over a UUCP link - with the command: - - uux - remote!rnews - - and on a Berknet: - - net -mremote rnews - - - - - - - -Horton & Adams [Page 15] - -RFC 1036 Standard for USENET Messages December 1987 - - - It is important that the message be sent via a reliable mechanism, - normally involving the possibility of spooling, rather than direct - real-time remote execution. This is because, if the remote system - is down, a direct execution command will fail, and the message will - never be delivered. If the message is spooled, it will eventually - be delivered when both systems are up. - -4.2. Transfer by Mail - - On some systems, direct remote spooled execution is not possible. - However, most systems support electronic mail, and a news message - can be sent as mail. One approach is to send a mail message which - is identical to the news message: the mail headers are the news - headers, and the mail body is the news body. By convention, this - mail is sent to the user newsmail on the remote machine. - - One problem with this method is that it may not be possible to - convince the mail system that the "From" line of the message is - valid, since the mail message was generated by a program on a - system different from the source of the news message. Another - problem is that error messages caused by the mail transmission - would be sent to the originator of the news message, who has no - control over news transmission between two cooperating hosts - and does not know whom to contact. Transmission error messages - should be directed to a responsible contact person on the - sending machine. - - A solution to this problem is to encapsulate the news message into a - mail message, such that the entire message (headers and body) are - part of the body of the mail message. The convention here is that - such mail is sent to user rnews on the remote system. A mail - message body is generated by prepending the letter N to each line of - the news message, and then attaching whatever mail headers are - convenient to generate. The N's are attached to prevent any special - lines in the news message from interfering with mail transmission, - and to prevent any extra lines inserted by the mailer (headers, - blank lines, etc.) from becoming part of the news message. A - program on the receiving machine receives mail to rnews, extracting - the message itself and invoking the rnews program. An example in - this format might look like this: - - - - - - - - - - - -Horton & Adams [Page 16] - -RFC 1036 Standard for USENET Messages December 1987 - - - Date: Mon, 3 Jan 83 08:33:47 MST - From: news@cbosgd.ATT.COM - Subject: network news message - To: rnews@npois.ATT.COM - - NPath: cbosgd!mhuxj!harpo!utah-cs!sask!derek - NFrom: derek@sask.UUCP (Derek Andrew) - NNewsgroups: misc.test - NSubject: necessary test - NMessage-ID: <176@sask.UUCP> - NDate: Mon, 3 Jan 83 00:59:15 MST - N - NThis really is a test. If anyone out there more than 6 - Nhops away would kindly confirm this note I would - Nappreciate it. We suspect that our news postings - Nare not getting out into the world. - N - - Using mail solves the spooling problem, since mail must always be - spooled if the destination host is down. However, it adds more - overhead to the transmission process (to encapsulate and extract the - message) and makes it harder for software to give different - priorities to news and mail. - -4.3. Batching - - Since news messages are usually short, and since a large number of - messages are often sent between two hosts in a day, it may make - sense to batch news messages. Several messages can be combined into - one large message, using conventions agreed upon in advance by the - two hosts. One such batching scheme is described here; its use is - highly recommended. - - News messages are combined into a script, separated by a header of - the form: - - - #! rnews 1234 - - where 1234 is the length of the message in bytes. Each such line is - followed by a message containing the given number of bytes. (The - newline at the end of each line of the message is counted as one - byte, for purposes of this count, even if it is stored as .) For example, a batch of message might look - like this: - - - - - - -Horton & Adams [Page 17] - -RFC 1036 Standard for USENET Messages December 1987 - - - #! rnews 239 - From: jerry@eagle.ATT.COM (Jerry Schwarz) - Path: cbosgd!mhuxj!mhuxt!eagle!jerry - Newsgroups: news.announce - Subject: Usenet Etiquette -- Please Read - Message-ID: <642@eagle.ATT.COM> - Date: Fri, 19 Nov 82 16:14:55 EST - Approved: mark@cbosgd.ATT.COM - - Here is an important message about USENET Etiquette. - #! rnews 234 - From: jerry@eagle.ATT.COM (Jerry Schwarz) - Path: cbosgd!mhuxj!mhuxt!eagle!jerry - Newsgroups: news.announce - Subject: Notes on Etiquette message - Message-ID: <643@eagle.ATT.COM> - Date: Fri, 19 Nov 82 17:24:12 EST - Approved: mark@cbosgd.ATT.COM - - There was something I forgot to mention in the last - message. - - Batched news is recognized because the first character in the - message is #. The message is then passed to the unbatcher for - interpretation. - - The second argument (in this example rnews) determines which - batching scheme is being used. Cooperating hosts may use whatever - scheme is appropriate for them. - -5. The News Propagation Algorithm - - This section describes the overall scheme of USENET and the - algorithm followed by hosts in propagating news to the entire - logical network. Since all hosts are affected by incorrectly - formatted messages and by propagation errors, it is important - for the method to be standardized. - - USENET is a directed graph. Each node in the graph is a host - computer, and each arc in the graph is a transmission path from - one host to another host. Each arc is labeled with a newsgroup - pattern, specifying which newsgroup classes are forwarded along - that link. Most arcs are bidirectional, that is, if host A - sends a class of newsgroups to host B, then host B usually sends - the same class of newsgroups to host A. This bidirectionality - is not, however, required. - - USENET is made up of many subnetworks. Each subnet has a name, such - - - -Horton & Adams [Page 18] - -RFC 1036 Standard for USENET Messages December 1987 - - - as comp or btl. Each subnet is a connected graph, that is, a path - exists from every node to every other node in the subnet. In - addition, the entire graph is (theoretically) connected. (In - practice, some political considerations have caused some hosts to be - unable to post messages reaching the rest of the network.) - - A message is posted on one machine to a list of newsgroups. That - machine accepts it locally, then forwards it to all its neighbors - that are interested in at least one of the newsgroups of the - message. (Site A deems host B to be "interested" in a newsgroup if - the newsgroup matches the pattern on the arc from A to B. This - pattern is stored in a file on the A machine.) The hosts receiving - the incoming message examine it to make sure they really want the - message, accept it locally, and then in turn forward the message to - all their interested neighbors. This process continues until the - entire network has seen the message. - - An important part of the algorithm is the prevention of loops. The - above process would cause a message to loop along a cycle forever. - In particular, when host A sends a message to host B, host B will - send it back to host A, which will send it to host B, and so on. - One solution to this is the history mechanism. Each host keeps - track of all messages it has seen (by their Message-ID) and - whenever a message comes in that it has already seen, the incoming - message is discarded immediately. This solution is sufficient to - prevent loops, but additional optimizations can be made to avoid - sending messages to hosts that will simply throw them away. - - One optimization is that a message should never be sent to a machine - listed in the "Path" line of the header. When a machine name is - in the "Path" line, the message is known to have passed through the - machine. Another optimization is that, if the message originated - on host A, then host A has already seen the message. Thus, if a - message is posted to newsgroup misc.misc, it will match the pattern - misc.all (where all is a metasymbol that matches any string), and - will be forwarded to all hosts that subscribe to misc.all (as - determined by what their neighbors send them). These hosts make up - the misc subnetwork. A message posted to btl.general will reach all - hosts receiving btl.all, but will not reach hosts that do not get - btl.all. In effect, the messages reaches the btl subnetwork. A - messages posted to newsgroups misc.misc,btl.general will reach all - hosts subscribing to either of the two classes. - -Notes - - <1> UNIX is a registered trademark of AT&T. - - - - - -Horton & Adams [Page 19] -
+Document: FSC-0059 +Version: 001 +Date: 08-Mar-1992 + + + + + Newsgroup Interchange within FidoNet + Jack Decker + 1:154/8@fidonet + + A proposed standard for the interchange of USENET News messages among + FidoNet nodes. + + +Status of this document: + + This FSC suggests a proposed protocol for the FidoNet(r) community, + and requests discussion and suggestions for improvements. + Distribution of this document is unlimited. + + Fido and FidoNet are registered marks of Tom Jennings and Fido + Software. + + + +Introduction: + +This document defines the standard format for the interchange of USENET +news messages among FidoNet nodes. It incorporates by reference the +document RFC-1036, "Standard for Interchange of USENET Messages" by M. +Horton of AT&T Bell Laboratories and R. Adams of the Center for Seismic +Studies. A copy of RFC-1036 should be included in the distribution +archive of this standard. However, RFC-1036 is NOT applicable in its +entirety to FidoNet. Therefore, unless specifically referenced +elsewhere in this document, only section 2 of RFC-1036 should be +considered part of this standard. Section 3, which deals with "control +messages", may be implemented in FidoNet on an optional basis, and if +processing of control messages is included in a FidoNet implementation, +it should be done in accordance with section 3 of RFC-1036 to the +extent possible. Section 4 of RFC-1036 is *NOT* applicable to FidoNet +(except for section 4.3, which will be discussed later) and therefore +is NOT included as part of this standard. Section 5 of RFC-1036 is a +treatise on the News Propagation Algorithm used within UseNet, and +should be studied even though it is not directly applicable to FidoNet, +in particular because it contains a discussion on the prevention of +loops (what we in FidoNet commonly refer to as "dupe loops"). + +Please note that FidoNet implementations do not recognize nor support +what is referred to as the "old format" or the "A format" in section 2 +of RFC-1036. + +The goal of this document is to define a standard for the interchange +of news messages between FidoNet nodes in a format that will also be +acceptable to UseNet hosts. In order to simplify the creation of +software that conforms to this standard, we do not intend to support +every news format that has ever existed in UseNet. The standard +described in RFC-1036 is used by the majority of UseNet hosts, and +therefore it is the standard that will be adopted in this document. + +This standard will contain three sections: General theory of newsgroup +transmission, Format and protocols of batched newsgroups, and the +translation of newsgroup messages to and from FidoNet message format. + +1. General theory of newsgroup transmission: + +Prior to the introduction of the DoveMail program, the usual method of +gating a UseNet newsgroup into FidoNet was to convert it to FidoNet +echomail, and then send it to "downstream" nodes in echomail format. +This method is still used at the majority of gateway systems at this +writing. Unfortunately, no conversion process is perfect, and some +useful control information is usually lost in the conversion. In +addition, most FidoNet echomail processors don't handle long messages +(which are fairly common in newsgroups) well at all, and many gateway +systems either try to split these messages into multiple parts (a +somewhat awkward process) or discard them entirely. Because the +duplicate message detection algorithms used in many FidoNet echomail +processors incorrectly identify some of the parts of a split message as +duplicates, parts of long messages often get "lost" when transmitted as +echomail. Also, UseNet allows a message to be posted to multiple +newsgroups, and when such messages are converted to echomail, it may be +necessary to create multiple copies of the message (one for each +echomail area that it would be placed in), thus increasing the +transmission time for such messages. + +Even normal-length newsgroup messages may be falsely discarded as +duplicates by some "downstream" echomail processors. The reason this +is a particular problem in newsgroups converted to echomail is because +some echomail processors use a checksum of parts of FidoNet message +headers to determine if messages are duplicates. Since all newsgroup +messages are assumed to be addressed to "All", and since some gateway +software uses the date and time that the message was converted to +echomail rather than the original date and time from the message, it's +quite possible that the remainder of the message header contains +information that is similar enough to information in another message's +header to cause it to be discarded as a duplicate message. This +happens far more frequently with converted newsgroup messages than with +messages originally entered as echomail. + +Finally, when a BBS user enters a reply to a news message that has been +converted to echomail, in many cases the information is simply not +available in the original message to generate a proper "References:" +line in the reply, as required by RFC-1036. If the original message +contained a "Followup-To:" line, which requires that replies be posted +to a different newsgroup than the one in which the original message was +entered, this line may not transmitted in the message as converted to +echomail. And even if this information is available, no echomail +processor currently available will modify the reply message as required +(to add the "References:" line where necessary, or to move the message +to a different area if it is a reply to a message that contained a +"Followup-To:" line). + +Under this proposed standard, none of the UseNet message header +information is lost in transmission between nodes, and reply messages +can be generated that conform to UseNet specifications. If a message +is posted to multiple newsgroups, it is only transmitted once (instead +of multiple times as it might be if converted to echomail). Also, long +messages are not truncated or changed in transmission between nodes, +and finally, there is no chance that a message will be improperly +discarded as a duplicate. + +The main thing to remember is that under this standard, news messages +are never converted to echomail. Echomail is an irrelevant concept in +this context, since we are not passing echomail between nodes. +Instead, newsgroups are transmitted in the native format specified by +RFC-1036, and tossed directly from batched newsgroup packets to the +FidoNet message format (e.g. the *.msg format) if necessary. Keep in +mind that most FidoNet BBS software uses the same general format not +only for echomail messages, but also for netmail and local message +areas, so it is not necessary to transmit messages between nodes in +echomail format if another format is more suitable for the type of +message being transmitted. + +2. Format and protocols of batched newsgroups: + +When newsgroup messages are transmitted between systems, the individual +messages must conform to the specifications of section 2 of RFC-1036, +and section 3 of this document. Where section 3 of this document +defines a more restrictive standard than RFC-1036, this document shall +take precedence. + +When transmitting news messages between FidoNet nodes, they must be +sent in a batched newsgroup file (as described in section 4.3 of +RFC-1036) unless some other format is agreed upon in advance. The +transmission of unbatched news messages, or the use of any batching +method other than that described in section 4.3 of RFC-1036 shall be +considered non-standard. Please note that RFC-1036 section 4.3 refers +to this batching process as combining several messages into "one large +message", but we will refer to this "one large message" as a "batched +newsgroup file", or a "UseNet format mail packet" rather than as a +"large message", since FidoNet systems do not normally handle large +"messages". + +When messages pass through a FidoNet system on their way to other +nodes, the header lines in the message may be modified to conform with +the standards given here. However, the text (body) of a message should +NEVER be altered (one exception: Carriage Returns MAY be converted to +Line Feeds in order to conform to this standard, but this is neither +required nor expected of software). + +The standard format for sending a batched newsgroup file to other +FidoNet nodes is as follows: + +First, as will be noted in section 3 of this document, individual lines +of the batched newsgroup file must be terminated with Line Feeds only, +and the file must NOT contain Carriage Return characters (ASCII 13). + +Batched newsgroup files shall be transmitted between FidoNet nodes as +files named using the filename ????????.PKU, where the eight character +root name can be any of the hexadecimal digits 0 - 9 or A - F. The +.PKU extension (which stands for "PacKet - Usenet format") is the news +equivalent of the .PKT file used to transmit FidoNet format netmail and +echomail between nodes. + +Batched newsgroup files with the filespec ????????.PKU may be archived +into a standard mail archive file (bearing the extension *.MO?, *.TU?, +*.WE? ... *.SU?). It is assumed that the receiver of batched newsgroup +files will take any necessary steps to make sure that both *.PKU and +*.PKT files are extracted from incoming mail archive files before the +mail archive files are deleted. In certain cases, this may mean that +an external unarchive shell may have to be used, instead of allowing +the echomail processor to call the unarchiver (typical external +unarchive shell programs at this writing are GUS, POLYXARC, and SPAZ). + +A batched newsgroup file awaiting transmission may be stored in a +FidoNet system's "outbound" area in uncompressed form, prior to being +archived for transmission or sent in uncompressed form. It is +suggested that when a system uses the .OUT extension to indicate an +uncompressed netmail or echomail packet, the .UUT extension be used to +indicate an uncompressed batched newsgroup packet. It is expected that +a .UUT file in a system's "outbound" area will be treated in much the +same way as an .OUT file, except it will be renamed to a file with an +extension of .PKU (rather than .PKT) before being archived into the +mail archive. This implies that the root name of the .UUT file will +contain the net number and node number of the destination system, +expressed as four hexadecimal digits each for net and node numbers, in +the same manner as the root name for a FidoNet .OUT file is +constructed. + +The root filename of the *.PKU file should be an eight digit +hexadecimal number, with leading zeroes used if necessary, in order to +make an eight character root filename. It is suggested that this +hexadecimal number be based on time of year, with 00000000.PKU +generated at exactly midnight on January 1 and FFFFFFFF.PKU generated +at just a moment before midnight on December 31. However, it is +permissible to use the same algorithm that is used to generate the root +filename for *.PKT files. + +The normal sequence for transmission of messages between FidoNet nodes +might then be described as follows: + +a. Messages created on the originating system are placed into a batched +newsgroup file conforming to the specifications of RFC-1036 section +4.3. When this batched newsgroup file is destined for another FidoNet +node, it will have a filename of the format: + + [4 hex digit net number][4 hex digit node number].UUT + +This file will then be placed in the outbound mail area for packing. + +b. A mail packing program will examine the outbound mail area and, upon +finding the .UUT file, will rename it to a file with an extension of +.PKU, and then shell to a compression program in order to place the +*.PKU file into a new or existing mail archive file for the destination +node. Mail archive files bear extension names consisting of the first +two letters of a day of the week (in the English language) plus a +numeric character in the range 0 - 9 (for example, .MO5 or .TH7). The +method of compression for the mail archive is as agreed upon between +the originating and destination nodes. No "standard" method of +compression for the mail archive is specified in this document. NOTE: +If the compression program fails for any reason (such as running out of +disk space), the mail packing program MUST rename the .PKU file back to +the original *.UUT filename before exiting. Since batched newsgroup +files do not contain a header that indicates the destination node, +there would be no way to determine the proper destination node if the +file were not renamed back to the original filename. + +c. The mail archive is transmitted in the usual manner by a FidoNet +compatible mailer, or such other means as may be agreed upon in advance +by the sysops of the originating and destination nodes. + +d. At the destination system, the individual files are extracted from +the mail archive. *.PKT files are processed in the usual manner to +extract any netmail or echomail messages, while *.PKU files are +processed by software designed to handle batched newsgroup files. In +this context, such files could be "handled" by re-processing the +messages and batching them to be sent on to one or more additional +node(s), or by tossing the messages to the local message base, or both. + +Please note that this standard does not anticipate that batched +newsgroup files will be converted to FidoNet echomail at any point +along the way. It is realized that this may indeed happen, but such +conversions should be considered as something to be avoided if at all +possible due to the problems discussed in section 1 of this document. + +3. Translation of newsgroup messages to and from FidoNet message +format: + +NOTE: Where applicable, the standards defined in this section for +messages shall apply not only to locally created messages, but also to +all messages sent to "downstream" FidoNet nodes. + +In this context, "FidoNet message format" means that format in which +messages commonly reside on a FidoNet BBS. At this writing, there are +three formats commonly used for message storage on FidoNet systems, but +other formats may be in use as well. The three most common formats are +the "*.msg" format as used by the original Fido program (and a host of +programs since), also commonly referred to as the "single message per +file format"; the "Hudson" format, used by QuickBBS, Remote Access, and +some other products; and the "Squish" format used by the Maximus BBS +and the "Squish" echomail processor. + +Because there are so many message formats, some other programs have +taken the approach of trying to convert UseNet news into echomail, +creating *.PKT files which can theoretically be processed by any +FidoNet system. However, since the *.PKT files are processed by the +echomail processor, all the limitations and pitfalls associated with +converting newsgroup messages to echomail come into play. + +The preferred way of handling incoming messages would be to have the +BBS (or message reader/editor) software directly read batched newsgroup +files. In this way, the files would not have to be "processed" per se. +As new batched newsgroup files arrived on a system, they could simply +be concatenated to the existing message base, and then a utility could +be run that would build an index to the message base, in a manner +somewhat similar to the way "flat file" message bases are currently +implemented on some BBS's. Of course, you'd need to occasionally run a +utility to delete old messages in order to keep the message base from +growing too large, and new messages entered on the system would have to +be exported from the system in a separate batched newsgroup file. +However, at this writing no FidoNet-compatible BBS or message editor is +capable of directly reading a batched newsgroup file. + +The second most preferable method is to convert news messages directly +to the message format used by that system. At this writing the +DoveMail software includes utilities (NewsToss and NewsScan) that can +convert batched newsgroup files to and from messages in the *.msg +(single message per file) format. It should be possible to convert +batched newsgroup files to and from other FidoNet message formats as +well. + +The method in which messages are stored on a BBS, and the method in +which it is determined which new (locally-entered) messages need to be +exported from the system will necessarily be implementation-specific. +One method that can be used with *.msg type message bases is to +maintain a "high water mark" in 1.msg, similar to the "high water mark" +used for echomail messages, and additionally to mark messages received +from other nodes as "sent" when they arrive, and locally-entered +messages as "sent" when they have been exported, and to never re-send a +message marked as "sent". + +When tossing incoming messages, duplicate messages can be detected by +comparing the contents of the "Message-ID:" line with those of +previously received messages. This may be slow processing +considerably, however, and would require storage of a history file of +"previously seen" messages. Another method is to look in the "Path" +line and see if we are already listed in the path; if so, the message +is a duplicate and should be deleted. This method is faster and does +not require maintenance of a history file, but will not guard against +duplicate messages arriving from one's feed that have not passed +through the system twice (for example, a message that arrived from two +different paths). Fortunately, UseNet folks seem to understand the +need for proper topology, so those types of dupes are relatively rare. +FidoNet sysops taking UseNet feeds must understand that it is +IMPERATIVE that a feed of any one newsgroup be obtained from only ONE +source, especially if they are then passing that newsgroup to any +"downstream" nodes. This absolutely does NOT imply that geographic +restrictions on newsgroup distribution are necessary or desirable! + +Additional comments on preventing "loops" can be found in section 5 of +RFC-1036, in the discussion of the News Propagation Algorithm. Please +note that only two methods of loop prevention are included in this +standard: + +1) The history mechanism. Each host keeps track of all messages it has +seen (by their Message-ID) and whenever a message comes in that it has +already seen, the incoming message is discarded immediately. + +2) Not sending a message to a system listed in the "Path" line of the +header, or to the system that originated the message (which, in +practice, should be listed in the Path line). + +No other methods of dupe loop prevention are acceptable. In +particular, checksums of portions of the message header or message +itself are NOT permitted to be used for loop prevention, except perhaps +as a method to quickly identify POTENTIAL duplicate messages before +doing a full string comparison with the Message-ID data in the history +file. In no case should a checksum be used as the SOLE method of +determining whether a message is a duplicate. + +When newsgroup messages are created for transmission to other systems, +or when received messages are transmitted other systems, the individual +messages must conform to the specifications of section 2 of RFC-1036. +However, in order to simply programming of software designed to handle +such messages, the following modifications to the standard are proposed +for use within FidoNet. Please note that these are slightly more +restrictive than the standard permitted by RFC-1036: + +a. The "old format" or "A format" described in section 2 of RFC-1036 is +NOT supported in FidoNet. Only the format detailed in RFC-1036 +(sometimes referred to as the "B" News format) is supported. The vast +majority of UseNet sites currently use the "B" News format. + +b. The UseNet standard permits the use of "white space" to separate +certain items in the message header, with "white space" defined as +blanks or tabs. It also states that "the Internet convention of +continuation header lines (beginning with a blank or tab) is allowed." +However, it should NOT be ASSUMED that "continuation header lines" will +be used in any message. It is suggested that when creating newsgroup +messages for transmission to other systems, the use of tab characters +be avoided in header lines, and that "continuation header lines" NOT be +used, even if this means that a header line will be considerably longer +than the length of a screen line. Software that creates FidoNet-format +messages (for display to BBS callers) from batched newsgroup files +(that is, newsgroup message tossers) should break up such extra-long +header lines, using a single space character ONLY (NOT a tab!) at the +start of "continuation header lines." Since batched newsgroup files +received from a UseNet site may contain "continuation header lines" +and/or tabs as "white space" in header lines, it is necessary to be +able to decode such header lines properly, but it is strongly suggested +that FidoNet software not CREATE messages with tabs or "continuation +header lines" for transmission through the network. + +c. All lines in news messages, including header lines, shall be +terminated with a LINE FEED (ASCII 10 decimal) ONLY. Under NO +circumstances shall a CARRIAGE RETURN (ASCII 13 decimal) appear in news +messages transmitted through FidoNet (if a Carriage Return is found in +an in-transit message it MAY be changed to a Line Feed, this being the +sole exception to the rule about not changing the body of a message, +but the expectation is that no Carriage Returns will appear in a news +message). Also, spaces appearing at the end of lines (just prior to +the Line Feed character) are strongly discouraged since they convey no +useful information. Finally, there should be only a single line feed +at the end of each message (blank lines following the last line of a +message are not allowed, again because they convey no useful +information). Please note that the use of the Line Feed as a line +terminator is fairly standard throughout UseNet, and when a news +message is converted to a FidoNet format message it is a simple matter +to replace Line Feeds with Carriage Returns so that the message will +display properly. + +d. When constructing or adding to "Path" lines, RFC-1036 (section +2.1.6) states that "The names may be separated by any punctuation +character or characters (except '.' which is considered part of the +hostname)." However, in actual practice, only the "!" (exclamation +point or "bang" character) is commonly used to separate names. +Therefore, the "!" character will be considered the "standard" +separator for system names in Path lines in messages generated in +FidoNet. Also, RFC-1036 states that "Normally, the rightmost name will +be the name of the originating system. However, it is also permissible +to include an extra entry on the right, which is the name of the +sender. This is for upward compatibility with older systems." In +actual practice, it appears that most Path lines originating in UseNet +have a user name as the rightmost entry. Therefore, when a Path line +is created for a message originating in FidoNet, it is suggested that +the following format be used (assuming a message entered by user John +Smith at node 1:123/456): + + Path: f456.n123.z1.fidonet.org!john.smith + +When a user name is placed in the path, all spaces in the user name +must be replaced with periods, and all uppercase characters in the name +should be converted to lowercase. It is permissible to use an alias in +place of a user's real name if the originating system runs software +that will recognize that alias in incoming netmail messages, and remap +such messages to the proper user if necessary. Also, note the +restrictions on prohibited characters in the user name as specified in +RFC-1036 section 2.1.1. Although section 2.1.1. deals with the "From" +line, common sense would indicate that these same restrictions on +prohibited characters should apply if the user name is placed in the +Path line (with the obvious exception of the use of the period to +replace spaces in the user name, which is required). + +e. Header lines defined as "optional" may be more or less optional +depending on the keyword. For example, the "Reply-To" and +"Followup-To" lines should be automatically honored, if at all +possible, when reply messages are created, and the "References" line, +even though listed as an "optional" line, is "required for all +follow-up messages" (replies). On the other hand, lines such as +"Control" and "Distribution" may have little meaning to FidoNet nodes +(in particular, "Distribution" is meant to control distribution of a +message along hierarchial lines, but since FidoNet topology has little +relation to UseNet hierarchies, it is probably best to just ignore +"Distribution" lines on in-transit messages). + +Additional specifications for messages, including required and optional +header lines, are detailed in section 2 of RFC-1036. + +When a newsgroup is moderated, it is the responsibility of the sysop of +each participating BBS to prevent users from entering messages in that +area (unless the message exporting software is capable of sending any +locally-entered messages to the conference moderator via MAIL). +However, if a software newsgroup processor is written that both imports +(tosses) messages to a FidoNet-format message base, and exports locally +entered messages, and if the software does not have a way to send +replies to the moderator via mail, then some mechanism must be provided +to prevent the export of messages from a moderated area, so that in the +unlikely event that there is no easy way to prevent users from posting +messages in the moderated area, such messages will still not be sent +out. Since this standard does not deal with the transport of UseNet +MAIL within FidoNet, the method for transmission of replies in +moderated newsgroups is undefined by this document. However, software +authors are encouraged to provide some mechanism for private mail +replies to newsgroup messages, in both moderated and unmoderated areas. + +Note that if a moderated newsgroup is carried on a system, it is the +responsibility of the sysop to provide mail access to users so that +replies can be (manually) sent to the conference moderator, especially +if replies in the newsgroup area cannot be automatically routed to the +conference moderator. + +One point that needs to be emphasized is there is NO message length +limit on UseNet messages. If a FidoNet node passes newsgroup messages +to, or on behalf of other FidoNet nodes, it is NOT permissible to +discard or truncate messages that exceed a preset length limit. Note +that in a batched newsgroup file, each message is preceded by a header +of the form "#! rnews <length in bytes>". Since the message text +length is never changed in processing, it is possible to determine the +length of a message after processing by reading in all the header +lines, calculating the combined length of the header lines prior to +making changes in the header (e.g. the Path line), then calculating the +combined length of the header lines after making changes. The +difference between the original and the new length of the header lines +can then be applied to the value given in the "#! rnews" line to +determine the new message length, when is then used in the "#! rnews" +header of the modified message. Also, the number of bytes given in the +"#! rnews" line, MINUS the length of the message header lines, is the +length of the body of the message. Once this length is known, the body +of the message can be copied from the input file to the output file(s) +in "chunks" small enough to fit in memory, until the end of the message +is reached. + +The following comments are implementation suggestions applicable to +current FidoNet-compatible BBS systems, though not necessarily to +software that may be written in the future: + +It should be noted that when a BBS user enters a reply message, most +FidoNet BBS software will "link" the reply message to the original by +placing the message number of the original message in the message +header (this is almost always the case if messages are stored in the +"*.msg" format, in which case the number of the message being replied +to is found at bytes 185-186 in the message header). If the +appropriate header lines have been stored in the text of the original +message, it is possible to construct a reply message that meets all +RFC-1036 specifications. For example, a "References" line can be +constructed from the "Message-ID" line (and the "References" line, if +any) of the original message. Similarly, if the original message +contains a "Followup-To:" line, the reply can be posted to the +newsgroup(s) specified in that line. This may not work as expected if +a message renumbering program or similar program messes with the +message base before reply message is exported, so it is highly +recommended that locally-entered newsgroup messages be exported as soon +as practicable after they are entered. + +Since the user of a BBS may reply to a message entered by another user +of the same BBS, it is recommended that when a message is exported, any +UseNet format header lines created for the exported message also be +written back to the original message if possible. This will permit +reply linking to remain intact even if two or more users of the same +BBS participate in the same message thread. + +If a message is received that specifies more than one newsgroup in the +"Newsgroups" header line, and corresponding message areas are available +on the local system, one copy of the message should be placed in each +such area. For example, if the message is posted to four different +newsgroups, and two of those groups are carried on the local BBS, then +a copy of the message should be placed in the message base for each of +those groups. If users of a BBS are allowed to post a message to +multiple newsgroups, then any message thus posted should be copied to +the message bases of any of the other areas that are also carried on +that system (and that the message was posted to) at the time the +message is exported. + +Corrections and Additions to this document: + +Proposed corrections and additions to this document should be submitted +to Jack Decker at 1:154/8, or jack.decker@f8.n154.z1.fidonet.org ++ +
+Network Working Group M. Horton +Request for Comments: 1036 AT&T Bell Laboratories +Obsoletes: RFC-850 R. Adams + Center for Seismic Studies + December 1987 + + + Standard for Interchange of USENET Messages + + + +STATUS OF THIS MEMO + + This document defines the standard format for the interchange of + network News messages among USENET hosts. It updates and replaces + RFC-850, reflecting version B2.11 of the News program. This memo is + disributed as an RFC to make this information easily accessible to + the Internet community. It does not specify an Internet standard. + Distribution of this memo is unlimited. + +1. Introduction + + This document defines the standard format for the interchange of + network News messages among USENET hosts. It describes the format + for messages themselves and gives partial standards for transmission + of news. The news transmission is not entirely in order to give a + good deal of flexibility to the hosts to choose transmission + hardware and software, to batch news, and so on. + + There are five sections to this document. Section two defines the + format. Section three defines the valid control messages. Section + four specifies some valid transmission methods. Section five + describes the overall news propagation algorithm. + +2. Message Format + + The primary consideration in choosing a message format is that it + fit in with existing tools as well as possible. Existing tools + include implementations of both mail and news. (The notesfiles + system from the University of Illinois is considered a news + implementation.) A standard format for mail messages has existed + for many years on the Internet, and this format meets most of the + needs of USENET. Since the Internet format is extensible, + extensions to meet the additional needs of USENET are easily made + within the Internet standard. Therefore, the rule is adopted that + all USENET news messages must be formatted as valid Internet mail + messages, according to the Internet standard RFC-822. The USENET + News standard is more restrictive than the Internet standard, + + + +Horton & Adams [Page 1] + +RFC 1036 Standard for USENET Messages December 1987 + + + placing additional requirements on each message and forbidding use + of certain Internet features. However, it should always be possible + to use a tool expecting an Internet message to process a news + message. In any situation where this standard conflicts with the + Internet standard, RFC-822 should be considered correct and this + standard in error. + + Here is an example USENET message to illustrate the fields. + + From: jerry@eagle.ATT.COM (Jerry Schwarz) + Path: cbosgd!mhuxj!mhuxt!eagle!jerry + Newsgroups: news.announce + Subject: Usenet Etiquette -- Please Read + Message-ID: <642@eagle.ATT.COM> + Date: Fri, 19 Nov 82 16:14:55 GMT + Followup-To: news.misc + Expires: Sat, 1 Jan 83 00:00:00 -0500 + Organization: AT&T Bell Laboratories, Murray Hill + + The body of the message comes here, after a blank line. + + Here is an example of a message in the old format (before the + existence of this standard). It is recommended that + implementations also accept messages in this format to ease upward + conversion. + + From: cbosgd!mhuxj!mhuxt!eagle!jerry (Jerry Schwarz) + Newsgroups: news.misc + Title: Usenet Etiquette -- Please Read + Article-I.D.: eagle.642 + Posted: Fri Nov 19 16:14:55 1982 + Received: Fri Nov 19 16:59:30 1982 + Expires: Mon Jan 1 00:00:00 1990 + + The body of the message comes here, after a blank line. + + Some news systems transmit news in the A format, which looks like + this: + + Aeagle.642 + news.misc + cbosgd!mhuxj!mhuxt!eagle!jerry + Fri Nov 19 16:14:55 1982 + Usenet Etiquette - Please Read + The body of the message comes here, with no blank line. + + A standard USENET message consists of several header lines, followed + by a blank line, followed by the body of the message. Each header + + + +Horton & Adams [Page 2] + +RFC 1036 Standard for USENET Messages December 1987 + + + line consist of a keyword, a colon, a blank, and some additional + information. This is a subset of the Internet standard, simplified + to allow simpler software to handle it. The "From" line may + optionally include a full name, in the format above, or use the + Internet angle bracket syntax. To keep the implementations simple, + other formats (for example, with part of the machine address after + the close parenthesis) are not allowed. The Internet convention of + continuation header lines (beginning with a blank or tab) is + allowed. + + Certain headers are required, and certain other headers are + optional. Any unrecognized headers are allowed, and will be passed + through unchanged. The required header lines are "From", "Date", + "Newsgroups", "Subject", "Message-ID", and "Path". The optional + header lines are "Followup-To", "Expires", "Reply-To", "Sender", + "References", "Control", "Distribution", "Keywords", "Summary", + "Approved", "Lines", "Xref", and "Organization". Each of these + header lines will be described below. + +2.1. Required Header lines + +2.1.1. From + + The "From" line contains the electronic mailing address of the + person who sent the message, in the Internet syntax. It may + optionally also contain the full name of the person, in parentheses, + after the electronic address. The electronic address is the same as + the entity responsible for originating the message, unless the + "Sender" header is present, in which case the "From" header might + not be verified. Note that in all host and domain names, upper and + lower case are considered the same, thus "mark@cbosgd.ATT.COM", + "mark@cbosgd.att.com", and "mark@CBosgD.ATt.COm" are all equivalent. + User names may or may not be case sensitive, for example, + "Billy@cbosgd.ATT.COM" might be different from + "BillY@cbosgd.ATT.COM". Programs should avoid changing the case of + electronic addresses when forwarding news or mail. + + RFC-822 specifies that all text in parentheses is to be interpreted + as a comment. It is common in Internet mail to place the full name + of the user in a comment at the end of the "From" line. This + standard specifies a more rigid syntax. The full name is not + considered a comment, but an optional part of the header line. + Either the full name is omitted, or it appears in parentheses after + the electronic address of the person posting the message, or it + appears before an electronic address which is enclosed in angle + brackets. Thus, the three permissible forms are: + + + + + +Horton & Adams [Page 3] + +RFC 1036 Standard for USENET Messages December 1987 + + + From: mark@cbosgd.ATT.COM + From: mark@cbosgd.ATT.COM (Mark Horton) + From: Mark Horton <mark@cbosgd.ATT.COM> + + Full names may contain any printing ASCII characters from space + through tilde, except that they may not contain "(" (left + parenthesis), ")" (right parenthesis), "<" (left angle bracket), or + ">" (right angle bracket). Additional restrictions may be placed on + full names by the mail standard, in particular, the characters "," + (comma), ":" (colon), "@" (at), "!" (bang), "/" (slash), "=" + (equal), and ";" (semicolon) are inadvisable in full names. + +2.1.2. Date + + The "Date" line (formerly "Posted") is the date that the message was + originally posted to the network. Its format must be acceptable + both in RFC-822 and to the getdate(3) routine that is provided with + the Usenet software. This date remains unchanged as the message is + propagated throughout the network. One format that is acceptable to + both is: + + Wdy, DD Mon YY HH:MM:SS TIMEZONE + + Several examples of valid dates appear in the sample message above. + Note in particular that ctime(3) format: + + Wdy Mon DD HH:MM:SS YYYY + + is not acceptable because it is not a valid RFC-822 date. However, + since older software still generates this format, news + implementations are encouraged to accept this format and translate + it into an acceptable format. + + There is no hope of having a complete list of timezones. Universal + Time (GMT), the North American timezones (PST, PDT, MST, MDT, CST, + CDT, EST, EDT) and the +/-hhmm offset specifed in RFC-822 should be + supported. It is recommended that times in message headers be + transmitted in GMT and displayed in the local time zone. + +2.1.3. Newsgroups + + The "Newsgroups" line specifies the newsgroup or newsgroups in which + the message belongs. Multiple newsgroups may be specified, + separated by a comma. Newsgroups specified must all be the names of + existing newsgroups, as no new newsgroups will be created by simply + posting to them. + + + + + +Horton & Adams [Page 4] + +RFC 1036 Standard for USENET Messages December 1987 + + + Wildcards (e.g., the word "all") are never allowed in a "News- + groups" line. For example, a newsgroup comp.all is illegal, + although a newsgroup rec.sport.football is permitted. + + If a message is received with a "Newsgroups" line listing some valid + newsgroups and some invalid newsgroups, a host should not remove + invalid newsgroups from the list. Instead, the invalid newsgroups + should be ignored. For example, suppose host A subscribes to the + classes btl.all and comp.all, and exchanges news messages with host + B, which subscribes to comp.all but not btl.all. Suppose A receives + a message with Newsgroups: comp.unix,btl.general. + + This message is passed on to B because B receives comp.unix, but B + does not receive btl.general. A must leave the "Newsgroups" line + unchanged. If it were to remove btl.general, the edited header + could eventually re-enter the btl.all class, resulting in a message + that is not shown to users subscribing to btl.general. Also, + follow-ups from outside btl.all would not be shown to such users. + +2.1.4. Subject + + The "Subject" line (formerly "Title") tells what the message is + about. It should be suggestive enough of the contents of the + message to enable a reader to make a decision whether to read the + message based on the subject alone. If the message is submitted in + response to another message (e.g., is a follow-up) the default + subject should begin with the four characters "Re:", and the + "References" line is required. For follow-ups, the use of the + "Summary" line is encouraged. + +2.1.5. Message-ID + + The "Message-ID" line gives the message a unique identifier. The + Message-ID may not be reused during the lifetime of any previous + message with the same Message-ID. (It is recommended that no + Message-ID be reused for at least two years.) Message-ID's have the + syntax: + + <string not containing blank or ">"> + + In order to conform to RFC-822, the Message-ID must have the format: + + <unique@full_domain_name> + + where full_domain_name is the full name of the host at which the + message entered the network, including a domain that host is in, and + unique is any string of printing ASCII characters, not including "<" + (left angle bracket), ">" (right angle bracket), or "@" (at sign). + + + +Horton & Adams [Page 5] + +RFC 1036 Standard for USENET Messages December 1987 + + + For example, the unique part could be an integer representing a + sequence number for messages submitted to the network, or a short + string derived from the date and time the message was created. For + example, a valid Message-ID for a message submitted from host ucbvax + in domain "Berkeley.EDU" would be "<4123@ucbvax.Berkeley.EDU>". + Programmers are urged not to make assumptions about the content of + Message-ID fields from other hosts, but to treat them as unknown + character strings. It is not safe, for example, to assume that a + Message-ID will be under 14 characters, that it is unique in the + first 14 characters, nor that is does not contain a "/". + + The angle brackets are considered part of the Message-ID. Thus, in + references to the Message-ID, such as the ihave/sendme and cancel + control messages, the angle brackets are included. White space + characters (e.g., blank and tab) are not allowed in a Message-ID. + Slashes ("/") are strongly discouraged. All characters between the + angle brackets must be printing ASCII characters. + +2.1.6. Path + + This line shows the path the message took to reach the current + system. When a system forwards the message, it should add its own + name to the list of systems in the "Path" line. The names may be + separated by any punctuation character or characters (except "." + which is considered part of the hostname). Thus, the following are + valid entries: + + cbosgd!mhuxj!mhuxt + cbosgd, mhuxj, mhuxt + @cbosgd.ATT.COM,@mhuxj.ATT.COM,@mhuxt.ATT.COM + teklabs, zehntel, sri-unix@cca!decvax + + (The latter path indicates a message that passed through decvax, + cca, sri-unix, zehntel, and teklabs, in that order.) Additional + names should be added from the left. For example, the most recently + added name in the fourth example was teklabs. Letters, digits, + periods and hyphens are considered part of host names; other + punctuation, including blanks, are considered separators. + + Normally, the rightmost name will be the name of the originating + system. However, it is also permissible to include an extra entry + on the right, which is the name of the sender. This is for upward + compatibility with older systems. + + The "Path" line is not used for replies, and should not be taken as + a mailing address. It is intended to show the route the message + traveled to reach the local host. There are several uses for this + information. One is to monitor USENET routing for performance + + + +Horton & Adams [Page 6] + +RFC 1036 Standard for USENET Messages December 1987 + + + reasons. Another is to establish a path to reach new hosts. + Perhaps the most important use is to cut down on redundant USENET + traffic by failing to forward a message to a host that is known to + have already received it. In particular, when host A sends a + message to host B, the "Path" line includes A, so that host B will + not immediately send the message back to host A. The name each host + uses to identify itself should be the same as the name by which its + neighbors know it, in order to make this optimization possible. + + A host adds its own name to the front of a path when it receives a + message from another host. Thus, if a message with path "A!X!Y!Z" + is passed from host A to host B, B will add its own name to the path + when it receives the message from A, e.g., "B!A!X!Y!Z". If B then + passes the message on to C, the message sent to C will contain the + path "B!A!X!Y!Z", and when C receives it, C will change it to + "C!B!A!X!Y!Z". + + Special upward compatibility note: Since the "From", "Sender", and + "Reply-To" lines are in Internet format, and since many USENET hosts + do not yet have mailers capable of understanding Internet format, it + would break the reply capability to completely sever the connection + between the "Path" header and the reply function. It is recognized + that the path is not always a valid reply string in older + implementations, and no requirement to fix this problem is placed on + implementations. However, the existing convention of placing the + host name and an "!" at the front of the path, and of starting the + path with the host name, an "!", and the user name, should be + maintained when possible. + +2.2. Optional Headers + +2.2.1. Reply-To + + This line has the same format as "From". If present, mailed replies + to the author should be sent to the name given here. Otherwise, + replies are mailed to the name on the "From" line. (This does not + prevent additional copies from being sent to recipients named by the + replier, or on "To" or "Cc" lines.) The full name may be optionally + given, in parentheses, as in the "From" line. + +2.2.2. Sender + + This field is present only if the submitter manually enters a "From" + line. It is intended to record the entity responsible for + submitting the message to the network. It should be verified by the + software at the submitting host. + + + + + +Horton & Adams [Page 7] + +RFC 1036 Standard for USENET Messages December 1987 + + + For example, if John Smith is visiting CCA and wishes to post a + message to the network, using friend Sarah Jones' account, the + message might read: + + From: smith@ucbvax.Berkeley.EDU (John Smith) + Sender: jones@cca.COM (Sarah Jones) + + If a gateway program enters a mail message into the network at host + unix.SRI.COM, the lines might read: + + From: John.Doe@A.CS.CMU.EDU + Sender: network@unix.SRI.COM + + The primary purpose of this field is to be able to track down + messages to determine how they were entered into the network. The + full name may be optionally given, in parentheses, as in the "From" + line. + +2.2.3. Followup-To + + This line has the same format as "Newsgroups". If present, follow- + up messages are to be posted to the newsgroup or newsgroups listed + here. If this line is not present, follow-ups are posted to the + newsgroup or newsgroups listed in the "Newsgroups" line. + + If the keyword poster is present, follow-up messages are not + permitted. The message should be mailed to the submitter of the + message via mail. + +2.2.4. Expires + + This line, if present, is in a legal USENET date format. It + specifies a suggested expiration date for the message. If not + present, the local default expiration date is used. This field is + intended to be used to clean up messages with a limited usefulness, + or to keep important messages around for longer than usual. For + example, a message announcing an upcoming seminar could have an + expiration date the day after the seminar, since the message is not + useful after the seminar is over. Since local hosts have local + policies for expiration of news (depending on available disk space, + for instance), users are discouraged from providing expiration dates + for messages unless there is a natural expiration date associated + with the topic. System software should almost never provide a + default "Expires" line. Leave it out and allow local policies to be + used unless there is a good reason not to. + + + + + + +Horton & Adams [Page 8] + +RFC 1036 Standard for USENET Messages December 1987 + + +2.2.5. References + + This field lists the Message-ID's of any messages prompting the + submission of this message. It is required for all follow-up + messages, and forbidden when a new subject is raised. + Implementations should provide a follow-up command, which allows a + user to post a follow-up message. This command should generate a + "Subject" line which is the same as the original message, except + that if the original subject does not begin with "Re:" or "re:", the + four characters "Re:" are inserted before the subject. If there is + no "References" line on the original header, the "References" line + should contain the Message-ID of the original message (including the + angle brackets). If the original message does have a "References" + line, the follow-up message should have a "References" line + containing the text of the original "References" line, a blank, and + the Message-ID of the original message. + + The purpose of the "References" header is to allow messages to be + grouped into conversations by the user interface program. This + allows conversations within a newsgroup to be kept together, and + potentially users might shut off entire conversations without + unsubscribing to a newsgroup. User interfaces need not make use of + this header, but all automatically generated follow-ups should + generate the "References" line for the benefit of systems that do + use it, and manually generated follow-ups (e.g., typed in well after + the original message has been printed by the machine) should be + encouraged to include them as well. + + It is permissible to not include the entire previous "References" + line if it is too long. An attempt should be made to include a + reasonable number of backwards references. + +2.2.6. Control + + If a message contains a "Control" line, the message is a control + message. Control messages are used for communication among USENET + host machines, not to be read by users. Control messages are + distributed by the same newsgroup mechanism as ordinary messages. + The body of the "Control" header line is the message to the host. + + For upward compatibility, messages that match the newsgroup pattern + "all.all.ctl" should also be interpreted as control messages. If no + "Control" header is present on such messages, the subject is used as + the control message. However, messages on newsgroups matching this + pattern do not conform to this standard. + + + + + + +Horton & Adams [Page 9] + +RFC 1036 Standard for USENET Messages December 1987 + + + Also for upward compatibility, if the first 4 characters of the + "Subject:" line are "cmsg", the rest of the "Subject:" line should + be interpreted as a control message. + +2.2.7. Distribution + + This line is used to alter the distribution scope of the message. + It is a comma separated list similar to the "Newsgroups" line. User + subscriptions are still controlled by "Newsgroups", but the message + is sent to all systems subscribing to the newsgroups on the + "Distribution" line in addition to the "Newsgroups" line. For the + message to be transmitted, the receiving site must normally receive + one of the specified newsgroups AND must receive one of the + specified distributions. Thus, a message concerning a car for sale + in New Jersey might have headers including: + + Newsgroups: rec.auto,misc.forsale + Distribution: nj,ny + + so that it would only go to persons subscribing to rec.auto or misc. + for sale within New Jersey or New York. The intent of this header + is to restrict the distribution of a newsgroup further, not to + increase it. A local newsgroup, such as nj.crazy-eddie, will + probably not be propagated by hosts outside New Jersey that do not + show such a newsgroup as valid. A follow-up message should default + to the same "Distribution" line as the original message, but the + user can change it to a more limited one, or escalate the + distribution if it was originally restricted and a more widely + distributed reply is appropriate. + +2.2.8. Organization + + The text of this line is a short phrase describing the organization + to which the sender belongs, or to which the machine belongs. The + intent of this line is to help identify the person posting the + message, since host names are often cryptic enough to make it hard + to recognize the organization by the electronic address. + +2.2.9. Keywords + + A few well-selected keywords identifying the message should be on + this line. This is used as an aid in determining if this message is + interesting to the reader. + +2.2.10. Summary + + This line should contain a brief summary of the message. It is + usually used as part of a follow-up to another message. Again, it + + + +Horton & Adams [Page 10] + +RFC 1036 Standard for USENET Messages December 1987 + + + is very useful to the reader in determining whether to read the + message. + +2.2.11. Approved + + This line is required for any message posted to a moderated + newsgroup. It should be added by the moderator and consist of his + mail address. It is also required with certain control messages. + +2.2.12. Lines + + This contains a count of the number of lines in the body of the + message. + +2.2.13. Xref + + This line contains the name of the host (with domains omitted) and a + white space separated list of colon-separated pairs of newsgroup + names and message numbers. These are the newsgroups listed in the + "Newsgroups" line and the corresponding message numbers from the + spool directory. + + This is only of value to the local system, so it should not be + transmitted. For example, in: + + Path: seismo!lll-crg!lll-lcc!pyramid!decwrl!reid + From: reid@decwrl.DEC.COM (Brian Reid) + Newsgroups: news.lists,news.groups + Subject: USENET READERSHIP SUMMARY REPORT FOR SEP 86 + Message-ID: <5658@decwrl.DEC.COM> + Date: 1 Oct 86 11:26:15 GMT + Organization: DEC Western Research Laboratory + Lines: 441 + Approved: reid@decwrl.UUCP + Xref: seismo news.lists:461 news.groups:6378 + + the "Xref" line shows that the message is message number 461 in the + newsgroup news.lists, and message number 6378 in the newsgroup + news.groups, on host seismo. This information may be used by + certain user interfaces. + +3. Control Messages + + This section lists the control messages currently defined. The body + of the "Control" header line is the control message. Messages are a + sequence of zero or more words, separated by white space (blanks or + tabs). The first word is the name of the control message, remaining + words are parameters to the message. The remainder of the header + + + +Horton & Adams [Page 11] + +RFC 1036 Standard for USENET Messages December 1987 + + + and the body of the message are also potential parameters; for + example, the "From" line might suggest an address to which a + response is to be mailed. + + Implementors and administrators may choose to allow control messages + to be carried out automatically, or to queue them for annual + processing. However, manually processed messages should be dealt + with promptly. + + Failed control messages should NOT be mailed to the originator of + the message, but to the local "usenet" account. + +3.1. Cancel + + cancel <Message-ID> + + + If a message with the given Message-ID is present on the local + system, the message is cancelled. This mechanism allows a user to + cancel a message after the message has been distributed over the + network. + + If the system is unable to cancel the message as requested, it + should not forward the cancellation request to its neighbor systems. + + Only the author of the message or the local news administrator is + allowed to send this message. The verified sender of a message is + the "Sender" line, or if no "Sender" line is present, the "From" + line. The verified sender of the cancel message must be the same as + either the "Sender" or "From" field of the original message. A + verified sender in the cancel message is allowed to match an + unverified "From" in the original message. + +3.2. Ihave/Sendme + + ihave <Message-ID list> [<remotesys>] + sendme <Message-ID list> [<remotesys>] + + This message is part of the ihave/sendme protocol, which allows one + host (say A) to tell another host (B) that a particular message has + been received on A. Suppose that host A receives message + "<1234@ucbvax.Berkeley.edu>", and wishes to transmit the message to + host B. + + A sends the control message "ihave <1234@ucbvax.Berkeley.edu> A" to + host B (by posting it to newsgroup to.B). B responds with the + control message "sendme <1234@ucbvax.Berkeley.edu> B" (on newsgroup + to.A), if it has not already received the message. Upon receiving + + + +Horton & Adams [Page 12] + +RFC 1036 Standard for USENET Messages December 1987 + + + the sendme message, A sends the message to B. + + This protocol can be used to cut down on redundant traffic between + hosts. It is optional and should be used only if the particular + situation makes it worthwhile. Frequently, the outcome is that, + since most original messages are short, and since there is a high + overhead to start sending a new message with UUCP, it costs as much + to send the ihave as it would cost to send the message itself. + + One possible solution to this overhead problem is to batch requests. + Several Message-ID's may be announced or requested in one message. + If no Message-ID's are listed in the control message, the body of + the message should be scanned for Message-ID's, one per line. + +3.3. Newgroup + + newgroup <groupname> [moderated] + + This control message creates a new newsgroup with the given name. + Since no messages may be posted or forwarded until a newsgroup is + created, this message is required before a newsgroup can be used. + The body of the message is expected to be a short paragraph + describing the intended use of the newsgroup. + + If the second argument is present and it is the keyword moderated, + the group should be created moderated instead of the default of + unmoderated. The newgroup message should be ignored unless there is + an "Approved" line in the same message header. + +3.4. Rmgroup + + rmgroup <groupname> + + This message removes a newsgroup with the given name. Since the + newsgroup is removed from every host on the network, this command + should be used carefully by a responsible administrator. The + rmgroup message should be ignored unless there is an "Approved:" + line in the same message header. + + + + + + + + + + + + + +Horton & Adams [Page 13] + +RFC 1036 Standard for USENET Messages December 1987 + + +3.5. Sendsys + sendsys (no arguments) + + The sys file, listing all neighbors and the newsgroups to be sent to + each neighbor, will be mailed to the author of the control message + ("Reply-To", if present, otherwise "From"). This information is + considered public information, and it is a requirement of membership + in USENET that this information be provided on request, either + automatically in response to this control message, or manually, by + mailing the requested information to the author of the message. + This information is used to keep the map of USENET up to date, and + to determine where netnews is sent. + + The format of the file mailed back to the author should be the same + as that of the sys file. This format has one line per neighboring + host (plus one line for the local host), containing four colon + separated fields. The first field has the host name of the + neighbor, the second field has a newsgroup pattern describing the + newsgroups sent to the neighbor. The third and fourth fields are + not defined by this standard. The sys file is not the same as the + UUCP L.sys file. A sample response is: + + From: cbosgd!mark (Mark Horton) + Date: Sun, 27 Mar 83 20:39:37 -0500 + Subject: response to your sendsys request + To: mark@cbosgd.ATT.COM + + Responding-System: cbosgd.ATT.COM + cbosgd:osg,cb,btl,bell,world,comp,sci,rec,talk,misc,news,soc,to, + test + ucbvax:world,comp,to.ucbvax:L: + cbosg:world,comp,bell,btl,cb,osg,to.cbosg:F:/usr/spool/outnews + /cbosg + cbosgb:osg,to.cbosgb:F:/usr/spool/outnews/cbosgb + sescent:world,comp,bell,btl,cb,to.sescent:F:/usr/spool/outnews + /sescent + npois:world,comp,bell,btl,ug,to.npois:F:/usr/spool/outnews/npois + mhuxi:world,comp,bell,btl,ug,to.mhuxi:F:/usr/spool/outnews/mhuxi + +3.6. Version + + version (no arguments) + + The name and version of the software running on the local system is + to be mailed back to the author of the message ("Reply-to" if + present, otherwise "From"). + +3.7. Checkgroups + + + +Horton & Adams [Page 14] + +RFC 1036 Standard for USENET Messages December 1987 + + + The message body is a list of "official" newsgroups and their + description, one group per line. They are compared against the list + of active newsgroups on the current host. The names of any obsolete + or new newsgroups are mailed to the user "usenet" and descriptions + of the new newsgroups are added to the help file used when posting + news. + +4. Transmission Methods + + USENET is not a physical network, but rather a logical network + resting on top of several existing physical networks. These + networks include, but are not limited to, UUCP, the Internet, an + Ethernet, the BLICN network, an NSC Hyperchannel, and a BERKNET. + What is important is that two neighboring systems on USENET have + some method to get a new message, in the format listed here, from + one system to the other, and once on the receiving system, processed + by the netnews software on that system. (On UNIX systems, this + usually means the rnews program being run with the message on the + standard input. <1>) + + It is not a requirement that USENET hosts have mail systems capable + of understanding the Internet mail syntax, but it is strongly + recommended. Since "From", "Reply-To", and "Sender" lines use the + Internet syntax, replies will be difficult or impossible without an + Internet mailer. A host without an Internet mailer can attempt to + use the "Path" header line for replies, but this field is not + guaranteed to be a working path for replies. In any event, any host + generating or forwarding news messages must have an Internet address + that allows them to receive mail from hosts with Internet mailers, + and they must include their Internet address on their From line. + +4.1. Remote Execution + + Some networks permit direct remote command execution. On these + networks, news may be forwarded by spooling the rnews command with + the message on the standard input. For example, if the remote + system is called remote, news would be sent over a UUCP link + with the command: + + uux - remote!rnews + + and on a Berknet: + + net -mremote rnews + + + + + + + +Horton & Adams [Page 15] + +RFC 1036 Standard for USENET Messages December 1987 + + + It is important that the message be sent via a reliable mechanism, + normally involving the possibility of spooling, rather than direct + real-time remote execution. This is because, if the remote system + is down, a direct execution command will fail, and the message will + never be delivered. If the message is spooled, it will eventually + be delivered when both systems are up. + +4.2. Transfer by Mail + + On some systems, direct remote spooled execution is not possible. + However, most systems support electronic mail, and a news message + can be sent as mail. One approach is to send a mail message which + is identical to the news message: the mail headers are the news + headers, and the mail body is the news body. By convention, this + mail is sent to the user newsmail on the remote machine. + + One problem with this method is that it may not be possible to + convince the mail system that the "From" line of the message is + valid, since the mail message was generated by a program on a + system different from the source of the news message. Another + problem is that error messages caused by the mail transmission + would be sent to the originator of the news message, who has no + control over news transmission between two cooperating hosts + and does not know whom to contact. Transmission error messages + should be directed to a responsible contact person on the + sending machine. + + A solution to this problem is to encapsulate the news message into a + mail message, such that the entire message (headers and body) are + part of the body of the mail message. The convention here is that + such mail is sent to user rnews on the remote system. A mail + message body is generated by prepending the letter N to each line of + the news message, and then attaching whatever mail headers are + convenient to generate. The N's are attached to prevent any special + lines in the news message from interfering with mail transmission, + and to prevent any extra lines inserted by the mailer (headers, + blank lines, etc.) from becoming part of the news message. A + program on the receiving machine receives mail to rnews, extracting + the message itself and invoking the rnews program. An example in + this format might look like this: + + + + + + + + + + + +Horton & Adams [Page 16] + +RFC 1036 Standard for USENET Messages December 1987 + + + Date: Mon, 3 Jan 83 08:33:47 MST + From: news@cbosgd.ATT.COM + Subject: network news message + To: rnews@npois.ATT.COM + + NPath: cbosgd!mhuxj!harpo!utah-cs!sask!derek + NFrom: derek@sask.UUCP (Derek Andrew) + NNewsgroups: misc.test + NSubject: necessary test + NMessage-ID: <176@sask.UUCP> + NDate: Mon, 3 Jan 83 00:59:15 MST + N + NThis really is a test. If anyone out there more than 6 + Nhops away would kindly confirm this note I would + Nappreciate it. We suspect that our news postings + Nare not getting out into the world. + N + + Using mail solves the spooling problem, since mail must always be + spooled if the destination host is down. However, it adds more + overhead to the transmission process (to encapsulate and extract the + message) and makes it harder for software to give different + priorities to news and mail. + +4.3. Batching + + Since news messages are usually short, and since a large number of + messages are often sent between two hosts in a day, it may make + sense to batch news messages. Several messages can be combined into + one large message, using conventions agreed upon in advance by the + two hosts. One such batching scheme is described here; its use is + highly recommended. + + News messages are combined into a script, separated by a header of + the form: + + + #! rnews 1234 + + where 1234 is the length of the message in bytes. Each such line is + followed by a message containing the given number of bytes. (The + newline at the end of each line of the message is counted as one + byte, for purposes of this count, even if it is stored as <CARRIAGE + RETURN><LINE FEED>.) For example, a batch of message might look + like this: + + + + + + +Horton & Adams [Page 17] + +RFC 1036 Standard for USENET Messages December 1987 + + + #! rnews 239 + From: jerry@eagle.ATT.COM (Jerry Schwarz) + Path: cbosgd!mhuxj!mhuxt!eagle!jerry + Newsgroups: news.announce + Subject: Usenet Etiquette -- Please Read + Message-ID: <642@eagle.ATT.COM> + Date: Fri, 19 Nov 82 16:14:55 EST + Approved: mark@cbosgd.ATT.COM + + Here is an important message about USENET Etiquette. + #! rnews 234 + From: jerry@eagle.ATT.COM (Jerry Schwarz) + Path: cbosgd!mhuxj!mhuxt!eagle!jerry + Newsgroups: news.announce + Subject: Notes on Etiquette message + Message-ID: <643@eagle.ATT.COM> + Date: Fri, 19 Nov 82 17:24:12 EST + Approved: mark@cbosgd.ATT.COM + + There was something I forgot to mention in the last + message. + + Batched news is recognized because the first character in the + message is #. The message is then passed to the unbatcher for + interpretation. + + The second argument (in this example rnews) determines which + batching scheme is being used. Cooperating hosts may use whatever + scheme is appropriate for them. + +5. The News Propagation Algorithm + + This section describes the overall scheme of USENET and the + algorithm followed by hosts in propagating news to the entire + logical network. Since all hosts are affected by incorrectly + formatted messages and by propagation errors, it is important + for the method to be standardized. + + USENET is a directed graph. Each node in the graph is a host + computer, and each arc in the graph is a transmission path from + one host to another host. Each arc is labeled with a newsgroup + pattern, specifying which newsgroup classes are forwarded along + that link. Most arcs are bidirectional, that is, if host A + sends a class of newsgroups to host B, then host B usually sends + the same class of newsgroups to host A. This bidirectionality + is not, however, required. + + USENET is made up of many subnetworks. Each subnet has a name, such + + + +Horton & Adams [Page 18] + +RFC 1036 Standard for USENET Messages December 1987 + + + as comp or btl. Each subnet is a connected graph, that is, a path + exists from every node to every other node in the subnet. In + addition, the entire graph is (theoretically) connected. (In + practice, some political considerations have caused some hosts to be + unable to post messages reaching the rest of the network.) + + A message is posted on one machine to a list of newsgroups. That + machine accepts it locally, then forwards it to all its neighbors + that are interested in at least one of the newsgroups of the + message. (Site A deems host B to be "interested" in a newsgroup if + the newsgroup matches the pattern on the arc from A to B. This + pattern is stored in a file on the A machine.) The hosts receiving + the incoming message examine it to make sure they really want the + message, accept it locally, and then in turn forward the message to + all their interested neighbors. This process continues until the + entire network has seen the message. + + An important part of the algorithm is the prevention of loops. The + above process would cause a message to loop along a cycle forever. + In particular, when host A sends a message to host B, host B will + send it back to host A, which will send it to host B, and so on. + One solution to this is the history mechanism. Each host keeps + track of all messages it has seen (by their Message-ID) and + whenever a message comes in that it has already seen, the incoming + message is discarded immediately. This solution is sufficient to + prevent loops, but additional optimizations can be made to avoid + sending messages to hosts that will simply throw them away. + + One optimization is that a message should never be sent to a machine + listed in the "Path" line of the header. When a machine name is + in the "Path" line, the message is known to have passed through the + machine. Another optimization is that, if the message originated + on host A, then host A has already seen the message. Thus, if a + message is posted to newsgroup misc.misc, it will match the pattern + misc.all (where all is a metasymbol that matches any string), and + will be forwarded to all hosts that subscribe to misc.all (as + determined by what their neighbors send them). These hosts make up + the misc subnetwork. A message posted to btl.general will reach all + hosts receiving btl.all, but will not reach hosts that do not get + btl.all. In effect, the messages reaches the btl subnetwork. A + messages posted to newsgroups misc.misc,btl.general will reach all + hosts subscribing to either of the two classes. + +Notes + + <1> UNIX is a registered trademark of AT&T. + + + + + +Horton & Adams [Page 19] ++Go Back + + + + diff --git a/html/ftsc/fsc-0062.html b/html/ftsc/fsc-0062.html index aacd685a..3fe3fecf 100755 --- a/html/ftsc/fsc-0062.html +++ b/html/ftsc/fsc-0062.html @@ -1,363 +1,364 @@ - - -
- | Document: FSC-0062 - | Version: 003 - | Date: April 14, 1996 - | Author: David J. Thomas - - - - - A Proposed Nodelist flag indicating Online Times of a Node - David J. Thomas - 2:442/600@fidonet.org - - - - -Status of this document: - - This FSC suggests a proposed protocol for the FidoNet(r) community, - and requests discussion and suggestions for improvements. - Distribution of this document is unlimited. - - Fido and FidoNet are registered marks of Tom Jennings and Fido - Software. - - Note - ---- - - Changes in content between the previous edition of this document, and this - edition, are signified by bars (|) in the left margin, except where - otherwise specified. I have changed the format of the document slightly to - allow this. Where the format of the document has changed, but the actual - text has not, bars are not present. - - Purpose - ------- - - There are currently several systems within FidoNet that offer file request - or mail holding capabilities but are not continuously online. The only time - during which these nodes can be contacted with reference to the nodelist is - currently the Zone Mail Hour of the zone to which the systems belong. In - theory, mailers can only use the zone mail hour(s) specified by the system - in question to contact these nodes, which does not provide for any method - of file requesting or calling for echomail that does not conflict with the - Policy requirement that no echomail or files be transferred during the zone - mail hour. This means that, in practice, if it is known that a particular - node is online for more time than ZMH alone, but less than 24 hours a day, - it is necessary to "kludge," or set this up as a special situation, in most - mailers whenever a node has to be contacted a number of times, whether - regularly or irregularly. The proposed flag would benefit the mailers in - such a way as to provide for them the online times that the node is usually - online for, thus cutting on the costs of calling a non-continuous mail - node, only to find that it is not available; and also, hopefully preventing - annoyance for a sysop whose mailer is being called whilst it is not online, - for example in the case of a voice/data shared line. - - Compatibility - ------------- - - Since the current nodelist format is always being extended and nodelist - processors look only for the flags that they know about, there are no - expected compatibility problems with the suggestion outlined below. - - Format of additional nodelist flag - ---------------------------------- - - The proposed nodelist flag has the following form: - - Txy - - where x represents the startup time, and y the end time, in the following - format: - - +------+----+ +------+----+ +------+----+ +------+----+ +------+----+ - |Letter|Time| |Letter|Time| |Letter|Time| |Letter|Time| |Letter|Time| - +------+----+ +------+----+ +------+----+ +------+----+ +------+----+ - | A |0000| | F |0500| | K |1000| | P |1500| | U |2000| - | a |0030| | f |0530| | k |1030| | p |1530| | u |2030| - | B |0100| | G |0600| | L |1100| | Q |1600| | V |2100| - | b |0130| | g |0630| | l |1130| | q |1630| | v |2130| - | C |0200| | H |0700| | M |1200| | R |1700| | W |2200| - | c |0230| | h |0730| | m |1230| | r |1730| | w |2230| - | D |0300| | I |0800| | N |1300| | S |1800| | X |2300| - | d |0330| | i |0830| | n |1330| | s |1830| | x |2330| - | E |0400| | J |0900| | O |1400| | T |1900| | | | - | e |0430| | j |0930| | o |1430| | t |1930| | | | - +------+----+ +------+----+ +------+----+ +------+----+ +------+----+ - -| This flag is not intended to be a user flag. The flag is intended to provide -| information to computerised mailer processes, and is not easily read by -| human beings (although they can of course interpret the meaning of the -| flag); most mailers however do not attempt to interpret any information that -| is specified as a user flag, assuming that it is there for the benefit of -| human beings. Such mailers would not be able to make use of the information -| provided, which is the purpose of the flag. - -| This flag is of course not specified in FTS-0005 at the time of writing, but -| this is not regarded by FidoNet as a problem because other flags in current -| use are not specified in FTS-0005. - - The case of the letter could be relevant. Whereas the case is currently not - used by any flags in the document describing the current format of the - nodelist, there exists the potential for the case of a letter to have - relevant meaning. The case has to be correct for the CRC check calculation - to prove correct, and this would be a good use for the case of the letter. - If it is necessary to ignore the case, then the upper on-the-hour time - should be used, i.e. the time that is listed after the upper-case letter. - -| These times are expressed in UTC so that the flag is useful for systems all - around the world, without the need for specific time zone information to be - included in the nodelist. They do not adjust with daylight saving time for a - similar reason. Note the section on daylight saving time for information - about handling adjustments without changing the flag; this is important. - - Where necessary, the times can wrap around midnight, so for example, for a -| node that is online between the hours of 1800 and 0600 UTC, the flag TSG - would be a valid indication of this time. - - This nodelist entry is not required by any node. It is supplementary to the - #01, #02, #08, #09, #18, #20 flags and their !xx counterparts, though its - meaning is different. It has been suggested to me about the possibility of - an additional flag with the same meaning, but having a W as the first - letter, indicating that the node is also available for all hours during - weekends; however, I believe that the simple inclusion of the single flag - indicated above will solve most problems, as it does indicate a period for - non-CM nodes during which the node is available, which is all that is - really required. - - Daylight saving time - -------------------- - - If a node changes online times with respect to UTC when daylight saving - time becomes effective (which would be the case with most part time nodes), - then this is to be taken into account when assigning this flag. An online - times flag assigned to a node should not be altered for the specific - purpose of adjusting due to daylight saving time, since large difference - files (NODEDIFF's) would result if every node was allowed to do this, e.g. - my node used to be online from 2300 to 0800 in local time, which in winter -| is UTC, but in the summer it becomes BST (British Summer Time). This is one -| hour ahead of UTC, and the corresponding availability times of my node -| during the summer period were 2200 to 0700 UTC. Therefore my online times - flag would have indicated availability between the hours of 2300 and 0700 -| UTC, the daily time period encompassing both times, so the flag would be - TXH. - - Policy considerations - --------------------- - - This is a technical document. However, since the flag could make for an - increase in the size of difference files, the author feels that the - following guidelines should be adopted concerning the use of the flag. - - The online times flag does not replace the requirement for exclusivity of - zone mail hour to be maintained. It is still annoying behaviour to have - this flag and be unavailable during ZMH, just as it is annoying behaviour - to have the CM (continuous mail) flag in one's entry, and disregard ZMH. - - Except for during ZMH, the sysop of a node using this flag finding that - they need to take their mailer offline during the specified times to - perform system maintenance, or for any other reason, would not be acting in - an annoying manner to do so, unless the practice is found to be continuous, - in which case the flag's times could be reduced, or the flag itself could - be removed from their node entry. - - It should be noted that this flag is present for the benefit of mailers, - not human beings. This means that the flag should be used only to indicate - when a mailer is ready to receive calls. A system that uses a FidoNet- - technology mailer in ZMH, and a human-access only system during other - period(s) of the day that cannot receive mail, should not use this flag. - This flag does not explicitly specify online times of a public access BBS, - although for presumably most nodes with FidoNet-capable software, a public - access BBS will be available during the times indicated. - - Where the flag is used, it should not often be changed. If a situation - exists, for example, where a node uses a certain set of times during the - first two weeks of a month, and a different set of times during the - remainder period, the flag should be set to a time during each day of the - month when the node is online. For example, if a node is online during - 1800-0800 for the first two weeks, and then during 2200-1000 for the - remainder, the time flag should specify 2200-0800 only. If there is no such - time (other than ZMH) then no flag should be used. Of course, any permanent - changes, and any necessary reductions in the times, should be permitted at - any time, but changes owing only to daylight saving time should certainly - be expressly forbidden. - - File requests and user access are of course permitted during the online - times indicated (except ZMH). - - The above list may seem rather frightening! Please note that they are - guidelines rather than rules, unless FidoNet policy has included them as - rules. In the vast majority of situations where a node is online for a - fixed set of hours per day, the only thing to watch out for is that you get - the daylight saving time period right. Then you don't have to worry about - changing it at any time, except when your own online times change. - - Example - ------- - - With regard to time zones now; this is a complicated topic, so I wish to - express an example. Imagine a node in Indiana, USA. It is online for the - time period beginning 6 o'clock pm (1800) and ending 8 o'clock am (0800). - This changes with daylight saving time, so the times expressed effectively -| become an hour earlier with respect to UTC during daylight saving time. - -| Indiana is in the Central time zone, which is 6 hours behind UTC. Therefore, -| the online times in UTC can be expressed as 0000-1400 UTC during winter. -| During daylight saving time, however, the local time for Indiana is 5 hours -| behind UTC. The online times during this period are 0100-1500 UTC. The -| subset should be used, so that the online times flag for the node should -| indicate availability between 0100 and 1400 UTC, which is indicated -| by the flag TBO. - -| (Thanks to a few people for pointing out that the previous example was in -| error; it assumed that Indiana was ahead of UTC, and not behind as is -| actually the case.) - - ANSI C routines to Calculate the Online Times Flag - -------------------------------------------------- - - These were not provided in the first edition. Change bars will not be used - here, since they would interfere with the syntax of the presented routines. - - The first program calculates the online times flag from the user's entry of - the online times of a system, expressed in the local time zone, and the - offset to UTC used by the user's country. It takes into account that the - clock is put forward and back once a year by reducing the end time by one - hour. The program should work on any platform, and has been tested. - -=== start of code === -/* TIMEFLAG.C - Calculates FSC-0062 time flag requirement from user input */ - -#include- - Go Back - - - - + + + +- -char *onlineflag(char *on, char *off, int utc_diff); - -void main() -{ - char on[6], off[6]; int utc_diff; - - printf("\nPlease specify the time you come online [HH:MM]: "); - scanf("%s", on); - printf("\nPlease specify the time you come offline [HH:MM]: "); - scanf("%s", off); - printf("\nSpecify the difference between your local time zone in winter\n" - "time and UTC (e.g. if your time zone is 6 hours behind UTC,\n" - "enter 6): "); - scanf("%d", &utc_diff); - printf("\nYour online time flag is %s\n\n", - onlineflag(on, off, utc_diff)); -} - -char *onlineflag(char *ontime, char *offtime, int utcdiff) -{ - int onhour, onmin, offhour, offmin; - static char flag[4]="T "; - - sscanf(ontime, "%d:%d", &onhour, &onmin); - sscanf(offtime, "%d:%d", &offhour, &offmin); - - if(onmin>30) ++onhour; - --offhour; /* to correct for daylight saving time */ - onhour = (onhour+24+utcdiff) % 24; - offhour = (offhour+24+utcdiff) % 24; - - flag[1]='A'+onhour; - flag[2]='A'+offhour; - - if(onmin>0 && onmin<31) flag[1] += 'a'-'A'; - if(offmin>29) flag[2] += 'a'-'A'; - - return flag; -} -=== end of code === - - The second program calculates the online times from the time flag, input - as a pointer to char to the routine (this being of the format "Txy"). It - returns a pointer to a structure which contains the on- and off-times in - UTC. This is not a complete program; it is designed to be used by mailers - to determine the valid online times. It has also been tested. - -=== start of code === -/* INTFLAG.C - Interprets online time flags and converts them to a set of UTC times */ - -struct TIMES { - int on_hour; - int on_min; - int off_hour; - int off_min; -}; - -struct TIMES *interpret_flag(char *time_flag); - -struct TIMES *interpret_flag(char *timeflag) -{ - static struct TIMES times; - - times.on_min=0; - times.off_min=0; - - times.on_hour=timeflag[1]-'A'; - if(times.on_hour>23) { - times.on_hour -= 'a'-'A'; - times.on_min=30; - } - times.off_hour=timeflag[2]-'A'; - if(times.off_hour>23) { - times.off_hour -= 'a'-'A'; - times.off_min=30; - } - return × -} -=== end of code === - -| The above routines can be copied and re-used as desired. I am now an -| amazing C programmer, but I still make no guarantees about them! :-) - - Summary - ------- - - I believe this to be a neat and compact solution to, what is in my opinion, - one of the gravest problems currently facing FidoNet. In FidoNet, most - nodes are continuous mail, but it is important for the growth and - popularity of FidoNet that non-CM nodes do not receive many mailer calls at - times when they are off line. Users are bad enough in this respect. It is - also useful for people wishing to contact hubs that are non-CM with mail - for a downlink, and for people wishing to file request from a node that is - not CM. There is no need for systems that are only online in zone mail hour - to adopt this flag; also, there is no need for CM systems to adopt this - flag. - - Contacting the Author - --------------------- - - My board is now online continuously, except for periods of down time during -| which the board is maintained (few and far between now that Linux is used). - Netmail contact is therefore possible at any time. I went CM because of a - certain number of nodes calling at the wrong times, and also users. Users - weren't too bad, but I dislike 0600 am wake-up calls, repeated at regular - three-minute intervals for an hour, by mailers, rather intensely :-) - -End of document. -
+ | Document: FSC-0062 + | Version: 003 + | Date: April 14, 1996 + | Author: David J. Thomas + + + + + A Proposed Nodelist flag indicating Online Times of a Node + David J. Thomas + 2:442/600@fidonet.org + + + + +Status of this document: + + This FSC suggests a proposed protocol for the FidoNet(r) community, + and requests discussion and suggestions for improvements. + Distribution of this document is unlimited. + + Fido and FidoNet are registered marks of Tom Jennings and Fido + Software. + + Note + ---- + + Changes in content between the previous edition of this document, and this + edition, are signified by bars (|) in the left margin, except where + otherwise specified. I have changed the format of the document slightly to + allow this. Where the format of the document has changed, but the actual + text has not, bars are not present. + + Purpose + ------- + + There are currently several systems within FidoNet that offer file request + or mail holding capabilities but are not continuously online. The only time + during which these nodes can be contacted with reference to the nodelist is + currently the Zone Mail Hour of the zone to which the systems belong. In + theory, mailers can only use the zone mail hour(s) specified by the system + in question to contact these nodes, which does not provide for any method + of file requesting or calling for echomail that does not conflict with the + Policy requirement that no echomail or files be transferred during the zone + mail hour. This means that, in practice, if it is known that a particular + node is online for more time than ZMH alone, but less than 24 hours a day, + it is necessary to "kludge," or set this up as a special situation, in most + mailers whenever a node has to be contacted a number of times, whether + regularly or irregularly. The proposed flag would benefit the mailers in + such a way as to provide for them the online times that the node is usually + online for, thus cutting on the costs of calling a non-continuous mail + node, only to find that it is not available; and also, hopefully preventing + annoyance for a sysop whose mailer is being called whilst it is not online, + for example in the case of a voice/data shared line. + + Compatibility + ------------- + + Since the current nodelist format is always being extended and nodelist + processors look only for the flags that they know about, there are no + expected compatibility problems with the suggestion outlined below. + + Format of additional nodelist flag + ---------------------------------- + + The proposed nodelist flag has the following form: + + Txy + + where x represents the startup time, and y the end time, in the following + format: + + +------+----+ +------+----+ +------+----+ +------+----+ +------+----+ + |Letter|Time| |Letter|Time| |Letter|Time| |Letter|Time| |Letter|Time| + +------+----+ +------+----+ +------+----+ +------+----+ +------+----+ + | A |0000| | F |0500| | K |1000| | P |1500| | U |2000| + | a |0030| | f |0530| | k |1030| | p |1530| | u |2030| + | B |0100| | G |0600| | L |1100| | Q |1600| | V |2100| + | b |0130| | g |0630| | l |1130| | q |1630| | v |2130| + | C |0200| | H |0700| | M |1200| | R |1700| | W |2200| + | c |0230| | h |0730| | m |1230| | r |1730| | w |2230| + | D |0300| | I |0800| | N |1300| | S |1800| | X |2300| + | d |0330| | i |0830| | n |1330| | s |1830| | x |2330| + | E |0400| | J |0900| | O |1400| | T |1900| | | | + | e |0430| | j |0930| | o |1430| | t |1930| | | | + +------+----+ +------+----+ +------+----+ +------+----+ +------+----+ + +| This flag is not intended to be a user flag. The flag is intended to provide +| information to computerised mailer processes, and is not easily read by +| human beings (although they can of course interpret the meaning of the +| flag); most mailers however do not attempt to interpret any information that +| is specified as a user flag, assuming that it is there for the benefit of +| human beings. Such mailers would not be able to make use of the information +| provided, which is the purpose of the flag. + +| This flag is of course not specified in FTS-0005 at the time of writing, but +| this is not regarded by FidoNet as a problem because other flags in current +| use are not specified in FTS-0005. + + The case of the letter could be relevant. Whereas the case is currently not + used by any flags in the document describing the current format of the + nodelist, there exists the potential for the case of a letter to have + relevant meaning. The case has to be correct for the CRC check calculation + to prove correct, and this would be a good use for the case of the letter. + If it is necessary to ignore the case, then the upper on-the-hour time + should be used, i.e. the time that is listed after the upper-case letter. + +| These times are expressed in UTC so that the flag is useful for systems all + around the world, without the need for specific time zone information to be + included in the nodelist. They do not adjust with daylight saving time for a + similar reason. Note the section on daylight saving time for information + about handling adjustments without changing the flag; this is important. + + Where necessary, the times can wrap around midnight, so for example, for a +| node that is online between the hours of 1800 and 0600 UTC, the flag TSG + would be a valid indication of this time. + + This nodelist entry is not required by any node. It is supplementary to the + #01, #02, #08, #09, #18, #20 flags and their !xx counterparts, though its + meaning is different. It has been suggested to me about the possibility of + an additional flag with the same meaning, but having a W as the first + letter, indicating that the node is also available for all hours during + weekends; however, I believe that the simple inclusion of the single flag + indicated above will solve most problems, as it does indicate a period for + non-CM nodes during which the node is available, which is all that is + really required. + + Daylight saving time + -------------------- + + If a node changes online times with respect to UTC when daylight saving + time becomes effective (which would be the case with most part time nodes), + then this is to be taken into account when assigning this flag. An online + times flag assigned to a node should not be altered for the specific + purpose of adjusting due to daylight saving time, since large difference + files (NODEDIFF's) would result if every node was allowed to do this, e.g. + my node used to be online from 2300 to 0800 in local time, which in winter +| is UTC, but in the summer it becomes BST (British Summer Time). This is one +| hour ahead of UTC, and the corresponding availability times of my node +| during the summer period were 2200 to 0700 UTC. Therefore my online times + flag would have indicated availability between the hours of 2300 and 0700 +| UTC, the daily time period encompassing both times, so the flag would be + TXH. + + Policy considerations + --------------------- + + This is a technical document. However, since the flag could make for an + increase in the size of difference files, the author feels that the + following guidelines should be adopted concerning the use of the flag. + + The online times flag does not replace the requirement for exclusivity of + zone mail hour to be maintained. It is still annoying behaviour to have + this flag and be unavailable during ZMH, just as it is annoying behaviour + to have the CM (continuous mail) flag in one's entry, and disregard ZMH. + + Except for during ZMH, the sysop of a node using this flag finding that + they need to take their mailer offline during the specified times to + perform system maintenance, or for any other reason, would not be acting in + an annoying manner to do so, unless the practice is found to be continuous, + in which case the flag's times could be reduced, or the flag itself could + be removed from their node entry. + + It should be noted that this flag is present for the benefit of mailers, + not human beings. This means that the flag should be used only to indicate + when a mailer is ready to receive calls. A system that uses a FidoNet- + technology mailer in ZMH, and a human-access only system during other + period(s) of the day that cannot receive mail, should not use this flag. + This flag does not explicitly specify online times of a public access BBS, + although for presumably most nodes with FidoNet-capable software, a public + access BBS will be available during the times indicated. + + Where the flag is used, it should not often be changed. If a situation + exists, for example, where a node uses a certain set of times during the + first two weeks of a month, and a different set of times during the + remainder period, the flag should be set to a time during each day of the + month when the node is online. For example, if a node is online during + 1800-0800 for the first two weeks, and then during 2200-1000 for the + remainder, the time flag should specify 2200-0800 only. If there is no such + time (other than ZMH) then no flag should be used. Of course, any permanent + changes, and any necessary reductions in the times, should be permitted at + any time, but changes owing only to daylight saving time should certainly + be expressly forbidden. + + File requests and user access are of course permitted during the online + times indicated (except ZMH). + + The above list may seem rather frightening! Please note that they are + guidelines rather than rules, unless FidoNet policy has included them as + rules. In the vast majority of situations where a node is online for a + fixed set of hours per day, the only thing to watch out for is that you get + the daylight saving time period right. Then you don't have to worry about + changing it at any time, except when your own online times change. + + Example + ------- + + With regard to time zones now; this is a complicated topic, so I wish to + express an example. Imagine a node in Indiana, USA. It is online for the + time period beginning 6 o'clock pm (1800) and ending 8 o'clock am (0800). + This changes with daylight saving time, so the times expressed effectively +| become an hour earlier with respect to UTC during daylight saving time. + +| Indiana is in the Central time zone, which is 6 hours behind UTC. Therefore, +| the online times in UTC can be expressed as 0000-1400 UTC during winter. +| During daylight saving time, however, the local time for Indiana is 5 hours +| behind UTC. The online times during this period are 0100-1500 UTC. The +| subset should be used, so that the online times flag for the node should +| indicate availability between 0100 and 1400 UTC, which is indicated +| by the flag TBO. + +| (Thanks to a few people for pointing out that the previous example was in +| error; it assumed that Indiana was ahead of UTC, and not behind as is +| actually the case.) + + ANSI C routines to Calculate the Online Times Flag + -------------------------------------------------- + + These were not provided in the first edition. Change bars will not be used + here, since they would interfere with the syntax of the presented routines. + + The first program calculates the online times flag from the user's entry of + the online times of a system, expressed in the local time zone, and the + offset to UTC used by the user's country. It takes into account that the + clock is put forward and back once a year by reducing the end time by one + hour. The program should work on any platform, and has been tested. + +=== start of code === +/* TIMEFLAG.C + Calculates FSC-0062 time flag requirement from user input */ + +#include <stdio.h> + +char *onlineflag(char *on, char *off, int utc_diff); + +void main() +{ + char on[6], off[6]; int utc_diff; + + printf("\nPlease specify the time you come online [HH:MM]: "); + scanf("%s", on); + printf("\nPlease specify the time you come offline [HH:MM]: "); + scanf("%s", off); + printf("\nSpecify the difference between your local time zone in winter\n" + "time and UTC (e.g. if your time zone is 6 hours behind UTC,\n" + "enter 6): "); + scanf("%d", &utc_diff); + printf("\nYour online time flag is %s\n\n", + onlineflag(on, off, utc_diff)); +} + +char *onlineflag(char *ontime, char *offtime, int utcdiff) +{ + int onhour, onmin, offhour, offmin; + static char flag[4]="T "; + + sscanf(ontime, "%d:%d", &onhour, &onmin); + sscanf(offtime, "%d:%d", &offhour, &offmin); + + if(onmin>30) ++onhour; + --offhour; /* to correct for daylight saving time */ + onhour = (onhour+24+utcdiff) % 24; + offhour = (offhour+24+utcdiff) % 24; + + flag[1]='A'+onhour; + flag[2]='A'+offhour; + + if(onmin>0 && onmin<31) flag[1] += 'a'-'A'; + if(offmin>29) flag[2] += 'a'-'A'; + + return flag; +} +=== end of code === + + The second program calculates the online times from the time flag, input + as a pointer to char to the routine (this being of the format "Txy"). It + returns a pointer to a structure which contains the on- and off-times in + UTC. This is not a complete program; it is designed to be used by mailers + to determine the valid online times. It has also been tested. + +=== start of code === +/* INTFLAG.C + Interprets online time flags and converts them to a set of UTC times */ + +struct TIMES { + int on_hour; + int on_min; + int off_hour; + int off_min; +}; + +struct TIMES *interpret_flag(char *time_flag); + +struct TIMES *interpret_flag(char *timeflag) +{ + static struct TIMES times; + + times.on_min=0; + times.off_min=0; + + times.on_hour=timeflag[1]-'A'; + if(times.on_hour>23) { + times.on_hour -= 'a'-'A'; + times.on_min=30; + } + times.off_hour=timeflag[2]-'A'; + if(times.off_hour>23) { + times.off_hour -= 'a'-'A'; + times.off_min=30; + } + return × +} +=== end of code === + +| The above routines can be copied and re-used as desired. I am now an +| amazing C programmer, but I still make no guarantees about them! :-) + + Summary + ------- + + I believe this to be a neat and compact solution to, what is in my opinion, + one of the gravest problems currently facing FidoNet. In FidoNet, most + nodes are continuous mail, but it is important for the growth and + popularity of FidoNet that non-CM nodes do not receive many mailer calls at + times when they are off line. Users are bad enough in this respect. It is + also useful for people wishing to contact hubs that are non-CM with mail + for a downlink, and for people wishing to file request from a node that is + not CM. There is no need for systems that are only online in zone mail hour + to adopt this flag; also, there is no need for CM systems to adopt this + flag. + + Contacting the Author + --------------------- + + My board is now online continuously, except for periods of down time during +| which the board is maintained (few and far between now that Linux is used). + Netmail contact is therefore possible at any time. I went CM because of a + certain number of nodes calling at the wrong times, and also users. Users + weren't too bad, but I dislike 0600 am wake-up calls, repeated at regular + three-minute intervals for an hour, by mailers, rather intensely :-) + +End of document. ++ +Go Back + + + + diff --git a/html/ftsc/fsc-0070.html b/html/ftsc/fsc-0070.html index a21682a1..19c34f08 100755 --- a/html/ftsc/fsc-0070.html +++ b/html/ftsc/fsc-0070.html @@ -1,122 +1,123 @@ - - -
-Document: FSC-0070 -Date: 15-Jul-94 -Revision: 002 - - Improving Fidonet/Usenet gating and Dupe Checking - - Franck Arnaud, Fidonet 2:320/213.666 - - - - Status of this document - ----------------------- - - This FSC suggests a proposed standard for the FidoNet(r) community, - and invites discussion and suggestions for improvements. Distribution of - this document is unlimited. - - Fido and FidoNet are registered marks of Tom Jennings and Fido Software. - - - Introduction - ------------ - - The complexity of Usenet/Fidonet gating and the large number of gateways - has led to a non-negligible quantity of duplicates appearing regularly in - both the Usenet and Fidonet worlds. This proposal defines a standard method - for gateway software to deal with conversion of message identifiers between - both worlds, so that we can improve the reliability of Usenet/Fidonet - gateways. - - In this document "^" means- - Go Back - - - - + + + +(character 01h). - - - History - ------- - - Revision 002 adds details and makes the Fidonet to Usenet sheme FTS-0009 - compliant. - - - Usenet To Fidonet Message Identifier Conversion - ----------------------------------------------- - - A major problem is preventing messages gated into Fidonet from RFC822 from - being gated back to Usenet at another gateway with a new message id. The - easy way to solve that is simply to store the RFC message ID in a kludge - line. This kludge line could also allow identifying messages gated from - Usenet (this could be used by message editors to allow private replies to - the nearest uucp gateway for example). - - It is proposed that the ^RFCID: kludge is used to store the RFC Message-ID: - in Fidonet messages. Of course, the use of the RFCID kludge doesn't replace - the standard fts-0009 Message-ID:. - - (Usenet) Message-ID: <92_feb_10_19192012901@prep.ai.mit.edu> - to (Fido) ^MSGID: 2:300/400.5 6789fedc - ^RFCID: 92_feb_10_19192012901@prep.ai.mit.edu - - Note ^RFCID does not include the Message-ID enclosing "<" and ">". - - Then if a gateway finds a ^RFCID line in a Fido message, it will use it in - the Usenet message ID, instead of converting the ^MSGID. - - - Fidonet to Usenet Message Identifiers Conversion - ------------------------------------------------ - - The dupe checking in Usenet is based on the message ID. Fidonet now has its - own standard message identification standard (fts-0009). - - So it would be interesting if the same Fidonet message gated at different - gateways had the same ID in Usenet to help news processing programs in - stopping dupes. - - The proposed fido ^MSGID: to RFC1036 Message-ID: conversion method is - defined as below: - - The ^MSGID: value (a string) is not parsed and converted as below to the ID - part of Usenet's Message-ID. The Message-ID domain is the fidonet domain, - "fidonet.org" if the gated echomail comes from the Fidonet(tm) network. - - To convert the MSGID string, the following rules are applied: - - Alphanumeric (a-z,A-Z,0-9) characters are kept intact (case preserved). - - Non-alphanumeric characters - including the space beetwen the origin - address and the serial number - are converted to '-'. - - Some examples: - - (Fido) ^MSGID: 2:300/400 12345AbC - to (Usenet) Message-ID: <2-300-400-12345AbC@fidonet.org> - - (Fido) ^MSGID: 15:300/400.50@somenet abcd6789 - to (Usenet) Message-ID: <15-300-400-50-somenet-abcd6789@fidonet.org> - - (Fido) ^MSGID: Internet.Domain.org aBcD1234 - to (Usenet) Message-ID: - - (Fido) ^MSGID: "LZKkoe$1982 98a" 45678bcd - to (Usenet) Message-ID: <-LZKkoe-1982-98a--45678bcd@fidonet.org> - - -
+Document: FSC-0070 +Date: 15-Jul-94 +Revision: 002 + + Improving Fidonet/Usenet gating and Dupe Checking + + Franck Arnaud, Fidonet 2:320/213.666 + + + + Status of this document + ----------------------- + + This FSC suggests a proposed standard for the FidoNet(r) community, + and invites discussion and suggestions for improvements. Distribution of + this document is unlimited. + + Fido and FidoNet are registered marks of Tom Jennings and Fido Software. + + + Introduction + ------------ + + The complexity of Usenet/Fidonet gating and the large number of gateways + has led to a non-negligible quantity of duplicates appearing regularly in + both the Usenet and Fidonet worlds. This proposal defines a standard method + for gateway software to deal with conversion of message identifiers between + both worlds, so that we can improve the reliability of Usenet/Fidonet + gateways. + + In this document "^" means <control-A> (character 01h). + + + History + ------- + + Revision 002 adds details and makes the Fidonet to Usenet sheme FTS-0009 + compliant. + + + Usenet To Fidonet Message Identifier Conversion + ----------------------------------------------- + + A major problem is preventing messages gated into Fidonet from RFC822 from + being gated back to Usenet at another gateway with a new message id. The + easy way to solve that is simply to store the RFC message ID in a kludge + line. This kludge line could also allow identifying messages gated from + Usenet (this could be used by message editors to allow private replies to + the nearest uucp gateway for example). + + It is proposed that the ^RFCID: kludge is used to store the RFC Message-ID: + in Fidonet messages. Of course, the use of the RFCID kludge doesn't replace + the standard fts-0009 Message-ID:. + + (Usenet) Message-ID: <92_feb_10_19192012901@prep.ai.mit.edu> + to (Fido) ^MSGID: 2:300/400.5 6789fedc + ^RFCID: 92_feb_10_19192012901@prep.ai.mit.edu + + Note ^RFCID does not include the Message-ID enclosing "<" and ">". + + Then if a gateway finds a ^RFCID line in a Fido message, it will use it in + the Usenet message ID, instead of converting the ^MSGID. + + + Fidonet to Usenet Message Identifiers Conversion + ------------------------------------------------ + + The dupe checking in Usenet is based on the message ID. Fidonet now has its + own standard message identification standard (fts-0009). + + So it would be interesting if the same Fidonet message gated at different + gateways had the same ID in Usenet to help news processing programs in + stopping dupes. + + The proposed fido ^MSGID: to RFC1036 Message-ID: conversion method is + defined as below: + + The ^MSGID: value (a string) is not parsed and converted as below to the ID + part of Usenet's Message-ID. The Message-ID domain is the fidonet domain, + "fidonet.org" if the gated echomail comes from the Fidonet(tm) network. + + To convert the MSGID string, the following rules are applied: + - Alphanumeric (a-z,A-Z,0-9) characters are kept intact (case preserved). + - Non-alphanumeric characters - including the space beetwen the origin + address and the serial number - are converted to '-'. + + Some examples: + + (Fido) ^MSGID: 2:300/400 12345AbC + to (Usenet) Message-ID: <2-300-400-12345AbC@fidonet.org> + + (Fido) ^MSGID: 15:300/400.50@somenet abcd6789 + to (Usenet) Message-ID: <15-300-400-50-somenet-abcd6789@fidonet.org> + + (Fido) ^MSGID: Internet.Domain.org aBcD1234 + to (Usenet) Message-ID: <Internet-Domain-org-aBcD1234@fidonet.org> + + (Fido) ^MSGID: "LZKkoe$1982 98a" 45678bcd + to (Usenet) Message-ID: <-LZKkoe-1982-98a--45678bcd@fidonet.org> + + ++ +Go Back + + + + diff --git a/html/ftsc/fsc-0072.html b/html/ftsc/fsc-0072.html index aff543f1..b2dbd849 100755 --- a/html/ftsc/fsc-0072.html +++ b/html/ftsc/fsc-0072.html @@ -1,1925 +1,1926 @@ - - -
-Document: FSC-0072 -Version: 001 -Date: 21-Feb-1993 - - - - - The HYDRA file transfer protocol - - Joaquim H. Homrighausen and Arjen G. Lentz - - - - -Status of this document: - - This FSC suggests a proposed protocol for the FidoNet(r) community, - and requests discussion and suggestions for improvements. - Distribution of this document is subject to the restrictions listed - below. - - Fido and FidoNet are registered marks of Tom Jennings and Fido - Software. - - - - - --------------------------------------------------------------------- - Copyright 1991-1993 Joaquim H. Homrighausen. All rights reserved. - Copyright 1991-1993 Lentz Software Development. All rights reserved. - --------------------------------------------------------------------- - - - Restrictions - ===================================================================== - You are granted a license to implement the HYDRA file transfer - protocol, HYDRA hereafter, in your own programs and/or use the sample - source code and adapt these to your particular situation and needs; - subject to the following conditions: - - o You must refer to it as the HYDRA file transfer protocol, and you - must give credit to the authors of HYDRA in any information screens - or literature pertaining to your programs that contains other such - information (credits, your own copyrights, etc.). - - o HYDRA will always remain backwards compatible with previous - revisions. HYDRA allows for expansion of its features without - interfering with previous revisions. It is, however, important that - different people do not expand the protocol in different directions. - We therefore ask you to contact us if you have any needs/ideas - regarding HYDRA, so development can be synchronized and beneficial - to all. - - o If your implementation cannot converse with past or future revisions - as supplied by us, then you must refer to it as "HYDRA derived", or - as "a variation of HYDRA", or words to that effect. - - Permission is hereby granted to the FTSC (FidoNet Technical Standards - Committee) and other technical organisations to republish this - document in its entirety. Librarians may change the title page and - page headers to match their library format as long as all copyrights - and body text remain unaltered. The original document name and source - must be mentioned in any republished versions of this document. - - No organization, company, person, or other being may impose any fees - for any reason for providing this document. This document may not be - sold or otherwise transferred for personal or company gain under any - circumstances. - - - Disclaimer - ===================================================================== - This information is provided "as is" and comes with no warranties of - any kind, either expressed or implied. There is no support available - for this package. It's intended to be used by programmers and - developers. - - In no event shall the authors be liable to you or anyone else for any - damages, including any lost profits, lost savings or other incidental - or consequential damages arising out of the use or inability to use - this information. - - - Revision timestamps - ===================================================================== - 001 0x2b1aab00 Dec 01, 1992 - - - Introduction - ===================================================================== - This document will not attempt to convince the reader that HYDRA is - of value to him/her or that it is better than other file transfer - protocols, it will simply describe the protocol. Just to get it out - of the way, HYDRA is not the ultimate file transfer protocol. - - The authors do, however, feel that it offers an significant - improvement over those file transfer protocols available today. HYDRA - is a bi-directional protocol with the ability to receive and send - files simultaneously. There are other bi-directional file transfer - protocols, but to the authors' knowledge no public specifications - exist. - - HYDRA owes much to Zmodem and its designer, Chuck Forsberg as well as - to Janus, designed by Rick Huebner. We would like to think of HYDRA - as a combination of both with a few extra options installed. - - The basic concept of a bi-directional file transfer protocol is - simple. Both data channels are utilized to transmit and receive files - simultaneously. I.e. two 100 kb files can be exchanged between two - parties in the time it takes a fully streaming uni-directional file - transfer protocol to transmit one of the files. - - - Protocol design - ===================================================================== - The ultimate goal when designing HYDRA was to design a protocol that - is as simple and robust as possible; complexity increase the problem - of faulty implementations. - - The obvious function of a file transfer protocol is to transport a - collection of data from its source to its destination as efficient - possible and without jeopardizing the integrity of the data. - - The lack of data compression and lost packet management (as used in - Kermit and Super Kermit) is intentional. The authors feel that this - unnecessarily increases the complexity of the protocol. - - While HYDRA performs to its best on full duplex links, it should be - possible to use it on links using proprietary protocols such as the - US Robotics HST protocol which features one 14.4 kbps data channel - and one 450 bps back channel. - - The protocol design should be flexible enough for future enhancements - while maintaining backward compatibility. - - - Protocol requirements and restrictions - ===================================================================== - HYDRA require that the link can handle ASCII character 24 (DLE) as - well as all ASCII characters in the range 32 through 126. All other - characters can be escaped or encoded by the protocol as required by - the link. - - Capability of the computer to perform simultaneous serial I/O as well - as simultaneous serial I/O combined with disk access is preferred, - but can be circumvented by opting for windowed transmission instead - of full streaming. - - HYDRA calls for the ability to check whether there is anything in the - serial input buffer (i.e. "peek-ahead"), but it doesn't mind if it - has to wait for a second if there is no data available (using for - instance the UNIX alarm() mechanism). - - The protocol is extremely tolerant with timeouts (i.e. satellite or - network delays) while still maintaining maximum reliability, - robustness, and throughput. - - - Terms and definitions - ===================================================================== - A BYTE An 8-bit unsigned character. - A WORD A 16-bit unsigned integer. - A DWORD A 32-bit unsigned integer. - A LONG A 32-bit SIGNED integer. - FILE OFFSETS (position) A long. - NUL The ASCII character 0. - BS The ASCII character 8. - CR The ASCII character 13. - XOFF The ASCII character 17. - XON The ASCII character 19. - H_DLE The HYDRA link escape character, ASCII 24 - (^X). - SP or SPACE The ASCII character 32. - UNIX timestamp A specific time and date expressed as the - number of seconds since midnight, January - 1st, 1970. All UNIX timestamps used in HYDRA - are expressed in local time. - - Multi-byte items are transmitted in "low-byte first" order, so big- - endian CPUs (like 680xx) need to do some byteswapping, depending on - the implementation. - - Values preceded by '0x' are in hexadecimal notation (base 16, 0..9 - a..f). All values transmitted in hexadecimal notation must be - converted to lowercase characters and left-padded to their full - size with '0' prior to transmission. E.g. a WORD with the value 255 - (decimal) is expressed as 00ff. A LONG with the value 255 (decmial) - is expressed as 000000ff. - - In formulas, "AND" means bitwise AND, "XOR" means bitwise Exclusive - OR, "NOT" is ones complement (i.e. all zeros become ones, all ones - become zeros). The ">>" is a shift operation to the right, "R >> 3" - means shift R three bits to the right. - - - General packet format - ===================================================================== - All data exchange is done with framed packets protected by 16 or 32 - bit CRC values appended to the packet data and packet type (low- - byte first). The only exception to this is the cancel sequence of 5 - consecutive H_DLE characters. - - All packets except those with the type DATA are followed by a CR - (ASCII 13) to help get through some buffered environments and aid - possible debugging and/or tracing. If requested by the other side in - its INIT packet, packets can also be prefixed by a specific data - string which can include NULs, delays or break signals. Refer to the - section on the INIT packet for more information. - - - Format of unframed packet - - +------------------------------------------+ - ~ Zero or more bytes packet dependent data ~ - +------------------------------------------+ - | Packet type byte | - +------------------------------------------+ - | CRC-16/32 of packet data and packet type | - +------------------------------------------+ - - - Table of packet types - - +--------+---------+-----+--------------------------------+ - |Name |Character|ASCII|Description | - +--------+---------+-----+--------------------------------+ - |START | 'A' | 65 |Startup sequence | - |INIT | 'B' | 66 |Session initialisation | - |INITACK | 'C' | 67 |Response to INIT packet | - |FINFO | 'D' | 68 |File information | - |FINFOACK| 'E' | 69 |Response to FINFO packet | - |DATA | 'F' | 70 |File data packet | - |DATAACK | 'G' | 71 |File data position ACK packet | - |RPOS | 'H' | 72 |Reposition request packet | - |EOF | 'I' | 73 |End of file packet | - |EOFACK | 'J' | 74 |Response to EOF packet | - |END | 'K' | 75 |End of session | - |IDLE | 'L' | 76 |Idle (just saying I'm alive) | - |DEVDATA | 'M' | 77 |Data to specified device (1)| - |DEVDACK | 'N' | 78 |Response to DEVDATA packet (1)| - +--------+---------+-----+--------------------------------+ - - (1) Support for DEVDATA and DEVDACK types is optional and indicated - in INIT state of a HYDRA session. - - - Format of framed packet - - +----------------------+--------------------+ - | H_DLE |Packet format byte | - +----------------------+--------------------+ - ~ Encoded packet ~ - +----------------------+--------------------+ - | H_DLE |End of framed packet| - +----------------------+--------------------+ - - - Table of packet formats - - +----+---------+-----+--------------------------------+ - |Name|Character|ASCII|Description | - +----+---------+-----+--------------------------------+ - |END | 'a' | 97 |End of framed packet | - |BIN | 'b' | 98 |Binary packet | - |HEX | 'c' | 99 |Hex encoded packet | - |ASC | 'd' | 100 |Shifted 7-bit encoded packet (1)| - |UUE | 'e' | 101 |UUencoded packet (1)| - +----+---------+-----+--------------------------------+ - - (1) Support for ASC and/or UUE formats is optional and indicated in - the INIT state of a HYDRA session. - - - Packet sender and receiver state charts - --------------------------------------------------------------------- - -TXPKT (Sender) -+--------+------------------------------+--------------------------+----------+ -|State |Predicate(s) |Action(s) |Next state| -+--------+-+----------------------------+--------------------------+----------+ -|Begin |1|pkttype == START or |format = HEXPKT |Format | -| | |pkttype == INIT or | | | -| | |pkttype == INITACK or | | | -| | |pkttype == END or | | | -| | |pkttype == IDLE | | | -| +-+----------------------------+--------------------------+----------+ -| |2|Escape 8th bit (7 bit link) | |Coding | -| +-+----------------------------+--------------------------+----------+ -| |3|else (no spc.pkt, 8bit link)|format = BINPKT |Format | -+--------+-+----------------------------+--------------------------+----------+ -|Coding |1|escape all control chars & |format = UUEPKT |Format | -| | |UUENCODED packets allowed | | | -| +-+----------------------------+--------------------------+----------+ -| |2|ASCII packets allowed |format = ASCPKT |Format | -| +-+----------------------------+--------------------------+----------+ -| |3|7 bit link & |format = HEXPKT |Format | -| | |escape all control chars & | | | -| | |UUE/ASC pkts not allowed | | | -+--------+-+----------------------------+--------------------------+----------+ -|Format | |Append format byte to data|CRC | -+--------+-+----------------------------+--------------------------+----------+ -|CRC |1|format != HEXPKT & |Calc CRC-32 (data,pkttype)|Encode | -| | |CRC-32 allowed |Append one's complement of| | -| | | |CRC to data, lowbyte first| | -| +-+----------------------------+--------------------------+----------+ -| |2|else (HEXPKT or no CRC-32) |Calc CRC-16 (data,pkttype)|Encode | -| | | |Append one's complement of| | -| | | |CRC to data, lowbyte first| | -+--------+-+----------------------------+--------------------------+----------+ -|Encode |1|format == BINPKT |BIN escape databuf |Prefix | -| +-+----------------------------+--------------------------+----------+ -| |2|format == HEXPKT |HEX encode databuf |Prefix | -| +-+----------------------------+--------------------------+----------+ -| |3|format == ASCPKT |ASC encode/escape databuf |Prefix | -| +-+----------------------------+--------------------------+----------+ -| |4|format == UUEPKT |UUE encode databuf |Prefix | -+--------+-+----------------------------+--------------------------+----------+ -|Prefix |1|No more prefix characters | |Transmit | -| +-+----------------------------+--------------------------+----------+ -| |2|Prefix character ASCII 221 |Send 1 second break signal| | -| +-+----------------------------+--------------------------+----------+ -| |3|Prefix character ASCII 222 |1 second delay | | -| +-+----------------------------+--------------------------+----------+ -| |4|Prefix character ASCII 223 |Transmit NUL (ASCII 0) | | -| +-+----------------------------+--------------------------+----------+ -| |5|else (any other character) |Transmit character | | -+--------+-+----------------------------+--------------------------+----------+ -|Transmit| |Transmit H_DLE,format byte|Suffix | -| | |Transmit encoded buffer | | -| | |Transmit H_DLE,pktend byte| | -+--------+-+----------------------------+--------------------------+----------+ -|Suffix |1|pkttype != DATA & |Transmit CR,LF (ASC 13,10)|Done | -| | |pktformat != BINPKT | | | -| +-+----------------------------+--------------------------+----------+ -| |2|else (pkttype == DATA or | |Done | -| | | pktformat == BINPKT) | | | -+--------+-+----------------------------+--------------------------+----------+ - - -RXPKT (Receiver) -+--------+------------------------------+--------------------------+----------+ -|State |Predicate(s) |Action(s) |Next state| -+--------+------------------------------+--------------------------+----------+ -|Reset | |rxdle = 0 |NextByte | -| | |format = 0 | | -| | |pktlen = 0 | | -+--------+-+----------------------------+--------------------------+----------+ -|NextByte|1|User wishes to abort session|Report reason for abort |Abort | -| | |or carrier lost | | | -| +-+----------------------------+--------------------------+----------+ -| |2|Byte available in inputbuf | |StripIn | -| +-+----------------------------+--------------------------+----------+ -| |3|braintimer expired |Report braindead situation|Abort | -| +-+----------------------------+--------------------------+----------+ -| |4|Any other timer expired |Tell responsible party | | -+--------+-+----------------------------+--------------------------+----------+ -|StripIn |1|Escape 8th bit (7 bit link) |c = c AND 0x7f (strip 8th)|StripC | -| +-+----------------------------+--------------------------+----------+ -| |2|else (8 bit link) | |StripC | -+--------+-+----------------------------+--------------------------+----------+ -|StripC |1|Escape ctlchars with 8th set|n = c AND 0x7f (strip 8th)|Process | -| +-+----------------------------+--------------------------+----------+ -| |2|else (let 8 bit ctl through)|n = c |Process | -+--------+-+----------------------------+--------------------------+----------+ -|Process |1|c == H_DLE |increment rxdle |DLE | -| +-+----------------------------+--------------------------+----------+ -| |2|Escape XON/XOFF & |Eat these |NextByte | -| | |n == XON or n == XOFF | | | -| +-+----------------------------+--------------------------+----------+ -| |3|Escape all control chars & |Eat these |NextByte | -| | |n < 32 or n == 127 | | | -| +-+----------------------------+--------------------------+----------+ -| |4|rxdle > 0 | |Escape | -| +-+----------------------------+--------------------------+----------+ -| |5|else (no eating or escaping)| |Store | -+--------+-+----------------------------+--------------------------+----------+ -|DLE |1|rxdle == 5 |Report remote wants abort |Abort | -| +-+----------------------------+--------------------------+----------+ -| |2|else (rxdle < 5) | |NextByte | -+--------+-+----------------------------+--------------------------+----------+ -|Escape |1|c == PKTEND | |PktEnd | -| +-+----------------------------+--------------------------+----------+ -| |2|c == BINPKT |format = BINPKT |PktStart | -| +-+----------------------------+--------------------------+----------+ -| |3|c == HEXPKT |format = HEXPKT |PktStart | -| +-+----------------------------+--------------------------+----------+ -| |4|c == ASCPKT |format = ASCPKT |PktStart | -| +-+----------------------------+--------------------------+----------+ -| |5|c == UUEPKT |format = UUEPKT |PktStart | -| +-+----------------------------+--------------------------+----------+ -| |6|else (normal escaped char) |c = c XOR 0x40 |Store | -| | | |rxdle = 0 |Store | -+--------+-+----------------------------+--------------------------+----------+ -|Store |1|format == 0 |Garbage |NextByte | -| +-+----------------------------+--------------------------+----------+ -| |2|pktlen >= maximum |Pkt too long / lost PKTEND|Reset | -| +-+----------------------------+--------------------------+----------+ -| |3|else (fmt > 0 & len < max) |Append c to databuffer |NextByte | -| | | |increment pktlen | | -+--------+-+----------------------------+--------------------------+----------+ -|PktStart| |rxdle = 0 |NextByte | -| | |pktlen = 0 | | -+--------+-+----------------------------+--------------------------+----------+ -|PktEnd |1|format == 0 |End without start, garbage|Reset | -| +-+----------------------------+--------------------------+----------+ -| |2|format == BINPKT |(No more decoding needed) |CalcCRC | -| +-+----------------------------+--------------------------+----------+ -| |3|format == HEXPKT |ok = Decode HEXPKT |CheckDec | -| +-+----------------------------+--------------------------+----------+ -| |4|format == ASCPKT |ok = Decode ASCPKT |CheckDec | -| +-+----------------------------+--------------------------+----------+ -| |5|format == UUEPKT |ok = Decode UUEPKT |CheckDec | -+--------+-+----------------------------+--------------------------+----------+ -|CheckDec|1|ok (no errors during decode)| |CalcCRC | -| +-+----------------------------+--------------------------+----------+ -| |2|else (errors in decoding) |Bad encoding, ignore pkt |Reset | -+--------+-+----------------------------+--------------------------+----------+ -|CalcCRC |1|format != HEXPKT & |Calc CRC-32 over databuf |CheckCRC | -| | |CRC-32 allowed |ok = (crc == 0xdebb20e3) | | -| | | |pktlen = pktlen - 4 | | -| +-+----------------------------+--------------------------+----------+ -| |2|else (HEXPKT or no CRC-32) |Calc CRC-16 over databuf |CheckCRC | -| | | |ok = (crc == 0xf0b8) | | -| | | |pktlen = pktlen - 2 | | -+--------+-+----------------------------+--------------------------+----------+ -|CheckCRC|1|ok (CRC matched magic) |pkttype = last byte of buf|Reset | -| | | |pktlen = pktlen - 1 | | -| | | |Hand pkt to higher level | | -| +-+----------------------------+--------------------------+----------+ -| |2|else (CRC check failed) |Bad CRC, ignore packet |Reset | -+--------+-+----------------------------+--------------------------+----------+ - - - - BIN packet format - --------------------------------------------------------------------- - The binary packet format require an 8-bit data channel. If requested - by either side, one or more sets of control characters are escaped. - In this case, when one of these characters appears in an unframed - packet, a H_DLE is sent followed by the character XOR 0x40. The H_DLE - character itself is always transmitted in this fashion. On the - receiver side, if the character after a H_DLE is not one of the - packet format bytes, this character is decoded using XOR 0x40 again. - - -BINPKT Escaping -+--------+------------------------------+--------------------------+----------+ -|State |Predicate(s) |Action(s) |Next state| -+--------+------------------------------+--------------------------+----------+ -|Begin | |txlastc = 0 |NextByte | -+--------+-+----------------------------+--------------------------+----------+ -|NextByte|1|No more bytes to process | |Done | -| +-+----------------------------+--------------------------+----------+ -| |2|Escape ctlchars with 8th set|n = c AND 0x7f (strip 8th)|Escape | -| +-+----------------------------+--------------------------+----------+ -| |3|else (let 8 bit ctl through)|n = c |Escape | -+--------+-+----------------------------+--------------------------+----------+ -|Escape |1|n == H_DLE |Output H_DLE |Output | -| | | |c = c XOR 0x40 | | -| +-+----------------------------+--------------------------+----------+ -| |2|Escape XON/XOFF & |Output H_DLE |Output | -| | |n == XON or n == XOFF |c = c XOR 0x40 | | -| +-+----------------------------+--------------------------+----------+ -| |3|Escape Telenet & |Output H_DLE |Output | -| | |n == CR & |c = c XOR 0x40 | | -| | |txlasc == '@' | | | -| +-+----------------------------+--------------------------+----------+ -| |4|Escape all control chars & |Output H_DLE |Output | -| | |n < 32 or n == 127 |c = c XOR 0x40 | | -| +-+----------------------------+--------------------------+----------+ -| |5|else (any other character) | |Output | -+--------+-+----------------------------+--------------------------+----------+ -|Output | |Store c |NextByte | -| | |txlastc = c | | -+--------+------------------------------+--------------------------+----------+ - - - - HEX packet format - --------------------------------------------------------------------- - Supported by all implementations, this packet format is used in - worst-case situations and upon startup of a session when it is not - yet known what restrictions the line and the other side will place on - the link. - - Packet types always transmitted in HEX format are: START, INIT, - INITACK, IDLE, END. - - HEX format packets always use a 16-bit CRC. - - HEX packets assume a 7-bit link, escaping all control characters and - filtering all control characters upon receipt. - - ASCII characters in the range 128-255 (high bit set) are encoded by - first transmitting a backslash ('\') character (ASCII 92), followed - by the character in two lowercase hex-digits (bits 4-7 in first - digit, bits 0-3 in second). - - Uppercase hex-digits are not permitted. - - The backslash character itself is transmitted as two backslashes. - - ASCII characters in the range 0-31 and 127 (all control characters) - are escaped with H_DLE in the same fashion as in binary (BIN) - packets. - - Decoded byte 1 - +------+ - 76543210 - +--++--+ - Encoded h1 h2 - - -HEXPKT Encoding/Escaping -+--------+------------------------------+--------------------------+----------+ -|State |Predicate(s) |Action(s) |Next state| -+--------+-+----------------------------+--------------------------+----------+ -|NextByte|1|No more bytes to process | |Done | -| +-+----------------------------+--------------------------+----------+ -| |2|High bit of c set |Output \ (backslash) | | -| | | |Output hexdigit(c bit 4-7)| | -| | | |Output hexdigit(c bit 0-3)| | -| +-+----------------------------+--------------------------+----------+ -| |3|c < 32 or c == 127 |Output H_DLE | | -| | | |Output (c XOR 0x40) | | -| +-+----------------------------+--------------------------+----------+ -| |4|c == \ (backslash) |Output \ (backslash) | | -| | | |Output \ (backslash) | | -| +-+----------------------------+--------------------------+----------+ -| |5|else (any other character) |Output c | | -+--------+-+----------------------------+--------------------------+----------+ - - -HEXPKT Decoding -+--------+------------------------------+--------------------------+----------+ -|State |Predicate(s) |Action(s) |Next state| -+--------+-+----------------------------+--------------------------+----------+ -|NextByte|1|No more bytes to process | |Done OK | -| +-+----------------------------+--------------------------+----------+ -| |2|c == \ (backslash) | |Escape | -| +-+----------------------------+--------------------------+----------+ -| |3|else (any other character) |Output c |Escape | -+--------+-+----------------------------+--------------------------+----------+ -|Escape |1|No more bytes to process |Premature end of data |Error | -| +-+----------------------------+--------------------------+----------+ -| |2|c == \ (backslash) |Output \ (backslash) | | -| +-+----------------------------+--------------------------+----------+ -| |3|c == lowercase hexdigit |Save c, move ptr to next |NextHex | -| +-+----------------------------+--------------------------+----------+ -| |4|else (all other characters) |Invalid character |Error | -+--------+-+----------------------------+--------------------------+----------+ -|NextHex |1|No more bytes to process |Premature end of data |Error | -| +-+----------------------------+--------------------------+----------+ -| |2|c == lowercase hexdigit |Output (1st << 4 OR 2nd) |NextByte | -| +-+----------------------------+--------------------------+----------+ -| |3|else (all other characters) |Invalid character |Error | -+--------+-+----------------------------+--------------------------+----------+ - - - ASC packet format - --------------------------------------------------------------------- - Support of this packet format is optional and signalled in the INIT - packet with the ASC flag in the "Supported options" field. 8-bit data - is transformed into 7-bit data by a simple shift operation. Each byte - is inserted at the top of a shift register, the lower seven bits are - moved out. So seven 8-bit bytes are encoded into eight 7-bit - characters. - - The end of the packet is padded by a maximum of six bits of 0 to make - the number of bits a multiple of seven and thereby creating - complete characters (so the receiver stops decoding when there are - less than seven bits left). The output can contain control - characters, so if escaping of these characters is required, this is - done as in BIN packets using the H_DLE method. - - - Decoded byte 7 byte 6 byte 5 byte 4 byte 3 byte 2 byte 1 - +------++------++------++------++------++------++------+ - 76543210765432107654321076543210765432107654321076543210 - +-----++-----++-----++-----++-----++-----++-----++-----+ - Encoded c8 c7 c6 c5 c4 c3 c2 c1 - - -ASCPKT Encoding/Escaping -+--------+------------------------------+--------------------------+----------+ -|State |Predicate(s) |Action(s) |Next state| -+--------+------------------------------+--------------------------+----------+ -|Reset | |n = 0 (16 bit wide!) |NextByte | -| | |bitshift = 0 | | -+--------+-+----------------------------+--------------------------+----------+ -|NextByte|1|No more bytes to process | |Flush | -| +-+----------------------------+--------------------------+----------+ -| |2|else (more bytes to process)|n = n OR (c << bitshift) |Shift | -| | | |BINPKT escape (n & 0x7f) | | -| | | |n = n >> 7 | | -| | | |increment bitshift | | -+--------+-+----------------------------+--------------------------+----------+ -|Shift |1|bitshift == 7 |BINPKT escape (n & 0x7f) |Reset | -| +-+----------------------------+--------------------------+----------+ -| |2|else (bitshift < 7) | |NextByte | -+--------+-+----------------------------+--------------------------+----------+ -|Flush |1|bitshift > 0 |BINPKT escape (n & 0x7f) |Done | -| +-+----------------------------+--------------------------+----------+ -| |2|else (bitshift == 0) | |Done | -+--------+-+----------------------------+--------------------------+----------+ - -ASCPKT Decoding -+--------+------------------------------+--------------------------+----------+ -|State |Predicate(s) |Action(s) |Next state| -+--------+------------------------------+--------------------------+----------+ -|Begin | |n = 0 (16 bit wide!) |NextByte | -| | |bitshift = 0 | | -+--------+-+----------------------------+--------------------------+----------+ -|NextByte|1|No more bytes to process | |Done OK | -| +-+----------------------------+--------------------------+----------+ -| |2|else (more bytes to process)|c = c AND 0x7f |Shift | -| | | |n = n OR (c << bitshift) | | -| | | |bitshift = bitshift + 7 | | -+--------+-+----------------------------+--------------------------+----------+ -|Shift |1|bitshift >= 8 |Output (n AND 0xff) |NextByte | -| | | |n = n >> 8 | | -| | | |bitshift = bitshift - 8 | | -| +-+----------------------------+--------------------------+----------+ -| |2|else (bitshift < 8) | |NextByte | -+--------+-+----------------------------+--------------------------+----------+ - - - - UUE packet format - --------------------------------------------------------------------- - Support of this packet format is optional and signalled in the INIT - packet with the UUE flag in the "Supported options" field. The 8-bit - data is transformed into printable ASCII using the UUENCODE - algorithm. Three 8-bit bytes are encoded into four printable ASCII - characters. This done by taking the bottom six bits left and adding - '!' (ASCII 33) to move this character value into printable ASCII - range. - - The end of the packet is padded by a maximum of five bits of 0 to - make the number of bits a multiple of six and thereby creating - complete characters (so the receiver stops decoding when there are - less than six bits left). The output of this coding scheme does not - need any further escaping before transmission. - - Decoded byte 3 byte 2 byte 1 - +------++------++------+ - 765432107654321076543210 - +----++----++----++----+ - Encoded c4 c3 c2 c1 - - -UUEPKT Encoding -+--------+------------------------------+--------------------------+----------+ -|State |Predicate(s) |Action(s) |Next state| -+--------+-+----------------------------+--------------------------+----------+ -|NextByte|1|Less than three bytes left | |Flush | -| +-+----------------------------+--------------------------+----------+ -| |2|else (three or more left) |UUE(in[0]>>2) | | -| | | |UUE(in[0]<<4 OR in[1]>>4) | | -| | | |UUE(in[1]<<2 OR in[2]>>6) | | -| | | |UUE(in[2]) | | -| | | |(UUE: (c AND 0x3f) + '!') | | -+--------+-+----------------------------+--------------------------+----------+ -|Flush |1|No more bytes left | |Done | -| +-+----------------------------+--------------------------+----------+ -| |2|One byte left |UUE(in[0]>>2) |Done | -| | | |UUE(in[0]<<4) | | -| +-+----------------------------+--------------------------+----------+ -| |3|Two bytes left |UUE(in[0]>>2) |Done | -| | | |UUE(in[0]<<4 OR in[1]>>4) | | -| | | |UUE(in[1]<<2) | | -+--------+-+----------------------------+--------------------------+----------+ - -UUEPKT Decoding -+--------+------------------------------+--------------------------+----------+ -|State |Predicate(s) |Action(s) |Next state| -+--------+-+----------------------------+--------------------------+----------+ -|NextByte|1|Less than four bytes left | |Flush | -| +-+----------------------------+--------------------------+----------+ -| |2|else (four or more left) & |UD(i[0])<<2 OR UD(i[1])>>4| | -| | |(c AND 0x7f) is in UUE range|UD(i[1])<<4 OR UD(i[2])>>2| | -| | | |UD(i[2])<<6 OR UD(i[3]) | | -| | | |(UD: (c - '!') AND 0x3f) | | -| +-+----------------------------+--------------------------+----------+ -| |3|else (all other characters) |Invalid character(s) |Error | -+--------+-+----------------------------+--------------------------+----------+ -|Flush |1|No bytes left or | |Done OK | -| | |Less than two bytes left | | | -| +-+----------------------------+--------------------------+----------+ -| |2|Two bytes left & |UD(i[0])<<2 OR UD(i[1])>>4|Done OK | -| | |(c AND 0x7f) is in UUE range| | | -| +-+----------------------------+--------------------------+----------+ -| |3|Three bytes left & |UD(i[0])<<2 OR UD(i[1])>>4|Done OK | -| | |(c AND 0x7f) is in UUE range|UD(i[1])<<4 OR UD(i[2])>>2| | -| +-+----------------------------+--------------------------+----------+ -| |4|else (all other characters) |Invalid character(s) |Error | -+--------+-+----------------------------+--------------------------+----------+ - - - - START packet (HEX format) - --------------------------------------------------------------------- - This packet is sent to tell the remote to initiate a HYDRA session. - - The complete framed packet as transmitted looks like: - - ASCII values 24 99 65 92 102 53 92 97 51 24 97 - +-------+---+---+---+---+---+---+---+---+-------+---+ - Characters | H_DLE | c | A | \ | f | 5 | \ | a | 3 | H_DLE | a | - +-------+---+---+---+---+---+---+---+---+-------+---+ - - Applications may scan for this sequence to automatically start HYDRA - when the remote transmits this packet (AutoStart). Prior to the START - packet, a special string is transmitted to enable remote starting - from a command prompt, hydra- - Go Back - - - - + + + +(the word hydra in lowercase): - - ASCII values 104 121 100 114 97 13 - +---+---+---+---+---+----+ - Characters | h | y | d | r | a | CR | - +---+---+---+---+---+----+ - - The special string combined with the START packet is transmitted at - five second intervals until either a START or INIT packet is received - from the remote, or the maximum number of retries is reached. Any - other packet types received in this stage must be ignored as they - could be remains of a previous session. - - - INIT packet (HEX format) - --------------------------------------------------------------------- - The INIT packet contains file transfer session options. The remote - acknowledges this packet by returning an INITACK packet. - - - INIT packet data - - +---------------------------------------+ - ~ Application ID string, NUL terminated ~ - +---------------------------------------+ - ~ Supported options, NUL terminated ~ - +---------------------------------------+ - ~ Desired options, NUL terminated ~ - +---------------------------------------+ - | Desired transmitter window size or 0 | - +---------------------------------------+ - | Desired receiver window size or 0 | - +---------------------------------------+ - ~ Other general options, NUL terminated ~ - +---------------------------------------+ - ~ Packet prefix string, NUL terminated ~ - +---------------------------------------+ - - The application ID string contains a printable ASCII string with the - document revision date, product name, product revision number, and - optionally the product serial number. The format of the string is: - - <,> [<,> ] - - RevDate is the UNIX timestamp (the hour, minute, and second portion - is assumed to be zero), in hexadecimal notation, of the HYDRA - document that the application is supposed to support. None of the - following three fields should exceed thirty characters in length and - must not contain any control characters (ASCII 0-31) or the comma - character (ASCII 44). The field separator is a comma (ASCII 44) - character. - - Capability flags - - XON Escape and characters. - TLN Escape the @ sequence (Telenet escape). - CTL Escape ASCII characters 0-31 and 127. - HIC Escape above three with high bit set. - HI8 Escape ASCII characters 128-255 and strip the high bit. - BRK Can transmit a break signal. - ASC Can handle ASC packets. - UUE Can handle UUE packets. - C32 Can receive packets with 32-bit CRC error detection. - DEV Can receive device packets. - FPT Can receive filenames with paths. - - Capability flags are always three characters long, in uppercase, and - seperated by a comma character (ASCII 44). Please note that the first - five flags must be supported by all applications that implement the - HYDRA specifications. - - The "Supported options" string contain the capability flags of the - options that the application support. The "Desired options" string - contain the capability flags of the options that the application - would like to use/enable for the session. Some flags do not have to - be specified in both strings. E.g. if the C32 flag is present in the - "Supported options" string and the remote system indicates support - for the same flag, 32-bit CRC error detection will be used. An - application may not ask for an option it does not support. - - Escaping certain characters or bits also means filtering any - occurrence of them in the incoming data stream. At the start of a - session, it is assumed that the first five capability flags are in - effect, i.e. the high bit is stripped off every received character - and all control characters are filtered out. - - The "Desired transmitter/receiver window size" fields are long - integers expressed in hexadecimal notation. With these options each - side tells the other to use window management of the requested size - when transmitting file data, instead of using full streaming (0). - The window setting is completely seperate for both directions. - If one side requests a smaller window size than the other, that - smaller size will be used for that direction; also, a window of any - size takes precedence over no window (0). - Please note that the terms 'transmitter' and 'receiver' used for the - fields in the INIT packet are from the view of the side transmitting - that packet, so the other side should merge the 'transmitter' window - field from the received INIT packet with its own 'receiver' window - field. - - The "General options" string currently has no other fields than - "Desired tx/rx window size"; the string is NUL terminated. - - The packet prefix string is normally empty, but may be provided by - the remote if required. The maximum length of a packet prefix string - is 30 characters. All characters should be transmitted as specified, - with the following exceptions: - - - Table of special packet prefix string chars - - +-----+--------------------------------------+ - |ASCII|Description | - +-----+--------------------------------------+ - | 221 |Transmit a break signal for one second| - | 222 |Delay one second before next character| - | 223 |Transmit a NUL (ASCII 0) character | - +-----+--------------------------------------+ - - - INITACK packet (HEX format) - --------------------------------------------------------------------- - The INITACK packet is used to acknowledge the receipt of the remote's - INIT packet. - - Duplicate INIT packets should be acknowledged too, as the remote may - have missed previous INITACK packets; the reception of such a - duplicate packet should not however reset the braindead timer, as it - does not mean a change of state and is not actual file data. - - - FINFO packet - --------------------------------------------------------------------- - File information packet, sent to notify the remote that another file - is to be transmitted, or to signal end of batch. After the FINFO - packet has been transmitted, the timer is set to the normal timeout - value. The sender then waits for an FINFOACK packet from the remote - or for the timer to expire. In the event of a timeout, the transmit/ - wait sequence is repeated with half the normal timeout value until - the maximum number of retries has been reached. - - - FINFO packet data - +-------------------------------------+ - ~ File information, NUL terminated ~ - +-------------------------------------+ - - - File information End of batch - +-----------------+ +-----------------+ - | Timestamp or 0 | | NUL | - +-----------------+ +-----------------+ - | Filesize or 0 | - +-----------------+ - | Reserved (0) | - +-----------------+ - | Transaction # | - +-----------------+ - | File count or 0 | - +-----------------+ - ~ Short filename ~ - +-----------------+ - ~ Real filename ~ - +-----------------+ - | NUL | - +-----------------+ - - End of batch is signalled by an empty string (only the terminating - NUL). - - The first five fields are long integers expressed in hexadecimal - notation. - - Timestamp is a UNIX timestamp representing the creation time of the - file. If the creation time is not known, this is zero. - - Filesize is the size of the file in bytes. If the size of the file is - not known, this is zero. This field should not be used as an exact - measure of the size of the file. It is safe to assume that you should - not receive less data than specified in this field, but the file may - grow while it is being transferred (e.g. the result of a background - process). - - Transaction # is a unique number for each set of files being sent - during the session. This is primarily used to allow the receiving - application to group several files together and store them in - specific directories as a result of automated file requests. If the - file being sent is not a result of an automated file request, this - field must be set to zero. - - File count is the session file counter. For the first file in a - session, this field contains the total number of files to be sent - during the session; for subsequent files, it contains the file number - in the session, starting with two (2). If the total number of files - is not known, this field contains zero for all files. - - The first filename field must be specified in lowercase characters. - It must conform to MS-DOS filename conventions and not exceed 12 - characters in length (excluding the terminating NUL character). The - second field, real filename, is the actual filename on the sending - system. If this field is not present, the short filename field is - used. - - No directory paths may be specified in the short filename. Directory - paths may be specified in the real filename field if the "Desired - options" of the receiver contains FPT. If the real filename field - contains a path, it may include any ASCII character in the range 32 - (0x20) through 255 (0xff) with \ characters translated to /. A drive - specifier may be present in the : (e.g. c:) format. If both - the short and real filename fields are present, they are separated - by a NUL character. There is never more than one NUL character - terminating the packet. - - - FINFOACK packet - --------------------------------------------------------------------- - Sent in response to an FINFO packet. If the FINFO packet contained - file information, the FINFOACK packet is also used to instruct the - remote how to proceed with the transfer. - - - FINFOACK packet data - +---------------------------------------+ - | Long file offset, special code, or 0 | - +---------------------------------------+ - - The only data in this packet is a long integer. In response to an - an end of batch FINFO packet, the file offset is set to zero (0). In - all other cases, file offset is one of the following: - - - File offsets and special values - +------+----------------------------------------------+ - |Offset|Description | - +------+----------------------------------------------+ - | >=0 |Seek to specified offset and start sending (1)| - | -1 |Already have file (2)| - | -2 |Send file during another batch (not now) | - +------+----------------------------------------------+ - - (1) This can only be something other than zero if the FINFO packet - specified a filesize other than zero (i.e. the size of the file - is known to the receiver). - - (2) The sending application should consider the file as having been - sent successfully. This is primarily used to prevent duplicate - files from being transmitted. - - - DATA packet - --------------------------------------------------------------------- - Packet containing actual file data. - - - DATA packet - +-----------------------------------------+ - | Long file offset of file data block | - +-----------------------------------------+ - ~ Variable length data block 0-2048 bytes ~ - +-----------------------------------------+ - - If the file offset corresponds with what is expected by the receiver, - the data block is saved and the file position increased accordingly. - If the file offset is not correct, DATA packets may have been lost or - failed the CRC check. Bad packets are ignored because it is not - certain that the bad packet was an actual DATA packet and not some - other type of packet. The file offset comparison is therefore the - only way to find out about lost or bad data. - - When a bad data packet is detected, an RPOS packet is transmitted by - the receiver to force the sender to seek to the desired file offset - and resume transmission from it. After transmitting the RPOS packet, - the receiver initializes a timer and continues to monitor received - DATA packets while comparing their file offset with its desired - offset. - - If the offset of a newly received DATA packet is greater than the - offset received in the last DATA packet prior to transmitting the - RPOS packet, the sender has not yet seen the RPOS packet, or the - DATA packet was already in the data stream when the RPOS packet was - transmitted. - - If the received offset matches the requested offset, the transfer is - resumed, otherwise, a new RPOS packet is transmitted by the receiver - and the timer restarted. - - If the timer expires, another RPOS packet is transmitted by the - receiver. This is repeated until the maximum number of retries has - been reached. - - If the receiver encounters more missing or invalid DATA packets at - the same offset than it finds acceptable and it is not the originator - of the session, it may decide to revert to a one-way transfer and - wait with sending the remainder of its own files until the remote has - transmitted its end of batch signal. It is possible that some hard- - ware is not capable or well suited for a bi-directional file transfer - involving large volumes of data (see description of the IDLE packet). - - - DATAACK packet - --------------------------------------------------------------------- - Transmitted by the receiver with its current file offset after - receiving a valid DATA packet. - - - DATAACK packet data - +------------------------+ - | Long file offset | - +------------------------+ - - This packet is only transmitted if there is a window in operation - for that direction (selected in the INIT stage of the session), in - which case the sender uses the DATAACK file offsets to manage its - transmit window. If the sender's file offset is greater than or equal - to the last DATAACK offset received plus the window size, no more - data is transmitted by the sender until a DATAACK packet is received - which allows the sender to proceed without exceeding the window size. - - While waiting for the DATAACK packet, the sender checks its timer - and retry counter. If the timer expires before a valid DATAACK packet - is received, the next DATA packet is transmitted, the retry counter - incremented, and the timer restarted with half the normal timeout. - This system ensures that the two sides do not end up waiting for - each other in case packets are lost; the receiver will respond with - either a DATAACK or RPOS packet. Receipt of a DATAACK packet does not - reset the braindead timer. - - There are two windowing systems the receiver can use: sliding window - or segmented streaming. - - If the receiver is capable of simultaneous serial and disk I/O, it - will transmit a DATAACK packet for every received DATA packet, or - every few DATA packets if it wants to be more economical with line - capacity. - Sliding window transmission is just a method of keeping the runahaid - of the transmitter within reasonable limits (for sattelite or network - links with long delays), thereby allowing for faster error recovery. - Because of Hydra's tolerancy to delays and method of error recovery, - sliding windows transmission is not normally required and full - streaming can be used. - - If however the receiver is not capable of simultaneous serial and - disk I/O, it will will process received DATA packets until the window - size is reached (or slightly exceeded), write the received packets to - disk, and then transmit one DATAACK packet to signal that it can - receive the next segment of data. - - If the sender cannot handle simultaneous serial and disk I/O, it can - apply the segmented streaming technique for reading data segments of - the negotiated window size from disk. - - - RPOS packet - --------------------------------------------------------------------- - Transmitted by the receiver to force the sender to seek to a specific - position in the file and resume the transfer (as described above). - - The RPOS packet is also used by the receiver to skip a file once the - transfer has been initiated. This is done by transmitting a RPOS - packet with -2 as the desired offset and then waiting for a EOF - packet with the same offset (-2). Once the EOF packet is received, - the receiver responds to it by transmitting a EOFACK packet and then - proceeds to wait for the next FINFO packet. - - - RPOS packet dependent data - +----------------------------------------+ - | Long file offset | - +----------------------------------------+ - | Desired datablock size (word, 64-2048) | - +----------------------------------------+ - | Long RPOS packet ID | - +----------------------------------------+ - - - File offsets - +------+-------------------------------------------+ - |Offset|Description | - +------+-------------------------------------------+ - | >=0 |Seek to specified offset and resume sending| - | -2 |Send file during another batch (not now) | - +------+-------------------------------------------+ - - The desired data blocksize field tells the sender what blocksize - to use when it resumes transmitting from the specified file offset. - - Each new RPOS packet should be given a different packet ID. This - allows the sender to identify and ignore duplicate RPOS packets. - The ID need not be sequential, but it must not have the same value as - any other RPOS packet sent during the transmission of the same file. - A RPOS ID value of zero (0) is not permitted. The same ID value is - only used when sending multiple RPOS packets due to an expired RPOS - packet timer as described above (DATA packet). - - - EOF packet - --------------------------------------------------------------------- - Indicates that the end of the file has been reached by the sender. - The packet is transmitted after the last DATA packet with file data. - The EOF packet only contains one field which holds the current file - offset of the sender (i.e. the actual size of the file). - - After the EOF packet has been transmitted, the timer is set to the - normal timeout value. The sender then waits for an EOFACK packet - from the remote or for the timer to expire. In the event of a - timeout, the transmit/wait sequence is repeated with half the normal - timeout value until the maximum number of retries has been reached. - - In the event that the receiver requests to skip the file by - transmitting a RPOS(-2) packet (see RPOS packet), the EOF packet - contains the same value (-2). If the sender wants to skip the file - currently being transmitted, it issues an EOF packet with -2 as the - offset value. - - EOF packets with an incorrect offset should be treated by the - receiver as if it was an incorrect DATA packet (i.e. transmitting an - RPOS packet). Accepted EOF packets are acknowledged by transmitting - an EOFACK packet. - - - EOF packet data - +----------------------------------+ - | Long file offset or special code | - +----------------------------------+ - - - File offsets and special value - +------+----------------------------------------+ - |Offset|Description | - +------+----------------------------------------+ - | >=0 |Final offset in file (size of file) | - | -2 |Send file during another batch (not now)| - +------+----------------------------------------+ - - - EOFACK packet - --------------------------------------------------------------------- - Transmitted in response to an accepted EOF packet. After transmitting - this packet, the receiver waits for the FINFO packet of the next file - or end of batch. - - - END packet (HEX format) - --------------------------------------------------------------------- - Once all files have been transmitted by both sides and no device - packets remain to be transmitted, the end of session sequence is - initiated. END packets are always sent in HEX format. - - Two END packets are transmitted and the transmit timer set to half - the normal timeout. The application then waits for an END packet from - the remote or for the transmit timer to expire. In the event of a - timeout, the transmit/wait sequence is repeated until the maximum - number of retries has been reached. At this point, the HYDRA session - may be considered to be successful as both batches were completed. - - If an END packet is received before timeout, another three (3) END - packets are transmitted and the protocol exits. Both sides need to - transmit END packets and receive at least one from the remote. - - - IDLE packet (HEX format) - --------------------------------------------------------------------- - The IDLE packet is used to let the remote know that the application - is still alive. This is only applicable in uni-directional transfer - mode to let the remote know that your application is still alive when - it is receiving files, and after having transmitted an end of batch - signal to the remote and not having any more files to send for the - remainder of the session. - - When applicable, the IDLE packet is transmitted every 20 seconds. The - remote resets its braindead timer upon receipt of an IDLE packet. If - an application receives an IDLE packet while it is in a state where - it is transmitting IDLE packets to the remote, something is wrong. - This could occur if both sides have accidentally switched to one-way - mode waiting for the remote to finish its batch. In this situation, - one-way should be disabled to prevent a complete deadlock. Note that - if both sides have finished their batch, the end of session sequence - (see END packet) should be initiated. - - - DEVDATA packet - --------------------------------------------------------------------- - Support for the DEVDATA and DEVDACK packets is optional and indicated - in the INIT packet with the DEV flag in the "Supported options" - field. The ID value is a long, different for each new device data - packet sent. A value of zero (0) is not permitted. - - Only one DEVDATA packet may be transmitted at a time; the side - issuing it then waits either for a timeout of the device transmit - timer, or for a DEVDACK packet with the correct ID value to be - received from the remote. If the timer expires before a correct - DEVDACK packet is received, the DEVDATA packet is again transmitted, - and the nnumber of device transmit retries incremented. If the - maximum number of retries is reached, the HYDRA session is aborted; - apparently the other is not functioning properly, or data is not - getting through. In either case, the normal operation of the - protocol (transferring files) will also fail. - - The name of the device to which the data is addressed is transmitted - as an uppercase fixed-length three character NUL terminated string. - There are two pre-defined device names as described below. If an - unknown device name is specified, or a duplicate DEVDATA packet is - received (one with the same ID value as a previously received and - acknowledged DEVDATA packet), the packet is simply discarded after - transmitting a DEVDACK packet with the corresponding ID value. - - DEVDATA and DEVDACK packets do not reset the braindead timer. They - operate independently from the normal protocol. Device packets may - only be transmitted after the initialization sequence, and before - both sides have completed their batch. If a DEVDATA packet has not - yet been acknowledged, the end of session sequence is delayed until - a DEVDACK packet has been sent in response. - - - DEVDATA packet dependent data - +--------------------------------------------------+ - | Long DEVDATA packet ID value | - +--------------------------------------------------+ - | 3 character uppercase device name, NUL terminated| - +--------------------------------------------------+ - ~ Variable length device data block (0-2048) ~ - +--------------------------------------------------+ - - - Predefined device names - +---+-------------------------------------+ - |Dev|Description | - +---+-------------------------------------+ - |MSG|Print data in protocol message window| - |CON|Print data to user console | - +---+-------------------------------------+ - - The MSG device may be used to notify the remote of protocol-specific - issues, i.e. "One-way transfer mode". Such messages may be logged, - but should not be considered to be machine-readable. - - The CON device may be used to implement a "chat" or conversation - feature. This is a special case in which a session *can* be prolonged - after end of batch, but not against the remote's will. - While chat is enabled, there is no transition from the REND to the - END transmitter state. When a CON device packet is transmitted in - chat mode and the txstate is REND, the own braindead timer is reset. - If the other side does initiate the end sequence by sending an END - packet, the chat mode is immediately terminated and the session ended - in a clean manner. If one side does not want to (continue) chat, and - the other side does not comply, the one side will abort after a - braindead timeout, so this chat system does not mean a security flaw. - Each side is responsible for keeping the session going on his end - until its own user has finished chatting. It is suggested that the - software apply a timeout of say 1 minute to keyboard input, ending - the chat automatically if the user stops typing but does not exit - chat mode. Also, the chat mode should be initiated with a special key - so that it can not erronously be started or prolonged. - - - DEVDACK packet - --------------------------------------------------------------------- - Transmitted in response to a DEVDATA packet. The device data ID value - must correspond to the ID of the previously received DEVDATA packet. - - - DEVDACK packet data - +---------------------------+ - | Long device data ID value | - +---------------------------+ - - - -DEVICE sender (devtxstate HTD_...) -+--------+------------------------------+--------------------------+----------+ -|State |Predicate(s) |Action(s) |Next state| -+--------+------------------------------+--------------------------+----------+ -|Begin | |devtxid = 0 |DONE | -| | |reset devtxtimer | | -+--------+-+----------------------------+--------------------------+----------+ -|DONE |1|wish to send device data & |increase devtxid |DATA | -| | |other side allows DEV pkts |devtxretries = 0 | | -| | | |reset devtxtimer | | -| +-+----------------------------+--------------------------+----------+ -| |2|wish to send device data & |Tell calling function | | -| | |other doesn't allow DEV pkts|it's not on... | | -+--------+-+----------------------------+--------------------------+----------+ -|DATA |1|devtxretries == 10 |Report too many errors |Abort | -| +-+----------------------------+--------------------------+----------+ -| |2|else (devtxretries < 10) |txpkt DEVDATA(id,dev,data)|DACK | -| | | |devtxtimer = timeout | | -+--------+-+----------------------------+--------------------------+----------+ -|DACK |1|rxpkt DACK & |reset devtxtimer |DONE | -| | |DACK(id) == devtxid | | | -| +-+----------------------------+--------------------------+----------+ -| |2|devtxtimer expired |Report devtx timeout |DATA | -| | | |increase devtxretries | | -+--------+-+----------------------------+--------------------------+----------+ - -DEVICE RECEIVER -+--------+------------------------------+--------------------------+----------+ -|State |Predicate(s) |Action(s) |Next state| -+--------+------------------------------+--------------------------+----------+ -|Begin | |devrxid = 0 |DONE | -+--------+-+----------------------------+--------------------------+----------+ -|DONE |1|rxpkt DEVDATA |txpkt DEVDACK(id) |CheckID | -+--------+-+----------------------------+--------------------------+----------+ -|CheckID |1|DEVDATA(id) != devrxid |devrxid = DEVDATA(id) |Process | -| +-+----------------------------+--------------------------+----------+ -| |2|else (apparent duplicate) | |DONE | -+--------+-+----------------------------+--------------------------+----------+ -|Process |1|DEVDATA(dev) == MSG |Print protocol message |DONE | -| +-+----------------------------+--------------------------+----------+ -| |2|DEVDATA(dev) == CON |Output to user console |DONE | -| +-+----------------------------+--------------------------+----------+ -| |3|DEVDATA(dev) == known&ok |Call processing routine |DONE | -| +-+----------------------------+--------------------------+----------+ -| |4|else (unknown/not-ok device)|One-way into bitbucket |DONE | -+--------+-+----------------------------+--------------------------+----------+ - - - Packet length and data block size - --------------------------------------------------------------------- - The maximum length of a source data block (i.e. raw, non processed - input file or device data) is 2048 bytes. The maximum allowed length - of the packet data is 2048 + 8 = 2056 bytes. The eight bytes are to - provide sufficient room for the additional fields in the DATA and - DEVDATA packets. Packetizing adds an additional three to five bytes. - The maximum length of a framed packet being transmitted can be three - times the size of its source data depending on what type of encoding - scheme is used (ASC, HEX, UUE, BIN). The minimum length of a data - block is 64 bytes. - - The block size of DATA packets is based on the physical (DCE) link - speed and is established as follows: - - +---------+------------------+-------------------+ - |DCE speed|Maximum block size|Starting block size| - +---------+------------------+-------------------+ - | 300 bps| 256 bytes | 256 bytes | - | 1200 bps| 512 bytes | 256 bytes | - | 2400 bps| 1024 bytes | 512 bytes | - |>2400 bps| 2048 bytes | 512 bytes | - +---------+------------------+-------------------+ - - The blocksize is initialized to the starting blocksize when a session - is first started. After each kilobyte of file data transmitted, the - blocksize is doubled until it reaches the maximum allowed blocksize. - - When the maximum allowed blocksize has been reached, the variable - keeping track of how many bytes are needed to increase the blocksize - is reset to zero. - - If a request for retransmission (RPOS packet) is received from the - receiver, the blocksize is immediately set to that specified in the - retransmission request. Every time this occurs, the number of bytes - needed to double the blocksize is increased by 1024 with a maximum of - of 8192 bytes. The end result is that more data has to be - successfully transmitted before the blocksize is increased for each - error that occurs. - - The length of a data block is dynamic and always in the range 0-2048 - bytes. A data block is never padded. If there is insufficient data - to fill a block of the current blocksize, the blocksize is adjusted - to the amount of remaining data. - - The blocksize logic is not reset between files in a session. - - - Timers and retry counters - ===================================================================== - Each process in the protocol (transmit, receive and device transmit) - has its own timer and retry counter, and there is one overall - braindead timer. Allowed are 10 tries, the braindead timeout is 120 - seconds, and the other timeouts are based on the speed of the line - and the state of the protocol. It can be calculated as (40960/DCE - rate), with a minimum of 10 seconds and a maximum of 60 seconds. - - +---------+----------+----------+ - |DCE speed|Timeout |Half | - +---------+----------+----------+ - | 300 bps|60 seconds|30 seconds| - | 1200 bps|34 seconds|17 seconds| - | 2400 bps|17 seconds| 8 seconds| - |>2400 bps|10 seconds| 5 seconds| - +---------+----------+----------+ - - If the output buffer is empty, the timeout value is halved. In - general, this is the case if the number of tries is greater than zero - and during the init and end sequences. These timeouts are not fatal - situations, they just give the remote a reasonable amount of time to - receive and respond to a packet before a retry occurs. Duplicate - packets are always identified and ignored. A retry counter is reset - if there is a change of state, or a reposition different from the - previous file offset occurs. - - The braindead timer monitors useful data from the other side: a first - response to a transmitted supervisiory packet, or a received packet - with file data at the correct offset. Device packets and packets that - do not signify any progress of the protocol do not affect the - braindead timer. - - No other timers (such as one between characters in a packet) are - necessary. - - - Aborting a session - ===================================================================== - A session is aborted with five consequetive CAN (^X or ASCII 24) - characters. Whenever a state table mentions "Abort", the following - procedure is to be followed: - - Clear the output buffer and transmit eight CAN characters followed by - ten BS (^H or ASCII 8) characters; wait a few seconds for the data to - be transmitted to the remote, purge the input buffer and exit the - protocol code. - - -GENERAL sender (txstate HTX_...) -+--------+------------------------------+--------------------------+----------+ -|State |Predicate(s) |Action(s) |Next state| -+--------+------------------------------+--------------------------+----------+ -|Begin | |txretries = 0 |START | -| | |reset txtimer | | -| | |blksize = startblksize | | -| | |goodbytes = 0 | | -| | |goodneeded = 1024 | | -| | |braintimer = 120 | | -+--------+-+----------------------------+--------------------------+----------+ -|START |1|txretries == 10 |Report too many errors |Abort | -| +-+----------------------------+--------------------------+----------+ -| |2|else (txretries < 10) |txstr AutoStart |SWAIT | -| | | |txpkt START | | -| | | |txtimer = 5 | | -+--------+-+----------------------------+--------------------------+----------+ -|SWAIT |1|rxpkt START or |txretries = 0 |INIT | -| | |rxpkt INIT |reset txtimer | | -| | | |braintimer = 120 | | -| +-+----------------------------+--------------------------+----------+ -| |2|txtimer expired |Report tx timeout |START | -| | | |increment txretries | | -+--------+-+----------------------------+--------------------------+----------+ -|INIT |1|txretries == 10 |Report too many errors |Abort | -| +-+----------------------------+--------------------------+----------+ -| |2|else (txretries < 10) |txpkt INIT(linkinfo) |INITACK | -| | | |txtimer = timeout/2 | | -+--------+-+----------------------------+--------------------------+----------+ -|INITACK |1|rxpkt INITACK |txretries = 0 |RINIT | -| | | |reset txtimer | | -| | | |braintimer = 120 | | -| +-+----------------------------+--------------------------+----------+ -| |2|txtimer expired |Report tx timeout |INIT | -| | | |increment txretries | | -+--------+-+----------------------------+--------------------------+----------+ -|RINIT |1|rxstate != INIT | |NextFile | -+--------+-+----------------------------+--------------------------+----------+ -|NextFile|1|No files left? |Report end of batch |ToFName | -| | | |Set NULL fileinfo | | -| +-+----------------------------+--------------------------+----------+ -| |2|Can access next file? |Set up fileinfo |ToFName | -| +-+----------------------------+--------------------------+----------+ -| |3|Can't access file? |Report access failure |NextFile | -+--------+-+----------------------------+--------------------------+----------+ -|ToFName | |txsyncid = 0 |FINFO | -| | |txretries = 0 | | -| | |reset txtimer | | -+--------+-+----------------------------+--------------------------+----------+ -|FINFO |1|txretries == 10 |Report too many errors |Abort | -| +-+----------------------------+--------------------------+----------+ -| |2|txretries > 0 |txpkt FINFO(fileinfo) |FINFOACK | -| | | |txtimer = timeout/2 | | -| +-+----------------------------+--------------------------+----------+ -| |3|else (txretries == 0) |txpkt FINFO(fileinfo) |FINFOACK | -| | | |txtimer = timeout | | -+--------+-+----------------------------+--------------------------+----------+ -|FINFOACK|1|NULL fname (end of batch) & |txtimer = idletimeout |REND | -| | |rxpkt FINFOACK |braintimer = 120 | | -| +-+----------------------------+--------------------------+----------+ -| |2|rxpkt FINFOACK & |txpos = FINFOACK(pos) |DATA | -| | |FINFOACK(pos) >= 0 |txretries = 0 | | -| | | |txlastack = 0 | | -| | | |braintimer = 120 | | -| +-+----------------------------+--------------------------+----------+ -| |3|rxpkt FINFOACK & |They already have file |NextFile | -| | |FINFOACK(pos) == -1) |braintimer = 120 | | -| +-+----------------------------+--------------------------+----------+ -| |4|rxpkt FINFOACK & |Skip this file for now |NextFile | -| | |FINFOACK(pos) == -2) |braintimer = 120 | | -| +-+----------------------------+--------------------------+----------+ -| |5|txtimer expired |Report tx timeout |FINFO | -| | | |inrease txretries | | -+--------+-+----------------------------+--------------------------+----------+ -|DATA |1|rxstate != Done & |txtimer = idletimeout |XWAIT | -| | |hdxlink == True | | | -| +-+----------------------------+--------------------------+----------+ -| |2|rxpkt DATAACK & |txlastack = DATAACK(pos) | | -| | |DATAACK(pos) > txlastack | | | -| +-+----------------------------+--------------------------+----------+ -| |3|rxpkt RPOS & |Skip this file for now |SkipFile | -| | |RPOS(pos) < 0 |braintimer = 120 | | -| +-+----------------------------+--------------------------+----------+ -| |4|rxpkt RPOS & |Report too many errors |Abort | -| | |RPOS(id) == txsyncid & | | | -| | |inc txretries == 10 | | | -| +-+----------------------------+--------------------------+----------+ -| |5|rxpkt RPOS & |txpos = RPOS(pos) | | -| | |RPOS(id) != txsyncid & |txsyncid = RPOS(id) | | -| | |RPOS(pos) >= 0 |txretries = 1 | | -| | | |blksize = RPOS(blksize) | | -| | | |goodbytes = 0 | | -| | | |inc goodneeded + 1024 | | -| | | |if (goodneeded > 8192) | | -| | | | goodneeded = 8192 | | -| | | |braintimer = 120 | | -| +-+----------------------------+--------------------------+----------+ -| |6|File seek/read error or |Skip this file for now |SkipFile | -| | |user wishes to skip file | | | -| +-+----------------------------+--------------------------+----------+ -| |7|txwindow & |if (txretries > 0) |DATAACK | -| | |txpos >= txlastack+txwindow | txtimer = timeout/2 | | -| | | |else | | -| | | | txtimer = timeout | | -| +-+----------------------------+--------------------------+----------+ -| |8|Enough room in output & |txpkt DATA(pos,data) | | -| | |more filedata(blksize) to go|txpos += datalen | | -| | | |inc goodbytes + datalen | | -| | | |if goodbytes > goodneeded | | -| | | | Store txpos,blksize | | -| | | | blksize * 2 (max.2048) | | -| +-+----------------------------+--------------------------+----------+ -| |9|End of filedata reached | |EOF | -+--------+-+----------------------------+--------------------------+----------+ -|SkipFile| |txpos = -1 |EOF | -| | |txretries = 0 | | -+--------+-+----------------------------+--------------------------+----------+ -|DATAACK |1|txretries == 10 |Report too many errors |Abort | -| +-+----------------------------+--------------------------+----------+ -| |2|rxpkt DATAACK & |txlastack = DATAACK(pos) |DATA | -| | |DATAACK(pos) > txlastack & |txretries = 0 | | -| | |txpos < DATAACK(pos) + txwin|reset txtimer | | -| +-+----------------------------+--------------------------+----------+ -| |3|rxpkt RPOS |Handle RPOS in state DATA | | -| | | |but stay in this state | | -| +-+----------------------------+--------------------------+----------+ -| |4|txtimer expired |Report tx timeout |DATA | -| | | |increment txretries | | -+--------+-+----------------------------+--------------------------+----------+ -|XWAIT |1|rxstate == Done |reset txtimer |DATA | -| +-+----------------------------+--------------------------+----------+ -| |2|rxpkt DATAACK & |txlastack = DATAACK(pos) | | -| | |DATAACK(pos) > txlastack | | | -| +-+----------------------------+--------------------------+----------+ -| |3|rxpkt RPOS |Handle RPOS in state DATA | | -| | | |but stay in this state | | -| +-+----------------------------+--------------------------+----------+ -| |4|rxpkt IDLE |hdxlink = False |DATA | -| | | |reset txtimer | | -| +-+----------------------------+--------------------------+----------+ -| |5|txtimer expired |txpkt IDLE | | -| | | |txtimer = idletimeout | | -+--------+-+----------------------------+--------------------------+----------+ -|EOF |1|txretries == 10 |Report too many errors |Abort | -| +-+----------------------------+--------------------------+----------+ -| |2|txretries > 0 |txpkt EOF(txpos) |EOFACK | -| | | |txtimer = timeout/2 | | -| +-+----------------------------+--------------------------+----------+ -| |3|else (txretries == 0) |txpkt EOF(txpos) |EOFACK | -| | | |txtimer = timeout | | -+--------+-+----------------------------+--------------------------+----------+ -|EOFACK |1|rxpkt EOFACK |braintimer = 120 |NextFile | -| +-+----------------------------+--------------------------+----------+ -| |2|rxpkt DATAACK & |txlastack = DATAACK(pos) | | -| | |DATAACK(pos) > txlastack | | | -| +-+----------------------------+--------------------------+----------+ -| |3|rxpkt RPOS & |rxpos == -2 |EOF | -| | |RPOS(pos) == -2 & | | | -| | |rxpos != -2 | | | -| +-+----------------------------+--------------------------+----------+ -| |4|rxpkt RPOS & |Handle as in state DATA |DATA | -| | |RPOS(pos) >= 0 | | | -| +-+----------------------------+--------------------------+----------+ -| |5|txtimer expired |Report tx timeout |EOF | -| | | |increment txretries | | -+--------+-+----------------------------+--------------------------+----------+ -|REND |1|rxstate == DONE & |txretries = 0 |END | -| | |devtxstate == DONE | | | -| +-+----------------------------+--------------------------+----------+ -| |2|txtimer expired |txpkt IDLE | | -| | | |txtimer = idletimeout | | -+--------+-+----------------------------+--------------------------+----------+ -|END |1|txretries == 10 | |Abort | -| +-+----------------------------+--------------------------+----------+ -| |2|else (txretries < 10) |txpkt END (twice) |ENDACK | -| | | |txtimer = timeout/2 | | -+--------+-+----------------------------+--------------------------+----------+ -|ENDACK |1|rxpkt END |txpkt END (thrice) |Done | -| +-+----------------------------+--------------------------+----------+ -| |2|txtimer expired |Report tx timeout |END | -| | | |increment txretries | | -+--------+-+----------------------------+--------------------------+----------+ - - - -GENERAL RECEIVER (rxstate HRX_...) -+--------+------------------------------+--------------------------+----------+ -|State |Predicate(s) |Action(s) |Next state| -+--------+------------------------------+--------------------------+----------+ -|Begin | |reset rxtimer |START | -| | |lastrxdlen = startblksize | | -| | |(tx handles braintimer) | | -+--------+-+----------------------------+--------------------------+----------+ -|INIT |1|rxpkt INIT & |txpkt INITACK |FINFO | -| | |INIT(options) are compatible|Set options | | -| | | |braintimer = 120 | | -| +-+----------------------------+--------------------------+----------+ -| |2|INIT(options) not compatible|Report link failure |Abort | -+--------+-+----------------------------+--------------------------+----------+ -|FINFO |1|rxpkt INIT (apparent dup) |txpkt INITACK | | -| +-+----------------------------+--------------------------+----------+ -| |2|rxpkt FINFO & |Report end of batch | | -| | |FINFO(fileinfo) == Empty |txpkt FINFOACK |DONE | -| | | |braintimer = 120 | | -| +-+----------------------------+--------------------------+----------+ -| |3|rxpkt FINFO & |do not want this file | | -| | |we already have file |txpkt FINFOACK(-1) | | -| | | |braintimer = 120 | | -| +-+----------------------------+--------------------------+----------+ -| |4|rxpkt FINFO & |Skip this file for now | | -| | |open/diskspace error |txpkt FINFOACK(-2) | | -| | | |braintimer = 120 | | -| +-+----------------------------+--------------------------+----------+ -| |5|rxpkt FINFO & |rxpos = resume offset |ToData | -| | |file we want to resume | | | -| +-+----------------------------+--------------------------+----------+ -| |6|rxpkt FINFO & |rxpos = 0 |ToData | -| | |new file for us | | | -| +-+----------------------------+--------------------------+----------+ -| |7|rxpkt EOF (apparent dup) |txpkt EOFACK | | -+--------+-+----------------------------+--------------------------+----------+ -|ToData | |txpkt FINFOACK(rxpos) |DATA | -| | |rxsyncid = 0 | | -| | |rxlastsync = 0; | | -| | |rxretries = 0 | | -| | |reset rxtimer | | -| | |braintimer = 120 | | -+--------+-+----------------------------+--------------------------+----------+ -|DATA |1|rxpkt FINFO (apparent dup) |txpkt FINFOACK(rxpos) | | -| +-+----------------------------+--------------------------+----------+ -| |2|rxpkt DATA & |Store data | | -| | |DATA(pos) == rxpos |rxpos += datalen | | -| | | |rxretries = 0 | | -| | | |rxlastsync = rxpos | | -| | | |reset rxtimer | | -| | | |braintimer = 120 | | -| | | |if (rxwindow) | | -| | | | txpkt DATAACK(rxpos) | | -| +-+----------------------------+--------------------------+----------+ -| |3|rxpkt DATA & |Report bad rxpos |BadPos | -| | |DATA(pos) != rxpos | | | -| +-+----------------------------+--------------------------+----------+ -| |4|rxpkt EOF & |Close file, received ok |OkEOF | -| | |EOF(pos) == rxpos | | | -| +-+----------------------------+--------------------------+----------+ -| |5|rxpkt EOF & |Close, save for resume |OkEOF | -| | |EOF(pos) == -2 | | | -| +-+----------------------------+--------------------------+----------+ -| |6|rxpkt EOF & |Report bad EOF |BadPos | -| | |EOF(pos) != rxpos | | | -| +-+----------------------------+--------------------------+----------+ -| |7|File write error or |Close, save for resume | | -| | |user wishes to skip file |rxpos = -2 | | -| +-+----------------------------+--------------------------+----------+ -| |8|rxpkt IDLE & |braintimer = 120 | | -| | |hdxlink == False | | | -+--------+-+----------------------------+--------------------------+----------+ -|BadPos |1|DATA/EOF(pos) <= rxlastsync |rxretries = 0 |Timer | -| | | |reset rxtimer | | -| | | |rxlastsync = pos | | -| +-+----------------------------+--------------------------+----------+ -| |2|DATA/EOF(pos) > rxlastsync |rxlastsync = pos |Timer | -+--------+-+----------------------------+--------------------------+----------+ -|Timer |1|rxtimer expired | |HdxLink | -| +-+----------------------------+--------------------------+----------+ -| |2|else (rxtimer not expired) | |DATA | -+--------+-+----------------------------+--------------------------+----------+ -|HdxLink |1|rxretries > 4 & |hdxlink = True |Retries | -| | |txstate < REND & |rxretries = 0 | | -| | |originator == False & | | | -| | |hdxlink == False | | | -| +-+----------------------------+--------------------------+----------+ -| |2|else (above not the case) | |Retries | -+--------+-+----------------------------+--------------------------+----------+ -|Retries |1|inc rxretries == 10 |Report too many errors |Abort | -| +-+----------------------------+--------------------------+----------+ -| |2|rxretries == 1 |increase rxsyncid |RPos | -| +-+----------------------------+--------------------------+----------+ -| |3|else (rxretries > 1) | |RPos | -+--------+-+----------------------------+--------------------------+----------+ -|RPos | |lastrxdatalen/=2 (min.64) |DATA | -| | |txpkt RPOS (rxpos, | | -| | | lastrxdatalen,rxsyncid)| | -| | |rxtimer = timeout | | -+--------+------------------------------+--------------------------+----------+ -|OkEOF | |txpkt EOFACK |FINFO | -| | |reset rxtimer | | -| | |braintimer = 120 | | -+--------+-+----------------------------+--------------------------+----------+ -|DONE |1|rxpkt FINFO (apparent dup) |txpkt FINFOACK(-2) | | -+--------+-+----------------------------+--------------------------+----------+ - - - HYDRA in FidoNet technology mailers - ===================================================================== - HYDRA is suitable for use in FidoNet mailers. It can be implemented - for EMSI and FTS-6 mail sessions. The FTS-6 (YooHoo) capability bit - for HYDRA is 0x0020 (DOES_HYDRA). The EMSI and IEMSI protocol - capability flag is HYD. - - When utilizing HYDRA in a mail session, two complete batches are - always performed. Little else differs from a normal FTS-6 ZedZap mail - session. The first batch is used to transmit all mail, files, and - file requests by both sides. The second batch is always performed, - sending nothing if there are no file requests to honor. The data - buffers are not purged between the two batches since HYDRA ignores - any leftovers from the previous batch (END packets, etc.). - - To integrate HYDRA into an existing mailer, the same code used for - the ZedZap session flow can be used, but instead of one transmit and - one receive session, two transmit sessions (or batches) are used. - When the HYDRA end of batch is initiated it will not be terminated - until an end of batch has been received from the remote and the end - of session sequence has been finished. - - Fido and FidoNet are registered marks of Tom Jennings and Fido - Software. - - - Error detection using CRCs - ===================================================================== - CRC (Cyclic Redundancy Check) values only provide their promised - maximum error detection capability when properly applied, which - involves calculating and transmitting low-bit first, presetting the - CRC with all ones, and transmitting the ones' complement of the - result. The receiver also initializes to all ones, processes all of - the data AND the following CRC, and the result should match a "magic - value" which is 0xf0b8 for the 16-bit CRC and 0xdebb20e3 for the - 32-bit CRC. - - The easiest and fastest way to perform CRC calculations is by using a - table that does the algorithm's shift-operations in 8-bits at a time. - - - CRC-16 error detection - --------------------------------------------------------------------- - 16-bit CRC using the CCITT CRC-16 polynomial. This is the default at - startup, and always used for HEX packets even if both sides are - capable of handling 32-bit CRCs. - - This CRC-16 is not identical to the one used by the Xmodem and Zmodem - file transfer protocols. The polynomial is the same - (X^16+X^12+X^5+X^0 or 0x8408) but the bit-ordering is the opposite, - and preconditioning and postconditioning is used as in 32-bit CRCs. - This method is also used by the European version of X.25. - - The 16-bit CRC table is created as follows (pseudocode, the variable - CRC16 and the table of 256 entries are 16-bit unsigned integers): - - FOR (i=0 TO 255) - { - CRC16=i - FOR (N=1 TO 8) - { - IF (CRC16 AND 1) - CRC16=(CRC16 >> 1) XOR 0x8408 - ELSE - CRC16=CRC16 >> 1 - } - CRC16TAB[i]=CRC16; - } - - When processing data, each byte is run through the CRC calculation - routine as follows (variable CRC stores the 16-bit CRC value/result, - C is the next 8-bit char): - - CRC=CRC16TAB[(CRC XOR C) AND 0xff] XOR ((CRC>>8) AND 0x00ff) - - - CRC-32 error detection - --------------------------------------------------------------------- - 32-bit CRC using the CCITT CRC-32 polynomial. Support of CRC-32 is - optional and signalled in the INIT packet. - - If both sides indicate they can handle CRC-32, all packets except - those transmitted in HEX format use this algorithm instead of CRC-16 - to improve error detection. - - This CRC-32 is identical to the one used by the Zmodem protocol. - The polynomial is (0xedb88320): - - X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+X^0 - - The principal method of calculation, transmission, and checking is - identical to CRC-16 as described above, but the "magic value" for - 32-bit CRC is 0xdebb20e3. - - The CRC-32 table is created as follows (pseudocode, the variable - CRC32 and the table of 256 entries are 32-bit unsigned integers): - - FOR (i=0 TO 255) - { - CRC32=i - FOR (N=1 TO 8) - { - IF (CRC32 AND 1) - CRC32 = (CRC32 >> 1) XOR 0xedb88320 - ELSE - CRC32 = CRC32 >> 1 - } - CRC32TAB[i] = CRC32; - } - - When processing data, each byte is run through the CRC calculation - routine as follows (variable CRC stores the 32-bit CRC value/result, - C is the next 8-bit character): - - CRC=CRC32TAB[(CRC XOR C) AND 0xFF] XOR ((CRC>>8) AND 0x00ffffff) - - - The authors - ===================================================================== - The authors can be reached at the following addresses: - - Joaquim H. Homrighausen Arjen G. Lentz - 389, route d'Arlon Lentz Software Development - L-8011 Strassen Langegracht 7B - Luxembourg 3811 BT Amersfoort - The Netherlands - joho@ae.lu - FidoNet 2:270/17 aglentz@fido.lu - FidoNet 2:283/512 - - - The name HYDRA - ===================================================================== - Hydra is a greek mythological creature (the watersnake). Like the - Nemeic lion, Hydra is the daughter of the giant Typhon and the snake - Echidna. - - She grew up in the marshes of Lerna near/in Argolis (Argos). There - she ate entire herds of cattle and destroyed large cropfields. Later, - she lived in caves on a hill near the spring of Amymone. - - Hydra is a monstrous large snake with nine heads: eight mortal ones, - and one (the middle one) immortal. She was defeated and killed by - Heracles (Hercules) - son of Zeus and Alcemene, grandson of Perseus - - as the second of his twelve tasks, with the help of his cousin - Iolaos. Every time he cut of one of the heads with his sword, two new - heads grew in its place. So Iolaos scorched the wound of each cut off - head with burning branches so the head couldn't grow on again. - - Heracles buried the last and immortal head under a stone nearby. He - also dipped his arrows in Hydra's poisonous blood, thereafter the - wounds caused by those arrows were incurable. - - - Also star constellation (sign of the watersnake) in the equatorial - zone. - - - Also a type of sweetwater polip (the Hydroidea Thin, tubeshaped body - can be full contracted, just like the six (or more) tentacles. There - is no generation change, the gender-products grow directly on the - body. - - The animals catch their prey with nettlecells, and are very verocious. - They can be found in various stilstanding and flowing water and were - first described by Anthonie van Leeuwenhoek in the year 1704. - - - Also small island (spelled Idhra in modern Greek) of the Sargonic - group in the Aegean Sea, just of the eastern tip of the Argolis - peninsula of the Peloponesus (Attika). Its length (NE/SW) is 21 km, - with a total area of 49,6 square km. Its highest point is 597 meters - above sea level. Population of 2794 (latest census: 1981). Only one - real city with the same name as the island. Once quite wooded and - well watered, now denuded and dry, with almost no arable land - (infertile limestone). Certain times of the year the people have to - ship in water from the main land. Its Turkish name is Camliza which - means "Place of Pines". - - References: - Dutch: Oosthoeks Encyclopedie - Grote Winklerprins Encyclopedie - English: Encyclopaedia Brittannica - -
+Document: FSC-0072 +Version: 001 +Date: 21-Feb-1993 + + + + + The HYDRA file transfer protocol + + Joaquim H. Homrighausen and Arjen G. Lentz + + + + +Status of this document: + + This FSC suggests a proposed protocol for the FidoNet(r) community, + and requests discussion and suggestions for improvements. + Distribution of this document is subject to the restrictions listed + below. + + Fido and FidoNet are registered marks of Tom Jennings and Fido + Software. + + + + + --------------------------------------------------------------------- + Copyright 1991-1993 Joaquim H. Homrighausen. All rights reserved. + Copyright 1991-1993 Lentz Software Development. All rights reserved. + --------------------------------------------------------------------- + + + Restrictions + ===================================================================== + You are granted a license to implement the HYDRA file transfer + protocol, HYDRA hereafter, in your own programs and/or use the sample + source code and adapt these to your particular situation and needs; + subject to the following conditions: + + o You must refer to it as the HYDRA file transfer protocol, and you + must give credit to the authors of HYDRA in any information screens + or literature pertaining to your programs that contains other such + information (credits, your own copyrights, etc.). + + o HYDRA will always remain backwards compatible with previous + revisions. HYDRA allows for expansion of its features without + interfering with previous revisions. It is, however, important that + different people do not expand the protocol in different directions. + We therefore ask you to contact us if you have any needs/ideas + regarding HYDRA, so development can be synchronized and beneficial + to all. + + o If your implementation cannot converse with past or future revisions + as supplied by us, then you must refer to it as "HYDRA derived", or + as "a variation of HYDRA", or words to that effect. + + Permission is hereby granted to the FTSC (FidoNet Technical Standards + Committee) and other technical organisations to republish this + document in its entirety. Librarians may change the title page and + page headers to match their library format as long as all copyrights + and body text remain unaltered. The original document name and source + must be mentioned in any republished versions of this document. + + No organization, company, person, or other being may impose any fees + for any reason for providing this document. This document may not be + sold or otherwise transferred for personal or company gain under any + circumstances. + + + Disclaimer + ===================================================================== + This information is provided "as is" and comes with no warranties of + any kind, either expressed or implied. There is no support available + for this package. It's intended to be used by programmers and + developers. + + In no event shall the authors be liable to you or anyone else for any + damages, including any lost profits, lost savings or other incidental + or consequential damages arising out of the use or inability to use + this information. + + + Revision timestamps + ===================================================================== + 001 0x2b1aab00 Dec 01, 1992 + + + Introduction + ===================================================================== + This document will not attempt to convince the reader that HYDRA is + of value to him/her or that it is better than other file transfer + protocols, it will simply describe the protocol. Just to get it out + of the way, HYDRA is not the ultimate file transfer protocol. + + The authors do, however, feel that it offers an significant + improvement over those file transfer protocols available today. HYDRA + is a bi-directional protocol with the ability to receive and send + files simultaneously. There are other bi-directional file transfer + protocols, but to the authors' knowledge no public specifications + exist. + + HYDRA owes much to Zmodem and its designer, Chuck Forsberg as well as + to Janus, designed by Rick Huebner. We would like to think of HYDRA + as a combination of both with a few extra options installed. + + The basic concept of a bi-directional file transfer protocol is + simple. Both data channels are utilized to transmit and receive files + simultaneously. I.e. two 100 kb files can be exchanged between two + parties in the time it takes a fully streaming uni-directional file + transfer protocol to transmit one of the files. + + + Protocol design + ===================================================================== + The ultimate goal when designing HYDRA was to design a protocol that + is as simple and robust as possible; complexity increase the problem + of faulty implementations. + + The obvious function of a file transfer protocol is to transport a + collection of data from its source to its destination as efficient + possible and without jeopardizing the integrity of the data. + + The lack of data compression and lost packet management (as used in + Kermit and Super Kermit) is intentional. The authors feel that this + unnecessarily increases the complexity of the protocol. + + While HYDRA performs to its best on full duplex links, it should be + possible to use it on links using proprietary protocols such as the + US Robotics HST protocol which features one 14.4 kbps data channel + and one 450 bps back channel. + + The protocol design should be flexible enough for future enhancements + while maintaining backward compatibility. + + + Protocol requirements and restrictions + ===================================================================== + HYDRA require that the link can handle ASCII character 24 (DLE) as + well as all ASCII characters in the range 32 through 126. All other + characters can be escaped or encoded by the protocol as required by + the link. + + Capability of the computer to perform simultaneous serial I/O as well + as simultaneous serial I/O combined with disk access is preferred, + but can be circumvented by opting for windowed transmission instead + of full streaming. + + HYDRA calls for the ability to check whether there is anything in the + serial input buffer (i.e. "peek-ahead"), but it doesn't mind if it + has to wait for a second if there is no data available (using for + instance the UNIX alarm() mechanism). + + The protocol is extremely tolerant with timeouts (i.e. satellite or + network delays) while still maintaining maximum reliability, + robustness, and throughput. + + + Terms and definitions + ===================================================================== + A BYTE An 8-bit unsigned character. + A WORD A 16-bit unsigned integer. + A DWORD A 32-bit unsigned integer. + A LONG A 32-bit SIGNED integer. + FILE OFFSETS (position) A long. + NUL The ASCII character 0. + BS The ASCII character 8. + CR The ASCII character 13. + XOFF The ASCII character 17. + XON The ASCII character 19. + H_DLE The HYDRA link escape character, ASCII 24 + (^X). + SP or SPACE The ASCII character 32. + UNIX timestamp A specific time and date expressed as the + number of seconds since midnight, January + 1st, 1970. All UNIX timestamps used in HYDRA + are expressed in local time. + + Multi-byte items are transmitted in "low-byte first" order, so big- + endian CPUs (like 680xx) need to do some byteswapping, depending on + the implementation. + + Values preceded by '0x' are in hexadecimal notation (base 16, 0..9 + a..f). All values transmitted in hexadecimal notation must be + converted to lowercase characters and left-padded to their full + size with '0' prior to transmission. E.g. a WORD with the value 255 + (decimal) is expressed as 00ff. A LONG with the value 255 (decmial) + is expressed as 000000ff. + + In formulas, "AND" means bitwise AND, "XOR" means bitwise Exclusive + OR, "NOT" is ones complement (i.e. all zeros become ones, all ones + become zeros). The ">>" is a shift operation to the right, "R >> 3" + means shift R three bits to the right. + + + General packet format + ===================================================================== + All data exchange is done with framed packets protected by 16 or 32 + bit CRC values appended to the packet data and packet type (low- + byte first). The only exception to this is the cancel sequence of 5 + consecutive H_DLE characters. + + All packets except those with the type DATA are followed by a CR + (ASCII 13) to help get through some buffered environments and aid + possible debugging and/or tracing. If requested by the other side in + its INIT packet, packets can also be prefixed by a specific data + string which can include NULs, delays or break signals. Refer to the + section on the INIT packet for more information. + + + Format of unframed packet + + +------------------------------------------+ + ~ Zero or more bytes packet dependent data ~ + +------------------------------------------+ + | Packet type byte | + +------------------------------------------+ + | CRC-16/32 of packet data and packet type | + +------------------------------------------+ + + + Table of packet types + + +--------+---------+-----+--------------------------------+ + |Name |Character|ASCII|Description | + +--------+---------+-----+--------------------------------+ + |START | 'A' | 65 |Startup sequence | + |INIT | 'B' | 66 |Session initialisation | + |INITACK | 'C' | 67 |Response to INIT packet | + |FINFO | 'D' | 68 |File information | + |FINFOACK| 'E' | 69 |Response to FINFO packet | + |DATA | 'F' | 70 |File data packet | + |DATAACK | 'G' | 71 |File data position ACK packet | + |RPOS | 'H' | 72 |Reposition request packet | + |EOF | 'I' | 73 |End of file packet | + |EOFACK | 'J' | 74 |Response to EOF packet | + |END | 'K' | 75 |End of session | + |IDLE | 'L' | 76 |Idle (just saying I'm alive) | + |DEVDATA | 'M' | 77 |Data to specified device (1)| + |DEVDACK | 'N' | 78 |Response to DEVDATA packet (1)| + +--------+---------+-----+--------------------------------+ + + (1) Support for DEVDATA and DEVDACK types is optional and indicated + in INIT state of a HYDRA session. + + + Format of framed packet + + +----------------------+--------------------+ + | H_DLE |Packet format byte | + +----------------------+--------------------+ + ~ Encoded packet ~ + +----------------------+--------------------+ + | H_DLE |End of framed packet| + +----------------------+--------------------+ + + + Table of packet formats + + +----+---------+-----+--------------------------------+ + |Name|Character|ASCII|Description | + +----+---------+-----+--------------------------------+ + |END | 'a' | 97 |End of framed packet | + |BIN | 'b' | 98 |Binary packet | + |HEX | 'c' | 99 |Hex encoded packet | + |ASC | 'd' | 100 |Shifted 7-bit encoded packet (1)| + |UUE | 'e' | 101 |UUencoded packet (1)| + +----+---------+-----+--------------------------------+ + + (1) Support for ASC and/or UUE formats is optional and indicated in + the INIT state of a HYDRA session. + + + Packet sender and receiver state charts + --------------------------------------------------------------------- + +TXPKT (Sender) ++--------+------------------------------+--------------------------+----------+ +|State |Predicate(s) |Action(s) |Next state| ++--------+-+----------------------------+--------------------------+----------+ +|Begin |1|pkttype == START or |format = HEXPKT |Format | +| | |pkttype == INIT or | | | +| | |pkttype == INITACK or | | | +| | |pkttype == END or | | | +| | |pkttype == IDLE | | | +| +-+----------------------------+--------------------------+----------+ +| |2|Escape 8th bit (7 bit link) | |Coding | +| +-+----------------------------+--------------------------+----------+ +| |3|else (no spc.pkt, 8bit link)|format = BINPKT |Format | ++--------+-+----------------------------+--------------------------+----------+ +|Coding |1|escape all control chars & |format = UUEPKT |Format | +| | |UUENCODED packets allowed | | | +| +-+----------------------------+--------------------------+----------+ +| |2|ASCII packets allowed |format = ASCPKT |Format | +| +-+----------------------------+--------------------------+----------+ +| |3|7 bit link & |format = HEXPKT |Format | +| | |escape all control chars & | | | +| | |UUE/ASC pkts not allowed | | | ++--------+-+----------------------------+--------------------------+----------+ +|Format | |Append format byte to data|CRC | ++--------+-+----------------------------+--------------------------+----------+ +|CRC |1|format != HEXPKT & |Calc CRC-32 (data,pkttype)|Encode | +| | |CRC-32 allowed |Append one's complement of| | +| | | |CRC to data, lowbyte first| | +| +-+----------------------------+--------------------------+----------+ +| |2|else (HEXPKT or no CRC-32) |Calc CRC-16 (data,pkttype)|Encode | +| | | |Append one's complement of| | +| | | |CRC to data, lowbyte first| | ++--------+-+----------------------------+--------------------------+----------+ +|Encode |1|format == BINPKT |BIN escape databuf |Prefix | +| +-+----------------------------+--------------------------+----------+ +| |2|format == HEXPKT |HEX encode databuf |Prefix | +| +-+----------------------------+--------------------------+----------+ +| |3|format == ASCPKT |ASC encode/escape databuf |Prefix | +| +-+----------------------------+--------------------------+----------+ +| |4|format == UUEPKT |UUE encode databuf |Prefix | ++--------+-+----------------------------+--------------------------+----------+ +|Prefix |1|No more prefix characters | |Transmit | +| +-+----------------------------+--------------------------+----------+ +| |2|Prefix character ASCII 221 |Send 1 second break signal| | +| +-+----------------------------+--------------------------+----------+ +| |3|Prefix character ASCII 222 |1 second delay | | +| +-+----------------------------+--------------------------+----------+ +| |4|Prefix character ASCII 223 |Transmit NUL (ASCII 0) | | +| +-+----------------------------+--------------------------+----------+ +| |5|else (any other character) |Transmit character | | ++--------+-+----------------------------+--------------------------+----------+ +|Transmit| |Transmit H_DLE,format byte|Suffix | +| | |Transmit encoded buffer | | +| | |Transmit H_DLE,pktend byte| | ++--------+-+----------------------------+--------------------------+----------+ +|Suffix |1|pkttype != DATA & |Transmit CR,LF (ASC 13,10)|Done | +| | |pktformat != BINPKT | | | +| +-+----------------------------+--------------------------+----------+ +| |2|else (pkttype == DATA or | |Done | +| | | pktformat == BINPKT) | | | ++--------+-+----------------------------+--------------------------+----------+ + + +RXPKT (Receiver) ++--------+------------------------------+--------------------------+----------+ +|State |Predicate(s) |Action(s) |Next state| ++--------+------------------------------+--------------------------+----------+ +|Reset | |rxdle = 0 |NextByte | +| | |format = 0 | | +| | |pktlen = 0 | | ++--------+-+----------------------------+--------------------------+----------+ +|NextByte|1|User wishes to abort session|Report reason for abort |Abort | +| | |or carrier lost | | | +| +-+----------------------------+--------------------------+----------+ +| |2|Byte available in inputbuf | |StripIn | +| +-+----------------------------+--------------------------+----------+ +| |3|braintimer expired |Report braindead situation|Abort | +| +-+----------------------------+--------------------------+----------+ +| |4|Any other timer expired |Tell responsible party | | ++--------+-+----------------------------+--------------------------+----------+ +|StripIn |1|Escape 8th bit (7 bit link) |c = c AND 0x7f (strip 8th)|StripC | +| +-+----------------------------+--------------------------+----------+ +| |2|else (8 bit link) | |StripC | ++--------+-+----------------------------+--------------------------+----------+ +|StripC |1|Escape ctlchars with 8th set|n = c AND 0x7f (strip 8th)|Process | +| +-+----------------------------+--------------------------+----------+ +| |2|else (let 8 bit ctl through)|n = c |Process | ++--------+-+----------------------------+--------------------------+----------+ +|Process |1|c == H_DLE |increment rxdle |DLE | +| +-+----------------------------+--------------------------+----------+ +| |2|Escape XON/XOFF & |Eat these |NextByte | +| | |n == XON or n == XOFF | | | +| +-+----------------------------+--------------------------+----------+ +| |3|Escape all control chars & |Eat these |NextByte | +| | |n < 32 or n == 127 | | | +| +-+----------------------------+--------------------------+----------+ +| |4|rxdle > 0 | |Escape | +| +-+----------------------------+--------------------------+----------+ +| |5|else (no eating or escaping)| |Store | ++--------+-+----------------------------+--------------------------+----------+ +|DLE |1|rxdle == 5 |Report remote wants abort |Abort | +| +-+----------------------------+--------------------------+----------+ +| |2|else (rxdle < 5) | |NextByte | ++--------+-+----------------------------+--------------------------+----------+ +|Escape |1|c == PKTEND | |PktEnd | +| +-+----------------------------+--------------------------+----------+ +| |2|c == BINPKT |format = BINPKT |PktStart | +| +-+----------------------------+--------------------------+----------+ +| |3|c == HEXPKT |format = HEXPKT |PktStart | +| +-+----------------------------+--------------------------+----------+ +| |4|c == ASCPKT |format = ASCPKT |PktStart | +| +-+----------------------------+--------------------------+----------+ +| |5|c == UUEPKT |format = UUEPKT |PktStart | +| +-+----------------------------+--------------------------+----------+ +| |6|else (normal escaped char) |c = c XOR 0x40 |Store | +| | | |rxdle = 0 |Store | ++--------+-+----------------------------+--------------------------+----------+ +|Store |1|format == 0 |Garbage |NextByte | +| +-+----------------------------+--------------------------+----------+ +| |2|pktlen >= maximum |Pkt too long / lost PKTEND|Reset | +| +-+----------------------------+--------------------------+----------+ +| |3|else (fmt > 0 & len < max) |Append c to databuffer |NextByte | +| | | |increment pktlen | | ++--------+-+----------------------------+--------------------------+----------+ +|PktStart| |rxdle = 0 |NextByte | +| | |pktlen = 0 | | ++--------+-+----------------------------+--------------------------+----------+ +|PktEnd |1|format == 0 |End without start, garbage|Reset | +| +-+----------------------------+--------------------------+----------+ +| |2|format == BINPKT |(No more decoding needed) |CalcCRC | +| +-+----------------------------+--------------------------+----------+ +| |3|format == HEXPKT |ok = Decode HEXPKT |CheckDec | +| +-+----------------------------+--------------------------+----------+ +| |4|format == ASCPKT |ok = Decode ASCPKT |CheckDec | +| +-+----------------------------+--------------------------+----------+ +| |5|format == UUEPKT |ok = Decode UUEPKT |CheckDec | ++--------+-+----------------------------+--------------------------+----------+ +|CheckDec|1|ok (no errors during decode)| |CalcCRC | +| +-+----------------------------+--------------------------+----------+ +| |2|else (errors in decoding) |Bad encoding, ignore pkt |Reset | ++--------+-+----------------------------+--------------------------+----------+ +|CalcCRC |1|format != HEXPKT & |Calc CRC-32 over databuf |CheckCRC | +| | |CRC-32 allowed |ok = (crc == 0xdebb20e3) | | +| | | |pktlen = pktlen - 4 | | +| +-+----------------------------+--------------------------+----------+ +| |2|else (HEXPKT or no CRC-32) |Calc CRC-16 over databuf |CheckCRC | +| | | |ok = (crc == 0xf0b8) | | +| | | |pktlen = pktlen - 2 | | ++--------+-+----------------------------+--------------------------+----------+ +|CheckCRC|1|ok (CRC matched magic) |pkttype = last byte of buf|Reset | +| | | |pktlen = pktlen - 1 | | +| | | |Hand pkt to higher level | | +| +-+----------------------------+--------------------------+----------+ +| |2|else (CRC check failed) |Bad CRC, ignore packet |Reset | ++--------+-+----------------------------+--------------------------+----------+ + + + + BIN packet format + --------------------------------------------------------------------- + The binary packet format require an 8-bit data channel. If requested + by either side, one or more sets of control characters are escaped. + In this case, when one of these characters appears in an unframed + packet, a H_DLE is sent followed by the character XOR 0x40. The H_DLE + character itself is always transmitted in this fashion. On the + receiver side, if the character after a H_DLE is not one of the + packet format bytes, this character is decoded using XOR 0x40 again. + + +BINPKT Escaping ++--------+------------------------------+--------------------------+----------+ +|State |Predicate(s) |Action(s) |Next state| ++--------+------------------------------+--------------------------+----------+ +|Begin | |txlastc = 0 |NextByte | ++--------+-+----------------------------+--------------------------+----------+ +|NextByte|1|No more bytes to process | |Done | +| +-+----------------------------+--------------------------+----------+ +| |2|Escape ctlchars with 8th set|n = c AND 0x7f (strip 8th)|Escape | +| +-+----------------------------+--------------------------+----------+ +| |3|else (let 8 bit ctl through)|n = c |Escape | ++--------+-+----------------------------+--------------------------+----------+ +|Escape |1|n == H_DLE |Output H_DLE |Output | +| | | |c = c XOR 0x40 | | +| +-+----------------------------+--------------------------+----------+ +| |2|Escape XON/XOFF & |Output H_DLE |Output | +| | |n == XON or n == XOFF |c = c XOR 0x40 | | +| +-+----------------------------+--------------------------+----------+ +| |3|Escape Telenet & |Output H_DLE |Output | +| | |n == CR & |c = c XOR 0x40 | | +| | |txlasc == '@' | | | +| +-+----------------------------+--------------------------+----------+ +| |4|Escape all control chars & |Output H_DLE |Output | +| | |n < 32 or n == 127 |c = c XOR 0x40 | | +| +-+----------------------------+--------------------------+----------+ +| |5|else (any other character) | |Output | ++--------+-+----------------------------+--------------------------+----------+ +|Output | |Store c |NextByte | +| | |txlastc = c | | ++--------+------------------------------+--------------------------+----------+ + + + + HEX packet format + --------------------------------------------------------------------- + Supported by all implementations, this packet format is used in + worst-case situations and upon startup of a session when it is not + yet known what restrictions the line and the other side will place on + the link. + + Packet types always transmitted in HEX format are: START, INIT, + INITACK, IDLE, END. + + HEX format packets always use a 16-bit CRC. + + HEX packets assume a 7-bit link, escaping all control characters and + filtering all control characters upon receipt. + + ASCII characters in the range 128-255 (high bit set) are encoded by + first transmitting a backslash ('\') character (ASCII 92), followed + by the character in two lowercase hex-digits (bits 4-7 in first + digit, bits 0-3 in second). + + Uppercase hex-digits are not permitted. + + The backslash character itself is transmitted as two backslashes. + + ASCII characters in the range 0-31 and 127 (all control characters) + are escaped with H_DLE in the same fashion as in binary (BIN) + packets. + + Decoded byte 1 + +------+ + 76543210 + +--++--+ + Encoded h1 h2 + + +HEXPKT Encoding/Escaping ++--------+------------------------------+--------------------------+----------+ +|State |Predicate(s) |Action(s) |Next state| ++--------+-+----------------------------+--------------------------+----------+ +|NextByte|1|No more bytes to process | |Done | +| +-+----------------------------+--------------------------+----------+ +| |2|High bit of c set |Output \ (backslash) | | +| | | |Output hexdigit(c bit 4-7)| | +| | | |Output hexdigit(c bit 0-3)| | +| +-+----------------------------+--------------------------+----------+ +| |3|c < 32 or c == 127 |Output H_DLE | | +| | | |Output (c XOR 0x40) | | +| +-+----------------------------+--------------------------+----------+ +| |4|c == \ (backslash) |Output \ (backslash) | | +| | | |Output \ (backslash) | | +| +-+----------------------------+--------------------------+----------+ +| |5|else (any other character) |Output c | | ++--------+-+----------------------------+--------------------------+----------+ + + +HEXPKT Decoding ++--------+------------------------------+--------------------------+----------+ +|State |Predicate(s) |Action(s) |Next state| ++--------+-+----------------------------+--------------------------+----------+ +|NextByte|1|No more bytes to process | |Done OK | +| +-+----------------------------+--------------------------+----------+ +| |2|c == \ (backslash) | |Escape | +| +-+----------------------------+--------------------------+----------+ +| |3|else (any other character) |Output c |Escape | ++--------+-+----------------------------+--------------------------+----------+ +|Escape |1|No more bytes to process |Premature end of data |Error | +| +-+----------------------------+--------------------------+----------+ +| |2|c == \ (backslash) |Output \ (backslash) | | +| +-+----------------------------+--------------------------+----------+ +| |3|c == lowercase hexdigit |Save c, move ptr to next |NextHex | +| +-+----------------------------+--------------------------+----------+ +| |4|else (all other characters) |Invalid character |Error | ++--------+-+----------------------------+--------------------------+----------+ +|NextHex |1|No more bytes to process |Premature end of data |Error | +| +-+----------------------------+--------------------------+----------+ +| |2|c == lowercase hexdigit |Output (1st << 4 OR 2nd) |NextByte | +| +-+----------------------------+--------------------------+----------+ +| |3|else (all other characters) |Invalid character |Error | ++--------+-+----------------------------+--------------------------+----------+ + + + ASC packet format + --------------------------------------------------------------------- + Support of this packet format is optional and signalled in the INIT + packet with the ASC flag in the "Supported options" field. 8-bit data + is transformed into 7-bit data by a simple shift operation. Each byte + is inserted at the top of a shift register, the lower seven bits are + moved out. So seven 8-bit bytes are encoded into eight 7-bit + characters. + + The end of the packet is padded by a maximum of six bits of 0 to make + the number of bits a multiple of seven and thereby creating + complete characters (so the receiver stops decoding when there are + less than seven bits left). The output can contain control + characters, so if escaping of these characters is required, this is + done as in BIN packets using the H_DLE method. + + + Decoded byte 7 byte 6 byte 5 byte 4 byte 3 byte 2 byte 1 + +------++------++------++------++------++------++------+ + 76543210765432107654321076543210765432107654321076543210 + +-----++-----++-----++-----++-----++-----++-----++-----+ + Encoded c8 c7 c6 c5 c4 c3 c2 c1 + + +ASCPKT Encoding/Escaping ++--------+------------------------------+--------------------------+----------+ +|State |Predicate(s) |Action(s) |Next state| ++--------+------------------------------+--------------------------+----------+ +|Reset | |n = 0 (16 bit wide!) |NextByte | +| | |bitshift = 0 | | ++--------+-+----------------------------+--------------------------+----------+ +|NextByte|1|No more bytes to process | |Flush | +| +-+----------------------------+--------------------------+----------+ +| |2|else (more bytes to process)|n = n OR (c << bitshift) |Shift | +| | | |BINPKT escape (n & 0x7f) | | +| | | |n = n >> 7 | | +| | | |increment bitshift | | ++--------+-+----------------------------+--------------------------+----------+ +|Shift |1|bitshift == 7 |BINPKT escape (n & 0x7f) |Reset | +| +-+----------------------------+--------------------------+----------+ +| |2|else (bitshift < 7) | |NextByte | ++--------+-+----------------------------+--------------------------+----------+ +|Flush |1|bitshift > 0 |BINPKT escape (n & 0x7f) |Done | +| +-+----------------------------+--------------------------+----------+ +| |2|else (bitshift == 0) | |Done | ++--------+-+----------------------------+--------------------------+----------+ + +ASCPKT Decoding ++--------+------------------------------+--------------------------+----------+ +|State |Predicate(s) |Action(s) |Next state| ++--------+------------------------------+--------------------------+----------+ +|Begin | |n = 0 (16 bit wide!) |NextByte | +| | |bitshift = 0 | | ++--------+-+----------------------------+--------------------------+----------+ +|NextByte|1|No more bytes to process | |Done OK | +| +-+----------------------------+--------------------------+----------+ +| |2|else (more bytes to process)|c = c AND 0x7f |Shift | +| | | |n = n OR (c << bitshift) | | +| | | |bitshift = bitshift + 7 | | ++--------+-+----------------------------+--------------------------+----------+ +|Shift |1|bitshift >= 8 |Output (n AND 0xff) |NextByte | +| | | |n = n >> 8 | | +| | | |bitshift = bitshift - 8 | | +| +-+----------------------------+--------------------------+----------+ +| |2|else (bitshift < 8) | |NextByte | ++--------+-+----------------------------+--------------------------+----------+ + + + + UUE packet format + --------------------------------------------------------------------- + Support of this packet format is optional and signalled in the INIT + packet with the UUE flag in the "Supported options" field. The 8-bit + data is transformed into printable ASCII using the UUENCODE + algorithm. Three 8-bit bytes are encoded into four printable ASCII + characters. This done by taking the bottom six bits left and adding + '!' (ASCII 33) to move this character value into printable ASCII + range. + + The end of the packet is padded by a maximum of five bits of 0 to + make the number of bits a multiple of six and thereby creating + complete characters (so the receiver stops decoding when there are + less than six bits left). The output of this coding scheme does not + need any further escaping before transmission. + + Decoded byte 3 byte 2 byte 1 + +------++------++------+ + 765432107654321076543210 + +----++----++----++----+ + Encoded c4 c3 c2 c1 + + +UUEPKT Encoding ++--------+------------------------------+--------------------------+----------+ +|State |Predicate(s) |Action(s) |Next state| ++--------+-+----------------------------+--------------------------+----------+ +|NextByte|1|Less than three bytes left | |Flush | +| +-+----------------------------+--------------------------+----------+ +| |2|else (three or more left) |UUE(in[0]>>2) | | +| | | |UUE(in[0]<<4 OR in[1]>>4) | | +| | | |UUE(in[1]<<2 OR in[2]>>6) | | +| | | |UUE(in[2]) | | +| | | |(UUE: (c AND 0x3f) + '!') | | ++--------+-+----------------------------+--------------------------+----------+ +|Flush |1|No more bytes left | |Done | +| +-+----------------------------+--------------------------+----------+ +| |2|One byte left |UUE(in[0]>>2) |Done | +| | | |UUE(in[0]<<4) | | +| +-+----------------------------+--------------------------+----------+ +| |3|Two bytes left |UUE(in[0]>>2) |Done | +| | | |UUE(in[0]<<4 OR in[1]>>4) | | +| | | |UUE(in[1]<<2) | | ++--------+-+----------------------------+--------------------------+----------+ + +UUEPKT Decoding ++--------+------------------------------+--------------------------+----------+ +|State |Predicate(s) |Action(s) |Next state| ++--------+-+----------------------------+--------------------------+----------+ +|NextByte|1|Less than four bytes left | |Flush | +| +-+----------------------------+--------------------------+----------+ +| |2|else (four or more left) & |UD(i[0])<<2 OR UD(i[1])>>4| | +| | |(c AND 0x7f) is in UUE range|UD(i[1])<<4 OR UD(i[2])>>2| | +| | | |UD(i[2])<<6 OR UD(i[3]) | | +| | | |(UD: (c - '!') AND 0x3f) | | +| +-+----------------------------+--------------------------+----------+ +| |3|else (all other characters) |Invalid character(s) |Error | ++--------+-+----------------------------+--------------------------+----------+ +|Flush |1|No bytes left or | |Done OK | +| | |Less than two bytes left | | | +| +-+----------------------------+--------------------------+----------+ +| |2|Two bytes left & |UD(i[0])<<2 OR UD(i[1])>>4|Done OK | +| | |(c AND 0x7f) is in UUE range| | | +| +-+----------------------------+--------------------------+----------+ +| |3|Three bytes left & |UD(i[0])<<2 OR UD(i[1])>>4|Done OK | +| | |(c AND 0x7f) is in UUE range|UD(i[1])<<4 OR UD(i[2])>>2| | +| +-+----------------------------+--------------------------+----------+ +| |4|else (all other characters) |Invalid character(s) |Error | ++--------+-+----------------------------+--------------------------+----------+ + + + + START packet (HEX format) + --------------------------------------------------------------------- + This packet is sent to tell the remote to initiate a HYDRA session. + + The complete framed packet as transmitted looks like: + + ASCII values 24 99 65 92 102 53 92 97 51 24 97 + +-------+---+---+---+---+---+---+---+---+-------+---+ + Characters | H_DLE | c | A | \ | f | 5 | \ | a | 3 | H_DLE | a | + +-------+---+---+---+---+---+---+---+---+-------+---+ + + Applications may scan for this sequence to automatically start HYDRA + when the remote transmits this packet (AutoStart). Prior to the START + packet, a special string is transmitted to enable remote starting + from a command prompt, hydra+ +Go Back + + + + diff --git a/html/ftsc/fsc-0087.html b/html/ftsc/fsc-0087.html index 714a8ac7..f9fdcca1 100755 --- a/html/ftsc/fsc-0087.html +++ b/html/ftsc/fsc-0087.html @@ -1,305 +1,306 @@ - - -(the word hydra in lowercase): + + ASCII values 104 121 100 114 97 13 + +---+---+---+---+---+----+ + Characters | h | y | d | r | a | CR | + +---+---+---+---+---+----+ + + The special string combined with the START packet is transmitted at + five second intervals until either a START or INIT packet is received + from the remote, or the maximum number of retries is reached. Any + other packet types received in this stage must be ignored as they + could be remains of a previous session. + + + INIT packet (HEX format) + --------------------------------------------------------------------- + The INIT packet contains file transfer session options. The remote + acknowledges this packet by returning an INITACK packet. + + + INIT packet data + + +---------------------------------------+ + ~ Application ID string, NUL terminated ~ + +---------------------------------------+ + ~ Supported options, NUL terminated ~ + +---------------------------------------+ + ~ Desired options, NUL terminated ~ + +---------------------------------------+ + | Desired transmitter window size or 0 | + +---------------------------------------+ + | Desired receiver window size or 0 | + +---------------------------------------+ + ~ Other general options, NUL terminated ~ + +---------------------------------------+ + ~ Packet prefix string, NUL terminated ~ + +---------------------------------------+ + + The application ID string contains a printable ASCII string with the + document revision date, product name, product revision number, and + optionally the product serial number. The format of the string is: + + <RevDate><ProductName><,><ProductRevision>[<,><ProductSerial#>] + + RevDate is the UNIX timestamp (the hour, minute, and second portion + is assumed to be zero), in hexadecimal notation, of the HYDRA + document that the application is supposed to support. None of the + following three fields should exceed thirty characters in length and + must not contain any control characters (ASCII 0-31) or the comma + character (ASCII 44). The field separator is a comma (ASCII 44) + character. + + Capability flags + + XON Escape <XON> and <XOFF> characters. + TLN Escape the <CR>@<CR> sequence (Telenet escape). + CTL Escape ASCII characters 0-31 and 127. + HIC Escape above three with high bit set. + HI8 Escape ASCII characters 128-255 and strip the high bit. + BRK Can transmit a break signal. + ASC Can handle ASC packets. + UUE Can handle UUE packets. + C32 Can receive packets with 32-bit CRC error detection. + DEV Can receive device packets. + FPT Can receive filenames with paths. + + Capability flags are always three characters long, in uppercase, and + seperated by a comma character (ASCII 44). Please note that the first + five flags must be supported by all applications that implement the + HYDRA specifications. + + The "Supported options" string contain the capability flags of the + options that the application support. The "Desired options" string + contain the capability flags of the options that the application + would like to use/enable for the session. Some flags do not have to + be specified in both strings. E.g. if the C32 flag is present in the + "Supported options" string and the remote system indicates support + for the same flag, 32-bit CRC error detection will be used. An + application may not ask for an option it does not support. + + Escaping certain characters or bits also means filtering any + occurrence of them in the incoming data stream. At the start of a + session, it is assumed that the first five capability flags are in + effect, i.e. the high bit is stripped off every received character + and all control characters are filtered out. + + The "Desired transmitter/receiver window size" fields are long + integers expressed in hexadecimal notation. With these options each + side tells the other to use window management of the requested size + when transmitting file data, instead of using full streaming (0). + The window setting is completely seperate for both directions. + If one side requests a smaller window size than the other, that + smaller size will be used for that direction; also, a window of any + size takes precedence over no window (0). + Please note that the terms 'transmitter' and 'receiver' used for the + fields in the INIT packet are from the view of the side transmitting + that packet, so the other side should merge the 'transmitter' window + field from the received INIT packet with its own 'receiver' window + field. + + The "General options" string currently has no other fields than + "Desired tx/rx window size"; the string is NUL terminated. + + The packet prefix string is normally empty, but may be provided by + the remote if required. The maximum length of a packet prefix string + is 30 characters. All characters should be transmitted as specified, + with the following exceptions: + + + Table of special packet prefix string chars + + +-----+--------------------------------------+ + |ASCII|Description | + +-----+--------------------------------------+ + | 221 |Transmit a break signal for one second| + | 222 |Delay one second before next character| + | 223 |Transmit a NUL (ASCII 0) character | + +-----+--------------------------------------+ + + + INITACK packet (HEX format) + --------------------------------------------------------------------- + The INITACK packet is used to acknowledge the receipt of the remote's + INIT packet. + + Duplicate INIT packets should be acknowledged too, as the remote may + have missed previous INITACK packets; the reception of such a + duplicate packet should not however reset the braindead timer, as it + does not mean a change of state and is not actual file data. + + + FINFO packet + --------------------------------------------------------------------- + File information packet, sent to notify the remote that another file + is to be transmitted, or to signal end of batch. After the FINFO + packet has been transmitted, the timer is set to the normal timeout + value. The sender then waits for an FINFOACK packet from the remote + or for the timer to expire. In the event of a timeout, the transmit/ + wait sequence is repeated with half the normal timeout value until + the maximum number of retries has been reached. + + + FINFO packet data + +-------------------------------------+ + ~ File information, NUL terminated ~ + +-------------------------------------+ + + + File information End of batch + +-----------------+ +-----------------+ + | Timestamp or 0 | | NUL | + +-----------------+ +-----------------+ + | Filesize or 0 | + +-----------------+ + | Reserved (0) | + +-----------------+ + | Transaction # | + +-----------------+ + | File count or 0 | + +-----------------+ + ~ Short filename ~ + +-----------------+ + ~ Real filename ~ + +-----------------+ + | NUL | + +-----------------+ + + End of batch is signalled by an empty string (only the terminating + NUL). + + The first five fields are long integers expressed in hexadecimal + notation. + + Timestamp is a UNIX timestamp representing the creation time of the + file. If the creation time is not known, this is zero. + + Filesize is the size of the file in bytes. If the size of the file is + not known, this is zero. This field should not be used as an exact + measure of the size of the file. It is safe to assume that you should + not receive less data than specified in this field, but the file may + grow while it is being transferred (e.g. the result of a background + process). + + Transaction # is a unique number for each set of files being sent + during the session. This is primarily used to allow the receiving + application to group several files together and store them in + specific directories as a result of automated file requests. If the + file being sent is not a result of an automated file request, this + field must be set to zero. + + File count is the session file counter. For the first file in a + session, this field contains the total number of files to be sent + during the session; for subsequent files, it contains the file number + in the session, starting with two (2). If the total number of files + is not known, this field contains zero for all files. + + The first filename field must be specified in lowercase characters. + It must conform to MS-DOS filename conventions and not exceed 12 + characters in length (excluding the terminating NUL character). The + second field, real filename, is the actual filename on the sending + system. If this field is not present, the short filename field is + used. + + No directory paths may be specified in the short filename. Directory + paths may be specified in the real filename field if the "Desired + options" of the receiver contains FPT. If the real filename field + contains a path, it may include any ASCII character in the range 32 + (0x20) through 255 (0xff) with \ characters translated to /. A drive + specifier may be present in the <Drive>: (e.g. c:) format. If both + the short and real filename fields are present, they are separated + by a NUL character. There is never more than one NUL character + terminating the packet. + + + FINFOACK packet + --------------------------------------------------------------------- + Sent in response to an FINFO packet. If the FINFO packet contained + file information, the FINFOACK packet is also used to instruct the + remote how to proceed with the transfer. + + + FINFOACK packet data + +---------------------------------------+ + | Long file offset, special code, or 0 | + +---------------------------------------+ + + The only data in this packet is a long integer. In response to an + an end of batch FINFO packet, the file offset is set to zero (0). In + all other cases, file offset is one of the following: + + + File offsets and special values + +------+----------------------------------------------+ + |Offset|Description | + +------+----------------------------------------------+ + | >=0 |Seek to specified offset and start sending (1)| + | -1 |Already have file (2)| + | -2 |Send file during another batch (not now) | + +------+----------------------------------------------+ + + (1) This can only be something other than zero if the FINFO packet + specified a filesize other than zero (i.e. the size of the file + is known to the receiver). + + (2) The sending application should consider the file as having been + sent successfully. This is primarily used to prevent duplicate + files from being transmitted. + + + DATA packet + --------------------------------------------------------------------- + Packet containing actual file data. + + + DATA packet + +-----------------------------------------+ + | Long file offset of file data block | + +-----------------------------------------+ + ~ Variable length data block 0-2048 bytes ~ + +-----------------------------------------+ + + If the file offset corresponds with what is expected by the receiver, + the data block is saved and the file position increased accordingly. + If the file offset is not correct, DATA packets may have been lost or + failed the CRC check. Bad packets are ignored because it is not + certain that the bad packet was an actual DATA packet and not some + other type of packet. The file offset comparison is therefore the + only way to find out about lost or bad data. + + When a bad data packet is detected, an RPOS packet is transmitted by + the receiver to force the sender to seek to the desired file offset + and resume transmission from it. After transmitting the RPOS packet, + the receiver initializes a timer and continues to monitor received + DATA packets while comparing their file offset with its desired + offset. + + If the offset of a newly received DATA packet is greater than the + offset received in the last DATA packet prior to transmitting the + RPOS packet, the sender has not yet seen the RPOS packet, or the + DATA packet was already in the data stream when the RPOS packet was + transmitted. + + If the received offset matches the requested offset, the transfer is + resumed, otherwise, a new RPOS packet is transmitted by the receiver + and the timer restarted. + + If the timer expires, another RPOS packet is transmitted by the + receiver. This is repeated until the maximum number of retries has + been reached. + + If the receiver encounters more missing or invalid DATA packets at + the same offset than it finds acceptable and it is not the originator + of the session, it may decide to revert to a one-way transfer and + wait with sending the remainder of its own files until the remote has + transmitted its end of batch signal. It is possible that some hard- + ware is not capable or well suited for a bi-directional file transfer + involving large volumes of data (see description of the IDLE packet). + + + DATAACK packet + --------------------------------------------------------------------- + Transmitted by the receiver with its current file offset after + receiving a valid DATA packet. + + + DATAACK packet data + +------------------------+ + | Long file offset | + +------------------------+ + + This packet is only transmitted if there is a window in operation + for that direction (selected in the INIT stage of the session), in + which case the sender uses the DATAACK file offsets to manage its + transmit window. If the sender's file offset is greater than or equal + to the last DATAACK offset received plus the window size, no more + data is transmitted by the sender until a DATAACK packet is received + which allows the sender to proceed without exceeding the window size. + + While waiting for the DATAACK packet, the sender checks its timer + and retry counter. If the timer expires before a valid DATAACK packet + is received, the next DATA packet is transmitted, the retry counter + incremented, and the timer restarted with half the normal timeout. + This system ensures that the two sides do not end up waiting for + each other in case packets are lost; the receiver will respond with + either a DATAACK or RPOS packet. Receipt of a DATAACK packet does not + reset the braindead timer. + + There are two windowing systems the receiver can use: sliding window + or segmented streaming. + + If the receiver is capable of simultaneous serial and disk I/O, it + will transmit a DATAACK packet for every received DATA packet, or + every few DATA packets if it wants to be more economical with line + capacity. + Sliding window transmission is just a method of keeping the runahaid + of the transmitter within reasonable limits (for sattelite or network + links with long delays), thereby allowing for faster error recovery. + Because of Hydra's tolerancy to delays and method of error recovery, + sliding windows transmission is not normally required and full + streaming can be used. + + If however the receiver is not capable of simultaneous serial and + disk I/O, it will will process received DATA packets until the window + size is reached (or slightly exceeded), write the received packets to + disk, and then transmit one DATAACK packet to signal that it can + receive the next segment of data. + + If the sender cannot handle simultaneous serial and disk I/O, it can + apply the segmented streaming technique for reading data segments of + the negotiated window size from disk. + + + RPOS packet + --------------------------------------------------------------------- + Transmitted by the receiver to force the sender to seek to a specific + position in the file and resume the transfer (as described above). + + The RPOS packet is also used by the receiver to skip a file once the + transfer has been initiated. This is done by transmitting a RPOS + packet with -2 as the desired offset and then waiting for a EOF + packet with the same offset (-2). Once the EOF packet is received, + the receiver responds to it by transmitting a EOFACK packet and then + proceeds to wait for the next FINFO packet. + + + RPOS packet dependent data + +----------------------------------------+ + | Long file offset | + +----------------------------------------+ + | Desired datablock size (word, 64-2048) | + +----------------------------------------+ + | Long RPOS packet ID | + +----------------------------------------+ + + + File offsets + +------+-------------------------------------------+ + |Offset|Description | + +------+-------------------------------------------+ + | >=0 |Seek to specified offset and resume sending| + | -2 |Send file during another batch (not now) | + +------+-------------------------------------------+ + + The desired data blocksize field tells the sender what blocksize + to use when it resumes transmitting from the specified file offset. + + Each new RPOS packet should be given a different packet ID. This + allows the sender to identify and ignore duplicate RPOS packets. + The ID need not be sequential, but it must not have the same value as + any other RPOS packet sent during the transmission of the same file. + A RPOS ID value of zero (0) is not permitted. The same ID value is + only used when sending multiple RPOS packets due to an expired RPOS + packet timer as described above (DATA packet). + + + EOF packet + --------------------------------------------------------------------- + Indicates that the end of the file has been reached by the sender. + The packet is transmitted after the last DATA packet with file data. + The EOF packet only contains one field which holds the current file + offset of the sender (i.e. the actual size of the file). + + After the EOF packet has been transmitted, the timer is set to the + normal timeout value. The sender then waits for an EOFACK packet + from the remote or for the timer to expire. In the event of a + timeout, the transmit/wait sequence is repeated with half the normal + timeout value until the maximum number of retries has been reached. + + In the event that the receiver requests to skip the file by + transmitting a RPOS(-2) packet (see RPOS packet), the EOF packet + contains the same value (-2). If the sender wants to skip the file + currently being transmitted, it issues an EOF packet with -2 as the + offset value. + + EOF packets with an incorrect offset should be treated by the + receiver as if it was an incorrect DATA packet (i.e. transmitting an + RPOS packet). Accepted EOF packets are acknowledged by transmitting + an EOFACK packet. + + + EOF packet data + +----------------------------------+ + | Long file offset or special code | + +----------------------------------+ + + + File offsets and special value + +------+----------------------------------------+ + |Offset|Description | + +------+----------------------------------------+ + | >=0 |Final offset in file (size of file) | + | -2 |Send file during another batch (not now)| + +------+----------------------------------------+ + + + EOFACK packet + --------------------------------------------------------------------- + Transmitted in response to an accepted EOF packet. After transmitting + this packet, the receiver waits for the FINFO packet of the next file + or end of batch. + + + END packet (HEX format) + --------------------------------------------------------------------- + Once all files have been transmitted by both sides and no device + packets remain to be transmitted, the end of session sequence is + initiated. END packets are always sent in HEX format. + + Two END packets are transmitted and the transmit timer set to half + the normal timeout. The application then waits for an END packet from + the remote or for the transmit timer to expire. In the event of a + timeout, the transmit/wait sequence is repeated until the maximum + number of retries has been reached. At this point, the HYDRA session + may be considered to be successful as both batches were completed. + + If an END packet is received before timeout, another three (3) END + packets are transmitted and the protocol exits. Both sides need to + transmit END packets and receive at least one from the remote. + + + IDLE packet (HEX format) + --------------------------------------------------------------------- + The IDLE packet is used to let the remote know that the application + is still alive. This is only applicable in uni-directional transfer + mode to let the remote know that your application is still alive when + it is receiving files, and after having transmitted an end of batch + signal to the remote and not having any more files to send for the + remainder of the session. + + When applicable, the IDLE packet is transmitted every 20 seconds. The + remote resets its braindead timer upon receipt of an IDLE packet. If + an application receives an IDLE packet while it is in a state where + it is transmitting IDLE packets to the remote, something is wrong. + This could occur if both sides have accidentally switched to one-way + mode waiting for the remote to finish its batch. In this situation, + one-way should be disabled to prevent a complete deadlock. Note that + if both sides have finished their batch, the end of session sequence + (see END packet) should be initiated. + + + DEVDATA packet + --------------------------------------------------------------------- + Support for the DEVDATA and DEVDACK packets is optional and indicated + in the INIT packet with the DEV flag in the "Supported options" + field. The ID value is a long, different for each new device data + packet sent. A value of zero (0) is not permitted. + + Only one DEVDATA packet may be transmitted at a time; the side + issuing it then waits either for a timeout of the device transmit + timer, or for a DEVDACK packet with the correct ID value to be + received from the remote. If the timer expires before a correct + DEVDACK packet is received, the DEVDATA packet is again transmitted, + and the nnumber of device transmit retries incremented. If the + maximum number of retries is reached, the HYDRA session is aborted; + apparently the other is not functioning properly, or data is not + getting through. In either case, the normal operation of the + protocol (transferring files) will also fail. + + The name of the device to which the data is addressed is transmitted + as an uppercase fixed-length three character NUL terminated string. + There are two pre-defined device names as described below. If an + unknown device name is specified, or a duplicate DEVDATA packet is + received (one with the same ID value as a previously received and + acknowledged DEVDATA packet), the packet is simply discarded after + transmitting a DEVDACK packet with the corresponding ID value. + + DEVDATA and DEVDACK packets do not reset the braindead timer. They + operate independently from the normal protocol. Device packets may + only be transmitted after the initialization sequence, and before + both sides have completed their batch. If a DEVDATA packet has not + yet been acknowledged, the end of session sequence is delayed until + a DEVDACK packet has been sent in response. + + + DEVDATA packet dependent data + +--------------------------------------------------+ + | Long DEVDATA packet ID value | + +--------------------------------------------------+ + | 3 character uppercase device name, NUL terminated| + +--------------------------------------------------+ + ~ Variable length device data block (0-2048) ~ + +--------------------------------------------------+ + + + Predefined device names + +---+-------------------------------------+ + |Dev|Description | + +---+-------------------------------------+ + |MSG|Print data in protocol message window| + |CON|Print data to user console | + +---+-------------------------------------+ + + The MSG device may be used to notify the remote of protocol-specific + issues, i.e. "One-way transfer mode". Such messages may be logged, + but should not be considered to be machine-readable. + + The CON device may be used to implement a "chat" or conversation + feature. This is a special case in which a session *can* be prolonged + after end of batch, but not against the remote's will. + While chat is enabled, there is no transition from the REND to the + END transmitter state. When a CON device packet is transmitted in + chat mode and the txstate is REND, the own braindead timer is reset. + If the other side does initiate the end sequence by sending an END + packet, the chat mode is immediately terminated and the session ended + in a clean manner. If one side does not want to (continue) chat, and + the other side does not comply, the one side will abort after a + braindead timeout, so this chat system does not mean a security flaw. + Each side is responsible for keeping the session going on his end + until its own user has finished chatting. It is suggested that the + software apply a timeout of say 1 minute to keyboard input, ending + the chat automatically if the user stops typing but does not exit + chat mode. Also, the chat mode should be initiated with a special key + so that it can not erronously be started or prolonged. + + + DEVDACK packet + --------------------------------------------------------------------- + Transmitted in response to a DEVDATA packet. The device data ID value + must correspond to the ID of the previously received DEVDATA packet. + + + DEVDACK packet data + +---------------------------+ + | Long device data ID value | + +---------------------------+ + + + +DEVICE sender (devtxstate HTD_...) ++--------+------------------------------+--------------------------+----------+ +|State |Predicate(s) |Action(s) |Next state| ++--------+------------------------------+--------------------------+----------+ +|Begin | |devtxid = 0 |DONE | +| | |reset devtxtimer | | ++--------+-+----------------------------+--------------------------+----------+ +|DONE |1|wish to send device data & |increase devtxid |DATA | +| | |other side allows DEV pkts |devtxretries = 0 | | +| | | |reset devtxtimer | | +| +-+----------------------------+--------------------------+----------+ +| |2|wish to send device data & |Tell calling function | | +| | |other doesn't allow DEV pkts|it's not on... | | ++--------+-+----------------------------+--------------------------+----------+ +|DATA |1|devtxretries == 10 |Report too many errors |Abort | +| +-+----------------------------+--------------------------+----------+ +| |2|else (devtxretries < 10) |txpkt DEVDATA(id,dev,data)|DACK | +| | | |devtxtimer = timeout | | ++--------+-+----------------------------+--------------------------+----------+ +|DACK |1|rxpkt DACK & |reset devtxtimer |DONE | +| | |DACK(id) == devtxid | | | +| +-+----------------------------+--------------------------+----------+ +| |2|devtxtimer expired |Report devtx timeout |DATA | +| | | |increase devtxretries | | ++--------+-+----------------------------+--------------------------+----------+ + +DEVICE RECEIVER ++--------+------------------------------+--------------------------+----------+ +|State |Predicate(s) |Action(s) |Next state| ++--------+------------------------------+--------------------------+----------+ +|Begin | |devrxid = 0 |DONE | ++--------+-+----------------------------+--------------------------+----------+ +|DONE |1|rxpkt DEVDATA |txpkt DEVDACK(id) |CheckID | ++--------+-+----------------------------+--------------------------+----------+ +|CheckID |1|DEVDATA(id) != devrxid |devrxid = DEVDATA(id) |Process | +| +-+----------------------------+--------------------------+----------+ +| |2|else (apparent duplicate) | |DONE | ++--------+-+----------------------------+--------------------------+----------+ +|Process |1|DEVDATA(dev) == MSG |Print protocol message |DONE | +| +-+----------------------------+--------------------------+----------+ +| |2|DEVDATA(dev) == CON |Output to user console |DONE | +| +-+----------------------------+--------------------------+----------+ +| |3|DEVDATA(dev) == known&ok |Call processing routine |DONE | +| +-+----------------------------+--------------------------+----------+ +| |4|else (unknown/not-ok device)|One-way into bitbucket |DONE | ++--------+-+----------------------------+--------------------------+----------+ + + + Packet length and data block size + --------------------------------------------------------------------- + The maximum length of a source data block (i.e. raw, non processed + input file or device data) is 2048 bytes. The maximum allowed length + of the packet data is 2048 + 8 = 2056 bytes. The eight bytes are to + provide sufficient room for the additional fields in the DATA and + DEVDATA packets. Packetizing adds an additional three to five bytes. + The maximum length of a framed packet being transmitted can be three + times the size of its source data depending on what type of encoding + scheme is used (ASC, HEX, UUE, BIN). The minimum length of a data + block is 64 bytes. + + The block size of DATA packets is based on the physical (DCE) link + speed and is established as follows: + + +---------+------------------+-------------------+ + |DCE speed|Maximum block size|Starting block size| + +---------+------------------+-------------------+ + | 300 bps| 256 bytes | 256 bytes | + | 1200 bps| 512 bytes | 256 bytes | + | 2400 bps| 1024 bytes | 512 bytes | + |>2400 bps| 2048 bytes | 512 bytes | + +---------+------------------+-------------------+ + + The blocksize is initialized to the starting blocksize when a session + is first started. After each kilobyte of file data transmitted, the + blocksize is doubled until it reaches the maximum allowed blocksize. + + When the maximum allowed blocksize has been reached, the variable + keeping track of how many bytes are needed to increase the blocksize + is reset to zero. + + If a request for retransmission (RPOS packet) is received from the + receiver, the blocksize is immediately set to that specified in the + retransmission request. Every time this occurs, the number of bytes + needed to double the blocksize is increased by 1024 with a maximum of + of 8192 bytes. The end result is that more data has to be + successfully transmitted before the blocksize is increased for each + error that occurs. + + The length of a data block is dynamic and always in the range 0-2048 + bytes. A data block is never padded. If there is insufficient data + to fill a block of the current blocksize, the blocksize is adjusted + to the amount of remaining data. + + The blocksize logic is not reset between files in a session. + + + Timers and retry counters + ===================================================================== + Each process in the protocol (transmit, receive and device transmit) + has its own timer and retry counter, and there is one overall + braindead timer. Allowed are 10 tries, the braindead timeout is 120 + seconds, and the other timeouts are based on the speed of the line + and the state of the protocol. It can be calculated as (40960/DCE + rate), with a minimum of 10 seconds and a maximum of 60 seconds. + + +---------+----------+----------+ + |DCE speed|Timeout |Half | + +---------+----------+----------+ + | 300 bps|60 seconds|30 seconds| + | 1200 bps|34 seconds|17 seconds| + | 2400 bps|17 seconds| 8 seconds| + |>2400 bps|10 seconds| 5 seconds| + +---------+----------+----------+ + + If the output buffer is empty, the timeout value is halved. In + general, this is the case if the number of tries is greater than zero + and during the init and end sequences. These timeouts are not fatal + situations, they just give the remote a reasonable amount of time to + receive and respond to a packet before a retry occurs. Duplicate + packets are always identified and ignored. A retry counter is reset + if there is a change of state, or a reposition different from the + previous file offset occurs. + + The braindead timer monitors useful data from the other side: a first + response to a transmitted supervisiory packet, or a received packet + with file data at the correct offset. Device packets and packets that + do not signify any progress of the protocol do not affect the + braindead timer. + + No other timers (such as one between characters in a packet) are + necessary. + + + Aborting a session + ===================================================================== + A session is aborted with five consequetive CAN (^X or ASCII 24) + characters. Whenever a state table mentions "Abort", the following + procedure is to be followed: + + Clear the output buffer and transmit eight CAN characters followed by + ten BS (^H or ASCII 8) characters; wait a few seconds for the data to + be transmitted to the remote, purge the input buffer and exit the + protocol code. + + +GENERAL sender (txstate HTX_...) ++--------+------------------------------+--------------------------+----------+ +|State |Predicate(s) |Action(s) |Next state| ++--------+------------------------------+--------------------------+----------+ +|Begin | |txretries = 0 |START | +| | |reset txtimer | | +| | |blksize = startblksize | | +| | |goodbytes = 0 | | +| | |goodneeded = 1024 | | +| | |braintimer = 120 | | ++--------+-+----------------------------+--------------------------+----------+ +|START |1|txretries == 10 |Report too many errors |Abort | +| +-+----------------------------+--------------------------+----------+ +| |2|else (txretries < 10) |txstr AutoStart |SWAIT | +| | | |txpkt START | | +| | | |txtimer = 5 | | ++--------+-+----------------------------+--------------------------+----------+ +|SWAIT |1|rxpkt START or |txretries = 0 |INIT | +| | |rxpkt INIT |reset txtimer | | +| | | |braintimer = 120 | | +| +-+----------------------------+--------------------------+----------+ +| |2|txtimer expired |Report tx timeout |START | +| | | |increment txretries | | ++--------+-+----------------------------+--------------------------+----------+ +|INIT |1|txretries == 10 |Report too many errors |Abort | +| +-+----------------------------+--------------------------+----------+ +| |2|else (txretries < 10) |txpkt INIT(linkinfo) |INITACK | +| | | |txtimer = timeout/2 | | ++--------+-+----------------------------+--------------------------+----------+ +|INITACK |1|rxpkt INITACK |txretries = 0 |RINIT | +| | | |reset txtimer | | +| | | |braintimer = 120 | | +| +-+----------------------------+--------------------------+----------+ +| |2|txtimer expired |Report tx timeout |INIT | +| | | |increment txretries | | ++--------+-+----------------------------+--------------------------+----------+ +|RINIT |1|rxstate != INIT | |NextFile | ++--------+-+----------------------------+--------------------------+----------+ +|NextFile|1|No files left? |Report end of batch |ToFName | +| | | |Set NULL fileinfo | | +| +-+----------------------------+--------------------------+----------+ +| |2|Can access next file? |Set up fileinfo |ToFName | +| +-+----------------------------+--------------------------+----------+ +| |3|Can't access file? |Report access failure |NextFile | ++--------+-+----------------------------+--------------------------+----------+ +|ToFName | |txsyncid = 0 |FINFO | +| | |txretries = 0 | | +| | |reset txtimer | | ++--------+-+----------------------------+--------------------------+----------+ +|FINFO |1|txretries == 10 |Report too many errors |Abort | +| +-+----------------------------+--------------------------+----------+ +| |2|txretries > 0 |txpkt FINFO(fileinfo) |FINFOACK | +| | | |txtimer = timeout/2 | | +| +-+----------------------------+--------------------------+----------+ +| |3|else (txretries == 0) |txpkt FINFO(fileinfo) |FINFOACK | +| | | |txtimer = timeout | | ++--------+-+----------------------------+--------------------------+----------+ +|FINFOACK|1|NULL fname (end of batch) & |txtimer = idletimeout |REND | +| | |rxpkt FINFOACK |braintimer = 120 | | +| +-+----------------------------+--------------------------+----------+ +| |2|rxpkt FINFOACK & |txpos = FINFOACK(pos) |DATA | +| | |FINFOACK(pos) >= 0 |txretries = 0 | | +| | | |txlastack = 0 | | +| | | |braintimer = 120 | | +| +-+----------------------------+--------------------------+----------+ +| |3|rxpkt FINFOACK & |They already have file |NextFile | +| | |FINFOACK(pos) == -1) |braintimer = 120 | | +| +-+----------------------------+--------------------------+----------+ +| |4|rxpkt FINFOACK & |Skip this file for now |NextFile | +| | |FINFOACK(pos) == -2) |braintimer = 120 | | +| +-+----------------------------+--------------------------+----------+ +| |5|txtimer expired |Report tx timeout |FINFO | +| | | |inrease txretries | | ++--------+-+----------------------------+--------------------------+----------+ +|DATA |1|rxstate != Done & |txtimer = idletimeout |XWAIT | +| | |hdxlink == True | | | +| +-+----------------------------+--------------------------+----------+ +| |2|rxpkt DATAACK & |txlastack = DATAACK(pos) | | +| | |DATAACK(pos) > txlastack | | | +| +-+----------------------------+--------------------------+----------+ +| |3|rxpkt RPOS & |Skip this file for now |SkipFile | +| | |RPOS(pos) < 0 |braintimer = 120 | | +| +-+----------------------------+--------------------------+----------+ +| |4|rxpkt RPOS & |Report too many errors |Abort | +| | |RPOS(id) == txsyncid & | | | +| | |inc txretries == 10 | | | +| +-+----------------------------+--------------------------+----------+ +| |5|rxpkt RPOS & |txpos = RPOS(pos) | | +| | |RPOS(id) != txsyncid & |txsyncid = RPOS(id) | | +| | |RPOS(pos) >= 0 |txretries = 1 | | +| | | |blksize = RPOS(blksize) | | +| | | |goodbytes = 0 | | +| | | |inc goodneeded + 1024 | | +| | | |if (goodneeded > 8192) | | +| | | | goodneeded = 8192 | | +| | | |braintimer = 120 | | +| +-+----------------------------+--------------------------+----------+ +| |6|File seek/read error or |Skip this file for now |SkipFile | +| | |user wishes to skip file | | | +| +-+----------------------------+--------------------------+----------+ +| |7|txwindow & |if (txretries > 0) |DATAACK | +| | |txpos >= txlastack+txwindow | txtimer = timeout/2 | | +| | | |else | | +| | | | txtimer = timeout | | +| +-+----------------------------+--------------------------+----------+ +| |8|Enough room in output & |txpkt DATA(pos,data) | | +| | |more filedata(blksize) to go|txpos += datalen | | +| | | |inc goodbytes + datalen | | +| | | |if goodbytes > goodneeded | | +| | | | Store txpos,blksize | | +| | | | blksize * 2 (max.2048) | | +| +-+----------------------------+--------------------------+----------+ +| |9|End of filedata reached | |EOF | ++--------+-+----------------------------+--------------------------+----------+ +|SkipFile| |txpos = -1 |EOF | +| | |txretries = 0 | | ++--------+-+----------------------------+--------------------------+----------+ +|DATAACK |1|txretries == 10 |Report too many errors |Abort | +| +-+----------------------------+--------------------------+----------+ +| |2|rxpkt DATAACK & |txlastack = DATAACK(pos) |DATA | +| | |DATAACK(pos) > txlastack & |txretries = 0 | | +| | |txpos < DATAACK(pos) + txwin|reset txtimer | | +| +-+----------------------------+--------------------------+----------+ +| |3|rxpkt RPOS |Handle RPOS in state DATA | | +| | | |but stay in this state | | +| +-+----------------------------+--------------------------+----------+ +| |4|txtimer expired |Report tx timeout |DATA | +| | | |increment txretries | | ++--------+-+----------------------------+--------------------------+----------+ +|XWAIT |1|rxstate == Done |reset txtimer |DATA | +| +-+----------------------------+--------------------------+----------+ +| |2|rxpkt DATAACK & |txlastack = DATAACK(pos) | | +| | |DATAACK(pos) > txlastack | | | +| +-+----------------------------+--------------------------+----------+ +| |3|rxpkt RPOS |Handle RPOS in state DATA | | +| | | |but stay in this state | | +| +-+----------------------------+--------------------------+----------+ +| |4|rxpkt IDLE |hdxlink = False |DATA | +| | | |reset txtimer | | +| +-+----------------------------+--------------------------+----------+ +| |5|txtimer expired |txpkt IDLE | | +| | | |txtimer = idletimeout | | ++--------+-+----------------------------+--------------------------+----------+ +|EOF |1|txretries == 10 |Report too many errors |Abort | +| +-+----------------------------+--------------------------+----------+ +| |2|txretries > 0 |txpkt EOF(txpos) |EOFACK | +| | | |txtimer = timeout/2 | | +| +-+----------------------------+--------------------------+----------+ +| |3|else (txretries == 0) |txpkt EOF(txpos) |EOFACK | +| | | |txtimer = timeout | | ++--------+-+----------------------------+--------------------------+----------+ +|EOFACK |1|rxpkt EOFACK |braintimer = 120 |NextFile | +| +-+----------------------------+--------------------------+----------+ +| |2|rxpkt DATAACK & |txlastack = DATAACK(pos) | | +| | |DATAACK(pos) > txlastack | | | +| +-+----------------------------+--------------------------+----------+ +| |3|rxpkt RPOS & |rxpos == -2 |EOF | +| | |RPOS(pos) == -2 & | | | +| | |rxpos != -2 | | | +| +-+----------------------------+--------------------------+----------+ +| |4|rxpkt RPOS & |Handle as in state DATA |DATA | +| | |RPOS(pos) >= 0 | | | +| +-+----------------------------+--------------------------+----------+ +| |5|txtimer expired |Report tx timeout |EOF | +| | | |increment txretries | | ++--------+-+----------------------------+--------------------------+----------+ +|REND |1|rxstate == DONE & |txretries = 0 |END | +| | |devtxstate == DONE | | | +| +-+----------------------------+--------------------------+----------+ +| |2|txtimer expired |txpkt IDLE | | +| | | |txtimer = idletimeout | | ++--------+-+----------------------------+--------------------------+----------+ +|END |1|txretries == 10 | |Abort | +| +-+----------------------------+--------------------------+----------+ +| |2|else (txretries < 10) |txpkt END (twice) |ENDACK | +| | | |txtimer = timeout/2 | | ++--------+-+----------------------------+--------------------------+----------+ +|ENDACK |1|rxpkt END |txpkt END (thrice) |Done | +| +-+----------------------------+--------------------------+----------+ +| |2|txtimer expired |Report tx timeout |END | +| | | |increment txretries | | ++--------+-+----------------------------+--------------------------+----------+ + + + +GENERAL RECEIVER (rxstate HRX_...) ++--------+------------------------------+--------------------------+----------+ +|State |Predicate(s) |Action(s) |Next state| ++--------+------------------------------+--------------------------+----------+ +|Begin | |reset rxtimer |START | +| | |lastrxdlen = startblksize | | +| | |(tx handles braintimer) | | ++--------+-+----------------------------+--------------------------+----------+ +|INIT |1|rxpkt INIT & |txpkt INITACK |FINFO | +| | |INIT(options) are compatible|Set options | | +| | | |braintimer = 120 | | +| +-+----------------------------+--------------------------+----------+ +| |2|INIT(options) not compatible|Report link failure |Abort | ++--------+-+----------------------------+--------------------------+----------+ +|FINFO |1|rxpkt INIT (apparent dup) |txpkt INITACK | | +| +-+----------------------------+--------------------------+----------+ +| |2|rxpkt FINFO & |Report end of batch | | +| | |FINFO(fileinfo) == Empty |txpkt FINFOACK |DONE | +| | | |braintimer = 120 | | +| +-+----------------------------+--------------------------+----------+ +| |3|rxpkt FINFO & |do not want this file | | +| | |we already have file |txpkt FINFOACK(-1) | | +| | | |braintimer = 120 | | +| +-+----------------------------+--------------------------+----------+ +| |4|rxpkt FINFO & |Skip this file for now | | +| | |open/diskspace error |txpkt FINFOACK(-2) | | +| | | |braintimer = 120 | | +| +-+----------------------------+--------------------------+----------+ +| |5|rxpkt FINFO & |rxpos = resume offset |ToData | +| | |file we want to resume | | | +| +-+----------------------------+--------------------------+----------+ +| |6|rxpkt FINFO & |rxpos = 0 |ToData | +| | |new file for us | | | +| +-+----------------------------+--------------------------+----------+ +| |7|rxpkt EOF (apparent dup) |txpkt EOFACK | | ++--------+-+----------------------------+--------------------------+----------+ +|ToData | |txpkt FINFOACK(rxpos) |DATA | +| | |rxsyncid = 0 | | +| | |rxlastsync = 0; | | +| | |rxretries = 0 | | +| | |reset rxtimer | | +| | |braintimer = 120 | | ++--------+-+----------------------------+--------------------------+----------+ +|DATA |1|rxpkt FINFO (apparent dup) |txpkt FINFOACK(rxpos) | | +| +-+----------------------------+--------------------------+----------+ +| |2|rxpkt DATA & |Store data | | +| | |DATA(pos) == rxpos |rxpos += datalen | | +| | | |rxretries = 0 | | +| | | |rxlastsync = rxpos | | +| | | |reset rxtimer | | +| | | |braintimer = 120 | | +| | | |if (rxwindow) | | +| | | | txpkt DATAACK(rxpos) | | +| +-+----------------------------+--------------------------+----------+ +| |3|rxpkt DATA & |Report bad rxpos |BadPos | +| | |DATA(pos) != rxpos | | | +| +-+----------------------------+--------------------------+----------+ +| |4|rxpkt EOF & |Close file, received ok |OkEOF | +| | |EOF(pos) == rxpos | | | +| +-+----------------------------+--------------------------+----------+ +| |5|rxpkt EOF & |Close, save for resume |OkEOF | +| | |EOF(pos) == -2 | | | +| +-+----------------------------+--------------------------+----------+ +| |6|rxpkt EOF & |Report bad EOF |BadPos | +| | |EOF(pos) != rxpos | | | +| +-+----------------------------+--------------------------+----------+ +| |7|File write error or |Close, save for resume | | +| | |user wishes to skip file |rxpos = -2 | | +| +-+----------------------------+--------------------------+----------+ +| |8|rxpkt IDLE & |braintimer = 120 | | +| | |hdxlink == False | | | ++--------+-+----------------------------+--------------------------+----------+ +|BadPos |1|DATA/EOF(pos) <= rxlastsync |rxretries = 0 |Timer | +| | | |reset rxtimer | | +| | | |rxlastsync = pos | | +| +-+----------------------------+--------------------------+----------+ +| |2|DATA/EOF(pos) > rxlastsync |rxlastsync = pos |Timer | ++--------+-+----------------------------+--------------------------+----------+ +|Timer |1|rxtimer expired | |HdxLink | +| +-+----------------------------+--------------------------+----------+ +| |2|else (rxtimer not expired) | |DATA | ++--------+-+----------------------------+--------------------------+----------+ +|HdxLink |1|rxretries > 4 & |hdxlink = True |Retries | +| | |txstate < REND & |rxretries = 0 | | +| | |originator == False & | | | +| | |hdxlink == False | | | +| +-+----------------------------+--------------------------+----------+ +| |2|else (above not the case) | |Retries | ++--------+-+----------------------------+--------------------------+----------+ +|Retries |1|inc rxretries == 10 |Report too many errors |Abort | +| +-+----------------------------+--------------------------+----------+ +| |2|rxretries == 1 |increase rxsyncid |RPos | +| +-+----------------------------+--------------------------+----------+ +| |3|else (rxretries > 1) | |RPos | ++--------+-+----------------------------+--------------------------+----------+ +|RPos | |lastrxdatalen/=2 (min.64) |DATA | +| | |txpkt RPOS (rxpos, | | +| | | lastrxdatalen,rxsyncid)| | +| | |rxtimer = timeout | | ++--------+------------------------------+--------------------------+----------+ +|OkEOF | |txpkt EOFACK |FINFO | +| | |reset rxtimer | | +| | |braintimer = 120 | | ++--------+-+----------------------------+--------------------------+----------+ +|DONE |1|rxpkt FINFO (apparent dup) |txpkt FINFOACK(-2) | | ++--------+-+----------------------------+--------------------------+----------+ + + + HYDRA in FidoNet technology mailers + ===================================================================== + HYDRA is suitable for use in FidoNet mailers. It can be implemented + for EMSI and FTS-6 mail sessions. The FTS-6 (YooHoo) capability bit + for HYDRA is 0x0020 (DOES_HYDRA). The EMSI and IEMSI protocol + capability flag is HYD. + + When utilizing HYDRA in a mail session, two complete batches are + always performed. Little else differs from a normal FTS-6 ZedZap mail + session. The first batch is used to transmit all mail, files, and + file requests by both sides. The second batch is always performed, + sending nothing if there are no file requests to honor. The data + buffers are not purged between the two batches since HYDRA ignores + any leftovers from the previous batch (END packets, etc.). + + To integrate HYDRA into an existing mailer, the same code used for + the ZedZap session flow can be used, but instead of one transmit and + one receive session, two transmit sessions (or batches) are used. + When the HYDRA end of batch is initiated it will not be terminated + until an end of batch has been received from the remote and the end + of session sequence has been finished. + + Fido and FidoNet are registered marks of Tom Jennings and Fido + Software. + + + Error detection using CRCs + ===================================================================== + CRC (Cyclic Redundancy Check) values only provide their promised + maximum error detection capability when properly applied, which + involves calculating and transmitting low-bit first, presetting the + CRC with all ones, and transmitting the ones' complement of the + result. The receiver also initializes to all ones, processes all of + the data AND the following CRC, and the result should match a "magic + value" which is 0xf0b8 for the 16-bit CRC and 0xdebb20e3 for the + 32-bit CRC. + + The easiest and fastest way to perform CRC calculations is by using a + table that does the algorithm's shift-operations in 8-bits at a time. + + + CRC-16 error detection + --------------------------------------------------------------------- + 16-bit CRC using the CCITT CRC-16 polynomial. This is the default at + startup, and always used for HEX packets even if both sides are + capable of handling 32-bit CRCs. + + This CRC-16 is not identical to the one used by the Xmodem and Zmodem + file transfer protocols. The polynomial is the same + (X^16+X^12+X^5+X^0 or 0x8408) but the bit-ordering is the opposite, + and preconditioning and postconditioning is used as in 32-bit CRCs. + This method is also used by the European version of X.25. + + The 16-bit CRC table is created as follows (pseudocode, the variable + CRC16 and the table of 256 entries are 16-bit unsigned integers): + + FOR (i=0 TO 255) + { + CRC16=i + FOR (N=1 TO 8) + { + IF (CRC16 AND 1) + CRC16=(CRC16 >> 1) XOR 0x8408 + ELSE + CRC16=CRC16 >> 1 + } + CRC16TAB[i]=CRC16; + } + + When processing data, each byte is run through the CRC calculation + routine as follows (variable CRC stores the 16-bit CRC value/result, + C is the next 8-bit char): + + CRC=CRC16TAB[(CRC XOR C) AND 0xff] XOR ((CRC>>8) AND 0x00ff) + + + CRC-32 error detection + --------------------------------------------------------------------- + 32-bit CRC using the CCITT CRC-32 polynomial. Support of CRC-32 is + optional and signalled in the INIT packet. + + If both sides indicate they can handle CRC-32, all packets except + those transmitted in HEX format use this algorithm instead of CRC-16 + to improve error detection. + + This CRC-32 is identical to the one used by the Zmodem protocol. + The polynomial is (0xedb88320): + + X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+X^0 + + The principal method of calculation, transmission, and checking is + identical to CRC-16 as described above, but the "magic value" for + 32-bit CRC is 0xdebb20e3. + + The CRC-32 table is created as follows (pseudocode, the variable + CRC32 and the table of 256 entries are 32-bit unsigned integers): + + FOR (i=0 TO 255) + { + CRC32=i + FOR (N=1 TO 8) + { + IF (CRC32 AND 1) + CRC32 = (CRC32 >> 1) XOR 0xedb88320 + ELSE + CRC32 = CRC32 >> 1 + } + CRC32TAB[i] = CRC32; + } + + When processing data, each byte is run through the CRC calculation + routine as follows (variable CRC stores the 32-bit CRC value/result, + C is the next 8-bit character): + + CRC=CRC32TAB[(CRC XOR C) AND 0xFF] XOR ((CRC>>8) AND 0x00ffffff) + + + The authors + ===================================================================== + The authors can be reached at the following addresses: + + Joaquim H. Homrighausen Arjen G. Lentz + 389, route d'Arlon Lentz Software Development + L-8011 Strassen Langegracht 7B + Luxembourg 3811 BT Amersfoort + The Netherlands + joho@ae.lu + FidoNet 2:270/17 aglentz@fido.lu + FidoNet 2:283/512 + + + The name HYDRA + ===================================================================== + Hydra is a greek mythological creature (the watersnake). Like the + Nemeic lion, Hydra is the daughter of the giant Typhon and the snake + Echidna. + + She grew up in the marshes of Lerna near/in Argolis (Argos). There + she ate entire herds of cattle and destroyed large cropfields. Later, + she lived in caves on a hill near the spring of Amymone. + + Hydra is a monstrous large snake with nine heads: eight mortal ones, + and one (the middle one) immortal. She was defeated and killed by + Heracles (Hercules) - son of Zeus and Alcemene, grandson of Perseus - + as the second of his twelve tasks, with the help of his cousin + Iolaos. Every time he cut of one of the heads with his sword, two new + heads grew in its place. So Iolaos scorched the wound of each cut off + head with burning branches so the head couldn't grow on again. + + Heracles buried the last and immortal head under a stone nearby. He + also dipped his arrows in Hydra's poisonous blood, thereafter the + wounds caused by those arrows were incurable. + + + Also star constellation (sign of the watersnake) in the equatorial + zone. + + + Also a type of sweetwater polip (the Hydroidea Thin, tubeshaped body + can be full contracted, just like the six (or more) tentacles. There + is no generation change, the gender-products grow directly on the + body. + + The animals catch their prey with nettlecells, and are very verocious. + They can be found in various stilstanding and flowing water and were + first described by Anthonie van Leeuwenhoek in the year 1704. + + + Also small island (spelled Idhra in modern Greek) of the Sargonic + group in the Aegean Sea, just of the eastern tip of the Argolis + peninsula of the Peloponesus (Attika). Its length (NE/SW) is 21 km, + with a total area of 49,6 square km. Its highest point is 597 meters + above sea level. Population of 2794 (latest census: 1981). Only one + real city with the same name as the island. Once quite wooded and + well watered, now denuded and dry, with almost no arable land + (infertile limestone). Certain times of the year the people have to + ship in water from the main land. Its Turkish name is Camliza which + means "Place of Pines". + + References: + Dutch: Oosthoeks Encyclopedie + Grote Winklerprins Encyclopedie + English: Encyclopaedia Brittannica + +
- | Document: FSC-0087 - | Version: 001 - | Date: 31 October, 1995 - | - | Robert Williamson FidoNet#1:167/104.0 - - File Forwarding in Fidonet Technology Networks - Robert Williamson FidoNet#1:167/104.0 robert@ecs.mtlnet.org - - Purpose: - To document current practices in File Forwarding and the minimum - requirements and known extensions of the TIC file format. - - Acknowledgements: - The TIC file format was introduced by Barry Geller, in the MSDOS - File Forwarder, Tick. Useful extensions to this format were introduced - by Harald Helms, in the MSDOS FileForwarder, AllFix. - - Terminology: - FTN - Fidonet Technolgy Network, such as FIDONET, AMIGANET or IBMNET. - Sometimes used interchangably with the term DOMAIN. - - FNC - FileName Conversion, process of converting filenames to msdos 8.3 - format for transmission. - - FQFA - Fully Qualified FTN Address, the format is - FTN#Zone:Net/Node.Point - - CRC - Cyclic Redundancy Check, method to determine whether some data - has been altered. CRC-32 is used in File Forwarding. - - TIC - a file that contains control information for the File Forwarding - system. These files are named xxSTAMP.TIC, where xx is an - abbreviation representing the File Forwarding program name and - stamp is a unixdate stamp truncated to 6 characters. - - UTC - Universal Time Coordinated, the time at the 0o meridian - (Greenwich); previously called GMT - - - forwarding - the process of creating and sending tic files and the - associated file to one's downlinks. - - ticking - the processing of reading and verifying a tic file and it's - associated file. - - hatching - the process of introducing a new file into a fileecho - - cross-hatching - the process of forwarding a file from one fileecho - (ususally restricted) to another - - Associated File - The file listed in the FILE field of the TIC file. - - - Note that use of UPPERCASE on tic file keywords in this document in - for display purposes only. - - Format of a TIC file: - - Addressing: - In a tic file any form of FTN address representation from 3d to - FQFA may be used. All File Forwarders must understand the - following formats: - zone:net/node - 3D - zone:net/node.point - 4D - zone:net/node@ftn - 5D - point 0 assumed - zone:net/node.point@ftn - 5D - ftn#zone:net/node.point - fqfa - - File Forwarders should have configurable options per site as to the - type of addressing each of it's downlinks can understand. - - Dates: - All dates are expressed in UTC. - - TimeDateStamps: - All TimeDateStamps are unix TimeDateStamps (# of seconds since Jan - 1, 1960) in UTC and expressed in hexadecimal notation. - - Case Insensitivity: - the format is completely case-insensitive. It is general practice - that the first letter of a keyword is uppercase. This is not a - requirement. - - Order Dependancy: - keywords are not order dependant. - Order dependancy is required in some groupings of a keyword, such - as PATH, VIA, DESC and APP. - - Modification of address fields on PassThrough: - The forwarding site may modify the addresses in any keyword field - to make them compliant with the addressing limitations of each - downlink. - - Stripping of SeenBys: - The forwarding site may strip seenbys to current FTN, ZONE or NET, - when not forwarding outside of current FTN, ZONE or NET. This does - not imply nor permit the stripping of of a direct downlink which is - outside the current strip filter. - - - Keywords: - There are no colons on keywords. - - Each keyword line is terminated with CR LF pair. - - The maximum length of a keyword line is 256 characters, including the - CRLF termination. Some keyword lines may have a shorter limit. - - Keywords are separated from their data by a single space. There is - no space if there is no data associated with the keyword. - eg: ReturnReceipt - - Keywords are case-insensitive and order independant. - - Keywords not understood are to be passed-though. - - Known Keywords that are blank should not be passed though. - For example, an empty AREADESC, could be either dropped or the - blank replaced with the proper description. - - Most Keywords are passed through when processing. - There are exceptions. In some cases, a site-specific replacement - may be created. - Keywords marked with a ^ should not be passed-through. - - Keywords marked with a * are REQUIRED when processing a TIC file. - If any of these are missing, the tic file should be considered as - BAD and the associated file not forwarded to downlinks. - - Keywords marked with a # are CREATED when hatching or forwarding. - - - *# AREA [AreaName] - the TagName of the file area. - - AREADESC [description of area] OPTIONAL - a short (80 chars) description of the file area. This could be - the description found in FileBone.NA - - *# FILE [File being sent] - the name of the file being sent, no path - the filename must conform to msdos 8.3 format, unless it is known - that the receiving site can handle longer filenames. - - ^# FULLNAME [original filename before FNC] OPTIONAL FNC only - the original filename (no path) before FileName Conversion - - *# CRC [CRC-32 in hex] - crc of the file being sent, 8 hexadecimal characters - - ^ MAGIC [MagicName] OPTIONAL - Name under which the file can be FREQed from the site listed in - FROM. This is NOT passed though when forwarding, unless the - MAGIC name is the same on the forwarding site. It can be - replaced by the appropriate name. - - REPLACES [FileName] OPTIONAL - Filename (no path) of a file hatched in the AREA that the - associated file replaces. If the site expects FNC files, and the - filename does not confrom to msdos 8.3 convention, the REPLACES - name should also be FNC. - - # DESC [Description] - Description of the file, limited to 80 characters per line, - including CRLF termination. - If multiple LDESC lines are used, the DESC line must provide the - maximum information. No File Forwadrer is required to passthough - or make use of any extra DESC line after the first. - - # LDESC [multiple lines] - A long description of the file. LDESC does NOT replace DESC, it - is used IN ADDITION to the short description. No File Forwarder - is required make use of LESC lines. - - # SIZE [Bytes] OPTIONAL, SHOULD be required - Length of the file in bytes - - DATE [TimeDateStamp] - TimeDateStamp of the file. Can be date of creation of archive. - - RELEASE [TimeDateStamp] - Date when file is TO BE released. Usually used by SDS, but can - be used by ADS as well. - - AUTHOR [name] - Name of the author of the software package being hatched. This - field is obviously not applicable to Newsletters, Nodelists and - Diffs and the like. - - SOURCE [authors_address] - FTN address of the Author of the software package being hatched. - Not necessary the same as the ORIGIN hatch site. Does not have - to be an FTN address. - - ^ APP [program] [Application Specific Information] - The APP keyword is a keyword known to programs of the name - indicated. APP'S are order dependent and must be passed though. - - *# ORIGIN [Address] - Site where file entered the fileecho - - *^# FROM [Address] [Pwd] - Site that is forwarding the file to the next site. Pwd is - optional and rarely used, IF AT ALL. Pwd is NEVER passed through. - - ^ TO [Address] OPTIONAL - Site to which this TIC and the assocaited file are being sent. - This keyword is included in the .TIC file when: - a) the file is being routed via another system which permits - such routing. - b) the platform in use does not have any FTN software - independant method of associating a file nd it's - destination. eg. platforms that do not have filenotes - that could contain this information as part of the - filesystem. - - If the address in the TO line is that of the receiving site, the - field is not passed through when forwarding. If the address in - the TO lines IS NOT that of the receiving site, it should be - forwarded to the TO site, if a routing agreement is in place with - the sending site. - - *^# CREATED [by] [Program Banner] - File Forwarder which created the TIC file. This is generally in - the form: - Created [by] program_name version [copyright_info] - - VIA [FROM CREATED] OPTIONAL (tracking) - Copy of CREATED line of FROM, with 'Created [by]' stripped and - FROM prepended. Always passed though. The VIA is only created - by the receiving site when forwarding. It is never created by the - hatching site. Therefore, in any TIC file, the addresses in the - FROM and VIA should never be the same. - examples: - Via 1:167/100 ALLFIX+ 4.31 Copyright (C) 1992,95 Harald Harms (2:281/910) - Via FIDONET#1:167/104.0 XTick 3 Copyright (c) 1995 Robert Williamson FIDONET#1:167/104.0 - - *# PATH [Address] [TimeDateStamp] [date and time] - Address of Site which has forwarded the file. TimeDateStamp, - date and time is that of when the Site received and Processed the - file. - - * # SEENBY [Address] - Site which has received the file. There are multiple lines of - Seenby and they are unordered. - - * PW [password] - Site or Area password. This is case-insensitive and should be at - least 5 characters in length. - - PGP [signature] - PrettyGoodPrivacy signature. To be discussed. - - ^ ReceiptRequest -no data- OPTIONAL - A request to the receiving system to generate a IsReturnReceipt - (attribute word bit 13) messsage, in the same manner it would if - it had received a message with the FileAttach an ReturnReceipt - attributes and a subject of the filename. - There is NO requirement to recognize this keyword. It should - never be passed through. - - Transmission of Files: - - The associated file, that is, the file Listed in the FILE field of the - TIC file, should always be sent FIRST. In the case of a failed session, - sending the FILE first prevents the orphaning of the file that is - normally caused by the deletion or movement of the TIC file to BAD. - - File Forwarders should not move or delete orphaned TIC files, but this - can neither be relied upon nor mandated. - - File Forwaders should be transparent to the renaming of file by - mailers. This means that if the mailer renames a duplicate file by - renaming or bumpinmg a numeric extension, the File Forwarder should be - able to use the size and crc fields of the TIC to find and properly - rename the associated file referred to in the TIC. - - File Forwaders should always delete and dequeue unsent TIC files when - re-hatching the same or updated version of an associated file. The - implementor may wish to allow exceptions for periodicals such as - nodediffs and newsletters. - - -to be continued- -- - Go Back - - - - + + + +
+ | Document: FSC-0087 + | Version: 001 + | Date: 31 October, 1995 + | + | Robert Williamson FidoNet#1:167/104.0 + + File Forwarding in Fidonet Technology Networks + Robert Williamson FidoNet#1:167/104.0 robert@ecs.mtlnet.org + + Purpose: + To document current practices in File Forwarding and the minimum + requirements and known extensions of the TIC file format. + + Acknowledgements: + The TIC file format was introduced by Barry Geller, in the MSDOS + File Forwarder, Tick. Useful extensions to this format were introduced + by Harald Helms, in the MSDOS FileForwarder, AllFix. + + Terminology: + FTN - Fidonet Technolgy Network, such as FIDONET, AMIGANET or IBMNET. + Sometimes used interchangably with the term DOMAIN. + + FNC - FileName Conversion, process of converting filenames to msdos 8.3 + format for transmission. + + FQFA - Fully Qualified FTN Address, the format is + FTN#Zone:Net/Node.Point + + CRC - Cyclic Redundancy Check, method to determine whether some data + has been altered. CRC-32 is used in File Forwarding. + + TIC - a file that contains control information for the File Forwarding + system. These files are named xxSTAMP.TIC, where xx is an + abbreviation representing the File Forwarding program name and + stamp is a unixdate stamp truncated to 6 characters. + + UTC - Universal Time Coordinated, the time at the 0o meridian + (Greenwich); previously called GMT + + + forwarding - the process of creating and sending tic files and the + associated file to one's downlinks. + + ticking - the processing of reading and verifying a tic file and it's + associated file. + + hatching - the process of introducing a new file into a fileecho + + cross-hatching - the process of forwarding a file from one fileecho + (ususally restricted) to another + + Associated File - The file listed in the FILE field of the TIC file. + + + Note that use of UPPERCASE on tic file keywords in this document in + for display purposes only. + + Format of a TIC file: + + Addressing: + In a tic file any form of FTN address representation from 3d to + FQFA may be used. All File Forwarders must understand the + following formats: + zone:net/node - 3D + zone:net/node.point - 4D + zone:net/node@ftn - 5D - point 0 assumed + zone:net/node.point@ftn - 5D + ftn#zone:net/node.point - fqfa + + File Forwarders should have configurable options per site as to the + type of addressing each of it's downlinks can understand. + + Dates: + All dates are expressed in UTC. + + TimeDateStamps: + All TimeDateStamps are unix TimeDateStamps (# of seconds since Jan + 1, 1960) in UTC and expressed in hexadecimal notation. + + Case Insensitivity: + the format is completely case-insensitive. It is general practice + that the first letter of a keyword is uppercase. This is not a + requirement. + + Order Dependancy: + keywords are not order dependant. + Order dependancy is required in some groupings of a keyword, such + as PATH, VIA, DESC and APP. + + Modification of address fields on PassThrough: + The forwarding site may modify the addresses in any keyword field + to make them compliant with the addressing limitations of each + downlink. + + Stripping of SeenBys: + The forwarding site may strip seenbys to current FTN, ZONE or NET, + when not forwarding outside of current FTN, ZONE or NET. This does + not imply nor permit the stripping of of a direct downlink which is + outside the current strip filter. + + + Keywords: + There are no colons on keywords. + + Each keyword line is terminated with CR LF pair. + + The maximum length of a keyword line is 256 characters, including the + CRLF termination. Some keyword lines may have a shorter limit. + + Keywords are separated from their data by a single space. There is + no space if there is no data associated with the keyword. + eg: ReturnReceipt + + Keywords are case-insensitive and order independant. + + Keywords not understood are to be passed-though. + + Known Keywords that are blank should not be passed though. + For example, an empty AREADESC, could be either dropped or the + blank replaced with the proper description. + + Most Keywords are passed through when processing. + There are exceptions. In some cases, a site-specific replacement + may be created. + Keywords marked with a ^ should not be passed-through. + + Keywords marked with a * are REQUIRED when processing a TIC file. + If any of these are missing, the tic file should be considered as + BAD and the associated file not forwarded to downlinks. + + Keywords marked with a # are CREATED when hatching or forwarding. + + + *# AREA [AreaName] + the TagName of the file area. + + AREADESC [description of area] OPTIONAL + a short (80 chars) description of the file area. This could be + the description found in FileBone.NA + + *# FILE [File being sent] + the name of the file being sent, no path + the filename must conform to msdos 8.3 format, unless it is known + that the receiving site can handle longer filenames. + + ^# FULLNAME [original filename before FNC] OPTIONAL FNC only + the original filename (no path) before FileName Conversion + + *# CRC [CRC-32 in hex] + crc of the file being sent, 8 hexadecimal characters + + ^ MAGIC [MagicName] OPTIONAL + Name under which the file can be FREQed from the site listed in + FROM. This is NOT passed though when forwarding, unless the + MAGIC name is the same on the forwarding site. It can be + replaced by the appropriate name. + + REPLACES [FileName] OPTIONAL + Filename (no path) of a file hatched in the AREA that the + associated file replaces. If the site expects FNC files, and the + filename does not confrom to msdos 8.3 convention, the REPLACES + name should also be FNC. + + # DESC [Description] + Description of the file, limited to 80 characters per line, + including CRLF termination. + If multiple LDESC lines are used, the DESC line must provide the + maximum information. No File Forwadrer is required to passthough + or make use of any extra DESC line after the first. + + # LDESC [multiple lines] + A long description of the file. LDESC does NOT replace DESC, it + is used IN ADDITION to the short description. No File Forwarder + is required make use of LESC lines. + + # SIZE [Bytes] OPTIONAL, SHOULD be required + Length of the file in bytes + + DATE [TimeDateStamp] + TimeDateStamp of the file. Can be date of creation of archive. + + RELEASE [TimeDateStamp] + Date when file is TO BE released. Usually used by SDS, but can + be used by ADS as well. + + AUTHOR [name] + Name of the author of the software package being hatched. This + field is obviously not applicable to Newsletters, Nodelists and + Diffs and the like. + + SOURCE [authors_address] + FTN address of the Author of the software package being hatched. + Not necessary the same as the ORIGIN hatch site. Does not have + to be an FTN address. + + ^ APP [program] [Application Specific Information] + The APP keyword is a keyword known to programs of the name + indicated. APP'S are order dependent and must be passed though. + + *# ORIGIN [Address] + Site where file entered the fileecho + + *^# FROM [Address] [Pwd] + Site that is forwarding the file to the next site. Pwd is + optional and rarely used, IF AT ALL. Pwd is NEVER passed through. + + ^ TO [Address] OPTIONAL + Site to which this TIC and the assocaited file are being sent. + This keyword is included in the .TIC file when: + a) the file is being routed via another system which permits + such routing. + b) the platform in use does not have any FTN software + independant method of associating a file nd it's + destination. eg. platforms that do not have filenotes + that could contain this information as part of the + filesystem. + + If the address in the TO line is that of the receiving site, the + field is not passed through when forwarding. If the address in + the TO lines IS NOT that of the receiving site, it should be + forwarded to the TO site, if a routing agreement is in place with + the sending site. + + *^# CREATED [by] [Program Banner] + File Forwarder which created the TIC file. This is generally in + the form: + Created [by] program_name version [copyright_info] + + VIA [FROM CREATED] OPTIONAL (tracking) + Copy of CREATED line of FROM, with 'Created [by]' stripped and + FROM prepended. Always passed though. The VIA is only created + by the receiving site when forwarding. It is never created by the + hatching site. Therefore, in any TIC file, the addresses in the + FROM and VIA should never be the same. + examples: + Via 1:167/100 ALLFIX+ 4.31 Copyright (C) 1992,95 Harald Harms (2:281/910) + Via FIDONET#1:167/104.0 XTick 3 Copyright (c) 1995 Robert Williamson FIDONET#1:167/104.0 + + *# PATH [Address] [TimeDateStamp] [date and time] + Address of Site which has forwarded the file. TimeDateStamp, + date and time is that of when the Site received and Processed the + file. + + * # SEENBY [Address] + Site which has received the file. There are multiple lines of + Seenby and they are unordered. + + * PW [password] + Site or Area password. This is case-insensitive and should be at + least 5 characters in length. + + PGP [signature] + PrettyGoodPrivacy signature. To be discussed. + + ^ ReceiptRequest -no data- OPTIONAL + A request to the receiving system to generate a IsReturnReceipt + (attribute word bit 13) messsage, in the same manner it would if + it had received a message with the FileAttach an ReturnReceipt + attributes and a subject of the filename. + There is NO requirement to recognize this keyword. It should + never be passed through. + + Transmission of Files: + + The associated file, that is, the file Listed in the FILE field of the + TIC file, should always be sent FIRST. In the case of a failed session, + sending the FILE first prevents the orphaning of the file that is + normally caused by the deletion or movement of the TIC file to BAD. + + File Forwarders should not move or delete orphaned TIC files, but this + can neither be relied upon nor mandated. + + File Forwaders should be transparent to the renaming of file by + mailers. This means that if the mailer renames a duplicate file by + renaming or bumpinmg a numeric extension, the File Forwarder should be + able to use the size and crc fields of the TIC to find and properly + rename the associated file referred to in the TIC. + + File Forwaders should always delete and dequeue unsent TIC files when + re-hatching the same or updated version of an associated file. The + implementor may wish to allow exceptions for periodicals such as + nodediffs and newsletters. + + -to be continued- ++ +Go Back + + + + diff --git a/html/ftsc/fsc-0088.html b/html/ftsc/fsc-0088.html index 8231eaf1..8aedda87 100755 --- a/html/ftsc/fsc-0088.html +++ b/html/ftsc/fsc-0088.html @@ -1,326 +1,327 @@ - - -
- | Document: FSC-0088 - | Version: 001 - | Date: 31 October, 1995 - | - | Robert Williamson FidoNet#1:167/104.0 - - Compatibility and Link Qualifier Extensions for EMSI Sessions - Robert Williamson FidoNet#1:167/104.0 robert@ecs.mtlnet.org - - Purpose: - - The basic purpose of this document is to start discussions which will - hopefully result in an improved handshake negotiation protocol. - - Scope: - - Relation of flags to Types of files transferred: - - The FSC-0056 EMSI specification (hereafter referred to as EMSI-I) - makes little distinction between ARCmail/packets and other types of - files, such as files attached and TIC'ed files. In EMSI-I, the term - 'Mail' when not used in conjunction with the term 'compressed', is - interpreted to mean ANY file. - - This extension (hereafter referred to as EMSI-II) makes reference to - and allows control of types of files in addition to 'compressed mail'. - References to 'Mail' are changed to 'File' where common practice so - indicates. The additional qualifier flags described provide for more - control as to the types of files a system is prepared to receive. - - - Relation of flags to presented addresses: - - The EMSI-I specification does not allow qualification for any address - other than the PRIMARY address. This means that Link flags are limited - in application to either all presented addresses or to the primary - presented address only. - - This extension also allows application of Link flags to specific - addresses other than the primary. - - - Distinctions between Calling and Answering System: - - In the EMSI-I spec, the type of flags that may be presented is limited - by the status of the site. Certain flags may only be presented when - the site is the caller and other flags may only be presented when the - site is the answerer. This proposed extension removes this - distinction. - - In the EMSI-I spec, certain Link and Capability (a.k.a: Compatibility) - flags are caller-driven, while others are controlled by the answering - system. This specification attempts to harmonize these discrepancies. - - A attempt is made to remain somewhat backwards compatible and to have - new flags follow the original flag naming convention. However, IMHO, - it would be preferable to harmonize the flags; reducing the number of - them while retaining the fine type control, so that the same codes are - used in all sessions. - - Under both EMSI-I and EMSI-II, any flags that are not understood, are - to be ignored. Therfore, if a site presents it's flags in EMSI-II - format and the other site does not do EMSI-II, it is permissable for - that site to interpret all flags according to EMSI-I specifications. - - - Specifics: - - Compatibility flags: - - Compatibility flags consist of a string of codes that specify the - PROTOCOL CAPABILITIES and ENABLED FEATURES of the mailer. - - ARC, XMA - These EMSI-I compatibility flags have no meaning relavant to the - transfer of files and are not to be presented under EMSI-II. If - received, they are to be ignored. - - - FNC - The FNC EMSI-I compatibility flag has been identified as a 'mistake' by - the author of EMSI-I. This is agreeable as that specification called - for the creation of a filename that was ALWAYS 8.3, not - up-to-8.up-to-3. - It is not to be presented under EMSI-II. If received as a - compatibility flag, it is to be ignored. - - - Protocol Selection: - - In the EMSI-I spec, a requirement is placed upon the calling system to - present it's available protocols in order of preference. A quote - follows: - - The calling system must list supported protocols first and - descending order of preference (the most desirable protocol - should be listed first). - The answering system should only present one protocol and it - should be the first item in the compatibility_codes field. - - Some mailer authors have interpreted 'the compatibility_codes field' in - the second sentence to mean that of the answering system, thereby - making protocol selection RECEIVER-PREFS driven. This interpretation - makes unnecessary the 'decending order' requirement placed upon the - calling system, so shall be considered in conflict with that - requirement. - - Most mailer authors have interpreted that phrase to mean the - 'compatibility_codes field' OF THE CALLER, thereby making protocol - selection CALLER-PREFS driven. Since EMSI-I was intended to be "a - clear protocol definition for state-of-the-art E-Mail systems to - follow", they cannot be faulted for interpretation. Caller-prefs - driven selection is state-of-the-art, receiver-prefs driven selection - is older technolgy, such as Wazoo. - - This specification requires that the second interpretation, - CALLER-PREFS driven, be mandatory. - - - New Compatibilty Flags: - ---------------------- - - EII - Indicates that the system will interpret flags under this - specification, if other end also presents this flag. IF either or both - systems do not present this flag, all interpretations are done - according to EMSI-I. - - DFB - Indicates that the system presenting is capabable of fall-back to - FTS1/WAZOO negotiation in the case of failure of EMSI handshake or no - common protocol. Since ZMO is the minimum required protocol, NCP - should only occur if the answering system presents more than one - protocol.. (ie. it's broken) - - FRQ - Indicates that the system will accept and process file requests - received during outbound calls. In other words, the calling system - will do a second turnaround for uni-directional protocols, to send the - files requested, at his cost. - - NRQ - NRQ should be presented ONLY IF the mailer does not have a file request - server, task or function and cannot accept requests.. It should NOT be - used to indicate that the function is temporarly disabled. - - When examined, No requests will be sent. It would be advisable that - the mailer alert the system operator of this occurance to prevent - continued polling of the remote site. - - - Protocol Capabilities: - - Protocol capability flags are presented in decending order of - preference by the caller. The answering system selects and presents - the FIRST protocol from the callers list that it supports. The - answering system must present only ONE protocol. - - HYD Hydra bi-directional (link flags define parameters) - JAN Janus bi-directional - TZA DirectZap (TrapDoor DirectZap varient) - DZA DirectZap (Zmodem variant, reduced escape set) - ZAP ZedZap (Zmodem variant, upe 8K blocks) - ZMO Zmodem w/1,024 packets (Wazoo ZedZip) - SLK SeaLink (no TYSNC, No MDM7, No TeLink) - (8-32k window/ReSync/OverDrive/LongNames) - - NCP - This is presented if no compatible protocol can be negotiated under - EMSI. Since in most FTN networks, a common protocol DOES exist, - fallback to WaZoo and FTS1 negotiation is expected. If these - negotiation methods are not available, the session is terminated. - - This condition should never occur under normal circumstances. It - should be considered as a problem with the design or configuration of - one of the mailers involved. - - Link flags: - ---------- - - Link flags consist of a string of codes that specify DESIRED CONNECT - CONDITIONS. They apply to the CURRENT SESSION ONLY. Under EMSI-I, - there are four TYPES of link flags: communications parameters, session - parameters, pickup options and hold options. Under EMSI-II, only three - types are used, the communications parameters type is REMOVED, as it - serves no purpose whatsoever in FTN operations. - - - Link Session options: - - FNC - If either system presents this flag, it is an indication that the - presenting system requires filename conversion to cp/m-msdos - conventions. The other system will convert filenames to cp/m cpm/msdos - 8.3 conventions before sending. - The convention is defined as a filename consisting of two - parts, the filepart and extension. The filepart and extension are - separated by a period ".". The filepart may be from 1 to 8 characters - in length and the extension may be from 0 to 3 characters. The - character set shall be any uppercase character in the range A-Z and any - numeric character in the range 0-9. If the extension is of zero - length, the period may or may not be present. - - - RMA - Indicates that the presenting site is able to send and process multiple - file requests. If both sites present this flag, the caller will send - any REQ files found for each AKA presented by the answering system. - The answering system will process each received REQ. - - RH1 - Indicates that under the Hydra protocol, batch one contains file - requests only, while batch 2 is reserved for all other files. - - - (others to be defined) - - Pickup and Hold Flags: - - Under the EMSI-I specification, Link Pickup flags are only presented - when calling (an Outbound Session) and are examined and processed only - when answering (an Inbound Session) and Link Hold flags are only - presented when answering (an Inbound Session) and are examined and - processed only when calling (an Outbound Session). - - With EMSI-II, BOTH Pickup and Hold flags are presented by both sites - during a session. This allows more control for those systems, for - example, which cannot modify addresses presented or rotate akas to - change the primary address presented on a per-session or per-site - basis. - - - Link Pickup and Hold: - - Each system can present one of three (or more) Link options related to - application of addresses. If neither of these flags are presented, PUA - is to be assumed. - - Neither PUA nor PUP is to be presented if only one address was - presented. - - PUP Pickup FILES for primary address only - / PUA Pickup FILES for all presented addresses - / PUn Pickup FILES for address number n in AKA list - one of | - \ - \ NPU No FILE pickup desired. (calling system) - HAT Hold all FILES (answering system) - HAn Hold all FILES for address number n in AKA list - - - Qualifiers: - - Qualifiers are processed in the order presented, with any conflict - being resolved by subsequent qualifiers overridding any conflicting - previous qualifier in the list. - - Qualifiers may be not be presented with either NPU or HAT and should be - ignored if received with NPU or HAT. - - PickUp: - - PMO PickUp Mail (ARCmail and Packets) ONLY - PMn PickUp Mail ONLY for address number n in AKA list - - NFE No TIC'S, associated files or files - attachs desired - NFn No TIC'S, associated files or file attaches, - for address number n in AKA list - - NXP No compressed mail pickup desired - NXn No compressed mail pickup desired, - for address number n in AKA list - - NRQ File requests not accepted by caller - This flag is presented if file request processing - is disabled TEMPORARILY for any reason - NRn File requests not accepted by caller - for address number n in AKA list - - Note that NFE,NPX,NRQ != NPU - - Hold: - - HNM Hold all traffic EXCEPT Mail (ARCmail and Packets) - HNn Hold all traffic EXCEPT Mail (ARCmail and Packets) - for address number n in AKA list - - HXT Hold compressed mail traffic. - HXn Hold compressed mail traffic. - for address number n in AKA list - - HFE Hold tic's and associated files - and file attaches other than mail - HFn Hold tic's and associated files - and file attaches other than mail - for address number n in AKA list - - HRQ Hold file requests (not processed at this time) - This flag is presented if file request processing - is disabled TEMPORARILY for any reason - HRn Hold file requests (not processed at this time) - for address number n in AKA list - - Note that HXT,HRQ,HFE == HAT -- - Go Back - - - - + + + +
+ | Document: FSC-0088 + | Version: 001 + | Date: 31 October, 1995 + | + | Robert Williamson FidoNet#1:167/104.0 + + Compatibility and Link Qualifier Extensions for EMSI Sessions + Robert Williamson FidoNet#1:167/104.0 robert@ecs.mtlnet.org + + Purpose: + + The basic purpose of this document is to start discussions which will + hopefully result in an improved handshake negotiation protocol. + + Scope: + + Relation of flags to Types of files transferred: + + The FSC-0056 EMSI specification (hereafter referred to as EMSI-I) + makes little distinction between ARCmail/packets and other types of + files, such as files attached and TIC'ed files. In EMSI-I, the term + 'Mail' when not used in conjunction with the term 'compressed', is + interpreted to mean ANY file. + + This extension (hereafter referred to as EMSI-II) makes reference to + and allows control of types of files in addition to 'compressed mail'. + References to 'Mail' are changed to 'File' where common practice so + indicates. The additional qualifier flags described provide for more + control as to the types of files a system is prepared to receive. + + + Relation of flags to presented addresses: + + The EMSI-I specification does not allow qualification for any address + other than the PRIMARY address. This means that Link flags are limited + in application to either all presented addresses or to the primary + presented address only. + + This extension also allows application of Link flags to specific + addresses other than the primary. + + + Distinctions between Calling and Answering System: + + In the EMSI-I spec, the type of flags that may be presented is limited + by the status of the site. Certain flags may only be presented when + the site is the caller and other flags may only be presented when the + site is the answerer. This proposed extension removes this + distinction. + + In the EMSI-I spec, certain Link and Capability (a.k.a: Compatibility) + flags are caller-driven, while others are controlled by the answering + system. This specification attempts to harmonize these discrepancies. + + A attempt is made to remain somewhat backwards compatible and to have + new flags follow the original flag naming convention. However, IMHO, + it would be preferable to harmonize the flags; reducing the number of + them while retaining the fine type control, so that the same codes are + used in all sessions. + + Under both EMSI-I and EMSI-II, any flags that are not understood, are + to be ignored. Therfore, if a site presents it's flags in EMSI-II + format and the other site does not do EMSI-II, it is permissable for + that site to interpret all flags according to EMSI-I specifications. + + + Specifics: + + Compatibility flags: + + Compatibility flags consist of a string of codes that specify the + PROTOCOL CAPABILITIES and ENABLED FEATURES of the mailer. + + ARC, XMA + These EMSI-I compatibility flags have no meaning relavant to the + transfer of files and are not to be presented under EMSI-II. If + received, they are to be ignored. + + + FNC + The FNC EMSI-I compatibility flag has been identified as a 'mistake' by + the author of EMSI-I. This is agreeable as that specification called + for the creation of a filename that was ALWAYS 8.3, not + up-to-8.up-to-3. + It is not to be presented under EMSI-II. If received as a + compatibility flag, it is to be ignored. + + + Protocol Selection: + + In the EMSI-I spec, a requirement is placed upon the calling system to + present it's available protocols in order of preference. A quote + follows: + + The calling system must list supported protocols first and + descending order of preference (the most desirable protocol + should be listed first). + The answering system should only present one protocol and it + should be the first item in the compatibility_codes field. + + Some mailer authors have interpreted 'the compatibility_codes field' in + the second sentence to mean that of the answering system, thereby + making protocol selection RECEIVER-PREFS driven. This interpretation + makes unnecessary the 'decending order' requirement placed upon the + calling system, so shall be considered in conflict with that + requirement. + + Most mailer authors have interpreted that phrase to mean the + 'compatibility_codes field' OF THE CALLER, thereby making protocol + selection CALLER-PREFS driven. Since EMSI-I was intended to be "a + clear protocol definition for state-of-the-art E-Mail systems to + follow", they cannot be faulted for interpretation. Caller-prefs + driven selection is state-of-the-art, receiver-prefs driven selection + is older technolgy, such as Wazoo. + + This specification requires that the second interpretation, + CALLER-PREFS driven, be mandatory. + + + New Compatibilty Flags: + ---------------------- + + EII + Indicates that the system will interpret flags under this + specification, if other end also presents this flag. IF either or both + systems do not present this flag, all interpretations are done + according to EMSI-I. + + DFB + Indicates that the system presenting is capabable of fall-back to + FTS1/WAZOO negotiation in the case of failure of EMSI handshake or no + common protocol. Since ZMO is the minimum required protocol, NCP + should only occur if the answering system presents more than one + protocol.. (ie. it's broken) + + FRQ + Indicates that the system will accept and process file requests + received during outbound calls. In other words, the calling system + will do a second turnaround for uni-directional protocols, to send the + files requested, at his cost. + + NRQ + NRQ should be presented ONLY IF the mailer does not have a file request + server, task or function and cannot accept requests.. It should NOT be + used to indicate that the function is temporarly disabled. + + When examined, No requests will be sent. It would be advisable that + the mailer alert the system operator of this occurance to prevent + continued polling of the remote site. + + + Protocol Capabilities: + + Protocol capability flags are presented in decending order of + preference by the caller. The answering system selects and presents + the FIRST protocol from the callers list that it supports. The + answering system must present only ONE protocol. + + HYD Hydra bi-directional (link flags define parameters) + JAN Janus bi-directional + TZA DirectZap (TrapDoor DirectZap varient) + DZA DirectZap (Zmodem variant, reduced escape set) + ZAP ZedZap (Zmodem variant, upe 8K blocks) + ZMO Zmodem w/1,024 packets (Wazoo ZedZip) + SLK SeaLink (no TYSNC, No MDM7, No TeLink) + (8-32k window/ReSync/OverDrive/LongNames) + + NCP + This is presented if no compatible protocol can be negotiated under + EMSI. Since in most FTN networks, a common protocol DOES exist, + fallback to WaZoo and FTS1 negotiation is expected. If these + negotiation methods are not available, the session is terminated. + + This condition should never occur under normal circumstances. It + should be considered as a problem with the design or configuration of + one of the mailers involved. + + Link flags: + ---------- + + Link flags consist of a string of codes that specify DESIRED CONNECT + CONDITIONS. They apply to the CURRENT SESSION ONLY. Under EMSI-I, + there are four TYPES of link flags: communications parameters, session + parameters, pickup options and hold options. Under EMSI-II, only three + types are used, the communications parameters type is REMOVED, as it + serves no purpose whatsoever in FTN operations. + + + Link Session options: + + FNC + If either system presents this flag, it is an indication that the + presenting system requires filename conversion to cp/m-msdos + conventions. The other system will convert filenames to cp/m cpm/msdos + 8.3 conventions before sending. + The convention is defined as a filename consisting of two + parts, the filepart and extension. The filepart and extension are + separated by a period ".". The filepart may be from 1 to 8 characters + in length and the extension may be from 0 to 3 characters. The + character set shall be any uppercase character in the range A-Z and any + numeric character in the range 0-9. If the extension is of zero + length, the period may or may not be present. + + + RMA + Indicates that the presenting site is able to send and process multiple + file requests. If both sites present this flag, the caller will send + any REQ files found for each AKA presented by the answering system. + The answering system will process each received REQ. + + RH1 + Indicates that under the Hydra protocol, batch one contains file + requests only, while batch 2 is reserved for all other files. + + + (others to be defined) + + Pickup and Hold Flags: + + Under the EMSI-I specification, Link Pickup flags are only presented + when calling (an Outbound Session) and are examined and processed only + when answering (an Inbound Session) and Link Hold flags are only + presented when answering (an Inbound Session) and are examined and + processed only when calling (an Outbound Session). + + With EMSI-II, BOTH Pickup and Hold flags are presented by both sites + during a session. This allows more control for those systems, for + example, which cannot modify addresses presented or rotate akas to + change the primary address presented on a per-session or per-site + basis. + + + Link Pickup and Hold: + + Each system can present one of three (or more) Link options related to + application of addresses. If neither of these flags are presented, PUA + is to be assumed. + + Neither PUA nor PUP is to be presented if only one address was + presented. + + PUP Pickup FILES for primary address only + / PUA Pickup FILES for all presented addresses + / PUn Pickup FILES for address number n in AKA list + one of | + \ + \ NPU No FILE pickup desired. (calling system) + HAT Hold all FILES (answering system) + HAn Hold all FILES for address number n in AKA list + + + Qualifiers: + + Qualifiers are processed in the order presented, with any conflict + being resolved by subsequent qualifiers overridding any conflicting + previous qualifier in the list. + + Qualifiers may be not be presented with either NPU or HAT and should be + ignored if received with NPU or HAT. + + PickUp: + + PMO PickUp Mail (ARCmail and Packets) ONLY + PMn PickUp Mail ONLY for address number n in AKA list + + NFE No TIC'S, associated files or files + attachs desired + NFn No TIC'S, associated files or file attaches, + for address number n in AKA list + + NXP No compressed mail pickup desired + NXn No compressed mail pickup desired, + for address number n in AKA list + + NRQ File requests not accepted by caller + This flag is presented if file request processing + is disabled TEMPORARILY for any reason + NRn File requests not accepted by caller + for address number n in AKA list + + Note that NFE,NPX,NRQ != NPU + + Hold: + + HNM Hold all traffic EXCEPT Mail (ARCmail and Packets) + HNn Hold all traffic EXCEPT Mail (ARCmail and Packets) + for address number n in AKA list + + HXT Hold compressed mail traffic. + HXn Hold compressed mail traffic. + for address number n in AKA list + + HFE Hold tic's and associated files + and file attaches other than mail + HFn Hold tic's and associated files + and file attaches other than mail + for address number n in AKA list + + HRQ Hold file requests (not processed at this time) + This flag is presented if file request processing + is disabled TEMPORARILY for any reason + HRn Hold file requests (not processed at this time) + for address number n in AKA list + + Note that HXT,HRQ,HFE == HAT ++ +Go Back + + + + diff --git a/html/ftsc/fsc-0091.html b/html/ftsc/fsc-0091.html index 7be686be..6a38f0fd 100755 --- a/html/ftsc/fsc-0091.html +++ b/html/ftsc/fsc-0091.html @@ -1,60 +1,61 @@ - - -
- | Document: fsc-0091 - | Version: 001 - | Date: 01 Jun 1996 - | Arjen Lentz, 2:283/512 - -ISDN nodelist flags (rev.002) Arjen Lentz (agl@bitbike.com) -addendum to FTS-0005 FidoNet 2:283/512 -superceding FSC-0075 October 30th, 1995 - -Input from Michael Buenter, Jan Ceuleers, Chris Lueders, and others. Thanks! - -The proposed new information text in nodelist trailer is as follows: - - Nodelist Specification of minimal support required for this flag; - flag any additional support to be arranged via agreement between users - ======== ================================================================= - V110L ITU-T V.110 19k2 async ('low'). - V110H ITU-T V.110 38k4 async ('high'). - V120L ITU-T V.120 56k async, layer 2 framesize 259, window 7, modulo 8. - V120H ITU-T V.120 64k async, layer 2 framesize 259, window 7, modulo 8. - X75 ITU-T X.75 SLP (single link procedure) with 64kbit/s B channel; - layer 2 max.framesize 2048, window 2, non-ext.mode (modulo 8); - layer 3 transparent (no packet layer). - ISDN Other configurations. Use *only* if none of the above fits. - =========================================================================== - NOTE: No flag implies another. Each capability MUST be specifically listed. - If no modem connects are support, the nodelist speed field should be 300. - - Conversion from old to new ISDN capability flags: - - Nodes in the USA currently use the 'ISDN' flag. - Most will be able to change to V120H (64k lines). - Also many to V120L,V120H (64k lines) with autodetecting equipment. - Some to only V120L (still with 56k lines). - - Nodes in Europe currently use the ISDNA, ISDNB and ISDNC flags. - A simple translation will do the trick here. - ISDNA -> V110L - ISDNB -> V110H - ISDNC -> X75 - -- - Go Back - - - - + + + +
+ | Document: fsc-0091 + | Version: 001 + | Date: 01 Jun 1996 + | Arjen Lentz, 2:283/512 + +ISDN nodelist flags (rev.002) Arjen Lentz (agl@bitbike.com) +addendum to FTS-0005 FidoNet 2:283/512 +superceding FSC-0075 October 30th, 1995 + +Input from Michael Buenter, Jan Ceuleers, Chris Lueders, and others. Thanks! + +The proposed new information text in nodelist trailer is as follows: + + Nodelist Specification of minimal support required for this flag; + flag any additional support to be arranged via agreement between users + ======== ================================================================= + V110L ITU-T V.110 19k2 async ('low'). + V110H ITU-T V.110 38k4 async ('high'). + V120L ITU-T V.120 56k async, layer 2 framesize 259, window 7, modulo 8. + V120H ITU-T V.120 64k async, layer 2 framesize 259, window 7, modulo 8. + X75 ITU-T X.75 SLP (single link procedure) with 64kbit/s B channel; + layer 2 max.framesize 2048, window 2, non-ext.mode (modulo 8); + layer 3 transparent (no packet layer). + ISDN Other configurations. Use *only* if none of the above fits. + =========================================================================== + NOTE: No flag implies another. Each capability MUST be specifically listed. + If no modem connects are support, the nodelist speed field should be 300. + + Conversion from old to new ISDN capability flags: + - Nodes in the USA currently use the 'ISDN' flag. + Most will be able to change to V120H (64k lines). + Also many to V120L,V120H (64k lines) with autodetecting equipment. + Some to only V120L (still with 56k lines). + - Nodes in Europe currently use the ISDNA, ISDNB and ISDNC flags. + A simple translation will do the trick here. + ISDNA -> V110L + ISDNB -> V110H + ISDNC -> X75 + ++ +Go Back + + + + diff --git a/html/ftsc/fsc-0092.html b/html/ftsc/fsc-0092.html index 74462c06..2ba446e2 100755 --- a/html/ftsc/fsc-0092.html +++ b/html/ftsc/fsc-0092.html @@ -1,243 +1,244 @@ - - -
- | Document: FSC-0092 - | Version: 001 - | Date: September 12th 1996 - | Author: Michael Hohner - - - New control lines - for forwarded messages - - by - Michael Hohner - 2:2490/2520.17 - - September 1996 - - Status of this document: - - This document proposes a standard for the Fidonet(tm) community - and for other networks using Fido technology. It may be freely - distributed if unchanged. - - You can reach the author at one of the addresses listed at the end - of the document. - - - Abstract: - - Most fidonet message editors offer a "forward" function. Using - this function a user A can sort of "redirect" a message from user B - to another user C, maybe because A is not the correct recipient or - because C is a better person to answer the message. The name and - address of B are usually included in the forward in free-text format. - The message text is included in non-quoted format. - - A problem arises when the final recipient C wants to reply to sender B - of the forwarded message. The forward contains the intermediate user A - as the sender. So user C must insert the name and address of B - manually, using the information contained in the message text. The - message editor of C can't do this automatically because of the - free-text format. The editor will also use incorrect quote initials, - which is at least irritating. - - This document introduces 6 new control lines which contain the header - information of the original message. With these control lines the - message editor can use the original header information automatically. - - - Specifications: - - There are 7 new control lines: FWDFROM, FWDTO, FWDORIG, FWDDEST, - FWDSUBJ, FWDAREA, FWDMSGID. As all control lines they start with an - ASCII 01 character followed by the control line name followed by - whitespace followed by the control line's content followed by ASCII 13. - - Please note that all these control lines do not have a colon (like the - control lines in FTS-0001). This would be just waste of space. - - FWDFROM - ------- - - This control line contains the name of the original sender as found in - the FROM field of the original message. Leading and trailing - whitespace should be removed. This control line should be omitted - altogether if the FROM field is empty. - - FWDTO - ----- - - This control line contains the name of the original recipient as found - in the TO field of the original message. Leading and trailing - whitespace should be removed. This control line should be omitted - altogether if the TO field is empty. - - FWDORIG - ------- - - This control line contains the address of the original sender as found - in the ORIG field of the original message. The usual 5D ASCII notation - (zone:net/node.point@domain) should be used. This control line should - be omitted altogether if the address is not known. - - FWDDEST - ------- - - This control line contains the address of the original recipient as - found in the DEST field of the original message. The usual 5D ASCII - notation (zone:net/node.point@domain) should be used. This control line - should be omitted altogether if the address is not known or unsure - (as it is the case with forwarded echomail messages). - - FWDSUBJ - ------- - - This control line contains the subject line of the original message. - This control line should be omitted altogether if the SUBJ field is - empty. - This control line should by made optional for security reasons. Echo - manager passwords are too easily revealed with it. - - - FWDAREA - ------- - - This control line contains the name of the echomail area where the - original message was forwarded from. It should be omitted altogether - if the original message was not forwarded from an echomail area. - - FWDMSGID - -------- - - This control line contains the MSGID control line of the original - message. It should be omitted altogether if a MSGID control line is not - present in the original message. - - - Usage: - - When the "forward" function of the message editor is invoked, the - editor program should generate the proposed control lines from the - header of the original message. If the original message already was - a forwarded one (indicated by the presence of at least a FWDORIG - control line), the editor should keep all FWD* control lines and should - not add any FWD* control lines. This preserves the FWD* control lines - of the first forwarder, containing the header data of the author of - the original message. - - The editor should not generate FWD* control lines, if the message isn't - to be forwarded. A mail forwarding robot may also generate these - control lines, if it not just readdresses the message. - - When the "reply" function of the editor is invoked the program should - use the control lines' contents instead of the header information. The - control lines should not be included in the reply. - - Since it may not be immediately clear whether the user wants to reply - to the forwarder or to the original sender, the editor should offer a - means to ignore the proposed control lines and start a "normal" reply - instead, e.g. by two distinct functions, user preference or dialog. - - - Pseudo code: - - forwarding_message: - if is_forwarded_message then - don't change FWD* control lines - else - add FWD* control lines - - quoting_message: - if is_forwarded_message then - if reply_to_forwarder then - use header data (normal quoting) - else - use FWD* control lines - remove FWD* control lines from reply - else - use header data (normal quoting) - - other_functions: - remove/ignore FWD* control lines - - - Example: - - Message from Joe User to my boss node: - - From: Joe User 1:234/567 - To: Harry Herrmannsdoerfer 2:2490/2520 - Subj: Some questions - @MSGID: 1:234/567 12345678 - Text: Hello Harry! - ... - - Harry forwards the message to me: - - From: Harry Herrmannsdoerfer 2:2490/2520 - To: Michael Hohner 2:2490/2520.17 - Subj: Joe's message - @FWDFROM Joe User - @FWDORIG 1:234/567 - @FWDTO Harry Herrmannsdoerfer - @FWDDEST 2:2490/2520 - @FWDSUBJ Some questions - @FWDMSGID 1:234/567 12345678 - Text: Hi Michael! - ... - - My answer using the new control lines: - - From: Michael Hohner 2:2490/2520.17 - To: Joe User 1:234/567 - Subj: Some questions - @REPLY: 1:234/567 12345678 - Text: Hi Joe! - - JU> ... - ... - - - Compatiblity: - - Editor programs which are not prepared for the proposed control lines - usually just ignore them and remove them from a reply. A reply goes - to the forwarder. Nothing gained and nothing lost. - - - Implementations: - - This proposal is implemented in the author's Fidonet editor - "FleetStreet for OS/2" (versions 1.17 and above). - - - Contacting the author: - - The author may be contacted electronically at the following addresses: - - Fidonet: 2:2490/2520.17 - Internet: miho@osn.de - CompuServe: 100425,1754 - - Suggestions, comments and corrections are always welcome. - -- - Go Back - - - - + + + +
+ | Document: FSC-0092 + | Version: 001 + | Date: September 12th 1996 + | Author: Michael Hohner + + + New control lines + for forwarded messages + + by + Michael Hohner + 2:2490/2520.17 + + September 1996 + + Status of this document: + + This document proposes a standard for the Fidonet(tm) community + and for other networks using Fido technology. It may be freely + distributed if unchanged. + + You can reach the author at one of the addresses listed at the end + of the document. + + + Abstract: + + Most fidonet message editors offer a "forward" function. Using + this function a user A can sort of "redirect" a message from user B + to another user C, maybe because A is not the correct recipient or + because C is a better person to answer the message. The name and + address of B are usually included in the forward in free-text format. + The message text is included in non-quoted format. + + A problem arises when the final recipient C wants to reply to sender B + of the forwarded message. The forward contains the intermediate user A + as the sender. So user C must insert the name and address of B + manually, using the information contained in the message text. The + message editor of C can't do this automatically because of the + free-text format. The editor will also use incorrect quote initials, + which is at least irritating. + + This document introduces 6 new control lines which contain the header + information of the original message. With these control lines the + message editor can use the original header information automatically. + + + Specifications: + + There are 7 new control lines: FWDFROM, FWDTO, FWDORIG, FWDDEST, + FWDSUBJ, FWDAREA, FWDMSGID. As all control lines they start with an + ASCII 01 character followed by the control line name followed by + whitespace followed by the control line's content followed by ASCII 13. + + Please note that all these control lines do not have a colon (like the + control lines in FTS-0001). This would be just waste of space. + + FWDFROM + ------- + + This control line contains the name of the original sender as found in + the FROM field of the original message. Leading and trailing + whitespace should be removed. This control line should be omitted + altogether if the FROM field is empty. + + FWDTO + ----- + + This control line contains the name of the original recipient as found + in the TO field of the original message. Leading and trailing + whitespace should be removed. This control line should be omitted + altogether if the TO field is empty. + + FWDORIG + ------- + + This control line contains the address of the original sender as found + in the ORIG field of the original message. The usual 5D ASCII notation + (zone:net/node.point@domain) should be used. This control line should + be omitted altogether if the address is not known. + + FWDDEST + ------- + + This control line contains the address of the original recipient as + found in the DEST field of the original message. The usual 5D ASCII + notation (zone:net/node.point@domain) should be used. This control line + should be omitted altogether if the address is not known or unsure + (as it is the case with forwarded echomail messages). + + FWDSUBJ + ------- + + This control line contains the subject line of the original message. + This control line should be omitted altogether if the SUBJ field is + empty. + This control line should by made optional for security reasons. Echo + manager passwords are too easily revealed with it. + + + FWDAREA + ------- + + This control line contains the name of the echomail area where the + original message was forwarded from. It should be omitted altogether + if the original message was not forwarded from an echomail area. + + FWDMSGID + -------- + + This control line contains the MSGID control line of the original + message. It should be omitted altogether if a MSGID control line is not + present in the original message. + + + Usage: + + When the "forward" function of the message editor is invoked, the + editor program should generate the proposed control lines from the + header of the original message. If the original message already was + a forwarded one (indicated by the presence of at least a FWDORIG + control line), the editor should keep all FWD* control lines and should + not add any FWD* control lines. This preserves the FWD* control lines + of the first forwarder, containing the header data of the author of + the original message. + + The editor should not generate FWD* control lines, if the message isn't + to be forwarded. A mail forwarding robot may also generate these + control lines, if it not just readdresses the message. + + When the "reply" function of the editor is invoked the program should + use the control lines' contents instead of the header information. The + control lines should not be included in the reply. + + Since it may not be immediately clear whether the user wants to reply + to the forwarder or to the original sender, the editor should offer a + means to ignore the proposed control lines and start a "normal" reply + instead, e.g. by two distinct functions, user preference or dialog. + + + Pseudo code: + + forwarding_message: + if is_forwarded_message then + don't change FWD* control lines + else + add FWD* control lines + + quoting_message: + if is_forwarded_message then + if reply_to_forwarder then + use header data (normal quoting) + else + use FWD* control lines + remove FWD* control lines from reply + else + use header data (normal quoting) + + other_functions: + remove/ignore FWD* control lines + + + Example: + + Message from Joe User to my boss node: + + From: Joe User 1:234/567 + To: Harry Herrmannsdoerfer 2:2490/2520 + Subj: Some questions + @MSGID: 1:234/567 12345678 + Text: Hello Harry! + ... + + Harry forwards the message to me: + + From: Harry Herrmannsdoerfer 2:2490/2520 + To: Michael Hohner 2:2490/2520.17 + Subj: Joe's message + @FWDFROM Joe User + @FWDORIG 1:234/567 + @FWDTO Harry Herrmannsdoerfer + @FWDDEST 2:2490/2520 + @FWDSUBJ Some questions + @FWDMSGID 1:234/567 12345678 + Text: Hi Michael! + ... + + My answer using the new control lines: + + From: Michael Hohner 2:2490/2520.17 + To: Joe User 1:234/567 + Subj: Some questions + @REPLY: 1:234/567 12345678 + Text: Hi Joe! + + JU> ... + ... + + + Compatiblity: + + Editor programs which are not prepared for the proposed control lines + usually just ignore them and remove them from a reply. A reply goes + to the forwarder. Nothing gained and nothing lost. + + + Implementations: + + This proposal is implemented in the author's Fidonet editor + "FleetStreet for OS/2" (versions 1.17 and above). + + + Contacting the author: + + The author may be contacted electronically at the following addresses: + + Fidonet: 2:2490/2520.17 + Internet: miho@osn.de + CompuServe: 100425,1754 + + Suggestions, comments and corrections are always welcome. + ++ +Go Back + + + + diff --git a/html/ftsc/fsc-0093.html b/html/ftsc/fsc-0093.html index ea3f2302..d635619f 100755 --- a/html/ftsc/fsc-0093.html +++ b/html/ftsc/fsc-0093.html @@ -1,156 +1,157 @@ - - -
- | Document: FSC-0093 - | Version: 001 - | Date: 13 September, 1996 - | Title: Reduced seen-by lines - | Author: Frank Ellermann, 2:240/5815.1 - - - Reduced seen-by lines - Frank Ellermann, 2:240/5815.1 - - - Abstract - -------- - A way to save great amounts (estimated 10 %) of echo mail traffic by - reducing "seen by" informations, compatible with existing echo mail - tossers conforming to FTS-0004. - - - Definitions - ----------- - A thorough understanding of FTS-0004 is required, the reader should - be familiar with PATH and SEEN-BY lines in echo mail, illegal and - legal echo mail distribution topologies, i.e. dup-rings, as well - as with some pre-requisite knowledge of zones, 4D and 2D addresses, - and the "sticky" 2D notation in PATH and SEEN-BY lines. - - PATH: path lines as specified in FTS-0004 - FSB: full seen-by informations as specified in FTS-0004 - TSB: tiny seen-by informations as mentioned in FTS-0004, see below - RSB: reduced seen-by informations specified below - dupe: multiple arrival of the same echo mail (e.g. different paths) - - - Examples of echo mail distribution topologies - --------------------------------------------- - In all examples a) to d) echo mail entered at system 1 is sent to - systems 2 and 3 with FSB 1 2 3. Therefore system 2 (3) knows, that - system 3 (2) already got this mail, topology a) is perfectly legal. - - a) 1 - 3 b) 1 - 3 c) 1 - 3 d) 1 - 2 - | / | | | / | | X | - 2 2 - 4 2 - 4 2 - 4 - - In the exanmples b) and c) both systems 2 and 3 forward all mails - from system 1 to system 4, these topologies contain a dup-ring and - are therefore illegal following FTS-0004. - - The examples a) and d) show fully connected polygons with three or - four nodes. In example d) a mail entered at system 1 is sent to - systems 2, 3, and 4 with FSB 1 2 3 4. The topologies a) and d) are - perfectly legal, there are no dupes caused by distribution. - - In example b) each mail entered at system 1 reaching system 4 via - system 2 carries FSB 1 2 3 4, therefore system 4 will not forward - such mails to 3. Using TSB at system 2 the same mails would carry - TSB 2 4, therefore system 4 would forward them to 3 as dupes. - - Note that illegal topologies as in example b) and c) cause dupes - with either FSB or TSB. The real problem with TSB is example b), - as it allows for loop mails on the dup-ring 1 - 2 - 3 - 4 - ... - and vice versa, if no additional checks for dupes are employed. - - With RSB (specified below) systems contained in the PATH are not - stripped from the seen-by informations, therefore RSB avoid loop - mail much like FSB. - - - FSB algorithm - ------------- - 1) add own system to the PATH. - 2) all area links not contained in the FSB qualify as recipients. - 3) add own address(es) to the FSB set if not already contained. - 4) add recipients to FSB, sort FSB, forward mail to recipients. - - - TSB algorithm - ------------- - 1) add own system to the PATH. - 2) all area links not contained in the TSB qualify as recipients. - 3) strip old TSB and start new TSB with own address(es). - 4) add recipients to TSB, sort TSB and forward mail to recipients. - - - RSB algorithm - ------------- - 1) add own system to the PATH. - 2) all area links not contained in the RSB qualify as recipients. - 3) strip RSB addresses not matching an address in the PATH, then - add own address(es) to the RSB set if not already contained. - 4) add recipients to RSB, sort RSB and forward mail to recipients. - - - PATH considerations - ------------------- - There are 2 problems with the PATH kludge as specified in FTS-0004: - - First like in the FSB the addresses in the PATH are 2D, and having - the same 2D address in different zones is possible. Therefore zone - gates are required to use the TSB algorithm. Unfortunately the PATH - is forwarded without regarding zone gating, therefore detection of - loop mail based solely on the PATH could be erroneous. - - Further FTS-0004 (written 1989) expects future echo mail tossers to - implement PATH support, but doesn't require this support from old - implementations. Strictly spoken the PATH is still only an option. - - In some areas of FidoNet (e.g. in zone 2) at least all non-terminal - nodes are required to fully support the PATH line, therefore this - problem will probably not show up in praxis. Of course any tosser - implementing the RSB feature is required to fully support the PATH. - - - Summary - ------- - To show the benfits of RSB compared with FSB assume the following: - - An echo mail travels from node to echo hub, host, major star, echo - host, hub, and finally arrives at a recipient. Each routing system - has 10 links, i.e. FSB at the recipient contain 51 addresses, about - 400 characters, but RSB only 15 addresses in about 150 characters. - - Therefore in an echo mail with 2500 characters about 10 % of its - size can be reduced using RSB in favour of FSB. If this estimation - is applicable on world wide FidoNet echo mail traffic, RSB can save - us an immense amount of costs. - - This document can be adopted by the FTSC as FTS, in this case it - has to be regarded as an addition to FTS-0004 with the extension, - that all non-terminal nodes are required to support PATH lines as - specified in FTS-0004. - - For additional informations (e.g. aspects of zone gating) feel free - to send mails to Frank Ellermann 2:240/5815 or leo@bfispc.hanse.de - -- eof - -- - Go Back - - - - + + + +
+ | Document: FSC-0093 + | Version: 001 + | Date: 13 September, 1996 + | Title: Reduced seen-by lines + | Author: Frank Ellermann, 2:240/5815.1 + + + Reduced seen-by lines + Frank Ellermann, 2:240/5815.1 + + + Abstract + -------- + A way to save great amounts (estimated 10 %) of echo mail traffic by + reducing "seen by" informations, compatible with existing echo mail + tossers conforming to FTS-0004. + + + Definitions + ----------- + A thorough understanding of FTS-0004 is required, the reader should + be familiar with PATH and SEEN-BY lines in echo mail, illegal and + legal echo mail distribution topologies, i.e. dup-rings, as well + as with some pre-requisite knowledge of zones, 4D and 2D addresses, + and the "sticky" 2D notation in PATH and SEEN-BY lines. + + PATH: path lines as specified in FTS-0004 + FSB: full seen-by informations as specified in FTS-0004 + TSB: tiny seen-by informations as mentioned in FTS-0004, see below + RSB: reduced seen-by informations specified below + dupe: multiple arrival of the same echo mail (e.g. different paths) + + + Examples of echo mail distribution topologies + --------------------------------------------- + In all examples a) to d) echo mail entered at system 1 is sent to + systems 2 and 3 with FSB 1 2 3. Therefore system 2 (3) knows, that + system 3 (2) already got this mail, topology a) is perfectly legal. + + a) 1 - 3 b) 1 - 3 c) 1 - 3 d) 1 - 2 + | / | | | / | | X | + 2 2 - 4 2 - 4 2 - 4 + + In the exanmples b) and c) both systems 2 and 3 forward all mails + from system 1 to system 4, these topologies contain a dup-ring and + are therefore illegal following FTS-0004. + + The examples a) and d) show fully connected polygons with three or + four nodes. In example d) a mail entered at system 1 is sent to + systems 2, 3, and 4 with FSB 1 2 3 4. The topologies a) and d) are + perfectly legal, there are no dupes caused by distribution. + + In example b) each mail entered at system 1 reaching system 4 via + system 2 carries FSB 1 2 3 4, therefore system 4 will not forward + such mails to 3. Using TSB at system 2 the same mails would carry + TSB 2 4, therefore system 4 would forward them to 3 as dupes. + + Note that illegal topologies as in example b) and c) cause dupes + with either FSB or TSB. The real problem with TSB is example b), + as it allows for loop mails on the dup-ring 1 - 2 - 3 - 4 - ... + and vice versa, if no additional checks for dupes are employed. + + With RSB (specified below) systems contained in the PATH are not + stripped from the seen-by informations, therefore RSB avoid loop + mail much like FSB. + + + FSB algorithm + ------------- + 1) add own system to the PATH. + 2) all area links not contained in the FSB qualify as recipients. + 3) add own address(es) to the FSB set if not already contained. + 4) add recipients to FSB, sort FSB, forward mail to recipients. + + + TSB algorithm + ------------- + 1) add own system to the PATH. + 2) all area links not contained in the TSB qualify as recipients. + 3) strip old TSB and start new TSB with own address(es). + 4) add recipients to TSB, sort TSB and forward mail to recipients. + + + RSB algorithm + ------------- + 1) add own system to the PATH. + 2) all area links not contained in the RSB qualify as recipients. + 3) strip RSB addresses not matching an address in the PATH, then + add own address(es) to the RSB set if not already contained. + 4) add recipients to RSB, sort RSB and forward mail to recipients. + + + PATH considerations + ------------------- + There are 2 problems with the PATH kludge as specified in FTS-0004: + + First like in the FSB the addresses in the PATH are 2D, and having + the same 2D address in different zones is possible. Therefore zone + gates are required to use the TSB algorithm. Unfortunately the PATH + is forwarded without regarding zone gating, therefore detection of + loop mail based solely on the PATH could be erroneous. + + Further FTS-0004 (written 1989) expects future echo mail tossers to + implement PATH support, but doesn't require this support from old + implementations. Strictly spoken the PATH is still only an option. + + In some areas of FidoNet (e.g. in zone 2) at least all non-terminal + nodes are required to fully support the PATH line, therefore this + problem will probably not show up in praxis. Of course any tosser + implementing the RSB feature is required to fully support the PATH. + + + Summary + ------- + To show the benfits of RSB compared with FSB assume the following: + + An echo mail travels from node to echo hub, host, major star, echo + host, hub, and finally arrives at a recipient. Each routing system + has 10 links, i.e. FSB at the recipient contain 51 addresses, about + 400 characters, but RSB only 15 addresses in about 150 characters. + + Therefore in an echo mail with 2500 characters about 10 % of its + size can be reduced using RSB in favour of FSB. If this estimation + is applicable on world wide FidoNet echo mail traffic, RSB can save + us an immense amount of costs. + + This document can be adopted by the FTSC as FTS, in this case it + has to be regarded as an addition to FTS-0004 with the extension, + that all non-terminal nodes are required to support PATH lines as + specified in FTS-0004. + + For additional informations (e.g. aspects of zone gating) feel free + to send mails to Frank Ellermann 2:240/5815 or leo@bfispc.hanse.de + +- eof - ++ +Go Back + + + + diff --git a/html/ftsc/fsp-1001.html b/html/ftsc/fsp-1001.html index 9faa08a6..5f983ac3 100755 --- a/html/ftsc/fsp-1001.html +++ b/html/ftsc/fsp-1001.html @@ -1,210 +1,211 @@ - - -
-********************************************************************** -FTSC FIDONET TECHNICAL STANDARDS COMMITTEE -********************************************************************** - -Publication: FSP-1001 -Revision: 2 -Title: Timezone information in FTN messages -Author: Odinn Sorensen, 2:236/77 -Revision Date: 27 September 1997 -Expiry Date: 13 September 1999 ----------------------------------------------------------------------- -Contents: - 1. Scope - 2. Current practice - 3. Kludge specification - 4. Timezone table - 5. Examples ----------------------------------------------------------------------- - - -Status of this document ------------------------ - - This document is a Fidonet Standards Proposal (FSP). - - This document specifies an optional Fidonet standard protocol for - the Fidonet community, and requests discussion and suggestions for - improvements. - - This document is released to the public domain, and may be used, - copied or modified for any purpose whatever. - - -Abstract --------- - - Current practice for Fidonet Technology Network (FTN) messages is to - store dates in local time. Timezone information (if known) is - usually lost. This document specifies a standard for storage of - timezone information in FTN messages, in the form of a kludge named - TZUTC. - - -1. Scope --------- - - This standard is specified for FTN messages in any form where - timezone information is not integrated in the message storage or - transport format. Specifically any form where the information would - be lost if not stored in a kludge, such as in FTS-1 stored messages - or packets. - - -2. Current practice -------------------- - - Some kludges already exist to specify the timezone of messages, - notably "TZUTC" and "TZUTCINFO". Other kludges may exist. - - To the authors knowledge, no official specification exists for any - of these kludges. - - From observations of these kludges in actual messages, TZUTC and - TZUTCINFO are identical except for the name. TZUTCINFO is probably - named after the JAM msgbase subfield of the same name. - - This document adopts and documents the TZUTC kludge because it is - the shortest of them. - - -3. Kludge specification ------------------------ - - Messages which conform to this specification must add the kludge: - - ^aTZUTC:- - Go Back - - - - + + + +- - The offset has the format <[-]hhmm>, where hhmm is the number of - hours and minutes that local time is offset from UTC. If local time - is WEST of UTC (Greenwich), then the offset is NEGATIVE. See the - table below for typical offsets. - - Note that the hh in a timezone offset is not limited to a maximum of - 12. This is because the International Date Line does not run exactly - along the boundary between zone -1200 and +1200. The minutes part is - 00 for most timezones. - - All four digits must be present. If the offset is negative, there - must be a minus ('-', ASCII 45, 2Dh) in front of the offset. - - Implementations must NOT put a plus ('+', ASCII 43, 2Bh) in front of - the offset for positive numbers, but robust implementations should - be prepared to find (and ignore) a plus if it exists. - - If local time changes as a result of, for example, daylight savings - time, then the offset in TZUTC need to be changed to reflect this. - - When this kludge is present in a message, the "date written" field - in the stored message is guaranteed to be in local time for the - given timezone. Note that this specification does not specify the - timezone for any other date fields. Other date fields (such as "date - received, arrived, processed, etc.") are usually in local time for - the system on which the messages are stored. - - -4. Timezone table ------------------ - - This table gives examples of typical timezones. - - -1000 Alaska-Hawaii Standard Time - -0900 Hawaii Daylight Time - -0800 Pacific Standard Time - -0700 Pacific Daylight Time - -0700 Mountain Standard Time - -0600 Mountain Daylight Time - -0600 Central Standard Time - -0500 Central Daylight Time - -0500 Eastern Standard Time - -0400 Eastern Daylight Time - -0400 Atlantic Standard Time - -0330 Newfoundland Standard Time - -0300 Atlantic Daylight Time - -0100 West Africa Time - 0000 Greenwich Mean Time - 0100 Central European Time - 0100 British Summer Time - 0200 Central European Summer Time - 0200 Eastern European Time - 0800 Australian Western Time - 0800 China Coast Time - 0900 Japan Standard Time - 0900 Australian Western Daylight Time - 0930 Australian Central Standard Time - 1000 Australian Eastern Standard Time - 1030 Australian Central Daylight Time - 1100 Australian Eastern Daylight Time - 1200 New Zealand Standard Time - 1300 New Zealand Daylight Time - - -5. Examples ------------ - - ^aTZUTC: 0000 - ^aTZUTC: 0200 - ^aTZUTC: -0700 - - -6. Redundancy -------------- - - If the TZUTC data duplicates a field in a storage format in such a - way that no information is lost in conversion to or from the field, - then it is recommended that the kludge is not stored in the message. - However, implementations are allowed to store the TZUTC even when - redundant. - - -A. References -------------- - - [FTS-1] "A Basic FidoNet(r) Technical Standard Revision 16", Randy - Bush. September 1995. - - [JAM] "The JAM message base proposal", Joaquim Homrighausen, Andrew - Milner, Mats Birch and Mats Wallin. July 1993. - - -B. Author contact data ----------------------- - - Odinn Sorensen - Fidonet: 2:236/77 - E-mail: odinn@goldware.dk - WWW: http://www.goldware.dk - - -C. History ----------- - - Rev.1, 970913: First release. - Rev.2, 970927: Updated the timezone table. Added section about - redundancy. Clarified what happens when local time - changes. Clarified some of what the specification - doesn't cover. - - -********************************************************************** -
+********************************************************************** +FTSC FIDONET TECHNICAL STANDARDS COMMITTEE +********************************************************************** + +Publication: FSP-1001 +Revision: 2 +Title: Timezone information in FTN messages +Author: Odinn Sorensen, 2:236/77 +Revision Date: 27 September 1997 +Expiry Date: 13 September 1999 +---------------------------------------------------------------------- +Contents: + 1. Scope + 2. Current practice + 3. Kludge specification + 4. Timezone table + 5. Examples +---------------------------------------------------------------------- + + +Status of this document +----------------------- + + This document is a Fidonet Standards Proposal (FSP). + + This document specifies an optional Fidonet standard protocol for + the Fidonet community, and requests discussion and suggestions for + improvements. + + This document is released to the public domain, and may be used, + copied or modified for any purpose whatever. + + +Abstract +-------- + + Current practice for Fidonet Technology Network (FTN) messages is to + store dates in local time. Timezone information (if known) is + usually lost. This document specifies a standard for storage of + timezone information in FTN messages, in the form of a kludge named + TZUTC. + + +1. Scope +-------- + + This standard is specified for FTN messages in any form where + timezone information is not integrated in the message storage or + transport format. Specifically any form where the information would + be lost if not stored in a kludge, such as in FTS-1 stored messages + or packets. + + +2. Current practice +------------------- + + Some kludges already exist to specify the timezone of messages, + notably "TZUTC" and "TZUTCINFO". Other kludges may exist. + + To the authors knowledge, no official specification exists for any + of these kludges. + + From observations of these kludges in actual messages, TZUTC and + TZUTCINFO are identical except for the name. TZUTCINFO is probably + named after the JAM msgbase subfield of the same name. + + This document adopts and documents the TZUTC kludge because it is + the shortest of them. + + +3. Kludge specification +----------------------- + + Messages which conform to this specification must add the kludge: + + ^aTZUTC: <current offset from UTC> + + The offset has the format <[-]hhmm>, where hhmm is the number of + hours and minutes that local time is offset from UTC. If local time + is WEST of UTC (Greenwich), then the offset is NEGATIVE. See the + table below for typical offsets. + + Note that the hh in a timezone offset is not limited to a maximum of + 12. This is because the International Date Line does not run exactly + along the boundary between zone -1200 and +1200. The minutes part is + 00 for most timezones. + + All four digits must be present. If the offset is negative, there + must be a minus ('-', ASCII 45, 2Dh) in front of the offset. + + Implementations must NOT put a plus ('+', ASCII 43, 2Bh) in front of + the offset for positive numbers, but robust implementations should + be prepared to find (and ignore) a plus if it exists. + + If local time changes as a result of, for example, daylight savings + time, then the offset in TZUTC need to be changed to reflect this. + + When this kludge is present in a message, the "date written" field + in the stored message is guaranteed to be in local time for the + given timezone. Note that this specification does not specify the + timezone for any other date fields. Other date fields (such as "date + received, arrived, processed, etc.") are usually in local time for + the system on which the messages are stored. + + +4. Timezone table +----------------- + + This table gives examples of typical timezones. + + -1000 Alaska-Hawaii Standard Time + -0900 Hawaii Daylight Time + -0800 Pacific Standard Time + -0700 Pacific Daylight Time + -0700 Mountain Standard Time + -0600 Mountain Daylight Time + -0600 Central Standard Time + -0500 Central Daylight Time + -0500 Eastern Standard Time + -0400 Eastern Daylight Time + -0400 Atlantic Standard Time + -0330 Newfoundland Standard Time + -0300 Atlantic Daylight Time + -0100 West Africa Time + 0000 Greenwich Mean Time + 0100 Central European Time + 0100 British Summer Time + 0200 Central European Summer Time + 0200 Eastern European Time + 0800 Australian Western Time + 0800 China Coast Time + 0900 Japan Standard Time + 0900 Australian Western Daylight Time + 0930 Australian Central Standard Time + 1000 Australian Eastern Standard Time + 1030 Australian Central Daylight Time + 1100 Australian Eastern Daylight Time + 1200 New Zealand Standard Time + 1300 New Zealand Daylight Time + + +5. Examples +----------- + + ^aTZUTC: 0000 + ^aTZUTC: 0200 + ^aTZUTC: -0700 + + +6. Redundancy +------------- + + If the TZUTC data duplicates a field in a storage format in such a + way that no information is lost in conversion to or from the field, + then it is recommended that the kludge is not stored in the message. + However, implementations are allowed to store the TZUTC even when + redundant. + + +A. References +------------- + + [FTS-1] "A Basic FidoNet(r) Technical Standard Revision 16", Randy + Bush. September 1995. + + [JAM] "The JAM message base proposal", Joaquim Homrighausen, Andrew + Milner, Mats Birch and Mats Wallin. July 1993. + + +B. Author contact data +---------------------- + + Odinn Sorensen + Fidonet: 2:236/77 + E-mail: odinn@goldware.dk + WWW: http://www.goldware.dk + + +C. History +---------- + + Rev.1, 970913: First release. + Rev.2, 970927: Updated the timezone table. Added section about + redundancy. Clarified what happens when local time + changes. Clarified some of what the specification + doesn't cover. + + +********************************************************************** ++ +Go Back + + + + diff --git a/html/ftsc/fsp-1002.html b/html/ftsc/fsp-1002.html index 808b7da2..a77789b7 100755 --- a/html/ftsc/fsp-1002.html +++ b/html/ftsc/fsp-1002.html @@ -1,140 +1,141 @@ - - -
-********************************************************************** -FTSC FIDONET TECHNICAL STANDARDS COMMITTEE -********************************************************************** - -Publication: FSP-1002 -Revision: 2 -Title: Numeric reply indication in FTN subject lines -Author: Odinn Sorensen, 2:236/77 -Revision Date: 19 October 1997 -Expiry Date: 11 October 1999 ----------------------------------------------------------------------- -Contents: - 1. Scope - 2. Format - 3. Reply procedure ----------------------------------------------------------------------- - - -Status of this document ------------------------ - - This document is a Fidonet Standards Proposal (FSP). - - This document specifies an optional Fidonet standard protocol for - the Fidonet community, and requests discussion and suggestions for - improvements. - - This document is released to the public domain, and may be used, - copied or modified for any purpose whatever. - - -Abstract --------- - - When making a reply to a message, there are currently three common - ways to handle the subject line: - - 1. Don't change it. - 2. Insert the string "Re: " in front of it. - 3. Insert the string "Re^n: " in front of it, where 'n' is increased - by one if the original subject was already a reply. - - This document concerns itself with specifying the third variant. - - -1. Scope --------- - - This standard is specified for all FTN messages. Implementations - will typically be message editors and other software that creates - replies to messages. - - -2. Format ---------- - - The format is "Re^n: ", where n is an unsigned integer number with - one or more digits. The range of the number must be at least 0 to - 255. Negative numbers are not allowed. Note that there must be a - space after the colon. The letters are not case sensitive, but - uppercase 'R' and lowercase 'e' is recommended. - - -3. Reply procedure ------------------- - - When making a reply that conforms to this specification, this - procedure, or a functionally identical one, must be followed: - - 1. If the original subject does not have a leading "Re: " or - "Re^n: ", put the string "Re: " in front of it. Don't use a - number here. - - Example: "Hello world" -> "Re: Hello world" - - 2. If the original subject has a leading "Re: ", put the string - "Re^2: " in front of the subject. - - Example: "Re: Hello world" -> "Re^2: Hello world" - - 3. If the original subject has a leading "Re^n: ", increase the - number 'n' by one and modify the subject accordingly. - - Example: "Re^4: Hello world" -> "Re^5: Hello world" - - Notes: - - * The numbers 0 and 1 should not occur in the "Re^n: " string under - normal circumstances, but a robust implementation should just - increase the number in any case. - - * The number should not be increased beyond the range of the number - type used in the implementation, or in other words, it should not - roll around to zero. If it can't be increased, leave it alone. - - * When inserting the "Re: " or "Re^n: " string in front of the - subject, information from the end might be lost, because the - message storage or packet formats use fixed length subject fields. - Intelligent subject-based reply linking software should be aware - of this and try to link correctly anyway. - - -A. Author contact data ----------------------- - - Odinn Sorensen - Fidonet: 2:236/77 - E-mail: odinn@goldware.dk - WWW: http://www.goldware.dk - - -B. History ----------- - - Rev.1, 971011: First release. - Rev.2, 971019: Added note that "Re" is not case sensitive. - - -********************************************************************** -- - Go Back - - - - + + + +
+********************************************************************** +FTSC FIDONET TECHNICAL STANDARDS COMMITTEE +********************************************************************** + +Publication: FSP-1002 +Revision: 2 +Title: Numeric reply indication in FTN subject lines +Author: Odinn Sorensen, 2:236/77 +Revision Date: 19 October 1997 +Expiry Date: 11 October 1999 +---------------------------------------------------------------------- +Contents: + 1. Scope + 2. Format + 3. Reply procedure +---------------------------------------------------------------------- + + +Status of this document +----------------------- + + This document is a Fidonet Standards Proposal (FSP). + + This document specifies an optional Fidonet standard protocol for + the Fidonet community, and requests discussion and suggestions for + improvements. + + This document is released to the public domain, and may be used, + copied or modified for any purpose whatever. + + +Abstract +-------- + + When making a reply to a message, there are currently three common + ways to handle the subject line: + + 1. Don't change it. + 2. Insert the string "Re: " in front of it. + 3. Insert the string "Re^n: " in front of it, where 'n' is increased + by one if the original subject was already a reply. + + This document concerns itself with specifying the third variant. + + +1. Scope +-------- + + This standard is specified for all FTN messages. Implementations + will typically be message editors and other software that creates + replies to messages. + + +2. Format +--------- + + The format is "Re^n: ", where n is an unsigned integer number with + one or more digits. The range of the number must be at least 0 to + 255. Negative numbers are not allowed. Note that there must be a + space after the colon. The letters are not case sensitive, but + uppercase 'R' and lowercase 'e' is recommended. + + +3. Reply procedure +------------------ + + When making a reply that conforms to this specification, this + procedure, or a functionally identical one, must be followed: + + 1. If the original subject does not have a leading "Re: " or + "Re^n: ", put the string "Re: " in front of it. Don't use a + number here. + + Example: "Hello world" -> "Re: Hello world" + + 2. If the original subject has a leading "Re: ", put the string + "Re^2: " in front of the subject. + + Example: "Re: Hello world" -> "Re^2: Hello world" + + 3. If the original subject has a leading "Re^n: ", increase the + number 'n' by one and modify the subject accordingly. + + Example: "Re^4: Hello world" -> "Re^5: Hello world" + + Notes: + + * The numbers 0 and 1 should not occur in the "Re^n: " string under + normal circumstances, but a robust implementation should just + increase the number in any case. + + * The number should not be increased beyond the range of the number + type used in the implementation, or in other words, it should not + roll around to zero. If it can't be increased, leave it alone. + + * When inserting the "Re: " or "Re^n: " string in front of the + subject, information from the end might be lost, because the + message storage or packet formats use fixed length subject fields. + Intelligent subject-based reply linking software should be aware + of this and try to link correctly anyway. + + +A. Author contact data +---------------------- + + Odinn Sorensen + Fidonet: 2:236/77 + E-mail: odinn@goldware.dk + WWW: http://www.goldware.dk + + +B. History +---------- + + Rev.1, 971011: First release. + Rev.2, 971019: Added note that "Re" is not case sensitive. + + +********************************************************************** ++ +Go Back + + + + diff --git a/html/ftsc/fsp-1003.html b/html/ftsc/fsp-1003.html index f7ed6040..00b039aa 100755 --- a/html/ftsc/fsp-1003.html +++ b/html/ftsc/fsp-1003.html @@ -1,116 +1,117 @@ - - -
-********************************************************************** -FTSC FIDONET TECHNICAL STANDARDS COMMITTEE -********************************************************************** - -Publication: FSP-1003 -Revision: 1 -Title: Suggested use of Nodelist Fields -Author: Lee Kindness -Revision Date: 15 May 1997 -Expiry Date: 15 May 1999 ----------------------------------------------------------------------- -Contents: - 1. Field 3, Node Name - 2. Field 4, Location - 3. Field 5, Sysop Name ----------------------------------------------------------------------- - - -Status of this document ------------------------ - - This document is a Fidonet Standards Proposal (FSP). - - This document specifies an optional Fidonet standard protocol for - the Fidonet community, and requests discussion and suggestions for - improvements. - - This document is released to the public domain, and may be used, - copied or modified for any purpose whatever. - - -Introduction ------------- - - This document makes recommendations on the use of various fields in - the distribution nodelist (St. Louis nodelist format", fts-0005). - Naturally it is the choice of the *C's if they want to use them. - Remember the fts-0005 requirements should still be adhered to. - - -1. Field 3, Node Name ---------------------- - - The node name field should be no more than 20 characters long. For - comparison in nodelist.122'1997 the minimum entry was 1, maximum 51! - and the average was 14. - - For zone entries this field should contain a description of the - zones area, (eg North America, Europe). For region entries it should - contain the country/state, for host entries the local area name and - for hub entries a description of the area the hub serves. - - -2. Field 4, Location --------------------- - - This field contains the location of the node. It should usually be - expressed as the primary local location (town, suburb, city, etc.) - plus an identifier of the regional geopolitical administrative - district (state, province, department, county, etc.). Wherever - possible, standard postal abbreviations for the major regional - district should be used (IL, BC, NSW, UK, etc.). - - For zone and region entries this field should also have the julian - day of segment creation appended to it (eg "Somearea_(122)") to aid - checks on the validity of the nodelist. - - -3. Field 5, Sysop Name ----------------------- - - This field contains the name of the system operator. Entries such as - "postmaster" and "uucp" should not be used. Aliases should not be - permitted in this field (as they give Fidonet a 'less respectable' - image). - - -A. Author contact data ----------------------- - - Lee Kindness - Fidonet: n/a - E-mail: wangi@earthling.net - WWW: http://www.scms.rgu.ac.uk/students/cs_yr94/lk/fido.html - - -B. History ----------- - - Rev.1, 971101: First release as FSP, based on the Fidonews 14/20 - article. Transformed into FSP document by Odinn - Sorensen. - - -********************************************************************** -- - Go Back - - - - + + + +
+********************************************************************** +FTSC FIDONET TECHNICAL STANDARDS COMMITTEE +********************************************************************** + +Publication: FSP-1003 +Revision: 1 +Title: Suggested use of Nodelist Fields +Author: Lee Kindness +Revision Date: 15 May 1997 +Expiry Date: 15 May 1999 +---------------------------------------------------------------------- +Contents: + 1. Field 3, Node Name + 2. Field 4, Location + 3. Field 5, Sysop Name +---------------------------------------------------------------------- + + +Status of this document +----------------------- + + This document is a Fidonet Standards Proposal (FSP). + + This document specifies an optional Fidonet standard protocol for + the Fidonet community, and requests discussion and suggestions for + improvements. + + This document is released to the public domain, and may be used, + copied or modified for any purpose whatever. + + +Introduction +------------ + + This document makes recommendations on the use of various fields in + the distribution nodelist (St. Louis nodelist format", fts-0005). + Naturally it is the choice of the *C's if they want to use them. + Remember the fts-0005 requirements should still be adhered to. + + +1. Field 3, Node Name +--------------------- + + The node name field should be no more than 20 characters long. For + comparison in nodelist.122'1997 the minimum entry was 1, maximum 51! + and the average was 14. + + For zone entries this field should contain a description of the + zones area, (eg North America, Europe). For region entries it should + contain the country/state, for host entries the local area name and + for hub entries a description of the area the hub serves. + + +2. Field 4, Location +-------------------- + + This field contains the location of the node. It should usually be + expressed as the primary local location (town, suburb, city, etc.) + plus an identifier of the regional geopolitical administrative + district (state, province, department, county, etc.). Wherever + possible, standard postal abbreviations for the major regional + district should be used (IL, BC, NSW, UK, etc.). + + For zone and region entries this field should also have the julian + day of segment creation appended to it (eg "Somearea_(122)") to aid + checks on the validity of the nodelist. + + +3. Field 5, Sysop Name +---------------------- + + This field contains the name of the system operator. Entries such as + "postmaster" and "uucp" should not be used. Aliases should not be + permitted in this field (as they give Fidonet a 'less respectable' + image). + + +A. Author contact data +---------------------- + + Lee Kindness + Fidonet: n/a + E-mail: wangi@earthling.net + WWW: http://www.scms.rgu.ac.uk/students/cs_yr94/lk/fido.html + + +B. History +---------- + + Rev.1, 971101: First release as FSP, based on the Fidonews 14/20 + article. Transformed into FSP document by Odinn + Sorensen. + + +********************************************************************** ++ +Go Back + + + + diff --git a/html/ftsc/fsp-1004.html b/html/ftsc/fsp-1004.html index df485037..56b2c8ee 100755 --- a/html/ftsc/fsp-1004.html +++ b/html/ftsc/fsp-1004.html @@ -1,257 +1,258 @@ - - -
-********************************************************************** -FTSC FIDONET TECHNICAL STANDARDS COMMITTEE -********************************************************************** - -Publication: FSP-1004 -Revision: 1 -Title: Standard Fidonet Addressing -Author: Lee Kindness -Revision Date: 15 May 1997 -Expiry Date: 15 May 1999 ----------------------------------------------------------------------- -Contents: - 1. Standard Fidonet Addressing - 2. Internet Gateway Addressing - 3. Routing Address Syntax ----------------------------------------------------------------------- - - -Status of this document ------------------------ - - This document is a Fidonet Standards Proposal (FSP). - - This document specifies an optional Fidonet standard protocol for - the Fidonet community, and requests discussion and suggestions for - improvements. - - This document is released to the public domain, and may be used, - copied or modified for any purpose whatever. - - -Introduction ------------- - - This document describes the standard form of addressing in Fidonet - today along with the common method of addressing via internet - gateways. In addition it proposes an extended addressing syntax, - useful for routing purposes. This is a draft for comments and - suggestions. - - -1. Standard Fidonet Addressing ------------------------------- - - Fidonet addressing uses the following format: - - ZZ:NN/FF.PP@DO - - where the fields refer to... - - ZZ - Zone Number: The zone the node is part of. - Min: 1 Max: 32767 - If 'ZZ:' is missing then assume 1 as the zone. - - NN - Net Number: The network the node is a member of. - Min: 1 Max: 32767 - Must be present. - - FF - Node Number: The actual node number. - Min: -1 Max: 32767 - Must be present. - - PP - Point Number: If the system is a point rather than a node then - this is their point number off the node. - Min: 0 Max: 32767 - If '.PP' is missing then assume 0 (ie not a - point) as the point number. - - DO - Domain: The name of the 'Fidonet Technology Network'. - Maximum length of 8 characters. The domain - should not include periods, thus 'fidonet.org' - is invalid (should be fidonet). - If '@DO' is missing then fidonet can be assumed. - - The following are all valid examples: - 1:234/5.6@fidonet (a '5D' address) => 1:234/5.6@fidonet - 2:34/6.78 (a '4D' address) => 2:34/6.78@fidonet - 4:610/34 (a '3D' address) => 4:610/34.0@fidonet - 123/45 (a '2D' address) => 1:123/45.0@fidonet - 955:95/2@othernet (another FTN) => 955:95/2.0@othernet - 2:259/-1 (node application) => 2:259/-1.0@fidonet - - The limits on each various part of the address are a result of - fts-0005 (zone, net, node, point), fsc-0045 (domain) and Policy 4 - (-1 node address for node application). - - -2. Internet Gateway Addressing ------------------------------- - - An internet user can send email/netmail to a fidonet user via one of - the fidonet->internet gateway systems (it's out-with the scope of - this document to describe the semantics of posting). The internet - user would send an email to a Fidonet user by using an email address - of the following syntax: - - user.name@pPP.fFF.nNN.zZZ.gateway.domain - - where the fields refer to... - - user.name - Name: Name of the user the email is being sent - to, spaces replaced by periods. - - PP - Point Number: As Fidonet address (FA) - If '.pPP' is missing 0 is assumed. - - FF - Node Number: As FA - Must be present. - - NN - Net Number: As FA - Must be present. - - ZZ - Zone Number: As FA - Must be present. - - gate.way - Gateway: Internet domain of the gateway, for - example 'fidonet.org'. - Must be present. - - The following are all valid examples (assuming 'fidonet.org' is an - internet gateway): - - joe.bloggs@p6.f5.n234.z1.fidonet.org => 1:234/5.6@fidonet - harry.cat@p78.f6.n34.z2.fidonet.org => 2:34/6.78@fidonet - i.be.jolly@f34.n610.z4.fidonet.org => 4:610/34.0@fidonet - - and if 'foo.bar.org.uk' is a gateway for 'othernet': - - louise.hat@f2.n95.z955.foo.bar.org.uk => 955:95/2.0@othernet - - -3. Routing Address Syntax -------------------------- - - The two previous address types (Fidonet and Internet->Fidonet - gateway) are common practice, this however is a suggested standard - of addressing for routing tables. The routing address has the - following syntax: - - DD:ZZ:RR:NN:HH:FF:PP - - where the fields refer to: - - DD - Domain: As FA - Must be present, even if blank (ie a leading - ':') to ensure we always have 6 ':'s in an - address to aid pattern matching. - - ZZ - Zone Number: As FA - Must be present. - - RR - Region Number: The region (from fts-0005 nodelist) that the - following network is in. - Min: 1 Max: 32767 - Must be present. - - NN - Net Number: As FA - Must be present. - - HH - Hub: The hub (from fts-0005 nodelist) that the node - is under, or 0 (host hub). - Min: 1 Max: 32767 - Must be present. - - FF - Node Number: As FA - Must be present. - - PP - Point Number: As FA - Must be present. - - ':' has been chosen as the separator as it is not a POSIX regular - expression character or globing character (where as '.' is) and thus - always easy use of wildcards on the address. The following points - should be noted: - - 1. All addresses have 6 ':'s - 2. The domain is at the front, the address gets more specific to - the right - 3. Nodes have 0 as their point number - 4. A zone net has identical zone, region and net fields - 5. A region net has identical region and net fields - - Example fidonet addresses converted to routing addresses: - - fidonet:2:25:259:0:7:0 => 2:259/7.0@fidonet, region 25, hub 0 - fidonet:1:1:1:0:23:0 => 1:1/23.0@fidonet, zone 1 net - :955:9551:95:300:45:0 => 955:95/45.0, region 9551, hub 300 - fidonet:2:25:25:0:0:0 => 2:25/0.0@fidonet, R25C - cnet:12:34:341:100:1:7 => 12:341/1.7@cnet, region 34, hub 100 - :2:25:259:300:300:0 => 2:259/300.0, region 25, hub 300 - - Example POSIX regular expression patterns on routing addresses: - - [a-z]*:[0-9]+:[0-9]+:[0-9]+:[0-9]+:[0-9]+:[0-9]+ (any address) - [a-z]*(:[0-9]+)+ (any address) - fidonet:2:25:[0-9]+:[0-9]+:[0-9]+:[0-9]+ (region 25 node) - fidonet:2:25(:[0-9]+)+ (region 25 node) - fidonet:1:12:125(:[0-9]+)+ (all net 1:125 nodes) - fidonet:1:12:125:200(:[0-9]+)+ (all hub 1:125/200 downlinks) - fidonet:1:12:125:200:2:[0-9]+ (all 1:125/2 points) - fidonet:1:12:125:[0-9]+:(25|34|56):0 - (nodes 1:125/25.0, 1:125/34.0 and 1:125/56.0) - - Example 'DOS style' patterns on routing addresses: - - *:*:*:*:*:*:* (any address) - fidonet:2:25:*:*:*:* (region 25 node) - fidonet:1:12:125:*:*:* (all net 1:125 nodes) - fidonet:1:12:125:200:*:* (all hub 1:125/200 downlinks) - fidonet:1:12:125:200:2:* (all 1:125/2 points) - fidonet:1:12:125:*:3*:0 (any net 1:125 nodes starting with 3) - fidonet:1:12:125:*:3?:0 (net 1:125 nodes 30 thru 39) - - The standard doesn't define which standard of pattern matching to - use, only the format of the addresses. These routing addresses would - be used in routing tables and configurations. - - -A. Author contact data ----------------------- - - Lee Kindness - Fidonet: n/a - E-mail: wangi@earthling.net - WWW: http://www.scms.rgu.ac.uk/students/cs_yr94/lk/fido.html - - -B. History ----------- - - Rev.1, 971101: First release as FSP, based on the Fidonews 14/20 - article. Transformed into FSP document by Odinn - Sorensen. - - -********************************************************************** -- - Go Back - - - - + + + +
+********************************************************************** +FTSC FIDONET TECHNICAL STANDARDS COMMITTEE +********************************************************************** + +Publication: FSP-1004 +Revision: 1 +Title: Standard Fidonet Addressing +Author: Lee Kindness +Revision Date: 15 May 1997 +Expiry Date: 15 May 1999 +---------------------------------------------------------------------- +Contents: + 1. Standard Fidonet Addressing + 2. Internet Gateway Addressing + 3. Routing Address Syntax +---------------------------------------------------------------------- + + +Status of this document +----------------------- + + This document is a Fidonet Standards Proposal (FSP). + + This document specifies an optional Fidonet standard protocol for + the Fidonet community, and requests discussion and suggestions for + improvements. + + This document is released to the public domain, and may be used, + copied or modified for any purpose whatever. + + +Introduction +------------ + + This document describes the standard form of addressing in Fidonet + today along with the common method of addressing via internet + gateways. In addition it proposes an extended addressing syntax, + useful for routing purposes. This is a draft for comments and + suggestions. + + +1. Standard Fidonet Addressing +------------------------------ + + Fidonet addressing uses the following format: + + ZZ:NN/FF.PP@DO + + where the fields refer to... + + ZZ - Zone Number: The zone the node is part of. + Min: 1 Max: 32767 + If 'ZZ:' is missing then assume 1 as the zone. + + NN - Net Number: The network the node is a member of. + Min: 1 Max: 32767 + Must be present. + + FF - Node Number: The actual node number. + Min: -1 Max: 32767 + Must be present. + + PP - Point Number: If the system is a point rather than a node then + this is their point number off the node. + Min: 0 Max: 32767 + If '.PP' is missing then assume 0 (ie not a + point) as the point number. + + DO - Domain: The name of the 'Fidonet Technology Network'. + Maximum length of 8 characters. The domain + should not include periods, thus 'fidonet.org' + is invalid (should be fidonet). + If '@DO' is missing then fidonet can be assumed. + + The following are all valid examples: + 1:234/5.6@fidonet (a '5D' address) => 1:234/5.6@fidonet + 2:34/6.78 (a '4D' address) => 2:34/6.78@fidonet + 4:610/34 (a '3D' address) => 4:610/34.0@fidonet + 123/45 (a '2D' address) => 1:123/45.0@fidonet + 955:95/2@othernet (another FTN) => 955:95/2.0@othernet + 2:259/-1 (node application) => 2:259/-1.0@fidonet + + The limits on each various part of the address are a result of + fts-0005 (zone, net, node, point), fsc-0045 (domain) and Policy 4 + (-1 node address for node application). + + +2. Internet Gateway Addressing +------------------------------ + + An internet user can send email/netmail to a fidonet user via one of + the fidonet->internet gateway systems (it's out-with the scope of + this document to describe the semantics of posting). The internet + user would send an email to a Fidonet user by using an email address + of the following syntax: + + user.name@pPP.fFF.nNN.zZZ.gateway.domain + + where the fields refer to... + + user.name - Name: Name of the user the email is being sent + to, spaces replaced by periods. + + PP - Point Number: As Fidonet address (FA) + If '.pPP' is missing 0 is assumed. + + FF - Node Number: As FA + Must be present. + + NN - Net Number: As FA + Must be present. + + ZZ - Zone Number: As FA + Must be present. + + gate.way - Gateway: Internet domain of the gateway, for + example 'fidonet.org'. + Must be present. + + The following are all valid examples (assuming 'fidonet.org' is an + internet gateway): + + joe.bloggs@p6.f5.n234.z1.fidonet.org => 1:234/5.6@fidonet + harry.cat@p78.f6.n34.z2.fidonet.org => 2:34/6.78@fidonet + i.be.jolly@f34.n610.z4.fidonet.org => 4:610/34.0@fidonet + + and if 'foo.bar.org.uk' is a gateway for 'othernet': + + louise.hat@f2.n95.z955.foo.bar.org.uk => 955:95/2.0@othernet + + +3. Routing Address Syntax +------------------------- + + The two previous address types (Fidonet and Internet->Fidonet + gateway) are common practice, this however is a suggested standard + of addressing for routing tables. The routing address has the + following syntax: + + DD:ZZ:RR:NN:HH:FF:PP + + where the fields refer to: + + DD - Domain: As FA + Must be present, even if blank (ie a leading + ':') to ensure we always have 6 ':'s in an + address to aid pattern matching. + + ZZ - Zone Number: As FA + Must be present. + + RR - Region Number: The region (from fts-0005 nodelist) that the + following network is in. + Min: 1 Max: 32767 + Must be present. + + NN - Net Number: As FA + Must be present. + + HH - Hub: The hub (from fts-0005 nodelist) that the node + is under, or 0 (host hub). + Min: 1 Max: 32767 + Must be present. + + FF - Node Number: As FA + Must be present. + + PP - Point Number: As FA + Must be present. + + ':' has been chosen as the separator as it is not a POSIX regular + expression character or globing character (where as '.' is) and thus + always easy use of wildcards on the address. The following points + should be noted: + + 1. All addresses have 6 ':'s + 2. The domain is at the front, the address gets more specific to + the right + 3. Nodes have 0 as their point number + 4. A zone net has identical zone, region and net fields + 5. A region net has identical region and net fields + + Example fidonet addresses converted to routing addresses: + + fidonet:2:25:259:0:7:0 => 2:259/7.0@fidonet, region 25, hub 0 + fidonet:1:1:1:0:23:0 => 1:1/23.0@fidonet, zone 1 net + :955:9551:95:300:45:0 => 955:95/45.0, region 9551, hub 300 + fidonet:2:25:25:0:0:0 => 2:25/0.0@fidonet, R25C + cnet:12:34:341:100:1:7 => 12:341/1.7@cnet, region 34, hub 100 + :2:25:259:300:300:0 => 2:259/300.0, region 25, hub 300 + + Example POSIX regular expression patterns on routing addresses: + + [a-z]*:[0-9]+:[0-9]+:[0-9]+:[0-9]+:[0-9]+:[0-9]+ (any address) + [a-z]*(:[0-9]+)+ (any address) + fidonet:2:25:[0-9]+:[0-9]+:[0-9]+:[0-9]+ (region 25 node) + fidonet:2:25(:[0-9]+)+ (region 25 node) + fidonet:1:12:125(:[0-9]+)+ (all net 1:125 nodes) + fidonet:1:12:125:200(:[0-9]+)+ (all hub 1:125/200 downlinks) + fidonet:1:12:125:200:2:[0-9]+ (all 1:125/2 points) + fidonet:1:12:125:[0-9]+:(25|34|56):0 + (nodes 1:125/25.0, 1:125/34.0 and 1:125/56.0) + + Example 'DOS style' patterns on routing addresses: + + *:*:*:*:*:*:* (any address) + fidonet:2:25:*:*:*:* (region 25 node) + fidonet:1:12:125:*:*:* (all net 1:125 nodes) + fidonet:1:12:125:200:*:* (all hub 1:125/200 downlinks) + fidonet:1:12:125:200:2:* (all 1:125/2 points) + fidonet:1:12:125:*:3*:0 (any net 1:125 nodes starting with 3) + fidonet:1:12:125:*:3?:0 (net 1:125 nodes 30 thru 39) + + The standard doesn't define which standard of pattern matching to + use, only the format of the addresses. These routing addresses would + be used in routing tables and configurations. + + +A. Author contact data +---------------------- + + Lee Kindness + Fidonet: n/a + E-mail: wangi@earthling.net + WWW: http://www.scms.rgu.ac.uk/students/cs_yr94/lk/fido.html + + +B. History +---------- + + Rev.1, 971101: First release as FSP, based on the Fidonews 14/20 + article. Transformed into FSP document by Odinn + Sorensen. + + +********************************************************************** ++ +Go Back + + + + diff --git a/html/ftsc/fsp-1005.html b/html/ftsc/fsp-1005.html index 5c035533..023a18a6 100755 --- a/html/ftsc/fsp-1005.html +++ b/html/ftsc/fsp-1005.html @@ -1,450 +1,451 @@ - - -
-********************************************************************** -FTSC FIDONET TECHNICAL STANDARDS COMMITTEE -********************************************************************** - -Publication: FSP-1005 -Revision: 6 -Title: Zone 2 nodelist flags -Author: Frank Ellermann, 2:240/5815.1 -Revision Date: 27 November 1997 -Expiry Date: 27 November 1999 ---------------------------------------------------------------------- -Contents: - 1. Introduction - 2. FTS-0005 flags - 3. User flags - 4. Approved zone 2 user flags - 5. Flag implications - 6. Invalid combinations - 7. Baud rate field - 8. Thanks to... ---------------------------------------------------------------------- - - -1. Introduction ---------------- - This document informs about known differences of FidoNet zone 2 - nodelist flags from FTS-0005.003. The ultimate sources for these - informations are the current Z2 nodelist epilogue and the setup - for flag corrections at Z2C, but it may be difficult to get these - sources for readers in other zones. - -| All changes since version 5 are marked by a bar at the left edge. - It is (again) possible to list V32b and V42b in zone 2, upper case - V32B or V42B is not more enforced. Currently new flags needed for - IP-connectivity are under test in zone 2 (only internally), e.g. - - -> VM VModem, default port 3141, dummy country code 000- - -> IFC IFCico, default port 60179, dummy country code 000- - -> BND BinkP, default port 24544, dummy country code 000- - -> IP general IP connectivity, dummy country code 000- - -> TELN Telnet dummy country code 000- - - -2. FTS-0005 flags ------------------ - The following flags are used as specified in FTS-0005.003: - - CM Continuous Mail, node accepts mail 24 hours a day - MO Mailer Only (no BBS) - LO Listed Only, node accepts calls only from listed - node numbers in the current FidoNet nodelist - - -> V21 ITU-T V21 300 bps full duplex (obsolete) - V22 ITU-T V22 1200 bps full duplex (obsolescent) - -| In zone 2 the value 1200 in the baud rate field implies V22. Only -| two nodes not supporting at least V22bis, ISDN, or IP still exist -| in the zone 2 segment. Flag V22 is almost obsolete, and V21 is -| already removed in Z2. Both flags should be dropped from the next -| FTS-0005 version. - - V29 ITU-T V29 9600 bps half duplex (obsolescent) - -> V33 ITU-T V33 14400 bps half duplex (obsolete) - - V33 cannot be used in connecting FidoNet nodes over public dial-up - lines and is most probably a historical error in FTS-0005. A very - similar argument is applicable on V29, all nodes flying this flag - support at least V32. Today only one node in Z2 still flies V29, - and V33 is already removed in Z2. Both flags should be dropped in - the next FTS-0005 version. - - V32 ITU-T V32 9600 bps full duplex - V32b ITU-T V32bis 14400 bps full duplex (implies V32) -| V34 ITU-T V34 28800 bps full duplex (33600 bps option) - - FTS-0005 specifies V32b and V42b (capital V and small b), current - nodelist practice in FidoNet shows all combinations of small and - capital letters for flags. This was no problem before FSC-0062 - introduced case-sensitive flags. The best solution is to stick to - the current practice and treat all old flags as case-insensitive. - - H96 Hayes V9600 - HST USR Courier HST up to 9600 (implies MNP) - H14 USR Courier HST up to 14400 (implies HST) - -> H16 USR Courier HST up to 16800 (implies H14 and V42b) - MAX Microcom AX/96xx series (almost obsolete) - PEP Packet Ensemble Protocol - CSP Compucom Speedmodem - -> ZYX Zyxel series 16800 bps (implies V32b and V42b) - -> V32T V.32 Terbo 19200 bps (implies V32b) - VFC V.Fast Class 28800 bps (should imply V32b and V42b) - - If a flag directly or indirectly implies other flags, then these - other flags are not shown in a nodelist entry, because this would - be redundant. Unfortunately the rules for redundancies in zone 2 - and FTS-0005 are different. Zone 2 continued to avoid redundancy - with most "new" flags, but FTS-0005.003 specified no redundancies - for "new" flags like ZYX, H16, V32T, or VFC. "New" flags in this - context are flags approved by FidoNet International Coordinators - since 1989, when FTS-0005.TXT, the predecesssor of FTS-0005.003, - was published. - - For details see the chapter "implications" below, for now only - note, that in zone 2 H16 implies V42b, ZYX implies V32b and V42b, - and V32T implies V32b. - - Zone 1 and zone 2 have introduced a user flag Z19 approved by the - corresponding Zone Coordinator. User flags are discussed later, - for now only note, that in zone 2 ZYX is specified as Zyxel 16k8, - while FTS-0005.003 not knowing Z19 specifies ZYX as generic flag - for all Zyxel protocol speeds. - - Today only one node in FidoNet still really flies MAX, this flag - is obsolete and should be dropped from FTS-0005. The flags CSP - (7 nodes worldwide) and H96 should be marked as obsolescent. - -| MNP Microcom Networking Protocol 2-4 error correction -| V42 ITU-T LAP-M error correction w/ fallback to MNP 2-4 -| V42b ITU-T V.42bis BTLZ data compression over V.42 LAP-M - - The next version of FTS-0005 should adopt the better V42b and - MNP definitions of the zone 3 nodelist epilogue. FTS-0005.003 - specifies an implication of V42 by V42b, but the exact meaning of - the flag MNP is unclear. Most probably this flag was meant to -| indicate support of MNP 2-4, and in this sense V42 implies MNP. - -| Note the difference between the flag V42b (implying V42) and the -| standard V.42bis (not necessarily based on LAP-M as data link -| layer protocol), without this difference the flag V42b would be -| ambiguous for combined modem and ISDN node entries. - - MN No compression supported in insecure inbound - - XA Bark and WaZOO file/update requests - XB Bark file/update requests, WaZOO file requests - XC Bark file requests, WaZOO file/update requests - XP Bark file/update requests - XR Bark and WaZOO file requests - XW WaZOO file requests - XX WaZOO file/update requests - - These flags are equivalent in FTS-0005 and in the zone 2 segment. - - Gx..x Gateway to domain 'x..x' - - Valid values for this flag are assigned by the Fido International - Coordinator, FTS-0005.003 explicitly mentions GUUCP. In zone 2 - only GUUCP gateways are flagged. - - #01 Zone 5 mail hour (01:00 - 02:00 UTC) w/ Bell 212A - #02 Zone 2 mail hour (02:30 - 03:30 UTC) w/ Bell 212A - -> #08 Zone 4 mail hour (08:00 - 09:00 UTC) w/ Bell 212A - #09 Zone 1 mail hour (09:00 - 10:00 UTC) w/ Bell 212A - #18 Zone 3 mail hour (18:00 - 19:00 UTC) w/ Bell 212A - #20 Zone 6 mail hour (20:00 - 21:00 UTC) w/ Bell 212A - - The variants !01, !02, !08, !09, !18, and !20 indicate missing - Bell 212A support. In zone 2 #02 or !02 would be obviously - redundant. - - Today less than four 1200 modems (V22 or Bell 212A) are listed. - A future version of FTS-0005 should drop !mn variants together - with V21 and V22 flags. - - Further most non-CM systems flagging #mn or !mn today probably - want to show additional online times instead of additional mail - hours. As soon as FSC-0062 flags have been approved by the IC - or adopted as FTS by the FTSC, the following version of FTS-0005 - should mark #mn as obsolescent and recommend the more flexible - FSC-0062 flags (see below). - - -3. User flags -------------- - An example for one of several problems in zone 2 with user flags: - - ...,U,Z19,V110H,V120L,V120H,X75,ENC,NEC - - These flags indicate a modern Zyxel ISDN-modem and two additional - user flags ENC and NEC. This possible user flags string contains - 34 characters, but at most 32 characters are allowed in FTS-0005. - - ...,U,Z19,V110L,V110H,X75,ISDNA,ISDNB,ISDNC - - During the period for the replacement of old by new ISDN flags - (several months !) many nodes listed both old and new flags for - maximal compatibility, and no problems with nodelist compilers - or mailers caused by too long user flags strings were reported. - - Therefore the length limit in FTS-0005 is probably unnecessary - and at least inconsequent: Other nodelist fields like the system - name are unlimited, so why only restrict the user flags string ? - To help developpers an upper limit of e.g. 255 characters for a - nodelist line and 63 characters for fields 3 to 6 would be more - useful. - - The next problem with user flag strings as specified in FTS-0005 - is their introduction by the letter U with no comma following: - - Nodelist compilers could parse ...,UISDN,USR in user flags ISDN - and USR. But USR cannot be approved as "real" flag, because the - combination ...,USR,UISDN would then be parsed in SR and UISDN. - - Other side effects of the FTS-0005 specification are additional - difficulties in finding flags. Almost all flags are separated - by a comma, only the first user flag can be an exception to this - simple rule. If the order of user flags has no meaning, then... - - ...,UV120L,V120H - ...,UV120H,V120L - - ... are equivalent. A "simple" solution of this problem could be - to treat UV120L as synonym for V120L, and UV120H as synonym for - V120H. Similar problems show up, if user flags are counted, etc. - - Obviously a nodelist compiler looking for user flags has always - to consider the case "user flag separated by comma". In zone 2 - this idea was simply extended to the first user flag: - - All flags are separated by commas. Flags not yet approved by the - International Coordinator or the FTSC (i.e. user flags only used - experimentally or locally) are separated by a new pseudo flag U. - - -> U pseudo flag to the left of at least one user flag - - All flags following this pseudo flag U are user flags, all flags - before this pseudo flag are "real" flags specified in FTS-0005 or - approved by the International Coordinator. - - Because this definition should be compatible with any reasonable - software implementation based on FTS-0005.003, and simplifies the - handling of user flags significantly, a future FTS-0005 version - will hopefully adopt it. - - -4. Approved zone 2 user flags ------------------------------ - In zone 2 user flags have to be approved by the Zone Coordinator. - Currently the following zone 2 user flags exist: - - -> V110L ITU-T V.110 19k2 async 'Low' (former ISDNA) - -> V110H ITU-T V.110 38k4 async 'High' (former ISDNB) - -> V120L ITU-T V.120 56k6 async, N1 = 259, W = 7, modulo 8 - -> V120H ITU-T V.120 64k async, N1 = 259, W = 7, modulo 8 - -> X75 ITU-T X.75 SLP (single link procedure), - 64kbit/s B channel; layer 2 max. framesize N1 = 2048, - window size W = 2, frame numbering modulo 8; - layer 3 transparent (no packet layer) - -> ISDN Other configuration, used only if none of above fits - - These ISDN flags follow the specification in FSC-0091. - - -> Tyz Online time flags as specified in FSC-0062 - - The flag Tyz is used by non-CM nodes online not only during ZMH, - y is a letter indicating the start and z a letter indicating the - end of the online period as defined below (times in UTC): - - A 0:00, a 0:30, B 1:00, b 1:30, C 2:00, c 2:30, - D 3:00, d 3:30, E 4:00, e 4:30, F 5:00, f 5:30, - G 6:00, g 6:30, H 7:00, h 7:30, I 8:00, i 8:30, - J 9:00, j 9:30, K 10:00, k 10:30, L 11:00, l 11:30, - M 12:00, m 12:30, N 13:00, n 13:30, O 14:00, o 14:30, - P 15:00, p 15:30, Q 16:00, q 16:30, R 17:00, r 17:30, - S 18:00, s 18:30, T 19:00, t 19:30, U 20:00, u 20:30, - V 21:00, v 21:30, W 20:00, w 20:30, X 23:00, x 23:30. - - For example TuB shows an online period from 20:30 until 1:00 UTC. - - -> Z19 Zyxel series 19200 bps (implies ZYX) - -> X2C x2 client w/ 56000 bps (should imply V34 and V42b) - -> X2S x2 server w/ 64000 bps (should imply V34 and V42b) - - -> K12 Systems offering all educational K12-conferences - -> ENC The node accepts inbound encrypted mail - - -> NC Network Coordinator (only if the NC is not the host) - -> NEC Net Echomail Coordinator (at most one per net) - -> REC Region Echomail Coordinator (at most one per region) - - Redundant AKAs used to indicate echomail coordination in zone 2 - are no longer permitted. One *EC flag is valid for all AKAs of - a given sysop. - - -5. Flag implications --------------------- - Flag implications directly or indirectly specified in FTS-0005: - - HST => MNP - H14 => MNP HST - H16 => MNP HST H14 - V42b => V42 (MNP ?) - V32b => V32 - - Flag implications specified in the zone 2 nodelist epilogue: - - HST => MNP - H14 => HST MNP - -> H16 => V42 MNP V42b H14 HST - -> V42b => V42 MNP - -> ZYX => V42 MNP V42b V32 V32b - -> Z19 => V42 MNP V42b V32 V32b ZYX - V32b => V32 - -> V32T => V32 V32b - - -> V110L => ISDN - -> V110H => ISDN - -> V120L => ISDN - -> V120H => ISDN - -> X75 => ISDN - - The latter ISDN flag redundancies are a consequence of FSC-0091. - Maybe some of the following implications could be added in zone 2: - - VFC => V32 V32b MNP V42 V42b - X2C => V34 MNP V42 V42b - X2S => V34 MNP V42 V42b - - Flag implications (i.e. not listing redundant flags) have several - advantages: Some old nodelist tools are unable to handle too long - lines. Old flags like HST, MNP, V42, or V32 vanish automatically, - if they are implied by H16, V42b, V32b, or better. Redundancies - defined globally for the whole nodelist help to avoid flag errors. - - -6. Invalid combinations ------------------------ - All file request flags exclude each other (at most 1 is possible): - XA, XB, XC, XP, XR, XW, and XX. For flag checkers only supporting - implications a good approximation based on FTS-0005 definitions is - -| XA => XW XR XP XB XC XX, -| XB => XW XR XP, -| XC => XW XR XX, -| XR => XW, -| XX => XW. - - Further X2C cannot be combined with X2S, and FSC-62 Tyz-flags are - not possible with CM. Also Tyz with y = z is of course incorrect. - - Some modem protocols are "proprietary" in a sense, that all today - known modems can fly at most one of the corresponding modem flags: - MAX, CSP, H96, PEP, HST, H14, H16, ZYX, and Z19. - - A few "old" modem protocol flags are known to be invalid if used - together with "new" protocol flags, i.e. each "old" flag excludes - all "new" flags and vice versa: - - "Old" in this sense are MAX, CSP, H96, HST, H14, V32, and PEP. - "New" in this sense are X2S, X2C, V34, VFC, V32T, and H16. - - For Z2 add ZYX as "old" and Z19 as "new". A simple REXX script to - test some known inconsistencies is available as NLSCHECK.REX at - the site of the author. While erroneously listing redundant flags - causes no harm, other errors like combining V34 with HST or Z19 - with H16 indicate serious problems, which can result in connection - failures or other damage. - - -7. Baud rate field ------------------- - The baud rate field 7 in the nodelist as specified in FTS-0005 is - nearly useless today: Except from a few remaining 1200 and 2400 - nodes almost all nodelist entries show either 9600 for all modem - protocols better than V22bis or 300 for ISDN (or IP) only nodes. - No more V21 or Bell 103 modems are listed for more than 2 years. - - The baud rate values 19200 and 38400 specified in FTS-0005.003 - have not been used in the FidoNet nodelist. So all a reasonable - nodelist compiler can do today, is treat 300 as indicator for - ISDN or IP only, and treat unknown or missing values in field 7 - like 9600. - - A new meaning for field 7 as speed field could be really useful. - An example is ZYX, if we would have 16800, 19200, 28800, and 33600 - as speed values, then their combination with ZYX is all we need - technically, Z19 would be unnecessary. Another example is HST, - flags H14 and H16 are unnecessary, if HST is combined with 9600, - 14400, 16800, 28800, or better. Variants of PEP could be shown in - the speed field without new flags. "Enhanced V32.terbo" could be - shown by 21600. - - Most important: V34 may have the famous bug not allowing connects - from new "V34+", unless the caller disabled symbol rate 3429. If - "V34+" is indicated by speed 33600 or better, then an appropriate - setup for all kinds of V34 connects is possible. - - A future version of FTS-0005 hopefully allows the following speed - values in field 7: - - 300 reserved for ISDN or IP only (for historical reasons) - 1200 obsolete (either V.22 in Z2 / Z3, or Bell 212A in Z1) - 2400 implies V22bis, qualifies as least common denominator - 9600 default, used with PEP, V32, HST, H96, (CSP), (MAX) - 12000 rare variant of V32 - 14400 used with V32b or HST (obsoleting H14) - 16800 used with ZYX or HST (obsoleting H16) - 19200 used with V32T or ZYX (obsoleting Z19) - 21600 rare variant of V32T (no "H21" needed) - 28800 used with VFC or V34 - 33600 used with V34 (no V34+ or V34b needed) -| 56000 used with X2C, X2S, or V.PCM - - Allowing more than 12 speed values or allowing speed values above - 64000 could break existing software (MakeNL, V7). Therefore the - next step in FidoNet could be, to add 12000, 14400, 16800, 19200, - 21600, 28800, 33600, and 56000, where 19200 is already specified - in FTS-5 since 1989. - - -8. Thanks to... ---------------- - Ben Baker St. Louis nodelist format - Rick Moore FTS-0005.TXT - David Nugent FTS-0005.003 and NLTOOLS - Jonny Bergdahl ERRFLAGS 2.6 - Ward Dossche Zone 2 nodelist epilogue - David J. Thomas FSC-0062.003 (FRL-0062) - Jan Ceuleers FSC-0075.001 (FRL-0075) - Arjen Lentz FSC-0091.001 (FRL-0091) - Leonard Erickson CHECKNL 2.14 and many discussions in NET_DEV - Jim Barchuk LNDL 2.7 - Marius Ellen FASTV7 2.04 -| Jan Vermeulen, Ian Smith, Gisbert Rudolph, Carlos Fernandez Sanz, -| Tom Schlangen, Craig Ford, Pedro Lima, and many others... - - -********************************************************************** -- - Go Back - - - - + + + +
+********************************************************************** +FTSC FIDONET TECHNICAL STANDARDS COMMITTEE +********************************************************************** + +Publication: FSP-1005 +Revision: 6 +Title: Zone 2 nodelist flags +Author: Frank Ellermann, 2:240/5815.1 +Revision Date: 27 November 1997 +Expiry Date: 27 November 1999 +--------------------------------------------------------------------- +Contents: + 1. Introduction + 2. FTS-0005 flags + 3. User flags + 4. Approved zone 2 user flags + 5. Flag implications + 6. Invalid combinations + 7. Baud rate field + 8. Thanks to... +--------------------------------------------------------------------- + + +1. Introduction +--------------- + This document informs about known differences of FidoNet zone 2 + nodelist flags from FTS-0005.003. The ultimate sources for these + informations are the current Z2 nodelist epilogue and the setup + for flag corrections at Z2C, but it may be difficult to get these + sources for readers in other zones. + +| All changes since version 5 are marked by a bar at the left edge. + It is (again) possible to list V32b and V42b in zone 2, upper case + V32B or V42B is not more enforced. Currently new flags needed for + IP-connectivity are under test in zone 2 (only internally), e.g. + + -> VM VModem, default port 3141, dummy country code 000- + -> IFC IFCico, default port 60179, dummy country code 000- + -> BND BinkP, default port 24544, dummy country code 000- + -> IP general IP connectivity, dummy country code 000- + -> TELN Telnet dummy country code 000- + + +2. FTS-0005 flags +----------------- + The following flags are used as specified in FTS-0005.003: + + CM Continuous Mail, node accepts mail 24 hours a day + MO Mailer Only (no BBS) + LO Listed Only, node accepts calls only from listed + node numbers in the current FidoNet nodelist + + -> V21 ITU-T V21 300 bps full duplex (obsolete) + V22 ITU-T V22 1200 bps full duplex (obsolescent) + +| In zone 2 the value 1200 in the baud rate field implies V22. Only +| two nodes not supporting at least V22bis, ISDN, or IP still exist +| in the zone 2 segment. Flag V22 is almost obsolete, and V21 is +| already removed in Z2. Both flags should be dropped from the next +| FTS-0005 version. + + V29 ITU-T V29 9600 bps half duplex (obsolescent) + -> V33 ITU-T V33 14400 bps half duplex (obsolete) + + V33 cannot be used in connecting FidoNet nodes over public dial-up + lines and is most probably a historical error in FTS-0005. A very + similar argument is applicable on V29, all nodes flying this flag + support at least V32. Today only one node in Z2 still flies V29, + and V33 is already removed in Z2. Both flags should be dropped in + the next FTS-0005 version. + + V32 ITU-T V32 9600 bps full duplex + V32b ITU-T V32bis 14400 bps full duplex (implies V32) +| V34 ITU-T V34 28800 bps full duplex (33600 bps option) + + FTS-0005 specifies V32b and V42b (capital V and small b), current + nodelist practice in FidoNet shows all combinations of small and + capital letters for flags. This was no problem before FSC-0062 + introduced case-sensitive flags. The best solution is to stick to + the current practice and treat all old flags as case-insensitive. + + H96 Hayes V9600 + HST USR Courier HST up to 9600 (implies MNP) + H14 USR Courier HST up to 14400 (implies HST) + -> H16 USR Courier HST up to 16800 (implies H14 and V42b) + MAX Microcom AX/96xx series (almost obsolete) + PEP Packet Ensemble Protocol + CSP Compucom Speedmodem + -> ZYX Zyxel series 16800 bps (implies V32b and V42b) + -> V32T V.32 Terbo 19200 bps (implies V32b) + VFC V.Fast Class 28800 bps (should imply V32b and V42b) + + If a flag directly or indirectly implies other flags, then these + other flags are not shown in a nodelist entry, because this would + be redundant. Unfortunately the rules for redundancies in zone 2 + and FTS-0005 are different. Zone 2 continued to avoid redundancy + with most "new" flags, but FTS-0005.003 specified no redundancies + for "new" flags like ZYX, H16, V32T, or VFC. "New" flags in this + context are flags approved by FidoNet International Coordinators + since 1989, when FTS-0005.TXT, the predecesssor of FTS-0005.003, + was published. + + For details see the chapter "implications" below, for now only + note, that in zone 2 H16 implies V42b, ZYX implies V32b and V42b, + and V32T implies V32b. + + Zone 1 and zone 2 have introduced a user flag Z19 approved by the + corresponding Zone Coordinator. User flags are discussed later, + for now only note, that in zone 2 ZYX is specified as Zyxel 16k8, + while FTS-0005.003 not knowing Z19 specifies ZYX as generic flag + for all Zyxel protocol speeds. + + Today only one node in FidoNet still really flies MAX, this flag + is obsolete and should be dropped from FTS-0005. The flags CSP + (7 nodes worldwide) and H96 should be marked as obsolescent. + +| MNP Microcom Networking Protocol 2-4 error correction +| V42 ITU-T LAP-M error correction w/ fallback to MNP 2-4 +| V42b ITU-T V.42bis BTLZ data compression over V.42 LAP-M + + The next version of FTS-0005 should adopt the better V42b and + MNP definitions of the zone 3 nodelist epilogue. FTS-0005.003 + specifies an implication of V42 by V42b, but the exact meaning of + the flag MNP is unclear. Most probably this flag was meant to +| indicate support of MNP 2-4, and in this sense V42 implies MNP. + +| Note the difference between the flag V42b (implying V42) and the +| standard V.42bis (not necessarily based on LAP-M as data link +| layer protocol), without this difference the flag V42b would be +| ambiguous for combined modem and ISDN node entries. + + MN No compression supported in insecure inbound + + XA Bark and WaZOO file/update requests + XB Bark file/update requests, WaZOO file requests + XC Bark file requests, WaZOO file/update requests + XP Bark file/update requests + XR Bark and WaZOO file requests + XW WaZOO file requests + XX WaZOO file/update requests + + These flags are equivalent in FTS-0005 and in the zone 2 segment. + + Gx..x Gateway to domain 'x..x' + + Valid values for this flag are assigned by the Fido International + Coordinator, FTS-0005.003 explicitly mentions GUUCP. In zone 2 + only GUUCP gateways are flagged. + + #01 Zone 5 mail hour (01:00 - 02:00 UTC) w/ Bell 212A + #02 Zone 2 mail hour (02:30 - 03:30 UTC) w/ Bell 212A + -> #08 Zone 4 mail hour (08:00 - 09:00 UTC) w/ Bell 212A + #09 Zone 1 mail hour (09:00 - 10:00 UTC) w/ Bell 212A + #18 Zone 3 mail hour (18:00 - 19:00 UTC) w/ Bell 212A + #20 Zone 6 mail hour (20:00 - 21:00 UTC) w/ Bell 212A + + The variants !01, !02, !08, !09, !18, and !20 indicate missing + Bell 212A support. In zone 2 #02 or !02 would be obviously + redundant. + + Today less than four 1200 modems (V22 or Bell 212A) are listed. + A future version of FTS-0005 should drop !mn variants together + with V21 and V22 flags. + + Further most non-CM systems flagging #mn or !mn today probably + want to show additional online times instead of additional mail + hours. As soon as FSC-0062 flags have been approved by the IC + or adopted as FTS by the FTSC, the following version of FTS-0005 + should mark #mn as obsolescent and recommend the more flexible + FSC-0062 flags (see below). + + +3. User flags +------------- + An example for one of several problems in zone 2 with user flags: + + ...,U,Z19,V110H,V120L,V120H,X75,ENC,NEC + + These flags indicate a modern Zyxel ISDN-modem and two additional + user flags ENC and NEC. This possible user flags string contains + 34 characters, but at most 32 characters are allowed in FTS-0005. + + ...,U,Z19,V110L,V110H,X75,ISDNA,ISDNB,ISDNC + + During the period for the replacement of old by new ISDN flags + (several months !) many nodes listed both old and new flags for + maximal compatibility, and no problems with nodelist compilers + or mailers caused by too long user flags strings were reported. + + Therefore the length limit in FTS-0005 is probably unnecessary + and at least inconsequent: Other nodelist fields like the system + name are unlimited, so why only restrict the user flags string ? + To help developpers an upper limit of e.g. 255 characters for a + nodelist line and 63 characters for fields 3 to 6 would be more + useful. + + The next problem with user flag strings as specified in FTS-0005 + is their introduction by the letter U with no comma following: + + Nodelist compilers could parse ...,UISDN,USR in user flags ISDN + and USR. But USR cannot be approved as "real" flag, because the + combination ...,USR,UISDN would then be parsed in SR and UISDN. + + Other side effects of the FTS-0005 specification are additional + difficulties in finding flags. Almost all flags are separated + by a comma, only the first user flag can be an exception to this + simple rule. If the order of user flags has no meaning, then... + + ...,UV120L,V120H + ...,UV120H,V120L + + ... are equivalent. A "simple" solution of this problem could be + to treat UV120L as synonym for V120L, and UV120H as synonym for + V120H. Similar problems show up, if user flags are counted, etc. + + Obviously a nodelist compiler looking for user flags has always + to consider the case "user flag separated by comma". In zone 2 + this idea was simply extended to the first user flag: + + All flags are separated by commas. Flags not yet approved by the + International Coordinator or the FTSC (i.e. user flags only used + experimentally or locally) are separated by a new pseudo flag U. + + -> U pseudo flag to the left of at least one user flag + + All flags following this pseudo flag U are user flags, all flags + before this pseudo flag are "real" flags specified in FTS-0005 or + approved by the International Coordinator. + + Because this definition should be compatible with any reasonable + software implementation based on FTS-0005.003, and simplifies the + handling of user flags significantly, a future FTS-0005 version + will hopefully adopt it. + + +4. Approved zone 2 user flags +----------------------------- + In zone 2 user flags have to be approved by the Zone Coordinator. + Currently the following zone 2 user flags exist: + + -> V110L ITU-T V.110 19k2 async 'Low' (former ISDNA) + -> V110H ITU-T V.110 38k4 async 'High' (former ISDNB) + -> V120L ITU-T V.120 56k6 async, N1 = 259, W = 7, modulo 8 + -> V120H ITU-T V.120 64k async, N1 = 259, W = 7, modulo 8 + -> X75 ITU-T X.75 SLP (single link procedure), + 64kbit/s B channel; layer 2 max. framesize N1 = 2048, + window size W = 2, frame numbering modulo 8; + layer 3 transparent (no packet layer) + -> ISDN Other configuration, used only if none of above fits + + These ISDN flags follow the specification in FSC-0091. + + -> Tyz Online time flags as specified in FSC-0062 + + The flag Tyz is used by non-CM nodes online not only during ZMH, + y is a letter indicating the start and z a letter indicating the + end of the online period as defined below (times in UTC): + + A 0:00, a 0:30, B 1:00, b 1:30, C 2:00, c 2:30, + D 3:00, d 3:30, E 4:00, e 4:30, F 5:00, f 5:30, + G 6:00, g 6:30, H 7:00, h 7:30, I 8:00, i 8:30, + J 9:00, j 9:30, K 10:00, k 10:30, L 11:00, l 11:30, + M 12:00, m 12:30, N 13:00, n 13:30, O 14:00, o 14:30, + P 15:00, p 15:30, Q 16:00, q 16:30, R 17:00, r 17:30, + S 18:00, s 18:30, T 19:00, t 19:30, U 20:00, u 20:30, + V 21:00, v 21:30, W 20:00, w 20:30, X 23:00, x 23:30. + + For example TuB shows an online period from 20:30 until 1:00 UTC. + + -> Z19 Zyxel series 19200 bps (implies ZYX) + -> X2C x2 client w/ 56000 bps (should imply V34 and V42b) + -> X2S x2 server w/ 64000 bps (should imply V34 and V42b) + + -> K12 Systems offering all educational K12-conferences + -> ENC The node accepts inbound encrypted mail + + -> NC Network Coordinator (only if the NC is not the host) + -> NEC Net Echomail Coordinator (at most one per net) + -> REC Region Echomail Coordinator (at most one per region) + + Redundant AKAs used to indicate echomail coordination in zone 2 + are no longer permitted. One *EC flag is valid for all AKAs of + a given sysop. + + +5. Flag implications +-------------------- + Flag implications directly or indirectly specified in FTS-0005: + + HST => MNP + H14 => MNP HST + H16 => MNP HST H14 + V42b => V42 (MNP ?) + V32b => V32 + + Flag implications specified in the zone 2 nodelist epilogue: + + HST => MNP + H14 => HST MNP + -> H16 => V42 MNP V42b H14 HST + -> V42b => V42 MNP + -> ZYX => V42 MNP V42b V32 V32b + -> Z19 => V42 MNP V42b V32 V32b ZYX + V32b => V32 + -> V32T => V32 V32b + + -> V110L => ISDN + -> V110H => ISDN + -> V120L => ISDN + -> V120H => ISDN + -> X75 => ISDN + + The latter ISDN flag redundancies are a consequence of FSC-0091. + Maybe some of the following implications could be added in zone 2: + + VFC => V32 V32b MNP V42 V42b + X2C => V34 MNP V42 V42b + X2S => V34 MNP V42 V42b + + Flag implications (i.e. not listing redundant flags) have several + advantages: Some old nodelist tools are unable to handle too long + lines. Old flags like HST, MNP, V42, or V32 vanish automatically, + if they are implied by H16, V42b, V32b, or better. Redundancies + defined globally for the whole nodelist help to avoid flag errors. + + +6. Invalid combinations +----------------------- + All file request flags exclude each other (at most 1 is possible): + XA, XB, XC, XP, XR, XW, and XX. For flag checkers only supporting + implications a good approximation based on FTS-0005 definitions is + +| XA => XW XR XP XB XC XX, +| XB => XW XR XP, +| XC => XW XR XX, +| XR => XW, +| XX => XW. + + Further X2C cannot be combined with X2S, and FSC-62 Tyz-flags are + not possible with CM. Also Tyz with y = z is of course incorrect. + + Some modem protocols are "proprietary" in a sense, that all today + known modems can fly at most one of the corresponding modem flags: + MAX, CSP, H96, PEP, HST, H14, H16, ZYX, and Z19. + + A few "old" modem protocol flags are known to be invalid if used + together with "new" protocol flags, i.e. each "old" flag excludes + all "new" flags and vice versa: + + "Old" in this sense are MAX, CSP, H96, HST, H14, V32, and PEP. + "New" in this sense are X2S, X2C, V34, VFC, V32T, and H16. + + For Z2 add ZYX as "old" and Z19 as "new". A simple REXX script to + test some known inconsistencies is available as NLSCHECK.REX at + the site of the author. While erroneously listing redundant flags + causes no harm, other errors like combining V34 with HST or Z19 + with H16 indicate serious problems, which can result in connection + failures or other damage. + + +7. Baud rate field +------------------ + The baud rate field 7 in the nodelist as specified in FTS-0005 is + nearly useless today: Except from a few remaining 1200 and 2400 + nodes almost all nodelist entries show either 9600 for all modem + protocols better than V22bis or 300 for ISDN (or IP) only nodes. + No more V21 or Bell 103 modems are listed for more than 2 years. + + The baud rate values 19200 and 38400 specified in FTS-0005.003 + have not been used in the FidoNet nodelist. So all a reasonable + nodelist compiler can do today, is treat 300 as indicator for + ISDN or IP only, and treat unknown or missing values in field 7 + like 9600. + + A new meaning for field 7 as speed field could be really useful. + An example is ZYX, if we would have 16800, 19200, 28800, and 33600 + as speed values, then their combination with ZYX is all we need + technically, Z19 would be unnecessary. Another example is HST, + flags H14 and H16 are unnecessary, if HST is combined with 9600, + 14400, 16800, 28800, or better. Variants of PEP could be shown in + the speed field without new flags. "Enhanced V32.terbo" could be + shown by 21600. + + Most important: V34 may have the famous bug not allowing connects + from new "V34+", unless the caller disabled symbol rate 3429. If + "V34+" is indicated by speed 33600 or better, then an appropriate + setup for all kinds of V34 connects is possible. + + A future version of FTS-0005 hopefully allows the following speed + values in field 7: + + 300 reserved for ISDN or IP only (for historical reasons) + 1200 obsolete (either V.22 in Z2 / Z3, or Bell 212A in Z1) + 2400 implies V22bis, qualifies as least common denominator + 9600 default, used with PEP, V32, HST, H96, (CSP), (MAX) + 12000 rare variant of V32 + 14400 used with V32b or HST (obsoleting H14) + 16800 used with ZYX or HST (obsoleting H16) + 19200 used with V32T or ZYX (obsoleting Z19) + 21600 rare variant of V32T (no "H21" needed) + 28800 used with VFC or V34 + 33600 used with V34 (no V34+ or V34b needed) +| 56000 used with X2C, X2S, or V.PCM + + Allowing more than 12 speed values or allowing speed values above + 64000 could break existing software (MakeNL, V7). Therefore the + next step in FidoNet could be, to add 12000, 14400, 16800, 19200, + 21600, 28800, 33600, and 56000, where 19200 is already specified + in FTS-5 since 1989. + + +8. Thanks to... +--------------- + Ben Baker St. Louis nodelist format + Rick Moore FTS-0005.TXT + David Nugent FTS-0005.003 and NLTOOLS + Jonny Bergdahl ERRFLAGS 2.6 + Ward Dossche Zone 2 nodelist epilogue + David J. Thomas FSC-0062.003 (FRL-0062) + Jan Ceuleers FSC-0075.001 (FRL-0075) + Arjen Lentz FSC-0091.001 (FRL-0091) + Leonard Erickson CHECKNL 2.14 and many discussions in NET_DEV + Jim Barchuk LNDL 2.7 + Marius Ellen FASTV7 2.04 +| Jan Vermeulen, Ian Smith, Gisbert Rudolph, Carlos Fernandez Sanz, +| Tom Schlangen, Craig Ford, Pedro Lima, and many others... + + +********************************************************************** ++ +Go Back + + + + diff --git a/html/ftsc/fsp-1006.html b/html/ftsc/fsp-1006.html index ac3bb301..6ff9de32 100755 --- a/html/ftsc/fsp-1006.html +++ b/html/ftsc/fsp-1006.html @@ -1,159 +1,160 @@ - - -
-********************************************************************** -FTSC FIDONET TECHNICAL STANDARDS COMMITTEE -********************************************************************** - -Publication: FSP-1006 -Revision: 1 -Title: Kludge for specifying addition e-mail reply addresses -Author: Ramon van der Winkel, 1:320/42.46 - ramon@wsd.wline.se -Revision Date: 12 December 1997 -Expiry Date: 12 December 1999 ----------------------------------------------------------------------- -Contents: - 1. Scope - 2. Background - 3. Format - 4. Implementation notes - 5. Example ----------------------------------------------------------------------- - - -Status of this document ------------------------ - - This document is a Fidonet Standards Proposal (FSP). - - This document specifies an optional Fidonet standard protocol for - the Fidonet community, and requests discussion and suggestions for - improvements. - - This document is released to the public domain, and may be used, - copied or modified for any purpose whatever. - - -Abstract --------- - - An Internet message can have several reply addresses. After gating - to FidoNet, the recipient is only presented with one of the reply - addresses. The others are lost. This is a suggestion for an - additional kludge to FSC-0035 to change that. - - -1. Scope --------- - - This standard is specified for FTN netmail messages sent by a - FidoNet-to-Internet gateway to a recipient. Message editors will - have to support this to allow the user to select the reply address - to use. - - -2. Background -------------- - - An Internet message has three headers to indicate where to send a - reply. These are, in order of priority, Reply-To:, Sender: and - From:. When a message is distributed by a mailing list, then one of - the headers could contain the e-mail address of the poster and one - of the other headers the address of the mailing list. - - When the message is gated to FidoNet, the gateway currently selects - of the reply addresses and creates the message so that a reply will - return at the gateway and sent to this one address. The other - addresses are lost. - - The FSC-0035 kludges REPLYTO and REPLYADDR allow for one return - address only. This is a proposal for an additional kludge inserted - by the gateway to specify an addtional reply address. The message - editor used by the recipient will present a list of all reply - addresses and allows the user to select the appropriate address. - - This way, the user can send a message back to the mailing list (for - distribution), or to the e-mail address of the poster only. - - -3. Format ---------- - - Following the REPLYTO and REPLYADDR kludges, one or more kludges - with the name REPLYALSO can be inserted, each listing one possible - reply address. - - @REPLYALSO- - Go Back - - - - + + + +- - Where is in the form of - - ramon@wsd.wline.se - or - wsd.wline.se!ramon - - Each line MUST contain one address only. - - -4. Implementation notes ------------------------ - - Gateways supporting the REPLYALSO kludge MUST put the the reply - address with the highest priority in the REPLYADDR kludge. The order - of priority is Reply-To:, Sender: and From: header. The other - addresses may be listed in any priority. - - -5. Example ----------- - - From: odinn@goldware.dk, 1:320/42 - To: Ramon van der Winkel, 1:320/42.46 - Subj: Another test - --------------------------------------- - @INTL 1:320/42 1:320/42 - @TOPT 46 - @MSGID: wgmid$<123455@goldware.dk> 45AB23CD - @REPLYTO UUCP 1:320/42 - @REPLYADDR odinn@goldware.dk - @REPLYALSO newftsc-l@brazerko.com - This message was distributed by the mailing list "New FTSC" - at brazerko.com. - - ... - - -A. Author contact data ----------------------- - - Ramon van der Winkel - Fidonet: 1:320/42.46 - E-mail: ramon@wsd.wline.se - WWW: http://www2.sbbs.se/hp/ramon - - -B. History ----------- - - Rev.1, 971212: First release. - - -********************************************************************** -
+********************************************************************** +FTSC FIDONET TECHNICAL STANDARDS COMMITTEE +********************************************************************** + +Publication: FSP-1006 +Revision: 1 +Title: Kludge for specifying addition e-mail reply addresses +Author: Ramon van der Winkel, 1:320/42.46 + ramon@wsd.wline.se +Revision Date: 12 December 1997 +Expiry Date: 12 December 1999 +---------------------------------------------------------------------- +Contents: + 1. Scope + 2. Background + 3. Format + 4. Implementation notes + 5. Example +---------------------------------------------------------------------- + + +Status of this document +----------------------- + + This document is a Fidonet Standards Proposal (FSP). + + This document specifies an optional Fidonet standard protocol for + the Fidonet community, and requests discussion and suggestions for + improvements. + + This document is released to the public domain, and may be used, + copied or modified for any purpose whatever. + + +Abstract +-------- + + An Internet message can have several reply addresses. After gating + to FidoNet, the recipient is only presented with one of the reply + addresses. The others are lost. This is a suggestion for an + additional kludge to FSC-0035 to change that. + + +1. Scope +-------- + + This standard is specified for FTN netmail messages sent by a + FidoNet-to-Internet gateway to a recipient. Message editors will + have to support this to allow the user to select the reply address + to use. + + +2. Background +------------- + + An Internet message has three headers to indicate where to send a + reply. These are, in order of priority, Reply-To:, Sender: and + From:. When a message is distributed by a mailing list, then one of + the headers could contain the e-mail address of the poster and one + of the other headers the address of the mailing list. + + When the message is gated to FidoNet, the gateway currently selects + of the reply addresses and creates the message so that a reply will + return at the gateway and sent to this one address. The other + addresses are lost. + + The FSC-0035 kludges REPLYTO and REPLYADDR allow for one return + address only. This is a proposal for an additional kludge inserted + by the gateway to specify an addtional reply address. The message + editor used by the recipient will present a list of all reply + addresses and allows the user to select the appropriate address. + + This way, the user can send a message back to the mailing list (for + distribution), or to the e-mail address of the poster only. + + +3. Format +--------- + + Following the REPLYTO and REPLYADDR kludges, one or more kludges + with the name REPLYALSO can be inserted, each listing one possible + reply address. + + @REPLYALSO <e-mail address> + + Where <e-mail address> is in the form of + + ramon@wsd.wline.se + or + wsd.wline.se!ramon + + Each line MUST contain one address only. + + +4. Implementation notes +----------------------- + + Gateways supporting the REPLYALSO kludge MUST put the the reply + address with the highest priority in the REPLYADDR kludge. The order + of priority is Reply-To:, Sender: and From: header. The other + addresses may be listed in any priority. + + +5. Example +---------- + + From: odinn@goldware.dk, 1:320/42 + To: Ramon van der Winkel, 1:320/42.46 + Subj: Another test + --------------------------------------- + @INTL 1:320/42 1:320/42 + @TOPT 46 + @MSGID: wgmid$<123455@goldware.dk> 45AB23CD + @REPLYTO UUCP 1:320/42 + @REPLYADDR odinn@goldware.dk + @REPLYALSO newftsc-l@brazerko.com + This message was distributed by the mailing list "New FTSC" + at brazerko.com. + + ... + + +A. Author contact data +---------------------- + + Ramon van der Winkel + Fidonet: 1:320/42.46 + E-mail: ramon@wsd.wline.se + WWW: http://www2.sbbs.se/hp/ramon + + +B. History +---------- + + Rev.1, 971212: First release. + + +********************************************************************** ++ +Go Back + + + + diff --git a/html/ftsc/fsp-1007.html b/html/ftsc/fsp-1007.html index 2b2e8fb0..5862e16f 100755 --- a/html/ftsc/fsp-1007.html +++ b/html/ftsc/fsp-1007.html @@ -1,162 +1,163 @@ - - -
-********************************************************************** -FTSC FIDONET TECHNICAL STANDARDS COMMITTEE -********************************************************************** - -Publication: FSP-1007 -Revision: 1 -Title: Multiple recipient address specification to gateway -Author: Ramon van der Winkel, 1:320/42.46 - ramon@wsd.wline.se -Revision Date: 12 December 1997 -Expiry Date: 12 December 1999 ----------------------------------------------------------------------- -Contents: - 1. Scope - 2. Background - 3. Format - 4. Implementation notes for gateways - 5. Example ----------------------------------------------------------------------- - - -Status of this document ------------------------ - - This document is a Fidonet Standards Proposal (FSP). - - This document specifies an optional Fidonet standard protocol for - the Fidonet community, and requests discussion and suggestions for - improvements. - - This document is released to the public domain, and may be used, - copied or modified for any purpose whatever. - - -Abstract --------- - - Private messages within FidoNet only have one recipient address. - Multiple copies of the same message have to be sent to a FidoNet- - to-Internet gateway in order to address multiple recipients. This is - a proposal to indicate the addresses of multiple recipients in the - body of the message sent to the gateway. - - -1. Scope --------- - - This standard is specified for FTN netmail messages sent to a - FidoNet-to-Internet gateway. Users are able to add this information - manually, although message editors could support this and make it - transparent to the user. - - -2. Background -------------- - - Three types of recipient addresses can be specified on the Internet - and are reflected in this suggestion: To, Cc and Bcc. "To" are the - primary recipient(s) of the message. "Cc" is short for Carbon Copy - and lists the recipients that are intended to receive the message as - "informational". The last option "Bcc" is short for Blind Carbon - Copy. Recipients lists as Bcc recipients will not show up in the - headers of the Internet message, but get a copy anyway. - - -3. Format ---------- - - Immediately following the kludge lines, one or more of the following - lines can be inserted in the message. If a To: line is present, then - these lines follow the To: line. - - GW-To:- - Go Back - - - - + + + +[, [...]] - GW-Cc: [, [...]] - GW-Bcc: [, [...]] - - Where is in the form of - - ramon@wsd.wline.se - or - wsd.wline.se!ramon - - Multiple addresses can be specified on the same line, separated by a - comma with optionally spaces around the comma. There is no limit - regarding the length of the line. The line must be terminated by a - single carriage return. - - The GW-To: line replaces the To: lines. - - The reason for GW-Cc is that "Cc:" by itself is expanded by some - editors and used to generate multiple copies of a message. - - -4. Implementation notes for gateways ------------------------------------- - - Gateways supporting this format add the e-mail addresses mentioned - in any of these three headers to the envelope file and create on - outbound (probably UUCP or SMTP) body text message. Rules for the - maximum length of envelope files (if any) apply. - - The headers section of the RFC822 message will list the e-mail - addresses under the To: and Cc: headers. A Bcc: header must not be - added! - - -5. Example ----------- - - From: Ramon van der Winkel, 1:320/42.46 - To: UUCP, 1:320/42 - Subj: New header test - --------------------------------------- - @INTL 1:320/42 1:320/42 - @FMPT 46 - GW-To: groupElist@newftsc.org - GW-Cc: odinn@goldware.dk - GW-Bcc: groupAadmin@newftsc.org - Hi! - - This is a test - - Ramon - - -A. Author contact data ----------------------- - - Ramon van der Winkel - Fidonet: 1:320/42.46 - E-mail: ramon@wsd.wline.se - WWW: http://www2.sbbs.se/hp/ramon - - -B. History ----------- - - Rev.1, 971212: First release. - - -********************************************************************** -
+********************************************************************** +FTSC FIDONET TECHNICAL STANDARDS COMMITTEE +********************************************************************** + +Publication: FSP-1007 +Revision: 1 +Title: Multiple recipient address specification to gateway +Author: Ramon van der Winkel, 1:320/42.46 + ramon@wsd.wline.se +Revision Date: 12 December 1997 +Expiry Date: 12 December 1999 +---------------------------------------------------------------------- +Contents: + 1. Scope + 2. Background + 3. Format + 4. Implementation notes for gateways + 5. Example +---------------------------------------------------------------------- + + +Status of this document +----------------------- + + This document is a Fidonet Standards Proposal (FSP). + + This document specifies an optional Fidonet standard protocol for + the Fidonet community, and requests discussion and suggestions for + improvements. + + This document is released to the public domain, and may be used, + copied or modified for any purpose whatever. + + +Abstract +-------- + + Private messages within FidoNet only have one recipient address. + Multiple copies of the same message have to be sent to a FidoNet- + to-Internet gateway in order to address multiple recipients. This is + a proposal to indicate the addresses of multiple recipients in the + body of the message sent to the gateway. + + +1. Scope +-------- + + This standard is specified for FTN netmail messages sent to a + FidoNet-to-Internet gateway. Users are able to add this information + manually, although message editors could support this and make it + transparent to the user. + + +2. Background +------------- + + Three types of recipient addresses can be specified on the Internet + and are reflected in this suggestion: To, Cc and Bcc. "To" are the + primary recipient(s) of the message. "Cc" is short for Carbon Copy + and lists the recipients that are intended to receive the message as + "informational". The last option "Bcc" is short for Blind Carbon + Copy. Recipients lists as Bcc recipients will not show up in the + headers of the Internet message, but get a copy anyway. + + +3. Format +--------- + + Immediately following the kludge lines, one or more of the following + lines can be inserted in the message. If a To: line is present, then + these lines follow the To: line. + + GW-To: <e-mail address>[,<e-mail address>[...]] + GW-Cc: <e-mail address>[,<e-mail address>[...]] + GW-Bcc: <e-mail address>[,<e-mail address>[...]] + + Where <e-mail address> is in the form of + + ramon@wsd.wline.se + or + wsd.wline.se!ramon + + Multiple addresses can be specified on the same line, separated by a + comma with optionally spaces around the comma. There is no limit + regarding the length of the line. The line must be terminated by a + single carriage return. + + The GW-To: line replaces the To: lines. + + The reason for GW-Cc is that "Cc:" by itself is expanded by some + editors and used to generate multiple copies of a message. + + +4. Implementation notes for gateways +------------------------------------ + + Gateways supporting this format add the e-mail addresses mentioned + in any of these three headers to the envelope file and create on + outbound (probably UUCP or SMTP) body text message. Rules for the + maximum length of envelope files (if any) apply. + + The headers section of the RFC822 message will list the e-mail + addresses under the To: and Cc: headers. A Bcc: header must not be + added! + + +5. Example +---------- + + From: Ramon van der Winkel, 1:320/42.46 + To: UUCP, 1:320/42 + Subj: New header test + --------------------------------------- + @INTL 1:320/42 1:320/42 + @FMPT 46 + GW-To: groupElist@newftsc.org + GW-Cc: odinn@goldware.dk + GW-Bcc: groupAadmin@newftsc.org + Hi! + + This is a test + + Ramon + + +A. Author contact data +---------------------- + + Ramon van der Winkel + Fidonet: 1:320/42.46 + E-mail: ramon@wsd.wline.se + WWW: http://www2.sbbs.se/hp/ramon + + +B. History +---------- + + Rev.1, 971212: First release. + + +********************************************************************** ++ +Go Back + + + + diff --git a/html/ftsc/fsp-1008.html b/html/ftsc/fsp-1008.html index ba98118d..0eedb418 100755 --- a/html/ftsc/fsp-1008.html +++ b/html/ftsc/fsp-1008.html @@ -1,275 +1,276 @@ - - -
-********************************************************************** -FTSC FIDONET TECHNICAL STANDARDS COMMITTEE -********************************************************************** - -Publication: FSP-1008 -Revision: 2 -Title: New control lines for forwarded messages -Author: Michael Hohner, 2:2490/2520.17 -Revision Date: 29 December 1997 -Expiry Date: 29 December 1999 ----------------------------------------------------------------------- -Contents: - 1. Specifications - 2. Usage - 3. Compatiblity - 4. Known implementations ----------------------------------------------------------------------- - - -Status of this document ------------------------ - - This document is a Fidonet Standards Proposal (FSP). - - This document specifies an optional Fidonet standard protocol for - the Fidonet community, and requests discussion and suggestions for - improvements. - - This document is released to the public domain, and may be used, - copied or modified for any purpose whatever. - - This revision is an update to FRL-0092.001. The basic specifications - are unchanged. - - -Abstract --------- - - Most fidonet message editors offer a "forward" function. Using this - function a user A ("forwarder") can sort of "redirect" a message - from user B ("author") to another user C ("final recipient"), maybe - because the forwarder is not the correct recipient, or because the - final recipient is a better person to answer the message. The name - and address of the author are usually included in the forward in - free-text format. The message text is included in non-quoted format. - - A problem arises when the final recipient wants to reply to the - author of the forwarded message. The forward contains the forwarder - as the sender. So the final recipient must insert the name and - address of the author manually, using the information contained in - the message text. The message editor of the final recipient can't do - this automatically because of the free-text format. The editor will - also use incorrect quote initials, which is at least irritating. - - This document introduces 7 new control lines which contain the - header information of the original message. With these control lines - the message editor can use the original header information - automatically. - - -1. Specifications ------------------ - - There are 7 new control lines: FWDFROM, FWDTO, FWDORIG, FWDDEST, - FWDSUBJ, FWDAREA, FWDMSGID. As all control lines they start with an - ASCII 01 character (SOH) followed by the control line name followed - by whitespace followed by the control line's content followed by - ASCII 13 (CR). - - Please note that all these control lines do not have a colon (like - the control lines in FTS-0001). This would be just waste of space. - - FWDFROM - ------- - - This control line contains the name of the original sender as found - in the FROM field of the original message. Leading and trailing - whitespace should be removed. This control line should be omitted - altogether if the FROM field is empty. - - FWDTO - ----- - - This control line contains the name of the original recipient as - found in the TO field of the original message. Leading and trailing - whitespace should be removed. This control line should be omitted - altogether if the TO field is empty. - - FWDORIG - ------- - - This control line contains the address of the original sender as - found in the ORIG field of the original message. The usual 5D ASCII - notation (zone:net/node.point@domain) should be used. This control - line should be omitted altogether if the address is not known. - - FWDDEST - ------- - - This control line contains the address of the original recipient as - found in the DEST field of the original message. The usual 5D ASCII - notation (zone:net/node.point@domain) should be used. This control - line should be omitted altogether if the address is not known or - unsure (as it is the case with forwarded echomail messages). - - FWDSUBJ - ------- - - This control line contains the subject line of the original message. - This control line should be omitted altogether if the SUBJ field is - empty. - - This control line should by made optional for security reasons. Echo - manager passwords are too easily revealed with it. - - FWDAREA - ------- - - This control line contains the name of the echomail area where the - original message was forwarded from. It should be omitted altogether - if the original message was not forwarded from an echomail area. - - FWDMSGID - -------- - - This control line contains the MSGID control line of the original - message. It should be omitted altogether if a MSGID control line is - not present in the original message. - - -2. Usage --------- - - When the "forward" function of the message editor is invoked, the - editor program should generate the proposed control lines from the - header of the original message. If the original message already was - a forwarded one (indicated by the presence of at least a FWDORIG - control line), the editor should keep all FWD* control lines and - should not add any FWD* control lines. This preserves the FWD* - control lines of the first forwarder, containing the header data of - the author of the original message. - - The editor should not generate FWD* control lines, if the message - isn't to be forwarded. A mail forwarding robot may also generate - these control lines, if it not just readdresses the message. - - When the "reply" function of the editor is invoked the program - should use the control lines' contents instead of the header - information. The control lines should not be included in the reply. - - Since it may not be immediately clear whether the user wants to - reply to the forwarder or to the original sender, the editor should - offer a means to ignore the proposed control lines and start a - "normal" reply instead, e.g. by two distinct functions, by user - preference or a dialog. - - - Pseudo code: - - forwarding_message: - if is_forwarded_message then - don't change FWD* control lines - else - add FWD* control lines - - quoting_message: - if is_forwarded_message then - if reply_to_forwarder then - use header data (normal quoting) - else - use FWD* control lines - remove FWD* control lines from reply - else - use header data (normal quoting) - - other_functions: - remove/ignore FWD* control lines - - - Example: - - Message from Joe User to my boss node: - - From: Joe User 1:234/567 - To: Harry Herrmannsdoerfer 2:2490/2520 - Subj: Some questions - @MSGID: 1:234/567 12345678 - Text: Hello Harry! - ... - - Harry forwards the message to me: - - From: Harry Herrmannsdoerfer 2:2490/2520 - To: Michael Hohner 2:2490/2520.17 - Subj: Joe's message - @FWDFROM Joe User - @FWDORIG 1:234/567 - @FWDTO Harry Herrmannsdoerfer - @FWDDEST 2:2490/2520 - @FWDSUBJ Some questions - @FWDMSGID 1:234/567 12345678 - Text: Hi Michael! - ... - - My answer using the new control lines: - - From: Michael Hohner 2:2490/2520.17 - To: Joe User 1:234/567 - Subj: Some questions - @REPLY: 1:234/567 12345678 - Text: Hi Joe! - - JU> ... - ... - - -3. Compatiblity ---------------- - - Editor programs which are not prepared for these proposed control - lines usually just ignore them and remove them from a reply. A reply - goes to the forwarder. Nothing gained and nothing lost. - - -4. Known implementations ------------------------- - - This proposal is implemented in the author's Fidonet editor - "FleetStreet for OS/2" (versions 1.17 and newer). - - Also implemented in Odinn Sorensens Fidonet editor "GoldED" - (versions 3.00.Alpha5 and newer). - - -A. Contacting the author ------------------------- - - The author may be contacted electronically at the following - addresses: - - Fidonet: 2:2490/2520.17 - Internet: miho@osn.de - - Suggestions, comments and corrections are always welcome. - - -B. History ----------- - - Rev.1, 19960912: First release as FSC-0092.001. - Rev.2, 19971229: Submitted as FSP. - - -********************************************************************** -- - Go Back - - - - + + + +
+********************************************************************** +FTSC FIDONET TECHNICAL STANDARDS COMMITTEE +********************************************************************** + +Publication: FSP-1008 +Revision: 2 +Title: New control lines for forwarded messages +Author: Michael Hohner, 2:2490/2520.17 +Revision Date: 29 December 1997 +Expiry Date: 29 December 1999 +---------------------------------------------------------------------- +Contents: + 1. Specifications + 2. Usage + 3. Compatiblity + 4. Known implementations +---------------------------------------------------------------------- + + +Status of this document +----------------------- + + This document is a Fidonet Standards Proposal (FSP). + + This document specifies an optional Fidonet standard protocol for + the Fidonet community, and requests discussion and suggestions for + improvements. + + This document is released to the public domain, and may be used, + copied or modified for any purpose whatever. + + This revision is an update to FRL-0092.001. The basic specifications + are unchanged. + + +Abstract +-------- + + Most fidonet message editors offer a "forward" function. Using this + function a user A ("forwarder") can sort of "redirect" a message + from user B ("author") to another user C ("final recipient"), maybe + because the forwarder is not the correct recipient, or because the + final recipient is a better person to answer the message. The name + and address of the author are usually included in the forward in + free-text format. The message text is included in non-quoted format. + + A problem arises when the final recipient wants to reply to the + author of the forwarded message. The forward contains the forwarder + as the sender. So the final recipient must insert the name and + address of the author manually, using the information contained in + the message text. The message editor of the final recipient can't do + this automatically because of the free-text format. The editor will + also use incorrect quote initials, which is at least irritating. + + This document introduces 7 new control lines which contain the + header information of the original message. With these control lines + the message editor can use the original header information + automatically. + + +1. Specifications +----------------- + + There are 7 new control lines: FWDFROM, FWDTO, FWDORIG, FWDDEST, + FWDSUBJ, FWDAREA, FWDMSGID. As all control lines they start with an + ASCII 01 character (SOH) followed by the control line name followed + by whitespace followed by the control line's content followed by + ASCII 13 (CR). + + Please note that all these control lines do not have a colon (like + the control lines in FTS-0001). This would be just waste of space. + + FWDFROM + ------- + + This control line contains the name of the original sender as found + in the FROM field of the original message. Leading and trailing + whitespace should be removed. This control line should be omitted + altogether if the FROM field is empty. + + FWDTO + ----- + + This control line contains the name of the original recipient as + found in the TO field of the original message. Leading and trailing + whitespace should be removed. This control line should be omitted + altogether if the TO field is empty. + + FWDORIG + ------- + + This control line contains the address of the original sender as + found in the ORIG field of the original message. The usual 5D ASCII + notation (zone:net/node.point@domain) should be used. This control + line should be omitted altogether if the address is not known. + + FWDDEST + ------- + + This control line contains the address of the original recipient as + found in the DEST field of the original message. The usual 5D ASCII + notation (zone:net/node.point@domain) should be used. This control + line should be omitted altogether if the address is not known or + unsure (as it is the case with forwarded echomail messages). + + FWDSUBJ + ------- + + This control line contains the subject line of the original message. + This control line should be omitted altogether if the SUBJ field is + empty. + + This control line should by made optional for security reasons. Echo + manager passwords are too easily revealed with it. + + FWDAREA + ------- + + This control line contains the name of the echomail area where the + original message was forwarded from. It should be omitted altogether + if the original message was not forwarded from an echomail area. + + FWDMSGID + -------- + + This control line contains the MSGID control line of the original + message. It should be omitted altogether if a MSGID control line is + not present in the original message. + + +2. Usage +-------- + + When the "forward" function of the message editor is invoked, the + editor program should generate the proposed control lines from the + header of the original message. If the original message already was + a forwarded one (indicated by the presence of at least a FWDORIG + control line), the editor should keep all FWD* control lines and + should not add any FWD* control lines. This preserves the FWD* + control lines of the first forwarder, containing the header data of + the author of the original message. + + The editor should not generate FWD* control lines, if the message + isn't to be forwarded. A mail forwarding robot may also generate + these control lines, if it not just readdresses the message. + + When the "reply" function of the editor is invoked the program + should use the control lines' contents instead of the header + information. The control lines should not be included in the reply. + + Since it may not be immediately clear whether the user wants to + reply to the forwarder or to the original sender, the editor should + offer a means to ignore the proposed control lines and start a + "normal" reply instead, e.g. by two distinct functions, by user + preference or a dialog. + + + Pseudo code: + + forwarding_message: + if is_forwarded_message then + don't change FWD* control lines + else + add FWD* control lines + + quoting_message: + if is_forwarded_message then + if reply_to_forwarder then + use header data (normal quoting) + else + use FWD* control lines + remove FWD* control lines from reply + else + use header data (normal quoting) + + other_functions: + remove/ignore FWD* control lines + + + Example: + + Message from Joe User to my boss node: + + From: Joe User 1:234/567 + To: Harry Herrmannsdoerfer 2:2490/2520 + Subj: Some questions + @MSGID: 1:234/567 12345678 + Text: Hello Harry! + ... + + Harry forwards the message to me: + + From: Harry Herrmannsdoerfer 2:2490/2520 + To: Michael Hohner 2:2490/2520.17 + Subj: Joe's message + @FWDFROM Joe User + @FWDORIG 1:234/567 + @FWDTO Harry Herrmannsdoerfer + @FWDDEST 2:2490/2520 + @FWDSUBJ Some questions + @FWDMSGID 1:234/567 12345678 + Text: Hi Michael! + ... + + My answer using the new control lines: + + From: Michael Hohner 2:2490/2520.17 + To: Joe User 1:234/567 + Subj: Some questions + @REPLY: 1:234/567 12345678 + Text: Hi Joe! + + JU> ... + ... + + +3. Compatiblity +--------------- + + Editor programs which are not prepared for these proposed control + lines usually just ignore them and remove them from a reply. A reply + goes to the forwarder. Nothing gained and nothing lost. + + +4. Known implementations +------------------------ + + This proposal is implemented in the author's Fidonet editor + "FleetStreet for OS/2" (versions 1.17 and newer). + + Also implemented in Odinn Sorensens Fidonet editor "GoldED" + (versions 3.00.Alpha5 and newer). + + +A. Contacting the author +------------------------ + + The author may be contacted electronically at the following + addresses: + + Fidonet: 2:2490/2520.17 + Internet: miho@osn.de + + Suggestions, comments and corrections are always welcome. + + +B. History +---------- + + Rev.1, 19960912: First release as FSC-0092.001. + Rev.2, 19971229: Submitted as FSP. + + +********************************************************************** ++ +Go Back + + + + diff --git a/html/ftsc/fsp-1009.html b/html/ftsc/fsp-1009.html index b7f5795a..ba046259 100755 --- a/html/ftsc/fsp-1009.html +++ b/html/ftsc/fsp-1009.html @@ -1,142 +1,143 @@ - - -
-********************************************************************** -FTSC FIDONET TECHNICAL STANDARDS COMMITTEE -********************************************************************** - -Publication: FSP-1009 -Revision: 1 -Title: Year 2000 issues in FTN software -Author: Michael Hohner, 2:2490/2520.17 -Revision Date: 29 December 1997 -Expiry Date: 29 December 1999 ----------------------------------------------------------------------- -Contents: - 1. Introduction - 2. Generating Fidonet timestamps - 3. Interpreting Fidonet timestamps ----------------------------------------------------------------------- - - -Status of this document ------------------------ - - This document is a Fidonet Standards Proposal (FSP). - - This document specifies an optional Fidonet standard protocol for - the Fidonet community, and requests discussion and suggestions for - improvements. - - This document is released to the public domain, and may be used, - copied or modified for any purpose whatever. - - -Abstract --------- - - The year 2000 causes problems in many computer programs which use - two-digit year numbers. Current Fidonet software faces the very same - problems. This FSP specifies procedures which enable FTN software to - run without problems after the year 2000. - - -1. Introduction ---------------- - - Software using two-digit year numbers may cause problems in the year - 2000. When the year number rolls over from "99" to "00", some - software may interpret the resulting year number as "1900" instead - of "2000". Such programs may contain code like this: - - calendar_year = year_number + 1900; /* wrong! */ - - Fidonet software faces the very same problem: the year number in - packed messages (see FTS-0001) has only two digits. Some programs - interpreting this number incorrectly may decide that messages from - the year 1900 are too old and discard them. Other programs probably - just display a wrong calendar year. - - The long-term solution would be a transition to four-digit year - numbers. However, this would require new data formats and cause - every existing software to fail. So a short-term solution is - required, resulting in only minimal changes in software. This FSP - contains guidelines for proper year-number interpretation. The - author encourages all FTN software authors to check their software - for possible year-2000 problems (and release fixed versions during - the next three years). - - -2. Generating Fidonet timestamps --------------------------------- - - This should not cause much headache. However, some software may use - the following algorithm: - - year_number = calendar_year - 1900 /* wrong! */ - - This will result in a three-digit year number in 2000 and lead to - incorrect Fidonet timestamps. - - One correct algorithm is: - - year_number = calendar_year mod 100 /* correct! */ - - -3. Interpreting Fidonet timestamps ----------------------------------- - - We can make use of the fact that Fidonet didn't exist before 1980, - i.e. no messages were created before 1980. So any year number - smaller than 80 can't mean "year 19xx", but can only mean "year - 20xx". One algorithm for correct year number interpretation is: - - if year_number < 80 then - calendar_year = 2000 + year_number - else - calendar_year = 1900 + year_number - - Fidonet software should only use the calendar year for further - processing, not the year number from the timestamp. - - This solution will work until 2080, giving us another 80+ years to - finally let some innovation happen in Fidonet. - - -A. Contacting the author ------------------------- - - The author may be contacted electronically at the following - addresses: - - Fidonet: 2:2490/2520.17 - Internet: miho@osn.de - - Suggestions, comments and corrections are always welcome. - - -B. History ----------- - - Rev.1, 19971229: Submitted as FSP. - - -********************************************************************** -- - Go Back - - - - + + + +
+********************************************************************** +FTSC FIDONET TECHNICAL STANDARDS COMMITTEE +********************************************************************** + +Publication: FSP-1009 +Revision: 1 +Title: Year 2000 issues in FTN software +Author: Michael Hohner, 2:2490/2520.17 +Revision Date: 29 December 1997 +Expiry Date: 29 December 1999 +---------------------------------------------------------------------- +Contents: + 1. Introduction + 2. Generating Fidonet timestamps + 3. Interpreting Fidonet timestamps +---------------------------------------------------------------------- + + +Status of this document +----------------------- + + This document is a Fidonet Standards Proposal (FSP). + + This document specifies an optional Fidonet standard protocol for + the Fidonet community, and requests discussion and suggestions for + improvements. + + This document is released to the public domain, and may be used, + copied or modified for any purpose whatever. + + +Abstract +-------- + + The year 2000 causes problems in many computer programs which use + two-digit year numbers. Current Fidonet software faces the very same + problems. This FSP specifies procedures which enable FTN software to + run without problems after the year 2000. + + +1. Introduction +--------------- + + Software using two-digit year numbers may cause problems in the year + 2000. When the year number rolls over from "99" to "00", some + software may interpret the resulting year number as "1900" instead + of "2000". Such programs may contain code like this: + + calendar_year = year_number + 1900; /* wrong! */ + + Fidonet software faces the very same problem: the year number in + packed messages (see FTS-0001) has only two digits. Some programs + interpreting this number incorrectly may decide that messages from + the year 1900 are too old and discard them. Other programs probably + just display a wrong calendar year. + + The long-term solution would be a transition to four-digit year + numbers. However, this would require new data formats and cause + every existing software to fail. So a short-term solution is + required, resulting in only minimal changes in software. This FSP + contains guidelines for proper year-number interpretation. The + author encourages all FTN software authors to check their software + for possible year-2000 problems (and release fixed versions during + the next three years). + + +2. Generating Fidonet timestamps +-------------------------------- + + This should not cause much headache. However, some software may use + the following algorithm: + + year_number = calendar_year - 1900 /* wrong! */ + + This will result in a three-digit year number in 2000 and lead to + incorrect Fidonet timestamps. + + One correct algorithm is: + + year_number = calendar_year mod 100 /* correct! */ + + +3. Interpreting Fidonet timestamps +---------------------------------- + + We can make use of the fact that Fidonet didn't exist before 1980, + i.e. no messages were created before 1980. So any year number + smaller than 80 can't mean "year 19xx", but can only mean "year + 20xx". One algorithm for correct year number interpretation is: + + if year_number < 80 then + calendar_year = 2000 + year_number + else + calendar_year = 1900 + year_number + + Fidonet software should only use the calendar year for further + processing, not the year number from the timestamp. + + This solution will work until 2080, giving us another 80+ years to + finally let some innovation happen in Fidonet. + + +A. Contacting the author +------------------------ + + The author may be contacted electronically at the following + addresses: + + Fidonet: 2:2490/2520.17 + Internet: miho@osn.de + + Suggestions, comments and corrections are always welcome. + + +B. History +---------- + + Rev.1, 19971229: Submitted as FSP. + + +********************************************************************** ++ +Go Back + + + + diff --git a/html/ftsc/fsp-1010.html b/html/ftsc/fsp-1010.html index 3be37d24..17bc4a01 100755 --- a/html/ftsc/fsp-1010.html +++ b/html/ftsc/fsp-1010.html @@ -1,242 +1,243 @@ - - -
-********************************************************************** -FTSC FIDONET TECHNICAL STANDARDS COMMITTEE -********************************************************************** - -Publication: FSP-1010 -Revision: 1 -Title: Via kludge specification -Author: Colin Turner, - Joaquim Homrighausen -Revision Date: 26 April 1999 -Expiry Date: 26 April 2001 ----------------------------------------------------------------------- -Contents: - 1. Current practice - 2. Kludge specification - 3. Examples - 4. Deprecated formats ----------------------------------------------------------------------- - -Status of this document ------------------------ - - This document is a Fidonet Standards Proposal (FSP). - - This document specifies an optional Fidonet standard protocol for - the Fidonet community, and requests discussion and suggestions for - improvements. - - This document is released to the public domain, and may be used, - copied or modified for any purpose whatever. - - -Abstract --------- - - Current practice for Fidonet Technology Network (FTN) NetMail - messages is to track their progress through the network and - programs by using control lines. These control lines are in - the form of a kludge named Via. - - -1. Current practice -------------------- - - As NetMail messages are routed through a FidoNet Technology Network - or as they are processed on a system, Via control lines are used to - track their progress. - - A single NetMail message may have any number of Via control lines. - - The Via control lines are stored in a block which starts after any - message text. New Via lines should be added to the end of the block - separated from the preceding control line by a single ASCII <CR> - character (0Dh). - - A Via control line is typically added: - - when a netmail packer packs the NetMail for transmission to - another system; - - when a netmail tracker inspects a NetMail. - -2. Kludge specification ------------------------ - - The Via control line is formatted as a number of fields, separated - by single space (20h) characters, as follows - - ^AVia: <FTN Address> @YYYYMMDD.HHMMSS[.Precise][.Time Zone] - <Program Name> <Version> [Serial Number]<CR> - - Where ^A denotes the ASCII <SOH> (01h) character, and <CR> is the - character (0Dh). - - The fields are defined as follows: - - FTN Address - ----------- - - This field is mandatory and is the FidoNet Technology address of - the system inserting the kludge. This may or may not include a - domain indicator. - - @YYYYMMDD.HHMMSS - ---------------- - - This field is mandatory and consists of a time stamp. This is the - time at which the stamp was placed. The subcomponents are - - YYYY, the calendar year, in full four digit, decimal form; - MM, the calendar month, in the range 01 to 12, this must be a - zero padded, two digit decimal number; - DD, the day of the month, in the range 01 to 31, this must be a - zero padded, two digit decimal number; - HH, hours, in the range 00 to 23, this must be a zero padded, - two digit decimal number; - MM, minutes, in the range 00 to 59, this must be a zero padded, - two digit decimal number; - SS. seconds, in the range 00 to 59, this must be a zero padded, - two digit decimal number. - - Precise - ------- - - This field is optional and takes the form of extra precision in the - time stamp. - - If this field is present: - - it must begin with a single period character; - - this period must be followed by one or more decimal digits; - - the field has ended when another period or space is encountered; - - each decimal digit in the field following this character - represents the time of the via line in fractions of a second, - such that the the first digit represents tenths of a second, - the second digit represents hundreds of a second and so on. - - Time Zone - --------- - - This field is optional, and must be a short, widely accepted - alphabetical abbreviation of the time zone that the time stamp - in the Via line pertains to. - - The use of various Time Zone values is deprecated, implementations - should attempt to convert the timestamp in the kludge to Universal - Time (GMT or UTC) and use the "UTC" Time Zone indicator, where - possible. - - The Time Zone field may only be ommitted when it is not possible - for the implementation to determine the correct offset from UTC, - and in this case the time stamp must represent local time on the - generating system. - - Program Name - ------------ - - This field is mandatory, and must follow the format used in the PID - control line (detailed in FSC-46). - - Version - ------- - - This field is mandatory, and must follow the format used in the PID - control line (detailed in FSC-46). - - Serial Number - ------------- - - This field is optional, and must follow the format used in the PID - control line (detailed in FSC-46). - - Note that unlike many kludges, the "Via" text of the kludge itself - is in mixed, and not all upper case. - -3. Examples ------------ - - Example of valid usage are - - ^AVia 2:443/13 @19990305.043212.UTC O/T-Track+ 2.69 - ^AVia 2:443/13@fidonet @19980331.231202.UTC FrontDoor 2.32.mL - ^AVia 2:443/13.0 @19990101.002102.UTC FastEcho 1.46.1 21321 - ^AVia 2:443/13 @19990323.230132 FakeMail 1.2 - ^AVia 2:2480/18@fidonet @19990307.182128.47.UTC ITrack+ 1.3/G6 FP000069 - -4. Deprecated formats ---------------------- - - Some other formats for the Via line are in use today, but these - formats are rather variable and inconsistent in nature, while - the format specified above is both more widespread and more - consistent. - - New implentations may need to parse these formats, but must not - generate them. - - The formats in use include, but are not limited to - - <NAME> [VERSION] [SERIAL] <ADDRESS> <TIMESTAMP> <TIMEZONE> - <NAME> <ADDRESS>, <TIMESTAMP> <TIMEZONE> <VERSION> - - Not that the time stamp in the above formats is also widely - variable, and takes forms which include, but may not be limited to - - <Day> <Month> <Year> AT <Hour>:<Min>:[Sec] - <Day of Week> <Month> <Day of Month> <Year> <Hour>:<Min>:<Sec> - ON <Day of Month> <Month> <Year> <Hour>:<Min>:<Sec> - <Month>/<Day> <Hour>:<Min> - @YYMMDDHHMMSS - - In the last listed format, observe in particular the two digit year - and lack of period to seperate the date from time. - -A. References -------------- - - [FTS-1] "A Basic FidoNet(r) Technical Standard Revision 16", Randy - Bush. September 1995. - - [FSC-46] "A Product Identifier for FidoNet Message Handlers", - Joaquim Homrighausen, August 1994. - - -B. Author contact data ----------------------- - - Colin Turner - Fidonet: 2:443/13 - E-mail: ct@piglets.com - WWW: http://www.piglets.com - - Joaquim Homrighausen - Fidonet: 2:201/330 - E-mail: joho@defsol.se - WWW: http://www.defsol.se - - -C. History ----------- - - Rev.1, 990426: First release. - -********************************************************************** -- Go Back - - + + + +
+********************************************************************** +FTSC FIDONET TECHNICAL STANDARDS COMMITTEE +********************************************************************** + +Publication: FSP-1010 +Revision: 1 +Title: Via kludge specification +Author: Colin Turner, + Joaquim Homrighausen +Revision Date: 26 April 1999 +Expiry Date: 26 April 2001 +---------------------------------------------------------------------- +Contents: + 1. Current practice + 2. Kludge specification + 3. Examples + 4. Deprecated formats +---------------------------------------------------------------------- + +Status of this document +----------------------- + + This document is a Fidonet Standards Proposal (FSP). + + This document specifies an optional Fidonet standard protocol for + the Fidonet community, and requests discussion and suggestions for + improvements. + + This document is released to the public domain, and may be used, + copied or modified for any purpose whatever. + + +Abstract +-------- + + Current practice for Fidonet Technology Network (FTN) NetMail + messages is to track their progress through the network and + programs by using control lines. These control lines are in + the form of a kludge named Via. + + +1. Current practice +------------------- + + As NetMail messages are routed through a FidoNet Technology Network + or as they are processed on a system, Via control lines are used to + track their progress. + + A single NetMail message may have any number of Via control lines. + + The Via control lines are stored in a block which starts after any + message text. New Via lines should be added to the end of the block + separated from the preceding control line by a single ASCII <CR> + character (0Dh). + + A Via control line is typically added: + + when a netmail packer packs the NetMail for transmission to + another system; + + when a netmail tracker inspects a NetMail. + +2. Kludge specification +----------------------- + + The Via control line is formatted as a number of fields, separated + by single space (20h) characters, as follows + + ^AVia: <FTN Address> @YYYYMMDD.HHMMSS[.Precise][.Time Zone] + <Program Name> <Version> [Serial Number]<CR> + + Where ^A denotes the ASCII <SOH> (01h) character, and <CR> is the + character (0Dh). + + The fields are defined as follows: + + FTN Address + ----------- + + This field is mandatory and is the FidoNet Technology address of + the system inserting the kludge. This may or may not include a + domain indicator. + + @YYYYMMDD.HHMMSS + ---------------- + + This field is mandatory and consists of a time stamp. This is the + time at which the stamp was placed. The subcomponents are + + YYYY, the calendar year, in full four digit, decimal form; + MM, the calendar month, in the range 01 to 12, this must be a + zero padded, two digit decimal number; + DD, the day of the month, in the range 01 to 31, this must be a + zero padded, two digit decimal number; + HH, hours, in the range 00 to 23, this must be a zero padded, + two digit decimal number; + MM, minutes, in the range 00 to 59, this must be a zero padded, + two digit decimal number; + SS. seconds, in the range 00 to 59, this must be a zero padded, + two digit decimal number. + + Precise + ------- + + This field is optional and takes the form of extra precision in the + time stamp. + + If this field is present: + + it must begin with a single period character; + + this period must be followed by one or more decimal digits; + + the field has ended when another period or space is encountered; + + each decimal digit in the field following this character + represents the time of the via line in fractions of a second, + such that the the first digit represents tenths of a second, + the second digit represents hundreds of a second and so on. + + Time Zone + --------- + + This field is optional, and must be a short, widely accepted + alphabetical abbreviation of the time zone that the time stamp + in the Via line pertains to. + + The use of various Time Zone values is deprecated, implementations + should attempt to convert the timestamp in the kludge to Universal + Time (GMT or UTC) and use the "UTC" Time Zone indicator, where + possible. + + The Time Zone field may only be ommitted when it is not possible + for the implementation to determine the correct offset from UTC, + and in this case the time stamp must represent local time on the + generating system. + + Program Name + ------------ + + This field is mandatory, and must follow the format used in the PID + control line (detailed in FSC-46). + + Version + ------- + + This field is mandatory, and must follow the format used in the PID + control line (detailed in FSC-46). + + Serial Number + ------------- + + This field is optional, and must follow the format used in the PID + control line (detailed in FSC-46). + + Note that unlike many kludges, the "Via" text of the kludge itself + is in mixed, and not all upper case. + +3. Examples +----------- + + Example of valid usage are + + ^AVia 2:443/13 @19990305.043212.UTC O/T-Track+ 2.69 + ^AVia 2:443/13@fidonet @19980331.231202.UTC FrontDoor 2.32.mL + ^AVia 2:443/13.0 @19990101.002102.UTC FastEcho 1.46.1 21321 + ^AVia 2:443/13 @19990323.230132 FakeMail 1.2 + ^AVia 2:2480/18@fidonet @19990307.182128.47.UTC ITrack+ 1.3/G6 FP000069 + +4. Deprecated formats +--------------------- + + Some other formats for the Via line are in use today, but these + formats are rather variable and inconsistent in nature, while + the format specified above is both more widespread and more + consistent. + + New implentations may need to parse these formats, but must not + generate them. + + The formats in use include, but are not limited to + + <NAME> [VERSION] [SERIAL] <ADDRESS> <TIMESTAMP> <TIMEZONE> + <NAME> <ADDRESS>, <TIMESTAMP> <TIMEZONE> <VERSION> + + Not that the time stamp in the above formats is also widely + variable, and takes forms which include, but may not be limited to + + <Day> <Month> <Year> AT <Hour>:<Min>:[Sec] + <Day of Week> <Month> <Day of Month> <Year> <Hour>:<Min>:<Sec> + ON <Day of Month> <Month> <Year> <Hour>:<Min>:<Sec> + <Month>/<Day> <Hour>:<Min> + @YYMMDDHHMMSS + + In the last listed format, observe in particular the two digit year + and lack of period to seperate the date from time. + +A. References +------------- + + [FTS-1] "A Basic FidoNet(r) Technical Standard Revision 16", Randy + Bush. September 1995. + + [FSC-46] "A Product Identifier for FidoNet Message Handlers", + Joaquim Homrighausen, August 1994. + + +B. Author contact data +---------------------- + + Colin Turner + Fidonet: 2:443/13 + E-mail: ct@piglets.com + WWW: http://www.piglets.com + + Joaquim Homrighausen + Fidonet: 2:201/330 + E-mail: joho@defsol.se + WWW: http://www.defsol.se + + +C. History +---------- + + Rev.1, 990426: First release. + +********************************************************************** ++Go Back + + diff --git a/html/ftsc/fsp-1011.html b/html/ftsc/fsp-1011.html index eaabefa8..ee5060d1 100755 --- a/html/ftsc/fsp-1011.html +++ b/html/ftsc/fsp-1011.html @@ -1,1756 +1,1757 @@ - - -
-********************************************************************** -FTSC FIDONET TECHNICAL STANDARDS COMMITTEE -********************************************************************** - -Publication: FSP-1011 -Revision: 3 -Title: Binkp - a protocol for transferring FidoNet mail over - reliable connections -Authors: Dima Maloff - Nick Soveiko - Maxim Masiutin -Revision Date: 31 July 2000 -Expiry Date: 31 July 2002 - ----------------------------------------------------------------------- - -Abstract --------- - - This specification defines binkp - a protocol to handle a session - between two Fidonet Technology systems over a reliable connection. - Assumption that the connection is reliable makes possible to - eliminate error-checking and unnecessary synchronization steps, - achieving both ease of implementation and major performance - improvement over connections with large unpredictable delays (e.g. - Internet). - -Status of this document ------------------------ - - This document is a Fidonet Standards Proposal (FSP). - - This document specifies an optional Fidonet standard protocol for - the Fidonet community, and requests discussion and suggestions for - improvements. - - This document is released to the public domain, and may be used, - copied or modified for any purpose whatever. - -Available formats ------------------ - - Binkp Specification is also available in HTML format at - http://www.ritlabs.com/binkp/ - -Table of contents ------------------ - - 1. Background - 1. Objectives - 2. Motivation for a New Protocol - 2. Definitions - 3. Protocol Overview - 4. Frame Format - 1. Notation - 2. Examples - 5. Protocol Commands and Their Arguments - 1. Classification - 2. File Name Issues - 3. Non-ASCII Characters in Command Argument symbol string - 4. Binkp Commands - 5. Example of Frame Exchange in a Simple binkp Session - 6. Protocol States - 1. Session Setup Stage - 1. Originating Side - 2. Answering Side - 2. File Transfer Stage - 3. Session Termination - 7. Recommended Protocol Extensions - 1. Non-Reliable Mode - 2. Multiple Batch Mode - 3. Multiple Passwords Mode - 4. Keyed Hashing Challenge-Response Authentication Mechanism - 1. Overview - 2. Sequence of Steps - 3. Generating and Transmitting Challenge Data - 4. Producing and Transmitting a Digest - 5. Indicating CRAM Capabilities - 6. Example of Frame Exchange During CRAM Authentication - 7. Notes on Hash Function Algorithms - 8. License - 9. Glossary - 10. References - 11. Acknowledgements - A. Author Contact Data - B. History - - --------------------------------------------------------------- - -1. Background -------------- - - 1.1 Objectives - -------------- - - It's been a long time since a new Fidonet protocol has been - developed, [EMSI] definitions being published last time in 1991, - not speaking about basic standards, [FTS-0001] and [FTS-0006]. - Fidonet is evolving everyday and new transport layers are being - introduced into practice. This led to a situation when in certain - Fidonet Regions a visible portion of traffic, especially long - distance traffic generating high toll, is being carried by means of - protocols that formally are not Fidonet standards. This creates an - ambiguity for such systems in indicating their additional - capabilities in Fidonet nodelist and in some instances, from being - listed in the nodelist at all. - - This document attempts to document the current practice for - communication between two Fidonet systems via a reliable channel, - provide technical reference for Fidonet software developers and - eventually improve Fidonet connectivity. - - 1.2 Motivation for a new protocol - --------------------------------- - - Existing Fidonet Technical Standards and Fidonet Reference Library - documents [FTS-0001], [FTS-0006], [EMSI] specify both session - handshake procedures and transmission capabilities that imply: - * non-reliable communication channel between mailers - * low round-trip times in the communication channel between - mailers. - - This was commonplace a few years ago, when Fidonet systems were not - using transport other than direct dial-up on a visible basis. - Things have changed today, when other communication media becomes - widely available on a day-to-day basis. This communication media - typically provides implementation of Physical, Data Link, Network - and Transport layers of the ISO/OSI Reference Model and facilitates - relieving Session layer of inappropriate functions, such as error - control, flow control, call management and data transparency - [Halsall95]. Examples of such communication media are TCP/IP socket - connection and HDLC family protocol connection. - - New communication media can be generally characterized by the - reliable transmission service offered by it to the Session layer - protocol. Reliable transmission implies that: - * Data link and/or Transport layer protocols are responsible for - error control and delivery of frames in correct sequence - * Session layer and higher layer protocols are operating on top - of connection-oriented mode - * Quality of Service provisions (if any) result in unspecified - delays between transmitter and receiver - * connections are rarely aborted. - - Combination of these factors imposed the following requirements for - the new Fidonet protocol: - * error control can be eliminated throughout the session layer - protocol for both handshake and default file transfer method - * session setup procedure should minimize number of - synchronization points for fast handshake - * protocol should be insensitive to delays and robust with - respect to timeouts - * application flow control should be moved to file level; - individual data frames do not need to be error checked nor - acknowledged - * protocol should be independent from both higher and lower layer - protocols - * protocol should be reasonably easy to implement and allow - future extensions. - -2. Definitions --------------- - - The key words "MUST", "MUST NOT", "SHOULD", "SHOULD NOT" and "MAY" - in this document are to be interpreted as specified in [FTA-0006]. - However, for readability, these words may sometimes not appear in - all uppercase letters in this specification. Although it should not - impact minimal realization of binkp protocol, it must be noted that - Protocol Extensions may override, update or obsolete requirement - levels indicated by the above keywords in chapters from 3 to 6 - inclusive. - - Calling party in this document is referred to as the Originating - side and called party is referred to as the Answering side. - Originating side here is the party that initiates the connection - between two systems. - - Mailer in this document is a software that implements the protocol. - - Words "frame", "packet", and "block" when used in this document - refer to binkp's Frames, unless explicitly stated otherwise. - - Other definitions that are not local to this document can be found - in the Glossary. - - This document is organized as following: - - Frames section defines binkp's frames. Binkp/1.0 commands and their - arguments section provides detailed description of all defined - protocol commands together with recommendations for their usage. - Actual binkp implementation may match it's own diagrams provided - that such implementation remains fully compatible with current - specification. Protocol states section gives rigorous state - diagrams for the minimum realization of binkp. All mailers MUST - support this minimum realization. Recommended Protocol Extensions - section documents most important extensions to the basic protocol - that are in use as of the time of this writing. The License, - Glossary and References sections can be found at the end of this - document. - -3. Protocol Overview --------------------- - - Binkp is a Fidonet session layer protocol intended for use over - data transparent bi-directional channels with reliable - transmission. There are no other requirements for the service - provided by the underlying protocol suite. Presentation and - application layer protocols are not discussed here. Whenever TCP/IP - socket is used, IANA registered port number for binkp 24554 SHOULD - be used (as registered with the Internet Assigned Numbers - Authority). - - Functionality of the minimum protocol realization makes provision - for: - * password protected sessions - * 4D/5D addressing for Fidonet and technology compatible networks - * exchange of Type 2 [FTS-0001], Type 2.2 [FSC-0045], Type 2+ - [FSC-0039] and [FSC-0048], Type 3 [FSC-0081] packets and - [FTS-0006] arcmail in both directions, including poll and mail - pickup, as well as transfer of any binary or ASCII files - * handling WaZOO [FTS-0006] file requests - * ensuring integrity of transmitted mail and files - * simultaneous bi-directional transmission - * maximizing performance over packet switched data networks - - Binkp uses only one synchronization point during session startup, - that is password exchange. This feature facilitates fast session - startup for high latency links. Sliding window flow control is - incorporated on the file level. This ensures that a batch of small - files is transmitted with the same efficiency as a one large file. - -4. Frame Format ---------------- - - Binkp is defined in terms of sending and receiving specifically - formatted data blocks. We call them frames. - - Command frames carry protocol commands and may change protocol - state. Data frames are usually appended to files being received by - mailers or may be discarded, depending on the protocol state. - - The particular way of mapping an octet stream or a datagram stream - of the transport layer into binkp frames may depend on the - underlying protocol suite. At this time, we define such mapping for - TCP/IP socket connection which can also be used for similar - transports as well. - - The socket stream is being split into binkp frames in the following - manner: - - 7 6543210 76543210 - +-+-------+--------+--- ................ ---+ - |T| SIZE | DATA | - +-+-------+--------+--- ................ ---+ - |<- 2 octets ->|<- up to 32767 octets ->| - (frame header) (frame data) - - If T bit is 0, this is a data frame. - - If T bit is 1, this is a command frame. - - 15 bits marked SIZE carry the size of the DATA part of the frame in - octets (with the bit marked 0 being the least significant). That - is, the actual length of a binkp frame is SIZE+2. - - The size of the DATA part may vary between 1 and 32767 octets. A - correct realization should never set SIZE to 0. Upon receiving of a - packet header with the SIZE field set to 0, the total length of the - incoming packet must be treated as 2, this packet must be dropped, - and the event should be logged. - - The first octet of a command frame data is the command ID. The ID - must be between 0 and 127 inclusive. - - Other octets carry command arguments. Command arguments are an - arbitrary symbol string that may be null-terminated. Treating of a - null character in the middle of a command depends on realization - (with the options being "treat as whitespace" or "treat as - end-of-line"). The terminating null character (if any) is either - stripped or used by mailers internally as an end-of-line marker. - - 4.1 Notation - ------------ - - As stated before, command ID is a small number between 0 and 127. - Every binkp command defined in this document has a symbolic name in - the form M_XXX. Symbolic names are defined in binkp commands - section. We will use symbolic names and not numeric command IDs to - refer to commands everywhere in this document. - - The following notation is used to describe binkp's command frames: - - M_XXX "Data string" - - The actual numeric command ID for the command with the symbolic - name of M_XXX should be written into the first octet of the DATA - area of a binkp frame. "Data string" is a string to be copied into - DATA area starting at second octet. SIZE should be set to the total - length of "Data string" plus one for the octet to store the command - number. T bit should be set to 1. - - 4.2 Examples - ------------ - - M_OK "": - - 7 6543210 76543210 76543210 - +-+-------+--------+--------+ - |1| 0 1| 4| - +-+-------+--------+--------+ - | | +----- command ID (no arguments) - | +-------- frame length - +- command frame flag - - M_NUL "TEST": - - +-+-------+--------+--------+-------+--------+--------+--------+ - |1| 0 5| 0| T E S T | - +-+-------+--------+--------+-------+--------+--------+--------+ - -5. Protocol Commands and Their Arguments ----------------------------------------- - - 5.1 Classification - ------------------ - - Protocol commands may be classified the following way: - - * By argument type: - M_SKIP. Mailer MUST parse these commands and it is not - recommended to log arguments of these commands as they - are. Mailer-parseable commands can be further subdivided - by containment of a file name in the argument. - commands contain a file name in their arguments. - MAY ignore and/or log arguments of these commands. - * By protocol stage: - M_PWD (must not be sent by the Answering side), M_OK (must - not be sent by the Originating side). These commands MUST - never be sent during the file transfer stage. - These commands MUST NOT be sent session setup stage. - any time during the session. - - 5.2 File Name Issues - -------------------- - - In Mailer-parseable commands that contain a file name, the file - name MUST NOT include a whitespace (ASCII value 20 hex). The file - name SHOULD NOT include symbols other than alphanumeric - (A-Z,a-z,0-9) and safe characters as defined below in BNF. All - other symbols are to be considered unsafe and SHOULD be escaped in - the form of two hexadecimal digits preceded by a backslash (e.g. a - whitespace must be transmitted as "\20"). - - filename = *pchar - pchar = unreserved | escape - unreserved = ALPHA | DIGIT | safe - safe = "@" | "&" | "=" | "+" | "%" | "$" | "-" | "_" | - "." | "!" | "(" | ")" | "#" | "|" - escape = "\" HEX HEX - - National characters should not be escaped, but rather transmitted - using [UTF8] encoding (see section discussing non-ASCII characters - below). - - The best current practice is that Mailer does not alter a file name - without sysop's intention. If the mailer does provide such a - mechanism, it MUST BE optional and it SHOULD BE off by default. - - The protocol does not impose limitations on the file name length - other than those arising from the finite length of the binkp frame - itself. - - 5.3 Non-ASCII Characters in Command Argument Symbol String - ---------------------------------------------------------- - - Generally, mailer SHOULD use only characters from the ASCII range - [32...126] in the symbol strings for command arguments. In case - when there is a necessity to use non-ASCII characters, mailer - SHOULD use the [UTF8] format of the multioctet Universal Character - Set [ISO10646]. Mailer SHOULD use non-ASCII characters only if the - other side have indicated it's support by transmitting M_NUL "OPT - UTF8" frame during the session setup stage. Otherwise, mailer - SHOULD assume that the remote does not support non-ASCII characters - and SHOULD NOT use them in command arguments. - - 5.4 Binkp Commands - ------------------ - - Format: symbolic_command_name command_ID - - M_NUL 0 - - Command arguments contain human-readable information, such - as nodelist info, sysop name, etc. This frame can also be - used by some Mailers to exchange protocol options. Mailer - MAY ignore and/or log arguments of M_NUL. - - e.g. "ZYZ Dima Maloff" - - The following format of M_NUL argument is recommended for - compatibility purposes: - - * M_NUL "SYS system_name" - * M_NUL "ZYZ sysop's_name" - * M_NUL "LOC system_location" - * M_NUL "NDL system_capabilities" - * M_NUL "TIME remote_date_time" - remote_date_time format is described in [RFC822]. - Example of valid remote_date_time is - Sun, 06 Nov 1994 08:49:37 GMT - * M_NUL "VER mailer_version protocol_version" - note: binkp/1.0 mailers should send "binkp/1.0" string - for protocol_version. - * M_NUL "TRF netmail_bytes arcmail_bytes" - traffic prognosis (in bytes) for the netmail - (netmail_bytes) and arcmail and files (arcmail_bytes), - both are decimal ASCII strings - * M_NUL "OPT protocol options" - here protocol options is a space separated list of - binkp options and extensions supported by the mailer. - * M_NUL "PHN string" - phone number, ip address or other network layer - addressing ID - * M_NUL "OPM string" - string is a message for the system operator that may - require manual attention - - M_ADR 1 - - List of 4D/5D addresses (space separated). - - e.g. "2:5047/13@fidonet 2:5047/0@fidonet" - - M_PWD 2 - - Session password, case sensitive. After successful password - authentication of the remote, originating side proceeds to - the file transfer stage. This command MUST never be sent by - the Answering side. - - e.g. "pAsSwOrD" - - M_OK 4 - - Acknowledgement for a correct password. Upon receiving of - this command, originating side goes to file transfer stage. - This command MUST never be sent by the Originating side. - Arguments may be ignored. - - e.g. "" - - M_FILE 3 - - Space separated list of parameters for the next file to be - transmitted: filename; size in bytes; unixtime; file - transmission offset. - - In protocol extensions, negative values for the offset may - have special meaning (see non-reliable mode for an example - of such usage), basic implementation may treat negative - values as an error. - - Size, time and offset parameters are decimal. Until the - next M_FILE command is received, all data frames must carry - data from this file in consecutive manner. There is no end - of file identifier as the file size is known beforehand. If - there are "extra" data frames, Mailer may append this data - to the file. By default, transmission of each file should - be started from offset 0. M_GET command sent by the remote - MUST force the mailer to start transmission from the - specified offset. - - e.g. "config.sys 125 2476327846 0" - - or, answering to M_GET with offset 100: - - "config.sys 125 2476327846 100" - - M_EOB 5 - - End-of-Batch. M_EOB command must be transmitted after all - the files have been sent. - - Arguments of the command may be ignored. - - e.g. "" - - M_GOT 6 - - File acknowledgement, that must be transmitted upon - receiving of the last data frame for current file. - Arguments for this command shall be the same as for the - M_FILE sent by remote, excluding the last argument, file - offset, which is not transmitted back to the system which - have sent M_FILE. M_GOT can also be transmitted while - receiving a file, in which case transmitting party may - interpret it as a destructive skip. - - e.g. "config.sys 125 2476327846" - - M_ERR 7 - - This command indicates a fatal error. A party sending M_ERR - should abort the session. Argument should contain an error - explanation and may be logged. Mailer sends M_ERR in - response for an incorrect password. Mailer NUST NOT abort a - session without sending a M_ERR or a M_BSY frame (though - state machine tables, for simplicity, may not include - "transmit M_ERR" instructions). - - e.g. "Incorrect password" - - M_BSY 8 - - M_BSY command is transmitted when the system encounters a - non-fatal error typically due to temporary lack of - resources to proceed with the session. The argument should - contain an explanation of the situation and may be logged - by remote. M_BSY may be sent at any time during the session - (including session setup stage), not only the stages - explicitly indicated in the finite state machine. The side, - which have sent M_BSY, is in legal position to abort the - session. Mailer MUST be able to accept M_BSY at any time. - Though state machine tables, for simplicity, may not - include handling of M_BSY command, Mailer MUST NOT be - confused by reception of M_BSY command. - - e.g. "Too many servers are running already" - - If a mailer wishes to suggest the remote a time interval - before the next session attempt, it may choose to transmit - it in the following format: - - M_BSY "RETRY NNNN: explanation" - - where NNNN is interval in seconds (decimal string) and - explanation is an arbitrary string containing explanation - of the matter (optional). - - M_GET 9 - - M_GET command is a request to (re)send files. Arguments of - the command are the same as for the M_FILE command and - refer to a file which we'd like to receive from the remote. - - Mailer may send M_GET when it doesn't like transmission - file offset (e.g. file was partially received during one of - the previous sessions). - - e.g. "config.sys 125 2476327846 100" - - Mailer reacts to this command as follows: according to the - first three arguments (filename/size/unixtime), it - determines whether the M_GET argument is the current file - being transmitted to the remote (or a file that have been - transmitted, but we are still waiting an M_GOT ack for it). - If this is the case, it should - - * discard transmission in progress as soon as possible - * perform seek() to the specified offset - * proceed with transmission of the file requested - starting with an appropriate M_FILE. - - For the example above, corresponding M_FILE will have the - following arguments: "config.sys 125 2476327846 100" - - When the mailer is finished with transmitting data of the - requested file it may proceed with transmission of other - files it has for the remote. - - M_SKIP 10 - - Non destructive skip. Parameter is a space separated list - of filename, size and unixtime. This command indicates that - the remote should postpone sending the file until next - session. - - e.g. "config.sys 125 2476327846" - - 5.5 Example of Frame Exchange in a Simple Binkp Session - ------------------------------------------------------- - - +-----------------------------------------------------------------+ - | Originating side | Answering side | - |---------------------------------+-------------------------------| - | M_NUL "SYS ..." | M_NUL "SYS ..." | - | M_NUL "ZYZ ..." | M_NUL "ZYZ ..." | - | M_NUL "LOC ..." | M_NUL "LOC ..." | - | M_NUL "VER ..." | M_NUL "VER ..." | - | M_ADR "2:2/2.2@fidonet" | M_ADR "3:3/3.3@fidonet" | - | M_PWD "password" | (waiting for a password from | - | | remote) | - |---------------------------------+-------------------------------| - | (waiting for password | M_OK "" (or M_ERR "Bad | - | acknowledgement) | password") | - |---------------------------------+-------------------------------| - | (got M_OK) | M_FILE "file2 200 42342434 0" | - |---------------------------------+-------------------------------| - | M_FILE "file1 100 423424244 0" | data | - |---------------------------------+-------------------------------| - | data | data | - |---------------------------------+-------------------------------| - | data | data | - |---------------------------------+-------------------------------| - | M_EOB | (got file1, acknowledging it) | - |---------------------------------+-------------------------------| - | (got file2, acknowledging it) | M_GOT "file1 100 423424244" | - |---------------------------------+-------------------------------| - | M_GOT "file2 200 42342434" | data | - |---------------------------------+-------------------------------| - | | M_EOB | - +-----------------------------------------------------------------+ - -6. Protocol States ------------------- - - The protocol has two major stages: session setup (different for - originating side and answering side) and file transfer (where state - machined for both sides are the same). Methods for initiating - connection as well as numerical values for particular timeouts are - dependent on the underlying layer's protocol suite and are not - considered here. Mailer MAY allow configuration of timeouts in - reasonably wide range to cover all supported transport protocols. - - The Finite State Machine notation is used throughout this section - as defined by [FTS-0001]. - - 6.1 Session Setup Stage - ----------------------- - - Originating side should initiate a binkp session according to Table - 1. Answering side should be able to act according to Table 2. Any - optional extensions of the handshake procedure MUST NOT confuse the - other side, which may choose at it's discretion to follow this - minimal implementation. Upon successful handshake, both sides - follow Table 3 (file transfer stage). That's why terms Answering - side and Originating side were chosen for this specification - instead of Client and Server - both sides play the same roles, and - their state machines differ in session setup stage only. - - Session setup stage has the following roles - - * Authentication (REQUIRED). Answering side, upon reception of a - password (common secret word) from Originating side, decides - whether the password really matches the list of presented - addresses, and either acknowledges it by sending M_OK frame or - rejects by sending M_ERR frame. This mechanism is called Basic - Authentication Scheme and MUST be supported by all Mailers. - Basic Authentication Scheme has the following limitations: - * If Originating side presented multiple addresses, the - password for all of the addresses must be the same (may be - solved by Multiple passwords extension). - * Cleartext reusable passwords are passed over a network - (may be solved by CRAM extension). - * Verification is made on Answering side only, thus - Originating side has no way to verify Answering side (may - be solved by dual CRAM or public-key cryptography, not - discussed in this document). - * Indicating protocol options (OPTIONAL). Sides may exchange - specially formatted M_NUL messages to indicate supported - extensions. Sides MAY use another technique to indicate - extensions. - - 6.1.1 Originating Side - ---------------------- - - Originating side sends M_ADR and M_PWD frames, waits for successful - authentication acknowledgement from the Answering side (M_OK frame) - and goes to file transfer stage. Originating side MUST NOT wait - before sending M_ADR frame, i.e. this frame should be send just - after setting up a connection on underlying layer. Originating side - MUST NOT wait before sending M_PWD except after reception of M_ADR - frame. The term wait in this paragraph means do not send anything - while expecting data from remote. - - Table 1: Session setup, originating side - +-----------------------------------------------------------------+ - | # | Name | Predicate(s) | Action(s) | Next | - |----+------------+------------------+---------------------+------| - | S0 | ConnInit | | Attempt to | S1 | - | | | | establish | | - | | | | connection | | - |----+------------+------------------+---------------------+------| - | S1 | WaitConn | Connection | Send M_NUL frames | S2 | - | | | established | with system info | | - | | | | (at least one M_NUL | | - | | | | "SYS ..." frame | | - | | | | should be sent | | - | | | | before M_ADR) | | - | | | | Send M_ADR frame | | - | | | | with system | | - | | | | addresses | | - | | | | Set Timer | | - | | | | See if we have | | - | | | | password for the | | - | | | | remote | | - | | |------------------+---------------------+------| - | | | Connection | Report no | exit | - | | | refused | connection | | - |----+------------+------------------+---------------------+------| - | S2 | SendPasswd | Yes, we have a | Send M_PWD | S3 | - | | | password | "password" frame | | - | | | | Reset Timer | | - | | |------------------+---------------------+------| - | | | No, there's no | Send M_PWD "-" | S3 | - | | | password | frame | | - |----+------------+------------------+---------------------+------| - | S3 | WaitAddr | M_ADR frame | See if answering | S4 | - | | | received | side presented the | | - | | | | address we've | | - | | | | called | | - | | |------------------+---------------------+------| - | | | M_BSY frame | Report remote is | exit | - | | | received | busy | | - | | |------------------+---------------------+------| - | | | M_ERR frame | Report error | exit | - | | | received | | | - | | |------------------+---------------------+------| - | | | M_NUL frame | Ignore (optionally, | S3 | - | | | received | log frame argument) | | - | | |------------------+---------------------+------| - | | | Other known | Report unexpected | exit | - | | | frame received | frame | | - | | |------------------+---------------------+------| - | | | Unknown frame | Ignore | S3 | - | | | received | | | - | | |------------------+---------------------+------| - | | | Nothing happens | Wait | S3 | - | | |------------------+---------------------+------| - | | | Timer Expired | Report timeout | exit | - |----+------------+------------------+---------------------+------| - | S4 | AuthRemote | Yes, the address | See if we've sent a | S5 | - | | | was presented | password for this | | - | | | | address | | - | | |------------------+---------------------+------| - | | | No, the address | Report we called | exit | - | | | was not | the wrong system | | - | | | presented | | | - |----+------------+------------------+---------------------+------| - | S5 | IfSecure | Yes, we've sent | Wait for M_OK frame | S6 | - | | | a password | | | - | | |------------------+---------------------+------| - | | | No, there was no | Report non-secure | T0 | - | | | password | session | | - |----+------------+------------------+---------------------+------| - | S6 | WaitOk | M_OK frame | report secure | T0 | - | | | received | session | | - | | |------------------+---------------------+------| - | | | M_BSY frame | Report remote is | exit | - | | | received | busy (Answering | | - | | | | size MAY report | | - | | | | busy after | | - | | | | reception of | | - | | | | caller's address) | | - | | |------------------+---------------------+------| - | | | M_ERR frame | Report error | exit | - | | | received | | | - | | |------------------+---------------------+------| - | | | M_NUL frame | Ignore (optionally, | S6 | - | | | received | log arguments) | | - | | |------------------+---------------------+------| - | | | Other known | Report unexpected | exit | - | | | frame received | frame | | - | | |------------------+---------------------+------| - | | | Unknown frame | Ignore | S6 | - | | | received | | | - | | |------------------+---------------------+------| - | | | Nothing happens | Wait | S6 | - | | |------------------+---------------------+------| - | | | Timer Expired | Report timeout | exit | - +-----------------------------------------------------------------+ - - 6.1.2 Answering Side - -------------------- - - Originating side sends M_ADR and waits for M_ADR and M_PWD frames - from remote. Upon receptions of these frames, it decides whether - the password really matches the list of presented addresses, and - either acknowledges it by sending M_OK frame (and goes to file - transfer stage) or rejects by sending M_ERR frame (and - disconnects). The term wait in this paragraph means do not send - anything while expecting data from remote. - - Table 2: Session setup, answering side - +-----------------------------------------------------------------+ - | # | Name | Predicate(s) | Action(s) | Next | - |----+----------+---------------------+--------------------+------| - | R0 | WaitConn | Incoming connection | Send M_NUL frames | R1 | - | | | established | with system info | | - | | | | (at least one | | - | | | | M_NUL "SYS ..." | | - | | | | frame should be | | - | | | | sent before M_ADR) | | - | | | | Send M_ADR frame | | - | | | | with system | | - | | | | addresses | | - | | | | Set Timer | | - | | |---------------------+--------------------+------| - | | | Nothing happens | Wait | R0 | - |----+----------+---------------------+--------------------+------| - | R1 | WaitAddr | M_ADR frame | See if we have a | R2 | - | | | received | password for any | | - | | | | of the remote | | - | | | | addresses | | - | | |---------------------+--------------------+------| - | | | M_ERR frame | Report error | exit | - | | | received | | | - | | |---------------------+--------------------+------| - | | | M_NUL frame | Log | R1 | - | | | received | | | - | | |---------------------+--------------------+------| - | | | Other known frame | Report unexpected | exit | - | | | received | frame | | - | | |---------------------+--------------------+------| - | | | Unknown frame | Ignore | R1 | - | | | received | | | - | | |---------------------+--------------------+------| - | | | Nothing happens | Wait | R1 | - | | |---------------------+--------------------+------| - | | | Timer expired | Report timeout | exit | - |----+----------+---------------------+--------------------+------| - | R2 | IsPasswd | Yes, we have a | Set Timer | R3 | - | | | password | | | - | | |---------------------+--------------------+------| - | | | Yes, but we have | Send M_ERR frame | exit | - | | | several different | Report | | - | | | passwords for | inconsistent | | - | | | different addresses | password settings | | - | | | of the remote | | | - | | |---------------------+--------------------+------| - | | | No, there's no | Report non-secure | T0 | - | | | password | session | | - |----+----------+---------------------+--------------------+------| - | R3 | WaitPwd | M_PWD frame | See if the | R4 | - | | | received | password matches | | - | | |---------------------+--------------------+------| - | | | M_ERR frame | Report error | exit | - | | | received | | | - | | |---------------------+--------------------+------| - | | | M_NUL frame | Log | R4 | - | | | received | | | - | | |---------------------+--------------------+------| - | | | Other known frame | Report unexpected | exit | - | | | received | frame | | - | | |---------------------+--------------------+------| - | | | Unknown frame | Ignore | R4 | - | | | received | | | - | | |---------------------+--------------------+------| - | | | Nothing happens | Wait | R3 | - | | |---------------------+--------------------+------| - | | | Timer Expired | Report timeout | exit | - |----+----------+---------------------+--------------------+------| - | R4 | PwdAck | Yes, the password | Send M_OK frame | T0 | - | | | matches | Report secure | | - | | | | session | | - | | |---------------------+--------------------+------| - | | | No, password does | Report password | exit | - | | | not match | error | | - +-----------------------------------------------------------------+ - - 6.2 File Transfer Stage - ----------------------- - - File transfer stage is based on two major routines. We call them - Receive Routine and Transmit Routine. These routines perform some - actions depending on their state variables. State variables are - RxState for Receive Routine and TxState for Transmit Routine. - - RxState := { RxWaitF | RxAccF | RxReceD | RxWriteD | RxEOB | RxDone - } - - TxState := { TxGNF | TxTryR | TxReadS | TxWLA | TxDone } - - Table 3: File Transfer - +-----------------------------------------------------------------+ - | # | Name | Predicate(s) | Action(s) | Next | - |----+--------------+---------------------+----------------+------| - | T0 | InitTransfer | none | Set Timer | T1 | - | | | | Set RxState to | | - | | | | RxWaitF | | - | | | | Set TxState to | | - | | | | TxGNF | | - |----+--------------+---------------------+----------------+------| - | T1 | Switch | RxState is RxDone | Report session | exit | - | | | and TxState is | complete | | - | | | TxDone | | | - | | |---------------------+----------------+------| - | | | Data Available in | call Receive | T2 | - | | | Input Buffer | routine | | - | | |---------------------+----------------+------| - | | | Free space exists | call Transmit | T3 | - | | | in output buffer | routine | | - | | |---------------------+----------------+------| - | | | Nothing happens | Wait | T1 | - | | |---------------------+----------------+------| - | | | Timer Expired | Report Timeout | exit | - |----+--------------+---------------------+----------------+------| - | T2 | Receive | Receive routine | Set Timer | T1 | - | | | returned OK | | | - | | |---------------------+----------------+------| - | | | Receive routine | Close all | exit | - | | | returned Failure | opened files | | - | | |---------------------+----------------+------| - | | | Receive routine | Call Receive | T2 | - | | | returned Continue | routine again | | - |----+--------------+---------------------+----------------+------| - | T3 | Transmit | Transmit routine | Set Timer | T1 | - | | | returned OK | | | - | | |---------------------+----------------+------| - | | | Transmit routine | Close all | exit | - | | | returned Failure | opened files | | - | | |---------------------+----------------+------| - | | | Transmit routine | Call Transmit | T3 | - | | | returned Continue | routine again | | - +-----------------------------------------------------------------+ - - Tables 4-6 are not actually state machines, but routines called - during file transfer stage - - We define here a FIFO queue called "TheQueue", which is used to - pass incoming M_GET / M_GOT / M_SKIP frames from Receive Routine to - Transmit Routine. Receive routine itself does not react to these - frames. - - Table 4: Receive Routine - +-----------------------------------------------------------------+ - |RxState |Predicate(s) |Condition(s) |Actions(s)|Next |Return | - |--------+-------------+-------------+----------+--------+--------| - |RxWaitF |Get a frame |Haven't got a|none |RxWaitF |OK | - | |from Input |complete | | | | - | |Buffer |frame yet | | | | - | | |-------------+----------+--------+--------| - | | |Got Data |ignore |RxWaitF |OK | - | | |frame | | | | - | | |-------------+----------+--------+--------| - | | |Got M_ERR |Report |RxDone |Failure | - | | | |Error | | | - | | |-------------+----------+--------+--------| - | | |Got M_GET / |Add frame |RxWaitF |OK | - | | |M_GOT / |to The | | | - | | |M_SKIP |Queue | | | - | | |-------------+----------+--------+--------| - | | |Got M_NUL |Log |RxWaitF |OK | - | | |-------------+----------+--------+--------| - | | |Got M_EOB |Report End|RxEOB |OK | - | | | |of Batch | | | - | | |-------------+----------+--------+--------| - | | |Got M_FILE |none |RxAccF |continue| - | | |-------------+----------+--------+--------| - | | |Got other |Report |RxDone |Failure | - | | |known frame |unexpected| | | - | | | |frame | | | - | | |-------------+----------+--------+--------| - | | |Got unknown |ignore |RxWaitF |OK | - | | |frame | | | | - |--------+-------------+-------------+----------+--------+--------| - |RxAccF |Decide how to|Accept from |Report |RxReceD |OK | - | |accept |beginning |receiving | | | - | |Incoming File| |file | | | - | | |-------------+----------+--------+--------| - | | |Accept from |Send M_GET|RxReceD |OK | - | | |offset (we do|Report | | | - | | |already have |receiving | | | - | | |a part of |file, | | | - | | |file) |requested | | | - | | | |offest | | | - | | |-------------+----------+--------+--------| - | | |Accept later |Send |RxWaitF |OK | - | | |(or failed to|M_SKIP | | | - | | |create file) |Report we | | | - | | | |will | | | - | | | |accept | | | - | | | |file | | | - | | | |later, not| | | - | | | |in current| | | - | | | |session | | | - | | |-------------+----------+--------+--------| - | | |Refuse |Send M_GOT|RxWaitF |OK | - | | |(delete on |Report we | | | - | | |remote) |do not | | | - | | | |accept | | | - | | | |file | | | - |--------+-------------+-------------+----------+--------+--------| - |RxReceD |Get a frame |Didn't got a |none |RxReceD |OK | - | |from Input |complete | | | | - | |Buffer |frame yet | | | | - | | |-------------+----------+--------+--------| - | | |Got Data |none |RxWriteD|continue| - | | |frame | | | | - | | |-------------+----------+--------+--------| - | | |Got M_ERR |Report |RxDone |Failure | - | | | |Error | | | - | | |-------------+----------+--------+--------| - | | |Got M_GET / |Add frame |RxReceD |OK | - | | |M_GOT / |to The | | | - | | |M_SKIP |Queue | | | - | | |-------------+----------+--------+--------| - | | |Got M_NUL |Log |RxReceD |OK | - | | |-------------+----------+--------+--------| - | | |Got M_FILE |Report |RxAccF |Continue| - | | | |partially | | | - | | | |received | | | - | | | |file | | | - | | |-------------+----------+--------+--------| - | | |Got other |Report |RxDone |Failure | - | | |known frame |unexpected| | | - | | | |frame | | | - | | |-------------+----------+--------+--------| - | | |Got unknown |ignore |RxReceD |OK | - | | |frame | | | | - |--------+-------------+-------------+----------+--------+--------| - |RxWriteD|Write data to|Write Failed |Report |RxDone |Failure | - | |file | |error | | | - | | |-------------+----------+--------+--------| - | | |File Pos > |Report |RxDone |Failure | - | | |Reported |write | | | - | | | |beyond EOF| | | - | | |-------------+----------+--------+--------| - | | |File Pos = |Close File|RxWaitF |OK | - | | |Reported |Send M_GOT| | | - | | | |Report | | | - | | | |File | | | - | | | |Received | | | - | | |-------------+----------+--------+--------| - | | |File Pos < |none |RxReceD |OK | - | | |Reported | | | | - |--------+-------------+-------------+----------+--------+--------| - |RxEOB |Get a frame |Didn't get a |none |RxEOB |OK | - | |from Input |complete | | | | - | |Buffer |frame yet or | | | | - | | |TxState is | | | | - | | |not TxDone | | | | - | | |-------------+----------+--------+--------| - | | |Got M_ERR |Report |RxDone |Failure | - | | | |Error | | | - | | |-------------+----------+--------+--------| - | | |Got M_GET / |Add frame |RxEOB |OK | - | | |M_GOT / |to The | | | - | | |M_SKIP |Queue | | | - | | |-------------+----------+--------+--------| - | | |Got M_NUL |Log |RxEOB |OK | - | | |-------------+----------+--------+--------| - | | |Got other |Report |RxDone |Failure | - | | |known frame |unexpected| | | - | | |or data frame|frame | | | - | | |-------------+----------+--------+--------| - | | |Got unknown |ignore |RxEOB |OK | - | | |frame | | | | - |--------+-------------+-------------+----------+--------+--------| - |RxDone |none |none |none |RxDone |OK | - +-----------------------------------------------------------------+ - - We define the list called "PendingFiles". After we put the last - byte of file into output buffer, we cannot yet consider the file as - being successfully transmitted, thus we have to add the file to - this list and then look for corresponding incoming M_GET / M_GOT / - M_SKIP frames to remove the file from the list and decide whether - the file was indeed received by remote or remote will accept this - file later, or something else. After we have sent M_EOB frame, we - must wait until PendingFiles list gets empty before disconnecting. - - If the connection accidentally breaks, all the files left in - PendingFiles are considered unsent and will be re-transmitted in - the next session. If the connection breaks when the remote did - actually receive the file (but the corresponded confirmation frame - (M_GOT) didn't came back to us) and we are resending this file - again in the next session, remote may get two copies of the same - file (file dupe). Binkp allows to reduce or totally suppress such - dupes (at a cost of performance, of course), see Non-Reliable mode - and "No Dupes" protocol extension (to be found in a separate - document at a later date). - - Table 5: Transmit Routine - +-----------------------------------------------------------------+ - |TxState|Predicate(s)|Condition(s) |Actions(s) |Next |Return | - |-------+------------+--------------+------------+-------+--------| - |TxGNF |Open next |File opened OK|Send M_FILE |TxTryR |continue| - | |file from | |Report | | | - | |outgoing | |sending file| | | - | |queue |--------------+------------+-------+--------| - | | |Failed to open|Report |TxDone |Failure | - | | |file |failure | | | - | | |--------------+------------+-------+--------| - | | |No more files |Send M_EOB |TxWLA |continue| - | | | |Report end | | | - | | | |of batch | | | - |-------+------------+--------------+------------+-------+--------| - |TxTryR |Check |TheQueue is |none |TxReadS|continue| - | |TheQueue |empty | | | | - | | |--------------+--------------------+--------| - | | |TheQueue is |call ProcessTheQueue|continue| - | | |not empty | | | - |-------+------------+--------------+--------------------+--------| - |TxReadS|Read data |Read failed |Report Error|TxDone |Failure | - | |block from |--------------+------------+-------+--------| - | |file |Read OK, |Send data |TxGNF |OK | - | | |Reached EOF |block frame | | | - | | | |Close | | | - | | | |current file| | | - | | | |Add current | | | - | | | |file to | | | - | | | |PendingFiles| | | - | | |--------------+------------+-------+--------| - | | |Read OK, not |Send data |TxTryR |OK | - | | |reached EOF |block frame | | | - |-------+------------+--------------+------------+-------+--------| - |TxWLA |Check |TheQueue is |none |TxDone |OK | - | |TheQueue |empty and | | | | - | | |RxState >= | | | | - | | |RxEOB | | | | - | | |--------------+------------+-------+--------| - | | |TheQueue is |none |TxWLA |OK | - | | |empty and | | | | - | | |RxState < | | | | - | | |RxEOB | | | | - | | |--------------+--------------------+--------| - | | |TheQueue is |call ProcessTheQueue|continue| - | | |not empty | | | - |-------+------------+--------------+--------------------+--------| - |TxDone |none |none |none |TxDone |OK | - +-----------------------------------------------------------------+ - - We define a list called KnownFiles. This list contains files that - can be requested by the remote using M_GET command. This list shall - at least contain all the files that are part of the PendingFiles - list. - - Table 6: ProcessTheQueue routine - +-----------------------------------------------------------------+ - | Predicate(s) | Condition(s) | Actions(s) | - |--------------------+--------------------+-----------------------| - | M_GET received | requested file is | Report unknown file | - | | not in the | | - | | KnownFiles list | | - |--------------------+--------------------+-----------------------| - | M_GET received for | Requested pos is | Close and finalize | - | a known file | FileSize | file. | - | | | Report that remote | - | | | refused file being | - | | | transmitted. | - | | | Set TxState to | - | | | TxGetNextFile. | - | |--------------------+-----------------------| - | | Requested pos is | Set file pointer to | - | | less than FileSize | requested pos. | - | | | Report that remote | - | | | requested offset. | - | | | Set TxState to | - | | | TxReadSend. | - | |--------------------+-----------------------| - | | Requested pos is | Ignore frame | - | | greater than | | - | | FileSize | | - |--------------------+--------------------+-----------------------| - | M_GOT file that is | none | Close and finalize | - | currently | | file | - | transmitting | | Report Remote refused | - | | | file being | - | | | transmitted | - | | | Set TxState to TxGNF | - |--------------------+--------------------+-----------------------| - | M_GOT file that is | File is in | Finalize file | - | not currently | PendingFiles list | Report file has been | - | transmitting | | sent | - | | | Remove file from the | - | | | PendingFiles list | - | |--------------------+-----------------------| - | | File is not in | Ignore frame | - | | PendingFiles | | - |--------------------+--------------------+-----------------------| - | M_SKIP file that | none | Close file (do not | - | is currently | | finalize, we will | - | transmitting | | send it later, not in | - | | | current session) | - | | | Report remote will | - | | | accept this file | - | | | later | - | | | Set TxState to TxGNF | - |--------------------+--------------------+-----------------------| - | M_SKIP file that | none | Report remote will | - | is not currently | | accept this file | - | transmitting | | later | - | | | Remove file from | - | | | PendingPiles, if | - | | | exists there | - +-----------------------------------------------------------------+ - - 6.3 Session Termination - ----------------------- - - A session may be terminated in any of the following cases: - - should be deemed aborted due to a fatal error. - should be deemed aborted due to non-fatal error typically - because of temporary lack of resources to proceed with the - session. - * all the files have been sent - * we have received M_EOB from the remote side (there are no - more files for us), - * we have received acknowledgements for all the files sent, - * we have received all the files re-requested by M_GET, - In this case, the session should be deemed successfully - completed. - - A session termination itself is not a protocol stage. Mailer may - terminate a session at any time simply by issuing disconnect - (shutdown) command to the underlying transport layer, provided any - of the three conditions above are met. Mailer MUST take all proper - steps to provide a graceful shutdown of the transport layer, as it - is the transport layer that is responsible for all the data - transmitted by one side to be received by another before - disconnection, provided that shutdown of the transport layer - protocol was successful. - -7. Recommended Protocol Extensions ----------------------------------- - - This section documents already implemented and proposed extensions - for the binkp/1.0. These extensions are purely optional and are - included here for the sake of compatibility with future - implementations. - - Sides indicate supported protocol extensions by sending M_NUL - frame(s) with "OPT list_of_extensions" string, where - list_of_extensions is a space separated list of supported protocol - extensions. Whenever multiple M_NUL "OPT ..." frames are received - during the session, they SHOULD augment the current list of - extensions rather than replace it, unless specifically stated - otherwise for a particular option. - - Mailer SHOULD NOT use any extension unless exactly sure that this - extension is supported by the remote. Mailer SHOULD use M_NUL "OPT - ..." to indicate supported options. Other methods for indicating - supported extensions are allowed as long as the provide full - backwards compatibility. - - 7.1 Non-reliable Mode - --------------------- - - Non-reliable mode solves the problem with frequently aborted - connections when the sides can not successfully complete file - transfer before connection is broken. In this case, if the - transmitting side starts retransmission from offset 0, performance - degrades as by the time it receives M_GET from the remote, network - buffers are already full and by the time they are freed for - retransmission from requested offset, the connection might go down - again. - - In order to circumvent this problem, a mailer can request the - remote to enter non-reliable mode by sending a M_NUL "OPT NR" frame - at any time during the session. After the remote acknowledges it by - sending an M_NUL "OPT NR" frame indicating that the option is - supported, both sides can assume that they are in non-reliable - mode. - - When session is in non-reliable mode, the transmitting side may - send -1 for the offset value in M_FILE command. If it does so, it - should wait for the M_GET frame from the receiving side that - explicitly specifies file offset and start transmitting file data - from this offset. If the receiving side has indicated that it - supports non-reliable mode by sending M_NUL "OPT NR" frame, it must - recognize -1 as the file offset in M_FILE command as an explicit - request for the file offset and transmit an appropriate M_GET frame - as soon as possible. - - It should be understood that this option degrades performance over - regular quality connections and it should be used only if - absolutely necessary. - - 7.2 Multiple Batch Mode - ----------------------- - - The session is in MB mode if both sides set "MB" flag in any of - M_NUL "OPT" packets exchanged before sending of M_OK/M_PWD packets. - - In MB mode both sides restart session from RxDone into InitTransfer - state if there were any command packets sent or received by any - side between starting at InitTransfer and exchanging of M_EOB by - the sides (RxDone state). Otherwise, the session terminates as - usual. - - Multiple batches mode is intended to handle WaZOO [FTS-0006] file - requests. If there were any WaZOO request files transferred in a - batch, sides MAY process them and send resulting files in the next - batch. Mailers MAY also generate list of files to send in - additional batches by other techniques -- including rescanning of - their spools or processing of other magic files transferred before - in the same session. - - 7.3 Multiple Passwords Mode - --------------------------- - - Multiple password mode allows to specify different passwords for - the different addresses of the remote. - - Originating side identifies it's multipassword capabilities by - sending M_NUL "OPT MPWD" during session setup stage before sending - any M_ADR commands and waits for response from the answering side. - - If answering side responds with the M_NUL "OPT MPWD", then it - supports multiply passwords too. Answering side also always - responds with it's own address list: M_ADR "adr1 adr2 adr3 ...". If - M_NUL "OPT MPWD" was not received prior to the first M_ADR command, - originating side should assume that the remote does not support - multiple password mode and send a single password (if any) for one - of the addresses of the remote. - - If the MPWD option was indicated by the answering side, originating - side now may send M_PWD "pwd1 pwd2 pwd3 ..." with the number of - entries in space separated password list equivalent to the number - of addresses presented by the answering side. If there is no - password for a particular address, it must send '-' character as a - placeholder. - - If the passwords presented are consistent, answering side must - acknowledge successful authentication by sending M_OK command. - - 7.4 Keyed Hashing Challenge-Response Authentication Mechanism - ------------------------------------------------------------- - - 7.4.1 Overview - -------------- - - Challenge-Response Authentication Mechanism (CRAM) allows to avoid - passing cleartext, reusable passwords across the network. Since it - utilizes Keyed-Hashing digests [Keyed], it does not require - password to be stored in the clear on the Mailer's media, allowing - storage of the intermediate results which are known as "contexts". - - Providing binkp-mailer is capable of [Keyed] digest calculation and - conversion of a byte array to a hexadecimal string and back, - implementation of CRAM is easily achieved by slightly modifying the - state machine. - - 7.4.2 Sequence of Steps - ----------------------- - - CRAM adds an additional synchronization step to binkp protocol. The - description of this step follows: - - the Originating side, encoded to a hexadecimal string. - hexadecimal string, and a password to produce a digest by - applying the keyed Hashing algorithm from [Keyed] where the key - is the password and the digested text is the challenge data. - digest provided. If the digest is correct, the answering side - should consider the Originating side authenticated and responds - appropriately. - - Similar technique is used in [IMAP-AUTH]. - - 7.4.3 Generating and Transmitting Challenge Data - ------------------------------------------------ - - Size and contents of challenge data are implementation-dependent, - but it SHOULD be no smaller than 8 bytes and no bigger than 64 - bytes. Answering side SHOULD never generate the same challenge - data. - - Instead of generating a long challenge data, answering side MAY use - a hash function to shorten it. In calculation of a challenge data - answering side MAY also use connection/line number, caller's IP - address, current time, etc. - - Answering side transmits challenge data in the very first M_NUL - message, in the following way: - - M_NUL "OPT [othropt] CRAM-lsthf-cde [othropt]" - - lsthf is a list of aliases of supported hash functions, delimited - by slash characters. The list begins with alias of the most - preferred and ends with alias of the least preferred hash function. - - Currently defined aliases are: MD5 for [MD5] and SHA1 for [SHA-1]. - - cde is the challenge data encoded to hexadecimal string, Lower-case - ASCII characters MUST be used for encoding, but Mailer SHOULD also - accept upper-case characters. The length of the string MUST be - even, and the leading zeros MUST NOT be trimmed. - - 7.4.4 Producing and Transmitting a Digest - ----------------------------------------- - - Originating side responds with: - - M_PWD "CRAM-chosenhf-khde [othropt]" - - where chosenhf is the alias of the chosen hash function and khde is - the keyed hashed digest, encoded to a hexadecimal string. - - According to [IMAP-AUTH], keyed hashed digest is produced by - calculating - - HASH((secret XOR opad), HASH((secret XOR ipad), challengedata)) - - where HASH is chosen hash function, ipad and opad are 36 hex and 5C - hex (as defined in [Keyed]) and secret is a password null-padded to - a length of 64 bytes. If the password is longer than 64 bytes, the - hash-function digest of the password is used as an input (16-byte - for [MD5] and 20-byte for [SHA-1]) to the keyed hashed calculation. - - 7.4.6 Indicating CRAM Capabilities - ---------------------------------- - - Answering side MUST send - - M_NUL "OPT [othropt] CRAM-lsthf-cde [othropt]" - - as a very first M_NUL message if it supports CRAM. - - It MAY send other non-M_NUL messages before though. Current - specification doesn't define any such non-M_NUL message, they are - reserved for protocol extension. - - Originating side MUST be ready to receive non-M_NUL before M_NUL in - a CRAM session. Binkp state machine MUST ignore any received - message of unknown type in order to be compatible with future - extensions. - - If an originating side receives a first message that is a M_ADR or - a M_NUL message that is not - - M_NUL "OPT [othropt] CRAM-lsthf-cde [othropt]" - - it MUST decide that the answering side doesn't support CRAM and MAY - either disconnect or use old password exchange. If the sides have - no any compatible hash function, originator may also either - disconnect or use old password exchange. If an originating side - decides to disconnect, it SHOULD send M_ERR frame with a proper - explanation before disconnecting. - - When parsing M_NUL "OPT ..." string (coming from the answering - side), originating side first splits it by using space delimiter to - get a list of options, and then if an option begins with - "CRAM-lsthf-", takes the remaining substring as a - hexadecimal-encoded challenge data. - - 7.4.7 Example of Frame Exchange During CRAM Authentication - ---------------------------------------------------------- - - (Password here is tanstaaftanstaaf) - - Originating : - send M_NUL messages - and M_ADR - wait for first M_NUL message - - Answering : - send M_NUL "OPT ND CRAM-SHA1/MD5-f0315b074d728d483d6887d0182fc328" - and other messages - wait for M_PWD - - Originating : - M_PWD "CRAM-MD5-56be002162a4a15ba7a9064f0c93fd00" - - Answering : - M_OK and continue session - - 7.4.8 Notes on Hash Function Algorithms - --------------------------------------- - - [MD5] and [SHA-1] are the most widely used cryptographic hash - functions. [MD5] has been shown to be vulnerable to collision - search attacks [Dobb]. This attack and other currently known - weaknesses of [MD5] do not compromise the use of [MD5] within CRAM - as specified in this document (see [Dobb]); however, [SHA-1] - appears to be a cryptographically stronger function. To this date, - [MD5] can be considered for use in CRAM for applications where the - superior performance of [MD5] is critical. In any case, - implementors and users need to be aware of possible cryptanalytic - developments regarding any of these cryptographic hash functions, - and the eventual need to replace the underlying hash function. - -8. License ----------- - - You can implement binkp protocol in your software as long as you - agree to the following conditions: - - other way. You shall include the author(s) of the protocol in - your copyright statement for the software. - versions. Binkp allows development of the new capabilities - without compromising interoperability with previous versions. - Therefore, it is important that future developments of the - protocol are not pursued in different directions by different - people. If you have any suggestions regarding future - developments of the protocol, make a reasonable effort to - contact the author(s), so that the development efforts can - coordinated in a way advantageous for everybody. - future binkp specifications, you shall reference to it as a - "binkp variation" or "binkp derived". - - Remember that you may use, implement or utilize binkp, it's - description or any other associated texts or documentations at your - own risk, without any warranty, without even the implied warranty - of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE - - Binkp author: Dima Maloff. - -9. Glossary ------------ - - Many entries in this glossary are provided courtesy of Butterfly - Glossary of Internet and Data Communication terms and RFC-1983. - - connection-oriented - Data communication method in which communication proceeds - through three well-defined phases: connection - establishment, data transfer, connection release. TCP is a - connection-oriented protocol. - - data link layer - The OSI layer that is responsible for data transfer across - a single physical connection, or series of bridged - connections, between two Network entities. - - flow control - A technique for ensuring that a transmitting entity does - not overwhelm a receiving entity. - - HDLC - (High level Data Link Control). Popular ISO standard - bit-oriented, data link layer protocol derived from SDLC. - HDLC specifies an encapsulated method of data on - synchronous serial data links. - - IP - (Internet Protocol). The Internet Protocol, defined in STD - 5, RFC 791, is the network layer for the TCP/IP Protocol - Suite. It is a connectionless, best-effort packet switching - protocol. - - network layer - Layer 3 of the OSI reference model. Layer 3 is the layer at - which routing, addressing and connection management take - place. - - OSI (Open Systems Interconnection) Reference Model - A seven-layer structure designed to describe computer - network architectures and the way that data passes through - them. This model was developed by the ISO (International - Organization for Standardization) in 1978 to clearly define - the interfaces in multivendor networks, and to provide - users of those networks with conceptual guidelines in the - construction of such networks. - - port - A port is a transport layer demultiplexing value. Each - application has a unique port identifier associated with - it. - - physical layer - The OSI layer that provides the means to activate and use - physical connections for bit transmission. In plain terms, - the Physical Layer provides the procedures for transferring - a single bit across a Physical Media. - - Quality of Service - (Also QoS). A measure of performance for a transmission - system that reflects its transmission quality and - availability of service. - - reliable transmission - a type of transport service that: - * recovers from errors by retransmitting errored frames - * delivers frames in correct sequence (also known as - stream-oriented) - * usually is used in connection-oriented mode - - session layer - Layer 5 of the OSI reference model. Coordinates session - activity between applications, including application-layer - error control, dialog control, and remote procedure calls. - - sliding window flow control - Method of flow control in which a receiver gives - transmitter permission to transmit data until a window is - full. When the window is full, the transmitter must stop - transmitting until the receiver advertises a larger window. - - socket - Software structure operating as a communications and point - within a network device. - - TCP - Transmission Control Protocol. An Internet Standard - transport layer reliable protocol defined in STD 7, RFC - 793. It is connection-oriented and stream-oriented. - - TCP/IP protocol suite - Transmission Control Protocol over Internet Protocol. This - is a common shorthand which refers to the suite of - transport and application protocols which runs over IP. - - transport layer - Layer 4 of the OSI reference model. The transport layer is - responsible for reliable network communication between end - nodes. It implements flow and error control and often uses - virtual circuits to ensure reliable data delivery. - - unixtime - number of seconds elapsed since 00:00:00 UTC, Jan. 1, 1970. - -10. References --------------- - - [FTS-0001] - A Basic FidoNet(r) Technical Standard, Revision 16. Randy - Bush, Pacific Systems Group, September 30, 1995. FTS-0001. - - [FTS-0006] - YOOHOO and YOOHOO/2U2. The netmail handshake used by - Opus-CBCS and other intelligent Fidonet mail handling - packages. Version 002, Vince Perriello. 30-Nov-1991. - FTS-0006. - - [FSC-0039] - M.Howard, A type-2 packet extension proposal, FSC-0039 - Version 4, 29-Sep-1990. FSC-0039. - - [FSC-0045] - T.Henderson, Proposed new packet header, Version 1, - 17-Apr-1990. FSC-0045. - - [FSC-0048] - J.Vroonhof, Proposed type-2 packet extension, Version 2, - 21-Oct-1990. FSC-0048. - - [FSC-0081] - M.Staldal, A type-3 packet proposal, Version 1, - 01-Mar-1995. FSC-0081. - - [EMSI] - Joaquim H. Homrighausen, EMSI/IEMSI protocol definition. - May 3, 1991. FSC-0056. - - [FTA-1006] - Key words to indicate requirement levels, Fidonet Technical - Standards Committee administrative. FTA-1006. - - [Halsall95] - Data Communications, Computer Networks and Open Systems, F. - Halsall, 4th ed., Addison-Wesley, 1995, ISBN 0-201-42293-X. - - [Dobb] - H. Dobbertin, "The Status of MD5 After a Recent Attack", - RSA Labs' CryptoBytes, Vol. 2 No. 2, Summer 1996. - - [MD5] - Rivest, R., "The MD5 Message-Digest Algorithm", RFC 1321, - April 1992. - - [SHA-1] - NIST, FIPS PUB 180-1: Secure Hash Standard, April 1995. - - [Keyed] - Krawczyk, Bellare, Canetti, "HMAC: Keyed-Hashing for - Message Authentication", RFC 2104, February 1997. - - [IMAP-AUTH] - Klensin, "IMAP/POP AUTHorize Extension for Simple - Challenge/Response", RFC 2195, September, 1997 - - [RFC822] - Standard for the format of ARPA Internet text messages. D. - Crocker. Aug-13-1982. RFC 822, STD0011. - - [UTF8] - UTF-8, a transformation format of ISO 10646. F. Yergeau. - January 1998, RFC 2279. - - [ISO10646] - ISO/IEC 10646-1:1993. International Standard -- Information - technology -- Universal Multiple-Octet Coded Character Set - (UCS) -- Part 1: Architecture and Basic Multilingual Plane. - Five amendments and a technical corrigendum have been - published up to now. UTF-8 is described in Annex R, - published as Amendment 2. - -11. Acknowledgements --------------------- - - This document is partially based on extracts from RFCs and FTSC - publications too numerous to be acknowledged individually. - - The authors would like to thank Joaquim Homrighausen, Kim 'B' - Heino, Rune Johansen and many others for fruitful discussions and - suggestions regarding protocol design and specifications. - -A. Author Contact Data ------------------------ - - Dima Maloff - Fidonet: 2:5020/128 - E-mail: maloff@corbina.net - WWW: http://www.corbina.net/~maloff/ - - Maxim Masiutin - Fidonet: 2:469/84 - E-mail: max@ritlabs.com - WWW: http://www.ritlabs.com/ - - Nick Soveiko - Fidonet: 2:5030/23.101 - E-mail: nsoveiko@doe.carleton.ca - WWW: http://www.doe.carleton.ca/~nsoveiko/ - -B. History ----------- - - Rev.1, 19990611: - First release - - Rev.2, 19991008: - * Added new topic: "Definitions"; - * clarified the following topics: "Frame Format", - "Protocol Commands and Their Arguments", "Keyed - Hashing Challenge-Response Authentication Mechanism"; - * added "unixtime" item to Glossary topic; - * corrected links in References topic. - - Rev.3, 20000731: - * Table 6 in section 6.2, File transfer stage has been - rewritten: TheListOfSendFiles replaced by PendingFiles - which was defined earlier. introduced definition of - KnownFiles list. new ProcessTheQueue routine w/respect - to handling M_GET command - * Section 5.2, File Name Issues was rewritten to clearly - define safe and unsafe characters in filenames. - * Section 5.3, Non-ASCII Characters was rewritten to - clarify Unicode usage. - * Expanded descriptions for M_NUL "TIME ...", M_NUL "TRF - ...", added description of M_NUL "PHN ..." and M_NUL - "OPM ..." frames in section 5.4 Binkp Commands. - * IANA port number added to section 3, Protocol - Overview. - * M_GET description in section 5.4, Binkp Commands was - rewritten for clarity. - * M_BSY "RETRY ..." option documented. - * Minor edits throughout the document to improve - readability. -- Go Back - - + + + +
+********************************************************************** +FTSC FIDONET TECHNICAL STANDARDS COMMITTEE +********************************************************************** + +Publication: FSP-1011 +Revision: 3 +Title: Binkp - a protocol for transferring FidoNet mail over + reliable connections +Authors: Dima Maloff + Nick Soveiko + Maxim Masiutin +Revision Date: 31 July 2000 +Expiry Date: 31 July 2002 + +---------------------------------------------------------------------- + +Abstract +-------- + + This specification defines binkp - a protocol to handle a session + between two Fidonet Technology systems over a reliable connection. + Assumption that the connection is reliable makes possible to + eliminate error-checking and unnecessary synchronization steps, + achieving both ease of implementation and major performance + improvement over connections with large unpredictable delays (e.g. + Internet). + +Status of this document +----------------------- + + This document is a Fidonet Standards Proposal (FSP). + + This document specifies an optional Fidonet standard protocol for + the Fidonet community, and requests discussion and suggestions for + improvements. + + This document is released to the public domain, and may be used, + copied or modified for any purpose whatever. + +Available formats +----------------- + + Binkp Specification is also available in HTML format at + http://www.ritlabs.com/binkp/ + +Table of contents +----------------- + + 1. Background + 1. Objectives + 2. Motivation for a New Protocol + 2. Definitions + 3. Protocol Overview + 4. Frame Format + 1. Notation + 2. Examples + 5. Protocol Commands and Their Arguments + 1. Classification + 2. File Name Issues + 3. Non-ASCII Characters in Command Argument symbol string + 4. Binkp Commands + 5. Example of Frame Exchange in a Simple binkp Session + 6. Protocol States + 1. Session Setup Stage + 1. Originating Side + 2. Answering Side + 2. File Transfer Stage + 3. Session Termination + 7. Recommended Protocol Extensions + 1. Non-Reliable Mode + 2. Multiple Batch Mode + 3. Multiple Passwords Mode + 4. Keyed Hashing Challenge-Response Authentication Mechanism + 1. Overview + 2. Sequence of Steps + 3. Generating and Transmitting Challenge Data + 4. Producing and Transmitting a Digest + 5. Indicating CRAM Capabilities + 6. Example of Frame Exchange During CRAM Authentication + 7. Notes on Hash Function Algorithms + 8. License + 9. Glossary + 10. References + 11. Acknowledgements + A. Author Contact Data + B. History + + --------------------------------------------------------------- + +1. Background +------------- + + 1.1 Objectives + -------------- + + It's been a long time since a new Fidonet protocol has been + developed, [EMSI] definitions being published last time in 1991, + not speaking about basic standards, [FTS-0001] and [FTS-0006]. + Fidonet is evolving everyday and new transport layers are being + introduced into practice. This led to a situation when in certain + Fidonet Regions a visible portion of traffic, especially long + distance traffic generating high toll, is being carried by means of + protocols that formally are not Fidonet standards. This creates an + ambiguity for such systems in indicating their additional + capabilities in Fidonet nodelist and in some instances, from being + listed in the nodelist at all. + + This document attempts to document the current practice for + communication between two Fidonet systems via a reliable channel, + provide technical reference for Fidonet software developers and + eventually improve Fidonet connectivity. + + 1.2 Motivation for a new protocol + --------------------------------- + + Existing Fidonet Technical Standards and Fidonet Reference Library + documents [FTS-0001], [FTS-0006], [EMSI] specify both session + handshake procedures and transmission capabilities that imply: + * non-reliable communication channel between mailers + * low round-trip times in the communication channel between + mailers. + + This was commonplace a few years ago, when Fidonet systems were not + using transport other than direct dial-up on a visible basis. + Things have changed today, when other communication media becomes + widely available on a day-to-day basis. This communication media + typically provides implementation of Physical, Data Link, Network + and Transport layers of the ISO/OSI Reference Model and facilitates + relieving Session layer of inappropriate functions, such as error + control, flow control, call management and data transparency + [Halsall95]. Examples of such communication media are TCP/IP socket + connection and HDLC family protocol connection. + + New communication media can be generally characterized by the + reliable transmission service offered by it to the Session layer + protocol. Reliable transmission implies that: + * Data link and/or Transport layer protocols are responsible for + error control and delivery of frames in correct sequence + * Session layer and higher layer protocols are operating on top + of connection-oriented mode + * Quality of Service provisions (if any) result in unspecified + delays between transmitter and receiver + * connections are rarely aborted. + + Combination of these factors imposed the following requirements for + the new Fidonet protocol: + * error control can be eliminated throughout the session layer + protocol for both handshake and default file transfer method + * session setup procedure should minimize number of + synchronization points for fast handshake + * protocol should be insensitive to delays and robust with + respect to timeouts + * application flow control should be moved to file level; + individual data frames do not need to be error checked nor + acknowledged + * protocol should be independent from both higher and lower layer + protocols + * protocol should be reasonably easy to implement and allow + future extensions. + +2. Definitions +-------------- + + The key words "MUST", "MUST NOT", "SHOULD", "SHOULD NOT" and "MAY" + in this document are to be interpreted as specified in [FTA-0006]. + However, for readability, these words may sometimes not appear in + all uppercase letters in this specification. Although it should not + impact minimal realization of binkp protocol, it must be noted that + Protocol Extensions may override, update or obsolete requirement + levels indicated by the above keywords in chapters from 3 to 6 + inclusive. + + Calling party in this document is referred to as the Originating + side and called party is referred to as the Answering side. + Originating side here is the party that initiates the connection + between two systems. + + Mailer in this document is a software that implements the protocol. + + Words "frame", "packet", and "block" when used in this document + refer to binkp's Frames, unless explicitly stated otherwise. + + Other definitions that are not local to this document can be found + in the Glossary. + + This document is organized as following: + + Frames section defines binkp's frames. Binkp/1.0 commands and their + arguments section provides detailed description of all defined + protocol commands together with recommendations for their usage. + Actual binkp implementation may match it's own diagrams provided + that such implementation remains fully compatible with current + specification. Protocol states section gives rigorous state + diagrams for the minimum realization of binkp. All mailers MUST + support this minimum realization. Recommended Protocol Extensions + section documents most important extensions to the basic protocol + that are in use as of the time of this writing. The License, + Glossary and References sections can be found at the end of this + document. + +3. Protocol Overview +-------------------- + + Binkp is a Fidonet session layer protocol intended for use over + data transparent bi-directional channels with reliable + transmission. There are no other requirements for the service + provided by the underlying protocol suite. Presentation and + application layer protocols are not discussed here. Whenever TCP/IP + socket is used, IANA registered port number for binkp 24554 SHOULD + be used (as registered with the Internet Assigned Numbers + Authority). + + Functionality of the minimum protocol realization makes provision + for: + * password protected sessions + * 4D/5D addressing for Fidonet and technology compatible networks + * exchange of Type 2 [FTS-0001], Type 2.2 [FSC-0045], Type 2+ + [FSC-0039] and [FSC-0048], Type 3 [FSC-0081] packets and + [FTS-0006] arcmail in both directions, including poll and mail + pickup, as well as transfer of any binary or ASCII files + * handling WaZOO [FTS-0006] file requests + * ensuring integrity of transmitted mail and files + * simultaneous bi-directional transmission + * maximizing performance over packet switched data networks + + Binkp uses only one synchronization point during session startup, + that is password exchange. This feature facilitates fast session + startup for high latency links. Sliding window flow control is + incorporated on the file level. This ensures that a batch of small + files is transmitted with the same efficiency as a one large file. + +4. Frame Format +--------------- + + Binkp is defined in terms of sending and receiving specifically + formatted data blocks. We call them frames. + + Command frames carry protocol commands and may change protocol + state. Data frames are usually appended to files being received by + mailers or may be discarded, depending on the protocol state. + + The particular way of mapping an octet stream or a datagram stream + of the transport layer into binkp frames may depend on the + underlying protocol suite. At this time, we define such mapping for + TCP/IP socket connection which can also be used for similar + transports as well. + + The socket stream is being split into binkp frames in the following + manner: + + 7 6543210 76543210 + +-+-------+--------+--- ................ ---+ + |T| SIZE | DATA | + +-+-------+--------+--- ................ ---+ + |<- 2 octets ->|<- up to 32767 octets ->| + (frame header) (frame data) + + If T bit is 0, this is a data frame. + + If T bit is 1, this is a command frame. + + 15 bits marked SIZE carry the size of the DATA part of the frame in + octets (with the bit marked 0 being the least significant). That + is, the actual length of a binkp frame is SIZE+2. + + The size of the DATA part may vary between 1 and 32767 octets. A + correct realization should never set SIZE to 0. Upon receiving of a + packet header with the SIZE field set to 0, the total length of the + incoming packet must be treated as 2, this packet must be dropped, + and the event should be logged. + + The first octet of a command frame data is the command ID. The ID + must be between 0 and 127 inclusive. + + Other octets carry command arguments. Command arguments are an + arbitrary symbol string that may be null-terminated. Treating of a + null character in the middle of a command depends on realization + (with the options being "treat as whitespace" or "treat as + end-of-line"). The terminating null character (if any) is either + stripped or used by mailers internally as an end-of-line marker. + + 4.1 Notation + ------------ + + As stated before, command ID is a small number between 0 and 127. + Every binkp command defined in this document has a symbolic name in + the form M_XXX. Symbolic names are defined in binkp commands + section. We will use symbolic names and not numeric command IDs to + refer to commands everywhere in this document. + + The following notation is used to describe binkp's command frames: + + M_XXX "Data string" + + The actual numeric command ID for the command with the symbolic + name of M_XXX should be written into the first octet of the DATA + area of a binkp frame. "Data string" is a string to be copied into + DATA area starting at second octet. SIZE should be set to the total + length of "Data string" plus one for the octet to store the command + number. T bit should be set to 1. + + 4.2 Examples + ------------ + + M_OK "": + + 7 6543210 76543210 76543210 + +-+-------+--------+--------+ + |1| 0 1| 4| + +-+-------+--------+--------+ + | | +----- command ID (no arguments) + | +-------- frame length + +- command frame flag + + M_NUL "TEST": + + +-+-------+--------+--------+-------+--------+--------+--------+ + |1| 0 5| 0| T E S T | + +-+-------+--------+--------+-------+--------+--------+--------+ + +5. Protocol Commands and Their Arguments +---------------------------------------- + + 5.1 Classification + ------------------ + + Protocol commands may be classified the following way: + + * By argument type: + M_SKIP. Mailer MUST parse these commands and it is not + recommended to log arguments of these commands as they + are. Mailer-parseable commands can be further subdivided + by containment of a file name in the argument. + commands contain a file name in their arguments. + MAY ignore and/or log arguments of these commands. + * By protocol stage: + M_PWD (must not be sent by the Answering side), M_OK (must + not be sent by the Originating side). These commands MUST + never be sent during the file transfer stage. + These commands MUST NOT be sent session setup stage. + any time during the session. + + 5.2 File Name Issues + -------------------- + + In Mailer-parseable commands that contain a file name, the file + name MUST NOT include a whitespace (ASCII value 20 hex). The file + name SHOULD NOT include symbols other than alphanumeric + (A-Z,a-z,0-9) and safe characters as defined below in BNF. All + other symbols are to be considered unsafe and SHOULD be escaped in + the form of two hexadecimal digits preceded by a backslash (e.g. a + whitespace must be transmitted as "\20"). + + filename = *pchar + pchar = unreserved | escape + unreserved = ALPHA | DIGIT | safe + safe = "@" | "&" | "=" | "+" | "%" | "$" | "-" | "_" | + "." | "!" | "(" | ")" | "#" | "|" + escape = "\" HEX HEX + + National characters should not be escaped, but rather transmitted + using [UTF8] encoding (see section discussing non-ASCII characters + below). + + The best current practice is that Mailer does not alter a file name + without sysop's intention. If the mailer does provide such a + mechanism, it MUST BE optional and it SHOULD BE off by default. + + The protocol does not impose limitations on the file name length + other than those arising from the finite length of the binkp frame + itself. + + 5.3 Non-ASCII Characters in Command Argument Symbol String + ---------------------------------------------------------- + + Generally, mailer SHOULD use only characters from the ASCII range + [32...126] in the symbol strings for command arguments. In case + when there is a necessity to use non-ASCII characters, mailer + SHOULD use the [UTF8] format of the multioctet Universal Character + Set [ISO10646]. Mailer SHOULD use non-ASCII characters only if the + other side have indicated it's support by transmitting M_NUL "OPT + UTF8" frame during the session setup stage. Otherwise, mailer + SHOULD assume that the remote does not support non-ASCII characters + and SHOULD NOT use them in command arguments. + + 5.4 Binkp Commands + ------------------ + + Format: symbolic_command_name command_ID + + M_NUL 0 + + Command arguments contain human-readable information, such + as nodelist info, sysop name, etc. This frame can also be + used by some Mailers to exchange protocol options. Mailer + MAY ignore and/or log arguments of M_NUL. + + e.g. "ZYZ Dima Maloff" + + The following format of M_NUL argument is recommended for + compatibility purposes: + + * M_NUL "SYS system_name" + * M_NUL "ZYZ sysop's_name" + * M_NUL "LOC system_location" + * M_NUL "NDL system_capabilities" + * M_NUL "TIME remote_date_time" + remote_date_time format is described in [RFC822]. + Example of valid remote_date_time is + Sun, 06 Nov 1994 08:49:37 GMT + * M_NUL "VER mailer_version protocol_version" + note: binkp/1.0 mailers should send "binkp/1.0" string + for protocol_version. + * M_NUL "TRF netmail_bytes arcmail_bytes" + traffic prognosis (in bytes) for the netmail + (netmail_bytes) and arcmail and files (arcmail_bytes), + both are decimal ASCII strings + * M_NUL "OPT protocol options" + here protocol options is a space separated list of + binkp options and extensions supported by the mailer. + * M_NUL "PHN string" + phone number, ip address or other network layer + addressing ID + * M_NUL "OPM string" + string is a message for the system operator that may + require manual attention + + M_ADR 1 + + List of 4D/5D addresses (space separated). + + e.g. "2:5047/13@fidonet 2:5047/0@fidonet" + + M_PWD 2 + + Session password, case sensitive. After successful password + authentication of the remote, originating side proceeds to + the file transfer stage. This command MUST never be sent by + the Answering side. + + e.g. "pAsSwOrD" + + M_OK 4 + + Acknowledgement for a correct password. Upon receiving of + this command, originating side goes to file transfer stage. + This command MUST never be sent by the Originating side. + Arguments may be ignored. + + e.g. "" + + M_FILE 3 + + Space separated list of parameters for the next file to be + transmitted: filename; size in bytes; unixtime; file + transmission offset. + + In protocol extensions, negative values for the offset may + have special meaning (see non-reliable mode for an example + of such usage), basic implementation may treat negative + values as an error. + + Size, time and offset parameters are decimal. Until the + next M_FILE command is received, all data frames must carry + data from this file in consecutive manner. There is no end + of file identifier as the file size is known beforehand. If + there are "extra" data frames, Mailer may append this data + to the file. By default, transmission of each file should + be started from offset 0. M_GET command sent by the remote + MUST force the mailer to start transmission from the + specified offset. + + e.g. "config.sys 125 2476327846 0" + + or, answering to M_GET with offset 100: + + "config.sys 125 2476327846 100" + + M_EOB 5 + + End-of-Batch. M_EOB command must be transmitted after all + the files have been sent. + + Arguments of the command may be ignored. + + e.g. "" + + M_GOT 6 + + File acknowledgement, that must be transmitted upon + receiving of the last data frame for current file. + Arguments for this command shall be the same as for the + M_FILE sent by remote, excluding the last argument, file + offset, which is not transmitted back to the system which + have sent M_FILE. M_GOT can also be transmitted while + receiving a file, in which case transmitting party may + interpret it as a destructive skip. + + e.g. "config.sys 125 2476327846" + + M_ERR 7 + + This command indicates a fatal error. A party sending M_ERR + should abort the session. Argument should contain an error + explanation and may be logged. Mailer sends M_ERR in + response for an incorrect password. Mailer NUST NOT abort a + session without sending a M_ERR or a M_BSY frame (though + state machine tables, for simplicity, may not include + "transmit M_ERR" instructions). + + e.g. "Incorrect password" + + M_BSY 8 + + M_BSY command is transmitted when the system encounters a + non-fatal error typically due to temporary lack of + resources to proceed with the session. The argument should + contain an explanation of the situation and may be logged + by remote. M_BSY may be sent at any time during the session + (including session setup stage), not only the stages + explicitly indicated in the finite state machine. The side, + which have sent M_BSY, is in legal position to abort the + session. Mailer MUST be able to accept M_BSY at any time. + Though state machine tables, for simplicity, may not + include handling of M_BSY command, Mailer MUST NOT be + confused by reception of M_BSY command. + + e.g. "Too many servers are running already" + + If a mailer wishes to suggest the remote a time interval + before the next session attempt, it may choose to transmit + it in the following format: + + M_BSY "RETRY NNNN: explanation" + + where NNNN is interval in seconds (decimal string) and + explanation is an arbitrary string containing explanation + of the matter (optional). + + M_GET 9 + + M_GET command is a request to (re)send files. Arguments of + the command are the same as for the M_FILE command and + refer to a file which we'd like to receive from the remote. + + Mailer may send M_GET when it doesn't like transmission + file offset (e.g. file was partially received during one of + the previous sessions). + + e.g. "config.sys 125 2476327846 100" + + Mailer reacts to this command as follows: according to the + first three arguments (filename/size/unixtime), it + determines whether the M_GET argument is the current file + being transmitted to the remote (or a file that have been + transmitted, but we are still waiting an M_GOT ack for it). + If this is the case, it should + + * discard transmission in progress as soon as possible + * perform seek() to the specified offset + * proceed with transmission of the file requested + starting with an appropriate M_FILE. + + For the example above, corresponding M_FILE will have the + following arguments: "config.sys 125 2476327846 100" + + When the mailer is finished with transmitting data of the + requested file it may proceed with transmission of other + files it has for the remote. + + M_SKIP 10 + + Non destructive skip. Parameter is a space separated list + of filename, size and unixtime. This command indicates that + the remote should postpone sending the file until next + session. + + e.g. "config.sys 125 2476327846" + + 5.5 Example of Frame Exchange in a Simple Binkp Session + ------------------------------------------------------- + + +-----------------------------------------------------------------+ + | Originating side | Answering side | + |---------------------------------+-------------------------------| + | M_NUL "SYS ..." | M_NUL "SYS ..." | + | M_NUL "ZYZ ..." | M_NUL "ZYZ ..." | + | M_NUL "LOC ..." | M_NUL "LOC ..." | + | M_NUL "VER ..." | M_NUL "VER ..." | + | M_ADR "2:2/2.2@fidonet" | M_ADR "3:3/3.3@fidonet" | + | M_PWD "password" | (waiting for a password from | + | | remote) | + |---------------------------------+-------------------------------| + | (waiting for password | M_OK "" (or M_ERR "Bad | + | acknowledgement) | password") | + |---------------------------------+-------------------------------| + | (got M_OK) | M_FILE "file2 200 42342434 0" | + |---------------------------------+-------------------------------| + | M_FILE "file1 100 423424244 0" | data | + |---------------------------------+-------------------------------| + | data | data | + |---------------------------------+-------------------------------| + | data | data | + |---------------------------------+-------------------------------| + | M_EOB | (got file1, acknowledging it) | + |---------------------------------+-------------------------------| + | (got file2, acknowledging it) | M_GOT "file1 100 423424244" | + |---------------------------------+-------------------------------| + | M_GOT "file2 200 42342434" | data | + |---------------------------------+-------------------------------| + | | M_EOB | + +-----------------------------------------------------------------+ + +6. Protocol States +------------------ + + The protocol has two major stages: session setup (different for + originating side and answering side) and file transfer (where state + machined for both sides are the same). Methods for initiating + connection as well as numerical values for particular timeouts are + dependent on the underlying layer's protocol suite and are not + considered here. Mailer MAY allow configuration of timeouts in + reasonably wide range to cover all supported transport protocols. + + The Finite State Machine notation is used throughout this section + as defined by [FTS-0001]. + + 6.1 Session Setup Stage + ----------------------- + + Originating side should initiate a binkp session according to Table + 1. Answering side should be able to act according to Table 2. Any + optional extensions of the handshake procedure MUST NOT confuse the + other side, which may choose at it's discretion to follow this + minimal implementation. Upon successful handshake, both sides + follow Table 3 (file transfer stage). That's why terms Answering + side and Originating side were chosen for this specification + instead of Client and Server - both sides play the same roles, and + their state machines differ in session setup stage only. + + Session setup stage has the following roles + + * Authentication (REQUIRED). Answering side, upon reception of a + password (common secret word) from Originating side, decides + whether the password really matches the list of presented + addresses, and either acknowledges it by sending M_OK frame or + rejects by sending M_ERR frame. This mechanism is called Basic + Authentication Scheme and MUST be supported by all Mailers. + Basic Authentication Scheme has the following limitations: + * If Originating side presented multiple addresses, the + password for all of the addresses must be the same (may be + solved by Multiple passwords extension). + * Cleartext reusable passwords are passed over a network + (may be solved by CRAM extension). + * Verification is made on Answering side only, thus + Originating side has no way to verify Answering side (may + be solved by dual CRAM or public-key cryptography, not + discussed in this document). + * Indicating protocol options (OPTIONAL). Sides may exchange + specially formatted M_NUL messages to indicate supported + extensions. Sides MAY use another technique to indicate + extensions. + + 6.1.1 Originating Side + ---------------------- + + Originating side sends M_ADR and M_PWD frames, waits for successful + authentication acknowledgement from the Answering side (M_OK frame) + and goes to file transfer stage. Originating side MUST NOT wait + before sending M_ADR frame, i.e. this frame should be send just + after setting up a connection on underlying layer. Originating side + MUST NOT wait before sending M_PWD except after reception of M_ADR + frame. The term wait in this paragraph means do not send anything + while expecting data from remote. + + Table 1: Session setup, originating side + +-----------------------------------------------------------------+ + | # | Name | Predicate(s) | Action(s) | Next | + |----+------------+------------------+---------------------+------| + | S0 | ConnInit | | Attempt to | S1 | + | | | | establish | | + | | | | connection | | + |----+------------+------------------+---------------------+------| + | S1 | WaitConn | Connection | Send M_NUL frames | S2 | + | | | established | with system info | | + | | | | (at least one M_NUL | | + | | | | "SYS ..." frame | | + | | | | should be sent | | + | | | | before M_ADR) | | + | | | | Send M_ADR frame | | + | | | | with system | | + | | | | addresses | | + | | | | Set Timer | | + | | | | See if we have | | + | | | | password for the | | + | | | | remote | | + | | |------------------+---------------------+------| + | | | Connection | Report no | exit | + | | | refused | connection | | + |----+------------+------------------+---------------------+------| + | S2 | SendPasswd | Yes, we have a | Send M_PWD | S3 | + | | | password | "password" frame | | + | | | | Reset Timer | | + | | |------------------+---------------------+------| + | | | No, there's no | Send M_PWD "-" | S3 | + | | | password | frame | | + |----+------------+------------------+---------------------+------| + | S3 | WaitAddr | M_ADR frame | See if answering | S4 | + | | | received | side presented the | | + | | | | address we've | | + | | | | called | | + | | |------------------+---------------------+------| + | | | M_BSY frame | Report remote is | exit | + | | | received | busy | | + | | |------------------+---------------------+------| + | | | M_ERR frame | Report error | exit | + | | | received | | | + | | |------------------+---------------------+------| + | | | M_NUL frame | Ignore (optionally, | S3 | + | | | received | log frame argument) | | + | | |------------------+---------------------+------| + | | | Other known | Report unexpected | exit | + | | | frame received | frame | | + | | |------------------+---------------------+------| + | | | Unknown frame | Ignore | S3 | + | | | received | | | + | | |------------------+---------------------+------| + | | | Nothing happens | Wait | S3 | + | | |------------------+---------------------+------| + | | | Timer Expired | Report timeout | exit | + |----+------------+------------------+---------------------+------| + | S4 | AuthRemote | Yes, the address | See if we've sent a | S5 | + | | | was presented | password for this | | + | | | | address | | + | | |------------------+---------------------+------| + | | | No, the address | Report we called | exit | + | | | was not | the wrong system | | + | | | presented | | | + |----+------------+------------------+---------------------+------| + | S5 | IfSecure | Yes, we've sent | Wait for M_OK frame | S6 | + | | | a password | | | + | | |------------------+---------------------+------| + | | | No, there was no | Report non-secure | T0 | + | | | password | session | | + |----+------------+------------------+---------------------+------| + | S6 | WaitOk | M_OK frame | report secure | T0 | + | | | received | session | | + | | |------------------+---------------------+------| + | | | M_BSY frame | Report remote is | exit | + | | | received | busy (Answering | | + | | | | size MAY report | | + | | | | busy after | | + | | | | reception of | | + | | | | caller's address) | | + | | |------------------+---------------------+------| + | | | M_ERR frame | Report error | exit | + | | | received | | | + | | |------------------+---------------------+------| + | | | M_NUL frame | Ignore (optionally, | S6 | + | | | received | log arguments) | | + | | |------------------+---------------------+------| + | | | Other known | Report unexpected | exit | + | | | frame received | frame | | + | | |------------------+---------------------+------| + | | | Unknown frame | Ignore | S6 | + | | | received | | | + | | |------------------+---------------------+------| + | | | Nothing happens | Wait | S6 | + | | |------------------+---------------------+------| + | | | Timer Expired | Report timeout | exit | + +-----------------------------------------------------------------+ + + 6.1.2 Answering Side + -------------------- + + Originating side sends M_ADR and waits for M_ADR and M_PWD frames + from remote. Upon receptions of these frames, it decides whether + the password really matches the list of presented addresses, and + either acknowledges it by sending M_OK frame (and goes to file + transfer stage) or rejects by sending M_ERR frame (and + disconnects). The term wait in this paragraph means do not send + anything while expecting data from remote. + + Table 2: Session setup, answering side + +-----------------------------------------------------------------+ + | # | Name | Predicate(s) | Action(s) | Next | + |----+----------+---------------------+--------------------+------| + | R0 | WaitConn | Incoming connection | Send M_NUL frames | R1 | + | | | established | with system info | | + | | | | (at least one | | + | | | | M_NUL "SYS ..." | | + | | | | frame should be | | + | | | | sent before M_ADR) | | + | | | | Send M_ADR frame | | + | | | | with system | | + | | | | addresses | | + | | | | Set Timer | | + | | |---------------------+--------------------+------| + | | | Nothing happens | Wait | R0 | + |----+----------+---------------------+--------------------+------| + | R1 | WaitAddr | M_ADR frame | See if we have a | R2 | + | | | received | password for any | | + | | | | of the remote | | + | | | | addresses | | + | | |---------------------+--------------------+------| + | | | M_ERR frame | Report error | exit | + | | | received | | | + | | |---------------------+--------------------+------| + | | | M_NUL frame | Log | R1 | + | | | received | | | + | | |---------------------+--------------------+------| + | | | Other known frame | Report unexpected | exit | + | | | received | frame | | + | | |---------------------+--------------------+------| + | | | Unknown frame | Ignore | R1 | + | | | received | | | + | | |---------------------+--------------------+------| + | | | Nothing happens | Wait | R1 | + | | |---------------------+--------------------+------| + | | | Timer expired | Report timeout | exit | + |----+----------+---------------------+--------------------+------| + | R2 | IsPasswd | Yes, we have a | Set Timer | R3 | + | | | password | | | + | | |---------------------+--------------------+------| + | | | Yes, but we have | Send M_ERR frame | exit | + | | | several different | Report | | + | | | passwords for | inconsistent | | + | | | different addresses | password settings | | + | | | of the remote | | | + | | |---------------------+--------------------+------| + | | | No, there's no | Report non-secure | T0 | + | | | password | session | | + |----+----------+---------------------+--------------------+------| + | R3 | WaitPwd | M_PWD frame | See if the | R4 | + | | | received | password matches | | + | | |---------------------+--------------------+------| + | | | M_ERR frame | Report error | exit | + | | | received | | | + | | |---------------------+--------------------+------| + | | | M_NUL frame | Log | R4 | + | | | received | | | + | | |---------------------+--------------------+------| + | | | Other known frame | Report unexpected | exit | + | | | received | frame | | + | | |---------------------+--------------------+------| + | | | Unknown frame | Ignore | R4 | + | | | received | | | + | | |---------------------+--------------------+------| + | | | Nothing happens | Wait | R3 | + | | |---------------------+--------------------+------| + | | | Timer Expired | Report timeout | exit | + |----+----------+---------------------+--------------------+------| + | R4 | PwdAck | Yes, the password | Send M_OK frame | T0 | + | | | matches | Report secure | | + | | | | session | | + | | |---------------------+--------------------+------| + | | | No, password does | Report password | exit | + | | | not match | error | | + +-----------------------------------------------------------------+ + + 6.2 File Transfer Stage + ----------------------- + + File transfer stage is based on two major routines. We call them + Receive Routine and Transmit Routine. These routines perform some + actions depending on their state variables. State variables are + RxState for Receive Routine and TxState for Transmit Routine. + + RxState := { RxWaitF | RxAccF | RxReceD | RxWriteD | RxEOB | RxDone + } + + TxState := { TxGNF | TxTryR | TxReadS | TxWLA | TxDone } + + Table 3: File Transfer + +-----------------------------------------------------------------+ + | # | Name | Predicate(s) | Action(s) | Next | + |----+--------------+---------------------+----------------+------| + | T0 | InitTransfer | none | Set Timer | T1 | + | | | | Set RxState to | | + | | | | RxWaitF | | + | | | | Set TxState to | | + | | | | TxGNF | | + |----+--------------+---------------------+----------------+------| + | T1 | Switch | RxState is RxDone | Report session | exit | + | | | and TxState is | complete | | + | | | TxDone | | | + | | |---------------------+----------------+------| + | | | Data Available in | call Receive | T2 | + | | | Input Buffer | routine | | + | | |---------------------+----------------+------| + | | | Free space exists | call Transmit | T3 | + | | | in output buffer | routine | | + | | |---------------------+----------------+------| + | | | Nothing happens | Wait | T1 | + | | |---------------------+----------------+------| + | | | Timer Expired | Report Timeout | exit | + |----+--------------+---------------------+----------------+------| + | T2 | Receive | Receive routine | Set Timer | T1 | + | | | returned OK | | | + | | |---------------------+----------------+------| + | | | Receive routine | Close all | exit | + | | | returned Failure | opened files | | + | | |---------------------+----------------+------| + | | | Receive routine | Call Receive | T2 | + | | | returned Continue | routine again | | + |----+--------------+---------------------+----------------+------| + | T3 | Transmit | Transmit routine | Set Timer | T1 | + | | | returned OK | | | + | | |---------------------+----------------+------| + | | | Transmit routine | Close all | exit | + | | | returned Failure | opened files | | + | | |---------------------+----------------+------| + | | | Transmit routine | Call Transmit | T3 | + | | | returned Continue | routine again | | + +-----------------------------------------------------------------+ + + Tables 4-6 are not actually state machines, but routines called + during file transfer stage + + We define here a FIFO queue called "TheQueue", which is used to + pass incoming M_GET / M_GOT / M_SKIP frames from Receive Routine to + Transmit Routine. Receive routine itself does not react to these + frames. + + Table 4: Receive Routine + +-----------------------------------------------------------------+ + |RxState |Predicate(s) |Condition(s) |Actions(s)|Next |Return | + |--------+-------------+-------------+----------+--------+--------| + |RxWaitF |Get a frame |Haven't got a|none |RxWaitF |OK | + | |from Input |complete | | | | + | |Buffer |frame yet | | | | + | | |-------------+----------+--------+--------| + | | |Got Data |ignore |RxWaitF |OK | + | | |frame | | | | + | | |-------------+----------+--------+--------| + | | |Got M_ERR |Report |RxDone |Failure | + | | | |Error | | | + | | |-------------+----------+--------+--------| + | | |Got M_GET / |Add frame |RxWaitF |OK | + | | |M_GOT / |to The | | | + | | |M_SKIP |Queue | | | + | | |-------------+----------+--------+--------| + | | |Got M_NUL |Log |RxWaitF |OK | + | | |-------------+----------+--------+--------| + | | |Got M_EOB |Report End|RxEOB |OK | + | | | |of Batch | | | + | | |-------------+----------+--------+--------| + | | |Got M_FILE |none |RxAccF |continue| + | | |-------------+----------+--------+--------| + | | |Got other |Report |RxDone |Failure | + | | |known frame |unexpected| | | + | | | |frame | | | + | | |-------------+----------+--------+--------| + | | |Got unknown |ignore |RxWaitF |OK | + | | |frame | | | | + |--------+-------------+-------------+----------+--------+--------| + |RxAccF |Decide how to|Accept from |Report |RxReceD |OK | + | |accept |beginning |receiving | | | + | |Incoming File| |file | | | + | | |-------------+----------+--------+--------| + | | |Accept from |Send M_GET|RxReceD |OK | + | | |offset (we do|Report | | | + | | |already have |receiving | | | + | | |a part of |file, | | | + | | |file) |requested | | | + | | | |offest | | | + | | |-------------+----------+--------+--------| + | | |Accept later |Send |RxWaitF |OK | + | | |(or failed to|M_SKIP | | | + | | |create file) |Report we | | | + | | | |will | | | + | | | |accept | | | + | | | |file | | | + | | | |later, not| | | + | | | |in current| | | + | | | |session | | | + | | |-------------+----------+--------+--------| + | | |Refuse |Send M_GOT|RxWaitF |OK | + | | |(delete on |Report we | | | + | | |remote) |do not | | | + | | | |accept | | | + | | | |file | | | + |--------+-------------+-------------+----------+--------+--------| + |RxReceD |Get a frame |Didn't got a |none |RxReceD |OK | + | |from Input |complete | | | | + | |Buffer |frame yet | | | | + | | |-------------+----------+--------+--------| + | | |Got Data |none |RxWriteD|continue| + | | |frame | | | | + | | |-------------+----------+--------+--------| + | | |Got M_ERR |Report |RxDone |Failure | + | | | |Error | | | + | | |-------------+----------+--------+--------| + | | |Got M_GET / |Add frame |RxReceD |OK | + | | |M_GOT / |to The | | | + | | |M_SKIP |Queue | | | + | | |-------------+----------+--------+--------| + | | |Got M_NUL |Log |RxReceD |OK | + | | |-------------+----------+--------+--------| + | | |Got M_FILE |Report |RxAccF |Continue| + | | | |partially | | | + | | | |received | | | + | | | |file | | | + | | |-------------+----------+--------+--------| + | | |Got other |Report |RxDone |Failure | + | | |known frame |unexpected| | | + | | | |frame | | | + | | |-------------+----------+--------+--------| + | | |Got unknown |ignore |RxReceD |OK | + | | |frame | | | | + |--------+-------------+-------------+----------+--------+--------| + |RxWriteD|Write data to|Write Failed |Report |RxDone |Failure | + | |file | |error | | | + | | |-------------+----------+--------+--------| + | | |File Pos > |Report |RxDone |Failure | + | | |Reported |write | | | + | | | |beyond EOF| | | + | | |-------------+----------+--------+--------| + | | |File Pos = |Close File|RxWaitF |OK | + | | |Reported |Send M_GOT| | | + | | | |Report | | | + | | | |File | | | + | | | |Received | | | + | | |-------------+----------+--------+--------| + | | |File Pos < |none |RxReceD |OK | + | | |Reported | | | | + |--------+-------------+-------------+----------+--------+--------| + |RxEOB |Get a frame |Didn't get a |none |RxEOB |OK | + | |from Input |complete | | | | + | |Buffer |frame yet or | | | | + | | |TxState is | | | | + | | |not TxDone | | | | + | | |-------------+----------+--------+--------| + | | |Got M_ERR |Report |RxDone |Failure | + | | | |Error | | | + | | |-------------+----------+--------+--------| + | | |Got M_GET / |Add frame |RxEOB |OK | + | | |M_GOT / |to The | | | + | | |M_SKIP |Queue | | | + | | |-------------+----------+--------+--------| + | | |Got M_NUL |Log |RxEOB |OK | + | | |-------------+----------+--------+--------| + | | |Got other |Report |RxDone |Failure | + | | |known frame |unexpected| | | + | | |or data frame|frame | | | + | | |-------------+----------+--------+--------| + | | |Got unknown |ignore |RxEOB |OK | + | | |frame | | | | + |--------+-------------+-------------+----------+--------+--------| + |RxDone |none |none |none |RxDone |OK | + +-----------------------------------------------------------------+ + + We define the list called "PendingFiles". After we put the last + byte of file into output buffer, we cannot yet consider the file as + being successfully transmitted, thus we have to add the file to + this list and then look for corresponding incoming M_GET / M_GOT / + M_SKIP frames to remove the file from the list and decide whether + the file was indeed received by remote or remote will accept this + file later, or something else. After we have sent M_EOB frame, we + must wait until PendingFiles list gets empty before disconnecting. + + If the connection accidentally breaks, all the files left in + PendingFiles are considered unsent and will be re-transmitted in + the next session. If the connection breaks when the remote did + actually receive the file (but the corresponded confirmation frame + (M_GOT) didn't came back to us) and we are resending this file + again in the next session, remote may get two copies of the same + file (file dupe). Binkp allows to reduce or totally suppress such + dupes (at a cost of performance, of course), see Non-Reliable mode + and "No Dupes" protocol extension (to be found in a separate + document at a later date). + + Table 5: Transmit Routine + +-----------------------------------------------------------------+ + |TxState|Predicate(s)|Condition(s) |Actions(s) |Next |Return | + |-------+------------+--------------+------------+-------+--------| + |TxGNF |Open next |File opened OK|Send M_FILE |TxTryR |continue| + | |file from | |Report | | | + | |outgoing | |sending file| | | + | |queue |--------------+------------+-------+--------| + | | |Failed to open|Report |TxDone |Failure | + | | |file |failure | | | + | | |--------------+------------+-------+--------| + | | |No more files |Send M_EOB |TxWLA |continue| + | | | |Report end | | | + | | | |of batch | | | + |-------+------------+--------------+------------+-------+--------| + |TxTryR |Check |TheQueue is |none |TxReadS|continue| + | |TheQueue |empty | | | | + | | |--------------+--------------------+--------| + | | |TheQueue is |call ProcessTheQueue|continue| + | | |not empty | | | + |-------+------------+--------------+--------------------+--------| + |TxReadS|Read data |Read failed |Report Error|TxDone |Failure | + | |block from |--------------+------------+-------+--------| + | |file |Read OK, |Send data |TxGNF |OK | + | | |Reached EOF |block frame | | | + | | | |Close | | | + | | | |current file| | | + | | | |Add current | | | + | | | |file to | | | + | | | |PendingFiles| | | + | | |--------------+------------+-------+--------| + | | |Read OK, not |Send data |TxTryR |OK | + | | |reached EOF |block frame | | | + |-------+------------+--------------+------------+-------+--------| + |TxWLA |Check |TheQueue is |none |TxDone |OK | + | |TheQueue |empty and | | | | + | | |RxState >= | | | | + | | |RxEOB | | | | + | | |--------------+------------+-------+--------| + | | |TheQueue is |none |TxWLA |OK | + | | |empty and | | | | + | | |RxState < | | | | + | | |RxEOB | | | | + | | |--------------+--------------------+--------| + | | |TheQueue is |call ProcessTheQueue|continue| + | | |not empty | | | + |-------+------------+--------------+--------------------+--------| + |TxDone |none |none |none |TxDone |OK | + +-----------------------------------------------------------------+ + + We define a list called KnownFiles. This list contains files that + can be requested by the remote using M_GET command. This list shall + at least contain all the files that are part of the PendingFiles + list. + + Table 6: ProcessTheQueue routine + +-----------------------------------------------------------------+ + | Predicate(s) | Condition(s) | Actions(s) | + |--------------------+--------------------+-----------------------| + | M_GET received | requested file is | Report unknown file | + | | not in the | | + | | KnownFiles list | | + |--------------------+--------------------+-----------------------| + | M_GET received for | Requested pos is | Close and finalize | + | a known file | FileSize | file. | + | | | Report that remote | + | | | refused file being | + | | | transmitted. | + | | | Set TxState to | + | | | TxGetNextFile. | + | |--------------------+-----------------------| + | | Requested pos is | Set file pointer to | + | | less than FileSize | requested pos. | + | | | Report that remote | + | | | requested offset. | + | | | Set TxState to | + | | | TxReadSend. | + | |--------------------+-----------------------| + | | Requested pos is | Ignore frame | + | | greater than | | + | | FileSize | | + |--------------------+--------------------+-----------------------| + | M_GOT file that is | none | Close and finalize | + | currently | | file | + | transmitting | | Report Remote refused | + | | | file being | + | | | transmitted | + | | | Set TxState to TxGNF | + |--------------------+--------------------+-----------------------| + | M_GOT file that is | File is in | Finalize file | + | not currently | PendingFiles list | Report file has been | + | transmitting | | sent | + | | | Remove file from the | + | | | PendingFiles list | + | |--------------------+-----------------------| + | | File is not in | Ignore frame | + | | PendingFiles | | + |--------------------+--------------------+-----------------------| + | M_SKIP file that | none | Close file (do not | + | is currently | | finalize, we will | + | transmitting | | send it later, not in | + | | | current session) | + | | | Report remote will | + | | | accept this file | + | | | later | + | | | Set TxState to TxGNF | + |--------------------+--------------------+-----------------------| + | M_SKIP file that | none | Report remote will | + | is not currently | | accept this file | + | transmitting | | later | + | | | Remove file from | + | | | PendingPiles, if | + | | | exists there | + +-----------------------------------------------------------------+ + + 6.3 Session Termination + ----------------------- + + A session may be terminated in any of the following cases: + + should be deemed aborted due to a fatal error. + should be deemed aborted due to non-fatal error typically + because of temporary lack of resources to proceed with the + session. + * all the files have been sent + * we have received M_EOB from the remote side (there are no + more files for us), + * we have received acknowledgements for all the files sent, + * we have received all the files re-requested by M_GET, + In this case, the session should be deemed successfully + completed. + + A session termination itself is not a protocol stage. Mailer may + terminate a session at any time simply by issuing disconnect + (shutdown) command to the underlying transport layer, provided any + of the three conditions above are met. Mailer MUST take all proper + steps to provide a graceful shutdown of the transport layer, as it + is the transport layer that is responsible for all the data + transmitted by one side to be received by another before + disconnection, provided that shutdown of the transport layer + protocol was successful. + +7. Recommended Protocol Extensions +---------------------------------- + + This section documents already implemented and proposed extensions + for the binkp/1.0. These extensions are purely optional and are + included here for the sake of compatibility with future + implementations. + + Sides indicate supported protocol extensions by sending M_NUL + frame(s) with "OPT list_of_extensions" string, where + list_of_extensions is a space separated list of supported protocol + extensions. Whenever multiple M_NUL "OPT ..." frames are received + during the session, they SHOULD augment the current list of + extensions rather than replace it, unless specifically stated + otherwise for a particular option. + + Mailer SHOULD NOT use any extension unless exactly sure that this + extension is supported by the remote. Mailer SHOULD use M_NUL "OPT + ..." to indicate supported options. Other methods for indicating + supported extensions are allowed as long as the provide full + backwards compatibility. + + 7.1 Non-reliable Mode + --------------------- + + Non-reliable mode solves the problem with frequently aborted + connections when the sides can not successfully complete file + transfer before connection is broken. In this case, if the + transmitting side starts retransmission from offset 0, performance + degrades as by the time it receives M_GET from the remote, network + buffers are already full and by the time they are freed for + retransmission from requested offset, the connection might go down + again. + + In order to circumvent this problem, a mailer can request the + remote to enter non-reliable mode by sending a M_NUL "OPT NR" frame + at any time during the session. After the remote acknowledges it by + sending an M_NUL "OPT NR" frame indicating that the option is + supported, both sides can assume that they are in non-reliable + mode. + + When session is in non-reliable mode, the transmitting side may + send -1 for the offset value in M_FILE command. If it does so, it + should wait for the M_GET frame from the receiving side that + explicitly specifies file offset and start transmitting file data + from this offset. If the receiving side has indicated that it + supports non-reliable mode by sending M_NUL "OPT NR" frame, it must + recognize -1 as the file offset in M_FILE command as an explicit + request for the file offset and transmit an appropriate M_GET frame + as soon as possible. + + It should be understood that this option degrades performance over + regular quality connections and it should be used only if + absolutely necessary. + + 7.2 Multiple Batch Mode + ----------------------- + + The session is in MB mode if both sides set "MB" flag in any of + M_NUL "OPT" packets exchanged before sending of M_OK/M_PWD packets. + + In MB mode both sides restart session from RxDone into InitTransfer + state if there were any command packets sent or received by any + side between starting at InitTransfer and exchanging of M_EOB by + the sides (RxDone state). Otherwise, the session terminates as + usual. + + Multiple batches mode is intended to handle WaZOO [FTS-0006] file + requests. If there were any WaZOO request files transferred in a + batch, sides MAY process them and send resulting files in the next + batch. Mailers MAY also generate list of files to send in + additional batches by other techniques -- including rescanning of + their spools or processing of other magic files transferred before + in the same session. + + 7.3 Multiple Passwords Mode + --------------------------- + + Multiple password mode allows to specify different passwords for + the different addresses of the remote. + + Originating side identifies it's multipassword capabilities by + sending M_NUL "OPT MPWD" during session setup stage before sending + any M_ADR commands and waits for response from the answering side. + + If answering side responds with the M_NUL "OPT MPWD", then it + supports multiply passwords too. Answering side also always + responds with it's own address list: M_ADR "adr1 adr2 adr3 ...". If + M_NUL "OPT MPWD" was not received prior to the first M_ADR command, + originating side should assume that the remote does not support + multiple password mode and send a single password (if any) for one + of the addresses of the remote. + + If the MPWD option was indicated by the answering side, originating + side now may send M_PWD "pwd1 pwd2 pwd3 ..." with the number of + entries in space separated password list equivalent to the number + of addresses presented by the answering side. If there is no + password for a particular address, it must send '-' character as a + placeholder. + + If the passwords presented are consistent, answering side must + acknowledge successful authentication by sending M_OK command. + + 7.4 Keyed Hashing Challenge-Response Authentication Mechanism + ------------------------------------------------------------- + + 7.4.1 Overview + -------------- + + Challenge-Response Authentication Mechanism (CRAM) allows to avoid + passing cleartext, reusable passwords across the network. Since it + utilizes Keyed-Hashing digests [Keyed], it does not require + password to be stored in the clear on the Mailer's media, allowing + storage of the intermediate results which are known as "contexts". + + Providing binkp-mailer is capable of [Keyed] digest calculation and + conversion of a byte array to a hexadecimal string and back, + implementation of CRAM is easily achieved by slightly modifying the + state machine. + + 7.4.2 Sequence of Steps + ----------------------- + + CRAM adds an additional synchronization step to binkp protocol. The + description of this step follows: + + the Originating side, encoded to a hexadecimal string. + hexadecimal string, and a password to produce a digest by + applying the keyed Hashing algorithm from [Keyed] where the key + is the password and the digested text is the challenge data. + digest provided. If the digest is correct, the answering side + should consider the Originating side authenticated and responds + appropriately. + + Similar technique is used in [IMAP-AUTH]. + + 7.4.3 Generating and Transmitting Challenge Data + ------------------------------------------------ + + Size and contents of challenge data are implementation-dependent, + but it SHOULD be no smaller than 8 bytes and no bigger than 64 + bytes. Answering side SHOULD never generate the same challenge + data. + + Instead of generating a long challenge data, answering side MAY use + a hash function to shorten it. In calculation of a challenge data + answering side MAY also use connection/line number, caller's IP + address, current time, etc. + + Answering side transmits challenge data in the very first M_NUL + message, in the following way: + + M_NUL "OPT [othropt] CRAM-lsthf-cde [othropt]" + + lsthf is a list of aliases of supported hash functions, delimited + by slash characters. The list begins with alias of the most + preferred and ends with alias of the least preferred hash function. + + Currently defined aliases are: MD5 for [MD5] and SHA1 for [SHA-1]. + + cde is the challenge data encoded to hexadecimal string, Lower-case + ASCII characters MUST be used for encoding, but Mailer SHOULD also + accept upper-case characters. The length of the string MUST be + even, and the leading zeros MUST NOT be trimmed. + + 7.4.4 Producing and Transmitting a Digest + ----------------------------------------- + + Originating side responds with: + + M_PWD "CRAM-chosenhf-khde [othropt]" + + where chosenhf is the alias of the chosen hash function and khde is + the keyed hashed digest, encoded to a hexadecimal string. + + According to [IMAP-AUTH], keyed hashed digest is produced by + calculating + + HASH((secret XOR opad), HASH((secret XOR ipad), challengedata)) + + where HASH is chosen hash function, ipad and opad are 36 hex and 5C + hex (as defined in [Keyed]) and secret is a password null-padded to + a length of 64 bytes. If the password is longer than 64 bytes, the + hash-function digest of the password is used as an input (16-byte + for [MD5] and 20-byte for [SHA-1]) to the keyed hashed calculation. + + 7.4.6 Indicating CRAM Capabilities + ---------------------------------- + + Answering side MUST send + + M_NUL "OPT [othropt] CRAM-lsthf-cde [othropt]" + + as a very first M_NUL message if it supports CRAM. + + It MAY send other non-M_NUL messages before though. Current + specification doesn't define any such non-M_NUL message, they are + reserved for protocol extension. + + Originating side MUST be ready to receive non-M_NUL before M_NUL in + a CRAM session. Binkp state machine MUST ignore any received + message of unknown type in order to be compatible with future + extensions. + + If an originating side receives a first message that is a M_ADR or + a M_NUL message that is not + + M_NUL "OPT [othropt] CRAM-lsthf-cde [othropt]" + + it MUST decide that the answering side doesn't support CRAM and MAY + either disconnect or use old password exchange. If the sides have + no any compatible hash function, originator may also either + disconnect or use old password exchange. If an originating side + decides to disconnect, it SHOULD send M_ERR frame with a proper + explanation before disconnecting. + + When parsing M_NUL "OPT ..." string (coming from the answering + side), originating side first splits it by using space delimiter to + get a list of options, and then if an option begins with + "CRAM-lsthf-", takes the remaining substring as a + hexadecimal-encoded challenge data. + + 7.4.7 Example of Frame Exchange During CRAM Authentication + ---------------------------------------------------------- + + (Password here is tanstaaftanstaaf) + + Originating : + send M_NUL messages + and M_ADR + wait for first M_NUL message + + Answering : + send M_NUL "OPT ND CRAM-SHA1/MD5-f0315b074d728d483d6887d0182fc328" + and other messages + wait for M_PWD + + Originating : + M_PWD "CRAM-MD5-56be002162a4a15ba7a9064f0c93fd00" + + Answering : + M_OK and continue session + + 7.4.8 Notes on Hash Function Algorithms + --------------------------------------- + + [MD5] and [SHA-1] are the most widely used cryptographic hash + functions. [MD5] has been shown to be vulnerable to collision + search attacks [Dobb]. This attack and other currently known + weaknesses of [MD5] do not compromise the use of [MD5] within CRAM + as specified in this document (see [Dobb]); however, [SHA-1] + appears to be a cryptographically stronger function. To this date, + [MD5] can be considered for use in CRAM for applications where the + superior performance of [MD5] is critical. In any case, + implementors and users need to be aware of possible cryptanalytic + developments regarding any of these cryptographic hash functions, + and the eventual need to replace the underlying hash function. + +8. License +---------- + + You can implement binkp protocol in your software as long as you + agree to the following conditions: + + other way. You shall include the author(s) of the protocol in + your copyright statement for the software. + versions. Binkp allows development of the new capabilities + without compromising interoperability with previous versions. + Therefore, it is important that future developments of the + protocol are not pursued in different directions by different + people. If you have any suggestions regarding future + developments of the protocol, make a reasonable effort to + contact the author(s), so that the development efforts can + coordinated in a way advantageous for everybody. + future binkp specifications, you shall reference to it as a + "binkp variation" or "binkp derived". + + Remember that you may use, implement or utilize binkp, it's + description or any other associated texts or documentations at your + own risk, without any warranty, without even the implied warranty + of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE + + Binkp author: Dima Maloff. + +9. Glossary +----------- + + Many entries in this glossary are provided courtesy of Butterfly + Glossary of Internet and Data Communication terms and RFC-1983. + + connection-oriented + Data communication method in which communication proceeds + through three well-defined phases: connection + establishment, data transfer, connection release. TCP is a + connection-oriented protocol. + + data link layer + The OSI layer that is responsible for data transfer across + a single physical connection, or series of bridged + connections, between two Network entities. + + flow control + A technique for ensuring that a transmitting entity does + not overwhelm a receiving entity. + + HDLC + (High level Data Link Control). Popular ISO standard + bit-oriented, data link layer protocol derived from SDLC. + HDLC specifies an encapsulated method of data on + synchronous serial data links. + + IP + (Internet Protocol). The Internet Protocol, defined in STD + 5, RFC 791, is the network layer for the TCP/IP Protocol + Suite. It is a connectionless, best-effort packet switching + protocol. + + network layer + Layer 3 of the OSI reference model. Layer 3 is the layer at + which routing, addressing and connection management take + place. + + OSI (Open Systems Interconnection) Reference Model + A seven-layer structure designed to describe computer + network architectures and the way that data passes through + them. This model was developed by the ISO (International + Organization for Standardization) in 1978 to clearly define + the interfaces in multivendor networks, and to provide + users of those networks with conceptual guidelines in the + construction of such networks. + + port + A port is a transport layer demultiplexing value. Each + application has a unique port identifier associated with + it. + + physical layer + The OSI layer that provides the means to activate and use + physical connections for bit transmission. In plain terms, + the Physical Layer provides the procedures for transferring + a single bit across a Physical Media. + + Quality of Service + (Also QoS). A measure of performance for a transmission + system that reflects its transmission quality and + availability of service. + + reliable transmission + a type of transport service that: + * recovers from errors by retransmitting errored frames + * delivers frames in correct sequence (also known as + stream-oriented) + * usually is used in connection-oriented mode + + session layer + Layer 5 of the OSI reference model. Coordinates session + activity between applications, including application-layer + error control, dialog control, and remote procedure calls. + + sliding window flow control + Method of flow control in which a receiver gives + transmitter permission to transmit data until a window is + full. When the window is full, the transmitter must stop + transmitting until the receiver advertises a larger window. + + socket + Software structure operating as a communications and point + within a network device. + + TCP + Transmission Control Protocol. An Internet Standard + transport layer reliable protocol defined in STD 7, RFC + 793. It is connection-oriented and stream-oriented. + + TCP/IP protocol suite + Transmission Control Protocol over Internet Protocol. This + is a common shorthand which refers to the suite of + transport and application protocols which runs over IP. + + transport layer + Layer 4 of the OSI reference model. The transport layer is + responsible for reliable network communication between end + nodes. It implements flow and error control and often uses + virtual circuits to ensure reliable data delivery. + + unixtime + number of seconds elapsed since 00:00:00 UTC, Jan. 1, 1970. + +10. References +-------------- + + [FTS-0001] + A Basic FidoNet(r) Technical Standard, Revision 16. Randy + Bush, Pacific Systems Group, September 30, 1995. FTS-0001. + + [FTS-0006] + YOOHOO and YOOHOO/2U2. The netmail handshake used by + Opus-CBCS and other intelligent Fidonet mail handling + packages. Version 002, Vince Perriello. 30-Nov-1991. + FTS-0006. + + [FSC-0039] + M.Howard, A type-2 packet extension proposal, FSC-0039 + Version 4, 29-Sep-1990. FSC-0039. + + [FSC-0045] + T.Henderson, Proposed new packet header, Version 1, + 17-Apr-1990. FSC-0045. + + [FSC-0048] + J.Vroonhof, Proposed type-2 packet extension, Version 2, + 21-Oct-1990. FSC-0048. + + [FSC-0081] + M.Staldal, A type-3 packet proposal, Version 1, + 01-Mar-1995. FSC-0081. + + [EMSI] + Joaquim H. Homrighausen, EMSI/IEMSI protocol definition. + May 3, 1991. FSC-0056. + + [FTA-1006] + Key words to indicate requirement levels, Fidonet Technical + Standards Committee administrative. FTA-1006. + + [Halsall95] + Data Communications, Computer Networks and Open Systems, F. + Halsall, 4th ed., Addison-Wesley, 1995, ISBN 0-201-42293-X. + + [Dobb] + H. Dobbertin, "The Status of MD5 After a Recent Attack", + RSA Labs' CryptoBytes, Vol. 2 No. 2, Summer 1996. + + [MD5] + Rivest, R., "The MD5 Message-Digest Algorithm", RFC 1321, + April 1992. + + [SHA-1] + NIST, FIPS PUB 180-1: Secure Hash Standard, April 1995. + + [Keyed] + Krawczyk, Bellare, Canetti, "HMAC: Keyed-Hashing for + Message Authentication", RFC 2104, February 1997. + + [IMAP-AUTH] + Klensin, "IMAP/POP AUTHorize Extension for Simple + Challenge/Response", RFC 2195, September, 1997 + + [RFC822] + Standard for the format of ARPA Internet text messages. D. + Crocker. Aug-13-1982. RFC 822, STD0011. + + [UTF8] + UTF-8, a transformation format of ISO 10646. F. Yergeau. + January 1998, RFC 2279. + + [ISO10646] + ISO/IEC 10646-1:1993. International Standard -- Information + technology -- Universal Multiple-Octet Coded Character Set + (UCS) -- Part 1: Architecture and Basic Multilingual Plane. + Five amendments and a technical corrigendum have been + published up to now. UTF-8 is described in Annex R, + published as Amendment 2. + +11. Acknowledgements +-------------------- + + This document is partially based on extracts from RFCs and FTSC + publications too numerous to be acknowledged individually. + + The authors would like to thank Joaquim Homrighausen, Kim 'B' + Heino, Rune Johansen and many others for fruitful discussions and + suggestions regarding protocol design and specifications. + +A. Author Contact Data +----------------------- + + Dima Maloff + Fidonet: 2:5020/128 + E-mail: maloff@corbina.net + WWW: http://www.corbina.net/~maloff/ + + Maxim Masiutin + Fidonet: 2:469/84 + E-mail: max@ritlabs.com + WWW: http://www.ritlabs.com/ + + Nick Soveiko + Fidonet: 2:5030/23.101 + E-mail: nsoveiko@doe.carleton.ca + WWW: http://www.doe.carleton.ca/~nsoveiko/ + +B. History +---------- + + Rev.1, 19990611: + First release + + Rev.2, 19991008: + * Added new topic: "Definitions"; + * clarified the following topics: "Frame Format", + "Protocol Commands and Their Arguments", "Keyed + Hashing Challenge-Response Authentication Mechanism"; + * added "unixtime" item to Glossary topic; + * corrected links in References topic. + + Rev.3, 20000731: + * Table 6 in section 6.2, File transfer stage has been + rewritten: TheListOfSendFiles replaced by PendingFiles + which was defined earlier. introduced definition of + KnownFiles list. new ProcessTheQueue routine w/respect + to handling M_GET command + * Section 5.2, File Name Issues was rewritten to clearly + define safe and unsafe characters in filenames. + * Section 5.3, Non-ASCII Characters was rewritten to + clarify Unicode usage. + * Expanded descriptions for M_NUL "TIME ...", M_NUL "TRF + ...", added description of M_NUL "PHN ..." and M_NUL + "OPM ..." frames in section 5.4 Binkp Commands. + * IANA port number added to section 3, Protocol + Overview. + * M_GET description in section 5.4, Binkp Commands was + rewritten for clarity. + * M_BSY "RETRY ..." option documented. + * Minor edits throughout the document to improve + readability. ++Go Back + + diff --git a/html/ftsc/fta-1005.html b/html/ftsc/fta-1005.html index 0cd34d52..43011f1e 100755 --- a/html/ftsc/fta-1005.html +++ b/html/ftsc/fta-1005.html @@ -1,268 +1,269 @@ - - -
-********************************************************************** -FTSC FIDONET TECHNICAL STANDARDS COMMITTEE -********************************************************************** - -Publication: FTA-1005 -Revision: 3 -Title: FTSC Product Codes -Author: Administrator -Revision Date: 22 March 1998 -Expiry Date: 22 March 1998 ----------------------------------------------------------------------- -Contents: - 1. Format of product code list - 2. Application for a product code ----------------------------------------------------------------------- - - -1. Format of product code list ------------------------------- - - The FTSC publishes a list of all product codes issued. The filename - is FTSCPROD.nnn, where nnn is a number which increases with each - revision. - - The list is an ASCII text file with one line per product. Each line - contains a number of fields, delimited by commas. Some fields may - contain more than one value. In this case, the different values are - delimited with a forward slash ('/'). Spaces in fields are replaced - with underscores ('_'). Fields are not case-sensitive. - - These are the fields which are currently defined: - - code,name,platform,type,contact,netaddr[,assigned[,updated]] - - code The product code. 4 digits hexadecimal. - name Product name. - platform Platforms(s) supported. - type Type(s) of product. - contact Name of contact person. - netaddr FidoNet address of contact person. - assigned Date the product code was originally assigned. - updated Date of last update of the product code data. - - Platforms - --------- - See the list for examples. (Will be specified more firmly later). - - Product types - ------------- - Mailer A mailer is a product that exchanges mail with FTS-0001, - FTS-0006, EMSI or other protocols that include a product - code field. - Packer A packer is a product that creates .PKT files. - - Dates - ----- - The format is YYYYMMDD. A date field may also be blank. - - If you write software which is dependant on this format, please make - it tolerant of additional fields after these for upwards - compatibility. - - -2. Application for a product code ---------------------------------- - - FidoNet products without an allocated product code which either - create Type-2 packets, or negotiate FTS-0001 sessions must use a - product code FEh (254d) in Type-2 compatible packet headers. This - code as been reserved for that purpose (use by product without a - product code). The product code FFh (255d) has been reserved to - indicate that the product code is stored elsewhere in the packet - header at an as yet unallocated offset. - - The FTSC is currently working on an update to the Type-2 packet - specification, to allow 16-bit codes while keeping full backward - compatibility with 8-bit codes (something which the current Type-2 - proposals in the FSC's are not). Until the specification is ready, - 16-bit codes are issued with the low byte set to FFh (255d). - - Below is an application form for an FTSC product code, which is used - to identify your product when used in FidoNet, and providing a means - by which you can be contacted should your product be found - responsible for problems encountered during its use. The issuance of - this product code in no way implies authorisation or approval of - your product for use on the network, only provides a means of ready - identification. - - This application should be completed and submitted for only `real' - and completed products which will be used by FidoNet systems. If you - are currently developing a product which is not yet ready for use on - the network out of experimental stage, use product code 0 (zero) - which is, by convention, reserved for this purpose. - - Please answer the questions as accurately and completely as - possible. We need to know what will actually be used on the net, so - describe only the current product, and leave future features and - plans for the comments section. - - Send the completed form to the administrator of the FidoNet - Technical Standards Committee. Please see FTA-1003 for addresses. - - We hope that you will take the time to revise your answers by - submitting updates as your product changes. A summary of the - information you provide is compiled into a list of all product codes - published and updated periodically by the FTSC called - "FTSCPROD.nnn". - - -A. Application Form -------------------- - ---- Cut along here --------------------------------------------------- - -FTSC Product Code Application -============================= - -Type of application -------------------- - -1. Mark whichever is appropriate: - - ____ New product application - ____ Update existing product for existing product code ____ - - -2. If this is an update, please briefly state the nature of the - update (change author's node number, change of product name, etc.) - - __________________________________________________________________ - __________________________________________________________________ - __________________________________________________________________ - __________________________________________________________________ - - -Product information -------------------- - -3. What is the name of the product and the current version name or - number? - - __________________________________________________________________ - - -4. What is the name, FidoNet node, and postal address, and voice - number of the person(s) or organization responsible for the - product? Where should inquiries be directed and who should be - contacted if the product is thought to cause errors on the - network? - - __________________________________________________________________ - __________________________________________________________________ - __________________________________________________________________ - __________________________________________________________________ - __________________________________________________________________ - - -5. What operating systems does it currently run on? - - __________________________________________________________________ - - -6. Does the product contain a 'mailer'? E.g. the package transmits - mail to other FidoNet systems and can fall back to FTS-0001, - though it may handle other protocols. - - __________________________________________________________________ - - -7. If the answer to question (6) is yes, what additional protocols - other than FTS-0001 does the product support? Refer to the - specific FTSC document which details this protocol, if any. - - __________________________________________________________________ - __________________________________________________________________ - __________________________________________________________________ - - - With what additions or restrictions? - - __________________________________________________________________ - - -8. Is the package capable of servicing file requests, and if so, - 'Bark' style (FTS-0008) and/or WaZOO .REQ (FTS-0006) or both? - - __________________________________________________________________ - - - With what additions or restrictions? - - __________________________________________________________________ - - -9. Is your software capable of functioning as a Continuous Mail - system? i.e. nodes running it might be marked as such in the - FidoNet nodelist? - - __________________________________________________________________ - - -10. How is the product distributed? - - Public Domain ____________ Shareware ______________ - Commercial ____________ Other ______________ - Object code ____________ Source code ______________ - - Comments: ________________________________________________________ - __________________________________________________________________ - __________________________________________________________________ - - -11. Please give additional comments to describe your product. - - __________________________________________________________________ - __________________________________________________________________ - __________________________________________________________________ - __________________________________________________________________ - __________________________________________________________________ - __________________________________________________________________ - __________________________________________________________________ - ---- Cut along here --------------------------------------------------- - - -B. Acknowledgements -------------------- - - The application form was inspired by one originally published in - FSC-0022 and later FSC-0090, originally by Bob Hartman, Jim Long, - and Randy Bush and modified by Rick Moore and David Nugent. - - -C. History ----------- - - Rev.1, 19970407: First non-draft release. Author Adrian Walker. - Rev.2, 19971229: Author changed to Administrator. Reformatted - document slightly. Changed all dates in the lists - to 4 digit centuries. Added information about - status of 16-bit product codes. - Rev.3, 19980322: Moved the product code list out of the document and - into a separate list, FTSCPROD.nnn. Added an - application form. Revised text about 16 bit codes. - - -********************************************************************** -- - Go Back - - - - + + + +
+********************************************************************** +FTSC FIDONET TECHNICAL STANDARDS COMMITTEE +********************************************************************** + +Publication: FTA-1005 +Revision: 3 +Title: FTSC Product Codes +Author: Administrator +Revision Date: 22 March 1998 +Expiry Date: 22 March 1998 +---------------------------------------------------------------------- +Contents: + 1. Format of product code list + 2. Application for a product code +---------------------------------------------------------------------- + + +1. Format of product code list +------------------------------ + + The FTSC publishes a list of all product codes issued. The filename + is FTSCPROD.nnn, where nnn is a number which increases with each + revision. + + The list is an ASCII text file with one line per product. Each line + contains a number of fields, delimited by commas. Some fields may + contain more than one value. In this case, the different values are + delimited with a forward slash ('/'). Spaces in fields are replaced + with underscores ('_'). Fields are not case-sensitive. + + These are the fields which are currently defined: + + code,name,platform,type,contact,netaddr[,assigned[,updated]] + + code The product code. 4 digits hexadecimal. + name Product name. + platform Platforms(s) supported. + type Type(s) of product. + contact Name of contact person. + netaddr FidoNet address of contact person. + assigned Date the product code was originally assigned. + updated Date of last update of the product code data. + + Platforms + --------- + See the list for examples. (Will be specified more firmly later). + + Product types + ------------- + Mailer A mailer is a product that exchanges mail with FTS-0001, + FTS-0006, EMSI or other protocols that include a product + code field. + Packer A packer is a product that creates .PKT files. + + Dates + ----- + The format is YYYYMMDD. A date field may also be blank. + + If you write software which is dependant on this format, please make + it tolerant of additional fields after these for upwards + compatibility. + + +2. Application for a product code +--------------------------------- + + FidoNet products without an allocated product code which either + create Type-2 packets, or negotiate FTS-0001 sessions must use a + product code FEh (254d) in Type-2 compatible packet headers. This + code as been reserved for that purpose (use by product without a + product code). The product code FFh (255d) has been reserved to + indicate that the product code is stored elsewhere in the packet + header at an as yet unallocated offset. + + The FTSC is currently working on an update to the Type-2 packet + specification, to allow 16-bit codes while keeping full backward + compatibility with 8-bit codes (something which the current Type-2 + proposals in the FSC's are not). Until the specification is ready, + 16-bit codes are issued with the low byte set to FFh (255d). + + Below is an application form for an FTSC product code, which is used + to identify your product when used in FidoNet, and providing a means + by which you can be contacted should your product be found + responsible for problems encountered during its use. The issuance of + this product code in no way implies authorisation or approval of + your product for use on the network, only provides a means of ready + identification. + + This application should be completed and submitted for only `real' + and completed products which will be used by FidoNet systems. If you + are currently developing a product which is not yet ready for use on + the network out of experimental stage, use product code 0 (zero) + which is, by convention, reserved for this purpose. + + Please answer the questions as accurately and completely as + possible. We need to know what will actually be used on the net, so + describe only the current product, and leave future features and + plans for the comments section. + + Send the completed form to the administrator of the FidoNet + Technical Standards Committee. Please see FTA-1003 for addresses. + + We hope that you will take the time to revise your answers by + submitting updates as your product changes. A summary of the + information you provide is compiled into a list of all product codes + published and updated periodically by the FTSC called + "FTSCPROD.nnn". + + +A. Application Form +------------------- + +--- Cut along here --------------------------------------------------- + +FTSC Product Code Application +============================= + +Type of application +------------------- + +1. Mark whichever is appropriate: + + ____ New product application + ____ Update existing product for existing product code ____ + + +2. If this is an update, please briefly state the nature of the + update (change author's node number, change of product name, etc.) + + __________________________________________________________________ + __________________________________________________________________ + __________________________________________________________________ + __________________________________________________________________ + + +Product information +------------------- + +3. What is the name of the product and the current version name or + number? + + __________________________________________________________________ + + +4. What is the name, FidoNet node, and postal address, and voice + number of the person(s) or organization responsible for the + product? Where should inquiries be directed and who should be + contacted if the product is thought to cause errors on the + network? + + __________________________________________________________________ + __________________________________________________________________ + __________________________________________________________________ + __________________________________________________________________ + __________________________________________________________________ + + +5. What operating systems does it currently run on? + + __________________________________________________________________ + + +6. Does the product contain a 'mailer'? E.g. the package transmits + mail to other FidoNet systems and can fall back to FTS-0001, + though it may handle other protocols. + + __________________________________________________________________ + + +7. If the answer to question (6) is yes, what additional protocols + other than FTS-0001 does the product support? Refer to the + specific FTSC document which details this protocol, if any. + + __________________________________________________________________ + __________________________________________________________________ + __________________________________________________________________ + + + With what additions or restrictions? + + __________________________________________________________________ + + +8. Is the package capable of servicing file requests, and if so, + 'Bark' style (FTS-0008) and/or WaZOO .REQ (FTS-0006) or both? + + __________________________________________________________________ + + + With what additions or restrictions? + + __________________________________________________________________ + + +9. Is your software capable of functioning as a Continuous Mail + system? i.e. nodes running it might be marked as such in the + FidoNet nodelist? + + __________________________________________________________________ + + +10. How is the product distributed? + + Public Domain ____________ Shareware ______________ + Commercial ____________ Other ______________ + Object code ____________ Source code ______________ + + Comments: ________________________________________________________ + __________________________________________________________________ + __________________________________________________________________ + + +11. Please give additional comments to describe your product. + + __________________________________________________________________ + __________________________________________________________________ + __________________________________________________________________ + __________________________________________________________________ + __________________________________________________________________ + __________________________________________________________________ + __________________________________________________________________ + +--- Cut along here --------------------------------------------------- + + +B. Acknowledgements +------------------- + + The application form was inspired by one originally published in + FSC-0022 and later FSC-0090, originally by Bob Hartman, Jim Long, + and Randy Bush and modified by Rick Moore and David Nugent. + + +C. History +---------- + + Rev.1, 19970407: First non-draft release. Author Adrian Walker. + Rev.2, 19971229: Author changed to Administrator. Reformatted + document slightly. Changed all dates in the lists + to 4 digit centuries. Added information about + status of 16-bit product codes. + Rev.3, 19980322: Moved the product code list out of the document and + into a separate list, FTSCPROD.nnn. Added an + application form. Revised text about 16 bit codes. + + +********************************************************************** ++ +Go Back + + + + diff --git a/html/ftsc/fts-0001.html b/html/ftsc/fts-0001.html index 42085282..1268ad46 100755 --- a/html/ftsc/fts-0001.html +++ b/html/ftsc/fts-0001.html @@ -1,1260 +1,1261 @@ - - -
-Document: FTS-0001 -Version: 016 -Date: 30-Sep-95 - - - - - A Basic FidoNet(r) Technical Standard -| Revision 16 - Formerly known as FSC001, FSC-0001 -| Randy Bush, Pacific Systems Group -| September 30, 1995 - - - - -Status of this document: - - This FTS (FidoNet(r) Technical Standard) specifies a standard for - the FidoNet community. FidoNet nodes are expected to adopt and implement - this standard. Distribution is subject to the restrictions stated in the - copyright paragraph below. - - Fido and FidoNet are registered marks of Tom Jennings and Fido Software. - - Copyright 1986-95, Randy Bush. All rights reserved. A right to - distribute only without modification and only at no charge is granted. - Under no circumstances is this document to be reproduced or distributed - as part of or packaged with any product or other sales transaction for - which any fee is charged. Any and all other reproduction or excerpting - requires the explicit written consent of the author. - - - A. Introduction - - FidoNet has grown beyond most peoples' fantasies, and new FidoNet - implementations are appearing regularly. Unfortunately, the scattered - nature of the documentation and absence of clear testing procedures have - made implementation difficult. FidoNet, in its desire to promote and - encourage FidoNet implementations, suggested a project to create a - technical standard for FidoNet. The author did not design or specify - the data formats or protocols, only attempted to document them. - - This document defines the data structures and communication protocols - which a FidoNet implementation must provide. The implementor of FidoNet - compatible systems is the intended audience of this document. - - The layered metaphor of the ISO Open Systems Interface reference model - has been used to view FidoNet from a standard perspective. As with most - prospective ISO/OSI descriptions, FidoNet does not always make this - easy. - - The content of this document was gleaned from the references given at - the end. - - Please direct technical comments and errata to -| Randy Bush randy@psg.com -| Pacific Systems Group - 9501 S.W. Westhaven Drive - Portland, Oregon US-97225 -| - - 1. Basic Requirements for a FidoNet Implementation - - Compatibility is a set of abilities which, when taken as a whole, make - it safe to list a net or node in the FidoNet nodelist. In other words, - if another node should attempt contact, does it have a reasonable - chance of successful communication? This is a social obligation, as - the calling system pays money for the attempt. Conversely, an - implementation should be able to successfully contact other systems, - as life is not a one-way street. - - A FidoNet implementation must be able to call other nodes and transfer - messages and files in both directions. This includes pickup and poll. - A FidoNet implementation must be able to accept calls from other nodes - and transfer messages and files in both directions. This includes - pickup. - - FidoNet implementations must be able to receive and process the FidoNet - format nodelist, and transfer nodelists to other nodes. A companion - document, FTS-0005, defines the FidoNet format nodelist and how to - interpret and process it. - - A FidoNet implementation must route messages which do not have files - attached through net hosts as shown in a FidoNet format nodelist. - - - 2. Levels of Compliance - - This documents represents the most basic FidoNet implementation. A - future document will define well tested extensions which are optional - but provide sufficient additional function that implementors should - seriously consider them. SEAdog(tm), from System Enhancement - Associates, is an excellent example of such an extended FidoNet - implementation. - - - 3. The ISO/OSI Reference Model (cribbed from "Protocol Verification via - Executable Logic Specifications", D. P. Sidhu, in Rudin & West) - - In the ISO/OSI model, a distributed system consists of entities that - communicate with each other according to a set of rules called a - protocol. The model is layered, and there are entities associated - with each layer of the model which provide services to higher layers - by exchanging information with their peer entities using the services - of lower layers. The only actual physical communication between two - systems is at the lowest level. - - Several techniques have been used in the specification of such - protocols. A common ingredient in all techniques is the notion of the - extended finite state automata or machine. Extensions include the - addition of state variables for the storing of state information about - the protocol. The state of an automation can change as a result of - one of the following events: - - o Request from an upper network layer for service - - o Response to the upper layer - - o Request to the lower network layer to perform a service - - o Response from the lower layer - - o Interaction with the system and environment in which the protocol is - implemented (e.g. timeouts, host operating system aborts, ...) - - A protocol specification, in a large part, consists of specifying - state changes in automata which model protocol entities and in - describing the data which they exchange. - - For historical reasons, the term packet is used in FidoNet to - represent a bundle of messages, as opposed to the more common use as a - unit of communication, which is known as a block in FidoNet. - - - 4. Data Description - - A language specific notation was avoided. Please help stamp out - environmental dependencies. Only you can prevent PClone market - dominance. Don't panic, there are rectangular record layouts too. - - (* non-terminals *) - UpperCaseName - to be defined further on - - (* literals *) - "ABC" - ASCII character string, no termination implied - nnH - byte in hexadecimal - - (* terminals *) - someName - 16-bit integer, low order byte first (8080 style) - someName[n] - field of n bytes - someName[.n] - field of n bits - someName(n) - Null terminated string allocated n chars (incl Null) - someName{max} - Null terminated string of up to max chars (incl Null) - - (* punctuation *) - a b - one 'a' followed by one 'b' - ( a | b ) - either 'a' or 'b', but not both - { a } - zero or more 'a's - [ b ] - zero or one 'b' - (* comment *) - ignored - - (* predeclared constant *) - Null = 00H - - - - 5. Finite State Machine Notation - - .-----+----------+-------------------------+-------------------------+-----. - |State| State | Predicate(s) | Action(s) | Next| - | # | Name | | | St | - |-----+----------+-------------------------+-------------------------+-----| - | fnn*| | | | | - `-----+----------+-------------------------+-------------------------+-----' - - State # - Number of this state (e.g. R13). - f - FSM initial (Window, Sender, Receiver, ...) - nn - state number - * - state which represents a lower level protocol which - is represented by yet another automation. - - State Name - Descriptive name of this state. - - Predicate(s) - Conditions which terminate the state. If predicates are - non-exclusive, consider them ordered. - - Action(s) - Action(s) corresponding to predicate(s) - - Next State - Subsequent state corresponding to predicate(s) - - Ideally, there should be a supporting section for each state which - should give a prose description of the state, its predicates, actions, - etc. So much for ideals. - - - B. Application Layer : the System from the User's View - - The application layer is outside the domain of a FidoNet standard, as it - is the layer that the user's application sees as opposed to what FidoNet - sees. In recent months, there has been sufficient confusion and - discussion about the format of data at this level to warrant the - description of the data structure, the message as it is stored by Fido, - SEAdog, and Rover. - - Perfectly valid FidoNet systems may be implemented whose stored messages - differ greatly from this format. - - - 1. Application Layer Data Definition : a Stored Message - - Stored Message - - Offset - dec hex - .-----------------------------------------------. - 0 0 | | - ~ fromUserName ~ - | 36 bytes | - +-----------------------+-----------------------+ - 36 24 | | - ~ toUserName ~ - | 36 bytes | - +-----------------------+-----------------------+ - 72 48 | | - ~ subject ~ - | 72 bytes | - +-----------------------+-----------------------+ - 144 90 | | - ~ DateTime ~ - | 20 bytes | - +-----------------------+-----------------------+ - 164 A4 | timesRead (low order) | timesRead (high order)| - +-----------------------+-----------------------+ - 166 A6 | destNode (low order) | destNode (high order) | - +-----------------------+-----------------------+ - 168 A8 | origNode (low order) | origNode (high order) | - +-----------------------+-----------------------+ - 170 AA | cost (low order) | cost (high order) | - +-----------------------+-----------------------+ - 172 AC | origNet (low order) | origNet (high order) | - +-----------------------+-----------------------+ - 174 AE | destNet (low order) | destNet (high order) | - +-----------------------+-----------------------+ - 176 B0 | destZone (optional) | destZone (optional) | - +-----------------------+-----------------------+ - 178 B2 | origZone (optional) | origZone (optional) | - +-----------------------+-----------------------+ - 180 B4 | destPoint(optional) | destPoint(optional) | - +-----------------------+-----------------------+ - 182 B6 | origPoint(optional) | origPoint(optional) | - +-----------------------+-----------------------+ - 184 B8 | replyTo (low order) | replyTo (high order) | - +-----------------------+-----------------------+ - 186 BA | Attribute (low order) | Attribute (high order)| - +-----------------------+-----------------------+ - 188 BC | nextReply (low order) | nextReply (high order)| - +-----------------------+-----------------------+ - 190 BE | text | - ~ unbounded ~ - | null terminated | - `-----------------------------------------------' - - Message = fromUserName(36) (* Null terminated *) - toUserName(36) (* Null terminated *) - subject(72) (* see FileList below *) - DateTime (* message body was last edited *) - timesRead (* number of times msg has been read *) - destNode (* of message *) - origNode (* of message *) - cost (* in lowest unit of originator's - currency *) - origNet (* of message *) - destNet (* of message *) - destZone (* of message *) - origZone (* of message *) - destPoint (* of message *) - origPoint (* of message *) - replyTo (* msg to which this replies *) - AttributeWord - nextReply (* msg which replies to this *) - text(unbounded) (* Null terminated *) - - DateTime = (* a character string 20 characters long *) - (* 01 Jan 86 02:34:56 *) - DayOfMonth " " Month " " Year " " - " " HH ":" MM ":" SS - Null - - DayOfMonth = "01" | "02" | "03" | ... | "31" (* Fido 0 fills *) - Month = "Jan" | "Feb" | "Mar" | "Apr" | "May" | "Jun" | - "Jul" | "Aug" | "Sep" | "Oct" | "Nov" | "Dec" - Year = "01" | "02" | .. | "85" | "86" | ... | "99" | "00" - HH = "00" | .. | "23" - MM = "00" | .. | "59" - SS = "00" | .. | "59" - - AttributeWord bit meaning - --- -------------------- - 0 + Private - 1 + s Crash - 2 Recd - 3 Sent - 4 + FileAttached - 5 InTransit - 6 Orphan - 7 KillSent - 8 Local - 9 s HoldForPickup - 10 + unused - 11 s FileRequest - 12 + s ReturnReceiptRequest - 13 + s IsReturnReceipt - 14 + s AuditRequest - 15 s FileUpdateReq - - s - need not be recognized, but it's ok - + - not zeroed before packeting - - Bits numbers ascend with arithmetic significance of bit position. - - - Message Text - - Message text is unbounded and null terminated (note exception below). - - A 'hard' carriage return, 0DH, marks the end of a paragraph, and must - be preserved. - - So called 'soft' carriage returns, 8DH, may mark a previous - processor's automatic line wrap, and should be ignored. Beware that - they may be followed by linefeeds, or may not. - - All linefeeds, 0AH, should be ignored. Systems which display message - text should wrap long lines to suit their application. - - If the first character of a physical line (e.g. the first character of - the message text, or the character immediately after a hard carriage - return (ignoring any linefeeds)) is a ^A (- - Go Back - - - - + + + +, 01H), then that - line is not displayed as it contains control information. The - convention for such control lines is: - o They begin with ^A - o They end at the end of the physical line (i.e. ignore soft s). - o They begin with a keyword followed by a colon. - o The keywords are uniquely assigned to applications. - o They keyword/colon pair is followed by application specific data. - - Current ^A keyword assignments are: -| o TOPT - destination point address - o FMPT - origin point address - o INTL - used for inter-zone address - - - File Specifications - - If one or more of FileAttached, FileRequest, or FileUpdateReq are - asserted in an AttributeWord, the subject{72} field is interpreted as - a list of file specifications which may include wildcards and other - system-dependent data. This list is of the form - - FileList = [ FileSpec { Sep FileSpec } ] Null - - FileSpec = (* implementation dependent file specification. may - not contain Null or any of the characters in Sep. *) - - Sep = ( " " | "," ) { " " } - - - There are deviations from and additions to these specifications - - 1 - Fido does not necessarily terminate the message text with a Null, - but uses an empty line (0DH 0AH 0DH 0AH). Some Fido utilities - use an EOF (1AH). - - 2 - SEAdog zeros the message cost field when building a message. - - 4 - SEAdog uses a different format for dates, e.g. - - DateTime = (* a character string 20 characters long *) - (* SEAdog format Mon 1 Jan 86 02:34 *) - DayOfWk " " DayOfMo " " Month " " Year " " HH ":" MM Null - - DayOfWk = "Mon" | "Tue" | "Wed" | "Thu" | "Fri" | "Sat" | "Sun" - DayOfMo = " 1" | " 2" | " 3" | ... | "31" (* blank fill *) - - - - 2. Application Layer Protocol : Schedules and Events - - At the application level, FidoNet imposes few protocol requirements. - An implementation must automatically originate and receive - node-to-node FidoNet connections. Some implementations do this in - 'windows' or time slots. Routing of messages will usually be - different and customizable for each scheduled window. - - The ability to send to and receive from any FidoNet listed node during - the Zone Mail Hour (eg. 9:00-10:00 UCT in Z1) is considered mandatory. - - Current implementations assemble all data for outbound connections at - the start of a window, and disassemble inbound data at the end of a - window. Due to performance considerations on small machines, this is - considered a valid optimization. Observe that it somewhat inhibits - dynamic routing. - - - C. Presentation Layer : the User from the System's View - - 1. Presentation Layer Data Definition : the Packed Message - - To conserve space and eliminate fields which would be meaningless if - sent (e.g. timesRead), messages are packed for transmission. As this - is a data structure which is actually transferred, its definition is - critical to FidoNet. A packed message has a number of fixed length - fields followed by four null terminated strings. - - While most of the string fields in a stored message are fixed length, - to conserve space strings are variable length when in a packet. All - variable length strings are all Null terminated, including especially - the message text. - - - Packed Message - - Offset - dec hex - .-----------------------------------------------. - 0 0 | 0 | 2 | 0 | 0 | - +-----------------------+-----------------------+ - 2 2 | origNode (low order) | origNode (high order) | - +-----------------------+-----------------------+ - 4 4 | destNode (low order) | destNode (high order) | - +-----------------------+-----------------------+ - 6 6 | origNet (low order) | origNet (high order) | - +-----------------------+-----------------------+ - 8 8 | destNet (low order) | destNet (high order) | - +-----------------------+-----------------------+ - 10 A | Attribute (low order) | Attribute (high order)| - +-----------------------+-----------------------+ - 12 C | cost (low order) | cost (high order) | - +-----------------------+-----------------------+ - 14 E | | - ~ DateTime ~ - | 20 bytes | - +-----------------------+-----------------------+ - 34 22 | toUserName | - ~ max 36 bytes ~ - | null terminated | - +-----------------------+-----------------------+ - | fromUserName | - ~ max 36 bytes ~ - | null terminated | - +-----------------------+-----------------------+ - | subject | - ~ max 72 bytes ~ - | null terminated | - +-----------------------+-----------------------+ - | text | - ~ unbounded ~ - | null terminated | - `-----------------------------------------------' - - Due to routing, the origin and destination net and node of a packet - are often quite different from those of the messages within it, nor - need the origin and destination nets and nodes of the messages within - a packet be homogenous. - - PakdMessage = 02H 00H (* message type, old type-1 obsolete *) - origNode (* of message *) - destNode (* of message *) - origNet (* of message *) - destNet (* of message *) - AttributeWord - cost (* in lowest unit of originator's - currency *) - DateTime (* message body was last edited *) - toUserName{36} (* Null terminated *) - fromUserName{36} (* Null terminated *) - subject{72} (* Null terminated *) - text{unbounded} (* Null terminated *) - - - - - - - - 2. Presentation Layer Protocol : a Mail Window - - .-----+----------+-------------------------+-------------------------+-----. - |State| State | Predicate(s) | Action(s) | Next| - | # | Name | | | St | - |-----+----------+-------------------------+-------------------------+-----| - | W0 | WindTop | 1 end of window reached | reset modem to not answr| exit| - | | | 2 time remains in window| ensure modem can answer | W1 | - |-----+----------+-------------------------+-------------------------+-----| - | W1 | WindIdle | 1 incoming call | | W2 | - | | | 2 receive-only mode | | W0 | - | | | 3 send-only mode | | W3 | - | | | 4 60-180 secs & no call | | W3 | - |-----+----------+-------------------------+-------------------------+-----| - | W2* | WindRecv | | (receive call R0) | W3 | - |-----+----------+-------------------------+-------------------------+-----| - | W3 | WindCall | 1 select outgoing call | increment try count | W4 | - | | | 2 no outgoing calls | | W0 | - |-----+----------+-------------------------+-------------------------+-----| - | W4* | WindSend | | (make call S0) | W5 | - |-----+----------+-------------------------+-------------------------+-----| - | W5 | WindMark | 1 call successful | remove node fr call list| W0 | - | | | 2 no connect | remove if try cnt > lim | W0 | - | | | 3 call failed | incr conn cnt, remove | W0 | - | | | | if con cnt > lim | | - `-----+----------+-------------------------+-------------------------+-----' - - - The length of the inter-call delay time at W1.4 is not critical. It is - important that this not be a constant, so two systems calling each other - do not incur infinite busy signals. Sophisticated implementations may - vary the inter-call delay depending on number of calls to be made, - window width, user specification, etc. - - - D. Session Layer Protocol : Connecting to Another FidoNet Machine - - A session is a connection between two FidoNet machines. It is currently - assumed to be over the DDD telephone network via modems. The calling - machine starts out as the sender and the called machine as the receiver. - The pickup feature is described by the sender and receiver changing - roles midway through the session, after the sender has transferred the - message packet and any attached files. Due to the lack of security in - the pickup protocol (danger of pickup by a fake node), a change in the - protocol may be expected in the near future. - - Once a connection has been established, each system should ensure that - the physical connection remains throughout the session. For physical - layers implemented through modems, this means monitoring the carrier - detect signal, and terminating the session if it is lost. - - Error detection at the physical layer should be monitored for both sent - and received characters. Parity, framing, and other physical errors - should be detected. - - Sender - - .-----+----------+-------------------------+-------------------------+-----. - |State| State | Predicate(s) | Action(s) | Next| - | # | Name | | | St | - |-----+----------+-------------------------+-------------------------+-----| - | S0 | SendInit | | dial modem | S1 | - |-----+----------+-------------------------+-------------------------+-----| - | S1 | WaitCxD | 1 carrier detected | delay 1-5 seconds | S2 | - | | | 2 busy, etc. | report no connection | exit| - | | | 3 voice | report no carrier | exit| - | | | 4 carrier not detected | report no connection | exit| - | | | within 60 seconds | | | - |-----+----------+-------------------------+-------------------------+-----| - | S2 | WhackCRs | 1 over 30 seconds | report no response | exit| - | | | 2 ?? s received | delay 1 sec | S3 | - | | | 3 s not received | send | S2 | - | | | | delay ??? secs | | - |-----+----------+-------------------------+-------------------------+-----| - | S3 | WaitClear| 1 no input for 0.5 secs | send TSYNCH = AEH | S4 | - | | | 2 over 60 seconds | hang up, report garbage | exit| - | | | and line not clear | | | - |-----+----------+-------------------------+-------------------------+-----| - | S4* | TSyncChk | 1 'C' or NAK (peeked at)| (XMODEM send packet XS1)| S5 | - | | | 2 over 2 seconds | eat noise, resend TSYNCH| S4 | - | | | 3 over 30 seconds | hang up report not Fido | exit| - |-----+----------+-------------------------+-------------------------+-----| - | S5 | CheckMail| 1 XMODEM successful | (Fido registers success)| S6 | - | | | 2 XMODEM fail or timeout| hang up, report mail bad| exit| - |-----+----------+-------------------------+-------------------------+-----| - | S6* | SendFiles| | (BATCH send files BS0) | S7 | - |-----+----------+-------------------------+-------------------------+-----| - | S7 | CheckFile| 1 BATCH send successful | | S8 | - | | | 2 BATCH send failed | hang up, rept files fail| exit| - |-----+----------+-------------------------+-------------------------+-----| - | S8 | TryPickup| 1 wish to pickup | note send ok | R2* | - | | | 2 no desire to pickup | delay 5 secs | exit| - | | | | hang up, rept send ok | | - `-----+----------+-------------------------+-------------------------+-----' - - Although the above shows the sender emitting only one TSYNCH, it is - recommended that a timeout of 5-20 seconds should initiate another TSYNCH. - The receiver should tolerate multiple TSYNCHs. - - In state S4, the phrase "peeked at" means that the character is not removed - from the buffer. Therefore when XS1 is started the proper character for - beginning the Xmodem transfer will be detected. - - Receiver - - The receiving FSM is given an external timer, the expiration of which - will cause termination with a result of 'no calls' (R0.2). - - .-----+----------+-------------------------+-------------------------+-----. - |State| State | Predicate(s) | Action(s) | Next| - | # | Name | | | St | - |-----+----------+-------------------------+-------------------------+-----| - | R0 | WaitCxD | 1 carrier detected | | R1 | - | | | 2 external timer expires| report no calls | exit| - |-----+----------+-------------------------+-------------------------+-----| - | R1 | WaitBaud | 1 baud rate detected | send signon with s | R2 | - | | | 2 no detect in ?? secs | hang up, report no baud | exit| - |-----+----------+-------------------------+-------------------------+-----| - | R2 | WaitTsync| 1 TSYNCH received | ignore input not TSYNCH | R3 | - | | | 2 60 seconds timeout | hang up, report not Fido| exit| - |-----+----------+-------------------------+-------------------------+-----| - | R3* | RecMail | | (XMODEM rec packet XR0) | R4 | - |-----+----------+-------------------------+-------------------------+-----| - | R4 | XRecEnd | 1 XMODEM successful | delay 1 second | R5 | - | | | | flush input | | - | | | 2 XMODEM failed | hang up, rept mail fail | exit| - |-----+----------+-------------------------+-------------------------+-----| - | R5* | RecFiles | | (BATCH rec files BR0) | R6 | - |-----+----------+-------------------------+-------------------------+-----| - | R6 | ChkFiles | 1 BATCH recv successful | delay 2 secs | R7 | - | | | 2 BATCH recv failed | hang up, report bad file| exit| - |-----+----------+-------------------------+-------------------------+-----| - | R7 | AllowPkup| 1 have pickup for sender| receiver becomes sender | S3* | - | | | 2 nothing to pickup | hang up, rept recv ok | exit| - `-----+----------+-------------------------+-------------------------+-----' - - - E. Transport Layer : ????? - - 1. Data Definitions - - 2. Transport Layer Protocol : Routing - - FidoNet does not necessarily send a message directly to its - destination. To reduce the number of network connections, mail to a - subset of the nodelist may be routed to one node for further - distribution within that subset. In addition, custom routing is - possible. Routing of a message is determined in one of three ways. - - o If there are files attached, then a message must be sent directly to - its destination. - - o Messages without attached files should be routed through the inbound - host of the destination node's subnet as specified by a FidoNet - format nodelist. - - o To prevent overloading of inbound hosts, a system should provide for - host routing to be disabled for a target node, or nodes. - - - F. Network Layer : the Network's View of the System, Routing and Packets - - - 1. Network Layer Data Definition : the Packet Header - - The packet contains messages in packed format to be transferred over - the net during a connection. As this data structure is transferred, - its definition is critical to FidoNet. - - A packet may contain zero or more packed messages. A packet without - messages is often generated as a poll packet. - - Every packet begins with a packet header. The fields of the packet - header are of fixed length. - - - Packet Header - Offset - dec hex - .-----------------------------------------------. - 0 0 | origNode (low order) | origNode (high order) | - +-----------------------+-----------------------+ - 2 2 | destNode (low order) | destNode (high order) | - +-----------------------+-----------------------+ - 4 4 | year (low order) | year (high order) | - +-----------------------+-----------------------+ - 6 6 | month (low order) | month (high order) | - +-----------------------+-----------------------+ - 8 8 | day (low order) | day (high order) | - +-----------------------+-----------------------+ - 10 A | hour (low order) | hour (high order) | - +-----------------------+-----------------------+ - 12 C | minute (low order) | minute (high order) | - +-----------------------+-----------------------+ - 14 E | second (low order) | second (high order) | - +-----------------------+-----------------------+ - 16 10 | baud (low order) | baud (high order) | - +-----------------------+-----------------------+ - 18 12 | 0 | 2 | 0 | 0 | - +-----------------------+-----------------------+ - 20 14 | origNet (low order) | origNet (high order) | - +-----------------------+-----------------------+ - 22 16 | destNet (low order) | destNet (high order) | - +-----------------------+-----------------------+ - 24 18 | prodCode | serialNo | - +-----------------------+-----------------------+ - 26 1A | | - | password (some impls) | - | eight bytes | - | null padded | - | | - +-----------------------+-----------------------+ - 34 22 | origZone (low) (opt) | origZone (high) (opt) | - +-----------------------+-----------------------+ - 36 24 | destZone (low) (opt) | destZone (high) (opt) | - +-----------------------+-----------------------+ - 38 26 | fill | - ~ 20 bytes ~ - | | - +-----------------------+-----------------------+ - 58 3A | zero or more | - ~ packed ~ - | messages | - +-----------------------+-----------------------+ - | 0 | 0 | 0 | 0 | - `-----------------------+-----------------------' - - - Packet = PacketHeader { PakdMessage } 00H 00H - - PacketHeader = origNode (* of packet, not of messages in packet *) - destNode (* of packet, not of messages in packet *) - year (* of packet creation, e.g. 1986 *) - month (* of packet creation, 0-11 for Jan-Dec *) - day (* of packet creation, 1-31 *) - hour (* of packet creation, 0-23 *) - minute (* of packet creation, 0-59 *) - second (* of packet creation, 0-59 *) - baud (* max baud rate of orig and dest, 0=SEA *) - PacketType (* old type-1 packets now obsolete *) - origNet (* of packet, not of messages in packet *) - destNet (* of packet, not of messages in packet *) - prodCode (* 0 for Fido, write to FTSC for others *) - serialNo (* binary serial number (otherwise null)*) - password (* session password (otherwise null) *) - origZone (* zone of pkt sender (otherwise null) *) - destZone (* zone of pkt receiver (otherwise null)*) - fill[20] - - PacketType = 02H 00H (* 01H 00H was used by Fido versions before 10 - which did not support local nets. The packed - message header was also different for those - versions *) - - prodCode = ( 00H (* Fido *) - | ... - | ??H (* Please apply for new codes *) - ) - - - The remainder of the packet consists of packed messages. Each packed - message begins with a message type word 0200H. A pseudo-message - beginning with the word 0000H signifies the end of the packet. - - - 2. Network Layer Data Description : a File with Attributes - - The BATCH protocol uses the MODEM7 filename and TeLink/XMODEM file - transfer protocols to transfer the file with attributes. - - When a file is transferred via FidoNet, an attempt is made to also - pass the operating system's attributes for the file such as length, - modification date, etc. FidoNet does this via a special prefix block - to the XMODEM file transfer using a protocol known as TeLink. As the - TeLink protocol relies on a modification to the XMODEM file transfer - protocol, it is documented at the data link layer level. - - The MODEM7 file name is redundant if there is also a TeLink block, in - which case the name may be taken from either or both. - - FileName as Sent - Offset - dec hex - .-----------------------------------------------. - 0 0 | fileName | - ~ 8 bytes ~ - | left adjusted blank filled | - +-----------------------+-----------------------+ - 8 8 | fileExt | - ~ 3 bytes ~ - | left adjusted blank filled | - `-----------------------------------------------' - - - 3. Network Layer Protocol : BATCH File Finite State Machines - - - BATCH File Sender - - .-----+----------+-------------------------+-------------------------+-----. - |State| State | Predicate(s) | Action(s) | Next| - | # | Name | | | St | - |-----+----------+-------------------------+-------------------------+-----| - | BS0*| MoreFiles| 1 more files to send | (MODEM7 FName send MS0) | BS1 | - | | | 2 no more files to send | | BS3 | - |-----+----------+-------------------------+-------------------------+-----| - | BS1 | CheckFNm | 1 MODEM7 Filename ok | (TeLink send file XS0) | BS2 | - | | | 2 MODEM7 Filename bad | report name send bad | exit| - |-----+----------+-------------------------+-------------------------+-----| - | BS2 | CheckFile| 1 TeLink send ok | | BS0 | - | | | 2 TeLink send bad | report file send bad | exit| - |-----+----------+-------------------------+-------------------------+-----| - | BS3 | EndSend | 1 rec NAK for next file | send EOT, report send ok| exit| - | | | 2 10 seconds no NAK | send EOT, report no NAK | exit| - `-----+----------+-------------------------+-------------------------+-----' - - When no files remain, the sender responds to the receiver's NAK with an - EOT. The EOT is not ACK/NAKed by the receiver. - - Filenames must be upper case ASCII. The data link layer uses "u" as a - control character. - - - BATCH File Receiver - - .-----+----------+-------------------------+-------------------------+-----. - |State| State | Predicate(s) | Action(s) | Next| - | # | Name | | | St | - |-----+----------+-------------------------+-------------------------+-----| - | BR0*| RecvName | | (MODEM7 FName recv MR0) | BR1 | - |-----+----------+-------------------------+-------------------------+-----| - | BR1 | CheckFNm | 1 MODEM7 no more files | report files recd ok | exit| - | | | 2 MODEM7 Filename ok | (TeLink recv file XR0) | BR2 | - | | | 2 MODEM7 Filename bad | report name recv bad | exit| - |-----+----------+-------------------------+-------------------------+-----| - | BR2 | CheckFile| 1 TeLink recv ok | | BR0 | - | | | 2 TeLink recv bad | report file recv bad | exit| - `-----+----------+-------------------------+-------------------------+-----' - - - G. Data Link Layer : Error-Free Data Transfer - - 1. Data Link Layer Data Definition : XMODEM/TeLink Blocks - - XMODEM transfers are in blocks of 128 uninterpreted data bytes - preceded by a three byte header and followed by either a one byte - checksum or a two byte crc remainder. XMODEM makes no provision for - data streams which are not an integral number of blocks long. - Therefore, the sender pads streams whose length is not a multiple of - 128 bytes with the end-of-file character (^Z for MS-DOS), and use some - other means to convey the true data length to the receiver (e.g. - TeLink file info block). - - Data blocks contain sequence numbers so the receiver can ensure it has - the correct block. Block numbers are sequential unsigned eight bit - integers beginning with 01H and wrapping to 00H, except that a TeLink - block is given sequence number 00H. - - For files which are attached to the mail packet, not the mail packet - itself, if the sending system is aware of the file attributes as they - are known to the operating system, then the first block of the XMODEM - transfer may be a special TeLink block to transfer that information. - This block differs in that the first byte is a SYN character as - opposed to an SOH, and it is always sent checksum as opposed to CRC. - Should the receiver be unwilling to handle such information, after two - NAKs (or "C"s), the sender skips this special block and goes on to the - data itself. - - - - XMODEM Data Block (CRC mode) - Offset - dec hex - .-----------------------------------------------. - 0 0 | SOH - Start Of Header - 01H | - +-----------------------------------------------+ - 1 1 | BlockNumber | - +-----------------------------------------------+ - 2 2 | BlockComplement | - +-----------------------------------------------+ - 3 3 | 128 bytes of | - ~ uninterpreted ~ - | data | - +-----------------------------------------------+ - 131 83 | CRC high order byte | - +-----------------------------------------------+ - 132 84 | CRC low order byte | - `-----------------------------------------------' - - - - XMODEM Data Block (Checksum mode) - Offset - dec hex - .-----------------------------------------------. - 0 0 | SOH - Start Of Header - 01H | - +-----------------------------------------------+ - 1 1 | BlockNumber | - +-----------------------------------------------+ - 2 2 | BlockComplement | - +-----------------------------------------------+ - 3 3 | 128 bytes of | - ~ uninterpreted ~ - | data | - +-----------------------------------------------+ - 131 83 | Checksum byte | - `-----------------------------------------------' - - - TeLink File Descriptor Block - Offset - dec hex - .-----------------------------------------------. - 0 0 | SYN - File Info Header - 16H | - +-----------------------------------------------+ - 1 1 | 00H | - +-----------------------------------------------+ data offset - 2 2 | FFH | dec hex - +-----------------------------------------------+ - 3 3 | File Length, least significant byte | 0 0 - +-----------------------------------------------+ - 4 4 | File Length, second to least significant byte | 1 1 - +-----------------------------------------------+ - 5 5 | File Length, second to most significant byte | 2 2 - +-----------------------------------------------+ - 6 6 | File Length, most significant byte | 3 3 - +-----------------------------------------------+ - 7 7 | Creation Time of File | 4 4 - | "DOS Format" | - +-----------------------------------------------+ - 9 9 | Creation Date of File | 6 6 - | "DOS Format" | - +-----------------------------------------------+ - 11 B | File Name | 8 8 - ~ 16 chars ~ - | left justified blank filled | - +-----------------------------------------------+ - 27 1B | 00H | 24 18 - +-----------------------------------------------+ - 28 1C | Sending Program Name | 25 19 - ~ 16 chars ~ - | left justified Null filled | - +-----------------------------------------------+ - 44 2C | 01H (for CRC) or 00H | 41 29 - +-----------------------------------------------+ - 45 2D | fill | 42 2A - ~ 86 bytes ~ - | all zero | - +-----------------------------------------------+ - 132 84 | Checksum byte | - `-----------------------------------------------' - - - - XMODEMData = XMODEMBlock (* block of data with header and - trailer *) - | TeLinkBlock (* TeLink File Descriptor Block *) - | ACK (* acknowledge data received ok *) - | NAK (* negative ACK & poll 1st block *) - | EOT (* end of xfer, after last block *) - | "C" (* 43H *) - - XMODEMBlock = SOH (* Start of Header, XMODEM Block *) - blockNumber[1] (* sequence, i'=mod( i+1, 256 ) *) - blockCompl[1] (* one's compl of BlockNumber *) - data[128] (* uninterpreted user data block *) - (CRC | Checksum) (* error detect/correction code *) - - TeLinkBlock = SYN (* File Info Header *) - 00H (* block no, must be first block *) - FFH (* one's complement of block no *) - fileLength[4] (* length of data in bytes *) - CreationTime[2] (* time file last modified or zero *) - CreationDate[2] (* date file last modified or zero *) - fileName(16) (* name of file, not vol or dir *) - 00H (* header version number *) - sendingProg(16) (* name of program on send side *) - crcMode[1] (* 01H for CRC 00H for Checksum *) - fill[87] (* zeroed *) - Checksum (* error detect/correction code *) - - ACK = 06H (* acknowledge data received ok *) - NAK = 15H (* negative ACK & poll 1st block *) - SOH = 01H (* start of header, begins block *) - SYN = 16H (* start of TeLink file info blk *) - EOT = 04H (* end of xfer, after last block *) - - CRC = crc[2] (* CCITT Cyclic Redundancy Check *) - - Checksum = checksum[1] (* low 8 bits of sum of data bytes - using unsigned 8 bit arithmetic *) - - CreationDate = year[.7] (* 7 bits, years since 1980, 0-127 *) - month[.4] (* 4 bits, month of year, 1-12 *) - day[.5] (* 5 bits, day of month, 1-31 *) - - CreationTime = hour[.5] (* 5 bits, hour of day, 0-23 *) - minute[.6] (* 6 bits, minute of hour, 0-60 *) - biSeconds[.2] (* 6 bits, seconds/2, 0-29 *) - - - Note that the crcMode is always set to 01H in current implementations - as all TeLink/XMODEM implementations use the CRC method. Therefore, - it is always set to 01H by the sender, and is ignored by the receiver. - - - 2. Data Link Layer Protocol : XMODEM/TeLink Finite State Machines - - The protocol is receiver driven, the receiver polling the sender for - each block. If the receiver polls for the first block using a "C" - (43H) as the poll character, it would prefer to have the CRC-CCITT - polynomial remainder error detection code at the end of each block as - opposed to a one byte unsigned checksum. The sender will respond to - the "C" poll iff it can comply. If the sender chooses checksum as - opposed to CRC, it waits for the receiver to poll with NAK (15H). - Should the checksum method be preferable to the receiver, it polls - with NAK rather than "C". - - The sender returns an EOT instead of a data block when no data remain. - - Neither the sender nor the receiver should send the block or ACK/NAK - response while there is data being received. They should wait for the - line to settle, and possibly time out. - - It is suggested that one's input buffer be cleared immediately after - sending block or ACK/NAK response, before waiting for the response from - the other end. This clears any line garbage which occurred during - transmit. - - - XMODEM/TeLink Sender - - .-----+----------+-------------------------+-------------------------+-----. - |State| State | Predicate(s) | Action(s) | Next| - | # | Name | | | St | - |-----+----------+-------------------------+-------------------------+-----| - | XS0 | WaitTeLnk| 1 over 40-60 seconds | report sender timeout | exit| - | | | 2 over 2 tries | note TeLink block failed| XS1 | - | | | 3 NAK or "C" received | send TeLink, incr tries | XS0 | - | | | 4 ACK received | TeLink ok, set crc/cksm | XS2 | - |-----+----------+-------------------------+-------------------------+-----| - | XS1 | WaitStart| 1 over 40-60 seconds | report sender timeout | exit| - | | | 2 over 20 tries | report send failed | exit| - | | | 3 NAK received | set checksum mode | XS2 | - | | | 4 "C" recd, I can crc | set crc mode | XS2 | - | | | 5 "C" recd, I can't crc | | XS1 | - |-----+----------+-------------------------+-------------------------+-----| - | XS2 | SendBlock| 1 more data available | send next data block | XS3 | - | | | | as checksum or crc | | - | | | 2 last block has gone | send EOT | XS4 | - |-----+----------+-------------------------+-------------------------+-----| - | XS3 | WaitACK | 1 10 retries or 1 minute| report send failed | exit| - | | | 2 ACK received | | XS2 | - | | | 3 NAK (or C if 1st blk) | resend last block | XS3 | - |-----+----------+-------------------------+-------------------------+-----| - | XS4 | WaitEnd | 1 10 retries or 1 minute| report send failed | exit| - | | | 2 ACK received | report send successful | exit| - | | | 3 NAK received | resend EOT | XS4 | - `-----+----------+-------------------------+-------------------------+-----' - - - XMODEM/TeLink Receiver - - .-----+----------+-------------------------+-------------------------+-----. - |State| State | Predicate(s) | Action(s) | Next| - | # | Name | | | St | - |-----+----------+-------------------------+-------------------------+-----| - | XR0 | RecStart | 1 prefer crc mode | Send "C" | XR1 | - | | | 2 want checksum mode | send NAK | XR1 | - |-----+----------+-------------------------+-------------------------+-----| - | XR1 | WaitFirst| 1 10 retries or 1 minute| report receive failure | exit| - | | | 2 > 3 retries or 30 secs| set want checksum mode | XR0 | - | | | 3 EOT received | delay < sec, purge input| exit| - | | | | send ACK, report no file| | - | | | 4 TeLink block recd | send ACK, set crc/cksm | XR2 | - | | | 5 data block recd | send ACK, set crc/cksm | XR2 | - | | | 6 bad block or 2-10 secs| incr retry count | XR0 | - |-----+----------+-------------------------+-------------------------+-----| - | XR2 | WaitBlock| 1 10 retries or 1 minute| report receive failure | exit| - | | | 2 EOT received | send ACK, report recd ok| exit| - | | | | send ACK, report recd ok| | - | | | 3 data block received | send ACK | XR2 | - | | | 4 bad block or 2-10 secs| send NAK, incr retry cnt| XR2 | - `-----+----------+-------------------------+-------------------------+-----' - - - A number of checks should be made to ensure a valid data block has been - received. - - o The physical layer should have encountered no errors, e.g. parity, - framing, etc. - - o The length of the block should not be less than expected. - - o If the blocks sequence number does not match the complement, then - respond with a NAK and attempt to read the block again. - - o If the block's sequence number is one previous (remember wrap around) - to that of the expected block, respond with an ACK and read again. - - o If the sequence number fits neither of the above criteria, and is yet - not the expected sequence number, abort the receive. - - o The checksum or CRC should be correct. - - - - 3. Data Link Layer Protocol : MODEM7 Filename Finite State Machines - - - MODEM7 Filename Sender - - .-----+----------+-------------------------+-------------------------+-----. - |State| State | Predicate(s) | Action(s) | Next| - | # | Name | | | St | - |-----+----------+-------------------------+-------------------------+-----| - | MS0 | WaitNak | 1 20 retries or 1 minute| filename send failed | exit| - | | | 2 NAK received | send ACK & 1st ch of fn | MS1 | - | | (note 1) | 3 C received | return fn skipped | exit| - |-----+----------+-------------------------+-------------------------+-----| - | MS1 | WaitChAck| 1 ACK rcd, fname done | send SUB = 1AH | MS2 | - | | | 2 ACK rcd, fname ~done | send next ch of fname | MS1 | - | | | 3 other char or 1 sec | send "u", incr retry cnt| MS0 | - |-----+----------+-------------------------+-------------------------+-----| - | MS2 | WaitCksm | 1 cksum recd and ok | send ACK, report fn ok | exit| - | | | 2 cksum recd but bad | send "u", incr retry cnt| MS0 | - | | | 3 no cksum in 1 sec | send "u", incr retry cnt| MS0 | - `-----+----------+-------------------------+-------------------------+-----' - - - MODEM7 Filename Receiver - - .-----+----------+-------------------------+-------------------------+-----. - |State| State | Predicate(s) | Action(s) | Next| - | # | Name | | | St | - |-----+----------+-------------------------+-------------------------+-----| - | MR0 | SendNak | 1 20 tries or 1 minute | report filename failure | exit| - | | | 2 | send NAK, incr try cnt | MR1 | - |-----+----------+-------------------------+-------------------------+-----| - | MR1 | WaitAck | 1 rcd ACK | | MR2 | - | | | 2 rcd EOT | report no files remain | exit| - | | | 3 5 secs & no ACK/EOT | | MR0 | - |-----+----------+-------------------------+-------------------------+-----| - | MR2 | WaitChar | 1 recd EOT (can happen?)| report no files remain | exit| - | | | 2 recd SUB | send checksum byte | MR3 | - | | | 3 recd "u" | | MR0 | - | | | 4 recd char of name | send ACK | MR2 | - | | | 5 no char in 1 second | | MR0 | - |-----+----------+-------------------------+-------------------------+-----| - | MR3 | WaitOkCk | 1 recd ACK within 1 sec | report recd filename ok | exit| - | | | 2 recd "u" or other char| | MR0 | - `-----+----------+-------------------------+-------------------------+-----' - - SUB is the ASCII character ^Z or 1AH. The checksum is the unsigned low - order eight bits of the sum of the characters in the transferred filename - including the SUB. - - Although one second timeouts are used successfully by Fido and SEAdog, - some fear that this is too small a timeout for some satellite and packet - network links. - - Note 1 - MS0.3 is a common addition to accommodate a common noncompliance. - Support of MS0.3 is optional for a compliant mailer. This hack - also requires modification of a number of state tables, see - FSC-0011. - - - H. Physical Layer : the Actual Connection of Two FidoNet Systems - - Will one of the more hardware-oriented comm types give me some idea of - what's needed here? Can we leave it open enough to allow implementation - over a non-dial net? Thanks. - - - I. Revisions since FTS-0001 - - 89 Oct 25 (rev 13) - o packet header: optional serialNo, password, and orig/dest zone - o stored message to/from zone/point info added as option per - Fido-12 and Dutchie - o XR1 and XR2 changes per FSC-0011 - o reference to FSC-0011 for the MODEM7-avoidance hack, MS0.3 - o dropped enumeration of product codes - o S4 modification from FSC-0011 - o Nodelist and EID reference appropriate documents - o various cosmetics - 90 July 1-5 (rev 14) - o spelling errors caught by Ray Gardner - o references to the now dead IFNA elided - o offset at end of Packed Message was 10 as opposed to 20 bytes - o Packed Message and Packet Header corrections by Roland Gautschi - o Offsets in TeLink header caught by Rick Moore - 90 August 30 (rev 15) - o corrected offsets in packet header - 95 September 30 (rev 16) - o TOPT corrected - o contact info changed - - - J. Acknowledgements - - Ben Baker, Thom Henderson, Tom Jennings, Ken Kaplan, and Gee Wong - suggested, informed, reviewed, and encouraged. Tom and Thom gave me - all the basics, and even allowed me to look at actual code. Bob Hartman - was foolish enough to implement the specification, and was generous - with useful feedback. Ray Gardner caught my spelling errors , - and Roland Gautschi and Rick Moore found offset and length errors. - - My employer, Pacific Systems Group was kind enough to donate my time to - research and to write this document. - - Fido and FidoNet are registered trademarks of Tom Jennings. - - SEAdog is a trademark of System Enhancement Associates. - - - K. Bibliography - - Documentation for the protocols and data formats are scattered. Some - are unattributed, some even untitled. - - Anonymous, changes to MODEM to implement CRC option XMDM-CRC.TXT - - Baker, Ken and Moore, Rick, Nodelist Definition, currently FTS-0005 - - Christensen, Ward, "MODEM Protocol Overview" of 1 January 82 XMODEM.TXT - - Hartman, Bob, "Some thoughts that I had on FSC001", FSC-0011 - - Henderson, Thom, "SEAdog Electronic Mail System Version 3" of April 86 - - International Standards Organization, "Data Processing - Open Systems - Interconnection - Basic Reference Model" ISO/DIS 7498 April 82 - - Jennings, Tom, "FidoNet Electronic Mail Protocol" 8 February 85 - FIDOMAIL.DOC - - Jennings, Tom, "Fido's Internal Structures" of 13 September 85 - STRUCT.TXT aka STRUCT.APX - - Jennings, Tom, "Extending XMODEM/MODEM File Transfer Protocol to support - DOS" 20 September 83 FILEXFER.DOC - - Jordan, Larry, "XMODEM File Transfer Protocol" XMDM-LJ.TXT - - Rudin, H and West, C, "Protocol Specification, Testing, and - Verification, III" Proceedings of the IFIP WG 6.1 Third International - Workshop on Protocol Specification, Testing, and Verification, - Rueschlikon Switzerland 31 May - 2 June 1983. - - Tanenbaum, Andrew, "Computer Networks" Prentice Hall 1981 - - Messages generated by Fido 11w, SEAdog 3.8, and QMail 1.01 -
+Document: FTS-0001 +Version: 016 +Date: 30-Sep-95 + + + + + A Basic FidoNet(r) Technical Standard +| Revision 16 + Formerly known as FSC001, FSC-0001 +| Randy Bush, Pacific Systems Group +| September 30, 1995 + + + + +Status of this document: + + This FTS (FidoNet(r) Technical Standard) specifies a standard for + the FidoNet community. FidoNet nodes are expected to adopt and implement + this standard. Distribution is subject to the restrictions stated in the + copyright paragraph below. + + Fido and FidoNet are registered marks of Tom Jennings and Fido Software. + + Copyright 1986-95, Randy Bush. All rights reserved. A right to + distribute only without modification and only at no charge is granted. + Under no circumstances is this document to be reproduced or distributed + as part of or packaged with any product or other sales transaction for + which any fee is charged. Any and all other reproduction or excerpting + requires the explicit written consent of the author. + + + A. Introduction + + FidoNet has grown beyond most peoples' fantasies, and new FidoNet + implementations are appearing regularly. Unfortunately, the scattered + nature of the documentation and absence of clear testing procedures have + made implementation difficult. FidoNet, in its desire to promote and + encourage FidoNet implementations, suggested a project to create a + technical standard for FidoNet. The author did not design or specify + the data formats or protocols, only attempted to document them. + + This document defines the data structures and communication protocols + which a FidoNet implementation must provide. The implementor of FidoNet + compatible systems is the intended audience of this document. + + The layered metaphor of the ISO Open Systems Interface reference model + has been used to view FidoNet from a standard perspective. As with most + prospective ISO/OSI descriptions, FidoNet does not always make this + easy. + + The content of this document was gleaned from the references given at + the end. + + Please direct technical comments and errata to +| Randy Bush randy@psg.com +| Pacific Systems Group + 9501 S.W. Westhaven Drive + Portland, Oregon US-97225 +| + + 1. Basic Requirements for a FidoNet Implementation + + Compatibility is a set of abilities which, when taken as a whole, make + it safe to list a net or node in the FidoNet nodelist. In other words, + if another node should attempt contact, does it have a reasonable + chance of successful communication? This is a social obligation, as + the calling system pays money for the attempt. Conversely, an + implementation should be able to successfully contact other systems, + as life is not a one-way street. + + A FidoNet implementation must be able to call other nodes and transfer + messages and files in both directions. This includes pickup and poll. + A FidoNet implementation must be able to accept calls from other nodes + and transfer messages and files in both directions. This includes + pickup. + + FidoNet implementations must be able to receive and process the FidoNet + format nodelist, and transfer nodelists to other nodes. A companion + document, FTS-0005, defines the FidoNet format nodelist and how to + interpret and process it. + + A FidoNet implementation must route messages which do not have files + attached through net hosts as shown in a FidoNet format nodelist. + + + 2. Levels of Compliance + + This documents represents the most basic FidoNet implementation. A + future document will define well tested extensions which are optional + but provide sufficient additional function that implementors should + seriously consider them. SEAdog(tm), from System Enhancement + Associates, is an excellent example of such an extended FidoNet + implementation. + + + 3. The ISO/OSI Reference Model (cribbed from "Protocol Verification via + Executable Logic Specifications", D. P. Sidhu, in Rudin & West) + + In the ISO/OSI model, a distributed system consists of entities that + communicate with each other according to a set of rules called a + protocol. The model is layered, and there are entities associated + with each layer of the model which provide services to higher layers + by exchanging information with their peer entities using the services + of lower layers. The only actual physical communication between two + systems is at the lowest level. + + Several techniques have been used in the specification of such + protocols. A common ingredient in all techniques is the notion of the + extended finite state automata or machine. Extensions include the + addition of state variables for the storing of state information about + the protocol. The state of an automation can change as a result of + one of the following events: + + o Request from an upper network layer for service + + o Response to the upper layer + + o Request to the lower network layer to perform a service + + o Response from the lower layer + + o Interaction with the system and environment in which the protocol is + implemented (e.g. timeouts, host operating system aborts, ...) + + A protocol specification, in a large part, consists of specifying + state changes in automata which model protocol entities and in + describing the data which they exchange. + + For historical reasons, the term packet is used in FidoNet to + represent a bundle of messages, as opposed to the more common use as a + unit of communication, which is known as a block in FidoNet. + + + 4. Data Description + + A language specific notation was avoided. Please help stamp out + environmental dependencies. Only you can prevent PClone market + dominance. Don't panic, there are rectangular record layouts too. + + (* non-terminals *) + UpperCaseName - to be defined further on + + (* literals *) + "ABC" - ASCII character string, no termination implied + nnH - byte in hexadecimal + + (* terminals *) + someName - 16-bit integer, low order byte first (8080 style) + someName[n] - field of n bytes + someName[.n] - field of n bits + someName(n) - Null terminated string allocated n chars (incl Null) + someName{max} - Null terminated string of up to max chars (incl Null) + + (* punctuation *) + a b - one 'a' followed by one 'b' + ( a | b ) - either 'a' or 'b', but not both + { a } - zero or more 'a's + [ b ] - zero or one 'b' + (* comment *) - ignored + + (* predeclared constant *) + Null = 00H + + + + 5. Finite State Machine Notation + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | St | + |-----+----------+-------------------------+-------------------------+-----| + | fnn*| | | | | + `-----+----------+-------------------------+-------------------------+-----' + + State # - Number of this state (e.g. R13). + f - FSM initial (Window, Sender, Receiver, ...) + nn - state number + * - state which represents a lower level protocol which + is represented by yet another automation. + + State Name - Descriptive name of this state. + + Predicate(s) - Conditions which terminate the state. If predicates are + non-exclusive, consider them ordered. + + Action(s) - Action(s) corresponding to predicate(s) + + Next State - Subsequent state corresponding to predicate(s) + + Ideally, there should be a supporting section for each state which + should give a prose description of the state, its predicates, actions, + etc. So much for ideals. + + + B. Application Layer : the System from the User's View + + The application layer is outside the domain of a FidoNet standard, as it + is the layer that the user's application sees as opposed to what FidoNet + sees. In recent months, there has been sufficient confusion and + discussion about the format of data at this level to warrant the + description of the data structure, the message as it is stored by Fido, + SEAdog, and Rover. + + Perfectly valid FidoNet systems may be implemented whose stored messages + differ greatly from this format. + + + 1. Application Layer Data Definition : a Stored Message + + Stored Message + + Offset + dec hex + .-----------------------------------------------. + 0 0 | | + ~ fromUserName ~ + | 36 bytes | + +-----------------------+-----------------------+ + 36 24 | | + ~ toUserName ~ + | 36 bytes | + +-----------------------+-----------------------+ + 72 48 | | + ~ subject ~ + | 72 bytes | + +-----------------------+-----------------------+ + 144 90 | | + ~ DateTime ~ + | 20 bytes | + +-----------------------+-----------------------+ + 164 A4 | timesRead (low order) | timesRead (high order)| + +-----------------------+-----------------------+ + 166 A6 | destNode (low order) | destNode (high order) | + +-----------------------+-----------------------+ + 168 A8 | origNode (low order) | origNode (high order) | + +-----------------------+-----------------------+ + 170 AA | cost (low order) | cost (high order) | + +-----------------------+-----------------------+ + 172 AC | origNet (low order) | origNet (high order) | + +-----------------------+-----------------------+ + 174 AE | destNet (low order) | destNet (high order) | + +-----------------------+-----------------------+ + 176 B0 | destZone (optional) | destZone (optional) | + +-----------------------+-----------------------+ + 178 B2 | origZone (optional) | origZone (optional) | + +-----------------------+-----------------------+ + 180 B4 | destPoint(optional) | destPoint(optional) | + +-----------------------+-----------------------+ + 182 B6 | origPoint(optional) | origPoint(optional) | + +-----------------------+-----------------------+ + 184 B8 | replyTo (low order) | replyTo (high order) | + +-----------------------+-----------------------+ + 186 BA | Attribute (low order) | Attribute (high order)| + +-----------------------+-----------------------+ + 188 BC | nextReply (low order) | nextReply (high order)| + +-----------------------+-----------------------+ + 190 BE | text | + ~ unbounded ~ + | null terminated | + `-----------------------------------------------' + + Message = fromUserName(36) (* Null terminated *) + toUserName(36) (* Null terminated *) + subject(72) (* see FileList below *) + DateTime (* message body was last edited *) + timesRead (* number of times msg has been read *) + destNode (* of message *) + origNode (* of message *) + cost (* in lowest unit of originator's + currency *) + origNet (* of message *) + destNet (* of message *) + destZone (* of message *) + origZone (* of message *) + destPoint (* of message *) + origPoint (* of message *) + replyTo (* msg to which this replies *) + AttributeWord + nextReply (* msg which replies to this *) + text(unbounded) (* Null terminated *) + + DateTime = (* a character string 20 characters long *) + (* 01 Jan 86 02:34:56 *) + DayOfMonth " " Month " " Year " " + " " HH ":" MM ":" SS + Null + + DayOfMonth = "01" | "02" | "03" | ... | "31" (* Fido 0 fills *) + Month = "Jan" | "Feb" | "Mar" | "Apr" | "May" | "Jun" | + "Jul" | "Aug" | "Sep" | "Oct" | "Nov" | "Dec" + Year = "01" | "02" | .. | "85" | "86" | ... | "99" | "00" + HH = "00" | .. | "23" + MM = "00" | .. | "59" + SS = "00" | .. | "59" + + AttributeWord bit meaning + --- -------------------- + 0 + Private + 1 + s Crash + 2 Recd + 3 Sent + 4 + FileAttached + 5 InTransit + 6 Orphan + 7 KillSent + 8 Local + 9 s HoldForPickup + 10 + unused + 11 s FileRequest + 12 + s ReturnReceiptRequest + 13 + s IsReturnReceipt + 14 + s AuditRequest + 15 s FileUpdateReq + + s - need not be recognized, but it's ok + + - not zeroed before packeting + + Bits numbers ascend with arithmetic significance of bit position. + + + Message Text + + Message text is unbounded and null terminated (note exception below). + + A 'hard' carriage return, 0DH, marks the end of a paragraph, and must + be preserved. + + So called 'soft' carriage returns, 8DH, may mark a previous + processor's automatic line wrap, and should be ignored. Beware that + they may be followed by linefeeds, or may not. + + All linefeeds, 0AH, should be ignored. Systems which display message + text should wrap long lines to suit their application. + + If the first character of a physical line (e.g. the first character of + the message text, or the character immediately after a hard carriage + return (ignoring any linefeeds)) is a ^A (<control-A>, 01H), then that + line is not displayed as it contains control information. The + convention for such control lines is: + o They begin with ^A + o They end at the end of the physical line (i.e. ignore soft <cr>s). + o They begin with a keyword followed by a colon. + o The keywords are uniquely assigned to applications. + o They keyword/colon pair is followed by application specific data. + + Current ^A keyword assignments are: +| o TOPT <pt no> - destination point address + o FMPT <pt no> - origin point address + o INTL <dest z:n/n> <orig z:n/n> - used for inter-zone address + + + File Specifications + + If one or more of FileAttached, FileRequest, or FileUpdateReq are + asserted in an AttributeWord, the subject{72} field is interpreted as + a list of file specifications which may include wildcards and other + system-dependent data. This list is of the form + + FileList = [ FileSpec { Sep FileSpec } ] Null + + FileSpec = (* implementation dependent file specification. may + not contain Null or any of the characters in Sep. *) + + Sep = ( " " | "," ) { " " } + + + There are deviations from and additions to these specifications + + 1 - Fido does not necessarily terminate the message text with a Null, + but uses an empty line (0DH 0AH 0DH 0AH). Some Fido utilities + use an EOF (1AH). + + 2 - SEAdog zeros the message cost field when building a message. + + 4 - SEAdog uses a different format for dates, e.g. + + DateTime = (* a character string 20 characters long *) + (* SEAdog format Mon 1 Jan 86 02:34 *) + DayOfWk " " DayOfMo " " Month " " Year " " HH ":" MM Null + + DayOfWk = "Mon" | "Tue" | "Wed" | "Thu" | "Fri" | "Sat" | "Sun" + DayOfMo = " 1" | " 2" | " 3" | ... | "31" (* blank fill *) + + + + 2. Application Layer Protocol : Schedules and Events + + At the application level, FidoNet imposes few protocol requirements. + An implementation must automatically originate and receive + node-to-node FidoNet connections. Some implementations do this in + 'windows' or time slots. Routing of messages will usually be + different and customizable for each scheduled window. + + The ability to send to and receive from any FidoNet listed node during + the Zone Mail Hour (eg. 9:00-10:00 UCT in Z1) is considered mandatory. + + Current implementations assemble all data for outbound connections at + the start of a window, and disassemble inbound data at the end of a + window. Due to performance considerations on small machines, this is + considered a valid optimization. Observe that it somewhat inhibits + dynamic routing. + + + C. Presentation Layer : the User from the System's View + + 1. Presentation Layer Data Definition : the Packed Message + + To conserve space and eliminate fields which would be meaningless if + sent (e.g. timesRead), messages are packed for transmission. As this + is a data structure which is actually transferred, its definition is + critical to FidoNet. A packed message has a number of fixed length + fields followed by four null terminated strings. + + While most of the string fields in a stored message are fixed length, + to conserve space strings are variable length when in a packet. All + variable length strings are all Null terminated, including especially + the message text. + + + Packed Message + + Offset + dec hex + .-----------------------------------------------. + 0 0 | 0 | 2 | 0 | 0 | + +-----------------------+-----------------------+ + 2 2 | origNode (low order) | origNode (high order) | + +-----------------------+-----------------------+ + 4 4 | destNode (low order) | destNode (high order) | + +-----------------------+-----------------------+ + 6 6 | origNet (low order) | origNet (high order) | + +-----------------------+-----------------------+ + 8 8 | destNet (low order) | destNet (high order) | + +-----------------------+-----------------------+ + 10 A | Attribute (low order) | Attribute (high order)| + +-----------------------+-----------------------+ + 12 C | cost (low order) | cost (high order) | + +-----------------------+-----------------------+ + 14 E | | + ~ DateTime ~ + | 20 bytes | + +-----------------------+-----------------------+ + 34 22 | toUserName | + ~ max 36 bytes ~ + | null terminated | + +-----------------------+-----------------------+ + | fromUserName | + ~ max 36 bytes ~ + | null terminated | + +-----------------------+-----------------------+ + | subject | + ~ max 72 bytes ~ + | null terminated | + +-----------------------+-----------------------+ + | text | + ~ unbounded ~ + | null terminated | + `-----------------------------------------------' + + Due to routing, the origin and destination net and node of a packet + are often quite different from those of the messages within it, nor + need the origin and destination nets and nodes of the messages within + a packet be homogenous. + + PakdMessage = 02H 00H (* message type, old type-1 obsolete *) + origNode (* of message *) + destNode (* of message *) + origNet (* of message *) + destNet (* of message *) + AttributeWord + cost (* in lowest unit of originator's + currency *) + DateTime (* message body was last edited *) + toUserName{36} (* Null terminated *) + fromUserName{36} (* Null terminated *) + subject{72} (* Null terminated *) + text{unbounded} (* Null terminated *) + + + + + + + + 2. Presentation Layer Protocol : a Mail Window + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | St | + |-----+----------+-------------------------+-------------------------+-----| + | W0 | WindTop | 1 end of window reached | reset modem to not answr| exit| + | | | 2 time remains in window| ensure modem can answer | W1 | + |-----+----------+-------------------------+-------------------------+-----| + | W1 | WindIdle | 1 incoming call | | W2 | + | | | 2 receive-only mode | | W0 | + | | | 3 send-only mode | | W3 | + | | | 4 60-180 secs & no call | | W3 | + |-----+----------+-------------------------+-------------------------+-----| + | W2* | WindRecv | | (receive call R0) | W3 | + |-----+----------+-------------------------+-------------------------+-----| + | W3 | WindCall | 1 select outgoing call | increment try count | W4 | + | | | 2 no outgoing calls | | W0 | + |-----+----------+-------------------------+-------------------------+-----| + | W4* | WindSend | | (make call S0) | W5 | + |-----+----------+-------------------------+-------------------------+-----| + | W5 | WindMark | 1 call successful | remove node fr call list| W0 | + | | | 2 no connect | remove if try cnt > lim | W0 | + | | | 3 call failed | incr conn cnt, remove | W0 | + | | | | if con cnt > lim | | + `-----+----------+-------------------------+-------------------------+-----' + + + The length of the inter-call delay time at W1.4 is not critical. It is + important that this not be a constant, so two systems calling each other + do not incur infinite busy signals. Sophisticated implementations may + vary the inter-call delay depending on number of calls to be made, + window width, user specification, etc. + + + D. Session Layer Protocol : Connecting to Another FidoNet Machine + + A session is a connection between two FidoNet machines. It is currently + assumed to be over the DDD telephone network via modems. The calling + machine starts out as the sender and the called machine as the receiver. + The pickup feature is described by the sender and receiver changing + roles midway through the session, after the sender has transferred the + message packet and any attached files. Due to the lack of security in + the pickup protocol (danger of pickup by a fake node), a change in the + protocol may be expected in the near future. + + Once a connection has been established, each system should ensure that + the physical connection remains throughout the session. For physical + layers implemented through modems, this means monitoring the carrier + detect signal, and terminating the session if it is lost. + + Error detection at the physical layer should be monitored for both sent + and received characters. Parity, framing, and other physical errors + should be detected. + + Sender + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | St | + |-----+----------+-------------------------+-------------------------+-----| + | S0 | SendInit | | dial modem | S1 | + |-----+----------+-------------------------+-------------------------+-----| + | S1 | WaitCxD | 1 carrier detected | delay 1-5 seconds | S2 | + | | | 2 busy, etc. | report no connection | exit| + | | | 3 voice | report no carrier | exit| + | | | 4 carrier not detected | report no connection | exit| + | | | within 60 seconds | | | + |-----+----------+-------------------------+-------------------------+-----| + | S2 | WhackCRs | 1 over 30 seconds | report no response+ +Go Back + + + + diff --git a/html/ftsc/fts-0004.html b/html/ftsc/fts-0004.html index 33d6f901..1f589f62 100755 --- a/html/ftsc/fts-0004.html +++ b/html/ftsc/fts-0004.html @@ -1,414 +1,415 @@ - - -| exit| + | | | 2 ?? s received | delay 1 sec | S3 | + | | | 3 s not received | send | S2 | + | | | | delay ??? secs | | + |-----+----------+-------------------------+-------------------------+-----| + | S3 | WaitClear| 1 no input for 0.5 secs | send TSYNCH = AEH | S4 | + | | | 2 over 60 seconds | hang up, report garbage | exit| + | | | and line not clear | | | + |-----+----------+-------------------------+-------------------------+-----| + | S4* | TSyncChk | 1 'C' or NAK (peeked at)| (XMODEM send packet XS1)| S5 | + | | | 2 over 2 seconds | eat noise, resend TSYNCH| S4 | + | | | 3 over 30 seconds | hang up report not Fido | exit| + |-----+----------+-------------------------+-------------------------+-----| + | S5 | CheckMail| 1 XMODEM successful | (Fido registers success)| S6 | + | | | 2 XMODEM fail or timeout| hang up, report mail bad| exit| + |-----+----------+-------------------------+-------------------------+-----| + | S6* | SendFiles| | (BATCH send files BS0) | S7 | + |-----+----------+-------------------------+-------------------------+-----| + | S7 | CheckFile| 1 BATCH send successful | | S8 | + | | | 2 BATCH send failed | hang up, rept files fail| exit| + |-----+----------+-------------------------+-------------------------+-----| + | S8 | TryPickup| 1 wish to pickup | note send ok | R2* | + | | | 2 no desire to pickup | delay 5 secs | exit| + | | | | hang up, rept send ok | | + `-----+----------+-------------------------+-------------------------+-----' + + Although the above shows the sender emitting only one TSYNCH, it is + recommended that a timeout of 5-20 seconds should initiate another TSYNCH. + The receiver should tolerate multiple TSYNCHs. + + In state S4, the phrase "peeked at" means that the character is not removed + from the buffer. Therefore when XS1 is started the proper character for + beginning the Xmodem transfer will be detected. + + Receiver + + The receiving FSM is given an external timer, the expiration of which + will cause termination with a result of 'no calls' (R0.2). + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | St | + |-----+----------+-------------------------+-------------------------+-----| + | R0 | WaitCxD | 1 carrier detected | | R1 | + | | | 2 external timer expires| report no calls | exit| + |-----+----------+-------------------------+-------------------------+-----| + | R1 | WaitBaud | 1 baud rate detected | send signon with s | R2 | + | | | 2 no detect in ?? secs | hang up, report no baud | exit| + |-----+----------+-------------------------+-------------------------+-----| + | R2 | WaitTsync| 1 TSYNCH received | ignore input not TSYNCH | R3 | + | | | 2 60 seconds timeout | hang up, report not Fido| exit| + |-----+----------+-------------------------+-------------------------+-----| + | R3* | RecMail | | (XMODEM rec packet XR0) | R4 | + |-----+----------+-------------------------+-------------------------+-----| + | R4 | XRecEnd | 1 XMODEM successful | delay 1 second | R5 | + | | | | flush input | | + | | | 2 XMODEM failed | hang up, rept mail fail | exit| + |-----+----------+-------------------------+-------------------------+-----| + | R5* | RecFiles | | (BATCH rec files BR0) | R6 | + |-----+----------+-------------------------+-------------------------+-----| + | R6 | ChkFiles | 1 BATCH recv successful | delay 2 secs | R7 | + | | | 2 BATCH recv failed | hang up, report bad file| exit| + |-----+----------+-------------------------+-------------------------+-----| + | R7 | AllowPkup| 1 have pickup for sender| receiver becomes sender | S3* | + | | | 2 nothing to pickup | hang up, rept recv ok | exit| + `-----+----------+-------------------------+-------------------------+-----' + + + E. Transport Layer : ????? + + 1. Data Definitions + + 2. Transport Layer Protocol : Routing + + FidoNet does not necessarily send a message directly to its + destination. To reduce the number of network connections, mail to a + subset of the nodelist may be routed to one node for further + distribution within that subset. In addition, custom routing is + possible. Routing of a message is determined in one of three ways. + + o If there are files attached, then a message must be sent directly to + its destination. + + o Messages without attached files should be routed through the inbound + host of the destination node's subnet as specified by a FidoNet + format nodelist. + + o To prevent overloading of inbound hosts, a system should provide for + host routing to be disabled for a target node, or nodes. + + + F. Network Layer : the Network's View of the System, Routing and Packets + + + 1. Network Layer Data Definition : the Packet Header + + The packet contains messages in packed format to be transferred over + the net during a connection. As this data structure is transferred, + its definition is critical to FidoNet. + + A packet may contain zero or more packed messages. A packet without + messages is often generated as a poll packet. + + Every packet begins with a packet header. The fields of the packet + header are of fixed length. + + + Packet Header + Offset + dec hex + .-----------------------------------------------. + 0 0 | origNode (low order) | origNode (high order) | + +-----------------------+-----------------------+ + 2 2 | destNode (low order) | destNode (high order) | + +-----------------------+-----------------------+ + 4 4 | year (low order) | year (high order) | + +-----------------------+-----------------------+ + 6 6 | month (low order) | month (high order) | + +-----------------------+-----------------------+ + 8 8 | day (low order) | day (high order) | + +-----------------------+-----------------------+ + 10 A | hour (low order) | hour (high order) | + +-----------------------+-----------------------+ + 12 C | minute (low order) | minute (high order) | + +-----------------------+-----------------------+ + 14 E | second (low order) | second (high order) | + +-----------------------+-----------------------+ + 16 10 | baud (low order) | baud (high order) | + +-----------------------+-----------------------+ + 18 12 | 0 | 2 | 0 | 0 | + +-----------------------+-----------------------+ + 20 14 | origNet (low order) | origNet (high order) | + +-----------------------+-----------------------+ + 22 16 | destNet (low order) | destNet (high order) | + +-----------------------+-----------------------+ + 24 18 | prodCode | serialNo | + +-----------------------+-----------------------+ + 26 1A | | + | password (some impls) | + | eight bytes | + | null padded | + | | + +-----------------------+-----------------------+ + 34 22 | origZone (low) (opt) | origZone (high) (opt) | + +-----------------------+-----------------------+ + 36 24 | destZone (low) (opt) | destZone (high) (opt) | + +-----------------------+-----------------------+ + 38 26 | fill | + ~ 20 bytes ~ + | | + +-----------------------+-----------------------+ + 58 3A | zero or more | + ~ packed ~ + | messages | + +-----------------------+-----------------------+ + | 0 | 0 | 0 | 0 | + `-----------------------+-----------------------' + + + Packet = PacketHeader { PakdMessage } 00H 00H + + PacketHeader = origNode (* of packet, not of messages in packet *) + destNode (* of packet, not of messages in packet *) + year (* of packet creation, e.g. 1986 *) + month (* of packet creation, 0-11 for Jan-Dec *) + day (* of packet creation, 1-31 *) + hour (* of packet creation, 0-23 *) + minute (* of packet creation, 0-59 *) + second (* of packet creation, 0-59 *) + baud (* max baud rate of orig and dest, 0=SEA *) + PacketType (* old type-1 packets now obsolete *) + origNet (* of packet, not of messages in packet *) + destNet (* of packet, not of messages in packet *) + prodCode (* 0 for Fido, write to FTSC for others *) + serialNo (* binary serial number (otherwise null)*) + password (* session password (otherwise null) *) + origZone (* zone of pkt sender (otherwise null) *) + destZone (* zone of pkt receiver (otherwise null)*) + fill[20] + + PacketType = 02H 00H (* 01H 00H was used by Fido versions before 10 + which did not support local nets. The packed + message header was also different for those + versions *) + + prodCode = ( 00H (* Fido *) + | ... + | ??H (* Please apply for new codes *) + ) + + + The remainder of the packet consists of packed messages. Each packed + message begins with a message type word 0200H. A pseudo-message + beginning with the word 0000H signifies the end of the packet. + + + 2. Network Layer Data Description : a File with Attributes + + The BATCH protocol uses the MODEM7 filename and TeLink/XMODEM file + transfer protocols to transfer the file with attributes. + + When a file is transferred via FidoNet, an attempt is made to also + pass the operating system's attributes for the file such as length, + modification date, etc. FidoNet does this via a special prefix block + to the XMODEM file transfer using a protocol known as TeLink. As the + TeLink protocol relies on a modification to the XMODEM file transfer + protocol, it is documented at the data link layer level. + + The MODEM7 file name is redundant if there is also a TeLink block, in + which case the name may be taken from either or both. + + FileName as Sent + Offset + dec hex + .-----------------------------------------------. + 0 0 | fileName | + ~ 8 bytes ~ + | left adjusted blank filled | + +-----------------------+-----------------------+ + 8 8 | fileExt | + ~ 3 bytes ~ + | left adjusted blank filled | + `-----------------------------------------------' + + + 3. Network Layer Protocol : BATCH File Finite State Machines + + + BATCH File Sender + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | St | + |-----+----------+-------------------------+-------------------------+-----| + | BS0*| MoreFiles| 1 more files to send | (MODEM7 FName send MS0) | BS1 | + | | | 2 no more files to send | | BS3 | + |-----+----------+-------------------------+-------------------------+-----| + | BS1 | CheckFNm | 1 MODEM7 Filename ok | (TeLink send file XS0) | BS2 | + | | | 2 MODEM7 Filename bad | report name send bad | exit| + |-----+----------+-------------------------+-------------------------+-----| + | BS2 | CheckFile| 1 TeLink send ok | | BS0 | + | | | 2 TeLink send bad | report file send bad | exit| + |-----+----------+-------------------------+-------------------------+-----| + | BS3 | EndSend | 1 rec NAK for next file | send EOT, report send ok| exit| + | | | 2 10 seconds no NAK | send EOT, report no NAK | exit| + `-----+----------+-------------------------+-------------------------+-----' + + When no files remain, the sender responds to the receiver's NAK with an + EOT. The EOT is not ACK/NAKed by the receiver. + + Filenames must be upper case ASCII. The data link layer uses "u" as a + control character. + + + BATCH File Receiver + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | St | + |-----+----------+-------------------------+-------------------------+-----| + | BR0*| RecvName | | (MODEM7 FName recv MR0) | BR1 | + |-----+----------+-------------------------+-------------------------+-----| + | BR1 | CheckFNm | 1 MODEM7 no more files | report files recd ok | exit| + | | | 2 MODEM7 Filename ok | (TeLink recv file XR0) | BR2 | + | | | 2 MODEM7 Filename bad | report name recv bad | exit| + |-----+----------+-------------------------+-------------------------+-----| + | BR2 | CheckFile| 1 TeLink recv ok | | BR0 | + | | | 2 TeLink recv bad | report file recv bad | exit| + `-----+----------+-------------------------+-------------------------+-----' + + + G. Data Link Layer : Error-Free Data Transfer + + 1. Data Link Layer Data Definition : XMODEM/TeLink Blocks + + XMODEM transfers are in blocks of 128 uninterpreted data bytes + preceded by a three byte header and followed by either a one byte + checksum or a two byte crc remainder. XMODEM makes no provision for + data streams which are not an integral number of blocks long. + Therefore, the sender pads streams whose length is not a multiple of + 128 bytes with the end-of-file character (^Z for MS-DOS), and use some + other means to convey the true data length to the receiver (e.g. + TeLink file info block). + + Data blocks contain sequence numbers so the receiver can ensure it has + the correct block. Block numbers are sequential unsigned eight bit + integers beginning with 01H and wrapping to 00H, except that a TeLink + block is given sequence number 00H. + + For files which are attached to the mail packet, not the mail packet + itself, if the sending system is aware of the file attributes as they + are known to the operating system, then the first block of the XMODEM + transfer may be a special TeLink block to transfer that information. + This block differs in that the first byte is a SYN character as + opposed to an SOH, and it is always sent checksum as opposed to CRC. + Should the receiver be unwilling to handle such information, after two + NAKs (or "C"s), the sender skips this special block and goes on to the + data itself. + + + + XMODEM Data Block (CRC mode) + Offset + dec hex + .-----------------------------------------------. + 0 0 | SOH - Start Of Header - 01H | + +-----------------------------------------------+ + 1 1 | BlockNumber | + +-----------------------------------------------+ + 2 2 | BlockComplement | + +-----------------------------------------------+ + 3 3 | 128 bytes of | + ~ uninterpreted ~ + | data | + +-----------------------------------------------+ + 131 83 | CRC high order byte | + +-----------------------------------------------+ + 132 84 | CRC low order byte | + `-----------------------------------------------' + + + + XMODEM Data Block (Checksum mode) + Offset + dec hex + .-----------------------------------------------. + 0 0 | SOH - Start Of Header - 01H | + +-----------------------------------------------+ + 1 1 | BlockNumber | + +-----------------------------------------------+ + 2 2 | BlockComplement | + +-----------------------------------------------+ + 3 3 | 128 bytes of | + ~ uninterpreted ~ + | data | + +-----------------------------------------------+ + 131 83 | Checksum byte | + `-----------------------------------------------' + + + TeLink File Descriptor Block + Offset + dec hex + .-----------------------------------------------. + 0 0 | SYN - File Info Header - 16H | + +-----------------------------------------------+ + 1 1 | 00H | + +-----------------------------------------------+ data offset + 2 2 | FFH | dec hex + +-----------------------------------------------+ + 3 3 | File Length, least significant byte | 0 0 + +-----------------------------------------------+ + 4 4 | File Length, second to least significant byte | 1 1 + +-----------------------------------------------+ + 5 5 | File Length, second to most significant byte | 2 2 + +-----------------------------------------------+ + 6 6 | File Length, most significant byte | 3 3 + +-----------------------------------------------+ + 7 7 | Creation Time of File | 4 4 + | "DOS Format" | + +-----------------------------------------------+ + 9 9 | Creation Date of File | 6 6 + | "DOS Format" | + +-----------------------------------------------+ + 11 B | File Name | 8 8 + ~ 16 chars ~ + | left justified blank filled | + +-----------------------------------------------+ + 27 1B | 00H | 24 18 + +-----------------------------------------------+ + 28 1C | Sending Program Name | 25 19 + ~ 16 chars ~ + | left justified Null filled | + +-----------------------------------------------+ + 44 2C | 01H (for CRC) or 00H | 41 29 + +-----------------------------------------------+ + 45 2D | fill | 42 2A + ~ 86 bytes ~ + | all zero | + +-----------------------------------------------+ + 132 84 | Checksum byte | + `-----------------------------------------------' + + + + XMODEMData = XMODEMBlock (* block of data with header and + trailer *) + | TeLinkBlock (* TeLink File Descriptor Block *) + | ACK (* acknowledge data received ok *) + | NAK (* negative ACK & poll 1st block *) + | EOT (* end of xfer, after last block *) + | "C" (* 43H *) + + XMODEMBlock = SOH (* Start of Header, XMODEM Block *) + blockNumber[1] (* sequence, i'=mod( i+1, 256 ) *) + blockCompl[1] (* one's compl of BlockNumber *) + data[128] (* uninterpreted user data block *) + (CRC | Checksum) (* error detect/correction code *) + + TeLinkBlock = SYN (* File Info Header *) + 00H (* block no, must be first block *) + FFH (* one's complement of block no *) + fileLength[4] (* length of data in bytes *) + CreationTime[2] (* time file last modified or zero *) + CreationDate[2] (* date file last modified or zero *) + fileName(16) (* name of file, not vol or dir *) + 00H (* header version number *) + sendingProg(16) (* name of program on send side *) + crcMode[1] (* 01H for CRC 00H for Checksum *) + fill[87] (* zeroed *) + Checksum (* error detect/correction code *) + + ACK = 06H (* acknowledge data received ok *) + NAK = 15H (* negative ACK & poll 1st block *) + SOH = 01H (* start of header, begins block *) + SYN = 16H (* start of TeLink file info blk *) + EOT = 04H (* end of xfer, after last block *) + + CRC = crc[2] (* CCITT Cyclic Redundancy Check *) + + Checksum = checksum[1] (* low 8 bits of sum of data bytes + using unsigned 8 bit arithmetic *) + + CreationDate = year[.7] (* 7 bits, years since 1980, 0-127 *) + month[.4] (* 4 bits, month of year, 1-12 *) + day[.5] (* 5 bits, day of month, 1-31 *) + + CreationTime = hour[.5] (* 5 bits, hour of day, 0-23 *) + minute[.6] (* 6 bits, minute of hour, 0-60 *) + biSeconds[.2] (* 6 bits, seconds/2, 0-29 *) + + + Note that the crcMode is always set to 01H in current implementations + as all TeLink/XMODEM implementations use the CRC method. Therefore, + it is always set to 01H by the sender, and is ignored by the receiver. + + + 2. Data Link Layer Protocol : XMODEM/TeLink Finite State Machines + + The protocol is receiver driven, the receiver polling the sender for + each block. If the receiver polls for the first block using a "C" + (43H) as the poll character, it would prefer to have the CRC-CCITT + polynomial remainder error detection code at the end of each block as + opposed to a one byte unsigned checksum. The sender will respond to + the "C" poll iff it can comply. If the sender chooses checksum as + opposed to CRC, it waits for the receiver to poll with NAK (15H). + Should the checksum method be preferable to the receiver, it polls + with NAK rather than "C". + + The sender returns an EOT instead of a data block when no data remain. + + Neither the sender nor the receiver should send the block or ACK/NAK + response while there is data being received. They should wait for the + line to settle, and possibly time out. + + It is suggested that one's input buffer be cleared immediately after + sending block or ACK/NAK response, before waiting for the response from + the other end. This clears any line garbage which occurred during + transmit. + + + XMODEM/TeLink Sender + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | St | + |-----+----------+-------------------------+-------------------------+-----| + | XS0 | WaitTeLnk| 1 over 40-60 seconds | report sender timeout | exit| + | | | 2 over 2 tries | note TeLink block failed| XS1 | + | | | 3 NAK or "C" received | send TeLink, incr tries | XS0 | + | | | 4 ACK received | TeLink ok, set crc/cksm | XS2 | + |-----+----------+-------------------------+-------------------------+-----| + | XS1 | WaitStart| 1 over 40-60 seconds | report sender timeout | exit| + | | | 2 over 20 tries | report send failed | exit| + | | | 3 NAK received | set checksum mode | XS2 | + | | | 4 "C" recd, I can crc | set crc mode | XS2 | + | | | 5 "C" recd, I can't crc | | XS1 | + |-----+----------+-------------------------+-------------------------+-----| + | XS2 | SendBlock| 1 more data available | send next data block | XS3 | + | | | | as checksum or crc | | + | | | 2 last block has gone | send EOT | XS4 | + |-----+----------+-------------------------+-------------------------+-----| + | XS3 | WaitACK | 1 10 retries or 1 minute| report send failed | exit| + | | | 2 ACK received | | XS2 | + | | | 3 NAK (or C if 1st blk) | resend last block | XS3 | + |-----+----------+-------------------------+-------------------------+-----| + | XS4 | WaitEnd | 1 10 retries or 1 minute| report send failed | exit| + | | | 2 ACK received | report send successful | exit| + | | | 3 NAK received | resend EOT | XS4 | + `-----+----------+-------------------------+-------------------------+-----' + + + XMODEM/TeLink Receiver + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | St | + |-----+----------+-------------------------+-------------------------+-----| + | XR0 | RecStart | 1 prefer crc mode | Send "C" | XR1 | + | | | 2 want checksum mode | send NAK | XR1 | + |-----+----------+-------------------------+-------------------------+-----| + | XR1 | WaitFirst| 1 10 retries or 1 minute| report receive failure | exit| + | | | 2 > 3 retries or 30 secs| set want checksum mode | XR0 | + | | | 3 EOT received | delay < sec, purge input| exit| + | | | | send ACK, report no file| | + | | | 4 TeLink block recd | send ACK, set crc/cksm | XR2 | + | | | 5 data block recd | send ACK, set crc/cksm | XR2 | + | | | 6 bad block or 2-10 secs| incr retry count | XR0 | + |-----+----------+-------------------------+-------------------------+-----| + | XR2 | WaitBlock| 1 10 retries or 1 minute| report receive failure | exit| + | | | 2 EOT received | send ACK, report recd ok| exit| + | | | | send ACK, report recd ok| | + | | | 3 data block received | send ACK | XR2 | + | | | 4 bad block or 2-10 secs| send NAK, incr retry cnt| XR2 | + `-----+----------+-------------------------+-------------------------+-----' + + + A number of checks should be made to ensure a valid data block has been + received. + + o The physical layer should have encountered no errors, e.g. parity, + framing, etc. + + o The length of the block should not be less than expected. + + o If the blocks sequence number does not match the complement, then + respond with a NAK and attempt to read the block again. + + o If the block's sequence number is one previous (remember wrap around) + to that of the expected block, respond with an ACK and read again. + + o If the sequence number fits neither of the above criteria, and is yet + not the expected sequence number, abort the receive. + + o The checksum or CRC should be correct. + + + + 3. Data Link Layer Protocol : MODEM7 Filename Finite State Machines + + + MODEM7 Filename Sender + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | St | + |-----+----------+-------------------------+-------------------------+-----| + | MS0 | WaitNak | 1 20 retries or 1 minute| filename send failed | exit| + | | | 2 NAK received | send ACK & 1st ch of fn | MS1 | + | | (note 1) | 3 C received | return fn skipped | exit| + |-----+----------+-------------------------+-------------------------+-----| + | MS1 | WaitChAck| 1 ACK rcd, fname done | send SUB = 1AH | MS2 | + | | | 2 ACK rcd, fname ~done | send next ch of fname | MS1 | + | | | 3 other char or 1 sec | send "u", incr retry cnt| MS0 | + |-----+----------+-------------------------+-------------------------+-----| + | MS2 | WaitCksm | 1 cksum recd and ok | send ACK, report fn ok | exit| + | | | 2 cksum recd but bad | send "u", incr retry cnt| MS0 | + | | | 3 no cksum in 1 sec | send "u", incr retry cnt| MS0 | + `-----+----------+-------------------------+-------------------------+-----' + + + MODEM7 Filename Receiver + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | St | + |-----+----------+-------------------------+-------------------------+-----| + | MR0 | SendNak | 1 20 tries or 1 minute | report filename failure | exit| + | | | 2 | send NAK, incr try cnt | MR1 | + |-----+----------+-------------------------+-------------------------+-----| + | MR1 | WaitAck | 1 rcd ACK | | MR2 | + | | | 2 rcd EOT | report no files remain | exit| + | | | 3 5 secs & no ACK/EOT | | MR0 | + |-----+----------+-------------------------+-------------------------+-----| + | MR2 | WaitChar | 1 recd EOT (can happen?)| report no files remain | exit| + | | | 2 recd SUB | send checksum byte | MR3 | + | | | 3 recd "u" | | MR0 | + | | | 4 recd char of name | send ACK | MR2 | + | | | 5 no char in 1 second | | MR0 | + |-----+----------+-------------------------+-------------------------+-----| + | MR3 | WaitOkCk | 1 recd ACK within 1 sec | report recd filename ok | exit| + | | | 2 recd "u" or other char| | MR0 | + `-----+----------+-------------------------+-------------------------+-----' + + SUB is the ASCII character ^Z or 1AH. The checksum is the unsigned low + order eight bits of the sum of the characters in the transferred filename + including the SUB. + + Although one second timeouts are used successfully by Fido and SEAdog, + some fear that this is too small a timeout for some satellite and packet + network links. + + Note 1 - MS0.3 is a common addition to accommodate a common noncompliance. + Support of MS0.3 is optional for a compliant mailer. This hack + also requires modification of a number of state tables, see + FSC-0011. + + + H. Physical Layer : the Actual Connection of Two FidoNet Systems + + Will one of the more hardware-oriented comm types give me some idea of + what's needed here? Can we leave it open enough to allow implementation + over a non-dial net? Thanks. + + + I. Revisions since FTS-0001 + + 89 Oct 25 (rev 13) + o packet header: optional serialNo, password, and orig/dest zone + o stored message to/from zone/point info added as option per + Fido-12 and Dutchie + o XR1 and XR2 changes per FSC-0011 + o reference to FSC-0011 for the MODEM7-avoidance hack, MS0.3 + o dropped enumeration of product codes + o S4 modification from FSC-0011 + o Nodelist and EID reference appropriate documents + o various cosmetics + 90 July 1-5 (rev 14) + o spelling errors caught by Ray Gardner + o references to the now dead IFNA elided + o offset at end of Packed Message was 10 as opposed to 20 bytes + o Packed Message and Packet Header corrections by Roland Gautschi + o Offsets in TeLink header caught by Rick Moore + 90 August 30 (rev 15) + o corrected offsets in packet header + 95 September 30 (rev 16) + o TOPT corrected + o contact info changed + + + J. Acknowledgements + + Ben Baker, Thom Henderson, Tom Jennings, Ken Kaplan, and Gee Wong + suggested, informed, reviewed, and encouraged. Tom and Thom gave me + all the basics, and even allowed me to look at actual code. Bob Hartman + was foolish enough to implement the specification, and was generous + with useful feedback. Ray Gardner caught my spelling errors , + and Roland Gautschi and Rick Moore found offset and length errors. + + My employer, Pacific Systems Group was kind enough to donate my time to + research and to write this document. + + Fido and FidoNet are registered trademarks of Tom Jennings. + + SEAdog is a trademark of System Enhancement Associates. + + + K. Bibliography + + Documentation for the protocols and data formats are scattered. Some + are unattributed, some even untitled. + + Anonymous, changes to MODEM to implement CRC option XMDM-CRC.TXT + + Baker, Ken and Moore, Rick, Nodelist Definition, currently FTS-0005 + + Christensen, Ward, "MODEM Protocol Overview" of 1 January 82 XMODEM.TXT + + Hartman, Bob, "Some thoughts that I had on FSC001", FSC-0011 + + Henderson, Thom, "SEAdog Electronic Mail System Version 3" of April 86 + + International Standards Organization, "Data Processing - Open Systems + Interconnection - Basic Reference Model" ISO/DIS 7498 April 82 + + Jennings, Tom, "FidoNet Electronic Mail Protocol" 8 February 85 + FIDOMAIL.DOC + + Jennings, Tom, "Fido's Internal Structures" of 13 September 85 + STRUCT.TXT aka STRUCT.APX + + Jennings, Tom, "Extending XMODEM/MODEM File Transfer Protocol to support + DOS" 20 September 83 FILEXFER.DOC + + Jordan, Larry, "XMODEM File Transfer Protocol" XMDM-LJ.TXT + + Rudin, H and West, C, "Protocol Specification, Testing, and + Verification, III" Proceedings of the IFIP WG 6.1 Third International + Workshop on Protocol Specification, Testing, and Verification, + Rueschlikon Switzerland 31 May - 2 June 1983. + + Tanenbaum, Andrew, "Computer Networks" Prentice Hall 1981 + + Messages generated by Fido 11w, SEAdog 3.8, and QMail 1.01 +
-FTS-0004 EchoMail Specification - -This document is directly derived from the documentation of - -------------------------------------------------------------------------------- - - The Conference Mail System - - By - Bob Hartman - Sysop of FidoNet(tm) node 132/101 - - (C) Copyright 1986,87, Spark Software, Inc. - - 427-3 Amherst Street - CS 2032, Suite 232 - Nashua, N.H. 03061 - - ALL RIGHTS RESERVED. - -------------------------------------------------------------------------------- - -version 3.31 of 12 December, 1987. - -With Bob Hartman's kind consent, copying for the purpose of technological -research and advancement is allowed. - - -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- - - - WHAT IS THE CONFERENCE MAIL SYSTEM? - - Conference Mail is a technique to permit several nodes on a - network to share a message base, similar in concept to the - conferences available on many of the computer services, but it is - most closely related to the Usenet system consisting of more than - 8,000 systems world wide. All systems sharing a given conference - see any messages entered into the conference by any of the - participating systems. This can be implemented in such a way as - to be totally transparent to the users of a particular node. In - fact, they may not even be aware of the network being used to - move their messages about from node to node! Unfortunately, this - has its disadvantages also - most users who are not educated - about Conference Mail do not realize the messages transmitted - cost MANY sysops (system operators) money, not just the local - sysop. This is an important consideration in Conference Mail and - should not be taken lightly. In a conference with 100 systems as - participants the cost per message can get quite high. - - The Conference Mail System is designed to operate in conjunction - with a FidoNet compatible mail server. The currently supported - mail servers are Fido(tm), SEAdog(tm), Opus, and Dutchie. Since - the mail server is a prerequisite to using the Conference Mail - System, it will be assumed you already have your mail server - operating correctly on your system, and you are connected into - FidoNet or a compatible network. - - - HISTORY OF THE CONFERENCE MAIL SYSTEM - - In late 1985, Jeff Rush, a Fido sysop in Dallas, wanted a - convenient means of sharing ideas with the other Dallas sysops. - He created a system of programs he called Echomail, and the - Dallas sysops' Conference was born. - - Within a short time sysops in other areas began hearing of this - marvelous new gadget and Echomail took on a life of its own. - Today, a scant year and a half later, the FidoNet public network - boasts a myriad of conferences varying in size from the dozen-or- - so participants in the FidoNet Technical Standards Committee - Conference to the Sysops' Conference with several hundred - participants. It is not uncommon for a node to carry 30 or more - conferences and share those conferences with 10 or more nodes. - - - HOW IT WORKS - - The Conference Mail System is functionally compatible with the - original Echomail utilities. In general, the process is: - - 1. A message is entered into a designated area on a FidoNet - compatible system. - - 2. This message is "Exported" along with some control information - to each system "linked" to the conference through the originating - system. - - 3. Each of the receiving systems "Import" the message into the - proper Conference Mail area. - - 4. The receiving systems then "Export" these messages, along with - additional control information, to each of their conference - links. - - 5. Return to step 3. - - As you can see, the method is quite simple - in general. Of - course, following the steps literally would mean messages would - never stop being Exported and transmitted to other systems. This - obviously would not be desired or the network would quickly - become overburdened. The information contained in the 'control - information' section is used to prevent transmitting the same - message more than once to a single system. - - - CONFERENCE MAIL MESSAGE CONTROL INFORMATION - - There are five pieces of control information associated with a - Conference Mail message. Some are optional, some are not. - Normally this information is never entered by the person creating - the message. The following control fields determine how - Conference Mail is handled: - - 1. Area line - - This is the first line of a conference mail message. Its - actual appearance is: - - AREA:CONFERENCE - - Where CONFERENCE is the name of the conference. This line is - added when a conference is being "Exported" to another - system. It is based upon information found in the AREAS.BBS - (configuration) File for the designated message area. This - field is REQUIRED by the receiving system to "Import" a - message into the correct Conference Mail area. - - 2. Tear Line - - This line is near the end of a message and consists of three - dashes (---) followed by an optional program specifier. - This is used to show the first program used to add Echomail - compatible control information to the message. The tear line - generated by Conference Mail looks like: - - --- - - This field is optional for most Echomail compatible - processors, and is added by the Conference Mail System to - ensure complete compatibility. Some systems will place this - line in the message when it is first created, but it is - normally added when the message is first "exported." - - 3. Origin line - - This line appears near the bottom of a message and gives a - small amount of information about the system where it - originated. It looks like: - - * Origin: The Conference Mail BBS (1:132/101) - - The " * Origin: " part of the line is a constant field. - This is followed by the name of the system as taken from the - AREAS.BBS file or a file named ORIGIN located in the DOS - directory of the designated message area. The complete - network address (1:132/101 in this case) is added by the - program inserting the line. This field is generated at the - same time as the tear line, and therefore may either be - generated at the time of creation or during the first - "export" processing. Although the Origin line is not - required by all Echomail processors, it is added by the - Conference Mail System to ensure complete compatibility. - - - 4. Seen-by Lines - - There can be many seen-by lines at the end of Conference - Mail messages, and they are the real "meat" of the control - information. They are used to determine the systems to - receive the exported messages. The format of the line is: - - SEEN-BY: 132/101 113 136/601 1014/1 - - The net/node numbers correspond to the net/node numbers of - the systems having already received the message. In this way - a message is never sent to a system twice. In a conference - with many participants the number of seen-by lines can be - very large. This line is added if it is not already a part - of the message, or added to if it already exists, each time - a message is exported to other systems. This is a REQUIRED - field, and Conference Mail will not function correctly if - this field is not put in place by other Echomail compatible - programs. - - 5. PATH Lines - - These are the last lines in a Conference Mail message and - are a new addition, and therefore is not supported by all - Echomail processors. It appears as follows: - - ^aPATH: 132/101 1014/1 - - Where the ^a stands for Control-A (ASCII character 1) and - the net/nodes listed correspond to those systems having - processed the message before it reached the current system. - This is not the same as the seen-by lines, because those - lines list all systems the message has been sent to, while - the path line contains all systems having actually processed - the message. This is not a required field, and few echomail - processors currently support it, however it can be used - safely with any other system, since the line(s) will be - ignored. For a discussion on how the path line can be - helpful, see the "Advanced Features" section of this manual. - - - METHODS OF SENDING CONFERENCE MAIL - - To this point the issue of how Conference Mail is actually sent - has been glossed over entirely. The phrase has been, "the message - is exported to another system." What exactly does this mean? - Well, for starters lets show what is called the "basic" setup: - - In this setup exported mail is placed into the FidoNet mail area. - Each message exported from a Conference Mail area has one - message generated for each receiving system. This mail is then - sent the same as any other network mail. When Echomail was first - created this was the only way mail could be sent. - - The "basic" method has some disadvantages. First, since Echomail - has grown so large it is not uncommon to get 200 new messages per - day imported into various message bases. It is also not uncommon - for a system to be exporting messages to 4 or 5 other systems. - Simple arithmetic shows 800-1000 messages per day would be sent - in normal netmail! This puts a tremendous strain on any netmail - system, not to mention transmission time and the resultant phone - charges. When this limitation of Echomail was first noticed a lot - of people started scratching their heads wondering what to do. If - a solution could not be found it appeared Echomail would - certainly overrun the capabilities of FidoNet. - - Thom Henderson (from System Enhancement Associates) came up with - the original ARCmail program. Having previously written the ARC - file archiving and compression program, he knew the savings - achievable by having all of the netmail messages placed in .ARC - format for transmission. As a byproduct, the messages no longer - appeared in the netmail area, but were included in a file - attached to a message (see your FidoNet mailer manual for file - attaches). In this way the tremendous number of messages - generated, and the phone bill problems were both solved. - - Unfortunately, ARCmail required the messages to first be placed - into the netmail area before it could be run. In effect, it - caused the messages to be scanned once when they were exported, - once during the ARCmail phase, once when ARCmail was run at the - other end to get the messages out of .ARC format, and once when - those messages were later imported into a message base on the - receiving system. The Conference Mail System solves this problem - by eliminating the ARCmail program. Conference Mail builds the - ARCmail files during Export, and unpacks them during Import. This - way messages are exported directly to ARCmail style file - attaches, and imported directly from ARCmail style file attaches. - The scanning phases between importing and exporting messages are - totally removed and processing time is proportionally reduced. - - This is now the most common method for sending Conference Mail - between systems. The overhead involved in doing it during the - importing and exporting phases is much less than what is involved - if ARCmailing is not utilized. This was a primary consideration - in the design and implementation of the Conference Mail System, - and as a result the entire system is optimized for this type of - use. Please refer to the Import and Export functions for - specifics on how to use the ARCmailing feature. - - - CONFERENCE TOPOLOGY - - The way in which systems link together for a particular - conference is called the "conference topology." It is important - to know this structure for two reasons: 1) It is important to - have a topology which is efficient in the transfer of the - Conference Mail messages, and 2) It is important to have a - topology which will not cause systems to see the same messages - more than once. - - Efficiency can be measured in a number of ways; least time - involved for all systems to receive a message, least cost for all - systems to receive a message, and fewest phone calls required for - all systems to receive a message are all valid indicators of - efficiency. Users of Echomail compatible systems have determined - (through trial and error) the best measure of efficiency is a - combination of all three of the measurements given above. - Balancing the equation is not trivial, but some guidelines can be - given: - - 1. Never have two systems attempting to send Conference mail - to each other at the same time. This results in "collisions" - that will cause both systems to fail. To avoid this, one - system should be responsible for polling while the other - system is holding mail. This arrangement can alternate based - upon various criteria, but both systems should never be - attempting to call each other at the same time. - - 2. Have nodes form "stars" for distribution of Conference - Mail. This arrangement has several nodes all receiving their - Conference Mail from the same system. In general the systems - on the "outside" of the star poll the system on the - "inside". The system on the "inside" in turn polls other - systems to receive the Conference Mail that is being passed - on to the "outside" systems. - - 3. Utilize fully connected polygons with a few vertices. - Nodes can be connected in a triangle (A sends to B and C, B - sends to A and C, C sends to A and B) or a fully connected - square (all corners of the square send to all of the other - corners). This method is useful for getting Conference Mail - messages to each node as quickly as possible. - - - All of these efficiency guidelines have to be tempered with the - guidelines dealing with keeping duplicate messages from being - exported. Duplicates will occur in any topology that forms a - closed polygon that is not fully connected. Take for example the - following configuration: - - A ----- B - | | - | | - C ----- D - - This square is a closed polygon that is not fully connected. It - is capable of generating duplicates as follows: - - 1. A message is entered on node A. - - 2. Node A exports the message to node B and node C placing - the seen-by for A, B, and C in the message as it does so. - - 3. Node B sees that node D is not listed in the seen-by and - exports the message to node D. - - 4. Node C sees that node D is not listed in the seen-by and - exports the message to node D. - - At this point node D has received the same message twice - a - duplicate was generated. Normally a "dup-ring" will not be as - simple as a square. Generally it will be caused by a system on - one end of a long chain accidentally connecting to a system on - the other end of the chain. This causes the two ends of the chain - to become connected, forming a polygon. - - In FidoNet this problem is reduced somewhat by having "Regional - Echomail Coordinators" (RECS) that try to keep track of Echomail - connections within their regions of the world. A further rule - which is followed is that only the RECS are allowed to make - inter-regional connections for the larger conferences. In return, - the RECS have established a very efficient topology which gets - messages from coast to coast, and onto over 200 systems in less - than 24 hours. If no one were willing to follow the rules, then - this system would collapse, but due to the excellent efficiency - it has remained intact for over a year. - - - Why a PATH line? - - As was previously mentioned, the PATH line is a new concept in - Echomail. It stores the net/node numbers of each system having - actually processed a message. This information is useful in - correcting the biggest problem encountered by nodes running an - Echomail compatible system - the problem of finding the cause of - duplicate messages. How does the PATH line help solve this - problem? Take the following path line as an example: - - ^aPATH: 107/6 107/312 132/101 - - This shows the message was processed by system 107/6 and - transferred to system 107/312. It further shows system 107/312 - transferred the message to 132/101, and 132/101 processed it - again. Now take the following path line as the example: - - ^aPATH: 107/6 107/312 107/528 107/312 132/101 - - This shows the message having been processed by node 107/312 on - more than one occasion. Based upon the earlier description of the - 'information control' fields in Echomail messages, this clearly - is an error in processing (see the section entitled "How it - Works"). This further shows node 107/528 as the node which - apparently processed the message incorrectly. In this case the - path line can be used to quickly locate the source of duplicate - messages. - - In a conference with many participants it becomes almost - impossible to determine the exact topology used. In these cases - the use of the path line can help a coordinator of the conference - track any possible breakdowns in the overall topology, while not - substantially increasing the amount of information transmitted. - Having this small amount of information added to the end of each - message pays for itself very quickly when it can be used to help - detect a topology problem causing duplicate messages to be - transmitted to each system. - --30- -- - Go Back - - - - + + + +
+FTS-0004 EchoMail Specification + +This document is directly derived from the documentation of + +------------------------------------------------------------------------------- + + The Conference Mail System + + By + Bob Hartman + Sysop of FidoNet(tm) node 132/101 + + (C) Copyright 1986,87, Spark Software, Inc. + + 427-3 Amherst Street + CS 2032, Suite 232 + Nashua, N.H. 03061 + + ALL RIGHTS RESERVED. + +------------------------------------------------------------------------------- + +version 3.31 of 12 December, 1987. + +With Bob Hartman's kind consent, copying for the purpose of technological +research and advancement is allowed. + + +------------------------------------------------------------------------------- +------------------------------------------------------------------------------- + + + WHAT IS THE CONFERENCE MAIL SYSTEM? + + Conference Mail is a technique to permit several nodes on a + network to share a message base, similar in concept to the + conferences available on many of the computer services, but it is + most closely related to the Usenet system consisting of more than + 8,000 systems world wide. All systems sharing a given conference + see any messages entered into the conference by any of the + participating systems. This can be implemented in such a way as + to be totally transparent to the users of a particular node. In + fact, they may not even be aware of the network being used to + move their messages about from node to node! Unfortunately, this + has its disadvantages also - most users who are not educated + about Conference Mail do not realize the messages transmitted + cost MANY sysops (system operators) money, not just the local + sysop. This is an important consideration in Conference Mail and + should not be taken lightly. In a conference with 100 systems as + participants the cost per message can get quite high. + + The Conference Mail System is designed to operate in conjunction + with a FidoNet compatible mail server. The currently supported + mail servers are Fido(tm), SEAdog(tm), Opus, and Dutchie. Since + the mail server is a prerequisite to using the Conference Mail + System, it will be assumed you already have your mail server + operating correctly on your system, and you are connected into + FidoNet or a compatible network. + + + HISTORY OF THE CONFERENCE MAIL SYSTEM + + In late 1985, Jeff Rush, a Fido sysop in Dallas, wanted a + convenient means of sharing ideas with the other Dallas sysops. + He created a system of programs he called Echomail, and the + Dallas sysops' Conference was born. + + Within a short time sysops in other areas began hearing of this + marvelous new gadget and Echomail took on a life of its own. + Today, a scant year and a half later, the FidoNet public network + boasts a myriad of conferences varying in size from the dozen-or- + so participants in the FidoNet Technical Standards Committee + Conference to the Sysops' Conference with several hundred + participants. It is not uncommon for a node to carry 30 or more + conferences and share those conferences with 10 or more nodes. + + + HOW IT WORKS + + The Conference Mail System is functionally compatible with the + original Echomail utilities. In general, the process is: + + 1. A message is entered into a designated area on a FidoNet + compatible system. + + 2. This message is "Exported" along with some control information + to each system "linked" to the conference through the originating + system. + + 3. Each of the receiving systems "Import" the message into the + proper Conference Mail area. + + 4. The receiving systems then "Export" these messages, along with + additional control information, to each of their conference + links. + + 5. Return to step 3. + + As you can see, the method is quite simple - in general. Of + course, following the steps literally would mean messages would + never stop being Exported and transmitted to other systems. This + obviously would not be desired or the network would quickly + become overburdened. The information contained in the 'control + information' section is used to prevent transmitting the same + message more than once to a single system. + + + CONFERENCE MAIL MESSAGE CONTROL INFORMATION + + There are five pieces of control information associated with a + Conference Mail message. Some are optional, some are not. + Normally this information is never entered by the person creating + the message. The following control fields determine how + Conference Mail is handled: + + 1. Area line + + This is the first line of a conference mail message. Its + actual appearance is: + + AREA:CONFERENCE + + Where CONFERENCE is the name of the conference. This line is + added when a conference is being "Exported" to another + system. It is based upon information found in the AREAS.BBS + (configuration) File for the designated message area. This + field is REQUIRED by the receiving system to "Import" a + message into the correct Conference Mail area. + + 2. Tear Line + + This line is near the end of a message and consists of three + dashes (---) followed by an optional program specifier. + This is used to show the first program used to add Echomail + compatible control information to the message. The tear line + generated by Conference Mail looks like: + + --- <a small product-specific banner> + + This field is optional for most Echomail compatible + processors, and is added by the Conference Mail System to + ensure complete compatibility. Some systems will place this + line in the message when it is first created, but it is + normally added when the message is first "exported." + + 3. Origin line + + This line appears near the bottom of a message and gives a + small amount of information about the system where it + originated. It looks like: + + * Origin: The Conference Mail BBS (1:132/101) + + The " * Origin: " part of the line is a constant field. + This is followed by the name of the system as taken from the + AREAS.BBS file or a file named ORIGIN located in the DOS + directory of the designated message area. The complete + network address (1:132/101 in this case) is added by the + program inserting the line. This field is generated at the + same time as the tear line, and therefore may either be + generated at the time of creation or during the first + "export" processing. Although the Origin line is not + required by all Echomail processors, it is added by the + Conference Mail System to ensure complete compatibility. + + + 4. Seen-by Lines + + There can be many seen-by lines at the end of Conference + Mail messages, and they are the real "meat" of the control + information. They are used to determine the systems to + receive the exported messages. The format of the line is: + + SEEN-BY: 132/101 113 136/601 1014/1 + + The net/node numbers correspond to the net/node numbers of + the systems having already received the message. In this way + a message is never sent to a system twice. In a conference + with many participants the number of seen-by lines can be + very large. This line is added if it is not already a part + of the message, or added to if it already exists, each time + a message is exported to other systems. This is a REQUIRED + field, and Conference Mail will not function correctly if + this field is not put in place by other Echomail compatible + programs. + + 5. PATH Lines + + These are the last lines in a Conference Mail message and + are a new addition, and therefore is not supported by all + Echomail processors. It appears as follows: + + ^aPATH: 132/101 1014/1 + + Where the ^a stands for Control-A (ASCII character 1) and + the net/nodes listed correspond to those systems having + processed the message before it reached the current system. + This is not the same as the seen-by lines, because those + lines list all systems the message has been sent to, while + the path line contains all systems having actually processed + the message. This is not a required field, and few echomail + processors currently support it, however it can be used + safely with any other system, since the line(s) will be + ignored. For a discussion on how the path line can be + helpful, see the "Advanced Features" section of this manual. + + + METHODS OF SENDING CONFERENCE MAIL + + To this point the issue of how Conference Mail is actually sent + has been glossed over entirely. The phrase has been, "the message + is exported to another system." What exactly does this mean? + Well, for starters lets show what is called the "basic" setup: + + In this setup exported mail is placed into the FidoNet mail area. + Each message exported from a Conference Mail area has one + message generated for each receiving system. This mail is then + sent the same as any other network mail. When Echomail was first + created this was the only way mail could be sent. + + The "basic" method has some disadvantages. First, since Echomail + has grown so large it is not uncommon to get 200 new messages per + day imported into various message bases. It is also not uncommon + for a system to be exporting messages to 4 or 5 other systems. + Simple arithmetic shows 800-1000 messages per day would be sent + in normal netmail! This puts a tremendous strain on any netmail + system, not to mention transmission time and the resultant phone + charges. When this limitation of Echomail was first noticed a lot + of people started scratching their heads wondering what to do. If + a solution could not be found it appeared Echomail would + certainly overrun the capabilities of FidoNet. + + Thom Henderson (from System Enhancement Associates) came up with + the original ARCmail program. Having previously written the ARC + file archiving and compression program, he knew the savings + achievable by having all of the netmail messages placed in .ARC + format for transmission. As a byproduct, the messages no longer + appeared in the netmail area, but were included in a file + attached to a message (see your FidoNet mailer manual for file + attaches). In this way the tremendous number of messages + generated, and the phone bill problems were both solved. + + Unfortunately, ARCmail required the messages to first be placed + into the netmail area before it could be run. In effect, it + caused the messages to be scanned once when they were exported, + once during the ARCmail phase, once when ARCmail was run at the + other end to get the messages out of .ARC format, and once when + those messages were later imported into a message base on the + receiving system. The Conference Mail System solves this problem + by eliminating the ARCmail program. Conference Mail builds the + ARCmail files during Export, and unpacks them during Import. This + way messages are exported directly to ARCmail style file + attaches, and imported directly from ARCmail style file attaches. + The scanning phases between importing and exporting messages are + totally removed and processing time is proportionally reduced. + + This is now the most common method for sending Conference Mail + between systems. The overhead involved in doing it during the + importing and exporting phases is much less than what is involved + if ARCmailing is not utilized. This was a primary consideration + in the design and implementation of the Conference Mail System, + and as a result the entire system is optimized for this type of + use. Please refer to the Import and Export functions for + specifics on how to use the ARCmailing feature. + + + CONFERENCE TOPOLOGY + + The way in which systems link together for a particular + conference is called the "conference topology." It is important + to know this structure for two reasons: 1) It is important to + have a topology which is efficient in the transfer of the + Conference Mail messages, and 2) It is important to have a + topology which will not cause systems to see the same messages + more than once. + + Efficiency can be measured in a number of ways; least time + involved for all systems to receive a message, least cost for all + systems to receive a message, and fewest phone calls required for + all systems to receive a message are all valid indicators of + efficiency. Users of Echomail compatible systems have determined + (through trial and error) the best measure of efficiency is a + combination of all three of the measurements given above. + Balancing the equation is not trivial, but some guidelines can be + given: + + 1. Never have two systems attempting to send Conference mail + to each other at the same time. This results in "collisions" + that will cause both systems to fail. To avoid this, one + system should be responsible for polling while the other + system is holding mail. This arrangement can alternate based + upon various criteria, but both systems should never be + attempting to call each other at the same time. + + 2. Have nodes form "stars" for distribution of Conference + Mail. This arrangement has several nodes all receiving their + Conference Mail from the same system. In general the systems + on the "outside" of the star poll the system on the + "inside". The system on the "inside" in turn polls other + systems to receive the Conference Mail that is being passed + on to the "outside" systems. + + 3. Utilize fully connected polygons with a few vertices. + Nodes can be connected in a triangle (A sends to B and C, B + sends to A and C, C sends to A and B) or a fully connected + square (all corners of the square send to all of the other + corners). This method is useful for getting Conference Mail + messages to each node as quickly as possible. + + + All of these efficiency guidelines have to be tempered with the + guidelines dealing with keeping duplicate messages from being + exported. Duplicates will occur in any topology that forms a + closed polygon that is not fully connected. Take for example the + following configuration: + + A ----- B + | | + | | + C ----- D + + This square is a closed polygon that is not fully connected. It + is capable of generating duplicates as follows: + + 1. A message is entered on node A. + + 2. Node A exports the message to node B and node C placing + the seen-by for A, B, and C in the message as it does so. + + 3. Node B sees that node D is not listed in the seen-by and + exports the message to node D. + + 4. Node C sees that node D is not listed in the seen-by and + exports the message to node D. + + At this point node D has received the same message twice - a + duplicate was generated. Normally a "dup-ring" will not be as + simple as a square. Generally it will be caused by a system on + one end of a long chain accidentally connecting to a system on + the other end of the chain. This causes the two ends of the chain + to become connected, forming a polygon. + + In FidoNet this problem is reduced somewhat by having "Regional + Echomail Coordinators" (RECS) that try to keep track of Echomail + connections within their regions of the world. A further rule + which is followed is that only the RECS are allowed to make + inter-regional connections for the larger conferences. In return, + the RECS have established a very efficient topology which gets + messages from coast to coast, and onto over 200 systems in less + than 24 hours. If no one were willing to follow the rules, then + this system would collapse, but due to the excellent efficiency + it has remained intact for over a year. + + + Why a PATH line? + + As was previously mentioned, the PATH line is a new concept in + Echomail. It stores the net/node numbers of each system having + actually processed a message. This information is useful in + correcting the biggest problem encountered by nodes running an + Echomail compatible system - the problem of finding the cause of + duplicate messages. How does the PATH line help solve this + problem? Take the following path line as an example: + + ^aPATH: 107/6 107/312 132/101 + + This shows the message was processed by system 107/6 and + transferred to system 107/312. It further shows system 107/312 + transferred the message to 132/101, and 132/101 processed it + again. Now take the following path line as the example: + + ^aPATH: 107/6 107/312 107/528 107/312 132/101 + + This shows the message having been processed by node 107/312 on + more than one occasion. Based upon the earlier description of the + 'information control' fields in Echomail messages, this clearly + is an error in processing (see the section entitled "How it + Works"). This further shows node 107/528 as the node which + apparently processed the message incorrectly. In this case the + path line can be used to quickly locate the source of duplicate + messages. + + In a conference with many participants it becomes almost + impossible to determine the exact topology used. In these cases + the use of the path line can help a coordinator of the conference + track any possible breakdowns in the overall topology, while not + substantially increasing the amount of information transmitted. + Having this small amount of information added to the end of each + message pays for itself very quickly when it can be used to help + detect a topology problem causing duplicate messages to be + transmitted to each system. + +-30- ++ +Go Back + + + + diff --git a/html/ftsc/fts-0005.html b/html/ftsc/fts-0005.html index ba57602a..9363c797 100755 --- a/html/ftsc/fts-0005.html +++ b/html/ftsc/fts-0005.html @@ -1,617 +1,618 @@ - - -
- | Document: FTS-0005 - | Version: 003 - | Date: February 7, 1996 - | Maintainer: David Nugent, 3:632/348@fidonet - - - The Distribution Nodelist - - Originally by Ben Baker - Amended by Rick Moore, 1:115/333@FidoNet, February 5, 1989 - Amended by David Nugent, 3:632/348@FidoNet, February 27, 1996 - - -| Copyright 1986-1996 by the FidoNet Technical Standards Committee. - All rights reserved. Duplication and/or distribution permitted - for non-commercial purposes only. - - This document supersedes and replaces the document known under -| the names of FSC002, FSC-0002, and FTS-0002. Significant changes, -| which excludes mere formatting changes, to the previous version -| of this document have been "redlined" (marked with a vertical -| bar in the leftmost column). - - This document defines the format and content of the nodelist for - the Public FidoNet Network (PFN) as published on Friday of each -| week. This format is historically known as the "St. Louis nodelist -| format". - - The PFN is an international network of independently owned - electronic mail systems, most with interlocking electronic - bulletin board systems. The distribution nodelist, or simply - "nodelist", is the glue which holds the network together. It is - the PFN's "phone book" and it defines the top-level network -| structure and is the means by which FidoNet retains its integrity -| as a point-to-point mail network. - - -| THE NODELIST - - The nodelist is published as an ASCII text file named - NODELIST.nnn, where nnn is a three digit number representing the -| day-of-year of the Friday publication date, with zeros filling -| positions to the left if necessary. This file is packed into a -| archive file named NODELIST.?nn, where 'nn' are the last two -| digits of day-of-year, and the character at the position of the -| '?' indicating the type of compression used. Conventions as to -| which compression method is used for the distributed nodelist is -| a matter of local policy and is usually determined by each zone's -| Zone Coordinator. - - As stated above, NODELIST.nnn is an ASCII text file. It contains - two kinds of lines; comment lines and data lines. Each line is - terminated with an ASCII carriage return and line feed character - sequence, and contains no trailing white-space (spaces, tabs, -| etc.). The file is terminated with a DOS end-of-file character -| (character value 26 decimal, or "control-Z"). - - Comment lines contain a semicolon (;) in the first character - position followed by zero or more alphabetic characters called - "interest flags". A program which processes the nodelist may use - comment interest flags to determine the disposition of a comment - line. The remainder of a comment line (with one exception, -| treated below) is free-form ASCII text. There are five types of -| comments flags: - -| ;S This is of particular interest to Sysops -| ;U This is of particular interest to BBS users -| ;F This should appear in any formatted "Fido List" -| ;A This is of general interest (shorthand for ;SUF) -| ;E This is an error message inserted by the nodelist generator -| ; This comment may be ignored by a nodelist processor - - The first line of a nodelist is a special comment line containing - identification data for the particular edition of the nodelist. - The following is an example of the first line of a nodelist: - - ;A FidoNet Nodelist for Friday, July 3, 1987 -- Day number 184 : 15943 - - This line contains the general interest flag, the day, date, and -| three-digit (zero-filled) day-of-year number of publication, and - ends with a 5 digit decimal number with leading zeros, if - necessary. This number is the decimal representation of a check - value derived as follows: - - Beginning with the first character of the second line, a - 16 bit cyclic redundancy check (CRC) is calculated for the - entire file, including carriage return and line feed - characters, but not including the terminating EOF - character. The check polynomial used is the same one used - for many file transfer protocols: - - 2**16 + 2**12 + 2**5 + 2**0 - - The CRC may be used to verify that the file has not been edited. - The importance of this will become evident in the discussion of - NODEDIFF, below. CRC calculation techniques are well documented -| in various technical references, and will not be treated further - here. - - The content of the remaining comments in the nodelist are - intended to be informative. Beyond the use of interest flags for - distribution, a processing program need not have any interest in - them. - - A nodelist data line contains eight variable length "fields" - separated by commas (,). No space characters are allowed in a - data line, and underscore characters are used in lieu of spaces. - The term "alphanumeric character" is defined as the portion of - the ASCII character set from 20 hex through 7E hex, inclusive. - The following discussion defines the contents of each field in a - data line. - - - Field 1: Keyword - - The keyword field may be empty, or may contain one of the - following: - - Zone - - Begins the definition of a geographic zone and define its - coordinator. All the data lines following a line with the - "Zone" keyword down to, but not including, the next - occurrence of a "Zone" keyword, are regions, networks, and -| nodes within the defined zone. Node entries defined -| immediately after the "Zone" keyword and before the next -| region or host entry are known as zone adminstrative nodes. -| These are allocated by the Zone Coordinator for use by nodes -| in the entire zone; for example, mail gateways between -| FidoNet zones. - - Region - - Begins the definition of a geographic region and defines - its coordinator. All the data lines following a line with - the "Region" keyword down to, but not including, the - next occurrence of a "Zone", "Region", or "Host" - keyword, are independent nodes within the defined region. - - Host - - Begins the definition of a local network and defines its -| network coordinator. All the data lines following a line - with the Host keyword down to, but not including, the - next occurrence of a "Zone", "Region", or "Host" keyword, - are local nodes, members of the defined local network. - - Hub - - Begins the definition of a routing sub-unit within a - multi-level local network. The hub is the routing focal - point for nodes listed below it until the next occurrence - of a "Zone", "Region", "Host", or "Hub" keyword. The hub - entry MUST be a redundant entry, with a unique number, for - one of the nodes listed below it, within its hub segment. - This is necessary because some nodelist processors - eliminate these entries in all but the local network. - - Pvt - - Defines a private node with unlisted number. Private nodes - are only allowed as members of local networks. - - Hold - - Defines a node which is temporarily down. Mail may be sent - to it and is held by its host or coordinator. - - Down - - Defines a node which is not operational. Mail may NOT be - sent to it. This keyword may not be used for longer than - two weeks on any single node, at which point the "down" - node is to be removed from the nodelist. - -- - Go Back - - - - + + + +- -| The field contains no text (not the sequence " "), -| and defines a normal node entry. - -| Only one of these may be used in any individual data line. - - - Field 2: Zone/Region/Net/Node number - - This field contains only numeric digits and is a number in the - range of 0 to 32767. If the line had the "Zone", "Region", or - "Host" keyword, the number is the zone, net, or region number, - and the node has an implied node number of 0. Otherwise, the - number is the node number. The zone number, region or net number, - and the node number, taken together, constitute a node's FidoNet - address. - - Zone numbers must be unique. Region or net numbers must be unique - within their zone, hub numbers unique be within their net, node -| numbers unique within their net (and region, for regional -| independent nodes, zone for zone administrative entries). Duplicate - node numbers under different hubs within the same net are not - allowed. - - - Field 3: Node name - - This field may contain any alphanumeric characters other than - commas and spaces. Underscores are used to represent spaces, and - a comma delimits the end of the field. This is the name by which - the node is known, usually as determined by the node or the - coordinator responsible for compiling the segment. - - - Field 4: Location - - This field may contain any alphanumeric characters other than - commas and spaces. Underscores are used to represent spaces. This - field contains the location of the node. It is usually expressed - as the primary local location (town, suburb, city, etc.) plus the - identifier of the regional geopolitical administrative district - (state, province, department, county, etc.). Wherever possible, - standard postal abbreviations for the major regional district - should be used (IL, BC, NSW, etc.). - - - Field 5: Sysop name - - This field may contain any alphanumeric characters other than - commas and spaces. Underscores are used to represent spaces. This - is the name of the system operator. - - - Field 6: Phone number - - This field contains at least three and usually four numeric - sub-fields separated by dashes (-). The fields are country code, - city or area code, exchange code, and number. The various parts - of the phone number are frequently used to derive cost and - routing information, as well as what number is to be dialed. A - typical example of the data in a phone number field is - 1-800-555-1212, corresponding to country 1 (USA), area 800 - (inbound WATS), exchange 555, and number 1212. - - Alternatively, this field may contain the notation - "-Unpublished-" in the case of a private node. In this case, the -| keyword "Pvt" must appear at the start of the line. - - - Field 7: Baud rate - - This field contains one of the values: 300, 1200, 2400, 9600, -| 19200, or 38400. - -| This baud rate is indicative only of the maximum baud rate that -| may be expected when connecting to a node and is generally of use -| only where a calling node needs to adjust the baud rate used to -| dial to the caller's modem speed in order to achieve a -| connection, a requirement that with modem technology available in -| 1996 is rarely if ever needed. This information is largely -| superseded by modem protocol flags (see next section) where any -| two nodes using a common protocol may have other expectations -| with regards to actual transfer rates. Use of the baud rate field -| alone is therefore depreciated. - - - Field 8 - Flags - - This optional field contains data about the specific operation of - the node, such as file requests, modem protocol supported, etc. - Any text following the seventh comma on a data line is taken - collectively to be the flags field. The required format is zero - or more sub-fields, separated by commas. Each sub-field consists - of a flag, possibly followed by a value. - - The following flags define special operating conditions: - - Flag Meaning - - CM Node accepts mail 24 hours a day - MO Node does not accept human callers -| LO Node accepts calls only from valid listed node -| numbers in the current FidoNet nodelist - - - The following flags define modem protocols supported: - - Flag Meaning - -| V21 ITU-T V21 300 bps full duplex -| V22 ITU-T V22 1200 bps full duplex -| V29 ITU-T V29 9600 bps half duplex -| V32 ITU-T V32 9600 bps full duplex -| V32b ITU-T V32bis 14400 bps full duplex -| V33 ITU-T V33 -| V34 ITU-T V34 28800 bps full duplex - - H96 Hayes V9600 - HST USR Courier HST up to 9600 -| H14 USR Courier HST up to 14400 -| H16 USR Courier HST up to 16800 - MAX Microcom AX/96xx series - PEP Packet Ensemble Protocol -| CSP Compucom Speedmodem -| ZYX Zyxel series -| VFC V.Fast Class -| V32T V.32 Terbo - - NOTE: Many V22 modems also support Bell 212A. - - If no modem flag is given, Bell 212A is assumed for 1200 bps - systems, ITU-T V22bis is assumed for 2400 bps systems. - - - The following flags define type of error correction available. A - separate error correction flag should not be used when the error - correction type can be determined by the modem flag. For -| instance, a modem flag of HST implies MNP, V32b implies V32 and -| V42b implies V42. Therefore MNP+HST, H14+MNP, H16+MNP, V32+V32b -| and V42+V42b flag pairs are redundant and should not be used. - - Flag Meaning - - MNP Microcom Networking Protocol error correction -| V42 ITU-T LAP-M error correction w/fallback to MNP 1-4 -| V42b ITU-T LAP-M error correction w/fallback to MNP 1-5 - - - The following flags define the type(s) of compression of mail - packets supported. - - Flag Meaning - - MN No compression supported - -| NOTE: While FidoNet nodes usually exchange mail -| using a variety of different file compression -| formats negotiated between individual systems, the -| presence of this flag indicates the INABILITY TO -| RECEIVE MAIL compressed using the SEA ARC version 5 -| compression format and/or named according to the -| ARCmail 0.6 mail bundle naming method. This is, by -| convention, the most common mail compression format -| in use within FidoNet. The presence of this flag -| would normally indicate that all mail should be sent -| uncompressed unless there is some overriding -| arrangement with the receiving system. - - The following flags indicate the types of file and file update - requests supported. - - Flag Meaning - - XA Bark and WaZOO file/update requests - XB Bark file/update requests, WaZOO file requests -| XC Bark file requests, WaZOO file file/update - XP Bark file/update requests - XR Bark and WaZOO file requests - XW WaZOO file requests -| XX WaZOO file/update requests - - - The following flag defines gateways to other domains (mail - networks). - - Flag Meaning - - Gx..x Gateway to domain 'x..x', where 'x..x` is a string - of alphanumeric characters. - - NOTE: Valid values for 'x..x' are assigned by the FidoNet -| International Coordinator or the person appointed as -| Internetworking Coordinator by the FidoNet -| International Coordinator. Current valid values of - 'x..x' may usually be found in the notes at the end -| of the current FidoNet nodelist. The most common -| gateway flag is "GUUCP", to denote a gateway to the -| Internet mail system that gates on behalf of the -| fidonet.org internet domain. - - - The following flags define the dedicated mail periods supported. - They have the form "#nn" or "!nn" where nn is the UTC hour the mail - period begins, '#' indicates Bell 212A compatibility, and '!' - indicates incompatibility with Bell 212A. - - Flag Meaning - -| #01 Zone 5 mail hour (01:00 - 02:00 UTC) - #02 Zone 2 mail hour (02:30 - 03:30 UTC) -| #03 Zone 4 mail hour (08:00 - 09:00 UTC) - #09 Zone 1 mail hour (09:00 - 10:00 UTC) - #18 Zone 3 mail hour (18:00 - 19:00 UTC) -| #20 Zone 6 mail hour (20:00 - 21:00 UTC) - - NOTE: When applicable, the mail period flags may be strung - together with no intervening commas, e.g.. "#02#09" -| or "!02!09". Only mail hours other than that - standard within a node's zone should be given. Since - observance of mail hour within one's zone is - mandatory, it should not be indicated. - - - The following flag defines user-specific values. If present, - this flag MUST be the last flag present in a nodelist entry. - - Flag Meaning - - Ux..x A user-specified string, which may contain any - alphanumeric character except blanks. This string - may contain one to thirty-two characters of - information that may be used to add user-defined - data to a specific nodelist entry. - -| NOTE: Ux..x flags are the mechanism by which new flags may -| be experimentally introduced into the nodelist for a -| trial period to assess their worth. They are -| therefore of a temporary nature, and after their -| introduction they are eventually either promoted -| to a non-U flag or dropped from use altogether. - - The FTSC recognizes that the FidoNet International Coordinator is - the ultimate authority over what appears in the FidoNet nodelist. - Also, FTSC is by definition a deliberative body, and adding or - changing a flag may take a considerable amount of time. - Therefore, the FidoNet International Coordinator may temporarily - make changes or additions to the flags as defined in this - document. The FidoNet International Coordinator will then consult - with FTSC over the changes needed to this document to reflect - these temporary changes. - - - The following are examples of nodelist data lines: - - Host,102,SOCALNET,Los_Angeles_CA,Richard_Martz,1-213-874-9484,2400,XP - ,101,Rainbow_Data,Culver_City_CA,Don_Brauns,1-213-204-2996,2400, - - -| THE NODEDIFF - -| With more than thirty-five thousand nodes as of this date (1996), -| the nodelist, even in archive form, is a document of substantial -| size. Since distribution of the nodelist occurs via electronic - file transfer, this file is NOT routinely distributed. Instead, -| when a new nodelist is prepared weekly, it is compared with the - previous week's nodelist, and a file containing only the - differences is created and distributed. - -| The distribution difference file, called NODEDIFF.nnn, where nnn - is the day-of-year of publication, is actually an editing script - which will transform the previous week's nodelist into the - current nodelist. A definition of its format follows: - - The first line of NODEDIFF.nnn is an exact copy of the first line -| of LAST WEEK'S nodelist (i.e. the first line of the nodelist to -| which the current difference file applies). This is used as a - first-level confidence check to insure that the correct file is - being edited. The second and subsequent lines are editing - commands and data. - - There are three editing commands and all have the same format: - - - - is a 1 letter command, one of A, C, or D. - - is a decimal number greater than zero, and defines the - number of lines to be operated on by the command. Each command - appears on a line by itself. The commands have the following - meanings: - - Ann Add the following nn lines to the output file. - Cnn Copy nn unchanged lines from the input to the output - file. - Dnn Delete (or skip) nn lines from the input file. - - The following illustrate how the first few lines of a -| hypothetical NODEDIFF.213 might look: - - ;A Friday, July 25, 1986 -- Day number 206 : 27712 - D2 - A2 - ;A Friday, August 1, 1986 -- Day number 213 : 05060 - ;A - C5 - - This fragment illustrates all three editing commands. The first - line is the first line from the previous nodelist, NODELIST.206. - The next line says "delete the first two lines" from - NODELIST.206. These are the identification line and the line - following it. The next command says "add the next two lines" to - NODELIST.213 at the "current" location. The two data lines are - followed by a command which says "copy five unchanged lines" from - NODELIST.206 to NODELIST.213. Notice that the first line added -| will ALWAYS contain the new nodelist CRC, so that the software -| applying the changes to the old nodelist may check the result of -| its editing. - - Since only the differences will be distributed, it is important - to insure the accuracy of the newly created nodelist. This is the - function of the CRC mentioned above. It is sufficient for a - program designed to perform the above edits to pick the CRC value - from the first line added to the output file, then compute the - CRC of the rest of the output file. If the two CRCs do not agree, - one of the input files has been corrupted. If they do agree, the - probability is very high (but not 100%) that the output file is - accurate. - - For actual distribution, NODEDIFF.nnn is packed into an archive -| file named NODEDIFF.?nn, where 'nn' are the last two digits of -| day-of-year, and '?' indicates the compression format used. - - -| NODELIST COMPILATION - -| This section is included for tutorial reasons and is not intended -| as a definition of any specific method by which FidoNet MUST -| compile its weekly nodelist. It merely represents an attempt to -| document the method by which it currently does so. It is intended -| to be explanatory, and seeks to answer commonly asked questions, -| such as how the nodelist is compiled and where the information -| comes from, why the nodelists used in different FidoNet zones are -| not the same document, and why the difference file generated for -| use in one FidoNet zone cannot be applied to the nodelist -| generated for use in a different zone, even though the week -| numbers match. - -| Nodelists are compiled via a distributed method, which follows -| the same structure as the FidoNet coordinator hierarchy. At the -| lowest level, network coordinators maintain a list of the nodes -| in their network and are responsible for the addition, removal -| and correction of individual node's listings in their "segment" -| (as portions of the full nodelist are called). In some larger -| networks, it is common for this job to be shared with hub -| coordinators appointed by the net coordinator, though the -| responsibility for those hub segments still remains with the -| network coordinator. - -| At a nominated day during the week, before the regional level -| segment is submitted to the zone coordinator, individual net -| coordinators submit their segments to the regional coordinator -| who subsequently compiles these segments and transmits the merged -| copy to the zone coordinator. These are combined by the zone -| coordinator with the separate segments of other zones and -| compiled into that zone's version of the world nodelist. This -| world nodelist is then compared with the previous week's version, -| a difference file is generated and subsequently distributed -| throughout the zone. - -| In some cases, in the interest of saving in transmission times -| and therefore costs, the compilation process itself may be better -| served by the submission of DIFFERENCE FILES rather than full -| net- or region-level segments. Each coordinator therefore retains -| a copy of the previously submitted segments and applies -| difference files to those to derive the new one. This process is -| exactly identical to the NODEDIFF/NODELIST scenario described -| earlier in this document, with the same first line and CRC -| validation method used to guard the integrity of the nodelist -| segments. - -| For a number of reasons, it is important that publication of the -| nodelist be as timely as possible. These reasons include: the -| nodelist is a definitive list of valid FidoNet addresses that may -| receive mail, and must therefore be as correct and up-to-date as -| possible to save nodes the unnecessary expense of mail routed to -| possibly non-existing addresses; the nodelist contains the list -| of telephone numbers that may be called by any user of the -| FidoNet nodelist and should therefore be accurate so as not to -| unduly annoy owners of those phone numbers should a listed node -| go down and an unsuspecting telephone subscriber inherit the same -| telephone number. - -| Given this constraint, the expense of international calls and the -| fact that FidoNet is a worldwide network that exists in many time -| zones, it may be unreasonable to expect the compilation of the -| nodelist to be delayed until each zone coordinator can transmit -| their most up-to-date zone segment to a central authority for -| compilation and subsequent redistribution in any week. For the -| sake of expedience, each zone instead maintains its own separate -| world nodelist which contains a compilation of the current zone's -| latest segments and including the most current copy to hand of -| all other FidoNet zone's segments. The zone level nodelist -| generated each week by each zone coordinator is then transmitted -| to all other zone coordinators for inclusion into their separate -| world nodelist as timing permits. - -| In theory, then, the only difference between nodelists -| distributed in each zone in any week are accounted for by timing -| differences in the exchange of each zone's separate segment. In -| practice, other constraints may interfere with timeliness, such -| as the difficulty and expense of international telephonic -| communications. Also, another point of variance is introduced by -| the fact that each zone usually includes its own zone segment -| first into its world nodelist to assist - amongst other things - -| software that uses the nodelist for index generation. Some -| software in common use in FidoNet indexes the nodelist according -| to its sequential order (e.g. version 5 and 6 compiled nodelist -| formats), and including the current zone first before others will -| have a beneficial effect on software performance. - -
+ | Document: FTS-0005 + | Version: 003 + | Date: February 7, 1996 + | Maintainer: David Nugent, 3:632/348@fidonet + + + The Distribution Nodelist + + Originally by Ben Baker + Amended by Rick Moore, 1:115/333@FidoNet, February 5, 1989 + Amended by David Nugent, 3:632/348@FidoNet, February 27, 1996 + + +| Copyright 1986-1996 by the FidoNet Technical Standards Committee. + All rights reserved. Duplication and/or distribution permitted + for non-commercial purposes only. + + This document supersedes and replaces the document known under +| the names of FSC002, FSC-0002, and FTS-0002. Significant changes, +| which excludes mere formatting changes, to the previous version +| of this document have been "redlined" (marked with a vertical +| bar in the leftmost column). + + This document defines the format and content of the nodelist for + the Public FidoNet Network (PFN) as published on Friday of each +| week. This format is historically known as the "St. Louis nodelist +| format". + + The PFN is an international network of independently owned + electronic mail systems, most with interlocking electronic + bulletin board systems. The distribution nodelist, or simply + "nodelist", is the glue which holds the network together. It is + the PFN's "phone book" and it defines the top-level network +| structure and is the means by which FidoNet retains its integrity +| as a point-to-point mail network. + + +| THE NODELIST + + The nodelist is published as an ASCII text file named + NODELIST.nnn, where nnn is a three digit number representing the +| day-of-year of the Friday publication date, with zeros filling +| positions to the left if necessary. This file is packed into a +| archive file named NODELIST.?nn, where 'nn' are the last two +| digits of day-of-year, and the character at the position of the +| '?' indicating the type of compression used. Conventions as to +| which compression method is used for the distributed nodelist is +| a matter of local policy and is usually determined by each zone's +| Zone Coordinator. + + As stated above, NODELIST.nnn is an ASCII text file. It contains + two kinds of lines; comment lines and data lines. Each line is + terminated with an ASCII carriage return and line feed character + sequence, and contains no trailing white-space (spaces, tabs, +| etc.). The file is terminated with a DOS end-of-file character +| (character value 26 decimal, or "control-Z"). + + Comment lines contain a semicolon (;) in the first character + position followed by zero or more alphabetic characters called + "interest flags". A program which processes the nodelist may use + comment interest flags to determine the disposition of a comment + line. The remainder of a comment line (with one exception, +| treated below) is free-form ASCII text. There are five types of +| comments flags: + +| ;S This is of particular interest to Sysops +| ;U This is of particular interest to BBS users +| ;F This should appear in any formatted "Fido List" +| ;A This is of general interest (shorthand for ;SUF) +| ;E This is an error message inserted by the nodelist generator +| ; This comment may be ignored by a nodelist processor + + The first line of a nodelist is a special comment line containing + identification data for the particular edition of the nodelist. + The following is an example of the first line of a nodelist: + + ;A FidoNet Nodelist for Friday, July 3, 1987 -- Day number 184 : 15943 + + This line contains the general interest flag, the day, date, and +| three-digit (zero-filled) day-of-year number of publication, and + ends with a 5 digit decimal number with leading zeros, if + necessary. This number is the decimal representation of a check + value derived as follows: + + Beginning with the first character of the second line, a + 16 bit cyclic redundancy check (CRC) is calculated for the + entire file, including carriage return and line feed + characters, but not including the terminating EOF + character. The check polynomial used is the same one used + for many file transfer protocols: + + 2**16 + 2**12 + 2**5 + 2**0 + + The CRC may be used to verify that the file has not been edited. + The importance of this will become evident in the discussion of + NODEDIFF, below. CRC calculation techniques are well documented +| in various technical references, and will not be treated further + here. + + The content of the remaining comments in the nodelist are + intended to be informative. Beyond the use of interest flags for + distribution, a processing program need not have any interest in + them. + + A nodelist data line contains eight variable length "fields" + separated by commas (,). No space characters are allowed in a + data line, and underscore characters are used in lieu of spaces. + The term "alphanumeric character" is defined as the portion of + the ASCII character set from 20 hex through 7E hex, inclusive. + The following discussion defines the contents of each field in a + data line. + + + Field 1: Keyword + + The keyword field may be empty, or may contain one of the + following: + + Zone + + Begins the definition of a geographic zone and define its + coordinator. All the data lines following a line with the + "Zone" keyword down to, but not including, the next + occurrence of a "Zone" keyword, are regions, networks, and +| nodes within the defined zone. Node entries defined +| immediately after the "Zone" keyword and before the next +| region or host entry are known as zone adminstrative nodes. +| These are allocated by the Zone Coordinator for use by nodes +| in the entire zone; for example, mail gateways between +| FidoNet zones. + + Region + + Begins the definition of a geographic region and defines + its coordinator. All the data lines following a line with + the "Region" keyword down to, but not including, the + next occurrence of a "Zone", "Region", or "Host" + keyword, are independent nodes within the defined region. + + Host + + Begins the definition of a local network and defines its +| network coordinator. All the data lines following a line + with the Host keyword down to, but not including, the + next occurrence of a "Zone", "Region", or "Host" keyword, + are local nodes, members of the defined local network. + + Hub + + Begins the definition of a routing sub-unit within a + multi-level local network. The hub is the routing focal + point for nodes listed below it until the next occurrence + of a "Zone", "Region", "Host", or "Hub" keyword. The hub + entry MUST be a redundant entry, with a unique number, for + one of the nodes listed below it, within its hub segment. + This is necessary because some nodelist processors + eliminate these entries in all but the local network. + + Pvt + + Defines a private node with unlisted number. Private nodes + are only allowed as members of local networks. + + Hold + + Defines a node which is temporarily down. Mail may be sent + to it and is held by its host or coordinator. + + Down + + Defines a node which is not operational. Mail may NOT be + sent to it. This keyword may not be used for longer than + two weeks on any single node, at which point the "down" + node is to be removed from the nodelist. + ++ +Go Back + + + + diff --git a/html/ftsc/fts-0006.html b/html/ftsc/fts-0006.html index 6cddb22c..3c2a2e3c 100755 --- a/html/ftsc/fts-0006.html +++ b/html/ftsc/fts-0006.html @@ -1,870 +1,871 @@ - - -+ +| The field contains no text (not the sequence " "), +| and defines a normal node entry. + +| Only one of these may be used in any individual data line. + + + Field 2: Zone/Region/Net/Node number + + This field contains only numeric digits and is a number in the + range of 0 to 32767. If the line had the "Zone", "Region", or + "Host" keyword, the number is the zone, net, or region number, + and the node has an implied node number of 0. Otherwise, the + number is the node number. The zone number, region or net number, + and the node number, taken together, constitute a node's FidoNet + address. + + Zone numbers must be unique. Region or net numbers must be unique + within their zone, hub numbers unique be within their net, node +| numbers unique within their net (and region, for regional +| independent nodes, zone for zone administrative entries). Duplicate + node numbers under different hubs within the same net are not + allowed. + + + Field 3: Node name + + This field may contain any alphanumeric characters other than + commas and spaces. Underscores are used to represent spaces, and + a comma delimits the end of the field. This is the name by which + the node is known, usually as determined by the node or the + coordinator responsible for compiling the segment. + + + Field 4: Location + + This field may contain any alphanumeric characters other than + commas and spaces. Underscores are used to represent spaces. This + field contains the location of the node. It is usually expressed + as the primary local location (town, suburb, city, etc.) plus the + identifier of the regional geopolitical administrative district + (state, province, department, county, etc.). Wherever possible, + standard postal abbreviations for the major regional district + should be used (IL, BC, NSW, etc.). + + + Field 5: Sysop name + + This field may contain any alphanumeric characters other than + commas and spaces. Underscores are used to represent spaces. This + is the name of the system operator. + + + Field 6: Phone number + + This field contains at least three and usually four numeric + sub-fields separated by dashes (-). The fields are country code, + city or area code, exchange code, and number. The various parts + of the phone number are frequently used to derive cost and + routing information, as well as what number is to be dialed. A + typical example of the data in a phone number field is + 1-800-555-1212, corresponding to country 1 (USA), area 800 + (inbound WATS), exchange 555, and number 1212. + + Alternatively, this field may contain the notation + "-Unpublished-" in the case of a private node. In this case, the +| keyword "Pvt" must appear at the start of the line. + + + Field 7: Baud rate + + This field contains one of the values: 300, 1200, 2400, 9600, +| 19200, or 38400. + +| This baud rate is indicative only of the maximum baud rate that +| may be expected when connecting to a node and is generally of use +| only where a calling node needs to adjust the baud rate used to +| dial to the caller's modem speed in order to achieve a +| connection, a requirement that with modem technology available in +| 1996 is rarely if ever needed. This information is largely +| superseded by modem protocol flags (see next section) where any +| two nodes using a common protocol may have other expectations +| with regards to actual transfer rates. Use of the baud rate field +| alone is therefore depreciated. + + + Field 8 - Flags + + This optional field contains data about the specific operation of + the node, such as file requests, modem protocol supported, etc. + Any text following the seventh comma on a data line is taken + collectively to be the flags field. The required format is zero + or more sub-fields, separated by commas. Each sub-field consists + of a flag, possibly followed by a value. + + The following flags define special operating conditions: + + Flag Meaning + + CM Node accepts mail 24 hours a day + MO Node does not accept human callers +| LO Node accepts calls only from valid listed node +| numbers in the current FidoNet nodelist + + + The following flags define modem protocols supported: + + Flag Meaning + +| V21 ITU-T V21 300 bps full duplex +| V22 ITU-T V22 1200 bps full duplex +| V29 ITU-T V29 9600 bps half duplex +| V32 ITU-T V32 9600 bps full duplex +| V32b ITU-T V32bis 14400 bps full duplex +| V33 ITU-T V33 +| V34 ITU-T V34 28800 bps full duplex + + H96 Hayes V9600 + HST USR Courier HST up to 9600 +| H14 USR Courier HST up to 14400 +| H16 USR Courier HST up to 16800 + MAX Microcom AX/96xx series + PEP Packet Ensemble Protocol +| CSP Compucom Speedmodem +| ZYX Zyxel series +| VFC V.Fast Class +| V32T V.32 Terbo + + NOTE: Many V22 modems also support Bell 212A. + + If no modem flag is given, Bell 212A is assumed for 1200 bps + systems, ITU-T V22bis is assumed for 2400 bps systems. + + + The following flags define type of error correction available. A + separate error correction flag should not be used when the error + correction type can be determined by the modem flag. For +| instance, a modem flag of HST implies MNP, V32b implies V32 and +| V42b implies V42. Therefore MNP+HST, H14+MNP, H16+MNP, V32+V32b +| and V42+V42b flag pairs are redundant and should not be used. + + Flag Meaning + + MNP Microcom Networking Protocol error correction +| V42 ITU-T LAP-M error correction w/fallback to MNP 1-4 +| V42b ITU-T LAP-M error correction w/fallback to MNP 1-5 + + + The following flags define the type(s) of compression of mail + packets supported. + + Flag Meaning + + MN No compression supported + +| NOTE: While FidoNet nodes usually exchange mail +| using a variety of different file compression +| formats negotiated between individual systems, the +| presence of this flag indicates the INABILITY TO +| RECEIVE MAIL compressed using the SEA ARC version 5 +| compression format and/or named according to the +| ARCmail 0.6 mail bundle naming method. This is, by +| convention, the most common mail compression format +| in use within FidoNet. The presence of this flag +| would normally indicate that all mail should be sent +| uncompressed unless there is some overriding +| arrangement with the receiving system. + + The following flags indicate the types of file and file update + requests supported. + + Flag Meaning + + XA Bark and WaZOO file/update requests + XB Bark file/update requests, WaZOO file requests +| XC Bark file requests, WaZOO file file/update + XP Bark file/update requests + XR Bark and WaZOO file requests + XW WaZOO file requests +| XX WaZOO file/update requests + + + The following flag defines gateways to other domains (mail + networks). + + Flag Meaning + + Gx..x Gateway to domain 'x..x', where 'x..x` is a string + of alphanumeric characters. + + NOTE: Valid values for 'x..x' are assigned by the FidoNet +| International Coordinator or the person appointed as +| Internetworking Coordinator by the FidoNet +| International Coordinator. Current valid values of + 'x..x' may usually be found in the notes at the end +| of the current FidoNet nodelist. The most common +| gateway flag is "GUUCP", to denote a gateway to the +| Internet mail system that gates on behalf of the +| fidonet.org internet domain. + + + The following flags define the dedicated mail periods supported. + They have the form "#nn" or "!nn" where nn is the UTC hour the mail + period begins, '#' indicates Bell 212A compatibility, and '!' + indicates incompatibility with Bell 212A. + + Flag Meaning + +| #01 Zone 5 mail hour (01:00 - 02:00 UTC) + #02 Zone 2 mail hour (02:30 - 03:30 UTC) +| #03 Zone 4 mail hour (08:00 - 09:00 UTC) + #09 Zone 1 mail hour (09:00 - 10:00 UTC) + #18 Zone 3 mail hour (18:00 - 19:00 UTC) +| #20 Zone 6 mail hour (20:00 - 21:00 UTC) + + NOTE: When applicable, the mail period flags may be strung + together with no intervening commas, e.g.. "#02#09" +| or "!02!09". Only mail hours other than that + standard within a node's zone should be given. Since + observance of mail hour within one's zone is + mandatory, it should not be indicated. + + + The following flag defines user-specific values. If present, + this flag MUST be the last flag present in a nodelist entry. + + Flag Meaning + + Ux..x A user-specified string, which may contain any + alphanumeric character except blanks. This string + may contain one to thirty-two characters of + information that may be used to add user-defined + data to a specific nodelist entry. + +| NOTE: Ux..x flags are the mechanism by which new flags may +| be experimentally introduced into the nodelist for a +| trial period to assess their worth. They are +| therefore of a temporary nature, and after their +| introduction they are eventually either promoted +| to a non-U flag or dropped from use altogether. + + The FTSC recognizes that the FidoNet International Coordinator is + the ultimate authority over what appears in the FidoNet nodelist. + Also, FTSC is by definition a deliberative body, and adding or + changing a flag may take a considerable amount of time. + Therefore, the FidoNet International Coordinator may temporarily + make changes or additions to the flags as defined in this + document. The FidoNet International Coordinator will then consult + with FTSC over the changes needed to this document to reflect + these temporary changes. + + + The following are examples of nodelist data lines: + + Host,102,SOCALNET,Los_Angeles_CA,Richard_Martz,1-213-874-9484,2400,XP + ,101,Rainbow_Data,Culver_City_CA,Don_Brauns,1-213-204-2996,2400, + + +| THE NODEDIFF + +| With more than thirty-five thousand nodes as of this date (1996), +| the nodelist, even in archive form, is a document of substantial +| size. Since distribution of the nodelist occurs via electronic + file transfer, this file is NOT routinely distributed. Instead, +| when a new nodelist is prepared weekly, it is compared with the + previous week's nodelist, and a file containing only the + differences is created and distributed. + +| The distribution difference file, called NODEDIFF.nnn, where nnn + is the day-of-year of publication, is actually an editing script + which will transform the previous week's nodelist into the + current nodelist. A definition of its format follows: + + The first line of NODEDIFF.nnn is an exact copy of the first line +| of LAST WEEK'S nodelist (i.e. the first line of the nodelist to +| which the current difference file applies). This is used as a + first-level confidence check to insure that the correct file is + being edited. The second and subsequent lines are editing + commands and data. + + There are three editing commands and all have the same format: + + <command><number> + + <command> is a 1 letter command, one of A, C, or D. + + <number> is a decimal number greater than zero, and defines the + number of lines to be operated on by the command. Each command + appears on a line by itself. The commands have the following + meanings: + + Ann Add the following nn lines to the output file. + Cnn Copy nn unchanged lines from the input to the output + file. + Dnn Delete (or skip) nn lines from the input file. + + The following illustrate how the first few lines of a +| hypothetical NODEDIFF.213 might look: + + ;A Friday, July 25, 1986 -- Day number 206 : 27712 + D2 + A2 + ;A Friday, August 1, 1986 -- Day number 213 : 05060 + ;A + C5 + + This fragment illustrates all three editing commands. The first + line is the first line from the previous nodelist, NODELIST.206. + The next line says "delete the first two lines" from + NODELIST.206. These are the identification line and the line + following it. The next command says "add the next two lines" to + NODELIST.213 at the "current" location. The two data lines are + followed by a command which says "copy five unchanged lines" from + NODELIST.206 to NODELIST.213. Notice that the first line added +| will ALWAYS contain the new nodelist CRC, so that the software +| applying the changes to the old nodelist may check the result of +| its editing. + + Since only the differences will be distributed, it is important + to insure the accuracy of the newly created nodelist. This is the + function of the CRC mentioned above. It is sufficient for a + program designed to perform the above edits to pick the CRC value + from the first line added to the output file, then compute the + CRC of the rest of the output file. If the two CRCs do not agree, + one of the input files has been corrupted. If they do agree, the + probability is very high (but not 100%) that the output file is + accurate. + + For actual distribution, NODEDIFF.nnn is packed into an archive +| file named NODEDIFF.?nn, where 'nn' are the last two digits of +| day-of-year, and '?' indicates the compression format used. + + +| NODELIST COMPILATION + +| This section is included for tutorial reasons and is not intended +| as a definition of any specific method by which FidoNet MUST +| compile its weekly nodelist. It merely represents an attempt to +| document the method by which it currently does so. It is intended +| to be explanatory, and seeks to answer commonly asked questions, +| such as how the nodelist is compiled and where the information +| comes from, why the nodelists used in different FidoNet zones are +| not the same document, and why the difference file generated for +| use in one FidoNet zone cannot be applied to the nodelist +| generated for use in a different zone, even though the week +| numbers match. + +| Nodelists are compiled via a distributed method, which follows +| the same structure as the FidoNet coordinator hierarchy. At the +| lowest level, network coordinators maintain a list of the nodes +| in their network and are responsible for the addition, removal +| and correction of individual node's listings in their "segment" +| (as portions of the full nodelist are called). In some larger +| networks, it is common for this job to be shared with hub +| coordinators appointed by the net coordinator, though the +| responsibility for those hub segments still remains with the +| network coordinator. + +| At a nominated day during the week, before the regional level +| segment is submitted to the zone coordinator, individual net +| coordinators submit their segments to the regional coordinator +| who subsequently compiles these segments and transmits the merged +| copy to the zone coordinator. These are combined by the zone +| coordinator with the separate segments of other zones and +| compiled into that zone's version of the world nodelist. This +| world nodelist is then compared with the previous week's version, +| a difference file is generated and subsequently distributed +| throughout the zone. + +| In some cases, in the interest of saving in transmission times +| and therefore costs, the compilation process itself may be better +| served by the submission of DIFFERENCE FILES rather than full +| net- or region-level segments. Each coordinator therefore retains +| a copy of the previously submitted segments and applies +| difference files to those to derive the new one. This process is +| exactly identical to the NODEDIFF/NODELIST scenario described +| earlier in this document, with the same first line and CRC +| validation method used to guard the integrity of the nodelist +| segments. + +| For a number of reasons, it is important that publication of the +| nodelist be as timely as possible. These reasons include: the +| nodelist is a definitive list of valid FidoNet addresses that may +| receive mail, and must therefore be as correct and up-to-date as +| possible to save nodes the unnecessary expense of mail routed to +| possibly non-existing addresses; the nodelist contains the list +| of telephone numbers that may be called by any user of the +| FidoNet nodelist and should therefore be accurate so as not to +| unduly annoy owners of those phone numbers should a listed node +| go down and an unsuspecting telephone subscriber inherit the same +| telephone number. + +| Given this constraint, the expense of international calls and the +| fact that FidoNet is a worldwide network that exists in many time +| zones, it may be unreasonable to expect the compilation of the +| nodelist to be delayed until each zone coordinator can transmit +| their most up-to-date zone segment to a central authority for +| compilation and subsequent redistribution in any week. For the +| sake of expedience, each zone instead maintains its own separate +| world nodelist which contains a compilation of the current zone's +| latest segments and including the most current copy to hand of +| all other FidoNet zone's segments. The zone level nodelist +| generated each week by each zone coordinator is then transmitted +| to all other zone coordinators for inclusion into their separate +| world nodelist as timing permits. + +| In theory, then, the only difference between nodelists +| distributed in each zone in any week are accounted for by timing +| differences in the exchange of each zone's separate segment. In +| practice, other constraints may interfere with timeliness, such +| as the difficulty and expense of international telephonic +| communications. Also, another point of variance is introduced by +| the fact that each zone usually includes its own zone segment +| first into its world nodelist to assist - amongst other things - +| software that uses the nodelist for index generation. Some +| software in common use in FidoNet indexes the nodelist according +| to its sequential order (e.g. version 5 and 6 compiled nodelist +| formats), and including the current zone first before others will +| have a beneficial effect on software performance. + +
-Document: FTS-0006 -Version: 002 -Date: 30-Nov-1991 - - - - - YOOHOO and YOOHOO/2U2 - - The netmail handshake used by Opus-CBCS - and other intelligent Fidonet mail handling packages - - - Vince Perriello - FidoNet 1:2343/491 - - - - -Status of this document: - - This FTS (FidoNet(r) Technical Standard) specifies an optional - standard for the FidoNet community. Implementation of the - protocols defined in this document is not mandatory, but all - implementations of these protocols are expected to adhere to this - standard. Distribution of this document is subject to the - restrictions listed below. - - Fido and FidoNet are registered marks of Tom Jennings and Fido - Software - - - - -LEGAL STUFF ------------ - -The original protocol and documentation are by Wynn Wagner III. Updates -have been made to this document by Vince Perriello, who also is -responsible for most of the sample routine included with this document. - -They are released to the public for any use whatsoever as long as you -don't modify any transmitted structure or try to make money hawking -either the sample code or this document as if you owned them. - -If you choose to use the method or the sample routines, you do so -entirely at your own risk. It is possible that the routines will cause -physical damage to your equipment, an invasion of fire ants, the plague, -or an extended visit from in-laws. If any of that stuff (or anything -else) happens, you accept the consequences totally. - - -CREDITS -------- - -Fido and Fidonet are registered trademarks of Tom Jennings and Fido -Software. - -ARCmail was originated by System Enhancement Associates. - -The ZModem protocol was designed by Chuck Forsberg. The SEAlink / SEAlink -Overdrive protocols are copyrighted by System Enhancment Associates. The -TeLink protocol was designed and first implemented by Tom Jennings. - -The state charts in this document were done by Vince Perriello. - -Rick Huebner designed and implemented the basic WaZOO file request -method. Update request functionality was added by Vince Perriello. Bob -Hartman is responsible for the addition of Domain support. - -FTS-0001, describing the base FidoNet protocol, was created by Randy Bush. - -FTS-0007, describing enhancement to FTS-0001 using SEAlink and/or SEAlink -Overdrive, was created by Phil Becker. - -YooHoo and YooHoo/2u2 Page 2 -Overview - - - -UPFRONT -------- - -YOOHOO and YOOHOO/2U2 are the initial handshakes for the WaZOO e-mail -protocol. They are designed to let two systems establish a common ground -for a netmail session while making sure that non-WaZOO software doesn't -get upset by material it can't understand. - -The YOOHOO procedure begins as a single byte (0xf1). If the system on -the other end doesn't reply to that byte, no further YOOHOO or WaZOO -transmissions are attempted. To a non-WaZOO netmail system, the YOOHOO -byte will simply seem like a byte of debris. - -The calling system initiates the YOOHOO by sending the attention -character. If the receiving system seems interested, the calling system -sends a 128 byte packet containing such information as system and sysop -names as well as a "capability mask." A 16-bit CRC protects the integrity -of the 128-byte packet. - -In response, the receiving system prepares a 128 byte packet to send -back. This is the YOOHOO/2U2 procedure. - - -FEATURES --------- - -The features of YOOHOO and YOOHOO/2U2 include - - * non-interference with systems that don't understand the - handshake - - * almost foolproof method for identifying a remote system - and establishing a common ground for transmission - - * built-in room to expand the capabilities of WaZOO without - having to resort to a kludge - - -USAGE ------ - -A calling system simply uses a routine that transmits both YooHoo and -TSYNC handshake initiating characters to the called system. If the -called system responds with an XMODEM 'NAK', an FTS-0001 session will be -initiated. If an 'ENQ' is received, the `YooHoo_Sender()' routine will -be invoked to handle the session negotiation. - -A receiving system can call a routine like `YooHoo_Receiver()' if it -detects the YOOHOO character, or just drop into the FTS-0001 logic if it -sees a TSYNC. - -This simple method allows a mailer to take care of both the TSYNC and the -YOOHOO handshakes. - -YooHoo and YooHoo/2u2 Page 3 -WaZOO Protocols - - - -PROTOCOLS ---------- - -Currently there are four WaZOO methods in use: - -1. ZedZap - ------ - - a Zmodem variant. The originator does a batch send then goes into a - receive batch mode. The called system does receive then send. In - the event of a file request (see description below) made by the - called system, one more turnaround is made to service the request. - - * Unlike the "True" Zmodem protocol described by Chuck Forsberg, - ZedZap routines must be able to handle a batch mode that has no - actual files. In other words, it is possible for there to be a - init sequence followed immediately by a ZFIN. - - * The maximum packet size is 8192. This is usually varied based on - the baud rate. For example, at 2400 it might be 2048 bytes, then - for 9600 baud and above the maximum of 8192 could apply. Note that - THIS IS A SIGNIFICANT VARIATION FROM STRICT ZMODEM IMPLEMENTATION. - (There's another WaZOO capability bit for those systems which - can not handle this block size) - - * Netmail packets are transmitted as files with names in the form - "12345678.PKT". Because of this, multiple packets may be sent in - a single session. - - * If the calling system transmits a .REQ file for file requests, the - receiving system can respond to it. See "WaZOO File Requests" - (below) for information on the .REQ file. - -2. ZedZip - ------ - - This capability is identical to ZedZap, but does not use buffers - greater than 1K in size (like "True" Zmodem). It is also - permissible to send a "null" packet in a ZedZip session. This - allows a system which must use a strict Zmodem implementation to - participate in a WaZOO session using Zmodem. - - -3. DietIFNA - -------- - - The session operates like FTS-0001/FTS-0007. The notable exceptions - are as follows: - - * The same packet naming convention as ZedZap applies, allowing more - than one packet to be transmitted in a single session. - -YooHoo and YooHoo/2u2 Page 4 -WaZOO Protocols - - - - * Telink file transfers don't even attempt to exchange file names - using modem7. The receiving system extracts the file name from the - Telink or SEAlink header block. - - * If SEAlink is used, run-ahead (the number of blocks to slide) is - based on the baud rate: BlocksToSlide = BaudRate / 400, up to a - max of 24 blocks. - - * When there is nothing to send, a system should remain quiet. In - other words, the end of a session can be determined by a timeout. - - * Under no circumstances should "BARK" file request logic be active - during a DietIFNA session. File requests, if any, should be - transmitted using a .REQ file. - - - Many implementations of DietIfna have been accomplished by the mere - exchange of packets, followed by straight FTS-0001/0007 code. This - is incorrect but probably not easily remedied at this point. We have - made an effort to document this change in "reality" in this revision - of the document. - -4. Janus - ----- - - Janus is a full-duplex simultaneous bidirectional file transfer - protocol. In other words, it can send and receive files at the same - time. It's very loosely derived from ZModem and HDLC/X.25 protocol - technology, in that it uses variable length data-typed packets, and - that transmission of file data does not require ACKs. - - The protocol is documented elsewhere; it is beyond the scope of this - document to do so. - -YooHoo and YooHoo/2u2 Page 5 -Choosing WaZOO Methods - - - -How to decide which WaZOO method to use ---------------------------------------- - - -Since the called system has all the information necessary to decide what -WaZOO method to employ, the best way to implement the process is for the -calling system to send, in its capability mask, all the bits which -correspond to methods it can use (or wants to use) in communicating with -the called system. The called system then looks at these bits and sends -back only the bit which corresponds to the method it wants to use. - -If the called system sends back a mask which contains more than one -capability of the calling system, it can create a problem situation if -one system arrives at its choice of methods differently from the other. -Thus, when the called system doesn't make the choice, both systems should -choose as follows: - -1. Janus - -2. ZedZap - -3. ZedZip - -4. DietIFNA - -The capability highest on the list which both systems indicate ability to -execute should be the one employed. - -YooHoo and YooHoo/2u2 Page 6 -WaZOO Filename conventions - - - -WaZOO FILENAMES ---------------- - - -1. MESSAGE PACKETS ... xxxxxxxx.PKT - - Normal (unarchived) messages are sent in a file name that has a tag - of .PKT. The "x" characters should be hex digits. - - -2. ARCmail ... xxxxxxxx.{MO|TU|WE|TH|FR|SA|SU}# - - Message packets are often shipped in an archive that has been - compressed with some LZ utility. - - The file name consists of a name with hex digits. The tag is one of - seven two-character prefixes ("MO", "TU", "WE", "TH", "FR", "SA" or - "SU") and a number (0-9). - - This particular naming convention was established by ARCmail version - 0.60, which is a defacto standard in FidoNet. - - -3. FILE REQUESTS ... xxxxxxxx.REQ - - This is explained below. - - In a nutshell, the file name consists of the receiving system's - Fidonet address expressed as two 4-digit hex numbers. The file tag - is .REQ. - - In a Janus session, the .REQ file isn't actually sent. Janus has - a transaction system which sends the .REQ file one line at a time - and then accepts the file(s) which the request generates. - -YooHoo and YooHoo/2u2 Page 7 -Flow of a ZedZap or ZedZip Session - - - -FLOW OF A ZEDZAP OR ZEDZIP SESSION ----------------------------------- - - - -The calling system: - - - * Send YooHoo - - * Receive YooHoo/2u2 - - * In a single batch, send bundles, files, file request (.REQ) files - (in that order) - - * In a single batch, receive bundles, files, file requests, and - requested files (in that order) - - * If a file request (.REQ) file came in, send all requested files - in a single batch. - - -Receiving system: - - * Receive YooHoo - - * Send YooHoo/2u2 - - * In a single batch, receive bundles, files, file requests - - * In a single batch, send bundles, files, our file requests, and - respond to file requests that arrived from the remote system. - - * If we sent a .REQ file in the preceding step, receive all files - in a single batch. - - -YooHoo and YooHoo/2u2 Page 8 -WaZOO File Requests - - - -WAZOO FILE REQUESTS -------------------- - -Rick Huebner, who adapted the ZModem routines for Opus, and the architect of -the Janus file transfer protocol, designed the ".REQ file"-based file request -system. - - -REQ FILE: - -A WaZOO file request is based on a request file. The name of a request file -is similar to the .OUT and .FLO files used by Opus-CBCS and similar mail -products (such as BinkleyTerm). - - TEMPLATE: netnode.REQ - - EXAMPLE: 00010002.REQ ... a request being sent to 1/2 - -The .REQ file is simply a text file that contains the files we want from the -remote system. Those file names can include wildcards, but should not contain -a path. Optionally, there can be a password if the sending system requires one. - -The "netnode" part of the file name is built from the remote systems net and -node numbers. Both numbers become 4-character hex numbers in the file name. - -Let's say we're requesting THIS.ARC and all node lists from 12/2. The file -name would be 000C0002.REQ. The contents would look like this: - - this.arc - nodelist.* - -If the sysop of 12/2 requires a password of THAT to get the file THIS.ARC, the -REQ file contents would have to change: - - this.arc !that - nodelist.* - -Transaction-level passwords (of 6 or fewer characters) follow the file name: - -- - Go Back - - - - + + + +! - -YooHoo and YooHoo/2u2 Page 9 -WaZOO File Requests - - - - -If the request is of the "update" genre, the type of update and the time, -expressed as a UNIX-style long decimal ASCII number, follows the name, or in -the event that there is a transaction-level password, the password. For -example, an update request for file NEWOPUS.*, where you already have a file -dated 1-January 1989, 00:00 and you live on the East Coast (GMT+06) would be: - - NEWOPUS.* +599634000 - -The sign is required, it indicates the type of update request. A '+' means -that all files matching the filespec "NEWOPUS.*" newer than the shown time -will be sent, a '-' means that all matching files with dates up to and -including the indicated time will be sent. - - -The complete format of an action line in an REQ file is, then: - - [ ! ][ <+/->
+Document: FTS-0006 +Version: 002 +Date: 30-Nov-1991 + + + + + YOOHOO and YOOHOO/2U2 + + The netmail handshake used by Opus-CBCS + and other intelligent Fidonet mail handling packages + + + Vince Perriello + FidoNet 1:2343/491 + + + + +Status of this document: + + This FTS (FidoNet(r) Technical Standard) specifies an optional + standard for the FidoNet community. Implementation of the + protocols defined in this document is not mandatory, but all + implementations of these protocols are expected to adhere to this + standard. Distribution of this document is subject to the + restrictions listed below. + + Fido and FidoNet are registered marks of Tom Jennings and Fido + Software + + + + +LEGAL STUFF +----------- + +The original protocol and documentation are by Wynn Wagner III. Updates +have been made to this document by Vince Perriello, who also is +responsible for most of the sample routine included with this document. + +They are released to the public for any use whatsoever as long as you +don't modify any transmitted structure or try to make money hawking +either the sample code or this document as if you owned them. + +If you choose to use the method or the sample routines, you do so +entirely at your own risk. It is possible that the routines will cause +physical damage to your equipment, an invasion of fire ants, the plague, +or an extended visit from in-laws. If any of that stuff (or anything +else) happens, you accept the consequences totally. + + +CREDITS +------- + +Fido and Fidonet are registered trademarks of Tom Jennings and Fido +Software. + +ARCmail was originated by System Enhancement Associates. + +The ZModem protocol was designed by Chuck Forsberg. The SEAlink / SEAlink +Overdrive protocols are copyrighted by System Enhancment Associates. The +TeLink protocol was designed and first implemented by Tom Jennings. + +The state charts in this document were done by Vince Perriello. + +Rick Huebner designed and implemented the basic WaZOO file request +method. Update request functionality was added by Vince Perriello. Bob +Hartman is responsible for the addition of Domain support. + +FTS-0001, describing the base FidoNet protocol, was created by Randy Bush. + +FTS-0007, describing enhancement to FTS-0001 using SEAlink and/or SEAlink +Overdrive, was created by Phil Becker. + +YooHoo and YooHoo/2u2 Page 2 +Overview + + + +UPFRONT +------- + +YOOHOO and YOOHOO/2U2 are the initial handshakes for the WaZOO e-mail +protocol. They are designed to let two systems establish a common ground +for a netmail session while making sure that non-WaZOO software doesn't +get upset by material it can't understand. + +The YOOHOO procedure begins as a single byte (0xf1). If the system on +the other end doesn't reply to that byte, no further YOOHOO or WaZOO +transmissions are attempted. To a non-WaZOO netmail system, the YOOHOO +byte will simply seem like a byte of debris. + +The calling system initiates the YOOHOO by sending the attention +character. If the receiving system seems interested, the calling system +sends a 128 byte packet containing such information as system and sysop +names as well as a "capability mask." A 16-bit CRC protects the integrity +of the 128-byte packet. + +In response, the receiving system prepares a 128 byte packet to send +back. This is the YOOHOO/2U2 procedure. + + +FEATURES +-------- + +The features of YOOHOO and YOOHOO/2U2 include + + * non-interference with systems that don't understand the + handshake + + * almost foolproof method for identifying a remote system + and establishing a common ground for transmission + + * built-in room to expand the capabilities of WaZOO without + having to resort to a kludge + + +USAGE +----- + +A calling system simply uses a routine that transmits both YooHoo and +TSYNC handshake initiating characters to the called system. If the +called system responds with an XMODEM 'NAK', an FTS-0001 session will be +initiated. If an 'ENQ' is received, the `YooHoo_Sender()' routine will +be invoked to handle the session negotiation. + +A receiving system can call a routine like `YooHoo_Receiver()' if it +detects the YOOHOO character, or just drop into the FTS-0001 logic if it +sees a TSYNC. + +This simple method allows a mailer to take care of both the TSYNC and the +YOOHOO handshakes. + +YooHoo and YooHoo/2u2 Page 3 +WaZOO Protocols + + + +PROTOCOLS +--------- + +Currently there are four WaZOO methods in use: + +1. ZedZap + ------ + + a Zmodem variant. The originator does a batch send then goes into a + receive batch mode. The called system does receive then send. In + the event of a file request (see description below) made by the + called system, one more turnaround is made to service the request. + + * Unlike the "True" Zmodem protocol described by Chuck Forsberg, + ZedZap routines must be able to handle a batch mode that has no + actual files. In other words, it is possible for there to be a + init sequence followed immediately by a ZFIN. + + * The maximum packet size is 8192. This is usually varied based on + the baud rate. For example, at 2400 it might be 2048 bytes, then + for 9600 baud and above the maximum of 8192 could apply. Note that + THIS IS A SIGNIFICANT VARIATION FROM STRICT ZMODEM IMPLEMENTATION. + (There's another WaZOO capability bit for those systems which + can not handle this block size) + + * Netmail packets are transmitted as files with names in the form + "12345678.PKT". Because of this, multiple packets may be sent in + a single session. + + * If the calling system transmits a .REQ file for file requests, the + receiving system can respond to it. See "WaZOO File Requests" + (below) for information on the .REQ file. + +2. ZedZip + ------ + + This capability is identical to ZedZap, but does not use buffers + greater than 1K in size (like "True" Zmodem). It is also + permissible to send a "null" packet in a ZedZip session. This + allows a system which must use a strict Zmodem implementation to + participate in a WaZOO session using Zmodem. + + +3. DietIFNA + -------- + + The session operates like FTS-0001/FTS-0007. The notable exceptions + are as follows: + + * The same packet naming convention as ZedZap applies, allowing more + than one packet to be transmitted in a single session. + +YooHoo and YooHoo/2u2 Page 4 +WaZOO Protocols + + + + * Telink file transfers don't even attempt to exchange file names + using modem7. The receiving system extracts the file name from the + Telink or SEAlink header block. + + * If SEAlink is used, run-ahead (the number of blocks to slide) is + based on the baud rate: BlocksToSlide = BaudRate / 400, up to a + max of 24 blocks. + + * When there is nothing to send, a system should remain quiet. In + other words, the end of a session can be determined by a timeout. + + * Under no circumstances should "BARK" file request logic be active + during a DietIFNA session. File requests, if any, should be + transmitted using a .REQ file. + + + Many implementations of DietIfna have been accomplished by the mere + exchange of packets, followed by straight FTS-0001/0007 code. This + is incorrect but probably not easily remedied at this point. We have + made an effort to document this change in "reality" in this revision + of the document. + +4. Janus + ----- + + Janus is a full-duplex simultaneous bidirectional file transfer + protocol. In other words, it can send and receive files at the same + time. It's very loosely derived from ZModem and HDLC/X.25 protocol + technology, in that it uses variable length data-typed packets, and + that transmission of file data does not require ACKs. + + The protocol is documented elsewhere; it is beyond the scope of this + document to do so. + +YooHoo and YooHoo/2u2 Page 5 +Choosing WaZOO Methods + + + +How to decide which WaZOO method to use +--------------------------------------- + + +Since the called system has all the information necessary to decide what +WaZOO method to employ, the best way to implement the process is for the +calling system to send, in its capability mask, all the bits which +correspond to methods it can use (or wants to use) in communicating with +the called system. The called system then looks at these bits and sends +back only the bit which corresponds to the method it wants to use. + +If the called system sends back a mask which contains more than one +capability of the calling system, it can create a problem situation if +one system arrives at its choice of methods differently from the other. +Thus, when the called system doesn't make the choice, both systems should +choose as follows: + +1. Janus + +2. ZedZap + +3. ZedZip + +4. DietIFNA + +The capability highest on the list which both systems indicate ability to +execute should be the one employed. + +YooHoo and YooHoo/2u2 Page 6 +WaZOO Filename conventions + + + +WaZOO FILENAMES +--------------- + + +1. MESSAGE PACKETS ... xxxxxxxx.PKT + + Normal (unarchived) messages are sent in a file name that has a tag + of .PKT. The "x" characters should be hex digits. + + +2. ARCmail ... xxxxxxxx.{MO|TU|WE|TH|FR|SA|SU}# + + Message packets are often shipped in an archive that has been + compressed with some LZ utility. + + The file name consists of a name with hex digits. The tag is one of + seven two-character prefixes ("MO", "TU", "WE", "TH", "FR", "SA" or + "SU") and a number (0-9). + + This particular naming convention was established by ARCmail version + 0.60, which is a defacto standard in FidoNet. + + +3. FILE REQUESTS ... xxxxxxxx.REQ + + This is explained below. + + In a nutshell, the file name consists of the receiving system's + Fidonet address expressed as two 4-digit hex numbers. The file tag + is .REQ. + + In a Janus session, the .REQ file isn't actually sent. Janus has + a transaction system which sends the .REQ file one line at a time + and then accepts the file(s) which the request generates. + +YooHoo and YooHoo/2u2 Page 7 +Flow of a ZedZap or ZedZip Session + + + +FLOW OF A ZEDZAP OR ZEDZIP SESSION +---------------------------------- + + + +The calling system: + + + * Send YooHoo + + * Receive YooHoo/2u2 + + * In a single batch, send bundles, files, file request (.REQ) files + (in that order) + + * In a single batch, receive bundles, files, file requests, and + requested files (in that order) + + * If a file request (.REQ) file came in, send all requested files + in a single batch. + + +Receiving system: + + * Receive YooHoo + + * Send YooHoo/2u2 + + * In a single batch, receive bundles, files, file requests + + * In a single batch, send bundles, files, our file requests, and + respond to file requests that arrived from the remote system. + + * If we sent a .REQ file in the preceding step, receive all files + in a single batch. + + +YooHoo and YooHoo/2u2 Page 8 +WaZOO File Requests + + + +WAZOO FILE REQUESTS +------------------- + +Rick Huebner, who adapted the ZModem routines for Opus, and the architect of +the Janus file transfer protocol, designed the ".REQ file"-based file request +system. + + +REQ FILE: + +A WaZOO file request is based on a request file. The name of a request file +is similar to the .OUT and .FLO files used by Opus-CBCS and similar mail +products (such as BinkleyTerm). + + TEMPLATE: netnode.REQ + + EXAMPLE: 00010002.REQ ... a request being sent to 1/2 + +The .REQ file is simply a text file that contains the files we want from the +remote system. Those file names can include wildcards, but should not contain +a path. Optionally, there can be a password if the sending system requires one. + +The "netnode" part of the file name is built from the remote systems net and +node numbers. Both numbers become 4-character hex numbers in the file name. + +Let's say we're requesting THIS.ARC and all node lists from 12/2. The file +name would be 000C0002.REQ. The contents would look like this: + + this.arc + nodelist.* + +If the sysop of 12/2 requires a password of THAT to get the file THIS.ARC, the +REQ file contents would have to change: + + this.arc !that + nodelist.* + +Transaction-level passwords (of 6 or fewer characters) follow the file name: + + <filename><single-space-character>!<password><cr> + +YooHoo and YooHoo/2u2 Page 9 +WaZOO File Requests + + + + +If the request is of the "update" genre, the type of update and the time, +expressed as a UNIX-style long decimal ASCII number, follows the name, or in +the event that there is a transaction-level password, the password. For +example, an update request for file NEWOPUS.*, where you already have a file +dated 1-January 1989, 00:00 and you live on the East Coast (GMT+06) would be: + + NEWOPUS.* +599634000 + +The sign is required, it indicates the type of update request. A '+' means +that all files matching the filespec "NEWOPUS.*" newer than the shown time +will be sent, a '-' means that all matching files with dates up to and +including the indicated time will be sent. + + +The complete format of an action line in an REQ file is, then: + + <filename>[<space>!<password>][<space><+/-><time>]<cr> + + + +MECHANISM: + +In a ZedZap or DietIfna session, the .REQ file is simply transmitted to the +other system. It goes "as is" like any other file. In a Janus session, the +.REQ file will be sent one line at a time and individually serviced by the +other end. + +The other system can ignore the request, send some of the files, or send all +of the files. There is no accounting or responsibilities on the part of the +remote system. + +If your implementation is unable to process the update information for any +reason, then you should process the line as a "regular" file request. + + + +NOTE: + +In the YooHoo packet, there's a bit that lets you know if the remote system +currently accepts .REQ files. This will be a clue as to whether a .REQ file +would be a waste of time or not. Procedurally, you just should not send a .REQ +file to a system which indicates that it won't process it. + +YooHoo and YooHoo/2u2 Page 10 +Structures and Definitions + + + +STRUCTURES AND DECLARATIONS +--------------------------- + + +#define ACK 0x06 +#define NAK 0x15 +#define ENQ 0x05 +#define YOOHOO 0xf1 +#define TSYNC 0xae + +struct _Hello + { + word signal; /* always 'o' (0x6f) */ + word hello_version; /* currently 1 (0x01) */ + word product; /* product code */ + word product_maj; /* major revision of the product */ + word product_min; /* minor revision of the product */ + char my_name[60]; /* Other end's name, will include domain */ + /* if DO_DOMAIN is set in capabilities mask*/ + char sysop[20]; /* sysop's name */ + word my_zone; /* 0== not supported */ + word my_net; /* out primary net number */ + word my_node; /* our primary node number */ + word my_point; /* 0 == not supported */ + byte my_password[8]; /* This is not necessarily null-terminated */ + byte reserved2[8]; /* reserved by Opus */ + word capabilities; /* see below */ + byte reserved3[12]; /* for non-Opus systems with "approval" */ + }; /* total size 128 bytes */ + + + +/*------------------------------------------------------------------------*/ +/* YOOHOO<tm> CAPABILITY VALUES */ +/*------------------------------------------------------------------------*/ +#define Y_DIETIFNA 0x0001 /* Can do fast "FTS-0001" 0000 0000 0000 0001 */ +#define FTB_USER 0x0002 /* Reserved by Opus-CBCS 0000 0000 0000 0010 */ +#define ZED_ZIPPER 0x0004 /* Does ZModem, 1K blocks 0000 0000 0000 0100 */ +#define ZED_ZAPPER 0x0008 /* Can do ZModem variant 0000 0000 0000 1000 */ +#define DOES_IANUS 0x0010 /* Can do Janus 0000 0000 0001 0000 */ +#define Bit_5 0x0020 /* reserved by FTSC 0000 0000 0010 0000 */ +#define Bit_6 0x0040 /* reserved by FTSC 0000 0000 0100 0000 */ +#define Bit_7 0x0080 /* reserved by FTSC 0000 0000 1000 0000 */ +#define Bit_8 0x0100 /* reserved by FTSC 0000 0001 0000 0000 */ +#define Bit_9 0x0200 /* reserved by FTSC 0000 0010 0000 0000 */ +#define Bit_a 0x0400 /* reserved by FTSC 0000 0100 0000 0000 */ +#define Bit_b 0x0800 /* reserved by FTSC 0000 1000 0000 0000 */ +#define Bit_c 0x1000 /* reserved by FTSC 0001 0000 0000 0000 */ +#define Bit_d 0x2000 /* reserved by FTSC 0010 0000 0000 0000 */ +#define DO_DOMAIN 0x4000 /* Packet contains domain 0100 0000 0000 0000 */ +#define WZ_FREQ 0x8000 /* WZ file req. ok 1000 0000 0000 0000 */ + +YooHoo and YooHoo/2u2 Page 11 +Domain addressing in Hello Packet + + +Since the invention of the WaZOO handshake, nearly every change in the +FidoNet transport has been accessible by defining bits for new protocols, +using the point number field in the structure, etc. + +With the advent of Domain addressing in FidoNet, this was no longer the +case. There was no place set aside in the hello packet where domain info +could be passed from one system to another. + +We have addressed this requirement by using some of the space set aside +in the system name field for the domain. It is backward-compatible with +all systems which determine the end of a string by use of a null. + +WaZOO systems that support domains communicate that fact by setting the +DO_DOMAIN bit (hex 2000) in the capabilities mask. This tells the other +side that they can expect to find a domain address in the packet. + +The domain name is stored at the end of the 'my_name' field. It is stored +in its entirety (no abbreviations as in FSC-0045) after the system name. +If the length of the system name plus the null terminator plus the length +of the domain name plus terminator exceeds 60, the system name will be +truncated (right to left) to make it fit. + +So, for a system named "FUBAR" at address 1:234/567@fidonet.org, the +address and name fields in the header would look like this: + +hello.my_zone = 1 +hello.my_net = 234 +hello.my_node = 567 +hello.my_point = 0 +hello.my_name = 'F','U','B','A','R', 0, 'f','i','d','o','n','e','t', + '.','o','r','g',0 +hello.capabilities will contain the usual capabilities plus DO_DOMAIN. + +A remote system receiving this packet should look past the null in +my_name to get the domain name. + +YooHoo and YooHoo/2u2 Page 12 +Caller State Tables + + + +Calling System: + + +The parts of FTS-0001 and FTS-0007 which deal with synchronization of calling +and called system must be modified to deal with the reception and processing +of the YooHoo character and exchange of Hello packets. The following state +table may be used to initiate an FTS-0001 or a WaZOO session by the calling +system. It replaces state S3 in the FTS-0001 table. + + + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | Stat| + |-----+----------+-------------------------+-------------------------+-----| + | SS0 | SyncInit | | Prepare 3 sec Sync timer| | + | | | | Prepare .5 sec NAK tmr | | + | | | | Init NAK Count | | + | | | | Start 60 sec master tmr | SS1 | + |-----+----------+-------------------------+-------------------------+-----| + | SS1 | SendSync | 1. Over 60 seconds | | | + | | | or carrier lost | no response | exit| + | | +-------------------------+-------------------------+-----| + | | | 2. 3 sec elapsed | Clear Inbound buffer | | + | | | or timer not started | Send YOOHOO, then TSYNC | | + | | | | Start 3 sec Sync timer | SS2 | + | | +-------------------------+-------------------------+-----| + | | | 3. not elapsed | | SS2 | + |-----+----------+-------------------------+-------------------------+-----| + | SS2 | WaitResp | 1. Nothing received | require a response | SS1 | + | | +-------------------------+-------------------------+-----| + | | | 2. ENQ received | WaZOO Protocol selected | exit| + | | +-------------------------+-------------------------+-----| + | | | 3. 'C' received | probable FTS-0001 | SS3 | + | | +-------------------------+-------------------------+-----| + | | | 4. NAK received | probable FTS-0001 | SS3 | + | | +-------------------------+-------------------------+-----| + | | | 5. Debris (might include| Reset NAK timer | | + | | | (YOOHOO|TSYNC) & 127)| if started | SS1 | + |-----+----------+-------------------------+-------------------------+-----| + | SS3 | NAKTmr | 1. Timer not expired | Zero NAK count | | + | | | or timer not started | Start .5 sec NAK timer | SS1 | + | | +-------------------------+-------------------------+-----| + | | | 2. Timer expired | Bump NAK count | SS4 | + |-----+----------+-------------------------+-------------------------+-----| + | SS4 | NAKCount | 1. Count >= 2? | assume FTS-0001 | exit| + | | +-------------------------+-------------------------+-----| + | | | 2. Count < 2 | Keep looking | SS1 | + `-----+----------+-------------------------+-------------------------+-----' + +YooHoo and YooHoo/2u2 Page 13 +Caller State Tables + + +Calling System (continued): + + + +The FTS-0001 exits from the above table should operate using the FTS-0001 +state tables, starting at state S4. The "WaZOO detected" case should proceed +using the following state table: + + + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | Stat| + |-----+----------+-------------------------+-------------------------+-----| + | YS1 | SndHello | Successful | Looks like WaZOO | YS2 | + | | (state +- - - - - - - - - - - - -+- - - - - - - - - - - - -+- - -| + | | SH1) | Not successful | Repeat whole thing | exit| + |-----+----------+-------------------------+-------------------------+-----| + | YS2 | WaitResp | 30 sec timer expires | repeat whole thing | exit| + | | | or lost carrier | | | + | | +- - - - - - - - - - - - -+- - - - - - - - - - - - -+- - -| + | | | Received YOOHOO | Another WaZOO, go | YS3 | + | | | | process receive | | + | | +- - - - - - - - - - - - -+- - - - - - - - - - - - -+- - -| + | | | Received debris | Repeat whole thing | YS2 | + |-----+----------+-------------------------+-------------------------+-----| + | YS3 | GetHello | Information | Report Success | exit| + | | (state | Successfully | | | + | | RH1) | Exchanged | | | + | | +- - - - - - - - - - - - -+- - - - - - - - - - - - -+- - -| + | | | Failure | Repeat whole thing | exit| + `-----+----------+-------------------------+-------------------------+-----' + + + +The failure cases in this table may be retried. The retry should be from +the point of synchronization. This means redoing the process in the SendSync +table on Page 11. A really smart mailer could therefore do a YooHoo, exchange +information, decide that it doesn't want to do WaZOO, fail out, and attempt +an FTS-0001 session. + + +If the packet exchange is successful, session method selection proceeds and +then the chosen session method should be employed to exchange mail and files. + +YooHoo and YooHoo/2u2 Page 14 +Called System State Tables + + + +The following state table may be used to initiate an FTS-0001 or a WaZOO +session by the called system. It replaces states R1 and R2 in the FTS-0001 +table. + + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | Stat| + |-----+----------+-------------------------+-------------------------+-----| + | RS0 | SyncInit | | Start 5 second idle tmr | RS1 | + |-----+----------+-------------------------+-------------------------+-----| + | RS1 | IdleWait | 1. 5 sec tmr expired | Take the initiative | RS2 | + | | +-------------------------+-------------------------+-----| + | | | 2. Carrier lost | Session aborted | exit| + | | +-------------------------+-------------------------+-----| + | | | 3. Peek = YOOHOO | Looks like a live WaZOO | RS3 | + | | +-------------------------+-------------------------+-----| + | | | 4. Peek = TSYNC | Live FTS-0001, we think | RS3 | + | | +-------------------------+-------------------------+-----| + | | | 5. Peek = CR, LF, space | He looks alive | RS2 | + | | +-------------------------+-------------------------+-----| + | | | 6. Other character | Eat it | RS1 | + |-----+----------+-------------------------+-------------------------+-----| + | RS2 |SendBanner| 1. Error returned | Session aborted | exit| + | | +-------------------------+-------------------------+-----| + | | | 2. Banner sent OK | | RS3 | + |-----+----------+-------------------------+-------------------------+-----| + | RS3 |RecvInit | | Start 20 sec timer | RS4 | + | | | | Init 10 sec timer | | + |-----+----------+-------------------------+-------------------------+-----| + | RS4 |SendSync | 1. Error returned | Session aborted | exit| + | |(xmit sync+-------------------------+-------------------------+-----| + | |string) | 2. String sent OK | Watch for sender sync | RS5 | + |-----+----------+-------------------------+-------------------------+-----| + | RS5 | WaitSync | 1. Carrier lost | Session aborted | exit| + | | +-------------------------+-------------------------+-----| + | | | 2. YOOHOO received | WaZOO session selected | exit| + | | +-------------------------+-------------------------+-----| + | | | 3. TSYNC received | probable FTS-0001 | RS6 | + | | +-------------------------+-------------------------+-----| + | | | 4. CR received | Still sync'ing | RS4 | + | | +-------------------------+-------------------------+-----| + | | | 5. Other character rcvd | Get next input character| RS5 | + | | +-------------------------+-------------------------+-----| + | | | 6. 10 sec timer elapsed | FTS-0001 selected | exit| + | | +-------------------------+-------------------------+-----| + | | | 7. 20 sec timer elapsed | Not a mail session | exit| + |-----+----------+-------------------------+-------------------------+-----| + | RS6 | TsyncTmr | 1. Timer not running | Start 10 second timer | RS5 | + | | | | Reset 20 sec timer | | + | | +-------------------------+-------------------------+-----| + | | | 2. Timer running | Two TSYNCS = FTS-0001 | exit| + `-----+----------+-------------------------+-------------------------+-----' + +YooHoo and YooHoo/2u2 Page 15 +Called System State Tables + + + +The FTS-0001 exits from the above table should operate using the FTS-0001 +state tables, starting at state R3. The "WaZOO detected" case should proceed +using the following state table: + + + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | Stat| + |-----+----------+-------------------------+-------------------------+-----| + | YR1 | GetHello | Information | Start 20 sec timer | YR2 | + | | (state | Successfully | Initialize retry count | | + | | RH1) | Exchanged | Send YooHoo | | + | | +- - - - - - - - - - - - -+- - - - - - - - - - - - -+- - -| + | | | Failure | Repeat whole thing | exit| + |-----+----------+-------------------------+-------------------------+-----| + | YR2 | WaitResp | 20 sec timeout | try again | YR3 | + | | +- - - - - - - - - - - - -+- - - - - - - - - - - - -+- - -| + | | | Lost carrier | Failure | exit| + | | +- - - - - - - - - - - - -+- - - - - - - - - - - - -+- - -| + | | | Received ENQ | Go send hello | YR4 | + | | +- - - - - - - - - - - - -+- - - - - - - - - - - - -+- - -| + | | | Received debris | Keep looking | YR2 | + |-----+----------+-------------------------+-------------------------+-----| + | YR3 | PollPeer | More than 3 retries | Give it up | exit| + | | +- - - - - - - - - - - - -+- - - - - - - - - - - - -+- - -| + | | | Less than 3 retries | Bump retry count | YR2 | + | | | | Clear input buffer | | + | | | | Send YOOHOO | | + | | | | Restart 20 sec timer | | + |-----+----------+-------------------------+-------------------------+-----| + | YR4 | SndHello | Successful | All done, report success| exit| + | | (state +- - - - - - - - - - - - -+- - - - - - - - - - - - -+- - -| + | | SH1) | Not successful | Repeat whole thing | exit| + `-----+----------+-------------------------+-------------------------+-----' + + + +The failure cases in states YR1, YR3 and YR4 of this table may be retried. +The retry should be from the point of synchronization. This means redoing the +process in the RecvSync table on Page 13, beginning at state RS3. A really +smart mailer could therefore do a YooHoo, exchange information, decide that +it doesn't want to (or cannot) do a WaZOO session, fail out, and attempt +an FTS-0001 session. + + +If the packet exchange is successful, session method selection proceeds and +then the chosen session method should be employed to exchange mail and files. + +YooHoo and YooHoo/2u2 Page 16 +Packet Exchange State Tables + + + +The following state table describes the transmission of the "Hello" packet +from one system to its partner: + + + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | Stat| + |-----+----------+-------------------------+-------------------------+-----| + | SH1 | InitSend | | Disable XON/XOFF | SH2 | + | | | | Set retry count to 0 | | + |-----+----------+-------------------------+-------------------------+-----| + | SH2 | SendHedr | | Send Hex 1f, then | SH3 | + | | | | Send HELLO struct | | + |-----+----------+-------------------------+-------------------------+-----| + | SH3 | SendCRC | | Clear Input Buffer | SH4 | + | | | | Send two-byte CRC of pkt| | + | | | | MSB followed by LSB | | + | | | | Start 40 second timer | | + |-----+----------+-------------------------+-------------------------+-----| + | SH4 | GetResp | 40 second timer expires | Failed to send packet | exit| + | | | or carrier lost | | | + | | +- - - - - - - - - - - - -+- - - - - - - - - - - - -+- - -| + | | | ACK received | Successful transmission | exit| + | | +- - - - - - - - - - - - -+- - - - - - - - - - - - -+- - -| + | | | '?' received | Error, try retransmit | SH2 | + | | +- - - - - - - - - - - - -+- - - - - - - - - - - - -+- - -| + | | | ENQ received | Out of sync? | SH2 | + | | +- - - - - - - - - - - - -+- - - - - - - - - - - - -+- - -| + | | | other character recvd | Debris, keep watching | SH4 | + `-----+----------+-------------------------+-------------------------+-----' + +YooHoo and YooHoo/2u2 Page 17 +Packet Exchange State Tables + + +The following state table describes the reception of the "Hello" packet sent +to a system by its partner: + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | Stat| + |-----+----------+-------------------------+-------------------------+-----| + | RH1 | SendENQ | | Start 2 minute timer | RH2 | + | | | | Send an ENQ character | | + |-----+----------+-------------------------+-------------------------+-----| + | RH2 | WaitHedr | 2 minute timer expires | Report failure | exit| + | | | or carrier lost | | | + | | +- - - - - - - - - - - - -+- - - - - - - - - - - - -+- - -| + | | | Received Hex 1f | Got header, get packet | RH5 | + | | +- - - - - - - - - - - - -+- - - - - - - - - - - - -+- - -| + | | | Received other char | Debris, throw away | RH3 | + | | | | Start 10 sec timer | | + |-----+----------+-------------------------+-------------------------+-----| + | RH3 | TossJunk | 10 sec timer expires | Too much noise | RH4 | + | | +- - - - - - - - - - - - -+- - - - - - - - - - - - -+- - -| + | | | Received Hex 1f | Got header, get packet | RH5 | + | | +- - - - - - - - - - - - -+- - - - - - - - - - - - -+- - -| + | | | Input buffer empty | Try to resynch | RH4 | + | | +- - - - - - - - - - - - -+- - - - - - - - - - - - -+- - -| + | | | Carrier lost | Report failure | exit| + |-----+----------+-------------------------+-------------------------+-----| + | RH4 | ReSynch | | Clear input buffer | RH2 | + | | | | Send ENQ | | + |-----+----------+-------------------------+-------------------------+-----| + | RH5 | HdrSetup | | Initialize CRC | | + | | | | Set 30 second timer | RH6 | + |-----+----------+-------------------------+-------------------------+-----| + | RH6 | GetHChar | 30 sec timer expires or | | | + | | | carrier lost | Report failure | exit| + | | +- - - - - - - - - - - - -+- - - - - - - - - - - - -+- - -| + | | | Character received | Process character | RH7 | + | | +- - - - - - - - - - - - -+- - - - - - - - - - - - -+- - -| + | | | 10 seconds with no char | Error, try resync | RH9 | + |-----+----------+-------------------------+-------------------------+-----| + | RH7 | StoHChar | Buffer and CRC filled | Compare CRC | RH8 | + | | +- - - - - - - - - - - - -+- - - - - - - - - - - - -+- - -| + | | | More characters needed | Reset 30 sec timer | RH6 | + |-----+----------+-------------------------+-------------------------+-----| + | RH8 | CheckCRC | CRC matches | Finish Receive | RH10| + | | +- - - - - - - - - - - - -+- - - - - - - - - - - - -+- - -| + | | | CRC doesn't match | Handle error | RH9 | + |-----+----------+-------------------------+-------------------------+-----| + | RH9 | CountERR | Less than 10 errors | Send '?' (0x3f) | RH2 | + | | +- - - - - - - - - - - - -+- - - - - - - - - - - - -+- - -| + | | | 10 errors | Hang up, report failure | exit| + |-----+----------+-------------------------+-------------------------+-----| + | RH10| HelloOK | | Clear inbound buffer | exit| + | | | | Send ACK | | + `-----+----------+-------------------------+-------------------------+-----' ++ +Go Back + + + + diff --git a/html/ftsc/fts-0007.html b/html/ftsc/fts-0007.html index 4135db75..f89a02a7 100755 --- a/html/ftsc/fts-0007.html +++ b/html/ftsc/fts-0007.html @@ -1,1869 +1,1645 @@ - - -
-Document: FTS-0007 -Version: 003 -Date: 15-Oct-1990 -Updates: FTS-0001 - - - - - An Enhanced FidoNet(r) Technical Standard - Extending FTS-0001 to include SEAlink protocol - (Including Overdrive and File Restart) - - October 15, 1990 - - - - -Status of this document: - - This document specifies an optional standard for the FidoNet community. - Implementation of the protocols defined in this document is not mandatory, - but all implementations of these protocols are expected to adhere to this - standard. Distribution of this document is subject to the limitations of - the copyright notice displayed below. - - - Copyright 1989-90 by Philip L. Becker. Portions of this document are - copyright 1986-90 by Randy Bush and are incorporated with his consent. - All rights reserved. A right to distribute only without modification and - only at no charge is granted. Under no circumstances is this document to - be reproduced or distributed as part of or packaged with any product or - other sales transaction for which any fee is charged. Any and all other - reproduction or excerpting requires the explicit written consent of the - copyright holders. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Introduction - - While the basic FTS-0001 protocol has become reasonably standardized, it - is technically inferior when used with modem speeds of 2400bps or higher, - and results in considerably slower file transfers than more sophisticated - protocols under many line and modem configurations. - - Very sophisticated protocols exist to allow absolute maximum efficiency, - but these protocols are much more difficult to implement than the basic - XMODEM used by FTS-0001. A need exists for a standardized, easy to - implement extension to the FTS-0001 protocol which can gain much better - performance. SEAlink is such an extension. It is nearly as easy to - implement as the FTS-0001 protocol with which it is fully backward - compatible. Despite its ease of implementation, it provides several - significant performance advantages. Among these advantages are: - - o Transparently communicates with strict FTS-0001 implementations. - - o Transparently communicates with FTS-0001 variants which omit - either the MODEM7 file name or the TeLink header block. - - o Transparently becomes a sliding window XMODEM protocol when - communicating with a like implementation. This sliding window - protocol gives significantly improved throughput when there is - an end-to-end delay. - - o Offers a negotiated streaming mode for high speed asymmetrical - modems to further enhance throughput for such links. - - o Offers a negotiated file restart capability which allows an - interrupted transfer to restart where it left off, reducing - time spent to retransmit the file. - - This document defines the data structures and communication protocols - which a FidoNet SEAlink implementation must provide. The implementor of - FidoNet compatible systems is the intended audience of this document. - - This document has the same overall format and state table descriptions - as FTS-0001. SEAlink is implemented by modifying the following tables: - - Session Layer: Sender - S1 - Network Layer: Batch File Sender - BS0 - Network Layer: Batch File Receiver - BR0 - Data Link Layer: XMODEM/TeLink Sender - XS0 - Data Link Layer: XMODEM/TeLink Receiver - XR0 - - - - - - - - - - - - - - - - - - - - - 1 - Table of Contents - - - Page - The purpose of the SEAlink protocol ................................... 3 - - How SEAlink negotiates its enhancements ............................... 4 - - Basic requirements for a FidoNet Implementation ....................... 5 - - Levels of Compliance .................................................. 5 - - The ISO/OSI Reference Model ........................................... 5 - - Data Description Language ............................................. 6 - - Finite State Machine Notation ......................................... 7 - - Glossary of variables and terms ....................................... 7 - - Application layer ..................................................... 8 - - Presentation layer .................................................... 8 - - Session layer protocol ................................................ 8 - Session State Table: Sender (S0) ................................. 9 - Session State Table: Receiver (R0) ............................... 10 - - Transport layer ....................................................... 10 - - Network layer ......................................................... 11 - Data Definition: MODEM7 file name ................................ 11 - Network State Table: Batch File Sender (BS0) ..................... 12 - Network State Table: Batch File Receiver (BR0) ................... 13 - - Data Link Layer ....................................................... 14 - Data Definition: XMODEM data block (CRC) ......................... 14 - Data Definition: XMODEM data block (Checksum) .................... 15 - Data Definition: TeLink header block ............................. 15 - Data Definition: SEAlink header block ............................ 16 - Data Definition: SEAlink RESYNC packet ........................... 16 - DDL Definition: XMODEMBlock, TeLink header ....................... 17 - DDL Definition: SEAlink header, ACK, NAK, RESYNC block ........... 18 - Checksum and CRC calculation algorithms .......................... 19 - Data Link Layer protocol ......................................... 20 - Data Link State Table: XMODEM/TeLink/SEAlink Sender (XS0) ........ 21 - Data Link State Table: Transmitter ACK/NAK check (AC0) ........... 22 - Data Link State Table: XMODEM/TeLink/SEAlink Receiver (XR0) ...... 24 - Data Link State Table: Send NAK (SN0) ............................ 26 - Data Link State Table: Send ACK (SA0) ............................ 26 - Data Link State Table: MODEM7 Filename Sender (MS0) .............. 27 - Data Link State Table: MODEM7 Filename Receiver (MR0) ............ 27 - - - - - - - - - - - - - - 2 - The purpose of the SEAlink protocol - - The purpose of the SEAlink protocol is to provide a much higher level - of capability than the XMODEM protocol provides, while retaining the - ease of implementation which has made the XMODEM protocol ubiquitous. - - In order for an extended protocol to function in FidoNet, it has to be - fully upward compatible with FTS-0001 mailers, and also those slight - variants of FTS-0001 which can communicate well with FTS-0001 mailers. - To meet this requirement, any extension to the FTS-0001 protocol has - to be capable of transparently negotiating away its extended capabilities - and communicate with strict FTS-0001 mailers (and their approved variants) - properly and reliably. - - This means that an extended protocol must miminally do the following: - - o Detect that the other mailer can or cannot support its extensions - automatically, and within the framework of a legitimate FTS-0001 - protocol encounter. - - o Support mail sessions with or without MODEM7 file names and with - or without TeLink headers in either combination. - - To be useful such an extended protocol should also be able to reliably - detect when the other mailer can support its extensions so they can - be used to maximum benefits. - - The major problems which exist with a standard FidoNet FTS-0001 session - result from the use of the XMODEM protocol. This is a half duplex protocol - which forces a line turnaround on every transmitted block. As a result, - any end-to-end delay in the transmission link is directly added to each - transmitted data block twice (once for each line turnaround). - - To dramatize how easily XMODEM is impacted by even small line delays, let's - examine a 2400bps call on a line with 500ms (1/2 second) delay on each line - turnaround. This is not an uncommon delay time on long distance calls. A - single data block in the XMODEM CRC format contains 133 characters. This - means it will be transmitted in 554ms. The ACK/NAK response is a single - character and will take 4ms. Thus with no delay (an ideal link) an XMODEM - transfer would send 128 data characters in 558ms for an effective data - throughput of about 230cps. With a 500ms line turnaround delay, these same - 128 data bytes will take 1558ms resulting in a throughput of 82cps. If - faster modem speeds are used, the percentage impact is even greater. - - The solution to this problem is to enhance the XMODEM protocol by adding - a "sliding window" capability which allows more than one block to be sent - before an acknowledgment is received. This converts the protocol to a - full duplex protocol, and if the "window size" (the number of blocks which - may be sent before the sender must wait for an acknowledgment) is larger - that the line turnaround delay, then the ideal throughput can be restored - even to lines with long turnaround delays. SEAlink is such a protocol. - - The standard SEAlink window size is 6 blocks, but the state tables given - below implement a receiver which will operate correctly with any window - size up to 127 blocks. Thus an implementation which uses a larger window - size will be totally compatible with the standard 6 block window versions. - - A second problem with the XMODEM protocol arises when asymmetrical high - speed modems are used. These modems achieve much higher throughput when - data is sent in only one direction. Since they provide error free links, - a protocol which does not send any positive acknowledgments, but only - reports any bad blocks received will achieve a significantly higher - - - - 3 - throughput than a protocol which is either full duplex or which turns - around between each block such as XMODEM or normal SEAlink. It is for - this purpose that SEAlink Overdrive is provided. It is a streaming version - of SEAlink designed to provide much higher throughput on asymmetrical - high speed links which provide end-to-end data flow control. - - Finally, there is the annoying problem which occurs when a large data file - transfer has nearly completed and a loss of connection occurs. Normally - the entire file must be retransmitted on a new call, resulting in lost - time and money. The SEAlink RESYNC enhancement allows an interrupted - file transfer to be resumed at the point it was interrupted thus minimizing - the impact of such an interruption. - - How SEAlink Negotiates its enhancements - - SEAlink makes some assumptions about how FTS-0001 mailer implementations - react to various stimuli in order to negotiate its enhancements. For the - sender, the test consists of two parts: - - 1. Send a SEAlink header and see if the other end acknowledges it. In - general it will, because most XMODEM implementations will think that - the SEAlink header is a "previous block" and ACK and discard it. If - the receiver refuses to accept a SEAlink header block in three tries, - then it clearly cannot do SEAlink protocol and the negotiation is over. - - 2. Since the receiver's acknowledgment of the SEAlink header is not a - sufficient criteria to determine if the receiver in fact supports - SEAlink, the sender dynamically examines the acknowledgments the - receiver provides to determine if their format indicates support of - SEAlink or not and adjusts its sending techniques accordingly. This - is also the technique used to detect whether the receiver is in fact - supporting any extensions (such as SEAlink Overdrive) which have been - requested in the header. - - For the receiver, the negotiation occurs during the receipt of the first - valid block. - - 1. If the first block received is a valid SEAlink header, then the - transmitter supports SEAlink and the receiver can switch to it. This - same header also indicates if the transmitter wants or can support the - SEAlink options such as Overdrive and File RESYNC. - - 2. If the first block received is a valid TeLink header, then the - transmitter supports a variant of FTS-0001 and SEAlink support may - be assumed to be absent. - - 3. If the first block received is an XMODEM data block then SEAlink - support may also be assumed to be absent. - - If the receiver gets a SEAlink header, it can then arbitrarily decide - which of any requested options it wishes to use. It may not use an option - for which support is not indicated in the sender's SEAlink header block. - - The remainder of this document provides the details for a full SEAlink - implementation with Overdrive and RESYNC support. A glossary of terms and - indicators is provided along with a full state table description of the - protocol implementation. - - - - - - - - - 4 - This document follows the format of FTS-0001 to allow ease of - comparison of the two protocols. This document could not have been - generated without the tremendous efforts of those whose work resulted in - FTS-0001. FidoNet owes a great debt to those efforts. The following - introduction is reprinted from FTS-0001. - - The layered metaphor of the ISO Open Systems Interface reference model - has been used to view FidoNet from a standard perspective. As with most - prospective ISO/OSI descriptions, FidoNet does not always make this easy. - - - 1. Basic Requirements for a FidoNet Implementation - - Compatibility is a set of abilities which, when taken as a whole, make - it safe to list a net or node in the IFNA nodelist. In other words, - if another node should attempt contact, does it have a reasonable - chance of successful communication? This is a social obligation, as - the calling system pays money for the attempt. Conversely, an - implementation should be able to successfully contact other systems, - as life is not a one-way street. - - A FidoNet implementation must be able to call other nodes and transfer - messages and files in both directions. This includes pickup and poll. - - A FidoNet implementation must be able to accept calls from other nodes - and transfer messages and files in both directions. This includes - pickup. - - A FidoNet implementation must be able to receive and process the IFNA - format nodelist, and transfer nodelists to other nodes. A companion - document, FTS-0005, defines the IFNA format nodelist and how to - interpret and process it. - - A FidoNet implementation must route messages which do not have files - attached through net hosts as shown in an IFNA format nodelist. - - - 2. Levels of Compliance - - This documents represents an extended FidoNet implementation. It - defines a well tested extension which is optional but provides - sufficient additional function that implementors should seriously - consider it. SEAdog(tm), from System Enhancement Associates, - is the inspiration for this extended FidoNet implementation. - System Enhancement Associates is the creator of the SEAlink protocol. - - - 3. The ISO/OSI Reference Model (cribbed from "Protocol Verification via - Executable Logic Specifications", D. P. Sidhu, in Rudin & West) - - In the ISO/OSI model, a distributed system consists of entities that - communicate with each other according to a set of rules called a - protocol. The model is layered, and there are entities associated - with each layer of the model which provide services to higher layers - by exchanging information with their peer entities using the services - of lower layers. The only actual physical communication between two - systems is at the lowest level. - - - - - - - - - 5 - Several techniques have been used in the specification of such - protocols. A common ingredient in all techniques is the notion of the - extended finite state automata or machine. Extensions include the - addition of state variables for the storing of state information about - the protocol. The state of an automaton can change as a result of - one of the following events: - - o Request from an upper network layer for service - - o Response to the upper layer - - o Request to the lower network layer to perform a service - - o Response from the lower layer - - o Interaction with the system and environment in which the protocol is - implemented (e.g. timeouts, host operating system aborts, ...) - - A protocol specification, in a large part, consists of specifying - state changes in automata which model protocol entities and in - describing the data which they exchange. - - For historical reasons, the term packet is used in FidoNet to - represent a bundle of messages, as opposed to the more common use as a - unit of communication, which is known as a block in FidoNet. - - - 4. Data Description - - A language specific notation was avoided. Please help stamp out - environmental dependencies. Don't panic, there are rectangular record - layouts too. The following defines the data description language used. - - (* non-terminals *) - UpperCaseName - to be defined further on - - (* literals *) - "ABC" - ASCII character string, no termination implied - nnH - byte in hexadecimal - - (* terminals *) - someName - 16-bit integer, low order byte first (8080 style) - someName[n] - field of n bytes - someName[.n] - field of n bits - someName(n) - Null terminated string allocated n chars (incl Null) - someName{max} - Null terminated string of up to max chars (incl Null) - someName- - Go Back - - - - + + + +- String of up to max chars, NOT null terminated - - (* punctuation *) - a b - one 'a' followed by one 'b' - ( a | b ) - either 'a' or 'b', but not both - { a } - zero or more 'a's - [ b ] - zero or one 'b' - (* comment *) - ignored - - (* predeclared constant *) - Null = 00H - - - - - - - - - 6 - 5. Finite State Machine Notation - - .-----+----------+-------------------------+-------------------------+-----. - |State| State | Predicate(s) | Action(s) | Next| - | # | Name | | | St | - +-----+----------+-------------------------+-------------------------+-----+ - | fnn*| | | | | - `-----+----------+-------------------------+-------------------------+-----' - - State # - Number of this state (e.g. R13). - f - FSM initial (Window, Sender, Receiver, ...) - nn - state number - * - state which represents a lower level protocol which - is represented by yet another automation. - - State Name - Descriptive name of this state. - - Predicate(s) - Conditions which terminate the state. If predicates are - non-exclusive, consider them ordered. - - Action(s) - Action(s) corresponding to predicate(s) - - Next State - Subsequent state corresponding to predicate(s) - - Ideally, there should be a supporting section for each state which - should give a prose description of the state, its predicates, actions, - etc. So much for ideals. The following is a list of all of the terms - and variables used in the following state machine descriptions: - - - Glossary of variables and terms - - SEAlink - Flag indicating SEAlink or XMODEM mode - - SLO - Flag indicating overdrive if in SEAlink mode - - RESYNC - Flag indicating whether transmitting end can honor RESYNC - file positioning requests or only NAKs - - MACFLOW - Flag indicating whether the sender supports the Macintosh flow - control option. This is an optional feature used by TABBY - because the Macintosh serial port does not support RTS/CTS. - - CRC - Flag indicating whether block check is done using CRC or Checksum - - T1 and T2 - Timeout Timers which run asynchronously with the code - - WINDOW - Number of unacknowledged blocks which may be transmitted - - SendBLK - Next 128 byte block number in file to send. May not occur in - sequential order, so file positioning may be necessary when - it is time to send this block - - ACKBLK - Highest block number in file which has been acknowledged by - the receiver as received without error - - Last Blk - Block number of last 128 byte block (or partial block) in the - file being sent. - - NumNAK - Number of NAKs received since last ACK - - ACKs Rcvd - Number of ACKs received since the start of this file send - - - - 7 - Glossary of variables and terms (cont.) - - ACKST - State of ACK/NAK machine during auto-detect of SEAlink or XMODEM - style ACK/NAK block receipt - - RESYNC BLK# - Block number in file requested by a received RESYNC packet - - ARBLK8 - Block # (0-255) received in a SEAlink style ACK/NAK packet - - ARBLK - Block # in file (calculated from ARBLK8) which is the actual - block being referenced in the SEAlink ACK/NAK packet - - blocknum - Block # (0-255) sent in a SEAlink style ACK/NAK packet - - WriteBLK - Block # in file to write next correctly received data block. - Note: Block 1 is the first byte of the file. - - CHR - Temp holding variable for received character during send operation - - - B. Application Layer : the System from the User's View - - This is unchanged from FTS-0001. - - - C. Presentation Layer : the User from the System's View - - This is unchanged from FTS-0001. - - - D. Session Layer Protocol : Connecting to Another FidoNet Machine - - A session is a connection between two FidoNet machines. It is currently - assumed to be over the DDD telephone network via modems. The calling - machine starts out as the sender and the called machine as the receiver. - The pickup feature is described by the sender and receiver changing - roles midway through the session, after the sender has transferred the - message packet and any attached files. Due to the lack of security in - the pickup protocol (danger of pickup by a fake node), extensions to the - basic Session protocol have been developed. This document describes only - the minimum Session Layer protocol (as in FTS-0001). - - Once a connection has been established, each system should ensure that - the physical connection remains throughout the session. For physical - layers implemented through modems, this means monitoring the carrier - detect signal, and terminating the session if it is lost. - - Error detection at the physical layer should be monitored for both sent - and received characters. Parity, framing, and other physical errors - should be detected. - - The only change to the Session Layer state tables from FTS-0001 is in the - Sender state "S1", Predicate "1" (S1.1) entry. - - - - - - - - - - - - - 8 - Sender - - .-----+----------+-------------------------+-------------------------+-----. - |State| State | Predicate(s) | Action(s) | Next| - | # | Name | | | St | - +-----+----------+-------------------------+-------------------------+-----+ - | S0 | SendInit | | dial modem | S1 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | S1 | WaitCxD |1| carrier detected | delay 1-5 seconds | S2 | - | | (*1) | | | Set SLO if > 2400bps, | | - | | | | | Reset SLO if <= 2400bps | | - | | +-+-----------------------+-------------------------+-----+ - | | |2| busy, etc. | report no connection | exit| - | | +-+-----------------------+-------------------------+-----+ - | | |3| voice | report no carrier | exit| - | | +-+-----------------------+-------------------------+-----+ - | | |4| carrier not detected | report no connection | exit| - | | | | within 60 seconds | | | - +-----+----------+-+-----------------------+-------------------------+-----+ - | S2 | WhackCRs |1| over 30 seconds | report no response <cr> | exit| - | | +-+-----------------------+-------------------------+-----+ - | | |2| ?? <cr>s received | delay 1 sec | S3 | - | | +-+-----------------------+-------------------------+-----+ - | | |3| <cr>s not received | send <cr> <sp> <cr> <sp>| S2 | - | | | | | delay ??? secs | | - +-----+----------+-+-----------------------+-------------------------+-----+ - | S3 | WaitClear|1| no input for 0.5 secs | send TSYNCH = AEH | S4 | - | | +-+-----------------------+-------------------------+-----+ - | | |2| over 60 seconds | hang up, report garbage | exit| - | | | | and line not clear | | | - +-----+----------+-+-----------------------+-------------------------+-----+ - | S4* | SendMail | | (XMODEM send packet XS0)| S5 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | S5 | CheckMail|1| XMODEM successful | (Fido registers success)| S6 | - | | +-+-----------------------+-------------------------+-----+ - | | |2| XMODEM fail or timeout| hang up, report mail bad| exit| - +-----+----------+-+-----------------------+-------------------------+-----+ - | S6* | SendFiles| | (BATCH send files BS0) | S7 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | S7 | CheckFile|1| BATCH send successful | | S8 | - | | +-+-----------------------+-------------------------+-----+ - | | |2| BATCH send failed | hang up, rept files fail| exit| - +-----+----------+-+-----------------------+-------------------------+-----+ - | S8 | TryPickup|1| wish to pickup | note send ok | R2* | - | | +-+-----------------------+-------------------------+-----+ - | | |2| no desire to pickup | delay 5 secs | exit| - | | | | | hang up, rept send ok | | - `-----+----------+-+-----------------------+-------------------------+-----' - Although the above shows the sender emitting only one TSYNCH, it is - recommended that a timeout of 5-20 seconds should initiate another TSYNCH. - The receiver should tolerate multiple TSYNCHs. - - *1 - The action for (S1.1) is the only change from the corresponding - FTS-0001 state table. - - - - - - - - - - - - 9 - Receiver - - The receiving FSM is given an external timer, the expiration of which - will cause termination with a result of 'no calls' (R0.2). - - .-----+----------+-------------------------+-------------------------+-----. - |State| State | Predicate(s) | Action(s) | Next| - | # | Name | | | St | - +-----+----------+-+-----------------------+-------------------------+-----+ - | R0 | WaitCxD |1| carrier detected | | R1 | - | | +-+-----------------------+-------------------------+-----+ - | | |2| external timer expires| report no calls | exit| - +-----+----------+-+-----------------------+-------------------------+-----+ - | R1 | WaitBaud |1| baud rate detected | send signon with <cr>s | R2 | - | | +-+-----------------------+-------------------------+-----+ - | | |2| no detect in ?? secs | hang up, report no baud | exit| - +-----+----------+-+-----------------------+-------------------------+-----+ - | R2 | WaitTsync|1| TSYNCH received | ignore input not TSYNCH | R3 | - | | +-+-----------------------+-------------------------+-----+ - | | |2| 60 seconds timeout | hang up, report not Fido| exit| - +-----+----------+-+-----------------------+-------------------------+-----+ - | R3* | RecMail | | (XMODEM rec packet XR0) | R4 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | R4 | XRecEnd |1| XMODEM successful | delay 1 second | R5 | - | | | | | flush input | | - | | +-+-----------------------+-------------------------+-----+ - | | |2| XMODEM failed | hang up, rept mail fail | exit| - +-----+----------+-+-----------------------+-------------------------+-----+ - | R5* | RecFiles | | (BATCH rec files BR0) | R6 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | R6 | ChkFiles |1| BATCH recv successful | delay 2 secs | R7 | - | | +-+-----------------------+-------------------------+-----+ - | | |2| BATCH recv failed | hang up, report bad file| exit| - +-----+----------+-+-----------------------+-------------------------+-----+ - | R7 | AllowPkup|1| have pickup for sender| receiver becomes sender | S3* | - | | +-+-----------------------+-------------------------+-----+ - | | |2| nothing to pickup | hang up, rept recv ok | exit| - `-----+----------+-+-----------------------+-------------------------+-----' - - There is no change in the Session Layer Receiver state table from FTS-0001. - - - E. Transport Layer : ????? - - This is unchanged from FTS-0001. - - - - - - - - - - - - - - - - - - - - - 10 - F. Network Layer : the Network's View of the System, Routing and Packets - - 1. Network Layer Data Definition : the Packet Header - - This is unchanged from FTS-0001. - - - 2. Network Layer Data Description : a File with Attributes - - The BATCH protocol uses the MODEM7 filename and/or SEAlink/TeLink/XMODEM - file transfer protocols to transfer the file with attributes. - - When a file is transferred via FidoNet, an attempt is made to also - pass the operating system's attributes for the file such as length, - modification date, etc. FidoNet does this via a special prefix block - to the XMODEM file transfer using a protocol known as TeLink. As the - TeLink protocol relies on a modification to the XMODEM file transfer - protocol, it is documented at the data link layer level. Optionally, - if both sender and receiver implement the SEAlink extension, file - information is passed using the SEAlink header block which also - contains feature negotiation information. - - The MODEM7 file name is redundant if there is also a TeLink or SEAlink - block, in which case the name may be taken from either or both. In this - extended implementation, the MODEM7 file name is never required. It - is sent, however, if it appears that the other node is using a strict - FTS-0001 implementation. This implementation will adapt to an FTS-0001 - variant which only sends the TeLink header without the MODEM7 filename - also so that it is compatible with all know variants of FTS-0001 which - are currently in the FidoNet network. - - - FileName as Sent by MODEM7 - Offset - dec hex - .-----------------------------------------------. - 0 0 | fileName | - ~ 8 bytes ~ - | left adjusted blank filled | - +-----------------------------------------------+ - 8 8 | fileExt | - ~ 3 bytes ~ - | left adjusted blank filled | - `-----------------------------------------------' - - - - - - - - - - - - - - - - - - - - - - 11 - 3. Network Layer Protocol : BATCH File Finite State Machines - - BATCH File Sender - - .-----+----------+-------------------------+-------------------------+-----. - |State| State | Predicate(s) | Action(s) | Next| - | # | Name | | | St | - +-----+----------+-+-----------------------+-------------------------+-----+ - | BS0 | MoreFiles|1| more files to send | | BS1 | - | | +-+-----------------------+-------------------------+-----+ - | | |2| no more files to send | | BS4 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | BS1 | WaitType |1| rec NAK | (MODEM7 FName send MS0) | BS2 | - | | (*1) +-+-----------------------+-------------------------+-----+ - | | |2| rec 'C' | (SEAlink send file XS0) | BS3 | - | | +-+-----------------------+-------------------------+-----+ - | | |3| rec other char | eat character | BS1 | - | | +-+-----------------------+-------------------------+-----+ - | | |4| > 20 sec in BS1 | report name send bad | exit| - +-----+----------+-+-----------------------+-------------------------+-----+ - | BS2 | CheckFNm |1| MODEM7 Filename ok | (TeLink send file XS0T) | BS3 | - | | (*2) +-+-----------------------+-------------------------+-----+ - | | |2| MODEM7 Filename bad | report name send bad | exit| - +-----+----------+-+-----------------------+-------------------------+-----+ - | BS3 | CheckFile|1| File send ok | | BS0 | - | | +-+-----------------------+-------------------------+-----+ - | | |2| File send bad | report file send bad | exit| - +-----+----------+-+-----------------------+-------------------------+-----+ - | BS4 | EndSend |1| rec NAK or 'C' | send EOT, report send ok| exit| - | | (*3) +-+-----------------------+-------------------------+-----+ - | | |2| 10 secs no NAK or 'C' | send EOT, report no NAK | exit| - `-----+----------+-+-----------------------+-------------------------+-----' - - *1 - Note: Filenames must be upper case ASCII. The data link layer uses - lower case "u" as a control character during MODEM7 name transmission. - - *2 - Note: SEAdog (through version 4.51b) does not possess a state "XS0T". - It therefore calls XS0 from state BS2, resulting in a MODEM7 file name - being sent with no TeLink header on batch file transmissions when it - is not in SEAlink mode. - - *3 - When no files remain, the sender responds to the receiver's NAK with - an EOT. The EOT is not ACK/NAKed by the receiver. - - - - - - - - - - - - - - - - - - - - - - - 12 - BATCH File Receiver - - .-----+----------+-------------------------+-------------------------+-----. - |State| State | Predicate(s) | Action(s) | Next| - | # | Name | | | St | - +-----+----------+-------------------------+-------------------------+-----+ - | BR0 | TestSL | | Send 'C', | BR1 | - | | | | Set T1 to 10 sec | | - | | | | Set T2 to 120 sec | | - +-----+----------+-+-----------------------+-------------------------+-----+ - | BR1 | CheckSL |1| > 2 sec with no data | Send 'C' | BR1 | - | | +-+-----------------------+-------------------------+-----+ - | | |2| Timer T2 expired | (MODEM7 FName recv MR0) | BR2 | - | | +-+-----------------------+-------------------------+-----+ - | | |3| Character Waiting | "Peek" char to CHR (*1) | BR4 | - | | +-+-----------------------+-------------------------+-----+ - | | |4| Timer T1 expired | (MODEM7 FName recv MR0) | BR2 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | BR2 | CheckFNm |1| no more files | report files recd ok | exit| - | | +-+-----------------------+-------------------------+-----+ - | | |2| Filename ok | (Rcv file Telink XR0) | BR3 | - | | +-+-----------------------+-------------------------+-----+ - | | |3| Filename bad | report name recv bad | exit| - +-----+----------+-+-----------------------+-------------------------+-----+ - | BR3 | CheckFile|1| File received ok | | BR0 | - | | +-+-----------------------+-------------------------+-----+ - | | |2| File received bad | report file recv bad | exit| - +-----+----------+-+-----------------------+-------------------------+-----+ - | BR4 | FindType |1| CHR = NUL | eat character, | BR1 | - | | | | | Reset T1 to 20 secs | | - | | (*2) +-+-----------------------+-------------------------+-----+ - | | |2| CHR = SOH | (Rcv File SEAlink XR0B) | BR3 | - | | +-+-----------------------+-------------------------+-----+ - | | |3| CHR = SYN | (Rcv File Telink XR0B) | BR3 | - | | +-+-----------------------+-------------------------+-----+ - | | |4| CHR = EOT or | eat character, | exit| - | | | | CHR = SUB | report files recd ok | | - | | +-+-----------------------+-------------------------+-----+ - | | |5| CHR = Other char | eat character | BR1 | - `-----+----------+-+-----------------------+-------------------------+-----' - - *1 - "Peek" a character means to place it in CHR but leave it in the input - buffer so the next read operation will re-read it. - - *2 - "Eat" a character means to remove it from the input buffer. - - - - - - - - - - - - - - - - - - - - - 13 - G. Data Link Layer : Error-Free Data Transfer - - 1. Data Link Layer Data Definition : XMODEM/TeLink/SEAlink Blocks - - XMODEM transfers are in blocks of 128 uninterpreted data bytes - preceded by a three byte header and followed by either a one byte - checksum or a two byte crc remainder. XMODEM makes no provision for - data streams which are not an integral number of blocks long. - Therefore, the sender pads streams whose length is not a multiple of - 128 bytes with the end-of-file character (^Z for MS-DOS), and uses some - other means to convey the true data length to the receiver (e.g. - SEAlink or TeLink file info header block). - - Data blocks contain sequence numbers so the receiver can ensure it has - the correct block. Data block numbers are sequential unsigned eight bit - integers beginning with 01H and wrapping to 00H. A TeLink or SEAlink - header block is given sequence number 00H. - - For files which are attached to the mail packet (but not the mail packet - itself), if the sending system is aware of the file attributes as they - are known to the operating system, then the first block of the XMODEM - transfer may be a special TeLink block to transfer that information. - This block differs in that the first byte is a SYN character as - opposed to an SOH, and it is always sent checksum as opposed to CRC. - Should the receiver be unwilling to handle such information, after four - NAKs (or "C"s), the sender skips this special block and goes on to the - data itself. - - In this extended protocol the TeLink header block may be replaced by - the SEAlink header block which conveys protocol negotiation information - in addition to the file attributes if both nodes implement SEAlink. - - - - XMODEM Data Block (CRC mode) - Offset - dec hex - .-----------------------------------------------. - 0 0 | SOH - Start Of Header - 01H | - +-----------------------------------------------+ - 1 1 | BlockNumber | - +-----------------------------------------------+ - 2 2 | BlockComplement | - +-----------------------------------------------+ - 3 3 | 128 bytes of | - ~ uninterpreted ~ - | data | - +-----------------------------------------------+ - 131 83 | CRC high order byte | - +-----------------------------------------------+ - 132 84 | CRC low order byte | - `-----------------------------------------------' - - - - - - - - - - - - - - 14 - XMODEM Data Block (Checksum mode) - Offset - dec hex - .-----------------------------------------------. - 0 0 | SOH - Start Of Header - 01H | - +-----------------------------------------------+ - 1 1 | BlockNumber | - +-----------------------------------------------+ - 2 2 | BlockComplement | - +-----------------------------------------------+ - 3 3 | 128 bytes of | - ~ uninterpreted ~ - | data | - +-----------------------------------------------+ - 131 83 | Checksum byte | - `-----------------------------------------------' - - - TeLink File Descriptor Block - Offset - dec hex - .-----------------------------------------------. - 0 0 | SYN - File Info Header - 16H | - +-----------------------------------------------+ - 1 1 | 00H | - +-----------------------------------------------+ - 2 2 | FFH | dec hex - +-----------------------------------------------+ - 3 3 | File Length, least significant byte | 0 0 - +-----------------------------------------------+ - 4 4 | File Length, second to least significant byte | 1 1 - +-----------------------------------------------+ - 5 5 | File Length, second to most significant byte | 2 2 - +-----------------------------------------------+ - 6 6 | File Length, most significant byte | 3 3 - +-----------------------------------------------+ - 7 7 | Creation Time of File | 4 4 - | "DOS Format" | - +-----------------------------------------------+ - 9 9 | Creation Date of File | 6 6 - | "DOS Format" | - +-----------------------------------------------+ - 11 B | File Name | 8 8 - ~ 16 chars ~ - | left justified blank filled | - +-----------------------------------------------+ - 27 1B | 00H | 24 18 - +-----------------------------------------------+ - 28 1C | Sending Program Name | 25 19 - ~ 16 chars ~ - | left justified Null filled | - +-----------------------------------------------+ - 44 2B | 01H (for CRC) or 00H | 41 29 - +-----------------------------------------------+ - 45 2C | fill | 42 2A - ~ 86 bytes ~ - | all zero | - +-----------------------------------------------+ - 131 83 | Checksum byte | - `-----------------------------------------------' - - - - - - 15 - Offset SEAink File Descriptor Block - dec hex - .-----------------------------------------------. - 0 0 | SOH - Start of Header - 01H | - +-----------------------------------------------+ - 1 1 | 00H | - +-----------------------------------------------+ - 2 2 | FFH | dec hex - +-----------------------------------------------+ - 3 3 | File Length, (4 bytes, LSB first) | 0 0 - +-----------------------------------------------+ - 7 7 | Creation Date/Time of File | 4 4 - | (4 bytes, LSB first, seconds since 1979) | - +-----------------------------------------------+ - 11 B | File Name | 8 8 - ~ 17 chars ~ - | left justified Null filled | - +-----------------------------------------------+ - 28 1C | Sending Program Name | 25 19 - ~ 15 chars ~ - | left justified Null filled | - +-----------------------------------------------+ - 43 2B | > 0 if SLO Requested | 40 28 - +-----------------------------------------------+ - 44 2C | > 0 if RESYNC Supported | 41 29 - +-----------------------------------------------+ - 45 2D | > 0 if MACFLOW Supported | 42 2A - +-----------------------------------------------+ - 46 2E | fill | 43 2B - ~ 85 bytes ~ - | all zero | - +-----------------------------------------------+ - 131 83 | CRC high order byte | - +-----------------------------------------------+ - 132 84 | CRC low order byte | - `-----------------------------------------------' - - - Offset SEAlink RESYNC packet - dec hex - .-----------------------------------------------. - 0 0 | SYN - Start of RESYNC packet - 16H | - +-----------------------------------------------+ - 1 1 | ASCII Decimal 128 byte block number in | - ~ file to restart sending. (No leading ~ - n | or trailing blanks, MSD first). | - +-----------------------------------------------+ - n+1 | ETX - End of RESYNC packet - 03H | - +-----------------------------------------------+ - n+2 | (*1) CRC low order byte | - +-----------------------------------------------+ - n+3 | (*1) CRC high order byte | - `-----------------------------------------------' - - *1 - CRC does not include the SYN or ETX and is - in the reverse byte order from the CRC in a - normal XMODEM data packet. The following is - a sample RESYNC packet for file block 27 (1BH). - - SYN '2' '7' ETX CRCLO CRCHI - .-----+-----+-----+-----+-----+-----. - | 16H | 32H | 37H | 03H | 43H | 25H | - `-----+-----+-----+-----+-----+-----' - - - 16 - Data Description language definitions of block types: - - XMODEMData = XMODEMBlock (* block of data with hdr and trailer *) - | SEALinkBlock (* SEALink File Descriptor Block *) - | TeLinkBlock (* TeLink File Descriptor Block *) - | ReSyncBlock (* SEAlink RESYNC request packet *) - | ACK (* acknowledge data received ok *) - | NAK (* negative ACK & poll 1st block *) - | SEAlinkACK (* acknowledge data received ok *) - | SEAlinkNAK (* negative ACK & poll 1st block *) - | EOT (* end of xfer, after last block *) - | "C" (* 43H *) - - - XMODEMBlock = SOH (* Start of Header, XMODEM Block *) - blockNumber[1] (* sequence, i'=mod( i+1, 256 ) *) - blockCompl[1] (* one's complement of blockNumber *) - data[128] (* uninterpreted user data block *) - (CRC | Checksum) (* error detect/correction code *) - - - TeLinkBlock = SYN (* File Info Header *) - 00H (* block no, must be first block *) - FFH (* one's complement of block no *) - fileLength[4] (* length of data in bytes *) - (*2) CreationTime[2] (* time file last modified or zero *) - (*2) CreationDate[2] (* date file last modified or zero *) - fileName(16) (* name of file, not vol or dir *) - 00H (* header version number *) - sendingProg(16) (* name of program on send side *) - (*1) crcMode[1] (* 01H for CRC 00H for Checksum *) - fill[87] (* zeroed *) - Checksum (* error detect/correction code *) - - *1 - Note that the crcMode is always set to 01H in current implementations - as all TeLink/XMODEM implementations use the CRC method. Therefore, - it is always set to 01H by the sender, and is ignored by the receiver. - - *2 - CreationDate and CreationTime are MS-DOS format as follows: - - CreationDate = year[.7] (* 7 bits, years since 1980, 0-127 *) - month[.4] (* 4 bits, month of year, 1-12 *) - day[.5] (* 5 bits, day of month, 1-31 *) - - CreationTime = hour[.5] (* 5 bits, hour of day, 0-23 *) - minute[.6] (* 6 bits, minute of hour, 0-60 *) - biSeconds[.2] (* 6 bits, seconds/2, 0-29 *) - - - - - - - - - - - - - - - - - - - 17 - Data Description Language definition of the block types added by this - extended protocol specification: - - SEALinkBlock = SOH (* File Info Header *) - 00H (* block no, must be first block *) - FFH (* one's complement of block no *) - fileLength[4] (* length of data in bytes *) - (*1) Creation[4] (* Seconds since 1979 file last chgd *) - fileName(17) (* name of file, not vol or dir *) - sendingProg(15) (* name of program on send side *) - SLO[1] (* 01H for Overdrive supported *) - RESYNC[1] (* 01H for file Restart supported *) - MACFLOW[1] (* 01H for Macintosh flow supported *) - fill[85] (* zeroed *) - CRC (* error detect/correction code *) - - *1 - Creation is a long integer number of seconds since January 1, 1979. - - SEAlinkACK = ACK (* indicator data block received ok *) - blockNumber[1] (* sequence, i'=mod( i+1, 256 ) *) - blockCompl[1] (* one's complement of blockNumber *) - - SEAlinkNAK = NAK (* indicator block not received ok *) - blockNumber[1] (* sequence, i'=mod( i+1, 256 ) *) - blockCompl[1] (* one's complement of blockNumber *) - - ReSyncBlock = SYN (* File Restart Position *) - (*1) RestartBlock<20> (* ASCII decimal file block # *) - ETX (* End of block number text *) - CRC(rev order) (* error detection code *) - - *1 - RestartBlock is a text ASCII version of the decimal block number - in the file desired. Note: The first block of the file is block 1. - - - Definitions of Single byte Character values used in protocol: - - ACK = 06H (* acknowledge data received ok *) - NAK = 15H (* negative ACK & poll 1st block *) - SOH = 01H (* start of header, begins block *) - SYN = 16H (* start of TeLink file info blk *) - EOT = 04H (* end of xfer, after last block *) - ETX = 03H (* end of RESYNC request data field*) - - - - - - - - - - - - - - - - - - - - - - - 18 - Block Verification calculated values used by this protocol: - - CRC = crc[2] (* CCITT Cyclic Redundancy Check *) - - Checksum = checksum[1] (* low 8 bits of sum of data bytes - using unsigned 8 bit arithmetic *) - - Calculating Checksum - -------------------- - - For blocks which use a checksum to do error detection, the checksum is - calculated by initializing an accumulator to zero and doing successive - addition of each character in the data field. Carry is discarded on - each addition. The resulting 8 bit value is the checksum. - - Calculating CRC - --------------- - - For blocks which use CRC to do error detection, the CRC is calculated - using the CCITT V.41 generator polynomial. An accumulator is initialized - to zero, and then each character of the data field is processed by the - CRC generator polynomial. This process can be quite complex to explain, - but is not so complex in practice. The following CRC routine is - given here as an aid to understanding the CRC generation process. - - 8086 assembler routine to implement CCITT V.41 CRC algorithm - ;---------------------------------------------------------------+ - ; CRCUPD - Update CRC value from character in AL | - ; | - ; CRC is calculated using the CCITT V.41 generator polynomial. | - ; That polynomial is: X^16 + X^12 + X^5 + 1 (X^0) | - ; | - ; As an aid to understanding, remember that XOR is bitwise | - ; addition without carry. | - ;---------------------------------------------------------------+ - CRCVAL DW 0 ;16 bit CRC accumulator - ; - CRCUPD: PUSH AX ;All registers preserved - PUSH CX - PUSH DX - MOV DX,[CRCVAL] - XOR DH,AL ;init X^16 term - XOR DL,DL - MOV CX,8 - CRCUP1: SHL DX,1 - JNC CRCUP2 - XOR DX,1021h ;X^12 + X^5 + 1 - CRCUP2: LOOP CRCUP1 - XOR DH,BYTE PTR[CRCVAL] ;finish X^16 term - MOV [CRCVAL],DX ;update CRC accumulator - POP DX - POP CX - POP AX - RET - - - - - - - - - - - - 19 - 2. Data Link Layer Protocol : XMODEM/TeLink/SEAlink Finite State Machines - - The protocol is receiver driven, the receiver polling the sender for - each block. If the receiver polls for the first block using a "C" - (43H) as the poll character, it would prefer to have the CRC-CCITT V.41 - polynomial remainder error detection code at the end of each block as - opposed to a one byte unsigned checksum. The sender will respond to - the "C" poll if it can comply. If the sender chooses checksum as - opposed to CRC, it waits for the receiver to poll with NAK (15H). - Should the checksum method be preferable to the receiver, it polls - with NAK rather than "C". - - The sender returns an EOT instead of a data block when no data remain. - - With this extended implementation, the sender and the receiver may send - blocks or ACK/NAK responses while there is data being received, once the - SEAlink protocol has been negotiated. This full duplex operation allows - the throughput gains of a sliding window protocol. When SEAlink is not - set the window size of 1 prohibits data being sent at the same time and - restores the attributes of a standard XMODEM protocol. - - ------------------ - In this extended protocol, the FTS-0001 single state table - "XMODEM Sender" is replaced by two state tables. - - The top level table is equivalent to the FTS-0001 XMODEM Sender table. - It in turn calls the new state table named "Transmitter ACK/NAK Check" - which implements the full duplex adaptive SEAlink/XMODEM dynamic switching - along with the Overdrive and file Restart sending features of the extended - protocol. - - ----------------- - In this extended protocol, the FTS-0001 single state table - "XMODEM Receiver" is replaced by three state tables. - - The top level table is equivalent to the FTS-0001 XMODEM Receiver table. - It in turn calls the two new state tables named "Send NAK" and "Send ACK" - which implement the full duplex adaptive SEAlink/TeLink/XMODEM dynamic - switching along with the Overdrive and file Restart receiving features of - the extended protocol. - - - Caution!!!! - ----------- - Many current implementations keep file block numbers as 16 bit numbers. - This limits the max file size to either 4 megabytes (if number is signed) - or 8 megabytes (if number is unsigned). To handle files up to the maximum - size DOS allows (4 gigabytes) at least 25 bits plus sign are required for - these numbers. Good practice is to make file block numbers 32 bit values. - - - - - - - - - - - - - - - - - 20 - XMODEM/TeLink/SEAlink - Sender - - .-----+----------+-------------------------+-------------------------+-----. - |State| State | Predicate(s) | Action(s) | Next| - | # | Name | | | St | - +-----+----------+-------------------------+-------------------------+-----+ - | XS0 | XmtStart | Normal Entry Point | reset SEAlink flag, | XS1 | - | | | for file send | SendBLK=1, ACKST=0, | | - | | | | ACKBLK= -1, WINDOW=1, | | - | | | | ACKs Rcvd=0, | | - | | | | NumNAK=0, | | - | | | | T1=30 seconds, | | - | | | (*1) | Build SEAlink hdr blk | | - +-----+----------+-------------------------+-------------------------+-----+ - | XS0T| XmTeStrt | Alternate entry from | reset SEAlink flag, | XS1 | - | | | Batch Send if TeLink | SendBLK=1, ACKST=0, | | - | | | mode send required | ACKBLK= -1, WINDOW=1, | | - | | | | ACKs Rcvd=0, | | - | | | | NumNAK=0, | | - | | | | T1=30 seconds, | | - | | | | Build TeLink hdr blk | | - +-----+----------+-------------------------+-------------------------+-----+ - | XS1 | CheckACK | | (Check ACK/NAK AC0) | XS2 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | XS2 | SendBlk |1| NumNAK > 4 & | If header = SEAlink | XS0T| - | | (*2) | | SendBLK = 0 +-------------------------+-----+ - | | | | | If header = TeLink, | XS2 | - | | | | | NumNAK = 0, | | - | | | | | Incr ACKBLK, | | - | | | | | Incr SendBLK | | - | | +-+-----------------------+-------------------------+-----+ - | | |2| NumNAK > 10 | report too many errors | exit| - | | +-+-----------------------+-------------------------+-----+ - | | |3| Timer T1 expired | report fatal timeout | exit| - | | +-+-----------------------+-------------------------+-----+ - | | |4| SendBLK > Last Blk+1 | | XS3 | - | | +-+-----------------------+-------------------------+-----+ - | | |5| SendBLK >ACKBLK+Window| | XS1 | - | | +-+-----------------------+-------------------------+-----+ - | | |6| SendBLK = Last Blk+1 | Send EOT, Incr SendBLK, | XS1 | - | | | | | Set T1 to 30 seconds | | - | | +-+-----------------------+-------------------------+-----+ - | | |7| SLO set & SEAlink set | Send SendBLK, (*3) | XS1 | - | | | | | ACKBLK = SendBLK, | | - | | | | | Incr SendBLK, | | - | | | | | Set T1 to 60 seconds | | - | | +-+-----------------------+-------------------------+-----+ - | | |8| SLO reset or | Send SendBLK, (*3) | XS1 | - | | | | SEAlink reset | Incr SendBLK, | | - | | | | | Set T1 to 30 seconds | | - +-----+----------+-+-----------------------+-------------------------+-----+ - | XS3 | WaitEnd |1| ACKBLK < Last Blk+1 | | XS1 | - | | +-+-----------------------+-------------------------+-----+ - | | |2| ACKBLK = Last Blk+1 | report send success | exit| - `-----+----------+-+-----------------------+-------------------------+-----' - - *1 - Build SEAlink Header block with RESYNC set. Set SLO if line speed > - 2400 bps, reset SLO otherwise. - - *2 - State (XS2.1) allows the receiver to refuse one or both header blocks. - - *3 - If SendBLK = 0, then send the SEAlink (or TeLink) header block. - If SendBLK > 0, send the corresponding 128 byte file data block where - block #1 begins with the first byte of the file. - - 21 - XMODEM/TeLink/SEAlink - Transmitter ACK/NAK Check - - .-----+----------+-------------------------+-------------------------+-----. - |State| State | Predicate(s) | Action(s) | Next| - | # | Name | | | St | - +-----+----------+-+-----------------------+-------------------------+-----+ - | AC0 | ChkRcvd |1| No character waiting | | exit| - | | +-+-----------------------+-------------------------+-----+ - | | |2| Character waiting | Read character to CHR | AC1 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | AC1 | SLCheck |1| ACKST > 2 | | AC2 | - | | +-+-----------------------+-------------------------+-----+ - | | |2| ACKST <=2 | | AC6 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | AC2 | SLVerify |1| ARBLK8 = 1's comp(CHR)| ARBLK = SendBLK - | AC3 | - | | | | | ((SendBLK-ARBLK8)&0FFh) | | - | | +-+-----------------------+-------------------------+-----+ - | | |2| ARBLK8 # 1's comp(CHR)| Reset SEAlink flag, | AC6 | - | | | | | WINDOW=1, | | - | | | | | ACKST=0 | | - +-----+----------+-+-----------------------+-------------------------+-----+ - | AC3 | SLACKNAK |1| ARBLK not valid (*1) | | exit| - | | +-+-----------------------+-------------------------+-----+ - | | |2| ACKST = 3 | Set SEALink flag, | AC5 | - | | (*2) | | | WINDOW = 6, | | - | | | | | ACKBLK = ARBLK, | | - | | | | | Incr ACKs Rcvd, | | - | | | | | ACKST=0 | | - | | +-+-----------------------+-------------------------+-----+ - | | |3| ACKST = 4 | SendBLK = ARBLK, | AC4 | - | | | | | ACKST=0 | | - +-----+----------+-+-----------------------+-------------------------+-----+ - | AC4 | XMCheck |1| NumNAK < 4 | Set SEAlink Flag, | exit| - | | | | | WINDOW = 6 | | - | | +-+-----------------------+-------------------------+-----+ - | | |2| NumNAK >= 4 | Reset SEAlink flag, | exit| - | | | | | WINDOW = 1 | | - +-----+----------+-+-----------------------+-------------------------+-----+ - | AC5 | SLOCheck |1| SLO Reset | | exit| - | | +-+-----------------------+-------------------------+-----+ - | | |2| ACKs Rcvd < 10 | | exit| - | | +-+-----------------------+-------------------------+-----+ - | | |3| ACKs Rcvd >= 10 | Reset SLO | exit| - +-----+----------+-+-----------------------+-------------------------+-----+ - | AC6 | SL1Check |1| ACKST = 1 or 2 | ARBLK8 = CHR, | AC6 | - | | | | | ACKST = ACKST+2 | | - | | +-+-----------------------+-------------------------+-----+ - | | |2| SEAlink reset | | AC7 | - | | +-+-----------------------+-------------------------+-----+ - | | |3| ACKST = 0 | | AC7 | - | | +-+-----------------------+-------------------------+-----+ - | | |4| ACKST > 2 | | exit| - `-----+----------+-+-----------------------+-------------------------+-----' - - (Continued on next page) - - *1 - ARBLK is valid only if all of the following are true: - - a. ARBLK >= 0 - b. ARBLK <= SendBLK - c. ARBLK > SendBLK-128 - - *2 - Software error if ACKST is not 3 or 4 in state AC3 - - - 22 - XMODEM/TeLink/SEAlink - Transmitter ACK/NAK Check - - .-----+----------+-------------------------+-------------------------+-----. - |State| State | Predicate(s) | Action(s) | Next| - | # | Name | | | St | - +-----+----------+-+-----------------------+-------------------------+-----+ - | AC7 | ACKNAK |1| CHR = ACK | ACKST = 1 | AC8 | - | | | | | NumNAK = 0 | | - | | +-+-----------------------+-------------------------+-----+ - | | |2| CHR = NAK or 'C' | Set CRC/Chksm if 1st, | AC9 | - | | (*1) | | | ACKST = 2, | | - | | | | | Incr NumNAK, | | - | | | | | Delay 0.6 seconds | | - | | +-+-----------------------+-------------------------+-----+ - | | (*1) |3| CHR = SYN | Receive RESYNC packet, | AC10| - | | | | | ACKST = 0 | | - | | (*2) +-+-----------------------+-------------------------+-----+ - | | |4| CHR = other | | exit| - +-----+----------+-+-----------------------+-------------------------+-----+ - | AC8 | XMACK |1| SEAlink set | | exit| - | | +-+-----------------------+-------------------------+-----+ - | | |2| SEAlink reset | Incr ACKBLK | exit| - +-----+----------+-+-----------------------+-------------------------+-----+ - | AC9 | XMNAK |1| SEAlink set | | exit| - | | +-+-----------------------+-------------------------+-----+ - | | |2| SEAlink reset | SendBLK = ACKBLK+1 | exit| - +-----+----------+-+-----------------------+-------------------------+-----+ - | AC10| RESYNC |1| RESYNC pkt invalid | Send NAK | exit| - | | +-+-----------------------+-------------------------+-----+ - | | |2| RESYNC pkt valid | Set SEAlink flag, | exit| - | | | | | WINDOW = 6, | | - | | | | | SendBLK = RESYNC Blk#,| | - | | | | | ACKBLK = SendBLK-1, | | - | | | | | Send ACK | | - `-----+----------+-+-----------------------+-------------------------+-----' - - *1 - If the output is buffered in local computer memory, any characters - which remain in the local buffer should be purged before leaving - states (AC7.2) or (AC7.3) to aid in resynchronizing the link. - - *2 - If the implementation is honoring MACFLOW protocol, set the flag in - the SEAlink header block and add the following state to (AC7): - - .-----+--------+---+-----------------------+-------------------------+-----. - | AC7 | |3.5| CHR = ^S (13H) & | Delay 10 seconds or | exit| - | | | | SEAlink set & | until ^Q (11H) rcvd | | - | | | | ACKST = 0 | | | - `-----+--------+---+-----------------------+-------------------------+-----' - - - - - - - - - - - - - - - - - - 23 - XMODEM/TeLink/SEAlink - Receiver - - .-----+----------+-------------------------+-------------------------+-----. - |State| State | Predicate(s) | Action(s) | Next| - | # | Name | | | St | - +-----+----------+-------------------------+-------------------------+-----+ - | XR0 | RecInit | | reset SEAlink flag, | XR1 | - | | | | reset SLO flag, | | - | | | | reset RESYNC flag, | | - | | | | set CRC flag, | | - | | | | set blocknum=0, | | - | | | | set WriteBLK=1, | | - | | | | reset retry cnt | | - +-----+----------+-------------------------+-------------------------+-----+ - | XR0B| BrecInit | Alternate Entry from | reset SEAlink flag, | XR2 | - | | | Batch Receive (BR4.2) | reset SLO flag, | | - | | | or (BR4.3) | reset RESYNC flag, | | - | | | | set CRC flag, | | - | | | | set blocknum=0, | | - | | | | set WriteBLK=1, | | - | | | | reset retry cnt | | - +-----+----------+-------------------------+-------------------------+-----+ - | XR1 | RecStart | | (Send NAK SN0) | XR2 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | XR2 | WaitFirst|1| 10 retries or 1 minute| report receive failure | exit| - | | | | w/o valid input | | | - | | +-+-----------------------+-------------------------+-----+ - | | |2| > 3 retries or 30 secs| reset CRC flag | XR1 | - | | +-+-----------------------+-------------------------+-----+ - | | |3| EOT received | (Send ACK SA0), | exit| - | | | | | report no file | | - | | +-+-----------------------+-------------------------+-----+ - | | (*1) |4| TeLink block recd | (Send ACK SA0), | XR3 | - | | | | | reset retry cnt | | - | | +-+-----------------------+-------------------------+-----+ - | | (*2) |5| SEAlink block recd | set SEAlink, | XR4 | - | | | | | set RESYNC as | | - | | | | | indicated by header | | - | | +-+-----------------------+-------------------------+-----+ - | | (*3) |6| XMODEM data block 1 | Write block to file, | XR3 | - | | | | received | Incr WriteBLK, | | - | | | | | Incr blocknum, | | - | | | | | (Send ACK SA0), | | - | | | | | reset retry cnt | | - | | +-+-----------------------+-------------------------+-----+ - | | |7| bad block or 2-10 secs| incr retry count | XR1 | - | | | | without input | | | - `-----+----------+-+-----------------------+-------------------------+-----' - - (Continued on next page) - - *1 - A TeLink header packet has the standard XMODEM data block format except - that it begins with an SYN instead of an SOH character and has a block - number of 0. Note: SEAdog (through version 4.51b) does not possess - (XR2.4) and therefore will consider a TeLink header a bad block and - process it according to (XR2.7) when communicating with mailers which - do not do SEAlink protocol. - - *2 - A SEAlink header packet has the standard XMODEM data block format - *3 except that is has a block number of 0. The first block is an XMODEM - data block if its block number is not 0. - - - - - 24 - XMODEM/TeLink/SEAlink - Receiver (cont.) - - .-----+----------+-------------------------+-------------------------+-----. - |State| State | Predicate(s) | Action(s) | Next| - | # | Name | | | St | - +-----+----------+-+-----------------------+-------------------------+-----+ - | XR3 | WaitBlock|1| 10 retries or 1 minute| report receive failure | exit| - | | | | w/o expected block | | | - | | +-+-----------------------+-------------------------+-----+ - | | |2| EOT received | reset SLO flag, | exit| - | | | | | (Send ACK SA0) | | - | | | | | report recd ok | exit| - | | +-+-----------------------+-------------------------+-----+ - | | |3| expected data | Decrement blocknum, | XR3 | - | | | | block-1 received | (Send ACK SA0) | | - | | +-+-----------------------+-------------------------+-----+ - | | |4| expected data | Write block to file, | XR3 | - | | | | block received | Incr WriteBLK, | | - | | | | | (Send ACK SA0), | | - | | | | | reset retry cnt | | - | | +-+-----------------------+-------------------------+-----+ - | | |5| SEAlink set & | Discard block - resync | XR3 | - | | | | expected block+1 to | in progress, | | - | | | | expected block+127 | Send Conditional NAK(*5)| | - | | +-+-----------------------+-------------------------+-----+ - | | |6| bad block or 2-10 secs| (Send NAK SN0), | XR3 | - | | | | without input | incr retry cnt | | - +-----+----------+-+-----------------------+-------------------------+-----+ - | XR4 | Restart |1| Want entire file | (Send ACK SA0), | XR5 | - | | | | or RESYNC not set | reset retry cnt | | - | | +-+-----------------------+-------------------------+-----+ - | | |2| Want to resume an | WriteBLK = file restart| XR5 | - | | | | interrupted xfer | block number, | | - | | | | and RESYNC is set | blocknum=WriteBLK&0FFh,| | - | | | | | (Send NAK SN0) | | - +-----+----------+-+-----------------------+-------------------------+-----+ - | XR5 | SetOvrdr | | Set SLO as indicated | XR3 | - | | | | by SEAlink header | | - `-----+----------+-------------------------+-------------------------+-----' - Note: The routine that receives a header/data block should do the following: - - 1. Report a bad block if the checksum or CRC is not correct or if the - physical layer encounters errors (e.g. parity, framing, etc.) regardless - of checksum or CRC. Report a bad block if the length of the block is - less than expected (Use a 5 second timeout to detect short blocks). - 2. If the block's sequence number does not match the complement, then - report a bad block if not in SEAlink. If in SEAlink mode don't report - this as a bad block, just restart the block search looking for SOH. - Check for SOH, BLK, ~BLK characters in a "sliding" fashion and keep - cycling until a valid start of block (or timeout) is detected before - assembling the remainder of the block. This procedure makes a resync - occur much more rapidly, and with far fewer errors reported. - 3. If the sequence number and block are good but not the expected number, - report state (XR3.3) if previous block. If not in SEAlink, abort on any - other out of sequence block. If in SEAlink, report back state (XR3.5) - or (XR3.6) as indicated by the out of sequence received block number. - 4. If an EOT is received on a data block prior to the filesize specified - in the SEAlink or TeLink header block, a NAK should be issued to ensure - that spurious data did not cause a premature EOF. A NAK should also - be issued for the first EOT received in an Xmodem transfer when the - final file size is not known. A second EOT without intervening data - would ensure that the file really has been sent, and should be ACK'd. - 5. If you last sent an ACK, then send a NAK here. If you last sent a NAK - then only NAK evry 32 blocks after the first NAK. This allows buffer - drain in overdrive. Use (Send NAK SN0) to send the NAK. - 25 - XMODEM/TeLink/SEAlink - Send NAK - - .-----+----------+-------------------------+-------------------------+-----. - |State| State | Predicate(s) | Action(s) | Next| - | # | Name | | | St | - +-----+----------+-+-----------------------+-------------------------+-----+ - | SN0 | ClearLine|1| RESYNC flag set | Send RESYNC packet | SN3 | - | | +-+-----------------------+-------------------------+-----+ - | | |2| SEAlink flag set | | SN1 | - | | +-+-----------------------+-------------------------+-----+ - | | |3| > 30 sec contin data | report failure | exit| - | | +-+-----------------------+-------------------------+-----+ - | | |4| character waiting | eat character | SN0 | - | | +-+-----------------------+-------------------------+-----+ - | | |5| clear line | | SN1 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | SN1 | SendNAK |1| CRC flag set | Send "C" | SN2 | - | | +-+-----------------------+-------------------------+-----+ - | | |2| CRC flag reset | send NAK | SN2 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | SN2 | SEAlink |1| SEAlink flag reset | | exit| - | | +-+-----------------------+-------------------------+-----+ - | | |2| SEAlink flag set | send blocknum, ~blocknum| exit| - +-----+----------+-+-----------------------+-------------------------+-----+ - | SN3 | AckResync|1| Rcv ACK | | exit| - | | +-+-----------------------+-------------------------+-----+ - | | |2| Rcv NAK | Resend RESYNC packet | SN3 | - | | +-+-----------------------+-------------------------+-----+ - | | |3| Rcv Other Char | eat character | SN3 | - | | +-+-----------------------+-------------------------+-----+ - | | |4| No char for 10 secs | Resend RESYNC packet | SN3 | - | | +-+-----------------------+-------------------------+-----+ - | | |5| 30 seconds in SN3 | | exit| - `-----+----------+-+-----------------------+-------------------------+-----' - Note: RESYNC packet should send WriteBLK as its desired block number. - - - XMODEM/TeLink/SEAlink - Send ACK - - .-----+----------+-------------------------+-------------------------+-----. - |State| State | Predicate(s) | Action(s) | Next| - | # | Name | | | St | - +-----+----------+-+-----------------------+-------------------------+-----+ - | SA0 | ClearLine|1| SLO flag set | | SA3 | - | | +-+-----------------------+-------------------------+-----+ - | | |2| SEAlink flag set | | SA1 | - | | +-+-----------------------+-------------------------+-----+ - | | |3| > 30 sec contin data | report failure | exit| - | | +-+-----------------------+-------------------------+-----+ - | | |4| character waiting | eat character | SA0 | - | | +-+-----------------------+-------------------------+-----+ - | | |5| No char waiting | | SA1 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | SA1 | SendACK | | Send ACK | SA2 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | SA2 | SEAlink |1| SEAlink flag reset | | SA3 | - | | +-+-----------------------+-------------------------+-----+ - | | |2| SEAlink flag set | send blocknum, ~blocknum| SA3 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | SA3 | IncBlk | | Incr blocknum | exit| - `-----+----------+-------------------------+-------------------------+-----' - - - - - 26 - 3. Data Link Layer Protocol : MODEM7 Filename Finite State Machines - (There is no change to the MODEM7 state tables from FTS-0001). - - MODEM7 Filename Sender - - .-----+----------+-------------------------+-------------------------+-----. - |State| State | Predicate(s) | Action(s) | Next| - | # | Name | | | St | - +-----+----------+-+-----------------------+-------------------------+-----+ - | MS0 | WaitNak |1| 20 retries or 1 minute| filename send failed | exit| - | | +-+-----------------------+-------------------------+-----+ - | | |2| NAK received | send ACK & 1st ch of fn | MS1 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | MS1 | WaitChAck|1| ACK rcd, fname done | send SUB = 1AH | MS2 | - | | +-+-----------------------+-------------------------+-----+ - | | |2| ACK rcd, fname ~done | send next ch of fname | MS1 | - | | +-+-----------------------+-------------------------+-----+ - | | |3| other char or 1 sec | send "u", incr retry cnt| MS0 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | MS2 | WaitCksm |1| cksum recd and ok | send ACK, report fn ok | exit| - | | +-+-----------------------+-------------------------+-----+ - | | |2| cksum recd but bad | send "u", incr retry cnt| MS0 | - | | +-+-----------------------+-------------------------+-----+ - | | |3| no cksum in 1 sec | send "u", incr retry cnt| MS0 | - `-----+----------+-+-----------------------+-------------------------+-----' - - - MODEM7 Filename Receiver - - .-----+----------+-------------------------+-------------------------+-----. - |State| State | Predicate(s) | Action(s) | Next| - | # | Name | | | St | - +-----+----------+-+-----------------------+-------------------------+-----+ - | MR0 | SendNak |1| 20 tries or 1 minute | report filename failure | exit| - | | +-+-----------------------+-------------------------+-----+ - | | |2| | send NAK, incr try cnt | MR1 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | MR1 | WaitAck |1| rcd ACK | | MR2 | - | | +-+-----------------------+-------------------------+-----+ - | | |2| rcd EOT | report no files remain | exit| - | | +-+-----------------------+-------------------------+-----+ - | | |3| 5 secs & no ACK/EOT | | MR0 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | MR2 | WaitChar |1| recd EOT (can happen?)| report no files remain | exit| - | | +-+-----------------------+-------------------------+-----+ - | | |2| recd SUB | send checksum byte | MR3 | - | | +-+-----------------------+-------------------------+-----+ - | | |3| recd "u" | | MR0 | - | | +-+-----------------------+-------------------------+-----+ - | | |4| recd char of name | send ACK | MR2 | - | | +-+-----------------------+-------------------------+-----+ - | | |5| no char in 1 second | | MR0 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | MR3 | WaitOkCk |1| recd ACK within 1 sec | report recd filename ok | exit| - | | +-+-----------------------+-------------------------+-----+ - | | |2| recd "u" or other char| | MR0 | - `-----+----------+-+-----------------------+-------------------------+-----' - - SUB is the ASCII character ^Z or 1AH. The checksum is the unsigned low - order eight bits of the sum of the characters in the transferred filename - including the SUB. - - Although 1 second timeouts are used successfully by Fido and SEAdog, some - fear that this is too small a value for some satellite and packet networks. - - 27 -
+Document: FTS-0007 +Version: 003 +Date: 15-Oct-1990 +Updates: FTS-0001 + + + + + An Enhanced FidoNet(r) Technical Standard + Extending FTS-0001 to include SEAlink protocol + (Including Overdrive and File Restart) + + October 15, 1990 + + + + +Status of this document: + + This document specifies an optional standard for the FidoNet community. + Implementation of the protocols defined in this document is not mandatory, + but all implementations of these protocols are expected to adhere to this + standard. Distribution of this document is subject to the limitations of + the copyright notice displayed below. + + + Copyright 1989-90 by Philip L. Becker. Portions of this document are + copyright 1986-90 by Randy Bush and are incorporated with his consent. + All rights reserved. A right to distribute only without modification and + only at no charge is granted. Under no circumstances is this document to + be reproduced or distributed as part of or packaged with any product or + other sales transaction for which any fee is charged. Any and all other + reproduction or excerpting requires the explicit written consent of the + copyright holders. + + + + + Introduction + + While the basic FTS-0001 protocol has become reasonably standardized, it + is technically inferior when used with modem speeds of 2400bps or higher, + and results in considerably slower file transfers than more sophisticated + protocols under many line and modem configurations. + + Very sophisticated protocols exist to allow absolute maximum efficiency, + but these protocols are much more difficult to implement than the basic + XMODEM used by FTS-0001. A need exists for a standardized, easy to + implement extension to the FTS-0001 protocol which can gain much better + performance. SEAlink is such an extension. It is nearly as easy to + implement as the FTS-0001 protocol with which it is fully backward + compatible. Despite its ease of implementation, it provides several + significant performance advantages. Among these advantages are: + + o Transparently communicates with strict FTS-0001 implementations. + + o Transparently communicates with FTS-0001 variants which omit + either the MODEM7 file name or the TeLink header block. + + o Transparently becomes a sliding window XMODEM protocol when + communicating with a like implementation. This sliding window + protocol gives significantly improved throughput when there is + an end-to-end delay. + + o Offers a negotiated streaming mode for high speed asymmetrical + modems to further enhance throughput for such links. + + o Offers a negotiated file restart capability which allows an + interrupted transfer to restart where it left off, reducing + time spent to retransmit the file. + + This document defines the data structures and communication protocols + which a FidoNet SEAlink implementation must provide. The implementor of + FidoNet compatible systems is the intended audience of this document. + + This document has the same overall format and state table descriptions + as FTS-0001. SEAlink is implemented by modifying the following tables: + + Session Layer: Sender - S1 + Network Layer: Batch File Sender - BS0 + Network Layer: Batch File Receiver - BR0 + Data Link Layer: XMODEM/TeLink Sender - XS0 + Data Link Layer: XMODEM/TeLink Receiver - XR0 + + + + + 1 + Table of Contents + + + Page + The purpose of the SEAlink protocol ................................... 3 + + How SEAlink negotiates its enhancements ............................... 4 + + Basic requirements for a FidoNet Implementation ....................... 5 + + Levels of Compliance .................................................. 5 + + The ISO/OSI Reference Model ........................................... 5 + + Data Description Language ............................................. 6 + + Finite State Machine Notation ......................................... 7 + + Glossary of variables and terms ....................................... 7 + + Application layer ..................................................... 8 + + Presentation layer .................................................... 8 + + Session layer protocol ................................................ 8 + Session State Table: Sender (S0) ................................. 9 + Session State Table: Receiver (R0) ............................... 10 + + Transport layer ....................................................... 10 + + Network layer ......................................................... 11 + Data Definition: MODEM7 file name ................................ 11 + Network State Table: Batch File Sender (BS0) ..................... 12 + Network State Table: Batch File Receiver (BR0) ................... 13 + + Data Link Layer ....................................................... 14 + Data Definition: XMODEM data block (CRC) ......................... 14 + Data Definition: XMODEM data block (Checksum) .................... 15 + Data Definition: TeLink header block ............................. 15 + Data Definition: SEAlink header block ............................ 16 + Data Definition: SEAlink RESYNC packet ........................... 16 + DDL Definition: XMODEMBlock, TeLink header ....................... 17 + DDL Definition: SEAlink header, ACK, NAK, RESYNC block ........... 18 + Checksum and CRC calculation algorithms .......................... 19 + Data Link Layer protocol ......................................... 20 + Data Link State Table: XMODEM/TeLink/SEAlink Sender (XS0) ........ 21 + Data Link State Table: Transmitter ACK/NAK check (AC0) ........... 22 + Data Link State Table: XMODEM/TeLink/SEAlink Receiver (XR0) ...... 24 + Data Link State Table: Send NAK (SN0) ............................ 26 + Data Link State Table: Send ACK (SA0) ............................ 26 + Data Link State Table: MODEM7 Filename Sender (MS0) .............. 27 + Data Link State Table: MODEM7 Filename Receiver (MR0) ............ 27 + + + + + 2 + The purpose of the SEAlink protocol + + The purpose of the SEAlink protocol is to provide a much higher level + of capability than the XMODEM protocol provides, while retaining the + ease of implementation which has made the XMODEM protocol ubiquitous. + + In order for an extended protocol to function in FidoNet, it has to be + fully upward compatible with FTS-0001 mailers, and also those slight + variants of FTS-0001 which can communicate well with FTS-0001 mailers. + To meet this requirement, any extension to the FTS-0001 protocol has + to be capable of transparently negotiating away its extended capabilities + and communicate with strict FTS-0001 mailers (and their approved variants) + properly and reliably. + + This means that an extended protocol must miminally do the following: + + o Detect that the other mailer can or cannot support its extensions + automatically, and within the framework of a legitimate FTS-0001 + protocol encounter. + + o Support mail sessions with or without MODEM7 file names and with + or without TeLink headers in either combination. + + To be useful such an extended protocol should also be able to reliably + detect when the other mailer can support its extensions so they can + be used to maximum benefits. + + The major problems which exist with a standard FidoNet FTS-0001 session + result from the use of the XMODEM protocol. This is a half duplex protocol + which forces a line turnaround on every transmitted block. As a result, + any end-to-end delay in the transmission link is directly added to each + transmitted data block twice (once for each line turnaround). + + To dramatize how easily XMODEM is impacted by even small line delays, let's + examine a 2400bps call on a line with 500ms (1/2 second) delay on each line + turnaround. This is not an uncommon delay time on long distance calls. A + single data block in the XMODEM CRC format contains 133 characters. This + means it will be transmitted in 554ms. The ACK/NAK response is a single + character and will take 4ms. Thus with no delay (an ideal link) an XMODEM + transfer would send 128 data characters in 558ms for an effective data + throughput of about 230cps. With a 500ms line turnaround delay, these same + 128 data bytes will take 1558ms resulting in a throughput of 82cps. If + faster modem speeds are used, the percentage impact is even greater. + + The solution to this problem is to enhance the XMODEM protocol by adding + a "sliding window" capability which allows more than one block to be sent + before an acknowledgment is received. This converts the protocol to a + full duplex protocol, and if the "window size" (the number of blocks which + may be sent before the sender must wait for an acknowledgment) is larger + that the line turnaround delay, then the ideal throughput can be restored + even to lines with long turnaround delays. SEAlink is such a protocol. + + The standard SEAlink window size is 6 blocks, but the state tables given + below implement a receiver which will operate correctly with any window + size up to 127 blocks. Thus an implementation which uses a larger window + size will be totally compatible with the standard 6 block window versions. + + A second problem with the XMODEM protocol arises when asymmetrical high + speed modems are used. These modems achieve much higher throughput when + data is sent in only one direction. Since they provide error free links, + a protocol which does not send any positive acknowledgments, but only + reports any bad blocks received will achieve a significantly higher + + + + 3 + throughput than a protocol which is either full duplex or which turns + around between each block such as XMODEM or normal SEAlink. It is for + this purpose that SEAlink Overdrive is provided. It is a streaming version + of SEAlink designed to provide much higher throughput on asymmetrical + high speed links which provide end-to-end data flow control. + + Finally, there is the annoying problem which occurs when a large data file + transfer has nearly completed and a loss of connection occurs. Normally + the entire file must be retransmitted on a new call, resulting in lost + time and money. The SEAlink RESYNC enhancement allows an interrupted + file transfer to be resumed at the point it was interrupted thus minimizing + the impact of such an interruption. + + How SEAlink Negotiates its enhancements + + SEAlink makes some assumptions about how FTS-0001 mailer implementations + react to various stimuli in order to negotiate its enhancements. For the + sender, the test consists of two parts: + + 1. Send a SEAlink header and see if the other end acknowledges it. In + general it will, because most XMODEM implementations will think that + the SEAlink header is a "previous block" and ACK and discard it. If + the receiver refuses to accept a SEAlink header block in three tries, + then it clearly cannot do SEAlink protocol and the negotiation is over. + + 2. Since the receiver's acknowledgment of the SEAlink header is not a + sufficient criteria to determine if the receiver in fact supports + SEAlink, the sender dynamically examines the acknowledgments the + receiver provides to determine if their format indicates support of + SEAlink or not and adjusts its sending techniques accordingly. This + is also the technique used to detect whether the receiver is in fact + supporting any extensions (such as SEAlink Overdrive) which have been + requested in the header. + + For the receiver, the negotiation occurs during the receipt of the first + valid block. + + 1. If the first block received is a valid SEAlink header, then the + transmitter supports SEAlink and the receiver can switch to it. This + same header also indicates if the transmitter wants or can support the + SEAlink options such as Overdrive and File RESYNC. + + 2. If the first block received is a valid TeLink header, then the + transmitter supports a variant of FTS-0001 and SEAlink support may + be assumed to be absent. + + 3. If the first block received is an XMODEM data block then SEAlink + support may also be assumed to be absent. + + If the receiver gets a SEAlink header, it can then arbitrarily decide + which of any requested options it wishes to use. It may not use an option + for which support is not indicated in the sender's SEAlink header block. + + The remainder of this document provides the details for a full SEAlink + implementation with Overdrive and RESYNC support. A glossary of terms and + indicators is provided along with a full state table description of the + protocol implementation. + + + + + + + + + 4 + This document follows the format of FTS-0001 to allow ease of + comparison of the two protocols. This document could not have been + generated without the tremendous efforts of those whose work resulted in + FTS-0001. FidoNet owes a great debt to those efforts. The following + introduction is reprinted from FTS-0001. + + The layered metaphor of the ISO Open Systems Interface reference model + has been used to view FidoNet from a standard perspective. As with most + prospective ISO/OSI descriptions, FidoNet does not always make this easy. + + + 1. Basic Requirements for a FidoNet Implementation + + Compatibility is a set of abilities which, when taken as a whole, make + it safe to list a net or node in the IFNA nodelist. In other words, + if another node should attempt contact, does it have a reasonable + chance of successful communication? This is a social obligation, as + the calling system pays money for the attempt. Conversely, an + implementation should be able to successfully contact other systems, + as life is not a one-way street. + + A FidoNet implementation must be able to call other nodes and transfer + messages and files in both directions. This includes pickup and poll. + + A FidoNet implementation must be able to accept calls from other nodes + and transfer messages and files in both directions. This includes + pickup. + + A FidoNet implementation must be able to receive and process the IFNA + format nodelist, and transfer nodelists to other nodes. A companion + document, FTS-0005, defines the IFNA format nodelist and how to + interpret and process it. + + A FidoNet implementation must route messages which do not have files + attached through net hosts as shown in an IFNA format nodelist. + + + 2. Levels of Compliance + + This documents represents an extended FidoNet implementation. It + defines a well tested extension which is optional but provides + sufficient additional function that implementors should seriously + consider it. SEAdog(tm), from System Enhancement Associates, + is the inspiration for this extended FidoNet implementation. + System Enhancement Associates is the creator of the SEAlink protocol. + + + 3. The ISO/OSI Reference Model (cribbed from "Protocol Verification via + Executable Logic Specifications", D. P. Sidhu, in Rudin & West) + + In the ISO/OSI model, a distributed system consists of entities that + communicate with each other according to a set of rules called a + protocol. The model is layered, and there are entities associated + with each layer of the model which provide services to higher layers + by exchanging information with their peer entities using the services + of lower layers. The only actual physical communication between two + systems is at the lowest level. + + + + + + + + + 5 + Several techniques have been used in the specification of such + protocols. A common ingredient in all techniques is the notion of the + extended finite state automata or machine. Extensions include the + addition of state variables for the storing of state information about + the protocol. The state of an automaton can change as a result of + one of the following events: + + o Request from an upper network layer for service + + o Response to the upper layer + + o Request to the lower network layer to perform a service + + o Response from the lower layer + + o Interaction with the system and environment in which the protocol is + implemented (e.g. timeouts, host operating system aborts, ...) + + A protocol specification, in a large part, consists of specifying + state changes in automata which model protocol entities and in + describing the data which they exchange. + + For historical reasons, the term packet is used in FidoNet to + represent a bundle of messages, as opposed to the more common use as a + unit of communication, which is known as a block in FidoNet. + + + 4. Data Description + + A language specific notation was avoided. Please help stamp out + environmental dependencies. Don't panic, there are rectangular record + layouts too. The following defines the data description language used. + + (* non-terminals *) + UpperCaseName - to be defined further on + + (* literals *) + "ABC" - ASCII character string, no termination implied + nnH - byte in hexadecimal + + (* terminals *) + someName - 16-bit integer, low order byte first (8080 style) + someName[n] - field of n bytes + someName[.n] - field of n bits + someName(n) - Null terminated string allocated n chars (incl Null) + someName{max} - Null terminated string of up to max chars (incl Null) + someName<max> - String of up to max chars, NOT null terminated + + (* punctuation *) + a b - one 'a' followed by one 'b' + ( a | b ) - either 'a' or 'b', but not both + { a } - zero or more 'a's + [ b ] - zero or one 'b' + (* comment *) - ignored + + (* predeclared constant *) + Null = 00H + + + + + + + + + 6 + 5. Finite State Machine Notation + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | St | + +-----+----------+-------------------------+-------------------------+-----+ + | fnn*| | | | | + `-----+----------+-------------------------+-------------------------+-----' + + State # - Number of this state (e.g. R13). + f - FSM initial (Window, Sender, Receiver, ...) + nn - state number + * - state which represents a lower level protocol which + is represented by yet another automation. + + State Name - Descriptive name of this state. + + Predicate(s) - Conditions which terminate the state. If predicates are + non-exclusive, consider them ordered. + + Action(s) - Action(s) corresponding to predicate(s) + + Next State - Subsequent state corresponding to predicate(s) + + Ideally, there should be a supporting section for each state which + should give a prose description of the state, its predicates, actions, + etc. So much for ideals. The following is a list of all of the terms + and variables used in the following state machine descriptions: + + + Glossary of variables and terms + + SEAlink - Flag indicating SEAlink or XMODEM mode + + SLO - Flag indicating overdrive if in SEAlink mode + + RESYNC - Flag indicating whether transmitting end can honor RESYNC + file positioning requests or only NAKs + + MACFLOW - Flag indicating whether the sender supports the Macintosh flow + control option. This is an optional feature used by TABBY + because the Macintosh serial port does not support RTS/CTS. + + CRC - Flag indicating whether block check is done using CRC or Checksum + + T1 and T2 - Timeout Timers which run asynchronously with the code + + WINDOW - Number of unacknowledged blocks which may be transmitted + + SendBLK - Next 128 byte block number in file to send. May not occur in + sequential order, so file positioning may be necessary when + it is time to send this block + + ACKBLK - Highest block number in file which has been acknowledged by + the receiver as received without error + + Last Blk - Block number of last 128 byte block (or partial block) in the + file being sent. + + NumNAK - Number of NAKs received since last ACK + + ACKs Rcvd - Number of ACKs received since the start of this file send + + + + 7 + Glossary of variables and terms (cont.) + + ACKST - State of ACK/NAK machine during auto-detect of SEAlink or XMODEM + style ACK/NAK block receipt + + RESYNC BLK# - Block number in file requested by a received RESYNC packet + + ARBLK8 - Block # (0-255) received in a SEAlink style ACK/NAK packet + + ARBLK - Block # in file (calculated from ARBLK8) which is the actual + block being referenced in the SEAlink ACK/NAK packet + + blocknum - Block # (0-255) sent in a SEAlink style ACK/NAK packet + + WriteBLK - Block # in file to write next correctly received data block. + Note: Block 1 is the first byte of the file. + + CHR - Temp holding variable for received character during send operation + + + B. Application Layer : the System from the User's View + + This is unchanged from FTS-0001. + + + C. Presentation Layer : the User from the System's View + + This is unchanged from FTS-0001. + + + D. Session Layer Protocol : Connecting to Another FidoNet Machine + + A session is a connection between two FidoNet machines. It is currently + assumed to be over the DDD telephone network via modems. The calling + machine starts out as the sender and the called machine as the receiver. + The pickup feature is described by the sender and receiver changing + roles midway through the session, after the sender has transferred the + message packet and any attached files. Due to the lack of security in + the pickup protocol (danger of pickup by a fake node), extensions to the + basic Session protocol have been developed. This document describes only + the minimum Session Layer protocol (as in FTS-0001). + + Once a connection has been established, each system should ensure that + the physical connection remains throughout the session. For physical + layers implemented through modems, this means monitoring the carrier + detect signal, and terminating the session if it is lost. + + Error detection at the physical layer should be monitored for both sent + and received characters. Parity, framing, and other physical errors + should be detected. + + The only change to the Session Layer state tables from FTS-0001 is in the + Sender state "S1", Predicate "1" (S1.1) entry. + + + + 8 + Sender + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | St | + +-----+----------+-------------------------+-------------------------+-----+ + | S0 | SendInit | | dial modem | S1 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | S1 | WaitCxD |1| carrier detected | delay 1-5 seconds | S2 | + | | (*1) | | | Set SLO if > 2400bps, | | + | | | | | Reset SLO if <= 2400bps | | + | | +-+-----------------------+-------------------------+-----+ + | | |2| busy, etc. | report no connection | exit| + | | +-+-----------------------+-------------------------+-----+ + | | |3| voice | report no carrier | exit| + | | +-+-----------------------+-------------------------+-----+ + | | |4| carrier not detected | report no connection | exit| + | | | | within 60 seconds | | | + +-----+----------+-+-----------------------+-------------------------+-----+ + | S2 | WhackCRs |1| over 30 seconds | report no response <cr> | exit| + | | +-+-----------------------+-------------------------+-----+ + | | |2| ?? <cr>s received | delay 1 sec | S3 | + | | +-+-----------------------+-------------------------+-----+ + | | |3| <cr>s not received | send <cr> <sp> <cr> <sp>| S2 | + | | | | | delay ??? secs | | + +-----+----------+-+-----------------------+-------------------------+-----+ + | S3 | WaitClear|1| no input for 0.5 secs | send TSYNCH = AEH | S4 | + | | +-+-----------------------+-------------------------+-----+ + | | |2| over 60 seconds | hang up, report garbage | exit| + | | | | and line not clear | | | + +-----+----------+-+-----------------------+-------------------------+-----+ + | S4* | SendMail | | (XMODEM send packet XS0)| S5 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | S5 | CheckMail|1| XMODEM successful | (Fido registers success)| S6 | + | | +-+-----------------------+-------------------------+-----+ + | | |2| XMODEM fail or timeout| hang up, report mail bad| exit| + +-----+----------+-+-----------------------+-------------------------+-----+ + | S6* | SendFiles| | (BATCH send files BS0) | S7 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | S7 | CheckFile|1| BATCH send successful | | S8 | + | | +-+-----------------------+-------------------------+-----+ + | | |2| BATCH send failed | hang up, rept files fail| exit| + +-----+----------+-+-----------------------+-------------------------+-----+ + | S8 | TryPickup|1| wish to pickup | note send ok | R2* | + | | +-+-----------------------+-------------------------+-----+ + | | |2| no desire to pickup | delay 5 secs | exit| + | | | | | hang up, rept send ok | | + `-----+----------+-+-----------------------+-------------------------+-----' + Although the above shows the sender emitting only one TSYNCH, it is + recommended that a timeout of 5-20 seconds should initiate another TSYNCH. + The receiver should tolerate multiple TSYNCHs. + + *1 - The action for (S1.1) is the only change from the corresponding + FTS-0001 state table. + + + + 9 + Receiver + + The receiving FSM is given an external timer, the expiration of which + will cause termination with a result of 'no calls' (R0.2). + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | St | + +-----+----------+-+-----------------------+-------------------------+-----+ + | R0 | WaitCxD |1| carrier detected | | R1 | + | | +-+-----------------------+-------------------------+-----+ + | | |2| external timer expires| report no calls | exit| + +-----+----------+-+-----------------------+-------------------------+-----+ + | R1 | WaitBaud |1| baud rate detected | send signon with <cr>s | R2 | + | | +-+-----------------------+-------------------------+-----+ + | | |2| no detect in ?? secs | hang up, report no baud | exit| + +-----+----------+-+-----------------------+-------------------------+-----+ + | R2 | WaitTsync|1| TSYNCH received | ignore input not TSYNCH | R3 | + | | +-+-----------------------+-------------------------+-----+ + | | |2| 60 seconds timeout | hang up, report not Fido| exit| + +-----+----------+-+-----------------------+-------------------------+-----+ + | R3* | RecMail | | (XMODEM rec packet XR0) | R4 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | R4 | XRecEnd |1| XMODEM successful | delay 1 second | R5 | + | | | | | flush input | | + | | +-+-----------------------+-------------------------+-----+ + | | |2| XMODEM failed | hang up, rept mail fail | exit| + +-----+----------+-+-----------------------+-------------------------+-----+ + | R5* | RecFiles | | (BATCH rec files BR0) | R6 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | R6 | ChkFiles |1| BATCH recv successful | delay 2 secs | R7 | + | | +-+-----------------------+-------------------------+-----+ + | | |2| BATCH recv failed | hang up, report bad file| exit| + +-----+----------+-+-----------------------+-------------------------+-----+ + | R7 | AllowPkup|1| have pickup for sender| receiver becomes sender | S3* | + | | +-+-----------------------+-------------------------+-----+ + | | |2| nothing to pickup | hang up, rept recv ok | exit| + `-----+----------+-+-----------------------+-------------------------+-----' + + There is no change in the Session Layer Receiver state table from FTS-0001. + + + E. Transport Layer : ????? + + This is unchanged from FTS-0001. + + + + 10 + F. Network Layer : the Network's View of the System, Routing and Packets + + 1. Network Layer Data Definition : the Packet Header + + This is unchanged from FTS-0001. + + + 2. Network Layer Data Description : a File with Attributes + + The BATCH protocol uses the MODEM7 filename and/or SEAlink/TeLink/XMODEM + file transfer protocols to transfer the file with attributes. + + When a file is transferred via FidoNet, an attempt is made to also + pass the operating system's attributes for the file such as length, + modification date, etc. FidoNet does this via a special prefix block + to the XMODEM file transfer using a protocol known as TeLink. As the + TeLink protocol relies on a modification to the XMODEM file transfer + protocol, it is documented at the data link layer level. Optionally, + if both sender and receiver implement the SEAlink extension, file + information is passed using the SEAlink header block which also + contains feature negotiation information. + + The MODEM7 file name is redundant if there is also a TeLink or SEAlink + block, in which case the name may be taken from either or both. In this + extended implementation, the MODEM7 file name is never required. It + is sent, however, if it appears that the other node is using a strict + FTS-0001 implementation. This implementation will adapt to an FTS-0001 + variant which only sends the TeLink header without the MODEM7 filename + also so that it is compatible with all know variants of FTS-0001 which + are currently in the FidoNet network. + + + FileName as Sent by MODEM7 + Offset + dec hex + .-----------------------------------------------. + 0 0 | fileName | + ~ 8 bytes ~ + | left adjusted blank filled | + +-----------------------------------------------+ + 8 8 | fileExt | + ~ 3 bytes ~ + | left adjusted blank filled | + `-----------------------------------------------' + + + 11 + 3. Network Layer Protocol : BATCH File Finite State Machines + + BATCH File Sender + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | St | + +-----+----------+-+-----------------------+-------------------------+-----+ + | BS0 | MoreFiles|1| more files to send | | BS1 | + | | +-+-----------------------+-------------------------+-----+ + | | |2| no more files to send | | BS4 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | BS1 | WaitType |1| rec NAK | (MODEM7 FName send MS0) | BS2 | + | | (*1) +-+-----------------------+-------------------------+-----+ + | | |2| rec 'C' | (SEAlink send file XS0) | BS3 | + | | +-+-----------------------+-------------------------+-----+ + | | |3| rec other char | eat character | BS1 | + | | +-+-----------------------+-------------------------+-----+ + | | |4| > 20 sec in BS1 | report name send bad | exit| + +-----+----------+-+-----------------------+-------------------------+-----+ + | BS2 | CheckFNm |1| MODEM7 Filename ok | (TeLink send file XS0T) | BS3 | + | | (*2) +-+-----------------------+-------------------------+-----+ + | | |2| MODEM7 Filename bad | report name send bad | exit| + +-----+----------+-+-----------------------+-------------------------+-----+ + | BS3 | CheckFile|1| File send ok | | BS0 | + | | +-+-----------------------+-------------------------+-----+ + | | |2| File send bad | report file send bad | exit| + +-----+----------+-+-----------------------+-------------------------+-----+ + | BS4 | EndSend |1| rec NAK or 'C' | send EOT, report send ok| exit| + | | (*3) +-+-----------------------+-------------------------+-----+ + | | |2| 10 secs no NAK or 'C' | send EOT, report no NAK | exit| + `-----+----------+-+-----------------------+-------------------------+-----' + + *1 - Note: Filenames must be upper case ASCII. The data link layer uses + lower case "u" as a control character during MODEM7 name transmission. + + *2 - Note: SEAdog (through version 4.51b) does not possess a state "XS0T". + It therefore calls XS0 from state BS2, resulting in a MODEM7 file name + being sent with no TeLink header on batch file transmissions when it + is not in SEAlink mode. + + *3 - When no files remain, the sender responds to the receiver's NAK with + an EOT. The EOT is not ACK/NAKed by the receiver. + + + + 12 + BATCH File Receiver + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | St | + +-----+----------+-------------------------+-------------------------+-----+ + | BR0 | TestSL | | Send 'C', | BR1 | + | | | | Set T1 to 10 sec | | + | | | | Set T2 to 120 sec | | + +-----+----------+-+-----------------------+-------------------------+-----+ + | BR1 | CheckSL |1| > 2 sec with no data | Send 'C' | BR1 | + | | +-+-----------------------+-------------------------+-----+ + | | |2| Timer T2 expired | (MODEM7 FName recv MR0) | BR2 | + | | +-+-----------------------+-------------------------+-----+ + | | |3| Character Waiting | "Peek" char to CHR (*1) | BR4 | + | | +-+-----------------------+-------------------------+-----+ + | | |4| Timer T1 expired | (MODEM7 FName recv MR0) | BR2 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | BR2 | CheckFNm |1| no more files | report files recd ok | exit| + | | +-+-----------------------+-------------------------+-----+ + | | |2| Filename ok | (Rcv file Telink XR0) | BR3 | + | | +-+-----------------------+-------------------------+-----+ + | | |3| Filename bad | report name recv bad | exit| + +-----+----------+-+-----------------------+-------------------------+-----+ + | BR3 | CheckFile|1| File received ok | | BR0 | + | | +-+-----------------------+-------------------------+-----+ + | | |2| File received bad | report file recv bad | exit| + +-----+----------+-+-----------------------+-------------------------+-----+ + | BR4 | FindType |1| CHR = NUL | eat character, | BR1 | + | | | | | Reset T1 to 20 secs | | + | | (*2) +-+-----------------------+-------------------------+-----+ + | | |2| CHR = SOH | (Rcv File SEAlink XR0B) | BR3 | + | | +-+-----------------------+-------------------------+-----+ + | | |3| CHR = SYN | (Rcv File Telink XR0B) | BR3 | + | | +-+-----------------------+-------------------------+-----+ + | | |4| CHR = EOT or | eat character, | exit| + | | | | CHR = SUB | report files recd ok | | + | | +-+-----------------------+-------------------------+-----+ + | | |5| CHR = Other char | eat character | BR1 | + `-----+----------+-+-----------------------+-------------------------+-----' + + *1 - "Peek" a character means to place it in CHR but leave it in the input + buffer so the next read operation will re-read it. + + *2 - "Eat" a character means to remove it from the input buffer. + + + + + 13 + G. Data Link Layer : Error-Free Data Transfer + + 1. Data Link Layer Data Definition : XMODEM/TeLink/SEAlink Blocks + + XMODEM transfers are in blocks of 128 uninterpreted data bytes + preceded by a three byte header and followed by either a one byte + checksum or a two byte crc remainder. XMODEM makes no provision for + data streams which are not an integral number of blocks long. + Therefore, the sender pads streams whose length is not a multiple of + 128 bytes with the end-of-file character (^Z for MS-DOS), and uses some + other means to convey the true data length to the receiver (e.g. + SEAlink or TeLink file info header block). + + Data blocks contain sequence numbers so the receiver can ensure it has + the correct block. Data block numbers are sequential unsigned eight bit + integers beginning with 01H and wrapping to 00H. A TeLink or SEAlink + header block is given sequence number 00H. + + For files which are attached to the mail packet (but not the mail packet + itself), if the sending system is aware of the file attributes as they + are known to the operating system, then the first block of the XMODEM + transfer may be a special TeLink block to transfer that information. + This block differs in that the first byte is a SYN character as + opposed to an SOH, and it is always sent checksum as opposed to CRC. + Should the receiver be unwilling to handle such information, after four + NAKs (or "C"s), the sender skips this special block and goes on to the + data itself. + + In this extended protocol the TeLink header block may be replaced by + the SEAlink header block which conveys protocol negotiation information + in addition to the file attributes if both nodes implement SEAlink. + + + + XMODEM Data Block (CRC mode) + Offset + dec hex + .-----------------------------------------------. + 0 0 | SOH - Start Of Header - 01H | + +-----------------------------------------------+ + 1 1 | BlockNumber | + +-----------------------------------------------+ + 2 2 | BlockComplement | + +-----------------------------------------------+ + 3 3 | 128 bytes of | + ~ uninterpreted ~ + | data | + +-----------------------------------------------+ + 131 83 | CRC high order byte | + +-----------------------------------------------+ + 132 84 | CRC low order byte | + `-----------------------------------------------' + + + 14 + XMODEM Data Block (Checksum mode) + Offset + dec hex + .-----------------------------------------------. + 0 0 | SOH - Start Of Header - 01H | + +-----------------------------------------------+ + 1 1 | BlockNumber | + +-----------------------------------------------+ + 2 2 | BlockComplement | + +-----------------------------------------------+ + 3 3 | 128 bytes of | + ~ uninterpreted ~ + | data | + +-----------------------------------------------+ + 131 83 | Checksum byte | + `-----------------------------------------------' + + + TeLink File Descriptor Block + Offset + dec hex + .-----------------------------------------------. + 0 0 | SYN - File Info Header - 16H | + +-----------------------------------------------+ + 1 1 | 00H | + +-----------------------------------------------+ + 2 2 | FFH | dec hex + +-----------------------------------------------+ + 3 3 | File Length, least significant byte | 0 0 + +-----------------------------------------------+ + 4 4 | File Length, second to least significant byte | 1 1 + +-----------------------------------------------+ + 5 5 | File Length, second to most significant byte | 2 2 + +-----------------------------------------------+ + 6 6 | File Length, most significant byte | 3 3 + +-----------------------------------------------+ + 7 7 | Creation Time of File | 4 4 + | "DOS Format" | + +-----------------------------------------------+ + 9 9 | Creation Date of File | 6 6 + | "DOS Format" | + +-----------------------------------------------+ + 11 B | File Name | 8 8 + ~ 16 chars ~ + | left justified blank filled | + +-----------------------------------------------+ + 27 1B | 00H | 24 18 + +-----------------------------------------------+ + 28 1C | Sending Program Name | 25 19 + ~ 16 chars ~ + | left justified Null filled | + +-----------------------------------------------+ + 44 2B | 01H (for CRC) or 00H | 41 29 + +-----------------------------------------------+ + 45 2C | fill | 42 2A + ~ 86 bytes ~ + | all zero | + +-----------------------------------------------+ + 131 83 | Checksum byte | + `-----------------------------------------------' + + + + + + 15 + Offset SEAink File Descriptor Block + dec hex + .-----------------------------------------------. + 0 0 | SOH - Start of Header - 01H | + +-----------------------------------------------+ + 1 1 | 00H | + +-----------------------------------------------+ + 2 2 | FFH | dec hex + +-----------------------------------------------+ + 3 3 | File Length, (4 bytes, LSB first) | 0 0 + +-----------------------------------------------+ + 7 7 | Creation Date/Time of File | 4 4 + | (4 bytes, LSB first, seconds since 1979) | + +-----------------------------------------------+ + 11 B | File Name | 8 8 + ~ 17 chars ~ + | left justified Null filled | + +-----------------------------------------------+ + 28 1C | Sending Program Name | 25 19 + ~ 15 chars ~ + | left justified Null filled | + +-----------------------------------------------+ + 43 2B | > 0 if SLO Requested | 40 28 + +-----------------------------------------------+ + 44 2C | > 0 if RESYNC Supported | 41 29 + +-----------------------------------------------+ + 45 2D | > 0 if MACFLOW Supported | 42 2A + +-----------------------------------------------+ + 46 2E | fill | 43 2B + ~ 85 bytes ~ + | all zero | + +-----------------------------------------------+ + 131 83 | CRC high order byte | + +-----------------------------------------------+ + 132 84 | CRC low order byte | + `-----------------------------------------------' + + + Offset SEAlink RESYNC packet + dec hex + .-----------------------------------------------. + 0 0 | SYN - Start of RESYNC packet - 16H | + +-----------------------------------------------+ + 1 1 | ASCII Decimal 128 byte block number in | + ~ file to restart sending. (No leading ~ + n | or trailing blanks, MSD first). | + +-----------------------------------------------+ + n+1 | ETX - End of RESYNC packet - 03H | + +-----------------------------------------------+ + n+2 | (*1) CRC low order byte | + +-----------------------------------------------+ + n+3 | (*1) CRC high order byte | + `-----------------------------------------------' + + *1 - CRC does not include the SYN or ETX and is + in the reverse byte order from the CRC in a + normal XMODEM data packet. The following is + a sample RESYNC packet for file block 27 (1BH). + + SYN '2' '7' ETX CRCLO CRCHI + .-----+-----+-----+-----+-----+-----. + | 16H | 32H | 37H | 03H | 43H | 25H | + `-----+-----+-----+-----+-----+-----' + + + 16 + Data Description language definitions of block types: + + XMODEMData = XMODEMBlock (* block of data with hdr and trailer *) + | SEALinkBlock (* SEALink File Descriptor Block *) + | TeLinkBlock (* TeLink File Descriptor Block *) + | ReSyncBlock (* SEAlink RESYNC request packet *) + | ACK (* acknowledge data received ok *) + | NAK (* negative ACK & poll 1st block *) + | SEAlinkACK (* acknowledge data received ok *) + | SEAlinkNAK (* negative ACK & poll 1st block *) + | EOT (* end of xfer, after last block *) + | "C" (* 43H *) + + + XMODEMBlock = SOH (* Start of Header, XMODEM Block *) + blockNumber[1] (* sequence, i'=mod( i+1, 256 ) *) + blockCompl[1] (* one's complement of blockNumber *) + data[128] (* uninterpreted user data block *) + (CRC | Checksum) (* error detect/correction code *) + + + TeLinkBlock = SYN (* File Info Header *) + 00H (* block no, must be first block *) + FFH (* one's complement of block no *) + fileLength[4] (* length of data in bytes *) + (*2) CreationTime[2] (* time file last modified or zero *) + (*2) CreationDate[2] (* date file last modified or zero *) + fileName(16) (* name of file, not vol or dir *) + 00H (* header version number *) + sendingProg(16) (* name of program on send side *) + (*1) crcMode[1] (* 01H for CRC 00H for Checksum *) + fill[87] (* zeroed *) + Checksum (* error detect/correction code *) + + *1 - Note that the crcMode is always set to 01H in current implementations + as all TeLink/XMODEM implementations use the CRC method. Therefore, + it is always set to 01H by the sender, and is ignored by the receiver. + + *2 - CreationDate and CreationTime are MS-DOS format as follows: + + CreationDate = year[.7] (* 7 bits, years since 1980, 0-127 *) + month[.4] (* 4 bits, month of year, 1-12 *) + day[.5] (* 5 bits, day of month, 1-31 *) + + CreationTime = hour[.5] (* 5 bits, hour of day, 0-23 *) + minute[.6] (* 6 bits, minute of hour, 0-60 *) + biSeconds[.2] (* 6 bits, seconds/2, 0-29 *) + + + 17 + Data Description Language definition of the block types added by this + extended protocol specification: + + SEALinkBlock = SOH (* File Info Header *) + 00H (* block no, must be first block *) + FFH (* one's complement of block no *) + fileLength[4] (* length of data in bytes *) + (*1) Creation[4] (* Seconds since 1979 file last chgd *) + fileName(17) (* name of file, not vol or dir *) + sendingProg(15) (* name of program on send side *) + SLO[1] (* 01H for Overdrive supported *) + RESYNC[1] (* 01H for file Restart supported *) + MACFLOW[1] (* 01H for Macintosh flow supported *) + fill[85] (* zeroed *) + CRC (* error detect/correction code *) + + *1 - Creation is a long integer number of seconds since January 1, 1979. + + SEAlinkACK = ACK (* indicator data block received ok *) + blockNumber[1] (* sequence, i'=mod( i+1, 256 ) *) + blockCompl[1] (* one's complement of blockNumber *) + + SEAlinkNAK = NAK (* indicator block not received ok *) + blockNumber[1] (* sequence, i'=mod( i+1, 256 ) *) + blockCompl[1] (* one's complement of blockNumber *) + + ReSyncBlock = SYN (* File Restart Position *) + (*1) RestartBlock<20> (* ASCII decimal file block # *) + ETX (* End of block number text *) + CRC(rev order) (* error detection code *) + + *1 - RestartBlock is a text ASCII version of the decimal block number + in the file desired. Note: The first block of the file is block 1. + + + Definitions of Single byte Character values used in protocol: + + ACK = 06H (* acknowledge data received ok *) + NAK = 15H (* negative ACK & poll 1st block *) + SOH = 01H (* start of header, begins block *) + SYN = 16H (* start of TeLink file info blk *) + EOT = 04H (* end of xfer, after last block *) + ETX = 03H (* end of RESYNC request data field*) + + + 18 + Block Verification calculated values used by this protocol: + + CRC = crc[2] (* CCITT Cyclic Redundancy Check *) + + Checksum = checksum[1] (* low 8 bits of sum of data bytes + using unsigned 8 bit arithmetic *) + + Calculating Checksum + -------------------- + + For blocks which use a checksum to do error detection, the checksum is + calculated by initializing an accumulator to zero and doing successive + addition of each character in the data field. Carry is discarded on + each addition. The resulting 8 bit value is the checksum. + + Calculating CRC + --------------- + + For blocks which use CRC to do error detection, the CRC is calculated + using the CCITT V.41 generator polynomial. An accumulator is initialized + to zero, and then each character of the data field is processed by the + CRC generator polynomial. This process can be quite complex to explain, + but is not so complex in practice. The following CRC routine is + given here as an aid to understanding the CRC generation process. + + 8086 assembler routine to implement CCITT V.41 CRC algorithm + ;---------------------------------------------------------------+ + ; CRCUPD - Update CRC value from character in AL | + ; | + ; CRC is calculated using the CCITT V.41 generator polynomial. | + ; That polynomial is: X^16 + X^12 + X^5 + 1 (X^0) | + ; | + ; As an aid to understanding, remember that XOR is bitwise | + ; addition without carry. | + ;---------------------------------------------------------------+ + CRCVAL DW 0 ;16 bit CRC accumulator + ; + CRCUPD: PUSH AX ;All registers preserved + PUSH CX + PUSH DX + MOV DX,[CRCVAL] + XOR DH,AL ;init X^16 term + XOR DL,DL + MOV CX,8 + CRCUP1: SHL DX,1 + JNC CRCUP2 + XOR DX,1021h ;X^12 + X^5 + 1 + CRCUP2: LOOP CRCUP1 + XOR DH,BYTE PTR[CRCVAL] ;finish X^16 term + MOV [CRCVAL],DX ;update CRC accumulator + POP DX + POP CX + POP AX + RET + + + 19 + 2. Data Link Layer Protocol : XMODEM/TeLink/SEAlink Finite State Machines + + The protocol is receiver driven, the receiver polling the sender for + each block. If the receiver polls for the first block using a "C" + (43H) as the poll character, it would prefer to have the CRC-CCITT V.41 + polynomial remainder error detection code at the end of each block as + opposed to a one byte unsigned checksum. The sender will respond to + the "C" poll if it can comply. If the sender chooses checksum as + opposed to CRC, it waits for the receiver to poll with NAK (15H). + Should the checksum method be preferable to the receiver, it polls + with NAK rather than "C". + + The sender returns an EOT instead of a data block when no data remain. + + With this extended implementation, the sender and the receiver may send + blocks or ACK/NAK responses while there is data being received, once the + SEAlink protocol has been negotiated. This full duplex operation allows + the throughput gains of a sliding window protocol. When SEAlink is not + set the window size of 1 prohibits data being sent at the same time and + restores the attributes of a standard XMODEM protocol. + + ------------------ + In this extended protocol, the FTS-0001 single state table + "XMODEM Sender" is replaced by two state tables. + + The top level table is equivalent to the FTS-0001 XMODEM Sender table. + It in turn calls the new state table named "Transmitter ACK/NAK Check" + which implements the full duplex adaptive SEAlink/XMODEM dynamic switching + along with the Overdrive and file Restart sending features of the extended + protocol. + + ----------------- + In this extended protocol, the FTS-0001 single state table + "XMODEM Receiver" is replaced by three state tables. + + The top level table is equivalent to the FTS-0001 XMODEM Receiver table. + It in turn calls the two new state tables named "Send NAK" and "Send ACK" + which implement the full duplex adaptive SEAlink/TeLink/XMODEM dynamic + switching along with the Overdrive and file Restart receiving features of + the extended protocol. + + + Caution!!!! + ----------- + Many current implementations keep file block numbers as 16 bit numbers. + This limits the max file size to either 4 megabytes (if number is signed) + or 8 megabytes (if number is unsigned). To handle files up to the maximum + size DOS allows (4 gigabytes) at least 25 bits plus sign are required for + these numbers. Good practice is to make file block numbers 32 bit values. + + + 20 + XMODEM/TeLink/SEAlink - Sender + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | St | + +-----+----------+-------------------------+-------------------------+-----+ + | XS0 | XmtStart | Normal Entry Point | reset SEAlink flag, | XS1 | + | | | for file send | SendBLK=1, ACKST=0, | | + | | | | ACKBLK= -1, WINDOW=1, | | + | | | | ACKs Rcvd=0, | | + | | | | NumNAK=0, | | + | | | | T1=30 seconds, | | + | | | (*1) | Build SEAlink hdr blk | | + +-----+----------+-------------------------+-------------------------+-----+ + | XS0T| XmTeStrt | Alternate entry from | reset SEAlink flag, | XS1 | + | | | Batch Send if TeLink | SendBLK=1, ACKST=0, | | + | | | mode send required | ACKBLK= -1, WINDOW=1, | | + | | | | ACKs Rcvd=0, | | + | | | | NumNAK=0, | | + | | | | T1=30 seconds, | | + | | | | Build TeLink hdr blk | | + +-----+----------+-------------------------+-------------------------+-----+ + | XS1 | CheckACK | | (Check ACK/NAK AC0) | XS2 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | XS2 | SendBlk |1| NumNAK > 4 & | If header = SEAlink | XS0T| + | | (*2) | | SendBLK = 0 +-------------------------+-----+ + | | | | | If header = TeLink, | XS2 | + | | | | | NumNAK = 0, | | + | | | | | Incr ACKBLK, | | + | | | | | Incr SendBLK | | + | | +-+-----------------------+-------------------------+-----+ + | | |2| NumNAK > 10 | report too many errors | exit| + | | +-+-----------------------+-------------------------+-----+ + | | |3| Timer T1 expired | report fatal timeout | exit| + | | +-+-----------------------+-------------------------+-----+ + | | |4| SendBLK > Last Blk+1 | | XS3 | + | | +-+-----------------------+-------------------------+-----+ + | | |5| SendBLK >ACKBLK+Window| | XS1 | + | | +-+-----------------------+-------------------------+-----+ + | | |6| SendBLK = Last Blk+1 | Send EOT, Incr SendBLK, | XS1 | + | | | | | Set T1 to 30 seconds | | + | | +-+-----------------------+-------------------------+-----+ + | | |7| SLO set & SEAlink set | Send SendBLK, (*3) | XS1 | + | | | | | ACKBLK = SendBLK, | | + | | | | | Incr SendBLK, | | + | | | | | Set T1 to 60 seconds | | + | | +-+-----------------------+-------------------------+-----+ + | | |8| SLO reset or | Send SendBLK, (*3) | XS1 | + | | | | SEAlink reset | Incr SendBLK, | | + | | | | | Set T1 to 30 seconds | | + +-----+----------+-+-----------------------+-------------------------+-----+ + | XS3 | WaitEnd |1| ACKBLK < Last Blk+1 | | XS1 | + | | +-+-----------------------+-------------------------+-----+ + | | |2| ACKBLK = Last Blk+1 | report send success | exit| + `-----+----------+-+-----------------------+-------------------------+-----' + + *1 - Build SEAlink Header block with RESYNC set. Set SLO if line speed > + 2400 bps, reset SLO otherwise. + + *2 - State (XS2.1) allows the receiver to refuse one or both header blocks. + + *3 - If SendBLK = 0, then send the SEAlink (or TeLink) header block. + If SendBLK > 0, send the corresponding 128 byte file data block where + block #1 begins with the first byte of the file. + + 21 + XMODEM/TeLink/SEAlink - Transmitter ACK/NAK Check + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | St | + +-----+----------+-+-----------------------+-------------------------+-----+ + | AC0 | ChkRcvd |1| No character waiting | | exit| + | | +-+-----------------------+-------------------------+-----+ + | | |2| Character waiting | Read character to CHR | AC1 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | AC1 | SLCheck |1| ACKST > 2 | | AC2 | + | | +-+-----------------------+-------------------------+-----+ + | | |2| ACKST <=2 | | AC6 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | AC2 | SLVerify |1| ARBLK8 = 1's comp(CHR)| ARBLK = SendBLK - | AC3 | + | | | | | ((SendBLK-ARBLK8)&0FFh) | | + | | +-+-----------------------+-------------------------+-----+ + | | |2| ARBLK8 # 1's comp(CHR)| Reset SEAlink flag, | AC6 | + | | | | | WINDOW=1, | | + | | | | | ACKST=0 | | + +-----+----------+-+-----------------------+-------------------------+-----+ + | AC3 | SLACKNAK |1| ARBLK not valid (*1) | | exit| + | | +-+-----------------------+-------------------------+-----+ + | | |2| ACKST = 3 | Set SEALink flag, | AC5 | + | | (*2) | | | WINDOW = 6, | | + | | | | | ACKBLK = ARBLK, | | + | | | | | Incr ACKs Rcvd, | | + | | | | | ACKST=0 | | + | | +-+-----------------------+-------------------------+-----+ + | | |3| ACKST = 4 | SendBLK = ARBLK, | AC4 | + | | | | | ACKST=0 | | + +-----+----------+-+-----------------------+-------------------------+-----+ + | AC4 | XMCheck |1| NumNAK < 4 | Set SEAlink Flag, | exit| + | | | | | WINDOW = 6 | | + | | +-+-----------------------+-------------------------+-----+ + | | |2| NumNAK >= 4 | Reset SEAlink flag, | exit| + | | | | | WINDOW = 1 | | + +-----+----------+-+-----------------------+-------------------------+-----+ + | AC5 | SLOCheck |1| SLO Reset | | exit| + | | +-+-----------------------+-------------------------+-----+ + | | |2| ACKs Rcvd < 10 | | exit| + | | +-+-----------------------+-------------------------+-----+ + | | |3| ACKs Rcvd >= 10 | Reset SLO | exit| + +-----+----------+-+-----------------------+-------------------------+-----+ + | AC6 | SL1Check |1| ACKST = 1 or 2 | ARBLK8 = CHR, | AC6 | + | | | | | ACKST = ACKST+2 | | + | | +-+-----------------------+-------------------------+-----+ + | | |2| SEAlink reset | | AC7 | + | | +-+-----------------------+-------------------------+-----+ + | | |3| ACKST = 0 | | AC7 | + | | +-+-----------------------+-------------------------+-----+ + | | |4| ACKST > 2 | | exit| + `-----+----------+-+-----------------------+-------------------------+-----' + + (Continued on next page) + + *1 - ARBLK is valid only if all of the following are true: + + a. ARBLK >= 0 + b. ARBLK <= SendBLK + c. ARBLK > SendBLK-128 + + *2 - Software error if ACKST is not 3 or 4 in state AC3 + + + 22 + XMODEM/TeLink/SEAlink - Transmitter ACK/NAK Check + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | St | + +-----+----------+-+-----------------------+-------------------------+-----+ + | AC7 | ACKNAK |1| CHR = ACK | ACKST = 1 | AC8 | + | | | | | NumNAK = 0 | | + | | +-+-----------------------+-------------------------+-----+ + | | |2| CHR = NAK or 'C' | Set CRC/Chksm if 1st, | AC9 | + | | (*1) | | | ACKST = 2, | | + | | | | | Incr NumNAK, | | + | | | | | Delay 0.6 seconds | | + | | +-+-----------------------+-------------------------+-----+ + | | (*1) |3| CHR = SYN | Receive RESYNC packet, | AC10| + | | | | | ACKST = 0 | | + | | (*2) +-+-----------------------+-------------------------+-----+ + | | |4| CHR = other | | exit| + +-----+----------+-+-----------------------+-------------------------+-----+ + | AC8 | XMACK |1| SEAlink set | | exit| + | | +-+-----------------------+-------------------------+-----+ + | | |2| SEAlink reset | Incr ACKBLK | exit| + +-----+----------+-+-----------------------+-------------------------+-----+ + | AC9 | XMNAK |1| SEAlink set | | exit| + | | +-+-----------------------+-------------------------+-----+ + | | |2| SEAlink reset | SendBLK = ACKBLK+1 | exit| + +-----+----------+-+-----------------------+-------------------------+-----+ + | AC10| RESYNC |1| RESYNC pkt invalid | Send NAK | exit| + | | +-+-----------------------+-------------------------+-----+ + | | |2| RESYNC pkt valid | Set SEAlink flag, | exit| + | | | | | WINDOW = 6, | | + | | | | | SendBLK = RESYNC Blk#,| | + | | | | | ACKBLK = SendBLK-1, | | + | | | | | Send ACK | | + `-----+----------+-+-----------------------+-------------------------+-----' + + *1 - If the output is buffered in local computer memory, any characters + which remain in the local buffer should be purged before leaving + states (AC7.2) or (AC7.3) to aid in resynchronizing the link. + + *2 - If the implementation is honoring MACFLOW protocol, set the flag in + the SEAlink header block and add the following state to (AC7): + + .-----+--------+---+-----------------------+-------------------------+-----. + | AC7 | |3.5| CHR = ^S (13H) & | Delay 10 seconds or | exit| + | | | | SEAlink set & | until ^Q (11H) rcvd | | + | | | | ACKST = 0 | | | + `-----+--------+---+-----------------------+-------------------------+-----' + + + + 23 + XMODEM/TeLink/SEAlink - Receiver + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | St | + +-----+----------+-------------------------+-------------------------+-----+ + | XR0 | RecInit | | reset SEAlink flag, | XR1 | + | | | | reset SLO flag, | | + | | | | reset RESYNC flag, | | + | | | | set CRC flag, | | + | | | | set blocknum=0, | | + | | | | set WriteBLK=1, | | + | | | | reset retry cnt | | + +-----+----------+-------------------------+-------------------------+-----+ + | XR0B| BrecInit | Alternate Entry from | reset SEAlink flag, | XR2 | + | | | Batch Receive (BR4.2) | reset SLO flag, | | + | | | or (BR4.3) | reset RESYNC flag, | | + | | | | set CRC flag, | | + | | | | set blocknum=0, | | + | | | | set WriteBLK=1, | | + | | | | reset retry cnt | | + +-----+----------+-------------------------+-------------------------+-----+ + | XR1 | RecStart | | (Send NAK SN0) | XR2 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | XR2 | WaitFirst|1| 10 retries or 1 minute| report receive failure | exit| + | | | | w/o valid input | | | + | | +-+-----------------------+-------------------------+-----+ + | | |2| > 3 retries or 30 secs| reset CRC flag | XR1 | + | | +-+-----------------------+-------------------------+-----+ + | | |3| EOT received | (Send ACK SA0), | exit| + | | | | | report no file | | + | | +-+-----------------------+-------------------------+-----+ + | | (*1) |4| TeLink block recd | (Send ACK SA0), | XR3 | + | | | | | reset retry cnt | | + | | +-+-----------------------+-------------------------+-----+ + | | (*2) |5| SEAlink block recd | set SEAlink, | XR4 | + | | | | | set RESYNC as | | + | | | | | indicated by header | | + | | +-+-----------------------+-------------------------+-----+ + | | (*3) |6| XMODEM data block 1 | Write block to file, | XR3 | + | | | | received | Incr WriteBLK, | | + | | | | | Incr blocknum, | | + | | | | | (Send ACK SA0), | | + | | | | | reset retry cnt | | + | | +-+-----------------------+-------------------------+-----+ + | | |7| bad block or 2-10 secs| incr retry count | XR1 | + | | | | without input | | | + `-----+----------+-+-----------------------+-------------------------+-----' + + (Continued on next page) + + *1 - A TeLink header packet has the standard XMODEM data block format except + that it begins with an SYN instead of an SOH character and has a block + number of 0. Note: SEAdog (through version 4.51b) does not possess + (XR2.4) and therefore will consider a TeLink header a bad block and + process it according to (XR2.7) when communicating with mailers which + do not do SEAlink protocol. + + *2 - A SEAlink header packet has the standard XMODEM data block format + *3 except that is has a block number of 0. The first block is an XMODEM + data block if its block number is not 0. + + + + + 24 + XMODEM/TeLink/SEAlink - Receiver (cont.) + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | St | + +-----+----------+-+-----------------------+-------------------------+-----+ + | XR3 | WaitBlock|1| 10 retries or 1 minute| report receive failure | exit| + | | | | w/o expected block | | | + | | +-+-----------------------+-------------------------+-----+ + | | |2| EOT received | reset SLO flag, | exit| + | | | | | (Send ACK SA0) | | + | | | | | report recd ok | exit| + | | +-+-----------------------+-------------------------+-----+ + | | |3| expected data | Decrement blocknum, | XR3 | + | | | | block-1 received | (Send ACK SA0) | | + | | +-+-----------------------+-------------------------+-----+ + | | |4| expected data | Write block to file, | XR3 | + | | | | block received | Incr WriteBLK, | | + | | | | | (Send ACK SA0), | | + | | | | | reset retry cnt | | + | | +-+-----------------------+-------------------------+-----+ + | | |5| SEAlink set & | Discard block - resync | XR3 | + | | | | expected block+1 to | in progress, | | + | | | | expected block+127 | Send Conditional NAK(*5)| | + | | +-+-----------------------+-------------------------+-----+ + | | |6| bad block or 2-10 secs| (Send NAK SN0), | XR3 | + | | | | without input | incr retry cnt | | + +-----+----------+-+-----------------------+-------------------------+-----+ + | XR4 | Restart |1| Want entire file | (Send ACK SA0), | XR5 | + | | | | or RESYNC not set | reset retry cnt | | + | | +-+-----------------------+-------------------------+-----+ + | | |2| Want to resume an | WriteBLK = file restart| XR5 | + | | | | interrupted xfer | block number, | | + | | | | and RESYNC is set | blocknum=WriteBLK&0FFh,| | + | | | | | (Send NAK SN0) | | + +-----+----------+-+-----------------------+-------------------------+-----+ + | XR5 | SetOvrdr | | Set SLO as indicated | XR3 | + | | | | by SEAlink header | | + `-----+----------+-------------------------+-------------------------+-----' + Note: The routine that receives a header/data block should do the following: + + 1. Report a bad block if the checksum or CRC is not correct or if the + physical layer encounters errors (e.g. parity, framing, etc.) regardless + of checksum or CRC. Report a bad block if the length of the block is + less than expected (Use a 5 second timeout to detect short blocks). + 2. If the block's sequence number does not match the complement, then + report a bad block if not in SEAlink. If in SEAlink mode don't report + this as a bad block, just restart the block search looking for SOH. + Check for SOH, BLK, ~BLK characters in a "sliding" fashion and keep + cycling until a valid start of block (or timeout) is detected before + assembling the remainder of the block. This procedure makes a resync + occur much more rapidly, and with far fewer errors reported. + 3. If the sequence number and block are good but not the expected number, + report state (XR3.3) if previous block. If not in SEAlink, abort on any + other out of sequence block. If in SEAlink, report back state (XR3.5) + or (XR3.6) as indicated by the out of sequence received block number. + 4. If an EOT is received on a data block prior to the filesize specified + in the SEAlink or TeLink header block, a NAK should be issued to ensure + that spurious data did not cause a premature EOF. A NAK should also + be issued for the first EOT received in an Xmodem transfer when the + final file size is not known. A second EOT without intervening data + would ensure that the file really has been sent, and should be ACK'd. + 5. If you last sent an ACK, then send a NAK here. If you last sent a NAK + then only NAK evry 32 blocks after the first NAK. This allows buffer + drain in overdrive. Use (Send NAK SN0) to send the NAK. + 25 + XMODEM/TeLink/SEAlink - Send NAK + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | St | + +-----+----------+-+-----------------------+-------------------------+-----+ + | SN0 | ClearLine|1| RESYNC flag set | Send RESYNC packet | SN3 | + | | +-+-----------------------+-------------------------+-----+ + | | |2| SEAlink flag set | | SN1 | + | | +-+-----------------------+-------------------------+-----+ + | | |3| > 30 sec contin data | report failure | exit| + | | +-+-----------------------+-------------------------+-----+ + | | |4| character waiting | eat character | SN0 | + | | +-+-----------------------+-------------------------+-----+ + | | |5| clear line | | SN1 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | SN1 | SendNAK |1| CRC flag set | Send "C" | SN2 | + | | +-+-----------------------+-------------------------+-----+ + | | |2| CRC flag reset | send NAK | SN2 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | SN2 | SEAlink |1| SEAlink flag reset | | exit| + | | +-+-----------------------+-------------------------+-----+ + | | |2| SEAlink flag set | send blocknum, ~blocknum| exit| + +-----+----------+-+-----------------------+-------------------------+-----+ + | SN3 | AckResync|1| Rcv ACK | | exit| + | | +-+-----------------------+-------------------------+-----+ + | | |2| Rcv NAK | Resend RESYNC packet | SN3 | + | | +-+-----------------------+-------------------------+-----+ + | | |3| Rcv Other Char | eat character | SN3 | + | | +-+-----------------------+-------------------------+-----+ + | | |4| No char for 10 secs | Resend RESYNC packet | SN3 | + | | +-+-----------------------+-------------------------+-----+ + | | |5| 30 seconds in SN3 | | exit| + `-----+----------+-+-----------------------+-------------------------+-----' + Note: RESYNC packet should send WriteBLK as its desired block number. + + + XMODEM/TeLink/SEAlink - Send ACK + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | St | + +-----+----------+-+-----------------------+-------------------------+-----+ + | SA0 | ClearLine|1| SLO flag set | | SA3 | + | | +-+-----------------------+-------------------------+-----+ + | | |2| SEAlink flag set | | SA1 | + | | +-+-----------------------+-------------------------+-----+ + | | |3| > 30 sec contin data | report failure | exit| + | | +-+-----------------------+-------------------------+-----+ + | | |4| character waiting | eat character | SA0 | + | | +-+-----------------------+-------------------------+-----+ + | | |5| No char waiting | | SA1 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | SA1 | SendACK | | Send ACK | SA2 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | SA2 | SEAlink |1| SEAlink flag reset | | SA3 | + | | +-+-----------------------+-------------------------+-----+ + | | |2| SEAlink flag set | send blocknum, ~blocknum| SA3 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | SA3 | IncBlk | | Incr blocknum | exit| + `-----+----------+-------------------------+-------------------------+-----' + + + + + 26 + 3. Data Link Layer Protocol : MODEM7 Filename Finite State Machines + (There is no change to the MODEM7 state tables from FTS-0001). + + MODEM7 Filename Sender + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | St | + +-----+----------+-+-----------------------+-------------------------+-----+ + | MS0 | WaitNak |1| 20 retries or 1 minute| filename send failed | exit| + | | +-+-----------------------+-------------------------+-----+ + | | |2| NAK received | send ACK & 1st ch of fn | MS1 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | MS1 | WaitChAck|1| ACK rcd, fname done | send SUB = 1AH | MS2 | + | | +-+-----------------------+-------------------------+-----+ + | | |2| ACK rcd, fname ~done | send next ch of fname | MS1 | + | | +-+-----------------------+-------------------------+-----+ + | | |3| other char or 1 sec | send "u", incr retry cnt| MS0 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | MS2 | WaitCksm |1| cksum recd and ok | send ACK, report fn ok | exit| + | | +-+-----------------------+-------------------------+-----+ + | | |2| cksum recd but bad | send "u", incr retry cnt| MS0 | + | | +-+-----------------------+-------------------------+-----+ + | | |3| no cksum in 1 sec | send "u", incr retry cnt| MS0 | + `-----+----------+-+-----------------------+-------------------------+-----' + + + MODEM7 Filename Receiver + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | St | + +-----+----------+-+-----------------------+-------------------------+-----+ + | MR0 | SendNak |1| 20 tries or 1 minute | report filename failure | exit| + | | +-+-----------------------+-------------------------+-----+ + | | |2| | send NAK, incr try cnt | MR1 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | MR1 | WaitAck |1| rcd ACK | | MR2 | + | | +-+-----------------------+-------------------------+-----+ + | | |2| rcd EOT | report no files remain | exit| + | | +-+-----------------------+-------------------------+-----+ + | | |3| 5 secs & no ACK/EOT | | MR0 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | MR2 | WaitChar |1| recd EOT (can happen?)| report no files remain | exit| + | | +-+-----------------------+-------------------------+-----+ + | | |2| recd SUB | send checksum byte | MR3 | + | | +-+-----------------------+-------------------------+-----+ + | | |3| recd "u" | | MR0 | + | | +-+-----------------------+-------------------------+-----+ + | | |4| recd char of name | send ACK | MR2 | + | | +-+-----------------------+-------------------------+-----+ + | | |5| no char in 1 second | | MR0 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | MR3 | WaitOkCk |1| recd ACK within 1 sec | report recd filename ok | exit| + | | +-+-----------------------+-------------------------+-----+ + | | |2| recd "u" or other char| | MR0 | + `-----+----------+-+-----------------------+-------------------------+-----' + + SUB is the ASCII character ^Z or 1AH. The checksum is the unsigned low + order eight bits of the sum of the characters in the transferred filename + including the SUB. + + Although 1 second timeouts are used successfully by Fido and SEAdog, some + fear that this is too small a value for some satellite and packet networks. + + 27 ++ +Go Back + + + + diff --git a/html/ftsc/fts-0008.html b/html/ftsc/fts-0008.html index f0fdccf8..213a95f2 100755 --- a/html/ftsc/fts-0008.html +++ b/html/ftsc/fts-0008.html @@ -1,485 +1,491 @@ - - -
-Document: FTS-0008 -Version: 003 -Date: 15-Oct-1990 -Updates: FTS-0001 - - - - An Enhanced FidoNet(r) Technical Standard - Extending FTS-0001 to include Bark requests - - October 15, 1990 - - - - -Status of this document: - - This document specifies an optional standard for the FidoNet community. - Implementation of the protocols defined in this document is not mandatory, - but all implementations of these protocols are expected to adhere to this - standard. Distribution of this document is subject to the limitations of - the copyright notice displayed below. - - - Copyright 1989-90 by Philip L. Becker. Portions of this document are - copyright 1986-90 by Randy Bush and are incorporated with his consent. - All rights reserved. A right to distribute only without modification and - only at no charge is granted. Under no circumstances is this document to - be reproduced or distributed as part of or packaged with any product or - other sales transaction for which any fee is charged. Any and all other - reproduction or excerpting requires the explicit written consent of the - copyright holders. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A. Introduction - - 1. This Document - - This document describes the standard for "Bark" type FidoNet file - request operation. Bark file requests are an extension to the basic - FTS-0001 mail session, and this document presents these requests as a - modification to that document. - - 2. What are File Requests? - - File Requests are a way of requesting that a specific file be sent during - a FidoNet mail session. This has many advantages over simply logging on to - a BBS and downloading a file: - - o You need not be a validated user - - o You don't have to spend time searching for the file on the BBS - - o You can schedule the file request to take place at any time without - your being near your computer. - - There are two commonly used types of file requests on FidoNet today, WaZOO - and Bark requests. WaZOO requests are used by Opus and BinkleyTerm, and - are not documented here. See the document FTS-0006 by V. Perriello for a - description of these. Bark requests were the first file request extension - to the FTS-0001 protocol, and are supported (at least partially) by many - mailers, including SEAdog, Dutchie, BinkleyTerm, and to a certain extent - Opus. This document describes how to implement Bark-type file requests. - - - B. Terms Used in this Document - - 1. The diagrams and notations used in this document are the same as those used - in the FTS-0001 document. Please see FTS-0001 for a description of these. - This document should be considered as an extension to the FTS-0001 session - layer protocol, and you will require FTS-0001 in addition to this document - to fully understand what is presented here. - - In addition to the data description language described in FTS-0001 section - A.4, one extra terminal used in this notation: - - (* terminals *) - someName- - Go Back - - - - + + + +- String of up to max chars, NOT null terminated - C. Performing File Requests - - 1. Introduction - - A Bark request consists of transmitting a special Bark Request packet which - contains a filename, a date (used for update requests), and optionally a - password. The system receiving the request then decides if it can send the - requested file or not, and if it can does so using the same protocol used - to send attached files. Bark request handling is always controlled by the - answering system, and consists of two phases. In phase one, the receiving - system asks the calling system to honor requests it may have to ask for - files from the caller. In phase two, the receiving system allows the - calling system to request files from it. - - Update file requests are the same as normal file requests, with one - exception. If the date in the Bark Request packet (described below) is - greater than or equal to the date of the actual file requested, the file - will not be sent. The requestor should set the date to the date of the - the actual file on its own end if an update request is desired. - - - D. The Bark Request Packet - - 1. Data Link Layer Data Definition. - - The Bark Request packet is a variable-sized packet containing a header, a - filename, a date (which is used only for update requests - in a normal file - request it's 0) and an optional password. When receiving a Bark Request - packet, the ETX may be used to determine the end of the data portion. Note - that the CRC is sent in the reverse byte order of a normal CRC XMODEM data - block (see FTS-0001 section G.1). - - Note: some systems will send a password in the data block even if none is - needed. Incoming passwords should be ignored unless the other system is - trying to request a passworded file. - - - - Bark File Request Packet - Offset - dec hex - .-----------------------------------------------. - 0 0 | ACK - Start of Bark Request - 06H | - +-----------------------------------------------+ - 1 1 | Filename - Packed DOS file format | - +-----------------------------------------------+ - n n | SPACE - 20H | - +-----------------------------------------------+ - n n | Date (0 if not Update Request) | - +-----------------------------------------------+ - n n | SPACE - 20H (only if pswd follows) | - +-----------------------------------------------+ - n n | Password (optional) | - +-----------------------------------------------+ - n n | ETX - End of RESYNC packet - 03H | - +-----------------------------------------------+ - n n | (*1) CRC low order byte | - +-----------------------------------------------+ - n n | (*1) CRC high order byte | - `-----------------------------------------------' - - *1 - CRC does not include the ACK or ETX and is - in the reverse byte order from the CRC in a - normal XMODEM data packet. - 2. Data Description Notation of Bark Request Packet - - DataBlock (no password) = ACK - Filename<12> - Space - Date<11> - ETX - CRC - - DataBlock (with password) = ACK - Filename<12> - Space - Date<11> - Space - Password<6|8> - ETX - CRC - - ACK = 06H (* Header for file request block *) - Space = 20H (* Space character *) - ETX = 03H (* End of block *) - - Filename (* Name of file requested *) - Date (* ASCII string; the number of seconds - since midnight, January 1, 1970 *) - Password (* The password needed to request this - file, if any. Maximum length is 6 for - BinkleyTerm and Opus, 8 for SEAdog - and Dutchie. *) - - CRC = crc[2] (* CCITT Cyclic Redundancy Check. The - same algorithm as used for XModem - CRCs. The CRC is calculated on - all data in the block between but - not including the ACK and the ETX *) - E. Session Layer Protocol: - - This section describes the modified FTS-0001 session layer protocol. This - is the only area of FTS-0001 which is modified to implement Bark style file - requests. File Requests are performed at the end of the normal FidoNet - mail session, after any mail pickup is performed. - - The diagrams below desribe the session level protocol with Bark file - requests implemented. The state tables have been broken into subroutines - but the FTS-0001 portion is not functionally changed. FTS-0001 sender - states S4 through S7 are now table "Send Mail SM0". FTS-0001 receiver - states R3 through R6 are now table "Receive Mail RM0". They are not - functionally changed in any way from FTS-0001, they are just broken out - to allow them to be used as subroutines. Finally Sender states S0 through - S3 are unchanged, as are Receiver states R0 through R2. - - The remaining FTS-0001 states are enhanced to implement the Bark file - request protocol. In addition, the subroutine state tables "Send Bark SB0" - and "Receive Bark RB0" have been added to handle the actual file requests. - - The following diagrams fully replace the Session Layer protocol state - tables in FTS-0001. No other changes to FTS-0001 are required to implement - the Bark File request feature. - Sender (Top level) - - .-----+----------+-------------------------+-------------------------+-----. - |State| State | Predicate(s) | Action(s) | Next| - | # | Name | | | St | - +-----+----------+-------------------------+-------------------------+-----+ - | S0 | SendInit | | dial modem | S1 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | S1 | WaitCxD |1| carrier detected | delay 1-5 seconds | S2 | - | | (*1) | | | Set SLO if > 2400bps, | | - | | | | | Reset SLO if <= 2400bps | | - | | +-+-----------------------+-------------------------+-----+ - | | |2| busy, etc. | report no connection | exit| - | | +-+-----------------------+-------------------------+-----+ - | | |3| voice | report no carrier | exit| - | | +-+-----------------------+-------------------------+-----+ - | | |4| carrier not detected | report no connection | exit| - | | | | within 60 seconds | | | - +-----+----------+-+-----------------------+-------------------------+-----+ - | S2 | WhackCRs |1| over 30 seconds | report no response | exit| - | | +-+-----------------------+-------------------------+-----+ - | | |2| ?? s received | delay 1 sec | S3 | - | | +-+-----------------------+-------------------------+-----+ - | | |3| s not received | send | S2 | - | | | | | delay ??? secs | | - +-----+----------+-+-----------------------+-------------------------+-----+ - | S3 | WaitClear|1| no input for 0.5 secs | send TSYNCH = AEH | S4 | - | | +-+-----------------------+-------------------------+-----+ - | | |2| over 60 seconds | hang up, report garbage | exit| - | | | | and line not clear | | | - +-----+----------+-+-----------------------+-------------------------+-----+ - | S4 | SendMail | | (Send Mail SM0) | S5 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | S5 | TryPickup|1| Rcv TSYNC | (Receive Mail RM0) | S5 | - | | (*2) +-+-----------------------+-------------------------+-----+ - | | |2| Rcv SYN | (Receive Bark Req RB0) | S5 | - | | +-+-----------------------+-------------------------+-----+ - | | |3| Rcv ENQ | (Do Bark Requests SB0) | S5 | - | | +-+-----------------------+-------------------------+-----+ - | | |4| Rcv 'C' or NAK | Send EOT | S5 | - | | +-+-----------------------+-------------------------+-----+ - | | |5| Rcv Other Char | Send SUB | S5 | - | | +-+-----------------------+-------------------------+-----+ - | | |6| No Data for 45 secs | Hang Up | exit| - `-----+----------+-+-----------------------+-------------------------+-----' - - *1 - This state is shown for the extended SEAlink protocol. Omit the - set/reset SLO actions if adding Bark to a strict FTS-0001 protocol - implementation, or if not implementing overdrive in SEAdog. - - *2 - To refuse to pickup mail (S5.1) may send a CAN and stay in (S5). - - Note: Although the above shows the sender emitting only one TSYNCH, it is - recommended that a timeout of 5-20 seconds should initiate another TSYNCH. - The receiver should tolerate multiple TSYNCHs. - Receiver (Top Level) - - The receiving FSM is given an external timer, the expiration of which - will cause termination with a result of 'no calls' (R0.2). - .-----+----------+-------------------------+-------------------------+-----. - |State| State | Predicate(s) | Action(s) | Next| - | # | Name | | | St | - +-----+----------+-+-----------------------+-------------------------+-----+ - | R0 | WaitCxD |1| carrier detected | | R1 | - | | +-+-----------------------+-------------------------+-----+ - | | |2| external timer expires| report no calls | exit| - +-----+----------+-+-----------------------+-------------------------+-----+ - | R1 | WaitBaud |1| baud rate detected | send signon with s | R2 | - | | +-+-----------------------+-------------------------+-----+ - | | |2| no detect in ?? secs | hang up, report no baud | exit| - +-----+----------+-+-----------------------+-------------------------+-----+ - | R2 | WaitTsync|1| TSYNCH received | ignore input not TSYNCH | R3 | - | | +-+-----------------------+-------------------------+-----+ - | | |2| 60 seconds timeout | hang up, report not Fido| exit| - +-----+----------+-+-----------------------+-------------------------+-----+ - | R3 | RecMail | | (Receive Mail RM0) | R4 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | R4 | AllowPkup|1| Have pickup for sender| Send Tsync, | R5 | - | | | | | Set T1=1 sec | | - | | +-+-----------------------+-------------------------+-----+ - | | |2| No pickup for sender | | R6 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | R5 | WtPickup |1| Rcv NAK or 'C' | (Send Mail SM0) | R6 | - | | +-+-----------------------+-------------------------+-----+ - | | |2| Rcv SUB | Send Tsync, | R5 | - | | | | | Set T1=1 sec | | - | | +-+-----------------------+-------------------------+-----+ - | | |3| Rcv CAN | Report Mail Refused | R6 | - | | +-+-----------------------+-------------------------+-----+ - | | |4| T1 expired | Send Tsync, | R5 | - | | | | | Set T1=1 sec | | - | | +-+-----------------------+-------------------------+-----+ - | | |5| 45 secs in R5 | Hang Up, report error | exit| - +-----+----------+-+-----------------------+-------------------------+-----+ - | R6 | AskBark |1| Wish to make requests | Send SYN | R7 | - | | (*1) +-+-----------------------+-------------------------+-----+ - | | |2| No requests to make | | R8 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | R7 | DoRequest|1| Rcv CAN | Report Requests Refused | R8 | - | | +-+-----------------------+-------------------------+-----+ - | | |2| Rcv ENQ | (Send Bark SB0) | R8 | - | | +-+-----------------------+-------------------------+-----+ - | | |3| Rcv SUB | Send SYN | R7 | - | | +-+-----------------------+-------------------------+-----+ - | | |4| Rcv NAK or 'C' | Send EOT | R6 | - | | +-+-----------------------+-------------------------+-----+ - | | |5| Rcv Other | eat character | R7 | - | | +-+-----------------------+-------------------------+-----+ - | | |6| 5 sec, no input | Send SYN | R7 | - | | +-+-----------------------+-------------------------+-----+ - | | |7| 45 secs in R7 | | R8 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | R8 | WtPickup |1| Allow File Request | (Receive Bark RB0), | exit| - | | | | | Hang Up | | - | | +-+-----------------------+-------------------------+-----+ - | | |2| Disallow Requests | Hang Up | exit| - `-----+----------+-+-----------------------+-------------------------+-----' - *1 - Some implementations always do (R6.1) even if they have no requests. - Sender - Send Mail - - .-----+----------+-------------------------+-------------------------+-----. - |State| State | Predicate(s) | Action(s) | Next| - | # | Name | | | St | - +-----+----------+-------------------------+-------------------------+-----+ - | SM0 | SendMail | | (XMODEM send packet XS0)| SM1 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | SM1 | CheckMail|1| XMODEM successful | (Fido registers success)| SM2 | - | | +-+-----------------------+-------------------------+-----+ - | | |2| XMODEM fail or timeout| hang up, report mail bad| exit| - +-----+----------+-+-----------------------+-------------------------+-----+ - | SM2 | SendFiles| | (BATCH send files BS0) | SM3 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | SM3 | CheckFile|1| BATCH send successful | report success | exit| - | | +-+-----------------------+-------------------------+-----+ - | | |2| BATCH send failed | hang up, rept files fail| exit| - `-----+----------+-+-----------------------+-------------------------+-----' - - - - Sender - Send Bark - - .-----+----------+-------------------------+-------------------------+-----. - |State| State | Predicate(s) | Action(s) | Next| - | # | Name | | | St | - +-----+----------+-+-----------------------+-------------------------+-----+ - | SB0 | SendBark |1| File to request | Build Bark Request Pkt, | SB1 | - | | | | | Set tries = 0 | | - | | +-+-----------------------+-------------------------+-----+ - | | |2| No more files to req | Send ETB | exit| - +-----+----------+-+-----------------------+-------------------------+-----+ - | SB1 | AskFile | | Send Bark Packet | SB2 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | SB2 | RcvFile |1| Rcv ACK | (Batch Receive BR0) | SB3 | - | | +-+-----------------------+-------------------------+-----+ - | | |2| Tries > 5 | Send ETB, report failed | exit| - | | +-+-----------------------+-------------------------+-----+ - | | |3| Rcv Other | Purge input, Incr tries | SB1 | - | | +-+-----------------------+-------------------------+-----+ - | | |4| 10 sec w/o ACK | Incr tries | SB1 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | SB3 | NxtFile |1| Rcv ENQ | | SB0 | - | | +-+-----------------------+-------------------------+-----+ - | | |2| Rcv Other | Purge Input | SB3 | - | | +-+-----------------------+-------------------------+-----+ - | | |3| 5 sec, no input | Send SUB | SB3 | - | | +-+-----------------------+-------------------------+-----+ - | | |4| 45 sec in SB3 | Hang up, report error | exit| - `-----+----------+-+-----------------------+-------------------------+-----' - Sender & Receiver - Receive Mail - - .-----+----------+-------------------------+-------------------------+-----. - |State| State | Predicate(s) | Action(s) | Next| - | # | Name | | | St | - +-----+----------+-------------------------+-------------------------+-----+ - | RM0 | RecMail | | (XMODEM rec packet XR0) | RM1 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | RM1 | XRecEnd |1| XMODEM successful | delay 1 second | RM2 | - | | | | | flush input | | - | | +-+-----------------------+-------------------------+-----+ - | | |2| XMODEM failed | hang up, rept mail fail | exit| - +-----+----------+-+-----------------------+-------------------------+-----+ - | RM2 | RecFiles | | (BATCH rec files BR0) | RM3 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | RM3 | ChkFiles |1| BATCH recv successful | delay 2 secs, rprt good | exit| - | | +-+-----------------------+-------------------------+-----+ - | | |2| BATCH recv failed | hang up, report bad file| exit| - `-----+----------+-+-----------------------+-------------------------+-----' - - - Sender & Receiver - Receive Bark - - .-----+----------+-------------------------+-------------------------+-----. - |State| State | Predicate(s) | Action(s) | Next| - | # | Name | | | St | - +-----+----------+-+-----------------------+-------------------------+-----+ - | RB0 | HonorReq |1| Ok to honor request | Purge Input, Send ENQ, | RB1 | - | | | | | Set T1 = 2 seconds | | - | | +-+-----------------------+-------------------------+-----+ - | | |2| Don't wish to honor | Send CAN | exit| - +-----+----------+-+-----------------------+-------------------------+-----+ - | RB1 | WaitBark |1| Got ACK | Rcv Bark Packet (*1) | RB2 | - | | +-+-----------------------+-------------------------+-----+ - | | |2| Got ETB | Report done | exit| - | | +-+-----------------------+-------------------------+-----+ - | | |3| Got ENQ | Send ETB | RB0 | - | | +-+-----------------------+-------------------------+-----+ - | | |4| T1 expired | Purge Input, Send ENQ, | RB1 | - | | | | | Set T1 = 2 seconds | | - | | +-+-----------------------+-------------------------+-----+ - | | |5| 20 seconds in RB1 | Hang Up, Report error | exit| - +-----+----------+-+-----------------------+-------------------------+-----+ - | RB2 | AckBark |1| Bark Pkt Rcvd Good | Send ACK | RB3 | - | | +-+-----------------------+-------------------------+-----+ - | | |2| Bark Pkt Rcv Error | Send NAK | RB1 | - +-----+----------+-+-----------------------+-------------------------+-----+ - | RB3 | WaitStrt |1| Got 'C' or NAK | | RB4 | - | | +-+-----------------------+-------------------------+-----+ - | | |2| No data for 3 seconds | Send ACK | RB3 | - | | +-+-----------------------+-------------------------+-----+ - | | |3| 15 seconds in RB3 | Hang Up, Report Error | exit| - +-----+----------+-+-----------------------+-------------------------+-----+ - | RB4 | SendFile |1| Can snd requested file| (Batch Send File BS0) | RB0 | - | | (*2) +-+-----------------------+-------------------------+-----+ - | | |2| Can't send file | Send EOT | RB0 | - `-----+----------+-+-----------------------+-------------------------+-----' - *1 - If SUB (16H) received before ETX go to RB0 to resync bark receive - - *2 - While deciding if file exists, and if the password allows it to be - sent etc., a NUL may be sent to buy 20 seconds more on the timeout - on the other end if it is using the SEAlink extended FTS-0001 - specification protocol. Sending a NUL is harmless for a strict - FTS-0001 session, but will not buy more time. -
+Document: FTS-0008 +Version: 003 +Date: 15-Oct-1990 +Updates: FTS-0001 + + + + An Enhanced FidoNet(r) Technical Standard + Extending FTS-0001 to include Bark requests + + October 15, 1990 + + + + +Status of this document: + + This document specifies an optional standard for the FidoNet community. + Implementation of the protocols defined in this document is not mandatory, + but all implementations of these protocols are expected to adhere to this + standard. Distribution of this document is subject to the limitations of + the copyright notice displayed below. + + + Copyright 1989-90 by Philip L. Becker. Portions of this document are + copyright 1986-90 by Randy Bush and are incorporated with his consent. + All rights reserved. A right to distribute only without modification and + only at no charge is granted. Under no circumstances is this document to + be reproduced or distributed as part of or packaged with any product or + other sales transaction for which any fee is charged. Any and all other + reproduction or excerpting requires the explicit written consent of the + copyright holders. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A. Introduction + + 1. This Document + + This document describes the standard for "Bark" type FidoNet file + request operation. Bark file requests are an extension to the basic + FTS-0001 mail session, and this document presents these requests as a + modification to that document. + + 2. What are File Requests? + + File Requests are a way of requesting that a specific file be sent during + a FidoNet mail session. This has many advantages over simply logging on to + a BBS and downloading a file: + + o You need not be a validated user + + o You don't have to spend time searching for the file on the BBS + + o You can schedule the file request to take place at any time without + your being near your computer. + + There are two commonly used types of file requests on FidoNet today, WaZOO + and Bark requests. WaZOO requests are used by Opus and BinkleyTerm, and + are not documented here. See the document FTS-0006 by V. Perriello for a + description of these. Bark requests were the first file request extension + to the FTS-0001 protocol, and are supported (at least partially) by many + mailers, including SEAdog, Dutchie, BinkleyTerm, and to a certain extent + Opus. This document describes how to implement Bark-type file requests. + + + B. Terms Used in this Document + + 1. The diagrams and notations used in this document are the same as those used + in the FTS-0001 document. Please see FTS-0001 for a description of these. + This document should be considered as an extension to the FTS-0001 session + layer protocol, and you will require FTS-0001 in addition to this document + to fully understand what is presented here. + + In addition to the data description language described in FTS-0001 section + A.4, one extra terminal used in this notation: + + (* terminals *) + someName<max> - String of up to max chars, NOT null terminated + + + C. Performing File Requests + + 1. Introduction + + A Bark request consists of transmitting a special Bark Request packet which + contains a filename, a date (used for update requests), and optionally a + password. The system receiving the request then decides if it can send the + requested file or not, and if it can does so using the same protocol used + to send attached files. Bark request handling is always controlled by the + answering system, and consists of two phases. In phase one, the receiving + system asks the calling system to honor requests it may have to ask for + files from the caller. In phase two, the receiving system allows the + calling system to request files from it. + + Update file requests are the same as normal file requests, with one + exception. If the date in the Bark Request packet (described below) is + greater than or equal to the date of the actual file requested, the file + will not be sent. The requestor should set the date to the date of the + the actual file on its own end if an update request is desired. + + + D. The Bark Request Packet + + 1. Data Link Layer Data Definition. + + The Bark Request packet is a variable-sized packet containing a header, a + filename, a date (which is used only for update requests - in a normal file + request it's 0) and an optional password. When receiving a Bark Request + packet, the ETX may be used to determine the end of the data portion. Note + that the CRC is sent in the reverse byte order of a normal CRC XMODEM data + block (see FTS-0001 section G.1). + + Note: some systems will send a password in the data block even if none is + needed. Incoming passwords should be ignored unless the other system is + trying to request a passworded file. + + + + Bark File Request Packet + Offset + dec hex + .-----------------------------------------------. + 0 0 | ACK - Start of Bark Request - 06H | + +-----------------------------------------------+ + 1 1 | Filename - Packed DOS file format | + +-----------------------------------------------+ + n n | SPACE - 20H | + +-----------------------------------------------+ + n n | Date (0 if not Update Request) | + +-----------------------------------------------+ + n n | SPACE - 20H (only if pswd follows) | + +-----------------------------------------------+ + n n | Password (optional) | + +-----------------------------------------------+ + n n | ETX - End of RESYNC packet - 03H | + +-----------------------------------------------+ + n n | (*1) CRC low order byte | + +-----------------------------------------------+ + n n | (*1) CRC high order byte | + `-----------------------------------------------' + + *1 - CRC does not include the ACK or ETX and is + in the reverse byte order from the CRC in a + normal XMODEM data packet. + + 2. Data Description Notation of Bark Request Packet + + DataBlock (no password) = ACK + Filename<12> + Space + Date<11> + ETX + CRC + + DataBlock (with password) = ACK + Filename<12> + Space + Date<11> + Space + Password<6|8> + ETX + CRC + + ACK = 06H (* Header for file request block *) + Space = 20H (* Space character *) + ETX = 03H (* End of block *) + + Filename (* Name of file requested *) + Date (* ASCII string; the number of seconds + since midnight, January 1, 1970 *) + Password (* The password needed to request this + file, if any. Maximum length is 6 for + BinkleyTerm and Opus, 8 for SEAdog + and Dutchie. *) + + CRC = crc[2] (* CCITT Cyclic Redundancy Check. The + same algorithm as used for XModem + CRCs. The CRC is calculated on + all data in the block between but + not including the ACK and the ETX *) + + E. Session Layer Protocol: + + This section describes the modified FTS-0001 session layer protocol. This + is the only area of FTS-0001 which is modified to implement Bark style file + requests. File Requests are performed at the end of the normal FidoNet + mail session, after any mail pickup is performed. + + The diagrams below desribe the session level protocol with Bark file + requests implemented. The state tables have been broken into subroutines + but the FTS-0001 portion is not functionally changed. FTS-0001 sender + states S4 through S7 are now table "Send Mail SM0". FTS-0001 receiver + states R3 through R6 are now table "Receive Mail RM0". They are not + functionally changed in any way from FTS-0001, they are just broken out + to allow them to be used as subroutines. Finally Sender states S0 through + S3 are unchanged, as are Receiver states R0 through R2. + + The remaining FTS-0001 states are enhanced to implement the Bark file + request protocol. In addition, the subroutine state tables "Send Bark SB0" + and "Receive Bark RB0" have been added to handle the actual file requests. + + The following diagrams fully replace the Session Layer protocol state + tables in FTS-0001. No other changes to FTS-0001 are required to implement + the Bark File request feature. + + Sender (Top level) + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | St | + +-----+----------+-------------------------+-------------------------+-----+ + | S0 | SendInit | | dial modem | S1 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | S1 | WaitCxD |1| carrier detected | delay 1-5 seconds | S2 | + | | (*1) | | | Set SLO if > 2400bps, | | + | | | | | Reset SLO if <= 2400bps | | + | | +-+-----------------------+-------------------------+-----+ + | | |2| busy, etc. | report no connection | exit| + | | +-+-----------------------+-------------------------+-----+ + | | |3| voice | report no carrier | exit| + | | +-+-----------------------+-------------------------+-----+ + | | |4| carrier not detected | report no connection | exit| + | | | | within 60 seconds | | | + +-----+----------+-+-----------------------+-------------------------+-----+ + | S2 | WhackCRs |1| over 30 seconds | report no response <cr> | exit| + | | +-+-----------------------+-------------------------+-----+ + | | |2| ?? <cr>s received | delay 1 sec | S3 | + | | +-+-----------------------+-------------------------+-----+ + | | |3| <cr>s not received | send <cr> <sp> <cr> <sp>| S2 | + | | | | | delay ??? secs | | + +-----+----------+-+-----------------------+-------------------------+-----+ + | S3 | WaitClear|1| no input for 0.5 secs | send TSYNCH = AEH | S4 | + | | +-+-----------------------+-------------------------+-----+ + | | |2| over 60 seconds | hang up, report garbage | exit| + | | | | and line not clear | | | + +-----+----------+-+-----------------------+-------------------------+-----+ + | S4 | SendMail | | (Send Mail SM0) | S5 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | S5 | TryPickup|1| Rcv TSYNC | (Receive Mail RM0) | S5 | + | | (*2) +-+-----------------------+-------------------------+-----+ + | | |2| Rcv SYN | (Receive Bark Req RB0) | S5 | + | | +-+-----------------------+-------------------------+-----+ + | | |3| Rcv ENQ | (Do Bark Requests SB0) | S5 | + | | +-+-----------------------+-------------------------+-----+ + | | |4| Rcv 'C' or NAK | Send EOT | S5 | + | | +-+-----------------------+-------------------------+-----+ + | | |5| Rcv Other Char | Send SUB | S5 | + | | +-+-----------------------+-------------------------+-----+ + | | |6| No Data for 45 secs | Hang Up | exit| + `-----+----------+-+-----------------------+-------------------------+-----' + + *1 - This state is shown for the extended SEAlink protocol. Omit the + set/reset SLO actions if adding Bark to a strict FTS-0001 protocol + implementation, or if not implementing overdrive in SEAdog. + + *2 - To refuse to pickup mail (S5.1) may send a CAN and stay in (S5). + + Note: Although the above shows the sender emitting only one TSYNCH, it is + recommended that a timeout of 5-20 seconds should initiate another TSYNCH. + The receiver should tolerate multiple TSYNCHs. + Receiver (Top Level) + + The receiving FSM is given an external timer, the expiration of which + will cause termination with a result of 'no calls' (R0.2). + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | St | + +-----+----------+-+-----------------------+-------------------------+-----+ + | R0 | WaitCxD |1| carrier detected | | R1 | + | | +-+-----------------------+-------------------------+-----+ + | | |2| external timer expires| report no calls | exit| + +-----+----------+-+-----------------------+-------------------------+-----+ + | R1 | WaitBaud |1| baud rate detected | send signon with+ +Go Back + + + + diff --git a/html/ftsc/fts-0009.html b/html/ftsc/fts-0009.html index 5bba0b50..695531a5 100755 --- a/html/ftsc/fts-0009.html +++ b/html/ftsc/fts-0009.html @@ -1,104 +1,105 @@ - - -s | R2 | + | | +-+-----------------------+-------------------------+-----+ + | | |2| no detect in ?? secs | hang up, report no baud | exit| + +-----+----------+-+-----------------------+-------------------------+-----+ + | R2 | WaitTsync|1| TSYNCH received | ignore input not TSYNCH | R3 | + | | +-+-----------------------+-------------------------+-----+ + | | |2| 60 seconds timeout | hang up, report not Fido| exit| + +-----+----------+-+-----------------------+-------------------------+-----+ + | R3 | RecMail | | (Receive Mail RM0) | R4 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | R4 | AllowPkup|1| Have pickup for sender| Send Tsync, | R5 | + | | | | | Set T1=1 sec | | + | | +-+-----------------------+-------------------------+-----+ + | | |2| No pickup for sender | | R6 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | R5 | WtPickup |1| Rcv NAK or 'C' | (Send Mail SM0) | R6 | + | | +-+-----------------------+-------------------------+-----+ + | | |2| Rcv SUB | Send Tsync, | R5 | + | | | | | Set T1=1 sec | | + | | +-+-----------------------+-------------------------+-----+ + | | |3| Rcv CAN | Report Mail Refused | R6 | + | | +-+-----------------------+-------------------------+-----+ + | | |4| T1 expired | Send Tsync, | R5 | + | | | | | Set T1=1 sec | | + | | +-+-----------------------+-------------------------+-----+ + | | |5| 45 secs in R5 | Hang Up, report error | exit| + +-----+----------+-+-----------------------+-------------------------+-----+ + | R6 | AskBark |1| Wish to make requests | Send SYN | R7 | + | | (*1) +-+-----------------------+-------------------------+-----+ + | | |2| No requests to make | | R8 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | R7 | DoRequest|1| Rcv CAN | Report Requests Refused | R8 | + | | +-+-----------------------+-------------------------+-----+ + | | |2| Rcv ENQ | (Send Bark SB0) | R8 | + | | +-+-----------------------+-------------------------+-----+ + | | |3| Rcv SUB | Send SYN | R7 | + | | +-+-----------------------+-------------------------+-----+ + | | |4| Rcv NAK or 'C' | Send EOT | R6 | + | | +-+-----------------------+-------------------------+-----+ + | | |5| Rcv Other | eat character | R7 | + | | +-+-----------------------+-------------------------+-----+ + | | |6| 5 sec, no input | Send SYN | R7 | + | | +-+-----------------------+-------------------------+-----+ + | | |7| 45 secs in R7 | | R8 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | R8 | WtPickup |1| Allow File Request | (Receive Bark RB0), | exit| + | | | | | Hang Up | | + | | +-+-----------------------+-------------------------+-----+ + | | |2| Disallow Requests | Hang Up | exit| + `-----+----------+-+-----------------------+-------------------------+-----' + *1 - Some implementations always do (R6.1) even if they have no requests. + Sender - Send Mail + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | St | + +-----+----------+-------------------------+-------------------------+-----+ + | SM0 | SendMail | | (XMODEM send packet XS0)| SM1 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | SM1 | CheckMail|1| XMODEM successful | (Fido registers success)| SM2 | + | | +-+-----------------------+-------------------------+-----+ + | | |2| XMODEM fail or timeout| hang up, report mail bad| exit| + +-----+----------+-+-----------------------+-------------------------+-----+ + | SM2 | SendFiles| | (BATCH send files BS0) | SM3 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | SM3 | CheckFile|1| BATCH send successful | report success | exit| + | | +-+-----------------------+-------------------------+-----+ + | | |2| BATCH send failed | hang up, rept files fail| exit| + `-----+----------+-+-----------------------+-------------------------+-----' + + + + Sender - Send Bark + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | St | + +-----+----------+-+-----------------------+-------------------------+-----+ + | SB0 | SendBark |1| File to request | Build Bark Request Pkt, | SB1 | + | | | | | Set tries = 0 | | + | | +-+-----------------------+-------------------------+-----+ + | | |2| No more files to req | Send ETB | exit| + +-----+----------+-+-----------------------+-------------------------+-----+ + | SB1 | AskFile | | Send Bark Packet | SB2 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | SB2 | RcvFile |1| Rcv ACK | (Batch Receive BR0) | SB3 | + | | +-+-----------------------+-------------------------+-----+ + | | |2| Tries > 5 | Send ETB, report failed | exit| + | | +-+-----------------------+-------------------------+-----+ + | | |3| Rcv Other | Purge input, Incr tries | SB1 | + | | +-+-----------------------+-------------------------+-----+ + | | |4| 10 sec w/o ACK | Incr tries | SB1 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | SB3 | NxtFile |1| Rcv ENQ | | SB0 | + | | +-+-----------------------+-------------------------+-----+ + | | |2| Rcv Other | Purge Input | SB3 | + | | +-+-----------------------+-------------------------+-----+ + | | |3| 5 sec, no input | Send SUB | SB3 | + | | +-+-----------------------+-------------------------+-----+ + | | |4| 45 sec in SB3 | Hang up, report error | exit| + `-----+----------+-+-----------------------+-------------------------+-----' + Sender & Receiver - Receive Mail + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | St | + +-----+----------+-------------------------+-------------------------+-----+ + | RM0 | RecMail | | (XMODEM rec packet XR0) | RM1 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | RM1 | XRecEnd |1| XMODEM successful | delay 1 second | RM2 | + | | | | | flush input | | + | | +-+-----------------------+-------------------------+-----+ + | | |2| XMODEM failed | hang up, rept mail fail | exit| + +-----+----------+-+-----------------------+-------------------------+-----+ + | RM2 | RecFiles | | (BATCH rec files BR0) | RM3 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | RM3 | ChkFiles |1| BATCH recv successful | delay 2 secs, rprt good | exit| + | | +-+-----------------------+-------------------------+-----+ + | | |2| BATCH recv failed | hang up, report bad file| exit| + `-----+----------+-+-----------------------+-------------------------+-----' + + + Sender & Receiver - Receive Bark + + .-----+----------+-------------------------+-------------------------+-----. + |State| State | Predicate(s) | Action(s) | Next| + | # | Name | | | St | + +-----+----------+-+-----------------------+-------------------------+-----+ + | RB0 | HonorReq |1| Ok to honor request | Purge Input, Send ENQ, | RB1 | + | | | | | Set T1 = 2 seconds | | + | | +-+-----------------------+-------------------------+-----+ + | | |2| Don't wish to honor | Send CAN | exit| + +-----+----------+-+-----------------------+-------------------------+-----+ + | RB1 | WaitBark |1| Got ACK | Rcv Bark Packet (*1) | RB2 | + | | +-+-----------------------+-------------------------+-----+ + | | |2| Got ETB | Report done | exit| + | | +-+-----------------------+-------------------------+-----+ + | | |3| Got ENQ | Send ETB | RB0 | + | | +-+-----------------------+-------------------------+-----+ + | | |4| T1 expired | Purge Input, Send ENQ, | RB1 | + | | | | | Set T1 = 2 seconds | | + | | +-+-----------------------+-------------------------+-----+ + | | |5| 20 seconds in RB1 | Hang Up, Report error | exit| + +-----+----------+-+-----------------------+-------------------------+-----+ + | RB2 | AckBark |1| Bark Pkt Rcvd Good | Send ACK | RB3 | + | | +-+-----------------------+-------------------------+-----+ + | | |2| Bark Pkt Rcv Error | Send NAK | RB1 | + +-----+----------+-+-----------------------+-------------------------+-----+ + | RB3 | WaitStrt |1| Got 'C' or NAK | | RB4 | + | | +-+-----------------------+-------------------------+-----+ + | | |2| No data for 3 seconds | Send ACK | RB3 | + | | +-+-----------------------+-------------------------+-----+ + | | |3| 15 seconds in RB3 | Hang Up, Report Error | exit| + +-----+----------+-+-----------------------+-------------------------+-----+ + | RB4 | SendFile |1| Can snd requested file| (Batch Send File BS0) | RB0 | + | | (*2) +-+-----------------------+-------------------------+-----+ + | | |2| Can't send file | Send EOT | RB0 | + `-----+----------+-+-----------------------+-------------------------+-----' + *1 - If SUB (16H) received before ETX go to RB0 to resync bark receive + + *2 - While deciding if file exists, and if the password allows it to be + sent etc., a NUL may be sent to buy 20 seconds more on the timeout + on the other end if it is using the SEAlink extended FTS-0001 + specification protocol. Sending a NUL is harmless for a strict + FTS-0001 session, but will not buy more time. +
-Document: FTS-0009 -Version: 001 -Date: 17-Dec-91 - - - - - MSGID / REPLY - A standard for unique message identifiers - and reply chain linkage - - 17 December, 1991 - - jim nutt - 1:114/30@fidonet - - - - -Status of this document: - - This FTS (FidoNet(r) Technical Standard) specifies an optional - standard for the FidoNet community. Implementation of the - protocols defined in this document is not mandatory, but all - implementations of these protocols are expected to adhere to this - standard. Distribution of this document is unlimited. - - Fido and FidoNet are registered marks of Tom Jennings and Fido - Software. - - -MSGID - - A MSGID line consists of the string "^AMSGID:" (where ^A is a - control-A (hex 01) and the double-quotes are not part of the - string), followed by a space, the address of the originating - system, and a serial number unique to that message on the - originating system, i.e.: - - ^AMSGID: origaddr serialno - - The originating address should be specified in a form that - constitutes a valid return address for the originating network. - If the originating address is enclosed in double-quotes, the - entire string between the beginning and ending double-quotes is - considered to be the orginating address. A double-quote character - within a quoted address is represented by by two consecutive - double-quote characters. The serial number may be any eight - character hexadecimal number, as long as it is unique - no two - messages from a given system may have the same serial number - within a three years. The manner in which this serial number is - generated is left to the implementor. - - -REPLY - - A REPLY line consists of the string "^AREPLY:" (where ^A is a - control-A (hex 01) and the double-quotes are not part of the - string), followed by a space, and the origaddr and serialno - fields of the MSGID line of the message to which this message is a - reply, i.e.: - - ^AREPLY: origaddr serialno - - The origaddr and serialno fields must be identical to the - corresponding fields in the MSGID of the message to which this - message is a reply. A REPLY line is never generated in a - message that is a reply to a message that does not contain a - MSGID line. - - -GENERAL - - MSGID and REPLY lines should be placed before the text body of the - message in which they appear. - - Finally, a MSGID is generated only at the time of message - creation. An existing MSGID and/or REPLY should never be stripped - from a message passing through an intermediate system. No system - should ever add an MSGID and/or REPLY to, or modify an existing - MSGID / REPLY contained in, a message not originating on that - system. - -- - Go Back - - - - + + + +
+Document: FTS-0009 +Version: 001 +Date: 17-Dec-91 + + + + + MSGID / REPLY + A standard for unique message identifiers + and reply chain linkage + + 17 December, 1991 + + jim nutt + 1:114/30@fidonet + + + + +Status of this document: + + This FTS (FidoNet(r) Technical Standard) specifies an optional + standard for the FidoNet community. Implementation of the + protocols defined in this document is not mandatory, but all + implementations of these protocols are expected to adhere to this + standard. Distribution of this document is unlimited. + + Fido and FidoNet are registered marks of Tom Jennings and Fido + Software. + + +MSGID + + A MSGID line consists of the string "^AMSGID:" (where ^A is a + control-A (hex 01) and the double-quotes are not part of the + string), followed by a space, the address of the originating + system, and a serial number unique to that message on the + originating system, i.e.: + + ^AMSGID: origaddr serialno + + The originating address should be specified in a form that + constitutes a valid return address for the originating network. + If the originating address is enclosed in double-quotes, the + entire string between the beginning and ending double-quotes is + considered to be the orginating address. A double-quote character + within a quoted address is represented by by two consecutive + double-quote characters. The serial number may be any eight + character hexadecimal number, as long as it is unique - no two + messages from a given system may have the same serial number + within a three years. The manner in which this serial number is + generated is left to the implementor. + + +REPLY + + A REPLY line consists of the string "^AREPLY:" (where ^A is a + control-A (hex 01) and the double-quotes are not part of the + string), followed by a space, and the origaddr and serialno + fields of the MSGID line of the message to which this message is a + reply, i.e.: + + ^AREPLY: origaddr serialno + + The origaddr and serialno fields must be identical to the + corresponding fields in the MSGID of the message to which this + message is a reply. A REPLY line is never generated in a + message that is a reply to a message that does not contain a + MSGID line. + + +GENERAL + + MSGID and REPLY lines should be placed before the text body of the + message in which they appear. + + Finally, a MSGID is generated only at the time of message + creation. An existing MSGID and/or REPLY should never be stripped + from a message passing through an intermediate system. No system + should ever add an MSGID and/or REPLY to, or modify an existing + MSGID / REPLY contained in, a message not originating on that + system. + ++ +Go Back + + + + diff --git a/html/ftsc/fts-4001.html b/html/ftsc/fts-4001.html index 0bc73190..53848c3b 100755 --- a/html/ftsc/fts-4001.html +++ b/html/ftsc/fts-4001.html @@ -1,192 +1,193 @@ - - -
-********************************************************************** -FTSC FIDONET TECHNICAL STANDARDS COMMITTEE -********************************************************************** - -Publication: FTS-4001 -Revision: 1 -Title: ADDRESSING CONTROL PARAGRAPHS -Author(s): FTSC - -Revision Date: 1 October 2000 -Expiry Date: 1 October 2002 ----------------------------------------------------------------------- -Contents: - 1. Credits - 2. General - 3. FMPT - 4. TOPT - 5. INTL ----------------------------------------------------------------------- - -Status of this document ------------------------ - - This document is a Fidonet Standard (FTS). - - This document specifies a Fidonet standard for the Fidonet - community. - - This document is released to the public domain, and may be used, - copied or modified for any purpose whatever. - - -1. Credits ----------- - - This document is based on the work of Randy Bush and many others. - - -2. General ----------- - - The general control paragraph format is specified in separate FTSC - documents. - - The addressing control paragraphs specified in this document are - normally only used in netmail messages and not in echomail messages. - - While it would be technically correct to use them also in echomail, - it is known that certain programs will misbehave if they are present - there. It is therefore recommended that they should not be used in - echomail at the present time. - - If a program processing messages detects these control paragraphs in - an echomail message it is recommended that they are disregarded and - deleted from any copies of that message exported to other systems. - - Addressing of and address resolution for echomail messages should - instead be done with the help of packet and message header - information. See separate FTSC documents. - - To determine the address of the original sender of an echomail - message, the information in the Origin line should be used. See - separate FTSC documents. - - -3. FMPT -------- - - The FMPT control paragraph shall be used to give information about - the point number of the original sender of a message if that point - number is not 0. If the point number of the original sender of a - message is 0 that message should not contain any FMPT control - paragraph. - - The format of a FMPT control paragraph shall be: - - <SOH>"FMPT <point number>"<CR> - - where <point number> is the ASCII representation of the point number - of the sender. The point number shall be an unsigned integer in the - range 1-65535. - - E.g. a message from point number 1 of a certain node shall contain - the following FMPT control paragraph - - <SOH>"FMPT 1"<CR> - - Note that the format of a FMPT control paragraph deviates from the - general format specified in separate FTSC documents in that it does - not contain any colon after the control tag. - - -4. TOPT -------- - - The TOPT control paragraph shall be used to give information about - the point number of the ultimate addressee of a message if that - point number is not 0. If the point number of the ultimate addressee - of a message is 0 that message should not contain any TOPT control - paragraph. - - The format of a TOPT control paragraph shall be: - - <SOH>"TOPT "<point number><CR> - - where <point number> is the ASCII representation of the point number - of the addressee. The point number shall be an unsigned integer in - the range 1-65535. - - E.g. a message to point number 1 of a certain node shall contain the - following TOPT control paragraph - - <SOH>"TOPT 1"<CR> - - Note that the format of a TOPT control paragraph deviates from the - general format specified in separate FTSC documents in that it does - not contain any colon after the control tag. - - -5. INTL -------- - - The INTL control paragraph shall be used to give information about - the zone numbers of the original sender and the ultimate addressee - of a message. - - The format of an INTL control paragraph shall be: - - <SOH>"INTL "<destination address>" "<origin address><CR> - - where <destination address> shall be the representation of the - address of ultimate destination and <origin address> is the - representation of the address of the original sender of the message - in question. These addresses shall be given on the form - <zone>:<net>/<node> where <zone> is the ASCII representation of the - zone number, <net> is the ASCII representation of the net number and - <node> is the ASCII representation of the node number. Any point - number information shall be given in FMPT and TOPT control - paragraphs. - - E.g. a message from address 1:123/4.5 to 2:345/6.7 shall contain the - following INTL control paragraph - - <SOH>"INTL 2:345/6 1:123/4"<CR> - - Note that the format of an INTL control paragraph deviates from the - general format specified in separate FTSC documents in that it does - not contain any colon after the control tag. - - INTL control paragraphs are also often used even when both the - originating and the destination systems are in the same zone. This - gives both the originating system and the destination system as well - as any intermediate routing systems unambiguous zone information - even in a situation where one system may be active in a number of - different (possibly non-FidoNet) zones. - - Although it is known that some programs may route messages - incorrectly if the INTL control paragraph is present in messages - where both the originating and the destination systems are in the - same zone, it is recommended that the INTL control paragraph is - always inserted into netmail messages in packet files. - - - -A. History ----------- - - Rev.1, 20001001: Initial Release. - Principal author Goran Eriksson. - -********************************************************************** -- - Go Back - - - - + + + +
+********************************************************************** +FTSC FIDONET TECHNICAL STANDARDS COMMITTEE +********************************************************************** + +Publication: FTS-4001 +Revision: 1 +Title: ADDRESSING CONTROL PARAGRAPHS +Author(s): FTSC + +Revision Date: 1 October 2000 +Expiry Date: 1 October 2002 +---------------------------------------------------------------------- +Contents: + 1. Credits + 2. General + 3. FMPT + 4. TOPT + 5. INTL +---------------------------------------------------------------------- + +Status of this document +----------------------- + + This document is a Fidonet Standard (FTS). + + This document specifies a Fidonet standard for the Fidonet + community. + + This document is released to the public domain, and may be used, + copied or modified for any purpose whatever. + + +1. Credits +---------- + + This document is based on the work of Randy Bush and many others. + + +2. General +---------- + + The general control paragraph format is specified in separate FTSC + documents. + + The addressing control paragraphs specified in this document are + normally only used in netmail messages and not in echomail messages. + + While it would be technically correct to use them also in echomail, + it is known that certain programs will misbehave if they are present + there. It is therefore recommended that they should not be used in + echomail at the present time. + + If a program processing messages detects these control paragraphs in + an echomail message it is recommended that they are disregarded and + deleted from any copies of that message exported to other systems. + + Addressing of and address resolution for echomail messages should + instead be done with the help of packet and message header + information. See separate FTSC documents. + + To determine the address of the original sender of an echomail + message, the information in the Origin line should be used. See + separate FTSC documents. + + +3. FMPT +------- + + The FMPT control paragraph shall be used to give information about + the point number of the original sender of a message if that point + number is not 0. If the point number of the original sender of a + message is 0 that message should not contain any FMPT control + paragraph. + + The format of a FMPT control paragraph shall be: + + <SOH>"FMPT <point number>"<CR> + + where <point number> is the ASCII representation of the point number + of the sender. The point number shall be an unsigned integer in the + range 1-65535. + + E.g. a message from point number 1 of a certain node shall contain + the following FMPT control paragraph + + <SOH>"FMPT 1"<CR> + + Note that the format of a FMPT control paragraph deviates from the + general format specified in separate FTSC documents in that it does + not contain any colon after the control tag. + + +4. TOPT +------- + + The TOPT control paragraph shall be used to give information about + the point number of the ultimate addressee of a message if that + point number is not 0. If the point number of the ultimate addressee + of a message is 0 that message should not contain any TOPT control + paragraph. + + The format of a TOPT control paragraph shall be: + + <SOH>"TOPT "<point number><CR> + + where <point number> is the ASCII representation of the point number + of the addressee. The point number shall be an unsigned integer in + the range 1-65535. + + E.g. a message to point number 1 of a certain node shall contain the + following TOPT control paragraph + + <SOH>"TOPT 1"<CR> + + Note that the format of a TOPT control paragraph deviates from the + general format specified in separate FTSC documents in that it does + not contain any colon after the control tag. + + +5. INTL +------- + + The INTL control paragraph shall be used to give information about + the zone numbers of the original sender and the ultimate addressee + of a message. + + The format of an INTL control paragraph shall be: + + <SOH>"INTL "<destination address>" "<origin address><CR> + + where <destination address> shall be the representation of the + address of ultimate destination and <origin address> is the + representation of the address of the original sender of the message + in question. These addresses shall be given on the form + <zone>:<net>/<node> where <zone> is the ASCII representation of the + zone number, <net> is the ASCII representation of the net number and + <node> is the ASCII representation of the node number. Any point + number information shall be given in FMPT and TOPT control + paragraphs. + + E.g. a message from address 1:123/4.5 to 2:345/6.7 shall contain the + following INTL control paragraph + + <SOH>"INTL 2:345/6 1:123/4"<CR> + + Note that the format of an INTL control paragraph deviates from the + general format specified in separate FTSC documents in that it does + not contain any colon after the control tag. + + INTL control paragraphs are also often used even when both the + originating and the destination systems are in the same zone. This + gives both the originating system and the destination system as well + as any intermediate routing systems unambiguous zone information + even in a situation where one system may be active in a number of + different (possibly non-FidoNet) zones. + + Although it is known that some programs may route messages + incorrectly if the INTL control paragraph is present in messages + where both the originating and the destination systems are in the + same zone, it is recommended that the INTL control paragraph is + always inserted into netmail messages in packet files. + + + +A. History +---------- + + Rev.1, 20001001: Initial Release. + Principal author Goran Eriksson. + +********************************************************************** ++ +Go Back + + + + diff --git a/html/ftsc/fts-5000.html b/html/ftsc/fts-5000.html index dae9ae2e..36e9af05 100644 --- a/html/ftsc/fts-5000.html +++ b/html/ftsc/fts-5000.html @@ -1,4 +1,5 @@ +
-
-0000,Fido,MS-DOS,Packer/mailer,Tom_Jennings,1:125/111 -0001,Rover,MS-DOS,Packer/mailer,Bob_Hartman,1:104/501 -0002,SEAdog,MS-DOS,Packer/mailer,Thom_Henderson,1:107/542.1 -0003,WinDog,MS-DOS,Mailer,Solar_Wind_Computing,1:115/333 -0004,Slick-150,HP-150,Packer/mailer,Jerry_Bain,???? -0005,Opus,MS-DOS,Packer/mailer,Doug_Boone,1:124/4227 -0006,Dutchie,MS-DOS,Packer/mailer,Henk_Wevers,2:500/1 -0007,WPL_Library,Amiga,Mailer,Russell_McOrmand,1:163/109 -0008,Tabby,Macintosh,Packer/mailer,Michael_Connick,1:107/412 -0009,SWMail,OS/2,Mailer,Solar_Wind_Computing,1:115/333 -000A,Wolf-68k,CPM-68k,Packer/mailer,Robert_Heller,1:321/153 -000B,QMM,QNX,Packer/mailer,Rick_Duff,1:167/201 -000C,FrontDoor,MS-DOS,Packer/mailer,Joaquim_Homrighausen,2:270/17 -000D,GOmail,MS-DOS,Packer,Scott_Green,???? -000E,FFGate,MS-DOS,Packer,Ruedi_Kneubuehler,2:301/580 -000F,FileMgr,MS-DOS,Packer,Erik_van_Emmerik,2:281/611 -0010,FIDZERCP,MS-DOS,Packer,Thorsten_Seidel,2:242/55 -0011,MailMan,MS-DOS,Packer,Ron_Bemis,1:124/1113 -0012,OOPS,MS-DOS,Packer,Tom_Kashuba,1:322/379 -0013,GS-Point,Atari_ST,Packer/mailer,Harry_Lee,1:124/4230 -0014,BGMail,????,????,Ray_Gwinn,1:265/104 -0015,ComMotion/2,OS/2,Packer/mailer,Michael_Buenter,2:301/602 -0016,OurBBS_Fidomailer,MS-DOS/Unix/Coherent,Packer/mailer,Brian_Keahl,1:133/524 -0017,FidoPcb,MS-DOS,Packer,Matjaz_Koce,2:380/100 -0018,WimpLink,Archimedes,Packer/mailer,Remco_de_Vreugd,2:283/307 -0019,BinkScan,MS-DOS,Packer,Shawn_Stoddard,1:362/101 -001A,D'Bridge,MS-DOS,Packer/mailer,Chris_Irwin,1:18/68 -001B,BinkleyTerm,MS-DOS,Mailer,Vince_Perriello,1:343/491 -001C,Yankee,MS-DOS,Packer,Randy_Edwards,???? -001D,uuGate,MS-DOS,Packer,Geoff_Watts,3:690/710 -001E,Daisy,Apple_][,Packer/mailer,Raymond_&_Ken_Lo,3:700/1 -001F,Polar_Bear,????,Packer/mailer,Kenneth_McLeod,1:101/190 -0020,The-Box,MS-DOS/Atari_ST,Packer/mailer,Jac_Kersing/Arjen_Lentz,2:283/333 -0021,STARgate/2,OS/2,Packer/mailer,Shawn_Stoddard,1:362/101 -0022,TMail,MS-DOS,Packer,Larry_Lewis,3:713/600.1701 -0023,TCOMMail,MS-DOS,Packer/mailer,Mike_Ratledge,1:372/888 -0024,GIGO,MS-DOS,Packer,Jason_Fesler,1:203/7707,,940228 -0025,RBBSMail,MS-DOS,Packer,Jan_Terpstra,2:512/10 -0026,Apple-Netmail,Apple_][,Packer/mailer,Bill_Fenner,1:129/87 -0027,Chameleon,Amiga,Mailer,Juergen_Hermann,2:241/2.12 -0028,Majik_Board,MS-DOS,Packer/mailer,Dale_Barnes,1:3601/14.20 -0029,QM,MS-DOS,Packer,George_Peace,1:270/101 -002A,Point_And_Click,Amiga,Packer,Rob_Tillotson,1:201/40.302 -002B,Aurora_Three_Bundler,MS-DOS,Packer,Oliver_McDonald,???? -002C,FourDog,MS-DOS,Packer,Shay_Walters,1:376/12 -002D,MSG-PACK,MS-DOS,Packer,Tom_Hendricks,1:261/662 -002E,AMAX,MS-DOS,Packer,Alan_Applegate,1:104/36 -002F,Domain_Communication_System,????,????,Hal_Duprie,1:101/106 -0030,LesRobot,????,Packer,Lennart_Svensonn,2:501/2 -0031,Rose,MS-DOS,Packer/mailer,Glen_Jackson,1:100/617 -0032,Paragon,Amiga,Packer/mailer,Jon_Radoff,1:322/545 -0033,BinkleyTerm/oMMM/ST,Atari_ST,Packer/mailer,Bill_Scull,1:363/112,,19951209 -0034,StarNet,Atari_ST,Mailer,Eric_Drewry,1:322/566 -0035,ZzyZx,MS-DOS,Packer,Jason_Steck,1:124/424 -0036,QEcho,MS-DOS,Packer,The_QuickBBS_Group,1:363/1701 -0037,BOOM,MS-DOS,Packer,Andrew_Farmer,1:243/1 -0038,PBBS,Amiga,Packer/mailer,Todd_Kover,1:261/1028 -0039,TrapDoor,Amiga,Mailer,Maximilian_Hantsch,2:310/6 -003A,Welmat,Amiga,Mailer,Russell_McOrmand,1:163/109 -003B,NetGate,Unix-386,Packer,David_Nugent,3:632/348 -003C,Odie,MS-DOS,Mailer,Matt_Farrenkopf,1:105/376 -003D,Quick_Gimme,CPM-80/MS-DOS,Packer/mailer,Laeeth_Isaacs,2:254/18 -003E,dbLink,MS-DOS,Packer/mailer,Chris_Irwin,1:18/68 -003F,TosScan,MS-DOS,Packer,Joaquim_Homrighausen,2:270/17 -0040,Beagle,MS-DOS,Mailer,Alexander_Holy,2:310/90 -0041,Igor,MS-DOS,Mailer,Harry_Lee,1:124/4230 -0042,TIMS,MS-DOS,Packer/mailer,Bit_Bucket_Software,1:104/501 -0043,Phoenix,MS-DOS,Packer/mailer,International_Telecommunications,1:296/5,,19930624 -0044,FrontDoor_APX,MS-DOS,Packer/mailer,Joaquim_Homrighausen,2:270/17 -0045,XRS,MS-DOS,Packer,Mike_Ratledge,1:372/888 -0046,Juliet_Mail_System,Amiga,Packer,Gregory_Kritsch,1:163/109.30 -0047,Jabberwocky,Macintosh,Packer,Eric_Larson,1:2605/620 -0048,XST,MS-DOS,Packer,Wayne_Michaels,1:380/100 -0049,MailStorm,Amiga,Packer,Russel_Miranda,1:268/106 -004A,BIX-Mail,????,Mailer,Bob_Hartman,1:104/501 -004B,IMAIL,MS-DOS,Packer,IMAIL_INC.,2:246/47 -004C,FTNGate,MS-DOS,Packer,Jason_Steck,1:104/424 -004D,RealMail,MS-DOS,Packer,Taine_Gilliam,1:372/42 -004E,Lora-CBIS,MS-DOS,Mailer,Marco_Maccaferri,2:332/402 -004F,TDCS,PDP-11,Packer/mailer,Terry_Ebdon,2:254/6 -0050,InterMail,MS-DOS,Packer/mailer,Peter_Stewart,1:369/35 -0051,RFD,MS-DOS,Packer,Doug_Belkofer,1:234/10 -0052,Yuppie!,MS-DOS,Packer,Leo_Moll,2:242/2 -0053,EMMA,MS-DOS,Packer,Johan_Zwiekhorst,2:292/100 -0054,QBoxMail,QDOS,Packer/mailer,Jan_Bredenbeek,2:283/500 -0055,Number_4,MS-DOS,Packer/mailer,Ola_Garstad,2:502/15 -0056,Number_5,MS-DOS,Packer/mailer,Ola_Garstad,2:502/15 -0057,GSBBS,MS-DOS,Packer,Michelangelo_Jones,1:260/244 -0058,Merlin,MS-DOS,Packer/mailer,Mark_Lewis,2:258/25 -0059,TPCS,MS-DOS,Packer,Mikael_Kjellstrom,2:201/211 -005A,Raid,MS-DOS,Packer,George_Peace,1:270/101 -005B,Outpost,MS-DOS,Packer/mailer,Mike_Dailor,???? -005C,Nizze,MS-DOS,Packer,Tomas_Nielsen,2:205/202 -005D,Armadillo,Macintosh,Packer,Erik_Sea,1:221/109 -005E,rfmail,Unix,Packer/mailer,Per_Lindqvist,2:201/332 -005F,Msgtoss,MS-DOS,Packer,Mike_Zakharoff,1:343/36 -0060,InfoTex,MS-DOS,Packer/mailer,Jan_Spooren,2:292/852 -0061,GEcho,MS-DOS,Packer,Gerard_van_der_Land,2:283/555,951209 -0062,CDEhost,MS-DOS,Packer,Dennis_D'Annunzio,1:379/28 -0063,Pktize,MS-DOS,Packer,Joaquim_Homrighausen,2:270/17 -0064,PC-RAIN,MS-DOS,Packer/mailer,Ray_Hyder,1:272/40 -0065,Truffle,MS-DOS/OS2,Mailer,Mike_Rissa,2:504/59 -0066,Foozle,Amiga,Packer,Peer_Hasselmeyer,2:247/4 -0067,White_Pointer,Macintosh,Packer/mailer,Alastair_Rakine,3:680/820 -0068,GateWorks,MS-DOS,Packer,Jamie_Penner,1:153/1025 -0069,Portal_of_Power,MS-DOS,Mailer,Soren_Ager,2:230/12 -006A,MacWoof,Macintosh,Packer/mailer,Craig_Vaughan,1:109/342 -006B,Mosaic,MS-DOS,Packer,Christopher_King,1:103/315 -006C,TPBEcho,MS-DOS,Packer,Gerd_Qualmann,2:242/1 -006D,HandyMail,MS-DOS,Packer/mailer,jim_nutt,1:114/30 -006E,EchoSmith,MS-DOS,Packer,Noel_Crow,1:170/409 -006F,FileHost,MS-DOS,Packer,Mark_Cole,2:252/186 -0070,SFTS,MS-DOS,Packer,Bruce_Anderson,1:3402/6 -0071,Benjamin,MS-DOS,Packer/mailer,Stefan_Graf,2:245/4.5436 -0072,RiBBS,OS9_(COCO),Packer/mailer,Ron_Bihler,1:104/54 -0073,MP,MS-DOS,Packer,Ivan_Leong,6:600/28 -0074,Ping,MS-DOS,Packer,David_Nugent,3:632/348 -0075,Door2Europe,MS-DOS,Packer/mailer,Michaela_Schoebel,2:247/14 -0076,SWIFT,MS-DOS,Packer/mailer,Hanno_van_der_Maas,2:500/2 -0077,WMAIL,MS-DOS,Packer,Silvan_Calarco,2:334/100.2 -0078,RATS,MS-DOS,Packer,Jason_DeCaro,1:260/205 -0079,Harry_the_Dirty_Dog,OS2,Mailer/packer,George_Edwards,3:632/340.7 -007A,Maximus-CBCS,MS-DOS/OS2,Packer,Scott_Dudley,1:249/106 -007B,SwifEcho,MS-DOS,Packer,Dana_Bell,1:3801/8 -007C,GCChost,Amiga,Packer,Davide_Massarenti,2:332/505.3 -007D,RPX-Mail,MS-DOS,Packer,Joerg_Wirtgen,2:241/4034 -007E,Tosser,MS-DOS,Packer,Albert_Ng,6:700/185 -007F,TCL,MS-DOS,Packer,Ulf_Hedlund,2:201/602 -0080,MsgTrack,MS-DOS,Packer,Andrew_Farmer,1:243/1 -0081,FMail,MS-DOS/DOS_DPMI/OS2/WIN32,Packer,Folkert_Wijnstra,2:283/619 -0082,Scantoss,MS-DOS,Packer,Michael_Matter,2:243/44.3443 -0083,Point_Manager,Amiga,Packer,Pino_Aliberti,2:335/602.2,,19931012 -0084,IMBINK,MS-DOS,Packer,Mike_Hartmann,2:246/48 -0085,Simplex,MS-DOS/OS2,Packer,Chris_Laforet,1:152/401 -0086,UMTP,MS-DOS,Packer,Byron_Copeland,1:272/26 -0087,Indaba,MS-DOS,Packer,Pieter_Muller,5:7102/11 -0088,Echomail_Engine,MS-DOS,Packer,Joe_Jared,1:103/200 -0089,DragonMail,OS2,Packer,Patrick_O'Riva,1:143/37 -008A,Prox,MS-DOS,Packer,Gerhard_Hoogterp,2:283/1.2 -008B,Tick,MS-DOS/OS2,Packer,Barry_Geller,1:266/12 -008C,RA-Echo,MS-DOS,Packer,Roger_Kirchhoff,2:245/4 -008D,TrapToss,Amiga,Packer,Maximilian_Hantsch,2:310/6 -008E,Babel,MS-DOS/OS2,Packer,Jorgen_Abrahamsen,2:230/100.9 -008F,UMS,Amiga,Packer,Martin_Horneffer,2:242/7.9 -0090,RWMail,MS-DOS,Packer,Remko_Westrik,2:285/309.5 -0091,WildMail,MS-DOS,Packer,Derek_Koopowitz,1:161/502 -0092,AlMAIL,MS-DOS,Packer,Alan_Leung,1:348/207 -0093,XCS,MS-DOS,Packer,Rudi_Kusters,2:512/34.4 -0094,Fone-Link,MS-DOS,Packer/mailer,Chris_Sloyan,1:269/602 -0095,Dogfight,MS-DOS,Packer,Chris_Tyson,2:256/36 -0096,Ascan,MS-DOS,Packer,Arjen_van_Loon,2:281/1.397 -0097,FastMail,MS-DOS,Packer,Jan_Berends,2:282/5 -0098,DoorMan,MS-DOS,Mailer,Christopher_Dean,1:105/70 -0099,PhaedoZap,Atari_ST,Packer,Jeff_Mitchell,1:229/422 -009A,SCREAM,MS-DOS,Packer/mailer,Jem_Miller,1:147/33 -009B,MoonMail,MS-DOS,Packer/mailer,Hasse_Wigdahl,2:206/101 -009C,Backdoor,Sinclair_QL,Packer,Erik_Slagter,2:283/500.3 -009D,MailLink,Archimedes,Packer/mailer,Jan-Jaap_v._d._Geer,2:500/133.1138 -009E,Mail_Manager,MS-DOS,Packer,Andreas_Brodowski,2:241/4006 -009F,Black_Star,Xenix_386,Packer/mailer,Jac_Kersing,2:283/333 -00A0,Bermuda,Atari_ST/MS-DOS,Packer,Jac_Kersing,2:283/333 -00A1,PT,MS-DOS,Packer/mailer,Jerry_Andrew,1:109/426 -00A2,UltiMail,MS-DOS,Mailer,Brett_Floren,1:363/1000 -00A3,GMD,MS-DOS,Packer,John_Souvestre,1:396/1 -00A4,FreeMail,MS-DOS,Packer,Chad_Nelson,1:109/536 -00A5,Meliora,MS-DOS,Packer,Erik_van_Riper,1:107/230 -00A6,Foodo,CPM-80,Packer/mailer,Ron_Murray,3:690/640.7 -00A7,MSBBS,CPM-80,Packer,Marc_Newman,1:106/601 -00A8,Boston_BBS,MS-DOS,Packer/mailer,Tom_Bradford,1:101/625 -00A9,XenoMail,MS-DOS,Packer/mailer,Noah_Wood,1:284/14 -00AA,XenoLink,Amiga,Packer/mailer,Jonathan_Forbes,1:250/642 -00AB,ObjectMatrix,MS-DOS,Packer,Roberto_Ceccarelli,2:332/305.1 -00AC,Milquetoast,Win3/MS-DOS,Mailer,Vince_Perriello,1:343/491 -00AD,PipBase,MS-DOS,Packer,Roberto_Piola,2:334/306 -00AE,EzyMail,MS-DOS,Packer,Peter_Davies,3:636/204 -00AF,FastEcho,MS-DOS,Packer,Tobias_Burchhardt,2:245/39 -00B0,IOS,Atari_ST/TT,Packer,Rinaldo_Visscher,2:280/3.1 -00B1,Communique,MS-DOS,Packer,Ian_Harris,3:620/251 -00B2,PointMail,MS-DOS,Packer,Michele_Clinco,2:331/302.11 -00B3,Harvey's_Robot,MS-DOS,Packer,Harvey_Parisien,1:249/114 -00B4,2daPoint,MS-DOS,Packer,Ron_Pritchett,1:376/74 -00B5,CommLink,MS-DOS,Mailer,Steve_Shapiro,1:382/35 -00B6,fronttoss,MS-DOS,Packer,Dirk_Astrath,2:241/5603 -00B7,SysopPoint,MS-DOS,Packer,Rudolf_Heeb,2:243/44 -00B8,PTMAIL,MS-DOS,Packer,Arturo_Krogulski,2:341/27.7 -00B9,MHS,MS-DOS/OS2/WINNT,Packer/mailer,Matthias_Hertzog,2:301/402,,19940310 -00BA,DLGMail,Amiga,Packer,Steve_Lewis,1:114/52 -00BB,GatePrep,MS-DOS,Packer,Andrew_Allen,1:382/92 -00BC,Spoint,MS-DOS,Packer,Conrad_Thompson,1:130/29.106 -00BD,TurboMail,MS-DOS,Packer,B._J._Weschke,1:2606/403 -00BE,FXMAIL,MS-DOS,Packer,Kenneth_Roach,1:208/401 -00BF,NextBBS,MS-DOS,Packer/mailer,Tomas_Hood,1:352/777 -00C0,EchoToss,MS-DOS,Packer,Mikel_Beck,1:107/218 -00C1,SilverBox,Amiga,Packer,David_Lebel,1:240/516 -00C2,MBMail,MS-DOS,Packer,Ruud_Uphoff,2:500/116.1928 -00C3,SkyFreq,Amiga,Packer,Luca_Spada,2:331/106 -00C4,ProMailer,Amiga,Mailer,Ivan_Pintori,2:335/311.21 -00C5,Mega_Mail,MS-DOS,Packer/mailer,Mirko_Mucko,2:242/94 -00C6,YaBom,MS-DOS,Packer,Berin_Lautenbach,3:620/248 -00C7,TachEcho,MS-DOS,Packer,Tom_Zacios,1:107/376 -00C8,XAP,MS-DOS,Packer,Jeroen_Smulders,2:512/1.8 -00C9,EZMAIL,MS-DOS,Packer,Torben_Paving,2:234/41 -00CA,Arc-Binkley,Archimedes,Mailer,Geoff_Riley,2:250/208 -00CB,Roser,MS-DOS,Packer,Chan_Kafai,6:700/158 -00CC,UU2,MS-DOS,Packer,Dmitri_Zavalishin,2:5020/32 -00CD,NMS,MS-DOS,Packer/mailer,Michiel_de.Bruijn,2:285/505.2 -00CE,BBCSCAN,Archimedes,Packer/mailer,E._G._Snel,2:512/222.17 -00CF,XBBS,MS-DOS,Packer,Mark_Kimes,1:380/16 -00D0,LoTek_Vzrul,,Packer/mailer,Kevin_Gates,gates@sasknet.sk.ca,19951229,20000122 -00D1,Private_Point_Project,MS-DOS,Packer,Oliver_von_Bueren,2:301/701 -00D2,NoSnail,MS-DOS,Packer,Eddie_Rowe,1:19/124 -00D3,SmlNet,MS-DOS,Packer,Steve_T._Gove,1:106/6 -00D4,STIR,MS-DOS,Packer,Paul_Martin,2:250/107.3 -00D5,RiscBBS,Archimedes,Packer,Carl_Declerck,2:292/500.10 -00D6,Hercules,Amiga,Packer/mailer,Andrew_Gray,1:231/590 -00D7,AMPRGATE,MS-DOS,Packer/mailer,Mike_Bilow,1:323/120.1 -00D8,BinkEMSI,MS-DOS,Mailer,Tobias_Burchhardt,2:245/39 -00D9,EditMsg,MS-DOS,Packer,G._K._Pace,1:374/26 -00DA,Roof,Amiga,Packer,Robert_Williamson,1:167/104 -00DB,QwkPkt,MS-DOS,Packer,Ross_West,1:250/412 -00DC,MARISCAN,MS-DOS,Packer,Mario_Elkati,2:341/14.9 -00DD,NewsFlash,MS-DOS,Packer,Chris_Lueders,2:241/5306 -00DE,Paradise,MS-DOS,Packer/mailer,Kenneth_Wall,1:300/5 -00DF,DogMatic-ACB,N/A,Packer/mailer,Martin_Allard,2:245/48 -00E0,T-Mail,MS-DOS,Packer/mailer,Andy_Elkin,2:5030/15 -00E1,JetMail,Atari_ST/STE/TT,Packer,Daniel_Roesen,2:243/93.8 -00E2,MainDoor,MS-DOS,Packer/mailer,Francisco_Sedano,2:341/20 -00E3,Starnet_Products,MS-DOS/OS2,Mailer/Packer,Starnet_Software_Development,1:102/925,,19951209 -00E4,BMB,Amiga,Packer,Dentato_Remo,2:335/311.33 -00E5,BNP,MS-DOS,Packer,Nathan_Moschkin,1:109/427 -00E6,MailMaster,MS-DOS,Packer/mailer,Gary_Murphy,1:130/85 -00E7,Mail_Manager_+Plus+,MS-DOS,Packer,Chip_Morrow,1:226/1240 -00E8,BloufGate,Atari_ST/Unix,Packer,Vincent_Pomey,2:320/100.2 -00E9,CrossPoint,MS-DOS,Packer/mailer,Peter_Mandrella,2:2454/97.80,19920713,19960601 -00EA,DeltaEcho,MS-DOS,Packer,Mikael_Staldal,2:201/337 -00EB,ALLFIX,MS-DOS,Packer,Harald_Harms,2:512/145 -00EC,NetWay,Archimedes,Mailer,Steve_Haslam,2:250/116.3 -00ED,MARSmail,Atari_ST,Packer,Folkert_val_Heusden,2:285/750.2,,19940122 -00EE,ITRACK,MS-DOS/OS2,Packer,Frank_Prade,2:2480/55,,19990119 -00EF,GateUtil,MS-DOS,Packer,Michael_Skurka,1:397/2.1 -00F0,Bert,MS-DOS,Packer/mailer,Arnim_Wiezer,2:241/2104.9 -00F1,Techno,MS-DOS,Packer,Patrik_Holmsten,2:203/133 -00F2,AutoMail,MS-DOS,Packer,Mats_Wallin,2:201/239 -00F3,April,Amiga,Packer,Nick_de_Jong,2:282/309.3 -00F4,Amanda,MS-DOS,Packer,David_Douthitt,1:121/99.14 -00F5,NmFwd,MS-DOS,Packer,Alberto_Pasquale,2:332/504 -00F6,FileScan,MS-DOS,Packer,Matthias_Duesterhoeft,2:241/4512.2 -00F7,FredMail,MS-DOS,Packer,Michael_Butler,3:712/515 -00F8,TP_Kom,MS-DOS,Packer/mailer,Per_Sten,2:201/124 -00F9,FidoZerb,MS-DOS,Packer,Ulrich_Schlechte,2:241/3410.12 -00FA,!!MessageBase,MS-DOS,Packer/mailer,Holger_Lembke,2:240/500.20 -00FB,EMFido,Amiga,Packer,Gary_Glendown,2:249/3.999 -00FC,GS-Toss,MS-DOS,Packer,Marco_Bungalski,2:241/2021 -00FD,QWKDoor,Atari_ST,Packer,Christian_Limpach,2:270/20.1 -00FE,No_product_id_allocated,Any,Packer,No_Author,3:3/20 -00FF,16-bit_product_id,Any,Packer/Mailer,No_Author,3:3/20 -0100,Reserved,None,None,No_Author,3:3/20,19951209 -0101,The_Brake!,Mailer,John_Gladkih,2:5051/16,19951209 -0102,Zeus_BBS,Amiga,Mailer,Alex_May,2:441/58.0,19951209 -0103,XenoPhobe-Mailer,Msdos/Windows/OS2/Linux,Mailer,Peter_Kling,1:374/969.0,19951209 -0104,None,None,None,None,0:0/0, -0105,Terminate,Msdos/Os2/Windows,Mailer/Packer,SerWiz_Comm_&_Bo_Bendtsen,2:254/261,19951209 -0106,TeleMail,Msdos,Mailer/Packer,Juergen_Weigelt,2:2453/900,19951209 -0107,CMBBS,Msdos/Os2,Mailer/Packer,Christof_Engel,2:2490/5110,19951209 -0108,Shuttle,Windows,Mailer/Packer,MCH_Development_&_Marvin_Hart,1:106/500,19951209 -0109,Quater,Amiga,Mailer,Felice_Murolo,2:335/206,19951209 -010A,Windo,Windows,Mailer,Alan_Chavis,1:147/55,19951209 -010B,Xenia,Msdos/Os2,Mailer,Arjen_Lentz,2:283/512,19960601 -010C,GMS,AmigaOS,Mailer,Mirko_Viviani,2:331/213,19960601 -010D,HNET,Msdos,???,Pedro_Jaramillo,1:102/160,19960601 -010E,Shotgun_Professional,Msdos,???,Brent_Shellenberg,1:140/146,19960621 -010F,SLIPgate,Msdos,???,Kieran_Morrissey,3:634/376,19960723 -0110,BBBS,MSDOS/OS2/NT/Amiga/Unix,Mailer/Packer,Kim_Heino,2:22/222,19980216 -0111,NewsGate,Windows/NT,Packer/Gateway,Leilo_denna_Pietra,2:335/244,19980216 -01FF,BBBS,MSDOS/OS2/NT/Amiga/Unix,Mailer/Packer,Kim_Heino,2:22/222,19980216 -02FF,NewsGate,Windows/NT,Packer/Gateway,Leilo_denna_Pietra,2:335/244,19980216 -03FF,Ravel,Macintosh,Mailer/Packer,Cyril_Moorzin,2:5030/700,19980310 -04FF,Beemail,Windows,Mailer/Packer,Andrius_Cepaitis,2:470/1,19980310 -05FF,QuickToss,DOS,Packer,Sandra_Godinez,1:387/601.3,19980310 -06FF,SpaceMail,???,Mailer,Andreas_Habicht,2:244/6121,19980710 -07FF,Argus,Windows/NT,Mailer,Max_Masyutin,2:469/84,19990216 -08FF,Hurricane,Windows/NT/Solaris,Packer,Paul_Walker,2:254/175.44,19990216 -09FF,Hub_Mailer,OS2,Mailer,Viatcheslav_Odintsov,2:5020/181,19990216 -0AFF,FDInt,MSDOS,Packer,Colin_Turner,2:443/13,19990216 -0BFF,GPMail,OS2,Mailer,Igor_Vanin,2:5030/448,19990216 -0CFF,FTrack,NT/OS2,Tracker,Fyodor_Ustinov,2:5020/79,19990313 -0DFF,Nice_Tosser,DOS/OS2/Win32,Tosser,Robert_Agababyan,2:5020/234.1,19990518 -0EFF,LuckyGate,DOS/OS2/Linux,Packer,Pavel_Gulchouck,2:463/68,19990709 -0FFF,McMail,DOS,Mailer,Simon_Slater,2:443/777,20000102 -- - Go Back - - - - + + + +
+
+0000,Fido,MS-DOS,Packer/mailer,Tom_Jennings,1:125/111 +0001,Rover,MS-DOS,Packer/mailer,Bob_Hartman,1:104/501 +0002,SEAdog,MS-DOS,Packer/mailer,Thom_Henderson,1:107/542.1 +0003,WinDog,MS-DOS,Mailer,Solar_Wind_Computing,1:115/333 +0004,Slick-150,HP-150,Packer/mailer,Jerry_Bain,???? +0005,Opus,MS-DOS,Packer/mailer,Doug_Boone,1:124/4227 +0006,Dutchie,MS-DOS,Packer/mailer,Henk_Wevers,2:500/1 +0007,WPL_Library,Amiga,Mailer,Russell_McOrmand,1:163/109 +0008,Tabby,Macintosh,Packer/mailer,Michael_Connick,1:107/412 +0009,SWMail,OS/2,Mailer,Solar_Wind_Computing,1:115/333 +000A,Wolf-68k,CPM-68k,Packer/mailer,Robert_Heller,1:321/153 +000B,QMM,QNX,Packer/mailer,Rick_Duff,1:167/201 +000C,FrontDoor,MS-DOS,Packer/mailer,Joaquim_Homrighausen,2:270/17 +000D,GOmail,MS-DOS,Packer,Scott_Green,???? +000E,FFGate,MS-DOS,Packer,Ruedi_Kneubuehler,2:301/580 +000F,FileMgr,MS-DOS,Packer,Erik_van_Emmerik,2:281/611 +0010,FIDZERCP,MS-DOS,Packer,Thorsten_Seidel,2:242/55 +0011,MailMan,MS-DOS,Packer,Ron_Bemis,1:124/1113 +0012,OOPS,MS-DOS,Packer,Tom_Kashuba,1:322/379 +0013,GS-Point,Atari_ST,Packer/mailer,Harry_Lee,1:124/4230 +0014,BGMail,????,????,Ray_Gwinn,1:265/104 +0015,ComMotion/2,OS/2,Packer/mailer,Michael_Buenter,2:301/602 +0016,OurBBS_Fidomailer,MS-DOS/Unix/Coherent,Packer/mailer,Brian_Keahl,1:133/524 +0017,FidoPcb,MS-DOS,Packer,Matjaz_Koce,2:380/100 +0018,WimpLink,Archimedes,Packer/mailer,Remco_de_Vreugd,2:283/307 +0019,BinkScan,MS-DOS,Packer,Shawn_Stoddard,1:362/101 +001A,D'Bridge,MS-DOS,Packer/mailer,Chris_Irwin,1:18/68 +001B,BinkleyTerm,MS-DOS,Mailer,Vince_Perriello,1:343/491 +001C,Yankee,MS-DOS,Packer,Randy_Edwards,???? +001D,uuGate,MS-DOS,Packer,Geoff_Watts,3:690/710 +001E,Daisy,Apple_][,Packer/mailer,Raymond_&_Ken_Lo,3:700/1 +001F,Polar_Bear,????,Packer/mailer,Kenneth_McLeod,1:101/190 +0020,The-Box,MS-DOS/Atari_ST,Packer/mailer,Jac_Kersing/Arjen_Lentz,2:283/333 +0021,STARgate/2,OS/2,Packer/mailer,Shawn_Stoddard,1:362/101 +0022,TMail,MS-DOS,Packer,Larry_Lewis,3:713/600.1701 +0023,TCOMMail,MS-DOS,Packer/mailer,Mike_Ratledge,1:372/888 +0024,GIGO,MS-DOS,Packer,Jason_Fesler,1:203/7707,,940228 +0025,RBBSMail,MS-DOS,Packer,Jan_Terpstra,2:512/10 +0026,Apple-Netmail,Apple_][,Packer/mailer,Bill_Fenner,1:129/87 +0027,Chameleon,Amiga,Mailer,Juergen_Hermann,2:241/2.12 +0028,Majik_Board,MS-DOS,Packer/mailer,Dale_Barnes,1:3601/14.20 +0029,QM,MS-DOS,Packer,George_Peace,1:270/101 +002A,Point_And_Click,Amiga,Packer,Rob_Tillotson,1:201/40.302 +002B,Aurora_Three_Bundler,MS-DOS,Packer,Oliver_McDonald,???? +002C,FourDog,MS-DOS,Packer,Shay_Walters,1:376/12 +002D,MSG-PACK,MS-DOS,Packer,Tom_Hendricks,1:261/662 +002E,AMAX,MS-DOS,Packer,Alan_Applegate,1:104/36 +002F,Domain_Communication_System,????,????,Hal_Duprie,1:101/106 +0030,LesRobot,????,Packer,Lennart_Svensonn,2:501/2 +0031,Rose,MS-DOS,Packer/mailer,Glen_Jackson,1:100/617 +0032,Paragon,Amiga,Packer/mailer,Jon_Radoff,1:322/545 +0033,BinkleyTerm/oMMM/ST,Atari_ST,Packer/mailer,Bill_Scull,1:363/112,,19951209 +0034,StarNet,Atari_ST,Mailer,Eric_Drewry,1:322/566 +0035,ZzyZx,MS-DOS,Packer,Jason_Steck,1:124/424 +0036,QEcho,MS-DOS,Packer,The_QuickBBS_Group,1:363/1701 +0037,BOOM,MS-DOS,Packer,Andrew_Farmer,1:243/1 +0038,PBBS,Amiga,Packer/mailer,Todd_Kover,1:261/1028 +0039,TrapDoor,Amiga,Mailer,Maximilian_Hantsch,2:310/6 +003A,Welmat,Amiga,Mailer,Russell_McOrmand,1:163/109 +003B,NetGate,Unix-386,Packer,David_Nugent,3:632/348 +003C,Odie,MS-DOS,Mailer,Matt_Farrenkopf,1:105/376 +003D,Quick_Gimme,CPM-80/MS-DOS,Packer/mailer,Laeeth_Isaacs,2:254/18 +003E,dbLink,MS-DOS,Packer/mailer,Chris_Irwin,1:18/68 +003F,TosScan,MS-DOS,Packer,Joaquim_Homrighausen,2:270/17 +0040,Beagle,MS-DOS,Mailer,Alexander_Holy,2:310/90 +0041,Igor,MS-DOS,Mailer,Harry_Lee,1:124/4230 +0042,TIMS,MS-DOS,Packer/mailer,Bit_Bucket_Software,1:104/501 +0043,Phoenix,MS-DOS,Packer/mailer,International_Telecommunications,1:296/5,,19930624 +0044,FrontDoor_APX,MS-DOS,Packer/mailer,Joaquim_Homrighausen,2:270/17 +0045,XRS,MS-DOS,Packer,Mike_Ratledge,1:372/888 +0046,Juliet_Mail_System,Amiga,Packer,Gregory_Kritsch,1:163/109.30 +0047,Jabberwocky,Macintosh,Packer,Eric_Larson,1:2605/620 +0048,XST,MS-DOS,Packer,Wayne_Michaels,1:380/100 +0049,MailStorm,Amiga,Packer,Russel_Miranda,1:268/106 +004A,BIX-Mail,????,Mailer,Bob_Hartman,1:104/501 +004B,IMAIL,MS-DOS,Packer,IMAIL_INC.,2:246/47 +004C,FTNGate,MS-DOS,Packer,Jason_Steck,1:104/424 +004D,RealMail,MS-DOS,Packer,Taine_Gilliam,1:372/42 +004E,Lora-CBIS,MS-DOS,Mailer,Marco_Maccaferri,2:332/402 +004F,TDCS,PDP-11,Packer/mailer,Terry_Ebdon,2:254/6 +0050,InterMail,MS-DOS,Packer/mailer,Peter_Stewart,1:369/35 +0051,RFD,MS-DOS,Packer,Doug_Belkofer,1:234/10 +0052,Yuppie!,MS-DOS,Packer,Leo_Moll,2:242/2 +0053,EMMA,MS-DOS,Packer,Johan_Zwiekhorst,2:292/100 +0054,QBoxMail,QDOS,Packer/mailer,Jan_Bredenbeek,2:283/500 +0055,Number_4,MS-DOS,Packer/mailer,Ola_Garstad,2:502/15 +0056,Number_5,MS-DOS,Packer/mailer,Ola_Garstad,2:502/15 +0057,GSBBS,MS-DOS,Packer,Michelangelo_Jones,1:260/244 +0058,Merlin,MS-DOS,Packer/mailer,Mark_Lewis,2:258/25 +0059,TPCS,MS-DOS,Packer,Mikael_Kjellstrom,2:201/211 +005A,Raid,MS-DOS,Packer,George_Peace,1:270/101 +005B,Outpost,MS-DOS,Packer/mailer,Mike_Dailor,???? +005C,Nizze,MS-DOS,Packer,Tomas_Nielsen,2:205/202 +005D,Armadillo,Macintosh,Packer,Erik_Sea,1:221/109 +005E,rfmail,Unix,Packer/mailer,Per_Lindqvist,2:201/332 +005F,Msgtoss,MS-DOS,Packer,Mike_Zakharoff,1:343/36 +0060,InfoTex,MS-DOS,Packer/mailer,Jan_Spooren,2:292/852 +0061,GEcho,MS-DOS,Packer,Gerard_van_der_Land,2:283/555,951209 +0062,CDEhost,MS-DOS,Packer,Dennis_D'Annunzio,1:379/28 +0063,Pktize,MS-DOS,Packer,Joaquim_Homrighausen,2:270/17 +0064,PC-RAIN,MS-DOS,Packer/mailer,Ray_Hyder,1:272/40 +0065,Truffle,MS-DOS/OS2,Mailer,Mike_Rissa,2:504/59 +0066,Foozle,Amiga,Packer,Peer_Hasselmeyer,2:247/4 +0067,White_Pointer,Macintosh,Packer/mailer,Alastair_Rakine,3:680/820 +0068,GateWorks,MS-DOS,Packer,Jamie_Penner,1:153/1025 +0069,Portal_of_Power,MS-DOS,Mailer,Soren_Ager,2:230/12 +006A,MacWoof,Macintosh,Packer/mailer,Craig_Vaughan,1:109/342 +006B,Mosaic,MS-DOS,Packer,Christopher_King,1:103/315 +006C,TPBEcho,MS-DOS,Packer,Gerd_Qualmann,2:242/1 +006D,HandyMail,MS-DOS,Packer/mailer,jim_nutt,1:114/30 +006E,EchoSmith,MS-DOS,Packer,Noel_Crow,1:170/409 +006F,FileHost,MS-DOS,Packer,Mark_Cole,2:252/186 +0070,SFTS,MS-DOS,Packer,Bruce_Anderson,1:3402/6 +0071,Benjamin,MS-DOS,Packer/mailer,Stefan_Graf,2:245/4.5436 +0072,RiBBS,OS9_(COCO),Packer/mailer,Ron_Bihler,1:104/54 +0073,MP,MS-DOS,Packer,Ivan_Leong,6:600/28 +0074,Ping,MS-DOS,Packer,David_Nugent,3:632/348 +0075,Door2Europe,MS-DOS,Packer/mailer,Michaela_Schoebel,2:247/14 +0076,SWIFT,MS-DOS,Packer/mailer,Hanno_van_der_Maas,2:500/2 +0077,WMAIL,MS-DOS,Packer,Silvan_Calarco,2:334/100.2 +0078,RATS,MS-DOS,Packer,Jason_DeCaro,1:260/205 +0079,Harry_the_Dirty_Dog,OS2,Mailer/packer,George_Edwards,3:632/340.7 +007A,Maximus-CBCS,MS-DOS/OS2,Packer,Scott_Dudley,1:249/106 +007B,SwifEcho,MS-DOS,Packer,Dana_Bell,1:3801/8 +007C,GCChost,Amiga,Packer,Davide_Massarenti,2:332/505.3 +007D,RPX-Mail,MS-DOS,Packer,Joerg_Wirtgen,2:241/4034 +007E,Tosser,MS-DOS,Packer,Albert_Ng,6:700/185 +007F,TCL,MS-DOS,Packer,Ulf_Hedlund,2:201/602 +0080,MsgTrack,MS-DOS,Packer,Andrew_Farmer,1:243/1 +0081,FMail,MS-DOS/DOS_DPMI/OS2/WIN32,Packer,Folkert_Wijnstra,2:283/619 +0082,Scantoss,MS-DOS,Packer,Michael_Matter,2:243/44.3443 +0083,Point_Manager,Amiga,Packer,Pino_Aliberti,2:335/602.2,,19931012 +0084,IMBINK,MS-DOS,Packer,Mike_Hartmann,2:246/48 +0085,Simplex,MS-DOS/OS2,Packer,Chris_Laforet,1:152/401 +0086,UMTP,MS-DOS,Packer,Byron_Copeland,1:272/26 +0087,Indaba,MS-DOS,Packer,Pieter_Muller,5:7102/11 +0088,Echomail_Engine,MS-DOS,Packer,Joe_Jared,1:103/200 +0089,DragonMail,OS2,Packer,Patrick_O'Riva,1:143/37 +008A,Prox,MS-DOS,Packer,Gerhard_Hoogterp,2:283/1.2 +008B,Tick,MS-DOS/OS2,Packer,Barry_Geller,1:266/12 +008C,RA-Echo,MS-DOS,Packer,Roger_Kirchhoff,2:245/4 +008D,TrapToss,Amiga,Packer,Maximilian_Hantsch,2:310/6 +008E,Babel,MS-DOS/OS2,Packer,Jorgen_Abrahamsen,2:230/100.9 +008F,UMS,Amiga,Packer,Martin_Horneffer,2:242/7.9 +0090,RWMail,MS-DOS,Packer,Remko_Westrik,2:285/309.5 +0091,WildMail,MS-DOS,Packer,Derek_Koopowitz,1:161/502 +0092,AlMAIL,MS-DOS,Packer,Alan_Leung,1:348/207 +0093,XCS,MS-DOS,Packer,Rudi_Kusters,2:512/34.4 +0094,Fone-Link,MS-DOS,Packer/mailer,Chris_Sloyan,1:269/602 +0095,Dogfight,MS-DOS,Packer,Chris_Tyson,2:256/36 +0096,Ascan,MS-DOS,Packer,Arjen_van_Loon,2:281/1.397 +0097,FastMail,MS-DOS,Packer,Jan_Berends,2:282/5 +0098,DoorMan,MS-DOS,Mailer,Christopher_Dean,1:105/70 +0099,PhaedoZap,Atari_ST,Packer,Jeff_Mitchell,1:229/422 +009A,SCREAM,MS-DOS,Packer/mailer,Jem_Miller,1:147/33 +009B,MoonMail,MS-DOS,Packer/mailer,Hasse_Wigdahl,2:206/101 +009C,Backdoor,Sinclair_QL,Packer,Erik_Slagter,2:283/500.3 +009D,MailLink,Archimedes,Packer/mailer,Jan-Jaap_v._d._Geer,2:500/133.1138 +009E,Mail_Manager,MS-DOS,Packer,Andreas_Brodowski,2:241/4006 +009F,Black_Star,Xenix_386,Packer/mailer,Jac_Kersing,2:283/333 +00A0,Bermuda,Atari_ST/MS-DOS,Packer,Jac_Kersing,2:283/333 +00A1,PT,MS-DOS,Packer/mailer,Jerry_Andrew,1:109/426 +00A2,UltiMail,MS-DOS,Mailer,Brett_Floren,1:363/1000 +00A3,GMD,MS-DOS,Packer,John_Souvestre,1:396/1 +00A4,FreeMail,MS-DOS,Packer,Chad_Nelson,1:109/536 +00A5,Meliora,MS-DOS,Packer,Erik_van_Riper,1:107/230 +00A6,Foodo,CPM-80,Packer/mailer,Ron_Murray,3:690/640.7 +00A7,MSBBS,CPM-80,Packer,Marc_Newman,1:106/601 +00A8,Boston_BBS,MS-DOS,Packer/mailer,Tom_Bradford,1:101/625 +00A9,XenoMail,MS-DOS,Packer/mailer,Noah_Wood,1:284/14 +00AA,XenoLink,Amiga,Packer/mailer,Jonathan_Forbes,1:250/642 +00AB,ObjectMatrix,MS-DOS,Packer,Roberto_Ceccarelli,2:332/305.1 +00AC,Milquetoast,Win3/MS-DOS,Mailer,Vince_Perriello,1:343/491 +00AD,PipBase,MS-DOS,Packer,Roberto_Piola,2:334/306 +00AE,EzyMail,MS-DOS,Packer,Peter_Davies,3:636/204 +00AF,FastEcho,MS-DOS,Packer,Tobias_Burchhardt,2:245/39 +00B0,IOS,Atari_ST/TT,Packer,Rinaldo_Visscher,2:280/3.1 +00B1,Communique,MS-DOS,Packer,Ian_Harris,3:620/251 +00B2,PointMail,MS-DOS,Packer,Michele_Clinco,2:331/302.11 +00B3,Harvey's_Robot,MS-DOS,Packer,Harvey_Parisien,1:249/114 +00B4,2daPoint,MS-DOS,Packer,Ron_Pritchett,1:376/74 +00B5,CommLink,MS-DOS,Mailer,Steve_Shapiro,1:382/35 +00B6,fronttoss,MS-DOS,Packer,Dirk_Astrath,2:241/5603 +00B7,SysopPoint,MS-DOS,Packer,Rudolf_Heeb,2:243/44 +00B8,PTMAIL,MS-DOS,Packer,Arturo_Krogulski,2:341/27.7 +00B9,MHS,MS-DOS/OS2/WINNT,Packer/mailer,Matthias_Hertzog,2:301/402,,19940310 +00BA,DLGMail,Amiga,Packer,Steve_Lewis,1:114/52 +00BB,GatePrep,MS-DOS,Packer,Andrew_Allen,1:382/92 +00BC,Spoint,MS-DOS,Packer,Conrad_Thompson,1:130/29.106 +00BD,TurboMail,MS-DOS,Packer,B._J._Weschke,1:2606/403 +00BE,FXMAIL,MS-DOS,Packer,Kenneth_Roach,1:208/401 +00BF,NextBBS,MS-DOS,Packer/mailer,Tomas_Hood,1:352/777 +00C0,EchoToss,MS-DOS,Packer,Mikel_Beck,1:107/218 +00C1,SilverBox,Amiga,Packer,David_Lebel,1:240/516 +00C2,MBMail,MS-DOS,Packer,Ruud_Uphoff,2:500/116.1928 +00C3,SkyFreq,Amiga,Packer,Luca_Spada,2:331/106 +00C4,ProMailer,Amiga,Mailer,Ivan_Pintori,2:335/311.21 +00C5,Mega_Mail,MS-DOS,Packer/mailer,Mirko_Mucko,2:242/94 +00C6,YaBom,MS-DOS,Packer,Berin_Lautenbach,3:620/248 +00C7,TachEcho,MS-DOS,Packer,Tom_Zacios,1:107/376 +00C8,XAP,MS-DOS,Packer,Jeroen_Smulders,2:512/1.8 +00C9,EZMAIL,MS-DOS,Packer,Torben_Paving,2:234/41 +00CA,Arc-Binkley,Archimedes,Mailer,Geoff_Riley,2:250/208 +00CB,Roser,MS-DOS,Packer,Chan_Kafai,6:700/158 +00CC,UU2,MS-DOS,Packer,Dmitri_Zavalishin,2:5020/32 +00CD,NMS,MS-DOS,Packer/mailer,Michiel_de.Bruijn,2:285/505.2 +00CE,BBCSCAN,Archimedes,Packer/mailer,E._G._Snel,2:512/222.17 +00CF,XBBS,MS-DOS,Packer,Mark_Kimes,1:380/16 +00D0,LoTek_Vzrul,,Packer/mailer,Kevin_Gates,gates@sasknet.sk.ca,19951229,20000122 +00D1,Private_Point_Project,MS-DOS,Packer,Oliver_von_Bueren,2:301/701 +00D2,NoSnail,MS-DOS,Packer,Eddie_Rowe,1:19/124 +00D3,SmlNet,MS-DOS,Packer,Steve_T._Gove,1:106/6 +00D4,STIR,MS-DOS,Packer,Paul_Martin,2:250/107.3 +00D5,RiscBBS,Archimedes,Packer,Carl_Declerck,2:292/500.10 +00D6,Hercules,Amiga,Packer/mailer,Andrew_Gray,1:231/590 +00D7,AMPRGATE,MS-DOS,Packer/mailer,Mike_Bilow,1:323/120.1 +00D8,BinkEMSI,MS-DOS,Mailer,Tobias_Burchhardt,2:245/39 +00D9,EditMsg,MS-DOS,Packer,G._K._Pace,1:374/26 +00DA,Roof,Amiga,Packer,Robert_Williamson,1:167/104 +00DB,QwkPkt,MS-DOS,Packer,Ross_West,1:250/412 +00DC,MARISCAN,MS-DOS,Packer,Mario_Elkati,2:341/14.9 +00DD,NewsFlash,MS-DOS,Packer,Chris_Lueders,2:241/5306 +00DE,Paradise,MS-DOS,Packer/mailer,Kenneth_Wall,1:300/5 +00DF,DogMatic-ACB,N/A,Packer/mailer,Martin_Allard,2:245/48 +00E0,T-Mail,MS-DOS,Packer/mailer,Andy_Elkin,2:5030/15 +00E1,JetMail,Atari_ST/STE/TT,Packer,Daniel_Roesen,2:243/93.8 +00E2,MainDoor,MS-DOS,Packer/mailer,Francisco_Sedano,2:341/20 +00E3,Starnet_Products,MS-DOS/OS2,Mailer/Packer,Starnet_Software_Development,1:102/925,,19951209 +00E4,BMB,Amiga,Packer,Dentato_Remo,2:335/311.33 +00E5,BNP,MS-DOS,Packer,Nathan_Moschkin,1:109/427 +00E6,MailMaster,MS-DOS,Packer/mailer,Gary_Murphy,1:130/85 +00E7,Mail_Manager_+Plus+,MS-DOS,Packer,Chip_Morrow,1:226/1240 +00E8,BloufGate,Atari_ST/Unix,Packer,Vincent_Pomey,2:320/100.2 +00E9,CrossPoint,MS-DOS,Packer/mailer,Peter_Mandrella,2:2454/97.80,19920713,19960601 +00EA,DeltaEcho,MS-DOS,Packer,Mikael_Staldal,2:201/337 +00EB,ALLFIX,MS-DOS,Packer,Harald_Harms,2:512/145 +00EC,NetWay,Archimedes,Mailer,Steve_Haslam,2:250/116.3 +00ED,MARSmail,Atari_ST,Packer,Folkert_val_Heusden,2:285/750.2,,19940122 +00EE,ITRACK,MS-DOS/OS2,Packer,Frank_Prade,2:2480/55,,19990119 +00EF,GateUtil,MS-DOS,Packer,Michael_Skurka,1:397/2.1 +00F0,Bert,MS-DOS,Packer/mailer,Arnim_Wiezer,2:241/2104.9 +00F1,Techno,MS-DOS,Packer,Patrik_Holmsten,2:203/133 +00F2,AutoMail,MS-DOS,Packer,Mats_Wallin,2:201/239 +00F3,April,Amiga,Packer,Nick_de_Jong,2:282/309.3 +00F4,Amanda,MS-DOS,Packer,David_Douthitt,1:121/99.14 +00F5,NmFwd,MS-DOS,Packer,Alberto_Pasquale,2:332/504 +00F6,FileScan,MS-DOS,Packer,Matthias_Duesterhoeft,2:241/4512.2 +00F7,FredMail,MS-DOS,Packer,Michael_Butler,3:712/515 +00F8,TP_Kom,MS-DOS,Packer/mailer,Per_Sten,2:201/124 +00F9,FidoZerb,MS-DOS,Packer,Ulrich_Schlechte,2:241/3410.12 +00FA,!!MessageBase,MS-DOS,Packer/mailer,Holger_Lembke,2:240/500.20 +00FB,EMFido,Amiga,Packer,Gary_Glendown,2:249/3.999 +00FC,GS-Toss,MS-DOS,Packer,Marco_Bungalski,2:241/2021 +00FD,QWKDoor,Atari_ST,Packer,Christian_Limpach,2:270/20.1 +00FE,No_product_id_allocated,Any,Packer,No_Author,3:3/20 +00FF,16-bit_product_id,Any,Packer/Mailer,No_Author,3:3/20 +0100,Reserved,None,None,No_Author,3:3/20,19951209 +0101,The_Brake!,Mailer,John_Gladkih,2:5051/16,19951209 +0102,Zeus_BBS,Amiga,Mailer,Alex_May,2:441/58.0,19951209 +0103,XenoPhobe-Mailer,Msdos/Windows/OS2/Linux,Mailer,Peter_Kling,1:374/969.0,19951209 +0104,None,None,None,None,0:0/0, +0105,Terminate,Msdos/Os2/Windows,Mailer/Packer,SerWiz_Comm_&_Bo_Bendtsen,2:254/261,19951209 +0106,TeleMail,Msdos,Mailer/Packer,Juergen_Weigelt,2:2453/900,19951209 +0107,CMBBS,Msdos/Os2,Mailer/Packer,Christof_Engel,2:2490/5110,19951209 +0108,Shuttle,Windows,Mailer/Packer,MCH_Development_&_Marvin_Hart,1:106/500,19951209 +0109,Quater,Amiga,Mailer,Felice_Murolo,2:335/206,19951209 +010A,Windo,Windows,Mailer,Alan_Chavis,1:147/55,19951209 +010B,Xenia,Msdos/Os2,Mailer,Arjen_Lentz,2:283/512,19960601 +010C,GMS,AmigaOS,Mailer,Mirko_Viviani,2:331/213,19960601 +010D,HNET,Msdos,???,Pedro_Jaramillo,1:102/160,19960601 +010E,Shotgun_Professional,Msdos,???,Brent_Shellenberg,1:140/146,19960621 +010F,SLIPgate,Msdos,???,Kieran_Morrissey,3:634/376,19960723 +0110,BBBS,MSDOS/OS2/NT/Amiga/Unix,Mailer/Packer,Kim_Heino,2:22/222,19980216 +0111,NewsGate,Windows/NT,Packer/Gateway,Leilo_denna_Pietra,2:335/244,19980216 +01FF,BBBS,MSDOS/OS2/NT/Amiga/Unix,Mailer/Packer,Kim_Heino,2:22/222,19980216 +02FF,NewsGate,Windows/NT,Packer/Gateway,Leilo_denna_Pietra,2:335/244,19980216 +03FF,Ravel,Macintosh,Mailer/Packer,Cyril_Moorzin,2:5030/700,19980310 +04FF,Beemail,Windows,Mailer/Packer,Andrius_Cepaitis,2:470/1,19980310 +05FF,QuickToss,DOS,Packer,Sandra_Godinez,1:387/601.3,19980310 +06FF,SpaceMail,???,Mailer,Andreas_Habicht,2:244/6121,19980710 +07FF,Argus,Windows/NT,Mailer,Max_Masyutin,2:469/84,19990216 +08FF,Hurricane,Windows/NT/Solaris,Packer,Paul_Walker,2:254/175.44,19990216 +09FF,Hub_Mailer,OS2,Mailer,Viatcheslav_Odintsov,2:5020/181,19990216 +0AFF,FDInt,MSDOS,Packer,Colin_Turner,2:443/13,19990216 +0BFF,GPMail,OS2,Mailer,Igor_Vanin,2:5030/448,19990216 +0CFF,FTrack,NT/OS2,Tracker,Fyodor_Ustinov,2:5020/79,19990313 +0DFF,Nice_Tosser,DOS/OS2/Win32,Tosser,Robert_Agababyan,2:5020/234.1,19990518 +0EFF,LuckyGate,DOS/OS2/Linux,Packer,Pavel_Gulchouck,2:463/68,19990709 +0FFF,McMail,DOS,Mailer,Simon_Slater,2:443/777,20000102 ++ +Go Back + + + + diff --git a/html/ftsc/index.htm b/html/ftsc/index.htm index 67b0176f..17e35ed7 100644 --- a/html/ftsc/index.htm +++ b/html/ftsc/index.htm @@ -1,4 +1,5 @@ + @@ -94,7 +95,7 @@ Michiel Broek.