aboutsummaryrefslogtreecommitdiff
path: root/networking/telnet.c
diff options
context:
space:
mode:
Diffstat (limited to 'networking/telnet.c')
-rw-r--r--networking/telnet.c54
1 files changed, 27 insertions, 27 deletions
diff --git a/networking/telnet.c b/networking/telnet.c
index 574fe8dab..6c5f3d15b 100644
--- a/networking/telnet.c
+++ b/networking/telnet.c
@@ -54,7 +54,7 @@ static const int DOTRACE = 1;
54#include <arpa/inet.h> /* for inet_ntoa()... */ 54#include <arpa/inet.h> /* for inet_ntoa()... */
55#define TRACE(x, y) do { if (x) printf y; } while (0) 55#define TRACE(x, y) do { if (x) printf y; } while (0)
56#else 56#else
57#define TRACE(x, y) 57#define TRACE(x, y)
58#endif 58#endif
59 59
60#if 0 60#if 0
@@ -99,8 +99,8 @@ static struct Globalvars {
99 /* buffer to handle telnet negotiations */ 99 /* buffer to handle telnet negotiations */
100 char iacbuf[IACBUFSIZE]; 100 char iacbuf[IACBUFSIZE];
101 short iaclen; /* could even use byte */ 101 short iaclen; /* could even use byte */
102 struct termios termios_def; 102 struct termios termios_def;
103 struct termios termios_raw; 103 struct termios termios_raw;
104} G; 104} G;
105 105
106#define xUSE_GLOBALVAR_PTR /* xUSE... -> don't use :D (makes smaller code) */ 106#define xUSE_GLOBALVAR_PTR /* xUSE... -> don't use :D (makes smaller code) */
@@ -143,7 +143,7 @@ static void doexit(int ev)
143{ 143{
144 cookmode(); 144 cookmode();
145 exit(ev); 145 exit(ev);
146} 146}
147 147
148static void conescape(void) 148static void conescape(void)
149{ 149{
@@ -190,10 +190,10 @@ static void conescape(void)
190 190
191 if (G.gotsig) 191 if (G.gotsig)
192 cookmode(); 192 cookmode();
193 193
194 rrturn: 194 rrturn:
195 G.gotsig = 0; 195 G.gotsig = 0;
196 196
197} 197}
198static void handlenetoutput(int len) 198static void handlenetoutput(int len)
199{ 199{
@@ -442,7 +442,7 @@ static void will_charmode(void)
442 G.charmode = CHM_TRY; 442 G.charmode = CHM_TRY;
443 G.telflags |= (UF_ECHO | UF_SGA); 443 G.telflags |= (UF_ECHO | UF_SGA);
444 setConMode(); 444 setConMode();
445 445
446 putiac2(DO, TELOPT_ECHO); 446 putiac2(DO, TELOPT_ECHO);
447 putiac2(DO, TELOPT_SGA); 447 putiac2(DO, TELOPT_SGA);
448 iacflush(); 448 iacflush();
@@ -472,7 +472,7 @@ static inline void to_echo(void)
472 /* if server requests ECHO, don't agree */ 472 /* if server requests ECHO, don't agree */
473 if (G.telwish == DO) { putiac2(WONT, TELOPT_ECHO); return; } 473 if (G.telwish == DO) { putiac2(WONT, TELOPT_ECHO); return; }
474 else if (G.telwish == DONT) return; 474 else if (G.telwish == DONT) return;
475 475
476 if (G.telflags & UF_ECHO) 476 if (G.telflags & UF_ECHO)
477 { 477 {
478 if (G.telwish == WILL) 478 if (G.telwish == WILL)
@@ -506,7 +506,7 @@ static inline void to_sga(void)
506 else 506 else
507 if (G.telwish == WONT) 507 if (G.telwish == WONT)
508 return; 508 return;
509 509
510 if ((G.telflags ^= UF_SGA) & UF_SGA) /* toggle */ 510 if ((G.telflags ^= UF_SGA) & UF_SGA) /* toggle */
511 putiac2(DO, TELOPT_SGA); 511 putiac2(DO, TELOPT_SGA);
512 else 512 else
@@ -545,11 +545,11 @@ static inline void to_new_environ(void)
545 545
546#ifdef CONFIG_FEATURE_AUTOWIDTH 546#ifdef CONFIG_FEATURE_AUTOWIDTH
547static inline void to_naws(void) 547static inline void to_naws(void)
548{ 548{
549 /* Tell server we will do NAWS */ 549 /* Tell server we will do NAWS */
550 putiac2(WILL, TELOPT_NAWS); 550 putiac2(WILL, TELOPT_NAWS);
551 return; 551 return;
552} 552}
553#endif 553#endif
554 554
555static void telopt(byte c) 555static void telopt(byte c)
@@ -617,7 +617,7 @@ static void fgotsig(int sig)
617static void rawmode(void) 617static void rawmode(void)
618{ 618{
619 tcsetattr(0, TCSADRAIN, &G.termios_raw); 619 tcsetattr(0, TCSADRAIN, &G.termios_raw);
620} 620}
621 621
622static void cookmode(void) 622static void cookmode(void)
623{ 623{
@@ -630,10 +630,10 @@ extern int telnet_main(int argc, char** argv)
630 struct sockaddr_in s_in; 630 struct sockaddr_in s_in;
631#ifdef USE_POLL 631#ifdef USE_POLL
632 struct pollfd ufds[2]; 632 struct pollfd ufds[2];
633#else 633#else
634 fd_set readfds; 634 fd_set readfds;
635 int maxfd; 635 int maxfd;
636#endif 636#endif
637 637
638#ifdef CONFIG_FEATURE_TELNET_AUTOLOGIN 638#ifdef CONFIG_FEATURE_TELNET_AUTOLOGIN
639 int opt; 639 int opt;
@@ -651,13 +651,13 @@ extern int telnet_main(int argc, char** argv)
651 651
652 if (tcgetattr(0, &G.termios_def) < 0) 652 if (tcgetattr(0, &G.termios_def) < 0)
653 exit(1); 653 exit(1);
654 654
655 G.termios_raw = G.termios_def; 655 G.termios_raw = G.termios_def;
656 cfmakeraw(&G.termios_raw); 656 cfmakeraw(&G.termios_raw);
657 657
658 if (argc < 2) 658 if (argc < 2)
659 bb_show_usage(); 659 bb_show_usage();
660 660
661#ifdef CONFIG_FEATURE_TELNET_AUTOLOGIN 661#ifdef CONFIG_FEATURE_TELNET_AUTOLOGIN
662 autologin = NULL; 662 autologin = NULL;
663 while ((opt = getopt(argc, argv, "al:")) != EOF) { 663 while ((opt = getopt(argc, argv, "al:")) != EOF) {
@@ -685,7 +685,7 @@ extern int telnet_main(int argc, char** argv)
685 bb_lookup_host(&s_in, argv[1]); 685 bb_lookup_host(&s_in, argv[1]);
686 s_in.sin_port = bb_lookup_port((argc == 3) ? argv[2] : "telnet", "tcp", 23); 686 s_in.sin_port = bb_lookup_port((argc == 3) ? argv[2] : "telnet", "tcp", 23);
687#endif 687#endif
688 688
689 G.netfd = xconnect(&s_in); 689 G.netfd = xconnect(&s_in);
690 690
691 setsockopt(G.netfd, SOL_SOCKET, SO_KEEPALIVE, &one, sizeof one); 691 setsockopt(G.netfd, SOL_SOCKET, SO_KEEPALIVE, &one, sizeof one);
@@ -695,22 +695,22 @@ extern int telnet_main(int argc, char** argv)
695#ifdef USE_POLL 695#ifdef USE_POLL
696 ufds[0].fd = 0; ufds[1].fd = G.netfd; 696 ufds[0].fd = 0; ufds[1].fd = G.netfd;
697 ufds[0].events = ufds[1].events = POLLIN; 697 ufds[0].events = ufds[1].events = POLLIN;
698#else 698#else
699 FD_ZERO(&readfds); 699 FD_ZERO(&readfds);
700 FD_SET(0, &readfds); 700 FD_SET(0, &readfds);
701 FD_SET(G.netfd, &readfds); 701 FD_SET(G.netfd, &readfds);
702 maxfd = G.netfd + 1; 702 maxfd = G.netfd + 1;
703#endif 703#endif
704 704
705 while (1) 705 while (1)
706 { 706 {
707#ifndef USE_POLL 707#ifndef USE_POLL
708 fd_set rfds = readfds; 708 fd_set rfds = readfds;
709 709
710 switch (select(maxfd, &rfds, NULL, NULL, NULL)) 710 switch (select(maxfd, &rfds, NULL, NULL, NULL))
711#else 711#else
712 switch (poll(ufds, 2, -1)) 712 switch (poll(ufds, 2, -1))
713#endif 713#endif
714 { 714 {
715 case 0: 715 case 0:
716 /* timeout */ 716 /* timeout */
@@ -725,9 +725,9 @@ extern int telnet_main(int argc, char** argv)
725 725
726#ifdef USE_POLL 726#ifdef USE_POLL
727 if (ufds[0].revents) /* well, should check POLLIN, but ... */ 727 if (ufds[0].revents) /* well, should check POLLIN, but ... */
728#else 728#else
729 if (FD_ISSET(0, &rfds)) 729 if (FD_ISSET(0, &rfds))
730#endif 730#endif
731 { 731 {
732 len = read(0, G.buf, DATABUFSIZE); 732 len = read(0, G.buf, DATABUFSIZE);
733 733
@@ -735,15 +735,15 @@ extern int telnet_main(int argc, char** argv)
735 doexit(0); 735 doexit(0);
736 736
737 TRACE(0, ("Read con: %d\n", len)); 737 TRACE(0, ("Read con: %d\n", len));
738 738
739 handlenetoutput(len); 739 handlenetoutput(len);
740 } 740 }
741 741
742#ifdef USE_POLL 742#ifdef USE_POLL
743 if (ufds[1].revents) /* well, should check POLLIN, but ... */ 743 if (ufds[1].revents) /* well, should check POLLIN, but ... */
744#else 744#else
745 if (FD_ISSET(G.netfd, &rfds)) 745 if (FD_ISSET(G.netfd, &rfds))
746#endif 746#endif
747 { 747 {
748 len = read(G.netfd, G.buf, DATABUFSIZE); 748 len = read(G.netfd, G.buf, DATABUFSIZE);
749 749