projects
/
pazpar2-moved-to-github.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
pzHttpRequest: escape() used instead of encodeURI() for GET parameter values.
[pazpar2-moved-to-github.git]
/
src
/
http_command.c
diff --git
a/src/http_command.c
b/src/http_command.c
index
087f53d
..
052f025
100644
(file)
--- a/
src/http_command.c
+++ b/
src/http_command.c
@@
-1,4
+1,4
@@
-/* $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.
Copyright (c) 2006-2007, Index Data.
This file is part of Pazpar2.
@@
-20,7
+20,7
@@
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
*/
/*
*/
/*
- * $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>
*/
#include <stdio.h>
@@
-286,13
+286,13
@@
static int cmp_ht(const void *p1, const void *p2)
}
// This implements functionality somewhat similar to 'bytarget', but in a termlist form
}
// 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;
{
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++)
{
qsort(ht, count, sizeof(struct hitsbytarget), cmp_ht);
for (i = 0; i < count && i < num && ht[i].hits > 0; i++)
{
@@
-367,7
+367,7
@@
static void cmd_termlist(struct http_channel *c)
wrbuf_xmlputs(c->wrbuf, tname);
wrbuf_puts(c->wrbuf, "\">\n");
if (!strcmp(tname, "xtargets"))
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);
else
{
p = termlist(s->psession, tname, &len);
@@
-409,11
+409,7
@@
static void cmd_bytarget(struct http_channel *c)
if (!s)
return;
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>");
wrbuf_rewind(c->wrbuf);
wrbuf_puts(c->wrbuf, "<bytarget><status>OK</status>");
@@
-459,7
+455,7
@@
static void write_metadata(WRBUF w, struct conf_service *service,
switch (cmd->type)
{
case Metadata_type_generic:
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);
break;
case Metadata_type_year:
wrbuf_printf(w, "%d", md->data.number.min);
@@
-477,7
+473,8
@@
static void write_metadata(WRBUF w, struct conf_service *service,
static void write_subrecord(struct record *r, WRBUF w,
struct conf_service *service, int show_details)
{
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);
wrbuf_puts(w, "<location id=\"");
wrbuf_xmlputs(w, client_get_database(r->client)->database->url);
@@
-522,6
+519,8
@@
void show_raw_reset(void *data, struct http_channel *c)
client_show_raw_reset(client);
}
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;
static void cmd_record(struct http_channel *c)
{
struct http_response *rs = c->response;
@@
-543,7
+542,11
@@
static void cmd_record(struct http_channel *c)
wrbuf_rewind(c->wrbuf);
if (!(rec = show_single(s->psession, idstr)))
{
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)
return;
}
if (offsetstr)
@@
-589,6
+592,13
@@
static void cmd_record(struct http_channel *c)
}
}
}
}
+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;
static void show_records(struct http_channel *c, int active)
{
struct http_request *rq = c->request;
@@
-681,13
+691,12
@@
static void cmd_show(struct http_channel *c)
if (status && (!s->psession->reclist || !s->psession->reclist->num_records))
{
// if there is already a watch/block. we do not block this one
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");
{
yaz_log(YLOG_DEBUG, "Blocking on cmd_show");
- return;
}
}
+ return;
}
}
}
}