X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=http_send.c;h=330b45ac1b3ec675a497796be614c07c0bbd9c36;hp=3df694de912e5a9d6e85544b3a68e68168004e31;hb=a1610c2bd6e3097c6473c5403bfd59425b2058ba;hpb=0b786d977ded3c3922e851e5b8d60837b43469b9 diff --git a/http_send.c b/http_send.c index 3df694de..330b45ac 100644 --- a/http_send.c +++ b/http_send.c @@ -16,6 +16,7 @@ #include "error.h" #include "string.h" #include "afh.h" +#include "net.h" #include "server.h" #include "http.h" #include "list.h" @@ -23,10 +24,8 @@ #include "sched.h" #include "vss.h" #include "close_on_fork.h" -#include "net.h" #include "fd.h" #include "chunk_queue.h" -#include "acl.h" /** Message sent to clients that do not send a valid get request. */ #define HTTP_ERR_MSG "HTTP/1.0 400 Bad Request\n" @@ -77,6 +76,12 @@ static void http_shutdown_clients(void) shutdown_clients(hss); } +static void http_shutdown(void) +{ + http_shutdown_clients(); + generic_acl_deplete(&hss->acl); +} + static int queue_chunk_or_shutdown(struct sender_client *sc, struct sender_status *ss, const char *buf, size_t num_bytes) { @@ -193,10 +198,13 @@ static void http_post_select(fd_set *rfds, __a_unused fd_set *wfds) static void http_pre_select(int *max_fileno, fd_set *rfds, fd_set *wfds) { struct sender_client *sc, *tmp; + unsigned n; - if (hss->listen_fd < 0) - return; - para_fd_set(hss->listen_fd, rfds, max_fileno); + FOR_EACH_LISTEN_FD(n, hss) { + if (hss->listen_fds[n] < 0) + continue; + para_fd_set(hss->listen_fds[n], rfds, max_fileno); + } list_for_each_entry_safe(sc, tmp, &hss->client_list, node) { struct private_http_sender_data *phsd = sc->private_data; if (phsd->status == HTTP_CONNECTED) /* need to recv get request */ @@ -209,7 +217,8 @@ static void http_pre_select(int *max_fileno, fd_set *rfds, fd_set *wfds) static int http_com_on(__a_unused struct sender_command_data *scd) { - return generic_com_on(hss, IPPROTO_TCP); + generic_com_on(hss, IPPROTO_TCP); + return 1; } static int http_com_off(__a_unused struct sender_command_data *scd) @@ -241,16 +250,13 @@ static char *http_status(void) */ static void http_send_init(void) { - int ret; - init_sender_status(hss, OPT_RESULT(HTTP_ACCESS), + OPT_RESULT(HTTP_LISTEN_ADDRESS), OPT_UINT32_VAL(HTTP_PORT), OPT_UINT32_VAL(HTTP_MAX_CLIENTS), OPT_GIVEN(HTTP_DEFAULT_DENY)); if (OPT_GIVEN(HTTP_NO_AUTOSTART)) return; - ret = generic_com_on(hss, IPPROTO_TCP); - if (ret < 0) - PARA_ERROR_LOG("%s\n", para_strerror(-ret)); + generic_com_on(hss, IPPROTO_TCP); } /** @@ -266,6 +272,7 @@ static void http_send_init(void) const struct sender http_sender = { .name = "http", .init = http_send_init, + .shutdown = http_shutdown, .pre_select = http_pre_select, .post_select = http_post_select, .send = http_send,