netuser.c
上传用户:hepax88
上传日期:2007-01-03
资源大小:1101k
文件大小:2k
源码类别:

TCP/IP协议栈

开发平台:

Visual C++

  1. /* Miscellaneous integer 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. int Net_error;
  10. /* Convert Internet address in ascii dotted-decimal format (44.0.0.1) to
  11.  * binary IP address
  12.  */
  13. int32
  14. aton(s)
  15. register char *s;
  16. {
  17. int32 n;
  18. register int i;
  19. n = 0;
  20. if(s == NULL)
  21. return 0;
  22. for(i=24;i>=0;i -= 8){
  23. /* Skip any leading stuff (e.g., spaces, '[') */
  24. while(*s != '' && !isdigit(*s))
  25. s++;
  26. if(*s == '')
  27. break;
  28. n |= (int32)atoi(s) << i;
  29. if((s = strchr(s,'.')) == NULL)
  30. break;
  31. s++;
  32. }
  33. return n;
  34. }
  35. /* Convert an internet address (in host byte order) to a dotted decimal ascii
  36.  * string, e.g., 255.255.255.255
  37.  */
  38. char *
  39. inet_ntoa(a)
  40. int32 a;
  41. {
  42. static char buf[16];
  43. sprintf(buf,"%u.%u.%u.%u",
  44. hibyte(hiword(a)),
  45. lobyte(hiword(a)),
  46. hibyte(loword(a)),
  47. lobyte(loword(a)) );
  48. return buf;
  49. }
  50. /* Convert hex-ascii string to long integer */
  51. long
  52. htol(s)
  53. char *s;
  54. {
  55. long ret;
  56. char c;
  57. ret = 0;
  58. while((c = *s++) != ''){
  59. if(c == 'x')
  60. continue; /* Ignore 'x', e.g., '0x' prefixes */
  61. if(c >= '0' && c <= '9')
  62. ret = ret*16 + (c - '0');
  63. else if(c >= 'a' && c <= 'f')
  64. ret = ret*16 + (10 + c - 'a');
  65. else if(c >= 'A' && c <= 'F')
  66. ret = ret*16 + (10 + c - 'A');
  67. else
  68. break;
  69. }
  70. return ret;
  71. }
  72. char *
  73. pinet(s)
  74. struct socket *s;
  75. {
  76. static char buf[30];
  77. sprintf(buf,"%s:%u",inet_ntoa(s->address),s->port);
  78. return buf;
  79. }