fptr whitelist network code callbacks.

git-svn-id: file:///svn/unbound/trunk@659 be551aaa-1e26-0410-a405-d3ace91eadb9
This commit is contained in:
Wouter Wijngaards 2007-10-05 08:05:06 +00:00
parent 107a915c67
commit 9a60182c86
11 changed files with 251 additions and 71 deletions

View file

@ -61,6 +61,22 @@ int worker_handle_request(struct comm_point* ATTR_UNUSED(c),
return 0; 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)) void worker_sighandler(int ATTR_UNUSED(sig), void* ATTR_UNUSED(arg))
{ {
log_assert(0); log_assert(0);

View file

@ -174,8 +174,7 @@ worker_send_cmd(struct worker* worker, ldns_buffer* buffer,
log_err("write socket: %s", strerror(errno)); log_err("write socket: %s", strerror(errno));
} }
/** process incoming replies from the network */ int
static int
worker_handle_reply(struct comm_point* c, void* arg, int error, worker_handle_reply(struct comm_point* c, void* arg, int error,
struct comm_reply* reply_info) struct comm_reply* reply_info)
{ {
@ -206,8 +205,7 @@ worker_handle_reply(struct comm_point* c, void* arg, int error,
return 0; return 0;
} }
/** process incoming serviced query replies from the network */ int
static int
worker_handle_service_reply(struct comm_point* c, void* arg, int error, worker_handle_service_reply(struct comm_point* c, void* arg, int error,
struct comm_reply* reply_info) struct comm_reply* reply_info)
{ {

View 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, int worker_handle_request(struct comm_point* c, void* arg, int error,
struct comm_reply* repinfo); 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 */ #endif /* DAEMON_WORKER_H */

View file

@ -1,3 +1,6 @@
5 October 2007: Wouter
- function pointer whitelist.
4 October 2007: Wouter 4 October 2007: Wouter
- overwrite sensitive random seed value after use. - overwrite sensitive random seed value after use.
- switch to logfile very soon if not -d (console attached). - switch to logfile very soon if not -d (console attached).

View file

@ -50,6 +50,7 @@
#include "util/log.h" #include "util/log.h"
#include "util/net_help.h" #include "util/net_help.h"
#include "util/random.h" #include "util/random.h"
#include "util/fptr_wlist.h"
#ifdef HAVE_SYS_TYPES_H #ifdef HAVE_SYS_TYPES_H
# include <sys/types.h> # include <sys/types.h>
@ -62,9 +63,6 @@
/** number of retries on outgoing UDP queries */ /** number of retries on outgoing UDP queries */
#define OUTBOUND_UDP_RETRY 4 #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 */ /** initiate TCP transaction for serviced query */
static void serviced_tcp_initiate(struct outside_network* outnet, static void serviced_tcp_initiate(struct outside_network* outnet,
struct serviced_query* sq, ldns_buffer* buff); 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; comm_point_callback_t* cb = w->cb;
void* cb_arg = w->cb_arg; void* cb_arg = w->cb_arg;
waiting_tcp_delete(w); waiting_tcp_delete(w);
log_assert(fptr_whitelist_pending_tcp(cb));
(void)(*cb)(NULL, cb_arg, NETEVENT_CLOSED, NULL); (void)(*cb)(NULL, cb_arg, NETEVENT_CLOSED, NULL);
} }
} }
@ -194,8 +193,7 @@ decomission_pending_tcp(struct outside_network* outnet,
use_free_buffer(outnet); use_free_buffer(outnet);
} }
/** callback for pending tcp connections */ int
static int
outnet_tcp_cb(struct comm_point* c, void* arg, int error, outnet_tcp_cb(struct comm_point* c, void* arg, int error,
struct comm_reply *reply_info) struct comm_reply *reply_info)
{ {
@ -214,6 +212,7 @@ outnet_tcp_cb(struct comm_point* c, void* arg, int error,
error = NETEVENT_CLOSED; error = NETEVENT_CLOSED;
} }
} }
log_assert(fptr_whitelist_pending_tcp(pend->query->cb));
(void)(*pend->query->cb)(c, pend->query->cb_arg, error, reply_info); (void)(*pend->query->cb)(c, pend->query->cb_arg, error, reply_info);
decomission_pending_tcp(outnet, pend); decomission_pending_tcp(outnet, pend);
return 0; return 0;
@ -272,6 +271,7 @@ outnet_udp_cb(struct comm_point* c, void* arg, int error,
verbose(VERB_ALGO, "outnet handle udp reply"); verbose(VERB_ALGO, "outnet handle udp reply");
/* delete from tree first in case callback creates a retry */ /* delete from tree first in case callback creates a retry */
(void)rbtree_delete(outnet->pending, p->node.key); (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); (void)(*p->cb)(p->c, p->cb_arg, NETEVENT_NOERROR, reply_info);
pending_delete(NULL, p); pending_delete(NULL, p);
return 0; return 0;
@ -386,6 +386,7 @@ pending_udp_timer_cb(void *arg)
struct pending* p = (struct pending*)arg; struct pending* p = (struct pending*)arg;
/* it timed out */ /* it timed out */
verbose(VERB_ALGO, "timeout udp"); verbose(VERB_ALGO, "timeout udp");
log_assert(fptr_whitelist_pending_udp(p->cb));
(void)(*p->cb)(p->c, p->cb_arg, NETEVENT_TIMEOUT, NULL); (void)(*p->cb)(p->c, p->cb_arg, NETEVENT_TIMEOUT, NULL);
pending_delete(p->outnet, p); pending_delete(p->outnet, p);
} }
@ -738,6 +739,7 @@ outnet_tcptimer(void* arg)
cb = w->cb; cb = w->cb;
cb_arg = w->cb_arg; cb_arg = w->cb_arg;
waiting_tcp_delete(w); waiting_tcp_delete(w);
log_assert(fptr_whitelist_pending_tcp(cb));
(void)(*cb)(NULL, cb_arg, NETEVENT_TIMEOUT, NULL); (void)(*cb)(NULL, cb_arg, NETEVENT_TIMEOUT, NULL);
use_free_buffer(outnet); 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_write(c->buffer, backup_p, backlen);
ldns_buffer_flip(c->buffer); ldns_buffer_flip(c->buffer);
} }
log_assert(fptr_whitelist_serviced_query(p->cb));
(void)(*p->cb)(c, p->cb_arg, error, rep); (void)(*p->cb)(c, p->cb_arg, error, rep);
p = n; p = n;
} }
@ -1015,8 +1018,7 @@ serviced_callbacks(struct serviced_query* sq, int error, struct comm_point* c,
serviced_delete(sq); serviced_delete(sq);
} }
/** TCP reply or error callback for serviced queries */ int
static int
serviced_tcp_callback(struct comm_point* c, void* arg, int error, serviced_tcp_callback(struct comm_point* c, void* arg, int error,
struct comm_reply* rep) 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, serviced_udp_callback(struct comm_point* c, void* arg, int error,
struct comm_reply* rep) struct comm_reply* rep)
{ {

View 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, int outnet_udp_cb(struct comm_point* c, void* arg, int error,
struct comm_reply *reply_info); 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 */ /** callback for udp timeout */
void pending_udp_timer_cb(void *arg); void pending_udp_timer_cb(void *arg);
/** callback for outgoing TCP timer event */ /** callback for outgoing TCP timer event */
void outnet_tcptimer(void* arg); 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 */ #endif /* OUTSIDE_NETWORK_H */

View file

@ -968,6 +968,14 @@ int outnet_udp_cb(struct comm_point* ATTR_UNUSED(c),
return 0; 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)) void pending_udp_timer_cb(void *ATTR_UNUSED(arg))
{ {
log_assert(0); log_assert(0);
@ -978,4 +986,56 @@ void outnet_tcptimer(void* ATTR_UNUSED(arg))
log_assert(0); 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 ***********/ /*********** End of Dummy routines ***********/

View file

@ -51,17 +51,16 @@
int int
fptr_whitelist_comm_point(comm_point_callback_t *fptr) fptr_whitelist_comm_point(comm_point_callback_t *fptr)
{ {
return 1; if(fptr == &worker_handle_request) return 1;
if(fptr == &worker_handle_control_cmd) return 1;
else if(fptr == &worker_handle_request) return 1;
else if(fptr == &outnet_udp_cb) 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; return 0;
} }
int int
fptr_whitelist_comm_timer(void (*fptr)(void*)) fptr_whitelist_comm_timer(void (*fptr)(void*))
{ {
return 1;
if(fptr == &pending_udp_timer_cb) return 1; if(fptr == &pending_udp_timer_cb) return 1;
else if(fptr == &outnet_tcptimer) return 1; else if(fptr == &outnet_tcptimer) return 1;
return 0; return 0;
@ -70,7 +69,6 @@ fptr_whitelist_comm_timer(void (*fptr)(void*))
int int
fptr_whitelist_comm_signal(void (*fptr)(int, void*)) fptr_whitelist_comm_signal(void (*fptr)(int, void*))
{ {
return 1;
if(fptr == &worker_sighandler) return 1; if(fptr == &worker_sighandler) return 1;
return 0; return 0;
} }
@ -78,5 +76,34 @@ fptr_whitelist_comm_signal(void (*fptr)(int, void*))
int int
fptr_whitelist_event(void (*fptr)(int, short, void *)) 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; return 0;
} }

View file

@ -87,4 +87,32 @@ int fptr_whitelist_comm_signal(void (*fptr)(int, void*));
*/ */
int fptr_whitelist_event(void (*fptr)(int, short, 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 */ #endif /* UTIL_FPTR_WLIST_H */

View file

@ -93,54 +93,6 @@ struct internal_signal {
struct internal_signal* next; 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 */ /** create a tcp handler with a parent */
static struct comm_point* comm_point_create_tcp_handler( static struct comm_point* comm_point_create_tcp_handler(
struct comm_base *base, struct comm_point* parent, size_t bufsize, 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; return 1;
} }
static void void
comm_point_udp_callback(int fd, short event, void* arg) comm_point_udp_callback(int fd, short event, void* arg)
{ {
struct comm_reply rep; 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, (void)comm_point_send_udp_msg(rep.c, rep.c->buffer,
(struct sockaddr*)&rep.addr, rep.addrlen); (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 */ /** 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); comm_point_start_listening(c, fd, TCP_QUERY_TIMEOUT);
} }
static void void
comm_point_tcp_accept_callback(int fd, short event, void* arg) comm_point_tcp_accept_callback(int fd, short event, void* arg)
{ {
struct comm_point* c = (struct comm_point*)arg, *c_hdl; 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. */ /* addr is dropped. Not needed for tcp reply. */
setup_tcp_handler(c_hdl, new_fd); setup_tcp_handler(c_hdl, new_fd);
log_assert(fptr_whitelist_event(c->ev->ev.ev_callback));
} }
/** Make tcp handler free for next assignment */ /** Make tcp handler free for next assignment */
@ -496,7 +450,7 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c)
return 1; return 1;
} }
static void void
comm_point_tcp_handle_callback(int fd, short event, void* arg) comm_point_tcp_handle_callback(int fd, short event, void* arg)
{ {
struct comm_point* c = (struct comm_point*)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); NETEVENT_CLOSED, NULL);
} }
} }
log_assert(fptr_whitelist_event(c->ev->ev.ev_callback));
return; return;
} }
if(event&EV_WRITE) { if(event&EV_WRITE) {
@ -524,6 +479,7 @@ comm_point_tcp_handle_callback(int fd, short event, void* arg)
NETEVENT_CLOSED, NULL); NETEVENT_CLOSED, NULL);
} }
} }
log_assert(fptr_whitelist_event(c->ev->ev.ev_callback));
return; return;
} }
if(event&EV_TIMEOUT) { 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, (void)(*c->callback)(c, c->cb_arg,
NETEVENT_TIMEOUT, NULL); NETEVENT_TIMEOUT, NULL);
} }
log_assert(fptr_whitelist_event(c->ev->ev.ev_callback));
return; return;
} }
log_err("Ignored event %d for tcphdl.", event); 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; struct comm_point* c = (struct comm_point*)arg;
log_assert(c->type == comm_local); 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, (void)(*c->callback)(c, c->cb_arg, NETEVENT_CLOSED,
NULL); NULL);
} }
log_assert(fptr_whitelist_event(c->ev->ev.ev_callback));
return; return;
} }
log_err("Ignored event %d for localhdl.", event); log_err("Ignored event %d for localhdl.", event);
log_assert(fptr_whitelist_event(c->ev->ev.ev_callback));
} }
struct comm_point* struct comm_point*
@ -1069,7 +1029,7 @@ comm_timer_delete(struct comm_timer* timer)
free(timer); free(timer);
} }
static void void
comm_timer_callback(int ATTR_UNUSED(fd), short event, void* arg) comm_timer_callback(int ATTR_UNUSED(fd), short event, void* arg)
{ {
struct comm_timer* tm = (struct comm_timer*)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; tm->ev_timer->enabled = 0;
log_assert(fptr_whitelist_comm_timer(tm->callback)); log_assert(fptr_whitelist_comm_timer(tm->callback));
(*tm->callback)(tm->cb_arg); (*tm->callback)(tm->cb_arg);
log_assert(fptr_whitelist_event(tm->ev_timer->ev.ev_callback));
} }
int int
@ -1109,7 +1070,7 @@ comm_signal_create(struct comm_base* base,
return com; return com;
} }
static void void
comm_signal_callback(int sig, short event, void* arg) comm_signal_callback(int sig, short event, void* arg)
{ {
struct comm_signal* comsig = (struct comm_signal*)arg; struct comm_signal* comsig = (struct comm_signal*)arg;
@ -1117,6 +1078,7 @@ comm_signal_callback(int sig, short event, void* arg)
return; return;
log_assert(fptr_whitelist_comm_signal(comsig->callback)); log_assert(fptr_whitelist_comm_signal(comsig->callback));
(*comsig->callback)(sig, comsig->cb_arg); (*comsig->callback)(sig, comsig->cb_arg);
log_assert(fptr_whitelist_event(comsig->ev_signal->ev.ev_callback));
} }
int int

View file

@ -461,4 +461,68 @@ int comm_signal_bind(struct comm_signal* comsig, int sig);
*/ */
void comm_signal_delete(struct comm_signal* comsig); 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 */ #endif /* NET_EVENT_H */