-/* $Id: http_command.c,v 1.57 2007-07-16 17:01:46 adam Exp $
+/* $Id: http_command.c,v 1.62 2007-09-10 16:25:50 adam Exp $
Copyright (c) 2006-2007, Index Data.
This file is part of Pazpar2.
*/
/*
- * $Id: http_command.c,v 1.57 2007-07-16 17:01:46 adam Exp $
+ * $Id: http_command.c,v 1.62 2007-09-10 16:25:50 adam Exp $
*/
#include <stdio.h>
}
// This implements functionality somewhat similar to 'bytarget', but in a termlist form
-static void targets_termlist(WRBUF wrbuf, struct session *se, int num)
+static void targets_termlist(WRBUF wrbuf, struct session *se, int num,
+ NMEM nmem)
{
struct hitsbytarget *ht;
int count, i;
- if (!(ht = hitsbytarget(se, &count)))
- return;
+ ht = hitsbytarget(se, &count, nmem);
qsort(ht, count, sizeof(struct hitsbytarget), cmp_ht);
for (i = 0; i < count && i < num && ht[i].hits > 0; i++)
{
wrbuf_xmlputs(c->wrbuf, tname);
wrbuf_puts(c->wrbuf, "\">\n");
if (!strcmp(tname, "xtargets"))
- targets_termlist(c->wrbuf, s->psession, num);
+ targets_termlist(c->wrbuf, s->psession, num, c->nmem);
else
{
p = termlist(s->psession, tname, &len);
if (!s)
return;
- if (!(ht = hitsbytarget(s->psession, &count)))
- {
- error(rs, PAZPAR2_HITCOUNTS_FAILED, 0);
- return;
- }
+ ht = hitsbytarget(s->psession, &count, c->nmem);
wrbuf_rewind(c->wrbuf);
wrbuf_puts(c->wrbuf, "<bytarget><status>OK</status>");
switch (cmd->type)
{
case Metadata_type_generic:
- wrbuf_xmlputs(w, md->data.text);
+ wrbuf_xmlputs(w, md->data.text.disp);
break;
case Metadata_type_year:
wrbuf_printf(w, "%d", md->data.number.min);
static void write_subrecord(struct record *r, WRBUF w,
struct conf_service *service, int show_details)
{
- char *name = session_setting_oneval(client_get_database(r->client), PZ_NAME);
+ const char *name = session_setting_oneval(
+ client_get_database(r->client), PZ_NAME);
wrbuf_puts(w, "<location id=\"");
wrbuf_xmlputs(w, client_get_database(r->client)->database->url);
client_show_raw_reset(client);
}
+static void cmd_record_ready(void *data);
+
static void cmd_record(struct http_channel *c)
{
struct http_response *rs = c->response;
wrbuf_rewind(c->wrbuf);
if (!(rec = show_single(s->psession, idstr)))
{
- error(rs, PAZPAR2_RECORD_MISSING, idstr);
+ if (session_set_watch(s->psession, SESSION_WATCH_RECORD,
+ cmd_record_ready, c, c) != 0)
+ {
+ error(rs, PAZPAR2_RECORD_MISSING, idstr);
+ }
return;
}
if (offsetstr)
}
}
+static void cmd_record_ready(void *data)
+{
+ struct http_channel *c = (struct http_channel *) data;
+
+ cmd_record(c);
+}
+
static void show_records(struct http_channel *c, int active)
{
struct http_request *rq = c->request;
if (status && (!s->psession->reclist || !s->psession->reclist->num_records))
{
// if there is already a watch/block. we do not block this one
- if (session_set_watch(s->psession,
- SESSION_WATCH_RECORDS,
- show_records_ready, c, c) == 0)
+ if (session_set_watch(s->psession, SESSION_WATCH_SHOW,
+ show_records_ready, c, c) != 0)
{
yaz_log(YLOG_DEBUG, "Blocking on cmd_show");
- return;
}
+ return;
}
}