chiark / gitweb /
src/: Support IPv6 addresses in `sortlist'.
[adns] / src / internal.h
index e4ec09ee00c1b2ac40126f9ddcccfc90cc657c95..4f4f87eb0c4ddebd4f7d5b0efea01fb2cf3d6f8b 100644 (file)
@@ -5,12 +5,11 @@
  * - comments regarding library data structures
  */
 /*
- *  This file is
- *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
- *
- *  It is part of adns, which is
- *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
- *    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
+ *  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
@@ -113,8 +112,24 @@ typedef struct {
   struct timeval now;
 } parseinfo;
 
+union gen_addr {
+  struct in_addr v4;
+  struct in6_addr v6;
+};
+
+typedef struct {
+  int af;
+  int width;
+  int delim;
+  void *(*sockaddr_to_inaddr)(struct sockaddr *sa);
+  void (*prefix_mask)(int len, union gen_addr *a);
+  int (*guess_len)(const union gen_addr *a);
+  int (*matchp)(const union gen_addr *addr,
+               const union gen_addr *base, const union gen_addr *mask);
+} afinfo;
+
 typedef struct typeinfo {
-  adns_rrtype type;
+  adns_rrtype typekey;
   const char *rrtname;
   const char *fmtname;
   int rrsz;
@@ -334,12 +349,17 @@ struct adns__state {
     struct in_addr addr;
   } servers[MAXSERVERS];
   struct sortlist {
-    struct in_addr base, mask;
+    const afinfo *ai;
+    union gen_addr base, mask;
   } sortlist[MAXSORTLIST];
   char **searchlist;
   unsigned short rand48xsubi[3];
 };
 
+/* From addrfam.c: */
+
+extern const afinfo adns__inet_afinfo, adns__inet6_afinfo;
+
 /* From setup.c: */
 
 int adns__setnonblock(adns_state ads, int fd); /* => errno value */
@@ -404,7 +424,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.
  */