Read from the reader end of the pipe until the writer finishes
STATE : BYTE -> NEW STATE (action)
TEXT : IAC -> IAC (begin telnet command)
TEXT : anything -> TEXT (regular text input from the remote end)
IAC : IAC -> TEXT (escaped IAC byte)
IAC : DO -> DO (start DO negotiation)
IAC : DONT -> DONT (start DONT negotiation)
IAC : WILL -> WILL (start WILL negotiation)
IAC : WONT -> WONT (start WONT negotiation)
IAC : SB -> SB (begin sub-request)
IAC : anything -> TEXT (one of several IAC commands, most are not used in MUDs, safely ignored usually)
DO : anything -> TEXT (DO option code, process)
DONT : anything -> TEXT (DONT option code, process)
WILL : anything -> TEXT (WILL option code, process)
WONT : anything -> TEXT (WONT option code, process)
SB : IAC -> SB_IAC (sub-request end/escape sequence)
SB_IAC : IAC -> SB (escaped IAC byte)
SB_IAC : SE -> TEXT (completed subrequest, process data)
SB_IAC : anything -> TEXT (invalid sub-request, abort)
Any thoughts? For those of you who have written your own codebase, did you use a pre-built Telnet library, or did you have to implement your own, and how much did that influence your decision?