mirror of https://github.com/getdnsapi/getdns.git
Basic usage of unbound pluggable event loop
This commit is contained in:
parent
a0896ac4bf
commit
4230961e9f
17
configure.ac
17
configure.ac
|
@ -526,15 +526,14 @@ fi
|
|||
|
||||
if test $my_with_libunbound = 1
|
||||
then
|
||||
AC_CHECK_HEADERS([unbound-event.h],,, [AC_INCLUDES_DEFAULT])
|
||||
AC_MSG_NOTICE([Checking for dependency libunbound])
|
||||
AC_CHECK_LIB([unbound], [ub_fd], [
|
||||
AC_DEFINE_UNQUOTED([HAVE_LIBUNBOUND], [1], [Define to 1 if you have the `unbound' library (-lunbound).])
|
||||
LIBS="-lunbound $LIBS"
|
||||
AC_CHECK_HEADER([unbound-event.h],[
|
||||
AC_CHECK_FUNC([ub_event_get_version], [
|
||||
AC_DEFINE_UNQUOTED([HAVE_UNBOUND_EVENT_API], [1], [Define this when libunbound is compiled with the --enable-event-api option.])
|
||||
])
|
||||
],,[AC_INCLUDES_DEFAULT])
|
||||
AC_CHECK_FUNC([ub_ctx_create_ub_event], [
|
||||
AC_DEFINE_UNQUOTED([HAVE_UNBOUND_EVENT_API], [1], [Define this when libunbound is compiled with the --enable-event-api option.])
|
||||
])
|
||||
], [found_all_libs=0])
|
||||
fi
|
||||
|
||||
|
@ -1202,8 +1201,14 @@ const char *inet_ntop(int af, const void *src, char *dst, size_t size);
|
|||
|
||||
#ifdef HAVE_LIBUNBOUND
|
||||
# include <unbound.h>
|
||||
# ifdef HAVE_UNBOUND_EVENT_API
|
||||
# ifdef HAVE_UNBOUND_EVENT_H
|
||||
# include <unbound-event.h>
|
||||
# else
|
||||
struct ub_event_base;
|
||||
struct ub_ctx* ub_ctx_create_ub_event(struct ub_event_base* base);
|
||||
typedef void (*ub_event_callback_t)(void*, int, void*, int, int, char*);
|
||||
int ub_resolve_event(struct ub_ctx* ctx, const char* name, int rrtype,
|
||||
int rrclass, void* mydata, ub_event_callback_t callback, int* async_id);
|
||||
# endif
|
||||
#endif
|
||||
])
|
||||
|
|
|
@ -149,24 +149,16 @@ depend:
|
|||
|
||||
# Dependencies for the examples
|
||||
example-all-functions.lo example-all-functions.o: $(srcdir)/example-all-functions.c $(srcdir)/getdns_libevent.h \
|
||||
../../src/config.h \
|
||||
../../src/getdns/getdns.h \
|
||||
$(srcdir)/../../src/getdns/getdns_ext_libevent.h \
|
||||
../../src/getdns/getdns_extra.h
|
||||
example-reverse.lo example-reverse.o: $(srcdir)/example-reverse.c $(srcdir)/getdns_libevent.h \
|
||||
../../src/config.h \
|
||||
../../src/getdns/getdns.h \
|
||||
$(srcdir)/../../src/getdns/getdns_ext_libevent.h \
|
||||
../../src/config.h ../../src/getdns/getdns.h \
|
||||
$(srcdir)/../../src/getdns/getdns_ext_libevent.h ../../src/getdns/getdns_extra.h
|
||||
example-reverse.lo example-reverse.o: $(srcdir)/example-reverse.c $(srcdir)/getdns_libevent.h ../../src/config.h \
|
||||
../../src/getdns/getdns.h $(srcdir)/../../src/getdns/getdns_ext_libevent.h \
|
||||
../../src/getdns/getdns_extra.h
|
||||
example-simple-answers.lo example-simple-answers.o: $(srcdir)/example-simple-answers.c $(srcdir)/getdns_libevent.h \
|
||||
../../src/config.h \
|
||||
../../src/getdns/getdns.h \
|
||||
$(srcdir)/../../src/getdns/getdns_ext_libevent.h \
|
||||
../../src/getdns/getdns_extra.h
|
||||
../../src/config.h ../../src/getdns/getdns.h \
|
||||
$(srcdir)/../../src/getdns/getdns_ext_libevent.h ../../src/getdns/getdns_extra.h
|
||||
example-synchronous.lo example-synchronous.o: $(srcdir)/example-synchronous.c $(srcdir)/getdns_core_only.h \
|
||||
../../src/getdns/getdns.h
|
||||
example-tree.lo example-tree.o: $(srcdir)/example-tree.c $(srcdir)/getdns_libevent.h \
|
||||
../../src/config.h \
|
||||
../../src/getdns/getdns.h \
|
||||
$(srcdir)/../../src/getdns/getdns_ext_libevent.h \
|
||||
example-tree.lo example-tree.o: $(srcdir)/example-tree.c $(srcdir)/getdns_libevent.h ../../src/config.h \
|
||||
../../src/getdns/getdns.h $(srcdir)/../../src/getdns/getdns_ext_libevent.h \
|
||||
../../src/getdns/getdns_extra.h
|
||||
|
|
219
src/Makefile.in
219
src/Makefile.in
|
@ -65,7 +65,7 @@ C99COMPATFLAGS=@C99COMPATFLAGS@
|
|||
|
||||
GETDNS_OBJ=const-info.lo convert.lo dict.lo dnssec.lo general.lo \
|
||||
list.lo request-internal.lo pubkey-pinning.lo rr-dict.lo \
|
||||
rr-iter.lo stub.lo sync.lo util-internal.lo
|
||||
rr-iter.lo stub.lo sync.lo ub_loop.lo util-internal.lo
|
||||
|
||||
GLDNS_OBJ=keyraw.lo gbuffer.lo wire2str.lo parse.lo parseutil.lo rrdef.lo \
|
||||
str2wire.lo
|
||||
|
@ -225,136 +225,107 @@ depend:
|
|||
FORCE:
|
||||
|
||||
# Dependencies for gldns, utils, the extensions and compat functions
|
||||
const-info.lo const-info.o: $(srcdir)/const-info.c getdns/getdns.h \
|
||||
getdns/getdns_extra.h $(srcdir)/const-info.h
|
||||
context.lo context.o: $(srcdir)/context.c config.h $(srcdir)/debug.h \
|
||||
$(srcdir)/gldns/str2wire.h $(srcdir)/gldns/rrdef.h $(srcdir)/gldns/wire2str.h $(srcdir)/context.h \
|
||||
getdns/getdns.h \
|
||||
getdns/getdns_extra.h $(srcdir)/types-internal.h \
|
||||
$(srcdir)/util/rbtree.h $(srcdir)/extension/default_eventloop.h $(srcdir)/util-internal.h $(srcdir)/rr-iter.h \
|
||||
$(srcdir)/rr-dict.h $(srcdir)/gldns/gbuffer.h $(srcdir)/gldns/pkthdr.h $(srcdir)/dnssec.h $(srcdir)/stub.h $(srcdir)/list.h $(srcdir)/dict.h \
|
||||
$(srcdir)/pubkey-pinning.h
|
||||
convert.lo convert.o: $(srcdir)/convert.c config.h \
|
||||
getdns/getdns.h \
|
||||
getdns/getdns_extra.h $(srcdir)/util-internal.h \
|
||||
$(srcdir)/context.h $(srcdir)/types-internal.h $(srcdir)/util/rbtree.h $(srcdir)/extension/default_eventloop.h \
|
||||
const-info.lo const-info.o: $(srcdir)/const-info.c getdns/getdns.h getdns/getdns_extra.h \
|
||||
getdns/getdns.h $(srcdir)/const-info.h
|
||||
context.lo context.o: $(srcdir)/context.c config.h $(srcdir)/debug.h $(srcdir)/gldns/str2wire.h $(srcdir)/gldns/rrdef.h \
|
||||
$(srcdir)/gldns/wire2str.h $(srcdir)/context.h getdns/getdns.h getdns/getdns_extra.h \
|
||||
getdns/getdns.h $(srcdir)/types-internal.h $(srcdir)/util/rbtree.h \
|
||||
$(srcdir)/extension/default_eventloop.h config.h getdns/getdns_extra.h $(srcdir)/ub_loop.h \
|
||||
$(srcdir)/util-internal.h $(srcdir)/rr-iter.h $(srcdir)/rr-dict.h $(srcdir)/gldns/gbuffer.h $(srcdir)/gldns/pkthdr.h \
|
||||
$(srcdir)/dnssec.h $(srcdir)/stub.h $(srcdir)/list.h $(srcdir)/dict.h $(srcdir)/pubkey-pinning.h
|
||||
convert.lo convert.o: $(srcdir)/convert.c config.h getdns/getdns.h getdns/getdns_extra.h \
|
||||
getdns/getdns.h $(srcdir)/util-internal.h $(srcdir)/context.h $(srcdir)/types-internal.h $(srcdir)/util/rbtree.h \
|
||||
$(srcdir)/extension/default_eventloop.h config.h getdns/getdns_extra.h $(srcdir)/ub_loop.h \
|
||||
$(srcdir)/rr-iter.h $(srcdir)/rr-dict.h $(srcdir)/gldns/gbuffer.h $(srcdir)/gldns/pkthdr.h $(srcdir)/gldns/wire2str.h \
|
||||
$(srcdir)/gldns/str2wire.h $(srcdir)/gldns/rrdef.h $(srcdir)/dict.h $(srcdir)/list.h $(srcdir)/convert.h
|
||||
dict.lo dict.o: $(srcdir)/dict.c config.h $(srcdir)/types-internal.h \
|
||||
getdns/getdns.h \
|
||||
getdns/getdns_extra.h $(srcdir)/util/rbtree.h \
|
||||
$(srcdir)/util-internal.h $(srcdir)/context.h $(srcdir)/extension/default_eventloop.h $(srcdir)/rr-iter.h \
|
||||
$(srcdir)/rr-dict.h $(srcdir)/gldns/gbuffer.h $(srcdir)/gldns/pkthdr.h $(srcdir)/dict.h $(srcdir)/list.h $(srcdir)/const-info.h \
|
||||
$(srcdir)/gldns/wire2str.h
|
||||
dnssec.lo dnssec.o: $(srcdir)/dnssec.c config.h $(srcdir)/debug.h \
|
||||
getdns/getdns.h $(srcdir)/context.h \
|
||||
getdns/getdns_extra.h $(srcdir)/types-internal.h \
|
||||
$(srcdir)/util/rbtree.h $(srcdir)/extension/default_eventloop.h $(srcdir)/util-internal.h $(srcdir)/rr-iter.h \
|
||||
$(srcdir)/rr-dict.h $(srcdir)/gldns/gbuffer.h $(srcdir)/gldns/pkthdr.h $(srcdir)/dnssec.h $(srcdir)/gldns/str2wire.h \
|
||||
$(srcdir)/gldns/rrdef.h $(srcdir)/gldns/wire2str.h $(srcdir)/gldns/keyraw.h $(srcdir)/gldns/parseutil.h \
|
||||
$(srcdir)/general.h $(srcdir)/dict.h $(srcdir)/list.h $(srcdir)/util/val_secalgo.h
|
||||
general.lo general.o: $(srcdir)/general.c config.h $(srcdir)/general.h \
|
||||
getdns/getdns.h $(srcdir)/types-internal.h \
|
||||
getdns/getdns_extra.h $(srcdir)/util/rbtree.h \
|
||||
$(srcdir)/gldns/wire2str.h $(srcdir)/context.h $(srcdir)/extension/default_eventloop.h $(srcdir)/util-internal.h \
|
||||
$(srcdir)/rr-iter.h $(srcdir)/rr-dict.h $(srcdir)/gldns/gbuffer.h $(srcdir)/gldns/pkthdr.h $(srcdir)/dnssec.h $(srcdir)/stub.h \
|
||||
$(srcdir)/dict.h
|
||||
list.lo list.o: $(srcdir)/list.c $(srcdir)/types-internal.h \
|
||||
getdns/getdns.h \
|
||||
getdns/getdns_extra.h $(srcdir)/util/rbtree.h \
|
||||
$(srcdir)/util-internal.h config.h $(srcdir)/context.h \
|
||||
$(srcdir)/extension/default_eventloop.h $(srcdir)/rr-iter.h $(srcdir)/rr-dict.h $(srcdir)/gldns/gbuffer.h \
|
||||
$(srcdir)/gldns/pkthdr.h $(srcdir)/list.h $(srcdir)/dict.h
|
||||
pubkey-pinning.lo pubkey-pinning.o: $(srcdir)/pubkey-pinning.c config.h \
|
||||
$(srcdir)/debug.h getdns/getdns.h $(srcdir)/context.h \
|
||||
getdns/getdns_extra.h $(srcdir)/types-internal.h \
|
||||
$(srcdir)/util/rbtree.h $(srcdir)/extension/default_eventloop.h
|
||||
request-internal.lo request-internal.o: $(srcdir)/request-internal.c \
|
||||
config.h $(srcdir)/types-internal.h \
|
||||
getdns/getdns.h \
|
||||
getdns/getdns_extra.h $(srcdir)/util/rbtree.h \
|
||||
$(srcdir)/util-internal.h $(srcdir)/context.h $(srcdir)/extension/default_eventloop.h $(srcdir)/rr-iter.h \
|
||||
$(srcdir)/rr-dict.h $(srcdir)/gldns/gbuffer.h $(srcdir)/gldns/pkthdr.h $(srcdir)/gldns/rrdef.h $(srcdir)/gldns/str2wire.h \
|
||||
$(srcdir)/gldns/rrdef.h $(srcdir)/dict.h $(srcdir)/debug.h
|
||||
rr-dict.lo rr-dict.o: $(srcdir)/rr-dict.c $(srcdir)/rr-dict.h config.h \
|
||||
getdns/getdns.h $(srcdir)/gldns/gbuffer.h \
|
||||
$(srcdir)/util-internal.h $(srcdir)/context.h \
|
||||
getdns/getdns_extra.h $(srcdir)/types-internal.h \
|
||||
$(srcdir)/util/rbtree.h $(srcdir)/extension/default_eventloop.h $(srcdir)/rr-iter.h $(srcdir)/gldns/pkthdr.h \
|
||||
$(srcdir)/dict.h
|
||||
rr-iter.lo rr-iter.o: $(srcdir)/rr-iter.c $(srcdir)/rr-iter.h \
|
||||
getdns/getdns.h $(srcdir)/rr-dict.h \
|
||||
config.h $(srcdir)/gldns/gbuffer.h $(srcdir)/gldns/pkthdr.h \
|
||||
$(srcdir)/gldns/rrdef.h
|
||||
stub.lo stub.o: $(srcdir)/stub.c config.h $(srcdir)/debug.h $(srcdir)/stub.h \
|
||||
getdns/getdns.h $(srcdir)/types-internal.h \
|
||||
getdns/getdns_extra.h $(srcdir)/util/rbtree.h \
|
||||
$(srcdir)/gldns/gbuffer.h $(srcdir)/gldns/pkthdr.h $(srcdir)/gldns/rrdef.h $(srcdir)/gldns/str2wire.h \
|
||||
$(srcdir)/gldns/rrdef.h $(srcdir)/gldns/wire2str.h $(srcdir)/rr-iter.h $(srcdir)/rr-dict.h $(srcdir)/context.h \
|
||||
$(srcdir)/extension/default_eventloop.h $(srcdir)/util-internal.h $(srcdir)/general.h $(srcdir)/pubkey-pinning.h
|
||||
sync.lo sync.o: $(srcdir)/sync.c getdns/getdns.h \
|
||||
config.h $(srcdir)/context.h \
|
||||
getdns/getdns_extra.h $(srcdir)/types-internal.h \
|
||||
$(srcdir)/util/rbtree.h $(srcdir)/extension/default_eventloop.h $(srcdir)/general.h $(srcdir)/util-internal.h \
|
||||
$(srcdir)/rr-iter.h $(srcdir)/rr-dict.h $(srcdir)/gldns/gbuffer.h $(srcdir)/gldns/pkthdr.h $(srcdir)/dnssec.h $(srcdir)/stub.h \
|
||||
$(srcdir)/gldns/wire2str.h
|
||||
util-internal.lo util-internal.o: $(srcdir)/util-internal.c config.h \
|
||||
getdns/getdns.h $(srcdir)/dict.h $(srcdir)/util/rbtree.h \
|
||||
$(srcdir)/types-internal.h getdns/getdns_extra.h \
|
||||
$(srcdir)/list.h $(srcdir)/util-internal.h $(srcdir)/context.h $(srcdir)/extension/default_eventloop.h $(srcdir)/rr-iter.h \
|
||||
$(srcdir)/rr-dict.h $(srcdir)/gldns/gbuffer.h $(srcdir)/gldns/pkthdr.h $(srcdir)/gldns/str2wire.h $(srcdir)/gldns/rrdef.h
|
||||
gbuffer.lo gbuffer.o: $(srcdir)/gldns/gbuffer.c config.h \
|
||||
dict.lo dict.o: $(srcdir)/dict.c config.h $(srcdir)/types-internal.h getdns/getdns.h \
|
||||
getdns/getdns_extra.h getdns/getdns.h $(srcdir)/util/rbtree.h $(srcdir)/util-internal.h \
|
||||
$(srcdir)/context.h $(srcdir)/extension/default_eventloop.h config.h getdns/getdns_extra.h \
|
||||
$(srcdir)/ub_loop.h $(srcdir)/rr-iter.h $(srcdir)/rr-dict.h $(srcdir)/gldns/gbuffer.h $(srcdir)/gldns/pkthdr.h $(srcdir)/dict.h \
|
||||
$(srcdir)/list.h $(srcdir)/const-info.h $(srcdir)/gldns/wire2str.h
|
||||
dnssec.lo dnssec.o: $(srcdir)/dnssec.c config.h $(srcdir)/debug.h getdns/getdns.h $(srcdir)/context.h \
|
||||
getdns/getdns_extra.h getdns/getdns.h $(srcdir)/types-internal.h $(srcdir)/util/rbtree.h \
|
||||
$(srcdir)/extension/default_eventloop.h config.h getdns/getdns_extra.h $(srcdir)/ub_loop.h \
|
||||
$(srcdir)/util-internal.h $(srcdir)/rr-iter.h $(srcdir)/rr-dict.h $(srcdir)/gldns/gbuffer.h $(srcdir)/gldns/pkthdr.h \
|
||||
$(srcdir)/dnssec.h $(srcdir)/gldns/str2wire.h $(srcdir)/gldns/rrdef.h $(srcdir)/gldns/wire2str.h $(srcdir)/gldns/keyraw.h \
|
||||
$(srcdir)/gldns/parseutil.h $(srcdir)/general.h $(srcdir)/dict.h $(srcdir)/list.h $(srcdir)/util/val_secalgo.h
|
||||
general.lo general.o: $(srcdir)/general.c config.h $(srcdir)/general.h getdns/getdns.h $(srcdir)/types-internal.h \
|
||||
getdns/getdns_extra.h getdns/getdns.h $(srcdir)/util/rbtree.h $(srcdir)/gldns/wire2str.h \
|
||||
$(srcdir)/context.h $(srcdir)/extension/default_eventloop.h config.h getdns/getdns_extra.h \
|
||||
$(srcdir)/ub_loop.h $(srcdir)/util-internal.h $(srcdir)/rr-iter.h $(srcdir)/rr-dict.h $(srcdir)/gldns/gbuffer.h \
|
||||
$(srcdir)/gldns/pkthdr.h $(srcdir)/dnssec.h $(srcdir)/stub.h $(srcdir)/dict.h
|
||||
list.lo list.o: $(srcdir)/list.c $(srcdir)/types-internal.h getdns/getdns.h getdns/getdns_extra.h \
|
||||
getdns/getdns.h $(srcdir)/util/rbtree.h $(srcdir)/util-internal.h config.h $(srcdir)/context.h \
|
||||
$(srcdir)/extension/default_eventloop.h config.h getdns/getdns_extra.h $(srcdir)/ub_loop.h \
|
||||
$(srcdir)/rr-iter.h $(srcdir)/rr-dict.h $(srcdir)/gldns/gbuffer.h $(srcdir)/gldns/pkthdr.h $(srcdir)/list.h $(srcdir)/dict.h
|
||||
pubkey-pinning.lo pubkey-pinning.o: $(srcdir)/pubkey-pinning.c config.h $(srcdir)/debug.h getdns/getdns.h \
|
||||
$(srcdir)/context.h getdns/getdns.h getdns/getdns_extra.h $(srcdir)/types-internal.h \
|
||||
$(srcdir)/util/rbtree.h $(srcdir)/extension/default_eventloop.h config.h \
|
||||
getdns/getdns_extra.h $(srcdir)/ub_loop.h
|
||||
request-internal.lo request-internal.o: $(srcdir)/request-internal.c config.h $(srcdir)/types-internal.h \
|
||||
getdns/getdns.h getdns/getdns_extra.h getdns/getdns.h $(srcdir)/util/rbtree.h \
|
||||
$(srcdir)/util-internal.h $(srcdir)/context.h $(srcdir)/extension/default_eventloop.h config.h \
|
||||
getdns/getdns_extra.h $(srcdir)/ub_loop.h $(srcdir)/rr-iter.h $(srcdir)/rr-dict.h $(srcdir)/gldns/gbuffer.h \
|
||||
$(srcdir)/gldns/pkthdr.h $(srcdir)/gldns/rrdef.h $(srcdir)/gldns/str2wire.h $(srcdir)/gldns/rrdef.h $(srcdir)/dict.h \
|
||||
$(srcdir)/debug.h
|
||||
rr-dict.lo rr-dict.o: $(srcdir)/rr-dict.c $(srcdir)/rr-dict.h config.h getdns/getdns.h $(srcdir)/gldns/gbuffer.h \
|
||||
$(srcdir)/util-internal.h $(srcdir)/context.h getdns/getdns_extra.h getdns/getdns.h \
|
||||
$(srcdir)/types-internal.h $(srcdir)/util/rbtree.h $(srcdir)/extension/default_eventloop.h config.h \
|
||||
getdns/getdns_extra.h $(srcdir)/ub_loop.h $(srcdir)/rr-iter.h $(srcdir)/gldns/pkthdr.h $(srcdir)/dict.h
|
||||
rr-iter.lo rr-iter.o: $(srcdir)/rr-iter.c $(srcdir)/rr-iter.h getdns/getdns.h $(srcdir)/rr-dict.h config.h \
|
||||
$(srcdir)/gldns/gbuffer.h $(srcdir)/gldns/pkthdr.h $(srcdir)/gldns/rrdef.h
|
||||
stub.lo stub.o: $(srcdir)/stub.c config.h $(srcdir)/debug.h $(srcdir)/stub.h getdns/getdns.h $(srcdir)/types-internal.h \
|
||||
getdns/getdns_extra.h getdns/getdns.h $(srcdir)/util/rbtree.h $(srcdir)/gldns/gbuffer.h \
|
||||
$(srcdir)/gldns/pkthdr.h $(srcdir)/gldns/rrdef.h $(srcdir)/gldns/str2wire.h $(srcdir)/gldns/rrdef.h \
|
||||
$(srcdir)/gldns/wire2str.h $(srcdir)/rr-iter.h $(srcdir)/rr-dict.h $(srcdir)/context.h \
|
||||
$(srcdir)/extension/default_eventloop.h config.h getdns/getdns_extra.h $(srcdir)/ub_loop.h \
|
||||
$(srcdir)/util-internal.h $(srcdir)/general.h $(srcdir)/pubkey-pinning.h
|
||||
sync.lo sync.o: $(srcdir)/sync.c config.h getdns/getdns.h getdns/getdns_extra.h \
|
||||
getdns/getdns.h
|
||||
ub_loop.lo ub_loop.o: $(srcdir)/ub_loop.c $(srcdir)/ub_loop.h config.h getdns/getdns.h \
|
||||
getdns/getdns_extra.h getdns/getdns.h $(srcdir)/types-internal.h $(srcdir)/util/rbtree.h
|
||||
util-internal.lo util-internal.o: $(srcdir)/util-internal.c config.h getdns/getdns.h $(srcdir)/dict.h \
|
||||
$(srcdir)/util/rbtree.h $(srcdir)/types-internal.h getdns/getdns_extra.h getdns/getdns.h \
|
||||
$(srcdir)/list.h $(srcdir)/util-internal.h $(srcdir)/context.h $(srcdir)/extension/default_eventloop.h config.h \
|
||||
getdns/getdns_extra.h $(srcdir)/ub_loop.h $(srcdir)/rr-iter.h $(srcdir)/rr-dict.h $(srcdir)/gldns/gbuffer.h \
|
||||
$(srcdir)/gldns/pkthdr.h $(srcdir)/gldns/str2wire.h $(srcdir)/gldns/rrdef.h
|
||||
version.lo version.o: version.c
|
||||
gbuffer.lo gbuffer.o: $(srcdir)/gldns/gbuffer.c config.h $(srcdir)/gldns/gbuffer.h
|
||||
keyraw.lo keyraw.o: $(srcdir)/gldns/keyraw.c config.h $(srcdir)/gldns/keyraw.h $(srcdir)/gldns/rrdef.h
|
||||
parse.lo parse.o: $(srcdir)/gldns/parse.c config.h $(srcdir)/gldns/parse.h $(srcdir)/gldns/parseutil.h \
|
||||
$(srcdir)/gldns/gbuffer.h
|
||||
keyraw.lo keyraw.o: $(srcdir)/gldns/keyraw.c config.h \
|
||||
$(srcdir)/gldns/keyraw.h $(srcdir)/gldns/rrdef.h
|
||||
parse.lo parse.o: $(srcdir)/gldns/parse.c config.h \
|
||||
$(srcdir)/gldns/parse.h $(srcdir)/gldns/parseutil.h $(srcdir)/gldns/gbuffer.h
|
||||
parseutil.lo parseutil.o: $(srcdir)/gldns/parseutil.c config.h \
|
||||
$(srcdir)/gldns/parseutil.h
|
||||
rrdef.lo rrdef.o: $(srcdir)/gldns/rrdef.c config.h \
|
||||
$(srcdir)/gldns/rrdef.h $(srcdir)/gldns/parseutil.h
|
||||
str2wire.lo str2wire.o: $(srcdir)/gldns/str2wire.c config.h \
|
||||
$(srcdir)/gldns/str2wire.h $(srcdir)/gldns/rrdef.h $(srcdir)/gldns/wire2str.h $(srcdir)/gldns/gbuffer.h \
|
||||
$(srcdir)/gldns/parse.h $(srcdir)/gldns/parseutil.h
|
||||
wire2str.lo wire2str.o: $(srcdir)/gldns/wire2str.c config.h \
|
||||
$(srcdir)/gldns/wire2str.h $(srcdir)/gldns/str2wire.h $(srcdir)/gldns/rrdef.h $(srcdir)/gldns/pkthdr.h \
|
||||
$(srcdir)/gldns/parseutil.h $(srcdir)/gldns/gbuffer.h $(srcdir)/gldns/keyraw.h
|
||||
parseutil.lo parseutil.o: $(srcdir)/gldns/parseutil.c config.h $(srcdir)/gldns/parseutil.h
|
||||
rrdef.lo rrdef.o: $(srcdir)/gldns/rrdef.c config.h $(srcdir)/gldns/rrdef.h $(srcdir)/gldns/parseutil.h
|
||||
str2wire.lo str2wire.o: $(srcdir)/gldns/str2wire.c config.h $(srcdir)/gldns/str2wire.h $(srcdir)/gldns/rrdef.h \
|
||||
$(srcdir)/gldns/wire2str.h $(srcdir)/gldns/gbuffer.h $(srcdir)/gldns/parse.h $(srcdir)/gldns/parseutil.h
|
||||
wire2str.lo wire2str.o: $(srcdir)/gldns/wire2str.c config.h $(srcdir)/gldns/wire2str.h $(srcdir)/gldns/str2wire.h \
|
||||
$(srcdir)/gldns/rrdef.h $(srcdir)/gldns/pkthdr.h $(srcdir)/gldns/parseutil.h $(srcdir)/gldns/gbuffer.h \
|
||||
$(srcdir)/gldns/keyraw.h
|
||||
arc4_lock.lo arc4_lock.o: $(srcdir)/compat/arc4_lock.c config.h
|
||||
arc4random.lo arc4random.o: $(srcdir)/compat/arc4random.c config.h \
|
||||
$(srcdir)/compat/chacha_private.h
|
||||
arc4random_uniform.lo arc4random_uniform.o: $(srcdir)/compat/arc4random_uniform.c \
|
||||
config.h
|
||||
explicit_bzero.lo explicit_bzero.o: $(srcdir)/compat/explicit_bzero.c \
|
||||
config.h
|
||||
getentropy_linux.lo getentropy_linux.o: $(srcdir)/compat/getentropy_linux.c \
|
||||
config.h
|
||||
getentropy_osx.lo getentropy_osx.o: $(srcdir)/compat/getentropy_osx.c \
|
||||
config.h
|
||||
getentropy_solaris.lo getentropy_solaris.o: $(srcdir)/compat/getentropy_solaris.c \
|
||||
config.h
|
||||
arc4random.lo arc4random.o: $(srcdir)/compat/arc4random.c config.h $(srcdir)/compat/chacha_private.h
|
||||
arc4random_uniform.lo arc4random_uniform.o: $(srcdir)/compat/arc4random_uniform.c config.h
|
||||
explicit_bzero.lo explicit_bzero.o: $(srcdir)/compat/explicit_bzero.c config.h
|
||||
getentropy_linux.lo getentropy_linux.o: $(srcdir)/compat/getentropy_linux.c config.h
|
||||
getentropy_osx.lo getentropy_osx.o: $(srcdir)/compat/getentropy_osx.c config.h
|
||||
getentropy_solaris.lo getentropy_solaris.o: $(srcdir)/compat/getentropy_solaris.c config.h
|
||||
getentropy_win.lo getentropy_win.o: $(srcdir)/compat/getentropy_win.c
|
||||
inet_ntop.lo inet_ntop.o: $(srcdir)/compat/inet_ntop.c config.h
|
||||
inet_pton.lo inet_pton.o: $(srcdir)/compat/inet_pton.c config.h
|
||||
sha512.lo sha512.o: $(srcdir)/compat/sha512.c config.h
|
||||
strlcpy.lo strlcpy.o: $(srcdir)/compat/strlcpy.c config.h
|
||||
rbtree.lo rbtree.o: $(srcdir)/util/rbtree.c config.h $(srcdir)/util/log.h \
|
||||
$(srcdir)/debug.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/rbtree.h
|
||||
val_secalgo.lo val_secalgo.o: $(srcdir)/util/val_secalgo.c config.h \
|
||||
$(srcdir)/util/val_secalgo.h $(srcdir)/util/log.h $(srcdir)/debug.h $(srcdir)/gldns/rrdef.h $(srcdir)/gldns/keyraw.h \
|
||||
$(srcdir)/gldns/gbuffer.h
|
||||
rbtree.lo rbtree.o: $(srcdir)/util/rbtree.c config.h $(srcdir)/util/log.h $(srcdir)/debug.h config.h \
|
||||
$(srcdir)/util/fptr_wlist.h $(srcdir)/util/rbtree.h
|
||||
val_secalgo.lo val_secalgo.o: $(srcdir)/util/val_secalgo.c config.h $(srcdir)/util/val_secalgo.h $(srcdir)/util/log.h \
|
||||
$(srcdir)/debug.h config.h $(srcdir)/gldns/rrdef.h $(srcdir)/gldns/keyraw.h $(srcdir)/gldns/gbuffer.h
|
||||
default_eventloop.lo default_eventloop.o: $(srcdir)/extension/default_eventloop.c \
|
||||
$(srcdir)/extension/default_eventloop.h config.h \
|
||||
getdns/getdns.h \
|
||||
getdns/getdns_extra.h $(srcdir)/debug.h
|
||||
libev.lo libev.o: $(srcdir)/extension/libev.c config.h \
|
||||
$(srcdir)/types-internal.h getdns/getdns.h \
|
||||
getdns/getdns_extra.h $(srcdir)/util/rbtree.h \
|
||||
$(srcdir)/getdns/getdns_ext_libev.h
|
||||
libevent.lo libevent.o: $(srcdir)/extension/libevent.c config.h \
|
||||
$(srcdir)/types-internal.h getdns/getdns.h \
|
||||
getdns/getdns_extra.h $(srcdir)/util/rbtree.h \
|
||||
$(srcdir)/getdns/getdns_ext_libevent.h
|
||||
libuv.lo libuv.o: $(srcdir)/extension/libuv.c config.h $(srcdir)/debug.h \
|
||||
$(srcdir)/types-internal.h getdns/getdns.h \
|
||||
getdns/getdns_extra.h $(srcdir)/util/rbtree.h \
|
||||
$(srcdir)/getdns/getdns_ext_libuv.h
|
||||
$(srcdir)/extension/default_eventloop.h config.h getdns/getdns.h \
|
||||
getdns/getdns_extra.h $(srcdir)/debug.h config.h
|
||||
libev.lo libev.o: $(srcdir)/extension/libev.c config.h $(srcdir)/types-internal.h getdns/getdns.h \
|
||||
getdns/getdns_extra.h getdns/getdns.h $(srcdir)/util/rbtree.h \
|
||||
$(srcdir)/getdns/getdns_ext_libev.h getdns/getdns_extra.h
|
||||
libevent.lo libevent.o: $(srcdir)/extension/libevent.c config.h $(srcdir)/types-internal.h \
|
||||
getdns/getdns.h getdns/getdns_extra.h getdns/getdns.h $(srcdir)/util/rbtree.h \
|
||||
$(srcdir)/getdns/getdns_ext_libevent.h getdns/getdns_extra.h
|
||||
libuv.lo libuv.o: $(srcdir)/extension/libuv.c config.h $(srcdir)/debug.h config.h $(srcdir)/types-internal.h \
|
||||
getdns/getdns.h getdns/getdns_extra.h getdns/getdns.h $(srcdir)/util/rbtree.h \
|
||||
$(srcdir)/getdns/getdns_ext_libuv.h getdns/getdns_extra.h
|
||||
|
|
|
@ -63,6 +63,9 @@ typedef unsigned short in_port_t;
|
|||
#include <ctype.h>
|
||||
|
||||
#include "config.h"
|
||||
#ifdef HAVE_LIBUNBOUND
|
||||
#include <unbound.h>
|
||||
#endif
|
||||
#include "debug.h"
|
||||
#include "gldns/str2wire.h"
|
||||
#include "gldns/wire2str.h"
|
||||
|
@ -1372,7 +1375,7 @@ getdns_context_request_count_changed(getdns_context *context)
|
|||
&context->ub_event, context->ub_event.ev);
|
||||
#ifndef USE_WINSOCK
|
||||
#ifdef HAVE_UNBOUND_EVENT_API
|
||||
if (!context->unbound_event_api)
|
||||
if (!_getdns_ub_loop_enabled(&context->ub_loop))
|
||||
#endif
|
||||
context->extension->vmt->schedule(
|
||||
context->extension, ub_fd(context->unbound_ctx),
|
||||
|
@ -1386,7 +1389,7 @@ getdns_context_request_count_changed(getdns_context *context)
|
|||
|
||||
#ifndef USE_WINSOCK
|
||||
#ifdef HAVE_UNBOUND_EVENT_API
|
||||
if (!context->unbound_event_api)
|
||||
if (!_getdns_ub_loop_enabled(&context->ub_loop))
|
||||
#endif
|
||||
context->extension->vmt->clear(
|
||||
context->extension, &context->ub_event);
|
||||
|
@ -1421,10 +1424,9 @@ rebuild_ub_ctx(struct getdns_context* context) {
|
|||
}
|
||||
/* setup */
|
||||
#ifdef HAVE_UNBOUND_EVENT_API
|
||||
context->unbound_event_api =
|
||||
strncmp(ub_event_get_version(), "getdns-event", 12) == 0;
|
||||
if (context->unbound_event_api) {
|
||||
context->unbound_ctx = ub_ctx_create_event((void *)context->extension);
|
||||
_getdns_ub_loop_init(&context->ub_loop, &context->mf, context->extension);
|
||||
if (_getdns_ub_loop_enabled(&context->ub_loop)) {
|
||||
context->unbound_ctx = ub_ctx_create_ub_event(&context->ub_loop.super);
|
||||
} else {
|
||||
#endif
|
||||
context->unbound_ctx = ub_ctx_create();
|
||||
|
@ -3006,9 +3008,8 @@ getdns_context_detach_eventloop(struct getdns_context* context)
|
|||
context->extension = &context->default_eventloop.loop;
|
||||
_getdns_default_eventloop_init(&context->default_eventloop);
|
||||
#ifdef HAVE_UNBOUND_EVENT_API
|
||||
if (context->unbound_event_api)
|
||||
(void) ub_ctx_set_event(
|
||||
context->unbound_ctx, (void *)context->extension);
|
||||
if (_getdns_ub_loop_enabled(&context->ub_loop))
|
||||
context->ub_loop.extension = context->extension;
|
||||
#endif
|
||||
return GETDNS_RETURN_GOOD;
|
||||
}
|
||||
|
@ -3025,9 +3026,8 @@ getdns_context_set_eventloop(getdns_context* context, getdns_eventloop* loop)
|
|||
}
|
||||
context->extension = loop;
|
||||
#ifdef HAVE_UNBOUND_EVENT_API
|
||||
if (context->unbound_event_api)
|
||||
(void) ub_ctx_set_event(
|
||||
context->unbound_ctx, (void *)context->extension);
|
||||
if (_getdns_ub_loop_enabled(&context->ub_loop))
|
||||
context->ub_loop.extension = loop;
|
||||
#endif
|
||||
return GETDNS_RETURN_GOOD;
|
||||
}
|
||||
|
|
|
@ -43,6 +43,7 @@
|
|||
#include "types-internal.h"
|
||||
#include "extension/default_eventloop.h"
|
||||
#include "util/rbtree.h"
|
||||
#include "ub_loop.h"
|
||||
|
||||
struct getdns_dns_req;
|
||||
struct ub_ctx;
|
||||
|
@ -221,10 +222,9 @@ struct getdns_context {
|
|||
struct ub_ctx *unbound_ctx;
|
||||
int unbound_ta_set;
|
||||
#ifdef HAVE_UNBOUND_EVENT_API
|
||||
int unbound_event_api;
|
||||
_getdns_ub_loop ub_loop;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* A tree to hold local host information*/
|
||||
_getdns_rbtree_t local_hosts;
|
||||
|
||||
|
|
|
@ -39,6 +39,12 @@
|
|||
#include <string.h>
|
||||
#include "config.h"
|
||||
#include "general.h"
|
||||
#ifdef HAVE_LIBUNBOUND
|
||||
#include <unbound.h>
|
||||
#endif
|
||||
#ifdef HAVE_UNBOUND_EVENT_API
|
||||
#include "ub_loop.h"
|
||||
#endif
|
||||
#include "gldns/wire2str.h"
|
||||
#include "context.h"
|
||||
#include "types-internal.h"
|
||||
|
@ -342,7 +348,7 @@ _getdns_submit_netreq(getdns_network_req *netreq)
|
|||
|
||||
#ifdef HAVE_LIBUNBOUND
|
||||
#ifdef HAVE_UNBOUND_EVENT_API
|
||||
if (dns_req->context->unbound_event_api)
|
||||
if (_getdns_ub_loop_enabled(&dns_req->context->ub_loop))
|
||||
return ub_resolve_event(dns_req->context->unbound_ctx,
|
||||
name, netreq->request_type, netreq->owner->request_class,
|
||||
netreq, ub_resolve_event_callback, &(netreq->unbound_id)) ?
|
||||
|
|
|
@ -232,24 +232,21 @@ depend:
|
|||
.PHONY: clean test
|
||||
|
||||
# Dependencies for the unit tests
|
||||
check_getdns.lo check_getdns.o: $(srcdir)/check_getdns.c \
|
||||
../getdns/getdns.h \
|
||||
$(srcdir)/check_getdns_common.h \
|
||||
../getdns/getdns_extra.h \
|
||||
$(srcdir)/check_getdns_general.h $(srcdir)/check_getdns_general_sync.h \
|
||||
$(srcdir)/check_getdns_address.h $(srcdir)/check_getdns_address_sync.h \
|
||||
$(srcdir)/check_getdns_hostname.h $(srcdir)/check_getdns_hostname_sync.h \
|
||||
$(srcdir)/check_getdns_context_create.h $(srcdir)/check_getdns_context_destroy.h \
|
||||
$(srcdir)/check_getdns_cancel_callback.h $(srcdir)/check_getdns_list_get_length.h \
|
||||
$(srcdir)/check_getdns_list_get_data_type.h $(srcdir)/check_getdns_list_get_dict.h \
|
||||
$(srcdir)/check_getdns_list_get_list.h $(srcdir)/check_getdns_list_get_int.h \
|
||||
$(srcdir)/check_getdns_list_get_bindata.h $(srcdir)/check_getdns_dict_get_names.h \
|
||||
$(srcdir)/check_getdns_dict_get_data_type.h $(srcdir)/check_getdns_dict_get_dict.h \
|
||||
$(srcdir)/check_getdns_dict_get_list.h $(srcdir)/check_getdns_dict_get_bindata.h \
|
||||
$(srcdir)/check_getdns_dict_get_int.h $(srcdir)/check_getdns_dict_destroy.h \
|
||||
$(srcdir)/check_getdns_dict_set_dict.h $(srcdir)/check_getdns_dict_set_list.h \
|
||||
$(srcdir)/check_getdns_dict_set_bindata.h $(srcdir)/check_getdns_dict_set_int.h \
|
||||
$(srcdir)/check_getdns_convert_ulabel_to_alabel.h \
|
||||
check_getdns.lo check_getdns.o: $(srcdir)/check_getdns.c ../getdns/getdns.h $(srcdir)/check_getdns_common.h \
|
||||
../getdns/getdns_extra.h $(srcdir)/check_getdns_general.h \
|
||||
$(srcdir)/check_getdns_general_sync.h $(srcdir)/check_getdns_address.h \
|
||||
$(srcdir)/check_getdns_address_sync.h $(srcdir)/check_getdns_hostname.h \
|
||||
$(srcdir)/check_getdns_hostname_sync.h $(srcdir)/check_getdns_context_create.h \
|
||||
$(srcdir)/check_getdns_context_destroy.h $(srcdir)/check_getdns_cancel_callback.h \
|
||||
$(srcdir)/check_getdns_list_get_length.h $(srcdir)/check_getdns_list_get_data_type.h \
|
||||
$(srcdir)/check_getdns_list_get_dict.h $(srcdir)/check_getdns_list_get_list.h \
|
||||
$(srcdir)/check_getdns_list_get_int.h $(srcdir)/check_getdns_list_get_bindata.h \
|
||||
$(srcdir)/check_getdns_dict_get_names.h $(srcdir)/check_getdns_dict_get_data_type.h \
|
||||
$(srcdir)/check_getdns_dict_get_dict.h $(srcdir)/check_getdns_dict_get_list.h \
|
||||
$(srcdir)/check_getdns_dict_get_bindata.h $(srcdir)/check_getdns_dict_get_int.h \
|
||||
$(srcdir)/check_getdns_dict_destroy.h $(srcdir)/check_getdns_dict_set_dict.h \
|
||||
$(srcdir)/check_getdns_dict_set_list.h $(srcdir)/check_getdns_dict_set_bindata.h \
|
||||
$(srcdir)/check_getdns_dict_set_int.h $(srcdir)/check_getdns_convert_ulabel_to_alabel.h \
|
||||
$(srcdir)/check_getdns_convert_alabel_to_ulabel.h $(srcdir)/check_getdns_pretty_print_dict.h \
|
||||
$(srcdir)/check_getdns_display_ip_address.h \
|
||||
$(srcdir)/check_getdns_context_set_context_update_callback.h \
|
||||
|
@ -257,59 +254,36 @@ check_getdns.lo check_getdns.o: $(srcdir)/check_getdns.c \
|
|||
$(srcdir)/check_getdns_context_set_upstream_recursive_servers.h \
|
||||
$(srcdir)/check_getdns_service.h $(srcdir)/check_getdns_service_sync.h \
|
||||
$(srcdir)/check_getdns_transport.h
|
||||
check_getdns_common.lo check_getdns_common.o: $(srcdir)/check_getdns_common.c \
|
||||
../getdns/getdns.h \
|
||||
../config.h $(srcdir)/check_getdns_common.h \
|
||||
../getdns/getdns_extra.h \
|
||||
check_getdns_common.lo check_getdns_common.o: $(srcdir)/check_getdns_common.c ../getdns/getdns.h \
|
||||
../config.h $(srcdir)/check_getdns_common.h ../getdns/getdns_extra.h \
|
||||
$(srcdir)/check_getdns_eventloop.h
|
||||
check_getdns_context_set_timeout.lo check_getdns_context_set_timeout.o: $(srcdir)/check_getdns_context_set_timeout.c \
|
||||
$(srcdir)/check_getdns_context_set_timeout.h $(srcdir)/check_getdns_common.h \
|
||||
../getdns/getdns.h \
|
||||
../getdns/getdns_extra.h
|
||||
../getdns/getdns.h ../getdns/getdns_extra.h
|
||||
check_getdns_libev.lo check_getdns_libev.o: $(srcdir)/check_getdns_libev.c $(srcdir)/check_getdns_eventloop.h \
|
||||
../config.h \
|
||||
../getdns/getdns.h \
|
||||
$(srcdir)/../getdns/getdns_ext_libev.h \
|
||||
../getdns/getdns_extra.h \
|
||||
$(srcdir)/check_getdns_common.h
|
||||
../config.h ../getdns/getdns.h $(srcdir)/../getdns/getdns_ext_libev.h \
|
||||
../getdns/getdns_extra.h $(srcdir)/check_getdns_common.h
|
||||
check_getdns_libevent.lo check_getdns_libevent.o: $(srcdir)/check_getdns_libevent.c $(srcdir)/check_getdns_eventloop.h \
|
||||
../config.h \
|
||||
../getdns/getdns.h \
|
||||
$(srcdir)/../getdns/getdns_ext_libevent.h \
|
||||
../getdns/getdns_extra.h \
|
||||
$(srcdir)/check_getdns_libevent.h $(srcdir)/check_getdns_common.h
|
||||
../config.h ../getdns/getdns.h $(srcdir)/../getdns/getdns_ext_libevent.h \
|
||||
../getdns/getdns_extra.h $(srcdir)/check_getdns_libevent.h $(srcdir)/check_getdns_common.h
|
||||
check_getdns_libuv.lo check_getdns_libuv.o: $(srcdir)/check_getdns_libuv.c $(srcdir)/check_getdns_eventloop.h \
|
||||
../config.h \
|
||||
../getdns/getdns.h \
|
||||
$(srcdir)/../getdns/getdns_ext_libuv.h \
|
||||
../getdns/getdns_extra.h \
|
||||
$(srcdir)/check_getdns_common.h
|
||||
../config.h ../getdns/getdns.h $(srcdir)/../getdns/getdns_ext_libuv.h \
|
||||
../getdns/getdns_extra.h $(srcdir)/check_getdns_common.h
|
||||
check_getdns_selectloop.lo check_getdns_selectloop.o: $(srcdir)/check_getdns_selectloop.c \
|
||||
$(srcdir)/check_getdns_eventloop.h ../config.h \
|
||||
../getdns/getdns.h \
|
||||
$(srcdir)/check_getdns_eventloop.h ../config.h ../getdns/getdns.h \
|
||||
../getdns/getdns_extra.h
|
||||
check_getdns_transport.lo check_getdns_transport.o: $(srcdir)/check_getdns_transport.c \
|
||||
$(srcdir)/check_getdns_transport.h $(srcdir)/check_getdns_common.h \
|
||||
../getdns/getdns.h \
|
||||
$(srcdir)/check_getdns_transport.h $(srcdir)/check_getdns_common.h ../getdns/getdns.h \
|
||||
../getdns/getdns_extra.h
|
||||
getdns_query.lo getdns_query.o: $(srcdir)/getdns_query.c \
|
||||
../config.h $(srcdir)/../debug.h \
|
||||
../getdns/getdns.h \
|
||||
../getdns/getdns_extra.h
|
||||
scratchpad.template.lo scratchpad.template.o: scratchpad.template.c \
|
||||
../getdns/getdns.h \
|
||||
getdns_query.lo getdns_query.o: $(srcdir)/getdns_query.c ../config.h $(srcdir)/../debug.h ../config.h \
|
||||
../getdns/getdns.h ../getdns/getdns_extra.h
|
||||
scratchpad.template.lo scratchpad.template.o: scratchpad.template.c ../getdns/getdns.h \
|
||||
../getdns/getdns_extra.h
|
||||
testmessages.lo testmessages.o: $(srcdir)/testmessages.c $(srcdir)/testmessages.h
|
||||
tests_dict.lo tests_dict.o: $(srcdir)/tests_dict.c $(srcdir)/testmessages.h \
|
||||
../getdns/getdns.h
|
||||
tests_list.lo tests_list.o: $(srcdir)/tests_list.c $(srcdir)/testmessages.h \
|
||||
../getdns/getdns.h
|
||||
tests_namespaces.lo tests_namespaces.o: $(srcdir)/tests_namespaces.c $(srcdir)/testmessages.h \
|
||||
../getdns/getdns.h
|
||||
tests_stub_async.lo tests_stub_async.o: $(srcdir)/tests_stub_async.c \
|
||||
../config.h $(srcdir)/testmessages.h \
|
||||
../getdns/getdns.h \
|
||||
../getdns/getdns_extra.h
|
||||
tests_stub_sync.lo tests_stub_sync.o: $(srcdir)/tests_stub_sync.c $(srcdir)/testmessages.h \
|
||||
../getdns/getdns.h \
|
||||
tests_dict.lo tests_dict.o: $(srcdir)/tests_dict.c $(srcdir)/testmessages.h ../getdns/getdns.h
|
||||
tests_list.lo tests_list.o: $(srcdir)/tests_list.c $(srcdir)/testmessages.h ../getdns/getdns.h
|
||||
tests_namespaces.lo tests_namespaces.o: $(srcdir)/tests_namespaces.c $(srcdir)/testmessages.h ../getdns/getdns.h
|
||||
tests_stub_async.lo tests_stub_async.o: $(srcdir)/tests_stub_async.c ../config.h $(srcdir)/testmessages.h \
|
||||
../getdns/getdns.h ../getdns/getdns_extra.h
|
||||
tests_stub_sync.lo tests_stub_sync.o: $(srcdir)/tests_stub_sync.c $(srcdir)/testmessages.h ../getdns/getdns.h \
|
||||
../getdns/getdns_extra.h
|
||||
|
|
|
@ -0,0 +1,341 @@
|
|||
/**
|
||||
*
|
||||
* \file ub_loop.c
|
||||
* @brief Interface to the unbound pluggable event API
|
||||
*
|
||||
* These routines are not intended to be used by applications calling into
|
||||
* the library.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2013, NLnet Labs, Verisign, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the names of the copyright holders nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL Verisign, Inc. BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "ub_loop.h"
|
||||
#ifdef HAVE_UNBOUND_EVENT_API
|
||||
|
||||
#ifndef HAVE_UNBOUND_EVENT_H
|
||||
/** event timeout */
|
||||
#define UB_EV_TIMEOUT 0x01
|
||||
/** event fd readable */
|
||||
#define UB_EV_READ 0x02
|
||||
/** event fd writable */
|
||||
#define UB_EV_WRITE 0x04
|
||||
/** event signal */
|
||||
#define UB_EV_SIGNAL 0x08
|
||||
/** event must persist */
|
||||
#define UB_EV_PERSIST 0x10
|
||||
|
||||
struct ub_event_base_vmt {
|
||||
void (*event_base_free)(struct ub_event_base*);
|
||||
int (*event_base_dispatch)(struct ub_event_base*);
|
||||
int (*event_base_loopexit)(struct ub_event_base*, struct timeval*);
|
||||
struct ub_event* (*event_new)(struct ub_event_base*,
|
||||
int fd, short bits, void (*cb)(int, short, void*), void* arg);
|
||||
struct ub_event* (*signal_new)(struct ub_event_base*, int fd,
|
||||
void (*cb)(int, short, void*), void* arg);
|
||||
struct ub_event* (*winsock_register_wsaevent)(struct ub_event_base*,
|
||||
void* wsaevent, void (*cb)(int, short, void*), void* arg);
|
||||
};
|
||||
|
||||
struct ub_event_vmt {
|
||||
void (*event_add_bits)(struct ub_event*, short);
|
||||
void (*event_del_bits)(struct ub_event*, short);
|
||||
void (*event_set_fd)(struct ub_event*, int);
|
||||
void (*event_free)(struct ub_event*);
|
||||
int (*event_add)(struct ub_event*, struct timeval*);
|
||||
int (*event_del)(struct ub_event*);
|
||||
int (*timer_add)(struct ub_event*, struct ub_event_base*,
|
||||
void (*cb)(int, short, void*), void* arg, struct timeval*);
|
||||
int (*timer_del)(struct ub_event*);
|
||||
int (*signal_add)(struct ub_event*, struct timeval*);
|
||||
int (*signal_del)(struct ub_event*);
|
||||
void (*winsock_unregister_wsaevent)(struct ub_event* ev);
|
||||
void (*winsock_tcp_wouldblock)(struct ub_event*, int eventbit);
|
||||
};
|
||||
|
||||
struct ub_event {
|
||||
struct ub_event_vmt* vmt;
|
||||
};
|
||||
#endif
|
||||
|
||||
typedef struct my_event {
|
||||
struct ub_event super;
|
||||
/** event in the getdns event loop */
|
||||
getdns_eventloop_event gev;
|
||||
/** is event already added */
|
||||
int added;
|
||||
|
||||
/** event loop it belongs to */
|
||||
_getdns_ub_loop *loop;
|
||||
/** fd to poll or -1 for timeouts. signal number for sigs. */
|
||||
int fd;
|
||||
/** what events this event is interested in, see EV_.. above. */
|
||||
short bits;
|
||||
/** timeout value */
|
||||
uint64_t timeout;
|
||||
/** callback to call: fd, eventbits, userarg */
|
||||
void (*cb)(int, short, void *arg);
|
||||
/** callback user arg */
|
||||
void *arg;
|
||||
} my_event;
|
||||
|
||||
#define AS_UB_LOOP(x) \
|
||||
(((union {struct ub_event_base* a; _getdns_ub_loop* b;})x).b)
|
||||
#define AS_MY_EVENT(x) \
|
||||
(((union {struct ub_event* a; my_event* b;})x).b)
|
||||
|
||||
static void my_event_base_free(struct ub_event_base* base)
|
||||
{
|
||||
(void)base;
|
||||
return;
|
||||
}
|
||||
|
||||
static int my_event_base_dispatch(struct ub_event_base* base)
|
||||
{
|
||||
(void)base;
|
||||
/* We don't run the pluggable event base ourselfs */
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int my_event_base_loopexit(struct ub_event_base* base, struct timeval* tv)
|
||||
{
|
||||
(void)tv;
|
||||
AS_UB_LOOP(base)->running = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define CLEAR_MY_EVENT(ev) \
|
||||
do { (ev)->loop->extension->vmt->clear((ev)->loop->extension, \
|
||||
&(ev)->gev); (ev)->added = 0; } while(0)
|
||||
|
||||
#define SCHEDULE_MY_EVENT(ev) \
|
||||
do { if ((ev)->gev.read_cb||(ev)->gev.write_cb||(ev)->gev.timeout_cb){\
|
||||
(ev)->loop->extension->vmt->schedule((ev)->loop->extension, \
|
||||
(ev)->fd, (uint64_t)-1, &(ev)->gev); (ev)->added=1; }}while(0)
|
||||
|
||||
static void read_cb(void *userarg)
|
||||
{
|
||||
struct my_event *ev = (struct my_event *)userarg;
|
||||
(*ev->cb)(ev->fd, UB_EV_READ, ev->arg);
|
||||
if ((ev->bits & UB_EV_PERSIST) == 0)
|
||||
CLEAR_MY_EVENT(ev);
|
||||
}
|
||||
|
||||
static void write_cb(void *userarg)
|
||||
{
|
||||
struct my_event *ev = (struct my_event *)userarg;
|
||||
(*ev->cb)(ev->fd, UB_EV_WRITE, ev->arg);
|
||||
if ((ev->bits & UB_EV_PERSIST) == 0)
|
||||
CLEAR_MY_EVENT(ev);
|
||||
}
|
||||
|
||||
static void timeout_cb(void *userarg)
|
||||
{
|
||||
struct my_event *ev = (struct my_event *)userarg;
|
||||
(*ev->cb)(ev->fd, UB_EV_TIMEOUT, ev->arg);
|
||||
if ((ev->bits & UB_EV_PERSIST) == 0)
|
||||
CLEAR_MY_EVENT(ev);
|
||||
}
|
||||
|
||||
static void set_gev_callbacks(my_event* ev, short bits)
|
||||
{
|
||||
int added = ev->added;
|
||||
|
||||
if (ev->bits != bits) {
|
||||
if (added)
|
||||
CLEAR_MY_EVENT(ev);
|
||||
|
||||
ev->gev.read_cb = bits & UB_EV_READ ? read_cb : NULL;
|
||||
ev->gev.write_cb = bits & UB_EV_WRITE ? write_cb : NULL;
|
||||
ev->gev.timeout_cb = bits & UB_EV_TIMEOUT ? timeout_cb : NULL;
|
||||
ev->bits = bits;
|
||||
|
||||
if (added)
|
||||
SCHEDULE_MY_EVENT(ev);
|
||||
}
|
||||
}
|
||||
|
||||
static void my_event_add_bits(struct ub_event* ev, short bits)
|
||||
{
|
||||
set_gev_callbacks(AS_MY_EVENT(ev), AS_MY_EVENT(ev)->bits | bits);
|
||||
}
|
||||
|
||||
static void my_event_del_bits(struct ub_event* ev, short bits)
|
||||
{
|
||||
set_gev_callbacks(AS_MY_EVENT(ev), AS_MY_EVENT(ev)->bits & ~bits);
|
||||
}
|
||||
|
||||
static void my_event_set_fd(struct ub_event* ub_ev, int fd)
|
||||
{
|
||||
my_event *ev = AS_MY_EVENT(ub_ev);
|
||||
|
||||
if (ev->fd != fd) {
|
||||
if (ev->added) {
|
||||
CLEAR_MY_EVENT(ev);
|
||||
ev->fd = fd;
|
||||
SCHEDULE_MY_EVENT(ev);
|
||||
} else
|
||||
ev->fd = fd;
|
||||
}
|
||||
}
|
||||
|
||||
static void my_event_free(struct ub_event* ev)
|
||||
{
|
||||
GETDNS_FREE(AS_MY_EVENT(ev)->loop->mf, ev);
|
||||
}
|
||||
|
||||
static int my_event_del(struct ub_event* ev)
|
||||
{
|
||||
if (AS_MY_EVENT(ev)->added)
|
||||
CLEAR_MY_EVENT(AS_MY_EVENT(ev));
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int my_event_add(struct ub_event* ev, struct timeval* tv)
|
||||
{
|
||||
if (AS_MY_EVENT(ev)->added)
|
||||
my_event_del(ev);
|
||||
if (tv && (AS_MY_EVENT(ev)->bits & UB_EV_TIMEOUT) != 0)
|
||||
AS_MY_EVENT(ev)->timeout = (tv->tv_sec * 1000) + (tv->tv_usec / 1000);
|
||||
SCHEDULE_MY_EVENT(AS_MY_EVENT(ev));
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int my_timer_add(struct ub_event* ub_ev, struct ub_event_base* base,
|
||||
void (*cb)(int, short, void*), void* arg, struct timeval* tv)
|
||||
{
|
||||
my_event *ev = AS_MY_EVENT(ub_ev);
|
||||
|
||||
if (!base || !cb || !tv || AS_UB_LOOP(base) != ev->loop)
|
||||
return -1;
|
||||
|
||||
if (ev->added)
|
||||
CLEAR_MY_EVENT(ev);
|
||||
|
||||
ev->cb = cb;
|
||||
ev->arg = arg;
|
||||
return my_event_add(ub_ev, tv);
|
||||
}
|
||||
|
||||
static int my_timer_del(struct ub_event* ev)
|
||||
{
|
||||
return my_event_del(ev);
|
||||
}
|
||||
|
||||
|
||||
static int my_signal_add(struct ub_event* ub_ev, struct timeval* tv)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int my_signal_del(struct ub_event* ub_ev)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
static void my_winsock_unregister_wsaevent(struct ub_event* ev)
|
||||
{
|
||||
(void)ev;
|
||||
}
|
||||
|
||||
static void my_winsock_tcp_wouldblock(struct ub_event* ev, int bits)
|
||||
{
|
||||
(void)ev; (void)bits;
|
||||
}
|
||||
|
||||
static struct ub_event* my_event_new(struct ub_event_base* base, int fd,
|
||||
short bits, void (*cb)(int, short, void*), void* arg)
|
||||
{
|
||||
static struct ub_event_vmt vmt = {
|
||||
my_event_add_bits,
|
||||
my_event_del_bits,
|
||||
my_event_set_fd,
|
||||
my_event_free,
|
||||
my_event_add,
|
||||
my_event_del,
|
||||
my_timer_add,
|
||||
my_timer_del,
|
||||
my_signal_add,
|
||||
my_signal_del,
|
||||
my_winsock_unregister_wsaevent,
|
||||
my_winsock_tcp_wouldblock
|
||||
};
|
||||
my_event *ev;
|
||||
|
||||
if (!base || !cb)
|
||||
return NULL;
|
||||
|
||||
ev = GETDNS_MALLOC(AS_UB_LOOP(base)->mf, my_event);
|
||||
ev->super.vmt = &vmt;
|
||||
ev->loop = AS_UB_LOOP(base);
|
||||
ev->added = 0;
|
||||
ev->fd = fd;
|
||||
ev->bits = bits;
|
||||
ev->timeout = (uint64_t)-1;
|
||||
ev->cb = cb;
|
||||
ev->arg = arg;
|
||||
ev->gev.userarg = ev;
|
||||
ev->gev.read_cb = bits & UB_EV_READ ? read_cb : NULL;
|
||||
ev->gev.write_cb = bits & UB_EV_WRITE ? write_cb : NULL;
|
||||
ev->gev.timeout_cb = bits & UB_EV_TIMEOUT ? timeout_cb : NULL;
|
||||
return &ev->super;
|
||||
}
|
||||
|
||||
static struct ub_event* my_signal_new(struct ub_event_base* base, int fd,
|
||||
void (*cb)(int, short, void*), void* arg)
|
||||
{
|
||||
return my_event_new(base, fd, UB_EV_SIGNAL | UB_EV_PERSIST, cb, arg);
|
||||
}
|
||||
|
||||
static struct ub_event* my_winsock_register_wsaevent(struct ub_event_base *b,
|
||||
void* wsaevent, void (*cb)(int, short, void*), void* arg)
|
||||
{
|
||||
/* Not applicable, because in unbound used for tubes only */
|
||||
(void)b; (void)wsaevent; (void)cb; (void)arg;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void _getdns_ub_loop_init(_getdns_ub_loop *loop, struct mem_funcs *mf, getdns_eventloop *extension)
|
||||
{
|
||||
static struct ub_event_base_vmt vmt = {
|
||||
my_event_base_free,
|
||||
my_event_base_dispatch,
|
||||
my_event_base_loopexit,
|
||||
my_event_new,
|
||||
my_signal_new,
|
||||
my_winsock_register_wsaevent
|
||||
};
|
||||
|
||||
loop->super.vmt = &vmt;
|
||||
loop->mf = *mf;
|
||||
loop->extension = extension;
|
||||
loop->running = 1;
|
||||
}
|
||||
|
||||
#endif
|
||||
/* ub_loop.c */
|
|
@ -0,0 +1,70 @@
|
|||
/**
|
||||
*
|
||||
* \file ub_loop.h
|
||||
* /brief Interface for the pluggable unbound event API
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2015, NLnet Labs, Verisign, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the names of the copyright holders nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL Verisign, Inc. BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef UB_LOOP_H
|
||||
#define UB_LOOP_H
|
||||
|
||||
#include "config.h"
|
||||
#ifdef HAVE_UNBOUND_EVENT_API
|
||||
#include "getdns/getdns.h"
|
||||
#include "getdns/getdns_extra.h"
|
||||
#include "types-internal.h"
|
||||
|
||||
#ifndef HAVE_UNBOUND_EVENT_H
|
||||
struct ub_event_base_vmt;
|
||||
struct ub_event_base {
|
||||
struct ub_event_base_vmt* vmt;
|
||||
};
|
||||
struct ub_event_base;
|
||||
struct ub_ctx* ub_ctx_create_ub_event(struct ub_event_base* base);
|
||||
typedef void (*ub_event_callback_t)(void*, int, void*, int, int, char*);
|
||||
int ub_resolve_event(struct ub_ctx* ctx, const char* name, int rrtype,
|
||||
int rrclass, void* mydata, ub_event_callback_t callback, int* async_id);
|
||||
#endif
|
||||
|
||||
typedef struct _getdns_ub_loop {
|
||||
struct ub_event_base super;
|
||||
struct mem_funcs mf;
|
||||
getdns_eventloop *extension;
|
||||
int running;
|
||||
} _getdns_ub_loop;
|
||||
|
||||
void _getdns_ub_loop_init(_getdns_ub_loop *loop, struct mem_funcs *mf, getdns_eventloop *extension);
|
||||
|
||||
inline static int _getdns_ub_loop_enabled(_getdns_ub_loop *loop)
|
||||
{ return loop->super.vmt ? 1 : 0; }
|
||||
|
||||
#endif /* HAVE_UNBOUND_EVENT_API */
|
||||
#endif
|
||||
/* ub_loop.h */
|
Loading…
Reference in New Issue