====== Telnet Gateway ======
The Telnet Gateway (''telgate.js'') module allows users of your system's [[server:Terminal]] Server to connect to other TCP/Telnet services on the Internet through your BBS. Typically, these services would be other telnetable BBSes, door game servers, and MUDs, although really, you can theoretically create a gate to any single-port TCP service (e.g. POP3, but not FTP).

The module itself (''[[dir:exec]]/telgate.js'') is just a thin wrapper around the JavaScript function: ''bbs.telnet_gate()''

===== Usage =====
The Telnet Gateway module is normally executed via a command-line configured in [[util:SCFG]], often as an "External Program". By convention, JavaScript modules are executed from the Synchronet Terminal Server by starting the command-line with a question mark (''?'') symbol. An asterisk (''*'') prefix will also work, but will fallback to execute the old ''[[dir:exec]]/telgate.bin'' if the ''telgate.js'' file is absent.

==== Command-line ====
The Telnet Gateway module accepts command-line arguments to control its behavior when invoked. The command-line syntax is:
  ?telgate <address>[:port] [mode] [options]
  
Where:
  * ''<address>'' is the IPv4 address or host name to connect to
  * ''[:port]'' is the optional TCP port number to connect to (default is ''23'')
  * ''[mode]'' is an optional set of [[:module:telgate#mode|telgate mode flags]] (''TG_*'') OR'd together the pipe (''|'') symbol
  * ''[options]'' are one or more of the following options:

^ Option ^ Value        ^ Description ^  
| ''-T'' | connect-timeout-seconds | Connection timeout (default: 10 seconds) |
| ''-m'' | telnet-gateway-mode| Set of one or more [[:module:telgate#mode|telgate mode flags]] (''TG_*'') separated by pipe (''|'') symbols (default is ''0'') |
| ''-q'' | //none//     | Don't display banner or pause prompt (be quiet) |
| ''-v'' | //none//     | Display remote host name/address/port in messages |
| ''-P'' | //none//     | Don't pause for user key-press before connection attempt |
| ''-C'' | //none//     | Don't clear screen after successful session |
| ''-N'' | //none//     | Send a blank line (CRLF) after connecting (may be used multiple times) |
| ''-s'' | characters   | Send string of characters after connecting (may be used multiple times) |
| ''-S'' | characters   | Send CRLF-terminated string of characters after connecting (may be used multiple times) |

Option values may immediately following the option flag or may be provided as the next argument on the command-line (separated by white-space).

==== Address ====

The <//address//> argument is the destination address in the format: ''<//IP address or hostname//>[://port//]''

If the TCP //port// number is not specified, the default is 23 (standard for telnet).

Examples <//address//> values:

  * vert.synchro.net
  * 24.0.193.46
  * retromud.org:3000

==== Mode ==== 

The valid mode flags (defined in ''[[dir:exec]]/[[dir:exec#load]]/sbbsdefs.js'') are:

^ Flag              ^ Description ^
| ''TG_ECHO''       | Echo back to the user's client what it sends (i.e. keyboard input) |
| ''TG_CRLF''       | Expand sole CR (on input) to CRLF |
| ''TG_LINEMODE''   | Send entire lines only |
| ''TG_NODESYNC''   | Call Nodesync, get msgs, etc. |
| ''TG_CTRLKEYS''   | Interpret control key (e.g. Ctrl-P, Ctrl-U, Ctrl-T, etc.) locally |
| ''TG_PASSTHRU''   | Pass-through Telnet commands/responses (don't proxy the Telnet command responses) |
| ''TG_RLOGIN''     | Use BSD RLogin protocol (not Telnet) |
| ''TG_NOCHKTIME''  | Don't check time left online |
| ''TG_NOTERMTYPE'' | Request client "DONT TERM_TYPE" |
| ''TG_NOLF''       | Do not send line-feeds |
| ''TG_RLOGINSWAP'' | Swap the RLogin alias/real-names |
| ''TG_RAW''        | Connect to a raw TCP (not Telnet) server |
| ''TG_EXPANDLF''   | Expand received sole-LFs to CR/LF pairs |

Multiple mode flags may be specified by ORing them together with the pipe (''|'') character, like so:

  TG_ECHO|TG_CRLF

==== Others ==== 

Although ''telgate.js'' is the original and most flexible Synchronet Telnet gateway script, there are other ''bbs.telnet_gate()'' wrapper scripts available for your convenience:

^  Module          ^ Description                                                    ^
| ''mudgate.js''   | Sets the mode flags based on the needs of a typical MUD server |
| ''unixgate.js''  | Sets the mode flags based on the needs of a typical Unix Telnet server |
| ''rlogin.js''    | Actually a wrapper around the ''bbs.rlogin_gate'' JavaScript function |

==== Examples====

To set-up an external gateway to another BBS in [[util:SCFG]]->External Programs->Online Programs:

  Command line: "?telgate vert.synchro.net"

To set-up an external gateway to a MUD:

  Command line: "?mudgate batmud.bat.org"

To set-up an external gateway to a Trade Wars Game Server (TWGS):

  Command line: "?rlogin twgs.someserver.com"

While using the telnet gateway (and not currently in telnet "Binary" mode), users can press ctrl-] for a menu of telnet gate commands including: Disconnect, Toggle Echo, List Users, and Private Message.

==== Legacy ==== 

The Baja ''TELNET_GATE'' function and the corresponding ''[[dir:exec]]/*gate.bin'' files have been deprecated. Use the corresponding JavaScript alternatives instead.

===== Configure =====

The default Telnet Gateway option values and display messages can be over-ridden by creating/editing key in the ''[telgate]'' section of your ''[[dir:ctrl]]/[[config:modopts.ini]]'' file.

^ Key                 ^ Default      ^ Description ^
| quiet               | false        | Don't display banner or pause prompt (quiet) |
| pause               | true         | Pause for user key-press before connecting |
| clear               | true         | Clear screen after disconnect |
| timeout             | 10           | Connect timeout (in seconds) |
| verbosity           | 0            | Display remote host address/port when non-zero |
| help_msg            | //see code// | Message to display for help ("" to disable) |
| connecting_msg      | //see code// | Message to display when connecting to remote host ("" to disable) |
| failed_conntect_msg | //see code// | Message to display upon connection failure ("" to disable) |

**Note**:\\
You'll likely want to use string literal syntax for message strings.

===== See Also =====
  * [[:module:|Modules]]
  * [[:module:RLogin]]

{{tag>JavaScript}}
