X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Finternal.h;h=2c5a073a7ea124ca4bfe02127f951be432807785;hb=705b9b159806e6e96839c81668f685a6576ea961;hp=4f4f87eb0c4ddebd4f7d5b0efea01fb2cf3d6f8b;hpb=9136cf0c3b0a026600a201975f9d21a1b5031763;p=adns.git diff --git a/src/internal.h b/src/internal.h index 4f4f87e..2c5a073 100644 --- a/src/internal.h +++ b/src/internal.h @@ -69,6 +69,10 @@ typedef unsigned char byte; #define DNS_CLASS_IN 1 #define DNS_INADDR_ARPA "in-addr", "arpa" +#define DNS_IP6_ARPA "ip6", "arpa" + +#define STRINGIFY(x) REALLY_STRINGIFY(x) +#define REALLY_STRINGIFY(x) #x #define MAX_POLLFDS ADNS_POLLFDS_RECOMMENDED @@ -121,13 +125,23 @@ typedef struct { int af; int width; int delim; + int nrevcomp; + int revcompwd; + adns_rrtype rrtype; void *(*sockaddr_to_inaddr)(struct sockaddr *sa); + int (*sockaddr_equalp)(const struct sockaddr *sa, + const struct sockaddr *sb); void (*prefix_mask)(int len, union gen_addr *a); int (*guess_len)(const union gen_addr *a); int (*matchp)(const union gen_addr *addr, const union gen_addr *base, const union gen_addr *mask); + int (*rev_parsecomp)(const char *p, size_t n); + void (*rev_mkaddr)(union gen_addr *addr, const byte *ipv); + char *(*rev_mkname)(const struct sockaddr *sa, char *buf); } afinfo; +struct afinfo_addr { const afinfo *ai; union gen_addr addr; }; + typedef struct typeinfo { adns_rrtype typekey; const char *rrtname; @@ -207,7 +221,7 @@ typedef struct { void *ext; void (*callback)(adns_query parent, adns_query child); union { - adns_rr_addr ptr_parent_addr; + struct afinfo_addr ptr_parent_addr; adns_rr_hostaddr *hostaddr; } info; } qcontext; @@ -322,6 +336,8 @@ struct adns__query { struct query_queue { adns_query head, tail; }; +#define MAXUDP 2 + struct adns__state { adns_initflags iflags; adns_logcallbackfn *logfn; @@ -329,7 +345,9 @@ struct adns__state { int configerrno; struct query_queue udpw, tcpw, childw, output; adns_query forallnext; - int nextid, udpsocket, tcpsocket; + int nextid, tcpsocket; + struct udpsocket { const afinfo *ai; int fd; } udpsocket[MAXUDP]; + int nudp; vbuf tcpsend, tcprecv; int nservers, nsortlist, nsearchlist, searchndots, tcpserver, tcprecv_skip; enum adns__tcpstate { @@ -345,9 +363,7 @@ struct adns__state { struct sigaction stdsigpipe; sigset_t stdsigmask; struct pollfd pollfds_buf[MAX_POLLFDS]; - struct server { - struct in_addr addr; - } servers[MAXSERVERS]; + adns_rr_addr servers[MAXSERVERS]; struct sortlist { const afinfo *ai; union gen_addr base, mask; @@ -366,6 +382,7 @@ int adns__setnonblock(adns_state ads, int fd); /* => errno value */ /* From general.c: */ +const char *adns__sockaddr_ntoa(struct sockaddr *sa, size_t n); void adns__vlprintf(adns_state ads, const char *fmt, va_list al); void adns__lprintf(adns_state ads, const char *fmt, ...) PRINTFFORMAT(2,3);