Add \n after dump of HTTP response
[pazpar2-moved-to-github.git] / src / http.c
index 6748bbe..1bbd4a1 100644 (file)
@@ -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;
 }
 
@@ -1176,21 +1192,21 @@ static struct http_channel *http_channel_create(http_server_t hs,
 static void http_accept(IOCHAN i, int event)
 {
     char host[256];
-    struct sockaddr addr;
+    struct sockaddr_storage addr;
     int fd = iochan_getfd(i);
-    socklen_t len;
+    socklen_t len = sizeof addr;
     int s;
     IOCHAN c;
     struct http_channel *ch;
     struct conf_server *server = iochan_getdata(i);
 
-    len = sizeof addr;
-    if ((s = accept(fd, &addr, &len)) < 0)
+    if ((s = accept(fd, (struct sockaddr *) &addr, &len)) < 0)
     {
         yaz_log(YLOG_WARN|YLOG_ERRNO, "accept");
         return;
     }
-    if (getnameinfo(&addr, len, host, sizeof(host)-1, 0, 0, NI_NUMERICHOST))
+    if (getnameinfo((struct sockaddr *) &addr, len, host, sizeof(host)-1, 0, 0,
+        NI_NUMERICHOST))
     {
         yaz_log(YLOG_WARN|YLOG_ERRNO, "getnameinfo");
         CLOSESOCKET(s);
@@ -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",