What is this document?

This version of the BBS specification has been cleaned up and updated from the version released in November of 1993. Additional information is included in several appendices.

Changes, Corrections and Open Questions

  • CTL-C not really restricted character?
  • LF not used as alternate EOL
  • Added information from AA4RE on "M in SID".
  • Added information from W0RLI on "X in SID".
  • Legal character set for BID?
  • Contributors to the original document

  • bob@arasmith.com (Bob Arasmith, N0ARY)
  • horedson@att.net (Hank Oredson, W0RLI)
  • wd6cmu@netcom.com (Eric Williams, WD6CMU)
  • enge@almaden.ibm.com (Roy Engehausen, AA4RE)
  • 71151.720@CompuServe.COM (Victor Poor, W5SMM)
  • blloyd@axion.bt.co.uk (Brian Lloyd, G1NNA)
  • map@hopper.cba.csuohio.edu (Mike Pechura, WA8BXN)
  • durham@w2xo.pgh.pa.us (James Durham, W2XO)
  • johan@ece.orst.edu (Johannes Reinalda, WG7J)
  • trentin@enac.dgac.fr (to J-P Roubelat, F6FBB)
  • sproul@sproul.com (Mark Sproul, KB2ICI)
  • mike@km6px.arasmith.com (Mike Stickney, KM6PX)
  • 70007.1365@compuserve.com (Ed Juge, W5TOO)
  • 73126.3260@compuserve.com (Craig McCartney, WA8DRZ)
  • bbr77@aol.com (Brian Riley, KA2BQE)
  • Michael Jaggers, WB4TTZ 1377 Columbia Ave, Franklin, TN 37064
  • Contributors to this update

  • horedson@att.net (Hank Oredson, W0RLI)
  • Contents

    Introduction *

  • Meta-syntactic information *
  • Characters: *
  • Character sets: *
  • Character sequences: *
  • Section 1: Establishing connection *

    Section 2: Forwarding *

  • Message Routing Header *
  • Message structure *
  • Section 3: Reverse forwarding *

    Section 4: Forwarding to old BBSs *

    Section 5: Half-Duplex links. *

    Section 6: Error Conditions *

    Section 7: BNF Summary *

  • Meta-syntactic information. *
  • Characters of interest. *
  • Character sets of interest. *
  • Character sequences of interest. *
  • System Identifier syntax. *
  • System Prompt syntax. *
  • Send Command syntax. *
  • Message syntax. *
  • Standard message identification syntax. *
  • Section 8: Feature Letter Use *

  • Feature $: *
  • Feature A: *
  • Feature B: *
  • Feature C: *
  • Feature F: <*
  • Feature H: *
  • Feature I: *
  • Feature L: *
  • Feature M: *
  • Feature R: *
  • Feature S: *
  • Feature T: *
  • Feature U: *
  • Feature X: *
  • Command Definitions and BNF description. *
  • The basic interchange (example): *
  • Section 9: Import / Export files. *

  • RFC-822 header use in import/export files. *
  • Appendix A: Discussion of BIDs and MIDs.

    Appendix B: Hierarchical Addressing Protocol.

    Appendix C: Distribution Designators

    Introduction

    This document defines the interaction between two BBS systems as they exchange messages. It is not the goal of the document to specify the interface of the future but rather to represent what a BBS system can expected to see at the current time.

    In brief the following sequence of events takes place when the systems connect for forwarding:

    Master System Slave System
    {Connect to SLAVE} (Connect from MASTER)
      [ZXF-3.21-H$]
     

    N9ZZZ >

    [RLI-19.18-HIX$]  
      >
    SB ARES @ OR < W7ZZZ $ARES0108  
      OK
    message subject  
    message routing headers  
    message body  
    Control-Z  
      >
    SB WANT @ USA < W8AAA $1029_N0XYZ  
      NO
      >
    F>  
      SP WA2ABC @ N2AAA < N9AAA
    OK  
      message subject
      message routing headers
      message body
      Control-Z
    F>  
    (Receive Disconnect) {Issue Disconnect}

    The above exchange represents a simple example of connecting, establishing a common protocol, forwarding and reverse forwarding. This document examines in detail each of these phases of the process of data interchange between packet BBS systems.

    In the text the BBS initiating the connect is referred to as the MASTER and the remote BBS to which it connects is referred to as the SLAVE.

    Each command and exchange is presented in BNF (Backus-Naur Form) which is a context-free grammar widely used to describe the syntax of formal languages. All commands and fields are case insensitive.

    Throughout this document we present a verbose translation of the grammar highlighting any points that may not be obvious but could have significant affect. There are also examples illustrating what can actually be expected in practice.

    Meta-syntactic information

    [x] Optional: zero or one x
    (x y) Grouping: treat multiple tokens as a single token
    <> Set

    Characters:

    NUL <0x00>
    CNTRL_C <0x03>
    TAB <0x09>
    CR

    <0x0D>

    LF

    <0x0A>

    CNTRL_Z <0x1A>
    SP <0x20>

    Character sets:

    ALPHA <'A'-'Z'>
    DIGIT <'0'-'9'>

    ALNUM

    ALPHA | DIGIT
    ASCII <0x20-0x7F>
    SPACE SP | TAB
    8BIT <0x01 - 0xff, except CR, LF, CTRL_Z>

    Character sequences:

    EOL

    CR | CR LF
    NUMBER DIGIT | NUMBER DIGIT
    WHITE SPACE | WHITE SPACE
    ASCII_STR ASCII | ASCII_STR ASCII
    ALNUM_STR ALNUM | ALNUM_STR ALNUM
    8BIT_STR 8BIT | 8BIT_STR 8BIT

    Section 1: Establishing connection

    When connecting to a BBS the first line the BBS sends must be the SID (System Identifier). The SID is used to determine what features are supported by each BBS. The existence of the SID implies that the system supports reverse forwarding and OK/NO message rejection. There still exist old BBS programs that do not present a SID at connect. Refer to Section 4 for information on handling these old style BBS systems.

    The SID as sent by both MASTER and SLAVE:

    AUTHOR_ID <ASCII_STR, except '[', ']' and '-'>
    AUTHOR_DATA <ASCII_STR, except '[' and ']'>
    FEATURE ALPHA [DIGIT]
    FEATURE_LIST FEATURE | FEATURE_LIST FEATURE
    SID "[" AUTHOR_ID "-" [AUTHOR_DATA "-"] FEATURE_LIST [$]"]" EOL

    The AUTHOR_ID and FEATURE_SET must be present. If the optional AUTHOR_DATA is present it must be separated from the other two fields by a '-' character. AUTHOR_DATA may contain the '-' character. The AUTHOR_ID is typically a portion of the authors callsign or BBS name. The AUTHOR_DATA is typically the version number of the software. Each FEATURE consists of a letter, denoting the feature and an optional following number, denoting the feature level. The absence of a version number implies version zero. If BID's are supported, '$' must be the last symbol in the FEATURE_SET. The recommended minimal support is BID and hierarchical location identifiers. These are necessary for the proper operation of the network.

    EXAMPLE: [ZFJ-2.3-H$]

    The original prompt received from the SLAVE BBS may contain additional information intended for users. As soon as the SID is received by the SLAVE BBS it should respond with an abbreviated PROMPT, with the ASCII_STR field being empty.

    Section 2: Forwarding

    A message can be accepted of rejected by the SLAVE. There are many reasons that the SLAVE may choose to reject a message. The most common is a duplicate BID, indicating the SLAVE already has the message. Any use of a NO response other than to indicate a duplicate BID is discouraged since it will cause loss of messages. Here is an overview of the exchange.

    ACCEPT EXCHANGE

    REJECT EXCHANGE

    MASTER SLAVE MASTER SLAVE
      PROMPT   PROMPT
    END_CMD   SEND_CMD  
      RESPONSE (OK)   RESPONSE (NO)
    MESSAGE     PROMPT
      COMMENT    
      PROMPT    

    The SLAVE indicates it is prepared to accept a command by issuing a PROMPT. The PROMPT is also used as an acknowledgment of correct reception of the previous message. The MASTER initiates the message exchange by issuing a SEND_CMD. This command contains all the information necessary for the SLAVE to decide whether to ACCEPT or REJECT the message. It contains message type, destination, originator and possibly a bid.

    COMMENT <ASCII_STR, except '>'>
    PROMPT [COMMENT] ">" EOL
    TYPE 'B' | 'P' | 'T'
    CALLSIGN <ASCII_STR, except '@', '.', max length 6>
    LOC <ASCII_STR, except '@', '.', max length 6>
    HLOC LOC | <HLOC "." LOC, max length 31>
    BBS CALLSIGN ["." HLOC]
    TO CALLSIGN [WHITE "@" WHITE BBS]
    FROM CALLSIGN
    BID <ASCII_STR, max length 12>
    SEND_CMD "S" TYPE WHITE TO [WHITE "<" WHITE FROM] [WHITE "$" BID]

    Message Types:

    Type B is a bulletin to be distributed to all BBS system. Type P is a personal message destined to one recipient. Type T is an NTS traffic message destined outside the Amateur Radio Service.

    HLOC is a hierarchical location of the system. It is defined by the document "INTERNATIONAL ROUTING DESIGNATORS", ARRL Networking Conference Proceedings.

    The TO field commonly takes the following forms:

    callsign @ BBS.hloc

    N6ZFJ @ N6QMY.CA.USA.NA
    category @ distribution WANT @ ALLCA
    category @ BBS.hloc WANT @ N6QMY.CA.USA.NA
    category @ distibution.hloc INFO @ ALLCA.CA.USA.NA

    The first two are seen most often, but the other two forms are seen occasionally. The first two forms are also normally associated with the message type of PERSONAL and BULLETIN respectively. White space is required on either side of the '@' and between the '<' and the senders callsign. There cannot be white space between the '$' and the BID.

    EXAMPLE

    SB WANT @ ALLSCV < N6ZFJ $2345_N6QMY

    A "BID" (Bulletin Identifier) is associated with each Bulletin, and may be associated with any Personal message. If a BID is not given explicitly when the message is entered into the system, and the message type requires a BID, one is created automatically from the message number and callsign of the system into which the message was initially entered.

    NOTE:

    It is suggested that a generated BID have the form nnn_BBS, where nnn is the message number at the originating BBS system, and BBS is the callsign of the originating BBS system.

    COMMON_BID MSG_NUM "_" CALLSIGN

    BBS programs are free to create whatever form they wish as long as the length does not exceed 12 characters.

    Messages to a distribution, whether they are bulletins or personal messages, must have a BID. Personal messages to a specific user may carry a BID if the originator supplied one, but will not be given a default BID. NTS message never carry a BID.

    The SLAVE BBS determines from the SEND_CMD whether or not to accept the message. The reason for rejection is usually that the message already exists on the SLAVE system (i.e. a duplicate BID). It may also indicate a system problem.

    Sent by SLAVE in response to SEND_CMD (or by MASTER if in reverse forward mode).

    RESPONSE ACCEPT | REJECT
    ACCEPT "OK" [ WHITE COMMENT ] EOL
    REJECT "N" [ "O" ] [ WHITE COMMENT ] EOL

    NOTE:

    The syntax of responses has grown in a random fashion. Many BBS programs expect to see the entire words "OK" and "NO" while others simply look at the first letter. It is suggested that new BBS programs should present the words "NO" and "OK", but look for only the first letter. Doing this should ensure compatibility with existing BBS programs.

    EXAMPLE

    Master: SB WANT @ ALLCAN < N6ZFJ $4567_N0ARY

    Slave: NO duplicate bid

    Slave: >

    Master: SB WANT @ ALLCAN < N6ZFJ $4567_N0ARY

    Slave: OK #32190

    Master: message body

    Master: Control-Z

    Slave: Message being held for sysop review

    Slave: >

    "OK" and "NO" must be followed by white space or EOL. If this is not done, some BBS programs will fail to recognize them.

    EXAMPLE

    Master: SB WANT @ ALLCAN < N6ZFJ $4567_N0ARY

    Slave: NO, already have it

    Slave: >

    This would fail with some existing BBS programs due to the comma following the "NO" string.

    If the SLAVE BBS responds with a REJECT condition the message should not be sent and the MASTER should ignore any response from the SLAVE until PROMPT is encountered. The MASTER can then submit a new SEND_CMD, initiate reverse forwarding or disconnect.

    Once the SLAVE has issued the ACCEPT response, the MASTER BBS should immediately send the message subject, routing headers, message body and EOMA. The SLAVE will acknowledge with PROMPT once it receives an EOMA.

    Message Routing Header

    SUBJECT <ASCII_STR, max length 79> EOL
    YEAR DIGIT DIGIT
    MONTH DIGIT DIGIT
    DAY DIGIT DIGIT
    HOUR DIGIT DIGIT
    MINUTE DIGIT DIGIT
    STAMP "R:" YEAR MONTH DAY "/" HOUR MINUTE ["Z"]
    MSG_NUM <NUMBER, range 1 - 65535 (0x0001 - 0xFFFF)>
    HEADER1 STAMP WHITE MSG_NUM "@" BBS EOL
    HEADER2 STAMP WHITE "@:" BBS WHITE [ASCII_STR] "#:" MSG_NUM [ASCII_STR]
    HEADER HEADER1 | HEADER2

    Message structure

    HEADERS HEADER | HEADERS HEADER
    EOMA CNTRL_Z EOL
    EOMB EOL "/EX" EOL
    BODY 8BIT_STR | BODY EOL 8BIT_STR
    MESSAGE SUBJECT [HEADERS] EOL [BODY] (EOMA | EOMB)

    Note:

    Given the above definition of a message BODY, the BODY cannot contain either EOMA or EOMB. Common practice is to replace the string "/EX" if found in the BODY with the string "’/EX’" (enclose the text in single quotes). This restriction in the protocol has caused a few problems but is not felt to be serious.

    EXAMPLE

    Example message

    R:930108/1729 @:N6QMY.#NOCAL.CA.USA.NA Fremont #:1114 Z:94536

    R:930108/1259 1530@KA6FUB.#NOCAL.CA.USA.NA

    R:930107/1638z @:WD6CMU.#NOCAL.CA.USA.NA "OSKbox" #:10576 Z:94805

    R:930107/1045 50724@WX3K.#NOCAL.CA.USA.NA

    The message body goes here. The blank line above separates the body from the routing headers. The BODY should be terminated with EOMA, but EOMB is allowed to support some existing codes for example WinLink and AA4RE.

    Notes:

    Both forms of the header described above are seen, and should be parsed. In either case there may be comments found at the end of the header line, or between the BBS and the MSG_NUM entries in HEADER2.

    HEADER2 is derived from the header form used in early BBS programs. It allows additional information to be passed in the header and parsed if desired. Some examples of these additional optional fields are:

    Z:zipcode

    This is frequently seen, and is used by White Pages data capture. It’s utility is unclear.

    O:orginator

    This is probably obsolete.

    $:bid

    The meaning of this field is unclear. It appears on messages which have no BID, i.e. some personal messages, and also appears on NTS messages, which cannot have a BID.

    C:name_of_sysops_cat

    This has only been used by W0RLI and N6IYA, as a test.

    B:bid-as-received

    This is seen only from W0RLI systems. It shows the BID as the system received it in the S command or RFC-822 import.

    Notes:

    The time stamp in the routing header must be in GMT. Some existing BBS programs provide the time stamp in other than GMT, and may include a time zone indicator after the time stamp. This should be considered in the design of header parsers. The design of future BBS programs should conform to this specification.

    Each system that handles the message places it's routing header at the top of the message headers before passing the message to the next BBS.

    The headers must begin in column 1. A blank line separates the routing headers from the body of the message.

    The first (oldest) routing header shows the BBS where the message originated. This header is the only source for this information. The information about the originating BBS is used to create a return address for reply messages.

    Here are two examples of the same header, in the two different formats:

    R:930101/0000 1530@KA6FUB.#NOCAL.CA.USA.NOAM

    R:930101/0000 @:KA6FUB.#NOCAL.CA.USA.NOAM #:1530

    These examples show the different syntax for the message number and originating BBS address. All fields not shown in the examples are optional at the discretion of the BBS author or the individual sysop.

    Section 3: Reverse forwarding

    Once all messages have either been successfully forwarded from the MASTER to the SLAVE, or been rejected by the SLAVE, the MASTER may accept messages from the SLAVE. The MASTER and SLAVE exchange roles. This is called "reverse forwarding".

    ACCEPT EXCHANGE:
    MASTER SLAVE
      PROMPT ">"
    REV_FWD "F>"  
      SEND_CMD
    RESPONSE "OK"  
      MESSAGE
    COMMENT  
    REV_FWD "F>"  

    REJECT EXCHANGE:
    MASTER SLAVE
      PROMPT ">"
    REV_FWD "F>"  
      SEND_CMD
    RESPONSE "NO"  
    REV_FWD "F>"  

    The MASTER indicates it is ready to accept a message by answering the Slave’s PROMPT, ">", with a REV_FWD command, "F>". The SLAVE then issues a SEND_CMD and the process continues as described in section 2, with the rolls of MASTER and SLAVE reversed. The only difference is that the MASTER responds with REV_FWD in place of PROMPT to indicate successful message transfer.

    REV_FWD "F>" EOL

    The reverse forwarding phase is optional and is under the control of the MASTER. It can be terminated by any of the following:

    The SLAVE disconnects

    The SLAVE sends anything other than a legal SEND_CMD

    The MASTER disconnects

    The MASTER sends anything other than "F>".

    Section 4: Forwarding to old BBSs

    If the SLAVE does not return a SID then it is assumed that it will not support BIDs, hierarchical location designators or OK/NO message rejection.

    The SLAVE indicates it is prepared to accept a command by issuing a PROMPT. This PROMPT is also an acknowledgment that the previous message has been received.

    The MASTER initiates the message exchange by issuing a SEND_CMD with no HLOC or BID. The SLAVE has no way to reject the message so the MASTER proceeds to send the message subject and body without expecting acknowledgment from the SLAVE.

    Since the SLAVE assumes a user is entering the message, it will display prompts to lead the user through the message sending process, asking for a subject, prompting for the message body, etc. The MASTER should consider this text to be part of the PROMPT and ignore it.

    As in Section 2, the MASTER waits until PROMPT is received. This is the acknowledgment that the message has been received and the next message can be sent.

    When the MASTER has no additional messages to send it disconnects from the SLAVE. Reverse forwarding is not supported in this situation.

    Section 5: Half-Duplex links.

    When two BBS systems communicate over a half duplex link, the following two conditions apply: 1) on link initiation, the SLAVE shall send the first data over the link. 2) The station sending data shall relinquish the link when it has finished sending. In the case of TOR, for example, this means the SLAVE is ISS when the link is established and ISS always issues the OVER.

    Section 6: Error Conditions

    When either the MASTER or the SLAVE detects an error, it shall disconnect at once, without issuing a PROMPT or any other data.

    Section 7: BNF Summary

    Meta-syntactic information.

    [x]

    =

    Optional Zero or one x.

    (x y)

    =

    Grouping. Treat multiple tokens as single token.

    <>

    =

    Set.

    Characters of interest.

    TAB

    =

    <0x09>

    LF

    =

    <0x0a>

    CR

    =

    <0x0d>

    CNTRL_Z

    =

    <0x1a>

    SP

    =

    <0x20>

    Character sets of interest.

    ALPHA

    =

    <'A' - 'Z', 'a' - 'z'>

    DIGIT

    =

    <'0' - '9'>

    ALNUM

    =

    ALPHA | DIGIT

    ASCII

    =

    <0x20 - 0x7f>

    SPACE

    =

    SP | TAB

    8BIT

    =

    <0x01 - 0xff, except CR, LF, CTRL_Z>

    Character sequences of interest.

    EOL

    =

    CR | CR LF

    NUMBER

    =

    DIGIT | NUMBER DIGIT

    WHITE

    =

    SPACE | WHITE SPACE

    ASCII_STR

    =

    ASCII | ASCII_STR ASCII

    ALNUM_STR

    =

    ALNUM | ALNUM_STR ALNUM

    8BIT_STR

    =

    8BIT | 8BIT_STR 8BIT

    System Identifier syntax.

    AUTHOR_ID

    = <ASCII_STR, except '[', ']', '-'>
    AUTHOR_DATA = <ASCII_STR, except '[', ']'>
    FEATURE = ALPHA [DIGIT]
    FEATURE_LIST = FEATURE | FEATURE_LIST FEATURE
    SID = "[" AUTHOR_ID ["-" AUTHOR_DATA] "-" FEATURE_LIST "]" EOL

    System Prompt syntax.

    COMMENT = <ASCII_STR, except '>'>
    PROMPT = [COMMENT] ">" EOL

    Send Command syntax.

    TYPE = 'B' | 'P' | 'T'
    CALLSIGN = <ASCII_STR, except '@', '.', ' ', maximum length 6>
    LOC = <ASCII_STR, except '@', '.', ' ', maximum length 6>
    HLOC = <LOC | HLOC "." LOC, maximum length 31>
    BBS = CALLSIGN ["." HLOC]
    TO = CALLSIGN [("@" | WHITE "@" WHITE) BBS]
    FROM = CALLSIGN
    BID = <ASCII_STR, except ' ', maximum length 12>
    SEND = "S" TYPE WHITE TO [WHITE "<" WHITE FROM] [WHITE "$" [BID]]

    Message syntax.

    SUBJECT

    =

    <ASCII_STR, maximum length 79> EOL

    YEAR

    =

    DIGIT DIGIT

    MONTH

    =

    DIGIT DIGIT

    DAY

    =

    DIGIT DIGIT

    HOUR

    =

    DIGIT DIGIT

    MINUTE

    =

    DIGIT DIGIT

    STAMP

    =

    "R:" YEAR MONTH DAY "/" HOUR MINUTE

    MSG_NUM

    =

    <NUMBER, range 1 - 65535>

    HEADER1

    =

    STAMP WHITE MSG_NUM "@" BBS EOL

    HEADER2

    =

    STAMP WHITE "@:" BBS WHITE [ASCII_STR] "#:" MSG_NUM [ASCII_STR]

    HEADER

    =

    HEADER1 | HEADER2

    HEADERS

    =

    HEADER | HEADERS HEADER

    BODY

    =

    8BIT_STR | BODY EOL 8BIT_STR

    EOMA

    =

    CTRL_Z EOL

    EOMB

    =

    EOL "/EX" EOL

    MESSAGE

    =

    SUBJECT [HEADERS] EOL [BODY] (EOMA | EOMB)

    Standard message identification syntax.

    MSG_ID = MSG_NUM "_" CALLSIGN

    Section 8: Feature Letter Use

    Feature $:

    Supports BIDs. This feature must be supported.

    Feature A:

    F6FBB Acknowledge for personal messages.

    Feature B:

    F6FBB Binary messages supported.

    Feature C:

    Supports automatic distribution of current date / time. (W0RLI, K0ZXF) This feature is obsolete:

    Feature F:

    F6FBB Batch forwarding protocol supported.

    Feature H:

    Supports Hierarchical Location designators. This feature must be supported.

    Feature I:

    Some transport mechanisms do not identify the calling station in the protocol, as does AX.25. To handle this situation, a "null command" is defined as a line beginning with ';'. This allows the sending station to send callsigns to satisfy the regulations for station identification.

    EXAMPLE

    ; W5SMM de W0RLI

    The receiving station must ignore such lines.

    Feature L:

    G1NNA – Compression supported.

    Feature M:

    For AA4RE systems:

    Basic level ("M0")

    MID = message Identifier

    Every message has a MID. The MID looks like a "generated" BID (example 12345_AA4RE). The "M" letter in the SID indicates that a MID is to be transmitted with messages that have no BID. Processing: If a send command is received by a BBS with a MID, the program should determine if it is a duplicate. If it is, the program should respond with the usual "NO" as if it was matching a BID.

    Note:

    This protocol will on occasion cause the loss of messages. Its use is discouraged.

    Feature R:

    AA4RE - Extended reject responses.

    OK

    Yes, send to me. Note that no number is required. This may help eliminate phantom message numbers. (Ed. Note: What are "phantom message numbers?")

    NO

    This is a real dupe

    REJECT

    I can't handle this

    LATER

    Send to me later

    The LATER is useful when you are already receiving a bulletin on one connect and someone else tries to send you the same bulletin.

    Rejected messages should be called to the attention of the SYSOP to see why the reject occurs.

    The difference between NO and REJECT is whether or not SYSOP attention is needed.

    Abbreviations are allowed: 1 Letter only ... O N L R

    There must be a blank after the word or letter. This one is fine:

    N Already have it.

    This one is not correct:

    REJECT, Something wrong

    The comma is not allowed.

    Feature S:

    AA4RE - Extended "S" commands supported.

    Feature T:

    WinLink.

    Feature U:

    WinLink.

    Feature X:

    Supports ihave/iwant compressed batch forwarding. Defines the syntax and use of commands SS, SX, SY. Uses lzh compression

    Command Definitions and BNF description.

    N

    INTEGER, size 32 bits.

    file_size

    N

    msg_count

    <range 0 - 25>

    checksum

    <file checksum>

    id

    BID | MID CR

    ids

    id | ids id

    byte

    <0x00 - 0xff>

    bytes

    byte | bytes byte

    ihave

    "SX " msg_count CR [ids]

    iwant

    "SY " msg_count CR [ids]

    isend

    "SS " file_size [" " checksum] CR bytes

    For iwant:

    SY means want only these.

    Note that the SS command must terminate with CR, without LF.

    The optional checksum is computed by summing all the bytes in the file as unsigned integers. Example code:

    {

    int byte;

    unsigned int sum;

    sum = 0;

    for (all bytes in file) sum += byte;

    }

    RFC-822 header fields used are:

    To: call@bbs.hloc

    From: call@bbs.hloc

    Subject:<The Subject>

    Message-ID: <In BID format>

    X-msgtype: <B, P or T>

    X-BID: <In BID format>

    The basic interchange (example):

    bn are BIDs (or MIDs if the message has no BID). m: is master, s: is slave.

    m: SX 5

    m: b1

    m: b2

    m: b3

    m: b4

    m: b5

    s: SY 3

    s: b1

    s: b3

    s: b5

    m: SS 26545

    m: <sends 26545 byte file>

    In the case of any error, the station noticing the error must disconnect immediately.

    Section 9: Import / Export files.

    Import/Export files may contain any number of messages. Each message is terminated by EOMB

    RFC-822 header use in import/export files.

    The standard RFC-822 keywords, which must be supported, are:

    To:

    From:

    Subject:

    Message-ID:

    cc:

    Extension keywords, which must be supported, are:

    Produced by W0RLI systems

    X-msgtype:

    X-BID:

    Produced by JNOS systems

    X-BBS-Msg-Type:

    X-BBS-Hold:

    X-Forwarded-To: