X-Git-Url: http://lists.indexdata.dk/cgi-bin?a=blobdiff_plain;f=src%2Fhttp.c;h=5f5534d7b484444790ae18aa0606e0d106d61d72;hb=HEAD;hp=e2d9f7ba3c0c7f011b9e44340e05fb7d8e6f7d9e;hpb=4ae1e0582f66acaec33dca2c3b023d47d7f431af;p=pazpar2-moved-to-github.git diff --git a/src/http.c b/src/http.c index e2d9f7b..5f5534d 100644 --- a/src/http.c +++ b/src/http.c @@ -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; }