home *** CD-ROM | disk | FTP | other *** search
/ Hacker Chronicles 1 / HACKER1.ISO / hack / ciss4.txt < prev    next >
Text File  |  1992-03-04  |  13KB  |  287 lines

  1.  
  2. PROTOCOL NOTES: CIS A PROTOCOL
  3.  
  4. by Bob Richardson, Carl Raff, and Scott Lowe
  5.  
  6. note: this material was not prepared for or by CIS and they have no responsibility for the accuracy or completeness of the contents.  We gratefully acknowlege their cooperation and the super job they are doing, and simply wish to help document the file transfer protocol.
  7.  
  8.  
  9. INTRODUCTION
  10.     The information presented here is intended to provide  an outline of the written specifications for the CIS A Protocol.  It is designed to be used by programmers who may need to debug or write programs to interface with Compuserve Information Services (CIS) terminal programs.
  11.  
  12.     The PBM 1000 supports a communication subsystem based on the CIS protocol.  One reason is that the CIS protocol is a step in the direction of software standardization   and higher compatibility among different computer systems.  The CIS protocol supports flexible file transfer and is practical for in-house use on a direct-connect medium speed network.  PBM tests show that the protocol runs effectively at 19.2 KB and can transfer data at a rate of up to 50 KB.
  13.  
  14.     In transferring files from one system to another, one CP/M based system (with a copy of any of the CIS executives that supports the A protocol) acts as a terminal.  The  other system, referred to as the "host," treats the "terminal" system both as a console and as the source or target of the file transfer protocol. 
  15.  
  16.     The following is a brief description of the CIS A  Protocol used by CIS.  Also included is a list of Executives compatible with it, and two new files which allow anyone with a CP/M remote system to support this protocol between CP/M systems.
  17.  
  18. Note: CP/M is a registered trademark of Digital Research.
  19.  
  20.  
  21. The Executives
  22.  
  23.  
  24. 1.MNEXEC  [Old  Executive]
  25.    An older version of the Executive, MNEXEC supports
  26.    ASCII transfer only.  This exeecutive is primarily
  27.    useful for those who wish to buy programs from
  28.    Softex,dd as its ESC I response is the only one that
  29.    the Softex system currently recognizes as a file-xfer
  30.    executive (see ESC I response). This program does not
  31.    really support the A protocol, but rather a subset.
  32.  
  33. 2.CSEXEC  [The Compuserve Executive]
  34.    CSEXEC was the first "vanilla" version with binary
  35.    support.  It is a good executive to start with for
  36.    those wishing to heavily modify the source because it
  37.    suffers less from "rampant equate-itis" than BUFEXEC
  38.    (i.e, it accomplishes tasks in a more general fashion
  39.    without presenting too many options to the user).  The
  40.    current version seems to be modified for the Apple
  41.    computer.
  42.  
  43. 3.BUFEXEC [Buffered CSEXEC]
  44.    BUFEXEC adds memory buffered hard copy to CSEXEC, as
  45.    well as many customization equates.  The Osborne
  46.    version is called "BUFEXO.ASM," and is identica to
  47.    BUFEXEC except for modifications for the Osborne I.
  48.  
  49. 4.IOBEXEC [IO/Byte Executive]
  50.    This executive is identical to BUFEXEC, except that it
  51.    uses IOBYTE dispatch to access the serial  port.  If
  52.    your system is interrupt driven, you must use IOBEXEC
  53.    or modify one of the other executives. In addition,
  54.    IOBEXEC allows use of cursor positioning.
  55.  
  56.  
  57. PROTOCOLS
  58.  
  59.     Characteristics of the physical protocol: asynchronous; 8 bits to the byte; 1 stop bit; no parity.
  60.     The protocol mode is turned "on" by an SI instruction (shift in) from host and terminal functions in protocol mode until an SO (shift out) instruction is received.
  61.  
  62.     The ESC "I" Response:  Each terminal responds to an
  63.     ESC "I" with an ID string (see diagrams below).
  64.  
  65.     The ESC "A" Sequence:  This initiates a file transfer.
  66.     The ESC "L" Sequence:  This starts a load sequence.
  67.  
  68.  
  69.              Notes: 
  70.  
  71.     The  "." (period) is used to ACK a message (acknowledge and accept).
  72.  
  73.     The  "/" (slash) is used to NAK a message (negative  acknowledge; request retransmission).
  74.  
  75.     CTRL U is used to abort transmission.
  76.  
  77.         Note: a list of fields enclosed in [ ] marks
  78.         indicate that 1 of the list will be transmitted,
  79.         depending on the conditions at the time.
  80.  
  81.  
  82. ESC "I" Sequence
  83.  
  84.  
  85.              Host                               Terminal
  86.                        "SI" (Protocol on)            
  87.              ------------------------------------------->                          ESC I (Who are you?)
  88.              ------------------------------------------->
  89.                      ID String (see below)
  90.             <-------------------------------------------
  91.                        "SO"  (Protocol  off)
  92.             [------------------------------------------->]                     error; feature lock; end of function
  93.                        Continue in Protocol
  94.             [------------------------------------------->]
  95.  
  96.  
  97.     Action:  The terminal sends its ID string to the host. The host checks the features list, etc.
  98.  
  99.     ID  String: A full sample of the ESC I response for the IOBEXEC protocol (assigned by CIS) is as follows:
  100.  
  101.           <#> <CPM> <MYSYSTEM>, CC, HC, PA, PL, <CR>
  102.  
  103.     The first character is the protocol ID, followed by the OS name and the computer name (optional). The string of four pairs of characters are a series of features to be assigned if the system supports them:
  104.  
  105.  
  106.    o    CC, HC, PA, and PL <CR>
  107.         CC = full cursor control
  108.         HC = hard copy
  109.         PA = "A" protocol
  110.         PL = "L" protocol
  111.  
  112.         See the comments in any version of the executive
  113.         for a  more detailed discussion of these fields
  114.         MNEXEC is an older version of the executive, and
  115.         so the ID string is slightly different in format
  116.         than the one for the CIS Executive. A sample
  117.         response follows:
  118.  
  119.           <01>,<BF>,<SYSTEM2>,<&CPM>,<D> <CR>
  120.  
  121.         The first character is the page address of the
  122.         lowest available page of memory in the terminal,
  123.         followed by the page address of the highest
  124.         available page in memory, the computer ID, OS name,
  125.         and "D" for disk drives.
  126.  
  127.  
  128. ESC "L" Sequence
  129.  
  130.  
  131.      Host                                        Terminal
  132.                             SI
  133.      --------------------------------------------------->
  134.                             ESC L
  135.      --------------------------------------------------->
  136.      <count-1 byte> <low addr> <hi addr> <data> <CHKSUM>
  137.     ---------------------------------------------------->
  138.                   "." = ACK (Received; OK)
  139.   [ <-------------------------------------------------- ]
  140.           "/" = NAK (Error; request retransmission)
  141.   [ <-------------------------------------------------- ]
  142.                          ESC L
  143.      --------------------------------------------------->
  144.             Record                    }more to load
  145.      --------------------------------------------------->
  146.                   "." = ACK (Received; OK)
  147.  [ <--------------------------------------------------- ]
  148.              "/" = NAK (Error; request retransmission)
  149.  [ <-------------------------------------------------- ] 
  150.                         SO (Done)
  151.  [  -------------------------------------------------> ]
  152.  
  153.  
  154.     Action: The terminal loads <data> into memory starting at address <low> <hi> for <count> bytes.
  155.  
  156.  
  157.  
  158.             ESC "A" Sequence: File Transfer
  159.          Host                               Terminal
  160.                     SI (Protocol on)
  161.          ------------------------------------------->
  162.                  ESC A (Start file transfer)
  163.          ------------------------------------------->
  164.            <1-byte SOH> <1-byte rec #> <U/D> <A/B>
  165.            <file spec><CR> <ETX> <CHKSUM>
  166.          -------------------------------------------->
  167.          Note: U/D=direction; A/B=ASCII or binary; file
  168.          spec=standard CP/M  "." ACK (Received; OK)
  169.      [  <------------------------------------------- ]
  170.                          "/" NAK (Retransmit)
  171.      [  <-------------------------------------------- ]
  172.  
  173.  
  174.  
  175.      Action: The terminal sets up to read or write the file given in <file spec>.  Transfer will occur either until end-of-file <B> or, if <A> (ASCII) is being used, until the first CTRL-Z.  The file will be downloaded (transferred from host to terminal) or uploaded (transferred from terminal to host) depends on the contents of the direction byte (U or D).  The protocol proceeds as follows:
  176.  
  177.  
  178. ESC "A" Sequence: File Transfer
  179.  
  180.  
  181.                     Download Subsequence
  182.         Host                               Terminal
  183.         <SOH> <R/N>  <Text>    <ETX> <CHKSUM>
  184.         ------------------------------------------->
  185.         Note: R/N = Sequential record number
  186.         "."  ACK (Accepted record)
  187.      [ <------------------------------------------- ]
  188.               "/"  NAK (Rejected; retransmit)
  189.      [ <------------------------------------------- ]
  190.           <SOH> <R/N>    <Text>     <ETX> <CHKSUM>
  191.         ------------------------------------------->
  192.                  "."  ACK (Accepted record)
  193.        <------------------------------------------- ]
  194.                 "/"  NAK (Rejected; retransmit)
  195.      [ <------------------------------------------- ]
  196.                <SOH> <R/N> <EOT> <ETX> <CHKSUM>
  197.         ------------------------------------------->
  198.                          "." or "/"
  199.        <-------------------------------------------
  200.                SO  (Shift out; protocol off)
  201.       [ ------------------------------------------->
  202.                    ESC A  (Next file)
  203.       [ ------------------------------------------->
  204.                     ^
  205.                     |                   
  206.            [ Note: This is currently unused by CIS.]
  207.  
  208.  
  209. ESC  "A" Sequence: File Transfer
  210.  
  211.  
  212.               Upload Subsequence 
  213.              Host                               Terminal
  214.  
  215.                            "."  ACK
  216.          ------------------------------------------->
  217.            <SOH> <R/N> <   Text   > <ETX> <CHKSUM>
  218.         <-------------------------------------------
  219.                "."  ACK  (Record accepted)
  220.        [ -------------------------------------------> ]
  221.          "/"  NAK  (Record rejected; retransmit)
  222.        [ -------------------------------------------> ]
  223.           <SOH> <R/N> <   Text   > <ETX> <CHKSUM>
  224.        <-------------------------------------------
  225.               "."  ACK  (Record accepted)
  226.        [ -------------------------------------------> ]
  227.           "/"  NAK  (Record rejected; retransmit)
  228.        [ -------------------------------------------> ]
  229.           <SOH> <R/N> <   EOT   > <ETX> <CHKSUM>
  230.        <-------------------------------------------
  231.             "."  ACK  (Record accepted)
  232.        [ -------------------------------------------> ]
  233.               "/"  NAK  (Record rejected; retransmit)
  234.        [ -------------------------------------------> ]
  235.                    SO  (Shift out; exit protocol)
  236.        [ ------------------------------------------->
  237.                    ESC A  (Next file)
  238.        [ ------------------------------------------->
  239.  
  240.  
  241. Field Definitions
  242.  
  243.  
  244. A/B     Indicates file type.  An "ASCII" file ends in CTRL Z; a "Binary" file ends with EOT (CTRL D).
  245.  
  246. CHKSUM  Check sum on record calculated on all characters sent after (and not including) start of header (SOH) and until (and not including) ETX.  CHKSUM is calculated as follows:
  247.  
  248.          1. CHKSUM <--- (CHKSUM * 2) mod 256
  249.          2. CHKSUM <--- CHKSUM + character
  250.          3. CHKSUM <--- CHKSUM + carry
  251.  
  252.         If the check sum is less than hex '20', it is increased by hex '40' and sent masked (preceded by a DLE character).
  253.  
  254. EOT     End of transmission (CTRL D).  When EOT is encountered in text field of a record, it ends the current file.
  255.  
  256. ETX     End of text (CTRL C).  ETX ends each packet (a group or string of related characters), and is followed by  CHKSUM.
  257.  
  258. R/N     Indicates the record number in ASCII characters  0 through 9.  It is incremented by one ASCII number after each previous record is acknowledged (ACK).  Length: 1 byte.
  259.  
  260. SI      Shift in (CTRL O).  SI starts the protocol mode.
  261.  
  262. SO      Shift out (CTRL N).  SO ends the protocol mode.
  263.  
  264. SOH     Start of header (CTRL A). Each record begins with  SOH. Length: 1 byte.
  265.  
  266. TEXT    This indicates a variable length string, which is  the information content of the packet.
  267.  
  268. U/D     In an ESC A header, the U/D instruction determines  the direction of transfer.  U = transfer to host; D = transfer from host.
  269.  
  270.  
  271. Character Masking
  272.  
  273.  
  274.    Certain control characters are increased by hex '40' and are preceded by a DLE character when encountered in the "Text" field of a message.  These characters at this time are: 
  275.  
  276.                   Name      Value
  277.                   NULL      X'00'
  278.                   SOH       X'01'
  279.                   STX       X'02'
  280.                   ETX       X'03'
  281.                   EOT       X'04'
  282.                   DLE       X'10'
  283.                   NAK       X'15'
  284.  
  285.     Note: These are the characters masked by the executive.  CIS is currently masking almost all control characters.
  286.     An exception is the EOT character in the end of file record, which is sent unmasked.  In general, masking is used to prevent confusion between a character used as data  (masked) and a protocol character (unmasked).
  287.