X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Finternal.h;h=c03a77b2f69199986e3cc32a70b94cce1b2126ef;hb=HEAD;hp=a7f868d26aef40e5017050e486197303da2d0a21;hpb=e128c3551e8c178c181b212b990aaad613e489b9;p=adns.git diff --git a/src/internal.h b/src/internal.h index a7f868d..083f429 100644 --- a/src/internal.h +++ b/src/internal.h @@ -5,15 +5,12 @@ * - comments regarding library data structures */ /* - * This file is part of adns, which is - * Copyright (C) 1997-2000,2003,2006 Ian Jackson - * Copyright (C) 1999-2000,2003,2006 Tony Finch - * Copyright (C) 1991 Massachusetts Institute of Technology - * (See the file INSTALL for full details.) + * This file is part of adns, which is Copyright Ian Jackson + * and contributors (see the file INSTALL for full details). * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) + * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, @@ -22,8 +19,7 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * along with this program; if not, write to the Free Software Foundation. */ #ifndef ADNS_INTERNAL_H_INCLUDED @@ -53,7 +49,7 @@ typedef unsigned char byte; /* Configuration and constants */ -#define MAXSERVERS 5 +#define MAXSERVERS 5 /* do not increase beyond no. of bits in `unsigned'! */ #define MAXSORTLIST 15 #define UDPMAXRETRIES 15 #define UDPRETRYMS 2000 @@ -95,7 +91,8 @@ typedef unsigned char byte; typedef enum { cc_user, - cc_entex, + cc_enter, + cc_exit, cc_freq } consistency_checks; @@ -170,7 +167,7 @@ typedef struct typeinfo { * Previously, used alloc_interim, now use alloc_final. */ - adns_status (*convstring)(vbuf *vb, const void *data); + adns_status (*convstring)(vbuf *vb, adns_rrtype, const void *data); /* Converts the RR data to a string representation in vbuf. * vbuf will be appended to (it must have been initialised), * and will not be null-terminated by convstring. @@ -246,7 +243,7 @@ union maxalign { void *p; void (*fp)(void); union maxalign *up; -} data; +}; struct adns__query { adns_state ads; @@ -297,7 +294,8 @@ struct adns__query { int id, flags, retries; int udpnextserver; unsigned long udpsent; /* bitmap indexed by server */ - struct timeval timeout; + int timeout_ms; + struct timeval timeout_started; time_t expires; /* Earliest expiry time of any record we used. */ qcontext ctx; @@ -371,9 +369,10 @@ struct adns__state { int configerrno; struct query_queue udpw, tcpw, childw, output, intdone; adns_query forallnext; - int nextid, tcpsocket; - struct udpsocket { int af; int fd; } udpsocket[MAXUDP]; - int nudp; + unsigned nextid; + int tcpsocket; + struct udpsocket { int af; int fd; } udpsockets[MAXUDP]; + int nudpsockets; vbuf tcpsend, tcprecv; int nservers, nsortlist, nsearchlist, searchndots, tcpserver, tcprecv_skip; enum adns__tcpstate { @@ -394,6 +393,7 @@ struct adns__state { adns_sockaddr base, mask; } sortlist[MAXSORTLIST]; char **searchlist; + unsigned config_report_unknown:1; unsigned short rand48xsubi[3]; }; @@ -450,8 +450,9 @@ extern const void *adns__sockaddr_addr(const struct sockaddr *sa); */ char *adns__sockaddr_ntoa(const struct sockaddr *sa, char *buf); -/* Convert sa to a string, and write it to buf, which must be at least - * ADNS_ADDR2TEXT_BUFLEN bytes long (unchecked). Return buf; can't fail. +/* Converts sa to a string, and writes it to buf, which must be at + * least ADNS_ADDR2TEXT_BUFLEN bytes long (unchecked). Returns buf; + * can't fail. */ extern int adns__make_reverse_domain(const struct sockaddr *sa, @@ -717,6 +718,8 @@ void adns__returning(adns_state ads, adns_query qu); * external-faciing functions which call adns__returning should * normally be avoided in internal code. */ +void adns__intdone_process(adns_state ads); + /* From reply.c: */ void adns__procdgram(adns_state ads, const byte *dgram, int len, @@ -864,8 +867,6 @@ void adns__update_expires(adns_query qu, unsigned long ttl, * now + ttl. */ -int vbuf__append_quoted1035(vbuf *vb, const byte *buf, int len); - bool adns__labels_equal(const byte *a, int al, const byte *b, int bl); /* From event.c: */ @@ -881,6 +882,17 @@ void adns__autosys(adns_state ads, struct timeval now); * lest we end up in recursive descent ! */ +static inline void +adns__timeout_set(adns_query qu, struct timeval now, long ms) + { qu->timeout_ms= ms; qu->timeout_started= now; } + +static inline void +adns__timeout_clear(adns_query qu) + { qu->timeout_ms= 0; timerclear(&qu->timeout_started); } + + +int adns__gettimeofday(adns_state ads, struct timeval *tv_buf); + void adns__must_gettimeofday(adns_state ads, const struct timeval **now_io, struct timeval *tv_buf); /* Call with care - might reentrantly cause queries to be completed! */ @@ -934,7 +946,7 @@ static inline int errno_resources(int e) { return e==ENOMEM || e==ENOBUFS; } (( ((sz)+sizeof(union maxalign)-1) / sizeof(union maxalign) ) \ * sizeof(union maxalign) ) -#define GETIL_B(cb) (((dgram)[(cb)++]) & 0x0ff) +#define GETIL_B(cb) (((dgram)[(cb)++]) & 0x0ffu) #define GET_B(cb,tv) ((tv)= GETIL_B((cb))) #define GET_W(cb,tv) ((tv)=0,(tv)|=(GETIL_B((cb))<<8), (tv)|=GETIL_B(cb), (tv)) #define GET_L(cb,tv) ( (tv)=0, \