X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=chiark-tcl.git;a=blobdiff_plain;f=adns%2Fadns.c;h=d0ee2955b94e09e26c36acde087faf81212173fd;hp=a21de019793630c466524fbcce689e4f22d4fc03;hb=HEAD;hpb=d6e9d2174a59de04a69629c2d22f612cff490b43
diff --git a/adns/adns.c b/adns/adns.c
index a21de01..39b4efe 100644
--- a/adns/adns.c
+++ b/adns/adns.c
@@ -60,7 +60,7 @@
/*
* adns.c - adns binding for Tcl
- * Copyright 2006 Ian Jackson
+ * Copyright 2006-2012 Ian Jackson
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
@@ -73,13 +73,13 @@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301, USA.
+ * along with this library; if not, see .
*/
#define _GNU_SOURCE
+#define ADNS_FEATURE_MANYAF 1
+
#include
#include
@@ -198,6 +198,14 @@ struct Resolver {
Tcl_Obj *errstring_accum;
};
+struct Query {
+ int ix; /* first! */
+ Resolver *res;
+ adns_query aqu;
+ ScriptToInvoke on_yes, on_no, on_fail;
+ Tcl_Obj *xargs;
+};
+
/* The default resolver is recorded using Tcl_SetAssocData with key
* ASSOC_DEFAULTRES to record the Resolver*. If it was explicitly
* created with `adns new-resolver' then ix will be >=0, and the
@@ -284,6 +292,7 @@ static Resolver *default_resolver(Tcl_Interp *ip) {
static void destroy_resolver(Tcl_Interp *ip, Resolver *res) {
void *query_v;
+ Query *query;
int logstring_len;
char *rstr;
adns_query aqu;
@@ -305,8 +314,9 @@ static void destroy_resolver(Tcl_Interp *ip, Resolver *res) {
adns_forallqueries_begin(res->ads);
aqu= adns_forallqueries_next(res->ads, &query_v);
if (!aqu) break;
- assert(query_v->aqu == aqu);
- query_v->aqu= 0; /* avoid disrupting the adns query list */
+ query= query_v;
+ assert(query->aqu == aqu);
+ query->aqu= 0; /* avoid disrupting the adns query list */
asynch_query_dispose(ip, query_v);
}
adns_finish(res->ads);
@@ -409,6 +419,7 @@ const IdDataSpec cht_adnstcl_resolvers= {
const AdnsTclRRTypeInfo cht_adnstclrrtypeinfo_entries[]= {
RRTYPE_EXACTLY(a),
+ RRTYPE_EXACTLY(aaaa),
RRTYPE_EXACTLY(cname),
RRTYPE_EXACTLY(hinfo),
RRTYPE_EXACTLY(addr),
@@ -486,7 +497,7 @@ static int query_submit(Tcl_Interp *ip,
if (op.reverseany || (op.sflags & oisf_reverse)) {
const int *af;
- for (af=aftry; af < af + sizeof(af)/sizeof(*af); af++) {
+ for (af=aftry; af < af + sizeof(aftry)/sizeof(*aftry); af++) {
memset(&sa,0,sizeof(sa));
sa.sa_family= *af;
r= inet_pton(*af,domain,&sa);
@@ -616,14 +627,6 @@ int cht_do_adns_synch(ClientData cd, Tcl_Interp *ip,
/*---------- asynchronous query handling ----------*/
-struct Query {
- int ix; /* first! */
- Resolver *res;
- adns_query aqu;
- ScriptToInvoke on_yes, on_no, on_fail;
- Tcl_Obj *xargs;
-};
-
static void asynch_check_now(Resolver *res);
static void asynch_timerhandler(void *res_v) {