X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=adns.git;a=blobdiff_plain;f=src%2Finternal.h;h=512a2b11e4e4511b61e946482fe823b7886ac089;hp=55fb2ad057f6169875d40bddb4abd7c9b7ba59a5;hb=0ea82d760348fe9153dfd2adc10335a50f59628b;hpb=a889f4bef2235d4358c39113a745551773f2450b diff --git a/src/internal.h b/src/internal.h index 55fb2ad..512a2b1 100644 --- a/src/internal.h +++ b/src/internal.h @@ -5,12 +5,11 @@ * - comments regarding library data structures */ /* - * This file is - * Copyright (C) 1997-2000 Ian Jackson - * - * It is part of adns, which is - * Copyright (C) 1997-2000 Ian Jackson - * Copyright (C) 1999-2000 Tony Finch + * This file is part of adns, which is + * Copyright (C) 1997-2000,2003,2006 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 program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -90,15 +89,6 @@ typedef enum { /* Shared data structures */ -typedef union { - adns_status status; - char *cp; - adns_rrtype type; - int i; - struct in_addr ia; - unsigned long ul; -} rr_align; - typedef struct { int used, avail; byte *buf; @@ -114,7 +104,7 @@ typedef struct { } parseinfo; typedef struct typeinfo { - adns_rrtype type; + adns_rrtype typekey; const char *rrtname; const char *fmtname; int rrsz; @@ -159,6 +149,12 @@ typedef struct typeinfo { * string. On successful return, label_r[] and *ll_io are filled in * and *p_io points to *pe or just after the label-ending `.'. */ + 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. + */ } typeinfo; adns_status adns__qdpl_normal(adns_state ads, @@ -185,10 +181,15 @@ union maxalign { typedef struct { void *ext; void (*callback)(adns_query parent, adns_query child); + + union { + adns_rr_addr ptr_addr; + } tinfo; /* type-specific state for the query itself: zero-init if you + * don't know better. */ + union { - adns_rr_addr ptr_parent_addr; adns_rr_hostaddr *hostaddr; - } info; + } pinfo; /* state for use by parent's callback function */ } qcontext; struct adns__query { @@ -331,6 +332,7 @@ struct adns__state { struct in_addr base, mask; } sortlist[MAXSORTLIST]; char **searchlist; + unsigned short rand48xsubi[3]; }; /* From setup.c: */ @@ -397,7 +399,8 @@ void adns__sigpipe_unprotect(adns_state); adns_status adns__mkquery(adns_state ads, vbuf *vb, int *id_r, const char *owner, int ol, - const typeinfo *typei, adns_queryflags flags); + const typeinfo *typei, adns_rrtype type, + adns_queryflags flags); /* Assembles a query packet in vb. A new id is allocated and returned. */