113e3f4d6SMark Murray /* 213e3f4d6SMark Murray * Copyright (c) 1983, 1993 313e3f4d6SMark Murray * The Regents of the University of California. All rights reserved. 413e3f4d6SMark Murray * 513e3f4d6SMark Murray * Redistribution and use in source and binary forms, with or without 613e3f4d6SMark Murray * modification, are permitted provided that the following conditions 713e3f4d6SMark Murray * are met: 813e3f4d6SMark Murray * 1. Redistributions of source code must retain the above copyright 913e3f4d6SMark Murray * notice, this list of conditions and the following disclaimer. 1013e3f4d6SMark Murray * 2. Redistributions in binary form must reproduce the above copyright 1113e3f4d6SMark Murray * notice, this list of conditions and the following disclaimer in the 1213e3f4d6SMark Murray * documentation and/or other materials provided with the distribution. 1313e3f4d6SMark Murray * 3. All advertising materials mentioning features or use of this software 1413e3f4d6SMark Murray * must display the following acknowledgement: 1513e3f4d6SMark Murray * This product includes software developed by the University of 1613e3f4d6SMark Murray * California, Berkeley and its contributors. 1713e3f4d6SMark Murray * 4. Neither the name of the University nor the names of its contributors 1813e3f4d6SMark Murray * may be used to endorse or promote products derived from this software 1913e3f4d6SMark Murray * without specific prior written permission. 2013e3f4d6SMark Murray * 2113e3f4d6SMark Murray * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 2213e3f4d6SMark Murray * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2313e3f4d6SMark Murray * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2413e3f4d6SMark Murray * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 2513e3f4d6SMark Murray * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2613e3f4d6SMark Murray * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2713e3f4d6SMark Murray * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2813e3f4d6SMark Murray * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2913e3f4d6SMark Murray * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 3013e3f4d6SMark Murray * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 3113e3f4d6SMark Murray * SUCH DAMAGE. 3213e3f4d6SMark Murray * 3313e3f4d6SMark Murray * @(#)telnet.h 8.2 (Berkeley) 12/15/93 3413e3f4d6SMark Murray */ 3513e3f4d6SMark Murray 3613e3f4d6SMark Murray #ifndef _TELNET_H_ 3713e3f4d6SMark Murray #define _TELNET_H_ 3813e3f4d6SMark Murray 3913e3f4d6SMark Murray /* 4013e3f4d6SMark Murray * Definitions for the TELNET protocol. 4113e3f4d6SMark Murray */ 4213e3f4d6SMark Murray #define IAC 255 /* interpret as command: */ 4313e3f4d6SMark Murray #define DONT 254 /* you are not to use option */ 4413e3f4d6SMark Murray #define DO 253 /* please, you use option */ 4513e3f4d6SMark Murray #define WONT 252 /* I won't use option */ 4613e3f4d6SMark Murray #define WILL 251 /* I will use option */ 4713e3f4d6SMark Murray #define SB 250 /* interpret as subnegotiation */ 4813e3f4d6SMark Murray #define GA 249 /* you may reverse the line */ 4913e3f4d6SMark Murray #define EL 248 /* erase the current line */ 5013e3f4d6SMark Murray #define EC 247 /* erase the current character */ 5113e3f4d6SMark Murray #define AYT 246 /* are you there */ 5213e3f4d6SMark Murray #define AO 245 /* abort output--but let prog finish */ 5313e3f4d6SMark Murray #define IP 244 /* interrupt process--permanently */ 5413e3f4d6SMark Murray #define BREAK 243 /* break */ 5513e3f4d6SMark Murray #define DM 242 /* data mark--for connect. cleaning */ 5613e3f4d6SMark Murray #define NOP 241 /* nop */ 5713e3f4d6SMark Murray #define SE 240 /* end sub negotiation */ 5813e3f4d6SMark Murray #define EOR 239 /* end of record (transparent mode) */ 5913e3f4d6SMark Murray #define ABORT 238 /* Abort process */ 6013e3f4d6SMark Murray #define SUSP 237 /* Suspend process */ 6113e3f4d6SMark Murray #define xEOF 236 /* End of file: EOF is already used... */ 6213e3f4d6SMark Murray 6313e3f4d6SMark Murray #define SYNCH 242 /* for telfunc calls */ 6413e3f4d6SMark Murray 6513e3f4d6SMark Murray #ifdef TELCMDS 6613e3f4d6SMark Murray char *telcmds[] = { 6713e3f4d6SMark Murray "EOF", "SUSP", "ABORT", "EOR", 6813e3f4d6SMark Murray "SE", "NOP", "DMARK", "BRK", "IP", "AO", "AYT", "EC", 6913e3f4d6SMark Murray "EL", "GA", "SB", "WILL", "WONT", "DO", "DONT", "IAC", 0, 7013e3f4d6SMark Murray }; 7113e3f4d6SMark Murray #else 7213e3f4d6SMark Murray extern char *telcmds[]; 7313e3f4d6SMark Murray #endif 7413e3f4d6SMark Murray 7513e3f4d6SMark Murray #define TELCMD_FIRST xEOF 7613e3f4d6SMark Murray #define TELCMD_LAST IAC 7713e3f4d6SMark Murray #define TELCMD_OK(x) ((unsigned int)(x) <= TELCMD_LAST && \ 7813e3f4d6SMark Murray (unsigned int)(x) >= TELCMD_FIRST) 7913e3f4d6SMark Murray #define TELCMD(x) telcmds[(x)-TELCMD_FIRST] 8013e3f4d6SMark Murray 8113e3f4d6SMark Murray /* telnet options */ 8213e3f4d6SMark Murray #define TELOPT_BINARY 0 /* 8-bit data path */ 8313e3f4d6SMark Murray #define TELOPT_ECHO 1 /* echo */ 8413e3f4d6SMark Murray #define TELOPT_RCP 2 /* prepare to reconnect */ 8513e3f4d6SMark Murray #define TELOPT_SGA 3 /* suppress go ahead */ 8613e3f4d6SMark Murray #define TELOPT_NAMS 4 /* approximate message size */ 8713e3f4d6SMark Murray #define TELOPT_STATUS 5 /* give status */ 8813e3f4d6SMark Murray #define TELOPT_TM 6 /* timing mark */ 8913e3f4d6SMark Murray #define TELOPT_RCTE 7 /* remote controlled transmission and echo */ 9013e3f4d6SMark Murray #define TELOPT_NAOL 8 /* negotiate about output line width */ 9113e3f4d6SMark Murray #define TELOPT_NAOP 9 /* negotiate about output page size */ 9213e3f4d6SMark Murray #define TELOPT_NAOCRD 10 /* negotiate about CR disposition */ 9313e3f4d6SMark Murray #define TELOPT_NAOHTS 11 /* negotiate about horizontal tabstops */ 9413e3f4d6SMark Murray #define TELOPT_NAOHTD 12 /* negotiate about horizontal tab disposition */ 9513e3f4d6SMark Murray #define TELOPT_NAOFFD 13 /* negotiate about formfeed disposition */ 9613e3f4d6SMark Murray #define TELOPT_NAOVTS 14 /* negotiate about vertical tab stops */ 9713e3f4d6SMark Murray #define TELOPT_NAOVTD 15 /* negotiate about vertical tab disposition */ 9813e3f4d6SMark Murray #define TELOPT_NAOLFD 16 /* negotiate about output LF disposition */ 9913e3f4d6SMark Murray #define TELOPT_XASCII 17 /* extended ascic character set */ 10013e3f4d6SMark Murray #define TELOPT_LOGOUT 18 /* force logout */ 10113e3f4d6SMark Murray #define TELOPT_BM 19 /* byte macro */ 10213e3f4d6SMark Murray #define TELOPT_DET 20 /* data entry terminal */ 10313e3f4d6SMark Murray #define TELOPT_SUPDUP 21 /* supdup protocol */ 10413e3f4d6SMark Murray #define TELOPT_SUPDUPOUTPUT 22 /* supdup output */ 10513e3f4d6SMark Murray #define TELOPT_SNDLOC 23 /* send location */ 10613e3f4d6SMark Murray #define TELOPT_TTYPE 24 /* terminal type */ 10713e3f4d6SMark Murray #define TELOPT_EOR 25 /* end or record */ 10813e3f4d6SMark Murray #define TELOPT_TUID 26 /* TACACS user identification */ 10913e3f4d6SMark Murray #define TELOPT_OUTMRK 27 /* output marking */ 11013e3f4d6SMark Murray #define TELOPT_TTYLOC 28 /* terminal location number */ 11113e3f4d6SMark Murray #define TELOPT_3270REGIME 29 /* 3270 regime */ 11213e3f4d6SMark Murray #define TELOPT_X3PAD 30 /* X.3 PAD */ 11313e3f4d6SMark Murray #define TELOPT_NAWS 31 /* window size */ 11413e3f4d6SMark Murray #define TELOPT_TSPEED 32 /* terminal speed */ 11513e3f4d6SMark Murray #define TELOPT_LFLOW 33 /* remote flow control */ 11613e3f4d6SMark Murray #define TELOPT_LINEMODE 34 /* Linemode option */ 11713e3f4d6SMark Murray #define TELOPT_XDISPLOC 35 /* X Display Location */ 11813e3f4d6SMark Murray #define TELOPT_OLD_ENVIRON 36 /* Old - Environment variables */ 11913e3f4d6SMark Murray #define TELOPT_AUTHENTICATION 37/* Authenticate */ 12013e3f4d6SMark Murray #define TELOPT_ENCRYPT 38 /* Encryption option */ 12113e3f4d6SMark Murray #define TELOPT_NEW_ENVIRON 39 /* New - Environment variables */ 12213e3f4d6SMark Murray #define TELOPT_EXOPL 255 /* extended-options-list */ 12313e3f4d6SMark Murray 12413e3f4d6SMark Murray 12513e3f4d6SMark Murray #define NTELOPTS (1+TELOPT_NEW_ENVIRON) 12613e3f4d6SMark Murray #ifdef TELOPTS 12713e3f4d6SMark Murray char *telopts[NTELOPTS+1] = { 12813e3f4d6SMark Murray "BINARY", "ECHO", "RCP", "SUPPRESS GO AHEAD", "NAME", 12913e3f4d6SMark Murray "STATUS", "TIMING MARK", "RCTE", "NAOL", "NAOP", 13013e3f4d6SMark Murray "NAOCRD", "NAOHTS", "NAOHTD", "NAOFFD", "NAOVTS", 13113e3f4d6SMark Murray "NAOVTD", "NAOLFD", "EXTEND ASCII", "LOGOUT", "BYTE MACRO", 13213e3f4d6SMark Murray "DATA ENTRY TERMINAL", "SUPDUP", "SUPDUP OUTPUT", 13313e3f4d6SMark Murray "SEND LOCATION", "TERMINAL TYPE", "END OF RECORD", 13413e3f4d6SMark Murray "TACACS UID", "OUTPUT MARKING", "TTYLOC", 13513e3f4d6SMark Murray "3270 REGIME", "X.3 PAD", "NAWS", "TSPEED", "LFLOW", 13613e3f4d6SMark Murray "LINEMODE", "XDISPLOC", "OLD-ENVIRON", "AUTHENTICATION", 13713e3f4d6SMark Murray "ENCRYPT", "NEW-ENVIRON", 13813e3f4d6SMark Murray 0, 13913e3f4d6SMark Murray }; 14013e3f4d6SMark Murray #define TELOPT_FIRST TELOPT_BINARY 14113e3f4d6SMark Murray #define TELOPT_LAST TELOPT_NEW_ENVIRON 14213e3f4d6SMark Murray #define TELOPT_OK(x) ((unsigned int)(x) <= TELOPT_LAST) 14313e3f4d6SMark Murray #define TELOPT(x) telopts[(x)-TELOPT_FIRST] 14413e3f4d6SMark Murray #endif 14513e3f4d6SMark Murray 14613e3f4d6SMark Murray /* sub-option qualifiers */ 14713e3f4d6SMark Murray #define TELQUAL_IS 0 /* option is... */ 14813e3f4d6SMark Murray #define TELQUAL_SEND 1 /* send option */ 14913e3f4d6SMark Murray #define TELQUAL_INFO 2 /* ENVIRON: informational version of IS */ 15013e3f4d6SMark Murray #define TELQUAL_REPLY 2 /* AUTHENTICATION: client version of IS */ 15113e3f4d6SMark Murray #define TELQUAL_NAME 3 /* AUTHENTICATION: client version of IS */ 15213e3f4d6SMark Murray 15313e3f4d6SMark Murray #define LFLOW_OFF 0 /* Disable remote flow control */ 15413e3f4d6SMark Murray #define LFLOW_ON 1 /* Enable remote flow control */ 15513e3f4d6SMark Murray #define LFLOW_RESTART_ANY 2 /* Restart output on any char */ 15613e3f4d6SMark Murray #define LFLOW_RESTART_XON 3 /* Restart output only on XON */ 15713e3f4d6SMark Murray 15813e3f4d6SMark Murray /* 15913e3f4d6SMark Murray * LINEMODE suboptions 16013e3f4d6SMark Murray */ 16113e3f4d6SMark Murray 16213e3f4d6SMark Murray #define LM_MODE 1 16313e3f4d6SMark Murray #define LM_FORWARDMASK 2 16413e3f4d6SMark Murray #define LM_SLC 3 16513e3f4d6SMark Murray 16613e3f4d6SMark Murray #define MODE_EDIT 0x01 16713e3f4d6SMark Murray #define MODE_TRAPSIG 0x02 16813e3f4d6SMark Murray #define MODE_ACK 0x04 16913e3f4d6SMark Murray #define MODE_SOFT_TAB 0x08 17013e3f4d6SMark Murray #define MODE_LIT_ECHO 0x10 17113e3f4d6SMark Murray 17213e3f4d6SMark Murray #define MODE_MASK 0x1f 17313e3f4d6SMark Murray 17413e3f4d6SMark Murray /* Not part of protocol, but needed to simplify things... */ 17513e3f4d6SMark Murray #define MODE_FLOW 0x0100 17613e3f4d6SMark Murray #define MODE_ECHO 0x0200 17713e3f4d6SMark Murray #define MODE_INBIN 0x0400 17813e3f4d6SMark Murray #define MODE_OUTBIN 0x0800 17913e3f4d6SMark Murray #define MODE_FORCE 0x1000 18013e3f4d6SMark Murray 18113e3f4d6SMark Murray #define SLC_SYNCH 1 18213e3f4d6SMark Murray #define SLC_BRK 2 18313e3f4d6SMark Murray #define SLC_IP 3 18413e3f4d6SMark Murray #define SLC_AO 4 18513e3f4d6SMark Murray #define SLC_AYT 5 18613e3f4d6SMark Murray #define SLC_EOR 6 18713e3f4d6SMark Murray #define SLC_ABORT 7 18813e3f4d6SMark Murray #define SLC_EOF 8 18913e3f4d6SMark Murray #define SLC_SUSP 9 19013e3f4d6SMark Murray #define SLC_EC 10 19113e3f4d6SMark Murray #define SLC_EL 11 19213e3f4d6SMark Murray #define SLC_EW 12 19313e3f4d6SMark Murray #define SLC_RP 13 19413e3f4d6SMark Murray #define SLC_LNEXT 14 19513e3f4d6SMark Murray #define SLC_XON 15 19613e3f4d6SMark Murray #define SLC_XOFF 16 19713e3f4d6SMark Murray #define SLC_FORW1 17 19813e3f4d6SMark Murray #define SLC_FORW2 18 19913e3f4d6SMark Murray 20013e3f4d6SMark Murray #define NSLC 18 20113e3f4d6SMark Murray 20213e3f4d6SMark Murray /* 20313e3f4d6SMark Murray * For backwards compatability, we define SLC_NAMES to be the 20413e3f4d6SMark Murray * list of names if SLC_NAMES is not defined. 20513e3f4d6SMark Murray */ 20613e3f4d6SMark Murray #define SLC_NAMELIST "0", "SYNCH", "BRK", "IP", "AO", "AYT", "EOR", \ 20713e3f4d6SMark Murray "ABORT", "EOF", "SUSP", "EC", "EL", "EW", "RP", \ 20813e3f4d6SMark Murray "LNEXT", "XON", "XOFF", "FORW1", "FORW2", 0, 20913e3f4d6SMark Murray #ifdef SLC_NAMES 21013e3f4d6SMark Murray char *slc_names[] = { 21113e3f4d6SMark Murray SLC_NAMELIST 21213e3f4d6SMark Murray }; 21313e3f4d6SMark Murray #else 21413e3f4d6SMark Murray extern char *slc_names[]; 21513e3f4d6SMark Murray #define SLC_NAMES SLC_NAMELIST 21613e3f4d6SMark Murray #endif 21713e3f4d6SMark Murray 21813e3f4d6SMark Murray #define SLC_NAME_OK(x) ((unsigned int)(x) <= NSLC) 21913e3f4d6SMark Murray #define SLC_NAME(x) slc_names[x] 22013e3f4d6SMark Murray 22113e3f4d6SMark Murray #define SLC_NOSUPPORT 0 22213e3f4d6SMark Murray #define SLC_CANTCHANGE 1 22313e3f4d6SMark Murray #define SLC_VARIABLE 2 22413e3f4d6SMark Murray #define SLC_DEFAULT 3 22513e3f4d6SMark Murray #define SLC_LEVELBITS 0x03 22613e3f4d6SMark Murray 22713e3f4d6SMark Murray #define SLC_FUNC 0 22813e3f4d6SMark Murray #define SLC_FLAGS 1 22913e3f4d6SMark Murray #define SLC_VALUE 2 23013e3f4d6SMark Murray 23113e3f4d6SMark Murray #define SLC_ACK 0x80 23213e3f4d6SMark Murray #define SLC_FLUSHIN 0x40 23313e3f4d6SMark Murray #define SLC_FLUSHOUT 0x20 23413e3f4d6SMark Murray 23513e3f4d6SMark Murray #define OLD_ENV_VAR 1 23613e3f4d6SMark Murray #define OLD_ENV_VALUE 0 23713e3f4d6SMark Murray #define NEW_ENV_VAR 0 23813e3f4d6SMark Murray #define NEW_ENV_VALUE 1 23913e3f4d6SMark Murray #define ENV_ESC 2 24013e3f4d6SMark Murray #define ENV_USERVAR 3 24113e3f4d6SMark Murray 24213e3f4d6SMark Murray /* 24313e3f4d6SMark Murray * AUTHENTICATION suboptions 24413e3f4d6SMark Murray */ 24513e3f4d6SMark Murray 24613e3f4d6SMark Murray /* 24713e3f4d6SMark Murray * Who is authenticating who ... 24813e3f4d6SMark Murray */ 24913e3f4d6SMark Murray #define AUTH_WHO_CLIENT 0 /* Client authenticating server */ 25013e3f4d6SMark Murray #define AUTH_WHO_SERVER 1 /* Server authenticating client */ 25113e3f4d6SMark Murray #define AUTH_WHO_MASK 1 25213e3f4d6SMark Murray 25313e3f4d6SMark Murray /* 25413e3f4d6SMark Murray * amount of authentication done 25513e3f4d6SMark Murray */ 25613e3f4d6SMark Murray #define AUTH_HOW_ONE_WAY 0 25713e3f4d6SMark Murray #define AUTH_HOW_MUTUAL 2 25813e3f4d6SMark Murray #define AUTH_HOW_MASK 2 25913e3f4d6SMark Murray 26013e3f4d6SMark Murray #define AUTHTYPE_NULL 0 26113e3f4d6SMark Murray #define AUTHTYPE_KERBEROS_V4 1 26213e3f4d6SMark Murray #define AUTHTYPE_KERBEROS_V5 2 26313e3f4d6SMark Murray #define AUTHTYPE_SPX 3 26413e3f4d6SMark Murray #define AUTHTYPE_MINK 4 26513e3f4d6SMark Murray #define AUTHTYPE_SRA 5 26613e3f4d6SMark Murray #define AUTHTYPE_CNT 6 26713e3f4d6SMark Murray /* #define AUTHTYPE_UNSECURE 6 */ 26813e3f4d6SMark Murray 26913e3f4d6SMark Murray #define AUTHTYPE_TEST 99 27013e3f4d6SMark Murray 27113e3f4d6SMark Murray #ifdef AUTH_NAMES 27213e3f4d6SMark Murray char *authtype_names[] = { 27313e3f4d6SMark Murray "NULL", "KERBEROS_V4", "KERBEROS_V5", "SPX", "MINK", 27413e3f4d6SMark Murray "SRA", 0, 27513e3f4d6SMark Murray }; 27613e3f4d6SMark Murray #else 27713e3f4d6SMark Murray extern char *authtype_names[]; 27813e3f4d6SMark Murray #endif 27913e3f4d6SMark Murray 28013e3f4d6SMark Murray #define AUTHTYPE_NAME_OK(x) ((unsigned int)(x) < AUTHTYPE_CNT) 28113e3f4d6SMark Murray #define AUTHTYPE_NAME(x) authtype_names[x] 28213e3f4d6SMark Murray 28313e3f4d6SMark Murray /* 28413e3f4d6SMark Murray * ENCRYPTion suboptions 28513e3f4d6SMark Murray */ 28613e3f4d6SMark Murray #define ENCRYPT_IS 0 /* I pick encryption type ... */ 28713e3f4d6SMark Murray #define ENCRYPT_SUPPORT 1 /* I support encryption types ... */ 28813e3f4d6SMark Murray #define ENCRYPT_REPLY 2 /* Initial setup response */ 28913e3f4d6SMark Murray #define ENCRYPT_START 3 /* Am starting to send encrypted */ 29013e3f4d6SMark Murray #define ENCRYPT_END 4 /* Am ending encrypted */ 29113e3f4d6SMark Murray #define ENCRYPT_REQSTART 5 /* Request you start encrypting */ 29213e3f4d6SMark Murray #define ENCRYPT_REQEND 6 /* Request you send encrypting */ 29313e3f4d6SMark Murray #define ENCRYPT_ENC_KEYID 7 29413e3f4d6SMark Murray #define ENCRYPT_DEC_KEYID 8 29513e3f4d6SMark Murray #define ENCRYPT_CNT 9 29613e3f4d6SMark Murray 29713e3f4d6SMark Murray #define ENCTYPE_ANY 0 29813e3f4d6SMark Murray #define ENCTYPE_DES_CFB64 1 29913e3f4d6SMark Murray #define ENCTYPE_DES_OFB64 2 30013e3f4d6SMark Murray #define ENCTYPE_CNT 3 30113e3f4d6SMark Murray 30213e3f4d6SMark Murray #ifdef ENCRYPT_NAMES 30313e3f4d6SMark Murray char *encrypt_names[] = { 30413e3f4d6SMark Murray "IS", "SUPPORT", "REPLY", "START", "END", 30513e3f4d6SMark Murray "REQUEST-START", "REQUEST-END", "ENC-KEYID", "DEC-KEYID", 30613e3f4d6SMark Murray 0, 30713e3f4d6SMark Murray }; 30813e3f4d6SMark Murray char *enctype_names[] = { 30913e3f4d6SMark Murray "ANY", "DES_CFB64", "DES_OFB64", 0, 31013e3f4d6SMark Murray }; 31113e3f4d6SMark Murray #else 31213e3f4d6SMark Murray extern char *encrypt_names[]; 31313e3f4d6SMark Murray extern char *enctype_names[]; 31413e3f4d6SMark Murray #endif 31513e3f4d6SMark Murray 31613e3f4d6SMark Murray 31713e3f4d6SMark Murray #define ENCRYPT_NAME_OK(x) ((unsigned int)(x) < ENCRYPT_CNT) 31813e3f4d6SMark Murray #define ENCRYPT_NAME(x) encrypt_names[x] 31913e3f4d6SMark Murray 32013e3f4d6SMark Murray #define ENCTYPE_NAME_OK(x) ((unsigned int)(x) < ENCTYPE_CNT) 32113e3f4d6SMark Murray #define ENCTYPE_NAME(x) enctype_names[x] 32213e3f4d6SMark Murray 32313e3f4d6SMark Murray #endif /* !_TELNET_H_ */ 324