X-Git-Url: https://git.distorted.org.uk/~mdw/adns/blobdiff_plain/86ea5e62c7d3bc1e17715811b2047b7d1b06862d..3b375d76e45c11a4c7cbcb9fcc3ca76d7e2148a6:/src/adns.h?ds=sidebyside diff --git a/src/adns.h b/src/adns.h index f41bb3f..bc7bf24 100644 --- a/src/adns.h +++ b/src/adns.h @@ -51,7 +51,7 @@ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * - * $Id: adns.h,v 1.87 2006/01/07 17:08:04 ian Exp $ + * $Id: adns.h,v 1.94 2006/04/07 00:25:14 ian Exp $ */ #ifndef ADNS_H_INCLUDED @@ -75,7 +75,8 @@ extern "C" { /* I really dislike this - iwj. */ typedef struct adns__state *adns_state; typedef struct adns__query *adns_query; -typedef enum { +typedef enum { /* In general, or together the desired flags: */ + adns_if_none= 0x0000,/* no flags. nicer than 0 for some compilers */ adns_if_noenv= 0x0001,/* do not look at environment */ adns_if_noerrprint= 0x0002,/* never print to stderr (_debug overrides) */ adns_if_noserverwarn=0x0004,/* do not warn to stderr about duff servers etc */ @@ -88,7 +89,8 @@ typedef enum { adns_if_checkc_freq= 0x0300 /* consistency checks very frequently (slow!) */ } adns_initflags; -typedef enum { +typedef enum { /* In general, or together the desired flags: */ + adns_qf_none= 0x00000000,/* no flags */ adns_qf_search= 0x00000001,/* use the searchlist */ adns_qf_usevc= 0x00000002,/* use a virtual circuit (TCP conn) */ adns_qf_owner= 0x00000004,/* fill in the owner field in the answer */ @@ -102,10 +104,28 @@ typedef enum { } adns_queryflags; typedef enum { - adns__rrt_typemask=0x0ffff, - adns__qtf_deref= 0x10000, /* dereference domains; perhaps get extra data */ - adns__qtf_mail822= 0x20000, /* return mailboxes in RFC822 rcpt field fmt */ - + adns_rrt_typemask= 0x0ffff, + adns__qtf_deref= 0x10000,/* dereference domains; perhaps get extra data */ + adns__qtf_mail822= 0x20000,/* return mailboxes in RFC822 rcpt field fmt */ + + adns_r_unknown= 0x40000, + /* To use this, ask for records of type |adns_r_unknown. + * adns will not process the RDATA - you'll get adns_rr_byteblocks, + * where the int is the length and the unsigned char* points to the + * data. String representation of the RR data (by adns_rrinfo) is as in + * RFC3597. adns_rr_info will not return the type name in *rrtname_r + * (due to memory management problems); *fmtname_r will be set to + * "unknown". + * + * Do not specify adns_r_unknown along with a known RR type which + * requires domain name uncompression (see RFC3597 s4); domain names + * will not be uncompressed and the resulting data would be useless. + * Asking for meta-RR types via adns_r_unknown will not work properly + * either and may make adns complain about server misbehaviour, so don't + * do that. + * + * Don't forget adns_qf_quoteok if that's what you want. */ + adns_r_none= 0, adns_r_a= 1, @@ -130,6 +150,12 @@ typedef enum { adns_r_rp_raw= 17, adns_r_rp= adns_r_rp_raw|adns__qtf_mail822, + + /* For SRV records, query domain without _qf_quoteok_query must look + * as expected from SRV RFC with hostname-like Name. _With_ + * _quoteok_query, any query domain is allowed. */ + adns_r_srv_raw= 33, + adns_r_srv= adns_r_srv_raw|adns__qtf_deref, adns_r_addr= adns_r_a|adns__qtf_deref @@ -300,6 +326,21 @@ typedef struct { } adns_rr_soa; typedef struct { + int priority, weight, port; + char *host; +} adns_rr_srvraw; + +typedef struct { + int priority, weight, port; + adns_rr_hostaddr ha; +} adns_rr_srvha; + +typedef struct { + int len; + unsigned char *data; +} adns_rr_byteblock; + +typedef struct { adns_status status; char *cname; /* always NULL if query was for CNAME records */ char *owner; /* only set if req'd in query flags; maybe 0 on error anyway */ @@ -319,6 +360,9 @@ typedef struct { adns_rr_inthostaddr *inthostaddr;/* mx */ adns_rr_intstr *intstr; /* mx_raw */ adns_rr_soa *soa; /* soa, soa_raw */ + adns_rr_srvraw *srvraw; /* srv_raw */ + adns_rr_srvha *srvha;/* srv */ + adns_rr_byteblock *byteblock; /* ...|unknown */ } rrs; } adns_answer; @@ -338,7 +382,8 @@ typedef struct { * * For _init, _init_strcfg, _submit and _synchronous, system errors * (eg, failure to create sockets, malloc failure, etc.) return errno - * values. + * values. EINVAL from _init et al means the configuration file + * is erroneous and cannot be parsed. * * For _wait and _check failures are reported in the answer * structure, and only 0, ESRCH or (for _check) EAGAIN is