A standards compliant Telnet implementation for Node.js
In addition to RFC 854, a number of additional RFCs, proposed RFCs, and adopted options such as GMCP and MSSP are implemented. An emphasis on standards used with ANSI-BBS related terminals is taken, though PRs are certainly welcome if something of use is missing.
Some additional standards include:
- RFC 856 - Telnet Binary Transmission
- RFC 857 - Telnet Echo Option
- RFC 858 - Telnet Suppress Go Ahead Option
- RFC 1073 - Telnet Window Size Option
- RFC 1091 - Telnet Terminal-Type Option
- RFC 1572 - Telnet Environment Option
See telnet_spec.js for more information and additional standards.
const { TelnetSocket, TelnetSpec } = require('telnet-socket');
const telnetSocket = TelnetSocket(rawSocket);
// request client to send NAWS
telnetSocket.do.naws();
telnetSocket.on('SB', command => {
if (TelnetSpec.Options.NAWS === command.option) {
// client sent us NAWS
const { width, height } = command.optionData;
// ...do something with height and width
}
});ℹ️ You can see example usage in ENiGMA 1/2 BBS here
passthrough: Set totrueto enable passthrough mode. Defaults tofalse.escapeIACs: Set tofalseto disable escaping of telnetIACcharacters. Defaults totrue.rawSocket: Access the underlying socket.
data(data): Non-protocol datacommand error(command, error): An error ocurred whilest processing a command.end(): Socketend.error(error): A socket error has occurred.
Events are emitted for specific Telnet commands such as (but not limited to) DO, DONT, WILL, WONT and AYT with the signature of (command) where command has the following properties:
code: The raw byte code of the command.name: The command name (DO,DONT, ...) orunknown comand.option: Option sent with the command.optionName: The name of the option such asNAWSorunknown option.optionData: For options that contain additional data. For example,NAWScontainsheightandwidthmembers, whileTTYPEcontains attypemember.
Unknown commands are emitted as unknown command with the same signature described above.
- Q: How do I receive characters instead of lines?
- A: Issue
socket.will.sga()
See LICENSE.md