- fixup delegation point duplicates.
- fixup iterator scrubber; lame NS set is let through the scrubber
so that the classification is lame.
+ - validator module exists, and does nothing but pass through,
+ with calling of next module and return.
1 August 2007: Wouter
- set version to 0.5
/* edns is not examined, but removed from message to help cache */
if(parse_extract_edns(prs, &edns) != LDNS_RCODE_NOERROR)
goto handle_it;
+ /* remove CD-bit, we asked for in case we handle validation ourself */
+ prs->flags &= ~BIT_CD;
/* normalize and sanitize: easy to delete items from linked lists */
if(!scrub_message(pkt, prs, &iq->qchase, iq->dp->name,
(void)rbtree_insert(&mesh->run, &ref->s->run_node);
/* callback the function to inform super of result */
(*mesh->modfunc[ref->s->s.curmod]->inform_super)(qstate,
- id, &ref->s->s);
+ ref->s->s.curmod, &ref->s->s);
}
}
}
/* pass along the locus of control */
mstate->s.curmod --;
- *ev = module_event_pass;
+ *ev = module_event_moddone;
return 1;
}
return 0;
case module_event_pass: return "module_event_pass";
case module_event_reply: return "module_event_reply";
case module_event_noreply: return "module_event_noreply";
+ case module_event_moddone: return "module_event_moddone";
case module_event_error: return "module_event_error";
}
return "bad_event_value";
module_event_reply,
/** no reply, timeout or other error */
module_event_noreply,
+ /** next module is done, and its reply is awaiting you */
+ module_event_moddone,
/** error */
module_event_error
};
verbose(VERB_DETAIL, "validator[module %d] operate: extstate:%s "
"event:%s", id, strextstate(qstate->ext_state[id]),
strmodulevent(event));
- if(vq) log_query_info(VERB_DETAIL, "iterator operate: query",
+ if(vq) log_query_info(VERB_DETAIL, "validator operate: query",
&qstate->qinfo);
(void)ve;
(void)outbound;
+ if(event == module_event_new || event == module_event_pass) {
+ /* pass request to next module, to get it */
+ verbose(VERB_ALGO, "validator: pass to next module");
+ qstate->ext_state[id] = module_wait_module;
+ return;
+ }
+ if(event == module_event_moddone) {
+ /* we're done */
+ verbose(VERB_ALGO, "validator: nextmodule returned");
+ qstate->ext_state[id] = module_finished;
+ return;
+ }
+ qstate->ext_state[id] = module_error;
+ return;
}
/**
val_inform_super(struct module_qstate* qstate, int id,
struct module_qstate* super)
{
+ log_query_info(VERB_ALGO, "validator: inform_super, sub=",
+ &qstate->qinfo);
+ log_query_info(VERB_ALGO, "super=", &super->qinfo);
}