last_patch95 from vodz:
[oweals/busybox.git] / networking / telnet.c
index 62776bad1eb502d5d8924cec907d00aba975d282..88607f6531e5e6aacf7d91972d39116d3768ea86 100644 (file)
@@ -25,8 +25,7 @@
  * HISTORY
  * Revision 3.1  1994/04/17  11:31:54  too
  * initial revision
- * Modified 2000/06/13 for inclusion into BusyBox by Erik Andersen
- * <andersen@lineo.com> 
+ * Modified 2000/06/13 for inclusion into BusyBox by Erik Andersen <andersen@codepoet.org>
  * Modified 2001/05/07 to add ability to pass TTYPE to remote host by Jim McQuillan
  * <jam@ltsp.org>
  *
@@ -43,7 +42,6 @@
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
-#include <netdb.h>
 #include "busybox.h"
 
 #ifdef CONFIG_FEATURE_AUTOWIDTH
@@ -112,8 +110,6 @@ static struct Globalvars {
 #ifdef USE_GLOBALVAR_PTR
 struct Globalvars * Gptr;
 #define G (*Gptr)
-#else
-static struct Globalvars G;
 #endif
 
 static inline void iacflush(void)
@@ -123,19 +119,12 @@ static inline void iacflush(void)
 }
 
 /* Function prototypes */
-static int getport(char * p);
-static struct in_addr getserver(char * p);
-static void setup_sockaddr_in(struct sockaddr_in * addr, int port);
-static int remote_connect(struct in_addr addr, int port);
 static void rawmode(void);
 static void cookmode(void);
 static void do_linemode(void);
 static void will_charmode(void);
 static void telopt(byte c);
 static int subneg(byte c);
-#if 0
-static int local_bind(int port);
-#endif
 
 /* Some globals */
 static int one = 1;
@@ -523,13 +512,13 @@ static void telopt(byte c)
 {
        switch (c)
        {
-               case TELOPT_ECHO:               to_echo(c);     break;
-               case TELOPT_SGA:                to_sga(c);      break;
+               case TELOPT_ECHO:               to_echo();      break;
+               case TELOPT_SGA:                to_sga();       break;
 #ifdef CONFIG_FEATURE_TELNET_TTYPE
-               case TELOPT_TTYPE:              to_ttype(c);break;
+               case TELOPT_TTYPE:              to_ttype();break;
 #endif
 #ifdef CONFIG_FEATURE_AUTOWIDTH
-               case TELOPT_NAWS:               to_naws(c);
+               case TELOPT_NAWS:               to_naws();
                                                                putiac_naws(c, win_width, win_height);
                                                                break;
 #endif
@@ -585,8 +574,8 @@ static void cookmode(void)
 
 extern int telnet_main(int argc, char** argv)
 {
-       struct in_addr host;
-       int port;
+       char *host;
+       char *port;
        int len;
 #ifdef USE_POLL
        struct pollfd ufds[2];
@@ -615,12 +604,14 @@ extern int telnet_main(int argc, char** argv)
        G.termios_raw = G.termios_def;
        cfmakeraw(&G.termios_raw);
        
-       if (argc < 2)   show_usage();
-       port = (argc > 2)? getport(argv[2]): 23;
+       if (argc < 2)   bb_show_usage();
+       port = (argc > 2)? argv[2] : "23";
        
-       host = getserver(argv[1]);
+       host = argv[1];
+       
+       G.netfd = xconnect(host, port);
 
-       G.netfd = remote_connect(host, port);
+       setsockopt(G.netfd, SOL_SOCKET, SO_KEEPALIVE, &one, sizeof one);
 
        signal(SIGINT, fgotsig);
 
@@ -692,81 +683,6 @@ extern int telnet_main(int argc, char** argv)
        }
 }
 
-static int getport(char * p)
-{
-       unsigned int port = atoi(p);
-
-       if ((unsigned)(port - 1 ) > 65534)
-       {
-               error_msg_and_die("%s: bad port number", p);
-       }
-       return port;
-}
-
-static struct in_addr getserver(char * host)
-{
-       struct in_addr addr;
-
-       struct hostent * he;
-       he = xgethostbyname(host);
-       memcpy(&addr, he->h_addr, sizeof addr);
-
-       TRACE(1, ("addr: %s\n", inet_ntoa(addr)));
-
-       return addr;
-}
-
-static int create_socket(void)
-{
-       return socket(AF_INET, SOCK_STREAM, 0);
-}
-
-static void setup_sockaddr_in(struct sockaddr_in * addr, int port)
-{
-       memset(addr, 0, sizeof(struct sockaddr_in));
-       addr->sin_family = AF_INET;
-       addr->sin_port = htons(port);
-}
-  
-#if 0
-static int local_bind(int port)
-{
-       struct sockaddr_in s_addr;
-       int s = create_socket();
-  
-       setup_sockaddr_in(&s_addr, port);
-  
-       setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &one, sizeof one);
-  
-       if (bind(s, &s_addr, sizeof s_addr) < 0)
-       {
-               char * e = sys_errlist[errno];
-               syserrorexit("bind");
-               exit(1);
-       }
-       listen(s, 1);
-       
-       return s;
-}
-#endif
-
-static int remote_connect(struct in_addr addr, int port)
-{
-       struct sockaddr_in s_addr;
-       int s = create_socket();
-
-       setup_sockaddr_in(&s_addr, port);
-       s_addr.sin_addr = addr;
-
-       setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, &one, sizeof one);
-
-       if (connect(s, (struct sockaddr *)&s_addr, sizeof s_addr) < 0)
-       {
-               perror_msg_and_die("Unable to connect to remote host");
-       }
-       return s;
-}
-
 /*
 Local Variables:
 c-file-style: "linux"