RFC 1921
TNVIP Protocol
Status of this Memo โจ
okay so this memo is just giving info to the Internet community ๐ธ it is NOT a standard of any kind, and you can share it as much as you want (distribution is unlimited) ๐
Abstract ๐ซถ
the goal here is a Telnet profile that lets VIP terminals emulate and reach BULL host applications over a TCP/IP network ๐ฅ๏ธโจ basically it makes Telnet speak VIP so the terminal can get to the BULL hosts ๐
Table of Contents ๐
1. Motivation . . . . . . . . . . . . . . . . . . . . . . 2
2. Background . . . . . . . . . . . . . . . . . . . . . . 3
3. Telnet Options and Commands Used . . . . . . . . . . . 3
3.1. Terminal type option . . . . . . . . . . . . . . . . 4
3.1.1. Subnegotiation of the Terminal Type . . . . . . . . 4
3.1.2. Terminal-types supported by the TNVIP protocol . . 4
3.1.3. TNVIP terminal models . . . . . . . . . . . . . . . 5
3.1.4. Mailbox name . . . . . . . . . . . . . . . . . . . 5
3.2. End of Record Option . . . . . . . . . . . . . . . . 6
3.3. Binary Transmission option . . . . . . . . . . . . . 6
3.4. Suppress Go Ahead option . . . . . . . . . . . . . . 7
4. TNVIP functions . . . . . . . . . . . . . . . . . . . 8
4.1. TNVIP terminal station . . . . . . . . . . . . . . . 9
4.1.1. Local and online states . . . . . . . . . . . . . . 9
4.1.2. Data receiving . . . . . . . . . . . . . . . . . 10
4.1.3. Data sending . . . . . . . . . . . . . . . . . . 10
4.2. TNVIP Server functions . . . . . . . . . . . . . . 10
4.2.1. VIP Terminal Manager . . . . . . . . . . . . . . 10
5. TNVIP Messages Format . . . . . . . . . . . . . . . 12
5.1. Address Field . . . . . . . . . . . . . . . . . . . 12
5.2. Command field . . . . . . . . . . . . . . . . . . . 13
5.3. Parameter field . . . . . . . . . . . . . . . . . . 14
6. The screen flow . . . . . . . . . . . . . . . . . . 14
6.1. Screen data messages . . . . . . . . . . . . . . . 14
6.2. Local state monitoring messages . . . . . . . . . . 15
6.3. Screen response messages . . . . . . . . . . . . . 16
6.3.1 Page overflow processing . . . . . . . . . . . . . 17
6.4. Screen data purge indication message . . . . . . . 17
7. The printer flow . . . . . . . . . . . . . . . . . . 17
7.1. Printer data messages . . . . . . . . . . . . . . . 17
7.2. Printer response messages . . . . . . . . . . . . . 18
7.3. 7800 printer status management . . . . . . . . . . 19
7.4. Printer state request message . . . . . . . . . . 20
7.5. Printer state response messages . . . . . . . . . . 20
7.6. Printer purge indication message . . . . . . . . . 20
8. The Screen Copy Printing flow . . . . . . . . . . . 21
8.1. Screen copy request messages . . . . . . . . . . . 21
8.2. Screen copy data message . . . . . . . . . . . . . 21
8.3. Screen copy response messages . . . . . . . . . . . 22
8.4. Screen copy purge indication message . . . . . . . 23
9. The TM attention . . . . . . . . . . . . . . . . . . 23
10. The Break Key . . . . . . . . . . . . . . . . . . . 24
11. The Logout Key . . . . . . . . . . . . . . . . . . . 24
12. TNVIP messages list . . . . . . . . . . . . . . . . 24
12.1. Screen Flow . . . . . . . . . . . . . . . . . . . . 24
12.2. Printer flow . . . . . . . . . . . . . . . . . . . 26
12.3. Screen Copy Printing messages flow . . . . . . . . 28
13. Security Considerations . . . . . . . . . . . . . . 29
14. References . . . . . . . . . . . . . . . . . . . . . 30
15. Author's Address . . . . . . . . . . . . . . . . . . 30
1. Motivation ๐
P200 [7] and 7800 [8] VIP (Visual Information Projection) terminals are different from NVT terminals [1] mainly because they work in block mode and can manage an attached printer ๐จ๏ธโจ in a DSA (Distributed Systems Architecture) network they're controlled over the VIP transmission line procedure, which is character oriented ๐ that's why they're called VIP terminals in general ๐ง
this doc spells out the options you need to change, so a connection can go from NVT terminal emulation over Telnet to VIP terminal emulation ๐ฆ it also defines the format of the messages the server and client swap once TNVIP has been successfully negotiated ๐
2. Background ๐ธ
the VIP terminal family is huge, with lots of different terminal types ๐ they work in block mode using ASCII or 8 binary bits worth of characters ๐ฅ
Bull terminals in a DSA network use a Terminal Manager (TM) [2] ๐ง it usually lives in a communication processor (like a Datanet or Mainway system), where it keeps the connection to the BULL host application going, usually through a DSA session ๐ซถ
the Terminal Manager is in charge of presenting the terminal station and managing the session connection to the host ๐ it generally gives you a way to talk to the terminal so the user can change connection parameters and manage the session (connection request, abort, etc.) โจ the set of commands and responses used for that is called "TM Local Dialog" ๐
3. Telnet Options and Commands Used ๐
the mandatory telnet parameters that the "TNVIP server" and "TNVIP client" have to negotiate successfully are:
- the Terminal-Type option [3], to define a VIP terminal model and, if needed, a Mailbox name to request a specific access point in the "TNVIP server" ๐
- the End Of Record option [4], to delimit the TNVIP message at the Telnet level. Since the End Of Record (EOR) code marks the end of an actual data unit, Telnet should attempt to send the data up to and including the EOR code together, to promote communication efficiency ๐
other Telnet parameters can be optionally negotiated, like:
- the Binary Transmission option [5], when the terminal emulation uses an 8 binary bits set of characters ๐
- the Suppress Go Ahead option [6], when no synchronisation of data transmission from the "TNVIP client" with the DSA session turn or the ISO session token is needed ๐ฆ
when the two parties (the "TNVIP server" and the "TNVIP client") have successfully negotiated a TNVIP terminal type and the EOR telnet option, that means they agree to follow the TNVIP protocol (the TNVIP message format and the exchange rules) ๐ซถ๐
3.1 Terminal type option ๐ง
IAC DO TERMINAL-TYPE
the Sender (the "TNVIP server" party) is willing to receive terminal type information in a later sub-negotiation ๐
IAC WILL TERMINAL-TYPE
the Sender (the terminal "TNVIP client" party) is willing to send terminal-type information in a later sub-negotiation โจ
3.1.1 Subnegotiation of the Terminal Type ๐ท
IAC SB TERMINAL-TYPE SEND IAC SE
the Sender (the "TNVIP server" party) asks the receiver to send its next terminal-type, and to switch emulation modes (if more than one terminal type is supported) ๐
IAC SB TERMINAL-TYPE IS tnvip-terminal-model@MB-name IAC SE
the Sender (the terminal "TNVIP client" party) states the name of its current (or only) terminal-type ๐ optionally, a mailbox name can be added to request a particular access point in the "TNVIP server". by default, the "TNVIP server" uses a generic access point ๐
3.1.2 Terminal-types supported by the TNVIP protocol ๐
the TNVIP terminal type string given during Telnet negotiation is formatted like this:
<TNVIP-terminal-model> [ <@ character> <Mailbox-name> ]
the @ character is the separator between the VIP-terminal-model and the Mailbox-name ๐
3.1.3 TNVIP terminal models ๐
the valid TNVIP terminal models are these ASCII character strings. (the table gives, for each terminal model string, the hexadecimal number of the matching DSA model number defined in the DSA terminal presentation protocols ๐)
P200 family 7800 family
-------------------------------- --------------------------------
! TNVIP model ! DSA code ! ! TNVIP model ! DSA code !
-------------------------------- --------------------------------
! VIP7700 ! 33 ! ! VIP7804 ! 3E !
! VIP7760 ! 3A ! ! VIP7804V ! 4A !
! DKU7005 ! 3D ! ! VIP7814 ! 47 !
! DKU7007D ! 40 ! ! HDS7 ! 4D !
! DKU7105 ! 41 ! ! VIP8800 ! 4F !
! DKU7107D ! 42 ! --------------------------------
! DKU7211 ! 45 !
! DKU7211D ! 4E !
--------------------------------
the D at the end of a model string means the terminal supports the Remote Forms function [9] ๐งพ that's the ability to store forms in the terminal, so the host application can display a stored form by sending a short-length command instead of sending all the form's data ๐ซ this function is usually supported by terminal concentrators ๐ฅ๏ธ
3.1.4 Mailbox name ๐ฆ
the mailbox name lets the "TNVIP client" ask for a specialized access point that's referenced by this name in the "TNVIP server" ๐ it's an ASCII character string, and including it in the Telnet terminal type string is optional. when it's not there, the "TNVIP server" can give a generic (default) access instead ๐ซถ
when the "TNVIP server" is a gateway to DSA hosts, the mailbox name defines the DSA session access point of the terminal in the server ๐ธ its length is limited to 12 characters ๐ lower case characters are allowed, but they get processed as upper case ๐ this string is usually used to identify a specific terminal station (one with a printer, for example), or to use a particular declaration of that terminal in the "TNVIP server" ๐
3.2 End of Record Option ๐
VIP device communications are block oriented ๐งฑ each partner buffers data until a whole "message" has been built, and only then sends it to the other side ๐ฆ the end of a message is understood to be the last byte transmitted ๐
the Telnet EOR command is used to delimit these natural blocks of TNVIP data inside the Telnet data stream โจ an <EOR> is sent at the end of each TNVIP message, in both directions ๐
IAC WILL END-OF-RECORD
the sender of this command asks for permission to begin transmitting the Telnet END-OF-RECORD (EOR) code when transmitting data characters, or the sender confirms that it will now start transmitting EORs with its data characters ๐
IAC DO END-OF-RECORD
the sender of this command asks that the sender of data starts transmitting the EOR code when transmitting data, or the sender confirms that the sender of data is expected to transmit EORs ๐
3.3 Binary Transmission option ๐ฆ
Okay so, depending on the character set the emulation is using, the "TNVIP client" and the "TNVIP server" can be led to negotiate the Telnet binary transmission option. Binary mode, bestie! ๐
If either side wants to send the decimal value 255 and have it read as data, it must "double" this byte. In other words, a single 255 gets read by the other side as an IAC, while two 255s in a row get treated as one data byte with a value of 255. Plot twist, right? ๐ญ
Here's how the three-ish main commands play out:
IAC DO TRANSMIT-BINARY
The sender is asking the sender of the data to start transmitting, or confirming that the data sender is expected to transmit characters that the receiver should interpret as 8 bits of binary data. โจ
IAC WILL TRANSMIT-BINARY
The sender is asking permission to begin transmitting, or confirming that it will now begin transmitting binary data. ๐ธ
IAC WON'T TRANSMIT-BINARY
If the connection is already running in binary transmission mode, the sender of this command demands to start transmitting data characters that the receiver should interpret as standard NVT ASCII characters. If the connection is not already in binary mode, the sender is refusing to start transmitting characters that the receiver would interpret as binary. (In other words, the data sender wants to keep transmitting in its current mode.) Main character energy, no cap. ๐
IAC DON'T TRANSMIT-BINARY
If the connection is already in binary transmission mode, the sender of this command is asking the data sender to start transmitting characters that the receiver (aka the person sending this command) should interpret as standard NVT ASCII characters. If the connection is not already in binary mode, the sender is asking the data sender to keep transmitting in the mode it's already using. ๐
3.4 Suppress Go Ahead option ๐ง
The "TNVIP client" can use receiving the Telnet GoAhead command as the signal that lets the terminal operator transmit data. This can keep the data coming from the terminal in sync with the DSA "turn". Iconic synchronisation moment. ๐ซถ
When the Suppress Go Ahead option is not negotiated, the "TNVIP server" must send the Telnet Go Ahead command (GA) when its input message queue (the one filled by the "TNVIP client") is empty and the DSA turn is on the terminal side. This invites the terminal to transmit some data. ๐
To turn that mechanism off, the "TNVIP client" can ask the "TNVIP server" not to send Telnet GoAhead commands, by negotiating the Suppress GO Ahead option of the Telnet Protocol. ๐
In that case, the terminal's transmission to the "TNVIP server" is synchronised on the transport credit. โจ
Note: The Telnet GA command never need to be sent by the "TNVIP client" even if the telnet Suppress Go Ahead has not been negotiated. ๐
Here are the four commands for this option:
IAC DO SUPPRESS-GO-AHEAD
The sender of this command (the "TNVIP client" party) is asking the data sender to start suppressing GA when it transmits data. ๐
IAC WILL SUPPRESS-GO-AHEAD
The sender of this command (the "TNVIP server" party) confirms that it will now begin suppressing GA transmission with its data characters. ๐
IAC DON'T SUPPRESSS-GO-AHEAD
The sender of this command (the "TNVIP client" party) is asking the receiver of the command to start transmitting GAs when it transmits data. ๐
IAC WON'T SUPPRESS-GO-AHEAD
The sender of this command (the "TNVIP server" party) confirms that it will now begin transmitting the GA character when it transmits data characters. ๐
4. TNVIP functions โจ
The TNVIP protocol lets you do all of these fun things: ๐ธ
- Support a VIP terminal emulation that addresses the screen and its associated printer.
- Select the terminal type model when the connection is made.
- Get specific or generic access to the "TNVIP server", by referencing a Mailbox name or not.
- Keep TNVIP independent of the terminal data presentation protocol (7800 or P200), so it's not tied to one of them. Flexible, bestie! ๐ฆ
- Support the DSA End To End Acknowledgement.
- Support the DSA Terminal Manager local attention.
- Support the DSA turn to the terminal side.
- Support the DSA secret read.
- Control the hard copy.
4.1 TNVIP terminal station ๐ป
The "TNVIP client" acts as the interface adapter between the TNVIP connection and an application program. It's mainly defined to support a VIP terminal emulation program, but other programs that use the TNVIP protocol can use it too. ๐
A VIP terminal emulation manages:
- a screen buffer,
- a printer buffer if it supports the associated printer,
- the interface with the communication line
and runs by the following rules:
When the VIP terminal emulation exchanges a message on the communication line, it is in the BUSY state until the message exchange ends. That means that while the VIP terminal is sending a message it can't receive, and while it's receiving a message it can't send. Just like a phone call, you can't talk and listen at the same time (without getting awkward) ๐
Note: If a VIP terminal works in half duplex mode, the TNVIP protocol uses a Telnet connection, which allows full duplex mode processing. Lowkey a plot twist! ๐ฅ
4.1.1 Local and online states ๐
The VIP terminal can switch between these two states. The LOCAL state is generally used to run local terminal tests or to change the configuration. In this state, data coming from the line is ignored. ๐
The LOCAL state lets the "TNVIP client" ask the server to suspend the screen and printer data flows.
The ONLINE state indication lets the "TNVIP server" resume the screen and printer flows. โจ
For these reasons, the TNVIP protocol tells the screen and printer flows apart from the screen copy printing flow, and it defines a way to report the two states to the "TNVIP server". ๐
4.1.2 Data receiving ๐ฅ
When a VIP terminal emulation receives a data message from the line, it sends the data to the screen buffer or the printer buffer, depending on the address in the header message. ๐
A message received at the screen or printer address is deleted and ignored if the terminal emulation is in the LOCAL state, and a BUSY status is returned. ๐ซ
The printer buffer is busy while the terminal is transmitting data from the printer buffer to the printer device. A data message for the printer is deleted and ignored if the terminal is in the printing state, and a BUSY status is returned. ๐จ๏ธ
When a BUSY state is encountered, the "TNVIP client" decides, based on the type of message received (request or indication), whether or not to report the BUSY acknowledgement to the "TNVIP server". Choices, choices! ๐
4.1.3 Data sending ๐ค
A VIP terminal emulation can send a message even if the terminal is in the LOCAL state. Bestie, it's giving freedom! ๐ฆ
4.2 TNVIP Server functions ๐ฅ๏ธ
4.2.1 VIP Terminal Manager ๐
Its job is to act as a gateway between the VIP terminal and the VIP application. Usually the application is a remote DSA application. ๐
It manages the screen and printer devices of the VIP terminal station.
In the following example figure, the "TNVIP server" is a DSA server and manages three VIP terminal units: TU1, TU2 and TU3. Let's look at the diagram, obsessed ๐ญ
Generic access
--------------
!----> LD 1S ----> DV 1S (screen) ---->!
MB 1 --> SN 1 TU 1
!----> LD 1P ----> DV 1P (printer) ---->!
Specific accesses
-----------------
!----> LD 2S ----> DV 2S (screen) ---->TU 2
MB 2 --> SN 2
!----> LD 2P ----> !
!
!----> LD 3P ----> DV 3S (printer) ---->!
MB 3 --> SN 3 TU 3
!----> LD 3S ----> DV 3P (screen) ---->!
Each Terminal Unit (TU object) is declared as containing one or two devices (DV objects). The Terminal Manager maps this physical setup to a logical one, where the station (SN object) is the logical representation of a terminal unit, and the logical device (LD) object is the logical representation of the real device. Layers, bestie! ๐ง
- TU1 is chosen by default for a generic request (without a mailbox name), or by addressing the MB1 name for a specific request. It can manage the associated printer device. ๐
- MB2 is addressed to access the TU2 terminal unit. TU2 is defined in a special way, because it's presented to the host application as a station made up of a screen (the TU2 one's) and a printer (the TU3 one's). โจ
- MB3 is addressed to access the TU3 terminal unit. TU3 is also defined in a special way, because its printer device is shared by several logical stations (SN2 and SN3), so it has to be clearly identified. ๐
5. TNVIP Messages Format ๐
Each TNVIP message is delimited by the Telnet EOR command. โจ
So a TNVIP message has the following format:
<TNVIP Header> <parameters> <IAC EOR>
The TNVIP header is mandatory and has a fixed length of two bytes. ๐ฅ
Some TNVIP messages don't need any parameters. In that case, the TNVIP message is built like this:
<TNVIP Header> <IAC EOR>
It is strongly recommended that Telnet commands (other than IAC IAC) be sent between TNVIP messages, with no TNVIP header and no trailing IAC EOR. If a TNVIP data message containing any other IAC-command sequence (other than IAC IAC) is received, it is implementation dependent when that IAC-command sequence gets processed, but it must be processed. The receiver may process it immediately, which in effect causes it to be processed as if it had been received before the current TNVIP message, or the processing may be deferred until after the current TNVIP message has been processed. ๐ซจ
Because of this ambiguity, having Telnet commands inside a TNVIP message is not recommended, so neither "TNVIP client"s nor "TNVIP server"s should send such data. Keep it clean, babe! ๐งผ
The TNVIP header contains 2 bytes. The first one indicates the address <ADR>, and the second one indicates the command <CDE>. ๐
5.1 Address Field ๐ฎ
The <ADR> address field is mandatory and is defined on one byte. ๐ท
The TNVIP protocol defines 3 addresses:
- ADR = SCREEN = 96 (0x60) for the screen commands flow,
- ADR = PRINTER = 104 (0x68) for the printer commands flow,
- ADR = SCPM = 105 (0x69) for the screen copy printing commands flow.
A request message with an unknown or unsupported address will be discarded by the receiver, which replies with a NOT-AVAILABLE response message. Ghosted, and it's giving rejection ๐
5.2 Command field โจ
okay so the <CDE> command field is mandatory ๐
and it's exactly one byte, no more, no less. bestie, this byte is literally the boss of the message. Its layout looks like this:
<Command-Type><Message-Type>
- The Command-Type fills the six most significant bits of the
<CDE>byte. The most significant bit is always0. Its value ranges from0to31included, and it defines the command associated to the message for the flow identified by the address field. ๐ฆ - The Message-Type fills the two less significant bits of the
<CDE>byte. There are four flavours:0= Indication message. No response message is expected. An indication message with an undefined command type or with an unknown address is deleted and ignored. ๐ซถ1= Request message. The sender of a request message is waiting for a response message having the same address value. When a request message is sent for a given address, it is not allowed to send another request to the same address before the receiving response. If an end point receives a request before having sent the response of the previous request, it deletes the second request but has to send back a PROTOCOL-VIOLATION response after the response of the first request. A request message with a not defined address is replied to by a NOT-AVAILABLE response message. A request message with an unknown or unsupported command<CDE>for this address will be deleted by the receiver and replied to by an UNKNOWN-COMMAND response message. ๐2= Response message. This message is the response to the current request message. The receiver of this message is allowed to send another request message on the flow defined by the ADR field. ๐3= Response and request message. This message is a positive response to the current request message sent by the receiver, but is also a request message. ๐ฅ
The following table gives the <CDE> commands list with their hexadecimal values. the vibes are very organised here ๐
Command Indication Request Response Resp/Req
--------------------------------------------------------
DATA 00 01
PASSW 04 05
ACK 0A
ERROR 0E
BUSY 12
ABORTED 16
PURGED 1A
NOT-AVAILABLE 1E
PROTOCOL-VIOLATION 22
UNKNOWN-COMMAND 26
PURGE 28
LOCAL-STATE 2D
ONLINE-STATE 30
STATE-REQ 35
READY 3A
STANDBY 3E
COPY-REQ 41
LOCAL-COPY 47
5.3 Parameter field ๐
This field has a variable length, and what's in it depends on the two previous fields (address and command). it's giving "it depends on the vibe" energy ๐ธ
6. The screen flow โจ
All the following messages contain the value SCREEN = 96 (0x60) in the ADR field. the screen is the main character here ๐
6.1 Screen data messages ๐ป
These messages are defined to carry, in the parameter field of the TNVIP message, the data in the terminal presentation negotiated by the "Terminal Type" telnet command.
The parameter has the following format:
<FC1> <FC2> <STX> < screen data>
- The FC1 and FC2 bytes are the function codes of the VIP procedure transmission [9]. Their values are comprised between
32 (0x20)included and127 (0x7F)included. โจ - The STX byte is defined by the value
2and acts as the introducer of the screen data. ๐ง
A screen data message can be sent in a request or in an indication message. The command values are defined as follows:
<CDE> = DATA indication = 0
<CDE> = DATA request = 1
<CDE> = PASSWORD indication = 4
<CDE> = PASSWORD request = 5
Generally, the "TNVIP server" only sends indication messages to the screen. The request message is used mainly for the printer device. But a DSA/TNVIP gateway server should use the screen data request message when it processes a DSA end to end acknowledgement request from the DSA application, and it synchronizes the response message receipt with the DSA end to end acknowledgement. ๐ซถ
The password request and the password indication message are defined to be used by the programs in the "TNVIP client" machine which don't emulate a terminal. That way, they know a secret read (password acquisition) has been requested by the "TNVIP server". When the program is a terminal emulation, this information isn't necessary, because the data contains the terminal presentation command to request this secret read. ๐
6.2 Local state monitoring messages ๐
Before switching into the local state, the "TNVIP client" sends a LOCAL-STATE request message to the "TNVIP server". This last one sends back an acknowledgement message and suspends the screen and printer data flow until it receives a LINE-STATE indication message. the handshake is giving polite bestie energy ๐ค
Note: In the local state, only the messages from the "TNVIP server" to the screen or printer devices are deleted. The messages from the "TNVIP client" screen device, or the messages associated to other addresses, are allowed. ๐
The following command values are defined as:
<CDE> = LOCAL-STATE request = 45 (0x2D). It is sent by the "TNVIP client". There is no parameter field.<CDE> = ONLINE-STATE indication = 48 (0x30). It is sent by the "TNVIP client" to indicate the "TNVIP server" is allowed to resume the screen data flow. There is no parameter field. ๐ฆ
6.3 Screen response messages ๐
These messages are indications used to respond to the screen data request previously received.
The command values are defined as follows:
<CDE> = ACK response indication = 10 (0x0A). The screen data previously received has been well processed, or the LOCAL STATE is acknowledged by the "TNVIP server". There is no parameter field. ๐<CDE> = ERR response indication = 14 (0x0E). The screen data previously received has not been correctly processed. There is no parameter field. ๐ญ<CDE> = BUSY response indication = 18 (0x12). The screen data previously received has been deleted because the terminal is in the local state. There is no parameter field. ๐<CDE> = ABORTED response indication = 22 (0x16). The receipt of the screen data request has been aborted by a reset terminal command. There is no parameter field. ๐<CDE> = PURGED response indication = 26 (0x1A). The processing of the screen data request has been aborted by a purge indication message. There is no parameter field. ๐งน<CDE> = NOT-AVAILABLE response indication = 30 (0x1E). The screen device is not supported. Normally this command never has to be generated, because the screen device should always be present. There is no parameter field. ๐ซ<CDE> = PROTOCOL-VIOLATION response indication = 34 (0x22). The screen request received has been deleted because another screen request is already in process. That means several screen request messages have been sent without waiting for the response. It is a consequence of the non-compliance of the protocol. There is no parameter field. ๐ซ<CDE> = UNKNOWN-COMMAND response indication = 38 (0x26). The screen request received has been deleted because the<CDE>field value is unknown. It is a consequence of the non-compliance of the protocol. There is no parameter field. โ
6.3.1 Page overflow processing ๐
The page overflow processing is not supported through the TNVIP protocol, to avoid retransmitting the message. That leads the "TNVIP client" side to process it locally. When a data message induces a page overflow, the terminal emulation alerts the user, possibly requesting (in manual mode) an "enter" action before clearing the screen and reprocessing the data received. ๐
Note: When the "TNVIP client" is processing a page overflow, the terminal emulation should be in the BUSY state and should stop getting messages from the line ("TNVIP server") until the page overflow processing is complete. โธ๏ธ
6.4 Screen data purge indication message ๐งน
This message is used to purge the current screen request message. When the side that receives the message has not already acknowledged the screen request, it tries to abort the processing of the request and returns a screen purged response message. If it has already replied, it ignores and deletes the message. bestie, it's a clean-up crew ๐ซง
The following command value is defined as:
<CDE> = PURGE indication = 40 (0x28). There is no parameter field. ๐
7. The printer flow ๐จ๏ธ
All the following messages contain the PRINTER value 104 (0x68) in the ADR field. The support of this address is optional. If the "TNVIP server" doesn't address this device, no message with this address will be exchanged. If the "TNVIP client" receives a request message with this address and does not support the printer, it replies with a printer NOT-AVAILABLE response message. ๐งธ
7.1 Printer data messages ๐จ๏ธ
These messages are defined to carry the printer data in the parameter field of the TNVIP message. These messages are only sent from the "TNVIP server" to the "TNVIP client".
The parameter has the following format:
<FC1> <FC2> <STX> <printer data>
- The FC1 and FC2 bytes are the function codes of the VIP procedure transmission. Their values are ranged from
32 (0x20)to127 (0x7F)included. โจ - The STX byte is defined by the value
2and acts as the introducer of the printer data. ๐ท
To manage the printer device correctly, the protocol only defines a request message. Meanwhile, the "TNVIP server" is ensured that the "TNVIP client" processes a screen data message only when the previous one has been processed. When it receives a printer data message, the "TNVIP client" transfers it into the printer buffer. The terminal is busy only during this transfer. So, if the "TNVIP client" receives another printer data, it deletes them, because the previous printing (transfer between the printer buffer and the printer) has not ended yet. ๐
The printer data structure depends on the terminal presentation family (P200 or 7800). The two presentations define two modes of printing. The first one needs the printer data to be in the presentation of the screen (7800 or P200 commands), and the data is converted by the terminal into the printer presentation (TTY, SDP, copy). The second mode allows the printer data to be given in the real presentation of the printer. For this reason, it is called "transparent print". ๐ช
In the P200 terminal presentation, transparent print data are introduced by the sequence of the two ASCII characters ESC Z (0x1B 0x5A ). P200 formatted print is introduced by the sequence of two ASCII characters ESC X (0x1B 0x58) or ESC Y (0x1B 0x59). ๐
In the 7800 terminal presentation, transparent print data are introduced by the command PTD (Print Transparent Data). 7800 formatted print is introduced by the command PHD (Print Host Data). ๐ค
The command value is defined as:
<CDE> = DATA request = 1 (0x01).
7.2 Printer response messages ๐
okay bestie, these are the messages the printer uses to report how the printing went for the printer data request it got earlier ๐จ๏ธโจ here are the response values:
<CDE> = ACK response indication = 10 (0x0A): the printer data came through and was processed well ๐<CDE> = ERR response indication = 14 (0x0E): the printer data was not processed correctly ๐ this can happen for an invalid command, a buffer overflow, or the printer being off (printer off...)<CDE> = BUSY response indication = 18 (0x12): the printer data got deleted because the previous printing request hasn't ended yet. this happens when several printer data request messages get sent without waiting for a response ๐ญ<CDE> = ABORTED response indication = 22 (0x14): the terminal operator aborted the printing ๐<CDE> = PURGED response indication = 26 (0x18): the printing request was aborted by a printer data purge indication message ๐งน<CDE> = NOT-AVAILABLE response indication = 30 (0x1E): the printer device isn't supported ๐<CDE> = PROTOCOL-VIOLATION response indication = 34 (0x22): the printer request got deleted because another printer request was already in process. that means several printer request messages were sent without waiting for the response. it's a consequence of not following the protocol, and there is no parameter field ๐ซ<CDE> = UNKNOWN-COMMAND response indication = 38 (0x26): the printer request got deleted because the<CDE>field had a value that isn't known. again, that's a consequence of not following the protocol, and there is no parameter field ๐คจ
for all of the above, the parameter field may hold specific terminal status if one was requested in the printer data received (the response to the PDENQ 7800 terminal presentation command) ๐
7.3 7800 printer status management ๐จ๏ธ๐
when a "TNVIP client" is emulating a 7800 terminal [8], it handles adding the printer differed status request (PDENQ 7800 command) to the printer data. this lines up the end of printing with sending the printer acknowledgement response, so everything stays in sync ๐
some DSA applications manage the 7800 printer status themselves, so they send the printer status request at the start of the printer data. so when the "TNVIP client" sees this command at the beginning of the printer data, it must send the 7800 status response back in the parameter field of the printer data response message. main character energy for real ๐
the 7800 terminal presentation also has an immediate printer status request and response (PENQ, which gets an immediate answer showing the current printer status). those commands have to be exchanged in the TNVIP screen data flow ๐ฆ
7.4 Printer state request message ๐
this message is sent by the "TNVIP server" to check the printer state of the "TNVIP client" without sending any printer data ๐
the command value is:
<CDE> = STATE-REQ request = 53 (0x35): there is no parameter field ๐ง
7.5 Printer state response messages ๐
these messages are sent by the "TNVIP client" to report the printer state back to the "TNVIP server" ๐
<CDE> = READY response indication = 58 (0x3A): the printer is ready to print โ there is no parameter field<CDE> = STANDBY response indication = 62 (0x3E): the printer device is on standby and temporarily unavailable ๐ด there is no parameter field<CDE> = PURGED response indication = 26 (0x1A): the printer state request got aborted by a printer state purge indication message ๐งน there is no parameter field<CDE> = NOT-AVAILABLE response indication = 30 (0x1E): the printer device isn't supported ๐ there is no parameter field<CDE> = PROTOCOL-VIOLATION response indication = 34 (0x22): the printer state request got deleted because another printer request was already in process. that means several printer request messages were sent without waiting for the response. it's a consequence of not following the protocol, and there is no parameter field ๐ซ<CDE> = UNKNOWN-COMMAND response indication = 38 (0x26): the printer state request got deleted because the<CDE>field value is unknown. it's a consequence of not following the protocol, and there is no parameter field ๐คจ
7.6 Printer purge indication message ๐งน
the "TNVIP server" uses this message to purge the current printer request message ๐ซถ when the "TNVIP client" receives it, the client checks whether it has already acknowledged the printer data. if it hasn't, it aborts the printing and sends back a printer data purge acknowledgement response message. if it has already replied, it ignores the message and deletes it. iconic restraint ๐
the printer purge command value is:
<CDE> = PURGE indication = 40 (0x28): there is no parameter field โจ
8. The Screen Copy Printing flow ๐ธ
every one of the following messages carries the SCPM address value 105 (0x69) in the ADR field. support for this address is mandatory ๐
8.1 Screen copy request messages ๐ผ๏ธ
the printer device can also be used by the "TNVIP server". so if the terminal user wants a screen copy printed, the "TNVIP" client has to line up the user's request with the "TNVIP server" printing ๐ค
the TNVIP protocol says that the "TNVIP client" has to tell the "TNVIP server" when it wants to print a screen copy, and it waits for permission before starting ๐ฆ
the command values are:
<CDE> = COPY-REQ request = 65 (0x41): sent from the "TNVIP client" to the "TNVIP server" to request a screen copy printing ๐จ<CDE> = LOCAL-COPY response and request = 71 (0x47): sent by the "TNVIP server" to acknowledge the COPY-REQ message, saying the screen copy can be done locally ๐ it's also a request message, since it works like a screen copy data request message and the "TNVIP server" is waiting for a screen copy response message from the "TNVIP client", just on the SCPM flow ๐ there is no parameter field
8.2 Screen copy data message ๐ธ
these messages carry the screen copy data in the terminal presentation inside the parameter of the message. the "TNVIP client" uses them when it wants to send the screen copy data straight to the DSA application (a VIP terminal using a VIP transmission procedure flags this special request with the STA byte =PRT=0x1A) ๐ฏ
the parameter field looks like this:
<FC1> <FC2> <STX> <screen-copy-data>
- the FC1 and FC2 bytes are the function codes of the VIP procedure transmission. their values range from 32 (0x20) to 127 (0x7F), included ๐ข
- the STX byte is defined by the value 2 and acts as the introducer of the screen data ๐ช
a screen copy data message can be sent in a request or an indication message ๐ฌ
the command values are:
<CDE> = DATA indication = 0<CDE> = DATA request = 1
8.3 Screen copy response messages ๐
these messages are sent by the "TNVIP client" (local copy) to report the end of printing status of the screen copy ๐จ๏ธ
the ACK response is also used by the "TNVIP server" to acknowledge a screen copy data request sent to the host application ๐
the ERR message is also used by the server to refuse a COPY-REQ message ๐
the command values are:
<CDE> = ACK response indication = 10 (0x0A): the "TNVIP client" reports the screen copy was printed well, or the "TNVIP server" acknowledges the screen copy data request ๐ there is no parameter field<CDE> = ERR response indication = 14 (0x0E): the screen copy wasn't printed correctly (invalid command, buffer overflow ...) or the "TNVIP server" refused it ๐ฌ it can optionally contain a reason code value defined on one byte:1 : The printer is busy, retry later.
<CDE> = BUSY response indication = 18 (0x12): the screen copy wasn't printed correctly because the printer device is already printing โณ there is no parameter field<CDE> = ABORTED response indication =22 (0x16): the terminal operator aborted the screen copy ๐ there is no parameter field<CDE> = PURGED response indication = 26 (0x1A): the screen copy request got aborted by a purge indication message ๐งน there is no parameter field<CDE> = NOT-AVAILABLE response indication = 30 (0x1E): the screen copy wasn't printed correctly because the printer device isn't supported ๐ there is no parameter field<CDE> = PROTOCOL-VIOLATION response indication = 34 (0x22): the screen copy request got deleted because another screen copy request was already in process. that means several screen copy request messages were sent without waiting for the response. it's a consequence of not following the protocol, and there is no parameter field ๐ซ<CDE> = UNKNOWN-COMMAND response indication = 38 (0x26): the screen copy request got deleted because the<CDE>field value is unknown. it's a consequence of not following the protocol, and there is no parameter field ๐คจ
8.4 Screen copy purge indication message ๐งน
this message purges the current screen copy request message ๐ when the "TNVIP server" or the "TNVIP client" receives it, it checks whether it has already acknowledged the request message. if not, it sends back a screen copy purge acknowledgement message. if it has already replied, it ignores and deletes the message.
the command value is:
<CDE> = PURGE indication = 40 (0x28).There is no parameter field.
9. The TM attention ๐
the TM attention is the signal that activates the local dialog of the DSA Terminal Manager ๐ง
the Telnet Abort Output (AO) command [1] is the mechanism used to implement TM attention key support in TNVIP ๐ซ
IAC AO (0xFF 0xF5)
to implement TM attention key support, "TNVIP clients" should provide a key (or combination of keys) that maps to the TM attention key. when the user presses that key or combo, the "TNVIP client" should send a Telnet AO command to the "TNVIP server" ๐น
when a "TNVIP server" that implements the DSA Terminal Manager gets the AO command, it should enter what we'll loosely call the "TM Local Dialog", suspending any DSA host connection that's going on. otherwise, it should simply ignore it ๐
10. The Break Key ๐ฅ
okay so, the real VIP terminal generally doesn't have a break key ๐ญ the break signal gets sent to the host application through a TM local dialog command ($*$BRK for example) ๐ง
on a "TNVIP client" emulating a VIP terminal, it's often possible to map the break signal to a special key combination, or some other way (using a mouse, for example) ๐ฑ๏ธ
the Telnet Break (BRK) command [1] is used to map the Break signal of the TNVIP ๐ช
IAC BRK (0xFF 0xF3)
11. The Logout Key ๐ช
the Telnet Interrupt Process (IP) command [1] can be used to map the logout command of the TM Local Dialog ($*$LO for example), if it's implemented on the "TNVIP server" ๐
IAC IP (0xFF 0xF4)
12. TNVIP messages list ๐
all the TNVIP commands are summarized right after this (and the values are given in hexadecimal) ๐ซง
12.1 Screen Flow โจ
Okay bestie, the screen flow is where the magic happens ๐
Every message goes through the same IAC EOR ending, so let's look at each one. ๐
Data request (allowed in the two ways) ๐
SCREEN DATA-REQ <FC1> <FC2> STX [<screen-data>] IAC EOR
60 01 <FC1> <FC2> 02 [<screen-data>] FF EF
Allowed responses to the screen Data request: ๐ฆ
SCREEN ACK IAC EOR
60 0A FF EF
SCREEN ERROR IAC EOR
60 0E FF EF
SCREEN BUSY IAC EOR
60 12 FF EF
SCREEN ABORTED IAC EOR
60 16 FF EF
SCREEN PURGED IAC EOR
60 1A FF EF
Password request (only from the "TNVIP server" to the "TNVIP client") ๐
SCREEN PASSW-REQ <FC1> <FC2> STX [<screen-data>] IAC EOR
60 05 <FC1> <FC2> 02 [<screen-data>] FF EF
Allowed responses to the password request: ๐ธ
SCREEN ACK IAC EOR
60 0A FF EF
SCREEN ERROR IAC EOR
60 0E FF EF
SCREEN BUSY IAC EOR
60 12 FF EF
SCREEN ABORTED IAC EOR
60 16 FF EF
SCREEN PURGED IAC EOR
60 1A FF EF
Local state request (only from the "TNVIP client" to the "TNVIP server") ๐ง
SCREEN LOCAL-ST IAC EOR
60 2D FF EF
Allowed responses to the Local state request: โญ
SCREEN ACK IAC EOR
60 0A FF EF
SCREEN PURGED IAC EOR
60 1A FF EF
Responses to request violating the TNVIP protocol (allowed in the two ways) ๐
Oop, when something breaks the TNVIP rules, these are the ones that get sent back. Not me being dramatic, it's literally the protocol ๐ญ
SCREEN NOT-AVAIL IAC EOR
60 0E FF EF
SCREEN PROT-VIOL IAC EOR
60 22 FF EF
SCREEN UNKN-CDE IAC EOR
60 26 FF EF
Indications (allowed in the two ways) ๐
SCREEN DATA-IND <FC1> <FC2> STX [<screen-data>] IAC EOR
60 00 <FC1> <FC2> 02 [<screen-data>] FF EF
SCREEN PURGE IAC EOR
60 28 FF EF
Password indication (only from the "TNVIP server" to the "TNVIP client") ๐๏ธ
SCREEN PASSW-IND <FC1> <FC2> STX [<screen-data>] IAC EOR
60 04 <FC1> <FC2> 02 [<screen-data>] FF EF
On line state indication (only from the "TNVIP client" to the "TNVIP server") ๐
SCREEN ONLINE-ST IAC EOR
60 30 FF EF
12.2 Printer flow ๐จ๏ธ
The printer side is giving organized energy ๐ Same pattern: who can send what, and what they're allowed to get back.
Data request (only from the "TNVIP server" to the "TNVIP client") ๐
PRINTER DATA-REQ <FC1> <FC2> STX [<printer-data>] IAC EOR
68 01 <FC1> <FC2> 02 [<printer-data>] FF EF
Allowed responses to the printer data request: ๐
PRINTER ACK [<status>] IAC EOR
68 0A [<status>] FF EF
PRINTER ERROR [<status>] IAC EOR
68 0E [<status>] FF EF
PRINTER BUSY [<status>] IAC EOR
68 12 [<status>] FF EF
PRINTER ABORTED [<status>] IAC EOR
68 16 [<status>] FF EF
PRINTER PURGED [<status>] IAC EOR
68 1A [<status>] FF EF
PRINTER NOT-AVAIL [<status>] IAC EOR
68 1E [<status>] FF EF
State request (only from the "TNVIP server" to the "TNVIP client") ๐ซถ
PRINTER STATE-REQ IAC EOR
68 35 FF EF
Allowed responses to the state request: ๐ฆ
PRINTER READY IAC EOR
68 3A FF EF
PRINTER STANDBY IAC EOR
68 3E FF EF
PRINTER PURGED IAC EOR
68 1A FF EF
PRINTER NOT-AVAIL IAC EOR
68 1E FF EF
Responses to request violating the TNVIP protocol (allowed in the two ways) ๐
PRINTER PROT-VIOL IAC EOR
68 22 FF EF
PRINTER UNKN-CDE IAC EOR
68 26 FF EF
Indication (only from the "TNVIP server" to the "TNVIP client") ๐ฅ
PRINTER PURGE IAC EOR
68 28 FF EF
12.3 Screen Copy Printing messages flow ๐
This one is the copy-and-print combo, and it's so extra in the best way โจ
Copy request (only from the "TNVIP client" to the "TNVIP server") ๐
SCPM COPY-REQ IAC EOR
69 41 FF EF
Allowed responses to the copy request (from the "TNVIP server" to the "TNVIP client"): ๐ธ
SCPM ERROR <reason> IAC EOR
69 0E <reason> FF EF
SCPM PURGED IAC EOR
69 1A FF EF
SCPM NOT-AVAIL IAC EOR
69 1E FF EF
SCPM LOCAL-COPY-RQ IAC EOR
69 47 FF EF
Local copy request (only from the "TNVIP server" to the "TNVIP client") ๐ง
SCPM LOCAL-COPY-RQ IAC EOR
69 47 FF EF
Allowed responses to the local copy request (from the "TNVIP client" to the "TNVIP server"): ๐
SCPM ACK IAC EOR
69 0A FF EF
SCPM ERROR IAC EOR
69 0E FF EF
SCPM BUSY IAC EOR
69 12 FF EF
SCPM ABORTED IAC EOR
69 16 FF EF
SCPM PURGED IAC EOR
69 1A FF EF
SCPM NOT-AVAIL IAC EOR
69 1E FF EF
Data request (only from the "TNVIP client" to the "TNVIP server") ๐
SCPM DATA-REQ <FC1> <FC2> STX [<screen-data>] IAC EOR
69 01 <FC1> <FC2> 02 [<screen-data>] FF EF
Allowed responses to the data request: ๐ฆ
SCPM ACK IAC EOR
69 0A FF EF
SCPM PURGED IAC EOR
69 1A FF EF
SCPM NOT-AVAIL IAC EOR
69 1E FF EF
Responses to request violating the TNVIP protocol (allowed in the two ways) ๐
SCPM PROT-VIOL IAC EOR
69 22 FF EF
SCPM UNKN-CDE IAC EOR
69 26 FF EF
Indications (allowed in the two ways) ๐
SCPM DATA-IND <FC1> <FC2> STX [<screen-data>] IAC EOR
69 00 <FC1> <FC2> 02 [<screen-data>] FF EF
SCPM PURGE IAC EOR
69 28 FF EF
13. Security Considerations ๐
Security issues are not addressed in this document. It is anticipated that once authentication mechanisms have become well established, use of them can be made by TNVIP. One of the important uses of authentication would be to answer the question of whether or not a given user should be allowed to "use" a specific terminal.
Okay, this one is serious bestie ๐ญ The doc literally says it doesn't cover security at all. Authentication is the thing they expect to plug in later, and the big question it would answer is who gets to actually use a particular terminal. Don't skip this part ๐
14. References ๐
[1] Postel, J., and J. Reynolds, "Telnet Protocol Specification", STD 8, RFC 854, USC/Information Sciences Institute, May 1983.
[2] "Communications. MainWay. Terminal Management. DNS-E", Ref : 39A213EB Rev00, BULL S.A.
[3] VanBokkelen, J., "Telnet Terminal-Type Option", RFC 1091, FTP Software, Inc., February 1989.
[4] Postel, J., "Telnet End of Record Option", RFC 885, USC/Information Sciences Institute, December 1983.
[5] Postel, J., and J. Reynolds, "Telnet Binary Transmission", STD 27, RFC 856, USC/Information Sciences Institute, May 1983.
[6] Postel, J., and J. Reynolds, "Telnet Suppress Go Ahead Option", STD 29, RFC 858, USC/Information Sciences Institute, May 1983.
[7] "Affinity V2. DKU7107 Reference Manual" Ref : 40 A2 23 WA, BULL S.A.
[8] "Affinity V2. VIP7800 Reference Manual" Ref : 40 A2 24 WA, BULL S.A.
[9] "Bull Questar 200. TCS 7424 et TCS 7434. Transmission de donnees. Manuel de reference" Ref : 80 F2 41DC Rev0, BULL S.A.
15. Author's Address ๐
Jean-Yves Dujonc BULL S.A. rue Jean Jaures 78340 Les Clayes-sous-Bois France
Phone: 1 30 80 62 95 Fax: 1 30 80 65 40 EMail: J.Y.Dujonc@frcl.bull.fr
That's the whole thing, bestie! ๐โจ You made it through every single message ๐ซถ
๐ฆ where this page comes from
- ietf: rfc1921 1996-03
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms