X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=http_send.c;h=6f06673ce5aabc64728980ddfed259a65d417d53;hp=52383b06b465d14b8369badbc3606a7753ec90c5;hb=ac4e01ba1a2f302bf31dd511a7aff8da78660b15;hpb=f652ce6afe7f6fd0e42814505234cbf4321a736e diff --git a/http_send.c b/http_send.c index 52383b06..6f06673c 100644 --- a/http_send.c +++ b/http_send.c @@ -1,21 +1,21 @@ -/* - * Copyright (C) 2005-2013 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 "server.lsg.h" #include "para.h" #include "error.h" #include "string.h" -#include "server.cmdline.h" #include "afh.h" -#include "afs.h" #include "server.h" #include "http.h" #include "list.h" @@ -230,42 +230,53 @@ 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"); } -/** - * The init function of the http sender. - * - * \param s Pointer to the http sender struct. - * - * It initializes all function pointers of \a s, the client list and the access - * control list. If the autostart option was given, the tcp port is opened. +/* + * Initialize the client list and the access control list, and optionally + * listen on the tcp port. */ -void http_send_init(struct sender *s) +static void http_send_init(void) { int ret; - s->info = http_info; - 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; - 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_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)); } + +/** + * The HTTP sender. + * + * This is the only sender which does not FEC-encode the stream. This is not + * necessary because HTTP sits on top of TCP, a reliable transport which + * retransmits lost packets automatically. The sender employs per-client queues + * which queue chunks of audio data if they can not be sent immediately because + * the write operation would block. Most methods of the sender are implemented + * as wrappers for the generic functions defined in \ref send_common.c. + */ +const struct sender http_sender = { + .name = "http", + .init = http_send_init, + .shutdown = http_shutdown_clients, + .pre_select = http_pre_select, + .post_select = http_post_select, + .send = http_send, + .shutdown_clients = http_shutdown_clients, + .client_cmds = { + [SENDER_on] = http_com_on, + [SENDER_off] = http_com_off, + [SENDER_deny] = http_com_deny, + [SENDER_allow] = http_com_allow, + }, + .help = generic_sender_help, + .status = http_status, +};