-/* $Id: pazpar2.c,v 1.8 2006-12-03 06:43:24 quinn Exp $ */;
+/* $Id: pazpar2.c,v 1.11 2006-12-08 21:40:58 quinn Exp $ */;
#include <stdlib.h>
#include <stdio.h>
#include "relevance.h"
#define PAZPAR2_VERSION "0.1"
-#define MAX_CHUNK 10
+#define MAX_CHUNK 15
static void client_fatal(struct client *cl);
static void connection_destroy(struct connection *co);
static int client_prep_connection(struct client *cl);
+static void ingest_records(struct client *cl, Z_Records *r);
IOCHAN channel_list = 0; // Master list of connections we're listening to.
char **databaselist;
Z_Query *zquery;
struct ccl_rpn_node *cn;
+ int ssub = 0, lslb = 100000, mspn = 10;
yaz_log(YLOG_DEBUG, "Sending search");
for (ndb = 0; *db->databases[ndb]; ndb++)
databaselist[ndb] = db->databases[ndb];
+ a->u.presentRequest->preferredRecordSyntax =
+ yaz_oidval_to_z3950oid(global_parameters.odr_out,
+ CLASS_RECSYN, VAL_USMARC);
+ a->u.searchRequest->smallSetUpperBound = &ssub;
+ a->u.searchRequest->largeSetLowerBound = &lslb;
+ a->u.searchRequest->mediumSetPresentNumber = &mspn;
a->u.searchRequest->resultSetName = "Default";
a->u.searchRequest->databaseNames = databaselist;
a->u.searchRequest->num_databaseNames = ndb;
if (*r->searchStatus)
{
cl->hits = *r->resultCount;
- cl->state = Client_Idle;
se->total_hits += cl->hits;
+ if (r->presentStatus && !*r->presentStatus && r->records)
+ {
+ yaz_log(YLOG_DEBUG, "Records in search response");
+ cl->records += *r->numberOfRecordsReturned;
+ ingest_records(cl, r->records);
+ }
+ cl->state = Client_Idle;
}
else
{ /*"FAILED"*/
}
}
wrbuf_putc(s->wrbuf, '\0');
- obuf = nmem_strdup(s->nmem, wrbuf_buf(s->wrbuf));
+ obuf = (unsigned char*) nmem_strdup(s->nmem, wrbuf_buf(s->wrbuf));
for (p = obuf; *p; p++)
if (*p == '&' || *p == '<' || *p > 122 || *p < ' ')
*p = ' ';
- return obuf;
+ return (char*) obuf;
}
// Extract 245 $a $b 100 $a
relevance_donerecord(s->relevance, head);
}
-struct record *ingest_record(struct client *cl, char *buf, int len)
+static struct record *ingest_record(struct client *cl, char *buf, int len)
{
struct session *se = cl->session;
struct record *res;
return res;
}
-void ingest_records(struct client *cl, Z_Records *r)
+static void ingest_records(struct client *cl, Z_Records *r)
{
struct record *rec;
Z_NamePlusRecordList *rlist;
{
int ret;
char *arg;
+ int setport = 0;
if (signal(SIGPIPE, SIG_IGN) < 0)
yaz_log(YLOG_WARN|YLOG_ERRNO, "signal");
while ((ret = options("c:h:p:C:s:", argv, argc, &arg)) != -2)
{
switch (ret) {
- case 0:
- break;
case 'c':
command_init(atoi(arg));
+ setport++;
break;
- case 'C':
- global_parameters.ccl_filter = load_cclfile(arg);
- break;
case 'h':
http_init(atoi(arg));
+ setport++;
+ break;
+ case 'C':
+ global_parameters.ccl_filter = load_cclfile(arg);
break;
case 'p':
http_set_proxyaddr(arg);
load_simpletargets(arg);
break;
default:
- fprintf(stderr, "Usage: pazpar2 -d comport");
+ fprintf(stderr, "Usage: pazpar2\n"
+ " -h httpport (REST)\n"
+ " -c cmdport (telnet-style)\n"
+ " -C cclconfig\n"
+ " -s simpletargetfile\n"
+ " -p hostname[:portno] (HTTP proxy)\n");
exit(1);
}
}
+ if (!setport)
+ {
+ fprintf(stderr, "Set command port with -h or -c\n");
+ exit(1);
+ }
+
global_parameters.ccl_filter = load_cclfile("default.bib");
global_parameters.yaz_marc = yaz_marc_create();
yaz_marc_subfield_str(global_parameters.yaz_marc, "\t");