/* Miscellaneous interger and IP address format conversion subroutines * Copyright 1991 Phil Karn, KA9Q */ #define LINELEN 256 #include #include #include "global.h" #include "netuser.h" #include "domain.h" int Net_error; /* Convert Internet address in ascii dotted-decimal format (44.0.0.1) to * binary IP address */ int32 aton(s) register char *s; { int32 n; register int i; n = 0; if(s == NULLCHAR) return 0; for(i=24;i>=0;i -= 8){ /* Skip any leading stuff (e.g., spaces, '[') */ while(*s != '\0' && !isdigit(*s)) s++; if(*s == '\0') break; n |= (int32)atoi(s) << i; if((s = strchr(s,'.')) == NULLCHAR) break; s++; } return n; } /* Convert an internet address (in host byte order) to a dotted decimal ascii * string, e.g., 255.255.255.255\0 */ char * inet_ntoa(a) int32 a; { static char buf[80]; char *name; if(DTranslate && (name = resolve_a(a,!DVerbose)) != NULLCHAR) { strcpy(buf, name); free(name); } else { sprintf(buf,"%u.%u.%u.%u", hibyte(hiword(a)), lobyte(hiword(a)), hibyte(loword(a)), lobyte(loword(a)) ); } return buf; } /* Convert hex-ascii string to long integer */ long htol(s) char *s; { long ret; char c; ret = 0; while((c = *s++) != '\0'){ c &= 0x7f; if(c == 'x') continue; /* Ignore 'x', e.g., '0x' prefixes */ if(c >= '0' && c <= '9') ret = ret*16 + (c - '0'); else if(c >= 'a' && c <= 'f') ret = ret*16 + (10 + c - 'a'); else if(c >= 'A' && c <= 'F') ret = ret*16 + (10 + c - 'A'); else break; } return ret; } char * pinet(s) struct socket *s; { static char buf[80]; char port[10]; switch(s->port) { case 7: /* Echo data port */ sprintf(port,"echo"); break; case 9: /* Discard data port */ sprintf(port,"discard"); break; case 20: /* FTP Data port */ sprintf(port,"ftpd"); break; case 21: /* FTP Control port */ sprintf(port,"ftp"); break; case 23: /* Telnet port */ sprintf(port,"telnet"); break; case 25: /* Mail port */ sprintf(port,"smtp"); break; case 53: /* Domain Nameserver */ sprintf(port,"domain"); break; case 69: /* TFTP Data port */ sprintf(port,"tftpd"); break; case 79: /* Finger port */ sprintf(port,"finger"); break; case 87: /* Ttylink port */ sprintf(port,"ttylink"); break; case 109: /* POP port */ sprintf(port,"pop"); break; case 119: /* NNTP port */ sprintf(port,"nntp"); break; case 520: /* Routing Information Protocol */ sprintf(port,"rip"); break; case 1234: /* Pulled out of the air */ sprintf(port,"remote"); break; default: sprintf(port,"%u",s->port); break; } sprintf(buf,"%s:%s",inet_ntoa(s->address),port); return buf; }