X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=http_send.c;h=f53e6d8cc5100176cf54b19de057375eb4960cb8;hp=d5c6397e4a52eb096f9ebc13cb364d38b7b47455;hb=4fbe16430b4776814128d7110682c69d1b047c57;hpb=b15735ae7de59e0d9db43f23388d8ac47a6d2def diff --git a/http_send.c b/http_send.c index d5c6397e..f53e6d8c 100644 --- a/http_send.c +++ b/http_send.c @@ -1,30 +1,29 @@ -/* - * Copyright (C) 2005-2010 Andre Noll - * - * Licensed under the GPL v2. For licencing details see COPYING. - */ +/* Copyright (C) 2005 Andre Noll , see file COPYING. */ /** \file http_send.c paraslash's http sender */ +#include +#include #include #include -#include -#include -#include +#include +#include +#include +#include +#include "server.lsg.h" #include "para.h" #include "error.h" #include "string.h" -#include "server.cmdline.h" #include "afh.h" -#include "afs.h" +#include "net.h" #include "server.h" #include "http.h" #include "list.h" #include "send.h" +#include "sched.h" #include "vss.h" #include "close_on_fork.h" -#include "net.h" #include "fd.h" #include "chunk_queue.h" #include "acl.h" @@ -54,7 +53,7 @@ static struct sender_status http_sender_status, *hss = &http_sender_status; static int http_send_msg(struct sender_client *sc, const char *msg) { - int ret = send_buffer(sc->fd, msg); + int ret = write_buffer(sc->fd, msg); if (ret < 0) shutdown_client(sc, hss); @@ -126,7 +125,7 @@ static void http_send_chunk(struct sender_client *sc, struct sender_status *ss, ret = queue_chunk_or_shutdown(sc, ss, buf, len); goto out; } - ret = write_nonblock(sc->fd, buf, len); + ret = xwrite(sc->fd, buf, len); if (ret < 0) { shutdown_client(sc, ss); goto out; @@ -194,10 +193,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 */ @@ -210,7 +212,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) @@ -231,9 +234,9 @@ static int http_com_allow(struct sender_command_data *scd) return 1; } -static char *http_info(void) +static char *http_status(void) { - return get_sender_info(hss, "http"); + return generic_sender_status(hss, "http"); } /** @@ -246,27 +249,25 @@ static char *http_info(void) */ void http_send_init(struct sender *s) { - int ret; - s->info = http_info; + s->status = http_status; s->send = http_send; s->pre_select = http_pre_select; s->post_select = http_post_select; s->shutdown_clients = http_shutdown_clients; s->resolve_target = NULL; s->help = generic_sender_help; - s->client_cmds[SENDER_ON] = http_com_on; - s->client_cmds[SENDER_OFF] = http_com_off; - s->client_cmds[SENDER_DENY] = http_com_deny; - s->client_cmds[SENDER_ALLOW] = http_com_allow; - s->client_cmds[SENDER_ADD] = NULL; - s->client_cmds[SENDER_DELETE] = NULL; + s->client_cmds[SENDER_on] = http_com_on; + s->client_cmds[SENDER_off] = http_com_off; + s->client_cmds[SENDER_deny] = http_com_deny; + s->client_cmds[SENDER_allow] = http_com_allow; + s->client_cmds[SENDER_add] = NULL; + s->client_cmds[SENDER_delete] = NULL; - init_sender_status(hss, conf.http_access_arg, conf.http_access_given, - conf.http_port_arg, conf.http_max_clients_arg, - conf.http_default_deny_given); - if (conf.http_no_autostart_given) + 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); }