RFC 1091 PROPOSED STANDARD TELNET · TERMINALS · OPTIONS

Telnet terminal-type option

A Telnet option that lets a server ask the client which kind of terminal it is emulating.

On rfc-editor.org ↗
PUBLISHED
February 1989
AUTHORS
J. VanBokkelen
STREAM
Legacy
BUILDS ON
RFC 930 — Telnet Terminal Type
TELNET OPTION CODE
24
SEND SUBCOMMAND CODE
1
IS SUBCOMMAND CODE
0
MAXIMUM LENGTH OF A TERMINAL TYPE NAME
40 characters
DEFAULT OPTION STATE
WON'T TERMINAL-TYPE and DON'T TERMINAL-TYPE
SUPERSEDES
RFC 930
DOI
10.17487/RFC1091

RFC text

Contents
Original text · RFC Editor View on rfc-editor.org ↗
Network Working Group                                  J. VanBokkelen
Request for Comments: 1091                         FTP Software, Inc.
Obsoletes: RFC 930                                      February 1989


                      Telnet Terminal-Type Option

Status of This Memo

   This RFC specifies a standard for the Internet community.  Hosts on
   the Internet that exchange terminal type information within the
   Telnet protocol are expected to adopt and implement this standard.

   This standard supersedes RFC 930.  A change is made to permit cycling
   through a list of possible terminal types and selecting the most
   appropriate.

   Distribution of this memo is unlimited.

1. Command Name and Code

      TERMINAL-TYPE   24

2. Command Meanings

      IAC WILL TERMINAL-TYPE

         Sender is willing to send terminal type information in a
         subsequent sub-negotiation.

      IAC WON'T TERMINAL-TYPE

         Sender refuses to send terminal type information.

      IAC DO TERMINAL-TYPE

         Sender is willing to receive terminal type information in a
         subsequent sub-negotiation.

      IAC DON'T TERMINAL-TYPE

         Sender refuses to accept terminal type information.

      IAC SB TERMINAL-TYPE SEND IAC SE

         Server requests client to transmit his (the client's) next
         terminal type, and switch emulation modes (if more than one
         terminal type is supported).  The code for SEND is 1. (See
         below.)

      IAC SB TERMINAL-TYPE IS ... IAC SE

         Client is stating the name of his current (or only) terminal
         type.  The code for IS is 0.  (See below.)

3. Default

      WON'T TERMINAL-TYPE

         Terminal type information will not be exchanged.

      DON'T TERMINAL-TYPE

         Terminal type information will not be exchanged.

4. Motivation for the Option

   On most machines with bit-mapped displays (e.g., PCs and graphics
   workstations) a client terminal emulation program is used to simulate
   a conventional ASCII terminal.  Most of these programs have multiple
   emulation modes, frequently with widely varying characteristics.
   Likewise, modern host system software and applications can deal with
   a variety of terminal types.  What is needed is a means for the
   client to present a list of available terminal emulation modes to the
   server, from which the server can select the one it prefers (for
   arbitrary reasons).  There is also need for a mechanism to change
   emulation modes during the course of a session, perhaps according to
   the needs of applications programs.

   Existing terminal-type passing mechanisms within Telnet were not
   designed with multiple emulation modes in mind.  While multiple names
   are allowed, they are assumed to be synonyms.  Emulation mode changes
   are not defined, and the list of modes can only be scanned once.

   This document defines a simple extension to the existing mechanisms,
   which meets both of the above criteria.  It makes one assumption
   about the behaviour of implementations coded to the previous standard
   in order to obtain full backwards-compatibility.

5. Description of the Option

   Willingness to exchange terminal-type information is agreed upon via
   conventional Telnet option negotiation.  WILL and DO are used only to
   obtain and grant permission for future discussion.  The actual
   exchange of status information occurs within option subcommands (IAC
   SB TERMINAL-TYPE...).

   Once the two hosts have exchanged a WILL and a DO, the sender of the
   DO TERMINAL-TYPE (the server) is free to request type information.
   Only the server may send requests (IAC SB TERMINAL-TYPE SEND IAC SE)
   and only the client may transmit actual type information (within an
   IAC SB TERMINAL-TYPE IS ... IAC SE command).  Terminal type
   information may not be sent spontaneously, but only in response to a
   request.

   The terminal type information is an NVT ASCII string.  Within this
   string, upper and lower case are considered equivalent.  The complete
   list of valid terminal type names can be found in the latest
   "Assigned Numbers" RFC [4].

   The transmission of terminal type information by the Telnet client in
   response to a query from the Telnet server implies that the client
   must simultaneously change emulation mode, unless the terminal type
   sent is a synonym of the preceding terminal type, or there are other
   prerequisites for entering the new regime (e.g., having agreed upon
   the Telnet binary option).  The receipt of such information by the
   Telnet server does not imply any immediate change of processing.
   However, the information may be passed to a process, which may alter
   the data it sends to suit the particular characteristics of the
   terminal.  For example, some operating systems have a terminal driver
   that accepts a code indicating the type of terminal being driven.
   Using the TERMINAL TYPE and BINARY options, a telnet server program
   on such a system could arrange to have terminals driven as if they
   were directly connected, including special functions not available to
   a standard Network Virtual Terminal.

   Note that this specification is deliberately asymmetric.  It is
   assumed that server operating systems and applications in general
   cannot change terminal types at arbitrary points in a session.  Thus,
   the client may only send a new type (and potentially change emulation
   modes) when the server requests that it do so.

6.  Implementation Issues

   The "terminal type" information may be any NVT ASCII string
   meaningful to both ends of the negotiation.  The list of terminal
   type names in "Assigned Numbers" is intended to minimize confusion
   caused by alternative "spellings" of the terminal type.  For example,
   confusion would arise if one party were to call a terminal "IBM3278-
   2" while the other called it "IBM-3278/2".  There is no negative
   acknowledgement for a terminal type that is not understood, but
   certain other options (such as switching to BINARY mode) may be
   refused if a valid terminal type name has not been specified.

   In some cases, either a particular terminal may be known by more than
   one name, for example a specific type and a more generic type, or the
   client may be a workstation with integrated display capable of
   emulating more than one kind of terminal.  In such cases, the sender
   of the TERMINAL-TYPE IS command should reply to successive TERMINAL-
   TYPE SEND commands with the various names.  In this way, a telnet
   server that does not understand the first response can prompt for
   alternatives.  If different terminal emulations are supported by the
   client, the mode of the emulator must be changed to match the last
   type sent, unless the particular emulation has other Telnet options
   (e.g., BINARY) as prerequisites (in which case, the emulation will
   switch to the last type sent when the prerequisite is fulfilled).
   When types are synonyms, they should be sent in order from most to
   least specific.

   When the server (the receiver of the TERMINAL-TYPE IS) receives the
   same response two consecutive times, this indicates the end of the
   list of available types.  Similarly, the client should indicate it
   has sent all available names by repeating the last one sent.  If an
   additional request is received, this indicates that the server (the
   sender of the IS) wishes to return to the top of the list of
   available types (probably to select the least of N evils).

   Server implementations conforming to the previous standard will cease
   sending TERMINAL-TYPE SEND commands after receiving the same response
   two consecutive times, which will work according to the old standard.
   It is assumed that client implementations conforming to the previous
   standard will send the last type on the list in response to a third
   query (as well as the second).  New-style servers must recognize this
   and not send more queries.

   The type "UNKNOWN" should be used if the type of the terminal is
   unknown or unlikely to be recognized by the other party.

   The complete and up-to-date list of terminal type names will be
   maintained in the "Assigned Numbers".  The maximum length of a
   terminal type name is 40 characters.

7. User Interfaces

   Telnet clients and servers conforming to this specification should
   provide the following functions in their user interfaces:

   Clients supporting multiple emulation modes should allow the user to
   specify which of the modes is preferred (which name is sent first),
   prior to connection establishment.  The order of the names sent
   cannot be changed after the negotiation has begun.  This initial mode
   will also become the default with servers which do not support
   TERMINAL TYPE.

   Servers should store the current terminal type name and the list of
   available names in a manner such that they are accessible to both the
   user (via a keyboard command) and any applications which need the
   information.  In addition, there should be a corresponding mechanism
   to request a change of terminal types, by initiating a series of
   SEND/IS sub-negotiations.

8. Examples

   In this example, the server finds the first type acceptable.

      Server: IAC DO TERMINAL-TYPE

      Client: IAC WILL TERMINAL-TYPE

         (Server may now request a terminal type at any time.)

      Server: IAC SB TERMINAL-TYPE SEND IAC SE

      Client: IAC SB TERMINAL-TYPE IS IBM-3278-2 IAC SE

   In this example, the server requests additional terminal types, and
   accepts the second (and last on the client's list) type sent (RFC 930
   compatible):

      Server: IAC DO TERMINAL-TYPE

      Client: IAC WILL TERMINAL-TYPE

         (Server may now request a terminal type at any time.)

      Server: IAC SB TERMINAL-TYPE SEND IAC SE

      Client: IAC SB TERMINAL-TYPE IS ZENITH-H19 IAC SE

      Server: IAC SB TERMINAL-TYPE SEND IAC SE

      Client: IAC SB TERMINAL-TYPE IS UNKNOWN IAC SE
      Server: IAC SB TERMINAL-TYPE SEND IAC SE

      Client: IAC SB TERMINAL-TYPE IS UNKNOWN IAC SE

   In this example, the server requests additional terminal types, and
   proceeds beyond the end-of-list, to select the first type offered by
   the client (new-type client and server):

      Server: IAC DO TERMINAL-TYPE

      Client: IAC WILL TERMINAL-TYPE

         (Server may now request a terminal type at any time.)

      Server: IAC SB TERMINAL-TYPE SEND IAC SE

      Client: IAC SB TERMINAL-TYPE IS DEC-VT220 IAC SE

      Server: IAC SB TERMINAL-TYPE SEND IAC SE

      Client: IAC SB TERMINAL-TYPE IS DEC-VT100 IAC SE

      Server: IAC SB TERMINAL-TYPE SEND IAC SE

      Client: IAC SB TERMINAL-TYPE IS DEC-VT52 IAC SE

      Server: IAC SB TERMINAL-TYPE SEND IAC SE

      Client: IAC SB TERMINAL-TYPE IS DEC-VT52 IAC SE

      Server: IAC SB TERMINAL-TYPE SEND IAC SE

      Client: IAC SB TERMINAL-TYPE IS DEC-VT220 IAC SE

9. References:

     [1]  Postel, J., and J. Reynolds, "Telnet Protocol Specification",
          RFC 854, USC Information Sciences Institute, May 1983.

     [2]  Postel, J., and J. Reynolds, "Telnet Option Specification",
          RFC 855, USC Information Sciences Institute, May 1983.

     [3]  Solomon, M., and E. Wimmers, "Telnet Terminal Type Option",
          RFC 930, University of Wisconsin - Madison, January 1985.

     [4]  Reynolds, J., and J. Postel, "Assigned Numbers", RFC 1010,
          USC Information Sciences Institute, May 1987.

Reviser's note:

   I owe much of this text to RFCs 884 and 930, by Marvin Solomon and
   Edward Wimmers of the University of Wisconsin - Madison, and I owe
   the idea of the extension to discussions on the "tn3270" mailing list
   in the Summer of 1987.

Author's Address

   James VanBokkelen
   FTP Software, Inc.
   26 Princess Street
   Wakefield, MA 01880-3004

   Phone: (617) 246-0900

   Email: jbvb@ftp.com

ISO Plain Language

On this page
PROBLEMA modern client usually emulates several kinds of terminal at once, and the server needs to know which one to talk to. The earlier Telnet option allowed only one name, treated several names as synonyms, and could be scanned only once.
MECHANISMThe option keeps the familiar negotiation, with the server asking and the client answering, and adds a way to walk down a list. The client sends a different name each time it is asked, and repeats the last name to signal the end of the list.
WHAT IT CHANGESA server that does not understand the first name can ask again and get the next one, so the client can offer a choice in preference order. The RFC supersedes RFC 930 and keeps the old behaviour working by assuming one thing about implementations built to the previous standard.

§1The Option and Its Commands

The option is called TERMINAL-TYPE and has the code 24. Its four negotiation commands carry the usual meanings. WILL means the sender is willing to send terminal type information in a subsequent sub-negotiation, WON'T means the sender refuses to send it, DO means the sender is willing to receive it in a subsequent sub-negotiation, and DON'T means the sender refuses to accept it.

Two sub-commands carry the information itself. IAC SB TERMINAL-TYPE SEND IAC SE means the server requests the client to transmit his next terminal type and to switch emulation mode if more than one terminal type is supported; the code for SEND is 1. IAC SB TERMINAL-TYPE IS ... IAC SE means the client is stating the name of his current or only terminal type; the code for IS is 0.

The default state is that terminal type information is not exchanged: the default for the sending side is WON'T TERMINAL-TYPE and the default for the receiving side is DON'T TERMINAL-TYPE.

Four commands agree whether to talk about terminal types at all, and two sub-commands do the talking. The default is not to talk about them.

The commands the option uses
  • IAC WILL TERMINAL-TYPEOption 24 — The sender is willing to send terminal type information in a later sub-negotiation.
  • IAC WON'T TERMINAL-TYPEOption 24 — The sender refuses to send terminal type information.
  • IAC DO TERMINAL-TYPEOption 24 — The sender is willing to receive terminal type information in a later sub-negotiation.
  • IAC DON'T TERMINAL-TYPEOption 24 — The sender refuses to accept terminal type information.
  • IAC SB TERMINAL-TYPE SEND IAC SESEND is 1 — The server asks the client for its next terminal type and to switch emulation mode.
  • IAC SB TERMINAL-TYPE IS ... IAC SEIS is 0 — The client states the name of its current or only terminal type.

§4Why the Option Exists

On most machines with bit-mapped displays, such as personal computers and graphics workstations, a client terminal emulation program is used to simulate a conventional ASCII terminal. Most of these programs have multiple emulation modes, frequently with widely varying characteristics. Likewise, modern host system software and applications can deal with a variety of terminal types.

What is needed is a means for the client to present a list of available terminal emulation modes to the server, from which the server can select the one it prefers, for arbitrary reasons. There is also a need for a mechanism to change emulation modes during the course of a session, perhaps according to the needs of application programs.

The existing terminal-type passing mechanisms within Telnet were not designed with multiple emulation modes in mind. While multiple names are allowed, they are assumed to be synonyms. Emulation mode changes are not defined, and the list of modes can only be scanned once. This document defines a simple extension to the existing mechanisms which meets both criteria, and it makes one assumption about the behaviour of implementations coded to the previous standard in order to obtain full backwards compatibility.

The problem was not just naming the terminal. A client could offer several terminal types, but the server could not ask for the next one after rejecting the first, and there was no way to say that the client had switched to a different one.

Why a list of terminal types was needed
  • Many emulation modesA terminal emulator on a modern machine usually has several modes with widely varying characteristics.
  • The server wants to chooseWhat is needed is a way for the client to present the list of modes so the server can pick the one it prefers, for arbitrary reasons.
  • Changing during the sessionThere is also a need for a mechanism to change emulation modes during a session, perhaps to suit an application.
  • What the old way could not doThe earlier mechanisms allowed several names but assumed they were synonyms, did not define mode changes, and could only scan the list once.

§5How the Exchange Works

Willingness to exchange terminal-type information is agreed through conventional Telnet option negotiation. WILL and DO are used only to obtain and grant permission for future discussion; the actual exchange happens within the option sub-commands.

Once the two hosts have exchanged a WILL and a DO, the sender of the DO, which is the server, is free to request type information. Only the server may send requests and only the client may transmit actual type information. Terminal type information may not be sent spontaneously, but only in response to a request.

The terminal type information is an NVT ASCII string, within which upper and lower case are considered equivalent. The complete list of valid terminal type names is kept in the latest Assigned Numbers document.

The transmission of terminal type information by the client implies that the client must simultaneously change emulation mode, unless the type sent is a synonym of the preceding type, or there are other prerequisites for entering the new regime, such as having agreed the Telnet binary option. The receipt of such information by the server does not imply any immediate change of processing, but the information may be passed to a process, which may alter the data it sends to suit the characteristics of the terminal. Some operating systems have a terminal driver that accepts a code indicating the type of terminal being driven, and by using the TERMINAL TYPE and BINARY options a Telnet server on such a system could arrange to have terminals driven as if they were directly connected, including special functions not available to a standard Network Virtual Terminal.

The specification is deliberately asymmetric. It is assumed that server operating systems and applications in general cannot change terminal types at arbitrary points in a session, so the client may only send a new type, and potentially change emulation modes, when the server requests that it do so.

Answering the server also means switching the emulator to match the name sent. The server does not have to act immediately, but it may pass the name to the program that produces the output so that it can format things for that terminal.

The opening of the exchange, as shown in the example in the RFC
ServerClient
  1. IAC DO TERMINAL-TYPEThe server is willing to receive terminal type information.
  2. IAC WILL TERMINAL-TYPEThe client is willing to send it.
  3. IAC SB TERMINAL-TYPE SEND IAC SEThe server asks for the next terminal type.
  4. IAC SB TERMINAL-TYPE IS IBM-3278-2 IAC SEThe client answers with a name and switches emulation mode.
The rules that make the exchange work
  • Asymmetric by designOnly the server may ask and only the client may answer, because server operating systems and applications cannot change terminal types at arbitrary points in a session.
  • No spontaneous messagesTerminal type information may not be sent except in response to a request.
  • Case does not matterThe terminal type information is an NVT ASCII string, and upper and lower case are considered equivalent.
  • One spellingThe list of valid names is kept in the Assigned Numbers document, to avoid confusion caused by different spellings of the same terminal.
  • UnknownThe type UNKNOWN should be used if the type of the terminal is unknown or unlikely to be recognized by the other party.

§6Cycling Through a List of Terminal Types

The terminal type information may be any NVT ASCII string meaningful to both ends of the negotiation. The list of terminal type names in the Assigned Numbers document is intended to minimize confusion caused by alternative spellings, because confusion would arise if one party called a terminal one thing and the other called it another. There is no negative acknowledgement for a terminal type that is not understood, but other options, such as switching to binary mode, may be refused if a valid terminal type name has not been specified.

In some cases a particular terminal may be known by more than one name, for example a specific type and a more generic type, or the client may be a workstation with an integrated display capable of emulating more than one kind of terminal. In such cases the sender of the IS command should reply to successive SEND commands with the various names, so that a server that does not understand the first response can prompt for alternatives. If different terminal emulations are supported by the client, the mode of the emulator must be changed to match the last type sent, unless that emulation has other Telnet options as prerequisites, in which case the emulation switches when the prerequisite is fulfilled. When types are synonyms they should be sent in order from most to least specific.

When the server receives the same response two consecutive times, that indicates the end of the list of available types. Similarly, the client should indicate that it has sent all available names by repeating the last one sent. If an additional request is received, that indicates the server wishes to return to the top of the list of available types, probably to select the least of N evils.

Server implementations conforming to the previous standard will cease sending SEND commands after receiving the same response two consecutive times, which works according to the old standard. It is assumed that client implementations conforming to the previous standard will send the last type on the list in response to a third query as well as the second, and new-style servers must recognise this and not send more queries.

The type UNKNOWN should be used if the type of the terminal is unknown or unlikely to be recognized by the other party. The complete and up-to-date list of terminal type names is maintained in the Assigned Numbers document, and the maximum length of a terminal type name is 40 characters.

The client offers its terminal types in order of preference, and repeats the last one to say that is all of them. The server walks down the list until it finds one it understands.

How the client walks down its list
  • Repeat to end the listWhen the server receives the same response twice in a row, the list of available types has ended.
  • Synonyms go from specific to generalWhen types are synonyms, they should be sent in order from most to least specific.
  • Repeating the last one ends itThe client should indicate that it has sent all available names by repeating the last one sent.
  • Going past the end wraps aroundAn additional request after the end means the server wants to return to the top of the list.
  • Old servers stop at the repeatA server built to the previous standard stops sending requests after receiving the same response twice, which works under the old rules too.
  • New servers must not query againA client built to the previous standard answers the third query with the last type on its list, and a new-style server has to recognise that and stop.

§8Worked Examples

The first example is the simplest case, where the server finds the first type acceptable. The server sends DO TERMINAL-TYPE and the client replies WILL TERMINAL-TYPE, after which the server may request a terminal type at any time. The server then sends SEND and the client answers with IS and the name IBM-3278-2.

The second example is compatible with the previous standard. The server asks and the client answers with ZENITH-H19. The server asks again and the client answers with UNKNOWN. The server asks a third time and the client answers with UNKNOWN again, which is how the end of the list is signalled.

The third example is the new behaviour, where the server requests additional terminal types and proceeds beyond the end of the list to select the first type offered by the client. The client offers DEC-VT220, then DEC-VT100, then DEC-VT52, then repeats DEC-VT52 to mark the end of the list, and after one more request from the server it starts again with DEC-VT220.

The examples show the three cases: the server takes the first name offered, the server takes the last name on an old-style list, and the server walks past the end of the list and comes back round to the first.

The example where the server walks past the end of the list
Cycling through the list
Server: IAC DO TERMINAL-TYPE
Client: IAC WILL TERMINAL-TYPE
Server: IAC SB TERMINAL-TYPE SEND IAC SE
Client: IAC SB TERMINAL-TYPE IS DEC-VT220 IAC SE
Server: IAC SB TERMINAL-TYPE SEND IAC SE
Client: IAC SB TERMINAL-TYPE IS DEC-VT100 IAC SE
Server: IAC SB TERMINAL-TYPE SEND IAC SE
Client: IAC SB TERMINAL-TYPE IS DEC-VT52 IAC SE
Server: IAC SB TERMINAL-TYPE SEND IAC SE
Client: IAC SB TERMINAL-TYPE IS DEC-VT52 IAC SE
Server: IAC SB TERMINAL-TYPE SEND IAC SE
Client: IAC SB TERMINAL-TYPE IS DEC-VT220 IAC SE

§6References