/*
- * $Id: http_command.c,v 1.23 2007-01-17 14:21:29 quinn Exp $
+ * $Id: http_command.c,v 1.29 2007-03-28 12:05:18 marc Exp $
*/
#include <stdio.h>
r->timestamp = 0;
r->next = session_list;
session_list = r;
- r->timeout_iochan = iochan_create(-1, session_timeout, 0);
+ r->timeout_iochan = iochan_create(-1, 0, session_timeout, 0);
iochan_setdata(r->timeout_iochan, r);
iochan_settimeout(r->timeout_iochan, global_parameters.session_timeout);
r->timeout_iochan->next = channel_list;
if (!(ht = hitsbytarget(se, &count)))
return;
qsort(ht, count, sizeof(struct hitsbytarget), cmp_ht);
- for (i = 0; i < count && i < num; i++)
+ for (i = 0; i < count && i < num && ht[i].hits > 0; i++)
{
wrbuf_puts(wrbuf, "\n<term>\n");
- wrbuf_printf(wrbuf, "<name>%s</name>\n", ht[i].id);
+ wrbuf_printf(wrbuf, "<id>%s</id>\n", ht[i].id);
+ wrbuf_printf(wrbuf, "<name>%s</name>\n", ht[i].name);
wrbuf_printf(wrbuf, "<frequency>%d</frequency>\n", ht[i].hits);
wrbuf_printf(wrbuf, "<state>%s</state>\n", ht[i].state);
wrbuf_printf(wrbuf, "<diagnostic>%d</diagnostic>\n", ht[i].diagnostic);
name++;
}
wrbuf_puts(c->wrbuf, "</termlist>");
- rs->payload = nmem_strdup(rq->channel->nmem, wrbuf_buf(c->wrbuf));
+ rs->payload = nmem_strdup(rq->channel->nmem, wrbuf_cstr(c->wrbuf));
http_send_response(c);
}
}
wrbuf_puts(c->wrbuf, "</bytarget>");
- rs->payload = nmem_strdup(c->nmem, wrbuf_buf(c->wrbuf));
+ rs->payload = nmem_strdup(c->nmem, wrbuf_cstr(c->wrbuf));
http_send_response(c);
}
}
}
+static void write_subrecord(struct record *r, WRBUF w, struct conf_service *service)
+{
+ wrbuf_printf(w, "<location id=\"%s\" name=\"%s\">\n",
+ r->client->database->url,
+ r->client->database->name ? r->client->database->name : "");
+ write_metadata(w, service, r->metadata, 1);
+ wrbuf_puts(w, "</location>\n");
+}
+
static void cmd_record(struct http_channel *c)
{
struct http_response *rs = c->response;
struct http_request *rq = c->request;
struct http_session *s = locate_session(rq, rs);
struct record_cluster *rec;
+ struct record *r;
struct conf_service *service = global_parameters.server->service;
char *idstr = http_argbyname(rq, "id");
int id;
wrbuf_puts(c->wrbuf, "<record>\n");
wrbuf_printf(c->wrbuf, "<recid>%d</recid>", rec->recid);
write_metadata(c->wrbuf, service, rec->metadata, 1);
+ for (r = rec->records; r; r = r->next)
+ write_subrecord(r, c->wrbuf, service);
wrbuf_puts(c->wrbuf, "</record>\n");
- rs->payload = nmem_strdup(c->nmem, wrbuf_buf(c->wrbuf));
+ rs->payload = nmem_strdup(c->nmem, wrbuf_cstr(c->wrbuf));
http_send_response(c);
}
}
wrbuf_puts(c->wrbuf, "</show>\n");
- rs->payload = nmem_strdup(c->nmem, wrbuf_buf(c->wrbuf));
+ rs->payload = nmem_strdup(c->nmem, wrbuf_cstr(c->wrbuf));
http_send_response(c);
}
struct http_response *rs = c->response;
struct http_session *s = locate_session(rq, rs);
char *query = http_argbyname(rq, "query");
+ char *filter = http_argbyname(rq, "filter");
char *res;
if (!s)
error(rs, "417", "Must supply query", 0);
return;
}
- res = search(s->psession, query);
+ res = search(s->psession, query, filter);
if (res)
{
error(rs, "417", res, res);
wrbuf_printf(c->wrbuf, "<failed>%d</failed>\n", stat.num_failed);
wrbuf_printf(c->wrbuf, "<error>%d</error>\n", stat.num_error);
wrbuf_puts(c->wrbuf, "</stat>");
- rs->payload = nmem_strdup(c->nmem, wrbuf_buf(c->wrbuf));
+ rs->payload = nmem_strdup(c->nmem, wrbuf_cstr(c->wrbuf));
http_send_response(c);
}
wrbuf_printf(c->wrbuf, " </version>\n");
wrbuf_puts(c->wrbuf, "</info>");
- rs->payload = nmem_strdup(c->nmem, wrbuf_buf(c->wrbuf));
+ rs->payload = nmem_strdup(c->nmem, wrbuf_cstr(c->wrbuf));
http_send_response(c);
}