prime flag moved.

git-svn-id: file:///svn/unbound/trunk@470 be551aaa-1e26-0410-a405-d3ace91eadb9
This commit is contained in:
Wouter Wijngaards 2007-08-01 12:59:37 +00:00
parent ec4878be75
commit 56916e48fb
7 changed files with 25 additions and 29 deletions

View file

@ -172,7 +172,7 @@ count_modules(const char* s)
/**
* Get funcblock for module name
* @param str: string with module name. Advanced to next value.
* @param str: string with module name. Advanced to next value on success.
* @return funcblock or NULL on error.
*/
static struct module_func_block*

View file

@ -365,7 +365,8 @@ causes_cycle(struct module_qstate* qstate, uint8_t* name, size_t namelen,
qinf.qname_len = namelen;
qinf.qtype = t;
qinf.qclass = c;
return (*qstate->env->detect_cycle)(qstate, &qinf, BIT_RD, 0);
return (*qstate->env->detect_cycle)(qstate, &qinf, BIT_RD,
qstate->is_priming);
}
void

View file

@ -111,8 +111,7 @@ iter_new(struct module_qstate* qstate, int id)
iq->num_current_queries = 0;
iq->query_restart_count = 0;
iq->referral_count = 0;
iq->priming = 0;
iq->priming_stub = 0;
iq->wait_priming_stub = 0;
iq->refetch_glue = 0;
iq->chase_flags = qstate->query_flags;
/* Start with the (current) qname. */
@ -375,9 +374,7 @@ generate_sub_request(uint8_t* qname, size_t qnamelen, uint16_t qtype,
* the resolution chain, which might have a validator. We are
* uninterested in validating things not on the direct resolution
* path. */
/* Turned off! CD does not make a difference in query results.
qstate->query_flags |= BIT_CD;
*/
qflags |= BIT_CD;
/* attach subquery, lookup existing or make a new one */
if(!(*qstate->env->attach_sub)(qstate, &qinf, qflags, prime, &subq)) {
@ -447,7 +444,6 @@ prime_root(struct module_qstate* qstate, struct iter_qstate* iq,
subiq->dp = dp;
/* there should not be any target queries. */
subiq->num_target_queries = 0;
subiq->priming = 1;
}
/* this module stops, our submodule starts, and does the query. */
@ -504,8 +500,7 @@ prime_stub(struct module_qstate* qstate, struct iter_qstate* iq,
* wouldn't be anyway, since stub hints never have
* missing targets. */
subiq->num_target_queries = 0;
subiq->priming = 1;
subiq->priming_stub = 1;
subiq->wait_priming_stub = 1;
}
/* this module stops, our submodule starts, and does the query. */
@ -1190,7 +1185,7 @@ prime_supers(struct module_qstate* qstate, int id, struct module_qstate* forq)
enum response_type type = response_type_from_server(iq->response,
&iq->qchase, iq->dp);
log_assert(iq->priming || iq->priming_stub);
log_assert(qstate->is_priming || foriq->wait_priming_stub);
if(type == RESPONSE_TYPE_ANSWER) {
/* Convert our response to a delegation point */
dp = delegpt_from_message(iq->response, forq->region);
@ -1218,9 +1213,10 @@ prime_supers(struct module_qstate* qstate, int id, struct module_qstate* forq)
/* root priming responses go to init stage 2, priming stub
* responses to to stage 3. */
if(iq->priming_stub)
if(foriq->wait_priming_stub) {
foriq->state = INIT_REQUEST_3_STATE;
else foriq->state = INIT_REQUEST_2_STATE;
foriq->wait_priming_stub = 0;
} else foriq->state = INIT_REQUEST_2_STATE;
/* because we are finished, the parent will be reactivated */
}
@ -1257,7 +1253,7 @@ processPrimeResponse(struct module_qstate* qstate, int id)
* to received target responses (caching, updating the current delegation
* point, etc).
* Callback from walk_supers for every super state that is interested in
* the results from thiis query.
* the results from this query.
*
* @param qstate: query state.
* @param id: module id.

View file

@ -215,18 +215,11 @@ struct iter_qstate {
/** the number of times this query as followed a referral. */
int referral_count;
/**
* This flag, if true, means that this event is a priming query.
* In that case priming stub may be set as well.
*/
int priming;
/**
* This is flag that, if true, means that this event is
* representing a stub priming query. It is meaningless unless
* the finalState is the PRIMING_RESP_STATE.
* waiting for a stub priming query.
*/
int priming_stub;
int wait_priming_stub;
/**
* This is a flag that, if true, means that this query is

View file

@ -59,9 +59,9 @@ mesh_state_compare(const void* ap, const void* bp)
struct mesh_state* a = (struct mesh_state*)ap;
struct mesh_state* b = (struct mesh_state*)bp;
if(a->is_priming && !b->is_priming)
if(a->s.is_priming && !b->s.is_priming)
return -1;
if(!a->is_priming && b->is_priming)
if(!a->s.is_priming && b->s.is_priming)
return 1;
if((a->s.query_flags&BIT_RD) && !(b->s.query_flags&BIT_RD))
@ -212,7 +212,6 @@ mesh_state_create(struct module_env* env, struct query_info* qinfo,
mstate->node.key = mstate;
mstate->run_node.key = mstate;
mstate->debug_flags = 0;
mstate->is_priming = prime;
mstate->reply_list = NULL;
rbtree_init(&mstate->super_set, &mesh_state_ref_compare);
rbtree_init(&mstate->sub_set, &mesh_state_ref_compare);
@ -228,9 +227,12 @@ mesh_state_create(struct module_env* env, struct query_info* qinfo,
}
/* remove all weird bits from qflags */
mstate->s.query_flags = (qflags & (BIT_RD|BIT_CD));
mstate->s.is_priming = prime;
mstate->s.reply = NULL;
mstate->s.region = region;
mstate->s.curmod = 0;
mstate->s.return_rep = 0;
mstate->s.return_rcode = LDNS_RCODE_NOERROR;
mstate->s.env = env;
mstate->s.mesh_info = mstate;
/* init modules */
@ -497,7 +499,7 @@ struct mesh_state* mesh_area_find(struct mesh_area* mesh,
struct mesh_state* result;
key.node.key = &key;
key.is_priming = prime;
key.s.is_priming = prime;
key.s.qinfo = *qinfo;
key.s.query_flags = qflags;

View file

@ -106,8 +106,6 @@ struct mesh_state {
rbnode_t node;
/** node in mesh_area runnable tree, key is this struct */
rbnode_t run_node;
/** if this is a (stub or root) priming query (with hints) */
int is_priming;
/** the query state. Note that the qinfo and query_flags
* may not change. */
struct module_qstate s;

View file

@ -271,9 +271,15 @@ struct module_qstate {
struct query_info qinfo;
/** flags uint16 from query */
uint16_t query_flags;
/** if this is a (stub or root) priming query (with hints) */
int is_priming;
/** comm_reply contains server replies */
struct comm_reply* reply;
/** the reply info, with message for client, calling module */
struct reply_info* return_rep;
/** the rcode, in case of error, instead of a reply info message */
int return_rcode;
/** region for this query. Cleared when query process finishes. */
struct region* region;