1 /* 2 * Copyright (c) 1988, 1990, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 3. Neither the name of the University nor the names of its contributors 14 * may be used to endorse or promote products derived from this software 15 * without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27 * SUCH DAMAGE. 28 * 29 * @(#)externs.h 8.3 (Berkeley) 5/30/95 30 * $FreeBSD: src/crypto/telnet/telnet/externs.h,v 1.4.2.2 2002/04/13 10:59:08 markm Exp $ 31 */ 32 33 #ifndef BSD 34 # define BSD 43 35 #endif 36 37 /* 38 * ucb stdio.h defines BSD as something weird 39 */ 40 #if defined(sun) && defined(__svr4__) 41 #define BSD 43 42 #endif 43 44 #ifndef USE_TERMIO 45 # if BSD > 43 || defined(SYSV_TERMIO) 46 # define USE_TERMIO 47 # endif 48 #endif 49 50 #include <stdio.h> 51 #include <setjmp.h> 52 #include <sys/ioctl.h> 53 #include <errno.h> 54 #ifdef USE_TERMIO 55 # ifndef VINTR 56 # include <termios.h> 57 # endif 58 # define termio termios 59 #endif 60 #if defined(NO_CC_T) || !defined(USE_TERMIO) 61 # if !defined(USE_TERMIO) 62 typedef char cc_t; 63 # else 64 typedef unsigned char cc_t; 65 # endif 66 #endif 67 68 #include <string.h> 69 70 #if defined(IPSEC) 71 #include <netinet6/ipsec.h> 72 #if defined(IPSEC_POLICY_IPSEC) 73 extern char *ipsec_policy_in; 74 extern char *ipsec_policy_out; 75 #endif 76 #endif 77 78 #ifndef _POSIX_VDISABLE 79 # ifdef sun 80 # include <sys/param.h> /* pick up VDISABLE definition, mayby */ 81 # endif 82 # ifdef VDISABLE 83 # define _POSIX_VDISABLE VDISABLE 84 # else 85 # define _POSIX_VDISABLE ((cc_t)'\377') 86 # endif 87 #endif 88 89 #define SUBBUFSIZE 256 90 91 extern int 92 autologin, /* Autologin enabled */ 93 skiprc, /* Don't process the ~/.telnetrc file */ 94 eight, /* use eight bit mode (binary in and/or out */ 95 family, /* address family of peer */ 96 flushout, /* flush output */ 97 connected, /* Are we connected to the other side? */ 98 globalmode, /* Mode tty should be in */ 99 telnetport, /* Are we connected to the telnet port? */ 100 localflow, /* Flow control handled locally */ 101 restartany, /* If flow control, restart output on any character */ 102 localchars, /* we recognize interrupt/quit */ 103 donelclchars, /* the user has set "localchars" */ 104 showoptions, 105 net, /* Network file descriptor */ 106 tin, /* Terminal input file descriptor */ 107 tout, /* Terminal output file descriptor */ 108 crlf, /* Should '\r' be mapped to <CR><LF> (or <CR><NUL>)? */ 109 autoflush, /* flush output when interrupting? */ 110 autosynch, /* send interrupt characters with SYNCH? */ 111 SYNCHing, /* Is the stream in telnet SYNCH mode? */ 112 donebinarytoggle, /* the user has put us in binary */ 113 dontlecho, /* do we suppress local echoing right now? */ 114 crmod, 115 netdata, /* Print out network data flow */ 116 prettydump, /* Print "netdata" output in user readable format */ 117 termdata, /* Print out terminal data flow */ 118 telnet_debug, /* Debug level */ 119 doaddrlookup, /* do a reverse lookup? */ 120 clienteof; /* Client received EOF */ 121 122 extern cc_t escape; /* Escape to command mode */ 123 extern cc_t rlogin; /* Rlogin mode escape character */ 124 #ifdef KLUDGELINEMODE 125 extern cc_t echoc; /* Toggle local echoing */ 126 #endif 127 128 extern char 129 *prompt; /* Prompt for command. */ 130 131 extern char 132 doopt[], 133 dont[], 134 will[], 135 wont[], 136 options[], /* All the little options */ 137 *hostname; /* Who are we connected to? */ 138 #ifdef ENCRYPTION 139 extern void (*encrypt_output)(unsigned char *, int); 140 extern int (*decrypt_input)(int); 141 #endif /* ENCRYPTION */ 142 143 /* 144 * We keep track of each side of the option negotiation. 145 */ 146 147 #define MY_STATE_WILL 0x01 148 #define MY_WANT_STATE_WILL 0x02 149 #define MY_STATE_DO 0x04 150 #define MY_WANT_STATE_DO 0x08 151 152 /* 153 * Macros to check the current state of things 154 */ 155 156 #define my_state_is_do(opt) (options[opt]&MY_STATE_DO) 157 #define my_state_is_will(opt) (options[opt]&MY_STATE_WILL) 158 #define my_want_state_is_do(opt) (options[opt]&MY_WANT_STATE_DO) 159 #define my_want_state_is_will(opt) (options[opt]&MY_WANT_STATE_WILL) 160 161 #define my_state_is_dont(opt) (!my_state_is_do(opt)) 162 #define my_state_is_wont(opt) (!my_state_is_will(opt)) 163 #define my_want_state_is_dont(opt) (!my_want_state_is_do(opt)) 164 #define my_want_state_is_wont(opt) (!my_want_state_is_will(opt)) 165 166 #define set_my_state_do(opt) {options[opt] |= MY_STATE_DO;} 167 #define set_my_state_will(opt) {options[opt] |= MY_STATE_WILL;} 168 #define set_my_want_state_do(opt) {options[opt] |= MY_WANT_STATE_DO;} 169 #define set_my_want_state_will(opt) {options[opt] |= MY_WANT_STATE_WILL;} 170 171 #define set_my_state_dont(opt) {options[opt] &= ~MY_STATE_DO;} 172 #define set_my_state_wont(opt) {options[opt] &= ~MY_STATE_WILL;} 173 #define set_my_want_state_dont(opt) {options[opt] &= ~MY_WANT_STATE_DO;} 174 #define set_my_want_state_wont(opt) {options[opt] &= ~MY_WANT_STATE_WILL;} 175 176 /* 177 * Make everything symetrical 178 */ 179 180 #define HIS_STATE_WILL MY_STATE_DO 181 #define HIS_WANT_STATE_WILL MY_WANT_STATE_DO 182 #define HIS_STATE_DO MY_STATE_WILL 183 #define HIS_WANT_STATE_DO MY_WANT_STATE_WILL 184 185 #define his_state_is_do my_state_is_will 186 #define his_state_is_will my_state_is_do 187 #define his_want_state_is_do my_want_state_is_will 188 #define his_want_state_is_will my_want_state_is_do 189 190 #define his_state_is_dont my_state_is_wont 191 #define his_state_is_wont my_state_is_dont 192 #define his_want_state_is_dont my_want_state_is_wont 193 #define his_want_state_is_wont my_want_state_is_dont 194 195 #define set_his_state_do set_my_state_will 196 #define set_his_state_will set_my_state_do 197 #define set_his_want_state_do set_my_want_state_will 198 #define set_his_want_state_will set_my_want_state_do 199 200 #define set_his_state_dont set_my_state_wont 201 #define set_his_state_wont set_my_state_dont 202 #define set_his_want_state_dont set_my_want_state_wont 203 #define set_his_want_state_wont set_my_want_state_dont 204 205 #if defined(USE_TERMIO) 206 #define SIG_FUNC_RET void 207 #else 208 #define SIG_FUNC_RET int 209 #endif 210 211 #ifdef SIGINFO 212 extern SIG_FUNC_RET 213 ayt_status(void); 214 #endif 215 216 extern FILE 217 *NetTrace; /* Where debugging output goes */ 218 extern unsigned char 219 NetTraceFile[]; /* Name of file where debugging output goes */ 220 extern void 221 SetNetTrace(char *); /* Function to change where debugging goes */ 222 223 extern jmp_buf 224 peerdied, 225 toplevel; /* For error conditions. */ 226 227 extern void 228 command(int, const char *, int), 229 Dump(char, unsigned char *, int), 230 env_init(void), 231 Exit(int) __dead2, 232 ExitString(const char *, int) __dead2, 233 init_network(void), 234 init_sys(void), 235 init_telnet(void), 236 init_terminal(void), 237 intp(void), 238 optionstatus(void), 239 printoption(const char *, int, int), 240 printsub(char, unsigned char *, int), 241 quit(void) __dead2, 242 sendabort(void), 243 sendbrk(void), 244 sendeof(void), 245 sendsusp(void), 246 sendnaws(void), 247 sendayt(void), 248 setconnmode(int), 249 setcommandmode(void), 250 set_escape_char(char *s), 251 setneturg(void), 252 sys_telnet_init(void), 253 telnet(char *), 254 tel_enter_binary(int), 255 tel_leave_binary(int), 256 TerminalFlushOutput(void), 257 TerminalNewMode(int), 258 TerminalRestoreState(void), 259 TerminalSaveState(void), 260 TerminalDefaultChars(void), 261 TerminalSpeeds(long *, long *), 262 tninit(void), 263 upcase(char *), 264 willoption(int), 265 wontoption(int); 266 267 extern void 268 send_do(int, int), 269 send_dont(int, int), 270 send_will(int, int), 271 send_wont(int, int); 272 273 extern void 274 lm_will(unsigned char *, int), 275 lm_wont(unsigned char *, int), 276 lm_do(unsigned char *, int), 277 lm_dont(unsigned char *, int), 278 lm_mode(unsigned char *, int, int); 279 280 extern void 281 slc_init(void), 282 slcstate(void), 283 slc_mode_export(void), 284 slc_mode_import(int), 285 slc_import(int), 286 slc_export(void), 287 slc(unsigned char *, int), 288 slc_check(void), 289 slc_start_reply(void), 290 slc_add_reply(unsigned char, unsigned char, cc_t), 291 slc_end_reply(void); 292 extern int 293 getconnmode(void), 294 opt_welldefined(const char *), 295 NetClose(int), 296 netflush(void), 297 process_rings(int, int, int, int, int, int), 298 rlogin_susp(void), 299 SetSockOpt(int, int, int, int), 300 slc_update(void), 301 stilloob(void), 302 telrcv(void), 303 TerminalRead(char *, int), 304 TerminalWrite(char *, int), 305 TerminalAutoFlush(void), 306 TerminalWindowSize(long *, long *), 307 TerminalSpecialChars(int), 308 tn(int, char **), 309 ttyflush(int); 310 311 extern void 312 env_opt(unsigned char *, int), 313 env_opt_start(void), 314 env_opt_start_info(void), 315 env_opt_add(unsigned char *), 316 env_opt_end(int); 317 318 extern unsigned char 319 *env_default(int, int), 320 *env_getvalue(const unsigned char *); 321 322 extern int 323 get_status(char *), 324 dosynch(char *); 325 326 extern cc_t 327 *tcval(int); 328 329 #ifndef USE_TERMIO 330 331 extern struct tchars ntc; 332 extern struct ltchars nltc; 333 extern struct sgttyb nttyb; 334 335 # define termEofChar ntc.t_eofc 336 # define termEraseChar nttyb.sg_erase 337 # define termFlushChar nltc.t_flushc 338 # define termIntChar ntc.t_intrc 339 # define termKillChar nttyb.sg_kill 340 # define termLiteralNextChar nltc.t_lnextc 341 # define termQuitChar ntc.t_quitc 342 # define termSuspChar nltc.t_suspc 343 # define termRprntChar nltc.t_rprntc 344 # define termWerasChar nltc.t_werasc 345 # define termStartChar ntc.t_startc 346 # define termStopChar ntc.t_stopc 347 # define termForw1Char ntc.t_brkc 348 extern cc_t termForw2Char; 349 extern cc_t termAytChar; 350 351 # define termEofCharp (cc_t *)&ntc.t_eofc 352 # define termEraseCharp (cc_t *)&nttyb.sg_erase 353 # define termFlushCharp (cc_t *)&nltc.t_flushc 354 # define termIntCharp (cc_t *)&ntc.t_intrc 355 # define termKillCharp (cc_t *)&nttyb.sg_kill 356 # define termLiteralNextCharp (cc_t *)&nltc.t_lnextc 357 # define termQuitCharp (cc_t *)&ntc.t_quitc 358 # define termSuspCharp (cc_t *)&nltc.t_suspc 359 # define termRprntCharp (cc_t *)&nltc.t_rprntc 360 # define termWerasCharp (cc_t *)&nltc.t_werasc 361 # define termStartCharp (cc_t *)&ntc.t_startc 362 # define termStopCharp (cc_t *)&ntc.t_stopc 363 # define termForw1Charp (cc_t *)&ntc.t_brkc 364 # define termForw2Charp (cc_t *)&termForw2Char 365 # define termAytCharp (cc_t *)&termAytChar 366 367 # else 368 369 extern struct termio new_tc; 370 371 # define termEofChar new_tc.c_cc[VEOF] 372 # define termEraseChar new_tc.c_cc[VERASE] 373 # define termIntChar new_tc.c_cc[VINTR] 374 # define termKillChar new_tc.c_cc[VKILL] 375 # define termQuitChar new_tc.c_cc[VQUIT] 376 377 # ifndef VSUSP 378 extern cc_t termSuspChar; 379 # else 380 # define termSuspChar new_tc.c_cc[VSUSP] 381 # endif 382 # if defined(VFLUSHO) && !defined(VDISCARD) 383 # define VDISCARD VFLUSHO 384 # endif 385 # ifndef VDISCARD 386 extern cc_t termFlushChar; 387 # else 388 # define termFlushChar new_tc.c_cc[VDISCARD] 389 # endif 390 # ifndef VWERASE 391 extern cc_t termWerasChar; 392 # else 393 # define termWerasChar new_tc.c_cc[VWERASE] 394 # endif 395 # ifndef VREPRINT 396 extern cc_t termRprntChar; 397 # else 398 # define termRprntChar new_tc.c_cc[VREPRINT] 399 # endif 400 # ifndef VLNEXT 401 extern cc_t termLiteralNextChar; 402 # else 403 # define termLiteralNextChar new_tc.c_cc[VLNEXT] 404 # endif 405 # ifndef VSTART 406 extern cc_t termStartChar; 407 # else 408 # define termStartChar new_tc.c_cc[VSTART] 409 # endif 410 # ifndef VSTOP 411 extern cc_t termStopChar; 412 # else 413 # define termStopChar new_tc.c_cc[VSTOP] 414 # endif 415 # ifndef VEOL 416 extern cc_t termForw1Char; 417 # else 418 # define termForw1Char new_tc.c_cc[VEOL] 419 # endif 420 # ifndef VEOL2 421 extern cc_t termForw2Char; 422 # else 423 # define termForw2Char new_tc.c_cc[VEOL] 424 # endif 425 # ifndef VSTATUS 426 extern cc_t termAytChar; 427 #else 428 # define termAytChar new_tc.c_cc[VSTATUS] 429 #endif 430 431 # if defined(__STDC__) 432 # define termEofCharp &termEofChar 433 # define termEraseCharp &termEraseChar 434 # define termIntCharp &termIntChar 435 # define termKillCharp &termKillChar 436 # define termQuitCharp &termQuitChar 437 # define termSuspCharp &termSuspChar 438 # define termFlushCharp &termFlushChar 439 # define termWerasCharp &termWerasChar 440 # define termRprntCharp &termRprntChar 441 # define termLiteralNextCharp &termLiteralNextChar 442 # define termStartCharp &termStartChar 443 # define termStopCharp &termStopChar 444 # define termForw1Charp &termForw1Char 445 # define termForw2Charp &termForw2Char 446 # define termAytCharp &termAytChar 447 # else 448 /* Work around a compiler bug */ 449 # define termEofCharp 0 450 # define termEraseCharp 0 451 # define termIntCharp 0 452 # define termKillCharp 0 453 # define termQuitCharp 0 454 # define termSuspCharp 0 455 # define termFlushCharp 0 456 # define termWerasCharp 0 457 # define termRprntCharp 0 458 # define termLiteralNextCharp 0 459 # define termStartCharp 0 460 # define termStopCharp 0 461 # define termForw1Charp 0 462 # define termForw2Charp 0 463 # define termAytCharp 0 464 # endif 465 #endif 466 467 468 /* Ring buffer structures which are shared */ 469 470 extern Ring 471 netoring, 472 netiring, 473 ttyoring, 474 ttyiring; 475 476 extern void 477 xmitAO(void), 478 xmitEC(void), 479 xmitEL(void); 480