home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast2.iso / citadel / k2ne603b.zip / CTDL_MAN.ZIP / NETHACK3.MAN < prev    next >
Text File  |  1988-02-25  |  53KB  |  1,322 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.                                 NETHACK MANUAL
  17.  
  18.                               Citadel-86: V3.03
  19.  
  20.                                   by Hue, Jr.
  21.  
  22.                             C-86 Test System Sysop
  23.  
  24.                                     88Mar01
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.      Table of Contents
  72.  
  73.  
  74.      I. Introduction . . . . . . . . . . . . . . . . . . . . . . .  2
  75.         I.1 History  . . . . . . . . . . . . . . . . . . . . . . .  2
  76.         I.2 Purpose  . . . . . . . . . . . . . . . . . . . . . . .  2
  77.  
  78.      II. Overview  . . . . . . . . . . . . . . . . . . . . . . . .  3
  79.  
  80.      III. Information Transfer Layer . . . . . . . . . . . . . . .  3
  81.         III.1 Call Stabilization . . . . . . . . . . . . . . . . .  4
  82.         III.2 Transfer Medium  . . . . . . . . . . . . . . . . . .  5
  83.  
  84.      IV. Application Layer . . . . . . . . . . . . . . . . . . . .  6
  85.         IV.1 Overview  . . . . . . . . . . . . . . . . . . . . . .  7
  86.         IV.2 ID & Name . . . . . . . . . . . . . . . . . . . . . .  7
  87.         IV.3 Facility Requests . . . . . . . . . . . . . . . . . .  8
  88.         IV.4 Message & File Transfer . . . . . . . . . . . . . . .  9
  89.         IV.5 Network Session Control Facilities  . . . . . . . . .  9
  90.            IV.5.a Hangup command . . . . . . . . . . . . . . . . .  9
  91.            IV.5.b Error Code Support . . . . . . . . . . . . . . . 10
  92.            IV.5.c Role Reversal  . . . . . . . . . . . . . . . . . 10
  93.         IV.6 Data Transfer Facilities  . . . . . . . . . . . . . . 10
  94.            IV.6.a Normal Mail  . . . . . . . . . . . . . . . . . . 10
  95.            IV.6.b Room File Requests . . . . . . . . . . . . . . . 10
  96.            IV.6.c Ambiguous Room File Requests . . . . . . . . . . 11
  97.            IV.6.d Ambiguous Room File Requests With Approval . . . 11
  98.            IV.6.e Network Room . . . . . . . . . . . . . . . . . . 12
  99.            IV.6.f Check Mail . . . . . . . . . . . . . . . . . . . 12
  100.            IV.6.g Send File  . . . . . . . . . . . . . . . . . . . 13
  101.            IV.6.h Alternate Room Sharing . . . . . . . . . . . . . 13
  102.         IV.7 ITL Alternate Realities . . . . . . . . . . . . . . . 13
  103.         IV.8 Security  . . . . . . . . . . . . . . . . . . . . . . 13
  104.            IV.8.a System Net Password  . . . . . . . . . . . . . . 14
  105.         IV.9 Other Reserved Facility Byte Values . . . . . . . . . 15
  106.         IV.10 Facilities -- Short List . . . . . . . . . . . . . . 15
  107.  
  108.      V. Minimal Compatability Requirements . . . . . . . . . . . . 15
  109.  
  110.      Appendix A.  Message Transfer Format  . . . . . . . . . . . . 15
  111.  
  112.      Appendix B.  Examples!  . . . . . . . . . . . . . . . . . . . 16
  113.        B.1 Call Stabilization  . . . . . . . . . . . . . . . . . . 16
  114.        B.2 ID & Name . . . . . . . . . . . . . . . . . . . . . . . 17
  115.        B.3 Normal Mail . . . . . . . . . . . . . . . . . . . . . . 17
  116.        B.4 Ambiguous Room File Requests  . . . . . . . . . . . . . 17
  117.        B.5 Network Room  . . . . . . . . . . . . . . . . . . . . . 18
  118.        B.6 Check Mail  . . . . . . . . . . . . . . . . . . . . . . 18
  119.        B.7 Send File . . . . . . . . . . . . . . . . . . . . . . . 19
  120.        B.8 Alternate Room Sharing  . . . . . . . . . . . . . . . . 19
  121.  
  122.      Appendix C.  BBS Software compatible with C86Net  . . . . . . 19
  123.  
  124.      Appendix D. Main C86Net . . . . . . . . . . . . . . . . . . . 19
  125.  
  126.  
  127.  
  128.  
  129.  
  130.                                     -1-
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.      I. Introduction
  138.         This document attempts to detail, in a haphazard manner, the network
  139.      known as C86Net.  C86Net is a BBS network protocol which is currently
  140.      used by Citadel-86 (for Z100s and PClones), NeoCitadel (PClones), STadel
  141.      (Atari STs), and Amiga Citadel-68K (Amigas).
  142.  
  143.      I.1 History
  144.         The original motivations for C86Net were two-fold: to provide an
  145.      interesting project exploring a topic that the author had never studied
  146.      before, and to (ultimately) allow the sysops of Citadel-86s in the Twin
  147.      Cities area of Minnesota (aka Minneapolis/St. Paul) to communicate with
  148.      each other without having to call each other's boards; the number of
  149.      Citadels in the area was beginning to escalate, making it impossible
  150.      for gainfully employed sysops to talk conveniently.
  151.  
  152.         The first version of C86Net came into being in June of 1985, and is
  153.      better left unmentioned.  After learning from his mistakes and discussing
  154.      the entire project with John Stanley, a second version was attempted and
  155.      installed in all local Citadel-86s.  This, too, was a ghastly mistake,
  156.      but enough lessons were learned so that the third version of C86Net could
  157.      be constructed in an expandable fashion that would allow easy backward
  158.      compatability as the network facilities were expanded.  The installation
  159.      of the second and third versions mandated this ability: updating an
  160.      entire set of systems simultaneously is a nightmarish situation.
  161.  
  162.         The history of C86Net since then has consisted of two events: the
  163.      addition of new facilities as new needs were identified, and the
  164.      integration of non-Citadel-86 systems to C86Net networks.
  165.  
  166.         The history of adding facilities is not going to be detailed here; it
  167.      would be both tedious and useless.  However, the astute reader will
  168.      note several anomolies and redundancies in the facilities.  Be advised
  169.      that this is what happens when the author is programming for both
  170.      learning and fun; another term is "programming by accretion."
  171.  
  172.         The first non-Citadel-86 system to join a C86Net was NeoCitadel, by
  173.      Hue, Sr., which started by supporting Net Mail.  Then a valiant, notable
  174.      effort was made by Lum the Mad, author of Lumadel, a very good Citadel
  175.      clone for the Apple II series of computers.  His networker, written in
  176.      Apple Basic, actually managed to communicate during several manual tests
  177.      with a Citadel-86.  However, an automated networker was never completed,
  178.      and Lumadel languished after Lum bought an IBM clone.
  179.  
  180.         The final two types of BBS software that are compatible with C86Net
  181.      are derived from Citadel-86: Amiga Citadel-68K as ported by Stallion aka
  182.      Jay Johnson, and STadel as ported by orc.
  183.  
  184.         No other BBS software is known to be compatible with C86Net.
  185.  
  186.      I.2 Purpose
  187.         The purpose of this document is to detail C86Net at the byte level.
  188.      We will only talk about how the protocol should react to each condition.
  189.      We are not going to discuss what each facility "should" be used for,
  190.      although suggestions may be advanced.
  191.  
  192.  
  193.  
  194.  
  195.  
  196.                                     -2-
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.         If you only have a headache when you're done reading this, count
  204.      yourself lucky.  The author will probably know what a year's worth of PMS
  205.      is like.
  206.  
  207.      II. Overview
  208.         Just about any networking textbook will tell you that most networks
  209.      can be divided into some set of layers (an example, the ISO Standard, is
  210.      fairly well explained in Computer Networks by Tannenbaum), and the
  211.      Citadel-86 Networking protocol is not an exception, in concept.  (NOTE:
  212.      no attempt is going to be made to use network terminology currently in
  213.      use by network experts.  Instead, the terminology I'll use will be what
  214.      I think best describes the subject matter.  As such, this document's
  215.      terminology may change from revision to revision as people discuss and
  216.      argue with me about it.)  Familiarity with such a textbook (or, better
  217.      yet, a real network implementation) is certainly suggested (unless you
  218.      have masochistic tendencies, like I did).
  219.  
  220.         The protocol seems to break down into just two layers.  The first can
  221.      be termed the "information transfer" layer, or the "link" layer; the
  222.      second can be described as the "application" layer.
  223.  
  224.                             ---------------------
  225.                             | Application Layer | -  -  -  -  -  -  -  -  -
  226.                             ---------------------
  227.                                      |  |\                      Another _____\
  228.              This node              \|  |                         node       /
  229.                            ------------------------
  230.                            | Information Transfer |  _  _  _  _  _  _  _  _
  231.                            |        Layer         |
  232.                            ------------------------
  233.  
  234.         The purpose of the Information Transfer Layer is to ensure (to the
  235.      extent possible) that all information that is to be conveyed from and to
  236.      this system's Application Layer from another system's Application Layer
  237.      actually succeeds in transmission.
  238.  
  239.         The purpose of the Application Layer is to accomplish useful work
  240.      during a networking session with another node.
  241.  
  242.         It should be apparent that the Application Layer is dependent on the
  243.      Information Transfer Layer.  Despite this dependency, most of this
  244.      document is dedicated to the Application Layer, detailing its facilities,
  245.      due to the fact that the Information Transfer Layer is very simple (not
  246.      necessarily a good sign).
  247.  
  248.         Whenever the acronym "ITL" is used, assume that it means Information
  249.      Transfer Layer; similarly, the "AL" refers to the Application Layer.
  250.  
  251.      III. Information Transfer Layer
  252.         As mentioned, the ITL's purpose is to provide a stable communications
  253.      medium.
  254.  
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.                                     -3-
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.         The keyword here is "stable".  In order to achieve this, several goals
  270.      must be accomplished during any given networking session in order for
  271.      overall success to be achieved, and these can be broken into two parts.
  272.  
  273.         The first part is called "Call Stabilization."  This part of the ITL
  274.      has the goal of establishing the first step of stabilization.  The section
  275.      on Call Stabilization will detail some of the problems associated with
  276.      Call Stabilization.
  277.  
  278.         The second part is the provision of a transfer medium.  In this
  279.      section, it is best to remember that looking at C86Net from a layer
  280.      viewpoint does not mean that the C86Net was built as a reflection of some
  281.      layer model.  This should lessen confusion.
  282.  
  283.      III.1 Call Stabilization
  284.         The purpose of this process is to establish quickly and efficiently
  285.      that the caller is another system on the net that wishes to engage in a
  286.      networking session.  The design of call stabilization was driven by whim,
  287.      a wish for efficiency, and experience with earlier versions of C86Net.
  288.  
  289.         The problems consist of, first, users calling in during networking.
  290.      Call Stabilization is designed to stave off the fumblings of an honest
  291.      user who simply doesn't realize that the networker is in effect by
  292.      forcing a "recognition code" to be given that would be difficult for a
  293.      casual user to generate.
  294.  
  295.         The second (and last) problem comes from the machines that the network
  296.      was originally implemented on, which are Z-100s and IBMs using MS-DOS.
  297.      During the last few years the marketplace has literally been bombarded by
  298.      modems that can accomodate multiple baud rates (300, 1200, 2400, and now
  299.      9600 looms on the scene), and can signal to the host system what the
  300.      connect baud rate is.
  301.  
  302.         The modems can typically have two methods of signaling the connect
  303.      baud rate: by sending a unique text string to the host at the serial port
  304.      baud rate, and via signals on the RS232 interface.
  305.  
  306.         Unfortunately, within my experience the use of the text strings for
  307.      divining baud rate is not completely reliable; and, ridiculously, both
  308.      IBM and Zenith completely neglected to make available the RS232 signals
  309.      on their serial ports that would have allowed the programmer to discover
  310.      the connect baud rate, with the exception of some internal modems on the
  311.      IBM.
  312.  
  313.         Therefore, Call Stabilization must allow some way for effective baud
  314.      rate connect detection to occur.  The Call Stabilization technique
  315.      currently in use does not seem to be too bad in achieving the objectives.
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.  
  328.                                     -4-
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.         Here is the process (sort of) graphically, right after carrier detect:
  336.  
  337.                Caller                |                     Receiver
  338.                ------                |                     --------
  339.                            Systems detect carrier
  340.       Wait for full second           |                Wait for full second
  341.       Send following 3 bytes:        |                Begin waiting for the
  342.                7                     |                following three bytes:
  343.                13                    |                        7
  344.                69                    |                        13
  345.       and wait 4 seconds.            |                        69
  346.       If have not received a         |                 After the 4 second
  347.       correct response (see          |                 response wait, the
  348.       Receiver column), then         |                 Receiver can switch
  349.       resend the above 3 bytes.      |                 bauds if necessary.
  350.       This looping process should    |                 If get the above 3
  351.       only be repeated 20 times.     |                 bytes, then respond
  352.       If, on the 20th try, still     |                 instantly with:
  353.       have not received a correct    |                        ~7
  354.       response, HANGUP.              |                        ~13
  355.       If have received a correct     |                        ~69
  356.       response, send an ACK.         |                 and then wait for an
  357.                                      |                 ACK. This should end
  358.                                                        Call Stabilization.
  359.  
  360.         So, essentially, the caller waits a second, and then sends a 3 byte
  361.      sequence to the receiver.  When the receiver receives those 3 bytes
  362.      successfully, it replies with the logical negation of those 3 bytes.  The
  363.      caller then sends an ACK back, indicating that the call is stabilized.
  364.      If the protocol fails 20 times, then the caller hangs up, assuming
  365.      something was wrong.
  366.  
  367.         The 7-13-69 sequence only has significance in that a casual user
  368.      probably won't generate it accidentally.
  369.  
  370.      III.2 Transfer Medium
  371.         The purpose of this part of the ITL is to provide a stable means of
  372.      transporting information to and from the other node that the networking
  373.      session is concerned with.
  374.  
  375.         Take it as a caveat that this is neither "clean" or "elegant" by
  376.      any stretch of the imagination.  Just take a deep breath and start
  377.      reading (particularly if you're a networking professional!).  Also, this
  378.      is going to be difficult, seeing that I have troubles explaining it
  379.      coherently myself.  However, considering the fact that adding new
  380.      facilities to the Applications Layer has been simple as of late, I must
  381.      assume that SOMETHING is being done right here.
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.                                     -5-
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.         The Transfer Medium takes some stream of information and attempts to
  402.      transfer it to another system.  As such, it is under strategic control of
  403.      the Application Layer in terms of when to start and when to stop; another
  404.      way to explain it is that the Application Layer will tell it to start
  405.      sending some stream of data, will tell it to stop sending, will tell it
  406.      to receive information from the other system, etc.  Details of when to
  407.      send, when to receive, etc., are contained in the sections on the
  408.      Application Layer, and will not be treated further in this section.
  409.  
  410.         One of the responsibilities of the Transfer Medium is to place no
  411.      interpretation on the data that is being received from, or sent to, the
  412.      other system involved in networking; the Transfer Medium only takes the
  413.      data and sends it to the other system's Transfer Medium, or receives the
  414.      data and sends it "up" to the Application Layer of the host system.  The
  415.      Application Layers involved make decisions as to what is to be done with
  416.      the data.
  417.  
  418.         So, what is the structure of the ITL Transfer Medium?  C86Net
  419.      currently uses Ward Christiansen's XMODEM protocol to transfer data.
  420.      Each time the system wishes to transfer or receive some data, it uses
  421.      XMODEM, telling it to expect or send a 'file'.
  422.  
  423.         At the risk of confusing the readers, let's hop ahead and state that 
  424.      the AL uses the ITL to Facility Requests to and from nodes, sending each
  425.      Facility Request when needed.  Each Request is, or should be, treated by
  426.      the ITL as a separate file.  Therefore, the ITL should send, or receive,
  427.      each Request as a new file (where it stores it is an implementation
  428.      detail), with a new block 1, etc.  We'll try to provide details at the
  429.      end of this document.
  430.  
  431.         XMODEM-Checksum is used in ITL, not CRC.  However, CRC should function
  432.      with no problems.
  433.  
  434.         At this time, there are no alternative ITL transfer formats.  However,
  435.      consideration is being given to making SEA's SEAlink protocol an
  436.      alternative.  Any use of SEAlink in C86Net will not make those nodes
  437.      incompatible with older nodes on a C86Net; the change can and will be
  438.      made to be backward compatible.  So if you are trying to implement C86Net
  439.      on your system and don't want to try to implement SEAlink, don't panic.
  440.  
  441.      IV. Application Layer
  442.         The Application Layer (AL), via the ITL, manages all of the work that
  443.      is to take place during a network session.
  444.  
  445.  
  446.  
  447.  
  448.  
  449.  
  450.  
  451.  
  452.  
  453.  
  454.  
  455.  
  456.  
  457.  
  458.  
  459.  
  460.                                     -6-
  461.  
  462.  
  463.  
  464.  
  465.  
  466.  
  467.      IV.1 Overview
  468.         The following diagram graphically demonstrates the flow of control
  469.      during a C86Net network session.  Assume, of course, that this is a
  470.      minimal diagram. The references to the ITL are provided for completeness'
  471.      sake and context.
  472.  
  473.        -----------------
  474.        |     CALL      |                ITL Territory
  475.        | STABILIZATION |       _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  476.        -----------------      /
  477.                |             /          AL Territory
  478.        _ _ _ _ | _ _ _ _ _ _/
  479.                |                RECEIVER TELLS CALLER CAN'T HANDLE COMMAND
  480.                |                    ____________________<___________
  481.                |                    |                              |
  482.        ----------------     ----------------     ------------      ^
  483.        | CALLER SENDS |_>___| CALLER SENDS |___>_| RECEIVER |___>__|
  484.        | ID & NAME    |     |   COMMAND    |     | RESPONDS |      |
  485.        ----------------     ----------------     ------------     \|/
  486.                                    |                               |
  487.                                    |                               |
  488.                                    |                        --------------
  489.                                    |                        |  RECEIVER  |
  490.                                    |                        |  TELLS     |
  491.                                    ^                        |  CALLER    |
  492.                                    |                        | CAN HANDLE |
  493.                                    |                        |   COMMAND  |
  494.                                    |                        --------------
  495.                                    |                               |
  496.                                    |                               |
  497.                                    |  UNLESS COMMAND IS    ----------------
  498.                                    _____________<__________| DO SPECIFIED |
  499.                                          'HANGUP'          | ACTION       |
  500.                                                            ----------------
  501.  
  502.         Call Stabilization has already been covered (III.1), so we shan't
  503.      speak of it further.  The diagram can be summarized as: caller identifies
  504.      itself, and then begins sending a sequence of Facility Requests.  Each
  505.      Request is dealt with by the receiver as received, and implies some set
  506.      of actions that both systems are aware of.  Each Request's actions are
  507.      documented in this document.
  508.  
  509.      IV.2 ID & Name
  510.         After receiving the ACK indicating end of Call Stabilization, the
  511.      calling system must identify itself to the receiver.  The caller sends,
  512.      in this order, nodeId & nodeName to the Transfer Medium, telling it to
  513.      send them to the receiver.
  514.  
  515.         nodeId, nodeName: Are normal null-terminated C strings.
  516.  
  517.         Neither the nodeId nor nodeName may exceed 20 bytes in length
  518.      (including the null byte terminating each string); therefore, the total
  519.      bytes of significant data that the AL must deal with should not exceed 40.
  520.      This also implies that the ITL should not send more than a sector
  521.      (128 bytes) worth of data.
  522.  
  523.  
  524.  
  525.  
  526.                                     -7-
  527.  
  528.  
  529.  
  530.  
  531.  
  532.  
  533.         So, for example, let's say that a system using the nodeName "Buffalo"
  534.      and with a nodeId of "US 612 477 0927" called some other system. After
  535.      the WC session was over, the receiver's buffer or temporary file would
  536.      look like this
  537.  
  538.           Id            name
  539.      US 612 477 0927<0>Buffalo<0> <-balance of the sector is trash->
  540.  
  541.      IV.3 Facility Requests
  542.         After the caller identifies itself, the two systems go into a loop.
  543.      Each loop starts with the Caller sending a Facility Request.  A Facility
  544.      Request at the AL layer consists of at least one byte, which contains a
  545.      code indicating the Facility requested, and up to four optional
  546.      parameters which are used to convey other data required for the Facility.
  547.      Each of these parameters are normal C null-terminated strings, and none
  548.      may exceed more than 20 bytes in length, including the ending null byte;
  549.      they may be smaller if the entire 20 bytes is not needed.  The last of
  550.      the optional parameters, be there 0 or 4 of them, is always followed by a
  551.      0 byte.  A Facility Request that does not require any parameters would
  552.      look like this at the Application Layer:
  553.  
  554.        <facility-byte><0>
  555.  
  556.      and a Facility Request that needs two parameters would look like this:
  557.  
  558.        <facility-byte><string1><string2><0>
  559.  
  560.         At the ITL level, the Facility Request byte comes first, followed by
  561.      each parameter; the rest of the sector is trash.
  562.  
  563.         The receiver, on receipt of the facility request, must decide if it
  564.      can execute the facility requested by the caller.  If so, the receiver
  565.      just sends back one byte, called GOOD, and then the network session
  566.      proceeds along the lines implied by the facility.  If the receiver cannot
  567.      executethe facility requested, it sends back a byte called BAD followed
  568.      by a null-terminated string < 126 characters which explains why the
  569.      facility cannot be executed.
  570.  
  571.        <Good>
  572.  
  573.        <Bad><error string>
  574.  
  575.         The actual values of GOOD and BAD are
  576.  
  577.       BAD:  0
  578.       GOOD: 1
  579.  
  580.         Section IV.5 through IV.9 detail all facilities currently supported by
  581.      Citadel-86 in C86Net, plus some proposed facilities.
  582.  
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.  
  590.  
  591.  
  592.                                     -8-
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.      IV.4 Message & File Transfer
  600.         When "transfer of messages" is mentioned below, the meaning is that a
  601.      series of 0 or more messages are to be sent from one system to the other.
  602.      When the number of messages is 0, then it is not necessary to do more
  603.      than start and stop the ITL, which should be interpreted by the system
  604.      receiving the 0 messages to mean that 0 messages were received.
  605.  
  606.         When one or more messages are being sent, each should be in the format
  607.      detailed in Appendix A.
  608.  
  609.         When more than one message is being sent, there should be no separator
  610.      between messages, due to the format that messages are sent in.  Due to
  611.      the current character of the ITL, the reality of networking leaves us with
  612.      last sectors of which zero or more bytes will be trash.  Therefore, when
  613.      transferring messages, the balance of the last sector which has no meaning
  614.      can either be ^Z filled (vis a vis XMODEM rules) or space-filled.
  615.  
  616.         A file transfer implies that one or more files are being sent.  There
  617.      is no data transformations applied to files at the AL layer, i.e., they
  618.      are sent (conceptually) byte by byte to the ITL for transfer.  The ITL,
  619.      being what it is, does not currently perform any transformations.  In the
  620.      future, it may, but the ITL has the responsibility of ensuring that
  621.      transformations inserted by the ITL are taken out before termination of
  622.      the ITL.
  623.  
  624.         Really, that may sound bad, but it's very easy.  "Clean up after
  625.      yourself."
  626.  
  627.      IV.5 Network Session Control Facilities
  628.         These facilities are used to control the overall behavior of a network
  629.      session.
  630.  
  631.      IV.5.a Hangup command
  632.         This facility is a simple 1-byte command that tells the receiver to
  633.      hang up.  Unfortunately, the behavior of the receiver for this facility
  634.      depends on the state of the network session.  If this facility is used
  635.      during usage of Role Reversal, then it signals the end of the Role
  636.      Reversal facility, and the receiver should send back a GOOD byte (see
  637.      Section IV.5.c).
  638.  
  639.         If this facility is not used during usage of Role Reversal, then the
  640.      receiver does NOT send back either a GOOD or BAD byte.  Instead, it just
  641.      hangs up (i.e., terminates the Network session).
  642.  
  643.         The value of the Hangup byte is 0.
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.                                     -9-
  659.  
  660.  
  661.  
  662.  
  663.  
  664.  
  665.      IV.5.b Error Code Support
  666.         This Request asks the receiver if his system can transmit Error Code
  667.      responses to Requests. This Request must be exercised and accepted as
  668.      GOOD before the receiver can use the Error Code response instead of the
  669.      BAD response when reporting his ability to support a particular facility
  670.      requested.
  671.  
  672.         The value of the Error Code Support byte is 200.
  673.  
  674.         Citadel-86 does not currently support this facility.
  675.  
  676.      IV.5.c Role Reversal
  677.         In order to make networking more efficient in nets that are using room
  678.      sharing concepts, it has become a necessity to allow "role reversal"
  679.      during the networking period.  The term "role reversal" means that during
  680.      the period of a call, two systems, supposing they are adequately
  681.      equipped, may exchange their roles of "caller" and "receiver", and then
  682.      continue to network, with the real receiver now becoming the "caller",
  683.      and vice versa.  All services should be supported under role reversal.
  684.  
  685.          When role reversal is agreed upon by the two systems (this is defined
  686.      to be the point at which the receiver has replied GOOD to the caller),
  687.      the two systems now switch roles.  The caller, who has now become the
  688.      receiver, now starts waiting for the first facility request from the
  689.      receiver, who has now become the caller.
  690.  
  691.         The caller and receiver should, of course, be aware of who is who;
  692.      this is why the stage of CALLER SENDS NAME & ID is skipped during role
  693.      reversal.
  694.  
  695.         The end of role reversal is signaled by the original receiver (now the
  696.      caller) by sending the HANGUP command.  The original caller (now the
  697.      receiver) acknowledges this (reply GOOD), and at this point, the two
  698.      again reverse roles. Note that the HANGUP command has been modified in
  699.      this one contextual instance to act different from its normal behavior.
  700.  
  701.         The value of the Role Reveral byte is 201.
  702.  
  703.      IV.6 Data Transfer Facilities
  704.         These facilities support transfer of various sorts of data between
  705.      nodes.
  706.  
  707.      IV.6.a Normal Mail
  708.         This facility is a parameterless facility which is designed to allow
  709.      transfer of Mail> from the transmitter to the receiver.  If the receiver
  710.      signals that it can receive Mail>, then the transmitter should begin
  711.      transmitting all Mail messages destined for the receiver via the ITL.
  712.  
  713.         The value of the Normal Mail byte is 1.
  714.  
  715.      IV.6.b Room File Requests
  716.         This facility is used to request one file from the receiver.  It has
  717.      two parameters, the name of the room that the file is located in
  718.      (parameter 1), and the name of the file to be transferred (parameter 2).
  719.  
  720.  
  721.  
  722.  
  723.  
  724.                                     -10-
  725.  
  726.  
  727.  
  728.  
  729.  
  730.  
  731.         If the receiver is willing to transfer the specified file to the
  732.      transmitter, it should send back a GOOD byte, and then tell the ITL to
  733.      send the file to the transmitter, which should be ready to receive the
  734.      file.
  735.  
  736.         If the receiver will not or can not satisfy the request, then it should
  737.      return a BAD byte.  The reasons for not satisfying this request are, of
  738.      course, implementation dependent, but they can include such reasons as
  739.      non-existence of room, non-existence of file, sheer peevishness, etc.
  740.  
  741.         This facility is an anachronism, retained for backward compatability.
  742.      The facility Ambiguous Room File Requests is a better choice.
  743.  
  744.         The value of the Room File Request byte is 2.
  745.  
  746.      IV.6.c Ambiguous Room File Requests
  747.         This facility is an expansion of IV.6.b, and very similar to it.  It,
  748.      too, has two parameters, the first the name of the room and the second
  749.      the name of the file requested.  However, the second parameter can safely
  750.      be used to specify an ambiguous set of files if the user so chooses.
  751.  
  752.         If the receiver consents to send the requested files to the
  753.      transmitter, then it should send back a GOOD byte.  At this point, the
  754.      procedure diverges from that used in IV.6.b.  For each file to be sent to
  755.      the transmitter by the receiver, it first sends via the ITL two strings
  756.      (null-terminated), which, in order, are the name of the file, and the
  757.      size of the file in 128 byte sectors.  If the file SEX.ED was 12877 bytes
  758.      long, the receiver would send
  759.  
  760.                     SEX.ED<0>101<0>
  761.  
  762.         These two strings constitute in themselves a separate transfer; in ITL
  763.      terms this means a separate XMODEM transfer, as if we were sending a
  764.      single file just ahead of the real file.
  765.  
  766.         The transmitter does nothing but receive these pairs for each file that
  767.      it will receive.  When the receiver has no more files to send that would
  768.      satisfy the request for files, it sends one more of the pre-file headers,
  769.      in which the length of the file name is 0.  This indicates the end of this
  770.      facility.
  771.  
  772.         The value of the Ambiguous Room File Request byte is 3.
  773.  
  774.  
  775.      IV.6.d Ambiguous Room File Requests With Approval
  776.         This is a non-implemented facility, which is not yet completely
  777.      defined.
  778.         The value of the Ambiguous Room File Request With Approval byte is 4.
  779.  
  780.  
  781.  
  782.  
  783.  
  784.  
  785.  
  786.  
  787.  
  788.  
  789.  
  790.                                     -11-
  791.  
  792.  
  793.  
  794.  
  795.  
  796.  
  797.      IV.6.e Network Room
  798.         This facility is used to send 0 or more messages from one system to
  799.      another for a specified room.  The room that these messages are coming
  800.      from is the sole parameter of this facility. If the receiver is willing
  801.      to accept the messages for delivery to the room on the receiver's system,
  802.      it replies GOOD to the caller, and then begins data transfer of the
  803.      messages in the same manner as it would for Mail transfer.  It it does
  804.      not wish to accept the messages (for whatever reason) from the caller, it
  805.      then replies BAD.
  806.  
  807.         The value of the Network Room byte is 5.
  808.  
  809.      IV.6.f Check Mail
  810.         The Normal Mail facility does not contain any provisions for checking
  811.      to see if Mail messages that were sent can be delivered to the designated
  812.      recipients. This command provides that facility.  If the receiver chooses
  813.      to accept this command, it should send a GOOD byte, and then cycle
  814.      through the Mail messages received from the caller.  For each message
  815.      that can not be delivered, the receiver should send back a byte and three
  816.      strings which describe the reason that the Mail cannot be delivered.  The
  817.      three strings, in the order that they should be sent, should contain the
  818.      following information:
  819.  
  820.              String 1: Author of the Mail> message.
  821.              String 2: Recipient of the Mail> message.
  822.              String 3: Error "context."  This field should contain a message
  823.                        that describes (in English) something useful about the
  824.                        error.  Citadel-86 currently fills this with the date
  825.                        and time of the message, suitable for sending to the
  826.                        author of the failed message.
  827.  
  828.         All three of these strings must be present.  Any or all of the three,
  829.      however, may be of 0 length.  None may exceed 20 characters in length
  830.      (including the 0 byte).
  831.  
  832.         The values of the byte are:
  833.  
  834.       NO_RECIPIENT    1  -- This reason indicates that there is no such
  835.                             recipient on the Receiver system. Note that the
  836.                             second string following this reason byte normally
  837.                             contains the name of the recipient that could not
  838.                             be found.
  839.       BAD_FORM        2  -- This reason indicates that there was no "To" field
  840.                             in the message.  Usually is a symptom of
  841.                             programming error.
  842.       UNKNOWN         99 -- Something really* odd happened.  The context
  843.                             string (#3) should perhaps contain the number (on
  844.                             the Caller system) of that message, so that it may
  845.                             be investigated later.
  846.  
  847.         After all of the negative acknowledgements of Mail> have been sent
  848.      back, the receiver sends one more byte, which is called the NO_ERROR
  849.      byte. It indicates that there are no more errors to be sent to the
  850.      transmitter.  If there were no bad Mail messages in the first place, then
  851.      the only real data that the receiver would return to the transmitter
  852.      would be the NO_ERROR byte.  The value of the NO_ERROR byte is 0.
  853.  
  854.  
  855.  
  856.                                     -12-
  857.  
  858.  
  859.  
  860.  
  861.  
  862.  
  863.         All negative acknowledgements, plus the NO_ERROR byte, are sent as a
  864.      single stream of data, not as separate ITL transfers!
  865.  
  866.         The value of the Check Mail byte is 6.
  867.  
  868.      IV.6.g Send File
  869.         This facility allows the sysop to send a file to another system.
  870.      There are three parameters associated with this request: The name of the
  871.      file that the sender wishes to send to the receiver, and the size of the
  872.      file, first in terms of sectors (CP/M compatibility, if ever any CP/M
  873.      Citadels wish to join the net), and then in just bytes. (Remember, these
  874.      are really just ASCII strings.)
  875.  
  876.         The file is sent only upon positive acknowledgement of this request.
  877.      However, it should not be assumed that a negative response implies that
  878.      the facility is not supported.  Since the size of the file is sent along
  879.      with the request, the receiver may decline to receive the file due to
  880.      space considerations, but could receive a smaller file.
  881.  
  882.         The value of the Send File byte is 7.
  883.  
  884.      IV.6.h Alternate Room Sharing
  885.         This facility was motivated by the LD room sharing network, due to the
  886.      fact that a system that is willing to absorb the expense of sharing rooms
  887.      at LD may not be willing to support the additional costs that could occur
  888.      from the role reversal command (for instance, very large files being sent
  889.      or requested by the receiving system).
  890.  
  891.         This facility solves the above problem.  Succinctly, it notifies the
  892.      receiving system that the caller wishes to share the specified room.  Upon
  893.      receiving a positive acknowledgement, the caller proceeds to send all
  894.      net messages that should be sent to the receiver.  When finished, the
  895.      receiver sends all net messages meant for the caller for the specified
  896.      room.  This is most commonly used for C86Net routing.
  897.  
  898.         Usually, messages from systems other than the two involved in the
  899.      network session will be passed to other systems using this Facility.
  900.  
  901.      The value of the Alternate Room Sharing byte is 8.
  902.  
  903.      IV.7 ITL Alternate Realities
  904.         These commands will be used to attempt to change to different
  905.      communication protocols at the ITL level.  Since only the basic XMODEM
  906.      style of ITL is currently supported, there are no entries in this
  907.      section. However, byte value 100 is reserved for future use in connection
  908.      with facilities of this type.
  909.  
  910.      IV.8 Security
  911.         These facilities address security concerns on the network.
  912.  
  913.  
  914.  
  915.  
  916.  
  917.  
  918.  
  919.  
  920.  
  921.  
  922.                                     -13-
  923.  
  924.  
  925.  
  926.  
  927.  
  928.  
  929.      IV.8.a System Net Password
  930.         This facility provides a rough security system by allowing a string
  931.      designated to be a password to be sent by the caller to the receiver.
  932.      The protocol itself does not designate what a bad (or good) password
  933.      should mean to the receiving system; this is up to the implementors.  As
  934.      an example, the implementor of Citadel-86 has made the following
  935.      decisions (this is [or should be] detailed in NETWORK.DOC):
  936.  
  937.       o If there is no password listed for this system, and none is sent, or a
  938.         zero-length password is sent, then the caller is assumed to be
  939.         validated, and all commands will be whole-heartedly executed.
  940.       o If the caller sends a password that matches (non case-sensitive) with
  941.         the password that the receiver has recorded for the caller, then the
  942.         caller is validated and all commands will be executed.
  943.       o If the caller sends a password that does not match, then the receiver
  944.         will do nothing useful during role reversal, and will not respond
  945.         positively to role reversal requests.
  946.  
  947.         Technically, this command is very simple.  The caller sends the
  948.      command byte to the receiver, and the first parameter of the command byte
  949.      contains the password (<= 20 including terminating NULL).  The receiver
  950.      ALWAYS responds positively, whether or not the password matches.
  951.  
  952.         The value of the System Net Password byte is 202.
  953.  
  954.      IV.9 Other Reserved Facility Byte Values.
  955.         Byte values 20 - 30 are reserved for STadel routing.
  956.  
  957.         Before using any other byte values, please try to coordinate with
  958.      whomever else is implementing C86Net.
  959.  
  960.      IV.10 Facilities -- Short List
  961.             Name    |     Byte Value  |   Description
  962.             ----    |     ----------  |   -----------
  963.      Hangup         |         0       |   End a network session or role
  964.                     |                 |           reversal.
  965.      Error Code     |       200       |   Alternate error reporting (not
  966.                     |                 |           implemented on Citadel-86).
  967.      Role Reversal  |       201       |   Allow reveral of roles during call.
  968.      Normal Mail    |         1       |   Send Mail.
  969.      File Request   |         2       |   Request a File.
  970.      Ambiguous FR   |         3       |   Ambiguous File Request.
  971.      AFR w/ approval|         4       |   Ambiguous File Request With Approval
  972.                     |                 |           (not implemented).
  973.      Network Room   |         5       |   Send messages from room to system.
  974.      Check Mail     |         6       |   Check Mail previously sent.
  975.      Send File      |         7       |   Send File to system.
  976.      Alt Room Net   |         8       |   Share room alternate system (routing).
  977.      System pwd     |       202       |   System password.
  978.      STadel         |       20-30     |   orc's evil purposes.
  979.         reserved
  980.  
  981.  
  982.  
  983.  
  984.  
  985.  
  986.  
  987.  
  988.                                     -14-
  989.  
  990.  
  991.  
  992.  
  993.  
  994.  
  995.      V. Minimal Compatability Requirements
  996.         In order for a system to be compatible with C86Net at a minimal level,
  997.      it must satisfy requirements at the ITL and AL levels.
  998.  
  999.         At the ITL level, it must be able to call stabilize and use the XMODEM
  1000.      style of transfer for all facilities supported at the AL level.  This
  1001.      includes the SYSTEM ID that follows call stabilization.
  1002.  
  1003.         At the AL level, technically the minimum facility support that you
  1004.      need is only the Hangup facility (Section IV.5.a).  However, that's
  1005.      hardly useful, so a practical minimum would be the Hangup and Mail
  1006.      commands.
  1007.  
  1008.  
  1009.      Appendix A.  Message Transfer Format
  1010.          The format for all C86Net messages on the net
  1011.      consists of a collection of C strings (text followed by a null) that
  1012.      represents all the data associated each message.  Each field is
  1013.      identified by the first character of text in that field, and each
  1014.      identifier is unique. The fields may come in any order, with the
  1015.      exception that the Message text field is the last field. Any data
  1016.      following the null byte that ends the Message field is assumed to be
  1017.      part of the next message.
  1018.  
  1019.         All data is straight ASCII, ended with a null byte, including those
  1020.      fields that could be encoded in binary.
  1021.  
  1022.         The following fields and identifiers are currently supported.
  1023.  
  1024.       Identifier        Data                                 Max Length
  1025.       ----------        ----                                 ----------
  1026.       'A'          Author of current message.                20
  1027.       'D'          Date on which message was written.        20
  1028.       'N'          Name of system which message was          20
  1029.                     written on.
  1030.       'O'          ID of system which message was written    20
  1031.                     on (i.e., "US 612 866 1804").
  1032.       'R'          Room which message was originally         20
  1033.                     written in.
  1034.       'S'          Message ID on source system, in old       20
  1035.                     CP/M Citadel 8-bit style (i.e., 32 bit
  1036.                     number split into two 16 bitters.  See
  1037.                     below in the example).
  1038.       'T'          Recipient of message (normally for        20
  1039.                     private Mail).
  1040.       'C'          Time message was written.                 20
  1041.       'M'          Message text, all CRs changed to Line     7499, should not
  1042.                     Feeds.                                         be limited,
  1043.                                                                    though.
  1044.       'Z'          STadel reserved                           ??
  1045.  
  1046.         In the above table, the MAX LENGTHS include the NULL byte.
  1047.  
  1048.  
  1049.  
  1050.  
  1051.  
  1052.  
  1053.  
  1054.                                     -15-
  1055.  
  1056.  
  1057.  
  1058.  
  1059.  
  1060.  
  1061.         So, a message on Test System (nodeId US 612 866 1804, nodeName 'C86
  1062.      Test System') that looks like this:
  1063.  
  1064.         86Feb01 @ 10:01 from John Flash in Other Citadels>
  1065.         This is a test.
  1066.  
  1067.  
  1068.       with a message ID of 5644 might look like this during transmission on
  1069.       the net:
  1070.  
  1071.       D86Feb01<0>C10:01<0>S0 5644<0>NC-86 Test System<0>OUS 612 866
  1072.       1804<0>AJohn<space>Flash<0>ROther Citadels<0>MThis is a test.<LF><0>
  1073.  
  1074.         Clear as mud, right?
  1075.  
  1076.      Appendix B.  Examples!
  1077.         The following are examples for selected facilities, in order to
  1078.      illuminate what may be otherwise very bewildering examples.  Not all
  1079.      of the facilities are covered.
  1080.  
  1081.         Many of the facilities will show examples at two levels:  a high level
  1082.      displaying the "file" flow used, and a low level view examining the
  1083.      contents of certain data and control packets.  Throughout the examples,
  1084.      the term "file" means an XMODEM session is completed, starting with block
  1085.      #1 and ending with block N and an EOT.  This may be an actual file being
  1086.      transferred, as will happen with File Requests, or it may mean a series
  1087.      of messages being transmitted, which may or may not be stored as a file,
  1088.      depending on the implementation, or it may refer to control information
  1089.      (such as a Facility Request), which again could be stored as a file on
  1090.      disk, or stored in a temporary RAM buffer.
  1091.  
  1092.         The abbreviation FR stands for Facility Request below.  In all cases
  1093.      below, unless otherwise noted, it assumes that all Facility Requests are
  1094.      positively acknowledged.
  1095.  
  1096.      B.1 Call Stabilization
  1097.         The following illustrates a call in which the first attempt at call
  1098.      stabilization fails because the receiver, a 300/1200 system which cannot
  1099.      directly detect the baud of the caller, started looking at 300 baud, while
  1100.      the caller is at 1200.
  1101.  
  1102.           CALLER                    RECEIVER
  1103.                <The systems connect!>
  1104.         <7><13>69> -->              receives garbage, switches to 1200 after
  1105.                                     4 seconds
  1106.          Times out at 4
  1107.          seconds
  1108.         <7><13>69> -->              Receives sequence
  1109.          Gets confirmation     <--  <~7><~13><~69>
  1110.           <ACK> -->                 Receives ACK
  1111.  
  1112.              CALL STABILIZATION COMPLETED
  1113.  
  1114.  
  1115.  
  1116.  
  1117.  
  1118.  
  1119.  
  1120.                                     -16-
  1121.  
  1122.  
  1123.  
  1124.  
  1125.  
  1126.  
  1127.      B.2. ID & Name
  1128.         From a high level, caller identification flow control is very simple.
  1129.  
  1130.         CALLER           RECEIVER
  1131.              == <file> ==>
  1132.  
  1133.         The length of file in this case should never exceed a single XMODEM
  1134.      sector.  The contents should look like this:
  1135.  
  1136.          <C-string: nodeId><C-string: node name><trash>
  1137.  
  1138.         Suppose the node name of a system was Dandelion Wine, and the node id
  1139.      was US 612 732 4419.  Then the ID & Name "file" would contain
  1140.  
  1141.          US 612 732 4419<0>Dandelion Wine<0><irrelevant trash>
  1142.  
  1143.      B.3. Normal Mail
  1144.         At a high level, here is the sequence of file transfers.
  1145.  
  1146.            CALLER           RECEIVER
  1147.          == file: FR == >
  1148.                       <== file: GOOD ==
  1149.          == file: Mail> messages == >
  1150.  
  1151.         At a low level, the file: FR should only have a length of one sector
  1152.      (as should all FRs), containing:
  1153.  
  1154.         <1><0><126 bytes of irrelevant trash>
  1155.  
  1156.         The file: GOOD should contain the following:
  1157.  
  1158.         <1><127 bytes of trash>
  1159.  
  1160.         Since that's all that a GOOD reply should ever contain, we shall not
  1161.      explain that again.  Refer to Appendix A for an explanation of the
  1162.      appearance of file: Mail> messages.
  1163.  
  1164.      B.4. Ambiguous Room File Requests
  1165.         Here is the high level view of this facility:
  1166.  
  1167.            CALLER           RECEIVER
  1168.          == file: FR == >
  1169.                       <== file: GOOD ==
  1170.                       <== file: File #1 header ==
  1171.                       <== file: File #1 ==
  1172.                             ...
  1173.                       <== file: File #n header ==
  1174.                       <== file: File #n ==
  1175.                       <== file: File header with empty string ==
  1176.  
  1177.         For a low level examination, let's assume that the Caller asked for
  1178.      *.doc in a room called Whatever>.   The file: FR would then contain
  1179.  
  1180.         <3>Whatever<0>*.doc<0><0><irrelevant trash>
  1181.  
  1182.  
  1183.  
  1184.  
  1185.  
  1186.                                     -17-
  1187.  
  1188.  
  1189.  
  1190.  
  1191.  
  1192.  
  1193.         Now let's suppose that the RECEIVER has decided that the files SEX.DOC
  1194.      and GARBAGE.DOC match with *.doc in Whatever>, with sizes of 100,909 and
  1195.      32,555 bytes. File #1 header would contain
  1196.  
  1197.         SEX.DOC<0>789<0><irrelevant trash>
  1198.  
  1199.      while File #1 itself would be the contents of SEX.DOC.  File #2 header
  1200.      would contain
  1201.  
  1202.         GARBAGE.DOC<0>255<0><irrelevant trash>
  1203.  
  1204.      while File #2 would be the contents of GARBAGE.DOC.  File #3 header,
  1205.      since no more files need to be sent, would contain
  1206.  
  1207.         <0><irrelevant trash>
  1208.  
  1209.      and that would constitute the end of this Facility.
  1210.  
  1211.      B.5 Network Room
  1212.         From a high level viewpoint, this Facility looks like this:
  1213.  
  1214.            CALLER           RECEIVER
  1215.          == file: FR == >
  1216.                       <== file: GOOD ==
  1217.          == file: messages == >
  1218.  
  1219.         The contents of the FR for a room named Philosophy would be
  1220.  
  1221.          <5>Philosophy<0><0><irrelevant trash>
  1222.  
  1223.      B.6 Check Mail
  1224.         From a high level viewpoint, this Facility looks like this:
  1225.  
  1226.            CALLER           RECEIVER
  1227.          == file: FR ==>
  1228.                       <== file: GOOD ==
  1229.                       <== file: acknowledgements ==
  1230.  
  1231.         The content of the FR would simply be
  1232.  
  1233.            <6><0><irrelevant trash>
  1234.  
  1235.         Let's look at the example that all the Mail messages transferred
  1236.      earlier could be delivered.  The content of file: acknowledgements
  1237.      would then be
  1238.  
  1239.             <0><irrelevant trash>
  1240.  
  1241.      which would result in a single sector being returned to the transmitter.
  1242.      Now let's suppose that two Mail messages could not be delivered.  One was
  1243.      addressed to Curly, while the other was addressed to Moe, both from
  1244.      Mikey.  Then the file: acknowledgements would contain
  1245.  
  1246.        <1>Mikey<0>Moe<0>87Oct08 @ 4:04<0><1>Mikey<0>Curly<0>87Oct07
  1247.        @ 23:13<0><0><irrelevant trash>
  1248.  
  1249.  
  1250.  
  1251.  
  1252.                                     -18-
  1253.  
  1254.  
  1255.  
  1256.  
  1257.  
  1258.  
  1259.      B.7 Send File
  1260.  
  1261.         From a high level viewpoint, this Facility looks like this:
  1262.  
  1263.            CALLER           RECEIVER
  1264.          == file: FR ==>
  1265.                       <== file: GOOD ==
  1266.          == file: file ==>
  1267.  
  1268.         The contents of the FR for a file named GURGLE.NOT, size 13,934 bytes,
  1269.      would be
  1270.  
  1271.           <7>GURGLE.NOT<0>109<0>13934<0><0><irrelevant trash>
  1272.  
  1273.      B.8 Alternate Room Sharing
  1274.         From a high level viewpoint, this Facility looks like this:
  1275.  
  1276.            CALLER           RECEIVER
  1277.          == file: FR ==>
  1278.                       <== file: GOOD ==
  1279.          == file: messages ==>
  1280.                       <== file: messages ==
  1281.  
  1282.         For a room named Horse Trading, the FR would look like
  1283.  
  1284.           <8>Horse Trading<0><0><irrelevant trash>
  1285.  
  1286.         The file: messages would be the messages to be sent from the
  1287.      transmitter to the receiver, first, and then from the receiver to the
  1288.      transmitter.
  1289.  
  1290.      Appendix C.  BBS Software compatible with C86Net
  1291.         The following BBS packages are known to be at least minimally
  1292.      compatible with C86Net.  Consult their documentation to find out how
  1293.      many facilities each supports.
  1294.  
  1295.       Name                 Home base          Number           Baud rates
  1296.       ----                 ---------          ------           ----------
  1297.       Citadel-86           C-86 Test System   (612) 866-1804   3/12/24
  1298.       NeoCitadel           SuperComp II       (612) 431-1107   3/12/24
  1299.       Amiga Citadel-68K    The Phoenix        (612) 459-8095   3/12/24
  1300.       STadel               Pell               (612) 377-9239   3/12
  1301.  
  1302.      Appendix D. Main C86Net
  1303.         All four of the homebase systems listed in Appendix C participate in
  1304.      what may best be termed the main C86Net, to which all systems are invited
  1305.      to participate in.  This net runs from 3:00 AM to 3:45 AM Twin Cities
  1306.      time, 7 days a week.  Most of the systems participating in that network
  1307.      are located in the Twin Cities network, and share a number of rooms for
  1308.      various purposes, but there are several other systems networking with the
  1309.      Twin Cities, some of which also share rooms.
  1310.  
  1311.         There is also a small adjunct net which networks from 3:45 AM to
  1312.      4:00 AM, every night, for the purpose of LD room sharing routing.
  1313.  
  1314.  
  1315.  
  1316.  
  1317.  
  1318.                                     -19-
  1319.  
  1320.  
  1321.  
  1322.