memcpy(&word, &
addr->octet[10],
sizeof(word));
63 if(word != 0x0000 || !compat)
66memcpy(&temp, &
addr->octet[12],
sizeof(temp));
79memcpy(&word, &
addr->octet[10],
sizeof(word));
80 if(word != 0x0000 && word != 0xFFFF)
82memcpy(&temp, &
addr->octet[12],
sizeof(temp));
102 static const size_t size=
sizeof(ipv4);
104 return(
unsigned int)(-1L)
;
112memcpy( &ipv4, &
addr->octet[4],
size);
115memcpy( &ipv4, &
addr->octet[5],
size- 1);
116memcpy((
char*) &ipv4 +
size- 1, &
addr->octet[9], 1);
119memcpy( &ipv4, &
addr->octet[6],
size- 2);
120memcpy((
char*) &ipv4 +
size- 2, &
addr->octet[9], 2);
123memcpy( &ipv4, &
addr->octet[7],
size- 3);
124memcpy((
char*) &ipv4 +
size- 3, &
addr->octet[9], 3);
127memcpy( &ipv4, &
addr->octet[9],
size);
130memcpy( &ipv4, &
addr->octet[12],
size);
133ipv4 = (
unsigned int)(-1L)
;
142 unsigned intipv4,
size_tpfxlen)
144 static const size_t size=
sizeof(ipv4);
149memset(
addr, 0,
sizeof(*
addr));
150memset(
addr->octet + (5 << 1),
'\xFF',
sizeof(
unsigned short));
155memcpy(&
addr->octet[4], &ipv4,
size);
158memcpy(&
addr->octet[5], &ipv4,
size- 1);
159memcpy(&
addr->octet[9], (
char*) &ipv4 +
size- 1, 1);
162memcpy(&
addr->octet[6], &ipv4,
size- 2);
163memcpy(&
addr->octet[9], (
char*) &ipv4 +
size- 2, 2);
166memcpy(&
addr->octet[7], &ipv4,
size- 3);
167memcpy(&
addr->octet[9], (
char*) &ipv4 +
size- 3, 3);
170memcpy(&
addr->octet[9], &ipv4,
size);
173memcpy(&
addr->octet[12], &ipv4,
size);
188 const char*
str,
size_t len)
194 unsigned char*ptr = (
unsigned char*) &
tmp;
197 for(
n= 0;
n<
len; ++
n) {
199 if(
'0'<= c && c <=
'9') {
201 if(was_digit && !*ptr)
203 val= (
unsigned int)(*ptr * 10 + (c -
'0'));
206*ptr = (
unsignedchar)
val;
212}
else if(c ==
'.') {
213 if(!was_digit || octets >= 4)
230 char tmp[
sizeof(
"255.255.255.255")];
231 unsigned char* ptr = (
unsigned char*) src;
233= (size_t) sprintf(
tmp,
"%u.%u.%u.%u", ptr[0], ptr[1], ptr[2], ptr[3]);
240 const char*
str,
size_t len)
246} token[
sizeof(
addr->octet) /
sizeof(word) + 1];
247 size_tmaxt =
sizeof(token) /
sizeof(token[0]) - 1,
t,
n;
254 if(
len< 2 || (
str[
n= 0] ==
':'&&
str[++
n] !=
':'))
258token[
t= 0].ptr =
str+
n;
261 if(
n==
len||
str[
n] ==
':') {
262token[
t].len = (size_t)(&
str[
n] - token[
t].ptr);
263 if(token[
t].
len) {
279token[
t].ptr =
str+
n;
283token[
t].len = (size_t)(&
str[
n] - token[
t].ptr);
284 if(token[
t].
len) {
285 if(
str[
n] ==
'.') {
286 if(
t<= maxt -
sizeof(
ip) /
sizeof(word)) {
291 if(end && *end !=
':' 292&&
t<= (maxt -=
sizeof(
ip) /
sizeof(word))) {
293token[
t].len = (size_t)(end - token[
t].ptr);
306}
while(
n<=
len);
309 if(
t< maxt && !gap)
313 for(
n= 0;
n<
t; ++
n) {
315 if(*token[
n].ptr !=
':') {
320 val= strtol(token[
n].ptr, &end, 16);
321 if(errno ||
val^ (
val& 0xFFFF))
323 assert(end == token[
n].ptr + token[
n].
len- (*end ==
':'));
324 if(*end ==
':'&&
n==
t- !ipv4)
327memcpy(dst, &word,
sizeof(word));
328dst +=
sizeof(word);
330gap = (maxt -
t) *
sizeof(word) +
sizeof(word);
336memcpy(dst, &
ip,
sizeof(
ip));
341 returntoken[
t- 1].ptr + token[
t- 1].len;
346 const char*
str,
size_t len)
356 for(
n= 0;
n<
len; ++
n) {
365 const char*
str,
size_t len)
370memset(
addr, 0,
sizeof(*
addr));
375 for(
n= 0;
n<
len; ++
n) {
387 charipv4[
sizeof(
"255.255.255.255")];
388 size_t i,
n, pos,
len, zpos, zlen;
394 n=
sizeof(
addr->octet) -
sizeof(
ip);
395memcpy(&
ip,
addr->octet +
n,
sizeof(
ip));
399 n=
sizeof(
addr->octet) /
sizeof(word);
403pos =
i= zpos = zlen = 0;
406memcpy(&word, &
addr->octet[
i*
sizeof(word)],
sizeof(word));
426 if(zlen && zpos ==
i) {
435memcpy(&word, &
addr->octet[
i*
sizeof(word)],
sizeof(word));
436ptr += sprintf(ptr, &
":%x"[!
i],
447 n= (size_t)(ptr - ipv6);
450memcpy(
buf, ipv6,
n);
452memcpy(
buf, ipv4,
i);
509 char tmp[
sizeof(
addr->octet)*4 + 16
], *dst =
tmp;
511 const unsigned char* src;
521src =
addr->octet +
sizeof(
addr->octet) - 1;
524 for(
n= 0;
n<
sizeof(
unsigned int); ++
n) {
525 size_toff = (size_t)sprintf(dst,
"%d.", *src--);
531 for(
n= 0;
n<
sizeof(
addr->octet); ++
n) {
532 size_toff = (size_t)sprintf(dst,
"%x.%x.", *src & 0xF, *src >> 4);
551 const char*
str,
size_t len)
556 unsigned char* ptr = (
unsigned char*) &temp +
sizeof(temp);
558 if(
len< 7
|| 15
<
len)
560 for(
n= 0;
n<
sizeof(temp); ++
n) {
565d = strtol(
str, &e, 10);
566 if(errno ||
str== e || e -
str> 3 || *e !=
'.' 568|| sprintf(s,
"%u", (
unsigned int) d) != (
int)(e -
str)) {
572*--ptr = (
unsignedchar) d;
582 const char*
str,
size_t len)
584 static const charxdigits[] =
"0123456789abcdef";
590 if(
len!= 4 *
sizeof(
addr->octet) - 1)
592dst = temp.octet +
sizeof(temp.octet) - 1;
593 for(
n= 0;
n< 2 *
sizeof(
addr->octet); ++
n) {
594 const char* ptr = strchr(xdigits,
tolower((
unsigned char)(*
str++)));
597 if(!ptr || *
str++ !=
'.')
599 val= (
unsignedchar)(ptr - xdigits);
618 const char*
str,
size_t len,
628memset(
addr, 0,
sizeof(*
addr));
634 for(
n= 0;
n<
len; ++
n) {
640 for(
n= 0;
n<
len; ++
n) {
648 size_tdns =
str[--
n] ==
'.'? 1
: 0
;
679 const char*
str,
size_t len)
688 const char*
str,
size_t len)
697 const char*
str,
size_t len)
711 if(!base || !
addr)
714 if(bits > (
sizeof(base->
octet) << 3))
717 for(
n= 0;
n<
sizeof(
addr->octet); ++
n) {
721}
else if(8 > bits) {
722 mask= (
unsignedchar)(~0
U<< (8 - bits));
725 mask= (
unsignedchar)(~0
U);
742 for(
n= 0;
n<
sizeof(
addr->octet); ++
n) {
744 addr->octet[
n] = 0;
745}
else if(8 > bits) {
746 unsigned char mask= (
unsignedchar)(~0
U<< (8 - bits));
752 if(
addr->octet[
n])
768 if(bits <
sizeof(
addr->octet) * 8)
769bits =
sizeof(
addr->octet) * 8 - bits;
772 for(
n= 0;
n<
sizeof(
addr->octet); ++
n) {
774 if(
addr->octet[
n])
776}
else if(8 > bits) {
777 unsigned char mask= (
unsignedchar)(~0
U<< (8 - bits));
783 addr->octet[
n] = 0;
ncbi::TMaskedQueryRegions mask
static const char * str(char *buf, int n)
#define SOCK_NetToHostLong
#define SOCK_NetToHostShort
unsigned short SOCK_HostToNetShort(unsigned short value)
See man for the BSDisms, htonl() and htons().
int SOCK_ntoa(unsigned int addr, char *buf, size_t bufsize)
Convert IP address to a string in dotted notation.
unsigned int
A callback function used to compare two keys in a database.
const struct ncbi::grid::netcache::search::fields::SIZE size
int NcbiIsEmptyIPv6(const TNCBI_IPv6Addr *addr)
Return non-zero if the address is empty (either as NULL or IPv6 or IPv4); return zero otherwise.
const char * NcbiStringToIPv6(TNCBI_IPv6Addr *addr, const char *str, size_t len)
Convert into an IPv6 address, the first "len" (or "strlen(str)" if "len" is 0) bytes of "str" from a ...
const char * NcbiDNSIPToAddr(TNCBI_IPv6Addr *addr, const char *str, size_t len)
Convert into an IPv6 address, the first "len" (or "strlen(str)" if "len" is 0) bytes of "str",...
unsigned int TNcbiIP_Form
static char * x_IPv6ToString(char *buf, size_t bufsize, const TNCBI_IPv6Addr *addr)
static char * x_IPv4ToString(char *buf, size_t bufsize, const void *src)
unsigned int NcbiIPv6ToIPv4(const TNCBI_IPv6Addr *addr, size_t pfxlen)
Extract and return a network byte order IPv4 embedded address from an IPv6 address,...
char * NcbiAddrToString(char *buf, size_t bufsize, const TNCBI_IPv6Addr *addr)
Convert an IPv6 address into either a full-quad text IPv4 (for IPv4-mapped IPv6 addresses) or a hex c...
static const char * x_DNSToIPv6(TNCBI_IPv6Addr *addr, const char *str, size_t len)
static int x_NcbiIsIPv4(const TNCBI_IPv6Addr *addr, int compat)
int NcbiIPv6Suffix(TNCBI_IPv6Addr *addr, unsigned int bits)
Retain last "bits" in a given "addr", resetting all remaining bits to 0.
TNCBI_IPv6Addr * NcbiIPv4ToIPv6(TNCBI_IPv6Addr *addr, unsigned int ipv4, size_t pfxlen)
Embed a passed network byte order IPv4 address into an IPv6 address using the specified prefix length...
char * NcbiIPv6ToString(char *buf, size_t bufsize, const TNCBI_IPv6Addr *addr)
Convert an IPv6 address into a hex colon-separated text form and store the result in the "buf" of siz...
int NcbiIsIPv4(const TNCBI_IPv6Addr *addr)
Return non-zero(true) if the address is a true IPv4 address (a mapped IPv4 address),...
static const char * x_DNSToIPv4(unsigned int *addr, const char *str, size_t len)
const char * NcbiStringToIPv4(unsigned int *addr, const char *str, size_t len)
Convert into a network byte order IPv4 address, the first "len" (or "strlen(str)" if "len" is 0) byte...
int NcbiIsIPv4Ex(const TNCBI_IPv6Addr *addr, int compat)
Return non-zero(true) if the address is either a mapped IPv4 address or (optionally) an IPv4-compatib...
static const struct SIPDNSsfx kIPv6DNS
char * NcbiIPv4ToString(char *buf, size_t bufsize, unsigned int addr)
Convert a network byte order IPv4 into a full-quad text form and store the result in the "buf" of siz...
int NcbiIPv6Subnet(TNCBI_IPv6Addr *addr, unsigned int bits)
Retain first "bits" in a given "addr", resetting all remaining bits to 0.
const char * NcbiStringToAddr(TNCBI_IPv6Addr *addr, const char *str, size_t len)
Convert into an IPv6 address, the first "len" (or "strlen(str)" if "len" is 0) bytes of "str",...
static const char * x_StringToIPv4(unsigned int *dst, const char *str, size_t len)
int NcbiIsInIPv6Network(const TNCBI_IPv6Addr *base, unsigned int bits, const TNCBI_IPv6Addr *addr)
Return non-zero(true) if "addr" belongs to the network specified as CIDR "base/bits"; return a zero(f...
const char * NcbiAddrToDNS(char *buf, size_t bufsize, const TNCBI_IPv6Addr *addr)
Convert an IPv6 address into either .in-addr.arpa domain (for IPv4-mapped IPv6 addresses) or ....
static const char * x_StringToIPv6(TNCBI_IPv6Addr *addr, const char *str, size_t len)
static const struct SIPDNSsfx kIPv4DNS
const char * NcbiIPToAddr(TNCBI_IPv6Addr *addr, const char *str, size_t len)
Convert into an IPv6 address, the first "len" (or "strlen(str)" if "len" is 0) bytes of "str" from ei...
static const char * s_StringToAddr(TNCBI_IPv6Addr *addr, const char *str, size_t len, TNcbiIP_Form how)
#define CORE_DEBUG_ARG(arg)
static PCRE2_SIZE bufsize
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4