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 */
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 */
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__qtf_deref= 0x10000,/* dereference domains; perhaps get extra data */
+ adns__qtf_mail822= 0x20000,/* return mailboxes in RFC822 rcpt field fmt */
adns_r_none= 0,
adns_r_soa_raw= 6,
adns_r_soa= adns_r_soa_raw|adns__qtf_mail822,
- adns_r_ptr_raw= 12,
+ adns_r_ptr_raw= 12, /* do not mind PTR with wrong or missing A */
adns_r_ptr= adns_r_ptr_raw|adns__qtf_deref,
adns_r_hinfo= 13,
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
} 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 {
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 */
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 */
} rrs;
} adns_answer;
*
* 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
typedef void adns_logcallbackfn(adns_state ads, void *logfndata,
const char *fmt, va_list al);
+ /* Will be called perhaps several times for each message; when the
+ * message is complete, the string implied by fmt and al will end in
+ * a newline. Log messages start with `adns debug:' or `adns
+ * warning:' or `adns:' (for errors), or `adns debug [PID]:'
+ * etc. if adns_if_logpid is set. */
int adns_init_logfn(adns_state *newstate_r, adns_initflags flags,
const char *configtext /*0=>use default config files*/,