http_send.c: Get rid of HTTP_READY_TO_STREAM.
[paraslash.git] / http_send.c
index ec7c51355fdfad5b695b6a9b2c9a941801cc4570..329071502f92f30d087bf2a5d62e466522d3e7f7 100644 (file)
@@ -38,8 +38,6 @@ enum http_status {
        HTTP_GOT_GET_REQUEST,
        /** We sent the OK message back to the client. */
        HTTP_SENT_OK_MSG,
-       /** Connection established, we might need to send the audio file header. */
-       HTTP_READY_TO_STREAM,
        /** Connection is ready for sending audio data. */
        HTTP_STREAMING,
        /** We didn't receive a valid get request. */
@@ -67,6 +65,8 @@ struct http_client {
        int check_w;
        /** The position of this client in the client list. */
        struct list_head node;
+       /** non-zero if audio file header has been sent */
+       int header_sent;
        /** The list of pending chunks for this client. */
        struct chunk_queue *cq;
 };
@@ -171,20 +171,18 @@ static void http_send( long unsigned current_chunk,
        int ret;
 
        list_for_each_entry_safe(hc, tmp, &clients, node) {
-               if (hc->status != HTTP_STREAMING &&
-                               hc->status != HTTP_READY_TO_STREAM)
+               if (hc->status != HTTP_STREAMING)
                        continue;
-               if (hc->status == HTTP_READY_TO_STREAM) {
+               if (!hc->header_sent && current_chunk) {
                        size_t hlen;
                        char *hbuf = vss_get_header(&hlen);
-                       if (hbuf && hlen > 0 && current_chunk) {
-                               /* need to send header */
+                       if (hbuf && hlen > 0) { /* need to send header */
                                PARA_INFO_LOG("queueing header: %zu\n", hlen);
                                if (queue_chunk_or_shutdown(hc, -1U, 0) < 0)
                                        continue;
                        } else
                                PARA_INFO_LOG("no need to queue header\n");
-                       hc->status = HTTP_STREAMING;
+                       hc->header_sent = 1;
                }
                ret = send_queued_chunks(hc);
                if (ret < 0) {
@@ -222,7 +220,6 @@ static void http_post_select(fd_set *rfds, fd_set *wfds)
 //             PARA_DEBUG_LOG("handling client %d: %s\n", i, remote_name(hc->fd));
                switch (hc->status) {
                case HTTP_STREAMING: /* nothing to do */
-               case HTTP_READY_TO_STREAM:
                        break;
                case HTTP_CONNECTED: /* need to recv get request */
                        if (hc->check_r && FD_ISSET(hc->fd, rfds)) {
@@ -251,7 +248,7 @@ static void http_post_select(fd_set *rfds, fd_set *wfds)
                        break;
                case HTTP_SENT_OK_MSG: /* need to send header? */
                        if (hc->check_w && FD_ISSET(hc->fd, wfds))
-                               hc->status = HTTP_READY_TO_STREAM;
+                               hc->status = HTTP_STREAMING;
                        break;
                }
        }
@@ -308,7 +305,6 @@ static void http_pre_select(int *max_fileno, fd_set *rfds, fd_set *wfds)
                hc->check_w = 0;
                switch (hc->status) {
                case HTTP_STREAMING:
-               case HTTP_READY_TO_STREAM:
                        break;
                case HTTP_CONNECTED: /* need to recv get request */
                        para_fd_set(hc->fd, rfds, max_fileno);