CR LF as input from a remote terminal, the effect MUST be the
same as if the user had pressed the "end-of-line" key on a
local terminal. On server hosts that use ASCII, in particular,
receipt of the Telnet sequence CR LF must cause the same effect
as a local user pressing the CR key on a local terminal. Thus,
CR LF and CR NUL MUST have the same effect on an ASCII server
host when received as input over a Telnet connection.
A User Telnet MUST be able to send any of the forms: CR LF, CR
NUL, and LF. A User Telnet on an ASCII host SHOULD have a
user-controllable mode to send either CR LF or CR NUL when the
user presses the "end-of-line" key, and CR LF SHOULD be the
default.
The Telnet end-of-line sequence CR LF MUST be used to send
Telnet data that is not terminal-to-computer (e.g., for Server
Telnet sending output, or the Telnet protocol incorporated
another application protocol).
DISCUSSION:
To allow interoperability between arbitrary Telnet clients
and servers, the Telnet protocol defined a standard
representation for a line terminator. Since the ASCII
character set includes no explicit end-of-line character,
systems have chosen various representations, e.g., CR, LF,
and the sequence CR LF. The Telnet protocol chose the CR
LF sequence as the standard for network transmission.
Unfortunately, the Telnet protocol specification in RFC-
854 [TELNET:1] has turned out to be somewhat ambiguous on
what character(s) should be sent from client to server for
the "end-of-line" key. The result has been a massive and
continuing interoperability headache, made worse by
various faulty implementations of both User and Server
RFC1123 REMOTE LOGIN -- TELNET October 1989
Telnets.
Although the Telnet protocol is based on a perfectly
symmetric model, in a remote login session the role of the
user at a terminal differs from the role of the server
host. For example, RFC-854 defines the meaning of CR, LF,
and CR LF as output from the server, but does not specify
what the User Telnet should send when the user presses the
"end-of-line" key on the terminal; this turns out to be
the point at issue.
When a user presses the "end-of-line" key, some User
Telnet implementations send CR LF, while others send CR
NUL (based on a different interpretation of the same
sentence in RFC-854). These will be equivalent for a
correctly-implemented ASCII server host, as discussed
above. For other servers, a mode in the User Telnet is
needed.
The existence of User Telnets that send only CR NUL when
CR is pressed creates a dilemma for non-ASCII hosts: they
can either treat CR NUL as equivalent to CR LF in input,
thus precluding the possibility of entering a "bare" CR,
or else lose complete interworking.
Suppose a user on host A uses Telnet to log into a server
host B, and then execute B's User Telnet program to log
into server host C. It is desirable for the Server/User
Telnet combination on B to be as transparent as possible,
i.e., to appear as if A were connected directly to C. In
particular, correct implementation will make B transparent
to Telnet end-of-line sequences, except that CR LF may be
translated to CR NUL or vice versa.
IMPLEMENTATION:
To understand Telnet end-of-line issues, one must have at
least a general model of the relationship of Telnet to the
local operating system. The Server Telnet process is
typically coupled into the terminal driver software of the
operating system as a pseudo-terminal. A Telnet end-of-
line sequence received by the Server Telnet must have the
same effect as pressing the end-of-line key on a real
locally-connected terminal.
Operating systems that support interactive character-at-
a-time applications (e.g., editors) typically have two
internal modes for their terminal I/O: a formatted mode,
in which local conventions for end-of-line and other
=13= |