* - comments regarding library data structures
*/
/*
- * This file is part of adns, which is
- * Copyright (C) 1997-2000,2003,2006,2014 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
/* 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
typedef enum {
cc_user,
- cc_entex,
+ cc_enter,
+ cc_exit,
cc_freq
} consistency_checks;
* 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.
void *p;
void (*fp)(void);
union maxalign *up;
-} data;
+};
struct adns__query {
adns_state ads;
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;
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;
adns_sockaddr base, mask;
} sortlist[MAXSORTLIST];
char **searchlist;
+ unsigned config_report_unknown:1;
unsigned short rand48xsubi[3];
};
* 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,
* 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: */
* 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! */
(( ((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, \