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