diff --git a/src/htsp_server.c b/src/htsp_server.c index f914c5a6..94e91e16 100644 --- a/src/htsp_server.c +++ b/src/htsp_server.c @@ -2318,6 +2318,17 @@ htsp_init(const char *bindaddr) htsp_server_2 = tcp_server_create(bindaddr, tvheadend_htsp_port_extra, &ops, NULL); } +/* + * + */ +void +htsp_register(void) +{ + tcp_server_register(htsp_server); + if (htsp_server_2) + tcp_server_register(htsp_server_2); +} + /** * Fire down HTSP server */ diff --git a/src/htsp_server.h b/src/htsp_server.h index af5f400b..53cc4967 100644 --- a/src/htsp_server.h +++ b/src/htsp_server.h @@ -23,6 +23,7 @@ #include "dvr/dvr.h" void htsp_init(const char *bindaddr); +void htsp_register(void); void htsp_done(void); void htsp_channel_update_nownext(channel_t *ch); diff --git a/src/http.c b/src/http.c index 49dccb68..967ff980 100644 --- a/src/http.c +++ b/src/http.c @@ -972,6 +972,12 @@ http_server_init(const char *bindaddr) http_server = tcp_server_create(bindaddr, tvheadend_webui_port, &ops, NULL); } +void +http_server_register(void) +{ + tcp_server_register(http_server); +} + void http_server_done(void) { diff --git a/src/http.h b/src/http.h index 34abcfe7..cf35f76d 100644 --- a/src/http.h +++ b/src/http.h @@ -202,6 +202,7 @@ http_path_t *http_path_add(const char *path, void *opaque, http_callback_t *callback, uint32_t accessmask); void http_server_init(const char *bindaddr); +void http_server_register(void); void http_server_done(void); int http_access_verify(http_connection_t *hc, int mask); diff --git a/src/main.c b/src/main.c index 452a0e37..16fb19eb 100644 --- a/src/main.c +++ b/src/main.c @@ -671,9 +671,14 @@ main(int argc, char **argv) tvhlog_init(log_level, log_options, opt_logpath); tvhlog_set_debug(log_debug); tvhlog_set_trace(log_trace); + tvhinfo("main", "Log started"); signal(SIGPIPE, handle_sigpipe); // will be redundant later + tcp_server_preinit(opt_ipv6); + http_server_init(opt_bindaddr); // bind to ports only + htsp_init(opt_bindaddr); // bind to ports only + /* Daemonise */ if(opt_fork) { const char *homedir; @@ -807,8 +812,8 @@ main(int argc, char **argv) timeshift_init(); #endif - tcp_server_init(opt_ipv6); - http_server_init(opt_bindaddr); + tcp_server_init(); + http_server_register(); webui_init(opt_xspf); #if ENABLE_UPNP upnp_server_init(opt_bindaddr); @@ -825,7 +830,7 @@ main(int argc, char **argv) dbus_server_start(); - htsp_init(opt_bindaddr); + htsp_register(); if(opt_subscribe != NULL) diff --git a/src/tcp.c b/src/tcp.c index 18931d32..abad464b 100644 --- a/src/tcp.c +++ b/src/tcp.c @@ -545,15 +545,12 @@ tcp_server_create (const char *bindaddr, int port, tcp_server_ops_t *ops, void *opaque) { int fd, x; - tvhpoll_event_t ev; tcp_server_t *ts; struct addrinfo hints, *res, *ressave, *use = NULL; char port_buf[6]; int one = 1; int zero = 0; - memset(&ev, 0, sizeof(ev)); - snprintf(port_buf, 6, "%d", port); memset(&hints, 0, sizeof(struct addrinfo)); @@ -611,13 +608,25 @@ tcp_server_create ts->serverfd = fd; ts->ops = *ops; ts->opaque = opaque; + return ts; +} - ev.fd = fd; + +/** + * + */ + +void tcp_server_register(void *server) +{ + tcp_server_t *ts = server; + tvhpoll_event_t ev; + + memset(&ev, 0, sizeof(ev)); + + ev.fd = ts->serverfd; ev.events = TVHPOLL_IN; ev.data.ptr = ts; tvhpoll_add(tcp_server_poll, &ev, 1); - - return ts; } /** @@ -678,12 +687,16 @@ tcp_server_connections ( void ) pthread_t tcp_server_tid; void -tcp_server_init(int opt_ipv6) +tcp_server_preinit(int opt_ipv6) { - tvhpoll_event_t ev; if(opt_ipv6) tcp_preferred_address_family = AF_INET6; +} +void +tcp_server_init(void) +{ + tvhpoll_event_t ev; tvh_pipe(O_NONBLOCK, &tcp_server_pipe); tcp_server_poll = tvhpoll_create(10); diff --git a/src/tcp.h b/src/tcp.h index 7c4b8ead..87d53cea 100644 --- a/src/tcp.h +++ b/src/tcp.h @@ -49,7 +49,8 @@ typedef struct tcp_server_ops extern int tcp_preferred_address_family; -void tcp_server_init(int opt_ipv6); +void tcp_server_preinit(int opt_ipv6); +void tcp_server_init(void); void tcp_server_done(void); int tcp_connect(const char *hostname, int port, const char *bindaddr, @@ -62,6 +63,8 @@ typedef void (tcp_server_callback_t)(int fd, void *opaque, void *tcp_server_create(const char *bindaddr, int port, tcp_server_ops_t *ops, void *opaque); +void tcp_server_register(void *server); + void tcp_server_delete(void *server); int tcp_read(int fd, void *buf, size_t len); diff --git a/src/tvhlog.c b/src/tvhlog.c index 6cd98286..6f38f96b 100644 --- a/src/tvhlog.c +++ b/src/tvhlog.c @@ -412,7 +412,7 @@ tvhlog_init ( int level, int options, const char *path ) tvhlog_path = path ? strdup(path) : NULL; tvhlog_trace = NULL; tvhlog_debug = NULL; - tvhlog_run = 0; + tvhlog_run = 1; openlog("tvheadend", LOG_PID, LOG_DAEMON); pthread_mutex_init(&tvhlog_mutex, NULL); pthread_cond_init(&tvhlog_cond, NULL); @@ -422,7 +422,6 @@ tvhlog_init ( int level, int options, const char *path ) void tvhlog_start ( void ) { - tvhlog_run = 1; tvhthread_create(&tvhlog_tid, NULL, tvhlog_thread, NULL); }