mirror of https://github.com/getdnsapi/getdns.git
libunbound requests processing with mini_event
This commit is contained in:
parent
54e0b42dcd
commit
5fc9675397
123
src/context.c
123
src/context.c
|
@ -530,16 +530,6 @@ void getdns_handle_timeouts(struct getdns_event_base* base,
|
||||||
/** call select and callbacks for that */
|
/** call select and callbacks for that */
|
||||||
int getdns_handle_select(struct getdns_event_base* base, struct timeval* wait);
|
int getdns_handle_select(struct getdns_event_base* base, struct timeval* wait);
|
||||||
|
|
||||||
static getdns_return_t
|
|
||||||
getdns_mini_event_cleanup(getdns_context *context, void *ext)
|
|
||||||
{
|
|
||||||
getdns_mini_event_extension *e = (getdns_mini_event_extension *)ext;
|
|
||||||
|
|
||||||
/* TODO: Cleanup all events? Maybe not... */
|
|
||||||
getdns_event_base_free(e->base);
|
|
||||||
return GETDNS_RETURN_GOOD;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
getdns_mini_event_timeout_cb(int fd, short bits, void *arg)
|
getdns_mini_event_timeout_cb(int fd, short bits, void *arg)
|
||||||
{
|
{
|
||||||
|
@ -590,6 +580,21 @@ getdns_mini_event_request_count_changed(getdns_context *context,
|
||||||
return GETDNS_RETURN_GOOD;
|
return GETDNS_RETURN_GOOD;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
getdns_mini_event_cb(int fd, short bits, void *arg)
|
||||||
|
{
|
||||||
|
getdns_context *context = (getdns_context *)arg;
|
||||||
|
|
||||||
|
if (getdns_context_process_async(context))
|
||||||
|
return;
|
||||||
|
|
||||||
|
getdns_mini_event_request_count_changed(context,
|
||||||
|
getdns_context_get_num_pending_requests(context, NULL),
|
||||||
|
context->extension_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
static getdns_return_t
|
||||||
|
getdns_mini_event_cleanup(getdns_context *context, void *ext);
|
||||||
getdns_return_t
|
getdns_return_t
|
||||||
getdns_mini_event_extension_init(getdns_mini_event_extension *e)
|
getdns_mini_event_extension_init(getdns_mini_event_extension *e)
|
||||||
{
|
{
|
||||||
|
@ -604,6 +609,20 @@ getdns_mini_event_extension_init(getdns_mini_event_extension *e)
|
||||||
return GETDNS_RETURN_GOOD;
|
return GETDNS_RETURN_GOOD;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static getdns_return_t
|
||||||
|
getdns_mini_event_cleanup(getdns_context *context, void *ext)
|
||||||
|
{
|
||||||
|
getdns_mini_event_extension *e = (getdns_mini_event_extension *)ext;
|
||||||
|
|
||||||
|
if (e->ub_event.ev_fd != -1) {
|
||||||
|
getdns_event_del(&e->ub_event);
|
||||||
|
e->ub_event.ev_fd = -1;
|
||||||
|
}
|
||||||
|
/* TODO: Cleanup all synchronous events? Maybe not... */
|
||||||
|
getdns_event_base_free(e->base);
|
||||||
|
return GETDNS_RETURN_GOOD;
|
||||||
|
}
|
||||||
|
|
||||||
/*****
|
/*****
|
||||||
***** End of mini_event extension
|
***** End of mini_event extension
|
||||||
*****
|
*****
|
||||||
|
@ -850,30 +869,38 @@ set_ub_number_opt(struct getdns_context *ctx, char *opt, uint16_t value)
|
||||||
|
|
||||||
static getdns_return_t
|
static getdns_return_t
|
||||||
rebuild_ub_ctx(struct getdns_context* context) {
|
rebuild_ub_ctx(struct getdns_context* context) {
|
||||||
if (context->unbound_ctx != NULL) {
|
if (context->unbound_ctx != NULL) {
|
||||||
/* cancel all requests and delete */
|
/* cancel all requests and delete */
|
||||||
cancel_outstanding_requests(context, 1);
|
cancel_outstanding_requests(context, 1);
|
||||||
ub_ctx_delete(context->unbound_ctx);
|
ub_ctx_delete(context->unbound_ctx);
|
||||||
context->unbound_ctx = NULL;
|
context->unbound_ctx = NULL;
|
||||||
}
|
}
|
||||||
/* setup */
|
/* setup */
|
||||||
context->unbound_ctx = ub_ctx_create();
|
context->unbound_ctx = ub_ctx_create();
|
||||||
if (!context->unbound_ctx) {
|
if (!context->unbound_ctx) {
|
||||||
return GETDNS_RETURN_MEMORY_ERROR;
|
return GETDNS_RETURN_MEMORY_ERROR;
|
||||||
}
|
}
|
||||||
set_ub_dnssec_allowed_skew(context,
|
set_ub_dnssec_allowed_skew(context,
|
||||||
context->dnssec_allowed_skew);
|
context->dnssec_allowed_skew);
|
||||||
set_ub_edns_maximum_udp_payload_size(context,
|
set_ub_edns_maximum_udp_payload_size(context,
|
||||||
context->edns_maximum_udp_payload_size);
|
context->edns_maximum_udp_payload_size);
|
||||||
set_ub_dns_transport(context,
|
set_ub_dns_transport(context,
|
||||||
context->dns_transport);
|
context->dns_transport);
|
||||||
|
|
||||||
/* Set default trust anchor */
|
/* Set default trust anchor */
|
||||||
if (context->has_ta) {
|
if (context->has_ta) {
|
||||||
(void) ub_ctx_add_ta_file(
|
(void) ub_ctx_add_ta_file(
|
||||||
context->unbound_ctx, TRUST_ANCHOR_FILE);
|
context->unbound_ctx, TRUST_ANCHOR_FILE);
|
||||||
}
|
}
|
||||||
return GETDNS_RETURN_GOOD;
|
if (context->extension == (void *)&context->mini_event_extension.ext) {
|
||||||
|
getdns_mini_event_extension *e =&context->mini_event_extension;
|
||||||
|
|
||||||
|
getdns_event_set(&e->ub_event, getdns_context_fd(context),
|
||||||
|
EV_READ, getdns_mini_event_cb, context);
|
||||||
|
(void) getdns_event_base_set(e->base, &e->ub_event);
|
||||||
|
(void) getdns_event_add(&e->ub_event, NULL);
|
||||||
|
}
|
||||||
|
return GETDNS_RETURN_GOOD;
|
||||||
}
|
}
|
||||||
|
|
||||||
static getdns_return_t
|
static getdns_return_t
|
||||||
|
@ -1897,15 +1924,15 @@ getdns_context_get_num_pending_requests(struct getdns_context* context,
|
||||||
if (context->outbound_requests->count &&
|
if (context->outbound_requests->count &&
|
||||||
context->extension == (void *)&context->mini_event_extension.ext) {
|
context->extension == (void *)&context->mini_event_extension.ext) {
|
||||||
|
|
||||||
if (gettimeofday(context->mini_event_extension.base->time_tv,
|
struct getdns_event_base *base =
|
||||||
NULL) >= 0) {
|
context->mini_event_extension.base;
|
||||||
|
|
||||||
*context->mini_event_extension.base->time_secs =(time_t)
|
if (gettimeofday(base->time_tv, NULL) >= 0) {
|
||||||
context->mini_event_extension.base->time_tv->tv_sec;
|
struct timeval dummy;
|
||||||
getdns_handle_timeouts(
|
|
||||||
context->mini_event_extension.base,
|
*base->time_secs = (time_t) base->time_tv->tv_sec;
|
||||||
context->mini_event_extension.base->time_tv,
|
getdns_handle_timeouts(base, base->time_tv,
|
||||||
next_timeout);
|
next_timeout ? next_timeout : &dummy);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return context->outbound_requests->count;
|
return context->outbound_requests->count;
|
||||||
|
@ -1914,6 +1941,7 @@ getdns_context_get_num_pending_requests(struct getdns_context* context,
|
||||||
/* process async reqs */
|
/* process async reqs */
|
||||||
getdns_return_t getdns_context_process_async(struct getdns_context* context)
|
getdns_return_t getdns_context_process_async(struct getdns_context* context)
|
||||||
{
|
{
|
||||||
|
struct timeval immediately = { 0, 0 };
|
||||||
RETURN_IF_NULL(context, GETDNS_RETURN_INVALID_PARAMETER);
|
RETURN_IF_NULL(context, GETDNS_RETURN_INVALID_PARAMETER);
|
||||||
|
|
||||||
context->processing = 1;
|
context->processing = 1;
|
||||||
|
@ -1922,6 +1950,13 @@ getdns_return_t getdns_context_process_async(struct getdns_context* context)
|
||||||
context->processing = 0;
|
context->processing = 0;
|
||||||
return GETDNS_RETURN_GENERIC_ERROR;
|
return GETDNS_RETURN_GENERIC_ERROR;
|
||||||
}
|
}
|
||||||
|
if (context->extension == (void *)&context->mini_event_extension.ext
|
||||||
|
&& getdns_handle_select(context->mini_event_extension.base,
|
||||||
|
&immediately)) {
|
||||||
|
|
||||||
|
context->processing = 0;
|
||||||
|
return GETDNS_RETURN_GENERIC_ERROR;
|
||||||
|
}
|
||||||
// reset the processing flag
|
// reset the processing flag
|
||||||
context->processing = 0;
|
context->processing = 0;
|
||||||
return GETDNS_RETURN_GOOD;
|
return GETDNS_RETURN_GOOD;
|
||||||
|
@ -1974,8 +2009,10 @@ getdns_extension_detach_eventloop(struct getdns_context* context)
|
||||||
r = context->extension->cleanup_data(context,
|
r = context->extension->cleanup_data(context,
|
||||||
context->extension_data);
|
context->extension_data);
|
||||||
if (r == GETDNS_RETURN_GOOD) {
|
if (r == GETDNS_RETURN_GOOD) {
|
||||||
context->extension = NULL;
|
context->extension = &context->mini_event_extension.ext;
|
||||||
context->extension_data = NULL;
|
context->extension_data =(void*)&context->mini_event_extension;
|
||||||
|
r = getdns_mini_event_extension_init(
|
||||||
|
&context->mini_event_extension);
|
||||||
}
|
}
|
||||||
context->processing = 0;
|
context->processing = 0;
|
||||||
return r;
|
return r;
|
||||||
|
|
Loading…
Reference in New Issue