home *** CD-ROM | disk | FTP | other *** search
/ The Pier Shareware 6 / The_Pier_Shareware_Number_6_(The_Pier_Exchange)_(1995).iso / 024 / psi110g.zip / NETUSER.C < prev    next >
C/C++ Source or Header  |  1994-08-26  |  4KB  |  179 lines

  1. /* Miscellaneous interger and IP address format conversion subroutines
  2.  * Copyright 1991 Phil Karn, KA9Q
  3.  */
  4. #define LINELEN 256
  5. #include <ctype.h>
  6. #include "global.h"
  7. #include "netuser.h"
  8. #include "domain.h"
  9.   
  10. int Net_error;
  11.   
  12. /* Convert Internet address in ascii dotted-decimal format (44.0.0.1) to
  13.  * binary IP address
  14.  */
  15. int32
  16. aton(s)
  17. register char *s;
  18. {
  19.     int32 n;
  20.   
  21.     register int i;
  22.   
  23.     n = 0;
  24.     if(s == NULLCHAR)
  25.         return 0;
  26.     for(i=24;i>=0;i -= 8){
  27.         /* Skip any leading stuff (e.g., spaces, '[') */
  28.         while(*s != '\0' && !isdigit(*s))
  29.             s++;
  30.         if(*s == '\0')
  31.             break;
  32.         n |= (int32)atoi(s) << i;
  33.         if((s = strchr(s,'.')) == NULLCHAR)
  34.             break;
  35.         s++;
  36.     }
  37.     return n;
  38. }
  39.   
  40. /* Convert an internet address (in host byte order) to a dotted decimal ascii
  41.  * string, e.g., 255.255.255.255\0
  42.  */
  43. char *
  44. inet_ntoa(a)
  45. int32 a;
  46. {
  47.     static char buf[25];
  48.     char *name;
  49.   
  50.     if(DTranslate && (name = resolve_a(a,!DVerbose)) != NULLCHAR) {
  51.         strncpy(buf, name, 24);
  52.         buf[24] = '\0';
  53.         free(name);
  54.     } else {
  55.         sprintf(buf,"%u.%u.%u.%u",
  56.         hibyte(hiword(a)),
  57.         lobyte(hiword(a)),
  58.         hibyte(loword(a)),
  59.         lobyte(loword(a)) );
  60.     }
  61.     return buf;
  62. }
  63.   
  64. /* Convert an internet address (in host byte order) to a unformated string
  65.  */
  66. char *
  67. inet_ntobos(a)
  68. int32 a;
  69. {
  70.     static char buf[5];
  71.   
  72.     buf[0]=hibyte(hiword(a));
  73.     buf[1]=lobyte(hiword(a));
  74.     buf[2]=hibyte(loword(a));
  75.     buf[3]=lobyte(loword(a));
  76.     buf[4]='\0';
  77.   
  78.     return buf;
  79. }
  80.   
  81. /* Convert hex-ascii string to long integer */
  82. long
  83. htol(s)
  84. char *s;
  85. {
  86.     long ret;
  87.     char c;
  88.   
  89.     ret = 0;
  90.     while((c = *s++) != '\0'){
  91.         c &= 0x7f;
  92.         if(c == 'x')
  93.             continue;       /* Ignore 'x', e.g., '0x' prefixes */
  94.         if(c >= '0' && c <= '9')
  95.             ret = ret*16 + (c - '0');
  96.         else if(c >= 'a' && c <= 'f')
  97.             ret = ret*16 + (10 + c - 'a');
  98.         else if(c >= 'A' && c <= 'F')
  99.             ret = ret*16 + (10 + c - 'A');
  100.         else
  101.             break;
  102.     }
  103.     return ret;
  104. }
  105. char *
  106. pinet(s)
  107. struct socket *s;
  108. {
  109.     static char buf[80];
  110.     char port[10];
  111.   
  112.     switch(s->port) {
  113.         case 7:                 /* Echo data port */
  114.             sprintf(port,"echo");
  115.             break;
  116.         case 9:                 /* Discard data port */
  117.             sprintf(port,"discard");
  118.             break;
  119.         case 20:                /* FTP Data port */
  120.             sprintf(port,"ftpd");
  121.             break;
  122.         case 21:                /* FTP Control port */
  123.             sprintf(port,"ftp");
  124.             break;
  125.         case 23:                /* Telnet port */
  126.             sprintf(port,"telnet");
  127.             break;
  128.         case 25:                /* Mail port */
  129.             sprintf(port,"smtp");
  130.             break;
  131.         case 37:        /* Time port */
  132.             sprintf(port,"time");
  133.             break;
  134.         case 53:        /* Domain Nameserver */
  135.             sprintf(port,"domain");
  136.             break;
  137.         case 69:                /* TFTP Data port */
  138.             sprintf(port,"tftpd");
  139.             break;
  140.         case 79:                /* Finger port */
  141.             sprintf(port,"finger");
  142.             break;
  143.         case 87:                /* Ttylink port */
  144.             sprintf(port,"ttylink");
  145.             break;
  146.         case 109:       /* POP2 port */
  147.             sprintf(port,"pop2");
  148.             break;
  149.         case 110:       /* POP3 port */
  150.             sprintf(port,"pop3");
  151.             break;
  152.         case 119:               /* NNTP port */
  153.             sprintf(port,"nntp");
  154.             break;
  155.         case 520:               /* Routing Information Protocol */
  156.             sprintf(port,"rip");
  157.             break;
  158.         case 1234:              /* Pulled out of the air */
  159.             sprintf(port,"remote");
  160.             break;
  161.         case 1235:
  162.             sprintf(port,"callbook");
  163.             break;
  164.         case 3600:
  165.             sprintf(port,"convers");
  166.             break;
  167.         case 3601:
  168.             sprintf(port,"xconvers");
  169.             break;
  170.         default:
  171.             sprintf(port,"%u",s->port);
  172.             break;
  173.     }
  174.   
  175.     sprintf(buf,"%s:%s",inet_ntoa(s->address),port);
  176.     return buf;
  177. }
  178.   
  179.