split udp listener init code into separate file

git.mgm/mediaproxy-ng/2.2
Richard Fuchs 13 years ago
parent 32523c5896
commit 67e876ff97

@ -26,7 +26,7 @@ CPPFLAGS+= `dpkg-buildflags --get CPPFLAGS`
LDFLAGS+= `dpkg-buildflags --get LDFLAGS`
SRCS= main.c kernel.c poller.c aux.c control.c streambuf.c call.c control_udp.c redis.c \
bencode.c cookie_cache.c
bencode.c cookie_cache.c udp_listener.c
OBJS= $(SRCS:.c=.o)

@ -14,12 +14,9 @@
#include "aux.h"
#include "log.h"
#include "call.h"
#include "udp_listener.h"
static void control_udp_closed(int fd, void *p, uintptr_t x) {
abort();
}
static void control_udp_incoming(int fd, void *p, uintptr_t x) {
struct control_udp *u = p;
int ret, len;
@ -154,36 +151,15 @@ out:
}
struct control_udp *control_udp_new(struct poller *p, struct in6_addr ip, u_int16_t port, struct callmaster *m) {
int fd;
struct control_udp *c;
struct poller_item i;
struct sockaddr_in6 sin;
const char *errptr;
int erroff;
if (!p || !m)
return NULL;
fd = socket(AF_INET6, SOCK_DGRAM, 0);
if (fd == -1)
return NULL;
nonblock(fd);
reuseaddr(fd);
ipv6only(fd, 0);
ZERO(sin);
sin.sin6_family = AF_INET6;
sin.sin6_addr = ip;
sin.sin6_port = htons(port);
if (bind(fd, (struct sockaddr *) &sin, sizeof(sin)))
goto fail;
c = obj_alloc0("control_udp", sizeof(*c), NULL);
c->fd = fd;
c->poller = p;
c->callmaster = m;
c->parse_re = pcre_compile(
/* cookie cmd flags callid viabranch:5 */
@ -206,20 +182,13 @@ struct control_udp *control_udp_new(struct poller *p, struct in6_addr ip, u_int1
cookie_cache_init(&c->cookie_cache);
ZERO(i);
i.fd = fd;
i.closed = control_udp_closed;
i.readable = control_udp_incoming;
i.obj = &c->obj;
if (poller_add_item(p, &i))
if (udp_listener_init(&c->udp_listener, p, ip, port, control_udp_incoming, &c->obj))
goto fail2;
return c;
fail2:
obj_put(c);
fail:
close(fd);
return NULL;
}

@ -12,6 +12,7 @@
#include "obj.h"
#include "aux.h"
#include "cookie_cache.h"
#include "udp_listener.h"
@ -46,11 +47,9 @@ struct callmaster;
struct control_udp {
struct obj obj;
int fd;
struct poller *poller;
struct callmaster *callmaster;
struct cookie_cache cookie_cache;
struct udp_listener udp_listener;
pcre *parse_re;
pcre_extra *parse_ree;

@ -11,15 +11,17 @@
typedef void (*poller_func_t)(int, void *, uintptr_t);
struct poller_item {
int fd;
struct obj *obj;
uintptr_t uintp;
void (*readable)(int, void *, uintptr_t);
void (*writeable)(int, void *, uintptr_t);
void (*closed)(int, void *, uintptr_t);
void (*timer)(int, void *, uintptr_t);
poller_func_t readable;
poller_func_t writeable;
poller_func_t closed;
poller_func_t timer;
};
struct poller;

Loading…
Cancel
Save