Remove ->signum from struct signal_task.
[paraslash.git] / http_send.c
index 3959cad4f3b67326d6161a252c5b3a66a74e0394..424d63b2948c941b2ac28775ec4910b7ec9ff73c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2009 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -96,23 +96,20 @@ static void http_post_select(fd_set *rfds, __a_unused fd_set *wfds)
 {
        struct sender_client *sc, *tmp;
        struct private_http_sender_data *phsd;
+       int ret;
 
-       if (hss->listen_fd < 0)
-               return;
        list_for_each_entry_safe(sc, tmp, &hss->client_list, node) {
                phsd = sc->private_data;
                switch (phsd->status) {
                case HTTP_STREAMING: /* nothing to do */
                        break;
                case HTTP_CONNECTED: /* need to recv get request */
-                       if (FD_ISSET(sc->fd, rfds)) {
-                               if (recv_pattern(sc->fd, HTTP_GET_MSG, MAXLINE)
-                                               < 0) {
-                                       phsd->status = HTTP_INVALID_GET_REQUEST;
-                               } else {
-                                       phsd->status = HTTP_GOT_GET_REQUEST;
-                                       PARA_INFO_LOG("received get request\n");
-                               }
+                       ret = read_pattern(sc->fd, HTTP_GET_MSG, MAXLINE, rfds);
+                       if (ret < 0)
+                               phsd->status = HTTP_INVALID_GET_REQUEST;
+                       else if (ret > 0) {
+                               phsd->status = HTTP_GOT_GET_REQUEST;
+                               PARA_INFO_LOG("received get request\n");
                        }
                        break;
                case HTTP_GOT_GET_REQUEST: /* need to send ok msg */
@@ -125,9 +122,7 @@ static void http_post_select(fd_set *rfds, __a_unused fd_set *wfds)
                        break;
                }
        }
-       if (!FD_ISSET(hss->listen_fd, rfds))
-               return;
-       sc = accept_sender_client(hss);
+       sc = accept_sender_client(hss, rfds);
        if (!sc)
                return;
        phsd = para_malloc(sizeof(*phsd));
@@ -135,7 +130,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;
 
@@ -146,6 +141,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);
        }
 }