]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
fptr whitelist network code callbacks.
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Fri, 5 Oct 2007 08:05:06 +0000 (08:05 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Fri, 5 Oct 2007 08:05:06 +0000 (08:05 +0000)
git-svn-id: file:///svn/unbound/trunk@659 be551aaa-1e26-0410-a405-d3ace91eadb9

checkconf/worker_cb.c
daemon/worker.c
daemon/worker.h
doc/Changelog
services/outside_network.c
services/outside_network.h
testcode/fake_event.c
util/fptr_wlist.c
util/fptr_wlist.h
util/netevent.c
util/netevent.h

index 84f95d313e77bc884e469b5bdfb3a50d10823d4c..a83e283e5ec3d562516f0cc5fd0059d866744d4b 100644 (file)
@@ -61,6 +61,22 @@ int worker_handle_request(struct comm_point* ATTR_UNUSED(c),
        return 0;
 }
 
+int worker_handle_reply(struct comm_point* ATTR_UNUSED(c), 
+       void* ATTR_UNUSED(arg), int ATTR_UNUSED(error),
+        struct comm_reply* ATTR_UNUSED(reply_info))
+{
+       log_assert(0);
+       return 0;
+}
+
+int worker_handle_service_reply(struct comm_point* ATTR_UNUSED(c), 
+       void* ATTR_UNUSED(arg), int ATTR_UNUSED(error),
+        struct comm_reply* ATTR_UNUSED(reply_info))
+{
+       log_assert(0);
+       return 0;
+}
+
 void worker_sighandler(int ATTR_UNUSED(sig), void* ATTR_UNUSED(arg))
 {
        log_assert(0);
index 1d69aac4d759dfc6b18b500e3b38b70dcf060463..cf4e91917443ce16cbfdd9c7adc3854539fb6a0e 100644 (file)
@@ -174,8 +174,7 @@ worker_send_cmd(struct worker* worker, ldns_buffer* buffer,
                log_err("write socket: %s", strerror(errno));
 }
 
-/** process incoming replies from the network */
-static int 
+int 
 worker_handle_reply(struct comm_point* c, void* arg, int error, 
        struct comm_reply* reply_info)
 {
@@ -206,8 +205,7 @@ worker_handle_reply(struct comm_point* c, void* arg, int error,
        return 0;
 }
 
-/** process incoming serviced query replies from the network */
-static int 
+int 
 worker_handle_service_reply(struct comm_point* c, void* arg, int error, 
        struct comm_reply* reply_info)
 {
index fa92bedb94ea55a59031d71289551b481193abb2..de30e935cf507874e7f12d99c2166c010b980f51 100644 (file)
@@ -206,4 +206,12 @@ int worker_handle_control_cmd(struct comm_point* c, void* arg, int error,
 int worker_handle_request(struct comm_point* c, void* arg, int error,
        struct comm_reply* repinfo);
 
+/** process incoming replies from the network */
+int worker_handle_reply(struct comm_point* c, void* arg, int error, 
+       struct comm_reply* reply_info);
+
+/** process incoming serviced query replies from the network */
+int worker_handle_service_reply(struct comm_point* c, void* arg, int error, 
+       struct comm_reply* reply_info);
+
 #endif /* DAEMON_WORKER_H */
index 8883edfc477be97eba5e9cebd951f4567c31d39f..b289b63875f0896c1ea69dce82f88866c0580115 100644 (file)
@@ -1,3 +1,6 @@
+5 October 2007: Wouter
+       - function pointer whitelist.
+
 4 October 2007: Wouter
        - overwrite sensitive random seed value after use.
        - switch to logfile very soon if not -d (console attached).
index b05b9e48201e6c61a920a4ea8cf952e29cd124b3..0ba80457a782c345c24914dc23d3d75db1cbe861 100644 (file)
@@ -50,6 +50,7 @@
 #include "util/log.h"
 #include "util/net_help.h"
 #include "util/random.h"
+#include "util/fptr_wlist.h"
 
 #ifdef HAVE_SYS_TYPES_H
 #  include <sys/types.h>
@@ -62,9 +63,6 @@
 /** number of retries on outgoing UDP queries */
 #define OUTBOUND_UDP_RETRY 4
 
-/** callback for serviced query UDP answers */
-static int serviced_udp_callback(struct comm_point* c, void* arg, int error,
-        struct comm_reply* rep);
 /** initiate TCP transaction for serviced query */
 static void serviced_tcp_initiate(struct outside_network* outnet, 
        struct serviced_query* sq, ldns_buffer* buff);
@@ -176,6 +174,7 @@ use_free_buffer(struct outside_network* outnet)
                        comm_point_callback_t* cb = w->cb;
                        void* cb_arg = w->cb_arg;
                        waiting_tcp_delete(w);
+                       log_assert(fptr_whitelist_pending_tcp(cb));
                        (void)(*cb)(NULL, cb_arg, NETEVENT_CLOSED, NULL);
                }
        }
@@ -194,8 +193,7 @@ decomission_pending_tcp(struct outside_network* outnet,
        use_free_buffer(outnet);
 }
 
-/** callback for pending tcp connections */
-static int 
+int 
 outnet_tcp_cb(struct comm_point* c, void* arg, int error,
        struct comm_reply *reply_info)
 {
@@ -214,6 +212,7 @@ outnet_tcp_cb(struct comm_point* c, void* arg, int error,
                        error = NETEVENT_CLOSED;
                }
        }
+       log_assert(fptr_whitelist_pending_tcp(pend->query->cb));
        (void)(*pend->query->cb)(c, pend->query->cb_arg, error, reply_info);
        decomission_pending_tcp(outnet, pend);
        return 0;
@@ -272,6 +271,7 @@ outnet_udp_cb(struct comm_point* c, void* arg, int error,
        verbose(VERB_ALGO, "outnet handle udp reply");
        /* delete from tree first in case callback creates a retry */
        (void)rbtree_delete(outnet->pending, p->node.key);
+       log_assert(fptr_whitelist_pending_udp(p->cb));
        (void)(*p->cb)(p->c, p->cb_arg, NETEVENT_NOERROR, reply_info);
        pending_delete(NULL, p);
        return 0;
@@ -386,6 +386,7 @@ pending_udp_timer_cb(void *arg)
        struct pending* p = (struct pending*)arg;
        /* it timed out */
        verbose(VERB_ALGO, "timeout udp");
+       log_assert(fptr_whitelist_pending_udp(p->cb));
        (void)(*p->cb)(p->c, p->cb_arg, NETEVENT_TIMEOUT, NULL);
        pending_delete(p->outnet, p);
 }
@@ -738,6 +739,7 @@ outnet_tcptimer(void* arg)
        cb = w->cb;
        cb_arg = w->cb_arg;
        waiting_tcp_delete(w);
+       log_assert(fptr_whitelist_pending_tcp(cb));
        (void)(*cb)(NULL, cb_arg, NETEVENT_TIMEOUT, NULL);
        use_free_buffer(outnet);
 }
@@ -1003,6 +1005,7 @@ serviced_callbacks(struct serviced_query* sq, int error, struct comm_point* c,
                        ldns_buffer_write(c->buffer, backup_p, backlen);
                        ldns_buffer_flip(c->buffer);
                }
+               log_assert(fptr_whitelist_serviced_query(p->cb));
                (void)(*p->cb)(c, p->cb_arg, error, rep);
                p = n;
        }
@@ -1015,8 +1018,7 @@ serviced_callbacks(struct serviced_query* sq, int error, struct comm_point* c,
        serviced_delete(sq);
 }
 
-/** TCP reply or error callback for serviced queries */
-static int 
+int 
 serviced_tcp_callback(struct comm_point* c, void* arg, int error,
         struct comm_reply* rep)
 {
@@ -1063,7 +1065,7 @@ serviced_tcp_initiate(struct outside_network* outnet,
        }
 }
 
-static int 
+int 
 serviced_udp_callback(struct comm_point* c, void* arg, int error,
         struct comm_reply* rep)
 {
index 5350bf411434688248a5bd8bf6cbc2a819965e11..28e77559891730dcecfc11b71b5e479b6894b33b 100644 (file)
@@ -373,10 +373,22 @@ size_t serviced_get_mem(struct serviced_query* sq);
 int outnet_udp_cb(struct comm_point* c, void* arg, int error,
        struct comm_reply *reply_info);
 
+/** callback for pending tcp connections */
+int outnet_tcp_cb(struct comm_point* c, void* arg, int error,
+       struct comm_reply *reply_info);
+
 /** callback for udp timeout */
 void pending_udp_timer_cb(void *arg);
 
 /** callback for outgoing TCP timer event */
 void outnet_tcptimer(void* arg);
 
+/** callback for serviced query UDP answers */
+int serviced_udp_callback(struct comm_point* c, void* arg, int error,
+        struct comm_reply* rep);
+
+/** TCP reply or error callback for serviced queries */
+int serviced_tcp_callback(struct comm_point* c, void* arg, int error,
+        struct comm_reply* rep);
+
 #endif /* OUTSIDE_NETWORK_H */
index 4d3c3aaf972be7ce9a86c528a54a3222efcbc724..12ca2013eda4b46626ac23bf512afccd4bc9afff 100644 (file)
@@ -968,6 +968,14 @@ int outnet_udp_cb(struct comm_point* ATTR_UNUSED(c),
        return 0;
 }
 
+int outnet_tcp_cb(struct comm_point* ATTR_UNUSED(c), 
+       void* ATTR_UNUSED(arg), int ATTR_UNUSED(error),
+        struct comm_reply *ATTR_UNUSED(reply_info))
+{
+       log_assert(0);
+       return 0;
+}
+
 void pending_udp_timer_cb(void *ATTR_UNUSED(arg))
 {
        log_assert(0);
@@ -978,4 +986,56 @@ void outnet_tcptimer(void* ATTR_UNUSED(arg))
        log_assert(0);
 }
 
+void comm_point_udp_callback(int ATTR_UNUSED(fd), short ATTR_UNUSED(event), 
+       void* ATTR_UNUSED(arg))
+{
+       log_assert(0);
+}
+
+void comm_point_tcp_accept_callback(int ATTR_UNUSED(fd), 
+       short ATTR_UNUSED(event), void* ATTR_UNUSED(arg))
+{
+       log_assert(0);
+}
+
+void comm_point_tcp_handle_callback(int ATTR_UNUSED(fd), 
+       short ATTR_UNUSED(event), void* ATTR_UNUSED(arg))
+{
+       log_assert(0);
+}
+
+void comm_timer_callback(int ATTR_UNUSED(fd), 
+       short ATTR_UNUSED(event), void* ATTR_UNUSED(arg))
+{
+       log_assert(0);
+}
+
+void comm_signal_callback(int ATTR_UNUSED(fd), 
+       short ATTR_UNUSED(event), void* ATTR_UNUSED(arg))
+{
+       log_assert(0);
+}
+
+void comm_point_local_handle_callback(int ATTR_UNUSED(fd), 
+       short ATTR_UNUSED(event), void* ATTR_UNUSED(arg))
+{
+       log_assert(0);
+}
+
+int serviced_udp_callback(struct comm_point* ATTR_UNUSED(c), 
+       void* ATTR_UNUSED(arg), int ATTR_UNUSED(error),
+        struct comm_reply* ATTR_UNUSED(reply_info))
+{
+       log_assert(0);
+       return 0;
+}
+
+int serviced_tcp_callback(struct comm_point* ATTR_UNUSED(c), 
+       void* ATTR_UNUSED(arg), int ATTR_UNUSED(error),
+        struct comm_reply* ATTR_UNUSED(reply_info))
+{
+       log_assert(0);
+       return 0;
+}
+
 /*********** End of Dummy routines ***********/
index 0a45684be75d1da6ee2b0437221c0a1d3fc850ff..4de74785e940a191d97c3794a6c768c4608975b8 100644 (file)
 int 
 fptr_whitelist_comm_point(comm_point_callback_t *fptr)
 {
-       return 1;
-       if(fptr == &worker_handle_control_cmd) return 1;
-       else if(fptr == &worker_handle_request) return 1;
+       if(fptr == &worker_handle_request) return 1;
        else if(fptr == &outnet_udp_cb) return 1;
+       else if(fptr == &outnet_tcp_cb) return 1;
+       else if(fptr == &worker_handle_control_cmd) return 1;
        return 0;
 }
 
 int 
 fptr_whitelist_comm_timer(void (*fptr)(void*))
 {
-       return 1;
        if(fptr == &pending_udp_timer_cb) return 1;
        else if(fptr == &outnet_tcptimer) return 1;
        return 0;
@@ -70,7 +69,6 @@ fptr_whitelist_comm_timer(void (*fptr)(void*))
 int 
 fptr_whitelist_comm_signal(void (*fptr)(int, void*))
 {
-       return 1;
        if(fptr == &worker_sighandler) return 1;
        return 0;
 }
@@ -78,5 +76,34 @@ fptr_whitelist_comm_signal(void (*fptr)(int, void*))
 int 
 fptr_whitelist_event(void (*fptr)(int, short, void *))
 {
+       if(fptr == &comm_point_udp_callback) return 1;
+       else if(fptr == &comm_point_tcp_accept_callback) return 1;
+       else if(fptr == &comm_point_tcp_handle_callback) return 1;
+       else if(fptr == &comm_timer_callback) return 1;
+       else if(fptr == &comm_signal_callback) return 1;
+       else if(fptr == &comm_point_local_handle_callback) return 1;
+       return 0;
+}
+
+int 
+fptr_whitelist_pending_udp(comm_point_callback_t *fptr)
+{
+       if(fptr == &serviced_udp_callback) return 1;
+       else if(fptr == &worker_handle_reply) return 1;
+       return 0;
+}
+
+int 
+fptr_whitelist_pending_tcp(comm_point_callback_t *fptr)
+{
+       if(fptr == &serviced_tcp_callback) return 1;
+       else if(fptr == &worker_handle_reply) return 1;
+       return 0;
+}
+
+int 
+fptr_whitelist_serviced_query(comm_point_callback_t *fptr)
+{
+       if(fptr == &worker_handle_service_reply) return 1;
        return 0;
 }
index 5e05777871e87a33af78c49c7bd8794c75740d24..5f48b06bdbdacb2cd0ded1f3dc159e4cf4c4174c 100644 (file)
@@ -87,4 +87,32 @@ int fptr_whitelist_comm_signal(void (*fptr)(int, void*));
  */
 int fptr_whitelist_event(void (*fptr)(int, short, void *));
 
+/**
+ * Check function pointer whitelist for pending udp callback values.
+ * This is not called by libevent itself, but checked by netevent.
+ *
+ * @param fptr: function pointer to check.
+ * @return false if not in whitelist.
+ */
+int fptr_whitelist_pending_udp(comm_point_callback_t *fptr);
+
+/**
+ * Check function pointer whitelist for pending tcp callback values.
+ * This is not called by libevent itself, but checked by netevent.
+ *
+ * @param fptr: function pointer to check.
+ * @return false if not in whitelist.
+ */
+int fptr_whitelist_pending_tcp(comm_point_callback_t *fptr);
+
+/**
+ * Check function pointer whitelist for serviced query callback values.
+ * This is not called by libevent itself, but checked by netevent.
+ *
+ * @param fptr: function pointer to check.
+ * @return false if not in whitelist.
+ */
+int fptr_whitelist_serviced_query(comm_point_callback_t *fptr);
+
+
 #endif /* UTIL_FPTR_WLIST_H */
index b3eb8d312a737c7d9aca8c2137e409bf0a0dbd07..d238bcea4a965de4cbad8878a91aed775691cbfc 100644 (file)
@@ -93,54 +93,6 @@ struct internal_signal {
        struct internal_signal* next;
 };
 
-/**
- * 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);
-
-/**
- * handle libevent callback for timer comm.
- * @param fd: file descriptor (always -1).
- * @param event: event bits from libevent: 
- *     EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT.
- * @param arg: the comm_timer structure.
- */
-static void comm_timer_callback(int fd, short event, void* arg);
-
-/**
- * handle libevent callback for signal comm.
- * @param fd: file descriptor (used for the signal number).
- * @param event: event bits from libevent: 
- *     EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT.
- * @param arg: the internal commsignal structure.
- */
-static void comm_signal_callback(int fd, short event, void* arg);
-
-/** libevent callback for AF_UNIX fds */
-static void comm_point_local_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,
@@ -223,7 +175,7 @@ comm_point_send_udp_msg(struct comm_point *c, ldns_buffer* packet,
        return 1;
 }
 
-static void 
+void 
 comm_point_udp_callback(int fd, short event, void* arg)
 {
        struct comm_reply rep;
@@ -254,6 +206,7 @@ comm_point_udp_callback(int fd, short event, void* arg)
                (void)comm_point_send_udp_msg(rep.c, rep.c->buffer,
                        (struct sockaddr*)&rep.addr, rep.addrlen);
        }
+       log_assert(fptr_whitelist_event(rep.c->ev->ev.ev_callback));
 }
 
 /** Use a new tcp handler for new query fd, set to read query */
@@ -268,7 +221,7 @@ setup_tcp_handler(struct comm_point* c, int fd)
        comm_point_start_listening(c, fd, TCP_QUERY_TIMEOUT);
 }
 
-static void 
+void 
 comm_point_tcp_accept_callback(int fd, short event, void* arg)
 {
        struct comm_point* c = (struct comm_point*)arg, *c_hdl;
@@ -310,6 +263,7 @@ comm_point_tcp_accept_callback(int fd, short event, void* arg)
        }
        /* addr is dropped. Not needed for tcp reply. */
        setup_tcp_handler(c_hdl, new_fd);
+       log_assert(fptr_whitelist_event(c->ev->ev.ev_callback));
 }
 
 /** Make tcp handler free for next assignment */
@@ -496,7 +450,7 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c)
        return 1;
 }
 
-static void 
+void 
 comm_point_tcp_handle_callback(int fd, short event, void* arg)
 {
        struct comm_point* c = (struct comm_point*)arg;
@@ -512,6 +466,7 @@ comm_point_tcp_handle_callback(int fd, short event, void* arg)
                                        NETEVENT_CLOSED, NULL);
                        }
                }
+               log_assert(fptr_whitelist_event(c->ev->ev.ev_callback));
                return;
        }
        if(event&EV_WRITE) {
@@ -524,6 +479,7 @@ comm_point_tcp_handle_callback(int fd, short event, void* arg)
                                        NETEVENT_CLOSED, NULL);
                        }
                }
+               log_assert(fptr_whitelist_event(c->ev->ev.ev_callback));
                return;
        }
        if(event&EV_TIMEOUT) {
@@ -534,12 +490,14 @@ comm_point_tcp_handle_callback(int fd, short event, void* arg)
                        (void)(*c->callback)(c, c->cb_arg,
                                NETEVENT_TIMEOUT, NULL);
                }
+               log_assert(fptr_whitelist_event(c->ev->ev.ev_callback));
                return;
        }
        log_err("Ignored event %d for tcphdl.", event);
+       log_assert(fptr_whitelist_event(c->ev->ev.ev_callback));
 }
 
-static void comm_point_local_handle_callback(int fd, short event, void* arg)
+void comm_point_local_handle_callback(int fd, short event, void* arg)
 {
        struct comm_point* c = (struct comm_point*)arg;
        log_assert(c->type == comm_local);
@@ -550,9 +508,11 @@ static void comm_point_local_handle_callback(int fd, short event, void* arg)
                        (void)(*c->callback)(c, c->cb_arg, NETEVENT_CLOSED, 
                                NULL);
                }
+               log_assert(fptr_whitelist_event(c->ev->ev.ev_callback));
                return;
        }
        log_err("Ignored event %d for localhdl.", event);
+       log_assert(fptr_whitelist_event(c->ev->ev.ev_callback));
 }
 
 struct comm_point* 
@@ -1069,7 +1029,7 @@ comm_timer_delete(struct comm_timer* timer)
        free(timer);
 }
 
-static void 
+void 
 comm_timer_callback(int ATTR_UNUSED(fd), short event, void* arg)
 {
        struct comm_timer* tm = (struct comm_timer*)arg;
@@ -1078,6 +1038,7 @@ comm_timer_callback(int ATTR_UNUSED(fd), short event, void* arg)
        tm->ev_timer->enabled = 0;
        log_assert(fptr_whitelist_comm_timer(tm->callback));
        (*tm->callback)(tm->cb_arg);
+       log_assert(fptr_whitelist_event(tm->ev_timer->ev.ev_callback));
 }
 
 int 
@@ -1109,7 +1070,7 @@ comm_signal_create(struct comm_base* base,
        return com;
 }
 
-static void 
+void 
 comm_signal_callback(int sig, short event, void* arg)
 {
        struct comm_signal* comsig = (struct comm_signal*)arg;
@@ -1117,6 +1078,7 @@ comm_signal_callback(int sig, short event, void* arg)
                return;
        log_assert(fptr_whitelist_comm_signal(comsig->callback));
        (*comsig->callback)(sig, comsig->cb_arg);
+       log_assert(fptr_whitelist_event(comsig->ev_signal->ev.ev_callback));
 }
 
 int 
index a1bb56bbb76ed5ef3c8effd70f31a87f935019c7..c63944e39671e140bab6e49fd2420e5f9ef5d699 100644 (file)
@@ -461,4 +461,68 @@ int comm_signal_bind(struct comm_signal* comsig, int sig);
  */
 void comm_signal_delete(struct comm_signal* comsig);
 
+
+/**** internal routines ****/
+
+/**
+ * This routine is published for checks and tests, and is only used internally.
+ * 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.
+ */
+void comm_point_udp_callback(int fd, short event, void* arg);
+
+/**
+ * This routine is published for checks and tests, and is only used internally.
+ * 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.
+ */
+void comm_point_tcp_accept_callback(int fd, short event, void* arg);
+
+/**
+ * This routine is published for checks and tests, and is only used internally.
+ * 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.
+ */
+void comm_point_tcp_handle_callback(int fd, short event, void* arg);
+
+/**
+ * This routine is published for checks and tests, and is only used internally.
+ * handle libevent callback for timer comm.
+ * @param fd: file descriptor (always -1).
+ * @param event: event bits from libevent: 
+ *     EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT.
+ * @param arg: the comm_timer structure.
+ */
+void comm_timer_callback(int fd, short event, void* arg);
+
+/**
+ * This routine is published for checks and tests, and is only used internally.
+ * handle libevent callback for signal comm.
+ * @param fd: file descriptor (used for the signal number).
+ * @param event: event bits from libevent: 
+ *     EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT.
+ * @param arg: the internal commsignal structure.
+ */
+void comm_signal_callback(int fd, short event, void* arg);
+
+/**
+ * This routine is published for checks and tests, and is only used internally.
+ * libevent callback for AF_UNIX fds
+ * @param fd: file descriptor.
+ * @param event: event bits from libevent: 
+ *     EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT.
+ * @param arg: the comm_point structure.
+ */
+void comm_point_local_handle_callback(int fd, short event, void* arg);
+
+
 #endif /* NET_EVENT_H */