X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=http_send.c;h=6ededb275ac225d8a38d6ccbead967d53877fad4;hp=3de313ce96ca4478ac2c05d186c6788f58eec590;hb=1e012cf40238883621692051a22fb9c7cad5e944;hpb=bc8187d6a4ca3191b3c54226ba54e4f0c4cf4e6e diff --git a/http_send.c b/http_send.c index 3de313ce..6ededb27 100644 --- a/http_send.c +++ b/http_send.c @@ -1,13 +1,15 @@ /* - * Copyright (C) 2005-2008 Andre Noll + * Copyright (C) 2005-2009 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ /** \file http_send.c paraslash's http sender */ +#include #include #include +#include #include "para.h" #include "error.h" @@ -41,7 +43,9 @@ enum http_client_status { HTTP_INVALID_GET_REQUEST }; +/** For each connected client, a structure of this type is maintained. */ struct private_http_sender_data { + /** The current state of this client. */ enum http_client_status status; }; @@ -74,7 +78,8 @@ static void http_shutdown_clients(void) } static void http_send(long unsigned current_chunk, - __a_unused long unsigned chunks_sent, const char *buf, size_t len) + __a_unused long unsigned chunks_sent, const char *buf, size_t len, + const char *header_buf, size_t header_len) { struct sender_client *sc, *tmp; @@ -82,7 +87,8 @@ static void http_send(long unsigned current_chunk, struct private_http_sender_data *phsd = sc->private_data; if (phsd->status != HTTP_STREAMING) continue; - send_chunk(sc, hss, 0, current_chunk, buf, len); + send_chunk(sc, hss, 0, current_chunk, buf, len, header_buf, + header_len); } } @@ -105,8 +111,7 @@ static void http_post_select(fd_set *rfds, __a_unused fd_set *wfds) phsd->status = HTTP_INVALID_GET_REQUEST; } else { phsd->status = HTTP_GOT_GET_REQUEST; - PARA_INFO_LOG("%s", - "received get request\n"); + PARA_INFO_LOG("received get request\n"); } } break; @@ -130,7 +135,7 @@ static void http_post_select(fd_set *rfds, __a_unused fd_set *wfds) phsd->status = HTTP_CONNECTED; } -static void http_pre_select(int *max_fileno, 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; @@ -141,6 +146,9 @@ static void http_pre_select(int *max_fileno, fd_set *rfds, __a_unused fd_set *wf struct private_http_sender_data *phsd = sc->private_data; if (phsd->status == HTTP_CONNECTED) /* need to recv get request */ para_fd_set(sc->fd, rfds, max_fileno); + if (phsd->status == HTTP_GOT_GET_REQUEST || + phsd->status == HTTP_INVALID_GET_REQUEST) + para_fd_set(sc->fd, wfds, max_fileno); } }