X-Git-Url: https://git.distorted.org.uk/~mdw/adns/blobdiff_plain/828d89bd4196ad8ef825cdf2db26afe2eb797b69..551ff40f1e8eab858f07ea0c0d5217da70837751:/src/adns.h diff --git a/src/adns.h b/src/adns.h index afcb6b4..a87767a 100644 --- a/src/adns.h +++ b/src/adns.h @@ -39,6 +39,7 @@ typedef enum { adns_if_noserverwarn= 0x0004, /* do not warn to stderr about duff nameservers etc */ adns_if_debug= 0x0008, /* enable all output to stderr plus debug msgs */ adns_if_noautosys= 0x0010, /* do not make syscalls at every opportunity */ + adns_if_eintr= 0x0020, /* allow _wait and _synchronous to return EINTR */ } adns_initflags; typedef enum { @@ -132,14 +133,14 @@ typedef struct { struct sockaddr sa; struct sockaddr_in inet; } addr; -} adns_addr; +} adns_rr_addr; typedef struct { - char *dm; + char *host; adns_status astatus; int naddrs; /* temp fail => -1, perm fail => 0, s_ok => >0 */ - adns_addr *addrs; -} adns_rr_dmaddr; + adns_rr_addr *addrs; +} adns_rr_hostaddr; typedef struct { char *a, *b; @@ -147,8 +148,8 @@ typedef struct { typedef struct { int i; - adns_rr_dmaddr dmaddr; -} adns_rr_intdmaddr; + adns_rr_hostaddr ha; +} adns_rr_inthostaddr; typedef struct { /* Used both for mx_raw, in which case i is the preference and str the domain, @@ -173,15 +174,15 @@ typedef struct { union { void *untyped; unsigned char *bytes; - char *(*str); /* ns_raw, cname, ptr, ptr_raw */ - adns_rr_intstr *(*manyistr); /* txt (list of strings ends with i=-1, str=0) */ - adns_addr *addr; /* addr */ - struct in_addr *inaddr; /* a */ - adns_rr_dmaddr *dmaddr; /* ns */ - adns_rr_strpair *strpair; /* hinfo ??fixme, rp, rp_raw */ - adns_rr_intdmaddr *intdmaddr; /* mx */ - adns_rr_intstr *intstr; /* mx_raw */ - adns_rr_soa *soa; /* soa, soa_raw */ + char *(*str); /* ns_raw, cname, ptr, ptr_raw */ + adns_rr_intstr *(*manyistr); /* txt (list of strings ends with i=-1, str=0) */ + adns_rr_addr *addr; /* addr */ + struct in_addr *inaddr; /* a */ + adns_rr_hostaddr *hostaddr; /* ns */ + adns_rr_strpair *strpair; /* hinfo ??fixme, rp, rp_raw */ + adns_rr_inthostaddr *inthostaddr; /* mx */ + adns_rr_intstr *intstr; /* mx_raw */ + adns_rr_soa *soa; /* soa, soa_raw */ } rrs; } adns_answer; @@ -208,6 +209,7 @@ typedef struct { * If no (appropriate) requests are outstanding adns_query and adns_wait return ESRCH; */ +/* fixme: separate parsing from instantiation */ int adns_init(adns_state *newstate_r, adns_initflags flags, FILE *diagfile/*0=>stderr*/); int adns_synchronous(adns_state ads, @@ -215,7 +217,6 @@ int adns_synchronous(adns_state ads, adns_rrtype type, adns_queryflags flags, adns_answer **answer_r); -/* Will not return EINTR. */ /* NB: if you set adns_if_noautosys then _submit and _check do not * make any system calls; you must use adns_callback (possibly after @@ -238,7 +239,6 @@ int adns_wait(adns_state ads, adns_query *query_io, adns_answer **answer_r, void **context_r); -/* Might return EINTR - if so, try again */ void adns_cancel(adns_query query);