Returns service XML now
[pazpar2-moved-to-github.git] / src / http_command.c
index cbe09aa..cdb7712 100644 (file)
@@ -648,6 +648,30 @@ static void session_status(struct http_channel *c, struct http_session *s)
     wrbuf_printf(c->wrbuf, "<session_nmem>%zu</session_nmem>\n", session_nmem);
 }
 
+static void cmd_service(struct http_channel *c)
+{
+    struct http_session *s = locate_session(c);
+    xmlNode *xml_node;
+    if (!s)
+        return;
+
+    response_open(c, "service");
+    xml_node = s->psession->service->xml_node;
+    if (xml_node)
+    {
+        xmlNode *tmp = xmlCopyNode(xml_node, 1);
+        xmlBufferPtr buf = xmlBufferCreate();
+
+        xmlNodeDump(buf, tmp->doc, tmp, 0, 0);
+
+        wrbuf_write(c->wrbuf, (const char *) buf->content, buf->use);
+        xmlBufferFree(buf);
+    }
+
+    response_close(c, "service");
+    release_session(c, s);
+}
+
 static void cmd_session_status(struct http_channel *c)
 {
     struct http_session *s = locate_session(c);
@@ -1009,7 +1033,7 @@ static void show_record(struct http_channel *c, struct http_session *s)
 
         if (checksumstr)
         {
-            long v = atol(checksumstr);
+            unsigned v = strtoul(checksumstr, 0, 10);
             for (i = 0; r; r = r->next)
                 if (v == r->checksum)
                     break;
@@ -1211,6 +1235,8 @@ static void cmd_show(struct http_channel *c)
     const char *block = http_argbyname(rq, "block");
     const char *sort = http_argbyname(rq, "sort");
     const char *block_error = http_argbyname(rq, "report");
+    const char *mergekey = http_argbyname(rq, "mergekey");
+    const char *rank = http_argbyname(rq, "rank");
     struct conf_service *service = 0;
 
     struct reclist_sortparms *sp;
@@ -1233,7 +1259,7 @@ static void cmd_show(struct http_channel *c)
         release_session(c, s);
         return;
     }
-    session_sort(s->psession, sp);
+    session_sort(s->psession, sp, mergekey, rank);
 
     status = session_active_clients(s->psession);
 
@@ -1321,6 +1347,8 @@ static void cmd_search(struct http_channel *c)
     const char *startrecs = http_argbyname(rq, "startrecs");
     const char *limit = http_argbyname(rq, "limit");
     const char *sort = http_argbyname(rq, "sort");
+    const char *mergekey = http_argbyname(rq, "mergekey");
+    const char *rank = http_argbyname(rq, "rank");
     enum pazpar2_error_code code;
     const char *addinfo = 0;
     struct reclist_sortparms *sp;
@@ -1353,7 +1381,7 @@ static void cmd_search(struct http_channel *c)
     }
 
     code = session_search(s->psession, query, startrecs, maxrecs, filter, limit,
-                          &addinfo, sp);
+                          &addinfo, sp, mergekey, rank);
     if (code)
     {
         error(rs, code, addinfo);
@@ -1456,6 +1484,7 @@ struct {
     { "exit", cmd_exit },
     { "session-status", cmd_session_status },
     { "server-status", cmd_server_status },
+    { "service", cmd_service },
     { "ping", cmd_ping },
     { "record", cmd_record },
     { "info", cmd_info },