Telnet
What is Telnet
The Telnet protocol provides a way for both sides of a network connection (client and server) to express interest and support for certain options. Usually, there is no evidence of this conversation on the screen; it is not typically shown. Many common Internet protocols take the Telnet protocol as a starting point.
An important character in the telnet protocol is IAC (chr(255)). For either side to transmit y-umlaut, it must appear twice (IAC IAC). On the receiving side, any pair of IACs is understood to mean y-umlaut.
PennMUSH and TinyMUX both support the basic Telnet protocol including the commands: Are You There (AYT) and NOP (No Operation). NOP is somewhat useful in keeping NAT/Firewalls happy (see KEEPALIVE).
The Negotiation About Screen Size (NAWS) option along with width() and height() softcode functions expose the client window’s height and width.
Server Differences
TinyMUX version 2.4 added support for AYT, SGA, EOR, and NAWS. Version 2.7 added support for Environment (ENV), Character Sets (CHARSET), and Terminal Type (TTYPE).
PennMUSH also supports LINEMODE and ECHO. While PennMUSH does not and will not support @program, it has @prompt as a way for softcode to generate SGA/EOR.
Prompts
MUD clients have a non-standard concept called prompts which are outside of the telnet RFCs. A prompt is a partial line of text (that is, it does not end in CRLF) followed by either IAC GA or IAC EOR. Prompts maintain their left-bottom position as new text from the server arrives. New text is placed above the prompt.
Many MUSH clients have a separate input box, so the cursor is never positioned next to a prompt anyway, however MUSHClient does have a ‘Keep Commands On Prompt Line’ option which will position entered text on these partial prompt lines. It does recognize these partial lines, but it does not appear to go so far as to display new text from the server above the last prompt.
This use of IAC GA is not consistent with the defined use of Go-Ahead (GA) command. The Go-Ahead command was original designed to manage a half-duplex channels. Go-Ahead acts as a sort of token that must be held before one side or the other can transmit. Of course, TCP/IP connections are always full-duplex, telnetd tries to negotiate the Surpress Go-Ahead (SGA) option, and despite whether that negotiation is successful, teletnd never sends a IAC GA itself.
We have not been able to coax SimpleMU to display a partial-line. It doesn’t implement this non-standard use of IAC GA which one can argue is Good (tm). It also doesn’t display any part of the line until CRLF is received which one can argue is Bad (tm). We haven’t tried terminating with an IAC EOR, yet.
TinyFugue 4 doesn’t support prompts. TinyFugue 5 apparently does.
Many other modern clients have standardized on the behavior of interpreting the IAC GA sequence as a newline, rather than trying to position the prompt in a static position.
The only prompt in TinyMUX occurs when @program is used.
Surpress Go-Ahead (SGA) and End Of Record (EOR) are negotiated in both directions except that either EOR must be disabled or SGA must be disabled so that prompts can be presented properly.
Related RFCs
The full range of telnet RFC’s is quite large and beyond our scope.
Remote Controlled Transmission and Echoing Telnet option
Revised Telnet byte macro option
Telnet Suppress Go Ahead Option
Telnet Extended Options: List Option
TACACS user identification Telnet option
Telnet terminal location number option
Telnet Data Entry Terminal option: DODIIS implementation
Telnet X display location option
The Q Method of Implementing TELNET Option Negotiation
Telnet Remote Flow Control Option
Telnet Authentication: Kerberos Version 4
Telnet Com Port Control Option
Telnet Authentication: Kerberos Version 5
TELNET Authentication Using DSA
Telnet Encryption: DES3 64 bit Cipher Feedback
Telnet Encryption: DES3 64 bit Output Feedback