home *** CD-ROM | disk | FTP | other *** search
/ Programmer's ROM - The Computer Language Library / programmersrom.iso / ada / defdata / usersman.doc < prev    next >
Encoding:
Text File  |  1988-05-03  |  102.7 KB  |  2,554 lines

  1. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2. --tcp.man
  3. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  4. 1.  TCP
  5.  
  6. 1.1  Functional Description
  7.  
  8.      The  Transmission  Control  Protocol(TCP)  resides  in   the 
  9. transport  layer  of  the DOD Internet  Model.   It  encapsulates 
  10. messages  received from the Utility layer protocols which  reside 
  11. directly  above  and  passes the packet  to  the  Internet  layer 
  12. (communicates  with  the Internet Protocol(IP)).  TCP provides  a 
  13. reliable  communication between pairs of processes  in  logically 
  14. distinct  hosts on networks and sets of interconnected  networks.  
  15. The  following  is a list of functions that are supported by  the 
  16. protocol:
  17.  
  18.     a.  Connection-oriented
  19.     b.  Reliable data transfer
  20.     c.  Ordered data transfer delivery
  21.     d.  Full-duplex
  22.     e.  Flow control
  23.  
  24. TCP  communicates  with both upper and lower layer  protocols  by 
  25. means  of  response  and  request  primitives.    A  multiplexing 
  26. mechanism  is  built  into TCP to support  multiple  Upper  Layer 
  27. Protocol  (ULP)  processes by a  single  TCP  process.   Messages 
  28. passed  into  TCP  from  ULPs  are buffered  and  sent  when  the 
  29. appropriate  size is adequate for efficient transfer or  internal 
  30. processing  warrants communication.   All  communication  between 
  31. entities is synchronized and flow control mantained by TCP.
  32.  
  33. The  basic  data transfer provides the capability to  transfer  a 
  34. continuous  bit stream from one user to another.   It provides an 
  35. urgent  service,  which provides an indication to the  user  that 
  36. some  portion of the data transfer is more important than  usual.  
  37. It provides a push function which assures that any data currently 
  38. stored by the intermediate switch will be sent immediately.
  39.  
  40. The  reliability  facility  assures that if  the  information  is 
  41. received by the receiving user, it will be received correctly and 
  42. in the same order as it was sent.
  43.  
  44. Multiplexing  provides for multiple users to share communications 
  45. facilities.  It allows many processes within single host to share 
  46. TCP   communication  facilities  by  providing  each  process   a 
  47. different port.   A unique address,  called a socket,  is  formed 
  48. from  the concatenation of the port address with the network  and 
  49. host address from the internet communication layer.
  50.  
  51. Connection   management  provides  for  establishing  connections 
  52. assigning  a unique name for each  connection,  and  initializing 
  53. status information for reliability and flow control.  Handshaking 
  54. is  used to unambiguously and reliably establish each connection.  
  55. The  state  of each connection is maintained  to  assure  correct 
  56. operation.   An  orderly procedure to close a connection has also 
  57. been established.
  58.  
  59. The  TCP  layer assumes only that it has a  (perhaps  unreliable) 
  60. datagram  service  available  for  transmission.   This  datagram 
  61. service is provided by the Internet Protocol.  The implementation 
  62. of  TCP perform efficient segmentation of data and reassembly  of 
  63. segments.  If a segment arrives in the window but out of order it 
  64. will  be retained until the preceding segments arrive,  at  which 
  65. time the segments may be passed on to the layer of protocol above 
  66. TCP.  This philosophy will prevent needless retransmissions.
  67.  
  68. Buffers sent to TCP from both upper and lower level protocols are 
  69. not necessarily delivered immediately.   TCP segmentizes messages 
  70. only in the event of a push flag will buffers be forwarded to the 
  71. local ULP or IP.
  72.  
  73. This  version of the TCP conforms to  RFC:793,  the  Transmission 
  74. Control  Protocol  Darpa Internet Program Protocol  Specification 
  75. from  September 1981.   It is designed so that it is  effectively 
  76. decoupled from the layers above and below it.
  77.  
  78.  
  79. 1.2  Using TCP
  80.      
  81.      TCP  communicates with upper and lower protocols via queues, 
  82. request  primitives,  and response primitives.   The queues  that 
  83. interface  the ULPs to TCP are structure with one queue  for  all 
  84. request to TCP.   Each connection a ULP has, TCP will communicate 
  85. all response to a queue unique for that connection.
  86.  
  87. Request  Primitives are sent by corresponding ULP(s) to  generate 
  88. specific action by TCP.   The sending of a request primitive does 
  89. not  warrant  an  immediate  response  or  action  by  TCP.   The 
  90. following is a list of requests supported by TCP:
  91.  
  92.      a.   Passive  Unspecified  Open :   TCP will accept an  open 
  93.           request from any other TCP.
  94.  
  95.      b.   Passive  Specified  Open :   TCP will  accept  an  open 
  96.           request only from the specified socket.
  97.  
  98.      c.   Active  Open  :   TCP initiates an open to establish  a 
  99.           connection.
  100.  
  101.      d.   Status  :   The  ULP  request  TCP  status  information 
  102.           concerning the specified connection.
  103.  
  104.      e.   Allocate :  The ULP request that TCP allocate a receive 
  105.           buffer.
  106.  
  107.      f.   Close:  The ULP request that TCP begin closing sequence 
  108.           with remote ULP.
  109.  
  110.      g.   Send Data :   ULP sends data to be sent to remote  ULP, 
  111.           Urgent flag and Push data are also included in request.
  112.  
  113.      h.  Abort :  Terminate connection.
  114.  
  115. Response  Primitives  are sent by TCP to a specified  ULP  queue.  
  116. The following is a list of responses supported by TCP:
  117.  
  118.      a.  Buffer for User :  contains data for user
  119.  
  120.      b.  Pushed Buffer for User :  data has been pushed by remote 
  121.          TCP
  122.  
  123.      c.  Connection Illegal :  user attempts to open a connection 
  124.          that is not legal.
  125.  
  126.      d.  Connection  does not exist :   user attempt an operation 
  127.          on a  connection that has not been opened.
  128.  
  129.      e.  Return Local Connection Name :  local connection name is 
  130.          returned after a ULP attempts an open request primitive.
  131.  
  132.      f.  Insufficient   Resources  :   returned  when  a  request 
  133.          primitive   exceeds TCP present resource allocation  for 
  134.          the connection.
  135.  
  136.      g.  Connection   Closing  :   a remote ULP has requested  to 
  137.          close   the connection;  the local ULP should finish all 
  138.          processing and send a close request primitive.
  139.  
  140.      h.  Urgent Data :  urgent data is forthcoming.
  141.  
  142.      i.  OK on Abort :  confirms a successful abort.
  143.  
  144.      j.  Precedence not allowed:  ULP precedence mismatch.
  145.  
  146.      k.  Connection Exists :  An request primitive was issued for 
  147.          an already established connection.
  148.  
  149.      l.  TCB  pointer and state :  reply from TCP with respect to 
  150.          a status  request primitive.
  151.  
  152.      m.  Connection Reset :  confirms a successful reset.
  153.  
  154.      n.  OK on close :  confirms a successful reset
  155.  
  156.      o.  Connection   now   open  :    confirms  the   successful 
  157.          establishment of a  connection.
  158.  
  159.      p.  IP overloaded :  IP resources exhausted.
  160.  
  161.      q.  Could not do reset :  TCP cannot reset connection.
  162.  
  163.      r.  Out of Buffers :  system buffer resource exhausted.
  164.  
  165.      s.  Pushed   Buffer for user :   confirms send data  request 
  166.          primitive for a  pushed buffer.
  167.  
  168.      t.  Connection Refused :  TCP cannot make connection.
  169.  
  170. 1.3 Sample Session ULP - TCP Communication
  171.  
  172.        Upon  initialization TCP's ports are closed.   A ULP  must 
  173. send  an  unspecified or specified request to set the  connection 
  174. state to listen.   An active OPEN can also be requested with  the 
  175. connection  state  either closed or listening.   An example of  a 
  176. connection opening, sending data, and closing is shown below:
  177.  
  178. --procedure calls from package specification WITH_USER_
  179.     COMMUNICATE
  180.  
  181. --ULP wants to setup Telnet connection in listen state(unspecified)
  182.  
  183. OPEN_PARAMETERS : OPEN_PARAMS;
  184. TCP_MESSAGE : MESSAGE;
  185.  
  186. OPEN_PARAMETERS := (LOCAL_PORT, --Telnet Port (23)
  187.                      -1, --unspecified foreign port
  188.                      -1, --unspecified foreign net host
  189.                      PASSIVE, --passive open
  190.                      BUFFER_SIZE
  191.                      TIME_OUT
  192.                      LOCAL_CONNECTION_NAME,
  193.                      SECURITY,
  194.                      PRECEDENCE,
  195.                      OPTIONS);
  196. TCP_MESSAGE := (OPEN, OPEN_PARAMETERS);
  197. MESSAGE_FOR_TCP(TCP_MESSAGE);
  198.  
  199. --read user queue for Local Connection Name
  200.  
  201. USER_MESS : USER_MESSAGE; 
  202.  
  203. WAIT_FOR_TCP_MESSAGE( USER_MESS); 
  204.  
  205. -- USER_MESS.MESSAGE_NUMBER = 14 --Return LCN
  206. --this LCN is the port's LOCAL_CONNECTION_NAME 
  207.  
  208. LOCAL_CONNECTION_NAME:=USER_MESS.LOCAL_CONNECTION_NAME; 
  209.  
  210. --User decides to open a connection
  211.  
  212. OPEN_PARAMETERS:=(LOCAL_PORT, --Telnet Port(23)
  213.                      FOREIGN_PORT,
  214.                      FOREIGN_NET_HOST,
  215.                      ACTIVE, --active open
  216.                      BUFFER_SIZE
  217.                      TIME_OUT
  218.                      LOCAL_CONNECTION_NAME,
  219.                      SECURITY,
  220.                      PRECEDENCE,
  221.                      OPTIONS);
  222.  TCP MESSAGE := ( OPEN, OPEN PARAMETERS);
  223. MESSAGE_FOR_TCP(TCP_MESSAGE);
  224. --read user queue for Local Connection Name
  225.  
  226. USER_MESS : USER_MESSAGE; 
  227.  
  228. WAIT_FOR_TCP_MESSAGE( USER_MESS); 
  229.  
  230. -- USER MESS.MESSAGE_NUMBER = 14  --Return LCN
  231. -- this LCN is the port's LOCAL_CONNECTION_NAME 
  232. --Since a passive open was already attempted this assignment is not
  233. --necessary(only if the state was closed)
  234.  
  235. LOCAL_CONNECTION_NAME :=USER_MESS.LOCAL_CONNECTION_NAME; 
  236.  
  237. --allocated receive buffer
  238.  
  239. BUFFER : PACKED BUFFER_PTR; 
  240. RECEIVE_DATA : RECEIVE_PARAMS;
  241.  
  242. BUFFGET( BUFFER, 1); --obtain buffer
  243. BUFFER.TELNET_PTR :=MAX_DATAGRAM_SIZE;  --constant in package 
  244.                                           BUFFER_DATA 
  245.                                         --specification
  246. RECEIVE_DATA:=(LOCAL_CONNECTION_NAME, BUFFER, RECEIVE_BUFFER_
  247.              SIZE);
  248. TCP_MESSAGE := (RECEIVE, RECEIVE_DATA); 
  249. MESSAGE_FOR_TCP(TCP_MESSAGE);
  250.  
  251. --user sends data
  252.  
  253. SEND_PARAMETERS : SEND_PARAMS; 
  254.  
  255. BUFFGET( BUFFER, 1); --obtain buffer
  256.  
  257. --data must be converted to system.byte
  258.  
  259. BUFFER.TELNET_PTR :=MAXIMUM_DATAGRAM_SIZE; 
  260. SEND_PARAMETERS: =   (LOCAL_CONNECTION_NAME, 
  261.                      BUFFER, --buffer with data
  262.                      MESSAGE_SIZE
  263.                      PUSH_FLAG
  264.                      URG_FLAG,
  265.                      TIME_OUT);
  266. TCP_MESSAGE := (SEND, SEND_PARAMETERS),
  267. MESSAGE_FOR_TCP( TCP_MESSAGE);
  268.  
  269. --user receives a message from remote ULP
  270.  
  271. WAIT_FOR_TCP_MESSAGE(USER_MESS); 
  272.  
  273. --USER_MESS.MESSAGE_NUMBER = 10 --buffer for user
  274. --convert message from SYSTEM.BYTE
  275.  
  276. --user closes connection
  277.  
  278. CLOSE_PARAMETERS : ABORT_CLOSE_PARAMS; 
  279.  
  280. CLOSE_PARAMETERS.LCN :=LOCAL_CONNECTION_NAME; 
  281. TCP_MESSAGE := (CLOSE, CLOSE_PARAMETERS);
  282. MESSAGE_FOR_TCP( TCP_MESSAGE);
  283.  
  284. --wait for "OK on Close"
  285.  
  286. WAIT_FOR_TCP_MESSAGE( USER_MESS); 
  287.  
  288. --USER_MESS.MESSAGE_NUMBER_NUMBE = 18 ==OK on Close
  289. --connection is now in close state
  290.  
  291. The  security  clearance  of each participant in the  network  is 
  292. maintained to avoid compromise of data during an exchange.   This 
  293. version  of  TCP  checks security  parameters  however,  since  a 
  294. security  policy has not been established it is left  for  future 
  295. implementations   to   insert  code  to  deny  or  grant   access 
  296. privileges.    The   implementation  does  check   security   and 
  297. precedence levels before a connection is established to make sure 
  298. that  both  entities  match.   In  the event of  a  mismatch  the 
  299. connection is reset.
  300.  
  301. Flow  control is used to assure that the receiver has  sufficient 
  302. resources  to  correctly  receive  the  data  transmitted.   This 
  303. prevents needless data transmissions and network congestion.   It 
  304. is  accomplished using a sliding window techinique  with  dynamic 
  305. window management.
  306.  
  307. 1.4  TCP Computer Program Overview
  308.  
  309. 1.4.1 Hardware -
  310.  
  311.        This  implementation  of TCP is targeted for a VAX  11/780 
  312. and Wicat workstation.
  313.  
  314. 1.4.2  Operating System - This implementation of TCP is  targeted 
  315. for VMS 4.0 and ROS.
  316.     
  317. 1.4.3 Ada Compiler Implementation -
  318.  
  319.   This  implementationi of TCP is written in Telesoft-Ada version 
  320. 1.3d  for  the WICAT.   The VAX 11/780  implementation  uses  the 
  321. DEC/Ada compiler.
  322.  
  323. 1.4.4 Package Overview -
  324.  
  325.     TCP is structured to run independently of other protocols and 
  326. communication  is  realized via queues.   The queue structure  is 
  327. shown  in  figure  1.    Operations  on  the  queues  are  system 
  328. dependent.    Therefore,   only  the  specification  of  the  TCP 
  329. communication  package  is portable.   TCP is event  driven  with 
  330. input from the TOTCPQUEUE.   This queue receives input from  both 
  331. the  ULP  and  IP.   Rationale for one queue was  for  efficiency 
  332. considerations.
  333.  
  334. TCP  has been designed and implemented in such a way that it  can 
  335. be  run as a detached process or via a procedure call  from  some 
  336. program.   A controller is called to execute TCP.  This procedure 
  337. reads  an  input  queue  from which both upper  and  lower  layer 
  338. protocols input.   Appropriate routines are invoked with  respect 
  339. to input primitives.
  340.  
  341. The packages were grouped into five categories:
  342.  
  343.      1.  Communication
  344.      2.  Utilities
  345.      3.  Transmission Control Block Management
  346.      4.  TCP controller
  347.      5.  Segment Arrives
  348.  
  349. The  communication packages are system dependent and vary between 
  350. system   implementations.    TCP  for  VMS  uses   mailboxes   to 
  351. communicate  between  its  ULPs,   while  the  WICAT/ROS  version 
  352. utilities  share data structures (queues).   This was due to  TCP 
  353. and ULPs running was detached processes on VMS.
  354.  
  355. The   utilities  package  clock  and  date  function  are  system 
  356. dependent  and  are designed to interface with specifics  of  the 
  357. operating systems.  The remaining utilities, transmission control 
  358. block management,  TCP controller,  and segment arrives  packages 
  359. are  system  independent.   Portability is maintained across  any 
  360. system running Telesoft Ada version 1.5 or 1.3.
  361.  
  362.                                     WICAT
  363.  
  364. -----------------------------------COMMUNICATION-------------------------------
  365.  
  366. WITH_TCP_COMMUNICATE   WITH_IP_COMMUNICATE  WITH_USER_COMMUNICATE 
  367.  
  368. -----------------------------------UTILITIES-----------------------------------
  369.  
  370. REAL_TIME_CLOCK_DATE  MODULO  TCP_GLOBALS  BUFFER_DATA 
  371.  
  372. -------------------TRANSMISSION CONTROL BLOCK MANAGEMENT-----------------------
  373.  
  374. TCP_ALLOCATOR           T_TCP_GLOBALS_DATA_STRUCTURES 
  375. QUEUES
  376.  
  377. ------------------TCP_CONTROLLER----------------------------------
  378.  
  379. TCP_CONTROL_AND_USER_FUNCTIONS   TCP_CONTROLLER_UTILITIES 
  380.  
  381. -------------------------------SEGMENT ARRIVES---------------------------------
  382.  
  383. TCP_SEGMENT_ARRIVES_PROCESSING  TCP_ARRIVES_PERIPHERALS
  384.  
  385. -------------------------------------------------------------------------------
  386.  
  387. A description of the packages for TCP are described below:
  388.  
  389. 1.4.4.1  Communication Interface -
  390.  
  391.      a.  WITHUSERCOMMUNICATE :  ULP(s) use this to write and read from TCP 
  392.          queues.  The body of these functions and procedures are system 
  393.          dependent.  Data structures provided for communication are common 
  394.          with WITHTCPCOMMUNICATE package.  This enables TCP and ULP(s) to 
  395.          coexist on a system as separate processes.
  396.  
  397.      b.  WITHTCPCOMMUNICATE :  Contains data structures and operations to 
  398.          enable TCP to communicate with queues of upper and lower level 
  399.          protocols.  The body of this package is system dependent and not 
  400.          portable.
  401.  
  402.      c.  BUFFERDATA :  Messages travel through the DoD Internet Model by each 
  403.          Protocol layer encapsulating the message with a header.  The 
  404.          realization of this mechanism uses an array of SYSTEM.BYTE with 
  405.          pointers to indicate where each header resides (figure 2).  Upon 
  406.          receiving a message the protocol uses a pointer to gain access to the 
  407.          beginning of its header.  The package is implementation dependent.  
  408.          Its intent is to facilitate the portability of this communications 
  409.          program by narrowing the packages to be changed to an absolute 
  410.          minimum for different machines.
  411.  
  412.      d.  WITHIPCOMMUNICATE :  Enables TCP to communicate with IP queues.
  413.  
  414.      e.  QIO :  This package is used only TCP implementations running on VMS.  
  415.          Telesoft Ada 1.5 hooks were made into the operation system to access 
  416.          system services for mailboxes and QIO.
  417.  
  418.      f.  SUBNETCALLS :  This package contains procedure calls and data 
  419.          structures necessary for the Internet Protocol Group and the Subnet 
  420.          Protocol Group to communicate.  A counter is maintained which 
  421.          indicates how many elements each queue contains (of queue elements in 
  422.          use).  All procedures contain an error parameter which is returned 
  423.          for the appropriate condition generated.
  424.  
  425. 1.4.4.2  TCP Controller - 
  426.  
  427.      a.  TCPCONTROLANDUSERFUNCTIONS :  The procedure TCPCONTROLLER is called 
  428.          to control and operate the TCP layer.  It determines the necessary 
  429.          actions after it gets a message from the communication queues.
  430.  
  431.      b.  TCPCONTROLLERUTILITIES :  The following procedures perform processing 
  432.          for each specific event :
  433.  
  434.          1.  TCPSEND :  This procedure will process a send request from the 
  435.              user.
  436.  
  437.          2.  TCPABORT :  This procedure will cause a connection to be 
  438.              aborted.  The user requests this action.
  439.  
  440.          3.  TCPRECEIVE :  This procedure will cause any data from a remote 
  441.              site to the user to be returned to the user.
  442.  
  443.          4.  TCPCLOSE :  This procedure will cause a connection to be closed.
  444.  
  445.          5.  TCPOPEN :  This procedure will attempt to open an active or 
  446.              passive connection to a remote host as required by the user.
  447.  
  448.          6.  TCPSTATUS :  This procedure will retransmit the first packet in 
  449.              thye retransmit queue.
  450.  
  451. 1.4.4.3  Utilities For TCP -
  452.  
  453.      a.  REALTIMECLOCKDATA :  Provides the user with the system local time and 
  454.          date.
  455.  
  456.      b.  TCPGLOBALS :  This package provides operations for TCP to pack 
  457.          segments, format the header, checksum, address decoding and 
  458.          verification, and timing functions.
  459.  
  460.      c.  MODULO :  Provides implementation with the ability to handle 32 bit 
  461.          numbers.
  462.  
  463. 1.4.4.4  Transmission Control Block Management - 
  464.  
  465.      a.  TCBALLOCATOR :  This package provides five Transmission Control Block 
  466.          (TCB) operations.  Upon package initialization, TCBs are generated 
  467.          and placed on a free list; procedure to remove a TCB from a free list 
  468.          and place it on an in-use list; procedure to clear a TCB; procedure 
  469.          to remove a TCB from the in-use list and place it on the free-list; 
  470.          obtain the head of the in-use list.
  471.  
  472.      b.  TTCPGLOBALSDATASTRUCTURES :  Defines the data structures that are 
  473.          used throughout TCP(TCB and queues).
  474.  
  475.      c.  QUEUES :  Provides operations for TCP queue management.  TCP contains 
  476.          five queues :  TRANSMITQUEUE; TCPRETRANSMITQUEUE; 
  477.          TCPRECEIVEDSEGMENTQUEUE; RECEIVEQUEUE; PROCESSEDSEGMENTSFORUSERQUEUE.
  478.  
  479. 1.4.4.5  Segment Arrives -
  480.  
  481.      a.  TCPSEGMENTARRIVESPROCESSING :  Determines from a segment what the LCN 
  482.          is.  It then determines if the segment is valid in terms of sequence 
  483.          number and checksum.  The segment is then processed with respect to 
  484.          connection state.
  485.  
  486.      b.  TCPARRIVESPERIPHERALS :  Provides procedures and functions necessary 
  487.          for processing arrived segments (as process from 
  488.          TCPSEGMENTARRIVESPROCESSING).
  489.  
  490. 1.5  Portability Issues
  491.  
  492.   TCP  has  been  implemented to run  on  any  system  supporting 
  493. Telesoft  Ada  version  1.3  or 1.5 with  the  exception  of  the 
  494. communication  packages.   These  packages are dependent  on  the 
  495. operating  system  service  calls  that  are  essential  for  TCP 
  496. communication between layers.  This stems from TCP's multiplexing 
  497. characteristics and its implementation on multiuser systems.
  498.  
  499. 1.6  Installation Issues
  500.  
  501. For  the VAX/VMS implementation of TCP it was necessary to modify 
  502. Telesoft  Ada Run Time Kernal(RTK) for support of  mailboxes  and 
  503. QIO system services.   The modifications are contained in the VMS 
  504. command file label QIO.COM. Execution of this file with the marco 
  505. program  QIO.MAR,  performs  all modifications necessary for  the 
  506. RTK.   No modifications were made on the RTK of the LABTEK  WICAT 
  507. Telsoft system.
  508.  
  509. 1.7  MIL - STD 1777 Vs RFC 793
  510.  
  511.  
  512.                            vax 11/780
  513.  
  514. --------------------------------COMMUNICATION----------------------------------
  515.  
  516. WITH_TCP_COMMUNICATE TCP_TO_ULP_COMMUNICATE GET_MESSAGE_FROM_ULP
  517. SEND_IP_TASK   TCP_Q_TASK   IP_TCP
  518. SUBNET_CALLS
  519.  
  520. ---------------------------------UTILITIES-------------------------------------
  521.  
  522. REAL_TIME_CLOCK_DATE  MODULO  TCP_GLOBALS  BUFFER_DATA 
  523.  
  524. ---------------------TRANSMISSION CONTROL BLOCK MANAGEMENT---------------------
  525.  
  526. TCP_ALLOCATOR         T_TCP_GLOBALS_DATA_STRUCTURES 
  527. QUEUES
  528.  
  529. ---------------TCP_CONTROLLER-------------------------------
  530.  
  531. TCP_CONTROL_AND_USER_FUNCTIONS    TCP_CONTROLLER_UTILITIES 
  532.  
  533. ---------------------------------SEGMENT ARRIVES-------------------------------
  534.  
  535. TCP_SEGMENT_ARRIVES_PROCESSING    TCP_ARRIVES_PERIPHERALS 
  536.  
  537. -------------------------------------------------------------------------------
  538.  
  539. A description of the packages for TCP are described below:
  540.  
  541. 1.7.0.1  Communication Interface -
  542.  
  543.      a.  GETMESSAGEFROMULP and TCPTOULPCOMMUNICATE :  Provides necessary 
  544.          functions for TCP to communicate with the ULP's.  The body of these 
  545.          functions and procedures are system dependent.  Data structures 
  546.          provided for communication are common with WITHTCPCOMMUNICATE 
  547.          package.  This enables TCP and ULP(s) to coexist on a system as 
  548.          separate processes.
  549.  
  550.      b.  WITHTCPCOMMUNICATE :  Contains data structures and operations to 
  551.          enable TCP to communicate with queues of upper and lower level 
  552.          protocols.  The body of this package is system dependent and not 
  553.          portable.
  554.  
  555.      c.  BUFFERDATA :  Messages travel through the DoD Internet Model by each 
  556.          Protocol layer encapsulating the message with a header.  The 
  557.          realization of this mechanism uses an array of SYSTEM.BYTE with 
  558.          pointers to indicate where each header resides (figure 2).  Upon 
  559.          receiving a message the protocol uses a pointer to gain access to the 
  560.          beginning of its header.  The package is implementation dependent.  
  561.          Its intent is to facilitate the portability of this communications 
  562.          program by narrowing the packages to be changed to an absolute 
  563.          minimum for different machines.
  564.  
  565.      d.  SUBNETCALLS and SENDIPTASK :  Enables TCP to communicate to and from 
  566.          IP queues.
  567.  
  568.      e.  IPTCP and TCPQTASK :  Provides functions necessary to operate upon 
  569.          queues TCP uses to hold datagrams and messages.
  570.  
  571. 1.7.0.2  TCP Controller -
  572.  
  573.      a.  TCPCONTROLANDUSERFUNCTIONS :  The procedure TCPCONTROLLER is called 
  574.          to control and operate the TCP layer.  It determines the necessary 
  575.          actions after it gets a message from the communication queues.
  576.  
  577.      b.  TCPCONTROLLERUTILITIES :  The following procedures perform processing 
  578.          for each specific event:
  579.  
  580.          1.  TCPSEND :  This procedure will process a send request from the 
  581.              user.
  582.  
  583.          2.  TCPABORT :  This procedure will cause a connection to be 
  584.              aborted.  The user requests this action.
  585.  
  586.          3.  TCPRECEIVE :  This procedure will cause any data from a remote 
  587.              site to the user to be returned to the user.
  588.  
  589.          4.  TCPCLOSE :  This procedure will cause a connection to be closed.
  590.  
  591.          5.  TCPOPEN :  This procedure will attempt to open an active or 
  592.              passive connection to a remote host as required by the user.
  593.  
  594.          6.  TCPSTATUS :  This procedure will retransmit the first packet in 
  595.              the retransmit queue.
  596.  
  597. 1.7.0.3  Utilities For TCP -
  598.  
  599.      a.  REALTIMECLOCKDATA :  Provides the user with the system local time and 
  600.          date.
  601.  
  602.      b.  TCPGLOBALS :  This package provides operations for TCP to pack 
  603.          segments, format the header, checksum, address decoding and 
  604.          verification, and timing functions.
  605.  
  606.      c.  MODULO :  Provides implementation with the ability to handle 32 bit 
  607.          numbers.
  608.  
  609. 1.7.0.4  Transmission Control Block Management -
  610.  
  611.      a.  TCBALLOCATOR :  This package provides five Transmission Control Block 
  612.          (TCB) operations.  Upon package initialization, TCBs are generated 
  613.          and placed on a free list; procedure to remove a TCB from a free list 
  614.          and place it on an in-use list; procedure to clear a TCB; procedure 
  615.          to remove a TCB from the in-use list and place it on the free-list; 
  616.          obtain the head of the in-use list.
  617.  
  618.      b.  TTCPGLOBALSDATASTRUCTURES :  Defines the data structures that are 
  619.          used throughout TCP(TCB and queues).
  620.  
  621.      c.  QUEUES :  Provides operations for TCP queue management.  TCP contains 
  622.          five queues :  TRANSMITQUEUE; TCPRETRANSMITQUEUE; 
  623.          TCPRECEIVEDSEGMENTQUEUE; RECEIVEQUEUE; PROCESSEDSEGMENTSFORUSERQUEUE.
  624.  
  625. 1.7.0.5  Segment Arrives -
  626.  
  627.      a.  TCPSEGMENTARRIVESPROCESSING :  Determines from a segment what the LCN 
  628.          is.  It then determines if the segment is valid in terms of sequence 
  629.          number and checksum.  The segment is then processed with respect to 
  630.          connection state.
  631.  
  632.      b.  TCPARRIVESPERIPHERALS :  Provides procedures and functions necessary 
  633.          for processing arrived segments (as process from 
  634.          TCPSEGMENTARRIVESPROCESSING).
  635.  
  636.  
  637. 1.8  Portability Issues
  638.  
  639.   TCP  has  been  implemented  to run on  any  system  supporting 
  640. Telesoft Ada version 1.3 or 1.5 and the DEC Ada compiler.   These 
  641. packages are dependent on the operating system service calls that 
  642. are  essential for TCP communication between layers for  the  DEC 
  643. Ada   implementation.    This   stems  from  TCP's   multiplexing 
  644. characteristics and its implementation on multiuser systems.
  645.  
  646. 1.9  Installation Issues
  647.   
  648. For  the VAX/VMS implementation of TCP,  it was necessary to  use 
  649. mailboxes for communication since the ULP's would be executed  as 
  650. separate  VMS processes.   The Wicat implementation executed as a 
  651. single bound program.
  652.  
  653. 1.10  Diagram Of The TRANSMISSION CONTROL PROTOCOL Hierarchy.
  654.  
  655.  
  656.  
  657.                          TCP_CONTROLLER
  658.  
  659.  
  660.  +----------------+-----------+----+---+-----+----------+-----------+
  661.  
  662. TCP_ERROR RETRANS_TCP  TCP_STATUS   TCP_SEND  TCP_RECEIVE  TCP_ABORT 
  663.  
  664.      +------------+-----------+
  665.  
  666. QUEUE_ADD   QUEUE_GET   send_ip 
  667.  
  668.                    +-------------------+--------------+
  669.  
  670.           TCP_CLOSE   TCP_OPEN  TCP_SEG_ARRIVE 
  671.  
  672.                                     +---+----------+-------------+
  673.  
  674.                SEND_A_SYN  message_for_user START_TIMER 
  675.  
  676.             message_for_user
  677.  
  678.                TCP_RECEIVE 
  679.  
  680.        +-------------+------------+------------+----------------+
  681.  
  682. MESSAGE_FROM_USER QUEUE_GET QUEUE_ADD  BUFFREE INSERT_TEXT_IN
  683.                                        _BUFFER  
  684.                                                
  685.  
  686.  
  687.  
  688.                             TCP_CLOSE 
  689.                   -------------------+-------------------------
  690.  
  691. QUEUE_EMPTY TCB_CLEAR QUEUE_CLEAR SEND_A_FIN message_for_user 
  692.  
  693.                              message_for_user 
  694.  
  695.                            TCP_ABORT 
  696.  
  697.                       +--------------+-----------+
  698.  
  699.                 TCP_ERROR  QUEUE_CLEAR  TCB_CLEAR 
  700.  
  701.                             TCP_SEND
  702.  
  703.           +----------------------+---+-+----+------------+--------------+
  704.  
  705. PACK_BUFFER_INTO_BIT_STREAM  send_ip  BUFFGET   TCP_HEADER_FORMAT 
  706. QUEUE_ADD 
  707.  
  708.             +--------------------------+----------------------+
  709.  
  710. MESSAGE_FROM_USER  SEND_FROM_TRANSMIT_QUEUE   BUFFREE
  711.  
  712.  
  713.  
  714.  
  715.                          TCP_SEG_ARRIVE 
  716.  
  717.  +---------------------------+--------+---------------------------+
  718.  
  719. SEQUENCE_NUMBER_CHECKER  START_TIMER  SEG_ARRIVED_IN_CLOSED_STATE 
  720.  
  721.              +-------------------------+------------------------+---------+
  722.  
  723. SEG_ARRIVED_IN_LISTEN_STATE SEG_ARRIVED_IN_SYN_RECEIVED_STATE
  724. BUFFREE
  725.  
  726.               +-------------------------+-------------------------+
  727.  
  728. SEG_ARRIVED_IN_ESTABLISHED_STATE SEG_ARRIVED_IN_FIN_WAIT_1_STATE 
  729.  
  730.              +---------------------------+-------------------------+
  731.  
  732. SEG_ARRIVED_IN_FIN_WAIT_2_STATE   SEG_ARRIVED_IN_SYN_SENT_STATE 
  733.  
  734. _+-------------------------+----------- 
  735.  
  736. SEG_ARRIVED_IN_CLOSE_WAIT_STATE  SEG_ARRIVED_IN_CLOSING_STATE 
  737.  
  738.             +-----------------------------+------------------------+
  739.  
  740. SEG_ARRIVED_IN_LAST_ACK_STATE          UNPACK  
  741. SEG_ARRIVED_IN_TIME_WAIT_STATE 
  742.  
  743.  
  744.  
  745.  
  746.                    SEG_ARRIVED_IN_CLOSED_STATE 
  747.  
  748.                      +-------------------+-------------------+
  749.  
  750. SEND_A_RESET  SEND_A_RESET_AND_ACK  BUFFREE 
  751.  
  752.  
  753.  
  754.                    SEG_ARRIVED_IN_LISTEN_STATE 
  755.  
  756.    +-----------+------+------------------+--------------+----------------+
  757.  
  758. QUEUE_ADD TCB_CLEAR SEND_A_RESET BUFFREE SEND_A_SYN_AND_ACK
  759. CHECK_OPTIONS 
  760.  
  761.  
  762.                 SEG_ARRIVED_IN_SYN_RECEIVED_STATE 
  763.  
  764.        +-------+-------+--------------+---------------+
  765.  
  766. SEND_A_RESET          BUFFREE    BAD_SYN_HANDLER 
  767. ENTER_ESTABLISHED_STATE_PROCESSING 
  768.  
  769. +------------------+------------------+
  770.  
  771. QUEUE_ADD  BUFFREE   MESSAGE_FOR_USER 
  772.  
  773.  
  774.  
  775.  
  776.                 SEG_ARRIVED_IN_ESTABLISHED_STATE 
  777.  
  778.             +-----------------+---------------+------------+---------------+
  779.  
  780. TCB_CLEAR  TCP_ERROR  QUEUE_CLEAR  BAD_SYN_HANDLER 
  781.  
  782.              +-------------------------+-----+---------------------+
  783.  
  784. MESSAGE_FOR_USER   BUFFREE   PROCESS_URGENT_FLAG 
  785.  
  786.             +---------------------------+---------------+
  787.  
  788. PROCESS_COMMON_ACK   SEND_A_PIGGYBACKED_ACK 
  789.  
  790.                  +-----------------------+-----------------+
  791.  
  792. PROCESS_RESET_IN_DATA_ACCEPTING_STATES
  793.  
  794.  
  795.    FIN_CHECK_FOR_ESTABLISHED_OR_SYN_RECEIVED_STATES 
  796.  
  797.  
  798.                     SEG_ARRIVED_IN_FIN_WAIT_1 
  799.  
  800.      +-------------------------+-----------+------------+--------------+
  801.  
  802. BAD_SYN_HANDLER  PROCESS_URGENT_FLAG  PROCESS_COMMON_ACK  BUFFREE 
  803.  
  804.            +---------------------------+-+-------------+-----------+
  805.  
  806. PROCESS_RESET_IN_DATA_ACCEPTING_STATES  PROCESS_SEGMENT_TEXT
  807. QUEUE_EMPTY
  808.  
  809.                           PROCESS_A_FIN 
  810.  
  811.  
  812.  
  813.                     SEG_ARRIVED_IN_FIN_WAIT_2
  814.  
  815.       +------------------+-------------+-------------+----------------+
  816.  
  817. BAD_SYN_HANDLER  PROCESS_A_FIN  PROCESS_COMMON_ACK 
  818. PROCESS_URGENT_FLAG
  819.  
  820.         +------------------------------+-------------+-----------+---------+
  821.  
  822. PROCESS_RESET_IN_DATA_ACCEPTING_STTES  PROCESS_SEGMENT_TEXT 
  823. BUFFREE QUEUE_EMPTY
  824.  
  825.                   SEG_ARRIVED_IN_SYN_SENT_STATE 
  826.  
  827.       +------------------+------------+--------+------------+
  828.  
  829. SEND_A_RESET SEND_A_PIGGYBACKED_ACK SEND_A_RESET_AND_ACK BUFFREE
  830.  
  831.     +-------------------+------------+-----------+--------------------+
  832.  
  833. CHECK_OPTIONS  QUEUE_ADD  DELETE_FROM_RETRANS_QUEUE QUEUE_CLEAR 
  834.  
  835.                +---------------------+----------------------+
  836.  
  837. MESSAGE_FOR_USER   COPY_NEC_TCB_FIELDS 
  838.  
  839.  
  840.  
  841.  
  842.  
  843.                  SEG_ARRIVED_IN_CLOSE_WAIT_STATE 
  844.  
  845.         +-----------------+---------------+-------------+
  846.  
  847. BAD_SYN_HANDLER PROCESS_COMMON_ACK   BUFFREE
  848.  
  849.       PROCESS_RESET_IN_DATA_ACCEPTING_STATES 
  850.  
  851.  
  852.  
  853.                   SEG_ARRIVED_IN_CLOSING_STATE 
  854.  
  855.         +--------+----------+--------+---+--------------+
  856.  
  857. START_TIMER  BAD_SYN_HANDLER BUFFREE PROCESS_COMMON_ACK 
  858.  
  859.        +--------------+------------+
  860.  
  861. QUEUE_EMPTY  QUEUE_CLEAR  TCB_CLEAR 
  862.  
  863.  
  864.  
  865.  
  866.                   SEG_ARRIVED_IN_LAST_ACK_STATE 
  867.  
  868.          +----------------+--------------+----+--------+-------+
  869.  
  870. DELETE_FROM_RETRANS_QUEUE BAND_SYN_HANDLER TCB_CLEAR BUFFREE 
  871.  
  872.                 +------------------+--------------+-------------+
  873.  
  874.   MESSAGE_FOR_USER  TCB_CLEAR  QUEUE_CLEAR 
  875.  
  876.  
  877.                  SEG_ARRIVED_IN_TIME_WAIT_STATE 
  878.  
  879.       +---------------+------------+-----+-----------------+
  880.  
  881. TCB_CLEAR  BAD_SYN_HANDLER  BUFFREE  SEND_A_PIGGYBACKED_ACK 
  882.  
  883.                  +------------------+-------------------+
  884.  
  885.                  QUEUE_CLEAR        START_TIMER
  886.  
  887.  
  888.                           SEND_A_RESET 
  889.  
  890.           +-------------+-------+---------+---------------+
  891.  
  892. MESSAGE_FOR_USER TCP_HEADER_FORMAT send_ip 
  893. PACK_BUFFER_INTO_BIT_STREAM 
  894.  
  895.  
  896.  
  897.  
  898.                       SEND_A_RESET_AND_ACK 
  899.  
  900.                         +---------+---------+-------------+
  901.  
  902. TCP_HEADER_FORMAT  send_ip  PACK_BUFFER_INTO_BIT_STREAM 
  903.  
  904.  
  905.  
  906.                        SEND_A_SYN_AND_ACK
  907.  
  908.       +---------------+---------+--+-----+-------------+
  909.  
  910. MESSAGE_FOR_USER TCP_HEADER_FORMAT  send_ip 
  911. PACK_BUFFER_INTO_BIT_STREAM 
  912.  
  913.                             QUEUE_ADD 
  914.  
  915.  
  916.                          BAD_SYN_HANDLER
  917.  
  918.                 +------------------+-------------+----------------------+
  919.  
  920. BAD_SYN_HANDLER  QUEUE_CLEAR  MESSAGE_FROM_USER 
  921.  
  922.  
  923.                ENTER_ESTABLISHED_STATE_PROCESSING 
  924.  
  925.                   +----------------+---------------+--------------+
  926.  
  927.       PROCESS_URGENT_FLAG  PROCESS_SEGMENT_TEXT  QUEUE_GET 
  928.  
  929.         FIN_CHECK_FOR_ESTABLISHED_OR_SYN_RECEIVED_STATES 
  930.  
  931.  
  932.  
  933.  
  934.                        PROCESS_URGENT_FLAG 
  935.  
  936.                         message_for_user 
  937.  
  938.                       PROCESS_SEGMENT_TEXT 
  939.  
  940.          +----------+-----------+-----------------------------------+
  941.  
  942. QUEUE-EMPTY  QUEUE-GET  QUEUE-ADD       message_for_user
  943.  
  944.         FIN_CHECK_FOR_ESTABLISHED_OR_SYN_RECEIVED_STATES 
  945.  
  946.                           PROCESS_A_FIN 
  947.  
  948.  
  949.  
  950.                           PROCESS_A_FIN
  951.  
  952.                 +--------------+--------------+------------------+
  953.  
  954. SEND_A_PIGGYBACKED_ACK       QUEUE_GET         QUEUE_ADD_TO_FRONT 
  955. message_for_user  
  956.  
  957.  
  958.                      SEND_A_PIGGYBACKED_ACK 
  959.  
  960.    +------------+---------------+------------+---------------+---------+
  961.  
  962. BUFFGET  TCP_HEADER_FORMAT  SEND_FROM_TRANSMIT_QUEUE send_ip 
  963. QUEUE_ADD 
  964.  
  965.     +--------------------------+----------+-------------------+
  966.  
  967. QUEUE_ADD_TO_FRONT    TCP_ERROR  PACK_BUFFER_INTO_BIT_STREAM 
  968.  
  969.  
  970.  
  971.                     SEND_FROM_TRANSMIT_QUEUE 
  972.  
  973.       +----------+-------------+------+-----------------+
  974.  
  975. QUEUE_GET  QUEUE_ADD      send_ip  PACK_BUFFER_INTO_BIT_STREAM 
  976.  
  977.                  +---------------+----------------------+
  978.  
  979.               QUEUE_EMPTY        QUEUE_ADD_TO_FRONT 
  980.  
  981.  
  982.                        PROCESS_COMMON_ACK 
  983.  
  984.                +-------------+-----------+--------------------+
  985.  
  986. SEND_A_PIGGYBACKED_ACK  DELETE_FROM_RETRANS_Q 
  987. SEND_FROM_TRANSMIT_QUEUE 
  988.  
  989.  
  990.              PROCESS_RESET_IN_DATA_ACCEPTING_STATES 
  991.  
  992.               +--------------+----------+--------------------+
  993.  
  994.            QUEUE_CLEAR   TCB_CLEAR   MESSAGE_FOR_USER  
  995.  
  996.  
  997.                            SEND_A_FIN 
  998.  
  999.             +-------------------+-------------+------------+---------+
  1000.  
  1001. PACK_BUFFER_INTO_BIT_STREAM  MESSAGE_FOR_USER send_ip QUEUE_ADD 
  1002.  
  1003.      +-------------+-----------+---------------+---------------------+
  1004.  
  1005. QUEUE_CLEAR  QUEUE_SIZE   TCP_HEADER_FORMAT   BUFFGET
  1006.  
  1007.  
  1008.  
  1009.                            START_TIMER 
  1010.  
  1011.                             TCP_ERROR 
  1012.  
  1013.  
  1014.                       INSERT_TEXT_IN_BUFFER 
  1015.  
  1016.                             TCP_ERROR
  1017.  
  1018. File Names in order of compilation for TCP/IP(WICAT)
  1019.  
  1020.                        (TCP source files)
  1021. Source Filename     Symbol Filename     Package name
  1022. ---------------     ---------------     ------------
  1023. 1  RTC.TXT          TREALTIME.SYM       T_REAL_TIME_CLOCK
  1024. 2  BUFFER           BUFFERDAT.SYM       BUFFER_DATA
  1025. 3  MODULO.TXT       MODULO.SYM          MODULO
  1026. 4  IPGLB.TXT        IPGLOBALS.SYM       IP_GLOBALS
  1027. 5  TIMER.TXT        REALTIMEC.SYM       REAL_TIME_CLOCK_AND_DATE
  1028. 6  SUBNETCAL.TXT    SUBNETCAL.SYM       SUBNET_CALLS
  1029. 7  NCOMMIP.TXT      WITHIPCOM.SYM       WITH_IP_COMMUNICATE
  1030. 8  UNPACK.TXT       IPUNPACKA.SYM       IP_UNPACK_AND_PACK_UTILITIES
  1031. 9  TCPGLBDAT.TXT    TTCPGLOBA.SYM       T_TCP_GLOBAL_DATA_STRUCTURES
  1032. 10 NCOMM.TXT        WITHTCPCO.SYM       WITH_TCP_COMMUNICATE
  1033. 11 NCOMMU1.TXT      WITHUSERC.SYM       WITH_USER_COMMUNICATE
  1034. 12 ICMP.TXT         UTILITIES.SYM       UTILITIES_FOR_ICMP
  1035. 13 REASSEM.TXT      REASEMBLY.SYM       REASEMBLY_UTILITIES
  1036. 14 TCPQUEUE.TXT     QUEUES.SYM          QUEUES
  1037. 15 LCNKEEP.TXT      TCBALLOCA.SYM       TCB_ALLOCATOR
  1038. 16 IPARRIVE.TXT     IPARRIVEP.SYM       IP_ARRIVE_PROCESSING
  1039. 17 TCPGLOBALS.TXT   TCPGLOBAL.SYM       TCP_GLOBALS
  1040. 18 IPCNTSND.TXT     INTERNETP.SYM       INTERNET_PROTOCOL_CONTROL_
  1041.                                         AND_SEND_PROCESSING
  1042. 19 PER1B.TXT        TTCPARRIV.SYM       T_TCP_ARRIVES1
  1043. 20 PER1.TXT         TCPARRIVE.SYM       TCP_ARRIVES_PERIPHERALS
  1044. 21 SEGARIVE1.TXT    TCPSEGARR.SYM       TCP_SEG_ARRIVE
  1045. 22 SEGARIVE.TXT     TCPSEGMEN.SYM       TCP_SEGMENT_ARRIVES_PROCESSING
  1046. 23 TCPUTIL1.TXT     TTCPUTILI.SYM       T_TCP_UTILITIES
  1047. 24 TCPUTIL.TXT      TTCPCONTR.SYM       T_TCP_CONTROLLER_UTILITIES
  1048. 25 TCPCONT2.TXT     TCPCONTRO.SYM       TCP_CONTROLLER_TASK
  1049. 26 SUBCONTR1.TXT    SUBNETCON.SYM       SUBNET_CONTROLLER_TASK
  1050. 27 FATCAT.TXT       
  1051.  
  1052.  
  1053.  
  1054. File Names in order of compilation for TCP/IP(VAX DEC/Ada)
  1055.  
  1056. Source Filename               Package name
  1057.  
  1058. 1  BUFFER_.ADA                BUFFER_DATA
  1059. 2  BUFFER.ADA                 BUFFER_DATA
  1060. 3  IPGLB_.ADA                 IP_GLOBALS
  1061. 4  VMODULO_.ADA               MODULO
  1062. 5  VMODULO.ADA                MODULO
  1063. 6  RTCLKDAT_.ADA              REAL_TIME_CLOCK_AND_DATE
  1064. 7  RTCLKDAT.ADA               REAL_TIME_CLOCK_AND_DATE
  1065. 8  IP_TCP_.ADA                IP_TCP
  1066. 9  IP_TCP.ADA                 IP_TCP
  1067. 10 SUBNET_CALLS_.ADA          SUBNET_CALLS
  1068. 11 SUBNET_CALLS.ADA           SUBNET_CALLS
  1069. 12 TCPGLBDAT_.DAT             T_TCP_GLOBAL_DATA_STRUCTURES
  1070. 13 LCNKEEP_.ADA               TCB_ALLOCATOR
  1071. 14 LCNKEEP.ADA                TCB_ALLOCATOR
  1072. 15 NCOMM_.ADA                 WITH_TCP_COMMUNICATE
  1073. 16 NCOMM.ADA                  WITH_TCP_COMMUNICATE
  1074. 17 UNPACK_.ADA                IP_UNPACK_AND_PACK_UTILITIES
  1075. 18 UNPACK.ADA                 IP_UNPACK_AND_PACK_UTILITIES
  1076. 19 TCP_QUEUE_.ADA             QUEUESA          
  1077. 20 TCP_QUEUE.ADA              QUEUES
  1078. 21 TCP_Q_.ADA                 TCP_Q_TASK
  1079. 22 TCP_Q.ADA                  TCP_Q_TASK
  1080. 23 TCP_TO_ULP_.ADA            TCP_TO_ULP_COMMUNICATE
  1081. 24 TCP_TO_ULP.ADA             TCP_TO_ULP_COMMUNICATE
  1082. 25 TCP_ULP_GET_.ADA           GET_MESSAGES_FROM_ULP
  1083. 26 TCP_ULP_GET.ADA            GET_MESSAGES_FROM_ULP
  1084. 27 SEND_IP_TASK_.ADA          SEND_IP_TASK
  1085. 28 SEND_IP_TASK.ADA           SEND_IP_TASK
  1086. 29 TCP_GLOBALS_.ADA           TCP_GLOBALS
  1087. 30 VTCP_GLOBALS.ADA           TCP_GLOBALS
  1088. 31 ICMP_.ADA                  UTILITIES_FOR_ICMP
  1089. 32 ICMP.ADA                   UTILITIES_FOR_ICMP
  1090. 33 REASSEM_.ADA               REASEMBLY_UTILITIES
  1091. 34 REASSEM.ADA                REASEMBLY_UTILITIES
  1092. 35 PER1_.ADA                  TCP_ARRIVES_PERIPHERALS
  1093. 36 PER1.ADA                   TCP_ARRIVES_PERIPHERALS
  1094. 37 IPARRIVE_.ADA              IP_ARRIVE_PROCESSING
  1095. 38 IPARRIVE.ADA               IP_ARRIVE_PROCESSING
  1096. 39 SEGARRIVE_.ADA             TCP_SEGMENT_ARRIVES_PROCESSING
  1097. 40 SEGARRIVE.ADA              TCP_SEGMENT_ARRIVES_PROCESSING
  1098. 41 IP_FROM_SUBNET_TASK_.ADA   IP_FROM_SUBNET_TASK
  1099. 42 IP_FROM_SUBNET_TASK.ADA    IP_FROM_SUBNET_TASK
  1100. 43 TCP_UTILITIES_.ADA         T_TCP_CONTROLLER_UTILITIES
  1101. 44 TCP_UTILITIES.ADA          T_TCP_CONTROLLER_UTILITIES
  1102. 45 TCP_CONTROLLER_.ADA        TCP_CONTROLLER_TASK
  1103. 46 TCP_CONTROLLER.ADA         TCP_CONTROLLER_TASK
  1104. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  1105. --ip.man
  1106. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  1107. 1.  INTERNET PROTOCOL
  1108.  
  1109. 1.1  Functional Description.  The Internet Protocol is designed for use in 
  1110. interconnected networks of packet-switched computer communication facilities.  
  1111. IP provides an internet datagram service using the facilities of the 
  1112. intranetwork datagram protocol.
  1113.  
  1114. IP does not provide end-to-end data reliability, flow control, sequencing or 
  1115. other services that are usually found in host-to-host protocols.  It can 
  1116. provide various types and qualities of service by utilizing the services of 
  1117. its supporting networks.
  1118.  
  1119. This version of the Internet Protocol conforms to RFC:791, the Internet 
  1120. Protocol Darpa Internet Program Protocol Specification from September 1981.  
  1121. It is designed so that it is effectively decoupled from the layers above and 
  1122. below it.
  1123.  
  1124. The interface design allows different layers of protocol to be used above and 
  1125. below IP with no significant impact.  This implementation also contains the 
  1126. Internet Control Message Protocol.
  1127.  
  1128. IP, by virtue of its design, can be run as a detached process or as a 
  1129. procedure which is called by a program.  This flexibility enables IP's use in 
  1130. different scenarios.
  1131.  
  1132. 1.2  Using IP.  IP communicates with upper and lower level protocols via 
  1133. queues, request primitives, and response primitives.  Communications between 
  1134. IP and TCP running on VMS is via a shared data structure.  The interface to 
  1135. Ethernet is through mailboxes.  Communications between IP and its upper and 
  1136. lower levels on the WICAT are through shared resources.  It should be noted 
  1137. that the interface between TCP and IP is the same for both the VMS, and WICAT 
  1138. versions of the IP implementation.
  1139.  
  1140. The data structure for IP datagrams was described in section 1.3.4.1 c. of the 
  1141. TCP users manual.  IP encapsulates a header on messages passed down to it from 
  1142. TCP and removes the IP header from messages it receives.
  1143.  
  1144. The ICMP mechanism provides the host with the following information:
  1145.  
  1146.     1.  NET UNREACHABLE :  The IP sent a datagram that cannot be reached for 
  1147. the following reasons: net unreachable; host unreachable; protocol 
  1148. unreachable; port unreachable; fragmentation needed and don't fragment flag is 
  1149. set; source route failed.  The above messages are then passed to the ULP for 
  1150. notification of the problem.
  1151.  
  1152.     2.  SOURCE QUENCH MESSAGE :  All redirect messages are supported.  The 
  1153. present implementation passes the message on to the ULP.
  1154.  
  1155.     4.  ECHO MESSAGE :  Upon reception of an echo message, ICMP will return 
  1156. the message to the sender.
  1157.  
  1158.     5.  PARAMETER PROBLEM MESSAGE :  At present the ULP is only notified that 
  1159. a parameter parameter has occurred.
  1160.  
  1161. The reassembly mechanism of IP has been implemented as specified in MIL-STD 
  1162. 1777.  As fragments are received from the subnet, the data portion of the 
  1163. datagram is stored in a reassembly queue.  Upon successful reassembly within a 
  1164. specified timeout window the datagram is forwarded to the TOTCPQUEUE.  This IP 
  1165. implementation does not support fragmentation (gateway function).
  1166.  
  1167. The IP is event driven with input from the TOIPQUEUE.  This queue receives 
  1168. input from both TCP and Ethernet.  Rationale for one queue was for efficiency  
  1169. considerations.
  1170.  
  1171. 1.3  Hierarchy Diagram for the INTERNET Protocol.  
  1172.  
  1173.                                   IPCONTROLLER
  1174.  
  1175.          +-----------------------+---------------------+-------------+
  1176.  
  1177.       SEND_IP       IP_DATAGRAM_ARRIVE     IP_ERROR_HANDLER     ip_wait
  1178.  
  1179.                      +-------+--------------+-------------+
  1180.  
  1181.         BUFFREE   CHECKSUM  message_for_tcp     UNPACK
  1182.  
  1183.  +--------+-------+------------+------------+-----------------------+
  1184.  
  1185. OPTION_CHECKER CPM_SEND DESTINATION_SCHECK BUFFREE
  1186.                         PACK_BUFFER_INTOBIT_STREAM
  1187.  
  1188.                                                  +---------------+---------+
  1189.  
  1190.                 UNCHECKED_CONVERSION            CHECKSUM 
  1191.  
  1192. 1.3  Hierarchy Diagram For The INTERNET Protocol.
  1193.  
  1194.  
  1195.  
  1196.  
  1197.  
  1198.                           IPCONTROLLER
  1199.  
  1200.   +-----------------------+---------------------+-------------+
  1201.  
  1202. SEND_IP         IP_DATAGRAM_ARRIVE      IP_ERROR_HANDLER  ip_wait
  1203.  
  1204.                  +-------+--------------+-------------+
  1205.  
  1206.             BUFFREE   CHECKSUM  message_for_tcp    UNPACK
  1207.  
  1208. +--------+-------+-----------+------------+-----------------+
  1209.  
  1210. OPTION_CHEKER CPM_SEND DESTINATION_CHECK BUFFREE
  1211.                                      PACK_BUFFER_INTO_BIT_STREAM
  1212.  
  1213.                                 +----------------+----------+
  1214.  
  1215.                         UNCHECKED_CONVERSION            CHECKSUM
  1216.  
  1217.  
  1218. File Names in order of compilation for TCP/IP(WICAT)
  1219.  
  1220.                     (TCP) source files)
  1221. Source Filename   Symbol Filename  Package name
  1222. ---------------   ---------------  ------------
  1223. 1  RTC.TXT        TREALTIME.SYM    T_REAL_TIME_CLOCK
  1224. 2  BUFFER         BUFFERDAT.SYM    BUFFER_DATA
  1225. 3  MODULO.TXT     MODULO.SYM       MODULO
  1226. 4  IPGLB.TXT      IPGLOBALS.SYM    IP_GLOBALS
  1227. 5  TIMER.TXT      REALTIMEC.SYM    REAL_TIME_CLOCK_AND_DATE
  1228. 6  SUBNETCAL.TXT  SUBNETCAL.SYM    SUBNET_CALLS
  1229. 7  NCOMMIP.TXT    WITHIPCOM.SYM    WITH_IP_COMMUNICATE
  1230. 8  UNPACK.TXT     IPUNPACKA.SYM    IP_UNPACK AND PACK UTILITIES
  1231. 9  TCPGLBDAT.TXT  TTCPGLOBA.SYM    T_TCP_GLOBAL_DATA_STRUCTURES
  1232. 10 NCOMM.TXT      WITHTCPCO.SYM    WITH_TCP_COMMUNICATE
  1233. 11 NCOMMU1.TXT    WITHUSERC.SYM    WITH_USER_COMMUNICATE
  1234. 12 ICMP.TXT       UTILITIES.SYM    UTILITIES_FOR_ICMP
  1235. 13 REASSEM.TXT    REASEMBLY.SYM    REASEMBLY_UTILITIES
  1236. 14 TCPQUEUE.TXT   QUEUES.SYM       QUEUES
  1237. 15 LCNKEEP.TXT    TCBALLOCA.SYM    TCB_ALLOCATOR
  1238. 16 IPARRIVE.TXT   IPARRIVEP.SYM    IP_ARRIVE_PROCESSING
  1239. 17 TCPGLOBALS.TXT TCPGLOBAL.SYM    TCP_GLOBALS
  1240. 18 IPCNTSND.TXT   INTERNETP.SYM    INTERNET_PROTOCOL_CONTROL_-
  1241.                                    AND_SEND_PROCESSING
  1242. 19 PER1B.TXT      TTCPARRIV.SYM    T_TCP_ARRIVES_1
  1243. 20 PER1.TXT       TCPARRIVE.SYM    TCP_ARRIVES_PERIPHERALS
  1244. 21 SEGARIVE1.TXT  TCPSEGARR.SYM    TCP_SEG_ARRIVE
  1245. 22 SEGARIVE.TXT   TCPSEGMEN.SYM    TCP_SEGMENT_ARRIVES_PROCESSING
  1246. 23 TCPUTIL1.TXT   TTCPUTILI.SYM    T_TCP_UTILITIES
  1247. 24 TCPUTIL.TXT    TTCPCONTR.SYM    T_TCP_CONTROLLER_UTILITIES
  1248. 25 TCPCONT2.TXT   TCPCONTRO.SYM    TCP_CONTROLLER_TASK
  1249. 26 SUBCONTR1.TXT  SUBNETCON.SYM    SUBNET_CONTROLLER_TASK
  1250. 27 FATCAT.TXT
  1251.  
  1252.  
  1253. File Names in order of compilation for TCP/IP(VAX DEC/Ada)
  1254.  
  1255.   Source Filename                 Package name
  1256.   ---------------                 ------------
  1257.  
  1258. 1  BUFFER_.ADA                    BUFFER_DATA
  1259. 2  BUFFER.ADA                     BUFFER_DATA
  1260. 3  IPGLB_.ADA                     IP_GLOBALS
  1261. 4  VMODULO_.ADA                   MODULO
  1262. 5  VMODULO.ADA                    MODULO
  1263. 6  RTCLKDAT_.ADA                  REAL_TIME_CLOCK_AND_DATE
  1264. 7  RTCLKDAT.ADA                   REAL_TIME_CLOCK_AND_DATE
  1265. 8  IP_TCP_.ADA                    IP_TCP
  1266. 9  IP_TCP.ADA                     IP_TCP
  1267. 10 SUBNET_CALLS_.ADA              SUBNET_CALLS
  1268. 11 SUBNET_CALLS.ADA               SUBNET_CALLS
  1269. 12 TCPGLBDAT_.DAT                 T_TCP_GLOBAL_DATA_STRUCTURES
  1270. 13 LCNKEEP_.ADA                   TCB_ALLOCATOR
  1271. 14 LCNKEEP.ADA                    TCB_ALLOCATOR
  1272. 15 NCOMM_.ADA                     WITH_TCP_COMMUNICATE
  1273. 16 NCOMM.ADA                      WITH_TCP_COMMUNICATE
  1274. 17 UNPACK_.ADA                    IP_UNPACK_AND_PACK_UTILITIES
  1275. 18 UNPACK.ADA                     IP_UNPACK_AND_PACK_UTILITIES
  1276. 19 TCP_QUEUE_.ADA                 QUEUES
  1277. 20 TCP_QUEUE.ADA                  QUEUES
  1278. 21 TCP_Q_.ADA                     TCP_Q_TASK
  1279. 22 TCP_Q.ADA                      TCP_Q_TASK
  1280. 23 TCP_TO_ULP_.ADA                TCP_TP_ULP_COMMUNICATE
  1281. 24 TCP_TO_ULP.ADA                 TCP_TO_ULP_COMMUNICATE
  1282. 25 TCP_ULP_GET_.ADA               GET_MESSAGES_FROM_ULP
  1283. 26 TCP_ULP_GET.ADA                GET_MESSAGES_FROM_ULP
  1284. 27 SEND_IP_TASK_.ADA              SEND_IP_TASK
  1285. 28 SEND_IP_TASK.ADA               SEND_IP_TASK
  1286. 29 TCP_GLOBALS_.TXT               TCP_GLOBALS
  1287. 30 VTCP_GLOBALS.TXT               TCP_GLOBALS
  1288. 31 ICMP_.ADA                      UTILITIES_FOR_ICMP
  1289. 32 ICMP.ADA                       UTILITIES_FOR_ICMP
  1290. 33 REASSEM_.ADA                   REASEMBLY_UTILITIES
  1291. 34 REASSEM.ADA                    REASEMBLY_UTILITIES
  1292. 35 PER1_.ADA                      TCP_ARRIVES_PERIPHERALS
  1293. 36 PER1.ADA                       TCP_ARRIVES_PERIPHERALS
  1294. 37 IPARRIVE_.ADA                  IP_ARRIVE_PROCESSING
  1295. 38 IPARRIVE.ADA                   IP_ARRIVE_PROCESSING
  1296. 39 SEGARIVE_.ADA                  TCP_SEGMENT_ARRIVES_PROCESSING
  1297. 40 SEGARIVE.ADA                   TCP_SEGMENT_ARRIVES_PROCESSING
  1298. 41 IP_FROM_SUBNET_TASK_.ADA       IP_FROM_SUBNET_TASK
  1299. 42 IP_FROM_SUBNET_TASK.ADA        IP_FROM_SUBNET_TASK
  1300. 43 TCP_UTILITIES_.ADA             T_TCP_CONTROLLER_UTILITIES
  1301. 44 TCP_UTILITIES.ADA              T_TCP_CONTROLLER_UTILITIES
  1302. 45 TCP_CONTROLLER_TASK_.ADA       TCP_CONTROLLER_TASK
  1303. 46 TCP_CONTROLLER_TASK.ADA        TCP_CONTROLLER_TASK
  1304. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  1305. --ftp.man
  1306. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  1307. 1.  FTP
  1308.  
  1309. 1.1  Functional Description.  FTP (File Transfer Protocol) is designed to 
  1310. transfer files from one computer system to another despite differences in the 
  1311. underlying file systems.  The files are transferred according to user 
  1312. specified parameters which indicate the mode of transfer, file type and file 
  1313. structure.
  1314.  
  1315. 1.2  Using FTP.  
  1316.  
  1317. 1.2.1  Command Descriptions.  The first four characters of a command are 
  1318. significant and must be typed in upper case.
  1319.  
  1320.  1.  CALL
  1321.  
  1322.      The call command is used to establish connection with the remote computer 
  1323. system.  It has the format CALL net-address where net-address has the format 
  1324. v.w.x.y;z.  For details of this format please see the TELNET user's guide.
  1325.  
  1326.  2.  EXIT
  1327.  
  1328.      The exit command is used to exit from FTP.  It has the effect of logging 
  1329. the user off of any systems that may be logged in and then closing any data 
  1330. connections that may be open.  This command really should be named QUIT to be 
  1331. more in keeping with the specification.
  1332.  
  1333.  3.  HELP
  1334.  
  1335.      The help command is used to send useful information about a remote 
  1336. computer system to the user.  The information includes what commands are 
  1337. supported at the remote system and their syntax.  It has the format HELP.
  1338.  
  1339.  4. MODE
  1340.  
  1341.     The mode command is used to inform FTP which transfer mode is in effect.  
  1342. It has the format MODE argument where argument can be S)tream, B)lock, or 
  1343. C)ompressed.  The stream mode transfers files as a continuous stream of data 
  1344. bytes.  The block mode transfers files as a series of blocks.  The compressed 
  1345. mode compresses the data for more efficient data transfers.  Only the stream 
  1346. mode is currently supported.
  1347.  
  1348.  5. NOOP
  1349.  
  1350.     The noop command does not effect any parameters or previously entered 
  1351. commands.  It specifies no other action than for the remote computer system to 
  1352. send an OK reply.  It has the format NOOP.
  1353.  
  1354.  6. PASSword
  1355.  
  1356.     The password command is used to specify the user's password if one is 
  1357. required for a remote computer system's log on procedure.  This command must 
  1358. be immediately preceded by the user command.  It has the format PASS 
  1359. user-password where user-password is a valid password string for the remote 
  1360. computer system.
  1361.  
  1362.  7. PORT
  1363.  
  1364.     The port command is used to inform an FTP program running on a remote 
  1365. system to use a specified port for data transfer instead of its default port.  
  1366. This is useful when a user on computer 'C' wants to send files directly from 
  1367. computer 'A' to computer 'B.'  It has the format PORT u.v.w.x.y;z where 
  1368. u.v.w.x represent the address of the FTP program to change its port and y;z 
  1369. represents the port number to be used.
  1370.  
  1371.  8. RETRieve
  1372.  
  1373.     The retrieve command is used to transfer a file from a remote computer 
  1374. system to the local computer system.  It has the format RETR Remote-file name 
  1375. Local-filename.  The file is transferred according to the current MODE, STRU, 
  1376. and TYPE.
  1377.  
  1378.  9. STORe
  1379.  
  1380.     The store command is used to transfer a file from the local computer 
  1381. system to a remote computer system.  It has the format STOR Local-filename 
  1382. Remote-filename.  The file is transferred according to the current MODE, STRU, 
  1383. and TYPE.
  1384.  
  1385. 10. STRUcture
  1386.  
  1387.     The structure command is used to inform FTP about the file's structure.  
  1388. The file structure is how the file is represented internally on its host 
  1389. computer system.  The structure command has the format STRUcture 
  1390. valid-file-structure where valid-file-structure is FILE, RECORD, or PAGE.  
  1391. File indicates that the file is considered to be a continuous stream of bytes 
  1392. with no internal structure.  RECORD indicates that the file is composed of 
  1393. sequential records.  PAGE indicates that the file is composed of individual 
  1394. indexed pages.  Only FILE and RECORD structures are supported.
  1395.  
  1396. 11. TYPE
  1397.  
  1398.     The type command is used to inform FTP about the file's representation.  
  1399. This representation includes how the bytes are represented as well as the type 
  1400. of carriage control used.  The type command has the format TYPE 
  1401. byte-representation carriage-control.  The byte-representation can be ASCII, 
  1402. EBCDIC, IMAGE, or LOCAL BYTE.  ASCII indicate that the bytes are stored using 
  1403. standard ascii codes.  EBCDIC indicate that the bytes are stored using 
  1404. standard EBCDIC codes.  IMAGE indicates that the file is stored and 
  1405. transferred as contiguous bits and is useful for transferring     binary data 
  1406. files.  LOCAL BYTE indicates that the file is stored in logical bytes with a 
  1407. size that is specified by a second parameter instead of a carriage control 
  1408. field.  Only the ASCII byte-representation is supported at this time.  The 
  1409. carriage-control field indicates that type of carriage control used in the 
  1410. file.  The carriage control field can be NON-PRINT, TELNET, or ASA.  NON-PRINT 
  1411. indicates that no carriage control information needs to be stored in the 
  1412. file.  NON-PRINT is the default value if the carriage control field is 
  1413. omitted.  TELNET indicates that file contains ASCII/EBCDIC vertical format 
  1414. controls |cr , |LF , |NL , |VT , |FF .  ASA indicates that the file contains 
  1415. ASA (FORTRAN) vertical format control characters.  The carriage control field 
  1416. indicates the size of the logical byte to be used if LOCAL BYTE has been 
  1417. specified.  In this case the field is in integer number which indicates the 
  1418. logical byte size.
  1419.  
  1420. 12. USER
  1421.  
  1422.     The user command is used to log the user onto a remote system.  The user 
  1423. command has the format USER user-name.  If a remote system does not require a 
  1424. username then the user-name field can be omitted.  If the remote system 
  1425. requires a password, the user will have to use the PASSword command after the 
  1426. USER command.  If the user is currently logged in and a USER command is issued 
  1427. then FTP will log the USER off of the remote system and then log on under the 
  1428. new user-name.
  1429.  
  1430. 13. QUIT
  1431.  
  1432.     The QUIT command is used to log the user off of the remote computer system 
  1433. without closing the connection to the remote system from the local system.  
  1434. Issuing a QUIT folowed by USER has the same effect as a QUIT while logged in.  
  1435. This command really should be named REINialize to be more in keeping with the 
  1436. specification.
  1437.  
  1438. 1.2.2 Running FTP.
  1439.  
  1440.     1.  To invoke FTP, the user simply enters "RUN USERFTP" at the command 
  1441. level.  FTP is then loaded and ready to use.
  1442.  
  1443.     2.  Prior to doing a file transfer the user must establish a connection to 
  1444. the remote computer system.  This is accomplished via the CALL command.
  1445.  
  1446.     3.  After a connection has been established, the user should log onto the 
  1447. system, if necessary, using the USER command.
  1448.  
  1449.     4.  The user may choose to set certain system parameters at this time; 
  1450. specifically the type, mode, structure, and port to be used for a file 
  1451. transfer.  These parameters are optional and depend on the computer systems 
  1452. being accessed.
  1453.  
  1454.     5.  Use either the STOR (to send a file) or RETR (to receive a file) 
  1455. command to transfer a file.
  1456.  
  1457.     6.  Use either the QUIT or USER command if you wish to change the 
  1458. directory you are logged in on without closing the connection.  If you use 
  1459. QUIT then you will be logged off of the remote computer system but will still 
  1460. have a connection so that a USER command could be entered.  If you use USER 
  1461. then you will be logged off of the current directory and prompted for a new 
  1462. directory name which you will be logged on to.
  1463.  
  1464.     7.  Once all the file transfers have been completed, the user should close 
  1465. the connection using the CLOS or EXIT command.  Use CLOS if you wish to CALL 
  1466. another computer system and transfer more files.  Use EXIT if you are finished 
  1467. with all file transfers and wish to exit from FTP.
  1468.  
  1469. 1.2.3  Sample Session.  
  1470.  
  1471.     1.  FTP <CR>
  1472.  
  1473.     2.  CALL ...1;26 <CR>
  1474.  
  1475.         This CALL command opens a connection to the computer system with a 
  1476. network address of ...1;26.  Please see the TELNET specification for details 
  1477. of the network addresses.
  1478.  
  1479.     3.  USER SMITH <CR>
  1480.  
  1481.         This USER command logs the user onto the remote computer system under 
  1482. the username of SMITH.
  1483.  
  1484.     4.  STRU RECORD  <CR>
  1485.  
  1486.         This STRUcture command informs FTP that the file to be transferred is 
  1487. composed of individual records.
  1488.  
  1489.     5.  TYPE ASCII NONPRINT <CR>
  1490.  
  1491.         This TYPE command informs FTP that the file to be transferred is 
  1492. composed of ASCII characters using NONPRINT carriage control.
  1493.  
  1494.     6.  MODE STREAM <CR>
  1495.  
  1496.         This mode command informs FTP that the file is to be transferred as a 
  1497. stream of bytes.
  1498.  
  1499.     7.  RETR DATA.TXT FILE.TEXT <CR>
  1500.  
  1501.         This RETRieve command informs FTP to copy the file DATA.TXT from the 
  1502. remote computer system to a local file named FILE.TEXT.
  1503.  
  1504.     8.  EXIT <CR>
  1505.  
  1506.         This EXIT command informs FTP that the user is finished and that it 
  1507. should close the connection to the remote computer system and then return to 
  1508. the operating system.
  1509.  
  1510. 1.3  FTP Computer Program Overview.  
  1511.  
  1512. 1.3.1  Hardware.  This implementation of FTP is targeted for a VAX 11/780 and 
  1513. Wicat work station.
  1514.  
  1515. 1.3.2  Operating System.  This implementation of FTP is targeted for VMS 4.1 
  1516. and ROS version 2.1e - Labtek RTK 2.2.
  1517.  
  1518. 1.3.3  Ada Compiler Implementation.  This implementation of FTP is written for 
  1519. DEC Ada version 1.0 (VAX) and TeleSoft-Ada version 1.3 (WICAT).
  1520.  
  1521. 1.3.4  Package Overview.  Most of the FTP packages encapsulates one data type 
  1522. and the operations that are used on that type.  There are two exceptions to 
  1523. this rule.  The first exception is the command handlers.  These packages 
  1524. contain procedures that effect the user/server PIs or user/server DTPs.  This 
  1525. was done to limit the package sizes so that they were not excessively large 
  1526. and therefore inhibitive to compile.  The second exception is the FTP global 
  1527. data types packages.  These packages contain the basic types that are used 
  1528. throughout FTP including the command string format, reply format, and argument 
  1529. format.  Functions and procedures to manipulate these types were not included 
  1530. in FTP because the types were rigidly outlined in RFC 765 specification.
  1531.  
  1532. 1.3.4.1  Hierarchy Chart.  
  1533.  
  1534.       ========================= Called routines ==========================
  1535.  
  1536.                +-------+                                  +-------+
  1537.                ! Ftp-  !                                  ! Ftp-  !
  1538.                ! user  !                                  ! server!
  1539.                !       !                                  !       !
  1540.                +-------+                                  +-------+
  1541.  
  1542.       ========================= Command handlers =========================
  1543.  
  1544.   +-------+  +-------+  +-------+  +-------+  +-------+  +-------+  +-------+
  1545.   ! Ftp-  !  ! Ftp-  !  ! Ftp-  !  ! Ftp-  !  ! Ftp-  !  ! Ftp-  !  ! Ftp-  !
  1546.   ! usr-  !  ! usr-  !  ! usr-  !  ! srv-  !  ! srv#  !  ! srv-  !  ! srv-  !
  1547.   ! xfr   !  ! pi    !  ! dtp   !  ! log   !  ! dtp   !  ! pi    !  ! xfr   !
  1548.   +-------+  +-------+  +-------+  +-------+  +-------+  +-------+  +-------+
  1549.  
  1550. ========================= Command handler's utilities =========================
  1551.  
  1552.  
  1553.                                                      +-------+
  1554.                                                      ! Ftp-  !
  1555.                                                      ! srv-  !
  1556.                                                      ! uH    !
  1557.                                                      +-------+
  1558.  
  1559.      =========================== Ftp utilities ===========================   
  1560.  
  1561.                                     +-------+
  1562.                                     ! Ftp-  !
  1563.                                     ! Ut1   !
  1564.                                     !       !
  1565.                                     +-------+
  1566.  
  1567.    ======================== Data processing packages =======================
  1568.  
  1569.                     +-------+  +-------+  +-------+  +-------+
  1570.                     ! Ftp-  !  ! Ftp-  !  ! Ftp-  !  ! Ftp-  !
  1571.                     ! cmd-  !  ! file- !  ! rpl-  !  ! site  !
  1572.                     ! utl   !  ! IO    !  ! utl   !  !       !
  1573.                     +-------+  +-------+  +-------+  +-------+
  1574.  
  1575.                     +-------+  +-------+  +-------+
  1576.                     ! Ftp-  !  ! Ftp-  !  ! Ftp-  !
  1577.                     ! rcv-  !  ! low-  !  ! rpl-  !
  1578.                     ! utl   !  ! IO    !  ! dat   !
  1579.                     +-------+  +-------+  +-------+
  1580.  
  1581.                     +-------+
  1582.                     ! Ftp-  !
  1583.                     ! cnv-  !
  1584.                     ! cmd   !
  1585.                     +-------+
  1586.  
  1587.        =========================== Interfaces ========================= 
  1588.  
  1589.                     +-------+  +-------+  +-------+
  1590.                     ! Ftp-  !  ! Ftp-  !  ! Ftp-  !
  1591.                     ! term  !  ! tcp   !  ! telnet!
  1592.                     !       !  !       !  !       !
  1593.                     +-------+  +-------+  +-------+
  1594.  
  1595. ============================ Ftp global data types ============================
  1596.  
  1597.                     +-------+  +-------+  +-------+
  1598.                     ! Ftp-  !  ! Ftp-  !  ! Ftp-  !
  1599.                     ! cmd   !  ! types !  ! reply !
  1600.                     !       !  !       !  !       !
  1601.                     +-------+  +-------+  +-------+
  1602.  
  1603. 1.3.4.2  Package Descriptions.  The following is a brief description of what 
  1604. each package contains and why it is a package.
  1605.  
  1606. 1.3.4.2.1  Called Routines.  The called routines are the upper most procedures 
  1607. in FTP.  The FTP-user procedure is invoked on the system where the user is 
  1608. running.  The FTP-server procedure is invoked on the remote system to process 
  1609. the user's commands.  There are three primary differences between these two 
  1610. procedures.  The first is where the commands are obtained.  The second is the 
  1611. command handler that is called to process the command.  The third is the way 
  1612. that exceptions are handled.
  1613.  
  1614. 1.3.4.2.2  Command Handlers.  The command handlers are the uppermost 
  1615. procedures that process specific commands.  They are primarily concerned with 
  1616. the handshaking between the two computer systems using calls to lower level 
  1617. procedures to do the actual work.  These lower level procedures perform 
  1618. functions which are independent of the calling upper level procedure (user or 
  1619. server).  The command handlers are broken down into two sides:  the user side, 
  1620. and the server side.  The user side sends the commands and receives replies.  
  1621. The server side accepts commands and sends replies.  The command handlers are 
  1622. contained in the following packages:
  1623.  
  1624.     1.  Ftp-usr-xfr.
  1625.  
  1626.         This package contains the procedures used by the user side to process 
  1627. commands that perform file transfers at the highest level of abstraction.  
  1628. These commands include:  STORe and RETRieve.
  1629.  
  1630.     2.  Ftp-user-pi.
  1631.  
  1632.         This package contains the procedures used by the user side to process 
  1633. commands  that do not directly effect file transfers.  These commands 
  1634. include:  NOOP, HELP, QUIT, USER, CALL, and CLOS.
  1635.  
  1636.     3.  Ftp-usr-dtp.
  1637.  
  1638.         This package contains the procedures used by the user side to process 
  1639. commands that effect file transfers.  These commands include:  TYPE, 
  1640. STRUcture, MODE, and PORT.
  1641.  
  1642.     4.  Ftp-srv-log.
  1643.  
  1644.         This package contains the procedures used by the server side to 
  1645. process commands that perform system login/logout activities.  This package 
  1646. was created because of all the FTP commands, these will be the most system 
  1647. dependent.  Consequently, this package can be changed as required without 
  1648. having to change any lower level packages common to other FTP packages.  This 
  1649. is the only command handler package that does not have a counterpart on the 
  1650. user side.
  1651.  
  1652.     5.  Ftp-srv-dtp.
  1653.  
  1654.         This package is synonymous with Ftp-usr-dtp except that it is used by 
  1655. the server side.
  1656.  
  1657.     6.  Ftp-srv-pi.
  1658.  
  1659.         This package is synonymous with Ftp-usr-pi except that it is used by 
  1660. the server side.
  1661.  
  1662.     7.  Ftp-srv-xfr.
  1663.  
  1664.         This package is synonymous with Ftp-usr-xfr except that it is used by 
  1665. the server side.
  1666.  
  1667. 1.3.4.2.3  Command Handler's Utilities.  This package contains procedures that 
  1668. are used to send replies.  These procedures should have been located in the 
  1669. Ftp-rpl-utl package because they all manipulate replies.  They were included 
  1670. in a separate package, however, because the reply is actually sent.  That 
  1671. requires access to the procedures in Ftp-cmd-utl which are used to send 
  1672. commands.  As a result, Ftp-rpl-utl would have to have access to Ftp-cmd-utl 
  1673. and that was undesirable.
  1674.  
  1675. 1.3.4.2.4  FTP Utilities.  The Ftp-utl package contains the functions and 
  1676. procedures used by the user and server sides to access information which 
  1677. describes FTP's current state.  All the information about FTP's state is 
  1678. contained in a single data type which was implemented as a private type to 
  1679. minimize the effects of changes.
  1680.  
  1681. 1.3.4.2.5  Data Processing Packages.  These packages contain the procedures to 
  1682. query about the current FTP implementation as well as to operate on commands, 
  1683. replies, and files.  The first set of packages concentrates on commands and 
  1684. includes:
  1685.  
  1686.     1.  Ftp-cmd-utl.
  1687.  
  1688.         This package contains the procedures necessary to send and receive 
  1689. commands.
  1690.  
  1691.     2.  Ftp-rcv-utl.
  1692.  
  1693.         This package contains the procedures necessary to receive commands and 
  1694. parse them into their component parts.  
  1695.  
  1696.     3.  Ftp-cnv-cmd.
  1697.  
  1698.         This package contains the procedures necessary to convert the commands 
  1699. from variable length strings into an enumerated type.  It was desirable to use 
  1700. an enumerated type to keep track of the command being processed because the 
  1701. Ada language does not allow for convenient testing of variable length strings.
  1702.  
  1703. The second set of packages performs file I/O and includes:
  1704.  
  1705.     1.  Ftp-file-io.
  1706.  
  1707.         This package contains procedures that perform file transfers as well 
  1708. as logical file operations.  The file transfer procedures are used by both the 
  1709. user and server sides.
  1710.  
  1711.     2.  Ftp-low-io.
  1712.  
  1713.         This package is very system dependent.  It provides procedures which 
  1714. are used in performing the logical file operations in Ftp-file-io.
  1715.  
  1716. The third set of packages manipulates replies and includes:
  1717.  
  1718.     1.  Ftp-rpl-utl.
  1719.  
  1720.     2.  Ftp-rpl-dat.
  1721.  
  1722. The last package, Ftp-site, keeps track of the current FTP implementation.  It 
  1723. uses a private data type to record what parameters are implemented and which 
  1724. are not.  The use of a private data type enforces hiding.
  1725.  
  1726. 1.3.4.2.6  Interfaces.  These three packages are highly system dependent.  
  1727. Each pacakge provides a logical interface to the host system.
  1728.  
  1729.     1.  Ftp-term.
  1730.  
  1731.         This package interfaces FTP to the user's terminal.  By using an 
  1732. intermediate package for terminal I/O, portability is increased at the expense 
  1733. of a level of overhead.  This was desirable because it allowed for localized 
  1734. modification if certain terminals or systems did not support standard Ada 
  1735. calls.
  1736.  
  1737.     2.  Ftp-tcp.
  1738.  
  1739.         This package interfaces FTP to TCP.  It is used for all data 
  1740. transfers.  The procedures provide the desired data access routines while 
  1741. hiding the actual TCP implementation.  This greatly decreases the effects of 
  1742. changing TCPs.
  1743.  
  1744.     3.  Ftp-telnet.
  1745.  
  1746.         This package interfaces FTP to Telnet.  It is used to send and receive 
  1747. all commands and replies.  The procedures provide the desired access routines 
  1748. while hiding the actual Telnet implementation.  This greatly decreases the 
  1749. effects of changing Telnet implementations.
  1750.  
  1751. 1.3.4.2.7  Ftp Global Data Types.  These packages contain data types that are 
  1752. fundamental to FTP and are consequently required by most FTP packages.
  1753.  
  1754.     1.  Ftp-cmd.
  1755.  
  1756.         This package contains constants and types which describe FTP commands.
  1757.  
  1758.     2.  Ftp-types.
  1759.  
  1760.         This package contains constant and types which describe FTP arguments.
  1761.  
  1762.     3.  Ftp-reply.
  1763.  
  1764.         This package contains constant and types which describe FTP replies.
  1765.  
  1766. 1.3.4.3 File Names In Order Of Compilation.
  1767.  
  1768.              (Files needed to interface to TELNET);
  1769.     
  1770.      Source Filename   Symbol Filename   Package Name
  1771.      ---------------   ---------------   ------------
  1772.    I PVIRTLPAC         VIRTUALTR         Virtual-transport-level
  1773.   II AUSERDPAC         USERDATA          User_data
  1774.  III SERVER_TELNET_
  1775.      PACKAGE           N/A (VAX)         Server_telnet_package
  1776.   IV DEC_TN_TASKS      N/A (VAX)         Dec_tn_tasks
  1777.  
  1778.                (Files needed to interface to TCP);
  1779.  
  1780.      Source Filename   Symbol Filename   Package name
  1781.                        (WICAT)
  1782.      ---------------   ---------------   ------------
  1783.    A BUFFER            BUFFERDAT         Buffer-data
  1784.    B NCOMM (WICAT)     WITHTCPCO         With-tcp-communicate
  1785.    C NEW_NCOMMU        WITHULPCO         With-ulp-communicate
  1786.  
  1787.                        (FTP source files)
  1788.  
  1789.      Source Filename   Symbol Filename   Package name
  1790.                        (WICAT)
  1791.      ---------------   ---------------   ------------
  1792.    1 VT100             VT100             Vt100
  1793.    2 MYDEBUGIO         MYDEBUGIO         My-debug-io
  1794.    3 MYUTILS           MYUTILITI         My-utilities
  1795.    4 FTPCMD            COMMANDTY         Command-types
  1796.    5 FTPTYPES          FTPTYPES          Ftp-types
  1797.    6 FTPRPL            REPLYTYPE         Reply-types
  1798.    7 FTPTERM           FTPTERMIN         Ftp-terminal-driver
  1799.    8 FTPTCP            FTPTCP            Ftp-tcp
  1800.    9 FTPTELNET         FTPTELNET         Ftp-telnet
  1801.   10 FTPCNVCMD         FTPCONVER         Ftp-convert-commands
  1802.   11 FTPRCVUTL         FTPRCVUTL         Ftp-rcv-utils
  1803.   12 FTPCMDUTL         FTPCOMMAN         Ftp-command-utilities
  1804.   13 MYCNVT            MYCONVERSI        My-conversions
  1805.   14 FTPLOWIO          FTPLOWLEV         Ftp-low-level-io
  1806.   15 FTPFILEIO         FTPFILEIO         Ftp-file-io
  1807.   16 FTPSITE           SITEDETAI         Site-details
  1808.   17 FTPRPLDAT         FTPREPLYD         Ftp-reply-data
  1809.   18 FTPRPLUTL         REPLYUTIL         Reply-utilities
  1810.   19 FTPUTL            FTPUTILIT         Ftp-utilities
  1811.   20 FTPSRVUTL         SERVERUTI         Server-utilities
  1812.   21 FTPSRVLOG         SERVERLOG         Server-login-commands
  1813.   22 FTPSRVDTP         SERVERDTP         Server-dtp-commands
  1814.   23 FTPSRVPI          SERVERPIC         Server-pi-commands
  1815.   24 FTPSRVXFR         SERVERXFE         Server-xfer-commands
  1816.   25 FTPSERVER         SERVERFTP         Server-ftp
  1817.   26 FTPUSRXFR         USERXFERC         User-xfer-commands
  1818.   27 FTPUSRPI          USERPICOM         User-pi-commands
  1819.   28 FTPUSRDTP         USERDTPCO         User-dtp-commands
  1820.   29 FTPUSER           USERFTP           User-ftp
  1821. 1.3.4.4  Package Dependencies
  1822.  
  1823.    Source Filename   Depends on
  1824.    ---------------   ----------
  1825.  1 VT100             -
  1826.  2 MYDEBUGIO         1
  1827.  3 MYUTILS           -
  1828.  4 FTPCMD            -
  1829.  5 FTPTYPES          4
  1830.  6 FTPRPL            5
  1831.  7 FTPTERM           4, 5, 6
  1832.  8 FTPTCP            1, 2, 3, A, B
  1833.  9 FTPTELNET         2, 3, 4, A, B, C, I, II, IV
  1834. 10 FTPCNVCMD         4, 5, 7
  1835. 11 FTPRCVUTL         4, 5, 7, 10
  1836. 12 FTPCMDUTL         4, 5, 7, 9, 11
  1837. 13 MYCNVT            -
  1838. 14 FTPLOWIO          2, 3, 4, 7, 13
  1839. 15 FTPFILEIO         1, 2, 3, 8, 14
  1840. 16 FTPSITE           5, 7
  1841. 17 FTPRPLDAT         2, 4, 5, 6
  1842. 18 FTPRPLUTL         2, 4, 5, 6, 7, 9, 17
  1843. 19 FTPUTL            2, 5, 7, 9, 12, 16
  1844. 20 FTPSRVUTL         2, 5, 6, 12, 18
  1845. 21 FTPSRVLOG         2, 5, 9, 19, 20
  1846. 22 FTPSRVDTP         5, 16, 19, 20
  1847. 23 FTPSRVPI          5, 6, 18, 19, 20
  1848. 24 FTPSRVXFR         2, 5, 8, 12, 15, 19, 20
  1849. 25 FTPSERVER         2, 5, 9, 12, 19, 20, 21, 22, 23, 24, III
  1850. 26 FTPUSRXFR         2, 5, 6, 7, 8, 12, 15, 18, 19
  1851. 27 FTPUSRPI          5, 6, 7, 12, 16, 18, 19
  1852. 28 FTPUSRDTP         2, 5, 6, 7, 12, 16, 18, 19
  1853. 29 FTPUSER           5, 7, 12, 19, 26, 27, 28, III
  1854. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  1855. --smtp.man
  1856. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  1857.                          SIMPLE MAIL TRANSFER PROTOCOL
  1858.                                   USERS MANUAL
  1859.  
  1860.                                     PREFACE
  1861.  
  1862. This is a preliminary document for general information purposes only.  No 
  1863. guarantee is made of the validity of the information herein, some of it may be 
  1864. subject to change or simply incorrect.
  1865.  
  1866. 1.0  INTRODUCTION
  1867.  
  1868. The Simple Mail Transfer Protocol (SMTP) allows exchange of electronic mail 
  1869. between processes attached by a common transport service.  SMTP consists of 
  1870. two protocol interpreter processes, one is the sending process, called the 
  1871. User-SMTP, and the other is the receiver, called the Server-SMTP.  This 
  1872. implementation is designed for the User-SMTP to be controlled by a human 
  1873. operator (as opposed to a computer process), and the Server-SMTP is designed 
  1874. to be an autonomous process in a host.  This document is divided accordingly 
  1875. into two parts, one for each process.  The protocol, as implemented, is 
  1876. specified MIL-STD-1781, dated 10 May 1984.
  1877.  
  1878. 2.0  USER SMTP PROCESS
  1879.  
  1880. The User SMTP process (USMTP) is designed to operate much the same way as the 
  1881. DEC VAX/VMS MAIL utility, except that the receiver may be located in a 
  1882. different host which is attached to the network.  The user is prompted for 
  1883. various data (receiver-host, receiver-names, etc.).  The data is then 
  1884. formatted according to the SMTP requirements and transmitted.  The software is 
  1885. designed to allow the user to transmit mail without knowledge of the SMTP 
  1886. itself.
  1887.  
  1888. 2.1  Using USMTP.  
  1889.  
  1890. 2.1.1  Establish a Connection to the Remote Host.  The user will be prompted 
  1891. for the name of the remote host.  Currently the user must enter the DDN 
  1892. address.  This is a string of the form:  NETWORK.HOST.  This format will be 
  1893. translated to the proper address for the transport protocol.  Note that domain 
  1894. names are not currently supported (see section 2.5).  USMTP will then display 
  1895. with some status information as the connection is opened and the USMTP perform 
  1896. the necessary protocol handshaking.
  1897.  
  1898. 2.1.2  Identify Source.  The sender will be prompted to enter the receiver 
  1899. names (RCPT).  Multiple receivers are allowed (on the same host).  As each 
  1900. name is entered, status information will be displayed as the remote host 
  1901. confirms that it can deliver the mail to the receiver (or denies delivery).  
  1902. The host format must be in the same format as expected for user names in the 
  1903. remote host.  A nul line (cr) will terminate the list.  At least one RCPT must 
  1904. be acknowledged by the remote host.
  1905.  
  1906. 2.1.4  Enter the Text.  The test is entered by the operator at the keyboard.  
  1907. Note that mailing files is not currently supported (see section 2.5).  
  1908. Terminate the text with an escape and a carriage return.  Status information 
  1909. is displayed when the SSMTP confirms reception.
  1910.  
  1911. 2.1.5  Exit or Open Another Connection.  The user will be prompted to send 
  1912. more mail, or exit.
  1913.  
  1914. The user will be prompted to send more mail, or ext.
  1915.  
  1916. 2.2  Example Session.  
  1917.  
  1918.     $ SMTP
  1919.     SMTP VERSION 1.0
  1920.     ENTER DESTINATION HOST NAME (NET.HOST)- 26.103 <CR> 
  1921.        220 TECR MAIL SERVICE READY
  1922.        250 OK
  1923.     PLEASE ENTER YOUR USER NAME -  HIGGINS@ECI<CR> 
  1924.     RCPT- CONTR23<CR> 
  1925.        250 IK
  1926.     RCPT-  <CR> 
  1927.        354 BEGIN MAIL
  1928.     PLEASE ENTER DATA, END WITH <ESC>  <cr> 
  1929.     THIS IS SOME SAMPLE MAIL...
  1930.     Blah Blah Blah
  1931.     .....
  1932.     ALL FOR NOW
  1933.     <ESC> <CR> 
  1934.        220 IK
  1935.        221 CLOSING
  1936.     CONNECTION CLOSED
  1937.     $           
  1938.  
  1939. 2.3 USMTP OPERATIONS
  1940.  
  1941. This section describes the functional characteristics of the USMTP in greater 
  1942. detail than the previous section.  USMTP has been designed to separate the 
  1943. user from the details of the protocol itself as much as possible.  This 
  1944. section details the interaction of the steps outlined in the previous section 
  1945. in relation to the actual protocol interaction and processing.
  1946.  
  1947. 2.3.1  Initial State.  In this state, the USMTP prompts for a distant host 
  1948. name.  It then waits until a string is input terminated by a <CR> .  Then the 
  1949. procedure translates host name to address is called to examine the name and 
  1950. determine if it is a known host name.  Currently it parses the string assuming 
  1951. it is of the form NETWORK.HOST where both fields are decimal addresses.  It 
  1952. then translates that to the complete internet address for the well-known 
  1953. socket for SMTP at the host (i.e., NETWORK..25.HOST).  USMTP will then send an 
  1954. active open to that port by calling tcp, and then wait for an open message 
  1955. from tcp.  Error messages from tcp will cause a tcp error exception.  After a 
  1956. successful open, the SMTP command HELO will be sent with the local host name.  
  1957. This host name is hard coded into a constant string; see section 2.5 for 
  1958. details.  USMTP will then wait for the correct reply for a HELO command (i.e., 
  1959. 250) to be received.  It will then prompt the user for his name, and send it 
  1960. in a MAIL command.  USMTP will then wait for the correct reply (250).  The two 
  1961. SMTP processes are then in synchronization.
  1962.  
  1963. 2.3.2  Receipt List.  In this state, USMTP prompts for the receiver name.  It 
  1964. then sends the name in a RCPT command, and waits for a response.  It will then 
  1965. print out the response, and prompt for another receiver.  A nul line 
  1966. terminates the list.  At least on RCPT command must elicit a will-deliver 
  1967. reply (250-251) for the user to exit this state.
  1968.  
  1969. 2.3.3  Data State.  First, a DATA command is sent to the SSMTP, and then the 
  1970. USMTP awaits the start-mail response (354).  The user is prompted for data 
  1971. lines and these are sent, line by line to the SSMTP.  Each line is examined 
  1972. for a starting period, and if one is present the line is padded by a blank.  
  1973. The end of text sequence is the escape key followed by the <CR> .  Upon 
  1974. detection of this sequency, an end-of-data indicator is sent to the SSMTP.  
  1975. The delivery-ok response is then expected by the USMTP.  Note that the escape 
  1976. sequence is used here because of difficulty resetting the default input file 
  1977. in textio.  If this problem is resolved, the end-of-data will be an 
  1978. end-of-file mark (Z), which will correspond to the vms mail utility and will 
  1979. also make extension to non-interactive data entry much easier.
  1980.  
  1981. 2.3.4  Quit State.  A QUIT command is then sent to the SSMTP and the TCP 
  1982. connection is closed.  The closed message is expected from tcp.  The user is 
  1983. then prompted for the choice to exit or return to idle state.
  1984.  
  1985. 2.4  Detailed Program Description.  The USMTP is implemented in seven 
  1986. packages, and utilizes five network support packages.  The usmtp packages are 
  1987. usmtpconnections, usmtpnetwork,, usmtprcpt, usmtpreplies, usmtptext, 
  1988. usmtputils and usmtp.  The four network support packages are buffer, vmodulo, 
  1989. tcpglobals, ipglobals, and withulpcommunicate.  These support packages are not 
  1990. documented here, see the tcp documentation for more details.
  1991.  
  1992. The package usmtputils contain the global constants and exceptions used 
  1993. throughout the implementation.  Among these are the exceptions raised at 
  1994. various places in response to abnormal conditions (tcpreset, userreset, etc.), 
  1995. the reply codes which are sent by the ssmtp, and implementation restricted 
  1996. data structures, such as the maximum line length allowed.
  1997.  
  1998. The package usmtp network provides the basic functions of the network 
  1999. transport service.  These include opening a connection, sending data, 
  2000. receiving data, closing a connection, and aborting a connection.  The 
  2001. implementation is vax-top dependent, but the interface is designed to provide 
  2002. a transport-independent service.
  2003.  
  2004. The package usmtpconnections provides the routines to establish an smtp 
  2005. connection including performing the specified handshaking, and to properly 
  2006. termiante the smtp connection.
  2007.  
  2008. The package usmtprcpt contains the procedures to send rcpt commands and verify 
  2009. the response to the rcpt.  At least one rcpt must be properly aknowledged, and 
  2010. a <CR> .<CR> , but could be easily changed to any other desirable character 
  2011. (such as escape).
  2012.  
  2013. The package usmtpreplies contains the routines to get the ssmtp reply from the 
  2014. network and check for abnormal conditions (such as sudden transport close, bad 
  2015. command reply from ssmtp, etc.).
  2016.  
  2017. The usmtp is the main package which controls the usmtp session.  It contains 
  2018. the main procedure which is called from the DCL level to invoke the usmtp.
  2019.  
  2020. 2.5  User SMTP Limitations, Improvements, Etc..  This section discusses the 
  2021. limitations of the implementation of USMTP.
  2022.  
  2023. 2.5.1  Names.  Currently, only very limited naming is supported.  The 
  2024. procedure
  2025. translate_name(name                    : in string <>,
  2026.            net_number            : out integer,
  2027.            host_number           : out integer,
  2028.            valid_name            : out boolean) ;
  2029.  
  2030. will accept a string in the fomrat net-host only.  Some future upgrade will 
  2031. support domains, aliases, etc. by changing the implementation of this 
  2032. procedure.
  2033.  
  2034. 2.5.2  Text Input.  Currently, only interactive input from the keyboard is 
  2035. supported.  An escape is used to terminate.  Modification could be included to 
  2036. support sending files.  Utilizing the escape code (rather than an end-of-file) 
  2037. avoids the necessity of a reset to the default input file after the end of 
  2038. text.  This may be changed in the next release.
  2039.  
  2040. 2.5.3  Host and User name.  Currently, the host name is hard-coded into the 
  2041. procedure sendhelo.  To change this, simply modifying the string and 
  2042. recompiling the enclosing package will suffice.  A modification could allow 
  2043. the code to perform a system call to retrieve the host's network name.  
  2044. Currently, the user is prompted for his name.  This could be modified to allow 
  2045. the code to perform a system call to retrieve the host's network name.
  2046.  
  2047. 3.0  SERVER SIMPLE MAIL TRANSFER PROTOCOL INTERPRETER
  2048.  
  2049. The server simple mail transfer protocol interpreter (SSMTP) is the peer 
  2050. process to the USMTP which is responsible for receiving and delivering 
  2051. electronic mail.  The SSMTP sums as an autonomous process which waits for 
  2052. activation by a USMTP.  The mail exchange process is controlled by the USMTP.  
  2053. Once installed, the SSMTP requires no intervention by human operators.
  2054.  
  2055. 3.1  Operation Once Initialized.  The SSMTP requests a passive open on the 
  2056. SSMTP well-known socket (port 25).  When an open message is received from tcp, 
  2057. the SSTP will await a HELO command from the USMTP, and save the host name for 
  2058. the received message.  It will respond with a helo-ok response.  It will then 
  2059. await the MAIL command from the USMTP and save the sender-name string.  
  2060. Send-or-mail (SOML) will also be accepted, send (SEND) or send-and-mail (SAML) 
  2061. will not be accepted.
  2062.  
  2063. The SSMTP will then await the RCPT list.  Each RCPT will be verified for a 
  2064. valid local-user.  If the user is local, a RCPT-ok will be sent, otherwise a 
  2065. RCPT-not-ok will be sent.  A DATA command will terminate the list.
  2066.  
  2067. Once a DATA command is received, a begin-xmit response will be sent.  The 
  2068. SSMTP will then buffer each line as they are received.  At the end-of-test,  
  2069. the mail will be delivered.  The SSMTP will then await the MAIL command or the 
  2070. QUIT.
  2071.  
  2072. 3.2  Implementation Details.  This section outlines some further details of 
  2073. the SSMTP.
  2074.  
  2075. 3.2.1  User Lists.  Currently the user list is used for verifying the receiver 
  2076. name in a RCPT command.  This list is maintained in the package delivertouser, 
  2077. and is accessed by calling
  2078.  
  2079. verify_user(user_name : string <>, user_is_local : boolean);
  2080.  
  2081. A later refinement would implement the procedure with an os call to validate 
  2082. the name.
  2083.  
  2084. 3.2.2  Mail Delivery.  Mail is currently delivered by opening a file named 
  2085. smtpmail.txt writing the mail to it.  This is done in the procedure 
  2086. delivermail.  A DCL command procedure is used to allow the VMS system mailer 
  2087. to deliver the mail to the user.  This DCL command will handle multiple user 
  2088. names and deliver a copy to each, and will handle multiple mail entries.
  2089.  
  2090. 3.3  Detailed Program Description.  SSMTP is implemented in eight packages, 
  2091. and uses five additional packages for network support.  The SSMTP 
  2092. implementation packages are ssmtp, ssmtpdeliver, ssmtptext, ssmtprcpt, 
  2093. ssmtpconnections, ssmtpreplies, ssmtpconnections, ssmtpglobals.
  2094.  
  2095. the ssmtpglobals package include the implementation restricted data structures 
  2096. and other widely used exceptions and types.
  2097.  
  2098. The ssmtptransport contains the routines to interface to the transport service 
  2099. (TCP) to provide basic communication functions.  These include listening on a 
  2100. passive connection, receiving data, sending data, closing the connection, and 
  2101. aborting the connection.  These routines may raise various exceptions on 
  2102. abnormal conditions, such as unexpected connection closes.
  2103.  
  2104. The ssmtpreplies package contains routines to format the various replies sent 
  2105. by ssmtp.  These include the ready message, helo ok, mail ok, rcpt ok, rcpt 
  2106. not ok, out of buffer space, data ok, data complete ok, quit ok, and bad 
  2107. command format.  These replies are sent to the transport package procedures 
  2108. for buffering and transmission.
  2109.  
  2110. The ssmtpconnections package contains the procedures to establish the ssmtp 
  2111. data connection and perform the opening handshaking.  It also handles the helo 
  2112. command.
  2113.  
  2114. The ssmtprcpt package contains the procedures to handle the rcpt command.  The 
  2115. rcpt-name is looked up in a local table contained in this package.  If the 
  2116. name is in the table, a rcpt ok reply is sent.  If not, a rcpt not ok is sent.
  2117.  
  2118. The ssmtp text package contains the procedures to receive and buffer the mail 
  2119. text.  It scans the input until an end-of-mail is received, i.e., <CR> .<CR>  
  2120. sequence..
  2121.  
  2122. The ssmtpdeliver package contains the procedure to write the mail into a file 
  2123. for later delivery.  Currently it opens two files, one with a list of rcpt 
  2124. names, and the other with the data.  A DCL command procedure is included which 
  2125. will invoke the DCL mail utility to actually deliver the mail to the 
  2126. recipients.  By using the mail facility, the ssmtp procedure can run as an 
  2127. unprivileged process, but still move the mail to various other process files.  
  2128. The mail facility cannot be called from procedures, only from DCL-level, and 
  2129. so a command procedure is used rather than an Ada procedure.  It is assumed 
  2130. that the deliver command job could be run separately as a batch job, or put 
  2131. into a loop together with the ssmtp itself.
  2132.  
  2133. Finally, the ssmtp package contains the main procedures which controls the 
  2134. mail session.  It runs in a loop, waiting for mail, and then processing it.
  2135. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2136. --telnet.man
  2137. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2138. 1.  TELNET
  2139.  
  2140. 1.1  Functional Description.  The TELNET Protocol provides a general 
  2141. bi-directional, byte-oriented communications facility allowing a standard 
  2142. method of interfacing terminal devices or terminal oriented processes 
  2143. together.  This implementation is based on the Network Working Group Request 
  2144. for Comments:  854, "TELNET Protocol Specification," May 1983.
  2145.  
  2146. 1.2  Using TELNET.  
  2147.  
  2148. 1.2.1  Command Descriptions.  Only the first character in each word of the 
  2149. command is significant.  All commands are preceded by the '@' symbol followed 
  2150. immediately by the first word of the command.  Other command words follow and 
  2151. must be separated from each other by at least once space.  If the user desires 
  2152. sending the '@' symbol as data, the character must be doubled (typed twice 
  2153. with no intervening spaces).  All commands are terminated with a carriage 
  2154. return.  Commands may be in upper or lower case but must be consistent with 
  2155. respect to case within a single command.  If an incorrect command is entered, 
  2156. TELNET will respond with "bad" and an ascii bell.
  2157.  
  2158.     a.  Valid Command Format Examples.
  2159.  
  2160.          1.  @SEND ARE YOU THERE CR|
  2161.          2.  @S A Y T CR| (equivalent to the above command)
  2162.          3.  @suppress go-ahead local CR|
  2163.          4.  @s g 1 CR| (short form of above)
  2164.  
  2165.     b.  INVALID COMMAND FORMAT EXAMPLES:
  2166.  
  2167.          1.  @ SEND ABORT OUTPUT CR| (space between @ and first word of 
  2168. command)
  2169.  
  2170.          2.  @sendbreak (no space between command words)
  2171.  
  2172.          3.  @send SYNCH (mixed CASES)
  2173.  
  2174. 1.   CLOSE
  2175.  
  2176.      The CLOSE command closes a previously opened TELNET connection.  The 
  2177. response message to a successful close command is "connection closed."
  2178.  
  2179. 2.   ECHO LOCAL
  2180.  
  2181.      The ECHO LOCAL command will request the local TELNET to echo data 
  2182. characters received from the remote TELNET back to that remote TELNET.  As the 
  2183. remote TELNET may or may not agree to this option, the success or failure of 
  2184. this request will be reported when known.  If the request was denied, the side 
  2185. of the connection responsible for the denial is identified.  Note:  TELNET 
  2186. will not allow remote echoing on both sides of the connection at once as this 
  2187. would imply an endless loop of retransmissions.  If one side of the TELNET 
  2188. connection is performing remote echoing and both sides have agreed to suppress 
  2189. sending the TELNET GO-AHEAD, then TELNET will go into character-at-a-time 
  2190. instead of the default line-at-a-time transmission mode.
  2191.  
  2192. 3.   ECHO REMOTE
  2193.  
  2194.      The ECHO REMOTE command will request the remote TELNET to echo data 
  2195. characters received from the local TELNET back to the local TELNET.  As the 
  2196. remote TELNET may or may not agree to this option, the success or failure of 
  2197. this request will be reported when known.  If the request was denied, the side 
  2198. of the connection responsible for the denial is identified.  Note:  TELNET 
  2199. will not allow remote echoing on both sides of the connection at once as this 
  2200. would imply an endless loop of retransmissions.  If one side of the TELNET 
  2201. connection is performing remote echoing and both sides have agreed to suppress 
  2202. sending the TELNET GO-AHEAD, then TELNET will go into character-at-a-time 
  2203. instead of the default line-at-a-time transmission mode.
  2204.  
  2205. 4.   OPEN net .host .logical-host .imp ;port
  2206.  
  2207.      The OPEN command allows the user to establish a connection to a remote 
  2208. TELNET.  The parameter list after the OPEN command specifies the ARPANET-type 
  2209. network address of the remote TELNET's host computer.
  2210.  
  2211.          net#               : This is the network number.  The default is 10,
  2212.                               the ARPANET.
  2213.  
  2214.          host#              : This is the host number on the IMP.  The default
  2215.                               is zero.
  2216.  
  2217.          logical-host#      : This is the logical host number.  The default is
  2218.                               zero.
  2219.  
  2220.          imp#               : This is the IMP number the remote host is
  2221.                               connected to.  This number must be specified as
  2222.                               there is no default.
  2223.  
  2224.          port#              : This is the TCP port to which the connection will
  2225.                               be made.  The default is 23, TELNET.  This
  2226.                               parameter is optional.
  2227.  
  2228.      If the default value of a parameter  is desired, enter a period after the 
  2229. missing parameter.  For example, "@0 ...1" opens a connection to network 
  2230. number 10, host number 0, logical host number 0, IMP number 1, and TCP port 
  2231. number 23.  It is equivalent to "@0 10.0.0.1;23".
  2232.  
  2233. 5.   RESET
  2234.  
  2235.      This command ensures the transport level connection is closed and resets 
  2236. all buffers and state information to start-up/default status.
  2237.  
  2238. 6.   STATUS
  2239.  
  2240.      This command returns status information about the transport level 
  2241. connection.
  2242.  
  2243. 7.   SEND ABORT OUTPUT
  2244.  
  2245.      This command allows the current process to (appear to) run to completion 
  2246. while not sending the output to the user.  Only TELNET commands that can be 
  2247. processed in a timely manner will continue to be processed.
  2248.  
  2249. 8.   SEND ARE YOU THERE
  2250.  
  2251.      This command causes the remote TELNET to return a message indicating the 
  2252. remote TELNET is operational.
  2253.  
  2254. 9.   SEND BREAK
  2255.  
  2256.      This code provides a signal outside the USASCII set which is currently 
  2257. given local meaning within many systems.  It indicates the "break" or 
  2258. "attention" key was hit.  It is not a synonym for the Interrupt Process (IP) 
  2259. standard representation.
  2260.  
  2261. 10.   SEND ERASE CHARACTER
  2262.  
  2263.       This command instructs the remote user process to delete the last 
  2264. undeleted character from the stream of data being supplied by the user.
  2265.  
  2266. 11.   SEND ERASE LINE
  2267.  
  2268.       This command instructs the remote user process to delete the last 
  2269. undeleted line from the stream of data being supplied by the user.
  2270.  
  2271. 12.  SUPPRESS GO-AHEAD LOCAL
  2272.  
  2273.      The default I/O mode of TELNET is half duplex.  This option can be used 
  2274. to increase efficiency on a full duplex terminal or I/O device by putting the 
  2275. local TELNET in full duplex mode.  This option should not be used on a half 
  2276. duplex "lockable" keyboard terminal.  As the remote TELNET may or may not 
  2277. agree to this option, the success or failure of this request will be reported 
  2278. when known.  If one side of the TELNET connection is performing remote echoing 
  2279. and both sides have agreed to suppress sending the TELNET GO-AHEAD, then 
  2280. TELNET will go into character-at-a-time instead of the default line-at-a-time 
  2281. transmission mode.
  2282.  
  2283. 13.  SUPPRESS GO-AHEAD REMOTE
  2284.  
  2285.      The default I/O mode of TELNET is half duplex.  This option can be used 
  2286. to increase efficiency on a remote full duplex terminal or I/O device by 
  2287. putting the remote TELNET in full duplex mode.  This option should not be used 
  2288. on a remote half duplex "lockable" keyboard terminal.  As the remote TELNET 
  2289. may or may not agree to this option, the success or failure of this request 
  2290. will be reported when known.  If one side of the TELNET connection is 
  2291. performing remote echoing and both sides have agreed to suppress sending the 
  2292. TELNET GO-AHEAD, then TELNET will go into character-at-a-time instead of the 
  2293. default line-at-atime-transmission mode.
  2294.  
  2295. 14.  SEND INTERRUPT PROCESS
  2296.  
  2297.      Many systems provide a function which suspends, interrupts, aborts, or 
  2298. terminates the operation of the user process.  The IP is the standard 
  2299. representation for this function.  This is likely to be utilized by users who 
  2300. have an unwanted or runaway process.
  2301.  
  2302. 15.  SEND SYNCH
  2303.  
  2304.      This command will essentially eliminate all data already received by the 
  2305. remote but not processed.
  2306.  
  2307. 16.  QUIT ECHO LOCAL
  2308.  
  2309.      This command will stop the local TELNET from echoing characters to the 
  2310. remote TELNET.
  2311.  
  2312. 17.  QUIT ECHO REMOTE
  2313.  
  2314.      This command will stop the remote TELNET from echoing characters to the 
  2315. local TELNET.
  2316.  
  2317. 18.  QUIT SUPPRESS GO-AHEAD LOCAL
  2318.  
  2319.      This command will stop the local TELNET from suppressing the transmission 
  2320. of the TELNET GO-AHEAD signal.
  2321.  
  2322. 19.  QUIT SUPPRESS GO-AHEAD REMOTE
  2323.  
  2324.      This command will stop the remote TELNET from suppressing the 
  2325. transmission of the TELNET GO-AHEAD signal.
  2326.  
  2327. 1.2.2  Running TELNET.  
  2328.  
  2329.     1.  To invoke TELNET, the user enters TELNET at the command level.
  2330.  
  2331.     2.  Desirable non-default TELNET options that the user wishes to have at 
  2332. the establishment of a TELNET connection (if any) may be entered at this 
  2333. point.  These options will then be negotiated at the subsequent establishment 
  2334. of a new connection.  These options can also be established dynamically at any 
  2335. time during the TELNET session.  Non-default options currently implemented are 
  2336. remote-echo and suppress go-ahead.  The success or failure of the requested 
  2337. option negotiations is reported to the user as it becomes available.
  2338.  
  2339.     3.  To establish a TELNET connection, the user gives the open command and 
  2340. provides the net address he wishes to communicate with.
  2341.  
  2342.     4.  If the connection was successfully established, data will be 
  2343. transferred between the two ends of the connection.  TELNET commands can also 
  2344. be entered at this time.
  2345.  
  2346.     5.  To terminate a connection, the user issues the close command.
  2347.  
  2348.     6.  Other connections could be established in a like manner.
  2349.  
  2350.     7.  To terminate the TELNET session all together, enter 'control-y' on the 
  2351. VAX and 'control-x' on the WICAT.
  2352.  
  2353.     8.  If on the VAX, enter "STOP" to terminate the TELNET process.
  2354.  
  2355. 1.2.3  Sample Session.  The sample session displays the operator entries in 
  2356. uppercase and the computers messages/responses in lower case.
  2357.  
  2358.     1.  TELNET CR|
  2359.     2.  @OPEN 1.2..3;4 CR|
  2360.     3.  connection established cr|
  2361.     4.   CR|
  2362.     5.  username:
  2363.     6.  NOSC CR|
  2364.     7.  password:
  2365.     8.  ADA CR|
  2366.     9.  welcome...
  2367.    10.  TY MYFILE.LIS CR|
  2368.    11.  Ada is the language of the future. cr|
  2369.    12.  because it is awesome. cr|
  2370.    13.  @CLOSE CR|
  2371.    14.  connection closed CR|
  2372.  
  2373. 1.3  TELNET Computer Program Overview.
  2374.  
  2375. 1.3.1  Hardware.  This implementation is targeted for a VAX 11/780 and the 
  2376. Wicat workstation.
  2377.  
  2378. 1.3.2  Operation System.  The target operating systems are for VMS 4.1 and ROS 
  2379. version 2.1e - Labtek RTK 2.2.
  2380.  
  2381. 1.3.3  Ada Compiler Implementation.  The compilers used are TeleSoft-Ada 
  2382. version 1.3(WICAT) and DEC Ada version 1.0 (VAX.)
  2383.  
  2384. 1.3.4  Package Overview.  
  2385.  
  2386. 1.3.4.1  Hierarchy Chart.
  2387.  
  2388. ========================= INTERFACE TO THE CONTROLLER =========================
  2389.  
  2390.                                  TELNET-PACKAGE
  2391.  
  2392. ========================== APPLICATION PROTOCOL LEVEL =========================
  2393.  
  2394.                                   APL-PACKAGE
  2395.  
  2396.                          NVT-KEYBOARD-INPUT-PROCESSING
  2397.                         TRANSPORT-LEVEL-INPUT-PROCESSING
  2398.                                MESSAGE-PROCESSING
  2399.  
  2400. ========================= PRESENTATION PROTOCOL LEVEL =========================
  2401.  
  2402.                                OPTION-NEGOTIATION
  2403.                             VIURTUAL-TRANSPORT-LEVEL
  2404.                                 VIRTUAL-TERMINAL
  2405.                                     IO-TASKS
  2406.  
  2407. ========================= DATA TYPES / DATA OPERATIONS ========================
  2408.  
  2409.                                    USER-DATA
  2410.  
  2411. =============================== TEST/DEBUG AIDS ===============================
  2412.  
  2413.                               I-DEBUG-STATE-OUTPUT
  2414.                                     DEBUG-IO
  2415.  
  2416. 1.3.4.2  Data Flow Diagrams.  
  2417.  
  2418.                   DATA FLOW FROM LOCAL TELNET TO REMOTE TELNET:
  2419. --------------------------------- LOCAL TELNET --------------------------------
  2420.  
  2421. keyboard input -->  IO-TASKS --> 
  2422.                    VIRTUAL-TERMINAL --> 
  2423.                    NVT-KEYBOARD-INPUT-PROCESSING --> 
  2424.                    VIRTUAL-TRANSPORT-LEVEL --> 
  2425.                    (ACTUAL LOCAL TRANSPORT LEVEL [TCP]) --> 
  2426.  
  2427. -------------------------------- REMOTE TELNET --------------------------------
  2428.  
  2429.                    (ACTUAL REMOTE TRANSPORT LEVEL [TCP] --> 
  2430.                    VIRTUAL-TRANSPORT-LEVEL --> 
  2431.                    TRANSPORT-LEVEL-INPUT-PROCESSING --> 
  2432.                    VIRTUAL-TERMINAL --> 
  2433.                    IO-TASKS --> 
  2434. printer output
  2435.  
  2436. 1.3.4.3  Package Descriptions.  
  2437.  
  2438.                                  TELNET-PACKAGE
  2439.  
  2440. This package has the data types and data operations which are exported to the 
  2441. TELNET controller program to allow the controller to set up a 
  2442. user-control-block data structure needed by each TELNET user.  It also 
  2443. contains the TELNET procedure itself which services a TELNET user.  Additional 
  2444. procedures allow non-default TELNET options to be set or reset.
  2445.  
  2446.                                    TELNET-APL
  2447.  
  2448. This package performs the high level processing associated with the TELNET 
  2449. Application Protocol Level (APL).
  2450.  
  2451.                          NVT-KEYBOARD-INPUT-PROCESSING
  2452.  
  2453. This package has subprograms to manage APL level processing of Network Virtual 
  2454. Terminal (NVT) keyboard input.
  2455.  
  2456.                         TRANSPORT-LEVEL-INPUT-PROCESSING
  2457.  
  2458. This package has APL subprograms used to process data input to the local 
  2459. TELNET from the remote TELNET.
  2460.  
  2461.                                MESSAGE PROCESSING
  2462.  
  2463. This package has APL subprograms used to process message input to the local 
  2464. TELNET from the local transport level.
  2465.  
  2466.                                 VIRTUAL-TERMINAL
  2467.  
  2468. This package provides low level Network Virtual Terminal services and 
  2469. interfaces with the actual I/O device or process.
  2470.  
  2471.                             VIRTUAL-TRANSPORT-LEVEL
  2472.  
  2473. This package provides low level virtual transport level services and 
  2474. interfaces with the actual transport level.
  2475.  
  2476.                                    USER-DATA
  2477.  
  2478. This package contains operations to examine and manipulate user APL state 
  2479. information and APL buffers.
  2480.  
  2481.                                OPTION-NEGOTIATION
  2482.  
  2483. This package contains subprograms to handle TELNET option negotiation.
  2484.  
  2485.                                     IO-TASKS
  2486.  
  2487. This package has tasks to get/put characters from/to the actual terminal 
  2488. device's keyboard/printer.  This is not used when TELNET is serving a process.
  2489.  
  2490.                                     DEBUG-IO
  2491.  
  2492. This package is used for test/debug I/O as well as reporting exceptions during 
  2493. run time.
  2494.  
  2495.                               I-DEBUG-STATE-OUTPUT
  2496.  
  2497. This package is used for test/debug and outputs TELNET state information and 
  2498. data buffers.
  2499.  
  2500.                                DEC-TN-TASKS (VAX)
  2501.  
  2502. This package is used to make TELNET event driven instead of poling as on the 
  2503. single user WICAT.
  2504.  
  2505.                           SERVER-TELNET-PACKAGE (VAX)
  2506.  
  2507. This package contains a server-TELNET task type for exporting to a controller.
  2508.  
  2509. 1.3.4.4  FILE NAMES (IN ORDER OF COMPILATION)
  2510.  
  2511.    Source Filename  Symbol Filename  Package Name
  2512.    ---------------  ---------------  ------------
  2513.  1 DEBUGIO          DEBUGIO          DEBUG-IO
  2514.  2 PVIRTMPAC        VIRTUALTE        VIRTUAL-TERMINAL
  2515.  3 TTYIO            IOTASKS          IOTASKS
  2516.  4 AUSERDPAC        USERDATA         USER-DATA
  2517.  5 PVIRTLPAC        VIRTUALTR        VIRTUAL-TRANSPORT-LEVEL
  2518.  6 POPTNGPAC        OPTIONNEG        OPTION-NEGOTIATION
  2519.  7 AMESSPAC         MESSAGEPR        MESSAGE-PROCESSING
  2520.  8 ATRINPAC         TRANSPORT        TRANSPORT-LEVEL-INPUT-
  2521.                                      PROCESSING
  2522.  9 AKEYBDPAC        NVTKEYBOA        OPTION-NEGOTIATION
  2523. 10 APLPAC           TELNETAPL        TELNET-APL
  2524. 11 TELNETPAC        TELNETPAC        TELNET-PACKAGE
  2525. 12 IDEBUGSO         IDEBUGSTA        I-DEBUG-STATE-OUTPUT
  2526.  
  2527. --------------------- VAX PACKAGES ---------------------------
  2528. 2.5 DEC-TN-TASKS-
  2529. 4.5 DEC-TN-TASKS
  2530. 13 SERVER-TELNET-PACKAGE-,SERVER-TELNET-PACKAGE
  2531. 14 USER-TELNET (controller procedure)
  2532. 15 SERVER-TELNET (controller procedure)
  2533.  
  2534. 1.3.4.5 PACKAGE DEPENDENCY CHART (WICAT)
  2535.  
  2536. PACKAGE #    SPECIFICATION DEPENDS ON     BODY DEPENDS ON
  2537. ---------    ------------------------     ---------------
  2538.  1
  2539.  2
  2540.  3                                        2
  2541.  4           2                            1
  2542.  5           4,I,II,III                   1
  2543.  6           4                            1,5
  2544.  7           2,4,5                        1
  2545.  8                                        1,2,4,5,6
  2546.  9                                        1,2,4,5,6
  2547. 10                                        1,2,5,7,4,8,9
  2548. 11           4,6                          1,10
  2549. 12           4                            1
  2550.  
  2551.   I  (TCP PACKAGE) WITH-ULP-COMMUNICATE
  2552.  II  (TCP PACKAGE) WITH-TCP-COMMUNICATE
  2553. III  (TCP PACKAGE) BUFFER-DATA
  2554.