mirror of
https://github.com/NLnetLabs/unbound.git
synced 2025-12-20 23:00:56 -05:00
remove done and supers module interface calls.
git-svn-id: file:///svn/unbound/trunk@474 be551aaa-1e26-0410-a405-d3ace91eadb9
This commit is contained in:
parent
c3f6bcb89a
commit
630d9dbc94
7 changed files with 18 additions and 73 deletions
|
|
@ -429,6 +429,8 @@ if test x_$withval != x_no; then
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# check for library used by libevent after 1.3c
|
||||||
|
AC_CHECK_LIB(rt, clock_gettime)
|
||||||
# check for libevent
|
# check for libevent
|
||||||
AC_ARG_WITH(libevent, AC_HELP_STRING([--with-libevent=pathname],
|
AC_ARG_WITH(libevent, AC_HELP_STRING([--with-libevent=pathname],
|
||||||
[set path to libevent (will check /usr/local /usr/lib /usr/pkg /usr/sfw /usr)]),
|
[set path to libevent (will check /usr/local /usr/lib /usr/pkg /usr/sfw /usr)]),
|
||||||
|
|
@ -482,7 +484,6 @@ fi
|
||||||
# check to see if libraries are needed for these functions.
|
# check to see if libraries are needed for these functions.
|
||||||
AC_CHECK_LIB(socket, socket)
|
AC_CHECK_LIB(socket, socket)
|
||||||
AC_CHECK_LIB(nsl, inet_pton)
|
AC_CHECK_LIB(nsl, inet_pton)
|
||||||
AC_CHECK_LIB(rt, clock_gettime)
|
|
||||||
|
|
||||||
AC_FUNC_CHOWN
|
AC_FUNC_CHOWN
|
||||||
AC_FUNC_FORK
|
AC_FUNC_FORK
|
||||||
|
|
|
||||||
|
|
@ -711,8 +711,6 @@ worker_init(struct worker* worker, struct config_file *cfg,
|
||||||
worker->env.detach_subs = &mesh_detach_subs;
|
worker->env.detach_subs = &mesh_detach_subs;
|
||||||
worker->env.attach_sub = &mesh_attach_sub;
|
worker->env.attach_sub = &mesh_attach_sub;
|
||||||
worker->env.kill_sub = &mesh_state_delete;
|
worker->env.kill_sub = &mesh_state_delete;
|
||||||
worker->env.query_done = &mesh_query_done;
|
|
||||||
worker->env.walk_supers = &mesh_walk_supers;
|
|
||||||
worker->env.detect_cycle = &mesh_detect_cycle;
|
worker->env.detect_cycle = &mesh_detect_cycle;
|
||||||
if(!worker->env.mesh) {
|
if(!worker->env.mesh) {
|
||||||
worker_delete(worker);
|
worker_delete(worker);
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
2 August 2007: Wouter
|
2 August 2007: Wouter
|
||||||
- configure change for latest libevent trunk version (needs -lrt).
|
- configure change for latest libevent trunk version (needs -lrt).
|
||||||
|
- query_done and walk_supers are moved out of module interface.
|
||||||
|
|
||||||
1 August 2007: Wouter
|
1 August 2007: Wouter
|
||||||
- set version to 0.5
|
- set version to 0.5
|
||||||
|
|
|
||||||
|
|
@ -217,10 +217,6 @@ error_response(struct module_qstate* qstate, int id, int rcode)
|
||||||
ldns_lookup_by_id(ldns_rcodes, rcode)->name:"??");
|
ldns_lookup_by_id(ldns_rcodes, rcode)->name:"??");
|
||||||
qstate->return_rcode = rcode;
|
qstate->return_rcode = rcode;
|
||||||
qstate->return_msg = NULL;
|
qstate->return_msg = NULL;
|
||||||
/* tell clients that we failed */
|
|
||||||
(*qstate->env->query_done)(qstate, rcode, NULL);
|
|
||||||
/* tell our parents that we failed */
|
|
||||||
(*qstate->env->walk_supers)(qstate, id, NULL);
|
|
||||||
qstate->ext_state[id] = module_finished;
|
qstate->ext_state[id] = module_finished;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
@ -1246,12 +1242,6 @@ processPrimeResponse(struct module_qstate* qstate, int id)
|
||||||
|
|
||||||
/* This event is finished. */
|
/* This event is finished. */
|
||||||
qstate->ext_state[id] = module_finished;
|
qstate->ext_state[id] = module_finished;
|
||||||
|
|
||||||
/* there should be no outside clients subscribed tell them to
|
|
||||||
* bugger off (and retry) */
|
|
||||||
(*qstate->env->query_done)(qstate, LDNS_RCODE_SERVFAIL, NULL);
|
|
||||||
/* tell interested supers that priming is done */
|
|
||||||
(*qstate->env->walk_supers)(qstate, id, NULL);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1375,10 +1365,6 @@ processFinished(struct module_qstate* qstate, struct iter_qstate* iq,
|
||||||
}
|
}
|
||||||
qstate->return_rcode = LDNS_RCODE_NOERROR;
|
qstate->return_rcode = LDNS_RCODE_NOERROR;
|
||||||
qstate->return_msg = iq->response;
|
qstate->return_msg = iq->response;
|
||||||
(*qstate->env->query_done)(qstate, LDNS_RCODE_NOERROR,
|
|
||||||
iq->response->rep);
|
|
||||||
(*qstate->env->walk_supers)(qstate, id, NULL);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,7 @@
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "services/mesh.h"
|
#include "services/mesh.h"
|
||||||
#include "services/outbound_list.h"
|
#include "services/outbound_list.h"
|
||||||
|
#include "services/cache/dns.h"
|
||||||
#include "util/log.h"
|
#include "util/log.h"
|
||||||
#include "util/net_help.h"
|
#include "util/net_help.h"
|
||||||
#include "util/module.h"
|
#include "util/module.h"
|
||||||
|
|
@ -211,7 +212,6 @@ mesh_state_create(struct module_env* env, struct query_info* qinfo,
|
||||||
mstate->run_node = *RBTREE_NULL;
|
mstate->run_node = *RBTREE_NULL;
|
||||||
mstate->node.key = mstate;
|
mstate->node.key = mstate;
|
||||||
mstate->run_node.key = mstate;
|
mstate->run_node.key = mstate;
|
||||||
mstate->debug_flags = 0;
|
|
||||||
mstate->reply_list = NULL;
|
mstate->reply_list = NULL;
|
||||||
rbtree_init(&mstate->super_set, &mesh_state_ref_compare);
|
rbtree_init(&mstate->super_set, &mesh_state_ref_compare);
|
||||||
rbtree_init(&mstate->sub_set, &mesh_state_ref_compare);
|
rbtree_init(&mstate->sub_set, &mesh_state_ref_compare);
|
||||||
|
|
@ -468,22 +468,16 @@ void mesh_query_done(struct module_qstate* qstate, int rcode,
|
||||||
{
|
{
|
||||||
struct mesh_state* m = qstate->mesh_info;
|
struct mesh_state* m = qstate->mesh_info;
|
||||||
struct mesh_reply* r;
|
struct mesh_reply* r;
|
||||||
log_assert(!(m->debug_flags&1)); /* not twice! */
|
|
||||||
m->debug_flags |= 1;
|
|
||||||
for(r = m->reply_list; r; r = r->next) {
|
for(r = m->reply_list; r; r = r->next) {
|
||||||
mesh_send_reply(m, rcode, rep, r);
|
mesh_send_reply(m, rcode, rep, r);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void mesh_walk_supers(struct module_qstate* qstate, int id,
|
void mesh_walk_supers(struct module_qstate* qstate, int id)
|
||||||
void (*cb)(struct module_qstate*, int, struct module_qstate*))
|
|
||||||
{
|
{
|
||||||
struct mesh_state* m = qstate->mesh_info;
|
struct mesh_state* m = qstate->mesh_info;
|
||||||
struct mesh_area* mesh = m->s.env->mesh;
|
struct mesh_area* mesh = m->s.env->mesh;
|
||||||
struct mesh_state_ref* ref;
|
struct mesh_state_ref* ref;
|
||||||
log_assert(!(m->debug_flags&2)); /* not twice! */
|
|
||||||
m->debug_flags |= 2;
|
|
||||||
(void)cb;
|
|
||||||
RBTREE_FOR(ref, struct mesh_state_ref*, &qstate->mesh_info->super_set)
|
RBTREE_FOR(ref, struct mesh_state_ref*, &qstate->mesh_info->super_set)
|
||||||
{
|
{
|
||||||
/* make super runnable */
|
/* make super runnable */
|
||||||
|
|
@ -542,19 +536,24 @@ void mesh_run(struct mesh_area* mesh, struct mesh_state* mstate,
|
||||||
|
|
||||||
/* examine results */
|
/* examine results */
|
||||||
mstate->s.reply = NULL;
|
mstate->s.reply = NULL;
|
||||||
|
e = NULL;
|
||||||
region_free_all(mstate->s.env->scratch);
|
region_free_all(mstate->s.env->scratch);
|
||||||
s = mstate->s.ext_state[mstate->s.curmod];
|
s = mstate->s.ext_state[mstate->s.curmod];
|
||||||
verbose(VERB_ALGO, "mesh_run: %s module exit state is %s",
|
verbose(VERB_ALGO, "mesh_run: %s module exit state is %s",
|
||||||
mesh->modfunc[mstate->s.curmod]->name, strextstate(s));
|
mesh->modfunc[mstate->s.curmod]->name, strextstate(s));
|
||||||
if(s == module_error || s == module_finished) {
|
if(s == module_error || s == module_finished) {
|
||||||
/* must have called _done and _supers */
|
if(mstate->s.curmod == 0) {
|
||||||
log_assert(mstate->debug_flags == 3);
|
mesh_query_done(&mstate->s,
|
||||||
mesh_state_delete(&mstate->s);
|
mstate->s.return_rcode,
|
||||||
|
mstate->s.return_msg->rep);
|
||||||
|
mesh_walk_supers(&mstate->s, mstate->s.curmod);
|
||||||
|
mesh_state_delete(&mstate->s);
|
||||||
|
}
|
||||||
|
/* pass along the locus of control */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* run more modules */
|
/* run more modules */
|
||||||
ev = module_event_pass;
|
ev = module_event_pass;
|
||||||
e = NULL;
|
|
||||||
if(mesh->run.count > 0) {
|
if(mesh->run.count > 0) {
|
||||||
/* pop random element off the runnable tree */
|
/* pop random element off the runnable tree */
|
||||||
mstate = (struct mesh_state*)mesh->run.root->key;
|
mstate = (struct mesh_state*)mesh->run.root->key;
|
||||||
|
|
|
||||||
|
|
@ -111,8 +111,6 @@ struct mesh_state {
|
||||||
struct module_qstate s;
|
struct module_qstate s;
|
||||||
/** the list of replies to clients for the results */
|
/** the list of replies to clients for the results */
|
||||||
struct mesh_reply* reply_list;
|
struct mesh_reply* reply_list;
|
||||||
/** debug flags */
|
|
||||||
int debug_flags;
|
|
||||||
/** set of superstates (that want this state's result)
|
/** set of superstates (that want this state's result)
|
||||||
* contains struct mesh_state_ref* */
|
* contains struct mesh_state_ref* */
|
||||||
rbtree_t super_set;
|
rbtree_t super_set;
|
||||||
|
|
@ -250,20 +248,16 @@ void mesh_query_done(struct module_qstate* qstate, int rcode,
|
||||||
struct reply_info* rep);
|
struct reply_info* rep);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a callback for the super query states that are interested in the
|
* Call inform_super for the super query states that are interested in the
|
||||||
* results from this query state. These can then be changed for error
|
* results from this query state. These can then be changed for error
|
||||||
* or results.
|
* or results.
|
||||||
* Must be called befor a module can module_finished or return module_error.
|
* Called when a module is module_finished or returns module_error.
|
||||||
* After finishing or module error, the super query states become runnable
|
* The super query states become runnable with event module_event_pass.
|
||||||
* with event module_event_pass.
|
|
||||||
*
|
*
|
||||||
* @param qstate: the state that has results, used to find mesh state.
|
* @param qstate: the state that has results, used to find mesh state.
|
||||||
* @param id: module id.
|
* @param id: module id.
|
||||||
* @param cb: callback function. Called as
|
|
||||||
* cb(qstate, id, super_qstate) for every super query state.
|
|
||||||
*/
|
*/
|
||||||
void mesh_walk_supers(struct module_qstate* qstate, int id,
|
void mesh_walk_supers(struct module_qstate* qstate, int id);
|
||||||
void (*cb)(struct module_qstate*, int, struct module_qstate*));
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete mesh state, cleanup and also rbtrees and so on.
|
* Delete mesh state, cleanup and also rbtrees and so on.
|
||||||
|
|
|
||||||
|
|
@ -164,40 +164,6 @@ struct module_env {
|
||||||
*/
|
*/
|
||||||
void (*kill_sub)(struct module_qstate* newq);
|
void (*kill_sub)(struct module_qstate* newq);
|
||||||
|
|
||||||
/**
|
|
||||||
* Query state is done, send messages to reply entries.
|
|
||||||
* Encode messages using reply entry values and the querystate
|
|
||||||
* (with original qinfo), using given reply_info.
|
|
||||||
* Pass errcode != 0 if an error reply is needed.
|
|
||||||
* If no reply entries, nothing is done.
|
|
||||||
* Must be called before a module can module_finished or return
|
|
||||||
* module_error.
|
|
||||||
* The module must handle the super query states itself as well.
|
|
||||||
*
|
|
||||||
* @param qstate: used for original query info. And to find mesh info.
|
|
||||||
* @param rcode: if not 0 (NOERROR) an error is sent back (and
|
|
||||||
* rep ignored).
|
|
||||||
* @param rep: reply to encode and send back to clients.
|
|
||||||
*/
|
|
||||||
void (*query_done)(struct module_qstate* qstate, int rcode,
|
|
||||||
struct reply_info* rep);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a callback for the super query states that are interested in the
|
|
||||||
* results from this query state. These can then be changed for error
|
|
||||||
* or results.
|
|
||||||
* Must be called befor a module can module_finished or return
|
|
||||||
* module_error. After finishing or module error, the super
|
|
||||||
* query states become runnable with event module_event_pass.
|
|
||||||
*
|
|
||||||
* @param qstate: the state that has results, used to find mesh state.
|
|
||||||
* @param id: module id.
|
|
||||||
* @param cb: callback function. Called as
|
|
||||||
* cb(qstate, id, super_qstate) for every super qstate.
|
|
||||||
*/
|
|
||||||
void (*walk_supers)(struct module_qstate* qstate, int id,
|
|
||||||
void (*cb)(struct module_qstate*, int, struct module_qstate*));
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Detect if adding a dependency for qstate on name,type,class will
|
* Detect if adding a dependency for qstate on name,type,class will
|
||||||
* create a dependency cycle.
|
* create a dependency cycle.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue