Difference between revisions of "RFC1053"

From RFC-Wiki
imported>Admin
(Created page with " Network Working Group S. LevyRequest for Comments: 1053 T. Jacobson ...")
 
Line 5: Line 5:
  
  
Network Working Group                                            S. LevyRequest for Comments: 1053                                  T. Jacobson                                       Minnesota Supercomputer Center                                                           April 1988
+
Network Working Group                                            S. Levy
 +
Request for Comments: 1053                                  T. Jacobson
 +
                                          Minnesota Supercomputer Center
 +
                                                              April 1988
 +
 
 +
 
 +
                        Telnet X.3 PAD Option
  
                      Telnet X.3 PAD Option
 
  
 
Status of this Memo
 
Status of this Memo
This RFC proposes a new option to Telnet for the Internet community,and requests discussion and suggestions for improvements.Distribution of this memo is unlimited.
 
== Command name and code ==
 
  
X.3-PAD                30
+
  This RFC proposes a new option to Telnet for the Internet community,
 +
  and requests discussion and suggestions for improvements.
 +
  Distribution of this memo is unlimited.
 +
 
 +
1.  Command name and code
 +
 
 +
  X.3-PAD                30
 +
 
 +
2.  Command meanings
 +
 
 +
  IAC  DO    X.3-PAD
 +
 
 +
      The issuing telnet requests that its peer perform X.3-PAD
 +
      functions, or accepts an offer to do so.
 +
 
 +
  IAC  DON'T  X.3-PAD
 +
 
 +
      The issuing telnet demands that its peer not perform or cease
 +
      performing X.3-PAD functions.
 +
 
 +
  IAC  WILL  X.3-PAD
  
== Command meanings ==
+
      The issuing telnet offers to perform X.3-PAD functions or confirms
 +
      that it will do so.
  
IAC  DO    X.3-PAD
+
  IAC  WON'T  X.3-PAD
  
  The issuing telnet requests that its peer perform X.3-PAD
+
      The issuing telnet refuses to perform X.3-PAD functions or
  functions, or accepts an offer to do so.
+
      indicates that it is ceasing to handle them.
  
IAC  DON'T  X.3-PAD
+
  Typically a server (host) telnet will use DO and DON'T, while a
 +
  client (user) telnet will use WILL and WON'T. For convenience, in
 +
  the rest of this RFC 'host' and 'user' telnets refer to those saying
 +
  'DO X.3-PAD' or 'WILL X.3-PAD' respectively.
  
   The issuing telnet demands that its peer not perform or cease
+
   Both telnet peers may use this option without confusion, as all
   performing X.3-PAD functions.
+
   messages unambiguously identify whether they come from the host
  
IAC  WILL  X.3-PAD
 
  
  The issuing telnet offers to perform X.3-PAD functions or confirms
 
  that it will do so.
 
  
IAC  WON'T  X.3-PAD
+
Levy & Jacobson                                                [Page 1]
  
  The issuing telnet refuses to perform X.3-PAD functions or
+
RFC 1053                Telnet X.3 PAD Option                April 1988
  indicates that it is ceasing to handle them.
 
  
Typically a server (host) telnet will use DO and DON'T, while a
 
client (user) telnet will use WILL and WON'T.  For convenience, in
 
the rest of this RFC 'host' and 'user' telnets refer to those saying
 
'DO X.3-PAD' or 'WILL X.3-PAD' respectively.
 
  
Both telnet peers may use this option without confusion, as all
+
  ("DO") or the user ("WILL") side.
messages unambiguously identify whether they come from the host
 
  
 +
      Once DO and WILL have been exchanged, the host ("DO") telnet may
 +
      send the following messages:
  
 +
  IAC SB  X.3-PAD  SET          <param1> <value1> ...  IAC SE
 +
  IAC SB  X.3-PAD  RESPONSE-SET  <param1> <value1> ...  IAC SE
 +
  IAC SB  X.3-PAD  SEND          IAC SE
  
 +
      while the user ("WILL") telnet may send the following messages:
  
 +
  IAC SB  X.3-PAD  IS            <param1> <value1> ...  IAC SE
 +
  IAC SB  X.3-PAD  RESPONSE-IS  <param1> <value1> ...  IAC SE
  
("DO") or the user ("WILL") side.
+
  The code for SET          is 0
 +
  The code for RESPONSE-SET is 1
 +
  The code for IS          is 2
 +
  The code for RESPONSE-IS  is 3
 +
  The code for SEND        is 4
  
  Once DO and WILL have been exchanged, the host ("DO") telnet may
+
      Messages listing parameter-value pairs may contain any number of
  send the following messages:
+
      such pairs, including zero.  Each parameter and each value
 +
      occupies one octet, except that 255 (IAC) is doubled wherever it
 +
      appears.
  
IAC SB  X.3-PAD  SET          <param1> <value1> ...  IAC SE
+
3.  Default conditions
IAC SB  X.3-PAD  RESPONSE-SET  <param1> <value1> ...  IAC SE
 
IAC SB  X.3-PAD SEND          IAC SE
 
  
   while the user ("WILL") telnet may send the following messages:
+
   The initial state is DON'T X.3-PAD, WON'T X.3-PAD.  This RFC does not
 +
  specify default values for most X.3 parameters.  If the host telnet
 +
  wishes a particular initial state (as it normally will), it should
 +
  negotiate for it after exchange of DO/WILL messages.
  
IAC SB  X.3-PAD IS            <param1> <value1> ...  IAC SE
+
  X.3-PAD parameter values need not be preserved except when DO/WILL
IAC SB X.3-PAD RESPONSE-IS  <param1> <value1> ...  IAC SE
+
  X.3-PAD is in effectThus if a host enables ("DO") X.3-PAD,
 +
  negotiates about some parameters, then for some reason disables
 +
  ("DONT") and later re-enables X.3-PAD, it must renegotiate any
 +
  parameters it cares about.
  
The code for SET          is 0
+
  Keeping in mind that the host telnet may not recognize all the
The code for RESPONSE-SET is 1
+
  parameters known to the user telnet, it is suggested that the user
The code for IS          is 2
+
  telnet's initial parameters allow a reasonable level of service even
The code for RESPONSE-IS is 3
+
  if they are never changed (e.g., it would be unwise to begin with all
The code for SEND        is 4
+
  data forwarding conditions disabled). Extensions to X.3 should
 +
  default to states resembling normal X.3 service where possible.
  
  Messages listing parameter-value pairs may contain any number of
 
  such pairs, including zero.  Each parameter and each value
 
  occupies one octet, except that 255 (IAC) is doubled wherever it
 
  appears.
 
  
== Default conditions ==
 
  
The initial state is DON'T X.3-PAD, WON'T X.3-PAD.  This RFC does not
 
specify default values for most X.3 parameters.  If the host telnet
 
wishes a particular initial state (as it normally will), it should
 
negotiate for it after exchange of DO/WILL messages.
 
  
X.3-PAD parameter values need not be preserved except when DO/WILL
 
X.3-PAD is in effect.  Thus if a host enables ("DO") X.3-PAD,
 
negotiates about some parameters, then for some reason disables
 
("DONT") and later re-enables X.3-PAD, it must renegotiate any
 
parameters it cares about.
 
  
Keeping in mind that the host telnet may not recognize all the
 
parameters known to the user telnet, it is suggested that the user
 
telnet's initial parameters allow a reasonable level of service even
 
if they are never changed (e.g., it would be unwise to begin with all
 
data forwarding conditions disabled).  Extensions to X.3 should
 
default to states resembling normal X.3 service where possible.
 
  
  
 +
Levy & Jacobson                                                [Page 2]
  
 +
RFC 1053                Telnet X.3 PAD Option                April 1988
  
  
 +
4.  Motivation for the option
  
 +
  Where interactive terminals (or computers simulating them) are
 +
  attached to host computers across a network, it is often desirable to
 +
  provide them the same services as have long been provided for
 +
  terminals directly attached to those hosts.
  
 +
  Many systems handle this by simply leaving all character processing
 +
  to the host running the applications.  Each character typed by the
 +
  user is sent, often in its own packet, immediately to the host.  This
 +
  gives good control over interaction, but can cause a significant load
 +
  on hosts and networks.  Long-distance packet networks tend to be
 +
  unreasonably slow or expensive or both when used in this mode.
  
 +
  Suitable character processing on the client (near the user's
 +
  terminal) can greatly improve the situation.  Unfortunately for
 +
  standardization efforts, there are many possible approaches with
 +
  differing purposes.
  
== Motivation for the option ==
+
  Some have already been proposed as Telnet options.  The Remote
 +
  Controlled Transmission and Echo option, [3], provides fine control
 +
  over local buffering and echoing.  The SUPDUP option, [4], offers a
 +
  variety of input and display functions in terminal-independent form.
  
Where interactive terminals (or computers simulating them) are
+
  This RFC's proposal is intended to support efficient, approximate
attached to host computers across a network, it is often desirable to
+
  emulation, across a Telnet connection, of a host's normal handling of
provide them the same services as have long been provided for
+
  character-oriented terminals.  Ideally, a user and an application
terminals directly attached to those hosts.
+
  program would not need to know whether they were linked by an RS-232
 +
  line or a TCP/IP network, except where the medium required a
 +
  distinction (e.g., when establishing a connection).
  
Many systems handle this by simply leaving all character processing
+
  Server implementors would wish for enough to emulate, purely locally,
to the host running the applications.  Each character typed by the
+
  everything offered by their host's operating system; on the other
user is sent, often in its own packet, immediately to the hostThis
+
  hand, a standard calling on user telnets to provide all terminal
gives good control over interaction, but can cause a significant load
+
  handling functions of all known operating systems will find few
on hosts and networks.  Long-distance packet networks tend to be
+
  implementorsOne might settle on a subset of common operations, but
unreasonably slow or expensive or both when used in this mode.
+
  which ones?
  
Suitable character processing on the client (near the user's
+
  The CCITT world has used one approach to these problems: the set of
terminal) can greatly improve the situationUnfortunately for
+
  PAD services defined by recommendation X.3.  This RFC proposes that
standardization efforts, there are many possible approaches with
+
  the Internet community adopt that solution to handle the same
differing purposes.
+
  problems under TelnetIt is fairly simple, widely known and used,
 +
  extensible, and solves most of the relevant problems.
  
Some have already been proposed as Telnet optionsThe Remote
+
  Adopting X.3 would have another advantageX.25 is the dominant
Controlled Transmission and Echo option, [3], provides fine control
+
  worldwide standard interface between commercial packet networks and
over local buffering and echoingThe SUPDUP option, [4], offers a
+
  Internet systems, as evidenced by the DDN's adoption of X.25 basic
variety of input and display functions in terminal-independent form.
+
  and standard services as replacements for BBN 1822 and HDHTelnet
  
This RFC's proposal is intended to support efficient, approximate
 
emulation, across a Telnet connection, of a host's normal handling of
 
character-oriented terminals.  Ideally, a user and an application
 
program would not need to know whether they were linked by an RS-232
 
line or a TCP/IP network, except where the medium required a
 
distinction (e.g., when establishing a connection).
 
  
Server implementors would wish for enough to emulate, purely locally,
 
everything offered by their host's operating system; on the other
 
hand, a standard calling on user telnets to provide all terminal
 
handling functions of all known operating systems will find few
 
implementors.  One might settle on a subset of common operations, but
 
which ones?
 
  
The CCITT world has used one approach to these problems: the set of
+
Levy & Jacobson                                                [Page 3]
PAD services defined by recommendation X.3.  This RFC proposes that
 
the Internet community adopt that solution to handle the same
 
problems under Telnet.  It is fairly simple, widely known and used,
 
extensible, and solves most of the relevant problems.
 
  
Adopting X.3 would have another advantage.  X.25 is the dominant
+
RFC 1053                Telnet X.3 PAD Option                April 1988
worldwide standard interface between commercial packet networks and
 
Internet systems, as evidenced by the DDN's adoption of X.25 basic
 
and standard services as replacements for BBN 1822 and HDH.  Telnet
 
  
  
 +
  and X.3 PAD traffic will have to coexist on X.25 networks; there will
 +
  be a consequential desire for effective interoperation at the virtual
 +
  terminal level.  Extending Telnet along these lines would vastly
 +
  simplify bridging the two.
  
 +
  Described here is a scheme for implementing X.3 services and
 +
  negotiating their parameters across a Telnet connection.
  
 +
5.  Description of the option
  
and X.3 PAD traffic will have to coexist on X.25 networks; there will
+
  Many, though not all, X.3 services are meaningful in the context of
be a consequential desire for effective interoperation at the virtual
+
  remote terminal processing; for some, it may be desirable to allow
terminal levelExtending Telnet along these lines would vastly
+
  local control (by the user) but not remote control (by the server
simplify bridging the two.
+
  host). Some functions may not be provided, or provided in only
 +
  limited form, by particular implementationsIn general, an
 +
  implementation should follow the Telnet norm of requesting desired
 +
  service but continuing to function somehow in case it is not
 +
  available.
  
Described here is a scheme for implementing X.3 services and
+
  Negotiations are asymmetrical.  Since the user telnet is charged with
negotiating their parameters across a Telnet connection.
+
  local character handling while engaged in the session with the remote
 +
  host, the X.3 parameters "belong" to the user side.  The host telnet
 +
  requests parameter changes with SET or RESPONSE-SET messages.  Host
 +
  requests might be on behalf of an application program, for example,
 +
  disabling local echo while a password is being entered.  The user
 +
  telnet should give its "best effort" to accommodate these requests,
 +
  but guarantees nothing except accurate status reporting.
  
== Description of the option ==
+
  A user telnet may allow the local user to request parameter changes
 +
  too, though this RFC does not specify a way.
  
Many, though not all, X.3 services are meaningful in the context of
+
  Where requests conflict, or where a user telnet cannot satisfy a
remote terminal processing; for some, it may be desirable to allow
+
  request, the user telnet has the last word, since it does the
local control (by the user) but not remote control (by the server
+
  relevant character processing.  It may allow control from the host
host).  Some functions may not be provided, or provided in only
+
  only, from the user only, may seek a compromise type of processing
limited form, by particular implementations.  In general, an
+
  and so on, at the implementor's discretion.
implementation should follow the Telnet norm of requesting desired
 
service but continuing to function somehow in case it is not
 
available.
 
  
Negotiations are asymmetrical.  Since the user telnet is charged with
+
  Host ("DO") telnets may also ask the user telnet to SEND its current
local character handling while engaged in the session with the remote
+
  parameter values. The user ("WILL") telnet must reply to each SEND
host, the X.3 parameters "belong" to the user side.  The host telnet
+
  message with a RESPONSE-IS message listing the values of all the
requests parameter changes with SET or RESPONSE-SET messagesHost
+
  parameters it knows aboutIt is strongly recommended that all
requests might be on behalf of an application program, for example,
+
  parameters known to the telnet implementor be included in this list,
disabling local echo while a password is being entered.  The user
+
  even if their values cannot be changed.  The intent is to give the
telnet should give its "best effort" to accommodate these requests,
+
  host telnet the most complete information possible about the style of
but guarantees nothing except accurate status reporting.
+
  interaction which the user telnet is providing.
  
A user telnet may allow the local user to request parameter changes
+
  If possible, user telnets should also inform the server host (with an
too, though this RFC does not specify a way.
+
  IS message) whenever local conditions (e.g., user requests) change a
  
Where requests conflict, or where a user telnet cannot satisfy a
 
request, the user telnet has the last word, since it does the
 
relevant character processing.  It may allow control from the host
 
only, from the user only, may seek a compromise type of processing
 
and so on, at the implementor's discretion.
 
  
Host ("DO") telnets may also ask the user telnet to SEND its current
 
parameter values.  The user ("WILL") telnet must reply to each SEND
 
message with a RESPONSE-IS message listing the values of all the
 
parameters it knows about.  It is strongly recommended that all
 
parameters known to the telnet implementor be included in this list,
 
even if their values cannot be changed.  The intent is to give the
 
host telnet the most complete information possible about the style of
 
interaction which the user telnet is providing.
 
  
If possible, user telnets should also inform the server host (with an
+
Levy & Jacobson                                                [Page 4]
IS message) whenever local conditions (e.g., user requests) change a
 
  
 +
RFC 1053                Telnet X.3 PAD Option                April 1988
  
  
 +
  parameter's state.  This may not be feasible in some circumstances,
 +
  and such behavior is negotiable -- see the discussion of parameter 0.
  
 +
  Note that there are no "error" messages defined in section 2.  Almost
 +
  all detectable errors (use of nonexisistent parameters or undefined
 +
  values for known parameters) are indistinguishable from valid uses of
 +
  options known to one peer but not the other.  Hosts will normally
 +
  wish to poll the user telnet's state after making a request anyway,
 +
  so error responses do not seem to be needed.
  
parameter's state.  This may not be feasible in some circumstances,
+
  The protocol messages listed in section 2 are to be used as follows.
and such behavior is negotiable -- see the discussion of parameter 0.
 
  
Note that there are no "error" messages defined in section 2Almost
+
  SET and RESPONSE-SET ask the user telnet to change its values for the
all detectable errors (use of nonexisistent parameters or undefined
+
  given X.3 parameters.  The user telnet ignores unrecognized
values for known parameters) are indistinguishable from valid uses of
+
  parameters; it sends no replyThe host sends SET to begin a
options known to one peer but not the otherHosts will normally
+
  negotiation, when some event on the host side causes a change in the
wish to poll the user telnet's state after making a request anyway,
+
  desired set of parameters.  The host sends RESPONSE-SET to continue
so error responses do not seem to be needed.
+
  negotiation, when it is dissatisfied with the user telnet's choice of
 +
  parameters indicated in a RESPONSE-IS messageTypically, the host
 +
  will test the user telnet's chosen behavior by issuing a SEND message
 +
  following the SET or RESPONSE-SET, though the user telnet should not
 +
  rely on this.
  
The protocol messages listed in section 2 are to be used as follows.
+
  A SEND message from the host demands that the user telnet send
 +
  RESPONSE-IS.
  
SET and RESPONSE-SET ask the user telnet to change its values for the
+
  IS and RESPONSE-IS inform the host telnet of the current states of
given X.3 parameters.  The user telnet ignores unrecognized
+
  some or all of the user telnet's parameters.  The user telnet sends
parameters; it sends no reply.  The host sends SET to begin a
+
  IS when the user telnet changes a parameter for some local reason,
negotiation, when some event on the host side causes a change in the
+
  e.g., at a request from the (human) user.  An IS message may but need
desired set of parameters. The host sends RESPONSE-SET to continue
+
  not list all parameters, e.g., it might list just those which
negotiation, when it is dissatisfied with the user telnet's choice of
+
  changed.
parameters indicated in a RESPONSE-IS messageTypically, the host
 
will test the user telnet's chosen behavior by issuing a SEND message
 
following the SET or RESPONSE-SET, though the user telnet should not
 
rely on this.
 
  
A SEND message from the host demands that the user telnet send
+
  It sends RESPONSE-IS in answer to each SEND request from the host.
RESPONSE-IS.
+
  Every RESPONSE-IS should list ALL X.3-PAD parameters known to the
 +
  user telnet implementor, even those which cannot be changed.  Any
 +
  host requests (SET or RESPONSE-SET) received before a SEND message
 +
  should be processed before sending the answering RESPONSE-IS, so that
 +
  their effects are reflected in the parameter values indicated there.
  
IS and RESPONSE-IS inform the host telnet of the current states of
+
  To permit synchronization (which SEND is this an answer to?), the
some or all of the user telnet's parameters.  The user telnet sends
+
  user telnet should count SEND messages, and send exactly one
IS when the user telnet changes a parameter for some local reason,
+
  RESPONSE-IS per SEND.
e.g., at a request from the (human) user.  An IS message may but need
 
not list all parameters, e.g., it might list just those which
 
changed.
 
  
It sends RESPONSE-IS in answer to each SEND request from the host.
+
  One might think that this protocol could be implemented with only
Every RESPONSE-IS should list ALL X.3-PAD parameters known to the
+
  SET, SEND and IS messagesThe seemingly redundant RESPONSE-SET and
user telnet implementor, even those which cannot be changedAny
+
  RESPONSE-IS codes are needed to let both the user and host telnets
host requests (SET or RESPONSE-SET) received before a SEND message
+
  distinguish new peer requests from attempts to renegotiate previous
should be processed before sending the answering RESPONSE-IS, so that
 
their effects are reflected in the parameter values indicated there.
 
  
To permit synchronization (which SEND is this an answer to?), the
 
user telnet should count SEND messages, and send exactly one
 
RESPONSE-IS per SEND.
 
  
One might think that this protocol could be implemented with only
 
SET, SEND and IS messages.  The seemingly redundant RESPONSE-SET and
 
RESPONSE-IS codes are needed to let both the user and host telnets
 
distinguish new peer requests from attempts to renegotiate previous
 
  
 +
Levy & Jacobson                                                [Page 5]
  
 +
RFC 1053                Telnet X.3 PAD Option                April 1988
  
  
 +
  actions, while preventing potential infinite negotiation loops.
  
actions, while preventing potential infinite negotiation loops.
+
  SET and IS messages are sent when the host or user telnet wishes to
 +
  inform its peer of a change in the X.3 processing mode desired by
 +
  some higher level entity.  This might happen at initialization, or on
 +
  user or application-program request.  The important thing is that
 +
  these messages are NOT sent merely in response to another X.3-PAD
 +
  message from the peer.
  
SET and IS messages are sent when the host or user telnet wishes to
+
  RESPONSE-SET and RESPONSE-IS messages should be sent in reply to a
inform its peer of a change in the X.3 processing mode desired by
+
  peer's [RESPONSE-]IS or SEND message.  They reflect negotiation at
some higher level entity.  This might happen at initialization, or on
+
  the telnet level, rather than changes in the higher-level
user or application-program requestThe important thing is that
+
  environmentA host which sends a SEND message may complain about
these messages are NOT sent merely in response to another X.3-PAD
+
  the status indicated in the answering RESPONSE-IS by sending
message from the peer.
+
  RESPONSE-SET but not SET.
  
RESPONSE-SET and RESPONSE-IS messages should be sent in reply to a
+
  Under this scheme, a possible rule for preventing infinite
peer's [RESPONSE-]IS or SEND messageThey reflect negotiation at
+
  negotiations would be for the host to send at most zero, one, or some
the telnet level, rather than changes in the higher-level
+
  fixed number, of RESPONSE-SET messages following receipt of one IS
environment.  A host which sends a SEND message may complain about
+
  message or one higher-level host-side requestAfter that, the host
the status indicated in the answering RESPONSE-IS by sending
+
  telnet simply accepts the user telnet's last offer as well as it can.
RESPONSE-SET but not SET.
+
  Note that only the host needs to worry about loop prevention, since
 +
  it does all the asking.
  
Under this scheme, a possible rule for preventing infinite
+
  A given parameter should not be listed more than once in a single
negotiations would be for the host to send at most zero, one, or some
+
  message.
fixed number, of RESPONSE-SET messages following receipt of one IS
 
message or one higher-level host-side request.  After that, the host
 
telnet simply accepts the user telnet's last offer as well as it can.
 
Note that only the host needs to worry about loop prevention, since
 
it does all the asking.
 
  
A given parameter should not be listed more than once in a single
+
  A sample negotiation might look like this.  (Here line breaks are not
message.
+
  meaningful; ASCII carriage returns and line feeds are indicated by
 +
  <CR> and <LF>; other characters stand for themselves.  In the IAC SB
 +
  octet values.)
  
A sample negotiation might look like this.  (Here line breaks are not
 
meaningful; ASCII carriage returns and line feeds are indicated by
 
<CR> and <LF>; other characters stand for themselves.  In the IAC SB
 
octet values.)
 
  
  
Line 311: Line 336:
  
  
 +
Levy & Jacobson                                                [Page 6]
  
 +
RFC 1053                Telnet X.3 PAD Option                April 1988
  
  
      Host:  <CR><LF>%
+
        Host:  <CR><LF>%
                                      (User types "cd gibber<CR>")
+
                                          (User types "cd gibber<CR>")
      User:  cd gibber<CR><LF>
+
        User:  cd gibber<CR><LF>
      Host:  Password required.<CR>LF>
+
        Host:  Password required.<CR>LF>
                                            (Host disables echoing)
+
                                              (Host disables echoing)
          IAC SB X.3-PAD SET 2 0 IAC SE
+
              IAC SB X.3-PAD SET 2 0 IAC SE
                                            (Host polls for status)
+
                                              (Host polls for status)
          IAC SB X.3-PAD SEND IAC SE
+
              IAC SB X.3-PAD SEND IAC SE
      User:                        (User telnet has disabled local
+
        User:                        (User telnet has disabled local
                                    echo.  Note that some
+
                                      echo.  Note that some
                                    parameters (e.g., 9, 10, 11)
+
                                      parameters (e.g., 9, 10, 11)
                                    are not present, presumably
+
                                      are not present, presumably
                                    unimplemented, and a few
+
                                      unimplemented, and a few
                                    extension parameters
+
                                      extension parameters
                                    (129, 134) in extension
+
                                      (129, 134) in extension
                                    set 1 are also defined.)
+
                                      set 1 are also defined.)
            IAC SB X.3-PAD RESPONSE-IS 1 29 2 0 3 2 4 0 5 0 7 17 8 0
+
              IAC SB X.3-PAD RESPONSE-IS 1 29 2 0 3 2 4 0 5 0 7 17 8 0
                                      12 0 13 3 15 1 16 8 17 21 18 0
+
                                        12 0 13 3 15 1 16 8 17 21 18 0
                                      128 1 129 23 134 1 IAC SE
+
                                        128 1 129 23 134 1 IAC SE
      Host:    password:
+
        Host:    password:
                                          (User types "squeak<CR>",
+
                                              (User types "squeak<CR>",
      User:    squeak<CR><LF>                  which is not echoed.)
+
        User:    squeak<CR><LF>                  which is not echoed.)
      Host:                                (Host re-enables echoing)
+
        Host:                                (Host re-enables echoing)
              IAC SB X.3-PAD SET 2 1 IAC SE
+
                  IAC SB X.3-PAD SET 2 1 IAC SE
                                          (Host polls for status)
+
                                              (Host polls for status)
              IAC SB X.3-PAD SEND IAC SE
+
                  IAC SB X.3-PAD SEND IAC SE
      User:
+
        User:
            IAC SB X.3-PAD RESPONSE-IS 1 29 2 1 3 2 4 0 5 0 7 17 8 0
+
                IAC SB X.3-PAD RESPONSE-IS 1 29 2 1 3 2 4 0 5 0 7 17 8 0
                                      12 0 13 3 15 1 16 8 17 21 18 0
+
                                          12 0 13 3 15 1 16 8 17 21 18 0
                                      128 1 129 23 134 1 IAC SE
+
                                          128 1 129 23 134 1 IAC SE
  
== Parameters ==
+
6.  Parameters
  
In outline, the X.3-PAD option uses the following parameters.
+
  In outline, the X.3-PAD option uses the following parameters.
  
  Parameter 0 indicates whether the user telnet notifies the host
+
      Parameter 0 indicates whether the user telnet notifies the host
  about parameter changes made for local reasons.
+
      about parameter changes made for local reasons.
  
  Parameters 1 through 22 are basically those of CCITT X.3, with
+
      Parameters 1 through 22 are basically those of CCITT X.3, with
  some changes in interpretation; they are listed in detail below.
+
      some changes in interpretation; they are listed in detail below.
  
  Parameters 23 through 127 are reserved for potential extensions to
+
      Parameters 23 through 127 are reserved for potential extensions to
  CCITT's X.3 definition.
+
      CCITT's X.3 definition.
  
  Parameter 128 selects an "extension set", determining the meaning
+
      Parameter 128 selects an "extension set", determining the meaning
  of parameters 129 through 255.  One extension set is proposed in
+
      of parameters 129 through 255.  One extension set is proposed in
  this RFC, others may be added.  The extension mechanism is
+
      this RFC, others may be added.  The extension mechanism is
  explained under parameter 128's description.
+
      explained under parameter 128's description.
  
  
  
 +
Levy & Jacobson                                                [Page 7]
  
 +
RFC 1053                Telnet X.3 PAD Option                April 1988
  
  Parameters 129 through 255 are meaningful only when defined in the
 
  extension set indicated by the current value of parameter 128.
 
  
It should NOT be assumed that all implementations will necessarily
+
      Parameters 129 through 255 are meaningful only when defined in the
support all parameters defined here, or all values of those
+
      extension set indicated by the current value of parameter 128.
parameters.  Supported parameter/value combinations, however, should
 
behave as described here.
 
  
The following parameter is specific to this Telnet option.
+
  It should NOT be assumed that all implementations will necessarily
 +
  support all parameters defined here, or all values of those
 +
  parameters.  Supported parameter/value combinations, however, should
 +
  behave as described here.
  
Parameter 0 -- Notify host of user-initiated parameter changes.
+
  The following parameter is specific to this Telnet option.
  
  Code 0 -- Host is not notified.
+
  Parameter 0 -- Notify host of user-initiated parameter changes.
  Code 1 -- User telnet notifies host by sending IS message.
 
  
  If the user telnet, for some local reason, changes a parameter,
+
    Code 0 -- Host is not notified.
  should it send an IS message to the host?  This is desirable, since
+
    Code 1 -- User telnet notifies host by sending IS message.
  the host telnet cannot be sure of knowing the user telnet's current
 
  status otherwise. On the other hand, some user telnets may be
 
  unable to send notification.  Consider a user calling from an X.25
 
  PAD through an X.25-to-telnet gateway.  The user may change local
 
  PAD parameters freely, but since normal PADs send no message when
 
  this happens, the gateway cannot inform the host telnet.  Moreover,
 
  some sloppy host telnets may not wish to know about user parameter
 
  changes.
 
  
  In normal usage, the host will ask to SET parameter 0 to its
+
    If the user telnet, for some local reason, changes a parameter,
  preferred state upon initialization; the user telnet accepts the
+
    should it send an IS message to the host?  This is desirable, since
  setting if it can; then the host polls (using SEND) for the user
+
    the host telnet cannot be sure of knowing the user telnet's current
  telnet's decision.  A disappointed host might periodically poll for
+
    status otherwise.  On the other hand, some user telnets may be
  changes, or admonish the (human) user not to change parameters, or
+
    unable to send notification.  Consider a user calling from an X.25
  remain silent and simply work oddly if changes are made.
+
    PAD through an X.25-to-telnet gateway.  The user may change local
 +
    PAD parameters freely, but since normal PADs send no message when
 +
    this happens, the gateway cannot inform the host telnet.  Moreover,
 +
    some sloppy host telnets may not wish to know about user parameter
 +
    changes.
 +
 
 +
    In normal usage, the host will ask to SET parameter 0 to its
 +
    preferred state upon initialization; the user telnet accepts the
 +
    setting if it can; then the host polls (using SEND) for the user
 +
    telnet's decision.  A disappointed host might periodically poll for
 +
    changes, or admonish the (human) user not to change parameters, or
 +
    remain silent and simply work oddly if changes are made.
  
 
The following parameters are as defined by the 1984 CCITT X.3 standard.
 
The following parameters are as defined by the 1984 CCITT X.3 standard.
Line 406: Line 436:
 
Parameter 1 -- Character to escape to local telnet command mode.
 
Parameter 1 -- Character to escape to local telnet command mode.
  
  Code 0 -- No ASCII character performs this function (though
+
    Code 0 -- No ASCII character performs this function (though
            some special mechanism, e.g., a function key, still may).
+
              some special mechanism, e.g., a function key, still may).
  Code 1 -- DLE (ASCII code 16).
+
    Code 1 -- DLE (ASCII code 16).
  Codes 32 through 126 -- ASCII code of the character.
+
    Codes 32 through 126 -- ASCII code of the character.
  
  Codes 2 through 31 are not defined by X.3, but might also be taken
+
    Codes 2 through 31 are not defined by X.3, but might also be taken
  to refer to the corresponding ASCII control characters.  X.3 seems
+
    to refer to the corresponding ASCII control characters.  X.3 seems
  to be unable to name SOH (control-A) as a command escape character.
+
    to be unable to name SOH (control-A) as a command escape character.
  
  
  
  
 +
Levy & Jacobson                                                [Page 8]
 +
 +
RFC 1053                Telnet X.3 PAD Option                April 1988
  
  
 
Parameter 2 -- Local echo of characters typed by the user.
 
Parameter 2 -- Local echo of characters typed by the user.
  
  Code 0 -- No local echo.
+
    Code 0 -- No local echo.
  Code 1 -- Local echo.
+
    Code 1 -- Local echo.
  
  Several echoing styles are possible.  Parameter 13 selects whether
+
    Several echoing styles are possible.  Parameter 13 selects whether
  a carriage return echoes as itself or as CR LF.  Parameter 20 may
+
    a carriage return echoes as itself or as CR LF.  Parameter 20 may
  suppress echoing of particular ASCII characters.  The extension
+
    suppress echoing of particular ASCII characters.  The extension
  parameter 134 selects a style for echoing non-printing characters
+
    parameter 134 selects a style for echoing non-printing characters
  such as ESC.
+
    such as ESC.
  
 
Parameter 3 -- Set of forwarding characters.
 
Parameter 3 -- Set of forwarding characters.
  
  The value is bit-encoded; each nonzero bit specifies a set of
+
    The value is bit-encoded; each nonzero bit specifies a set of
  characters.  The user telnet should accept characters from the
+
    characters.  The user telnet should accept characters from the
  user's keyboard, buffering them until it receives any of the
+
    user's keyboard, buffering them until it receives any of the
  specified characters (or until some other forwarding condition is
+
    specified characters (or until some other forwarding condition is
  satisfied, see below), and then sending the buffer to the host.
+
    satisfied, see below), and then sending the buffer to the host.
  
  It may forward earlier if necessary, e.g., if it runs out of buffer
+
    It may forward earlier if necessary, e.g., if it runs out of buffer
  space.  It MUST eventually forward after receiving one of the
+
    space.  It MUST eventually forward after receiving one of the
  indicated characters.
+
    indicated characters.
  
  Code 0 -- No forwarding characters.
+
    Code 0 -- No forwarding characters.
  Code 1 -- Alphanumeric characters (a-z, A-Z, 0-9).
+
    Code 1 -- Alphanumeric characters (a-z, A-Z, 0-9).
  Code 2 -- CR.
+
    Code 2 -- CR.
  Code 4 -- ESC, BEL, ENQ, ACK.
+
    Code 4 -- ESC, BEL, ENQ, ACK.
  Code 8 -- DEL, CAN, DC2.
+
    Code 8 -- DEL, CAN, DC2.
  Code 16 -- ETX, EOT.
+
    Code 16 -- ETX, EOT.
  Code 32 -- HT, LF, VT, FF.
+
    Code 32 -- HT, LF, VT, FF.
  Code 64 -- ASCII character codes 0 through 31 not listed above.
+
    Code 64 -- ASCII character codes 0 through 31 not listed above.
  
  Note that there is no way provided here to forward on printable,
+
    Note that there is no way provided here to forward on printable,
  non-alphanumeric characters (punctuation marks).
+
    non-alphanumeric characters (punctuation marks).
  
  Codes may be added to select the union of the associated sets of
+
    Codes may be added to select the union of the associated sets of
  characters.
+
    characters.
  
 
Parameter 4 -- Forward after idle time.
 
Parameter 4 -- Forward after idle time.
  
  When this parameter is nonzero, the user telnet sends its input
+
    When this parameter is nonzero, the user telnet sends its input
  buffer to the host after a given period in which no characters are
+
    buffer to the host after a given period in which no characters are
  typed, even if no forwarding character was received.
+
    typed, even if no forwarding character was received.
  
  Code 0 -- Infinite time limit.
+
    Code 0 -- Infinite time limit.
  Codes 1 through 255 -- Time limit in 1/20 second units.
+
    Codes 1 through 255 -- Time limit in 1/20 second units.
  
  The value "1" may be taken to mean "forward immediately" if timed
+
    The value "1" may be taken to mean "forward immediately" if timed
  
  
  
 +
Levy & Jacobson                                                [Page 9]
  
 +
RFC 1053                Telnet X.3 PAD Option                April 1988
  
  input is inconvenient to provide.  For other values, when timing is
 
  available but the exact requested value is not, rounding to larger
 
  time delays is suggested.  If timing is requested but none is
 
  available, immediate forwarding on every character is much
 
  preferred over an infinite time limit.
 
  
  Note the interaction with parameter 15, Local editing, and the
+
    input is inconvenient to provide.  For other values, when timing is
  notes made under that heading.
+
    available but the exact requested value is not, rounding to larger
 +
    time delays is suggested.  If timing is requested but none is
 +
    available, immediate forwarding on every character is much
 +
    preferred over an infinite time limit.
 +
 
 +
    Note the interaction with parameter 15, Local editing, and the
 +
    notes made under that heading.
  
 
Parameter 5 -- Flow control of user-to-host data.
 
Parameter 5 -- Flow control of user-to-host data.
  
  A user telnet may be overwhelmed by data typed by the user.  If
+
    A user telnet may be overwhelmed by data typed by the user.  If
  parameter 5 is 1, it may output X-OFF (DC3, ASCII code 19) to ask
+
    parameter 5 is 1, it may output X-OFF (DC3, ASCII code 19) to ask
  the user to suspend input and X-ON (DC1, ASCII code 17) when the
+
    the user to suspend input and X-ON (DC1, ASCII code 17) when the
  user may resume typing.
+
    user may resume typing.
  
  Code 0 -- X-OFF and X-ON considered normal output data.
+
    Code 0 -- X-OFF and X-ON considered normal output data.
  Code 1 -- X-OFF and X-ON used to control user input.
+
    Code 1 -- X-OFF and X-ON used to control user input.
  
  The extension parameters 130 and 131, if defined, specify other
+
    The extension parameters 130 and 131, if defined, specify other
  codes to be used instead of ASCII DC3 and DC1.
+
    codes to be used instead of ASCII DC3 and DC1.
  
 
Parameter 6, referring to messages sent from the PAD to the user,
 
Parameter 6, referring to messages sent from the PAD to the user,
            does not seem to be relevant in this context.
+
                does not seem to be relevant in this context.
  
 
Parameter 7 -- Function of Break, Interrupt, Attention, etc.
 
Parameter 7 -- Function of Break, Interrupt, Attention, etc.
  
  This parameter describes handling of some special key or other
+
    This parameter describes handling of some special key or other
  character, implementation-defined, on the user's keyboard.  It is
+
    character, implementation-defined, on the user's keyboard.  It is
  bit-encoded; codes may be added to select multiple functions.
+
    bit-encoded; codes may be added to select multiple functions.
  Multiple functions may be performed in any order.  Any messages
+
    Multiple functions may be performed in any order.  Any messages
  generated should be promptly sent to the host.
+
    generated should be promptly sent to the host.
  
  Code 0 -- No action.
+
    Code 0 -- No action.
  Code 1 -- Send interrupt packet (Telnet IAC IP).
+
    Code 1 -- Send interrupt packet (Telnet IAC IP).
  Code 2 -- Reset (break Telnet connection).
+
    Code 2 -- Reset (break Telnet connection).
  Code 4 -- Discard input from user not yet consumed by host.
+
    Code 4 -- Discard input from user not yet consumed by host.
  Code 8 -- Escape to local Telnet command mode.
+
    Code 8 -- Escape to local Telnet command mode.
  Code 16 -- Discard output from host (see parameter 8).
+
    Code 16 -- Discard output from host (see parameter 8).
  
  The X.25 'Interrupt', 'Reset', and 'Indication of Break' messages
+
    The X.25 'Interrupt', 'Reset', and 'Indication of Break' messages
  are here translated to Telnet equivalents.  See section 8 for
+
    are here translated to Telnet equivalents.  See section 8 for
  suggestions on discarding input and output.
+
    suggestions on discarding input and output.
  
  
Line 524: Line 560:
  
  
 +
Levy & Jacobson                                                [Page 10]
 +
 +
RFC 1053                Telnet X.3 PAD Option                April 1988
  
  
 
Parameter 8 -- Discarding output from host.
 
Parameter 8 -- Discarding output from host.
  
  This parameter is intended as a flag, indicating whether host
+
    This parameter is intended as a flag, indicating whether host
  output is being ignored.
+
    output is being ignored.
  
  Code 0 -- Host output is sent to user.
+
    Code 0 -- Host output is sent to user.
  Code 1 -- Host output is discarded.
+
    Code 1 -- Host output is discarded.
  
  This parameter is normally used in conjunction with parameter 7
+
    This parameter is normally used in conjunction with parameter 7
  when the 16's bit (Discard output on Break/Interrupt/Attention) is
+
    when the 16's bit (Discard output on Break/Interrupt/Attention) is
  set.  An implementation is suggested in section 8 of this RFC.
+
    set.  An implementation is suggested in section 8 of this RFC.
  
  Note that, if a signal from the user causes parameter 8 to be
+
    Note that, if a signal from the user causes parameter 8 to be
  changed and parameter 0 is set to 1, an X.3-PAD IS message should
+
    changed and parameter 0 is set to 1, an X.3-PAD IS message should
  be sent to the host.
+
    be sent to the host.
  
 
Parameter 9 -- Padding after carriage return.
 
Parameter 9 -- Padding after carriage return.
  
  This parameter selects insertion of ASCII NUL padding characters
+
    This parameter selects insertion of ASCII NUL padding characters
  after output of each carriage return.
+
    after output of each carriage return.
  
  Codes 0 through 7 -- Insert that many padding characters.
+
    Codes 0 through 7 -- Insert that many padding characters.
  
 
Parameter 10 -- Line folding.
 
Parameter 10 -- Line folding.
  
  Output lines may be folded (e.g., by insertion of carriage return
+
    Output lines may be folded (e.g., by insertion of carriage return
  and line feed) when they exceed a specified width.
+
    and line feed) when they exceed a specified width.
  
  Code 0 -- No output line folding.
+
    Code 0 -- No output line folding.
  Codes 1 through 255 -- Fold lines after that many characters.
+
    Codes 1 through 255 -- Fold lines after that many characters.
  
 
Parameter 11 -- Bit rate.
 
Parameter 11 -- Bit rate.
  
  This parameter indicates the serial data rate of the user's
+
    This parameter indicates the serial data rate of the user's
  terminal, if any.  Though CCITT X.3 considers this parameter to be
+
    terminal, if any.  Though CCITT X.3 considers this parameter to be
  read-only, it may be meaningful to allow the host to set as well as
+
    read-only, it may be meaningful to allow the host to set as well as
  read this value, thus changing the user's line speed dynamically.
+
    read this value, thus changing the user's line speed dynamically.
  
  Code 0 -- 110 bps            Code 10 -- 50 bps
+
    Code 0 -- 110 bps            Code 10 -- 50 bps
  Code 1 -- 134.5 bps          Code 11 -- 75 bps in, 1200 out
+
    Code 1 -- 134.5 bps          Code 11 -- 75 bps in, 1200 out
  Code 2 -- 300 bps            Code 12 -- 2400 bps
+
    Code 2 -- 300 bps            Code 12 -- 2400 bps
  Code 3 -- 1200 bps          Code 13 -- 4800 bps
+
    Code 3 -- 1200 bps          Code 13 -- 4800 bps
  Code 4 -- 600 bps            Code 14 -- 9600 bps
+
    Code 4 -- 600 bps            Code 14 -- 9600 bps
  Code 5 -- 75 bps            Code 15 -- 19200 bps
+
    Code 5 -- 75 bps            Code 15 -- 19200 bps
  Code 6 -- 150 bps            Code 16 -- 48000 bps
+
    Code 6 -- 150 bps            Code 16 -- 48000 bps
  Code 7 -- 1800 bps          Code 17 -- 56000 bps
+
    Code 7 -- 1800 bps          Code 17 -- 56000 bps
  Code 8 -- 200 bps            Code 18 -- 64000 bps
+
    Code 8 -- 200 bps            Code 18 -- 64000 bps
  Code 9 -- 100 bps
+
    Code 9 -- 100 bps
  
  
  
 +
Levy & Jacobson                                                [Page 11]
 +
 +
RFC 1053                Telnet X.3 PAD Option                April 1988
  
  
 
Parameter 12 -- Flow control of host-to-user data.
 
Parameter 12 -- Flow control of host-to-user data.
  
  When this parameter is 1, the user may type X-OFF (DC3, ASCII code
+
    When this parameter is 1, the user may type X-OFF (DC3, ASCII code
  19) to suspend printing output, and X-ON (DC1, ASCII code 17) to
+
    19) to suspend printing output, and X-ON (DC1, ASCII code 17) to
  resume output.
+
    resume output.
  
  Code 0 -- X-OFF and X-ON are sent as data to host.
+
    Code 0 -- X-OFF and X-ON are sent as data to host.
  Code 1 -- X-OFF and X-ON control output.
+
    Code 1 -- X-OFF and X-ON control output.
  
  See also the extension parameters 130, 131 and 132.
+
    See also the extension parameters 130, 131 and 132.
  
 
Parameter 13 -- Line feed insertion; Telnet CR LF vs CR NUL.
 
Parameter 13 -- Line feed insertion; Telnet CR LF vs CR NUL.
  
  The CCITT uses this parameter to select whether a typed CR should
+
    The CCITT uses this parameter to select whether a typed CR should
  be sent as CR or CR-LF, whether an output CR should have a LF
+
    be sent as CR or CR-LF, whether an output CR should have a LF
  printed after it, and whether an echoed CR should be echoed with an
+
    printed after it, and whether an echoed CR should be echoed with an
  accompanying LF.
+
    accompanying LF.
  
  Here, it resolves the questions of mapping between the Telnet CR-LF
+
    Here, it resolves the questions of mapping between the Telnet CR-LF
  sequence and single ASCII codes (i.e., when the user presses the
+
    sequence and single ASCII codes (i.e., when the user presses the
  carriage return key, should CR LF or CR NUL be sent to the host?
+
    carriage return key, should CR LF or CR NUL be sent to the host?
  When the host sends CR LF, should the user see CR LF or merely CR?)
+
    When the host sends CR LF, should the user see CR LF or merely CR?)
  
  The value is bit-encoded; codes may be added to select multiple
+
    The value is bit-encoded; codes may be added to select multiple
  functions.
+
    functions.
  
  Code 0 -- No line feed insertion
+
    Code 0 -- No line feed insertion
            (typed CR sent as CR NUL; host CR LF printed as CR).
+
              (typed CR sent as CR NUL; host CR LF printed as CR).
  Code 1 -- Add line feed on output (host CR LF printed as CR LF).
+
    Code 1 -- Add line feed on output (host CR LF printed as CR LF).
  Code 2 -- Add line feed on input (typed CR sent as CR LF to host).
+
    Code 2 -- Add line feed on input (typed CR sent as CR LF to host).
  Code 4 -- When echoing a typed CR locally, echo as CR LF.
+
    Code 4 -- When echoing a typed CR locally, echo as CR LF.
  
  Note the interaction with the TRANSMIT-BINARY Telnet option [5].
+
    Note the interaction with the TRANSMIT-BINARY Telnet option [5].
  If the host has said WILL TRANSMIT-BINARY, then CR has no special
+
    If the host has said WILL TRANSMIT-BINARY, then CR has no special
  meaning on output; it always stands for the single character CR
+
    meaning on output; it always stands for the single character CR
  regardless of this parameter's value.  If the user telnet has said
+
    regardless of this parameter's value.  If the user telnet has said
  WILL TRANSMIT-BINARY, a typed CR should likewise always be sent as
+
    WILL TRANSMIT-BINARY, a typed CR should likewise always be sent as
  itself and not as CR LF or CR NUL.
+
    itself and not as CR LF or CR NUL.
  
 
Parameter 14 -- Output padding after line feed.
 
Parameter 14 -- Output padding after line feed.
  
  Gives the number of ASCII NUL padding characters to be sent to the
+
    Gives the number of ASCII NUL padding characters to be sent to the
  user's terminal after each output line feed.
+
    user's terminal after each output line feed.
 +
 
 +
    Codes 0 through 7 -- Send that many padding characters.
  
  Codes 0 through 7 -- Send that many padding characters.
 
  
  
Line 629: Line 672:
  
  
 +
Levy & Jacobson                                                [Page 12]
  
 +
RFC 1053                Telnet X.3 PAD Option                April 1988
  
  
 
Parameter 15 -- Local editing.
 
Parameter 15 -- Local editing.
  
  If this parameter is 1, the character delete, line delete and line
+
    If this parameter is 1, the character delete, line delete and line
  reprint functions (parameters 16, 17 and 18), if implemented,
+
    reprint functions (parameters 16, 17 and 18), if implemented,
  should be enabled.  Data should be sent to the host when a
+
    should be enabled.  Data should be sent to the host when a
  forwarding character (see parameter 3) is typed or in case the user
+
    forwarding character (see parameter 3) is typed or in case the user
  telnet's input buffer becomes full.
+
    telnet's input buffer becomes full.
  
  Note the interaction with parameter 4, Forward after idle time.
+
    Note the interaction with parameter 4, Forward after idle time.
  User telnets need not handle the case where idle-time forwarding
+
    User telnets need not handle the case where idle-time forwarding
  and local editing are both enabled, i.e., the host should
+
    and local editing are both enabled, i.e., the host should
  explicitly request changing parameter 4 to 0 along with setting
+
    explicitly request changing parameter 4 to 0 along with setting
  parameter 15 to 1.
+
    parameter 15 to 1.
  
  Code 0 -- No input editing.  Any editing characters are considered
+
    Code 0 -- No input editing.  Any editing characters are considered
            data.
+
              data.
  Code 1 -- Input editing.  Editing characters edit the input buffer.
+
    Code 1 -- Input editing.  Editing characters edit the input buffer.
  
 
Parameter 16 -- Character-delete character.
 
Parameter 16 -- Character-delete character.
  
  While local editing (parameter 15) is enabled, typing this
+
    While local editing (parameter 15) is enabled, typing this
  character erases the last character in the editing buffer, if any.
+
    character erases the last character in the editing buffer, if any.
  When editing is disabled, this character is not treated specially.
+
    When editing is disabled, this character is not treated specially.
  
  Code 0 -- No character has this function.
+
    Code 0 -- No character has this function.
  Codes 1 through 127 -- ASCII code of character-delete character.
+
    Codes 1 through 127 -- ASCII code of character-delete character.
  
  See also parameter 19.
+
    See also parameter 19.
  
 
Parameter 17 -- Line-delete character.
 
Parameter 17 -- Line-delete character.
  
  While local editing (parameter 15) is enabled, this character
+
    While local editing (parameter 15) is enabled, this character
  erases the entire contents of the editing buffer.  When editing is
+
    erases the entire contents of the editing buffer.  When editing is
  disabled, this character is not treated specially.
+
    disabled, this character is not treated specially.
  
  Code 0 -- No character has this function.
+
    Code 0 -- No character has this function.
  Codes 1 through 127 -- ASCII code of line-delete character.
+
    Codes 1 through 127 -- ASCII code of line-delete character.
  
  See also parameter 19.
+
    See also parameter 19.
  
 
Parameter 18 -- Line-display character.
 
Parameter 18 -- Line-display character.
  
  While local editing (parameter 15) is enabled, typing this
+
    While local editing (parameter 15) is enabled, typing this
  character causes the current contents of the editing buffer to be
+
    character causes the current contents of the editing buffer to be
  printed on the user's terminal; nothing is sent to the host.  When
+
    printed on the user's terminal; nothing is sent to the host.  When
  editing is disabled, this character is not treated specially.
+
    editing is disabled, this character is not treated specially.
 +
 
 +
    Code 0 -- No character has this function.
  
  Code 0 -- No character has this function.
 
  
  
 +
Levy & Jacobson                                                [Page 13]
  
 +
RFC 1053                Telnet X.3 PAD Option                April 1988
  
  
  Codes 1 through 127 -- ASCII code of line-display character.
+
    Codes 1 through 127 -- ASCII code of line-display character.
  
 
Parameter 19 -- Editing service signals.
 
Parameter 19 -- Editing service signals.
  
  This determines what is echoed to the user when local editing is
+
    This determines what is echoed to the user when local editing is
  enabled and the character-delete or line-delete character is
+
    enabled and the character-delete or line-delete character is
  entered.
+
    entered.
  
  Code 0 -- Nothing is echoed.
+
    Code 0 -- Nothing is echoed.
  Code 1 -- Editing style is suitable for printing terminals.
+
    Code 1 -- Editing style is suitable for printing terminals.
  Code 2 -- Editing style is suitable for display terminals.
+
    Code 2 -- Editing style is suitable for display terminals.
  Codes 8 and 32-126 -- Echo that ASCII character for
+
    Codes 8 and 32-126 -- Echo that ASCII character for
            character-delete.
+
              character-delete.
  
  X.3 is specific on handling character- and line-deletion.  If
+
    X.3 is specific on handling character- and line-deletion.  If
  parameter 19 is 1, echo character-delete with a "line delete with
+
    parameter 19 is 1, echo character-delete with a "line delete with
  three X's followed by CR LF.  If 2, a character-delete echoes BS
+
    three X's followed by CR LF.  If 2, a character-delete echoes BS
  SPACE BS, while a line delete echoes enough BS SPACE BS's to erase
+
    SPACE BS, while a line delete echoes enough BS SPACE BS's to erase
  the entire line.  If 8 or 32-126, character-delete echoes that
+
    the entire line.  If 8 or 32-126, character-delete echoes that
  character, and line delete echoes XXX CR LF.  An extension
+
    character, and line delete echoes XXX CR LF.  An extension
  parameter could override these, selecting other styles if desired,
+
    parameter could override these, selecting other styles if desired,
  though none is proposed here.
+
    though none is proposed here.
  
 
Parameter 20 -- Echo mask.
 
Parameter 20 -- Echo mask.
  
  When local echoing, parameter 2, is enabled, each nonzero bit in
+
    When local echoing, parameter 2, is enabled, each nonzero bit in
  this bit-encoded parameter's value suppresses echoing of some
+
    this bit-encoded parameter's value suppresses echoing of some
  subset of ASCII characters.  Adding values suppresses echo for the
+
    subset of ASCII characters.  Adding values suppresses echo for the
  union of the specified subsets.
+
    union of the specified subsets.
 +
 
 +
    Code 0  --  all ASCII characters are echoed.
 +
    Code 1  --  CR is not echoed.
 +
    Code 2  --  LF is not echoed.
 +
    Code 4  --  VT, HT, and FF are not echoed.
 +
    Code 8  --  BEL and BS are not echoed.
 +
    Code 16  --  ESC and ENQ are not echoed.
 +
    Code 32  --  ACK, NAK, STX, SOH, EOT, ETB and ETX are not echoed.
 +
    Code 64  --  Editing characters are not echoed.
 +
    Code 128 --  other non-printing ASCII characters, and DEL, not
 +
                  echoed.
  
  Code 0  --  all ASCII characters are echoed.
+
    Nothing is echoed when parameter 2 is 0. Some characters should
  Code 1  --  CR is not echoed.
+
    not be echoed regardless of parameter 20If any of parameters 5,
  Code 2   --  LF is not echoed.
+
    12, or 22 are enabled (non-zero), then the XON and XOFF characters
  Code 4  --  VT, HT, and FF are not echoed.
+
    should not be echoed.  Nor should the escape-to-local command mode
  Code 8  -- BEL and BS are not echoed.
+
    character, parameter 1.
  Code 16  --  ESC and ENQ are not echoed.
 
  Code 32  --  ACK, NAK, STX, SOH, EOT, ETB and ETX are not echoed.
 
  Code 64 -- Editing characters are not echoed.
 
  Code 128 --  other non-printing ASCII characters, and DEL, not
 
              echoed.
 
  
  Nothing is echoed when parameter 2 is 0.  Some characters should
 
  not be echoed regardless of parameter 20.  If any of parameters 5,
 
  12, or 22 are enabled (non-zero), then the XON and XOFF characters
 
  should not be echoed.  Nor should the escape-to-local command mode
 
  character, parameter 1.
 
  
  
  
  
 +
Levy & Jacobson                                                [Page 14]
  
 +
RFC 1053                Telnet X.3 PAD Option                April 1988
  
  
 
Parameter 21 -- Parity.
 
Parameter 21 -- Parity.
  
  This parameter determines whether parity is checked on user input
+
    This parameter determines whether parity is checked on user input
  and generated on output to the user.  Values may be added to select
+
    and generated on output to the user.  Values may be added to select
  both.
+
    both.
  
  Code 0 -- Parity neither generated nor checked.
+
    Code 0 -- Parity neither generated nor checked.
  Code 1 -- Even parity checked on input.
+
    Code 1 -- Even parity checked on input.
  Code 2 -- Even parity generated on output.
+
    Code 2 -- Even parity generated on output.
  
 
Parameter 22 -- Page wait.
 
Parameter 22 -- Page wait.
  
  If enabled, this parameter causes the user telnet to pause after
+
    If enabled, this parameter causes the user telnet to pause after
  every N lines of output as if X-OFF had been received.  Output
+
    every N lines of output as if X-OFF had been received.  Output
  resumes when X-ON is typed.
+
    resumes when X-ON is typed.
  
  Code 0 -- No pause.
+
    Code 0 -- No pause.
  Codes 1-255 -- Pause after output of that many line feeds.
+
    Codes 1-255 -- Pause after output of that many line feeds.
  
  See also parameters 130, 131 and 132.
+
    See also parameters 130, 131 and 132.
  
 
The following parameters are not part of CCITT X.3, but use the
 
The following parameters are not part of CCITT X.3, but use the
Line 764: Line 815:
 
Parameter 128 -- Extension set number.
 
Parameter 128 -- Extension set number.
  
  This parameter selects one of a potentially large number of
+
    This parameter selects one of a potentially large number of
  "extension sets" -- more or less coherent collections of parameters
+
    "extension sets" -- more or less coherent collections of parameters
  added to the basic X.3 family.  User telnets may support several
+
    added to the basic X.3 family.  User telnets may support several
  extension sets.  The host may determine whether a particular one is
+
    extension sets.  The host may determine whether a particular one is
  supported by trying to set parameter 128.  The user telnet should
+
    supported by trying to set parameter 128.  The user telnet should
  accept the value if it provides some or all of the parameters in
+
    accept the value if it provides some or all of the parameters in
  that set.
+
    that set.
 +
 
 +
    Extension sets might be defined for a variety of purposes.  For
 +
    example, Berkeley UNIX tty emulation, VMS emulation, Telenet's
 +
    extended parameters, French national PDN parameters, and so on.
  
  Extension sets might be defined for a variety of purposesFor
+
    Initial values need not be specified for extension parameters
  example, Berkeley UNIX tty emulation, VMS emulation, Telenet's
+
    (i.e., a host should explicitly negotiate for their values after
  extended parameters, French national PDN parameters, and so on.
+
    selecting an extension set)However, it is recommended that
 +
    default settings give service that resembles normal CCITT X.3
 +
    behavior where possible.
  
  Initial values need not be specified for extension parameters
+
    Extension sets are mutually exclusive.  Different sets may use the
  (i.e., a host should explicitly negotiate for their values after
+
    same parameters (from 129 through 255) for different purposes.
  selecting an extension set).  However, it is recommended that
 
  default settings give service that resembles normal CCITT X.3
 
  behavior where possible.
 
  
  Extension sets are mutually exclusiveDifferent sets may use the
+
    Only one extension set is in effect at a timeThat is, if a host
  same parameters (from 129 through 255) for different purposes.
 
  
  Only one extension set is in effect at a time.  That is, if a host
 
  
  
 +
Levy & Jacobson                                                [Page 15]
  
 +
RFC 1053                Telnet X.3 PAD Option                April 1988
  
  
  requests service X from extension set A, then switches to extension
+
    requests service X from extension set A, then switches to extension
  set B and requests its service Y, it should not expect that service
+
    set B and requests its service Y, it should not expect that service
  X is still being provided.
+
    X is still being provided.
  
  Some values of this parameter are reserved:
+
    Some values of this parameter are reserved:
  
  Code 0 -- Null extension set.  Only (a subset of) the basic CCITT
+
    Code 0 -- Null extension set.  Only (a subset of) the basic CCITT
              X.3 parameters is provided.  Every user telnet should
+
                X.3 parameters is provided.  Every user telnet should
              accept this setting.
+
                accept this setting.
  Code 1 -- (A subset of) the extension set 1 parameters described
+
    Code 1 -- (A subset of) the extension set 1 parameters described
              below is provided.
+
                below is provided.
  Code 255 -- Reserved for purely local (e.g., to a site), non-
+
    Code 255 -- Reserved for purely local (e.g., to a site), non-
              standard collections of extensions.
+
                standard collections of extensions.
  
  Other extension sets may be proposed and assigned set numbers in
+
    Other extension sets may be proposed and assigned set numbers in
  the range 2 through 254.
+
    the range 2 through 254.
  
      Set number are registered with the Internet Assigned Numbers
+
          Set number are registered with the Internet Assigned Numbers
      Coordinator at USC-ISI.  Please contact:
+
          Coordinator at USC-ISI.  Please contact:
  
            Joyce K. Reynolds
+
              Joyce K. Reynolds
            USC Information Sciences Institute
+
              USC Information Sciences Institute
            Suite 1001
+
              Suite 1001
            4676 Admiralty Way
+
              4676 Admiralty Way
            Marina del Rey, CA  90292-6695
+
              Marina del Rey, CA  90292-6695
  
            213-822-1511  [email protected]
+
              213-822-1511  [email protected]
  
 
The following parameters form extension set number 1.
 
The following parameters form extension set number 1.
Line 823: Line 877:
 
Parameter 129, extension set 1 -- Word-delete character.
 
Parameter 129, extension set 1 -- Word-delete character.
  
  Typing this character while local editing is enabled causes the
+
    Typing this character while local editing is enabled causes the
  last word in the editing buffer to be erased.  Several definitions
+
    last word in the editing buffer to be erased.  Several definitions
  for a "word" are in common use; this RFC does not specify one.
+
    for a "word" are in common use; this RFC does not specify one.
  There should be an indication to the user of what was erased.  When
+
    There should be an indication to the user of what was erased.  When
  editing is disabled, this character is not treated specially.
+
    editing is disabled, this character is not treated specially.
  
  Code 0 -- No character has this function.
+
    Code 0 -- No character has this function.
  Codes 1 through 127 -- ASCII code of word-delete character.
+
    Codes 1 through 127 -- ASCII code of word-delete character.
  
 
Parameter 130, extension set 1 -- Flow control OFF character.
 
Parameter 130, extension set 1 -- Flow control OFF character.
  
  Parameter 131, extension set 1 -- Flow control ON character.
+
    Parameter 131, extension set 1 -- Flow control ON character.
  Typing these characters while parameter 12 is enabled cause output
+
    Typing these characters while parameter 12 is enabled cause output
  to be suspended or resumed, respectively.  The user telnet may send
+
    to be suspended or resumed, respectively.  The user telnet may send
  them to the user while parameter 5 is enabled to ask the user to
+
    them to the user while parameter 5 is enabled to ask the user to
  cease or resume supplying input.
+
    cease or resume supplying input.
  
  
  
 +
Levy & Jacobson                                                [Page 16]
  
 +
RFC 1053                Telnet X.3 PAD Option                April 1988
  
  If defined, these parameters should have default values of 19
 
  (ASCII DC3) for parameter 130, and 17 (ASCII DC1) for parameter
 
  131.
 
  
  Code 0 -- No character has this function.
+
    If defined, these parameters should have default values of 19
  Codes 1 through 127 -- Function performed by that ASCII code.
+
    (ASCII DC3) for parameter 130, and 17 (ASCII DC1) for parameter
 +
    131.
 +
 
 +
    Code 0 -- No character has this function.
 +
    Codes 1 through 127 -- Function performed by that ASCII code.
  
 
Parameter 132, extension set 1 -- Host-to-user flow control convention.
 
Parameter 132, extension set 1 -- Host-to-user flow control convention.
  
  Some styles of flow control accept only a particular character
+
    Some styles of flow control accept only a particular character
  (e.g., X-ON) to resume output; others resume on receipt of any
+
    (e.g., X-ON) to resume output; others resume on receipt of any
  character.  This parameter selects which to use.  The default
+
    character.  This parameter selects which to use.  The default
  should be zero, as this matches the X.3 convention.
+
    should be zero, as this matches the X.3 convention.
  
  Code 0 -- Resume output only when correct character is received.
+
    Code 0 -- Resume output only when correct character is received.
  Code 1 -- Resume output when any character is received.
+
    Code 1 -- Resume output when any character is received.
  
 
Parameter 133, extension set 1 -- Alternate Attention, etc., character.
 
Parameter 133, extension set 1 -- Alternate Attention, etc., character.
  
  This character serves as a synonym for the Break, Attention, etc.,
+
    This character serves as a synonym for the Break, Attention, etc.,
  key whose function is given by parameter 7.
+
    key whose function is given by parameter 7.
  
  Code 0 -- No ASCII character has this function
+
    Code 0 -- No ASCII character has this function
            (there may still be a special key or other mechanism).
+
              (there may still be a special key or other mechanism).
  Codes 1 through 127 -- ASCII code of the character.
+
    Codes 1 through 127 -- ASCII code of the character.
  
 
Parameter 134, extension set 1 -- Local echo style.
 
Parameter 134, extension set 1 -- Local echo style.
  
  This parameter selects how non-printing characters should be
+
    This parameter selects how non-printing characters should be
  echoed, when parameter 2 is set to 1.  The default should be zero,
+
    echoed, when parameter 2 is set to 1.  The default should be zero,
  where all characters are simply echoed as themselves (except
+
    where all characters are simply echoed as themselves (except
  possibly carriage return; see parameter 13).
+
    possibly carriage return; see parameter 13).
  
  Code 0 -- All characters echo as themselves.
+
    Code 0 -- All characters echo as themselves.
  Code 1 -- Non-editing control characters echo as ^X for some
+
    Code 1 -- Non-editing control characters echo as ^X for some
            printable character X.
+
              printable character X.
  
  See also parameters 2, Local echo, and 20, Echo mask, which may
+
    See also parameters 2, Local echo, and 20, Echo mask, which may
  suppress echo of some or all characters regardless of this
+
    suppress echo of some or all characters regardless of this
  parameter.
+
    parameter.
  
 
Parameter 135, extension set 1 -- Accept following character as data.
 
Parameter 135, extension set 1 -- Accept following character as data.
  
  After typing this character, the next character entered is accepted
+
    After typing this character, the next character entered is accepted
  as data for transmission to the host even if it would normally have
+
    as data for transmission to the host even if it would normally have
  a special meaning.
+
    a special meaning.
  
  The default should be zero.
+
    The default should be zero.
  
  
  
 +
Levy & Jacobson                                                [Page 17]
  
 +
RFC 1053                Telnet X.3 PAD Option                April 1988
  
  Code 0 -- No character has this function.
+
 
  Codes 1 through 127 -- ASCII code of the character.
+
    Code 0 -- No character has this function.
 +
    Codes 1 through 127 -- ASCII code of the character.
  
 
Parameter 136, extension set 1 -- Character to toggle discarding output.
 
Parameter 136, extension set 1 -- Character to toggle discarding output.
  
  Typing this character changes the state of parameter 8 (discarding
+
    Typing this character changes the state of parameter 8 (discarding
  host-to-user output) from 0 to 1 or from 1 to 0.  Thus an
+
    host-to-user output) from 0 to 1 or from 1 to 0.  Thus an
  indeterminate amount of host output, received between successive
+
    indeterminate amount of host output, received between successive
  instances of this character, will be discarded.
+
    instances of this character, will be discarded.
  
  As usual, the host should be notified of each change if parameter 0
+
    As usual, the host should be notified of each change if parameter 0
  is set to 1.  The host might wish to send SET messages at
+
    is set to 1.  The host might wish to send SET messages at
  appropriate points (e.g., preceding command prompts) to re-enable
+
    appropriate points (e.g., preceding command prompts) to re-enable
  output.
+
    output.
  
  The default should be zero.
+
    The default should be zero.
  
  Code 0 -- No character performs this function (though another
+
    Code 0 -- No character performs this function (though another
  mechanism still may do so).
+
    mechanism still may do so).
  
  Codes 1 through 127 -- Typing that character toggles parameter 8.
+
    Codes 1 through 127 -- Typing that character toggles parameter 8.
  
 
Parameter 137, extension set 1 -- User-to-host bits per character.
 
Parameter 137, extension set 1 -- User-to-host bits per character.
Line 923: Line 983:
 
Parameter 138, extension set 1 -- Host-to-user bits per character.
 
Parameter 138, extension set 1 -- Host-to-user bits per character.
  
  These parameters determine whether, for example, a full 8-bit input
+
    These parameters determine whether, for example, a full 8-bit input
  or output data path is available, or whether the most significant
+
    or output data path is available, or whether the most significant
  bit(s) of input or output data is stripped.  Typical values would
+
    bit(s) of input or output data is stripped.  Typical values would
  be 7 or 8.
+
    be 7 or 8.
 +
 
 +
    Note that an 8-bit data path does not by itself imply transparent
 +
    input/output; CR -> CR LF translation, XON/XOFF interpretation,
 +
    parity and so on must also be disabled to achieve this.
 +
 
 +
7.  Subsets, Extensions and Conflicts
 +
 
 +
  An option as complex (and easy to extend) as this one, needs a policy
 +
  for what subsets and extensions are allowed, and recommendations for
 +
  negotiating one's way through a maze of partial implementations.  In
 +
  short, what does it mean to say DO or WILL X.3-PAD?
 +
 
 +
  A basic principle is that, since hardly any user telnet
 +
  implementation will provide all possible features, a host cannot
 +
  expect to get precisely any desired kind of service.
 +
 
 +
    [This may be an arguable point.  The CCITT defines a mandatory
 +
    subset of supported values for each X.3 parameter, with further
 +
 
 +
 
 +
 
 +
Levy & Jacobson                                                [Page 18]
 +
 
 +
RFC 1053                Telnet X.3 PAD Option                April 1988
 +
 
 +
 
 +
    values optional.  For example, the set of forwarding characters,
 +
    parameter 4, must accept at least the values 0 (none), 2 (carriage
 +
    return), and 126 (any control character or DEL).  Though it would be
 +
    possible to adopt the CCITT's set of mandatory values there, I don't
 +
    think that would be desirable for two reasons.
 +
 
 +
    First, some of the features specified (e.g., timed input) may be
 +
    hard to implement in some environments, and may well not be
 +
    necessary for many applications.
 +
 
 +
    Second, this option provides for definition of entirely new
 +
    parameters.  Unlike the X.3 case, one peer may use parameters whose
 +
    very existence is unknown to the other.  So one cannot specify
 +
    mandatory or default values for ALL parameters.]
 +
 
 +
  On the other hand, a host is at least entitled to know what kind of
 +
  service is being provided to the ultimate user.  A user telnet's
 +
  status report may be incomplete (not describing features its
 +
  implementor did not know of); it may not describe the style of
 +
  interaction the host (or user, or application) would wish for, but it
 +
  should at least describe reality.
 +
 
 +
  For telnet parameters with a range of possible values, if a user
 +
  telnet implements only one "enabled" and one "disabled" value, it
 +
  should choose the "enabled" value when asked for a setting it cannot
 +
  supply.  A VMS telnet, for example, might allow only DEL or nothing
 +
  as the character-delete code.  If a host asks it to use "backspace",
 +
  it should choose DEL rather than nothing. The host may then interpret
 +
  this contrary behavior as indicating a preferred value.
  
  Note that an 8-bit data path does not by itself imply transparent
+
  The problem of conflicting parameters, where several parameters
  input/output; CR -> CR LF translation, XON/XOFF interpretation,
+
  control overlapping services and may conflict, is a serious one. The
  parity and so on must also be disabled to achieve this.
+
  extension set scheme (see parameter 128) is intended to limit the
 +
  problem.  Each extension set's parameters should be selfconsistent
 +
  and consistent with the CCITT X.3 parameters, but separate extension
 +
  sets need not be concerned with each other's parameters.
  
== Subsets, Extensions and Conflicts ==
+
  Where parameters might conflict, it is important to specify priority
 +
  as part of the parameters' description.  For example, among
 +
  parameters 2 (Local echo), 20 (Echo mask), and extension set 1's 134
 +
  (Local echo style), Echo mask is significant only if Local echo is
 +
  enabled, and Local echo style applies only to characters selected for
 +
  echoing by the first two parameters.
  
An option as complex (and easy to extend) as this one, needs a policy
+
  This option's functions overlap with those of some existing Telnet
for what subsets and extensions are allowed, and recommendations for
+
  options, for example, ECHO (which can be interpreted to affect local
negotiating one's way through a maze of partial implementations.  In
+
  echo and possibly local line editing), NAOCRD and NAOLFD [6]
short, what does it mean to say DO or WILL X.3-PAD?
+
  (specifying padding after output carriage returns and line feeds),
  
A basic principle is that, since hardly any user telnet
 
implementation will provide all possible features, a host cannot
 
expect to get precisely any desired kind of service.
 
  
[This may be an arguable point.  The CCITT defines a mandatory
 
subset of supported values for each X.3 parameter, with further
 
  
 +
Levy & Jacobson                                                [Page 19]
  
 +
RFC 1053                Telnet X.3 PAD Option                April 1988
  
  
 +
  TRANSMIT-BINARY, Remote Controlled Transmission and Echo [3], and
 +
  SUPDUP [4].
  
values optional. For example, the set of forwarding characters,
+
  Where X.3-PAD completely subsumes the function of another option, as
parameter 4, must accept at least the values 0 (none), 2 (carriage
+
  for ECHO, NAOCRD and NAOLFD, it's probably best to let the X.3-PAD
return), and 126 (any control character or DEL).  Though it would be
+
  option, where acceptable to both sides, supplant them and to refuse
possible to adopt the CCITT's set of mandatory values there, I don't
+
  the other option.
think that would be desirable for two reasons.
 
  
First, some of the features specified (e.g., timed input) may be
+
  The TRANSMIT-BINARY option can change (actually suppress) the
hard to implement in some environments, and may well not be
+
  interpretation of some bits of parameter 13 related to Telnet newline
necessary for many applications.
+
  encoding, as mentioned under that parameter.  As such it is
 +
  compatible with this option but must be kept in mind.
  
Second, this option provides for definition of entirely new
+
  RCTE would be a much more difficult case, since its service does not
parametersUnlike the X.3 case, one peer may use parameters whose
+
  fit into this option's scheme and vice versaHowever, it probably
very existence is unknown to the other.  So one cannot specify
+
  is unimportant because of the scarcity of RCTE implementations.
mandatory or default values for ALL parameters.]
 
  
On the other hand, a host is at least entitled to know what kind of
+
  Some existing Telnet options can serve related but complementary
service is being provided to the ultimate user.  A user telnet's
+
  functions, for example NAOHTS [7] for output tab handling, or
status report may be incomplete (not describing features its
+
  TERMINAL-TYPE [8].
implementor did not know of); it may not describe the style of
 
interaction the host (or user, or application) would wish for, but it
 
should at least describe reality.
 
  
For telnet parameters with a range of possible values, if a user
+
8Implementation suggestions
telnet implements only one "enabled" and one "disabled" value, it
 
should choose the "enabled" value when asked for a setting it cannot
 
supplyA VMS telnet, for example, might allow only DEL or nothing
 
as the character-delete code.  If a host asks it to use "backspace",
 
it should choose DEL rather than nothing. The host may then interpret
 
this contrary behavior as indicating a preferred value.
 
  
The problem of conflicting parameters, where several parameters
+
    It is strongly recommended that a user telnet support at least the
control overlapping services and may conflict, is a serious one. The
+
    combination with parameters 2=0, 3=126, and 4=1 (no local echo,
extension set scheme (see parameter 128) is intended to limit the
+
    forward immediately or nearly so on any input character) so that a
problem.  Each extension set's parameters should be selfconsistent
+
    dissatisfied host has the option of backing off and doing its own
and consistent with the CCITT X.3 parameters, but separate extension
+
    character handling.
sets need not be concerned with each other's parameters.
 
  
Where parameters might conflict, it is important to specify priority
+
    The "discard output" function invoked by the Break, Interrupt,
as part of the parameters' description.  For example, among
+
    Attention, etc., key if the 16's bit is set in parameter 7 may be
parameters 2 (Local echo), 20 (Echo mask), and extension set 1's 134
+
    implemented as follows.
(Local echo style), Echo mask is significant only if Local echo is
 
enabled, and Local echo style applies only to characters selected for
 
echoing by the first two parameters.
 
  
This option's functions overlap with those of some existing Telnet
+
          1.  When the key is pressed, set parameter 8 to 1, begin
options, for example, ECHO (which can be interpreted to affect local
+
              discarding output, send IAC SB X.3-PAD IS  8 1  IAC SE to
echo and possibly local line editing), NAOCRD and NAOLFD [6]
+
              notify the host.  (It may not need to know, but the
(specifying padding after output carriage returns and line feeds),
+
              message should be sent for consistency.)
  
 +
          2.  Send IAC DO TIMING-MARK.
  
 +
          3.  Send any other messages associated with the key (e.g.,
 +
              IAC IP).
  
 +
          4.  Eventually, the host should send either IAC WILL
 +
              TIMING-MARK or IAC WON'T TIMING-MARK, even if it knows
 +
              nothing about the TIMING-MARK option.  It will probably
 +
              appear close, in the output stream, to the point where
 +
              the host recognized any associated messages (e.g., IP).
  
  
TRANSMIT-BINARY, Remote Controlled Transmission and Echo [3], and
 
SUPDUP [4].
 
  
Where X.3-PAD completely subsumes the function of another option, as
+
Levy & Jacobson                                                [Page 20]
for ECHO, NAOCRD and NAOLFD, it's probably best to let the X.3-PAD
 
option, where acceptable to both sides, supplant them and to refuse
 
the other option.
 
  
The TRANSMIT-BINARY option can change (actually suppress) the
+
RFC 1053                Telnet X.3 PAD Option                April 1988
interpretation of some bits of parameter 13 related to Telnet newline
 
encoding, as mentioned under that parameter.  As such it is
 
compatible with this option but must be kept in mind.
 
  
RCTE would be a much more difficult case, since its service does not
 
fit into this option's scheme and vice versa.  However, it probably
 
is unimportant because of the scarcity of RCTE implementations.
 
  
Some existing Telnet options can serve related but complementary
+
              When the TIMING-MARK arrives, reset parameter 8 to 0 and
functions, for example NAOHTS [7] for output tab handling, or
+
              cease discarding output.  Send IAC SB X.3-PAD IS  8 0
TERMINAL-TYPE [8].
+
              IAC SE.
  
== Implementation suggestions ==
+
  The Telnet SYNCH mechanism (see [2]) may be employed in concert with
 +
  such a scheme.  A closed-loop flush, though, will be more effective
 +
  at discarding excess output than SYNCH used alone.  Provision of some
 +
  such mechanism for discarding unwanted output, e.g., after
 +
  interrupting the host, is heartily recommended.
  
  It is strongly recommended that a user telnet support at least the
+
  Discarding input is less clear cut.  Certainly, any buffered data not
  combination with parameters 2=0, 3=126, and 4=1 (no local echo,
+
  yet sent should be discarded; one might also use SYNCH to encourage
  forward immediately or nearly so on any input character) so that a
+
  the host telnet to discard more.
  dissatisfied host has the option of backing off and doing its own
 
  character handling.
 
  
  The "discard output" function invoked by the Break, Interrupt,
+
9. References
  Attention, etc., key if the 16's bit is set in parameter 7 may be
 
  implemented as follows.
 
  
        1.  When the key is pressed, set parameter 8 to 1, begin
+
    1.  Recommendation X.3, from International Telecommunications Union
            discarding output, send IAC SB X.3-PAD IS  8 1  IAC SE to
+
        CCITT Red Book, volume VIII, fascicle VIII.2, 1984.
            notify the host. (It may not need to know, but the
 
            message should be sent for consistency.)
 
  
        2.  Send IAC DO TIMING-MARK.
+
    2.  Postel, J., and J. Reynolds, "Telnet Protocol Specification",
 +
        RFC-854, USC Information Sciences Institute, May 1983.
  
        3.  Send any other messages associated with the key (e.g.,
+
    3.  Postel, J., and D. Crocker, "Remote Controlled Transmission and
            IAC IP).
+
        Echoing Telnet Option", RFC-726 and NIC-39237, SRI-ARC, March
 +
        1977.
  
        4.  Eventually, the host should send either IAC WILL
+
    4.  Crispin, M., "SUPDUP Protocol", RFC-734 and NIC-41953, SU-AI
            TIMING-MARK or IAC WON'T TIMING-MARK, even if it knows
+
        October 1977; Crispin, M., "Telnet SUPDUP Option", RFC-736 and
            nothing about the TIMING-MARK option. It will probably
+
        NIC-42213, SU-AI, October 1977; also Greenberg, B., "Telnet
            appear close, in the output stream, to the point where
+
        SUPDUP-OUTPUT Option", RFC-749 and NIC-45499, MIT-Multics,
            the host recognized any associated messages (e.g., IP).
+
        September 1978.
  
 +
    5.  Postel, J., and J. Reynolds, "Telnet Binary Transmission
 +
        Option", RFC-856, USC Information Sciences Institute, May 1983.
  
 +
    6.  Crocker, D., "Telnet Output Linefeed Disposition Option", RFC-
 +
        658 and NIC-31161, UCLA-NMC, October 1974; and "Telnet Output
 +
        Carriage Return Disposition Option", RFC-652 and NIC-31155,
 +
        UCLA-NMC, October 1974.
  
 +
    7.  Crocker, D., "Telnet Output Horizontal Tab Stops Option", RFC-
 +
        653 and NIC-31156, UCLA-NMC, October 1974.  [RFC numbers 652
 +
        through 658 (NIC 31155 through 31161) are in a similar vein.]
  
 +
    8.  Solomon, M., and E. Wimmers, "Telnet Terminal Type Option",
 +
        RFC-884, University of Wisconsin - Madison, December 1983.
  
            When the TIMING-MARK arrives, reset parameter 8 to 0 and
 
            cease discarding output.  Send IAC SB X.3-PAD IS  8 0
 
            IAC SE.
 
  
The Telnet SYNCH mechanism (see [2]) may be employed in concert with
 
such a scheme.  A closed-loop flush, though, will be more effective
 
at discarding excess output than SYNCH used alone.  Provision of some
 
such mechanism for discarding unwanted output, e.g., after
 
interrupting the host, is heartily recommended.
 
  
Discarding input is less clear cut.  Certainly, any buffered data not
 
yet sent should be discarded; one might also use SYNCH to encourage
 
the host telnet to discard more.
 
  
== References ==
 
  
  1.  Recommendation X.3, from International Telecommunications Union      CCITT Red Book, volume VIII, fascicle VIII.2, 1984.
+
Levy & Jacobson                                                [Page 21]
  2.  Postel, J., and J. Reynolds, "Telnet Protocol Specification",      RFC-854, USC Information Sciences Institute, May 1983.
 
  3.  Postel, J., and D. Crocker, "Remote Controlled Transmission and      Echoing Telnet Option", RFC-726 and NIC-39237, SRI-ARC, March      1977.
 
  4.  Crispin, M., "SUPDUP Protocol", RFC-734 and NIC-41953, SU-AI      October 1977; Crispin, M., "Telnet SUPDUP Option", RFC-736 and      NIC-42213, SU-AI, October 1977; also Greenberg, B., "Telnet      SUPDUP-OUTPUT Option", RFC-749 and NIC-45499, MIT-Multics,      September 1978.
 
  5.  Postel, J., and J. Reynolds, "Telnet Binary Transmission      Option", RFC-856, USC Information Sciences Institute, May 1983.
 
  6.  Crocker, D., "Telnet Output Linefeed Disposition Option", RFC-      658 and NIC-31161, UCLA-NMC, October 1974; and "Telnet Output      Carriage Return Disposition Option", RFC-652 and NIC-31155,      UCLA-NMC, October 1974.
 
  7.  Crocker, D., "Telnet Output Horizontal Tab Stops Option", RFC-      653 and NIC-31156, UCLA-NMC, October 1974.  [RFC numbers 652      through 658 (NIC 31155 through 31161) are in a similar vein.]
 
  8.  Solomon, M., and E. Wimmers, "Telnet Terminal Type Option",      RFC-884, University of Wisconsin - Madison, December 1983.
 

Revision as of 22:46, 22 September 2020




Network Working Group S. Levy Request for Comments: 1053 T. Jacobson

                                         Minnesota Supercomputer Center
                                                             April 1988


                        Telnet X.3 PAD Option


Status of this Memo

  This RFC proposes a new option to Telnet for the Internet community,
  and requests discussion and suggestions for improvements.
  Distribution of this memo is unlimited.

1. Command name and code

  X.3-PAD                30

2. Command meanings

  IAC  DO     X.3-PAD
     The issuing telnet requests that its peer perform X.3-PAD
     functions, or accepts an offer to do so.
  IAC  DON'T  X.3-PAD
     The issuing telnet demands that its peer not perform or cease
     performing X.3-PAD functions.
  IAC  WILL   X.3-PAD
     The issuing telnet offers to perform X.3-PAD functions or confirms
     that it will do so.
  IAC  WON'T  X.3-PAD
     The issuing telnet refuses to perform X.3-PAD functions or
     indicates that it is ceasing to handle them.
  Typically a server (host) telnet will use DO and DON'T, while a
  client (user) telnet will use WILL and WON'T.  For convenience, in
  the rest of this RFC 'host' and 'user' telnets refer to those saying
  'DO X.3-PAD' or 'WILL X.3-PAD' respectively.
  Both telnet peers may use this option without confusion, as all
  messages unambiguously identify whether they come from the host


Levy & Jacobson [Page 1]

RFC 1053 Telnet X.3 PAD Option April 1988


  ("DO") or the user ("WILL") side.
     Once DO and WILL have been exchanged, the host ("DO") telnet may
     send the following messages:
  IAC SB  X.3-PAD  SET           <param1> <value1> ...  IAC SE
  IAC SB  X.3-PAD  RESPONSE-SET  <param1> <value1> ...  IAC SE
  IAC SB  X.3-PAD  SEND          IAC SE
     while the user ("WILL") telnet may send the following messages:
  IAC SB  X.3-PAD  IS            <param1> <value1> ...  IAC SE
  IAC SB  X.3-PAD  RESPONSE-IS   <param1> <value1> ...  IAC SE
  The code for SET          is 0
  The code for RESPONSE-SET is 1
  The code for IS           is 2
  The code for RESPONSE-IS  is 3
  The code for SEND         is 4
     Messages listing parameter-value pairs may contain any number of
     such pairs, including zero.  Each parameter and each value
     occupies one octet, except that 255 (IAC) is doubled wherever it
     appears.

3. Default conditions

  The initial state is DON'T X.3-PAD, WON'T X.3-PAD.  This RFC does not
  specify default values for most X.3 parameters.  If the host telnet
  wishes a particular initial state (as it normally will), it should
  negotiate for it after exchange of DO/WILL messages.
  X.3-PAD parameter values need not be preserved except when DO/WILL
  X.3-PAD is in effect.  Thus if a host enables ("DO") X.3-PAD,
  negotiates about some parameters, then for some reason disables
  ("DONT") and later re-enables X.3-PAD, it must renegotiate any
  parameters it cares about.
  Keeping in mind that the host telnet may not recognize all the
  parameters known to the user telnet, it is suggested that the user
  telnet's initial parameters allow a reasonable level of service even
  if they are never changed (e.g., it would be unwise to begin with all
  data forwarding conditions disabled).  Extensions to X.3 should
  default to states resembling normal X.3 service where possible.




Levy & Jacobson [Page 2]

RFC 1053 Telnet X.3 PAD Option April 1988


4. Motivation for the option

  Where interactive terminals (or computers simulating them) are
  attached to host computers across a network, it is often desirable to
  provide them the same services as have long been provided for
  terminals directly attached to those hosts.
  Many systems handle this by simply leaving all character processing
  to the host running the applications.  Each character typed by the
  user is sent, often in its own packet, immediately to the host.  This
  gives good control over interaction, but can cause a significant load
  on hosts and networks.  Long-distance packet networks tend to be
  unreasonably slow or expensive or both when used in this mode.
  Suitable character processing on the client (near the user's
  terminal) can greatly improve the situation.  Unfortunately for
  standardization efforts, there are many possible approaches with
  differing purposes.
  Some have already been proposed as Telnet options.  The Remote
  Controlled Transmission and Echo option, [3], provides fine control
  over local buffering and echoing.  The SUPDUP option, [4], offers a
  variety of input and display functions in terminal-independent form.
  This RFC's proposal is intended to support efficient, approximate
  emulation, across a Telnet connection, of a host's normal handling of
  character-oriented terminals.  Ideally, a user and an application
  program would not need to know whether they were linked by an RS-232
  line or a TCP/IP network, except where the medium required a
  distinction (e.g., when establishing a connection).
  Server implementors would wish for enough to emulate, purely locally,
  everything offered by their host's operating system; on the other
  hand, a standard calling on user telnets to provide all terminal
  handling functions of all known operating systems will find few
  implementors.  One might settle on a subset of common operations, but
  which ones?
  The CCITT world has used one approach to these problems: the set of
  PAD services defined by recommendation X.3.  This RFC proposes that
  the Internet community adopt that solution to handle the same
  problems under Telnet.  It is fairly simple, widely known and used,
  extensible, and solves most of the relevant problems.
  Adopting X.3 would have another advantage.  X.25 is the dominant
  worldwide standard interface between commercial packet networks and
  Internet systems, as evidenced by the DDN's adoption of X.25 basic
  and standard services as replacements for BBN 1822 and HDH.  Telnet


Levy & Jacobson [Page 3]

RFC 1053 Telnet X.3 PAD Option April 1988


  and X.3 PAD traffic will have to coexist on X.25 networks; there will
  be a consequential desire for effective interoperation at the virtual
  terminal level.  Extending Telnet along these lines would vastly
  simplify bridging the two.
  Described here is a scheme for implementing X.3 services and
  negotiating their parameters across a Telnet connection.

5. Description of the option

  Many, though not all, X.3 services are meaningful in the context of
  remote terminal processing; for some, it may be desirable to allow
  local control (by the user) but not remote control (by the server
  host).  Some functions may not be provided, or provided in only
  limited form, by particular implementations.  In general, an
  implementation should follow the Telnet norm of requesting desired
  service but continuing to function somehow in case it is not
  available.
  Negotiations are asymmetrical.  Since the user telnet is charged with
  local character handling while engaged in the session with the remote
  host, the X.3 parameters "belong" to the user side.  The host telnet
  requests parameter changes with SET or RESPONSE-SET messages.  Host
  requests might be on behalf of an application program, for example,
  disabling local echo while a password is being entered.  The user
  telnet should give its "best effort" to accommodate these requests,
  but guarantees nothing except accurate status reporting.
  A user telnet may allow the local user to request parameter changes
  too, though this RFC does not specify a way.
  Where requests conflict, or where a user telnet cannot satisfy a
  request, the user telnet has the last word, since it does the
  relevant character processing.  It may allow control from the host
  only, from the user only, may seek a compromise type of processing
  and so on, at the implementor's discretion.
  Host ("DO") telnets may also ask the user telnet to SEND its current
  parameter values.  The user ("WILL") telnet must reply to each SEND
  message with a RESPONSE-IS message listing the values of all the
  parameters it knows about.  It is strongly recommended that all
  parameters known to the telnet implementor be included in this list,
  even if their values cannot be changed.  The intent is to give the
  host telnet the most complete information possible about the style of
  interaction which the user telnet is providing.
  If possible, user telnets should also inform the server host (with an
  IS message) whenever local conditions (e.g., user requests) change a


Levy & Jacobson [Page 4]

RFC 1053 Telnet X.3 PAD Option April 1988


  parameter's state.  This may not be feasible in some circumstances,
  and such behavior is negotiable -- see the discussion of parameter 0.
  Note that there are no "error" messages defined in section 2.  Almost
  all detectable errors (use of nonexisistent parameters or undefined
  values for known parameters) are indistinguishable from valid uses of
  options known to one peer but not the other.  Hosts will normally
  wish to poll the user telnet's state after making a request anyway,
  so error responses do not seem to be needed.
  The protocol messages listed in section 2 are to be used as follows.
  SET and RESPONSE-SET ask the user telnet to change its values for the
  given X.3 parameters.  The user telnet ignores unrecognized
  parameters; it sends no reply.  The host sends SET to begin a
  negotiation, when some event on the host side causes a change in the
  desired set of parameters.  The host sends RESPONSE-SET to continue
  negotiation, when it is dissatisfied with the user telnet's choice of
  parameters indicated in a RESPONSE-IS message.  Typically, the host
  will test the user telnet's chosen behavior by issuing a SEND message
  following the SET or RESPONSE-SET, though the user telnet should not
  rely on this.
  A SEND message from the host demands that the user telnet send
  RESPONSE-IS.
  IS and RESPONSE-IS inform the host telnet of the current states of
  some or all of the user telnet's parameters.  The user telnet sends
  IS when the user telnet changes a parameter for some local reason,
  e.g., at a request from the (human) user.  An IS message may but need
  not list all parameters, e.g., it might list just those which
  changed.
  It sends RESPONSE-IS in answer to each SEND request from the host.
  Every RESPONSE-IS should list ALL X.3-PAD parameters known to the
  user telnet implementor, even those which cannot be changed.  Any
  host requests (SET or RESPONSE-SET) received before a SEND message
  should be processed before sending the answering RESPONSE-IS, so that
  their effects are reflected in the parameter values indicated there.
  To permit synchronization (which SEND is this an answer to?), the
  user telnet should count SEND messages, and send exactly one
  RESPONSE-IS per SEND.
  One might think that this protocol could be implemented with only
  SET, SEND and IS messages.  The seemingly redundant RESPONSE-SET and
  RESPONSE-IS codes are needed to let both the user and host telnets
  distinguish new peer requests from attempts to renegotiate previous


Levy & Jacobson [Page 5]

RFC 1053 Telnet X.3 PAD Option April 1988


  actions, while preventing potential infinite negotiation loops.
  SET and IS messages are sent when the host or user telnet wishes to
  inform its peer of a change in the X.3 processing mode desired by
  some higher level entity.  This might happen at initialization, or on
  user or application-program request.  The important thing is that
  these messages are NOT sent merely in response to another X.3-PAD
  message from the peer.
  RESPONSE-SET and RESPONSE-IS messages should be sent in reply to a
  peer's [RESPONSE-]IS or SEND message.  They reflect negotiation at
  the telnet level, rather than changes in the higher-level
  environment.  A host which sends a SEND message may complain about
  the status indicated in the answering RESPONSE-IS by sending
  RESPONSE-SET but not SET.
  Under this scheme, a possible rule for preventing infinite
  negotiations would be for the host to send at most zero, one, or some
  fixed number, of RESPONSE-SET messages following receipt of one IS
  message or one higher-level host-side request.  After that, the host
  telnet simply accepts the user telnet's last offer as well as it can.
  Note that only the host needs to worry about loop prevention, since
  it does all the asking.
  A given parameter should not be listed more than once in a single
  message.
  A sample negotiation might look like this.  (Here line breaks are not
  meaningful; ASCII carriage returns and line feeds are indicated by
  <CR> and <LF>; other characters stand for themselves.  In the IAC SB
  octet values.)











Levy & Jacobson [Page 6]

RFC 1053 Telnet X.3 PAD Option April 1988


        Host:   <CR><LF>%
                                         (User types "cd gibber<CR>")
        User:   cd gibber<CR><LF>
        Host:   Password required.<CR>LF>
                                              (Host disables echoing)
             IAC SB X.3-PAD SET 2 0 IAC SE
                                              (Host polls for status)
             IAC SB X.3-PAD SEND IAC SE
        User:                        (User telnet has disabled local
                                      echo.  Note that some
                                      parameters (e.g., 9, 10, 11)
                                      are not present, presumably
                                      unimplemented, and a few
                                      extension parameters
                                      (129, 134) in extension
                                      set 1 are also defined.)
              IAC SB X.3-PAD RESPONSE-IS 1 29 2 0 3 2 4 0 5 0 7 17 8 0
                                        12 0 13 3 15 1 16 8 17 21 18 0
                                        128 1 129 23 134 1 IAC SE
        Host:    password:
                                             (User types "squeak<CR>",
        User:    squeak<CR><LF>                  which is not echoed.)
        Host:                                (Host re-enables echoing)
                 IAC SB X.3-PAD SET 2 1 IAC SE
                                             (Host polls for status)
                 IAC SB X.3-PAD SEND IAC SE
        User:
               IAC SB X.3-PAD RESPONSE-IS 1 29 2 1 3 2 4 0 5 0 7 17 8 0
                                         12 0 13 3 15 1 16 8 17 21 18 0
                                         128 1 129 23 134 1 IAC SE

6. Parameters

  In outline, the X.3-PAD option uses the following parameters.
     Parameter 0 indicates whether the user telnet notifies the host
     about parameter changes made for local reasons.
     Parameters 1 through 22 are basically those of CCITT X.3, with
     some changes in interpretation; they are listed in detail below.
     Parameters 23 through 127 are reserved for potential extensions to
     CCITT's X.3 definition.
     Parameter 128 selects an "extension set", determining the meaning
     of parameters 129 through 255.  One extension set is proposed in
     this RFC, others may be added.  The extension mechanism is
     explained under parameter 128's description.


Levy & Jacobson [Page 7]

RFC 1053 Telnet X.3 PAD Option April 1988


     Parameters 129 through 255 are meaningful only when defined in the
     extension set indicated by the current value of parameter 128.
  It should NOT be assumed that all implementations will necessarily
  support all parameters defined here, or all values of those
  parameters.  Supported parameter/value combinations, however, should
  behave as described here.
  The following parameter is specific to this Telnet option.
  Parameter 0 -- Notify host of user-initiated parameter changes.
    Code 0 -- Host is not notified.
    Code 1 -- User telnet notifies host by sending IS message.
    If the user telnet, for some local reason, changes a parameter,
    should it send an IS message to the host?  This is desirable, since
    the host telnet cannot be sure of knowing the user telnet's current
    status otherwise.  On the other hand, some user telnets may be
    unable to send notification.  Consider a user calling from an X.25
    PAD through an X.25-to-telnet gateway.  The user may change local
    PAD parameters freely, but since normal PADs send no message when
    this happens, the gateway cannot inform the host telnet.  Moreover,
    some sloppy host telnets may not wish to know about user parameter
    changes.
    In normal usage, the host will ask to SET parameter 0 to its
    preferred state upon initialization; the user telnet accepts the
    setting if it can; then the host polls (using SEND) for the user
    telnet's decision.  A disappointed host might periodically poll for
    changes, or admonish the (human) user not to change parameters, or
    remain silent and simply work oddly if changes are made.

The following parameters are as defined by the 1984 CCITT X.3 standard.

Numbers are in decimal.

Parameter 1 -- Character to escape to local telnet command mode.

    Code 0 -- No ASCII character performs this function (though
              some special mechanism, e.g., a function key, still may).
    Code 1 -- DLE (ASCII code 16).
    Codes 32 through 126 -- ASCII code of the character.
    Codes 2 through 31 are not defined by X.3, but might also be taken
    to refer to the corresponding ASCII control characters.  X.3 seems
    to be unable to name SOH (control-A) as a command escape character.



Levy & Jacobson [Page 8]

RFC 1053 Telnet X.3 PAD Option April 1988


Parameter 2 -- Local echo of characters typed by the user.

    Code 0 -- No local echo.
    Code 1 -- Local echo.
    Several echoing styles are possible.  Parameter 13 selects whether
    a carriage return echoes as itself or as CR LF.  Parameter 20 may
    suppress echoing of particular ASCII characters.  The extension
    parameter 134 selects a style for echoing non-printing characters
    such as ESC.

Parameter 3 -- Set of forwarding characters.

    The value is bit-encoded; each nonzero bit specifies a set of
    characters.  The user telnet should accept characters from the
    user's keyboard, buffering them until it receives any of the
    specified characters (or until some other forwarding condition is
    satisfied, see below), and then sending the buffer to the host.
    It may forward earlier if necessary, e.g., if it runs out of buffer
    space.  It MUST eventually forward after receiving one of the
    indicated characters.
    Code 0 -- No forwarding characters.
    Code 1 -- Alphanumeric characters (a-z, A-Z, 0-9).
    Code 2 -- CR.
    Code 4 -- ESC, BEL, ENQ, ACK.
    Code 8 -- DEL, CAN, DC2.
    Code 16 -- ETX, EOT.
    Code 32 -- HT, LF, VT, FF.
    Code 64 -- ASCII character codes 0 through 31 not listed above.
    Note that there is no way provided here to forward on printable,
    non-alphanumeric characters (punctuation marks).
    Codes may be added to select the union of the associated sets of
    characters.

Parameter 4 -- Forward after idle time.

    When this parameter is nonzero, the user telnet sends its input
    buffer to the host after a given period in which no characters are
    typed, even if no forwarding character was received.
    Code 0 -- Infinite time limit.
    Codes 1 through 255 -- Time limit in 1/20 second units.
    The value "1" may be taken to mean "forward immediately" if timed


Levy & Jacobson [Page 9]

RFC 1053 Telnet X.3 PAD Option April 1988


    input is inconvenient to provide.  For other values, when timing is
    available but the exact requested value is not, rounding to larger
    time delays is suggested.  If timing is requested but none is
    available, immediate forwarding on every character is much
    preferred over an infinite time limit.
    Note the interaction with parameter 15, Local editing, and the
    notes made under that heading.

Parameter 5 -- Flow control of user-to-host data.

    A user telnet may be overwhelmed by data typed by the user.  If
    parameter 5 is 1, it may output X-OFF (DC3, ASCII code 19) to ask
    the user to suspend input and X-ON (DC1, ASCII code 17) when the
    user may resume typing.
    Code 0 -- X-OFF and X-ON considered normal output data.
    Code 1 -- X-OFF and X-ON used to control user input.
    The extension parameters 130 and 131, if defined, specify other
    codes to be used instead of ASCII DC3 and DC1.

Parameter 6, referring to messages sent from the PAD to the user,

               does not seem to be relevant in this context.

Parameter 7 -- Function of Break, Interrupt, Attention, etc.

    This parameter describes handling of some special key or other
    character, implementation-defined, on the user's keyboard.  It is
    bit-encoded; codes may be added to select multiple functions.
    Multiple functions may be performed in any order.  Any messages
    generated should be promptly sent to the host.
    Code 0 -- No action.
    Code 1 -- Send interrupt packet (Telnet IAC IP).
    Code 2 -- Reset (break Telnet connection).
    Code 4 -- Discard input from user not yet consumed by host.
    Code 8 -- Escape to local Telnet command mode.
    Code 16 -- Discard output from host (see parameter 8).
    The X.25 'Interrupt', 'Reset', and 'Indication of Break' messages
    are here translated to Telnet equivalents.  See section 8 for
    suggestions on discarding input and output.





Levy & Jacobson [Page 10]

RFC 1053 Telnet X.3 PAD Option April 1988


Parameter 8 -- Discarding output from host.

    This parameter is intended as a flag, indicating whether host
    output is being ignored.
    Code 0 -- Host output is sent to user.
    Code 1 -- Host output is discarded.
    This parameter is normally used in conjunction with parameter 7
    when the 16's bit (Discard output on Break/Interrupt/Attention) is
    set.  An implementation is suggested in section 8 of this RFC.
    Note that, if a signal from the user causes parameter 8 to be
    changed and parameter 0 is set to 1, an X.3-PAD IS message should
    be sent to the host.

Parameter 9 -- Padding after carriage return.

    This parameter selects insertion of ASCII NUL padding characters
    after output of each carriage return.
    Codes 0 through 7 -- Insert that many padding characters.

Parameter 10 -- Line folding.

    Output lines may be folded (e.g., by insertion of carriage return
    and line feed) when they exceed a specified width.
    Code 0 -- No output line folding.
    Codes 1 through 255 -- Fold lines after that many characters.

Parameter 11 -- Bit rate.

    This parameter indicates the serial data rate of the user's
    terminal, if any.  Though CCITT X.3 considers this parameter to be
    read-only, it may be meaningful to allow the host to set as well as
    read this value, thus changing the user's line speed dynamically.
    Code 0 -- 110 bps            Code 10 -- 50 bps
    Code 1 -- 134.5 bps          Code 11 -- 75 bps in, 1200 out
    Code 2 -- 300 bps            Code 12 -- 2400 bps
    Code 3 -- 1200 bps           Code 13 -- 4800 bps
    Code 4 -- 600 bps            Code 14 -- 9600 bps
    Code 5 -- 75 bps             Code 15 -- 19200 bps
    Code 6 -- 150 bps            Code 16 -- 48000 bps
    Code 7 -- 1800 bps           Code 17 -- 56000 bps
    Code 8 -- 200 bps            Code 18 -- 64000 bps
    Code 9 -- 100 bps


Levy & Jacobson [Page 11]

RFC 1053 Telnet X.3 PAD Option April 1988


Parameter 12 -- Flow control of host-to-user data.

    When this parameter is 1, the user may type X-OFF (DC3, ASCII code
    19) to suspend printing output, and X-ON (DC1, ASCII code 17) to
    resume output.
    Code 0 -- X-OFF and X-ON are sent as data to host.
    Code 1 -- X-OFF and X-ON control output.
    See also the extension parameters 130, 131 and 132.

Parameter 13 -- Line feed insertion; Telnet CR LF vs CR NUL.

    The CCITT uses this parameter to select whether a typed CR should
    be sent as CR or CR-LF, whether an output CR should have a LF
    printed after it, and whether an echoed CR should be echoed with an
    accompanying LF.
    Here, it resolves the questions of mapping between the Telnet CR-LF
    sequence and single ASCII codes (i.e., when the user presses the
    carriage return key, should CR LF or CR NUL be sent to the host?
    When the host sends CR LF, should the user see CR LF or merely CR?)
    The value is bit-encoded; codes may be added to select multiple
    functions.
    Code 0 -- No line feed insertion
              (typed CR sent as CR NUL; host CR LF printed as CR).
    Code 1 -- Add line feed on output (host CR LF printed as CR LF).
    Code 2 -- Add line feed on input (typed CR sent as CR LF to host).
    Code 4 -- When echoing a typed CR locally, echo as CR LF.
    Note the interaction with the TRANSMIT-BINARY Telnet option [5].
    If the host has said WILL TRANSMIT-BINARY, then CR has no special
    meaning on output; it always stands for the single character CR
    regardless of this parameter's value.  If the user telnet has said
    WILL TRANSMIT-BINARY, a typed CR should likewise always be sent as
    itself and not as CR LF or CR NUL.

Parameter 14 -- Output padding after line feed.

    Gives the number of ASCII NUL padding characters to be sent to the
    user's terminal after each output line feed.
    Codes 0 through 7 -- Send that many padding characters.




Levy & Jacobson [Page 12]

RFC 1053 Telnet X.3 PAD Option April 1988


Parameter 15 -- Local editing.

    If this parameter is 1, the character delete, line delete and line
    reprint functions (parameters 16, 17 and 18), if implemented,
    should be enabled.  Data should be sent to the host when a
    forwarding character (see parameter 3) is typed or in case the user
    telnet's input buffer becomes full.
    Note the interaction with parameter 4, Forward after idle time.
    User telnets need not handle the case where idle-time forwarding
    and local editing are both enabled, i.e., the host should
    explicitly request changing parameter 4 to 0 along with setting
    parameter 15 to 1.
    Code 0 -- No input editing.  Any editing characters are considered
              data.
    Code 1 -- Input editing.  Editing characters edit the input buffer.

Parameter 16 -- Character-delete character.

    While local editing (parameter 15) is enabled, typing this
    character erases the last character in the editing buffer, if any.
    When editing is disabled, this character is not treated specially.
    Code 0 -- No character has this function.
    Codes 1 through 127 -- ASCII code of character-delete character.
    See also parameter 19.

Parameter 17 -- Line-delete character.

    While local editing (parameter 15) is enabled, this character
    erases the entire contents of the editing buffer.  When editing is
    disabled, this character is not treated specially.
    Code 0 -- No character has this function.
    Codes 1 through 127 -- ASCII code of line-delete character.
    See also parameter 19.

Parameter 18 -- Line-display character.

    While local editing (parameter 15) is enabled, typing this
    character causes the current contents of the editing buffer to be
    printed on the user's terminal; nothing is sent to the host.  When
    editing is disabled, this character is not treated specially.
    Code 0 -- No character has this function.


Levy & Jacobson [Page 13]

RFC 1053 Telnet X.3 PAD Option April 1988


    Codes 1 through 127 -- ASCII code of line-display character.

Parameter 19 -- Editing service signals.

    This determines what is echoed to the user when local editing is
    enabled and the character-delete or line-delete character is
    entered.
    Code 0 -- Nothing is echoed.
    Code 1 -- Editing style is suitable for printing terminals.
    Code 2 -- Editing style is suitable for display terminals.
    Codes 8 and 32-126 -- Echo that ASCII character for
              character-delete.
    X.3 is specific on handling character- and line-deletion.  If
    parameter 19 is 1, echo character-delete with a "line delete with
    three X's followed by CR LF.  If 2, a character-delete echoes BS
    SPACE BS, while a line delete echoes enough BS SPACE BS's to erase
    the entire line.  If 8 or 32-126, character-delete echoes that
    character, and line delete echoes XXX CR LF.  An extension
    parameter could override these, selecting other styles if desired,
    though none is proposed here.

Parameter 20 -- Echo mask.

    When local echoing, parameter 2, is enabled, each nonzero bit in
    this bit-encoded parameter's value suppresses echoing of some
    subset of ASCII characters.  Adding values suppresses echo for the
    union of the specified subsets.
    Code 0   --  all ASCII characters are echoed.
    Code 1   --  CR is not echoed.
    Code 2   --  LF is not echoed.
    Code 4   --  VT, HT, and FF are not echoed.
    Code 8   --  BEL and BS are not echoed.
    Code 16  --  ESC and ENQ are not echoed.
    Code 32  --  ACK, NAK, STX, SOH, EOT, ETB and ETX are not echoed.
    Code 64  --  Editing characters are not echoed.
    Code 128 --  other non-printing ASCII characters, and DEL, not
                 echoed.
    Nothing is echoed when parameter 2 is 0.  Some characters should
    not be echoed regardless of parameter 20.  If any of parameters 5,
    12, or 22 are enabled (non-zero), then the XON and XOFF characters
    should not be echoed.  Nor should the escape-to-local command mode
    character, parameter 1.



Levy & Jacobson [Page 14]

RFC 1053 Telnet X.3 PAD Option April 1988


Parameter 21 -- Parity.

    This parameter determines whether parity is checked on user input
    and generated on output to the user.  Values may be added to select
    both.
    Code 0 -- Parity neither generated nor checked.
    Code 1 -- Even parity checked on input.
    Code 2 -- Even parity generated on output.

Parameter 22 -- Page wait.

    If enabled, this parameter causes the user telnet to pause after
    every N lines of output as if X-OFF had been received.  Output
    resumes when X-ON is typed.
    Code 0 -- No pause.
    Codes 1-255 -- Pause after output of that many line feeds.
    See also parameters 130, 131 and 132.

The following parameters are not part of CCITT X.3, but use the extension mechanism proposed for this Telnet option.

Parameter 128 -- Extension set number.

    This parameter selects one of a potentially large number of
    "extension sets" -- more or less coherent collections of parameters
    added to the basic X.3 family.  User telnets may support several
    extension sets.  The host may determine whether a particular one is
    supported by trying to set parameter 128.  The user telnet should
    accept the value if it provides some or all of the parameters in
    that set.
    Extension sets might be defined for a variety of purposes.  For
    example, Berkeley UNIX tty emulation, VMS emulation, Telenet's
    extended parameters, French national PDN parameters, and so on.
    Initial values need not be specified for extension parameters
    (i.e., a host should explicitly negotiate for their values after
    selecting an extension set).  However, it is recommended that
    default settings give service that resembles normal CCITT X.3
    behavior where possible.
    Extension sets are mutually exclusive.  Different sets may use the
    same parameters (from 129 through 255) for different purposes.
    Only one extension set is in effect at a time.  That is, if a host


Levy & Jacobson [Page 15]

RFC 1053 Telnet X.3 PAD Option April 1988


    requests service X from extension set A, then switches to extension
    set B and requests its service Y, it should not expect that service
    X is still being provided.
    Some values of this parameter are reserved:
    Code 0 -- Null extension set.  Only (a subset of) the basic CCITT
                X.3 parameters is provided.  Every user telnet should
                accept this setting.
    Code 1 -- (A subset of) the extension set 1 parameters described
                below is provided.
    Code 255 -- Reserved for purely local (e.g., to a site), non-
                standard collections of extensions.
    Other extension sets may be proposed and assigned set numbers in
    the range 2 through 254.
         Set number are registered with the Internet Assigned Numbers
         Coordinator at USC-ISI.  Please contact:
              Joyce K. Reynolds
              USC Information Sciences Institute
              Suite 1001
              4676 Admiralty Way
              Marina del Rey, CA  90292-6695
              213-822-1511   [email protected]

The following parameters form extension set number 1.

Parameter 129, extension set 1 -- Word-delete character.

    Typing this character while local editing is enabled causes the
    last word in the editing buffer to be erased.  Several definitions
    for a "word" are in common use; this RFC does not specify one.
    There should be an indication to the user of what was erased.  When
    editing is disabled, this character is not treated specially.
    Code 0 -- No character has this function.
    Codes 1 through 127 -- ASCII code of word-delete character.

Parameter 130, extension set 1 -- Flow control OFF character.

    Parameter 131, extension set 1 -- Flow control ON character.
    Typing these characters while parameter 12 is enabled cause output
    to be suspended or resumed, respectively.  The user telnet may send
    them to the user while parameter 5 is enabled to ask the user to
    cease or resume supplying input.


Levy & Jacobson [Page 16]

RFC 1053 Telnet X.3 PAD Option April 1988


    If defined, these parameters should have default values of 19
    (ASCII DC3) for parameter 130, and 17 (ASCII DC1) for parameter
    131.
    Code 0 -- No character has this function.
    Codes 1 through 127 -- Function performed by that ASCII code.

Parameter 132, extension set 1 -- Host-to-user flow control convention.

    Some styles of flow control accept only a particular character
    (e.g., X-ON) to resume output; others resume on receipt of any
    character.  This parameter selects which to use.  The default
    should be zero, as this matches the X.3 convention.
    Code 0 -- Resume output only when correct character is received.
    Code 1 -- Resume output when any character is received.

Parameter 133, extension set 1 -- Alternate Attention, etc., character.

    This character serves as a synonym for the Break, Attention, etc.,
    key whose function is given by parameter 7.
    Code 0 -- No ASCII character has this function
              (there may still be a special key or other mechanism).
    Codes 1 through 127 -- ASCII code of the character.

Parameter 134, extension set 1 -- Local echo style.

    This parameter selects how non-printing characters should be
    echoed, when parameter 2 is set to 1.  The default should be zero,
    where all characters are simply echoed as themselves (except
    possibly carriage return; see parameter 13).
    Code 0 -- All characters echo as themselves.
    Code 1 -- Non-editing control characters echo as ^X for some
              printable character X.
    See also parameters 2, Local echo, and 20, Echo mask, which may
    suppress echo of some or all characters regardless of this
    parameter.

Parameter 135, extension set 1 -- Accept following character as data.

    After typing this character, the next character entered is accepted
    as data for transmission to the host even if it would normally have
    a special meaning.
    The default should be zero.


Levy & Jacobson [Page 17]

RFC 1053 Telnet X.3 PAD Option April 1988


    Code 0 -- No character has this function.
    Codes 1 through 127 -- ASCII code of the character.

Parameter 136, extension set 1 -- Character to toggle discarding output.

    Typing this character changes the state of parameter 8 (discarding
    host-to-user output) from 0 to 1 or from 1 to 0.  Thus an
    indeterminate amount of host output, received between successive
    instances of this character, will be discarded.
    As usual, the host should be notified of each change if parameter 0
    is set to 1.  The host might wish to send SET messages at
    appropriate points (e.g., preceding command prompts) to re-enable
    output.
    The default should be zero.
    Code 0 -- No character performs this function (though another
    mechanism still may do so).
    Codes 1 through 127 -- Typing that character toggles parameter 8.

Parameter 137, extension set 1 -- User-to-host bits per character.

Parameter 138, extension set 1 -- Host-to-user bits per character.

    These parameters determine whether, for example, a full 8-bit input
    or output data path is available, or whether the most significant
    bit(s) of input or output data is stripped.  Typical values would
    be 7 or 8.
    Note that an 8-bit data path does not by itself imply transparent
    input/output; CR -> CR LF translation, XON/XOFF interpretation,
    parity and so on must also be disabled to achieve this.

7. Subsets, Extensions and Conflicts

  An option as complex (and easy to extend) as this one, needs a policy
  for what subsets and extensions are allowed, and recommendations for
  negotiating one's way through a maze of partial implementations.  In
  short, what does it mean to say DO or WILL X.3-PAD?
  A basic principle is that, since hardly any user telnet
  implementation will provide all possible features, a host cannot
  expect to get precisely any desired kind of service.
   [This may be an arguable point.  The CCITT defines a mandatory
   subset of supported values for each X.3 parameter, with further


Levy & Jacobson [Page 18]

RFC 1053 Telnet X.3 PAD Option April 1988


   values optional.  For example, the set of forwarding characters,
   parameter 4, must accept at least the values 0 (none), 2 (carriage
   return), and 126 (any control character or DEL).  Though it would be
   possible to adopt the CCITT's set of mandatory values there, I don't
   think that would be desirable for two reasons.
   First, some of the features specified (e.g., timed input) may be
   hard to implement in some environments, and may well not be
   necessary for many applications.
   Second, this option provides for definition of entirely new
   parameters.  Unlike the X.3 case, one peer may use parameters whose
   very existence is unknown to the other.  So one cannot specify
   mandatory or default values for ALL parameters.]
  On the other hand, a host is at least entitled to know what kind of
  service is being provided to the ultimate user.  A user telnet's
  status report may be incomplete (not describing features its
  implementor did not know of); it may not describe the style of
  interaction the host (or user, or application) would wish for, but it
  should at least describe reality.
  For telnet parameters with a range of possible values, if a user
  telnet implements only one "enabled" and one "disabled" value, it
  should choose the "enabled" value when asked for a setting it cannot
  supply.  A VMS telnet, for example, might allow only DEL or nothing
  as the character-delete code.  If a host asks it to use "backspace",
  it should choose DEL rather than nothing. The host may then interpret
  this contrary behavior as indicating a preferred value.
  The problem of conflicting parameters, where several parameters
  control overlapping services and may conflict, is a serious one. The
  extension set scheme (see parameter 128) is intended to limit the
  problem.  Each extension set's parameters should be selfconsistent
  and consistent with the CCITT X.3 parameters, but separate extension
  sets need not be concerned with each other's parameters.
  Where parameters might conflict, it is important to specify priority
  as part of the parameters' description.  For example, among
  parameters 2 (Local echo), 20 (Echo mask), and extension set 1's 134
  (Local echo style), Echo mask is significant only if Local echo is
  enabled, and Local echo style applies only to characters selected for
  echoing by the first two parameters.
  This option's functions overlap with those of some existing Telnet
  options, for example, ECHO (which can be interpreted to affect local
  echo and possibly local line editing), NAOCRD and NAOLFD [6]
  (specifying padding after output carriage returns and line feeds),


Levy & Jacobson [Page 19]

RFC 1053 Telnet X.3 PAD Option April 1988


  TRANSMIT-BINARY, Remote Controlled Transmission and Echo [3], and
  SUPDUP [4].
  Where X.3-PAD completely subsumes the function of another option, as
  for ECHO, NAOCRD and NAOLFD, it's probably best to let the X.3-PAD
  option, where acceptable to both sides, supplant them and to refuse
  the other option.
  The TRANSMIT-BINARY option can change (actually suppress) the
  interpretation of some bits of parameter 13 related to Telnet newline
  encoding, as mentioned under that parameter.  As such it is
  compatible with this option but must be kept in mind.
  RCTE would be a much more difficult case, since its service does not
  fit into this option's scheme and vice versa.  However, it probably
  is unimportant because of the scarcity of RCTE implementations.
  Some existing Telnet options can serve related but complementary
  functions, for example NAOHTS [7] for output tab handling, or
  TERMINAL-TYPE [8].

8. Implementation suggestions

    It is strongly recommended that a user telnet support at least the
    combination with parameters 2=0, 3=126, and 4=1 (no local echo,
    forward immediately or nearly so on any input character) so that a
    dissatisfied host has the option of backing off and doing its own
    character handling.
    The "discard output" function invoked by the Break, Interrupt,
    Attention, etc., key if the 16's bit is set in parameter 7 may be
    implemented as follows.
          1.  When the key is pressed, set parameter 8 to 1, begin
              discarding output, send IAC SB X.3-PAD IS  8 1  IAC SE to
              notify the host.  (It may not need to know, but the
              message should be sent for consistency.)
          2.  Send IAC DO TIMING-MARK.
          3.  Send any other messages associated with the key (e.g.,
              IAC IP).
          4.  Eventually, the host should send either IAC WILL
              TIMING-MARK or IAC WON'T TIMING-MARK, even if it knows
              nothing about the TIMING-MARK option.  It will probably
              appear close, in the output stream, to the point where
              the host recognized any associated messages (e.g., IP).


Levy & Jacobson [Page 20]

RFC 1053 Telnet X.3 PAD Option April 1988


              When the TIMING-MARK arrives, reset parameter 8 to 0 and
              cease discarding output.  Send IAC SB X.3-PAD IS  8 0
              IAC SE.
  The Telnet SYNCH mechanism (see [2]) may be employed in concert with
  such a scheme.  A closed-loop flush, though, will be more effective
  at discarding excess output than SYNCH used alone.  Provision of some
  such mechanism for discarding unwanted output, e.g., after
  interrupting the host, is heartily recommended.
  Discarding input is less clear cut.  Certainly, any buffered data not
  yet sent should be discarded; one might also use SYNCH to encourage
  the host telnet to discard more.

9. References

    1.  Recommendation X.3, from International Telecommunications Union
        CCITT Red Book, volume VIII, fascicle VIII.2, 1984.
    2.  Postel, J., and J. Reynolds, "Telnet Protocol Specification",
        RFC-854, USC Information Sciences Institute, May 1983.
    3.  Postel, J., and D. Crocker, "Remote Controlled Transmission and
        Echoing Telnet Option", RFC-726 and NIC-39237, SRI-ARC, March
        1977.
    4.  Crispin, M., "SUPDUP Protocol", RFC-734 and NIC-41953, SU-AI
        October 1977; Crispin, M., "Telnet SUPDUP Option", RFC-736 and
        NIC-42213, SU-AI, October 1977; also Greenberg, B., "Telnet
        SUPDUP-OUTPUT Option", RFC-749 and NIC-45499, MIT-Multics,
        September 1978.
    5.  Postel, J., and J. Reynolds, "Telnet Binary Transmission
        Option", RFC-856, USC Information Sciences Institute, May 1983.
    6.  Crocker, D., "Telnet Output Linefeed Disposition Option", RFC-
        658 and NIC-31161, UCLA-NMC, October 1974; and "Telnet Output
        Carriage Return Disposition Option", RFC-652 and NIC-31155,
        UCLA-NMC, October 1974.
    7.  Crocker, D., "Telnet Output Horizontal Tab Stops Option", RFC-
        653 and NIC-31156, UCLA-NMC, October 1974.  [RFC numbers 652
        through 658 (NIC 31155 through 31161) are in a similar vein.]
    8.  Solomon, M., and E. Wimmers, "Telnet Terminal Type Option",
        RFC-884, University of Wisconsin - Madison, December 1983.



Levy & Jacobson [Page 21]