Happy new year
[pazpar2-moved-to-github.git] / src / http.c
index e2d9f7b..5f5534d 100644 (file)
@@ -796,11 +796,15 @@ static int http_proxy(struct http_request *rq)
         p->channel = c;
         p->first_response = 1;
         c->proxy = p;
-        // We will add EVENT_OUTPUT below
         p->iochan = iochan_create(sock, proxy_io, EVENT_INPUT, "http_proxy");
         iochan_setdata(p->iochan, p);
 
-        iochan_add(ser->iochan_man, p->iochan);
+        if (iochan_add(ser->iochan_man, p->iochan, 5))
+        {
+            iochan_destroy(p->iochan);
+            xfree(p);
+            return -1;
+        }
     }
 
     // Do _not_ modify Host: header, just checking it's existence
@@ -1001,7 +1005,6 @@ static void http_io(IOCHAN i, int event)
                                 (long long) iochan_getfd(i), sz);
                         fwrite(wb->buf, 1, wb->offset + wb->len,
                                hc->http_server->record_file);
-                        fputc('\n', hc->http_server->record_file);
                         fflush(hc->http_server->record_file);
                     }
  #endif
@@ -1220,11 +1223,14 @@ static void http_accept(IOCHAN i, int event)
     c = iochan_create(s, http_io, EVENT_INPUT | EVENT_EXCEPT,
                       "http_session_socket");
 
-
     ch = http_channel_create(server->http_server, host, server);
     ch->iochan = c;
     iochan_setdata(c, ch);
-    iochan_add(server->iochan_man, c);
+    if (iochan_add(server->iochan_man, c, 0))
+    {
+        yaz_log(YLOG_WARN, "Refusing incoming HTTP connection");
+        http_channel_destroy(c);
+    }
 }
 
 /* Create a http-channel listener, syntax [host:]port */
@@ -1332,15 +1338,20 @@ int http_init(struct conf_server *server, const char *record_fname)
             return 1;
         }
     }
-    server->http_server = http_server_create();
 
+    c = iochan_create(s, http_accept, EVENT_INPUT|EVENT_EXCEPT, "http_server");
+    if (iochan_add(server->iochan_man, c, 0))
+    {
+        yaz_log(YLOG_WARN, "Can not create HTTP binding socket");
+        iochan_destroy(c);
+        return -1;
+    }
+
+    server->http_server = http_server_create();
     server->http_server->record_file = record_file;
     server->http_server->listener_socket = s;
-
-    c = iochan_create(s, http_accept, EVENT_INPUT | EVENT_EXCEPT, "http_server");
     iochan_setdata(c, server);
 
-    iochan_add(server->iochan_man, c);
     return 0;
 }