home *** CD-ROM | disk | FTP | other *** search
- FSC-0024 - A Proposal for a Type-3 Mail Bundle - Oliver McDonald
-
-
-
-
- Notes on Type three bundlers. Notes on Type three bundlers.
-
- The first important note is that without Wynn Wagner's
- work on FTSC-0014, none of this would have come to fruition.
- I owe him a great debt in this area, as well as the debt for
- Opus itself that got me into this. Thanks Wynn.
-
- Type 3 bundlers offer opportunities for new levels of
- sophistication in mail processing. As the first step Aurora
- Computer Technologies plans to provide the minimum specified
- by the existing Type 3 bundle specifications with one minor
- addition. This addition is the inclusion of the features of
- ReMapper. This addition is not a required inclusion for
- other software authors producing a Type 3 bundler.
-
- To sum up, standard required features are:
-
- Must be able to create and unbundle Type 2 Bundles (See
- FSC-0001)
- Must be able to create and unbundle Type 3 Bundles (See
- attached)
- Must be able to Toss EchoMail from either Type 2 OR 3
- bundles
- Must generate an update-required message for the sysop if
- the MinorVersion changes.
- Must generate an update-required message if it encounters
- a misc packet type it does not recognize.
-
- Initial optional features are:
-
- May Duplicate the functionality of ReMapper.
- May automatically generate an F.Req. from source of bundle
- when the minor version changes.
- May generate an F.Req from source of bundle if it
- encounters a misc packet type it does not recognize.
- All error messages are placed in Matrix Mail messages to
- the Sysop.
- Will create outbound bundles on the fly from the inbound
- bundle. Does not need to scan these messages. Note, if
- this option is exercised it is IMPERATIVE that the areas
- are scanned prior to the unbundle process.
-
- Type 3.0 proposal (preliminary) Type 3.0 proposal (preliminary)
-
- This proposal allows for automatic updating of the Type
- 3 bundle to allow for further revisions and enhancements.
- Thus we will refer to it as a Type 3.0 with further versions
- becoming Type 3.1 etc.
-
- All multi-byte data forms (int/long) are considered to
- have the MSB first and the LSB last. Int is two bytes, and
- Long is four.
-
-
-
-
-
-
- Bundle Header Bundle Header
-
- struct _BundleHeader {
- struct _Address B_Destination;
- struct _Address B_Origination;
- unsigned nybble B_BundlerVersionMajor;
- unsigned nybble B_BundlerVersionMinor;
- unsigned byte B_ProductCode;
- unsigned byte B_VersionMinor;
- unsigned byte B_VersionMajor;
- unsigned long B_CreationTime;
- unsigned byte B_Password[8];
- };
-
- Bundle Header Notes
-
- This works out to 32 bytes which is a nice size to work
- with.
-
- Here follows a short explanation for each field:
-
- "B_BundlerVersionMajor/Minor" provide for version
- numbers from 0.0 to 16.16, this should be enough for all
- except TJ.
-
- "B_ProductCode" is the FTSC assigned product code.
- This can be used to identify just which type 3 bundler
- created the bundle; it should not be considered an error if
- this is unidentified, and need not be processed on
- unbundling but MUST be included _correctly_ at the bundling
- stage.
-
- "B_VersionMinor" is a version number that will
- initially start at Zero and is used to allow non backward
- compatible changes to Type 3 bundles, such as header length
- change. If this is LOWER in the bundle than the
- corresponding version number in the unbundler it should
- abend. It is suggested that a short message be written to
- the Sysop in NETMAIL with as much information gleaned from
- the header as possible. (All info up to and including
- "B_VersionMajor".)
-
- "B_VersionMajor", always 3. This and all data prior to
- this point is position dependant and will never be changed
- in future Type 3.0 bundle revisions.
-
- "B_CreationTime" is an Unix 1970 based creation time
- indicating the time/date the bundle was created.
-
- "B_Password" is a NULL padded character array that may
- contain uppercase alpha bytes or ASCII digits. It should
- not contain lowercase characters, punctuation, control
- characters etc. A maximum of 8 characters are significant.
-
-
-
-
-
-
- Struct _Address Struct _Address
-
- struct _Address {
- unsigned int Zone;
- unsigned int Net;
- unsigned int Node;
- unsigned int Point;
- };
-
- struct _AddressShort {
- unsigned int Net;
- unsigned int Node;
- };
-
- Bundle Footer Bundle Footer
-
- Struct _BundleEnd {
- Unsigned Byte E_Packet_Type /* Always 0 *
- /
- };
-
- Bundle Footer notes.
-
- All bundles end with this packet. It is not optional
- and the packet should be considered grundged if it is
- missing.
-
- Area header Area header
-
- Struct _AreaHeader
- Unsigned byte E_Packet_Type /* Always 1 */
- Unsigned byte E_NameLength /* Actual bytes
- in E_NAME */
- Unsigned Byte E_Name[1] /* Variable
- length field */
-
- Area Header Notes
-
- The area header packet marks the start of a sequence of
- messages destined to the same message area. The area
- indicated in the Area Header will remain valid until either
- the end of the bundle OR another Area Header is encountered.
-
- E_Name will usually contain the area name of the echo
- area that subsequent messages should go. If E_NameLength is
- zero then the subsequent messages should go the NetMail
- area. Any messages that occur prior to the first Area
- Header in a bundle should also go to the Netmail area.
-
- The Maximum value for E_NameLength is 63.
-
- E_Name is NOT null terminated.
-
-
-
-
-
-
- Message Header Message Header
-
- Struct _MessageHeader {
- Unsigned byte M_Packet_Type /* Always 2 */
- Struct _Address M_Destination /* Final
- Destination */
- Struct _Address M_Origin /* Where the
- message was entered */
- Unsigned Long M_CreationTime /* When the
- message was entered */
- Unsigned int M_Attributes /* FTSC
- bitweights */
- Unsigned byte M_FromLength
- Unsigned byte M_ToLength
- Unsigned byte M_SubLength
- Unsigned byte M_From[1]
- Unsigned byte M_To[1]
- Unsigned byte M_Sub[1]
- };
-
- Message Header Notes
-
- Every message begins with a message header packet. It
- should be created by the system where the message
- originated. If there are any intermediate stops along the
- way it is the responsibility of the intermediate systems
- along the way to maintain all of the information without
- modification.
-
- None of M_From, M_To, or M_Sub are to be NULL
- terminated.
-
- Message Body Message Body
-
- Struct _Text {
- Unsigned byte T_Packet_Type /* Always 3 */
- Unsigned int T_ByteCount /* # of bytes (
- < 0x1000 ) */
- Unsigned byte T_Data[1] /* Variable
- length field */
-
- Message Body Notes:
-
- The message body is considered one or more _Text
- packets.
-
- No _Text packet will be more that 1000H bytes long
- (that's 4096 to the terminally base 10 folks). Of course
- there may be a near infinite number of _Text packets per
- bundle/Message header, but you are absolutely positively
- guaranteed that with the type 3.x method you will never need
- a buffer larger than 1000H.
-
-
-
-
-
-
- In addition to ASCII values 20h through 7Eh (inclusive)
- the following control codes are legal for TEXT data. Note
- that <CR> and <softCR> are NOT in this list, thus type three
- packers will eliminate spurious 0Dh's.
-
- <LF> 0Ah Forced
- <CR>/<LF>
- <dle> 10h Replicate
-
- Other control characters and values 7Fh and above are
- symptomatic of a grundged message.
-
- Replicate is a three byte sequence: <dle> <value>
- <length>. For example if a packet contains the bytes 10h,
- 20h, 09h it should be expanded in the message body as nine
- <space> characters.
-
- There is no minimum or maximum line length, it is
- assumed that the reader can supply the appropriate line
- wraps.
-
- One "line" of a message may cross from one _Text packet
- to another.
-
- EchoMail: EchoMail:
-
- Struct _EchoMailInfo {
- Unsigned byte EI_Packet_Type /* Always 4 */
- Struct _EID EI_Parent /* Up message
- thread */
- Struct _EID EI_Child /* Down message
- thread */
- Unsigned byte EI_SeenByCount
- Unsigned byte EI_PathCount
- Struct _AddressShort EI_SeenBy[1]
- Struct _Address EI_Path[1]
- );
-
- EchoMail notes:
-
- The EI_Child and EI_Parent fields are used to
- reconstruct the message thread.
-
- Type 3 bundles uses binary seenby and path information,
- but should convert to a normal seenby/path in the unbundled
- messages. If the auto-rebundleing is used it is not
- necessary to process the seenby's into the unpacked
- messages. It is suggested that if this approach is used it
- is HEAVILY tested prior to implementation, and that it still
- store the data somewhere for retrieval in case of unresolved
- dupe problems.
-
-
-
-
-
-
- Cargo Info. Cargo Info.
-
- Struct _PointInfo {
- Unsigned byte CI_Packet_Type /* always 05h
- */
- Unsigned byte CI_File Count /* Number of
- files */
- Unsigned byte CI_FileName[1] /* Filenames
- (10 bytes */
- };
- Cargo Info Notes
-
- The Cargo info packet will only be found in a Type 3
- arcmail bundle that contains files. It will always be the always
- second packet in a bundle.
-
- Node info Node info
-
- Struct _NodeInfo
- Unsigned byte NI_Packet_Type /* always 06h *
- /
- Unsigned int NI_Flags /* Flags for
- node */
- };
-
- This packet is sent to a Type 3.x node in the first
- bundle to be sent to that node. The bundler should detect
- that the node can accept a Type 3.x bundle from a nodelist
- flag. It will automatically generate this packet at that
- point. Should a type 3.x bundle come from a node that is
- not identified in the nodelist as type 3.x capable the
- bundler should mark that node as Type 3.x capable and
- generate a warning message.
-
- NI_Flags, is a bit mapped field that identifies the
- characteristics of the node. Some of this information will
- duplicate that information found in the nodelist. This is
- used as a check.
-
- Bit: Meaning:
-
-
- 0: Type 3
- 1: Packing Protocol Bits.
- 2: " " "
- 3: " " "
- 4: |Bits 3 & 4 are used together
- 5: |to determine mail handleing.
- 6: Ingate
- 7: OutGate
- 8: Net Host
- 9: Net Hub
- A: <Reserved>
- B: <Reserved>
-
-
-
-
-
-
- C: <Reserved>
- D: <Reserved>
- E: Sent info
- F: Got Info
-
- Bits 1, 2, & 3 are used to determine how mail may be
- packed for this node (SEA, PKWare, ZOO)
-
- Bits 1 & 2 & 3: Meaning:
- 000: No packing.
- 001: SEA Archive format.
- 011: PKWare LZW packing format.
- 100: ZOO Compression system.
-
- Note that these bits were intended to be combined, so
- that if a node could handle ZOO and SEA Archives it would
- set the bits to '101'. Since by definition PKWare can
- handle SEA format Arc's it is considered standard to set
- both bits for a PKWare capable system.
-
- Bits 4 and 5 are used to determine how mail should be
- sent to this node (CM, hold, direct)
-
- Bit 4 & 5: Meaning:
-
- 00: Direct
- 01: Continous
- 11: Hold
-
- The sysop should be able to clear the sent info bit
- should the status of his system change (ie becomeing an NC).
- Zone gates may be identified by the fact that they are in
- Net 1 and they are both an ingate and an outgate. The zone
- they are the gate for is identified by their node number.
-
- MiscInfo (IFNA Kludge). MiscInfo (IFNA Kludge).
-
- Struct _MiscInfo {
- Unsigned byte MI_Packet_Type /* Always 06h -
- FFh, assigned by FTSC */
- Unsigned byte MI_ByteCount /* # of bytes
- of miscinfo */
- Unsigned Byte MI_WhoKnows[1] /* Misc Stuff
- */
- };
-
- MiscInfo Notes:
-
- The Misc info packet(s) are the last packets associated
- with a message, there may be more than one in extreme
- circumstances, but this should prove to be unlikely. The
- bundler must retain any information in these packets
- unchanged if it is a routed message.
-
-
-
-
-
-
- This is a catch all packet that replaces the dreaded
- IFNA kludge. It is designed to only be used as an interim
- method. At present all IFNA kludges are handled in other
- special purpose packets, it is foreseen that any further
- kludges will be handled only by miscinfo packets until the
- Type 3.x bundle specification can be updated and coded to
- handle the new data.
-
- MiscInfo packets in the range 80h - F0h should be
- preserved if not understood. It should be considered an
- error condition to find a MiscInfo packet with in the range
- 04h - 7Fh, this range is reserved for future expansions on
- Type 3 packets. Packets in the range F1h - FFh should be
- unpacked AND a warning message should be generated. These
- numbers will be used on an extremely temporary basis as they
- are designed for ESSENTIAL IFNA kludges and will be added
- into the Type 3.x specification as quickly as possible.
-
- Arcmail and Type 3.x Arcmail and Type 3.x
-
- Type 3.x bundlers support arcmail much the same way
- that the type 2 bundlers do. There are some enhancements in
- the arcmail naming scheme however, that help reduce system
- overhead for routed mail.
-
- For arcmail destined for type 2 based systems the old
- reliable method of arcmail file naming will be used, IE:
-
- NNNNnnnn.ww#
-
- Where NNNN is a four hex digit net number, nnnn is a
- four hex digit node number, ww is a two character weekday-
- name identifier, and # is the packet number for that day.
- Type 3.x packers SHOULD generate the day name correctly
- rather than the OMMM 1.08 cyclic method.
-
- Here follows a suggested Type 3.x ArcMail naming
- scheme, basically a modification of Roeland Meyer's original
- proposal. I have been made aware that Roeland has some
- things to say on this, but there seems to be a
- communications break between us, so until I can contact him
- I will stick with this.
-
- For Arcmail destined to a Type 3.x system (with Type
- 3.x bundles internally), a variation of the method first
- proposed by Roeland Meyer will be used. Here follows a
- quick synopsis:
-
- New address specifier (Re-edited by Oliver McDonald)
- This is designed for the Type 3.0 Arcmail naming convention
- of:
-
- ZZNNNOOO.Fxx
- | | | ||
-
-
-
-
-
-
- | | | |`----> Incremental sequence number, base 10, max
- = 99d
- | | | | Starts at 00 and counts to '99' then
- wraps
- | | | | back to 00. No "Day-of-week" info.
- | | | | This is strictly to avoid bundle
- collisions.
- | | | | An 'empty' version of the bundle is
- kept
- | | | | around to help the router remember
- what the
- | | | | last sequence number was.
- | | | |
- | | | `-----> Flag to indicate bundle type
- | | | Allowed values:
- | | | 'All non-specified flags are
- reserved.
- | | | 'U' - ZOO File bundle
- | | | 'V' - ZOO Mail only bundle for a
- Point.
- | | | 'W' - ZOO Mail only bundle
- | | | 'X' - File bundle
- | | | 'Y' - Mail only bundle for a
- point.
- | | | 'Z' - Mail only bundle
- | | | For files with the 'Y' flag it is
- | | | sent as per normal until it reaches
- the
- | | | node specified by the arcname. At
- this
- | | | point the node will unarc the FIRST
- bundle
- | | | in the arc, and read the Message
- Header,
- | | | and then attach the bundle to the
- point
- | | | specified.
- | | | For File bundles if the files are to
- be
- | | | forwarded, the node will unarc the
- bundle
- | | | in the arc. It will check the
- message header
- | | | for address (match against name),
- and will open
- | | | the Cargo Info Bundle, and attach
- those files
- | | | to the destination.
- | | | Note: If the addresses do not
- match it considered
- | | | an error to forward the files.
- | | | Note: The point address is not
- considered for
- | | | matching purposes.
-
-
-
-
-
-
- | | |
- | | `--------> Node address, base 36, max = 56,654d
- | | Allowed values: '000' to 'ZZZ'
- | | This is the Node part of the
- destination
- | | address of the bundle.
- | | Special values:
- | | '000'- Destination is the Net Host
- given by
- | | ZNNN, not forwarded to any
- Nodes.
- | | 'ZZZ'- This a broadcast bundle to
- ALL Nodes
- | | in the Net given by ZNNN,
- as
- | | well as, the Net Host given
- by same.
- | |
- | `-----------> Net address, base 36, max = 55,654d
- | Allowed values: '000' to 'ZZZ'
- | This is the Net part of the
- destination
- | address of the bundle.
- | Special values:
- | '000' - Destination is the
- ZoneGate given by
- | ZZ, not forwarded to any
- Nets.
- | 'ZZZ' - This a broadcast bundle to
- ALL Nets
- | in the Zone given by ZZ,
- as well as,
- | the ZoneGate given by
- same.
- |
- `--------------> Zone address, base 36, max = 1,294d
- Allowed values: '00' to 'ZZ'
- This is the Zone part of the
- destination
- address of the bundle.
- Special values:
- '00' - Destination is the current
- ZoneGate.
- 'ZZ' - This a broadcast bundle to
- ALL
- ZoneGates given by the
- NodeList, as
- well as, the ZoneGate given
- by same.
-
- Note, Point numbers are specifically NOT included in
- the file name identifier. There were a couple of reasons
- for this; first, we wanted to allow the maximum range of
- Zone:Net/Node numbers to be available; second, anyone
-
-
-
-
-
-
- running points should not be doing so on a minimal system
- anyway.
-
- Note(2), Special bundle names (ZZZ or 000) are
- implemented optionally by the destination. You should not
- assume that it will work. A future Type 3.x spec will
- include password protection for this.
-
- The logic for providing for up to 100 packets allowable
- to a specific node is that I have seen cases of a :CM Net
- Host generating in excess of 10 messages for a node in one
- day, and the next logical number is 100.
-
- Should a Type 3.x destination fall outside the range
- available to the Type 3.x arcmail limits, then the bundler
- will fall back and use the Type 2 arcmail naming scheme.
-
- Notes on Zone Gates Notes on Zone Gates
-
- With type 3 bundles the ZoneGates software load is MUCH
- easier, all it has to do is simply forward the Type 3.x
- bundle. It is suggested that it may be VERY desirable to VERY
- have Type 3.x bundlers duplicate the functionality of the
- Zone Gate software. At the very least it is STRONGLY
- suggested that ZoneGates upgrade to Type 3.x capable
- bundlers as soon as they become available.
-
- Notes for Type 3.x Developer's: Notes for Type 3.x Developer's:
-
- The latest specs for Type 3.x will be available in the
- FTSC library at all times and at 1:342/1. Developer's who
- register with 1:342/1 will have upcoming changes netmailed
- to them as they are confirmed. Any upcoming change notices
- will have a date officially implemented. This date will
- always be in the future and should be considered an official
- release date of the new Type 3.x standard.
-
- Every attempt will be made to allow developer's a
- reasonable time period to upgrade to the new standard. It
- is important that developer's attempt to meet this date as
- these changes are usually NOT backward compatible. Code
- samples will also be F.Req'able from 1:342/1 as the magic
- file name TYPE3x where x is the latest revision to the Type
- 3 standard. Should a developer be unable to meet the
- release date he should notify the FTSC and/or 342/1
- immediately. The release date is based on an estimate made
- by Aurora Computer Technologies. If there is a good reason
- the release date will be pushed back, and ALL developers
- will be notified. As the new Type 3.x standard will not be
- official until the release date no developer will release
- his code early.
-
- On that subject, care should be taken by the developer
- to let no new format bundles escape his beta test systems.
-
-
-
-
-
-
- There are a couple of approaches we recommend for this, the
- first is to have beta test versions only generate the new
- format bundle for specific zone:net/node addresses, the
- second is to set up a completely separate private net for
- testing purposes.
-
- Release method: Since the bundler will automatically
- spread news of itself with use, a simple zero effort release
- program may be used. As different versions of the Type 3.x
- bundlers will require different operating environments, you
- should try to get your bundler made available on Echo-
- BackBone and Echo Hub systems. The reasoning behind this,
- is that it is from these systems that the existence of the
- new bundler will become common knowledge. The other place
- to send it would be the Zone, Regional, and maybe Net Co-
- ordinators.
-
- Future of Type 3 Future of Type 3
-
- Since the Type 3 format proposed provides for a new
- level of information exchange in Matrix mail I provide here
- a few advance hints of what is planned.
-
- AutoEcho built in. AutoEcho built in.
-
- Replace AutoEcho/AreaFix with automatic security. This
- security is such that the hub will not need to pick a
- password and send it in netmail to the downstream node prior
- to the downstream node requesting echos.
-
- Instead, the downstream node will request an echo, at
- which point the Hub's bundler will generate a netmail
- message to the Hub Sysop. Now the hub Sysop may decide to
- give it to him. If he does, he simply tells his bundler to
- start sending it downstream to him.
-
- Now since this last paragraph has already confused
- people, I will provide a scenario with names. Here in Net
- 342 we have our NEC as Brian McCullough (BDMc for short),
- and our REC is Steve Barnes (SB). We have BDMc requesting
- the echo NET_DEV from SB. The sequence is as follows:
-
- BDMc requests NET_DEV.
- BDMc's bundler sees this and generates the echo request
- packet.
- This packet is bundled and sent to SB.
- SB's bundler finds the bundle.
- SB's bundler sees that BDMc is authorized to have that
- echo.
- SB's Bundler generates an acknowledge packet and starts
- sending the echo to BDMc.
- BDMc's Bundler gets the acknowledge and sets up the area.
- BDMc's Bundler will use the password it was sent for
- future requests.
-
-
-
-
-
-
-
- If there was a problem with access to the requested
- echo Steve Barnes would have received a NetMail message from
- his bundler and he would be able to make a decision at this
- point. Other than that he need not even be in the country.
-
- Minor details on this, the Hub (or upstream node) can
- specify levels of permission for this autoecho request
- process, and deny certain echos to certain downstream nodes.
- If a downstream node requests a denied echo, the upstream
- node's bundler will again generate a netmail message to the
- Hub Sysop informing him of what happened.
-
- This will probably be implemented as a downward
- compatible upgrade with the request for new software
- triggered by the first request for a new echo. Note, if
- standard distribution applies this should never generate a
- request. However as things do not always work that way, the
- automatic notification and optional file request should
- solve any major problems.
-
- The Future of the Aurora Type 3 Bundler The Future of the Aurora Type 3 Bundler
-
- Fowarding of bundles that costs money. Fowarding of bundles that costs money.
-
- All forwarded bundles that will cost money will be
- marked as HOLD unless either the receiving OR the sending
- node are marked as send-to or accept-from appropriately.
- All keywords will be valid in these cases. This is a
- completely backwards compatible change.
-
- Forwarding Cost bundles from Points. Forwarding Cost bundles from Points.
-
- The forwarding of cost bundles from points will be done
- on the basis of a credit that the point has. The credit
- will be monitored in the USER.BBS file, with the record
- number corresponding to the point number. This is a
- completely backwards compatible change.
-
- Final Notes: Final Notes:
-
- Final Note: Would all those planning on writing a Type
- 3.0 bundler please contact me (Oliver McDonald) via NetMail
- (1:342/1).
-
- Final Note(2): There are already some planned
- extensions to Type 3.0, they will not be strictly required
- and will not create a new VersionMinor number, but will add
- functionality, and will when used require an update. It is
- my feeling that if you are aware of these plans, you will be
- able to integrate them better at the point they are
- "officialized". It is not my desire to become the only Type
- 3.x developer out there. It is merely my desire to be able
-
-
-
-
-
-
- to be one of them, and also to be able to make Type 3.x so
- attractive to all that everyone will want to run it.
-
- Final Note(3): Send Code (tm, Bob Hartman).
-
- Final Note(4): Convince me(tm) of suggested changes.
-
- Kudos: Kudos:
-
- Thanks to all the people in Net_Dev who have made
- suggestions and comments on this proposal as I worked on it.
- Your comments are appreciated (even those I have not used).
- I would like to especially thank the following people:
-
- Wynn Wagner III FSC-0014 and support.
- Roeland Meyer Work on ArcName routing.
- Randy Bush Suggestions and support.
- Brian McCullough Sounding board and Cattle
- Prod.
-
-