X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FLibraries%2Flibnet.so_src%2Faddress.c;h=8887362d69a52a765023e5228e5162d019713642;hb=038439147795891da9d99ddbc10ebbbb0d9fca09;hp=31b23e513e2348eb15fc6c7c354f62442e9a52bb;hpb=2bdb445efbe8a5440c5ed27acfccd32626bd67e7;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/libnet.so_src/address.c b/Usermode/Libraries/libnet.so_src/address.c index 31b23e51..8887362d 100644 --- a/Usermode/Libraries/libnet.so_src/address.c +++ b/Usermode/Libraries/libnet.so_src/address.c @@ -7,9 +7,27 @@ */ #include #include -#include +//#include +#include #define DEBUG 0 +static inline uint32_t htonl(uint32_t v) +{ + return (((v >> 24) & 0xFF) << 0) + | (((v >> 16) & 0xFF) << 8) + | (((v >> 8) & 0xFF) << 16) + | (((v >> 0) & 0xFF) << 24); +} +static inline uint16_t htons(uint16_t v) +{ + return (((v >> 8) & 0xFF) << 0) + | (((v >> 0) & 0xFF) << 8); +} +#define htonb(v) v +#define ntohl(v) htonl(v) +#define ntohs(v) htons(v) +#define ntohb(v) v + #define __thread // Disable TLS /** @@ -20,43 +38,50 @@ */ static int Net_ParseIPv4Addr(const char *String, uint8_t *Addr) { - int i = 0; int j; - int val; + const char *pos = String; - for( j = 0; String[i] && j < 4; j ++ ) + for( j = 0; *pos && j < 4; j ++ ) { - val = 0; - for( ; String[i] && String[i] != '.'; i++ ) - { - if('0' > String[i] || String[i] > '9') { - #if DEBUG - printf("0 255) { #if DEBUG - printf("val > 255 (%i)\n", val); + _SysDebug("%s: val > 255 (%i)", __func__, val); #endif return 0; } + #if DEBUG + _SysDebug("%s: Comp '%.*s' = %lu", __func__, end - pos, pos, val); + #endif Addr[j] = val; - if(String[i] == '.') - i ++; + pos = end; + + if(*pos == '.') + pos ++; } if( j != 4 ) { #if DEBUG - printf("4 parts expected, %i found\n", j); + _SysDebug("%s: 4 parts expected, %i found", __func__, j); #endif return 0; } - if(String[i] != '\0') { + if(*pos != '\0') { #if DEBUG - printf("EOS != '\\0', '%c'\n", String[i]); + _SysDebug("%s: EOS != '\\0', '%c'", __func__, *pos); #endif return 0; } @@ -143,8 +168,8 @@ static int Net_ParseIPv6Addr(const char *String, uint8_t *Addr) k = 0; for( ; j < 8; j ++, k++) { - Addr[j*2] = hi[k]>>8; - Addr[j*2+1] = hi[k]&0xFF; + Addr[j*2] = low[k]>>8; + Addr[j*2+1] = low[k]&0xFF; } return 1; @@ -170,7 +195,7 @@ int Net_ParseAddress(const char *String, void *Addr) return 0; } -static const char *Net_PrintIPv4Address(uint8_t *Address) +static const char *Net_PrintIPv4Address(const uint8_t *Address) { static __thread char ret[4*3+3+1]; // '255.255.255.255\0' @@ -179,7 +204,7 @@ static const char *Net_PrintIPv4Address(uint8_t *Address) return ret; } -static const char *Net_PrintIPv6Address(uint16_t *Address) +static const char *Net_PrintIPv6Address(const uint16_t *Address) { static __thread char ret[8*4+7+1]; // 'FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF\0' #if 0 @@ -191,14 +216,14 @@ static const char *Net_PrintIPv6Address(uint16_t *Address) #endif sprintf(ret, "%x:%x:%x:%x:%x:%x:%x:%x", - Address[0], Address[1], Address[2], Address[3], - Address[4], Address[5], Address[6], Address[7] + ntohs(Address[0]), ntohs(Address[1]), ntohs(Address[2]), ntohs(Address[3]), + ntohs(Address[4]), ntohs(Address[5]), ntohs(Address[6]), ntohs(Address[7]) ); return ret; } -const char *Net_PrintAddress(int AddressType, void *Address) +const char *Net_PrintAddress(int AddressType, const void *Address) { switch( AddressType ) {