#include <stdio.h>
-#include "tables.h"
-#include "hbytes.h"
+#include <adns.h>
+
+#include "adnstcl.h"
/*---------- important types and forward declarations ----------*/
static int oifn_reverse_any(Tcl_Interp *ip, const OptionInfo *oi,
Tcl_Obj *arg, OptionParse *op) {
- return pat_string(ip,arg,&op->reverseany);
+ return cht_pat_string(ip,arg,&op->reverseany);
}
#define OIFA1(t,f,r) { "-" #f, oifn_fa, 0, adns_##t##_##f, r }
objc--; objv++;
for (;;) {
if (!objc--) break;
- rc= pat_enum(ip, *objv++, &oi_v, opttable, sizeof(OptionInfo),
+ rc= cht_pat_enum(ip, *objv++, &oi_v, opttable, sizeof(OptionInfo),
"query or resolver option");
if (rc) return rc;
oi= oi_v;
if (oi->takesarg) {
if (!objc--) {
- setstringresult(ip,"missing value for option");
+ cht_setstringresult(ip,"missing value for option");
return TCL_ERROR;
}
arg= *objv++;
int rc;
const char *str;
- rc= pat_string(ip,arg,&str); if (rc) return rc;
+ rc= cht_pat_string(ip,arg,&str); if (rc) return rc;
if (!strcmp(str,"stderr")) op->errfile= stderr;
else if (!strcmp(str,"stdout")) op->errfile= stdout;
- else return staticerr(ip,"-errfile argument must be stderr or stdout",0);
+ else return cht_staticerr(ip,"-errfile argument must be stderr or stdout",0);
op->aflags &= ~adns_if_noerrprint;
op->errcallback= 0;
static int oifn_config(Tcl_Interp *ip, const OptionInfo *oi,
Tcl_Obj *arg, OptionParse *op) {
- return pat_string(ip,arg,&op->config_string);
+ return cht_pat_string(ip,arg,&op->config_string);
}
static const OptionInfo resolver_optioninfos[]= {
};
static void adnslogfn_flushmessage(Resolver *res) {
- scriptinv_invoke(&res->errcallback, 1, &res->errstring_accum);
+ cht_scriptinv_invoke(&res->errcallback, 1, &res->errstring_accum);
Tcl_SetObjLength(res->errstring_accum, 0);
}
l= vasprintf(&str,fmt,al);
if (l<0) {
- posixerr(res->interp,errno,"construct adns log callback string");
+ cht_posixerr(res->interp,errno,"construct adns log callback string");
Tcl_BackgroundError(res->interp);
}
res->ads= 0;
}
asynch_cancelhandlers(res);
- scriptinv_cancel(&res->errcallback);
+ cht_scriptinv_cancel(&res->errcallback);
Tcl_EventuallyFree(res, Tcl_Free);
}
destroy_resolver(ip,resolver_v);
}
-int do_adns_destroy_resolver(ClientData cd, Tcl_Interp *ip, void *res_v) {
- tabledataid_disposing(ip,res_v,&adnstcl_resolvers);
+int cht_do_adns_destroy_resolver(ClientData cd, Tcl_Interp *ip, void *res_v) {
+ cht_tabledataid_disposing(ip,res_v,&adnstcl_resolvers);
destroy_resolver(ip,res_v);
return TCL_OK;
}
res->timertoken= 0;
res->maxfd= 0;
for (i=0; i<3; i++) FD_ZERO(&res->handling[i]);
- scriptinv_init(&res->errcallback);
+ cht_scriptinv_init(&res->errcallback);
res->errstring_accum= 0;
if (op->errcallback)
- scriptinv_set(&res->errcallback, ip, op->errcallback, 0);
+ cht_scriptinv_set(&res->errcallback, ip, op->errcallback, 0);
ec= adns_init_logfn(&res->ads,
op->aflags | adns_if_noautosys,
return TCL_OK;
}
-const IdDataSpec adnstcl_resolvers= {
+static const IdDataSpec adnstcl_resolvers= {
"adns-res", "adns-resolvers-table", destroy_resolver_idtabcb
};
const IdDataSpec adnstcl_queries= {
"adns", "adns-query-table", destroy_query_idtabcb
};
+
+/*---------- main hooks for tcl ----------*/
+
+int do_toplevel_adns(ClientData cd, Tcl_Interp *ip,
+ const Adns_SubCommand *subcmd,
+ int objc, Tcl_Obj *const *objv) {
+ return subcmd->func(0,ip,objc,objv);
+}
+
+extern int Adns_Init(Tcl_Interp *ip); /* called by Tcl's "load" */
+int Adns_Init(
+ Tcl_RegisterObjType(&blockcipherkey_type);
+ Tcl_RegisterObjType(&sockaddr_type);
+ Tcl_RegisterObjType(&tabledataid_nearlytype);
+ Tcl_RegisterObjType(&ulong_type);
+ Tcl_RegisterObjType(&addrmap_type);