1 /*
2  * Copyright (c) 1989, 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  *	@(#)ext.h	8.2 (Berkeley) 12/15/93
30  */
31 
32 /* $KTH: ext.h,v 1.22 2001/04/24 23:12:11 assar Exp $ */
33 
34 #ifndef __EXT_H__
35 #define __EXT_H__
36 
37 #include <arpa/telnet.h>
38 
39 /*
40  * Telnet server variable declarations
41  */
42 extern char	options[256];
43 extern char	do_dont_resp[256];
44 extern char	will_wont_resp[256];
45 extern int	flowmode;	/* current flow control state */
46 extern int	restartany;	/* restart output on any character state */
47 #ifdef DIAGNOSTICS
48 extern int	diagnostic;	/* telnet diagnostic capabilities */
49 #endif /* DIAGNOSTICS */
50 extern int	require_otp;
51 #ifdef AUTHENTICATION
52 extern int	auth_level;
53 #endif
54 extern char *new_login;
55 
56 extern slcfun	slctab[NSLC + 1];	/* slc mapping table */
57 
58 extern char	terminaltype[41];
59 
60 /*
61  * I/O data buffers, pointers, and counters.
62  */
63 extern char	ptyobuf[BUFSIZ+NETSLOP], *pfrontp, *pbackp;
64 
65 extern char	netibuf[BUFSIZ], *netip;
66 
67 extern char	netobuf[BUFSIZ+NETSLOP], *nfrontp, *nbackp;
68 extern char	*neturg;		/* one past last bye of urgent data */
69 
70 extern int	pcc, ncc;
71 
72 extern int	ourpty, net;
73 extern char	*line;
74 extern int	SYNCHing;		/* we are in TELNET SYNCH mode */
75 
76 int telnet_net_write (unsigned char *str, int len);
77 void net_encrypt (void);
78 int telnet_spin (void);
79 char *telnet_getenv (const char *val);
80 char *telnet_gets (char *prompt, char *result, int length, int echo);
81 void get_slc_defaults (void);
82 void telrcv (void);
83 void send_do (int option, int init);
84 void willoption (int option);
85 void send_dont (int option, int init);
86 void wontoption (int option);
87 void send_will (int option, int init);
88 void dooption (int option);
89 void send_wont (int option, int init);
90 void dontoption (int option);
91 void suboption (void);
92 void doclientstat (void);
93 void send_status (void);
94 void init_termbuf (void);
95 void set_termbuf (void);
96 int spcset (int func, cc_t *valp, cc_t **valpp);
97 void set_utid (void);
98 int getpty (int *ptynum);
99 int tty_isecho (void);
100 int tty_flowmode (void);
101 int tty_restartany (void);
102 void tty_setecho (int on);
103 int tty_israw (void);
104 void tty_binaryin (int on);
105 void tty_binaryout (int on);
106 int tty_isbinaryin (void);
107 int tty_isbinaryout (void);
108 int tty_issofttab (void);
109 void tty_setsofttab (int on);
110 int tty_islitecho (void);
111 void tty_setlitecho (int on);
112 int tty_iscrnl (void);
113 void tty_tspeed (int val);
114 void tty_rspeed (int val);
115 void getptyslave (void);
116 int cleanopen (char *line);
117 void startslave (const char *host, const char *, int autologin, char *autoname);
118 void init_env (void);
119 void start_login (const char *host, int autologin, char *name);
120 void cleanup (int sig);
121 int main (int argc, char **argv);
122 int getterminaltype (char *name, size_t);
123 void _gettermname (void);
124 int terminaltypeok (char *s);
125 void my_telnet (int f, int p, const char*, const char *, int, char*);
126 void interrupt (void);
127 void sendbrk (void);
128 void sendsusp (void);
129 void recv_ayt (void);
130 void doeof (void);
131 void flowstat (void);
132 void clientstat (int code, int parm1, int parm2);
133 int ttloop (void);
134 int stilloob (int s);
135 void ptyflush (void);
136 char *nextitem (char *current);
137 void netclear (void);
138 void netflush (void);
139 void writenet (unsigned char *ptr, int len);
140 void fatal (int f, char *msg);
141 void fatalperror (int f, const char *msg);
142 void fatalperror_errno (int f, const char *msg, int error);
143 void edithost (char *pat, char *host);
144 void putstr (char *s);
145 void putchr (int cc);
146 void putf (char *cp, char *where);
147 void printoption (char *fmt, int option);
148 void printsub (int direction, unsigned char *pointer, int length);
149 void printdata (char *tag, char *ptr, int cnt);
150 int login_tty(int t);
151 
152 #ifdef ENCRYPTION
153 extern void	(*encrypt_output) (unsigned char *, int);
154 extern int	(*decrypt_input) (int);
155 extern char	*nclearto;
156 #endif
157 
158 
159 /*
160  * The following are some clocks used to decide how to interpret
161  * the relationship between various variables.
162  */
163 
164 struct clocks_t{
165     int
166 	system,			/* what the current time is */
167 	echotoggle,		/* last time user entered echo character */
168 	modenegotiated,		/* last time operating mode negotiated */
169 	didnetreceive,		/* last time we read data from network */
170 	ttypesubopt,		/* ttype subopt is received */
171 	tspeedsubopt,		/* tspeed subopt is received */
172 	environsubopt,		/* environ subopt is received */
173 	oenvironsubopt,		/* old environ subopt is received */
174 	xdisplocsubopt,		/* xdisploc subopt is received */
175 	baseline,		/* time started to do timed action */
176 	gotDM;			/* when did we last see a data mark */
177 };
178 extern struct clocks_t clocks;
179 
180 extern int log_unauth;
181 extern int no_warn;
182 
183 #ifdef STREAMSPTY
184 extern int really_stream;
185 #endif
186 
187 #ifndef USE_IM
188 # ifdef CRAY
189 #  define USE_IM "Cray UNICOS (%h) (%t)"
190 # endif
191 # ifdef _AIX
192 #  define USE_IM "%s %v.%r (%h) (%t)"
193 # endif
194 # ifndef USE_IM
195 #  define USE_IM "%s %r (%h) (%t)"
196 # endif
197 #endif
198 
199 #define DEFAULT_IM "\r\n\r\n" USE_IM "\r\n\r\n\r\n"
200 
201 #endif /* __EXT_H__ */
202