1 --- screen-4.0.3/window.h.ipv6 2003-08-21 16:57:30.000000000 +0200
2 +++ screen-4.0.3/window.h 2006-11-15 13:36:57.000000000 +0100
4 struct display *w_zdisplay;
7 - struct sockaddr_in w_telsa;
8 + struct sockaddr_storage w_telsa;
12 --- screen-4.0.3/window.c.ipv6 2003-12-05 14:45:41.000000000 +0100
13 +++ screen-4.0.3/window.c 2006-11-15 13:39:27.000000000 +0100
16 debug1("Makewin creating %d\n", n);
18 +#ifdef BUILTIN_TELNET
19 + if(!strcmp(nwin.args[0], "//telnet")) {
20 + type = W_TYPE_TELNET;
25 if ((f = OpenDevice(nwin.args, nwin.lflag, &type, &TtyName)) < 0)
30 if (type == W_TYPE_TELNET)
33 + if (TelOpenAndConnect(p))
40 lflag = nwin_default.lflag;
41 +#ifdef BUILTIN_TELNET
42 + if(!strcmp(p->w_cmdargs[0], "//telnet")) {
43 + p->w_type = W_TYPE_TELNET;
48 if ((f = OpenDevice(p->w_cmdargs, lflag, &p->w_type, &TtyName)) < 0)
53 if (p->w_type == W_TYPE_TELNET)
56 + if (TelOpenAndConnect(p))
60 @@ -1007,16 +1021,6 @@
64 -#ifdef BUILTIN_TELNET
65 - if (strcmp(arg, "//telnet") == 0)
67 - f = TelOpen(args + 1);
69 - *typep = W_TYPE_TELNET;
74 if ((stat(arg, &st)) == 0 && S_ISCHR(st.st_mode))
76 if (access(arg, R_OK | W_OK) == -1)
77 --- screen-4.0.3/teln.c.ipv6 2003-09-08 16:26:56.000000000 +0200
78 +++ screen-4.0.3/teln.c 2006-11-15 13:36:57.000000000 +0100
80 #include <sys/socket.h>
88 extern struct layer *flayer;
89 extern int visual_bell;
90 extern char screenterm[];
93 static void TelReply __P((struct win *, char *, int));
94 static void TelDocmd __P((struct win *, int, int));
95 static void TelDosub __P((struct win *));
97 -#define TEL_DEFPORT 23
98 +// why TEL_DEFPORT has "
99 +#define TEL_DEFPORT "23"
100 #define TEL_CONNECTING (-2)
113 - if ((fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1)
115 - Msg(errno, "TelOpen: socket");
118 - if (setsockopt(fd, SOL_SOCKET, SO_OOBINLINE, (char *)&on, sizeof(on)))
119 - Msg(errno, "TelOpen: setsockopt SO_OOBINLINE");
127 - int port = TEL_DEFPORT;
128 - struct hostent *hp;
130 +TelOpenAndConnect(struct win *p) {
134 - args = p->w_cmdargs + 1;
138 - Msg(0, "Usage: screen //telnet host [port]");
142 - port = atoi(args[1]);
143 - p->w_telsa.sin_family = AF_INET;
144 - if((p->w_telsa.sin_addr.s_addr = inet_addr(*args)) == -1)
146 - if ((hp = gethostbyname(*args)) == NULL)
148 - Msg(0, "unknown host: %s", *args);
151 - if (hp->h_length != sizeof(p->w_telsa.sin_addr.s_addr) || hp->h_addrtype != AF_INET)
153 - Msg(0, "Bad address type for %s", hp->h_name);
156 - bcopy((char *)hp->h_addr,(char *)&p->w_telsa.sin_addr.s_addr, hp->h_length);
157 - p->w_telsa.sin_family = hp->h_addrtype;
159 - p->w_telsa.sin_port = htons(port);
160 - if (port != TEL_DEFPORT)
161 - sprintf(buf, "Trying %s %d...", inet_ntoa(p->w_telsa.sin_addr), port);
163 - sprintf(buf, "Trying %s...", inet_ntoa(p->w_telsa.sin_addr));
164 - WriteString(p, buf, strlen(buf));
165 - if (connect(p->w_ptyfd, (struct sockaddr *)&p->w_telsa, sizeof(p->w_telsa)))
167 - if (errno == EINPROGRESS)
169 - p->w_telstate = TEL_CONNECTING;
170 - p->w_telconnev.fd = p->w_ptyfd;
171 - p->w_telconnev.handler = tel_connev_fn;
172 - p->w_telconnev.data = (char *)p;
173 - p->w_telconnev.type = EV_WRITE;
174 - p->w_telconnev.pri = 1;
175 - debug("telnet connect in progress...\n");
176 - evenq(&p->w_telconnev);
180 - Msg(errno, "TelOpen: connect");
185 - WriteString(p, "connected.\r\n", 12);
186 - if (port == TEL_DEFPORT)
187 - TelReply(p, (char *)tn_init, sizeof(tn_init));
189 + struct addrinfo hints, *res0, *res;
191 + if (!(p->w_cmdargs[1])) {
192 + Msg(0, "Usage: screen //telnet host [port]");
196 + memset(&hints, 0, sizeof(hints));
197 + hints.ai_family = af;
198 + hints.ai_socktype = SOCK_STREAM;
199 + hints.ai_protocol = IPPROTO_TCP;
200 + if(getaddrinfo(p->w_cmdargs[1], p->w_cmdargs[2] ? p->w_cmdargs[2] : TEL_DEFPORT,
202 + Msg(0, "unknown host: %s", p->w_cmdargs[1]);
206 + for(res = res0; res; res = res->ai_next) {
207 + if((fd = socket(res->ai_family, res->ai_socktype, res->ai_protocol)) == -1) {
211 + Msg(errno, "TelOpenAndConnect: socket");
212 + freeaddrinfo(res0);
217 + if (setsockopt(fd, SOL_SOCKET, SO_OOBINLINE, (char *)&on, sizeof(on)))
218 + Msg(errno, "TelOpenAndConnect: setsockopt SO_OOBINLINE");
220 + if (p->w_cmdargs[2] && strcmp(p->w_cmdargs[2], TEL_DEFPORT))
221 + snprintf(buf, 256, "Trying %s %s...", p->w_cmdargs[1], p->w_cmdargs[2]);
223 + snprintf(buf, 256, "Trying %s...", p->w_cmdargs[1]);
224 + WriteString(p, buf, strlen(buf));
225 + if (connect(fd, res->ai_addr, res->ai_addrlen)) {
226 + if (errno == EINPROGRESS) {
227 + p->w_telstate = TEL_CONNECTING;
228 + p->w_telconnev.fd = fd;
229 + p->w_telconnev.handler = tel_connev_fn;
230 + p->w_telconnev.data = (char *)p;
231 + p->w_telconnev.type = EV_WRITE;
232 + p->w_telconnev.pri = 1;
233 + debug("telnet connect in progress...\n");
234 + evenq(&p->w_telconnev);
241 + Msg(errno, "TelOpenAndConnect: connect");
242 + freeaddrinfo(res0);
248 + WriteString(p, "connected.\r\n", 12);
249 + if (!(p->w_cmdargs[2] && strcmp(p->w_cmdargs[2], TEL_DEFPORT)))
250 + TelReply(p, (char *)tn_init, sizeof(tn_init));
252 + memcpy(&p->w_telsa, &res->ai_addr, sizeof(res->ai_addr));
253 + freeaddrinfo(res0);
260 --- screen-4.0.3/help.c.ipv6 2003-09-08 16:25:33.000000000 +0200
261 +++ screen-4.0.3/help.c 2006-11-15 13:36:57.000000000 +0100
264 printf("Use: %s [-opts] [cmd [args]]\n", myname);
265 printf(" or: %s -r [host.tty]\n\nOptions:\n", myname);
266 +#ifdef BUILTIN_TELNET
267 + printf("-4 Use IPv4.\n");
268 + printf("-6 Use IPv6.\n");
270 printf("-a Force all capabilities into each window's termcap.\n");
271 printf("-A -[r|R] Adapt all windows to the new display width & height.\n");
272 printf("-c file Read configuration file instead of '.screenrc'.\n");
273 --- screen-4.0.3/screen.c.ipv6 2003-09-08 16:26:41.000000000 +0200
274 +++ screen-4.0.3/screen.c 2006-11-15 13:36:57.000000000 +0100
278 struct win *console_window;
281 +#ifdef BUILTIN_TELNET
289 nwin_options = nwin_undef;
290 strcpy(screenterm, "screen");
291 +#ifdef BUILTIN_TELNET
295 logreopen_register(lf_secreopen);
301 +#ifdef BUILTIN_TELNET
310 nwin_options.aflag = 1;
312 --- screen-4.0.3/extern.h.ipv6 2003-08-22 14:27:57.000000000 +0200
313 +++ screen-4.0.3/extern.h 2006-11-15 13:36:57.000000000 +0100
317 #ifdef BUILTIN_TELNET
318 -extern int TelOpen __P((char **));
319 -extern int TelConnect __P((struct win *));
320 +extern int TelOpenAndConnect __P((struct win *));
321 extern int TelIsline __P((struct win *p));
322 extern void TelProcessLine __P((char **, int *));
323 extern int DoTelnet __P((char *, int *, int));