Update extensions

This commit is contained in:
Neel Goyal 2014-01-22 19:55:04 -05:00
parent 56ff244133
commit 13b9e74ff5
17 changed files with 361 additions and 153 deletions

View File

@ -18,7 +18,7 @@ VPATH = @srcdir@
default:
cd src && $(MAKE) $@
all : default
all : default
install: all
cd src && $(MAKE) $@
@ -28,12 +28,15 @@ uninstall:
cd src && $(MAKE) $@
cd doc && $(MAKE) $@
doc:
doc:
cd doc && $(MAKE) $@
test:
cd src && $(MAKE) $@
example:
cd src && $(MAKE) $@
clean:
cd src && $(MAKE) $@
cd doc && $(MAKE) $@
@ -50,7 +53,7 @@ $(distdir).tar.gz: $(distdir)
tar chof - $(distdir) | gzip -9 -c > $@
rm -rf $(distdir)
$(distdir):
$(distdir):
mkdir -p $(distdir)/src
mkdir -p $(distdir)/src/getdns
mkdir -p $(distdir)/src/test
@ -65,6 +68,7 @@ $(distdir):
cp $(srcdir)/ltmain.sh $(distdir)
cp $(srcdir)/src/*.in $(distdir)/src
cp $(srcdir)/src/*.[ch] $(distdir)/src
cp $(srcdir)/src/extension/*.[ch] $(distdir)/src/extension
cp $(srcdir)/src/getdns/*.in $(distdir)/src/getdns
cp $(srcdir)/src/getdns/*.h $(distdir)/src/getdns
cp $(srcdir)/src/test/Makefile.in $(distdir)/src/test
@ -95,7 +99,7 @@ distcheck: $(distdir).tar.gz
Makefile: Makefile.in config.status
./config.status $@
configure.status: configure
./config.status --recheck

137
configure vendored
View File

@ -2,7 +2,7 @@
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69 for getdns 0.1.0.
#
# Report bugs to <melinda.shore@nomountain.net>.
# Report bugs to <stub-resolver@verisignlabs.com>.
#
#
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@ -275,7 +275,7 @@ fi
$as_echo "$0: be upgraded to zsh 4.3.4 or later."
else
$as_echo "$0: Please tell bug-autoconf@gnu.org and
$0: melinda.shore@nomountain.net about your system,
$0: stub-resolver@verisignlabs.com about your system,
$0: including any error possibly output before this
$0: message. Then install a modern shell, or manually run
$0: the script under such a shell if you do have one."
@ -592,7 +592,7 @@ PACKAGE_NAME='getdns'
PACKAGE_TARNAME='getdns'
PACKAGE_VERSION='0.1.0'
PACKAGE_STRING='getdns 0.1.0'
PACKAGE_BUGREPORT='melinda.shore@nomountain.net'
PACKAGE_BUGREPORT='stub-resolver@verisignlabs.com'
PACKAGE_URL=''
ac_unique_file="src/getdns/getdns.h"
@ -634,6 +634,7 @@ ac_includes_default="\
ac_subst_vars='LTLIBOBJS
LIBOBJS
have_libevent
DOXYGEN
INSTALL_DATA
INSTALL_SCRIPT
@ -1386,7 +1387,7 @@ Some influential environment variables:
Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.
Report bugs to <melinda.shore@nomountain.net>.
Report bugs to <stub-resolver@verisignlabs.com>.
_ACEOF
ac_status=$?
fi
@ -10853,66 +10854,8 @@ fi
# Checks for libraries.
found_all_libs=1
{ $as_echo "$as_me:${as_lineno-$LINENO}: Checking for dependencies libevent, ldns" >&5
$as_echo "$as_me: Checking for dependencies libevent, ldns" >&6;}
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing event_loop" >&5
$as_echo_n "checking for library containing event_loop... " >&6; }
if ${ac_cv_search_event_loop+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
char event_loop ();
int
main ()
{
return event_loop ();
;
return 0;
}
_ACEOF
for ac_lib in '' event_core event; do
if test -z "$ac_lib"; then
ac_res="none required"
else
ac_res=-l$ac_lib
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
fi
if ac_fn_c_try_link "$LINENO"; then :
ac_cv_search_event_loop=$ac_res
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext
if ${ac_cv_search_event_loop+:} false; then :
break
fi
done
if ${ac_cv_search_event_loop+:} false; then :
else
ac_cv_search_event_loop=no
fi
rm conftest.$ac_ext
LIBS=$ac_func_search_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_event_loop" >&5
$as_echo "$ac_cv_search_event_loop" >&6; }
ac_res=$ac_cv_search_event_loop
if test "$ac_res" != no; then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
else
found_all_libs=0
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: Checking for dependencies ldns" >&5
$as_echo "$as_me: Checking for dependencies ldns" >&6;}
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldns_dname_new_frm_str in -lldns" >&5
$as_echo_n "checking for ldns_dname_new_frm_str in -lldns... " >&6; }
if ${ac_cv_lib_ldns_ldns_dname_new_frm_str+:} false; then :
@ -11200,7 +11143,64 @@ _ACEOF
esac
for ac_func in event_base_new event_base_free
have_libevent=1
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing event_loop" >&5
$as_echo_n "checking for library containing event_loop... " >&6; }
if ${ac_cv_search_event_loop+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
char event_loop ();
int
main ()
{
return event_loop ();
;
return 0;
}
_ACEOF
for ac_lib in '' event_core event; do
if test -z "$ac_lib"; then
ac_res="none required"
else
ac_res=-l$ac_lib
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
fi
if ac_fn_c_try_link "$LINENO"; then :
ac_cv_search_event_loop=$ac_res
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext
if ${ac_cv_search_event_loop+:} false; then :
break
fi
done
if ${ac_cv_search_event_loop+:} false; then :
else
ac_cv_search_event_loop=no
fi
rm conftest.$ac_ext
LIBS=$ac_func_search_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_event_loop" >&5
$as_echo "$ac_cv_search_event_loop" >&6; }
ac_res=$ac_cv_search_event_loop
if test "$ac_res" != no; then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
$as_echo "#define HAVE_LIBEVENT 1" >>confdefs.h
for ac_func in event_base_new event_base_free
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
@ -11213,6 +11213,11 @@ fi
done
else
have_libevent=0
fi
ac_config_files="$ac_config_files Makefile src/Makefile src/getdns/Makefile src/example/Makefile src/test/Makefile doc/Makefile"
@ -11788,7 +11793,7 @@ $config_headers
Configuration commands:
$config_commands
Report bugs to <melinda.shore@nomountain.net>."
Report bugs to <stub-resolver@verisignlabs.com>."
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1

View File

@ -6,7 +6,7 @@
#
AC_PREREQ([2.56])
AC_INIT([getdns], [0.1.0], [melinda.shore@nomountain.net])
AC_INIT([getdns], [0.1.0], [stub-resolver@verisignlabs.com])
AC_CONFIG_SRCDIR([src/getdns/getdns.h])
# AM_INIT_AUTOMAKE
# LT_INIT
@ -128,8 +128,7 @@ fi
# Checks for libraries.
found_all_libs=1
AC_MSG_NOTICE([Checking for dependencies libevent, ldns])
AC_SEARCH_LIBS([event_loop], [event_core event], [], [found_all_libs=0])
AC_MSG_NOTICE([Checking for dependencies ldns])
AC_CHECK_LIB([ldns], [ldns_dname_new_frm_str], [], [found_all_libs=0])
AC_CHECK_LIB([idn], [idna_to_ascii_8z], [], [found_all_libs=0])
@ -163,16 +162,22 @@ AC_TYPE_UINT32_T
AC_TYPE_UINT64_T
AC_TYPE_UINT8_T
AC_CHECK_FUNCS([event_base_new event_base_free])
AH_BOTTOM([
#ifndef HAVE_EVENT_BASE_FREE
#define event_base_free(x) /* nop */
#endif
#ifndef HAVE_EVENT_BASE_NEW
#define event_base_new event_init
#endif
])
have_libevent=1
AC_SEARCH_LIBS([event_loop],
[event_core event],
[AC_DEFINE([HAVE_LIBEVENT], [1], [Define to 1 to enable the libevent extension])]
[AC_CHECK_FUNCS([event_base_new event_base_free])]
[AH_BOTTOM([
#ifndef HAVE_EVENT_BASE_FREE
#define event_base_free(x) /* nop */
#endif
#ifndef HAVE_EVENT_BASE_NEW
#define event_base_new event_init
#endif
])],
[have_libevent=0])
AC_SUBST(have_libevent)
AC_CONFIG_FILES([Makefile src/Makefile src/getdns/Makefile src/example/Makefile src/test/Makefile doc/Makefile])
if [ test -n "$DOXYGEN" ]
then AC_CONFIG_FILES([src/Doxyfile])

View File

@ -20,6 +20,7 @@ exec_prefix = @exec_prefix@
bindir = @bindir@
libdir = @libdir@
includedir = @includedir@
have_libevent = @have_libevent@
# datarootdir is here to please some checkers
datarootdir=@datarootdir@
INSTALL = @INSTALL@
@ -33,7 +34,11 @@ CFLAGS=@CFLAGS@ -Wall -I$(srcdir)/ -I/usr/local/include -std=c99
LDFLAGS=@LDFLAGS@ @LIBS@
GETDNS_OBJ=sync.lo context.lo list.lo dict.lo convert.lo general.lo \
hostname.lo service.lo request-internal.lo validate_dnssec.lo \
util-internal.lo getdns_error.lo extension_libevent.lo
util-internal.lo getdns_error.lo
ifeq ($(have_libevent),1)
GETDNS_OBJ += extension/libevent.lo
endif
.SUFFIXES: .c .o .a .lo .h
@ -46,27 +51,32 @@ GETDNS_OBJ=sync.lo context.lo list.lo dict.lo convert.lo general.lo \
default: all
all: libgetdns.la
cd test && $(MAKE) $@
cd example && $(MAKE) $@
install: libgetdns.la
$(INSTALL) -m 755 -d $(DESTDIR)$(includedir)
$(INSTALL) -m 755 -d $(DESTDIR)$(includedir)/getdns
$(INSTALL) -m 644 $(srcdir)/getdns/getdns.h $(DESTDIR)$(includedir)/getdns/getdns.h
ifeq ($(have_libevent),1)
$(INSTALL) -m 644 $(srcdir)/getdns/getdns.h $(DESTDIR)$(includedir)/getdns/
endif
$(INSTALL) -m 755 -d $(DESTDIR)$(libdir)
$(LIBTOOL) --mode=install cp libgetdns.la $(DESTDIR)$(libdir)
$(LIBTOOL) --mode=finish $(DESTDIR)$(libdir)
uninstall:
rm -f $(DESTDIR)$(includedir)/getdns/getdns.h
rm -rf $(DESTDIR)$(includedir)/getdns
$(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/libgetdns.la
libgetdns.la: $(GETDNS_OBJ)
$(LIBTOOL) --tag=CC --mode=link $(CC) $(CFLAGS) -o $@ $(GETDNS_OBJ) $(LDFLAGS) -rpath $(libdir) -version-info $(libversion) -no-undefined
test: libgetdns.la
test:
cd test && $(MAKE) $@
example:
cd example && $(MAKE) $@
clean:
cd test && $(MAKE) $@
cd example && $(MAKE) $@

View File

@ -15,6 +15,9 @@
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
/* Define to 1 to enable the libevent extension */
#undef HAVE_LIBEVENT
/* Define to 1 if you have the `idn' library (-lidn). */
#undef HAVE_LIBIDN
@ -111,10 +114,10 @@
#undef uint8_t
#ifndef HAVE_EVENT_BASE_FREE
#define event_base_free(x) /* nop */
#endif
#ifndef HAVE_EVENT_BASE_NEW
#define event_base_new event_init
#endif
#ifndef HAVE_EVENT_BASE_FREE
#define event_base_free(x) /* nop */
#endif
#ifndef HAVE_EVENT_BASE_NEW
#define event_base_new event_init
#endif

View File

@ -291,6 +291,9 @@ getdns_context_create_with_extended_memory_functions(
result->edns_version = 0;
result->edns_do_bit = 0;
result->extension = NULL;
result->extension_data = NULL;
if (set_from_os) {
if (GETDNS_RETURN_GOOD != set_os_defaults(result)) {
getdns_context_destroy(result);
@ -1142,4 +1145,36 @@ getdns_bindata_destroy(struct mem_funcs *mfs,
GETDNS_FREE(*mfs, bindata->data);
GETDNS_FREE(*mfs, bindata);
}
getdns_return_t
getdns_extension_detach_eventloop(struct getdns_context* context)
{
RETURN_IF_NULL(context, GETDNS_RETURN_BAD_CONTEXT);
getdns_return_t r = GETDNS_RETURN_GOOD;
if (context->extension) {
r = context->extension->cleanup_data(context, context->extension_data);
if (r != GETDNS_RETURN_GOOD) {
return r;
}
context->extension = NULL;
context->extension_data = NULL;
}
return r;
}
getdns_return_t
getdns_extension_set_eventloop(struct getdns_context* context,
getdns_eventloop_extension* extension, void* extension_data)
{
RETURN_IF_NULL(context, GETDNS_RETURN_BAD_CONTEXT);
RETURN_IF_NULL(extension, GETDNS_RETURN_INVALID_PARAMETER);
getdns_return_t r = getdns_extension_detach_eventloop(context);
if (r != GETDNS_RETURN_GOOD) {
return r;
}
context->extension = extension;
context->extension_data = extension_data;
return GETDNS_RETURN_GOOD;
}
/* getdns_context.c */

View File

@ -75,6 +75,18 @@ struct getdns_context {
* outbound requests -> transaction to getdns_dns_req
*/
struct ldns_rbtree_t *outbound_requests;
/*
* Event loop extension functions
* These structs are static and should never be freed
* since they are just a collection of function pointers
*/
getdns_eventloop_extension* extension;
/*
* Extension data that will be freed by the functions
* in the extension struct
*/
void* extension_data;
};
/** internal functions **/
@ -104,4 +116,8 @@ void getdns_bindata_destroy(
struct mem_funcs *mfs,
struct getdns_bindata *bindata);
/* extension stuff */
getdns_return_t getdns_extension_set_eventloop(struct getdns_context* context,
getdns_eventloop_extension* extension, void* extension_data);
#endif /* _GETDNS_CONTEXT_H_ */

View File

@ -17,7 +17,7 @@ VPATH = @srcdir@
CC=gcc
CFLAGS=@CFLAGS@ -Wall -I$(srcdir)/ -I$(srcdir)/../ -I/usr/local/include -std=c99
LDFLAGS=@LDFLAGS@ -L. -L.. -L/usr/local/lib
LDFLAGS=@LDFLAGS@ -L. -L.. -L$(srcdir)/../ -L/usr/local/lib
LDLIBS=-lgetdns @LIBS@
PROGRAMS=example-all-functions example-simple-answers example-tree example-synchronous example-reverse

View File

@ -1,4 +1,5 @@
#include <getdns/getdns.h>
#include <getdns/getdns_ext_libevent.h>
#ifdef HAVE_EVENT2_EVENT_H
#include <event2/event.h>
#else

119
src/extension/libevent.c Normal file
View File

@ -0,0 +1,119 @@
/**
* \file
* \brief Public interfaces to getdns, include in your application to use getdns API.
*
* This source was taken from the original pseudo-implementation by
* Paul Hoffman.
*/
/*
* Copyright (c) 2013, NLNet Labs, Versign, 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 name of the <organization> 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 <getdns/getdns_ext_libevent.h>
#include "config.h"
#include "context.h"
#ifdef HAVE_EVENT2_EVENT_H
# include <event2/event.h>
#else
# include <event.h>
# define evutil_socket_t int
# define event_free free
# define evtimer_new(b, cb, arg) event_new((b), -1, 0, (cb), (arg))
#endif
#define RETURN_IF_NULL(ptr, code) if(ptr == NULL) return code;
#ifndef HAVE_EVENT2_EVENT_H
static struct event *
event_new(struct event_base *b, evutil_socket_t fd, short ev, void* cb, void *arg)
{
struct event* e = (struct event*)calloc(1, sizeof(struct event));
if(!e) return NULL;
event_set(e, fd, ev, cb, arg);
event_base_set(b, e);
return e;
}
#endif /* no event2 */
/* extension info */
struct event_data {
struct event* event;
struct event_base* event_base;
};
static getdns_return_t getdns_libevent_cleanup(struct getdns_context* context, void* data) {
struct event_data *edata = (struct event_data*) data;
event_del(edata->event);
event_free(edata->event);
free(edata);
return GETDNS_RETURN_GOOD;
}
static getdns_eventloop_extension LIBEVENT_EXT = {
getdns_libevent_cleanup
};
void getdns_libevent_cb(evutil_socket_t fd, short what, void *userarg) {
struct getdns_context* context = (struct getdns_context*) userarg;
getdns_context_process_async(context);
}
/*
* 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;
}
event_add(getdns_event, NULL);
/* 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 */

View File

@ -1,47 +0,0 @@
#include "config.h"
#include "context.h"
#ifdef HAVE_EVENT2_EVENT_H
# include <event2/event.h>
#else
# include <event.h>
# define evutil_socket_t int
# define event_free free
# define evtimer_new(b, cb, arg) event_new((b), -1, 0, (cb), (arg))
#endif
#define RETURN_IF_NULL(ptr, code) if(ptr == NULL) return code;
#ifndef HAVE_EVENT2_EVENT_H
static struct event *
event_new(struct event_base *b, evutil_socket_t fd, short ev, void* cb, void *arg)
{
struct event* e = (struct event*)calloc(1, sizeof(struct event));
if(!e) return NULL;
event_set(e, fd, ev, cb, arg);
event_base_set(b, e);
return e;
}
#endif /* no event2 */
void getdns_libevent_cb(evutil_socket_t fd, short what, void *userarg) {
struct getdns_context* context = (struct getdns_context*) userarg;
getdns_context_process_async(context);
}
/*
* 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 */
int fd = getdns_context_fd(context);
struct event *getdns_event = event_new(this_event_base, fd, EV_READ | EV_PERSIST, getdns_libevent_cb, context);
event_add(getdns_event, NULL);
return GETDNS_RETURN_GOOD;
} /* getdns_extension_set_libevent_base */

View File

@ -244,7 +244,6 @@ getdns_general_ub(struct getdns_context *context,
getdns_callback_t callbackfn)
{
/* timeout */
struct timeval tv;
getdns_return_t gr;
int r;

View File

@ -43,8 +43,6 @@
extern "C" {
#endif
struct event_base;
#define GETDNS_COMPILATION_COMMENT The API implementation should fill in something here, such as a compilation version string and date, and change it each time the API is compiled.
/**
@ -881,19 +879,15 @@ getdns_context_set_extended_memory_functions(struct getdns_context *context,
void (*free) (void *userarg, void *ptr)
);
/* Extension - refactor to abstract async evt loop */
/* For libevent, which we are using for these examples */
/* Extension */
getdns_return_t
getdns_extension_set_libevent_base(struct getdns_context *context,
struct event_base *this_event_base);
getdns_extension_detach_eventloop(struct getdns_context* context);
/* get the fd */
int getdns_context_fd(struct getdns_context* context);
/* process async reqs */
getdns_return_t getdns_context_process_async(struct getdns_context* context);
#ifdef __cplusplus
}
#endif

View File

@ -0,0 +1,55 @@
/**
* \file
* \brief Public interfaces to getdns, include in your application to use getdns API.
*
* This source was taken from the original pseudo-implementation by
* Paul Hoffman.
*/
/*
* Copyright (c) 2013, NLNet Labs, Versign, 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 name of the <organization> 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 GETDNS_EXT_LIBEVENT_H
#define GETDNS_EXT_LIBEVENT_H
#ifdef __cplusplus
extern "C" {
#endif
#include <getdns/getdns.h>
struct event_base;
/* For libevent, which we are using for these examples */
getdns_return_t
getdns_extension_set_libevent_base(struct getdns_context *context,
struct event_base *this_event_base);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -17,7 +17,7 @@ VPATH = @srcdir@
CC=gcc
CFLAGS=@CFLAGS@ -Wall -I$(srcdir)/ -I$(srcdir)/../ -I/usr/local/include -std=c99 $(cflags)
LDFLAGS=@LDFLAGS@ -L. -L.. -L/usr/local/lib
LDFLAGS=@LDFLAGS@ -L. -L.. -L$(srcdir)/../ -L/usr/local/lib
LDLIBS=-lgetdns @LIBS@ -lcheck
PROGRAMS=tests_dict tests_list tests_stub_async tests_stub_sync check_getdns
@ -45,7 +45,7 @@ tests_stub_sync: tests_stub_sync.o
check_getdns_common: check_getdns_common.o
$(LIBTOOL) --tag=CC --mode=link $(CC) $(CFLAGS) $(LDFLAGS) $(LDLIBS) -o $@ check_getdns_common.o
check_getdns: check_getdns.o check_getdns_common.o
check_getdns: check_getdns.o check_getdns_common.o
$(LIBTOOL) --tag=CC --mode=link $(CC) $(CFLAGS) $(LDFLAGS) $(LDLIBS) -o $@ $^
test: all

View File

@ -59,6 +59,7 @@ this_callbackfn(struct getdns_context *this_context,
"The callback got a callback_type of %d. Exiting.",
this_callback_type);
getdns_dict_destroy(this_response);
getdns_extension_detach_eventloop(this_context);
}
int

View File

@ -236,6 +236,14 @@ getdns_dns_req *dns_req_new(struct getdns_context *context,
void dns_req_free(getdns_dns_req * req);
/* extensions */
typedef getdns_return_t (*getdns_eventloop_cleanup_t)(struct getdns_context* context, void* data);
typedef struct getdns_eventloop_extension {
getdns_eventloop_cleanup_t cleanup_data;
} getdns_eventloop_extension;
#endif
/* types-internal.h */