Internet DRAFT - draft-gfn-race

draft-gfn-race



Network Working Group                                      C. Kilkenny 
Internet-Draft                       Global Financial Networks Limited 
Document: draft-gfn-race-00.txt                              July 2000 
Expires: January 9, 2001              
 
 
                      RACE Protocol Draft Version 1.3 
 
 
Status of this Memo 
 
   This document is an Internet-Draft and is NOT offered in accordance 
   with Section 10 of RFC2026, and the author does not provide the IETF 
   with any rights other than to publish as an Internet-Draft. 
 
   Internet-Drafts are working documents of the Internet Engineering 
   Task Force (IETF), its areas, and its working groups.  Note that 
   other groups may also distribute working documents as Internet-
   Drafts. 
 
   Internet-Drafts are draft documents valid for a maximum of six 
   months and may be updated, replaced, or obsoleted by other documents 
   at any time.  It is inappropriate to use Internet-Drafts as 
   reference material or to cite them other than as "work in progress." 
 
   The list of current Internet-Drafts can be accessed at 
   http://www.ietf.org/ietf/1id-abstracts.txt 
 
   The list of Internet-Draft Shadow Directories can be accessed at 
   http://www.ietf.org/shadow.html. 
 
Copyright Notice 
 
   Copyright (C) 1998-2000, Global Financial Networks Limited. All 
   Rights Reserved. 
 
   THE PRESENTATION, DISTRIBUTION OR OTHER DISSEMINATION OF THE 
   INFORMATION CONTAINED HEREIN BY GLOBAL FINANCIAL NETWORKS LIMITED IS 
   NOT A LICENSE, EITHER EXPRESSLY OR IMPLIEDLY, TO ANY INTELLECTUAL 
   PROPERTY OWNED OR CONTROLLED BY GLOBAL FINANCIAL NETWORKS LIMITED. 
 
   THIS DOCUMENT AND THE INFORMATION CONTAINED HEREIN IS PROVIDED ON AN 
   "AS IS" BASIS AND GLOBAL FINANCIAL NETWORKS LIMITED DISCLAIMS ALL 
   WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY 
   WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE 
   ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS 
   FOR A PARTICULAR PURPOSE. 
 
   IN NO EVENT WILL GLOBAL FINANCIAL NETWORKS LIMITED BE LIABLE TO ANY 
   OTHER PARTY FOR THE COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, 
   LOST PROFITS, LOSS OF USE, LOSS OF DATA, OR ANY INCIDENTAL, 
   CONSEQUENTIAL, DIRECT, INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER 
   CONTRACT, TORT, WARRANTY, OR OTHERWISE, ARISING IN ANY WAY OUT OF 
   THIS OR ANY OTHER AGREEMENT RELATING TO THIS DOCUMENT, WHETHER OR 
   NOT SUCH PARTY HAD ADVANCE NOTICE OF THE POSSIBILITY OF SUCH 
   DAMAGES. 
  
C. Kilkenny                Expires January 9, 2001            [Page 1] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

Abstract 
 
   This document describes the Rapid Application Communication and 
   Emulation (RACE) Protocol. RACE provides a general framework for 
   inter-application communication, messaging, and interoperability. 

















































  
C. Kilkenny                Expires January 9, 2001            [Page 2] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

Table of Contents 
 
   1. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . .  4 
      1.1  Introduction  . . . . . . . . . . . . . . . . . . . . . .  4 
      1.2  Motivation  . . . . . . . . . . . . . . . . . . . . . . .  4 
      1.3  General Considerations  . . . . . . . . . . . . . . . . .  6 
 
   2. Basic Protocol . . . . . . . . . . . . . . . . . . . . . . . .  8 
      2.1  Dialogue  . . . . . . . . . . . . . . . . . . . . . . . .  8 
      2.2  Packet Usage  . . . . . . . . . . . . . . . . . . . . . . 11 
      2.3  Service and Application Identifiers . . . . . . . . . . . 13 
      2.4  Reply and Disconnect Codes  . . . . . . . . . . . . . . . 13 
 
   3. Protocol Options . . . . . . . . . . . . . . . . . . . . . . . 14 
      3.1  MODE [Mode of Message Transfer] . . . . . . . . . . . . . 14 
      3.2  NOREPLY . . . . . . . . . . . . . . . . . . . . . . . . . 17 
      3.3  WINDOW  . . . . . . . . . . . . . . . . . . . . . . . . . 18 
      3.4  SEQNO [Sequence Number] . . . . . . . . . . . . . . . . . 20 
      3.5  PDE [Possible Duplicate Emission] . . . . . . . . . . . . 22 
      3.6  RREF [Receiver Reference] . . . . . . . . . . . . . . . . 24 
      3.7  LGIAUTH [Login Authentication]  . . . . . . . . . . . . . 26 
      3.8  MSGAUTH [Message Authentication]  . . . . . . . . . . . . 28 
      3.9  LGRP [Logical Grouping] . . . . . . . . . . . . . . . . . 30 
      3.10 MSGLEN [Message Length] . . . . . . . . . . . . . . . . . 32 
      3.11 BATCH . . . . . . . . . . . . . . . . . . . . . . . . . . 34 
      3.12 NOM [Number of Messages]  . . . . . . . . . . . . . . . . 36 
      3.13 BIGFOOT [Big Code Numbering]  . . . . . . . . . . . . . . 38 
 
   4. Packet Syntax  . . . . . . . . . . . . . . . . . . . . . . . . 41 
      4.1  CONNECT . . . . . . . . . . . . . . . . . . . . . . . . . 41 
      4.2  DO  . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 
      4.3  DONT  . . . . . . . . . . . . . . . . . . . . . . . . . . 43 
      4.4  WILL  . . . . . . . . . . . . . . . . . . . . . . . . . . 43 
      4.5  WONT  . . . . . . . . . . . . . . . . . . . . . . . . . . 44 
      4.6  HERE-IS . . . . . . . . . . . . . . . . . . . . . . . . . 44 
      4.7  READY . . . . . . . . . . . . . . . . . . . . . . . . . . 45 
      4.8  DISCONNECT  . . . . . . . . . . . . . . . . . . . . . . . 45 
      4.9  MESSAGE . . . . . . . . . . . . . . . . . . . . . . . . . 46 
      4.10 MESSAGE-REPLY . . . . . . . . . . . . . . . . . . . . . . 47 
 
   5. Field Syntax . . . . . . . . . . . . . . . . . . . . . . . . . 49 
 
   6. Reply Codes  . . . . . . . . . . . . . . . . . . . . . . . . . 52 
 
   7. Disconnect Codes . . . . . . . . . . . . . . . . . . . . . . . 53 
 
   8. Sample Transmission  . . . . . . . . . . . . . . . . . . . . . 57 
 






  
C. Kilkenny                Expires January 9, 2001            [Page 3] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

1. Overview 
    
1.1 Introduction 
    
   The Rapid Application Communication and Emulation (RACE) Protocol is 
   a general framework for inter-application communication, messaging, 
   and interoperability. The intent of the protocol is to provide a 
   common interface and facilitate general application-to-application 
   message transfer. 
 
   The RACE Protocol provides a simple, extendable and efficient method 
   of connecting applications and transferring messages. Applications 
   assume a basic protocol and can negotiate protocol options in order 
   to alter the protocol during communication. Applications can be 
   rapidly integrated, because implementation is straightforward and on 
   a need only basis. Any complex communication requirement can be 
   supported, because the protocol is open-ended. For example, the 
   protocol can support secure data transmission, windowing, data 
   compression, etc. RACE enables powerful functions by combining 
   simple protocol options. The protocol is efficient and can achieve 
   maximum transfer rates. 
 
   RACE does not define an application message standard nor does it 
   interfere with application message objects. Any binary data and, 
   thereby, any application message can be passed over RACE. 
   Application level protocols can be layered upon or mapped to RACE, 
   with or without RACE providing message replies. 
 
   Negotiated options facilitate protocol mapping and allow otherwise 
   incompatible applications to agree a common protocol. Once mapped to 
   RACE, a protocol can be easily spoken by applications and can be 
   mapped to other protocols. By decoupling the application from its 
   messaging, RACE provides a single gateway to multiple protocols and 
   application interfaces. Communication can be changed without 
   altering the application whatsoever. 
 
   RACE assists in replacing and emulating applications. Once message 
   syntax has been defined, an application can be replaced and 
   emulated. RACE does not perform message translation itself, but it 
   does enable messaging applications and adapters to be used as a 
   commodity. The RACE approach gives "plug-and-play", which cannot be 
   achieved using a standard application program interface (API) alone. 
 
   RACE offers a fundamental standard, in conjunction with XML, for e-
   commerce and application integration. It works well over corporate 
   networks and the Internet, and gives the kind of flexibility and 
   throughput, which todayÆs SMTP mail and HTTP systems do not provide. 
    
    
1.2 Motivation 
 
   There is no current standard for inter-application communication. 
 

  
C. Kilkenny                Expires January 9, 2001            [Page 4] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

   Messaging has grown enormously and messaging middleware is now 
   accepted as a key technology. Message queuing middleware (MQM), 
   which provides asynchronous "put" and "get" services, has become 
   commonplace. Message brokering (MB) systems are numerous and 
   beginning to take over the roles of routing, workflow management and 
   data mapping from legacy applications. The role of middleware has 
   changed, paving the way for completely new approaches. The growth in 
   messaging is driven by the need for automation, globalisation, e-
   commerce and real-time settlement. 
 
   There is an obvious need to standardise inter-application 
   communication. The number of applications, which need to communicate 
   with one another, have increased dramatically and integration work 
   is spiralling out of control. Deployment of MQM and MB systems 
   creates just as many integration issues as the systems were supposed 
   to resolve. It is clear that just one messaging middleware solution 
   is not enough. Customers are frustrated and often feel deceived by 
   the cost and delay of integration. They want interoperable 
   applications, which can work together immediately and which can be 
   used as a commodity. 
 
   MQM and MB systems cannot offer a standard for inter-application 
   communication, because they are proprietary and require an expensive 
   store and forward infrastructure. Message queuing systems are needed 
   for queuing, but they are not a standard for connectivity. Off-the-
   shelf applications cannot support every system and users cannot be 
   expected to adopt a single system. Organisations merge and need to 
   communicate with one another. MQM and MB systems need to communicate 
   with one another. Often, it is unrealistic to use a third system, 
   when direct application communication is sufficient. 
 
   Standards bodies have been formed in order to address these issues, 
   but it is too early to expect any conclusive recommendations. The 
   general approach being taken is to standardise the application 
   programming interface (API), but whilst this makes sense, it does 
   not provide a "plug-and-play" solution. "Put" and "get" APIs do not 
   necessarily lend themselves to "send" and "receive". Run-time 
   libraries need to be installed and tested before applications can 
   communicate differently. In some cases, applications may need to be 
   compiled and linked again. A standard API will also vary with 
   different programming languages and computing platforms. 
    
   What is needed is a common protocol (RACE), in addition to a common 
   API. A protocol, like an API, is a specification, which can be open 
   and standard. It does not involve the cost of store and forward for 
   implementation. A standard protocol allows applications to 
   communicate with new applications without changing the application 
   itself. A simple protocol allows easy implementation by the masses. 
   A flexible protocol facilitates interoperability with other 
   protocols and messaging adapters. 
    
   Existing protocols were not designed for open messaging and are not 
   appropriate. The Remote Procedure Call (RPC) protocol is intended 
   for calling remote procedures and allows applications to be 
  
C. Kilkenny                Expires January 9, 2001            [Page 5] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

   distributed. RPC is a good application communication protocol, but 
   it lacks the fundamental ability to negotiate. The TELNET Protocol 
   negotiates, but it is designed for a completely different purpose, 
   namely to replace and emulate dedicated terminals. There is no 
   notion of a message in TELNET. Other protocols, which deal with 
   object definition and content, are a layered function and not the 
   plumbing standard. 
    
    
1.3 General Considerations 
    
   The RACE Protocol is normally implemented as a Transmission Control 
   Protocol (TCP) connection, but it can be used on any similar data 
   transport. RACE assumes a reliable bi-directional asynchronous 8-bit 
   ordered byte stream. It does not employ TCP Urgent data. For TCP 
   usage, an assigned port number will be requested in due course. 
    
   RACE is a communication protocol between two applications. In order 
   to form a RACE connection using TCP, one application, known as the 
   Data Terminal Equipment (DTE), initiates a connect to a second 
   application, known as the Data Communications Equipment (DCE), which 
   listens on an assigned port. The DTE (the connecting application) 
   and DCE (the listening application) can reside on any computer 
   system or the same computer system. The DTE and DCE can be the same 
   application. The computer systems where the DTE and DCE applications 
   reside are known as the DTE host and DCE host respectively. 
    
   In practise, a DCE host may service multiple DCE applications on a 
   single TCP port. In this case, a daemon or server process is needed 
   on the DCE host. The RACE protocol lends itself to this kind of 
   concurrency between different DCE applications, but the 
   implementation of the daemon and the definition of the interface 
   between daemon and application are outside the scope of this 
   document. By convention, the DCE daemon is called RACED. 
    
   Once connected over TCP, the DTE and DCE applications assume a basic 
   protocol. The basic protocol allows for connection, negotiation of 
   protocol options, rudimentary message transfer, and disconnection. 
   The basic protocol is simple, but it does compromise communication. 
    
   In order to deviate from the basic protocol, the DTE can initiate 
   the negotiation of one or more protocol options. This allows the 
   actual protocol to be agreed at run-time, giving "plug-and-play". 
   Each protocol option is documented and assigned a unique number. 
   Some protocol options use parameters in order to negotiate different 
   values and usage. 
    
   The basic protocol uses one-sided negotiation for simplicity and in 
   order to avoid infinite negotiation loops. This does not prevent 
   two-sided negotiation being agreed. The basic protocol allows 
   parameter data to be included in the initial negotiation sequence, 
   so that only one round trip is normally required. The basic protocol 
   limits negotiation to the beginning of the session, so that message 
   transfer is constant. This does not prevent subsequent negotiation 
  
C. Kilkenny                Expires January 9, 2001            [Page 6] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

   being agreed. If either DTE or DCE does not agree with the 
   negotiation result, it can disconnect before entering into message 
   transfer. 
    
   RACE uses varying length packets to transfer data and control 
   information. These packets are designed for efficient transmission 
   and can be assembled and interpreted in a straightforward manner. 
   RACE facilitates assigning names for layered protocols and 
   applications. Names can have 1 to 64 characters, which gives much 
   wider scope for naming than TCP port numbers do. 












































  
C. Kilkenny                Expires January 9, 2001            [Page 7] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

2. Basic Protocol 
    
2.1 Dialogue 
    
   By default, RACE is a unidirectional message transfer protocol. On 
   one side is DTE and on the other side is DCE. Messages are prepared 
   by DTE and transferred to DCE for interpretation. 
    
   The protocol involves five distinct phases: 
    
   Phase 1: Connection 
       
      After TCP connection, the DTE sends CONNECT in order to specify a 
      target DCE service and application. If the DCE can accept the 
      connection, it replies READY. Otherwise, the DCE replies 
      DISCONNECT, which indicates the reason for exiting (APPNOTAVA, 
      APPBUSY, etc). 
       
      If the DCE has responded DISCONNECT, the DCE and DTE should close 
      the link, as a corresponding DISCONNECT is not expected from DTE. 
       
   Phase 2: Option Negotiation 
       
      Once the DCE has accepted the connection, protocol options are 
      negotiated in the DTEÆs order of preference. If the DTE does not 
      have any protocol options to negotiate, it can skip the 
      negotiation phase altogether. 
       
      For each supported option, the DTE can either offer it, request 
      it, or both offer and request it, depending upon the option 
      specification. In order to offer an option, the DTE sends WILL. 
      If the DCE would like the DTE to perform the specified option, it 
      responds DO. Otherwise, it responds DONT. In order to request an 
      option, the DTE sends DO. If the DCE can perform the specified 
      option, it responds WILL. Otherwise, it returns WONT. 
       
      The DCE need only respond DONT/WONT if it does not support a 
      protocol option. 
       
      Option parameters, if required, are included in DO/WILL according 
      to the option specification. Once an option has been agreed, it 
      can be negotiated further using HERE-IS according to the option 
      specification. 
       
      The DTE can send multiple DO/WILL/HERE-IS packets without waiting 
      for a corresponding DO/DONT/WILL/WONT/HERE-IS packet from the 
      DCE. However, the DTE must be careful of the order of negotiation 
      as some options depend upon other options. The DTE should only 
      send one DO/WILL packet for each supported option unless the 
      option specifies otherwise. 
       
      Negotiation is complete once the DTE has received a 
      DO/WILL/DONT/WONT reply for each DO/WILL request and any 
      additional negotiation is complete. 
  
C. Kilkenny                Expires January 9, 2001            [Page 8] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

       
   Phase 3: Ready, Ready 
       
      In order to end negotiation and enter into message transfer, the 
      DTE sends READY. If the DCE is satisfied with negotiation, it 
      replies READY and the two enter into message transfer. Otherwise, 
      if the DCE does not wish to proceed after receipt of READY, it 
      replies DISCONNECT instead of READY, which indicates the reason 
      for exiting (INSNEGOPT). 
       
      If the DTE does not wish to proceed after negotiation, it sends 
      DISCONNECT instead of READY, which indicates the reason for 
      exiting (INSNEGOPT). 
       
      If DCE or DTE has sent DISCONNECT, the DTE and DCE should close 
      the link, as a corresponding DISCONNECT is not expected. 
       
   Phase 4: Message Transfer 
       
      For each message to be transferred, the DTE assembles and sends a 
      MESSAGE and waits for a corresponding MESSAGE-REPLY before going 
      onto the next message. If the DCE accepts the message, the DCE 
      responds with a positive MESSAGE-REPLY (SUCCESS). Otherwise, the 
      DCE responds with a negative MESSAGE-REPLY and details the reason 
      (INVMSG, ...). The DCE continues servicing incoming messages even 
      if it rejects some or all of them. The DCE should only use 
      MESSAGE-REPLY to reject a message and not DISCONNECT. 
       
      In the case of an authentication failure, resource failure, etc., 
      the DCE may need to abort the connection by sending DISCONNECT. 
       
   Phase 5: Shutdown 
       
      At some point, either party will want to close the connection. 
      For unidirectional connections, the message sender will typically 
      initiate this after transferring its messages, unless a "keep 
      alive" timer is in effect. 
       
      In order to accomplish a graceful shutdown, either DTE or DCE can 
      send DISCONNECT with code SUCCESS. Upon receipt of DISCONNECT 
      with code SUCCESS, the other party should complete its processing 
      and return a corresponding DISCONNECT with code SUCCESS. On 
      receipt of or after sending the second DISCONNECT, the link can 
      be closed. 
       
      If the DCE has requested shutdown and no DISCONNECT has been 
      received, it should continue to accept messages and return 
      replies for a reasonable amount of time. If the DTE receives 
      DISCONNECT while waiting for a message reply, it should continue 
      to wait for the message reply and then send a corresponding 
      DISCONNECT. The DTE should only request shutdown when no message 
      reply is outstanding and it should not then go onto sending 
      additional messages. 
       
  
C. Kilkenny                Expires January 9, 2001            [Page 9] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

      It should be noted that the shutdown mechanism introduces a 
      packet, which can be initiated by DCE in the basic protocol. In 
      addition, the DTE or DCE can abort the connection using 
      DISCONNECT at any time. Therefore, the DTE needs to be ready to 
      handle this event. 
       
   For example, a basic session: 
    
      DTE                                                         DCE 
      ---                                                         --- 
    
      CONNECT("race$generic","TESTAPPL",) --> 
                                                          <-- READY() 
      READY() --> 
                                                          <-- READY() 
      MESSAGE("Hello World!") --> 
                                           <-- MESSAGE-REPLY(SUCCESS) 
      DISCONNECT(SUCCESS) --> 
                                              <-- DISCONNECT(SUCCESS) 
    
   For example, a typical bi-directional session: 
    
      DTE                                                         DCE 
      ---                                                         --- 
    
      CONNECT("race$generic","TESTAPPL",) --> 
                                                          <-- READY() 
      DO(MODE,BIDIRECTIONAL) --> 
                                         <-- WILL(MODE,BIDIRECTIONAL) 
      WILL(WINDOW,3) --> 
      DO(WINDOW,3) --> 
                                                     <-- DONT(WINDOW) 
                                                     <-- WONT(WINDOW) 
      READY() --> 
                                                          <-- READY() 
      MESSAGE("1ST CLIENT MSG") --> 
                                           <-- MESSAGE-REPLY(SUCCESS) 
      MESSAGE("2ND CLIENT MSG") -->       <-- MESSAGE("1ST HOST MSG") 
                                           <-- MESSAGE-REPLY(SUCCESS) 
      MESSAGE-REPLY(SUCCESS) --> 
      DISCONNECT(SUCCESS) -->             <-- MESSAGE("2ND HOST MSG") 
      MESSAGE-REPLY(SUCCESS) --> 
                                              <-- DISCONNECT(SUCCESS) 
    
   For example, the DTE rejects option negotiation: 
    
      DTE                                                         DCE 
      ---                                                         --- 
    
      CONNECT("race$generic","TESTAPPL",) --> 
                                                          <-- READY() 
      DO(MODE,OUTPUT) --> 
                                                       <-- WONT(MODE) 
      DISCONNECT(INSNEGOPT) --> 
  
C. Kilkenny                Expires January 9, 2001            [Page 10] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

    
   For example, the DCE rejects option negotiation: 
    
      DTE                                                         DCE 
      ---                                                         --- 
    
      CONNECT("race$generic","TESTAPPL",) 
                                                          <-- READY() 
      READY() --> 
                                            <-- DISCONNECT(INSNEGOPT) 
    
   In these examples, the MODE and WINDOW protocol options and bi-
   directional message transfer are not part of the basic protocol. The 
   basic protocol only includes the ability to negotiate and not the 
   options themselves or their associated protocol. 
    
   In the event of an unexpected error, like timeout or a protocol 
   error, the program should, if possible, send DISCONNECT in order to 
   detail the error and then close the link. A corresponding DISCONNECT 
   is only expected or sent during the shutdown phase, when DISCONNECT 
   contains SUCCESS. A corresponding DISCONNECT is not expected unless 
   message transfer has been agreed, even if DISCONNECT contains 
   SUCCESS. 
    
    
2.2 Packet Usage 
    
   All RACE packets begin with a packet code and end in the End-Of-
   Packet (EOP) sequence. A packet code is a single byte, which 
   indicates the start of the packet and the packet type. The EOP 
   sequence consists of the Interpret-As-Command (IAC) byte, value 255, 
   followed by the EOP byte, value 254. For example, 
    
      <200><255><064>Hello World.<255><254> 
    
      Here, <200> indicates the start of the packet and identifies it 
      as a MESSAGE packet. "<255><064>Hello World." is the contents of 
      the packet. <255><254> indicates the end of the packet. 
       
   Most packets comprise of a varying number of variable length fields. 
   Each field is prefixed by a two-byte sequence and terminated by 
   either another field prefix or the EOP sequence. A field prefix 
   consists of the IAC byte followed by a field identifier, whose byte 
   value is predefined and in the range 0 to 253 inclusive. An optional 
   field may be omitted. A field may have zero length, in which case 
   only the field prefix is specified. For example, 
    
      <192><255><031>race$generic<255><032>TESTAPPL<255><254> 
    
      Here, <192> indicates the start of the packet and identifies it 
      as a CONNECT packet. <255><031> indicates the start of field 31, 
      which contains the target service identifier "race$generic". 
      <255><032> indicates the end of field 31 and the start of field 

  
C. Kilkenny                Expires January 9, 2001            [Page 11] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

      32, which contains the target application name "TESTAPPL". 
      <255><254> indicates the end of packet and the end of field 32. 
       
   Option negotiation packets, DO/WILL/DONT/WONT/HERE-IS, do not follow 
   this field prefix notation. Instead, the option code and option 
   parameters are implicitly identified by position. The option code is 
   the second byte in the packet and the option parameters, when 
   included, immediately follow (normally at the third byte) and are 
   terminated by the EOP sequence. For example, 
    
      <193><041><255><254> 
    
      Here, <193> identifies a DO packet. The option code <041> is the 
      second byte in the packet. If present, the option parameters 
      follow after the option code, but in this example there are no 
      parameters. 
       
   Within a packet, data is eight bit binary data. If byte 255 is used, 
   it must be doubled in order to prevent misinterpretation. This is 
   true for both option negotiation packets and packets that use field 
   prefix notation. Doubling data byte 255 will realign subsequent data 
   and increase the packet length (during transmission, before 
   interpretation). For example, 
    
      <200><255><064>Data byte "<255><255>" must be doubled.<255><254> 
    
   Fields can be embedded within a field or within option negotiation 
   parameters. For this to work, the IAC byte of each sub-field prefix 
   has to be doubled so that a first level parser can treat it as 
   binary data. For each layer of embodiment, the IAC bytes of each 
   sub-field prefix must be doubled. Consider, 
    
      <193><116> 
         <255><255><031> 
            <255><255><255><255><020>abcd 
            <255><255><255><255><021>efgh 
         <255><255><032>ijkl<255><254> 
    
      Here, <193> identifies a DO packet. The option code is the second 
      byte (116) and the option parameters start at the third byte 
      until the EOP sequence. <255><255><031> identifies the first 
      parameter sub-field and <255><255><032> identifies the second 
      parameter sub-field. The first parameter sub-field, field 31, 
      contains two more sub-fields, identified by 
      <255><255><255><255><020> and <255><255><255><255><021>. The two 
      sub-fields of field 31, fields 20 and 21, contain "abcd" and 
      "efgh" respectively. The second parameter sub-field, field 32, 
      contains "ijkl". Notice how the first level uses two IAC bytes 
      and the second level uses four IAC bytes. This example does not 
      follow a valid option specification and is only included for 
      illustration. 
       
   RACE does not dictate a maximum packet length. All packets, except 
   the MESSAGE and MESSAGE-REPLY packets (where the length is 
  
C. Kilkenny                Expires January 9, 2001            [Page 12] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

   application specific), have a defined maximum length. An option 
   specification may be drawn up in the future in order for 
   applications to agree a maximum message length. 
    
    
2.3 Service and Application Identifiers 
    
   The CONNECT packet contains the target service identifier and the 
   target application identifier. The service identifier identifies the 
   type of service, while the application identifier identifies the 
   application name or service instance. 
    
   Service identifiers and application names prefixed by "race$" are 
   reserved for the RACE protocol. Service identifiers and application 
   names prefixed by a "$" are reserved for assigned names. Currently, 
   only one RACE service is defined: 
    
      race$generic - Generic messaging application 
    
   Other services may be added in the future. Future services may 
   assume a different basic protocol. 
    
    
2.4 Reply and Disconnect Codes 
    
   Code values are used in MESSAGE-REPLY and DISCONNECT in order to 
   return status information. A code is an unsigned short integer (in 
   network byte order) as described later in this document. 
    
   Applications must be ready to handle codes, which have not yet been 
   defined, in order to support future versions of the protocol. The 
   general code, ERROR, can be used to describe an unrecognised code. 
    
   When the code is SUCCESS, it can be omitted from MESSAGE-REPLY or 
   DISCONNECT in order to increase performance. If omitted, SUCCESS is 
   assumed. For example, <201><255><254> is equivalent to 
   <201><255><021><000><000><000><000><255><254>. 

















  
C. Kilkenny                Expires January 9, 2001            [Page 13] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

3. Protocol Options 
    
   This chapter contains the RACE protocol option specifications. The 
   following protocol options are defined: 
    
      NAME               CODE        DESCRIPTION 
    
      MODE                33         MODE OF MESSAGE TRANSFER 
      NOREPLY             34         NO MESSAGE REPLIES 
      WINDOW              37         MESSAGE WINDOWING 
      SEQNO               38         SEQUENCE NUMBERING 
      PDE                 53         POSSIBLE DUPLICATE EMISSION FLAG 
      RREF                54         RECEIVER REFERENCE 
      LGIAUTH             65         LOGIN AUTHENTICATION 
      MSGAUTH             66         MESSAGE AUTHENTICATION 
      LGRP                72         LOGICAL GROUPING 
      MSGLEN              78         MESSAGE LENGTH 
      BATCH               41         BATCH FILE TRANSFER 
      NOM                 42         NUMBER OF MESSAGES 
      BIGFOOT             82         BIG CODE NUMBERING 
    
   Protocol options may be defined in the near future for: 
   - Encryption 
   - Data compression 
   - Checksum calculation 
   - Polling of messages and files (client/server, get/put) 
   - Block transfer of messages and files 
   - Multiplexing 
    
    
3.1 MODE [Mode of Message Transfer] 
    
   Identification 
       
      Name: MODE, Code = 33 
      Dependencies: n/a 
    
   Overview 
       
      The MODE protocol option enables the transfer of messages from 
      DCE to DTE or bi-directional message transfer. By default, the 
      basic protocol only supports unidirectional message transfer from 
      DTE to DCE. 
       
      This option uses the following terminology in order to describe 
      the direction of message transfer: 
       
       - INPUT         :  One way from DTE to DCE (the default) 
       - OUTPUT        :  One way from DCE to DTE 
       - BIDIRECTIONAL :  Two way (either direction independently) 
       
      OUTPUT (from DCE to DTE) and BIDIRECTIONAL message transfer are 
      similar to INPUT (from DTE to DCE) message transfer. Once message 
      transfer has been agreed, either party can send messages 
  
C. Kilkenny                Expires January 9, 2001            [Page 14] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

      depending upon the agreed mode. For OUTPUT message transfer, the 
      DCE and DTE switch roles in sending and receiving messages. For 
      BIDIRECTIONAL message transfer, each direction works 
      independently and both DCE and DTE can send and receive. The 
      rules of the basic protocol need to be followed in order to 
      achieve graceful shutdown: the sender behaves like the DTE in the 
      basic protocol and the receiver like the DCE in the basic 
      protocol. 
       
      If a message is received in the wrong direction, the receiving 
      application should disconnect with code PRTCOLERR. This option 
      will affect other protocol options, which are dependent upon the 
      direction of message transfer. 
    
   Motivation 
       
      Inter-application communication often requires OUTPUT and 
      BIDIRECTIONAL message transfer, in addition to INPUT message 
      transfer. The MODE protocol option extends the basic protocol in 
      order to support this functionality. 
    
   Negotiation 
       
      DTE and DCE may support one or more modes (INPUT, OUTPUT or 
      BIDIRECTIONAL). The resultant mode is obtained by negotiating the 
      supported modes in DTEÆs order of preference. Initially, INPUT is 
      assumed. Then, the two negotiate and assume the final mode 
      returned by DCE. 
       
      If the DTE only supports INPUT message transfer, INPUT is assumed 
      and negotiation does not take place. 
       
      If the DTE would like to use BIDIRECTIONAL message transfer, it 
      sends "DO MODE BIDIRECTIONAL": 
       
         <193><033><003><255><254> --> 
       
      If the DCE supports BIDIRECTIONAL message transfer, it responds 
      "WILL MODE BIDIRECTIONAL" and BIDIRECTIONAL message transfer 
      becomes agreed: 
       
         <-- <195><033><003><255><254> 
       
      Otherwise, if the DCE does not support BIDIRECTIONAL message 
      transfer, it responds "WONT MODE" and INPUT message transfer 
      remains agreed: 
       
         <-- <196><033><255><254> 
       
      If the DTE or DCE does not support BIDIRECTIONAL message transfer 
      and the DTE would like to use OUTPUT message transfer, the DTE 
      sends "DO MODE OUTPUT": 
       
         <193><033><002><255><254> --> 
  
C. Kilkenny                Expires January 9, 2001            [Page 15] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

       
      If the DCE supports OUTPUT message transfer, it responds "WILL 
      MODE OUTPUT" and OUTPUT message transfer becomes agreed: 
       
         <-- <195><033><002><255><254> 
       
      Otherwise, if the DCE does not support OUTPUT message transfer, 
      it responds "WONT MODE" and INPUT message transfer remains 
      agreed: 
       
         <-- <196><033><255><254> 
       
      If the application does not support the resultant mode, it should 
      disconnect using code INSNEGOPT. 
    
   Parameters 
       
      {mode} 
      Mode is an unsigned byte, which indicates the direction of 
      message transfer. Possible values are 3 for BIDIRECTIONAL or 2 
      for OUTPUT. Any other value is invalid. 
    
   Examples 
       
      DTE supports BIDIRECTIONAL, OUTPUT and INPUT; DCE supports 
      OUTPUT; they agree OUTPUT. 
       
         <193><033><003><255><254> --> 
         <-- <196><033><255><254> 
         <193><033><002><255><254> --> 
         <-- <195><033><002><255><254> 
       
      DTE supports OUTPUT; DCE does not understand the MODE option and 
      only supports INPUT; they agree INPUT. The DTE subsequently 
      disconnects. 
       
         <193><033><002><255><254> --> 
         <-- <196><033><255><254> 
       
      DTE supports BIDIRECTIONAL; DCE supports INPUT; they agree INPUT. 
      The DTE subsequently disconnects. 
       
         <193><033><003><255><254> --> 
         <-- <196><033><255><254> 
       
      DTE supports INPUT; DCE supports BIDIRECTIONAL; they agree INPUT. 
      The DCE subsequently disconnects. 
       
         Negotiation does not take place. 
       
      Two negotiations are rarely needed, since the DTE normally 
      supports just one mode of message transfer. 
    
    
  
C. Kilkenny                Expires January 9, 2001            [Page 16] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

3.2 NOREPLY 
    
   Identification 
       
      Name: NOREPLY, Code = 34 
      Dependencies: MODE 
    
   Overview 
       
      The NOREPLY protocol option turns off message replies. In the 
      basic protocol, a MESSAGE-REPLY is expected for every MESSAGE 
      sent. When this option is in effect, message replies are not 
      used. 
       
      This option can be used with any mode (INPUT, OUTPUT or 
      BIDIRECTIONAL). With BIDIRECTIONAL message transfer, applications 
      can provide synchronisation at the application level. With INPUT 
      or OUTPUT message transfer, applications fire and forget. If 
      delivery confirmation is not required, message transfer without 
      RACE or application level replies may prove efficient. 
       
      It should be noted that a DISCONNECT packet may be waiting in a 
      packet stream. 
       
      If a message reply is received and replies have been disabled, 
      the receiving application should disconnect with code PRTCOLERR. 
      This option will affect other protocol options, which are 
      dependent upon the existence of message replies. The MODE option 
      should be negotiated before the NOREPLY option. 
    
   Motivation 
       
      Many application level protocols use application specific replies 
      and some applications fire and forget messages. In conjunction 
      with the MODE option, this option extends RACE to a wide variety 
      of applications and application level protocols. When given the 
      choice though, it is preferable to map an application level 
      protocol with RACE message replies rather than layer an 
      application level protocol without RACE message replies. 
    
   Negotiation 
       
      NOREPLY is negotiated separately for input and output message 
      transfer. 
       
      If the DTE would like to disable message replies (for the input 
      stream), it sends "DO NOREPLY": 
       
         <193><034><255><254> --> 
       
      If the DCE can disable message replies (for the input stream), it 
      responds "WILL NOREPLY": 
       
         <-- <195><034><255><254> 
  
C. Kilkenny                Expires January 9, 2001            [Page 17] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

       
      Otherwise, if the DCE cannot disable message replies (for the 
      input stream), it responds "WONT NOREPLY": 
       
         <-- <196><034><255><254> 
       
      If the DTE can disable message replies (for the output stream), 
      it sends "WILL NOREPLY": 
       
         <195><034><255><254> --> 
       
      If the DCE would like to disable message replies (for the output 
      stream), it responds "DO NOREPLY": 
       
         <-- <193><034><255><254> 
       
      Otherwise, if the DCE does not want to disable message replies 
      (for the output stream), it responds "DONT NOREPLY": 
       
         <-- <194><034><255><254> 
    
   Parameters 
       
      None. 
    
   Examples 
       
      Mode is BIDIRECTIONAL; DTE and DCE agree to turn off message 
      replies: 
       
         <193><034><255><254> --> 
         <195><034><255><254> --> 
         <-- <195><034><255><254> 
         <-- <193><034><255><254> 
       
      Mode is BIDIRECTIONAL; DTE wants to turn off message replies, but 
      DCE needs them enabled. Message replies are disabled for the 
      input stream and enabled for the output stream: 
       
         <193><034><255><254> --> 
         <195><034><255><254> --> 
         <-- <195><034><255><254> 
         <-- <194><034><255><254> 
    
    
3.3 WINDOW 
    
   Identification 
       
      Name: WINDOW, Code = 37 
      Dependencies: MODE, NOREPLY 
    
   Overview 
       
  
C. Kilkenny                Expires January 9, 2001            [Page 18] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

      The WINDOW protocol option permits more than one message to be 
      sent without waiting for a message reply. The term window refers 
      to the number of outstanding messages for which a message reply 
      has not been received. 
       
      A small window of about three greatly increases performance. A 
      large window does not give much improvement. A window of one 
      represents the default behaviour of the basic protocol. 
       
      If replies have been disabled, this option has no effect. 
       
      If the link fails, the other application may not have received 
      more than one message in the window. 
       
   Motivation 
       
      By default, a message reply has to be received before the next 
      message can be sent. This wastes time. Data transfer is much 
      faster if multiple messages can be prepared and sent before a 
      reply is received. This allows the receiver to process messages 
      whilst the sender is preparing and sending messages, and messages 
      or message replies are in transit. 
    
   Negotiation 
       
      WINDOW is negotiated separately for input and output message 
      transfer. 
       
      If the DTE would like to use a window size greater than one (for 
      the input stream), it sends "DO WINDOW" and specifies the desired 
      window size: 
       
         <193><037>{window-size}<255><254> --> 
       
      If the DCE supports windowing (for the input stream), it responds 
      "WILL WINDOW" with the actual window size. The actual window size 
      should be lower than or equal to the requested window size: 
       
         <-- <195><037>{window-size}<255><254> 
       
      Otherwise, if the DCE does not support a window greater than one 
      (for the input stream), it responds "WONT WINDOW": 
       
         <-- <196><037><255><254> 
       
      If the DTE supports windowing (for the output stream), it sends 
      "WILL WINDOW" with its maximum window size: 
       
         <195><037>{window-size}<255><254> --> 
       
      If the DCE would like to use a window size greater than one (for 
      the output stream), it responds "DO WINDOW" with the actual 
      window size. The actual window size must be lower than or equal 
      to the offered window size. 
  
C. Kilkenny                Expires January 9, 2001            [Page 19] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

       
         <-- <193><037>{window-size}<255><254> 
       
      Otherwise, if the DCE does not want to use windowing (for the 
      output stream), it responds "DONT WINDOW": 
       
         <-- <194><037><255><254> 
       
      If either party does not support windowing, a window size of one 
      is assumed (the default). 
    
   Parameters 
       
      {window-size} 
      The window size is an unsigned byte containing any value in the 
      range 1 to 127 inclusive. Values outside the range are not 
      allowed. 
    
   Examples 
       
      Mode is INPUT; DTE wants an input window of 10; DCE supports an 
      input window of 3. They agree to use an input window of 3. 
       
         <193><037><010><255><254> --> 
         <-- <195><037><003><255><254> 
       
      Mode is OUTPUT; DTE supports an output window of 2; DCE does not 
      understand this option and only supports an output window of 1. 
      They agree to use an output window of 1. 
       
         <195><037><002><255><254> --> 
         <-- <194><037><255><254> 
       
      Mode is BIDIRECTIONAL; DTE supports an input window of 3 and an 
      output window of 3; DCE supports an input window of 2 and an 
      output window of 1. They agree to use an input window of 2 and an 
      output window of 1. 
       
         <193><037><003><255><254> --> 
         <195><037><003><255><254> --> 
         <-- <195><037><002><255><254> 
         <-- <193><037><001><255><254> (DONT can also be used here) 
    
    
3.4 SEQNO [Sequence Number] 
    
   Identification 
       
      Name: SEQNO, Code = 38 
      Dependencies: MODE, NOREPLY 
    
   Overview 
       

  
C. Kilkenny                Expires January 9, 2001            [Page 20] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

      The Sequence Number (SEQNO) protocol option allows messages and 
      message replies to be numbered in the order in which they are 
      transmitted. If agreed, the sending party must include an 
      incremental sequence number with every message sent and the 
      receiving party must include the same sequence number in each 
      corresponding message reply. It is the responsibility of the 
      message receiver to check the sequence numbering of messages and 
      it is the responsibility of the message sender to check the 
      sequence numbering of message replies. 
       
      F10 is included in the MESSAGE and MESSAGE-REPLY packets in order 
      to detail the sequence number. F10 contains an unsigned short 
      integer in network byte order. Sequence numbers start at one at 
      the beginning of a new connection, increment by one, and wrap 
      back to one upon reaching 65,536 (i.e. 65,536, 131,071, ... 
      become 1). Zero is not a valid sequence number. Data byte 255 
      must be doubled. Each party maintains a separate sequence number 
      counter for each direction of message transfer. For example, 
       
         <200><255><010><000><021><255><064>MY MESSAGE<255><254> --> 
         <-- <201><255><010><000><021><255><254> 
          
         Here, the message and the positive message reply have sequence 
         number twenty-one. 
       
      Sequence numbers are only used to check the sequencing of 
      messages and message replies during a connection. There is no 
      point in storing the sequence number with the message after 
      transmission or upon receipt. 
       
      If an invalid sequence number is encountered for a message or a 
      message reply, the application, which detected the error, should 
      disconnect with code INVSEQNO. 
    
   Motivation 
       
      Sequence numbering is not generally necessary, because RACE 
      assumes a reliable transport. Message replies are returned in the 
      order in which messages are received. However, it is often asked 
      or expected for a RACE connection to support sequence numbering. 
      So, this option allows for it. By default, sequence numbering is 
      not used in order to keep transmissions efficient. 
    
   Negotiation 
       
      If the DTE can offer sequence numbering (for all directions of 
      message transfer), it sends "WILL SEQNO": 
       
         <195><038><255><254> --> 
       
      If the DCE wants sequence numbering (for all directions of 
      message transfer), it replies "DO SEQNO": 
       
         <-- <193><038><255><254> 
  
C. Kilkenny                Expires January 9, 2001            [Page 21] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

       
      Otherwise, the DCE replies "DONT SEQNO": 
       
         <-- <194><038><255><254> 
       
      If the DTE wants sequence numbering (for all directions of 
      message transfer), it sends "DO SEQNO" instead of "WILL SEQNO": 
       
         <193><038><255><254> --> 
       
      If the DCE can offer sequence numbering (for all directions of 
      message transfer), it replies "WILL SEQNO": 
       
         <-- <195><038><255><254> 
       
      Otherwise, the DCE replies "WONT SEQNO": 
       
         <-- <196><038><255><254> 
       
      In order to keep transmissions efficient, applications need only 
      offer SEQNO, but not request it. 
    
   Parameters 
       
      None. 
    
   Examples 
       
      Both DTE and DCE support sequence numbering, but neither mandate 
      sequence numbering. Sequence numbering is not used. 
       
         <195><038><255><254> --> 
         <-- <194><038><255><254> 
       
      DTE mandates sequence numbering, but DCE does not support it. 
      Sequence numbering is not used. 
       
         <193><038><255><254> --> 
         <-- <196><038><255><254> 
       
      DTE supports sequence numbering and DCE mandates it. Sequence 
      numbering is used. 
       
         <195><038><255><254> --> 
         <-- <193><038><255><254> 
    
    
3.5 PDE [Possible Duplicate Emission] 
    
   Identification 
       
      Name: PDE, Code = 53 
      Dependencies: MODE 
    
  
C. Kilkenny                Expires January 9, 2001            [Page 22] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

   Overview 
       
      The Possible Duplicate Emission (PDE) protocol option allows use 
      of a PDE flag. Once enabled, the sender must include the PDE flag 
      with messages, which may have already been sent. Likewise, the 
      receiver must treat messages as possible duplicates if the PDE 
      flag is present. 
       
      F65 is included in the MESSAGE packet in order to indicate the 
      PDE flag. F65 is an unsigned byte containing a binary one. For 
      example, 
       
         <200><255><064>Testing 123<255><065><001><255><254> 
          
         The presence of F65 indicates that this MESSAGE is a possible 
         duplicate emission. 
       
      An application should only agree to use the PDE flag if it can 
      properly detect or process the PDE flag. If F65 is encountered 
      when this option is not in effect, the receiving application 
      should disconnect with code INVPKTFID. 
    
   Motivation 
       
      This option facilitates the detection of duplicate transmissions. 
      Some application level protocols support the use of a PDE flag. 
      This option allows RACE to be better mapped to these protocols. 
    
   Negotiation 
       
      PDE is negotiated separately for input and output message 
      transfer. 
       
      If the DTE can provide the PDE flag (for the input stream), it 
      sends "WILL PDE": 
       
         <195><053><255><254> --> 
       
      If the PDE information is useful to the DCE (for the input 
      stream), it responds "DO PDE": 
       
         <-- <193><053><255><254> 
       
      Otherwise, if the DCE does not want to receive PDE information 
      (for the input stream), it responds "DONT PDE": 
       
         <-- <194><053><255><254> 
       
      If the PDE information is useful to the DTE (for the output 
      stream), it sends "DO PDE": 
       
         <193><053><255><254> --> 
       

  
C. Kilkenny                Expires January 9, 2001            [Page 23] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

      If the DCE can provide the PDE flag (for the output stream), it 
      responds "WILL PDE": 
       
         <-- <195><053><255><254> 
       
      Otherwise, if the DCE cannot provide the PDE flag (for the output 
      stream), it responds "WONT PDE": 
       
         <-- <196><053><255><254> 
    
   Parameters 
       
      None. 
    
   Examples 
       
      Mode is BIDIRECTIONAL; Both DTE and DCE support PDE. 
       
         <195><053><255><254> --> 
         <193><053><255><254> --> 
         <-- <193><053><255><254> 
         <-- <195><053><255><254> 
       
      Mode is INPUT; DTE supports PDE, but DCE does not. 
       
         <195><053><255><254> --> 
         <-- <194><053><255><254> 
    
    
3.6 RREF [Receiver Reference] 
    
   Identification 
       
      Name: RREF, Code = 54 
      Dependencies: MODE, NOREPLY 
    
   Overview 
       
      The Receiver Reference (RREF) protocol option allows the message 
      sender to get a unique identifier from the receiver for each 
      message sent. This assists in investigation and reconciliation. 
      Once agreed, the message receiver returns a unique message 
      reference for every message using the MESSAGE-REPLY packet. 
       
      F24 is included in the MESSAGE-REPLY packet in order to return 
      the unique message reference. F24 may contain 1 to 64 ASCII 
      characters, byte value 32 through 126 inclusive. As a matter of 
      good practise, it is recommended to keep the reference to 
      alphanumeric characters without leading or training spaces. For 
      example, 
       
         <201><255><024>DEF200105106E059<255><254> 
          

  
C. Kilkenny                Expires January 9, 2001            [Page 24] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

         F24 in this MESSAGE-REPLY packet contains "DEF200105106E059", 
         which uniquely identifies the received message. 
       
      If a message is rejected, a unique message reference is still 
      expected. If the receiving application does not allocate 
      references for rejected messages, a pseudo reference should be 
      used. For example, use the date and a counter that spans the day 
      and is specific to the connection. References should be unique 
      even if multiple application instances are used or different 
      connections share the same application. 
       
      If replies have been disabled, this option has no effect. 
    
   Motivation 
       
      Many applications store transactions using a primary key or a 
      transaction reference number. Sometimes, this information is 
      needed by the sending application for subsequent investigation 
      and reconciliation. A unique message reference is evidence that 
      message transfer has taken place. 
    
   Negotiation 
       
      RREF is negotiated separately for input and output message 
      transfer. 
       
      If the DTE would like to receive RREF (for the input stream), it 
      sends "DO RREF": 
       
         <193><054><255><254> --> 
       
      If the DCE can supply RREF (for the input stream), it responds 
      "WILL RREF": 
       
         <-- <195><054><255><254> 
       
      Otherwise, if the DCE cannot supply RREF (for the input stream), 
      it responds "WONT RREF": 
       
         <-- <196><054><255><254> 
       
      If the DTE can supply RREF (for the output stream), it sends 
      "WILL RREF": 
       
         <195><054><255><254> --> 
       
      If the DCE would like to receive RREF (for the output stream), it 
      responds "DO RREF": 
       
         <-- <193><054><255><254> 
       
      Otherwise, if the DCE does not want to receive RREF (for the 
      output stream), it responds "DONT RREF": 
       
  
C. Kilkenny                Expires January 9, 2001            [Page 25] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

         <-- <194><054><255><254> 
    
   Parameters 
       
      None. 
    
   Examples 
       
      Mode is BIDIRECTIONAL; DTE wants RREF, but canÆt offer it; DCE 
      doesnÆt want RREF, but can offer it. 
       
         <193><054><255><254> --> 
         <-- <195><054><255><254> 
       
      Mode is INPUT; DTE wants RREF; DCE doesnÆt support this option 
      and canÆt offer it: 
       
         <193><054><255><254> --> 
         <-- <196><054><255><254> 
       
      Mode is OUTPUT; DTE can offer RREF; DCE doesnÆt want RREF. 
       
         <195><054><255><254> --> 
         <-- <194><054><255><254> 
    
    
3.7 LGIAUTH [Login Authentication] 
    
   Identification 
       
      Name = LGIAUTH, Code = 65 
      Dependencies: n/a 
    
   Overview 
       
      The Login Authentication (LGIAUTH) protocol option allows 
      applications to authenticate each other when the connection is 
      opened. The authentication keys and identification of the 
      authentication algorithm are agreed and distributed by some other 
      means. 
       
      Both applications can be authenticated separately. The requesting 
      application sends a string to the other application for 
      authentication. The other application calculates and returns an 
      authentication code. The requesting application then calculates 
      the authentication code again and compares it with the received 
      authentication code. If the codes match, authentication passes. 
       
      If authentication fails, the application, which expected to 
      receive an authentication code, can either abort the connection 
      immediately or wait until the end of negotiation. In either case, 
      the authenticating application should send DISCONNECT with code 
      LGIFAIL. 
    
  
C. Kilkenny                Expires January 9, 2001            [Page 26] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

   Motivation 
       
      By default, a RACE connection is not secure. This option allows 
      two co-operating applications to authenticate access. 
    
   Negotiation 
       
      If the DTE can supply login authentication, it sends "WILL 
      LGIAUTH": 
       
         <195><065><255><254> --> 
       
      If the DCE would like to receive login authentication, it 
      responds "DO LGIAUTH" with a string for the DTE to authenticate: 
       
         <-- <193><065>{auth-str}<255><254> 
       
      Otherwise, if the DCE does not want to receive login 
      authentication, it responds "DONT LGIAUTH": 
       
         <-- <194><065><255><254> 
       
      If the DCE has agreed to receive login authentication, the DTE 
      then sends "HERE-IS LGIAUTH" with its computed authentication 
      code for the supplied authentication string: 
       
         <197><065>{auth-code}<255><254> --> 
       
      If the DTE would like to receive login authentication, it sends 
      "DO LGIAUTH" with a string for the DCE to authenticate: 
       
         <193><065>{auth-str}<255><254> --> 
       
      If the DCE can supply login authentication, it responds "WILL 
      LGIAUTH" and then sends "HERE-IS LGIAUTH" with its computed 
      authentication code for the supplied authentication string: 
       
         <-- <195><065><255><254> 
         <-- <197><065><{auth-code}<255><254> 
       
      Otherwise, if the DCE cannot supply login information, it 
      responds "WONT LGIAUTH": 
       
         <-- <196><065><255><254> 
    
   Parameters 
       
      {auth-str} 
      Authentication string may contain 1 to 1024 unsigned bytes 
      depending upon the authentication algorithm. Data byte 255 must 
      be doubled. 
       
      {auth-code} 

  
C. Kilkenny                Expires January 9, 2001            [Page 27] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

      Authentication code may contain 1 to 64 unsigned bytes depending 
      upon the authentication algorithm. Data byte 255 must be doubled. 
    
   Examples 
       
      DTE supplies login authentication to DCE: 
       
         <195><065><255><254> --> 
         <-- <193><065>TIMESTAMP NOW IS 2010082810560203<255><254> 
         <197><065>E06720587801C331<255><254> --> 
       
      DTE supplies login authentication to DCE, but DCE does not want 
      it: 
       
         <195><065><255><254> --> 
         <-- <194><065><255><254> 
    
    
3.8 MSGAUTH [Message Authentication] 
    
   Identification 
       
      Name: MSGAUTH, Code = 66 
      Dependencies: MODE 
    
   Overview 
       
      The Message Authentication (MSGAUTH) protocol option allows 
      applications to authenticate messages. The authentication keys 
      and identification of the authentication algorithm are agreed and 
      distributed by some other means. 
       
      Once agreed, the applications calculate a message authentication 
      code (MAC) for every message, based upon the contents of the 
      message, the keys and the algorithm. A separate key or the same 
      key can be used for sending and receiving. The sending 
      application calculates the MAC and adds it to the MESSAGE packet. 
      The receiving application calculates the MAC again and compares 
      it with the MAC in the received MESSAGE packet. If they match, 
      the message passes authentication. Otherwise, the message fails 
      authentication and is not processed. The MSGAUTH protocol option 
      allows co-operating applications to check the authenticity and 
      integrity of messages. It does not guarantee confidentiality. 
       
      F66 is included in the MESSAGE packet in order to add the 
      authentication code. F66 contains 1 to 64 unsigned bytes 
      depending upon the authentication algorithm. For example, 
       
         <200><255><064>Hello World! 
            <255><066><134><161><003><255><255><201><193><255><254> 
          
         This message contains a 48-bit authentication code, hex value 
         "86A103FFC9C1". 
       
  
C. Kilkenny                Expires January 9, 2001            [Page 28] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

      If authentication fails, the message should not be processed. The 
      receiving application should abort the connection by sending 
      DISCONNECT with code AUTFAIL. 
    
   Motivation 
       
      By default, a RACE connection is not secure. This option allows 
      two co-operating applications to check the authenticity and 
      integrity of messages. 
    
   Negotiation 
       
      If the DTE can supply message authentication (for the input 
      stream), it sends "WILL MSGAUTH": 
       
         <195><066><255><254> --> 
       
      If the DCE would like to authenticate messages (for the input 
      stream), it responds "DO MSGAUTH": 
       
         <-- <193><066><255><254> 
       
      Otherwise, if the DCE does not want to authenticate messages (for 
      the input stream), it responds "DONT MSGAUTH": 
       
         <-- <194><066><255><254> 
       
      If the DTE would like to authenticate messages (for the output 
      stream), it sends "DO MSGAUTH": 
       
         <193><066><255><254> --> 
       
      If the DCE can supply message authentication (for the output 
      stream), it responds "WILL MSGAUTH": 
       
         <-- <195><066><255><254> 
       
      Otherwise, if the DTE cannot supply message authentication (for 
      the output stream), it responds "WONT MSGAUTH": 
       
         <-- <196><066><255><254> 
    
   Parameters 
       
      None. 
    
   Examples 
       
      DTE and DCE agree to authenticate messages for the input stream: 
       
         <195><066><255><254> --> 
         <-- <193><066><255><254> 
       
      DTE and DCE agree to authenticate messages in both directions: 
  
C. Kilkenny                Expires January 9, 2001            [Page 29] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

       
         <195><066><255><254> --> 
         <193><066><255><254> --> 
         <-- <193><066><255><254> 
         <-- <195><066><255><254> 
       
      DTE would like to authenticate messages in both directions, but 
      DCE does not understand this option: 
       
         <195><066><255><254> --> 
         <193><066><255><254> --> 
         <-- <194><066><255><254> 
         <-- <196><066><255><254> 
    
    
3.9 LGRP [Logical Grouping] 
    
   Identification 
       
      Name = LGRP, Code = 72 
      Dependencies: MODE 
    
   Overview 
       
      The Logical Grouping (LGRP) protocol option allows messages to be 
      grouped and processed as a single unit of work. Once enabled, the 
      sender can group consecutive messages together or continue to 
      send individual messages like in the basic protocol. 
       
      F67 is included in the MESSAGE packet in order to add the logical 
      grouping information. F67 contains the logical group position, as 
      an unsigned byte. It is included in the first and last messages 
      in order to delimit the beginning and end of a group. The first 
      message is assigned position 1 and the last message is assigned 
      position 2. F67 is not used in intermediate messages. Sequence 
      numbering within a logical group is not used, because a reliable 
      connection is assumed. For example, 
       
         <200><255><064>MSG-1<255><067><001><255><254> 
         <200><255><064>MSG-2<255><254> 
         <200><255><064>MSG-3<255><254> 
         <200><255><064>MSG-4<255><067><002><255><254> 
         <200><255><064>MSG-5<255><254> 
         <200><255><064>MSG-6<255><067><001><255><254> 
         <200><255><064>MSG-7<255><254> 
         <200><255><064>MSG-8<255><067><002><255><254> 
          
         This input contains three logical groups. The first group 
         contains four messages (MSG-1, MSG-2, MSG-3 and MSG-4). The 
         second group contains only one message (MSG-5). The third 
         group contains three messages (MSG-6, MSG-7 and MSG-8). 
       
      If a logical group contains only one message, F67 is not used and 
      a single message is put as per the basic protocol. Message 
  
C. Kilkenny                Expires January 9, 2001            [Page 30] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

      replies, if enabled, are expected for every message sent. 
      Windowing is allowed. A logical group becomes acknowledged after 
      the last message in the group has been acknowledged. The group is 
      then processed as a single unit of work. If one or more messages 
      in a logical group are rejected, the whole group is rejected and 
      subsequently not processed. The LGRP protocol option does not 
      alter the use of the SEQNO protocol option. 
    
   Motivation 
       
      It is sometimes necessary or practical to group messages together 
      in order to process them as a logical whole. For example, if 
      messages are read from a batch file, it is desirable to deliver 
      them together. If a group of messages form a transaction, they 
      need to be processed together so that, if one part fails, the 
      whole transaction can be rolled back. 
    
   Negotiation 
       
      Usage of logical grouping is negotiated separately for input and 
      output message transfer. 
       
      If the DTE would like to use logical grouping (for the input 
      stream), it sends "DO LGRP": 
       
         <193><072><255><254> --> 
       
      If the DCE supports logical grouping (for the input stream), it 
      replies "WILL LGRP": 
       
         <-- <195><072><255><254> 
       
      Otherwise, if the DCE does not support logical grouping (for the 
      input stream), it replies "WONT LGRP": 
       
         <-- <196><072><255><254> 
       
      If the DTE supports logical grouping (for the output stream), it 
      sends "WILL LGRP": 
       
         <195><072><255><254> --> 
       
      If the DCE would like to use logical grouping (for the output 
      stream), it replies "DO LGRP": 
       
         <-- <193><072><255><254> 
       
      Otheriwse, if the DCE does not want to use logical grouping (for 
      the output stream), it replies "DONT LGRP": 
       
         <-- <194><072><255><254> 
    
   Parameters 
       
  
C. Kilkenny                Expires January 9, 2001            [Page 31] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

      None. 
    
   Examples 
       
      Mode is BIDIRECTIONAL; Both DTE and DCE support LGRP. 
       
         <193><072><255><254> --> 
         <195><072><255><254> --> 
         <-- <195><072><255><254> 
         <-- <193><072><255><254> 
       
      Mode is INPUT; DTE supports LGRP, but DCE does not. 
       
         <193><072><255><254> --> 
         <-- <196><072><255><254> 
    
    
3.10 MSGLEN [Message Length] 
    
   Identification 
       
      Name: MSGLEN, Code = 78 
      Dependencies: MODE 
    
   Overview 
       
      The Message Length (MSGLEN) protocol option allows the message 
      length to be included in a MESSAGE packet. Depending upon 
      negotiation, the message length can be included either before or 
      after F64 (the message contents). 
       
      F63 is included in the MESSAGE packet in order to add the message 
      length. F63 is an unsigned long integer in network byte order. 
      So, the maximum message length is 4,294,967,295 bytes (4GB) when 
      this option is in effect. For example, 
       
         The message length prefixed: 
       
            <200><255><063><000><000><000><016> 
               <255><064>I HAVE 16 BYTES.<255><254> 
       
         The message length suffixed: 
       
            <200><255><064>I HAVE 16 BYTES. 
               <255><063><000><000><000><016><255><254> 
       
      If the message receiver detects that the actual message length 
      does not match the message length specified in F63, it should 
      disconnect with code INVMSGLEN. 
    
   Motivation 
       
      If the message length is sent with the message, the receiving 
      application can check the actual message length. If the message 
  
C. Kilkenny                Expires January 9, 2001            [Page 32] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

      length is included before the message content, the receiving 
      application can allocate space for the message in advance. For 
      large message transfers, this can increase performance, because 
      the receiving application can pre-allocate contiguous space. 
       
      However, it may be difficult for the sending application to know 
      the message length in advance or it may hinder performance for 
      the sending application to determine the message length in 
      advance. In addition, the size of F63 can degrade performance 
      when many small messages are being transferred. 
       
   Negotiation 
       
      If the DTE can provide the message length (for the input stream), 
      it sends "WILL MSGLEN" and whether it can prefix or suffix it (1, 
      2): 
       
         <195><078>{prefix-suffix}<255><254> --> 
       
      If the DCE would like to receive the message length (for the 
      input stream), it replies "DO MSGLEN" and whether to prefix or 
      suffix it (1, 2). The DCE can only ask for the message length to 
      be prefixed if the DTE has offered to prefix it. The DCE can ask 
      for the message length to be suffixed in either case. 
       
         <-- <193><078>{prefix-suffix}<255><254> 
       
      Otherwise, if the DCE does not want to receive the message length 
      (for the input stream), it replies "DONT MSGLEN": 
       
         <-- <194><078><255><254> 
       
      If the DTE would like to receive the message length (for the 
      output stream), it sends "DO MSGLEN" and whether to prefix or 
      suffix it (1, 2): 
       
         <193><078>{prefix-suffix}<255><254> --> 
       
      If the DCE can provide the message length (for the output 
      stream), it replies "WILL MSGLEN" and whether it can prefix or 
      suffix it (1, 2). The DCE should only offer to prefix the message 
      length if the DTE has requested it to be prefixed. If the DTE has 
      requested the message length to be prefixed and the DCE can only 
      suffix it, the DCE should agree to suffix it. The DTE can then 
      determine how it wants to proceed. 
       
         <-- <195><078><{prefix-suffix}<255><254> 
       
      Otherwise, if the DCE cannot provide the message length (for the 
      output stream), it replies "WONT MSGLEN": 
       
         <-- <196><078><255><254> 
    
   Parameters 
  
C. Kilkenny                Expires January 9, 2001            [Page 33] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

       
      {prefix-suffix} 
      The prefix-suffix parameter is an unsigned byte containing 1 to 
      prefix or 2 to suffix. 
    
   Examples 
       
      Mode is BIDIRECTIONAL; DTE can prefix MSGLEN and would like to 
      receive MSGLEN prefixed; DCE can prefix MSGLEN, but is not 
      interested in receiving it; they agree to prefix MSGLEN from DCE 
      to DTE. 
       
         <195><078><001><255><254> --> 
         <193><078><001><255><254> --> 
         <-- <194><078><255><254> 
         <-- <195><078><001><255><254> 
       
      Mode is INPUT; DTE can suffix MSGLEN; DCE would like to receive 
      MSGLEN prefixed; they agree not to use MSGLEN (because the DTE 
      cannot prefix it). 
       
         <195><078><002><255><254> --> 
         <-- <194><078><255><254> 
    
    
3.11 BATCH 
    
   Identification 
       
      Name: BATCH, Code = 41 
      Dependencies: MODE 
    
   Overview 
       
      The BATCH protocol option supports the transfer of data files 
      between applications. Typically, messages are written to the 
      batch file by one program and then the batch file is transferred 
      to another program. 
       
      BATCH disables standard message transfer and enables batch file 
      transfer. The MESSAGE packet is used to convey the batch file and 
      the MESSAGE-REPLY packet for acknowledgement. The contents are 
      transferred using F64 and the header is prefixed using F91 and 
      F92. F91 is mandatory and details the filename. F92 is optional 
      and details the creation date and time of the file in Greenish 
      Meantime. 
       
      If possible, the MSGLEN protocol option should be negotiated in 
      order to include F63, the file size. If F63 is included, the 
      receiving application can check the size of the received file. If 
      F63 is included before the file contents, the receiving 
      application can pre-allocate contiguous space and speed up the 
      file transfer. The maximum file size is 4,294,967,295 bytes 
      (4GB). 
  
C. Kilkenny                Expires January 9, 2001            [Page 34] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

       
      The data file can contain any binary data. Data byte 255 must be 
      doubled. 
       
      For example, a file transfer: 
       
         <200><255><091>PX2061.DAT<255><092>2002101510241600 
             <255><064>HERE ARE THE FILE CONTENTS.<255><254> --> 
         <-- <201><255><254> 
          
         File PX2061.DAT, created at 10:24am on the 15th October 2002, 
         is transferred. 
       
      The BATCH protocol option should be negotiated before the MODE 
      protocol option. 
    
   Motivation 
       
      Many existing or simple systems use batch files for message 
      processing and transfer. 
    
   Negotiation 
       
      BATCH usage is the same for input and output data transfer. Once 
      enabled, batch file transfer replaces standard message transfer. 
       
      If the DTE would like to use batch, it sends "DO BATCH": 
       
         <193><041><255><254> --> 
       
      If the DCE supports batch, it replies "WILL BATCH": 
       
         <-- <195><041><255><254> 
       
      Otherwise, if the DCE does not support batch, it replies "WONT 
      BATCH": 
       
         <-- <196><041><255><254> 
       
      If the DTE can offer batch, it sends "WILL BATCH": 
       
         <195><041><255><254> --> 
       
      If the DCE would like to use batch, it replies "DO BATCH": 
       
         <-- <193><041><255><254> 
       
      Otherwise, if the DCE does not want to use batch, it replies 
      "DONT BATCH": 
       
         <-- <194><041><255><254> 
    
   Parameters 
       
  
C. Kilkenny                Expires January 9, 2001            [Page 35] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

      None. 
    
   Examples 
       
      DTE would like to use BATCH; DCE supports BATCH; they agree to 
      use BATCH. 
       
         <193><041><255><254> --> 
         <-- <195><041><255><254> 
       
      DTE would like to use BATCH; DCE does not support BATCH; they do 
      not use BATCH. 
       
         <193><041><255><254> --> 
         <-- <196><041><255><254> 
    
    
3.12 NOM [Number of Messages] 
    
   Identification 
       
      Name: NOM, Code = 42 
      Dependencies: MODE 
    
   Overview 
       
      The Number of Messages (NOM) option allows either party to 
      determine the number of messages that are waiting to be 
      downloaded at the time of negotiation. 
       
      If the DTE wants to know or can offer the number of pending 
      messages, it negotiates with the DCE. If agreed, the DTE sends 
      its number of pending messages and/or the DCE sends its number of 
      pending messages. 
       
      It should be noted that the number of messages returned using 
      this protocol option may be less than or more than the actual 
      number of messages transferred. 
    
   Motivation 
       
      Sometimes, it is desirable to display or know the number of 
      messages that are waiting to be downloaded before they are 
      actually downloaded. This option allows the number of messages to 
      be known before data transfer is agreed and entered into. If no 
      messages are pending, this option allows the other party to 
      quickly disconnect, as it would otherwise have to wait for a 
      timer to expire. 
       
      For example, consider a message output program with user 
      intervention. The message output program connects to an output 
      message queue and retrieves the number of pending messages. It 
      displays the number of messages to the user and asks whether the 
      user wishes to download the messages. If the user agrees, the 
  
C. Kilkenny                Expires January 9, 2001            [Page 36] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

      program enters into message transfer. Otherwise, the program 
      disconnects. In this example, the program will need to watch that 
      the connection does not timeout if the user does not respond 
      immediately. 
    
   Negotiation 
       
      If the DTE wants to know the number of pending messages (for the 
      output stream), it sends "DO NOM": 
       
         <193><042><255><254> --> 
       
      If the DCE can offer the number of pending messages (for the 
      output stream), it replies "WILL NOM" and then sends "HERE-IS 
      NOM": 
       
         <-- <195><042><255><254> 
         <-- <197><042>{number-of-messages}<255><254> 
       
      Otherwise, if the DCE cannot offer the number of pending messages 
      (for the output stream), it replies "WONT NOM": 
       
         <-- <196><042><255><254> 
       
      If the DTE can offer the number of pending messages (for the 
      input stream), it sends "WILL NOM": 
       
         <195><042><255><254> --> 
       
      If the DCE would like to know the number of pending messages (for 
      the input stream), it replies "DO NOM": 
       
         <-- <193><042><255><254> 
       
      The DTE then sends "HERE-IS NOM" with the number of messages: 
       
         <197><042><{number-of-messages}<255><254> 
       
      Otherwise, if the DCE does not want to know the number of pending 
      messages (for the input stream), it replies "DONT NOM": 
       
         <-- <194><042><255><254> 
    
   Parameters 
       
      {number-of-messages} 
      The number of pending messages is an unsigned long integer in 
      network byte order. If a party supports this option but cannot 
      determine the number of messages, it returns a value of minus one 
      (4,294,967,295) as the number of pending messages. If a party has 
      no messages to send, the queue is empty, or mode does not permit 
      sending messages, it returns a value of zero as the number of 
      pending messages. If a party has 4,294,967,295 or more messages 
      to send, it returns a value of 4,294,967,295 as the number of 
  
C. Kilkenny                Expires January 9, 2001            [Page 37] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

      pending messages. I.e. it cannot determine the number of pending 
      messages. Data byte 255 must be doubled. 
    
   Examples 
       
      Mode is OUTPUT; DCE agrees to give DTE the number of pending 
      messages. 
       
         <193><042><255><254> --> 
         <-- <195><042><255><254> 
                . 
                . 
                . 
         <-- <197><042><000><000><000><000><255><254> 
       
      In this case, the DCE has no messages to transfer to DTE. 
    
    
3.13 BIGFOOT [Big Code Numbering] 
    
   Identification 
       
      Name: BIGFOOT, Code = 82 
      Dependencies: n/a 
    
   Overview 
       
      The Big Code Numbering (BIGFOOT) protocol option extends the 
      basic protocol in order to support a greater number of packet, 
      field and option codes. 
       
      When this option is in effect, identification of packets, fields 
      and options can span one or two bytes. A value of 253 in the 
      first byte indicates that the next two bytes contain the code 
      number in network byte order. 
       
      For example, consider the following WILL packet: 
       
         <195><253><003><002><255><254> 
          
         This WILL packet identifies option code 770 and does not 
         contain any parameter data. 
       
      For example, consider the following MESSAGE packet: 
       
         <200><255><064>HELLO<255><253><201><255>C256<255><254> 
          
         This MESSAGE packet contains two field ids: 64 and 51711. 
         Field 64 contains "HELLO". Field 51711 contains "C256". Note 
         how byte <255> is not doubled within the FID. 
       
      For example, consider the following packet: 
       
         <253><001><021><255><254> 
  
C. Kilkenny                Expires January 9, 2001            [Page 38] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

          
         This packet has packet id 277, but does not contain any fields 
         or data. 
       
      Under this scheme, code values 253, 254 and 255 can be 
      represented using the 2-byte code value. For example, 
      <253><000><253>. 
       
      This option gives 65,536 possible code values for fields, options 
      and packets. Within the 2-byte code value, byte value 255 should 
      not be doubled. 
    
   Motivation 
       
      It is quite likely that the number of codes offered by a single 
      byte will be exhausted some time in the future. This option 
      recommends a preferred method for higher code numbering. 
    
   Negotiation 
       
      If the DTE can offer big code numbering, it sends "WILL BIGFOOT": 
       
         <195><082><255><254> --> 
       
      If the DCE would like to use big code numbering, it replies "DO 
      BIGFOOT": 
       
         <-- <193><082><255><254> 
       
      Otherwise, if the DCE does not want to use big code numbering, it 
      replies "DONT BIGFOOT": 
       
         <-- <194><082><255><254> 
       
      If the DTE would like to use big code numbering, it sends "DO 
      BIGFOOT": 
       
         <193><082><255><254> --> 
       
      If the DCE can offer big code numbering, it replies "WILL 
      BIGFOOT": 
       
         <-- <195><082><255><254> 
       
      Otherwise, if the DCE cannot offer big code numbering, it replies 
      "WONT BIGFOOT": 
       
         <-- <196><082><255><254> 
       
      The DTE need only negotiate this option if it plans to use higher 
      numbered codes. 
    
   Parameters 
       
  
C. Kilkenny                Expires January 9, 2001            [Page 39] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

      None. 
    
   Examples 
       
      DTE and DCE agree to use big code numbering. 
       
         <193><082><255><254> --> 
         <-- <195><082><255><254> 














































  
C. Kilkenny                Expires January 9, 2001            [Page 40] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

4. Packet Syntax 
    
   The following packet codes are defined: 
       
      NAME               CODE        MEANING 
       
      CONNECT            192         Connect request 
      DO                 193         Request / agree protocol option 
      DONT               194         Deny protocol option 
      WILL               195         Offer / agree protocol option 
      WONT               196         Refuse protocol option 
      HERE-IS            197         Sub negotiation 
      READY              198         Ready 
      DISCONNECT         199         Quit / shutdown request 
      MESSAGE            200         Data message 
      MESSAGE-REPLY      201         Logical reply 
       
      This chapter describes each packet. 
       
      All other codes are reserved for future use. 
    
   The following codes have specific meaning when prefixed by the IAC 
   byte within a RACE packet: 
    
      NAME               CODE        MEANING 
       
      END-OF-PACKET      254         End of packet (EOP). 
      IAC                255         Data byte 255. 
      FIELD-IDENTITY     000...253   Field id and separation (FID). 
       
      The next chapter describes each field. 
       
      Not all of the field identity codes are used. Unused field 
      identity codes are reserved for future use, which includes usage 
      other than for field identification. 
    
   The packet descriptions now follow. 
    
    
4.1 CONNECT 
    
   CONNECT is sent by DTE in order to specify and connect to a target 
   DCE service and application. 
    
      SYNTAX                        MEANING 
      ------                        ------- 
    
      <192>                         Start of packet (192) 
    
         <255><031>{service-id}     F31 - Target service 
    
        [<255><032>{appl-id}        F32 - Target application 
    
           [<255><033>{appl-id}]]   F33 - User identifier 
  
C. Kilkenny                Expires January 9, 2001            [Page 41] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

    
         <255><254>                 EOP - End of packet 
    
   Description 
    
      See the basic protocol. 
    
    
4.2 DO 
    
   DO is sent by DTE in order to request a protocol option according to 
   the option specification. 
    
   DO is sent by DCE, after receipt of WILL, in order to accept or 
   negotiate a protocol option further according to the option 
   specification. 
    
      SYNTAX                        MEANING 
      ------                        ------- 
    
      <193>                         Start of packet (193) 
    
         {opt-code}                 Option code 
    
        [{opt-params}]              Option parameters 
    
         <255><254>                 EOP - End of packet 
    
   Description 
    
      The DTE can send DO during option negotiation subject to the 
      option specification. The DCE can only send DO after receipt of 
      WILL from DTE. 
       
      This packet does not use field notation. If field identifiers are 
      needed for option parameters, the IAC byte should be doubled. For 
      example, specify field 22 as <255><255><022>. Then, the default 
      parser will interpret the field identification as data and pass 
      <255><022> on as data for further interpretation. A secondary 
      parser can then interpret <255><022> as a valid field identifier. 
       
      {opt-code}, by position (2nd byte) 
      Option code as an unsigned byte, value 0-255. Data byte 255 must 
      be doubled. 
       
      {opt-params}, by position (after {opt-code}) 
      Option specific parameters in order to sub-negotiate the option. 
      Depending upon the option specification, this argument is 
      optional and contains a varying number of data bytes. Data byte 
      <255> must be doubled. 
    
    
4.3 DONT 
    
  
C. Kilkenny                Expires January 9, 2001            [Page 42] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

   DONT is sent by DCE after receipt of WILL, in order to reject the 
   option specified by WILL. 
    
      SYNTAX                        MEANING 
      ------                        ------- 
    
      <194>                         Start of packet (194) 
    
         {opt-code}                 Option code 
    
         <255><254>                 EOP - End of packet 
    
   Description 
    
      This packet does not use field notation. 
      {opt-code}, by position (2nd byte) 
      Option code as an unsigned byte, value 0-255. Data byte 255 must 
      be doubled. 
    
    
4.4 WILL 
    
   WILL is sent by DTE in order to offer a protocol option according to 
   the option specification. 
   WILL is sent by DCE, after receipt of DO, in order to accept or 
   negotiate a protocol option further according to the option 
   specification. 
    
      SYNTAX                        MEANING 
      ------                        ------- 
    
      <195>                         Start of packet (195) 
    
         {opt-code}                 Option code 
    
        [{opt-params}]              Option parameters 
    
         <255><254>                 EOP - End of packet 
    
   Description 
    
      The DTE can send WILL during option negotiation subject to the 
      option specification. The DCE can only send WILL after receipt of 
      DO from DTE. 
       
      This packet does not use field notation. If field identifiers are 
      needed for option parameters, the IAC byte should be doubled. For 
      example, specify field 22 as <255><255><022>. Then, the default 
      parser will interpret the field identification as data and pass 
      <255><022> on as data for further interpretation. A secondary 
      parser can then interpret <255><022> as a valid field identifier. 
       
      {opt-code}, by position (2nd byte) 

  
C. Kilkenny                Expires January 9, 2001            [Page 43] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

      Option code as an unsigned byte, value 0-255. Data byte 255 must 
      be doubled. 
       
      {opt-params}, by position (after {opt-code}) 
      Option specific parameters in order to sub-negotiate the option. 
      Depending upon the option specification, this argument is 
      optional and contains a varying number of data bytes. Data byte 
      <255> must be doubled. 
    
    
4.5 WONT 
    
   WONT is sent by DCE after receipt of DO, in order to reject the 
   option specified by DO. 
    
      SYNTAX                        MEANING 
      ------                        ------- 
    
      <196>                         Start of packet (196) 
    
         {opt-code}                 Option code 
    
         <255><254>                 EOP - End of packet 
    
   Description 
    
      This packet does not use field notation. 
       
      {opt-code}, by position (2nd byte) 
      Option code as an unsigned byte, value 0-255. Data byte 255 must 
      be doubled. 
    
    
4.6 HERE-IS 
    
   HERE-IS is sent by DTE or DCE in order to negotiate an option 
   further according to an option specification. The option must have 
   been agreed before HERE-IS can be used. 
    
      SYNTAX                        MEANING 
      ------                        ------- 
    
      <197>                         Start of packet (197) 
    
         {opt-code}                 Option code 
    
        [{opt-params}]              Option parameters 
    
         <255><254>                 EOP - End of packet 
    
   Description 
    
      This packet does not use field notation. If field identifiers are 
      needed for option parameters, the IAC byte should be doubled. For 
  
C. Kilkenny                Expires January 9, 2001            [Page 44] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

      example, specify field 22 as <255><255><022>. Then, the default 
      parser will interpret the field identification as data and pass 
      <255><022> on as data for further interpretation. A secondary 
      parser can then interpret <255><022> as a valid field identifier. 
       
      {opt-code}, by position (2nd byte) 
      Option code as an unsigned byte, value 0-255. Data byte 255 must 
      be doubled. 
       
      {opt-params}, by position (after {opt-code}) 
      Option specific parameters in order to sub-negotiate the option. 
      Depending upon the option specification, this argument is 
      optional and contains a varying number of data bytes. Data byte 
      <255> must be doubled. 
    
    
4.7 READY 
    
   READY is sent by DCE after receipt of CONNECT in order to accept the 
   connection. 
    
   READY is sent by DTE after negotiation in order to indicate that it 
   has finished and is agreeable to option negotiation. 
    
   READY is sent by DCE after receipt of READY in order to indicate 
   that it is agreeable to option negotiation. DTE and DCE immediately 
   enter into data transfer after the DCE has sent this packet 
   following negotiation. 
    
      SYNTAX                        MEANING 
      ------                        ------- 
    
      <198>                         Start of packet (198) 
    
         <255><254>                 EOP - End of packet 
    
   Description 
       
      See the basic protocol. 
    
    
4.8 DISCONNECT 
    
   DISCONNECT is sent by DTE or DCE to request shutdown of the link. 
    
   DISCONNECT is sent by DTE at the end of option negotiation in order 
   to reject negotiation and close the link. 
    
   DISCONNECT is sent by DCE after receipt CONNECT or READY, in order 
   to reject a connect request or negotiation, and close the link. 
    
   DISCONNECT is also sent by DTE or DCE after a protocol or unexpected 
   error. 
    
  
C. Kilkenny                Expires January 9, 2001            [Page 45] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

      SYNTAX                        MEANING 
      ------                        ------- 
    
      <199>                         Start of packet (199) 
    
        [<255><021>{code}           F21 - Disconnect code 
    
           [<255><023>{text}]]      F23 - Additional information 
    
         <255><254>                 EOP - End of packet 
    
   Description 
       
      When used to initiate or complete shutdown, DISCONNECT must 
      convey SUCCESS (0). Otherwise, DISCONNECT is interpreted as an 
      exception and blocks further communication. 
       
      F21, the disconnect code argument, can be omitted when its value 
      is SUCCESS (0). When omitted, SUCCESS (0) is assumed. If F23 is 
      present, F21 must also be present. 
    
    
4.9 MESSAGE 
    
   MESSAGE is sent in order to transfer an application data message. 
    
      SYNTAX                        MEANING 
      ------                        ------- 
    
      <200>                         Start of packet (200) 
    
        [<255><010>{seqno}]         F10 - Sequence number 
    
        [<255><091>{fname}          F91 - Filename 
    
           [<255><092>{fstamp}]]    F92 - File creation date and time 
    
        [<255><063>{msglen}]        F63 - Message length (prefixed) 
    
         <255><064>{msg}            F64 - Message 
    
        [<255><063>{msglen}]        F63 - Message length (suffixed) 
    
        [<255><065>{pde}]           F65 - PDE flag 
    
        [<255><066>{mac}]           F66 - MAC 
    
        [<255><067>{lgrp}]          F67 - LGRP position 
    
         <255><254>                 EOP - End of packet 
    
   Description 
       

  
C. Kilkenny                Expires January 9, 2001            [Page 46] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

      By default, messages are sent from DTE to DCE. The MODE protocol 
      option modifies this behaviour by allowing output (from DCE to 
      DTE) and bi-directional message transfer. 
       
      The SEQNO protocol option determines the usage of F10. When SEQNO 
      is enabled, F10 is mandatory. Otherwise, F10 should not be 
      present. 
       
      The PDE protocol option determines the usage of F65. When PDE is 
      enabled for the direction of message transfer, F65 may be present 
      in order to indicate a possible duplicate emission. 
       
      The MAC protocol option determines the usage of F66. When MAC is 
      enabled for the direction of message transfer, F66 is mandatory. 
      Otherwise, F66 should not be present. 
       
      The LGRP protocol option determines the usage of F67. When LGRP 
      is enabled for the direction of message transfer, F67 may be 
      present in order to indicate the beginning or end of a logical 
      group. 
       
      The MSGLEN protocol option determines the usage of F63. When 
      MSGLEN is enabled for the direction of message transfer, F63 is 
      mandatory and details the message length. Depending upon 
      negotiation of MSGLEN, F63 is either expected before or after 
      F64, the message contents. 
       
      The BATCH protocol option determines the usage of F91 and F92. 
      When BATCH is enabled, F91 is mandatory and F92 may be optionally 
      present. Otherwise, F91 and F92 should not be present. When BATCH 
      is enabled, F64 is the contents of the file rather than a 
      specific application message. 
    
    
4.10 MESSAGE-REPLY 
    
   MESSAGE-REPLY is sent after receipt of MESSAGE in order to indicate 
   successful or unsuccessful interpretation of the data message. 
    
      SYNTAX                        MEANING 
      ------                        ------- 
    
      <201>                         Start of packet (201) 
    
        [<255><010>{seqno}]         F10 - Sequence number 
    
        [<255><021>{code}           F21 - Reply code 
    
           [<255><023>{text}]]      F23 - Additional information 
    
        [<255><024>{umr}]           F24 - RREF 
    
         <255><254>                 EOP - End of packet 
    
  
C. Kilkenny                Expires January 9, 2001            [Page 47] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

   Description 
    
      Code SUCCESS indicates a positive message reply and that the 
      message was accepted. Otherwise, the reply is negative and the 
      message was not accepted. 
       
      By default, message replies are returned from DCE to DTE. The 
      NOREPLY and MODE protocol options modify this behaviour. NOREPLY 
      turns off message replies. MODE allows message replies to be 
      returned from DTE to DCE or in both directions depending upon the 
      direction of message transfer. 
       
      The RREF protocol option determines the usage of F24. When RREF 
      is enabled for the direction of message transfer, F24 is 
      mandatory and contains a unique message reference. Otherwise, F24 
      should not be present. 
       
      The SEQNO protocol option determines the usage of F10. When SEQNO 
      is enabled, F10 is mandatory. Otherwise, F10 should not be 
      present. 
       
      F21, the reply code argument, can be omitted when its value is 
      SUCCCESS (0), in order to increase performance. When omitted, 
      SUCCESS is assumed. If F23 is present, F21 must also be present. 






























  
C. Kilkenny                Expires January 9, 2001            [Page 48] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

5. Field Syntax 
    
   F10, SEQUENCE NUMBER 
       
      Usage:  SEQNO (MESSAGE, MESSAGE-REPLY) 
       
      Format: unsigned short int (in network byte order) 
       
      Detail: Sequence numbers are applied to both messages and message 
      replies. Separate counters are used for input and output message 
      transfer. Sequence numbers start at one at the beginning of a new 
      connection, increment by one, and wrap back to one upon reaching 
      65,536 (i.e. 65,536, 131,071, ... become 1). Zero is not a valid 
      sequence number. 
    
   F21, REPLY OR DISCONNECT CODE 
       
      Usage:  BASIC (DISCONNECT, MESSAGE-REPLY) 
       
      Format: unsigned short int (in network byte order) 
       
      Detail: See later in this documentation for details of reply and 
      disconnect codes and their meanings. If F21 is omitted in 
      DISCONNECT or MESSAGE-REPLY, SUCCESS is assumed. 
    
   F23, ADDITIONAL INFORMATION 
       
      Usage:  BASIC (DISCONNECT, MESSAGE-REPLY) 
       
      Format: char [256] 
       
      Detail: Additional information is used to supplement the code in 
      F21. This field contains 1 to 256 bytes and is application 
      specific. Typically, ASCII, byte value 32 to 126 inclusive, is 
      used. 
    
   F24, UNIQUE MESSAGE REFERENCE (UMR) 
       
      Usage:  RREF (MESSAGE-REPLY) 
       
      Format: char [32] 
       
      Detail: The unique message reference (UMR) is comprised of 1 to 
      64 ASCII characters, byte value 32 through 126 inclusive. As a 
      matter of good practise, it is recommended to keep the reference 
      to alphanumeric characters without leading, trailing or embedded 
      spaces. 
    
   F31, TARGET SERVICE 
       
      Usage:  BASIC (CONNECT) 
       
      Format: char [64] 
       
  
C. Kilkenny                Expires January 9, 2001            [Page 49] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

      Detail: The DCE service identifier (protocol type). The 
      identifier comprises 1 to 64 ASCII characters, byte value 32 to 
      126 inclusive. 
    
   F32, TARGET APPLICATION 
       
      Usage:  BASIC (CONNECT) 
       
      Format: char [64] 
       
      Detail: The DCE application name (daemon, connection point, I/O 
      queue name). The identifier comprises 1 to 64 ASCII characters, 
      byte value 32 to 126 inclusive. 
    
   F33, USER IDENTIFIER 
       
      Usage:  BASIC (CONNECT) 
       
      Format: char [64] 
       
      Detail: The DTE application name (user identifier, connection 
      point, I/O queue name). The identifier comprises 1 to 64 ASCII 
      characters, byte value 32 to 126 inclusive, like F32. 
    
   F63, MESSAGE LENGTH 
       
      Usage:  MSGLEN (MESSAGE) 
       
      Format: unsigned long int (in network byte order) 
       
      Detail: The length of F64, the content of the message. 
    
   F64, APPLICATION DATA MESSAGE 
       
      Usage:  BASIC (MESSAGE) 
       
      Format: unsigned char [] 
       
      Detail: A varying number of unsigned bytes, which are application 
      specific. If the MSGLEN protocol option is in effect, the maximum 
      message length is 4,294,967,295 bytes (4GB). 
    
   F65, POSSIBLE DUPLICATE EMISSION (PDE) FLAG 
       
      Usage:  PDE (MESSAGE) 
       
      Format: unsigned char 
       
      Detail: F65 indicates a possible duplicate emission (PDE). It 
      should contain a single byte, binary value one. 
    
   F66, MESSAGE AUTHENTICATION CODE (MAC) 
       
      Usage:  MAC (MESSAGE) 
  
C. Kilkenny                Expires January 9, 2001            [Page 50] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

       
      Format: unsigned char [64] 
       
      Detail: F66 contains 1 to 64 unsigned bytes depending upon the 
      authentication algorithm. 
    
   F67, LOGICAL GROUPING (LGRP) POSITION 
       
      Usage:  LGRP (MESSAGE) 
       
      Format: unsigned char 
       
      Detail: The first message in a logical group is assigned position 
      one and the last message is assigned position two. F67 is not 
      used for intermediate messages. If a logical group contains only 
      one message, F67 is not used and a single message is put as per 
      the basic protocol. 
    
   F91, FILENAME 
       
      Usage:  BATCH (MESSAGE) 
       
      Format: char [64] 
       
      Detail: The filename of the batch file. F91 contains 1 to 64 
      ASCII characters, limited to the following: lowercase and 
      uppercase letters; digits; the dollar character; the underscore 
      character; and the period (full stop) character. The period 
      character should only occur once in the filename and is used to 
      separate the name from the type suffix. 
    
   F92, FILE CREATION DATE AND TIME STAMP 
       
      Usage:  BATCH (MESSAGE) 
       
      Format: char [16] 
       
      Detail: The creation date and time stamp of the batch file in 
      Greenish Meantime. The stamp is 16 ASCII digits, format 
      YYYYMMDDHHMMSSNN, where YYYYMMDD represents the year, month and 
      day, and HHMMSSNN represents the hour, minute, second and 
      hundredth second. If part of the stamp cannot be determined, for 
      example the hundredth second, it should be filled with ASCII 
      zero. 
    
   N.B. DATA BYTE <255> MUST BE DOUBLED. 








  
C. Kilkenny                Expires January 9, 2001            [Page 51] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

6. Reply Codes 
    
   The following codes have been defined for MESSAGE-REPLY. Your 
   application should be ready to support other codes, which have not 
   yet been defined, in order to support future versions of the 
   protocol. 
    
      0  SUCCESS, Normal successful completion 
          
         Description: A valid message was received, interpreted and 
         processed. This may include safe-storage for subsequent 
         processing. SUCCESS is assumed when MESSAGE-REPLY does not 
         contain a reply code. 
          
         Action: The sending application can now update the message as 
         sent. Responsibility for the message passes to the receiving 
         application. 
          
   1001  ERROR, Error 
          
         Description: This error code should not be sent in MESSAGE-
         REPLY. Rather, it is used to describe an unknown error code 
         (not currently defined in this section) to the user or calling 
         software. 
          
         Action: Consider updating your software to support the latest 
         protocol version. 
          
   2001  INVMSG, Invalid message 
          
         Description: An invalid message was received and, therefore, 
         could not be processed. 
          
         Action: Check the message for errors. If OK, review the logic 
         of the receiving application. Check F23 for additional 
         information. 


















  
C. Kilkenny                Expires January 9, 2001            [Page 52] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

7. Disconnect Codes 
    
   The following codes have been defined for DISCONNECT. Your 
   application should be ready to support other codes, which have not 
   yet been defined, in order to support future versions of the 
   protocol. 
    
      0  SUCCESS, Normal successful completion 
          
         Description: Either DTE or DCE has completed its processing 
         and is requesting or confirming shutdown of the link. SUCCESS 
         is assumed when DISCONNECT does not contain a disconnect code. 
          
         Action: If initiating shutdown, wait for a corresponding 
         DISCONNECT packet in order to close the link. Upon receipt of 
         a shutdown request, complete any processing and return a 
         corresponding DISCONNECT packet. The link can then be closed. 
          
   1001  ERROR, Error 
          
         Description: This error code should not be sent in DISCONNECT. 
         Rather, it is used to describe an unknown error code (not 
         currently defined in this section) to the user or calling 
         software. 
          
         Action: Consider updating your software to support the latest 
         protocol version. 
          
   3014  SRVNOTAVL, Service not available 
          
         Description: The DCE received a CONNECT request, but the 
         requested service was not available or unsupported. 
          
         Action: Check the name of the service and whether it is 
         supported. 
          
   3025  APPNOTAVL, Application not available 
          
         Description: The DCE received a CONNECT request, but the 
         requested application was not available or did not exist. 
          
         Action: Check the name of the target application. 
          
   3036  APPBUSY, Application busy, retry later 
          
         Description: The DCE received a CONNECT request, but the 
         requested application is currently busy. 
          
         Action: If the DCE application is shared, close the link and 
         try again (possibly after a short delay). If the DCE 
         application is not shared, check that another DTE instance is 
         not running. 
          
   3047  APPNOTRDY, Application not ready, retry later 
  
C. Kilkenny                Expires January 9, 2001            [Page 53] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

          
         Description: The DCE received a CONNECT request, but the 
         requested application is not currently listening for new 
         connections. 
          
         Action: Close the connection and try again (using a short 
         delay and a maximum number of retries). 
          
   3058  LGIFAIL, Login failure 
          
         Description: Either DTE or DCE could not continue, because the 
         login information was incorrect or insufficient. 
          
         Action: Check the login information, authentication keys, 
         authentication algorithm, and supported protocol options. 
          
   3069  AUTFAIL, Authentication failure 
          
         Description: Either DTE or DCE could not continue, because 
         message authentication failed. 
          
         Action: Check the authentication keys, algorithm, and 
         supported protocol options. 
          
   3080  INSNEGOPT, Insufficient negotiated options 
          
         Description: Either DTE or DCE cannot continue with the 
         negotiated protocol options. I.e. One party needed one or more 
         protocol features, which the other party did not support. 
          
         Action: The applications are incompatible. Change one of the 
         applications. 
          
   3091  RESFAIL, Resource failure 
          
         Description: A message was received, but a resource failed, 
         which prevented the message from being processed. For example, 
         the receiving application might have run out of disk space or 
         memory. The message may or may not be valid. The message may 
         or may not have been processed. 
          
         Action: An operator will most probably need to investigate why 
         the receiving application failed. Reopen the link once the 
         receiving application has been fixed. 
          
   3102  PRTCOLERR, Protocol error 
          
         Description: The application received a known packet type, but 
         the packet was unexpected. For example, if the DTE was 
         expecting READY or DISCONNECT, and received a MESSAGE, this 
         would constitute a protocol error. 
          
         Action: Check your application for programming errors. 
          
  
C. Kilkenny                Expires January 9, 2001            [Page 54] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

   3113  INVPKTTYP, Invalid packet type 
          
         Description: The application received an invalid packet type. 
         I.e. the first byte of the packet was not a valid packet 
         identifier. 
          
         Action: Check your application for programming errors. Check 
         that the underlying transport is reliable. 
          
   3124  PKTOVFBUF, Packet overflows buffer 
          
         Description: The application received a packet, which exceeded 
         its internal buffer size. 
          
         Action: Specify a smaller packet or increase the internal 
         buffer size of the application. If a message is bigger than 
         the maximum message length (defined at application level), 
         INVMSG should be returned by MESSAGE-REPLY rather than 
         PKTOVFBUF by DISCONNECT. Ideally, applications should not 
         restrict the packet size. 
          
   3135  TOOMANFLD, Too many fields in packet 
          
         Description: The other application received a packet, which 
         had too many packet fields for its internal buffers. 
          
         Action: Typically, this is an indication of a programming 
         error, which has resulted in too many fields. Check your 
         application. If the packet is correct, increase the internal 
         buffers of the other application. 
          
   3146  INVPKTFID, Invalid packet field identifier 
          
         Description: The other application received a packet, which 
         contained an invalid field identifier. 
          
         Action: Check the applications for programming errors. Check 
         that the underlying transport is reliable. 
          
   3157  INVPKTSYN, Invalid packet syntax 
          
         Description: The other application received a packet, which 
         had invalid syntax. For example, a field was not properly 
         formatted, was out of order or was missing. 
          
         Action: Check the applications for programming errors. 
          
   3168  TIMEOUT, Timeout 
          
         Description: The other application was expecting a packet, but 
         did not receive one within its timeout period. 
          


  
C. Kilkenny                Expires January 9, 2001            [Page 55] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

         Action: Check your application for programming errors. Check 
         that the timeout period is sufficient for the applications, 
         the underlying transport and the network. 
          
   3179  INVSEQNO, Invalid sequence number 
          
         Description: The SEQNO protocol option was agreed and a 
         message or message reply was encountered, which had an invalid 
         sequence number. 
          
         Action: Check the programs for sequencing errors. 
          
   3190  INVMSGLEN, Invalid message length 
          
         Description: The MSGLEN protocol option was agreed and the 
         message length in F63 did not agree with the actual message 
         length in F64. 
          
         Action: Check for programming errors. Check that the 
         underlying transport is reliable. If a message is bigger than 
         the maximum message length (defined at application level), 
         INVSG should be returned by MESSAGE-REPLY rather than 
         INVMSGLEN by DISCONNECT. 































  
C. Kilkenny                Expires January 9, 2001            [Page 56] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

8. Sample Transmission 
    
   Here is a sample communication between two applications. The DTE 
   connects for output message transfer and downloads one message. The 
   DTE then initiates a graceful shutdown. 
    
      t1: <192><255><031>race$generic<255><032>TESTAPPL<255><254> 
      c1: <198><255><254> 
      t2: <193><033><002><255><254> 
          <193><053><255><254> 
          <195><054><255><254> 
      c2: <195><033><002><255><254> 
          <195><053><255><254> 
          <194><054><255><254> 
      t3: <198><255><254> 
      c3: <198><255><254> 
      c4: <200><255><064>HELLO WORLD.<255><254> 
      t4: <201><255><254> 
      t5: <199><255><254> 
      c5: <199><255><254> 
    
   This can be summarised as follows: 
    
      t1: DTE sends CONNECT, target service "race$generic", target 
          application "TESTAPPL" 
      c1: DCE responds READY 
      t2: DTE sends DO MODE OUTPUT, DO PDE, WILL RREF 
      c2: DCE responds WILL MODE OUTPUT, WILL PDE, DONT RREF 
      t3: DTE can continue with or without RREF, so it sends READY 
      c3: DCE responds READY 
      c4: DCE sends its first MESSAGE ("HELLO WORLD."). 
      t4: DTE returns a positive acknowledgement. 
      t5: After a keep alive timer expires, DTE requests shutdown. 
      c5: DCE confirms shutdown. 




















  
C. Kilkenny                Expires January 9, 2001            [Page 57] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

Security Considerations 
    
   The current protocol specification caters for both connection and 
   message authentication, but it does state any authentication 
   algorithm or key values. Authentication codes are limited to 512 
   bits unless negotiated otherwise. Peers can agree the algorithm and 
   key values outside the scope of this document. 
    
   The protocol can be extended in order to support any number of 
   security features (independent of the end application). For example, 
   it would be relatively straightforward to encrypt the data and, 
   thereby, cater for confidentiality and additional data integrity. 
    
    
References 
    
   [1]   Postel, J., "Simple Mail Transfer Protocol", RFC 821, 
         USC/Information Sciences Institute, August 1982. 
    
   [2]   Postel, J., Reynolds, J., "TELNET Protocol Specification", RFC 
         854, USC/Information Sciences Institute, May 1983. 
    
   [3]   Postel, J., Reynolds, J., "TELNET Option Specifications", RFC 
         855, USC/Information Sciences Institute, May 1983. 
    
   [4]   Butler, M., Postel, J., Chase, D., Goldberger, J., Reynolds, 
         J., "Post Office Protocol - Version 2", RFC 937, 
         USC/Information Sciences Institute, February 1985. 
    
   [5]   Postel, J., Reynolds, J., "File Transfer Protocol (FTP)", RFC 
         959, USC/Information Sciences Institute, October 1985. 
    
   [6]   Sun Microsystems, Inc., "RPC: Remote Procedure Call Protocol 
         Specification Version 2", RFC 1057, June 1988. 
    
   [7]   Bernstein, D., "The Q Method of Implementing TELNET Option 
         Negotiation", RFC 1143, February 1990. 
    
   [8]   Reynolds, J., Postel, J., "Assigned Numbers", RFC 1700, STD 2, 
         USC/Information Sciences Institute, October 1994. 
    
   [9]   Gwinn, A., "Simple Network Paging Protocol - Version 3 - Two-
         Way Enhanced", RFC 1861, Southern Methodist University, 
         October 1995. 
    
    
Acknowledgments 
    
   Global Financial Networks wishes to thank to those who have 
   contributed to this draft specification. 




  
C. Kilkenny                Expires January 9, 2001            [Page 58] 

Internet-Draft         RACE Protocol Draft Version 1.3        July 2000 

Author's Addresses 
    
   Charles Kilkenny 
   Global Financial Networks Limited 
   The Leys 
   2c Leyton Road 
   Harpenden 
   Hertfordshire AL5 2TL 
   United Kingdom 
   Phone: +44 (0)1582 467 486 
   Email: kilkenny@gfn.co.uk 
    










































  
C. Kilkenny                Expires January 9, 2001            [Page 59]