Example #1
0
/*
 * getdns_extension_set_libevent_base
 *
 */
getdns_return_t
getdns_extension_set_libevent_base(struct getdns_context *context,
    struct event_base * this_event_base)
{
    RETURN_IF_NULL(context, GETDNS_RETURN_BAD_CONTEXT);
    RETURN_IF_NULL(this_event_base, GETDNS_RETURN_INVALID_PARAMETER);
    /* TODO: cleanup current extension base */
    getdns_return_t r = getdns_extension_detach_eventloop(context);
    if (r != GETDNS_RETURN_GOOD) {
        return r;
    }
    int fd = getdns_context_fd(context);
    struct event* getdns_event = event_new(this_event_base, fd, EV_READ | EV_PERSIST, getdns_libevent_cb, context);
    if (!getdns_event) {
        return GETDNS_RETURN_GENERIC_ERROR;
    }

    /* TODO: use context functs? */
    struct event_data* ev_data = (struct event_data*) malloc(sizeof(struct event_data));
    if (!ev_data) {
        /* cleanup */
        event_del(getdns_event);
        event_free(getdns_event);
        return GETDNS_RETURN_GENERIC_ERROR;
    }
    ev_data->event = getdns_event;
    ev_data->event_base = this_event_base;
    return getdns_extension_set_eventloop(context, &LIBEVENT_EXT, ev_data);
}               /* getdns_extension_set_libevent_base */
Example #2
0
/*
 * getdns_extension_set_libev_loop
 *
 */
getdns_return_t
getdns_extension_set_libev_loop(struct getdns_context *context,
    struct ev_loop *loop)
{
    RETURN_IF_NULL(context, GETDNS_RETURN_INVALID_PARAMETER);
    RETURN_IF_NULL(loop, GETDNS_RETURN_INVALID_PARAMETER);
    /* TODO: cleanup current extension base */
    getdns_return_t r = getdns_extension_detach_eventloop(context);
    if (r != GETDNS_RETURN_GOOD) {
        return r;
    }
    struct getdns_libev_data* ev_data = (struct getdns_libev_data*) malloc(sizeof(struct getdns_libev_data));
    if (!ev_data) {
        return GETDNS_RETURN_MEMORY_ERROR;
    }
    int fd = getdns_context_fd(context);
    ev_data->poll_handle = (struct ev_io*) malloc(sizeof(struct ev_io));
    ev_io_init(ev_data->poll_handle, getdns_libev_cb, fd, EV_READ);
    ev_data->loop = loop;

    ev_data->poll_handle->data = context;
    return getdns_extension_set_eventloop(context, &LIBEV_EXT, ev_data);
}               /* getdns_extension_set_libev_loop */
Example #3
0
/*
 * getdns_extension_set_libuv_loop
 *
 */
getdns_return_t
getdns_extension_set_libuv_loop(struct getdns_context *context,
    struct uv_loop_s *uv_loop)
{
    RETURN_IF_NULL(context, GETDNS_RETURN_INVALID_PARAMETER);
    RETURN_IF_NULL(uv_loop, GETDNS_RETURN_INVALID_PARAMETER);
    /* TODO: cleanup current extension base */
    getdns_return_t r = getdns_extension_detach_eventloop(context);
    if (r != GETDNS_RETURN_GOOD) {
        return r;
    }
    struct getdns_libuv_data* uv_data = (struct getdns_libuv_data*) malloc(sizeof(struct getdns_libuv_data));
    if (!uv_data) {
        return GETDNS_RETURN_MEMORY_ERROR;
    }
    int fd = getdns_context_fd(context);
    uv_data->poll_handle = (uv_poll_t*) malloc(sizeof(uv_poll_t));
    uv_poll_init(uv_loop, uv_data->poll_handle, fd);
    uv_data->poll_handle->data = context;
    uv_data->loop = uv_loop;
    uv_data->polling = 0;
    return getdns_extension_set_eventloop(context, &LIBUV_EXT, uv_data);
}               /* getdns_extension_set_libuv_loop */