externs.h
上传用户:sddyfurun
上传日期:2007-01-04
资源大小:525k
文件大小:16k
源码类别:

代理服务器

开发平台:

Unix_Linux

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