"LBDNS_DOMAIN"
76 #define REG_CONN_LBDNS_DEBUG DEF_CONN_REG_SECTION "_""LBDNS_DEBUG"
78 #define REG_CONN_LBDNS_HOST DEF_CONN_REG_SECTION "_""LBDNS_HOST"
80 #define REG_CONN_LBDNS_PORT DEF_CONN_REG_SECTION "_""LBDNS_PORT"
83 #if defined(HAVE_SOCKLEN_T) || defined(_SOCKLEN_T) 163sprintf(
buf,
"TYPE(%hu)", (
unsigned short) atype);
178sprintf(
buf,
"CLASS(%hu)", (
unsigned short) aclass);
201sprintf(
buf,
"RCODE(%hu)", rcode);
222sprintf(
buf,
"OPCODE(%hu)", opcode);
230 #ifdef NETDB_INTERNAL 232 return "Internal error";
234 #ifdef HOST_NOT_FOUND 236 return "Host not found";
240 return "Server failure";
244 return "Unrecoverable error";
247 # if !defined(NO_DATA) || NO_DATA != NO_ADDRESS 249 return "No address record found";
254 return "No data of requested type";
259 returnhstrerror(err);
267 size_t len= strlen(ptr);
274ptr += sprintf(ptr,
", AA");
276ptr += sprintf(ptr,
", TC");
278ptr += sprintf(ptr,
", RD");
280ptr += sprintf(ptr,
", RA");
282ptr += sprintf(ptr,
", Z?");
284ptr += sprintf(ptr,
", AD");
286ptr += sprintf(ptr,
", CD");
287sprintf(ptr,
", %s",
x_RcodeStr(hdr->rcode, rcode));
296(
"DNS %s (ID=%hu, 0x%04hX):\n" 298 "\tQD: %hu, AN: %hu, NS: %hu, AR: %hu",
299hdr->qr ?
"REPLY":
"QUERY",
301ntohs(((
const unsigned short*) hdr)[1]),
307 static void x_DumpRR(
constns_rr* rr,
const char* part,
unsigned short n)
309 charclbuf[40], tybuf[40], ttlbuf[40], szbuf[40];
311sprintf(ttlbuf,
" %lu", (
unsigned long) ns_rr_ttl(*rr));
312sprintf(szbuf,
" (%u)", ns_rr_rdlen(*rr));
314*ttlbuf = *szbuf =
'\0';
316(
"%s%s %2hu: %s%s %s %s%s",
318part ?
" RR":
" ",
n,
319ns_rr_name(*rr), ttlbuf,
321 x_TypeStr(ns_rr_type(*rr), tybuf), szbuf));
325 static int unpack_rr(
const unsigned char*
msg,
const unsigned char* eom,
326 const unsigned char* ptr, ns_rr* rr,
intqd,
329 const char* what = qd ?
"QD":
"RR";
332memset(rr, 0,
sizeof(*rr));
333 if((
len= dn_expand(
msg, eom, ptr, rr->name,
sizeof(rr->name))) <= 0) {
334 CORE_LOGF_X(32, level, (
"DNS %s cannot expand name", what));
338 size= qd ? NS_QFIXEDSZ : NS_RRFIXEDSZ;
339 if(ptr +
size> eom) {
340 CORE_LOGF_X(33, level, (
"DNS %s overrun", what));
343 assert(NS_QFIXEDSZ == NS_INT16SZ*2);
344 assert(NS_RRFIXEDSZ == NS_INT16SZ*2 + NS_INT32SZ + NS_INT16SZ);
345NS_GET16(rr->type, ptr);
346NS_GET16(rr->rr_class, ptr);
349NS_GET32(rr->ttl, ptr);
350NS_GET16(rr->rdlength, ptr);
353(
"DNS RR %s RDATA empty",
355}
else if(ptr + rr->rdlength > eom) {
357(
"DNS RR %s RDATA overrun",
361 size+= rr->rdlength;
368 static int skip_rr(
const unsigned char* ptr,
const unsigned char* eom,
371 const char* what = qd ?
"QD":
"RR";
374 if((
len= dn_skipname(ptr, eom)) <= 0) {
379 size= qd ? NS_QFIXEDSZ : NS_RRFIXEDSZ;
380 if(ptr +
size> eom) {
385 unsigned shortrdlen;
386ptr += NS_INT16SZ*2 + NS_INT32SZ;
387NS_GET16(rdlen, ptr);
388 if(ptr + rdlen > eom) {
399 const unsigned char* eom)
401 static const char* kPart[] = { 0
,
"AN",
"NS",
"AR"};
402 const unsigned char* ptr =
msg+ NS_HFIXEDSZ;
403 constHEADER* hdr = (
constHEADER*)
msg;
407 assert(
sizeof(*hdr) == NS_HFIXEDSZ);
408 count[0] = ntohs(hdr->qdcount);
409 count[1] = ntohs(hdr->ancount);
410 count[2] = ntohs(hdr->nscount);
411 count[3] = ntohs(hdr->arcount);
417 unsigned shortc = 0;
440(
"LBDNS cannot create entry for \"%s\"", iter->
name));
447 for(
n= 0;
n<
data->n_cand; ++
n) {
452(
"LBDNS ignoring duplicate entry: \"%s\" %s", name,
453infostr ? infostr :
"<NULL>"));
460 if(
data->n_cand ==
data->a_cand) {
461 n=
data->a_cand << 1;
463+ (
n- 1) *
sizeof(
data->cand));
466(
"LBDNS cannot add entry for \"%s\"", iter->
name));
478(
"LBDNS adding \"%s\" @%p %s", name,
info,
479infostr ? infostr :
"NULL"));
497 for(
n= 0;
n<
data->n_cand; ++
n) {
500 char buf[INET6_ADDRSTRLEN];
510x_info->
host= (
unsigned int)(-1);
513}
else if(
host&&
info->host == (
unsigned int)(-1)) {
522(
"LBDNS cannot re-update entry \"%s\" @%p with host" 526 if(x_info !=
info) {
529}
else if(
data->debug) {
532(
"LBDNS updating entry \"%s\" @%p with host \"%s\": %s",
539(
"LBDNS multiple entries updated with host \"%s\":" 540 " %s", fqdn,
buf));
554 for(
n= 0;
n<
data->n_cand; ++
n) {
561(
"LBDNS updating entry \"%s\" @%p with port: %hu",
572memset(
info, 0,
sizeof(*
info));
585 doubletens = floor(rate / 10.0);
586 return(tens + (rate - tens * 10.0 < 10.0 ? 1.0 : 0.0)) * 10.0;
596__attribute__((packed))
603 const unsigned char* eom,
const char* fqdn,
604 unsigned shortrdlen,
const unsigned char* rdata)
606 const unsigned char* start = rdata;
607 chartarget[NS_MAXDNAME];
612 if(rdlen <=
sizeof(srv)) {
614(
"DNS SRV RR RDATA too short: %hu", rdlen));
617memset(&srv, 0,
sizeof(srv));
619NS_GET16(srv.
weight, rdata);
620NS_GET16(srv.
port, rdata);
621 if((rv = dn_expand(
msg, eom, rdata, target,
sizeof(target))) <= 0) {
625 if(&rdata[rv] > &start[rdlen]) {
631(
"DNS SRV RR %s -> %s:%hu %hu %hu", fqdn,
632*target ? target :
".",
635 if(&rdata[rv] != &start[rdlen]) {
636 assert(&rdata[rv] < &start[rdlen]);
638(
"DNS SRV RR %lu/%hu byte(s) remain unparsed",
639(
unsigned long)(&start[rdlen] - &rdata[rv]), rdlen));
641 if(!target[0] || (target[0] ==
'.'&& !target[1])) {
646}
else if(!srv.
port) {
661 unsigned shortrdlen,
const unsigned char* rdata)
663 unsigned int len= 0;
664 while(
len< rdlen) {
666 unsigned shortslen = *rdata++;
667 if((
len+= 1 + slen) > rdlen) {
676 unsigned short port;
680(
"DNS TXT RR %s: \"%.*s\"", fqdn,
681(
int) slen, (
const char*) rdata));
685memcpy(
buf, rdata, slen);
688 if(sscanf(
buf,
"%hu%n", &
port, &
n) > 0 &&
n== (
int) slen &&
port)
698 unsigned shortrdlen,
const unsigned char* rdata)
701 char buf[INET6_ADDRSTRLEN];
707 assert(
sizeof(ipv4) == NS_INADDRSZ);
708 assert(
sizeof(ipv6) == NS_IN6ADDRSZ);
709 if(rtype == ns_t_a && NS_INADDRSZ <= rdlen) {
710memcpy(&ipv4, rdata,
sizeof(ipv4));
713(
"DNS A RR %s @ %s", fqdn,
714inet_ntop(AF_INET, &ipv4,
717 if(!ipv4 || ipv4 == (
unsigned int)(-1)) {
720(
"DNS A RR bad IPv4 ignored: %s",
buf));
725}
else if(rtype == ns_t_aaaa && NS_IN6ADDRSZ <= rdlen) {
726memcpy(&ipv6, rdata,
sizeof(ipv6));
729(
"DNS AAAA RR %s @ %s", fqdn,
730inet_ntop(AF_INET6, &ipv6,
737(
"DNS AAAA RR bad IPv6 ignored: %s",
buf));
743(
"DNS %s RR RDATA bad size: %hu",
749(
"DNS %s RR %u/%hu byte(s) remain unparsed",
752 if(qtype == ns_t_srv)
755x_info.time += iter->
time;
759x_info.host = (
unsigned int)(-1);
765 const unsigned char*
msg,
766 const unsigned char* eom,
768 unsigned shortrdlen,
769 const unsigned char* rdata)
771 charcname[NS_MAXDNAME];
774 if((rv = dn_expand(
msg, eom, rdata, cname,
sizeof(cname))) <= 0) {
778 if(rv > (
int) rdlen) {
784(
"DNS CNAME RR %s -> %s",
787 if(rv != (
int) rdlen) {
788 assert(rv < (
int) rdlen);
790(
"DNS CNAME RR %d/%hu byte(s) remain unparsed",
791(
int) rdlen - rv, rdlen));
795(
"DNS CNAME RR cannot store cname \"%s\" for \"%s\"",
805 size_tlena = strlen(
a);
806 size_tlenb = strlen(
b);
807 if(lena &&
a[lena - 1] ==
'.')
809 if(lenb &&
b[lenb - 1] ==
'.')
811 returnlena == lenb &&
strncasecmp(
a,
b, lena) == 0 ? 1
: 0
;
817 const char* fqdn, ns_type
type,
818 const unsigned char*
msg,
819 const unsigned char* eom,
820 const unsigned char* ptr,
821 unsigned short count[3])
826 const char* cname = 0;
831 for(
n= 0;
n< 3; ++
n) {
833 for(c = 0; c <
count[
n]; ++c) {
835 intskip =
n&& ((
n& 1)
||
type!= ns_t_srv
);
844 if(ns_rr_class(rr) != ns_c_in || !ns_rr_rdlen(rr))
846 if(!
n&&
type== ns_t_srv &&
847ns_rr_type(rr) != ns_t_srv && ns_rr_type(rr) != ns_t_cname) {
852(
"DNS reply AN %u \"%s\" mismatch FQDN \"%s\"",
853c + 1, ns_rr_name(rr), fqdn));
856 if(ns_rr_type(rr) == ns_t_cname) {
860ns_rr_rdlen(rr), ns_rr_rdata(rr));
869(
"DNS CNAME RR misplaced @A%c %u",
870 "RN"[!
n], c + 1));
874 if(!
n&&
type== ns_t_srv) {
876 assert(ns_rr_type(rr) == ns_t_srv);
878ns_rr_name(rr), ns_rr_rdlen(rr), ns_rr_rdata(rr));
880 if(rv < 0 && data->
n_cand) {
882 "DNS SRV RR blank target misplaced");
888 if(!
n&&
type!= ns_t_srv && ns_rr_type(rr) == ns_t_txt) {
891ns_rr_name(rr), ns_rr_rdlen(rr), ns_rr_rdata(rr));
894 if(ns_rr_type(rr) != ns_t_a && ns_rr_type(rr) != ns_t_aaaa)
897||
type== ns_t_srv
);
899ns_rr_name(rr), ns_rr_rdlen(rr), ns_rr_rdata(rr));
907 free((
void*) cname);
908 assert(ptr && ptr <= eom);
909 return done? ptr : 0
;
915 const unsigned char*
msg,
916 const unsigned char* eom,
917 unsigned short count[3])
919 constHEADER* hdr = (
constHEADER*)
msg;
920 const unsigned char* ptr;
928(
"DNS reply indicates an error: %s",
934(
"DNS reply is a query, not a reply"));
937 if(hdr->opcode != ns_o_query) {
939(
"DNS reply has unexpected opcode: %s",
943 if((
count[0] = ntohs(hdr->qdcount)) != 1) {
945(
"DNS reply has bad number of questions: %hu",
949 if(!(
count[0] = ntohs(hdr->ancount))) {
953ptr =
msg+ NS_HFIXEDSZ;
961 if(ns_rr_class(qd) != ns_c_in) {
963(
"DNS reply for unsupported class: %s",
967 if(ns_rr_type(qd) != ns_t_any) {
969(
"DNS reply for unmatching type: %s vs. ANY queried",
975(
"DNS reply for unmatching name: \"%s\" vs. \"%s\" queried",
976ns_rr_name(qd), fqdn));
985 count[1] = ntohs(hdr->nscount);
986 count[2] = ntohs(hdr->arcount);
992 const unsigned char*
msg,
993 const unsigned char* eom)
997 const unsigned char* ptr;
998 constHEADER* hdr = (
constHEADER*)
msg;
1000 if(hdr->rcode || !(hdr->qr & hdr->aa) || hdr->opcode != ns_o_query)
1002 if(ntohs(hdr->qdcount) != 1 || hdr->ancount || !hdr->nscount)
1005ptr =
msg+ NS_HFIXEDSZ;
1008 if(ns_rr_class(rr) != ns_c_in || ns_rr_type(rr) !=
type)
1015 if(!
same_domain(ns_rr_name(rr), strchr(fqdn,
'.') + 1))
1017 returnns_rr_class(rr) != ns_c_in || ns_rr_type(rr) != ns_t_soa
1023 const char* prefix,
1035 if(
type== ns_t_srv) {
1037zone =
"._tcp.lb.";
1045 if(pfxlen + xlen +
domlen> NS_MAXCDNAME)
1047memcpy(ptr, prefix, pfxlen);
1049memcpy(ptr, zone, zlen);
1055 assert(ptr - fqdn <= NS_MAXCDNAME);
1063 size_t len= strlen(iter->
name);
1064 const unsigned char* ptr, *eom;
1065 charfqdn[NS_MAXCDNAME + 1];
1066 unsigned short count[3];
1067 unsigned char msg[2048];
1068 intrv, err, x_error;
1069 const char* errstr;
1075 if(!
data->check) {
1076 if(
type!= ns_t_srv
1083(
"LBDNS FQDN for \"%s\" %s in \"%s\": Name too long",
1089h_errno = errno = 0;
1090memset(
msg, 0, NS_HFIXEDSZ);
1091rv = res_query(fqdn, ns_c_in, ns_t_any,
msg,
sizeof(
msg));
1100#
ifdefined(NO_ADDRESS) && NO_ADDRESS != NO_DATA
1101|| err == NO_ADDRESS
1109 if(!errstr || !*errstr) {
1110sprintf(errbuf,
"Error %d", err);
1113err = nodata ? 1 : -1;
1115 CORE_TRACEF((
"LBDNS reply \"%s\": %d byte(s)", fqdn, rv));
1116 if(rv < NS_HFIXEDSZ) {
1118(
"DNS reply for \"%s\" too short: %d", fqdn, rv));
1121 if(rv >= (
int)
sizeof(
msg)) {
1123(
"DNS reply overflow: %d", rv));
1124rv = (
int)
sizeof(
msg);
1131 if(
data->debug && rv)
1137(
"DNS lookup failure \"%s\": %s", fqdn, errstr));
1140 assert(NS_HFIXEDSZ <= (
size_t)(eom -
msg));
1152(
"DNS reply %lu/%d byte(s) remain unparsed",
1153(
unsigned long)(eom - ptr), rv));
1164 CORE_TRACEF((
"LBDNS finalizing result-set for \"%s\"", iter->
name));
1165 while(n < data->
n_cand) {
1167 const char* drop = 0
;
1174 if((ptr = (
char*) strchr(name,
'.')) != 0)
1179 info->u.dns.name = 1
;
1181}
else for(s = 0; s <
data->n_cand; ++s) {
1185drop =
"duplicate";
1191*((
char*) name) =
'\0';
1193 for(s = 0; s < iter->
n_skip; ++s) {
1210 if(s >= iter->
n_skip) {
1211 data->cand[
n++].status =
info->rate;
1218drop =
"incomplete";
1223 if(n < --data->
n_cand) {
1225(
data->n_cand -
n) *
sizeof(
data->cand));
1236? iter->
name:
""))) {
1238(
"LBDNS cannot create dummy entry for \"%s\"",
1241 data->cand[0].status = 0.0;
1242 if(
data->debug) {
1245(
"LBDNS adding dummy entry \"%s\" @%p %s",
1247 data->cand[0].info,
1248infostr ? infostr :
"<NULL>"));
1255 CORE_TRACEF((
"LBDNS made ready result-set for \"%s\": %lu",
1256iter->
name, (
unsigned long)
data->n_cand));
1269rv ?
"located":
"unknown"));
1281 structsockaddr_in ns_save;
1282 intns_count, ns_retry, rv;
1289 static void*
s_Init= 0
;
1290 structsockaddr_in ns_addr;
1293memset(&ns_addr, 0,
sizeof(ns_addr));
1295ns_addr.sin_len =
sizeof(ns_addr);
1297ns_addr.sin_family = AF_INET;
1298ns_addr.sin_addr.s_addr =
data->host;
1299ns_addr.sin_port = htons(
data->port);
1303ns_retry =
r->retry;
1304ns_options =
r->options;
1305ns_count =
r->nscount;
1306ns_save =
r->nsaddr;
1308 r->options |= RES_IGNTC;
1310 #ifdef RES_USE_EDNS0 1317 r->options |= RES_USE_EDNS0;
1322 r->options |= RES_DEBUG;
1324 r->nsaddr = ns_addr;
1333 r->options = ns_options;
1334 r->nsaddr = ns_save;
1335 r->nscount = ns_count;
1336 r->retry = ns_retry;
1340 if(!
data->n_cand)
1352(
unsigned long)
data->n_cand,
data->empty ?
", EOF":
""));
1354 if(!
data->n_cand) {
1357 if(
data->empty) {
1364 info->rate =
data->cand[0].status;
1367 data->n_cand *
sizeof(
data->cand));
1372 CORE_TRACEF((
"LBDNS getnextinfo(\"%s\"): \"%s\" @%p", iter->
name,
1382(
unsigned long)
data->n_cand));
1384 if(
data->n_cand) {
1386 for(
n= 0;
n<
data->n_cand; ++
n) {
1414 if((p = getenv(
"LOCALDOMAIN")) != 0) {
1415 size_t n= strlen(p);
1416 if(1 <
n&&
n< domainsize)
1425 #if defined(NCBI_OS_CYGWIN) || defined(NCBI_OS_IRIX) 1426 if(getdomainname(
domain, domainsize) == 0
1434&& (p = strchr(
domain,
'.')) != 0 && p[1]) {
1442 #define isdash(s) ((s) == '-' || (s) == '_') 1446 intdot = *
domain==
'.'? 1
: 0
;
1453 for( ; *ptr; ++ptr) {
1455 if(dot || (alpha &&
isdash(ptr[-1])))
1463 if(
isdigit((
unsigned char)(*ptr)))
1480}
else if(
isdash(ptr[-1]))
1482 return1 <
len&&
len<= NS_MAXCDNAME ? 1
: 0
;
1522 unsigned long port;
1538 size_t len= strlen(iter->
name);
1547(
"[%s] Argument affinity lookup not supported by LBDNS:" 1548 " %s%s%s%s%s", iter->
name, iter->
arg, &
"="[!iter->
val],
1549&
"\""[!iter->
val], iter->
val? iter->
val:
"",
1550&
"\""[!iter->
val]));
1555*
sizeof(
data->cand)))) {
1557 "LBDNS failed to create private data structure");
1562 val,
sizeof(
val), 0));
1564(0,
"CONN_LBDNS_CHECK",
1565 val,
sizeof(
val), 0));
1570 val,
sizeof(
val), 0)) {
1572 "LBDNS cannot obtain domain name from registry");
1579 "LBDNS cannot figure out system domain name");
1590(
"LBDNS failed to store domain name \"%s\"",
domain));
1593 data->domlen = strlen(
data->domain);
1598 val,
sizeof(
val), 0)) {
1603 else if(!
isdigit((
unsigned char)(*
val)))
1608 port= strtoul(
val, &end, 0);
1609 if(errno || *end ||
port> 0xFFFF)
1612 port= NS_DEFAULTPORT;
1616 val,
sizeof(
val), 0)) {
1627(
"LBDNS using server @ %s",
val));
1629 data->port = (
unsignedshort)
port;
1633(
"LBDNS using domain = \"%s\"",
data->domain));
1659 static void*
volatiles_Once = 0
;
std::ofstream out("events_result.xml")
main entry point for tests
static const struct type types[]
#define SERV_MAXIMAL_RATE
#define SERV_DEFAULT_ALGO
char * SERV_WriteInfo(const SSERV_Info *info)
unsigned short TSERV_TypeOnly
Server type only, w/o specials.
int SERV_EqualInfo(const SSERV_Info *info1, const SSERV_Info *info2)
@ fSERV_Stateless
Stateless servers only.
size_t SOCK_HostPortToString(unsigned int host, unsigned short port, char *buf, size_t bufsize)
Print numeric string "host:port" into a buffer provided, not to exceed 'bufsize' bytes (including the...
const char * SOCK_gethostbyaddr(unsigned int addr, char *buf, size_t buflen)
Same as SOCK_gethostbyaddrEx(,,<current API data logging>)
unsigned int SOCK_gethostbyname(const char *hostname)
Same as SOCK_gethostbynameEx(,<current API data logging>)
int SOCK_ntoa(unsigned int addr, char *buf, size_t bufsize)
Convert IP address to a string in dotted notation.
ELOG_Level
Log severity level.
int ConnNetInfo_Boolean(const char *str)
unsigned int
A callback function used to compare two keys in a database.
if(yy_accept[yy_current_state])
const struct ncbi::grid::netcache::search::fields::SIZE size
#define LBSM_DEFAULT_RATE
#define SERVNSD_TXT_RR_PORT
#define LBSM_DEFAULT_TIME
const char * ConnNetInfo_GetValueInternal(const char *service, const char *param, char *value, size_t value_size, const char *def_value)
int NcbiIsEmptyIPv6(const TNCBI_IPv6Addr *addr)
Return non-zero if the address is empty (either as NULL or IPv6 or IPv4); return zero otherwise.
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...
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...
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...
static int dns_srv(SERV_ITER iter, const unsigned char *msg, const unsigned char *eom, const char *fqdn, unsigned short rdlen, const unsigned char *rdata)
static const unsigned char * x_VerifyReply(const char *fqdn, const unsigned char *msg, const unsigned char *eom, unsigned short count[3])
static const char * x_RcodeStr(unsigned short rcode, char *buf)
static const char * s_SysGetDomainName(char *domain, size_t domainsize)
static const char * x_ClassStr(ns_class aclass, char *buf)
static int x_UpdateHost(SERV_ITER iter, const char *fqdn, const TNCBI_IPv6Addr *addr)
static const SSERV_VTable kLbdnsOp
static int x_AddInfo(SERV_ITER iter, SSERV_Info *info)
#define LBDNS_INITIAL_ALLOC
static int unpack_rr(const unsigned char *msg, const unsigned char *eom, const unsigned char *ptr, ns_rr *rr, int qd, ELOG_Level level)
static const unsigned char * x_DumpMsg(const unsigned char *msg, const unsigned char *eom)
static void s_Close(SERV_ITER)
static int x_Resolve(SERV_ITER iter)
static const char * strherror(int err)
static int x_ResolveType(SERV_ITER iter, ns_type type)
static const char * x_OpcodeStr(unsigned short opcode, char *buf)
#define REG_CONN_LBDNS_DEBUG
#define SERVNSD_TXT_RR_PORT_LEN
static const unsigned char * x_ProcessReply(SERV_ITER iter, const struct SLBDNS_Data *data, const char *fqdn, ns_type type, const unsigned char *msg, const unsigned char *eom, const unsigned char *ptr, unsigned short count[3])
#define REG_CONN_LBDNS_PORT
static double x_RoundUp(double rate)
static const char * x_FlagsStr(const HEADER *hdr, char *buf)
static void s_Reset(SERV_ITER)
const SSERV_VTable * SERV_LBDNS_Open(SERV_ITER iter, SSERV_Info **info)
static const char * x_TypeStr(ns_type atype, char *buf)
#define REG_CONN_LBDNS_DOMAIN
static const char * x_CopyDomain(const char *domain)
static int x_NoDataReply(const char *fqdn, ns_type type, const unsigned char *msg, const unsigned char *eom)
static const char * dns_cname(unsigned int debug, const unsigned char *msg, const unsigned char *eom, const char *fqdn, unsigned short rdlen, const unsigned char *rdata)
static void x_UpdatePort(SERV_ITER iter, unsigned short port)
static const char * x_FormFQDN(char fqdn[NS_MAXCDNAME+1], const char *prefix, size_t pfxlen, ns_type type, const char *domain, size_t domlen)
static int s_Resolve(SERV_ITER iter)
static void x_Finalize(SERV_ITER iter)
#define REG_CONN_LBDNS_HOST
static void x_DumpRR(const ns_rr *rr, const char *part, unsigned short n)
static void x_BlankInfo(SSERV_Info *info, ESERV_Type type)
static SSERV_Info * s_GetNextInfo(SERV_ITER, HOST_INFO *)
static void x_DumpHdr(const HEADER *hdr, const unsigned short count[4])
static int x_CheckDomain(const char *domain)
static int same_domain(const char *a, const char *b)
static int skip_rr(const unsigned char *ptr, const unsigned char *eom, int qd)
static void dns_txt(SERV_ITER iter, const char *fqdn, unsigned short rdlen, const unsigned char *rdata)
static int dns_a(SERV_ITER iter, ns_type qtype, ns_type rtype, const char *fqdn, unsigned short rdlen, const unsigned char *rdata)
#define CORE_Once(once)
Return non-zero (true) if "*once" had a value of NULL, and set the value to non-NULL regardless (best...
#define CORE_LOG_ERRNO_X(subcode, level, error, message)
#define CORE_LOGF_X(subcode, level, fmt_args)
#define CORE_LOGF_ERRNO_X(subcode, level, error, fmt_args)
#define CORE_TRACEF(fmt_args)
#define CORE_TRACE(message)
#define CORE_LOGF(level, fmt_args)
#define CORE_LOG_X(subcode, level, message)
SSERV_Info * SERV_CopyInfoEx(const SSERV_Info *orig, const char *name)
const char * SERV_NameOfInfo(const SSERV_Info *info)
double r(size_t dimension_, const Int4 *score_, const double *prob_, double theta_)
static SLJIT_INLINE sljit_ins msg(sljit_gpr r, sljit_s32 d, sljit_gpr x, sljit_gpr b)
CCompressionStreamProcessor * s_Init(EInitType type, CCompressStream::EMethod method, ICompression::TFlags flags, ICompression::ELevel level)
voidp calloc(uInt items, uInt size)
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