+
+ adns_status (*checklabel)(adns_state ads, adns_queryflags flags,
+ union checklabel_state *css, qcontext *ctx,
+ int labnum, const char *label, int lablen);
+ /* Check a label from the query domain string. The label is not
+ * necessarily null-terminated. The query has not yet been constructed,
+ * and this hook can refuse its submission by returning a nonzero status.
+ * State can be stored in *css between calls, and useful information can be
+ * stashed in ctx->tinfo, to be stored with the query (e.g., it will be
+ * available to the parse hook). This hook can detect a first call because
+ * labnum is zero, and a final call because lablen is zero.
+ */
+
+ void (*postsort)(adns_state ads, void *array, int nrrs,
+ const struct typeinfo *typei);
+ /* Called immediately after the RRs have been sorted, and may rearrange
+ * them. (This is really for the benefit of SRV's bizarre weighting
+ * stuff.) May be 0 to mean nothing needs to be done.
+ */
+
+ int (*getrrsz)(adns_rrtype type);
+ /* Return the output resource-record element size; if this is null, then
+ * the rrsz member can be used.
+ */
+
+ void (*query_send)(adns_query qu, struct timeval now);
+ /* Send the query to nameservers, and hook it into the appropriate queue.
+ * Normal behaviour is to call adns__query_send, but this can be overridden
+ * for special effects.
+ */