How FujiNet Supports Connections to BBS - FujiNetWIFI/fujinet-firmware GitHub Wiki

FujiNet Modems and TELNET

Andrew Diller, adapted from a Discord conversion with Thom Cherryhomes and Joe Honold

TL;DR - FujiNet implements a raw TCP socket that many vintage BBS support, it also supports true TELNET protocol for connecting to telnetd services, on a UNIX system.

A conversation between two FujiNet Users

Ok, to start off lets level set about things: Telnet is not raw socket, at all. that's first thing.

When a telnet session is started, a negotiation process happens to indicate terminal parameters to both sides, using IAC codes. these indicate all sorts of parameters like, whether the connection should be full or half duplex, whether a particular baud rate should be maintained, and... WHAT TERMINAL TYPE TO INDICATE TO THE OTHER SIDE for connections managed by telnetd, the IAC TERMINAL TYPE code becomes a TERM environment variable.

A Method of Discovery

We can see this using a BBS that supports both TELNET and raw TCP connections! Compare logging in to: BBS.FOZZTEXX.COM with TCP versus logging in with TELNET. You'll notice a whole set of control codes at the beginning of the stream if you choose TCP (the default from FN) these are the IAC codes. Try all you wish, but, you can not connect to a telnetd socket with a raw TCP socket and expect to get a login prompt. Telnetd will hang waiting for you to start the IAC negotiation.

Ok then, in regards to the FUjiNet emulated modem though, isn't every connection telnet? If it's not, how can I just run bobterm, 'dial' fozztexx and it just works without setting telnet?

The simple answer is no, every connection you make is not telnet (especially when it's on a different port). Depending on what is servicing the connection, it can very well be a raw socket, or it can be a telnet socket, and on some hosts you have to get it right. Again, to demonstrate, open up telnetd on a linux box, try to connect to it from the FujiNet using a terminal app without setting ATNET1 ... you can't. Because it's not Telnet.

Ok. All bbs I've used are not telnet (or clever enough to turn it on) because they seem to just work without telnet.

Correct, they're often raw socket but most people do not bother with the distinction. For FujiNet we wrote an entire telnet parser into the modem and the N: device in order to support UNIX systems with telnetd.

So for a BBS, they are raw sockets but they use the telnet port (23) sometimes? If you want to actually use say bobterm to telnet to a UNIX system, you need to enable TELNET via ATNET1?

A BBS can accept connections on port 23- not always, often they use different ports. BBS.FOZZTEXX.COM implements telnet properly, so you should turn it on for that host.

If you are using the default mode of raw tcp and see a spurt of what looks like garbage when you connect, that's telnet trying to negotiate the connection and you should enable ATNET1.

About IAC

In the TELNET protocol, IAC (Interpret As Command) codes are special control codes used for negotiating options and signaling commands between the client and server. These codes are sent as part of the data stream and are prefixed with the byte sequence "Interpret As Command" (IAC, code 255 in decimal or FF in hexadecimal).