From b79e1f031849a82dfaa69c10e01697b9a8f866bf Mon Sep 17 00:00:00 2001 From: staticfox Date: Wed, 17 Aug 2016 19:47:49 -0400 Subject: Goodbye XP, my old friend --- src/kvilib/net/KviNetUtils.cpp | 285 ----------------------------------------- 1 file changed, 285 deletions(-) (limited to 'src/kvilib/net/KviNetUtils.cpp') diff --git a/src/kvilib/net/KviNetUtils.cpp b/src/kvilib/net/KviNetUtils.cpp index f48ccdcb9..9353601a3 100644 --- a/src/kvilib/net/KviNetUtils.cpp +++ b/src/kvilib/net/KviNetUtils.cpp @@ -228,291 +228,6 @@ bool kvi_isValidStringIp(const char * szIp) #ifdef COMPILE_IPV6_SUPPORT -#if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW) - -static unsigned int scan_ip6(const char * s, char ip[16]) -{ - unsigned int i; - unsigned int len = 0; - unsigned long u; - - char suffix[16]; - unsigned int prefixlen = 0; - unsigned int suffixlen = 0; - - for(i = 0; i < 16; i++) - ip[i] = 0; - - for(;;) - { - if(*s == ':') - { - len++; - if(s[1] == ':') - { /* Found "::", skip to part 2 */ - s += 2; - len++; - break; - } - s++; - } - - { - char * tmp; - u = strtoul(s, &tmp, 16); - i = tmp - s; - } - - if(!i) - return 0; - if(prefixlen == 12 && s[i] == '.') - { - /* the last 4 bytes may be written as IPv4 address */ - if(kvi_stringIpToBinaryIp(s, (struct in_addr *)(ip + 12))) - return i + len; - else - return 0; - } - - ip[prefixlen++] = (u >> 8); - ip[prefixlen++] = (u & 255); - - s += i; - len += i; - - if(prefixlen == 16) - return len; - } - - /* part 2, after "::" */ - - for(;;) - { - if(*s == ':') - { - if(suffixlen == 0) - break; - s++; - len++; - } - else if(suffixlen != 0) - break; - - { - char * tmp; - u = strtol(s, &tmp, 16); - i = tmp - s; - } - - if(!i) - { - if(*s) - len--; - break; - } - - if(suffixlen + prefixlen <= 12 && s[i] == '.') - { - - if(kvi_stringIpToBinaryIp(s, (struct in_addr *)(suffix + suffixlen))) - { - suffixlen += 4; - len += (unsigned int)strlen(s); - break; - } - else - prefixlen = 12 - suffixlen; /* make end-of-loop test true */ - } - - suffix[suffixlen++] = (u >> 8); - suffix[suffixlen++] = (u & 255); - s += i; - len += i; - if(prefixlen + suffixlen == 16) - break; - } - - for(i = 0; i < suffixlen; i++) - ip[16 - suffixlen + i] = suffix[i]; - - return len; -} - -extern int inet_pton(int AF, const char * CP, void * BUF) -{ - int len; - if(AF == AF_INET) - { - if(!kvi_stringIpToBinaryIp(CP, (struct in_addr *)BUF)) - return 0; - } - else if(AF == AF_INET6) - { - if(CP[len = scan_ip6(CP, (char *)BUF)]) - return 0; - } - else - { - errno = WSAEPFNOSUPPORT; - return -1; - } - return 1; -} - -static const unsigned char V4mappedprefix[12] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff }; - -static char tohex(char hexdigit) -{ - return hexdigit > 9 ? hexdigit + 'a' - 10 : hexdigit + '0'; -} - -static int fmt_xlong(char * s, unsigned int i) -{ - char * bak = s; - *s = tohex((i >> 12) & 0xf); - if(s != bak || *s != '0') - ++s; - *s = tohex((i >> 8) & 0xf); - if(s != bak || *s != '0') - ++s; - *s = tohex((i >> 4) & 0xf); - if(s != bak || *s != '0') - ++s; - *s = tohex(i & 0xf); - return s - bak + 1; -} - -static unsigned int i2a(char * dest, unsigned int x) -{ - unsigned int tmp = x; - unsigned int len = 0; - - if(x >= 100) - { - *dest++ = tmp / 100 + '0'; - tmp = tmp % 100; - ++len; - } - if(x >= 10) - { - *dest++ = tmp / 10 + '0'; - tmp = tmp % 10; - ++len; - } - *dest++ = tmp + '0'; - return len + 1; -} - -char * inet_ntoa_r(struct in_addr in, char * buf) -{ - unsigned int len; - unsigned char * ip = (unsigned char *)∈ - - len = i2a(buf, ip[0]); - buf[len] = '.'; - ++len; - len += i2a(buf + len, ip[1]); - buf[len] = '.'; - ++len; - len += i2a(buf + len, ip[2]); - buf[len] = '.'; - ++len; - len += i2a(buf + len, ip[3]); - buf[len] = 0; - return buf; -} - -unsigned int fmt_ip6(char * s, const char ip[16]) -{ - unsigned int len; - unsigned int i; - unsigned int temp; - unsigned int compressing; // 0 not compressing, 1 compressing now, 2 already compressed once - - len = 0; - compressing = 0; - - for(int j = 0; j < 16; j += 2) - { - if(j == 12 && !memcmp(ip, V4mappedprefix, 12)) - { - inet_ntoa_r(*(struct in_addr *)(ip + 12), s); - temp = (unsigned int)strlen(s); - return len + temp; - } - - temp = ((unsigned long)(unsigned char)ip[j] << 8) + (unsigned long)(unsigned char)ip[j + 1]; - - if(temp == 0 && compressing != 2) - { - if(compressing == 0) - { - compressing = 1; - if(j == 0) - { - *s++ = ':'; - ++len; - } - } - } - else - { - if(compressing == 1) - { - compressing = 2; // don't do it again - *s++ = ':'; - ++len; - } - - i = fmt_xlong(s, temp); - len += i; - s += i; - - if(j < 14) - { - *s++ = ':'; - ++len; - } - } - } - - if(compressing == 1) - { - *s++ = ':'; - ++len; - } - - *s = 0; - return len; -} - -const char * inet_ntop(int AF, const void * CP, char * BUF, size_t LEN) -{ - char buf[100]; - size_t len; - - if(AF == AF_INET) - { - inet_ntoa_r(*(struct in_addr *)CP, buf); - len = strlen(buf); - } - else if(AF == AF_INET6) - - { - len = fmt_ip6(buf, (char *)CP); - } - else - return 0; - - if(len < LEN) - { - strcpy(BUF, buf); - return BUF; - } - return 0; -} -#endif - bool kvi_binaryIpToStringIp_V6(struct in6_addr in, QString & szBuffer) { char buf[46]; -- cgit v1.3.1-10-gc9f91