log level for http is http (not HTTP)
[pazpar2-moved-to-github.git] / src / http_command.c
index f4cc792..f109e16 100644 (file)
@@ -126,7 +126,7 @@ http_sessions_t http_sessions_create(void)
     hs->session_list = 0;
     hs->mutex = 0;
     pazpar2_mutex_create(&hs->mutex, "http_sessions");
-    hs->log_level = yaz_log_module_level("HTTP");
+    hs->log_level = yaz_log_module_level("http");
     return hs;
 }
 
@@ -401,6 +401,7 @@ static int process_settings(struct session *se, struct http_request *rq,
                             struct http_response *rs)
 {
     struct http_argument *a;
+    NMEM nmem = nmem_create();
 
     for (a = rq->arguments; a; a = a->next)
         if (strchr(a->name, '['))
@@ -411,17 +412,18 @@ static int process_settings(struct session *se, struct http_request *rq,
             char *setting;
 
             // Nmem_strsplit *rules*!!!
-            nmem_strsplit(se->session_nmem, "[]", a->name, &res, &num);
+            nmem_strsplit(nmem, "[]", a->name, &res, &num);
             if (num != 2)
             {
                 error(rs, PAZPAR2_MALFORMED_SETTING, a->name);
+                nmem_destroy(nmem);
                 return -1;
             }
             setting = res[0];
             dbname = res[1];
-            session_apply_setting(se, dbname, setting,
-                    nmem_strdup(se->session_nmem, a->value));
+            session_apply_setting(se, dbname, setting, a->value);
         }
+    nmem_destroy(nmem);
     return 0;
 }
 
@@ -507,9 +509,7 @@ static void apply_local_setting(void *client_data,
 {
     struct session *se =  (struct session *) client_data;
 
-    session_apply_setting(se, nmem_strdup(se->session_nmem, set->target),
-                          nmem_strdup(se->session_nmem, set->name),
-                          nmem_strdup(se->session_nmem, set->value));
+    session_apply_setting(se, set->target, set->name, set->value);
 }
 
 static void cmd_settings(struct http_channel *c)
@@ -809,6 +809,15 @@ static void bytarget_response(struct http_channel *c, struct http_session *s,
             wrbuf_puts(c->wrbuf, ht[i].suggestions_xml);
             wrbuf_puts(c->wrbuf, "</suggestions>");
         }
+        if (ht[i].query_data)
+        {
+            wrbuf_puts(c->wrbuf, "<query_type>");
+            wrbuf_xmlputs(c->wrbuf, ht[i].query_type);
+            wrbuf_puts(c->wrbuf, "</query_type>\n");
+            wrbuf_puts(c->wrbuf, "<query_data>");
+            wrbuf_xmlputs(c->wrbuf, ht[i].query_data);
+            wrbuf_puts(c->wrbuf, "</query_data>\n");
+        }
         wrbuf_puts(c->wrbuf, "</target>");
     }
     response_close(c, "bytarget");
@@ -1457,6 +1466,17 @@ static void cmd_stat(struct http_channel *c)
     release_session(c, s);
 }
 
+static void cmd_stop(struct http_channel *c)
+{
+    struct http_session *s = locate_session(c);
+    if (!s)
+        return;
+    response_open_ok(c, "stop");
+    session_stop(s->psession);
+    response_close(c, "stop");
+    release_session(c, s);
+}
+
 static void cmd_info(struct http_channel *c)
 {
     char yaz_version_str[20];
@@ -1516,6 +1536,7 @@ struct {
     { "ping", cmd_ping },
     { "record", cmd_record },
     { "info", cmd_info },
+    { "stop", cmd_stop },
     {0,0}
 };