| /* ckctel.h -- Symbol and macro definitions for C-Kermit telnet support */ |
| |
| /* |
| Authors: Jeffrey E Altman <jaltman@secure-endpoints.com>, |
| Secure Endpoints Inc., New York City |
| Frank da Cruz <fdc@columbia.edu> |
| Columbia University Academic Information Systems, New York City. |
| |
| Copyright (C) 1985, 2004, |
| Trustees of Columbia University in the City of New York. |
| All rights reserved. See the C-Kermit COPYING.TXT file or the |
| copyright text in the ckcmai.c module for disclaimer and permissions. |
| |
| Notes: |
| . Only one source file should include #defines for |
| TELCMDS, TELOPTS, TELOPT_STATES, SLC_NAMES, and AUTH_NAMES. |
| . This file should be used inplace of "arpa/telnet.h" |
| */ |
| |
| #ifndef CKCTEL_H |
| #define CKCTEL_H |
| #ifdef TNCODE |
| /* |
| Definitions for the TELNET protocol. |
| can't rely on library header files for any of them. |
| */ |
| #ifndef IAC /* First the telnet commands */ |
| #define IAC 255 |
| #endif /* IAC */ |
| #ifndef DONT |
| #define DONT 254 |
| #endif /* DONT */ |
| #ifndef DO |
| #define DO 253 |
| #endif /* DO */ |
| #ifndef WONT |
| #define WONT 252 |
| #endif /* WONT */ |
| #ifndef WILL |
| #define WILL 251 |
| #endif /* WILL */ |
| #ifndef SB |
| #define SB 250 |
| #endif /* SB */ |
| #ifndef TN_GA |
| #define TN_GA 249 |
| #endif /* TN_GA */ |
| #ifndef TN_EL |
| #define TN_EL 248 |
| #endif /* TN_EL */ |
| #ifndef TN_EC |
| #define TN_EC 247 |
| #endif /* TN_EC */ |
| #ifndef TN_AYT |
| #define TN_AYT 246 |
| #endif /* TN_AYT */ |
| #ifndef TN_AO |
| #define TN_AO 245 |
| #endif /* TN_AO */ |
| #ifndef TN_IP |
| #define TN_IP 244 |
| #endif /* TN_IP */ |
| #ifndef BREAK |
| #define BREAK 243 |
| #endif /* BREAK */ |
| #ifndef TN_DM |
| #define TN_DM 242 |
| #endif /* TN_DM */ |
| #ifndef TN_NOP |
| #define TN_NOP 241 |
| #endif /* TN_NOP */ |
| #ifndef SE |
| #define SE 240 |
| #endif /* SE */ |
| #ifndef TN_EOR |
| #define TN_EOR 239 |
| #endif /* TN_EOR */ |
| #ifndef TN_ABORT |
| #define TN_ABORT 238 |
| #endif /* TN_ABORT */ |
| #ifndef TN_SUSP |
| #define TN_SUSP 237 |
| #endif /* TN_SUSP */ |
| #ifndef TN_EOF |
| #define TN_EOF 236 |
| #endif /* TN_EOF */ |
| #ifndef LAST_TN_CMD |
| #define LAST_TN_CMD 236 |
| |
| #define TN_SAK 200 /* IBM Secure Attention Key */ |
| #endif /* LAST_TN_CMD */ |
| |
| #define SYNCH 242 /* for telfunc calls */ |
| |
| #ifdef TELCMDS |
| char *telcmds[] = { |
| "EOF", "SUSP", "ABORT", "EOR", |
| "SE", "NOP", "DMARK", "BRK", "IP", "AO", "AYT", "EC", |
| "EL", "GA", "SB", "WILL", "WONT", "DO", "DONT", "IAC", 0 |
| }; |
| #else /* TELCMDS */ |
| extern char *telcmds[]; |
| #endif /* TELCMDS */ |
| |
| #define TELCMD_FIRST TN_EOF |
| #define TELCMD_LAST IAC |
| #define TELCMD_OK(x) ((unsigned int)(x) <= TELCMD_LAST && \ |
| (unsigned int)(x) >= TELCMD_FIRST || \ |
| (unsigned int)(x) == TN_SAK) |
| #define TELCMD(x) (TELCMD_OK(x)? ((x) == TN_SAK?"SAK": \ |
| telcmds[(x)-TELCMD_FIRST]):"UNKNOWN") |
| |
| /* Then the options */ |
| /* NB: the following platforms have TELOPT_AUTHENTICATION defined as */ |
| /* 45 instead of 37. */ |
| #ifdef TELOPT_AUTHENTICATION |
| #ifdef __osf__ |
| #undef TELOPT_AUTHENTICATION |
| #endif /* __osf__ */ |
| #ifndef IRIX |
| #undef TELOPT_AUTHENTICATION |
| #endif /* IRIX */ |
| #ifndef ultrix |
| #undef TELOPT_AUTHENTICATION |
| #endif /* ultrix */ |
| #endif /* TELOPT_AUTHENTICATION */ |
| |
| /* telnet options */ |
| #ifndef TELOPT_BINARY |
| #define TELOPT_BINARY 0 /* 8-bit data path (RFC 856)*/ |
| #endif |
| #ifndef TELOPT_ECHO |
| #define TELOPT_ECHO 1 /* echo (RFC 857)*/ |
| #endif |
| #ifndef TELOPT_RCP |
| #define TELOPT_RCP 2 /* prepare to reconnect (NIC 50005)*/ |
| #endif |
| #ifndef TELOPT_SGA |
| #define TELOPT_SGA 3 /* suppress go ahead (RFC 858) */ |
| #endif |
| #ifndef TELOPT_NAMS |
| #define TELOPT_NAMS 4 /* approximate message size (ETHERNET) */ |
| #endif |
| #ifndef TELOPT_STATUS |
| #define TELOPT_STATUS 5 /* give status (RFC 859) */ |
| #endif |
| #ifndef TELOPT_TM |
| #define TELOPT_TM 6 /* timing mark (RFC 860) */ |
| #endif |
| #ifndef TELOPT_RCTE |
| #define TELOPT_RCTE 7 /* remote controlled transmission and echo */ |
| #endif /* (RFC 726) */ |
| #ifndef TELOPT_NAOL |
| #define TELOPT_NAOL 8 /* negotiate about output line width */ |
| #endif /* (NIC 50005) */ |
| #ifndef TELOPT_NAOP |
| #define TELOPT_NAOP 9 /* negotiate about output page size */ |
| #endif /* (NIC 50005) */ |
| #ifndef TELOPT_NAOCRD |
| #define TELOPT_NAOCRD 10 /* negotiate about CR disposition (RFC 652) */ |
| #endif /* [Historic] */ |
| #ifndef TELOPT_NAOHTS |
| #define TELOPT_NAOHTS 11 /* negotiate about horizontal tabstops */ |
| #endif /* (RFC 653) [Historic] */ |
| #ifndef TELOPT_NAOHTD |
| #define TELOPT_NAOHTD 12 /* negotiate about horiz tab disposition */ |
| #endif /* (RFC 654) [Historic] */ |
| #ifndef TELOPT_NAOFFD |
| #define TELOPT_NAOFFD 13 /* negotiate about formfeed disposition */ |
| #endif /* (RFC 655) [Historic] */ |
| #ifndef TELOPT_NAOVTS |
| #define TELOPT_NAOVTS 14 /* negotiate about vertical tab stops */ |
| #endif /* (RFC 656) [Historic] */ |
| #ifndef TELOPT_NAOVTD |
| #define TELOPT_NAOVTD 15 /* negotiate about vertical tab disposition */ |
| #endif /* (RFC 657) [Historic] */ |
| #ifndef TELOPT_NAOLFD |
| #define TELOPT_NAOLFD 16 /* negotiate about output LF disposition */ |
| #endif /* (RFC 658) [Historic] */ |
| #ifndef TELOPT_XASCII |
| #define TELOPT_XASCII 17 /* extended ascii character set */ |
| #endif /* (RFC 698) */ |
| #ifndef TELOPT_LOGOUT |
| #define TELOPT_LOGOUT 18 /* force logout (RFC 727) */ |
| #endif |
| #ifndef TELOPT_BM |
| #define TELOPT_BM 19 /* byte macro (RFC 735) */ |
| #endif |
| #ifndef TELOPT_DET |
| #define TELOPT_DET 20 /* data entry terminal (RFC 1043, 732) */ |
| #endif |
| #ifndef TELOPT_SUPDUP |
| #define TELOPT_SUPDUP 21 /* supdup protocol (RFC 736, 734) */ |
| #endif |
| #ifndef TELOPT_SUPDUPOUTPUT |
| #define TELOPT_SUPDUPOUTPUT 22 /* supdup output (RFC 749) */ |
| #endif |
| #ifndef TELOPT_SNDLOC |
| #define TELOPT_SNDLOC 23 /* send location (RFC 779) */ |
| #endif |
| #ifndef TELOPT_TTYPE |
| #define TELOPT_TTYPE 24 /* terminal type (RFC 1091) */ |
| #endif |
| #ifndef TELOPT_EOR |
| #define TELOPT_EOR 25 /* end of record (RFC 885) */ |
| #endif |
| #ifndef TELOPT_TUID |
| #define TELOPT_TUID 26 /* TACACS user identification (RFC 927) */ |
| #endif |
| #ifndef TELOPT_OUTMRK |
| #define TELOPT_OUTMRK 27 /* output marking (RFC 933) */ |
| #endif |
| #ifndef TELOPT_TTYLOC |
| #define TELOPT_TTYLOC 28 /* terminal location number (RFC 946) */ |
| #endif |
| #ifndef TELOPT_3270REGIME |
| #define TELOPT_3270REGIME 29 /* 3270 regime (RFC 1041) */ |
| #endif |
| #ifndef TELOPT_X3PAD |
| #define TELOPT_X3PAD 30 /* X.3 PAD (RFC 1053) */ |
| #endif |
| #ifndef TELOPT_NAWS |
| #define TELOPT_NAWS 31 /* window size (RFC 1073) */ |
| #endif |
| #ifndef TELOPT_TSPEED |
| #define TELOPT_TSPEED 32 /* terminal speed (RFC 1079) */ |
| #endif |
| #ifndef TELOPT_LFLOW |
| #define TELOPT_LFLOW 33 /* remote flow control (RFC 1372) */ |
| #endif |
| #ifndef TELOPT_LINEMODE |
| #define TELOPT_LINEMODE 34 /* Linemode option (RFC 1184) */ |
| #endif |
| #ifndef TELOPT_XDISPLOC |
| #define TELOPT_XDISPLOC 35 /* X Display Location (RFC 1096) */ |
| #endif |
| #ifndef TELOPT_OLD_ENVIRON |
| #define TELOPT_OLD_ENVIRON 36 /* Old - Environment variables (RFC 1408) */ |
| #endif |
| #ifndef TELOPT_AUTHENTICATION |
| #define TELOPT_AUTHENTICATION 37/* Authenticate (RFC 2941) */ |
| #endif |
| #ifndef TELOPT_ENCRYPTION |
| #define TELOPT_ENCRYPTION 38 /* Encryption option (RFC 2946) */ |
| #endif |
| #ifndef TELOPT_NEWENVIRON |
| #define TELOPT_NEWENVIRON 39 /* New - Environment variables (RFC 1572) */ |
| #endif |
| #ifndef TELOPT_3270E |
| #define TELOPT_3270E 40 /* 3270 Extended (RFC 1647) */ |
| #endif |
| #ifndef TELOPT_XAUTH |
| #define TELOPT_XAUTH 41 /* ??? (Earhart) */ |
| #endif |
| #ifndef TELOPT_CHARSET |
| #define TELOPT_CHARSET 42 /* Character-set (RFC 2066) */ |
| #endif |
| #ifndef TELOPT_RSP |
| #define TELOPT_RSP 43 /* Remote Serial Port (Barnes) */ |
| #endif |
| #ifndef TELOPT_COMPORT |
| #define TELOPT_COMPORT 44 /* Com Port Control (RFC 2217) */ |
| #endif |
| #ifndef TELOPT_SLE |
| #define TELOPT_SLE 45 /* Suppress Local Echo (Atmar) - [rejected] */ |
| #endif |
| #ifndef TELOPT_START_TLS |
| #define TELOPT_START_TLS 46 /* Telnet over Transport Layer Security */ |
| #endif /* (Boe) */ |
| #ifndef TELOPT_KERMIT |
| #define TELOPT_KERMIT 47 /* Kermit (RFC 2840) */ |
| #endif |
| #ifndef TELOPT_SEND_URL |
| #define TELOPT_SEND_URL 48 /* Send URL */ |
| #endif |
| |
| #ifndef TELOPT_FORWARD_X |
| #define TELOPT_FORWARD_X 49 /* X Windows Forwarding (Altman) */ |
| #endif /* TELOPT_FORWARD_X */ |
| |
| #ifndef TELOPT_STDERR |
| #define TELOPT_STDERR 50 /* Redirected Stderr (Altman) */ |
| #endif /* TELOPT_STDERR */ |
| |
| #ifndef TELOPT_PRAGMA_LOGON |
| #define TELOPT_PRAGMA_LOGON 138 /* Encrypted Logon option (PragmaSys) */ |
| #endif |
| #ifndef TELOPT_SSPI_LOGON |
| #define TELOPT_SSPI_LOGON 139 /* MS SSPI Logon option (PragmaSys) */ |
| #endif |
| #ifndef TELOPT_PRAGMA_HEARTBEAT |
| /* Server Send Heartbeat option (PragmaSys) */ |
| #define TELOPT_PRAGMA_HEARTBEAT 140 |
| #endif |
| |
| #define TELOPT_IBM_SAK 200 /* IBM Secure Attention Key */ |
| |
| /* |
| IBM Secure Attention Key (SAK) Option |
| |
| In addition to terminal negotiation, the telnet command allows |
| negotiation for the Secure Attention Key (SAK) |
| option. This option, when supported, provides the local user with |
| a secure communication path to the remote |
| host for tasks such as changing user IDs or passwords. If the remote |
| host supports the SAK function, a trusted |
| shell is opened on the remote host when the telnet send sak |
| subcommand is issued. The SAK function can |
| also be assigned to a single key available in telnet input mode, |
| using the set sak subcommand. |
| |
| TN_SAK |
| |
| Sends the TELNET SAK (Secure Attention Key) sequence, which causes |
| the remote system to invoke the trusted shell. If the SAK is not |
| supported, then an error message is displayed that reads: |
| Remote side does not support SAK. |
| */ |
| |
| #ifndef TELOPT_EXOPL |
| #define TELOPT_EXOPL 255 /* Extended-options-list (RFC 861) */ |
| #endif |
| |
| #ifdef NTELOPTS |
| #undef NTELOPTS |
| #endif /* NTELOPTS */ |
| /* The Telnet Option space is no longer being allocated by ICANN as a */ |
| /* continuous list. In other words it is becoming sparse. But we do */ |
| /* not want to have to allocate memory for a long list of strings and */ |
| /* structs which will never be used. Therefore, the NTELOPTS define */ |
| /* can no longer be equal to TELOPT_LAST+1. In fact, the notion of */ |
| /* TELOPT_FIRST and TELOPT_LAST no longer make sense. */ |
| #define NTELOPTS 55 |
| |
| #define TELOPT_FIRST TELOPT_BINARY |
| #define TELOPT_LAST TELOPT_IBM_SAK |
| |
| /* |
| The following macros speed us up at runtime but are too complex |
| for some preprocessors / compilers; if your compiler bombs on ckctel.c |
| with "Instruction table overflow" or somesuch, rebuild with -DNOTOMACROS. |
| */ |
| #ifndef NOTOMACROS |
| #ifndef TELOPT_MACRO |
| #define TELOPT_MACRO |
| #endif /* TELOPT_MACRO */ |
| #endif /* NOTOMACROS */ |
| |
| #ifdef TELOPT_MACRO |
| #define TELOPT_INDEX(x) (((x)>=0 && (x)<= TELOPT_STDERR)?(x):\ |
| ((x)>=TELOPT_PRAGMA_LOGON && (x)<=TELOPT_PRAGMA_HEARTBEAT)?(x)-87: \ |
| ((x) == TELOPT_IBM_SAK)?(x)-146: NTELOPTS) |
| |
| #define TELOPT_OK(x) (((x) >= TELOPT_BINARY && (x) <= TELOPT_STDERR) ||\ |
| ((x) >= TELOPT_PRAGMA_LOGON && (x) <= TELOPT_PRAGMA_HEARTBEAT) ||\ |
| ((x) == TELOPT_IBM_SAK)) |
| #define TELOPT(x) (TELOPT_OK(x)?telopts[TELOPT_INDEX(x)]:"UNKNOWN") |
| #else /* TELOPT_MACRO */ |
| _PROTOTYP(int telopt_index,(int)); |
| _PROTOTYP(int telopt_ok,(int)); |
| _PROTOTYP(CHAR * telopt, (int)); |
| |
| #define TELOPT_INDEX(x) telopt_index(x) |
| #define TELOPT_OK(x) telopt_ok(x) |
| #define TELOPT(x) telopt(x) |
| #endif /* TELOPT_MACRO */ |
| |
| #ifdef TELOPTS |
| char *telopts[NTELOPTS+2] = { |
| /* 0 */ "BINARY", "ECHO", "RCP", "SUPPRESS-GO-AHEAD", |
| /* 4 */ "NAME", "STATUS", "TIMING-MARK", "RCTE", |
| /* 8 */ "NAOL", "NAOP", "NAOCRD", "NAOHTS", |
| /* 12 */ "NAOHTD", "NAOFFD", "NAOVTS", "NAOVTD", |
| /* 16 */ "NAOLFD", "EXTEND-ASCII", "LOGOUT", "BYTE-MACRO", |
| /* 20 */ "DATA-ENTRY-TERMINAL", "SUPDUP", "SUPDUP-OUTPUT", "SEND-LOCATION", |
| /* 24 */ "TERMINAL-TYPE", "END-OF-RECORD", "TACACS-UID", "OUTPUT-MARKING", |
| /* 28 */ "TTYLOC", "3270-REGIME", "X.3-PAD", "NAWS", |
| /* 32 */ "TSPEED", "LFLOW", "LINEMODE", "XDISPLOC", |
| /* 36 */ "OLD-ENVIRON", "AUTHENTICATION", "ENCRYPTION", "NEW-ENVIRONMENT", |
| /* 40 */ "TN3270E","xauth","CHARSET", "remote-serial-port", |
| /* 44 */ "COM-PORT-CONTROL","suppress-local-echo","START-TLS","KERMIT", |
| /* 48 */ "send-url","FORWARD-X","stderr", |
| /* 138 */ "pragma-logon", "sspi-logon", "pragma-heartbeat", |
| /* 200 */ "ibm-sak", |
| "unknown", |
| 0 |
| }; |
| #else /*TELOPTS */ |
| extern char * telopts[]; |
| #endif /* TELOPTS */ |
| |
| /* TELNET Newline Mode */ |
| |
| #define TNL_CR 0 /* CR sends bare carriage return */ |
| #define TNL_CRNUL 1 /* CR and NUL */ |
| #define TNL_CRLF 2 /* CR and LF */ |
| #define TNL_LF 3 /* LF instead of CR */ |
| |
| /* TELNET Negotiation Mode */ |
| |
| #define TN_NG_RF 0 /* Negotiation REFUSED */ |
| #define TN_NG_AC 1 /* Negotiation ACCEPTED */ |
| #define TN_NG_RQ 2 /* Negotiation REQUESTED */ |
| #define TN_NG_MU 3 /* Negotiation REQUIRED (must) */ |
| |
| |
| /* Systems where we know we can define TELNET NAWS automatically. */ |
| |
| #ifndef CK_NAWS /* In other words, if both */ |
| #ifdef CK_TTGWSIZ /* TNCODE and TTGWSIZ are defined */ |
| #define CK_NAWS /* then we can do NAWS. */ |
| #endif /* CK_TTGWSIZ */ |
| #endif /* CK_NAWS */ |
| |
| #ifdef CK_FORWARD_X |
| #ifndef MAXFWDX |
| #define MAXFWDX 64 /* Num of X windows to be fwd'd */ |
| #endif /* MAXFWDX */ |
| #endif /* CK_FORWARD_X */ |
| |
| /* Telnet State structures and definitions */ |
| struct _telopt_state { |
| unsigned char def_server_me_mode; /* Default Negotiation Mode */ |
| unsigned char def_server_u_mode; /* Default Negotiation Mode */ |
| unsigned char def_client_me_mode; /* Default Negotiation Mode */ |
| unsigned char def_client_u_mode; /* Default Negotiation Mode */ |
| unsigned char me_mode; /* Telnet Negotiation Mode */ |
| unsigned char u_mode; /* Telnet Negotiation Mode */ |
| unsigned char me; /* Am I ? */ |
| unsigned char u; /* Are you? */ |
| unsigned char unanswered_will; /* Sent Will, Waiting for DO/DONT */ |
| unsigned char unanswered_do; /* Send DO, Waiting for WILL/WONT */ |
| unsigned char unanswered_wont; /* Sent WONT, Waiting for DONT */ |
| unsigned char unanswered_dont; /* Sent DONT, Waiting for WONT */ |
| unsigned char unanswered_sb; /* Sent SB, Waiting for SB (server) */ |
| union { |
| #ifdef IKS_OPTION |
| struct _telopt_kermit { /* Kermit Option States */ |
| unsigned char me_start; /* I have a Server active */ |
| unsigned char me_req_start; /* Sent Req-Start, Waiting for response */ |
| unsigned char me_req_stop; /* Sent Req-Stop, Waiting for response */ |
| unsigned char u_start; /* You have a Server active */ |
| unsigned char sop; /* Have we received the SOP char? */ |
| } kermit; |
| #endif /* IKS_OPTION */ |
| #ifdef CK_ENCRYPTION |
| struct _telopt_encrypt { /* Encryption Option States */ |
| unsigned char need_to_send; |
| unsigned char stop; /* Is encryption stopped? */ |
| } encrypt; |
| #endif /* CK_ENCRYPTION */ |
| #ifdef CK_NAWS |
| struct _telopt_naws { /* NAWS Option Information */ |
| unsigned char need_to_send; |
| int x; /* Last Width */ |
| int y; /* Last Height */ |
| } naws; |
| #endif /* CK_NAWS */ |
| #ifdef CK_SSL |
| struct _telopt_start_tls { /* Start TLS Option */ |
| unsigned char u_follows; /* u ready for TLS negotiation */ |
| unsigned char me_follows; /* me ready for TLS negotiation */ |
| unsigned char auth_request; /* Rcvd WILL AUTH before WONT START_TLS */ |
| } start_tls; |
| #endif /* CK_SSL */ |
| struct _telopt_term { /* Terminal Type */ |
| unsigned char need_to_send; |
| unsigned char type[41]; /* Last terminal type */ |
| } term; |
| #ifdef CK_ENVIRONMENT |
| struct _telopt_new_env { |
| unsigned char need_to_send; |
| unsigned char * str; |
| int len; |
| } env; |
| #ifdef CK_XDISPLOC |
| struct _telopt_xdisp { |
| unsigned char need_to_send; |
| } xdisp; |
| #endif /* CK_XDISPLOC */ |
| #endif /* CK_ENVIRONMENT */ |
| #ifdef CK_SNDLOC |
| struct _telopt_sndloc { |
| unsigned char need_to_send; |
| } sndloc; |
| #endif /* CK_SNDLOC */ |
| #ifdef CK_FORWARD_X |
| struct _telopt_fwd_x { |
| unsigned char need_to_send; |
| int listen_socket; |
| struct _channel { |
| int fd; |
| int id; |
| unsigned char need_to_send_xauth; |
| unsigned char suspend; |
| } channel[MAXFWDX]; |
| #ifdef NT |
| int thread_started; |
| #endif /* NT */ |
| } forward_x; |
| #endif /* CK_FORWARD_X */ |
| #ifdef TN_COMPORT |
| struct _telopt_comport { |
| unsigned char need_to_send; |
| unsigned char wait_for_sb; |
| unsigned char wait_for_ms; |
| } comport; |
| #endif /* TN_COMPORT */ |
| /* additional options such as New Environment or Send Location */ |
| } sb; |
| }; |
| typedef struct _telopt_state telopt_state, *p_telopt_state; |
| |
| /* telopt_states[] is the array of structs which the state of each telnet */ |
| /* option is stored. We allocate one more than we need in case we are */ |
| /* sent telnet options that we do not recognize. If by some chance the */ |
| /* TELOPT_OK() check is skipped, TELOPT_INDEX() will force the option to */ |
| /* use the extra cell. */ |
| |
| #ifdef TELOPT_STATES |
| telopt_state telopt_states[NTELOPTS+1]; |
| #else /* TELOPT_STATES */ |
| extern telopt_state telopt_states[]; |
| #endif /* TELOPT_STATES */ |
| |
| #define TELOPT_ME(x) (telopt_states[TELOPT_INDEX(x)].me) |
| #define TELOPT_U(x) (telopt_states[TELOPT_INDEX(x)].u) |
| #define TELOPT_ME_MODE(x) \ |
| (telopt_states[TELOPT_INDEX(x)].me_mode) |
| #define TELOPT_U_MODE(x) \ |
| (telopt_states[TELOPT_INDEX(x)].u_mode) |
| #define TELOPT_UNANSWERED_WILL(x) \ |
| (telopt_states[TELOPT_INDEX(x)].unanswered_will) |
| #define TELOPT_UNANSWERED_DO(x) \ |
| (telopt_states[TELOPT_INDEX(x)].unanswered_do) |
| #define TELOPT_UNANSWERED_WONT(x) \ |
| (telopt_states[TELOPT_INDEX(x)].unanswered_wont) |
| #define TELOPT_UNANSWERED_DONT(x) \ |
| (telopt_states[TELOPT_INDEX(x)].unanswered_dont) |
| #define TELOPT_UNANSWERED_SB(x) \ |
| (telopt_states[TELOPT_INDEX(x)].unanswered_sb) |
| #define TELOPT_SB(x) \ |
| (telopt_states[TELOPT_INDEX(x)].sb) |
| #define TELOPT_DEF_S_ME_MODE(x) \ |
| (telopt_states[TELOPT_INDEX(x)].def_server_me_mode) |
| #define TELOPT_DEF_S_U_MODE(x) \ |
| (telopt_states[TELOPT_INDEX(x)].def_server_u_mode) |
| #define TELOPT_DEF_C_ME_MODE(x) \ |
| (telopt_states[TELOPT_INDEX(x)].def_client_me_mode) |
| #define TELOPT_DEF_C_U_MODE(x) \ |
| (telopt_states[TELOPT_INDEX(x)].def_client_u_mode) |
| |
| #ifdef TELOPT_MODES |
| char * telopt_modes[4] = { |
| "REFUSED", "ACCEPTED", "REQUESTED", "REQUIRED" |
| }; |
| #else /* TELOPT_MODES */ |
| extern char * telopt_modes[]; |
| #endif /* TELOPT_MODES */ |
| |
| #ifdef TELOPT_MACRO |
| #define TELOPT_MODE_OK(x) ((unsigned int)(x) <= TN_NG_MU) |
| #define TELOPT_MODE(x) (TELOPT_MODE_OK(x)?telopt_modes[(x)-TN_NG_RF]:"UNKNOWN") |
| #else /* TELOPT_MACRO */ |
| _PROTOTYP(int telopt_mode_ok,(int)); |
| _PROTOTYP(CHAR * telopt_mode,(int)); |
| |
| #define TELOPT_MODE_OK(x) telopt_mode_ok(x) |
| #define TELOPT_MODE(x) telopt_mode(x) |
| #endif /* TELOPT_MACRO */ |
| |
| /* Sub-option qualifiers */ |
| #define TELQUAL_IS 0 /* option is... */ |
| #define TELQUAL_SEND 1 /* send option */ |
| #define TELQUAL_INFO 2 /* ENVIRON: informational version of IS */ |
| #define TELQUAL_REPLY 2 /* AUTHENTICATION: client version of IS */ |
| #define TELQUAL_NAME 3 /* AUTHENTICATION: client version of IS */ |
| |
| #define TEL_ENV_VAR 0 |
| #define TEL_ENV_VALUE 1 |
| #define TEL_ENV_ESC 2 |
| #define TEL_ENV_USERVAR 3 |
| |
| #define LFLOW_OFF 0 /* Disable remote flow control */ |
| #define LFLOW_ON 1 /* Enable remote flow control */ |
| #define LFLOW_RESTART_ANY 2 /* Restart output on any char */ |
| #define LFLOW_RESTART_XON 3 /* Restart output only on XON */ |
| |
| /* |
| * LINEMODE suboptions |
| */ |
| |
| #define LM_MODE 1 |
| #define LM_FORWARDMASK 2 |
| #define LM_SLC 3 |
| |
| #define MODE_EDIT 0x01 |
| #define MODE_TRAPSIG 0x02 |
| #define MODE_ACK 0x04 |
| #define MODE_SOFT_TAB 0x08 |
| #define MODE_LIT_ECHO 0x10 |
| |
| #define MODE_MASK 0x1f |
| |
| /* Not part of protocol, but needed to simplify things... */ |
| #define MODE_FLOW 0x0100 |
| #define MODE_ECHO 0x0200 |
| #define MODE_INBIN 0x0400 |
| #define MODE_OUTBIN 0x0800 |
| #define MODE_FORCE 0x1000 |
| |
| #define SLC_SYNCH 1 |
| #define SLC_BRK 2 |
| #define SLC_IP 3 |
| #define SLC_AO 4 |
| #define SLC_AYT 5 |
| #define SLC_EOR 6 |
| #define SLC_ABORT 7 |
| #define SLC_EOF 8 |
| #define SLC_SUSP 9 |
| #define SLC_EC 10 |
| #define SLC_EL 11 |
| #define SLC_EW 12 |
| #define SLC_RP 13 |
| #define SLC_LNEXT 14 |
| #define SLC_XON 15 |
| #define SLC_XOFF 16 |
| #define SLC_FORW1 17 |
| #define SLC_FORW2 18 |
| #define SLC_MCL 19 |
| #define SLC_MCR 20 |
| #define SLC_MCWL 21 |
| #define SLC_MCWR 22 |
| #define SLC_MCBOL 23 |
| #define SLC_MCEOL 24 |
| #define SLC_INSRT 25 |
| #define SLC_OVER 26 |
| #define SLC_ECR 27 |
| #define SLC_EWR 28 |
| #define SLC_EBOL 29 |
| #define SLC_EEOL 30 |
| |
| #define NSLC 30 |
| |
| /* |
| * For backwards compatability, we define SLC_NAMES to be the |
| * list of names if SLC_NAMES is not defined. |
| */ |
| #define SLC_NAMELIST "0", "SYNCH", "BRK", "IP", "AO", "AYT", "EOR", \ |
| "ABORT", "EOF", "SUSP", "EC", "EL", "EW", "RP", \ |
| "LNEXT", "XON", "XOFF", "FORW1", "FORW2", \ |
| "MCL", "MCR", "MCWL", "MCWR", "MCBOL", "MCEOL", \ |
| "INSRT", "OVER", "ECR", "EWR", "EBOL", "EEOL", 0 |
| #ifdef SLC_NAMES |
| char *slc_names[] = { |
| SLC_NAMELIST |
| }; |
| #else |
| extern char *slc_names[]; |
| #define SLC_NAMES SLC_NAMELIST |
| #endif |
| |
| #define SLC_NAME_OK(x) ((unsigned int)(x) <= NSLC) |
| #define SLC_NAME(x) (SLC_NAME_OK(x)?slc_names[x]:"UNKNOWN") |
| |
| #define SLC_NOSUPPORT 0 |
| #define SLC_CANTCHANGE 1 |
| #define SLC_VARIABLE 2 |
| #define SLC_DEFAULT 3 |
| #define SLC_LEVELBITS 0x03 |
| |
| #define SLC_FUNC 0 |
| #define SLC_FLAGS 1 |
| #define SLC_VALUE 2 |
| |
| #define SLC_ACK 0x80 |
| #define SLC_FLUSHIN 0x40 |
| #define SLC_FLUSHOUT 0x20 |
| |
| #define OLD_ENV_VAR 1 |
| #define OLD_ENV_VALUE 0 |
| #define NEW_ENV_VAR 0 |
| #define NEW_ENV_VALUE 1 |
| #define ENV_ESC 2 |
| #define ENV_USERVAR 3 |
| |
| #define FWDX_SCREEN 0 |
| #define FWDX_OPEN 1 |
| #define FWDX_CLOSE 2 |
| #define FWDX_DATA 3 |
| #define FWDX_OPTIONS 4 |
| #define FWDX_OPT_DATA 5 |
| #define FWDX_XOFF 6 |
| #define FWDX_XON 7 |
| |
| #define FWDX_OPT_NONE 0 |
| #define FWDX_OPT_XAUTH 1 |
| |
| /* |
| * AUTHENTICATION suboptions |
| */ |
| |
| /* |
| * Who is authenticating who ... |
| */ |
| #define AUTH_CLIENT_TO_SERVER 0 /* Client authenticating server */ |
| #define AUTH_SERVER_TO_CLIENT 1 /* Server authenticating client */ |
| #define AUTH_WHO_MASK 1 |
| |
| /* |
| * amount of authentication done |
| */ |
| #define AUTH_HOW_ONE_WAY 0 |
| #define AUTH_HOW_MUTUAL 2 |
| #define AUTH_HOW_MASK 2 |
| |
| /* |
| * should we be encrypting? |
| */ |
| #define AUTH_ENCRYPT_OFF 0 |
| #define AUTH_ENCRYPT_USING_TELOPT 4 |
| #define AUTH_ENCRYPT_AFTER_EXCHANGE 16 |
| #define AUTH_ENCRYPT_START_TLS 20 |
| #define AUTH_ENCRYPT_MASK 20 |
| |
| /* |
| * will we be forwarding? |
| * if we want to activate the use of this flag then |
| * #define USE_INI_CRED_FWD |
| */ |
| #define INI_CRED_FWD_OFF 0 |
| #define INI_CRED_FWD_ON 8 |
| #define INI_CRED_FWD_MASK 8 |
| #define USE_INI_CRED_FWD |
| |
| #define AUTHTYPE_NULL 0 |
| #define AUTHTYPE_KERBEROS_V4 1 |
| #define AUTHTYPE_KERBEROS_V5 2 |
| #define AUTHTYPE_SPX 3 |
| #define AUTHTYPE_MINK 4 |
| #define AUTHTYPE_SRP 5 |
| #define AUTHTYPE_RSA 6 |
| #define AUTHTYPE_SSL 7 |
| #define AUTHTYPE_LOKI 10 |
| #define AUTHTYPE_SSA 11 |
| #define AUTHTYPE_KEA_SJ 12 |
| #define AUTHTYPE_KEA_INTEG 13 |
| #define AUTHTYPE_DSS 14 |
| #define AUTHTYPE_NTLM 15 |
| #define AUTHTYPE_GSSAPI_KRB5 16 /* Not allocated by IANA */ |
| #ifdef AUTHTYPE_CNT |
| #undef AUTHTYPE_CNT |
| #endif /* AUTHTYPE_CNT */ |
| #define AUTHTYPE_CNT 17 |
| |
| /* |
| * AUTHTYPEs Last updated 21 March 1999 |
| * from http://www.isi.edu/in-notes/iana/assignments/telnet-options |
| */ |
| |
| #define AUTHTYPE_AUTO 99 |
| |
| #ifdef AUTH_NAMES |
| char *authtype_names[] = { |
| "NULL", /* RFC 2941 */ |
| "KERBEROS_V4", /* RFC 2941 / 1411 */ |
| "KERBEROS_V5", /* RFC 2941 */ |
| "SPX", /* RFC 2941 (not Internet Standard) */ |
| "MINK", /* RFC 2941 (not Internet Standard) */ |
| "SRP", /* RFC 2944 */ |
| "RSA", /* RFC 2941 (not Internet Standard) */ |
| "SSL", /* RFC 2941 (not Internet Standard) */ |
| "IANA_8", /* not assigned by IANA */ |
| "IANA_9", /* not assigned by IANA */ |
| "LOKI", /* RFC 2941 (not Internet Standard) */ |
| "SSA", /* Schoch */ |
| "KEA_SJ", /* RFC 2951 */ |
| "KEA_SJ_INTEG", /* RFC 2951 */ |
| "DSS", /* RFC 2943 */ |
| "NTLM", /* Kahn <louisk@microsoft.com> */ |
| "GSSAPI-KRB5", /* experimental - altman */ |
| 0 |
| }; |
| char * authmode_names[] = { |
| "CLIENT_TO_SERVER|ONE_WAY", |
| "SERVER_TO_CLIENT|ONE_WAY", |
| "CLIENT_TO_SERVER|MUTUAL", |
| "SERVER_TO_CLIENT|MUTUAL", |
| "CLIENT_TO_SERVER|ONE_WAY|ENCRYPT_USING_TELOPT", |
| "SERVER_TO_CLIENT|ONE_WAY|ENCRYPT_USING_TELOPT", |
| "CLIENT_TO_SERVER|MUTUAL|ENCRYPT_USING_TELOPT", |
| "SERVER_TO_CLIENT|MUTUAL|ENCRYPT_USING_TELOPT", |
| "CLIENT_TO_SERVER|ONE_WAY|CRED_FWD", |
| "SERVER_TO_CLIENT|ONE_WAY|CRED_FWD", |
| "CLIENT_TO_SERVER|MUTUAL|CRED_FWD", |
| "SERVER_TO_CLIENT|MUTUAL|CRED_FWD", |
| "CLIENT_TO_SERVER|ONE_WAY|ENCRYPT_USING_TELOPT|CRED_FWD", |
| "SERVER_TO_CLIENT|ONE_WAY|ENCRYPT_USING_TELOPT|CRED_FWD", |
| "CLIENT_TO_SERVER|MUTUAL|ENCRYPT_USING_TELOPT|CRED_FWD", |
| "SERVER_TO_CLIENT|MUTUAL|ENCRYPT_USING_TELOPT|CRED_FWD", |
| "CLIENT_TO_SERVER|ONE_WAY|ENCRYPT_AFTER_EXCHANGE", |
| "SERVER_TO_CLIENT|ONE_WAY|ENCRYPT_AFTER_EXCHANGE", |
| "CLIENT_TO_SERVER|MUTUAL|ENCRYPT_AFTER_EXCHANGE", |
| "SERVER_TO_CLIENT|MUTUAL|ENCRYPT_AFTER_EXCHANGE", |
| "CLIENT_TO_SERVER|ONE_WAY|ENCRYPT_START_TLS", |
| "SERVER_TO_CLIENT|ONE_WAY|ENCRYPT_START_TLS", |
| "CLIENT_TO_SERVER|MUTUAL|ENCRYPT_START_TLS", |
| "SERVER_TO_CLIENT|MUTUAL|ENCRYPT_START_TLS", |
| "CLIENT_TO_SERVER|ONE_WAY|ENCRYPT_AFTER_EXCHANGE|CRED_FWD", |
| "SERVER_TO_CLIENT|ONE_WAY|ENCRYPT_AFTER_EXCHANGE|CRED_FWD", |
| "CLIENT_TO_SERVER|MUTUAL|ENCRYPT_AFTER_EXCHANGE|CRED_FWD", |
| "SERVER_TO_CLIENT|MUTUAL|ENCRYPT_AFTER_EXCHANGE|CRED_FWD", |
| "CLIENT_TO_SERVER|ONE_WAY|ENCRYPT_START_TLS|CRED_FWD", |
| "SERVER_TO_CLIENT|ONE_WAY|ENCRYPT_START_TLS|CRED_FWD", |
| "CLIENT_TO_SERVER|MUTUAL|ENCRYPT_START_TLS|CRED_FWD", |
| "SERVER_TO_CLIENT|MUTUAL|ENCRYPT_START_TLS|CRED_FWD", |
| 0 |
| }; |
| #else |
| extern char *authtype_names[]; |
| extern char *authmode_names[]; |
| #endif |
| #define AUTHMODE_CNT 32 |
| |
| #define AUTHTYPE_NAME_OK(x) ((unsigned int)(x) < AUTHTYPE_CNT) |
| #define AUTHTYPE_NAME(x) (AUTHTYPE_NAME_OK(x)?authtype_names[x]:"UNKNOWN") |
| |
| #define AUTHMODE_NAME_OK(x) ((unsigned int)(x) < AUTHMODE_CNT) |
| #define AUTHMODE_NAME(x) (AUTHMODE_NAME_OK(x)?authmode_names[x]:"UNKNOWN") |
| |
| /* Kerberos Authentication Message Identifiers */ |
| #define KRB_AUTH 0 /* Authentication data follows */ |
| #define KRB_REJECT 1 /* Rejected (reason might follow) */ |
| #define KRB_ACCEPT 2 /* Accepted */ |
| #define KRB4_CHALLENGE 3 |
| #define KRB4_RESPONSE 4 |
| #define KRB5_RESPONSE 3 /* Response for mutual auth. */ |
| #define KRB5_FORWARD 4 /* Forwarded credentials follow */ |
| #define KRB5_FORWARD_ACCEPT 5 /* Forwarded credentials accepted */ |
| #define KRB5_FORWARD_REJECT 6 /* Forwarded credentials rejected */ |
| #define KRB5_TLS_VERIFY 7 /* TLS Finished Msg verifier */ |
| |
| /* GSSAPI-KRB5 Authentication Message Identifiers */ |
| #define GSS_AUTH_DATA 0 /* Authentication data follows */ |
| #define GSS_REJECT 1 /* Rejected (reason might follow) */ |
| #define GSS_ACCEPT 2 /* Accepted (username might follow) */ |
| #define GSS_CONTINUE 3 |
| |
| /* Secure Remote Password Authentication Message Identifiers */ |
| #define SRP_AUTH 0 /* Authentication data follows */ |
| #define SRP_REJECT 1 /* Rejected (reason might follow) */ |
| #define SRP_ACCEPT 2 /* Accepted */ |
| #define SRP_CHALLENGE 3 |
| #define SRP_RESPONSE 4 |
| #define SRP_EXP 8 /* */ |
| #define SRP_PARAMS 9 /* */ |
| |
| /* Telnet Auth using KEA and SKIPJACK */ |
| |
| #define KEA_CERTA_RA 1 |
| #define KEA_CERTB_RB_IVB_NONCEB 2 |
| #define KEA_IVA_RESPONSEB_NONCEA 3 |
| #define KEA_RESPONSEA 4 |
| |
| /* Tim Hudson's SSL Authentication Message Identifiers */ |
| #define SSL_START 1 |
| #define SSL_ACCEPT 2 |
| #define SSL_REJECT 3 |
| |
| /* Microsoft NTLM Authentication Message Identifiers */ |
| #define NTLM_AUTH 0 |
| #define NTLM_CHALLENGE 1 |
| #define NTLM_RESPONSE 2 |
| #define NTLM_ACCEPT 3 |
| #define NTLM_REJECT 4 |
| |
| /* Generic Constants */ |
| #define AUTH_SUCCESS 0 |
| #define AUTH_FAILURE 255 |
| |
| /* |
| * ENCRYPTion suboptions |
| */ |
| #define ENCRYPT_IS 0 /* I pick encryption type ... */ |
| #define ENCRYPT_SUPPORT 1 /* I support encryption types ... */ |
| #define ENCRYPT_REPLY 2 /* Initial setup response */ |
| #define ENCRYPT_START 3 /* Am starting to send encrypted */ |
| #define ENCRYPT_END 4 /* Am ending encrypted */ |
| #define ENCRYPT_REQSTART 5 /* Request you start encrypting */ |
| #define ENCRYPT_REQEND 6 /* Request you send encrypting */ |
| #define ENCRYPT_ENC_KEYID 7 |
| #define ENCRYPT_DEC_KEYID 8 |
| #define ENCRYPT_CNT 9 |
| |
| #define ENCTYPE_ANY 0 |
| #define ENCTYPE_DES_CFB64 1 |
| #define ENCTYPE_DES_OFB64 2 |
| #define ENCTYPE_DES3_CFB64 3 |
| #define ENCTYPE_DES3_OFB64 4 |
| #define ENCTYPE_CAST5_40_CFB64 8 |
| #define ENCTYPE_CAST5_40_OFB64 9 |
| #define ENCTYPE_CAST128_CFB64 10 |
| #define ENCTYPE_CAST128_OFB64 11 |
| #ifdef ENCTYPE_CNT |
| #undef ENCTYPE_CNT |
| #endif |
| #define ENCTYPE_CNT 12 |
| |
| #ifdef ENCRYPT_NAMES |
| char *encrypt_names[] = { |
| "IS", "SUPPORT", "REPLY", "START", "END", |
| "REQUEST-START", "REQUEST-END", "ENC-KEYID", "DEC-KEYID", |
| 0 |
| }; |
| char *enctype_names[] = { |
| "ANY", |
| "DES_CFB64", /* RFC 2952 */ |
| "DES_OFB64", /* RFC 2953 */ |
| "DES3_CFB64", /* RFC 2947 */ |
| "DES3_OFB64", /* RFC 2948 */ |
| "UNKNOWN-5", |
| "UNKNOWN-6", |
| "UNKNOWN-7", |
| "CAST5_40_CFB64", /* RFC 2950 */ |
| "CAST5_40_OFB64", /* RFC 2949 */ |
| "CAST128_CFB64", /* RFC 2950*/ |
| "CAST128_OFB64", /* RFC 2949 */ |
| 0 |
| }; |
| #else |
| extern char *encrypt_names[]; |
| extern char *enctype_names[]; |
| #endif |
| |
| #define ENCRYPT_NAME_OK(x) ((unsigned int)(x) < ENCRYPT_CNT) |
| #define ENCRYPT_NAME(x) (ENCRYPT_NAME_OK(x)?encrypt_names[x]:"UNKNOWN") |
| |
| #define ENCTYPE_NAME_OK(x) ((unsigned int)(x) < ENCTYPE_CNT) |
| #define ENCTYPE_NAME(x) (ENCTYPE_NAME_OK(x)?enctype_names[x]:"UNKNOWN") |
| |
| /* For setting the state of validUser */ |
| |
| #define AUTH_REJECT 0 /* Rejected */ |
| #define AUTH_UNKNOWN 1 /* We don't know who he is, but he's okay */ |
| #define AUTH_OTHER 2 /* We know him, but not his name */ |
| #define AUTH_USER 3 /* We know he name */ |
| #define AUTH_VALID 4 /* We know him, and he needs no password */ |
| |
| /* Kermit Option Subnegotiations */ |
| |
| #define KERMIT_START 0 |
| #define KERMIT_STOP 1 |
| #define KERMIT_REQ_START 2 |
| #define KERMIT_REQ_STOP 3 |
| #define KERMIT_SOP 4 |
| #define KERMIT_RESP_START 8 |
| #define KERMIT_RESP_STOP 9 |
| |
| /* For SET TELNET AUTH HOW */ |
| #define TN_AUTH_HOW_ANY 0 |
| #define TN_AUTH_HOW_ONE_WAY 1 |
| #define TN_AUTH_HOW_MUTUAL 2 |
| |
| /* For SET TELNET AUTH ENCRYPT */ |
| #define TN_AUTH_ENC_ANY 0 |
| #define TN_AUTH_ENC_NONE 1 |
| #define TN_AUTH_ENC_TELOPT 2 |
| #define TN_AUTH_ENC_EXCH 3 /* not used in Kermit */ |
| #define TN_AUTH_ENC_TLS 4 |
| |
| /* Telnet protocol functions defined in C-Kermit */ |
| |
| _PROTOTYP( int tn_ini, (void) ); /* Telnet protocol support */ |
| _PROTOTYP( int tn_reset, (void)); |
| _PROTOTYP( int tn_set_modes, (void)); |
| _PROTOTYP( int tn_sopt, (int, int) ); |
| _PROTOTYP( int tn_doop, (CHAR, int, int (*)(int) ) ); |
| _PROTOTYP( int tn_sttyp, (void) ); |
| _PROTOTYP( int tn_snenv, (CHAR *, int) ) ; |
| _PROTOTYP( int tn_rnenv, (CHAR *, int) ) ; |
| _PROTOTYP( int tn_wait, (char *) ) ; |
| _PROTOTYP( int tn_push, (void) ) ; |
| _PROTOTYP( int tnsndbrk, (void) ); |
| _PROTOTYP( VOID tn_debug, (char *)); |
| _PROTOTYP( int tn_hex, (CHAR *, int, CHAR *, int)); |
| _PROTOTYP( unsigned char * tn_get_display, (void)); |
| #ifdef IKS_OPTION |
| _PROTOTYP( int tn_siks, (int) ); |
| _PROTOTYP( int iks_wait, (int, int) ); |
| #endif /* IKS_OPTION */ |
| #ifdef CK_NAWS |
| _PROTOTYP( int tn_snaws, (void) ); |
| #endif /* CK_NAWS */ |
| #ifdef CK_XDISPLOC |
| _PROTOTYP( int tn_sxdisploc, (void) ); |
| #endif /* CK_XDISPLOC */ |
| #ifdef CK_SNDLOC |
| _PROTOTYP( int tn_sndloc, (void) ); |
| #endif /* CK_SNDLOC */ |
| #ifdef CK_FORWARD_X |
| /* From Xauth.h */ |
| typedef struct xauth { |
| unsigned short family; |
| unsigned short address_length; |
| char *address; |
| unsigned short number_length; |
| char *number; |
| unsigned short name_length; |
| char *name; |
| unsigned short data_length; |
| char *data; |
| } Xauth; |
| |
| #include <stdio.h> |
| |
| /* from X.h */ |
| #define FamilyInternet 0 |
| #define FamilyDECnet 1 |
| #define FamilyChaos 2 |
| |
| # define FamilyLocal (256) /* not part of X standard (i.e. X.h) */ |
| # define FamilyWild (65535) |
| # define FamilyNetname (254) /* not part of X standard */ |
| # define FamilyKrb5Principal (253) /* Kerberos 5 principal name */ |
| # define FamilyLocalHost (252) /* for local non-net authentication */ |
| char *XauFileName(); |
| |
| Xauth *XauReadAuth( |
| FILE* /* auth_file */ |
| ); |
| |
| int XauWriteAuth( |
| FILE* /* auth_file */, |
| Xauth* /* auth */ |
| ); |
| |
| Xauth *XauGetAuthByName( |
| const char* /* display_name */ |
| ); |
| |
| Xauth *XauGetAuthByAddr( |
| unsigned int /* family */, |
| unsigned int /* address_length */, |
| const char* /* address */, |
| unsigned int /* number_length */, |
| const char* /* number */, |
| unsigned int /* name_length */, |
| const char* /* name */ |
| ); |
| |
| void XauDisposeAuth( |
| Xauth* /* auth */ |
| ); |
| |
| |
| _PROTOTYP( int fwdx_create_listen_socket,(int)); |
| _PROTOTYP( int fwdx_open_client_channel,(int)); |
| _PROTOTYP( int fwdx_open_server_channel,(VOID)); |
| _PROTOTYP( int fwdx_close_channel,(int)); |
| _PROTOTYP( int fwdx_write_data_to_channel,(int, char *,int)); |
| _PROTOTYP( int fwdx_send_data_from_channel,(int, char *,int)); |
| _PROTOTYP( int fwdx_close_all,(VOID)); |
| _PROTOTYP( int fwdx_tn_sb,(unsigned char *, int)); |
| _PROTOTYP( int tn_sndfwdx, (void)); |
| _PROTOTYP( int fwdx_send_close,(int)); |
| _PROTOTYP( int fwdx_send_open,(int)); |
| _PROTOTYP( int fwdx_client_reply_options,(char *, int)); |
| _PROTOTYP( int fwdx_send_options,(VOID)); |
| _PROTOTYP( VOID fwdx_check_sockets,(fd_set *)); |
| _PROTOTYP( int fwdx_init_fd_set,(fd_set *)); |
| _PROTOTYP( int fwdx_authorize_channel, (int, unsigned char *, int)); |
| _PROTOTYP( int fwdx_create_fake_xauth, (char *, int, int)); |
| _PROTOTYP( int fwdx_send_xauth, (VOID)); |
| _PROTOTYP( int fwdx_server_avail, (VOID)); |
| #ifdef NT |
| _PROTOTYP( VOID fwdx_thread,(VOID *)); |
| #endif /* NT */ |
| #endif /* CK_FORWARD_X */ |
| |
| #ifdef TN_COMPORT |
| #define TNC_C2S_SIGNATURE 0 |
| #define TNC_C2S_SET_BAUDRATE 1 |
| #define TNC_C2S_SET_DATASIZE 2 |
| #define TNC_C2S_SET_PARITY 3 |
| #define TNC_C2S_SET_STOPSIZE 4 |
| #define TNC_C2S_SET_CONTROL 5 |
| #define TNC_C2S_NOTIFY_LINESTATE 6 |
| #define TNC_C2S_NOTIFY_MODEMSTATE 7 |
| #define TNC_C2S_FLOW_SUSPEND 8 |
| #define TNC_C2S_FLOW_RESUME 9 |
| #define TNC_C2S_SET_LS_MASK 10 |
| #define TNC_C2S_SET_MS_MASK 11 |
| #define TNC_C2S_PURGE 12 |
| #define TNC_S2C_SIGNATURE 100 |
| #define TNC_S2C_SET_BAUDRATE 101 |
| #define TNC_S2C_SET_DATASIZE 102 |
| #define TNC_S2C_SET_PARITY 103 |
| #define TNC_S2C_SET_STOPSIZE 104 |
| #define TNC_S2C_SET_CONTROL 105 |
| #define TNC_S2C_SEND_LS 106 |
| #define TNC_S2C_SEND_MS 107 |
| #define TNC_S2C_FLOW_SUSPEND 108 |
| #define TNC_S2C_FLOW_RESUME 109 |
| #define TNC_S2C_SET_LS_MASK 110 |
| #define TNC_S2C_SET_MS_MASK 111 |
| #define TNC_S2C_PURGE 112 |
| |
| /* The COMPORT values are not defined in RFC 2217 */ |
| #define TNC_BPS_REQUEST 0 |
| #define TNC_BPS_300 3 |
| #define TNC_BPS_600 4 |
| #define TNC_BPS_1200 5 |
| #define TNC_BPS_2400 6 |
| #define TNC_BPS_4800 7 |
| #define TNC_BPS_9600 8 |
| #define TNC_BPS_14400 9 |
| #define TNC_BPS_19200 10 |
| #define TNC_BPS_28800 11 |
| #define TNC_BPS_38400 12 |
| #define TNC_BPS_57600 13 |
| #define TNC_BPS_115200 14 |
| #define TNC_BPS_230400 15 |
| #define TNC_BPS_460800 16 |
| |
| #define TNC_DS_REQUEST 0 |
| #define TNC_DS_5 5 |
| #define TNC_DS_6 6 |
| #define TNC_DS_7 7 |
| #define TNC_DS_8 8 |
| |
| #define TNC_PAR_REQUEST 0 |
| #define TNC_PAR_NONE 1 |
| #define TNC_PAR_ODD 2 |
| #define TNC_PAR_EVEN 3 |
| #define TNC_PAR_MARK 4 |
| #define TNC_PAR_SPACE 5 |
| |
| #define TNC_SB_REQUEST 0 |
| #define TNC_SB_1 1 |
| #define TNC_SB_1_5 3 |
| #define TNC_SB_2 2 |
| |
| #define TNC_CTL_OFLOW_REQUEST 0 |
| #define TNC_CTL_OFLOW_NONE 1 |
| #define TNC_CTL_OFLOW_XON_XOFF 2 |
| #define TNC_CTL_OFLOW_RTS_CTS 3 |
| #define TNC_CTL_OFLOW_DCD 17 |
| #define TNC_CTL_OFLOW_DSR 19 |
| |
| #define TNC_CTL_BREAK_REQUEST 4 |
| #define TNC_CTL_BREAK_ON 5 |
| #define TNC_CTL_BREAK_OFF 6 |
| |
| #define TNC_CTL_DTR_REQUEST 7 |
| #define TNC_CTL_DTR_ON 8 |
| #define TNC_CTL_DTR_OFF 9 |
| |
| #define TNC_CTL_RTS_REQUEST 10 |
| #define TNC_CTL_RTS_ON 11 |
| #define TNC_CTL_RTS_OFF 12 |
| |
| #define TNC_CTL_IFLOW_REQUEST 13 |
| #define TNC_CTL_IFLOW_NONE 14 |
| #define TNC_CTL_IFLOW_XON_XOFF 15 |
| #define TNC_CTL_IFLOW_RTS_CTS 16 |
| #define TNC_CTL_IFLOW_DTR 18 |
| |
| #define TNC_MS_DATA_READY 1 |
| #define TNC_MS_OVERRUN_ERROR 2 |
| #define TNC_MS_PARITY_ERROR 4 |
| #define TNC_MS_FRAME_ERROR 8 |
| #define TNC_MS_BREAK_ERROR 16 |
| #define TNC_MS_HR_EMPTY 32 |
| #define TNC_MS_SR_EMPTY 64 |
| #define TNC_MS_TIMEOUT_ERROR 128 |
| |
| #define TNC_MS_CTS_DELTA 1 |
| #define TNC_MS_DSR_DELTA 2 |
| #define TNC_MS_EDGE_RING 4 |
| #define TNC_MS_RLSD_DELTA 8 |
| #define TNC_MS_CTS_SIG 16 |
| #define TNC_MS_DSR_SIG 32 |
| #define TNC_MS_RI_SIG 64 |
| #define TNC_MS_RLSD_SIG 128 |
| |
| #define TNC_PURGE_RECEIVE 1 |
| #define TNC_PURGE_TRANSMIT 2 |
| #define TNC_PURGE_BOTH 3 |
| |
| #ifdef TNC_NAMES |
| char *tnc_names[] = { |
| "SIGNATURE", "SET-BAUDRATE", "SET-DATARATE", "SET-PARITY", "SET-STOPSIZE", |
| "SET-CONTROL", "NOTIFY-LINESTATE", "NOTIFY-MODEMSTATE", |
| "FLOWCONTROL-SUSPEND", "FLOWCONTROL-RESUME", "SET-LINESTATE-MASK", |
| "SET-MODEMSTATE-MASK", "PURGE-DATA", |
| 0 |
| }; |
| #else |
| extern char *tnc_names[]; |
| #endif |
| |
| #define TNC_NAME_OK(x) ((x) >= 0 && (x) <= 12 || (x) >= 100 && (x) <= 112) |
| #define TNC_NAME(x) \ |
| (TNC_NAME_OK(x)?tnc_names[(x)>=100?(x)-100:(x)]:"UNKNOWN") |
| |
| _PROTOTYP(int tnc_init,(void)); |
| _PROTOTYP(int tnc_wait,(CHAR *, int)); |
| _PROTOTYP(int tnc_tn_sb,(CHAR *,int)); |
| _PROTOTYP(CONST char * tnc_get_signature, (void)); |
| _PROTOTYP(int tnc_send_signature, (char *)); |
| _PROTOTYP(int tnc_set_baud,(long)); |
| _PROTOTYP(int tnc_get_baud,(void)); |
| _PROTOTYP(int tnc_set_datasize,(int)); |
| _PROTOTYP(int tnc_get_datasize,(void)); |
| _PROTOTYP(int tnc_set_parity,(int)); |
| _PROTOTYP(int tnc_get_parity,(void)); |
| _PROTOTYP(int tnc_set_stopsize,(int)); |
| _PROTOTYP(int tnc_get_stopsize,(void)); |
| _PROTOTYP(int tnc_set_oflow,(int)); |
| _PROTOTYP(int tnc_get_oflow,(void)); |
| _PROTOTYP(int tnc_set_iflow,(int)); |
| _PROTOTYP(int tnc_get_iflow,(void)); |
| _PROTOTYP(int tnc_set_break_state,(int)); |
| _PROTOTYP(int tnc_get_break_state,(void)); |
| _PROTOTYP(int tnc_set_dtr_state,(int)); |
| _PROTOTYP(int tnc_get_dtr_state,(void)); |
| _PROTOTYP(int tnc_set_rts_state,(int)); |
| _PROTOTYP(int tnc_get_rts_state,(void)); |
| _PROTOTYP(int tnc_set_ls_mask,(int)); |
| _PROTOTYP(int tnc_get_ls_mask,(void)); |
| _PROTOTYP(int tnc_get_ls,(void)); |
| _PROTOTYP(int tnc_set_ms_mask,(int)); |
| _PROTOTYP(int tnc_get_ms_mask,(void)); |
| _PROTOTYP(int tnc_get_ms,(void)); |
| _PROTOTYP(int tnc_send_purge_data,(int)); |
| _PROTOTYP(int tnc_flow_suspended,(void)); |
| _PROTOTYP(int tnc_suspend_flow,(void)); |
| _PROTOTYP(int tnc_resume_flow,(void)); |
| |
| /* The following methods are to be called by ck?tio.c routines */ |
| _PROTOTYP(int tnsetflow,(int)); |
| _PROTOTYP(int tnsettings,(int,int)); |
| _PROTOTYP(int tngmdm,(void)); |
| _PROTOTYP(int tnsndb,(long)); |
| _PROTOTYP(int istncomport,(void)); |
| _PROTOTYP(int tn_sndcomport,(void)); |
| #endif /* TN_COMPORT */ |
| |
| #ifndef CKCTEL_C /* These are declared in ckctel.c */ |
| extern int tn_init; /* Telnet protocol initialized flag */ |
| extern char *tn_term; /* Terminal type override */ |
| extern int sstelnet; /* Server side telnet? */ |
| extern int tn_deb; /* Telnet option debugging flag */ |
| extern int tn_auth_krb5_des_bug; /* Telnet BUG */ |
| #endif /* CKCTEL_C */ |
| |
| #define TN_MSG_LEN 12292 |
| #endif /* TNCODE */ |
| #endif /* CKCTEL_H */ |