X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fsrwutil.c;h=c476d1105b23a7a2bcc0088dd6673a93a2b8113e;hp=d34f6de963c9d1c13fff23820db9c854f0ac83de;hb=84d7b06c13daa609e93f353e655c4b02f936d65c;hpb=f64aa61c61bf8bf851d7b66a5fc137669dc77452 diff --git a/src/srwutil.c b/src/srwutil.c index d34f6de..c476d11 100644 --- a/src/srwutil.c +++ b/src/srwutil.c @@ -1,14 +1,15 @@ /* - * Copyright (c) 2002-2004, Index Data. + * Copyright (C) 1995-2005, Index Data ApS * See the file LICENSE for details. * - * $Id: srwutil.c,v 1.20 2005-01-08 01:20:19 adam Exp $ + * $Id: srwutil.c,v 1.27 2005-02-01 14:43:50 adam Exp $ */ /** * \file srwutil.c * \brief Implements SRW/SRU utilities. */ +#include #include #include @@ -167,7 +168,9 @@ int yaz_srw_decode(Z_HTTP_Request *hreq, Z_SRW_PDU **srw_pdu, { const char *content_type = z_HTTP_header_lookup(hreq->headers, "Content-Type"); - if (content_type && !yaz_strcmp_del("text/xml", content_type, "; ")) + if (content_type && + (!yaz_strcmp_del("text/xml", content_type, "; ") || + !yaz_strcmp_del("text/plain", content_type, "; "))) { char *db = "Default"; const char *p0 = hreq->path, *p1; @@ -234,6 +237,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) @@ -249,6 +255,7 @@ int yaz_sru_decode(Z_HTTP_Request *hreq, Z_SRW_PDU **srw_pdu, { char *db = "Default"; const char *p0 = hreq->path, *p1; +#if HAVE_XML2 const char *operation = 0; char *version = 0; char *query = 0; @@ -262,6 +269,10 @@ int yaz_sru_decode(Z_HTTP_Request *hreq, Z_SRW_PDU **srw_pdu, char *recordPacking = "xml"; /* xml packing is default for SRU */ char *maximumRecords = 0; char *startRecord = 0; + char *maximumTerms = 0; + char *responsePosition = 0; + char *extraRequestData = 0; +#endif char **uri_name; char **uri_val; @@ -307,12 +318,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-ScanClause")) + 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); } @@ -385,6 +402,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; @@ -410,8 +429,13 @@ 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); + sr->srw_version = version; + *srw_pdu = sr; + if (scanClause) { sr->u.scan_request->query_type = Z_SRW_query_type_cql; @@ -425,9 +449,15 @@ int yaz_sru_decode(Z_HTTP_Request *hreq, Z_SRW_PDU **srw_pdu, else yaz_add_srw_diagnostic(decode, diag, num_diag, 7, "scanClause"); - sr->srw_version = version; - *srw_pdu = sr; 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));