/* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2009 Index Data
+ * Copyright (C) 1995-2010 Index Data
* See the file LICENSE for details.
*/
/**
#include <yaz/srw.h>
#include <yaz/matchstr.h>
#include <yaz/yaz-iconv.h>
+#include "sru-p.h"
-/** \brief decodes HTTP path (which should hold SRU database)
- \param n memory for returned result
- \param uri URI path (up to but not including ?)
- \param len URI len (up to but not including ?)
- \returns ODR allocated database
-*/
static char *yaz_decode_sru_dbpath_odr(ODR n, const char *uri, size_t len)
{
- char *ret = odr_malloc(n, strlen(uri) + 1);
- yaz_decode_uri_component(ret, uri, len);
- return ret;
+ return odr_strdupn(n, uri, len);
}
void yaz_encode_sru_dbpath_buf(char *dst, const char *db)
{
assert(db);
*dst = '/';
- yaz_encode_uri_component(dst+1, db);
+ strcpy(dst+1, db);
}
char *yaz_encode_sru_dbpath_odr(ODR out, const char *db)
#endif
/**
- http://www.loc.gov/z3950/agency/zing/srw/service.html
+ http://www.loc.gov/z3950/agency/zing/srw/service.html
*/
int yaz_sru_decode(Z_HTTP_Request *hreq, Z_SRW_PDU **srw_pdu,
Z_SOAP **soap_package, ODR decode, char **charset,
};
#endif
const char *content_type = z_HTTP_header_lookup(hreq->headers,
- "Content-Type");
+ "Content-Type");
/*
SRU GET: ignore content type.
*/
if (!strcmp(hreq->method, "GET")
||
- (!strcmp(hreq->method, "POST") && content_type &&
- !yaz_strcmp_del("application/x-www-form-urlencoded",
- content_type, "; ")))
+ (!strcmp(hreq->method, "POST") && content_type &&
+ !yaz_strcmp_del("application/x-www-form-urlencoded",
+ content_type, "; ")))
{
char *db = "Default";
const char *p0 = hreq->path, *p1;
sr->u.request->database = 0;
sr->u.request->resultSetTTL = 0;
sr->u.request->stylesheet = 0;
+ sr->u.request->facetList = 0;
break;
case Z_SRW_searchRetrieve_response:
sr->u.response = (Z_SRW_searchRetrieveResponse *)
sr->u.response->num_diagnostics = 0;
sr->u.response->nextRecordPosition = 0;
sr->u.response->extra_records = 0;
+ sr->u.response->facetList = 0;
break;
case Z_SRW_explain_request:
sr->u.explain_request = (Z_SRW_explainRequest *)
return 1;
}
-static void add_val_int(ODR o, char **name, char **value, int *i,
- char *a_name, Odr_int *val)
+void yaz_add_name_value_int(ODR o, char **name, char **value, int *i,
+ char *a_name, Odr_int *val)
{
if (val)
{
}
}
-static void add_val_str(ODR o, char **name, char **value, int *i,
- char *a_name, char *val)
+void yaz_add_name_value_str(ODR o, char **name, char **value, int *i,
+ char *a_name, char *val)
{
if (val)
{
char **name, char **value, int max_names)
{
int i = 0;
- add_val_str(encode, name, value, &i, "version", srw_pdu->srw_version);
+ yaz_add_name_value_str(encode, name, value, &i, "version", srw_pdu->srw_version);
name[i] = "operation";
switch(srw_pdu->which)
{
switch(srw_pdu->u.request->query_type)
{
case Z_SRW_query_type_cql:
- add_val_str(encode, name, value, &i, "query",
- srw_pdu->u.request->query.cql);
+ yaz_add_name_value_str(encode, name, value, &i, "query",
+ srw_pdu->u.request->query.cql);
break;
case Z_SRW_query_type_pqf:
- add_val_str(encode, name, value, &i, "x-pquery",
- srw_pdu->u.request->query.pqf);
+ yaz_add_name_value_str(encode, name, value, &i, "x-pquery",
+ srw_pdu->u.request->query.pqf);
break;
case Z_SRW_query_type_xcql:
- add_val_str(encode, name, value, &i, "x-cql",
- srw_pdu->u.request->query.xcql);
+ yaz_add_name_value_str(encode, name, value, &i, "x-cql",
+ srw_pdu->u.request->query.xcql);
break;
}
switch(srw_pdu->u.request->sort_type)
case Z_SRW_sort_type_none:
break;
case Z_SRW_sort_type_sort:
- add_val_str(encode, name, value, &i, "sortKeys",
- srw_pdu->u.request->sort.sortKeys);
+ yaz_add_name_value_str(encode, name, value, &i, "sortKeys",
+ srw_pdu->u.request->sort.sortKeys);
break;
}
- add_val_int(encode, name, value, &i, "startRecord",
- srw_pdu->u.request->startRecord);
- add_val_int(encode, name, value, &i, "maximumRecords",
- srw_pdu->u.request->maximumRecords);
- add_val_str(encode, name, value, &i, "recordSchema",
- srw_pdu->u.request->recordSchema);
- add_val_str(encode, name, value, &i, "recordPacking",
- srw_pdu->u.request->recordPacking);
- add_val_str(encode, name, value, &i, "recordXPath",
- srw_pdu->u.request->recordXPath);
- add_val_str(encode, name, value, &i, "stylesheet",
- srw_pdu->u.request->stylesheet);
- add_val_int(encode, name, value, &i, "resultSetTTL",
- srw_pdu->u.request->resultSetTTL);
+ yaz_add_name_value_int(encode, name, value, &i, "startRecord",
+ srw_pdu->u.request->startRecord);
+ yaz_add_name_value_int(encode, name, value, &i, "maximumRecords",
+ srw_pdu->u.request->maximumRecords);
+ yaz_add_name_value_str(encode, name, value, &i, "recordSchema",
+ srw_pdu->u.request->recordSchema);
+ yaz_add_name_value_str(encode, name, value, &i, "recordPacking",
+ srw_pdu->u.request->recordPacking);
+ yaz_add_name_value_str(encode, name, value, &i, "recordXPath",
+ srw_pdu->u.request->recordXPath);
+ yaz_add_name_value_str(encode, name, value, &i, "stylesheet",
+ srw_pdu->u.request->stylesheet);
+ yaz_add_name_value_int(encode, name, value, &i, "resultSetTTL",
+ srw_pdu->u.request->resultSetTTL);
break;
case Z_SRW_explain_request:
value[i++] = "explain";
- add_val_str(encode, name, value, &i, "stylesheet",
- srw_pdu->u.explain_request->stylesheet);
+ yaz_add_name_value_str(encode, name, value, &i, "stylesheet",
+ srw_pdu->u.explain_request->stylesheet);
break;
case Z_SRW_scan_request:
value[i++] = "scan";
switch(srw_pdu->u.scan_request->query_type)
{
case Z_SRW_query_type_cql:
- add_val_str(encode, name, value, &i, "scanClause",
- srw_pdu->u.scan_request->scanClause.cql);
+ yaz_add_name_value_str(encode, name, value, &i, "scanClause",
+ srw_pdu->u.scan_request->scanClause.cql);
break;
case Z_SRW_query_type_pqf:
- add_val_str(encode, name, value, &i, "x-pScanClause",
- srw_pdu->u.scan_request->scanClause.pqf);
+ yaz_add_name_value_str(encode, name, value, &i, "x-pScanClause",
+ srw_pdu->u.scan_request->scanClause.pqf);
break;
case Z_SRW_query_type_xcql:
- add_val_str(encode, name, value, &i, "x-cqlScanClause",
- srw_pdu->u.scan_request->scanClause.xcql);
+ yaz_add_name_value_str(encode, name, value, &i, "x-cqlScanClause",
+ srw_pdu->u.scan_request->scanClause.xcql);
break;
}
- add_val_int(encode, name, value, &i, "responsePosition",
- srw_pdu->u.scan_request->responsePosition);
- add_val_int(encode, name, value, &i, "maximumTerms",
- srw_pdu->u.scan_request->maximumTerms);
- add_val_str(encode, name, value, &i, "stylesheet",
- srw_pdu->u.scan_request->stylesheet);
+ yaz_add_name_value_int(encode, name, value, &i, "responsePosition",
+ srw_pdu->u.scan_request->responsePosition);
+ yaz_add_name_value_int(encode, name, value, &i, "maximumTerms",
+ srw_pdu->u.scan_request->maximumTerms);
+ yaz_add_name_value_str(encode, name, value, &i, "stylesheet",
+ srw_pdu->u.scan_request->stylesheet);
break;
case Z_SRW_update_request:
value[i++] = "update";