Embedded Telnet Client
Topics
:Overview
Constants
Enumerations
Functions
The embedded Telnet client is a cross platform Telnet implementation used with applications that require use of the Telnet protocol as a keyboard and screen interface to the TCP stack. The gxsTelnet Client class is derived from the gxSocket class and supports NVT (Network Virtual Terminal) terminal negotiation. The character set is restricted to 7 bits sent as a byte value with the most significant bit cleared. All terminal emulations other then NVT are handled by terminal type set in the environment by the TERM variable. This implementation works well in a UNIX to UNIX environment. However, in a Windows to UNIX environment your application must provide the API to perform specific terminal emulations.
// Telnet command codes const unsigned char gxsTEL_IAC = 255; // Interpret as command escape sequence // Prefix to all telnet commands const unsigned char gxsTEL_DONT = 254; // You are not to use this option const unsigned char gxsTEL_DO = 253; // Please, you use this option const unsigned char gxsTEL_WONT = 252; // I won't use option const unsigned char gxsTEL_WILL = 251; // I will use option const unsigned char gxsTEL_SB = 250; // Subnegotiate const unsigned char gxsTEL_GA = 249; // Go ahead const unsigned char gxsTEL_EL = 248; // Erase line const unsigned char gxsTEL_EC = 247; // Erase character const unsigned char gxsTEL_AYT = 246; // Are you there const unsigned char gxsTEL_AO = 245; // Abort output const unsigned char gxsTEL_IP = 244; // Interrupt process const unsigned char gxsTEL_BRK = 243; // Break const unsigned char gxsTEL_DM = 242; // Data mark const unsigned char gxsTEL_NOP = 241; // No operation. const unsigned char gxsTEL_SE = 240; // End of subnegotiation const unsigned char gxsTEL_EOR = 239; // End of record const unsigned char gxsTEL_ABORT = 238; // About process const unsigned char gxsTEL_SUSP = 237; // Suspend process const unsigned char gxsTEL_xEOF = 236; // End of file: EOF already used // Telnet options const unsigned char gxsTELOPT_BIN = 0; // Binary transmission const unsigned char gxsTELOPT_ECHO = 1; // Echo const unsigned char gxsTELOPT_RECN = 2; // Reconnection const unsigned char gxsTELOPT_SUPP = 3; // Suppress go ahead const unsigned char gxsTELOPT_APRX = 4; // Approx message size negotiation const unsigned char gxsTELOPT_STAT = 5; // Status const unsigned char gxsTELOPT_TIM = 6; // Timing mark const unsigned char gxsTELOPT_REM = 7; // Remote controlled trans/echo const unsigned char gxsTELOPT_OLW = 8; // Output line width const unsigned char gxsTELOPT_OPS = 9; // Output page size const unsigned char gxsTELOPT_OCRD = 10; // Out carriage-return disposition const unsigned char gxsTELOPT_OHT = 11; // Output horizontal tabstops const unsigned char gxsTELOPT_OHTD = 12; // Out horizontal tab disposition const unsigned char gxsTELOPT_OFD = 13; // Output formfeed disposition const unsigned char gxsTELOPT_OVT = 14; // Output vertical tabstops const unsigned char gxsTELOPT_OVTD = 15; // Output vertical tab disposition const unsigned char gxsTELOPT_OLD = 16; // Output linefeed disposition const unsigned char gxsTELOPT_EXT = 17; // Extended ascii character set const unsigned char gxsTELOPT_LOGO = 18; // Logout const unsigned char gxsTELOPT_BYTE = 19; // Byte macro const unsigned char gxsTELOPT_DATA = 20; // Data entry terminal const unsigned char gxsTELOPT_SUP = 21; // supdup protocol const unsigned char gxsTELOPT_SUPO = 22; // supdup output const unsigned char gxsTELOPT_SNDL = 23; // Send location const unsigned char gxsTELOPT_TERM = 24; // Terminal type const unsigned char gxsTELOPT_EOR = 25; // End of record const unsigned char gxsTELOPT_TACACS = 26; // Tacacs user identification const unsigned char gxsTELOPT_OM = 27; // Output marking const unsigned char gxsTELOPT_TLN = 28; // Terminal location number const unsigned char gxsTELOPT_3270 = 29; // Telnet 3270 regime const unsigned char gxsTELOPT_X3 = 30; // X.3 PAD const unsigned char gxsTELOPT_NAWS = 31; // Negotiate about window size const unsigned char gxsTELOPT_TS = 32; // Terminal speed const unsigned char gxsTELOPT_RFC = 33; // Remote flow control const unsigned char gxsTELOPT_LINE = 34; // Linemode const unsigned char gxsTELOPT_XDL = 35; // X display location const unsigned char gxsTELOPT_ENVIR = 36; // Telnet environment option const unsigned char gxsTELOPT_AUTH = 37; // Telnet authentication option const unsigned char gxsTELOPT_NENVIR = 39; // Telnet environment option const unsigned char gxsTELOPT_EXTOP = 255; // Extended-options-list
enum gxsTelnetTermTypes { // Terminal types gxsTEL_NVT_TERM, // NVT - Network Virtual Terminal gxsTEL_VT100F_TERM, // Filtered VT100/ANSI terminal emulation // NOTE: This implementation will only // filter-out VT100 and ANSI escape // sequences. This terminal type should // only be used by embedded telnet clients // that do not support VT100/ANSI emulations // but must talk to servers that will not // support other emulations. gxsTEL_ENV_TERM // Use term type set in environment space }; enum gxsTelnetState { // Telnet transition state enumeration telnet_data, // Telnet data byte telnet_code, // Telnet code telnet_option // Telnet option };
gxsTelnetClient::gxsTelnetClient()
gxsTelnetClient::~gxsTelnetClient()
gxsTelnetClient::ConnectClient()
gxsTelnetClient::GetChar()
gxsTelnetClient::GetTermType()
gxsTelnetClient::OutputCharWaiting()
gxsTelnetClient::ReadTelnetData()
gxsTelnetClient::RecvString()
gxsTelnetClient::SendString()
gxsTelnetClient::SetTermType()
gxsTelnetClient::SetTimeOut()
gxsTelnetClient::WaitForReply()
gxsTelnetClient::gxsTelnetClient() - Default class constructor.
gxsTelnetClient::~gxsTelnetClient()
- Class destructor.gxSocketError gxsTelnetClient::ConnectClient(const char *host, int port = gxSOCKET_TELNET_PORT)
- Public member function used to connect a telnet client to a server. Returns zero if no errors occur.int gxsTelnetClient::GetChar(unsigned char &c)
- Public member function used to extract a single character from the telnet input stream if a character is waiting to be read. Passes back the character in the "c" variable. Returns true if a character is waiting to be read or false if no characters are waiting.char *gxsTelnetClient::GetTermType()
- Public member function that returns the current terminal type name.int gxsTelnetClient::OutputCharWaiting()
- Public member function that returns true if any characters are waiting to be read.gxSocketError gxsTelnetClient::ReadTelnetData(unsigned char data)
- Public member function used to read a single character from the telnet input stream and interpret any telnet command sequences. Returns zero if no errors occur.gxSocketError gxsTelnetClient::RecvString(char *buf, int bytes, const char *str)
- Public blocking receive function used to read a string from a telnet server following a connect or send call. If the specified string is not received within the preset timeout period this function will return a non-zero value to indicate an error. Returns zero if no errors occur. The calling function must allocate a buffer large enough to hold the telnet reply. If the number of bytes received exceed the number of bytes allocated for the "buf" variable this function will return a buffer overflow.gxSocketError gxsTelnetClient::SendString(const char *buf, int bytes)
- Public blocking write function used to send a string to a telnet server. Returns zero if no errors occur.void gxsTelnetClient::SetTermType(gxsTelnetTermTypes ttype = gxsTEL_NVT_TERM)
- Public member function used to set the terminal type for this client session.void gxsTelnetClient::SetTermType(const char *s)
- Public member function used to set a custom terminal type for this client session.void gxsTelnetClient::SetTimeOut(int seconds, int useconds)
- Public member function used to set telnet timeout values for this client session.int gxsTelnetClient::WaitForReply()
- Public member function that returns false if a reply time is longer then the timeout values.
End Of Document |