]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
Work on doxygen attr_unused, library searches at end (so size_t exists and so
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Tue, 23 Jan 2007 16:10:23 +0000 (16:10 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Tue, 23 Jan 2007 16:10:23 +0000 (16:10 +0000)
on) and netevent nicer.

git-svn-id: file:///svn/unbound/trunk@29 be551aaa-1e26-0410-a405-d3ace91eadb9

configure.ac
doc/Changelog
doc/unbound.doxygen
util/netevent.c

index bbe353908dc6b2babff013d1d80fe3314689cdda..36450c05466e0ee4a657bccb564489bea6cf0e31 100644 (file)
@@ -42,6 +42,7 @@ CHECK_COMPILER_FLAG(O2, [CFLAGS="$CFLAGS -O2"])
 CHECK_COMPILER_FLAG(W, [CFLAGS="$CFLAGS -W"])
 CHECK_COMPILER_FLAG(Wall, [CFLAGS="$CFLAGS -Wall"])
 CHECK_COMPILER_FLAG(Wextra, [CFLAGS="$CFLAGS -Wextra"])
+CHECK_COMPILER_FLAG(Wdeclaration-after-statement, [CFLAGS="$CFLAGS -Wdeclaration-after-statement"])
 AC_C_INLINE
 
 AC_DEFUN([AC_CHECK_FORMAT_ATTRIBUTE],
@@ -90,6 +91,69 @@ fi
 AC_CHECK_FORMAT_ATTRIBUTE
 AC_CHECK_UNUSED_ATTRIBUTE
 
+if test "$srcdir" != "."; then
+       CPPFLAGS="$CPPFLAGS -I$srcdir";
+fi
+
+# Use libtool 
+AC_CHECK_PROGS(libtool, [glibtool libtool15 libtool], [./libtool])
+AC_PATH_TOOL(AR, ar, [false])
+if test $AR = false; then
+       AC_MSG_ERROR([Cannot find 'ar', please extend PATH to include it])
+fi
+AC_CHECK_PROG(doxygen, doxygen, doxygen)
+# avoid libtool max commandline length test on systems that fork slowly.
+AC_CANONICAL_HOST
+if echo "$host_os" | grep "sunos4" >/dev/null; then
+       lt_cv_sys_max_cmd_len=32750;
+fi
+AC_PROG_LIBTOOL
+
+# Checks for header files.
+AC_HEADER_STDC
+AC_CHECK_HEADERS([getopt.h stdarg.h stdbool.h openssl/ssl.h netinet/in.h time.h sys/param.h sys/socket.h],,, [AC_INCLUDES_DEFAULT])
+
+# check for types
+AC_CHECK_TYPE(int8_t, char)
+AC_CHECK_TYPE(int16_t, short)
+AC_CHECK_TYPE(int32_t, int)
+AC_CHECK_TYPE(int64_t, long long)
+AC_CHECK_TYPE(uint8_t, unsigned char)
+AC_CHECK_TYPE(uint16_t, unsigned short)
+AC_CHECK_TYPE(uint32_t, unsigned int)
+AC_CHECK_TYPE(uint64_t, unsigned long long)
+AC_TYPE_SIZE_T
+AC_CHECK_TYPE(ssize_t, int)
+AC_TYPE_UID_T
+AC_TYPE_PID_T
+AC_TYPE_OFF_T
+
+AC_CHECK_TYPE(socklen_t, , 
+       [AC_DEFINE([socklen_t], [int], [Define to 'int' if not defined])], [
+AC_INCLUDES_DEFAULT
+#if HAVE_SYS_SOCKET_H
+#  include <sys/socket.h>
+#endif
+])
+AC_CHECK_TYPE(in_addr_t, [], [AC_DEFINE([in_addr_t], [uint32_t], [in_addr_t])], [
+AC_INCLUDES_DEFAULT
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_NETINET_IN_H
+# include <netinet/in.h>
+#endif
+])
+AC_CHECK_TYPE(in_port_t, [], [AC_DEFINE([in_port_t], [uint16_t], [in_port_t])], [
+AC_INCLUDES_DEFAULT
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_NETINET_IN_H
+# include <netinet/in.h>
+#endif
+])
+
 # Checks for libraries.
 AC_ARG_WITH(ssl, AC_HELP_STRING([--with-ssl=pathname],
                                     [enable SSL (will check /usr/local/ssl
@@ -156,65 +220,6 @@ AC_ARG_WITH(ssl, AC_HELP_STRING([--with-libevent=pathname],
        AC_SUBST(RUNTIME_PATH)
     fi
 
-if test "$srcdir" != "."; then
-       CPPFLAGS="$CPPFLAGS -I$srcdir";
-fi
-
-# Use libtool 
-AC_CHECK_PROGS(libtool, [glibtool libtool15 libtool], [./libtool])
-AC_PATH_TOOL(AR, ar, [false])
-if test $AR = false; then
-       AC_MSG_ERROR([Cannot find 'ar', please extend PATH to include it])
-fi
-AC_CHECK_PROG(doxygen, doxygen, doxygen)
-# avoid libtool max commandline length test on systems that fork slowly.
-AC_CANONICAL_HOST
-if echo "$host_os" | grep "sunos4" >/dev/null; then
-       lt_cv_sys_max_cmd_len=32750;
-fi
-AC_PROG_LIBTOOL
-
-# Checks for header files.
-AC_HEADER_STDC
-AC_CHECK_HEADERS([getopt.h stdarg.h stdbool.h openssl/ssl.h netinet/in.h time.h sys/param.h sys/socket.h],,, [AC_INCLUDES_DEFAULT])
-
-# check for types
-AC_CHECK_TYPE(int8_t, char)
-AC_CHECK_TYPE(int16_t, short)
-AC_CHECK_TYPE(int32_t, int)
-AC_CHECK_TYPE(int64_t, long long)
-AC_CHECK_TYPE(uint8_t, unsigned char)
-AC_CHECK_TYPE(uint16_t, unsigned short)
-AC_CHECK_TYPE(uint32_t, unsigned int)
-AC_CHECK_TYPE(uint64_t, unsigned long long)
-AC_TYPE_SIZE_T
-AC_CHECK_TYPE(ssize_t, int)
-AC_TYPE_UID_T
-AC_TYPE_PID_T
-AC_TYPE_OFF_T
-
-AC_CHECK_TYPE(socklen_t, , 
-       [AC_DEFINE([socklen_t], [int], [Define to 'int' if not defined])], [
-AC_INCLUDES_DEFAULT
-#if HAVE_SYS_SOCKET_H
-#  include <sys/socket.h>
-#endif
-])
-AC_CHECK_TYPE(in_addr_t, [], [AC_DEFINE([in_addr_t], [uint32_t], [in_addr_t])], [
-#if HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#if HAVE_NETINET_IN_H
-# include <netinet/in.h>
-#endif])
-AC_CHECK_TYPE(in_port_t, [], [AC_DEFINE([in_port_t], [uint16_t], [in_port_t])], [
-#if HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#if HAVE_NETINET_IN_H
-# include <netinet/in.h>
-#endif])
-
 # check to see if libraries are needed for these functions.
 AC_CHECK_LIB(socket, socket)
 AC_CHECK_LIB(nsl, inet_pton)
@@ -279,7 +284,9 @@ AH_BOTTOM([
 #else /* !HAVE_ATTR_FORMAT */
 #  define ATTR_FORMAT(archetype, string_index, first_to_check) /* empty */
 #endif /* !HAVE_ATTR_FORMAT */
-#if defined(__cplusplus)
+#if defined(DOXYGEN)
+#  define ATTR_UNUSED(x)  x
+#elif defined(__cplusplus)
 #  define ATTR_UNUSED(x)
 #elif defined(HAVE_ATTR_UNUSED)
 #  define ATTR_UNUSED(x)  x __attribute__((unused))
index e49b2e798b3751dd5e466ad835c9ec519cccfffb..93c6aef616463009fc814f6a6ab88f7f7b5412fc 100644 (file)
@@ -2,6 +2,10 @@
        - added libevent to configure to link with.
        - util/netevent setup work.
        - configure searches for libevent.
+       - search for libs at end of configure (when other headers and types
+         have been found).
+       - doxygen works with ATTR_UNUSED().
+       - util/netevent implementation.
 
 22  January 2007: Wouter
        - Designed header file for network communication.
index 2a766f0d9ddab49acdbf0fe9298e23cda43b5c0d..6b71902bc7391567e87ed2fa1967dd2aae81b7c3 100644 (file)
@@ -971,13 +971,13 @@ ENABLE_PREPROCESSING   = YES
 # compilation will be performed. Macro expansion can be done in a controlled 
 # way by setting EXPAND_ONLY_PREDEF to YES.
 
-MACRO_EXPANSION        = NO
+MACRO_EXPANSION        = YES
 
 # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
 # then the macro expansion is limited to the macros specified with the 
 # PREDEFINED and EXPAND_AS_DEFINED tags.
 
-EXPAND_ONLY_PREDEF     = NO
+EXPAND_ONLY_PREDEF     = YES
 
 # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
 # in the INCLUDE_PATH (see below) will be search if a #include is found.
@@ -1005,14 +1005,14 @@ INCLUDE_FILE_PATTERNS  = *.h
 # undefined via #undef or recursively expanded use the := operator 
 # instead of the = operator.
 
-PREDEFINED             = 
+PREDEFINED             = DOXYGEN
 
 # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
 # this tag can be used to specify a list of macro names that should be expanded. 
 # The macro definition that is found in the sources will be used. 
 # Use the PREDEFINED tag if you want to use a different macro definition.
 
-EXPAND_AS_DEFINED      = 
+EXPAND_AS_DEFINED      = ATTR_UNUSED
 
 # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
 # doxygen's preprocessor will remove all function-like macros that are alone 
index c26552644fea92948d6d7eda4246c62cb220cbef..76553bed2146d350826c14f18ba8749d35ebe0bb 100644 (file)
@@ -17,6 +17,8 @@
 #include "util/log.h"
 #include <errno.h>
 
+/* -------- Start of local definitions -------- */
+
 /* we use libevent */
 #include <event.h>
 
@@ -37,7 +39,42 @@ struct internal_base {
        struct event_base* base;
 };
 
-struct comm_base* comm_base_create()
+/**
+ * handle libevent callback for udp comm point.
+ * @param fd: file descriptor.
+ * @param event: event bits from libevent: 
+ *     EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT.
+ * @param arg: the comm_point structure.
+ */
+static void comm_point_udp_callback(int fd, short event, void* arg);
+
+/**
+ * handle libevent callback for tcp accept comm point
+ * @param fd: file descriptor.
+ * @param event: event bits from libevent: 
+ *     EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT.
+ * @param arg: the comm_point structure.
+ */
+static void comm_point_tcp_accept_callback(int fd, short event, void* arg);
+
+/**
+ * handle libevent callback for tcp data comm point
+ * @param fd: file descriptor.
+ * @param event: event bits from libevent: 
+ *     EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT.
+ * @param arg: the comm_point structure.
+ */
+static void comm_point_tcp_handle_callback(int fd, short event, void* arg);
+
+/** create a tcp handler with a parent */
+static struct comm_point* comm_point_create_tcp_handler(
+       struct comm_base *base, struct comm_point* parent, size_t bufsize,
+        comm_point_callback_t* callback, void* callback_arg);
+
+/* -------- End of local definitions -------- */
+
+struct comm_base* 
+comm_base_create()
 {
        struct comm_base* b = (struct comm_base*)calloc(1,
                sizeof(struct comm_base));
@@ -57,7 +94,8 @@ struct comm_base* comm_base_create()
        return b;
 }
 
-void comm_base_delete(struct comm_base* b)
+void 
+comm_base_delete(struct comm_base* b)
 {
        /* No way to delete event_base! leaks. */
        b->eb->base = NULL;
@@ -65,7 +103,8 @@ void comm_base_delete(struct comm_base* b)
        free(b);
 }
 
-void comm_base_dispatch(struct comm_base* b)
+void 
+comm_base_dispatch(struct comm_base* b)
 {
        int retval;
        while(1) {
@@ -77,13 +116,6 @@ void comm_base_dispatch(struct comm_base* b)
        }
 }
 
-/**
- * libevent callback routine for commpoint udp
- * @param fd: file descriptor.
- * @param event: event bits from libevent: 
- *     EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT.
- * @param arg: the comm_point structure.
- */
 static void 
 comm_point_udp_callback(int ATTR_UNUSED(fd), short ATTR_UNUSED(event), 
        void* arg)
@@ -92,13 +124,6 @@ comm_point_udp_callback(int ATTR_UNUSED(fd), short ATTR_UNUSED(event),
        log_info("callback udp for %x", (int)c);
 }
 
-/**
- * libevent callback routine for commpoint tcp accept listeners.
- * @param fd: file descriptor.
- * @param event: event bits from libevent: 
- *     EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT.
- * @param arg: the comm_point structure.
- */
 static void 
 comm_point_tcp_accept_callback(int ATTR_UNUSED(fd), short ATTR_UNUSED(event), 
        void* arg)
@@ -107,8 +132,16 @@ comm_point_tcp_accept_callback(int ATTR_UNUSED(fd), short ATTR_UNUSED(event),
        log_info("callback tcpaccept for %x", (int)c);
 }
 
-struct comm_point* comm_point_create_udp(struct comm_base *base,
-       int fd, struct buffer* buffer,
+static void 
+comm_point_tcp_handle_callback(int ATTR_UNUSED(fd), short ATTR_UNUSED(event), 
+       void* arg)
+{
+       struct comm_point* c = (struct comm_point*)arg;
+       log_info("callback tcpaccept for %x", (int)c);
+}
+
+struct comm_point* 
+comm_point_create_udp(struct comm_base *base, int fd, struct buffer* buffer,
        comm_point_callback_t* callback, void* callback_arg)
 {
        struct comm_point* c = (struct comm_point*)calloc(1,
@@ -149,12 +182,52 @@ struct comm_point* comm_point_create_udp(struct comm_base *base,
        return c;
 }
 
-struct comm_point* 
+static struct comm_point* 
 comm_point_create_tcp_handler(struct comm_base *base, 
        struct comm_point* parent, size_t bufsize,
         comm_point_callback_t* callback, void* callback_arg)
 {
-       return NULL;
+       struct comm_point* c = (struct comm_point*)calloc(1,
+               sizeof(struct comm_point));
+       short evbits;
+       if(!c)
+               return NULL;
+       c->ev = (struct internal_event*)calloc(1,
+               sizeof(struct internal_event));
+       if(!c->ev) {
+               free(c);
+               return NULL;
+       }
+       c->fd = -1;
+       c->buffer = NULL /* routine to create new buffer! bufsize */;
+       c->timeout = NULL;
+       c->tcp_is_reading = 0;
+       c->tcp_byte_count = 0;
+       c->tcp_parent = parent;
+       c->cur_tcp_count = 0;
+       c->max_tcp_count = 0;
+       c->tcp_handlers = NULL;
+       c->tcp_free = NULL;
+       c->type = comm_tcp;
+       c->tcp_do_close = 0;
+       c->tcp_do_toggle_rw = 0;
+       c->callback = callback;
+       c->cb_arg = callback_arg;
+       /* add to parent free list */
+       c->tcp_free = parent->tcp_free;
+       parent->tcp_free = c;
+       /* libevent stuff */
+       evbits = EV_PERSIST | EV_READ;
+       event_set(&c->ev->ev, c->fd, evbits, comm_point_tcp_handle_callback, c);
+       if(event_base_set(base->eb->base, &c->ev->ev) != 0)
+       {
+               log_err("could not basetset tcphdl event");
+               parent->tcp_free = c->tcp_free;
+               free(c->ev);
+               free(c);
+               return NULL;
+       }
+       return c;
 }
 
 struct comm_point* 
@@ -210,12 +283,17 @@ comm_point_create_tcp(struct comm_base *base, int fd, int num, size_t bufsize,
        for(i=0; i<num; i++) {
                c->tcp_handlers[i] = comm_point_create_tcp_handler(base,
                        c, bufsize, callback, callback_arg);
+               if(!c->tcp_handlers[i]) {
+                       comm_point_delete(c);
+                       return NULL;
+               }
        }
        
        return c;
 }
 
-void comm_point_close(struct comm_point* c)
+void 
+comm_point_close(struct comm_point* c)
 {
        if(c->fd != -1)
                close(c->fd);
@@ -225,8 +303,11 @@ void comm_point_close(struct comm_point* c)
        }
 }
 
-void comm_point_delete(struct comm_point* c)
+void 
+comm_point_delete(struct comm_point* c)
 {
+       if(!c) 
+               return;
        comm_point_close(c);
        if(c->tcp_handlers) {
                int i;