X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Finternal.h;h=c03a77b2f69199986e3cc32a70b94cce1b2126ef;hb=HEAD;hp=34cea896a25710aae66319e303c6ca90ef064c9d;hpb=7f8bbe29436e29cc2683955d642f79a10d62f67d;p=adns.git diff --git a/src/internal.h b/src/internal.h index 34cea89..083f429 100644 --- a/src/internal.h +++ b/src/internal.h @@ -5,11 +5,8 @@ * - 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 @@ -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,7 +369,8 @@ struct adns__state { int configerrno; struct query_queue udpw, tcpw, childw, output, intdone; adns_query forallnext; - int nextid, tcpsocket; + unsigned nextid; + int tcpsocket; struct udpsocket { int af; int fd; } udpsockets[MAXUDP]; int nudpsockets; vbuf tcpsend, tcprecv; @@ -394,6 +393,7 @@ struct adns__state { adns_sockaddr base, mask; } sortlist[MAXSORTLIST]; char **searchlist; + unsigned config_report_unknown:1; unsigned short rand48xsubi[3]; }; @@ -718,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, @@ -865,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: */ @@ -882,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! */ @@ -935,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, \