(*worker->daemon->modfunc[qstate->curmod]->operate)(qstate,
event, qstate->curmod, entry);
region_free_all(worker->scratchpad);
+ qstate->reply = NULL;
s = qstate->ext_state[qstate->curmod];
/* examine results, start further modules, etc. */
if(s == module_wait_subquery) {
if(error != 0) {
worker_process_query(worker, w, &w->state,
module_event_timeout, NULL);
- w->state.reply = NULL;
return 0;
}
/* sanity check. */
* never arrived. */
worker_process_query(worker, w, &w->state,
module_event_timeout, NULL);
- w->state.reply = NULL;
return 0;
}
worker_process_query(worker, w, &w->state, module_event_reply, NULL);
- w->state.reply = NULL;
return 0;
}
struct work_query* w = e->qstate->work_info;
struct worker* worker = w->state.env->worker;
- w->state.reply = reply_info;
+ e->qstate->reply = reply_info;
if(error != 0) {
worker_process_query(worker, w, e->qstate,
module_event_timeout, e);
- w->state.reply = NULL;
return 0;
}
/* sanity check. */
* never arrived. */
worker_process_query(worker, w, e->qstate,
module_event_timeout, e);
- w->state.reply = NULL;
return 0;
}
worker_process_query(worker, w, e->qstate, module_event_reply, e);
- w->state.reply = NULL;
return 0;
}
4 June 2007: Wouter
- random selection of equally preferred nameserver targets.
- reply info copy routine. Reuses existing code.
+ - cache lameness in response handling.
+ - do not touch qstate after worker_process_query because it may have
+ been deleted by that routine.
1 June 2007: Wouter
- normalize incoming messages. Like unbound-java, with CNAME chain
#include "iterator/iter_resptype.h"
#include "iterator/iter_scrub.h"
#include "services/cache/dns.h"
+#include "services/cache/infra.h"
#include "util/module.h"
#include "util/netevent.h"
#include "util/net_help.h"
verbose(VERB_ALGO, "query response was timeout");
return next_state(qstate, iq, QUERYTARGETS_STATE);
}
+ log_assert(qstate->reply); /* need addr for lameness cache */
type = response_type_from_server(iq->response, &qstate->qinfo, iq->dp);
if(type == RESPONSE_TYPE_ANSWER) {
/* ANSWER type responses terminate the query algorithm,
return next_state(qstate, iq, INIT_REQUEST_STATE);
} else if(type == RESPONSE_TYPE_LAME) {
/* Cache the LAMEness. */
- /* TODO mark addr, dp->name, as lame */
verbose(VERB_ALGO, "query response was LAME");
+ if(!infra_set_lame(qstate->env->infra_cache,
+ &qstate->reply->addr, qstate->reply->addrlen,
+ iq->dp->name, iq->dp->namelen, time(NULL)))
+ log_err("mark host lame: out of memory");
} else if(type == RESPONSE_TYPE_THROWAWAY) {
/* LAME and THROWAWAY responses are handled the same way.
* In this case, the event is just sent directly back to