X-Git-Url: http://lists.indexdata.dk/cgi-bin?a=blobdiff_plain;f=src%2Fhttp_command.c;h=e3981b222bb97e8eea9ddfaf964e393cc9ff725e;hb=f610400c28d8cb132fa1c5a0dc5fba94d64a751a;hp=c8bf0ba9c31dd715d4c8038d15f887ccd987e64a;hpb=0818e0450b743e626ef22adb9491831d547beffa;p=pazpar2-moved-to-github.git
diff --git a/src/http_command.c b/src/http_command.c
index c8bf0ba..e3981b2 100644
--- a/src/http_command.c
+++ b/src/http_command.c
@@ -1,5 +1,5 @@
/* This file is part of Pazpar2.
- Copyright (C) 2006-2009 Index Data
+ Copyright (C) 2006-2010 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
@@ -117,6 +117,7 @@ static const char *get_msg(enum pazpar2_error_code code)
{ PAZPAR2_CONFIG_TARGET, "Target cannot be configured"},
{ PAZPAR2_RECORD_FAIL, "Record command failed"},
{ PAZPAR2_NOT_IMPLEMENTED, "Not implemented"},
+ { PAZPAR2_NO_SERVICE, "No service"},
{ PAZPAR2_LAST_ERROR, "Last error"},
{ 0, 0 }
};
@@ -279,7 +280,7 @@ static void cmd_init(struct http_channel *c)
service = locate_service(c->server, service_name);
if (!service)
{
- error(rs, PAZPAR2_MALFORMED_PARAMETER_VALUE, "service");
+ error(rs, PAZPAR2_NO_SERVICE, service_name ? service_name : "unnamed");
return;
}
service_incref(service);
@@ -379,7 +380,8 @@ static void targets_termlist(WRBUF wrbuf, struct session *se, int num,
wrbuf_xmlputs(wrbuf, ht[i].name);
wrbuf_puts(wrbuf, "\n");
- wrbuf_printf(wrbuf, "%d\n", ht[i].hits);
+ wrbuf_printf(wrbuf, "" ODR_INT_PRINTF "\n",
+ ht[i].hits);
wrbuf_puts(wrbuf, "");
wrbuf_xmlputs(wrbuf, ht[i].state);
@@ -472,6 +474,7 @@ static void cmd_bytarget(struct http_channel *c)
struct http_request *rq = c->request;
struct http_session *s = locate_session(rq, rs);
struct hitsbytarget *ht;
+ const char *settings = http_argbyname(rq, "settings");
int count, i;
if (!s)
@@ -495,15 +498,21 @@ static void cmd_bytarget(struct http_channel *c)
wrbuf_puts(c->wrbuf, "\n");
}
- wrbuf_printf(c->wrbuf, "%d\n", ht[i].hits);
+ wrbuf_printf(c->wrbuf, "" ODR_INT_PRINTF "\n", ht[i].hits);
wrbuf_printf(c->wrbuf, "%d\n", ht[i].diagnostic);
wrbuf_printf(c->wrbuf, "%d\n", ht[i].records);
wrbuf_puts(c->wrbuf, "");
wrbuf_xmlputs(c->wrbuf, ht[i].state);
wrbuf_puts(c->wrbuf, "\n");
-
+ if (settings && *settings == '1')
+ {
+ wrbuf_puts(c->wrbuf, "\n");
+ wrbuf_puts(c->wrbuf, wrbuf_cstr(ht[i].settings_xml));
+ wrbuf_puts(c->wrbuf, "\n");
+ }
wrbuf_puts(c->wrbuf, "");
+ wrbuf_destroy(ht[i].settings_xml);
}
wrbuf_puts(c->wrbuf, "");
@@ -524,8 +533,16 @@ static void write_metadata(WRBUF w, struct conf_service *service,
continue;
for (md = ml[imeta]; md; md = md->next)
{
- wrbuf_printf(w, "\n", cmd->name);
+ struct record_metadata_attr *attr = md->attributes;
+ wrbuf_printf(w, "\nname);
+ for (; attr; attr = attr->next)
+ {
+ wrbuf_printf(w, " %s=\"", attr->name);
+ wrbuf_xmlputs(w, attr->value);
+ wrbuf_puts(w, "\"");
+ }
+ wrbuf_puts(w, ">");
switch (cmd->type)
{
case Metadata_type_generic:
@@ -732,7 +749,7 @@ static void show_records(struct http_channel *c, int active)
int startn = 0;
int numn = 20;
int total;
- int total_hits;
+ Odr_int total_hits;
int i;
if (!s)
@@ -760,7 +777,7 @@ static void show_records(struct http_channel *c, int active)
wrbuf_puts(c->wrbuf, HTTP_COMMAND_RESPONSE_PREFIX "\nOK\n");
wrbuf_printf(c->wrbuf, "%d\n", active);
wrbuf_printf(c->wrbuf, "%d\n", total);
- wrbuf_printf(c->wrbuf, "%d\n", total_hits);
+ wrbuf_printf(c->wrbuf, "" ODR_INT_PRINTF "\n", total_hits);
wrbuf_printf(c->wrbuf, "%d\n", startn);
wrbuf_printf(c->wrbuf, "%d\n", numn);
@@ -870,6 +887,8 @@ static void cmd_search(struct http_channel *c)
struct http_session *s = locate_session(rq, rs);
const char *query = http_argbyname(rq, "query");
const char *filter = http_argbyname(rq, "filter");
+ const char *maxrecs = http_argbyname(rq, "maxrecs");
+ const char *startrecs = http_argbyname(rq, "startrecs");
enum pazpar2_error_code code;
const char *addinfo = 0;
@@ -885,7 +904,7 @@ static void cmd_search(struct http_channel *c)
error(rs, PAZPAR2_MALFORMED_PARAMETER_ENCODING, "query");
return;
}
- code = search(s->psession, query, filter, &addinfo);
+ code = search(s->psession, query, startrecs, maxrecs, filter, &addinfo);
if (code)
{
error(rs, code, addinfo);
@@ -919,7 +938,7 @@ static void cmd_stat(struct http_channel *c)
wrbuf_rewind(c->wrbuf);
wrbuf_puts(c->wrbuf, HTTP_COMMAND_RESPONSE_PREFIX "");
wrbuf_printf(c->wrbuf, "%d\n", clients);
- wrbuf_printf(c->wrbuf, "%d\n", stat.num_hits);
+ wrbuf_printf(c->wrbuf, "" ODR_INT_PRINTF "\n", stat.num_hits);
wrbuf_printf(c->wrbuf, "%d\n", stat.num_records);
wrbuf_printf(c->wrbuf, "%d\n", stat.num_clients);
wrbuf_printf(c->wrbuf, "%d\n", stat.num_no_connection);