void libworker_fg_done_cb(void* arg, int rcode, sldns_buffer* buf, enum sec_status s, char* why_bogus) { struct ctx_query* q = (struct ctx_query*)arg; /* fg query is done; exit comm base */ comm_base_exit(q->w->base); libworker_fillup_fg(q, rcode, buf, s, why_bogus); }
void worker_handle_control_cmd(struct tube* ATTR_UNUSED(tube), uint8_t* msg, size_t len, int error, void* arg) { struct worker* worker = (struct worker*)arg; enum worker_commands cmd; if(error != NETEVENT_NOERROR) { free(msg); if(error == NETEVENT_CLOSED) comm_base_exit(worker->base); else log_info("control event: %d", error); return; } if(len != sizeof(uint32_t)) { fatal_exit("bad control msg length %d", (int)len); } cmd = sldns_read_uint32(msg); free(msg); switch(cmd) { case worker_cmd_quit: verbose(VERB_ALGO, "got control cmd quit"); comm_base_exit(worker->base); break; case worker_cmd_stats: verbose(VERB_ALGO, "got control cmd stats"); server_stats_reply(worker, 1); break; case worker_cmd_stats_noreset: verbose(VERB_ALGO, "got control cmd stats_noreset"); server_stats_reply(worker, 0); break; case worker_cmd_remote: verbose(VERB_ALGO, "got control cmd remote"); daemon_remote_exec(worker); break; default: log_err("bad command %d", (int)cmd); break; } }
/** handle control command coming into server */ void libworker_handle_control_cmd(struct tube* ATTR_UNUSED(tube), uint8_t* msg, size_t len, int err, void* arg) { struct libworker* w = (struct libworker*)arg; if(err != 0) { free(msg); /* it is of no use to go on, exit */ comm_base_exit(w->base); return; } libworker_do_cmd(w, msg, len); /* also frees the buf */ }
/** do control command coming into bg server */ static void libworker_do_cmd(struct libworker* w, uint8_t* msg, uint32_t len) { switch(context_serial_getcmd(msg, len)) { default: case UB_LIBCMD_ANSWER: log_err("unknown command for bg worker %d", (int)context_serial_getcmd(msg, len)); /* and fall through to quit */ case UB_LIBCMD_QUIT: free(msg); comm_base_exit(w->base); break; case UB_LIBCMD_NEWQUERY: handle_newq(w, msg, len); break; case UB_LIBCMD_CANCEL: handle_cancel(w, msg, len); break; } }