X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fhttp.c;h=1bbd4a1803b060ea42a989f067adacea8a97d90f;hb=0d45377ca625dc66907c18bb3f524f9d6c354236;hp=8dc082d7699039a33b9b5ed6b37a2ca07a3a9a3a;hpb=f16d5009ed4f2f477af912be382962d3c4dbc7b0;p=pazpar2-moved-to-github.git diff --git a/src/http.c b/src/http.c index 8dc082d..1bbd4a1 100644 --- a/src/http.c +++ b/src/http.c @@ -1,5 +1,5 @@ /* This file is part of Pazpar2. - Copyright (C) 2006-2013 Index Data + Copyright (C) Index Data Pazpar2 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free @@ -655,6 +655,7 @@ static struct http_buf *http_serialize_response(struct http_channel *c, FILE *lf = yaz_log_file(); yaz_log(YLOG_LOG, "Response:"); fwrite(wrbuf_buf(c->wrbuf), 1, wrbuf_len(c->wrbuf), lf); + fputc('\n', lf); } return http_buf_bywrbuf(c->http_server, c->wrbuf); } @@ -839,6 +840,16 @@ void http_send_response(struct http_channel *ch) struct http_response *rs = ch->response; struct http_buf *hb; + yaz_timing_stop(ch->yt); + if (ch->request) + { + yaz_log(YLOG_LOG, "Response: %6.5f %d %s%s%s ", + yaz_timing_get_real(ch->yt), + iochan_getfd(ch->iochan), + ch->request->path, + *ch->request->search ? "?" : "", + ch->request->search); + } assert(rs); hb = http_serialize_response(ch, rs); if (!hb) @@ -934,6 +945,7 @@ static void http_io(IOCHAN i, int event) fflush(hc->http_server->record_file); } #endif + yaz_timing_start(hc->yt); if (!(hc->request = http_parse_request(hc, &hc->iqueue, reqlen))) { yaz_log(YLOG_WARN, "Failed to parse request"); @@ -941,7 +953,9 @@ static void http_io(IOCHAN i, int event) return; } hc->response = 0; - yaz_log(YLOG_LOG, "Request: %s %s%s%s", hc->request->method, + yaz_log(YLOG_LOG, "Request: - %d %s %s%s%s", + iochan_getfd(i), + hc->request->method, hc->request->path, *hc->request->search ? "?" : "", hc->request->search); @@ -1121,6 +1135,7 @@ static void http_channel_destroy(IOCHAN i) http_buf_destroy_queue(s->http_server, s->proxy->oqueue); xfree(s->proxy); } + yaz_timing_destroy(&s->yt); http_buf_destroy_queue(s->http_server, s->iqueue); http_buf_destroy_queue(s->http_server, s->oqueue); http_fire_observers(s); @@ -1168,6 +1183,7 @@ static struct http_channel *http_channel_create(http_server_t hs, } strcpy(r->addr, addr); r->observers = 0; + r->yt = yaz_timing_create(); return r; } @@ -1267,7 +1283,7 @@ int http_init(struct conf_server *server, const char *record_fname) if (s == -1) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "socket"); - freeaddrinfo(ai); + freeaddrinfo(af); return 1; } if (ipv6_only >= 0 && ai->ai_family == AF_INET6 && @@ -1275,7 +1291,7 @@ int http_init(struct conf_server *server, const char *record_fname) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "setsockopt IPV6_V6ONLY %s:%s %d", server->host, server->port, ipv6_only); - freeaddrinfo(ai); + freeaddrinfo(af); CLOSESOCKET(s); return 1; } @@ -1283,7 +1299,7 @@ int http_init(struct conf_server *server, const char *record_fname) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "setsockopt SO_REUSEADDR %s:%s", server->host, server->port); - freeaddrinfo(ai); + freeaddrinfo(af); CLOSESOCKET(s); return 1; } @@ -1291,11 +1307,11 @@ int http_init(struct conf_server *server, const char *record_fname) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "bind %s:%s", server->host, server->port); - freeaddrinfo(ai); + freeaddrinfo(af); CLOSESOCKET(s); return 1; } - freeaddrinfo(ai); + freeaddrinfo(af); if (listen(s, SOMAXCONN) < 0) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "listen %s:%s",