home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 3 / hamradioversion3.0examsandprograms1992.iso / packet / n17jsrc / netuser.c < prev    next >
C/C++ Source or Header  |  1991-02-04  |  3KB  |  145 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 <stdio.h>
  7. #include "global.h"
  8. #include "netuser.h"
  9. #include "domain.h"
  10.  
  11. int Net_error;
  12.  
  13. /* Convert Internet address in ascii dotted-decimal format (44.0.0.1) to
  14.  * binary IP address
  15.  */
  16. int32
  17. aton(s)
  18. register char *s;
  19. {
  20.     int32 n;
  21.  
  22.     register int i;
  23.  
  24.     n = 0;
  25.     if(s == NULLCHAR)
  26.         return 0;
  27.     for(i=24;i>=0;i -= 8){
  28.         /* Skip any leading stuff (e.g., spaces, '[') */
  29.         while(*s != '\0' && !isdigit(*s))
  30.             s++;
  31.         if(*s == '\0')
  32.             break;
  33.         n |= (int32)atoi(s) << i;
  34.         if((s = strchr(s,'.')) == NULLCHAR)
  35.             break;
  36.         s++;
  37.     }
  38.     return n;
  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[80];
  48.     char *name;
  49.  
  50.     if(DTranslate && (name = resolve_a(a,!DVerbose)) != NULLCHAR) {
  51.         strcpy(buf, name);
  52.         free(name);
  53.     } else {
  54.         sprintf(buf,"%u.%u.%u.%u",
  55.             hibyte(hiword(a)),
  56.             lobyte(hiword(a)),
  57.             hibyte(loword(a)),
  58.             lobyte(loword(a)) );
  59.     }
  60.     return buf;
  61. }
  62. /* Convert hex-ascii string to long integer */
  63. long
  64. htol(s)
  65. char *s;
  66. {
  67.     long ret;
  68.     char c;
  69.  
  70.     ret = 0;
  71.     while((c = *s++) != '\0'){
  72.         c &= 0x7f;
  73.         if(c == 'x')
  74.             continue;    /* Ignore 'x', e.g., '0x' prefixes */
  75.         if(c >= '0' && c <= '9')
  76.             ret = ret*16 + (c - '0');
  77.         else if(c >= 'a' && c <= 'f')
  78.             ret = ret*16 + (10 + c - 'a');
  79.         else if(c >= 'A' && c <= 'F')
  80.             ret = ret*16 + (10 + c - 'A');
  81.         else
  82.             break;
  83.     }
  84.     return ret;
  85. }
  86. char *
  87. pinet(s)
  88. struct socket *s;
  89. {
  90.     static char buf[80];
  91.     char port[10];
  92.  
  93.     switch(s->port) {
  94.         case 7:            /* Echo data port */
  95.             sprintf(port,"echo");
  96.             break;
  97.         case 9:            /* Discard data port */
  98.             sprintf(port,"discard");
  99.             break;
  100.         case 20:        /* FTP Data port */
  101.             sprintf(port,"ftpd");
  102.             break;
  103.         case 21:        /* FTP Control port */
  104.             sprintf(port,"ftp");
  105.             break;
  106.         case 23:        /* Telnet port */
  107.             sprintf(port,"telnet");
  108.             break;
  109.         case 25:        /* Mail port */
  110.             sprintf(port,"smtp");
  111.             break;
  112.         case 53:        /* Domain Nameserver */
  113.             sprintf(port,"domain");
  114.             break;
  115.         case 69:        /* TFTP Data port */
  116.             sprintf(port,"tftpd");
  117.             break;
  118.         case 79:        /* Finger port */
  119.             sprintf(port,"finger");
  120.             break;
  121.         case 87:        /* Ttylink port */
  122.             sprintf(port,"ttylink");
  123.             break;
  124.         case 109:        /* POP port */
  125.             sprintf(port,"pop");
  126.             break;
  127.         case 119:        /* NNTP port */
  128.             sprintf(port,"nntp");
  129.             break;
  130.         case 520:        /* Routing Information Protocol */
  131.             sprintf(port,"rip");
  132.             break;
  133.         case 1234:        /* Pulled out of the air */
  134.             sprintf(port,"remote");
  135.             break;
  136.         default:
  137.             sprintf(port,"%u",s->port);
  138.             break;
  139.     }
  140.  
  141.     sprintf(buf,"%s:%s",inet_ntoa(s->address),port);
  142.     return buf;
  143. }
  144.  
  145.