Avoid declarations after statements
[pazpar2-moved-to-github.git] / src / http.c
index 48a2643..e125b44 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: http.c,v 1.2 2006-12-20 23:31:24 adam Exp $
+ * $Id: http.c,v 1.7 2007-01-10 09:35:57 adam Exp $
  */
 
 #include <stdio.h>
 #include <errno.h>
 #include <assert.h>
 
+#if HAVE_CONFIG_H
+#include <cconfig.h>
+#endif
+
 #include <yaz/yaz-util.h>
 #include <yaz/comstack.h>
 #include <netdb.h>
 
-#include "command.h"
 #include "util.h"
 #include "eventl.h"
 #include "pazpar2.h"
@@ -89,10 +92,10 @@ static struct http_buf *http_buf_bybuf(char *b, int len)
 
     while (len)
     {
-        *p = http_buf_create();
         int tocopy = len;
         if (tocopy > HTTP_BUF_SIZE)
             tocopy = HTTP_BUF_SIZE;
+        *p = http_buf_create();
         memcpy((*p)->buf, b, tocopy);
         (*p)->len = tocopy;
         len -= tocopy;
@@ -263,6 +266,7 @@ struct http_request *http_parse_request(struct http_channel *c, struct http_buf
     if (http_buf_read(queue, buf, len) < len)
         return 0;
 
+    r->search = "";
     r->channel = c;
     r->arguments = 0;
     r->headers = 0;
@@ -293,6 +297,7 @@ struct http_request *http_parse_request(struct http_channel *c, struct http_buf
     r->path = nmem_strdup(c->nmem, buf);
     if (p2)
     {
+        r->search = nmem_strdup(c->nmem, p2);
         // Parse Arguments
         while (*p2)
         {
@@ -370,9 +375,9 @@ struct http_request *http_parse_request(struct http_channel *c, struct http_buf
 static struct http_buf *http_serialize_response(struct http_channel *c,
         struct http_response *r)
 {
-    wrbuf_rewind(c->wrbuf);
     struct http_header *h;
 
+    wrbuf_rewind(c->wrbuf);
     wrbuf_printf(c->wrbuf, "HTTP/1.1 %s %s\r\n", r->code, r->msg);
     for (h = r->headers; h; h = h->next)
         wrbuf_printf(c->wrbuf, "%s: %s\r\n", h->name, h->value);
@@ -390,10 +395,10 @@ static struct http_buf *http_serialize_response(struct http_channel *c,
 static struct http_buf *http_serialize_request(struct http_request *r)
 {
     struct http_channel *c = r->channel;
-    wrbuf_rewind(c->wrbuf);
     struct http_header *h;
     struct http_argument *a;
 
+    wrbuf_rewind(c->wrbuf);
     wrbuf_printf(c->wrbuf, "%s %s", r->method, r->path);
 
     if (r->arguments)
@@ -490,8 +495,10 @@ static int http_proxy(struct http_request *rq)
 void http_send_response(struct http_channel *ch)
 {
     struct http_response *rs = ch->response;
+    struct http_buf *hb;
+
     assert(rs);
-    struct http_buf *hb = http_serialize_response(ch, rs);
+    hb = http_serialize_response(ch, rs);
     if (!hb)
     {
         yaz_log(YLOG_WARN, "Failed to serialize HTTP response");
@@ -548,8 +555,10 @@ static void http_io(IOCHAN i, int event)
                 return;
             }
             hc->response = 0;
-            yaz_log(YLOG_LOG, "Request: %s %s v %s", hc->request->method,
-                    hc->request->path, hc->request->http_version);
+            yaz_log(YLOG_LOG, "Request: %s %s%s%s", hc->request->method,
+                    hc->request->path,
+                    *hc->request->search ? "?" : "",
+                    hc->request->search);
             if (http_weshouldproxy(hc->request))
                 http_proxy(hc->request);
             else
@@ -754,7 +763,7 @@ static void http_accept(IOCHAN i, int event)
     if (fcntl(s, F_SETFL, flags | O_NONBLOCK) < 0)
         yaz_log(YLOG_FATAL|YLOG_ERRNO, "fcntl2");
 
-    yaz_log(YLOG_LOG, "New command connection");
+    yaz_log(YLOG_DEBUG, "New command connection");
     c = iochan_create(s, http_io, EVENT_INPUT | EVENT_EXCEPT);
 
     ch = http_create();