X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;ds=sidebyside;f=Usermode%2FLibraries%2Flibnet.so_src%2Faddress.c;h=31b23e513e2348eb15fc6c7c354f62442e9a52bb;hb=08e1f139ca02aa899f698d90146a5bc9926c2f37;hp=2b58444d04b41a8ad093c311da5a832f8989506e;hpb=d5834686ad14b66420060192445f06bce85db389;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/libnet.so_src/address.c b/Usermode/Libraries/libnet.so_src/address.c index 2b58444d..31b23e51 100644 --- a/Usermode/Libraries/libnet.so_src/address.c +++ b/Usermode/Libraries/libnet.so_src/address.c @@ -7,8 +7,11 @@ */ #include #include +#include #define DEBUG 0 +#define __thread // Disable TLS + /** * \brief Read an IPv4 Address * \param String IPv4 dotted decimal address @@ -166,3 +169,48 @@ int Net_ParseAddress(const char *String, void *Addr) return 0; } + +static const char *Net_PrintIPv4Address(uint8_t *Address) +{ + static __thread char ret[4*3+3+1]; // '255.255.255.255\0' + + sprintf(ret, "%i.%i.%i.%i", Address[0], Address[1], Address[2], Address[3]); + + return ret; +} + +static const char *Net_PrintIPv6Address(uint16_t *Address) +{ + static __thread char ret[8*4+7+1]; // 'FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF\0' + #if 0 + // TODO: Zero compression + int zeroStart = 0, zeroEnd = 8; + for( i = 0; i < 8; i ++ ) { + if( + } + #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] + ); + + return ret; +} + +const char *Net_PrintAddress(int AddressType, void *Address) +{ + switch( AddressType ) + { + case 0: return ""; + + case 4: + return Net_PrintIPv4Address(Address); + + case 6: + return Net_PrintIPv6Address(Address); + + default: + return "BAD"; + } +}