Synchronet v3.19b-Win32 (install) has been released (Jan-2022).

You can donate to the Synchronet project using PayPal.

This is an old revision of the document!


Terminal Server

The Synchronet Terminal Server is responsible for providing that “old school” BBS user interface over dial-up modems and classic Internet console protocols (e.g. Telnet).

Features

  • Supports ANSI X3.64 (color and monochrome), PETSCII, RIP, and dumb terminals
  • Supports US-ASCII, CP437 (a.k.a. IBM Extended ASCII) and CBM/PETSCII character sets
  • Supported Protocols: Telnet, RLogin, and SSH

Configuration

  • Configured via the ctrl/sbbs.ini file
  • Optionally configured (on Windows) via SBBSCTRL:Telnet->Configure dialog
  • Configured behavior may be over-ridden via sbbs command-line arguments

Key Bindings

Global Ctrl-Keys

These control-key combinations has special purpose at almost any-time while using the Terminal Server:

Ctrl-Key Description
Ctrl-K Display a Ctrl-key Menu
Ctrl-C Stop the current process / listing / operation
Ctrl-O Toggle auto-pause prompt temporarily
Ctrl-Z Toggle raw input/output mode
Ctrl-U List users online
Ctrl-P Page for chat or send instant-message or telegram to users
Ctrl-T Display current time information

Line Input

Additional control-key combinations have special behavior during line (text string) input:

Ctrl-Key Description
Ctrl-N Move to next word in line
Ctrl-\ Move to previous word in line
Ctrl-D Delete word to the right
Ctrl-W Delete word to the left
Ctrl-Y Delete from the cursor to the end of the line
Ctrl-X Delete the entire current line
Ctrl-L Center the line and complete input
Ctrl-Z Undo (revert edited line)
Ctrl-R Redraw current line
Ctrl-A Insert an attribute code (when allowed)
Ctrl-G Insert a beep character (when allowed)

Extended Keys

The Synchronet Terminal Server endeavors to support most extended-keys (e.g. home, end, arrow-keys, etc.) on most terminals while simultaneously supporting Ctrl-Key equivalents for all terminals.

Extended Key Ctrl-Key ANSI1) Other2) Description (typical use)
Home Ctrl-B \e[H \e[1~ Move cursor to beginning of line or top of page/list/document
End Ctrl-E \e[K and \e[F \e[4~ Move cursor to end of line or bottom of page/list/document
Up-arrow Ctrl-tilde \e[A Move cursor up one line or recall previous history item
Down-arrow Ctrl-J \e[B Move cursor down one line or recall next history item
Left-arrow Ctrl-] \e[D Move cursor to the left
Right-arrow Ctrl-F \e[C Move cursor to the right
Page-up Ctrl-P \e[V \e[5~ Move cursor up one page
Page-down Ctrl-N \e[U \e[6~ Move cursor up one page
Insert Ctrl-V \e[@ \e[2~ Toggle insert/overwrite text mode
Delete Ctrl-? \e[3~ Delete character under cursor (delete-right), also Ctrl-Backspace

Telnet

Telnet clients (a.k.a. terminal programs) are supported, by default, on the standard Telnet TCP port: 23.

The Synchronet Terminal Server will negotiate Telnet options with the client (enforcing echo and non-line-at-a-time modes), perform IAC (character 255) escaping, and CR/LF->CR and CR/NUL->CR translation (when not in binary mode).

SSH

Secure Shell version 2 clients are supported, by default, on the standard SSH TCP port: 22.

SSHv2 support provided by cryptlib.

RLogin

RLogin clients are supported, by default, on the standard RLogin TCP port: 513.

History of Synchronet's support for BSD RLogin

SBBS v3.00c 2000

  • digital man added initial support for accepting connections from BSD RLogin:

The Synchronet Telnet Server (later referred to as the “Terminal Server”) was enhanced to recognize the BSD RLogin connect sequence on a secondary port (TCP port 513 by default) and bypass the “Login:” prompt if the username specified in either first (client-user-name) or second (server-user-name) strings sent from the RLogin client were recognized as a valid user/login ID (alias). The default behavior was to compare the first (client-user-name) string as the attempted login ID but this could be changed by checking the SBBSCTRL:Telnet->Configure->RLogin->Use 2nd Login Name checkbox. Comparing *both* RLogin-client provided strings was not supported (only one or the other would be compared against the user database).

  • The password prompt was still displayed and a valid password required in order to login as the identified user ID. If the user ID was not recognized as a valid user, then the new user application process was started (with the user's alias automatically filled in with the specified client-user-name or server-user-name value).

SBBS v3.10g 2002

  • digital man added the r2 option to sbbs (console) to use the second RLogin string as the username.
  • digital man added support for the Telnet gateway module to be optionally used as a gateway to an RLogin server (e.g. TradeWars Game Server, aka TWGS) - by specifying the TG_RLOGIN mode flag to the telnet_gate function (via Baja or JavaScript). The current user's login ID (alias) was sent as the client-user-name string and the user's real name was sent as the server-user-name string as part of the outbound RLogin connection establishment.

SBBS v3.12a 2004

  • Deuce changed the default RLogin configuration (by this time stored in the Options field of the [bbs] section of the sbbs.ini file to use the second string sent by the RLogin client as the login ID (USE_2ND_RLOGIN).
  • Deuce changed the default configuration to enable/accept RLogin connections.
  • Deuce added support for automatic-login if a valid user password was supplied in either the client-user-name or server-user-name strings sent from the RLogin client (which string was assumed to be the user ID and which was assumed to be the password was determined by the “Use 2nd Login Name” option) or the client's IP address was listed in the (newly introduced) text/rlogin.can file, then the user would be automatically logged in without needing to provide/send a password.

SBBS v3.13a 2005

  • Deuce changed the RLogin connection behavior as follows:
if (specified user does not exist) {
    if (rlogin password recieved) {
        create new user with specified password
    }
    else {
        create new user with random password
        show password to user
        allow user to change password
        validate new password
   }
}
else {
    if(password is correct) {
        logon user
    }
    else {
        prompt for current password
    }
}

SBBS v3.16a 2012

  • echicken added a new mode flag (TG_SENDPASS) to the telnet_gate function which if combined with TG_RLOGIN mode flag would send the current user's password as the second RLogin string (server-user-name) during an outbound RLogin connection (instead of the default behavior of sending the current user's real name).

SBBS v3.16a 2013

  • mcmlxxix removed echicken's TG_SENDPASS mode flag support and created a new function (bbs.rlogin_gate) which accepted arguments to be sent to the remote RLogin server (presumably, the user's name and password, in that order).

SBBS v3.16b 2014

  • digital man removed and deprecated the USE_2ND_RLOGIN option (and related sbbs command-line option and sbbsctrl checkbox) as this is now the only behavior supported by the Synchronet Terminal Server: the first string received from the RLogin client (client-user-name) may be a password, the second string received (server-user-name) must be a valid user ID (alias).
  • digital man changed the bbs.rlogin_gate function to accept 3 optional arguments: client-user-name, server-user-name, and terminal, in the order specified by the RFC 1282.

JavaScript

Additional JavaScript objects are available to Terminal Server modules only:

Source Code

The Synchronet Terminal Server source code makes up the majority of the C (and all of the C++) files found in cvs/src/sbbs3 with the main module being main.cpp.

See Also

1)
ANSI X3.64/ECMA-048 escape sequence
2)
e.g. VT-220 or XTerm escape sequence