X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Fsrwutil.c;h=fc060e378e9af73e0cfe8056e769ae01a239fb9e;hb=4c176312acdc3444c9afc820f76a393e64668e52;hp=6976bfc6b7b8b34475d25fb13649a9ae5502a98c;hpb=6a07d35e5125e4a07ffcc75cfbd63052790b4605;p=yaz-moved-to-github.git diff --git a/src/srwutil.c b/src/srwutil.c index 6976bfc..fc060e3 100644 --- a/src/srwutil.c +++ b/src/srwutil.c @@ -1,8 +1,8 @@ /* - * Copyright (c) 2002-2004, Index Data. + * Copyright (C) 1995-2005, Index Data ApS * See the file LICENSE for details. * - * $Id: srwutil.c,v 1.19 2004-11-21 21:56:28 adam Exp $ + * $Id: srwutil.c,v 1.23 2005-01-15 19:47:14 adam Exp $ */ /** * \file srwutil.c @@ -234,6 +234,9 @@ int yaz_srw_decode(Z_HTTP_Request *hreq, Z_SRW_PDU **srw_pdu, return 2; } +/** + 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, Z_SRW_diagnostic **diag, int *num_diag) @@ -256,11 +259,15 @@ int yaz_sru_decode(Z_HTTP_Request *hreq, Z_SRW_PDU **srw_pdu, char *sortKeys = 0; char *stylesheet = 0; char *scanClause = 0; + char *pScanClause = 0; char *recordXPath = 0; char *recordSchema = 0; char *recordPacking = "xml"; /* xml packing is default for SRU */ char *maximumRecords = 0; char *startRecord = 0; + char *maximumTerms = 0; + char *responsePosition = 0; + char *extraRequestData = 0; char **uri_name; char **uri_val; @@ -306,10 +313,18 @@ int yaz_sru_decode(Z_HTTP_Request *hreq, Z_SRW_PDU **srw_pdu, version = v; else if (!strcmp(n, "scanClause")) scanClause = v; + else if (!strcmp(n, "x-pScanClause")) + pScanClause = v; else if (!strcmp(n, "maximumRecords")) maximumRecords = v; else if (!strcmp(n, "startRecord")) startRecord = v; + else if (!strcmp(n, "maximumTerms")) + maximumTerms = v; + else if (!strcmp(n, "responsePosition")) + responsePosition = v; + else if (!strcmp(n, "extraRequestData")) + extraRequestData = v; else yaz_add_srw_diagnostic(decode, diag, num_diag, 8, n); } @@ -382,6 +397,8 @@ int yaz_sru_decode(Z_HTTP_Request *hreq, Z_SRW_PDU **srw_pdu, } else if (!strcmp(operation, "explain")) { + /* Transfer SRU explain parameters to common struct */ + /* http://www.loc.gov/z3950/agency/zing/srw/explain.html */ Z_SRW_PDU *sr = yaz_srw_get(decode, Z_SRW_explain_request); sr->srw_version = version; @@ -407,15 +424,35 @@ int yaz_sru_decode(Z_HTTP_Request *hreq, Z_SRW_PDU **srw_pdu, } else if (!strcmp(operation, "scan")) { + /* Transfer SRU scan parameters to common struct */ + /* http://www.loc.gov/z3950/agency/zing/srw/scan.html */ Z_SRW_PDU *sr = yaz_srw_get(decode, Z_SRW_scan_request); - if (!scanClause) - yaz_add_srw_diagnostic(decode, diag, num_diag, 7, - "scanClause"); sr->srw_version = version; *srw_pdu = sr; - sr->u.scan_request->scanClause = scanClause; + + if (scanClause) + { + sr->u.scan_request->query_type = Z_SRW_query_type_cql; + sr->u.scan_request->scanClause.cql = scanClause; + } + else if (pScanClause) + { + sr->u.scan_request->query_type = Z_SRW_query_type_pqf; + sr->u.scan_request->scanClause.pqf = pScanClause; + } + else + yaz_add_srw_diagnostic(decode, diag, num_diag, 7, + "scanClause"); sr->u.scan_request->database = db; + + if (maximumTerms) + sr->u.scan_request->maximumTerms = + odr_intdup(decode, atoi(maximumTerms)); + if (responsePosition) + sr->u.scan_request->responsePosition = + odr_intdup(decode, atoi(responsePosition)); + sr->u.scan_request->stylesheet = stylesheet; (*soap_package) = odr_malloc(decode, sizeof(**soap_package)); @@ -529,7 +566,8 @@ Z_SRW_PDU *yaz_srw_get(ODR o, int which) sr->u.scan_request->stylesheet = 0; sr->u.scan_request->maximumTerms = 0; sr->u.scan_request->responsePosition = 0; - sr->u.scan_request->scanClause = 0; + sr->u.scan_request->query_type = Z_SRW_query_type_cql; + sr->u.scan_request->scanClause.cql = 0; break; case Z_SRW_scan_response: sr->u.scan_response = (Z_SRW_scanResponse *)