X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=src%2Fsrw.c;h=197a5de73a71111c1fbf33f7cd539d23fc63de67;hb=1d5b77651a731db70204f77e7b8662ac4b4bfad4;hp=68d20564cff1eb01538cededf20a768903bad2da;hpb=c74ab70e2005c25e517e68274cf7bb3fd9b53e34;p=yaz-moved-to-github.git diff --git a/src/srw.c b/src/srw.c index 68d2056..197a5de 100644 --- a/src/srw.c +++ b/src/srw.c @@ -1,8 +1,8 @@ /* - * Copyright (C) 1995-2005, Index Data ApS + * Copyright (C) 1995-2006, Index Data ApS * See the file LICENSE for details. * - * $Id: srw.c,v 1.39 2005-11-11 22:06:46 adam Exp $ + * $Id: srw.c,v 1.49 2006-10-24 08:07:02 adam Exp $ */ /** * \file srw.c @@ -10,7 +10,7 @@ */ #include -#if HAVE_XML2 +#if YAZ_HAVE_XML2 #include #include @@ -291,8 +291,6 @@ static int yaz_srw_record(ODR o, xmlNodePtr pptr, Z_SRW_record *rec, match_xsd_string_n(data_ptr, "recordData", o, &rec->recordData_buf, &rec->recordData_len); break; - default: - /* need some way to signal diagnostic here */ } } rec->recordPacking = pack; @@ -323,7 +321,7 @@ static int yaz_srw_record(ODR o, xmlNodePtr pptr, Z_SRW_record *rec, } if (rec->recordPosition) add_xsd_integer(ptr, "recordPosition", rec->recordPosition ); - if (*extra) + if (extra && *extra) { xmlNodePtr rptr = xmlNewChild(ptr, 0, BAD_CAST "extraRecordData", 0); @@ -369,7 +367,8 @@ static int yaz_srw_records(ODR o, xmlNodePtr pptr, Z_SRW_record **recs, { xmlNodePtr rptr = xmlNewChild(pptr, 0, BAD_CAST "record", 0); - yaz_srw_record(o, rptr, (*recs)+i, *extra + i, client_data, ns); + yaz_srw_record(o, rptr, (*recs)+i, (*extra ? *extra + i : 0), + client_data, ns); } } return 0; @@ -540,8 +539,7 @@ int yaz_srw_codec(ODR o, void * vptr, Z_SRW_PDU **handler_data, if (method->type != XML_ELEMENT_NODE) return -1; - *p = (Z_SRW_PDU *) odr_malloc(o, sizeof(**p)); - (*p)->srw_version = odr_strdup(o, "1.1"); + *p = yaz_srw_get_core_v_1_1(o); if (!xmlStrcmp(method->name, BAD_CAST "searchRetrieveRequest")) { @@ -593,8 +591,8 @@ int yaz_srw_codec(ODR o, void * vptr, Z_SRW_PDU **handler_data, else if (match_xsd_string(ptr, "recordXPath", o, &req->recordXPath)) ; - else if (match_xsd_string(ptr, "resultSetTTL", o, - &req->database)) + else if (match_xsd_integer(ptr, "resultSetTTL", o, + &req->resultSetTTL)) ; else if (match_xsd_string(ptr, "sortKeys", o, &req->sort.sortKeys)) @@ -605,7 +603,11 @@ int yaz_srw_codec(ODR o, void * vptr, Z_SRW_PDU **handler_data, else if (match_xsd_string(ptr, "database", o, &req->database)) ; - /* missing is xQuery, xSortKeys .. */ + } + if (!req->query.cql && !req->query.pqf && !req->query.xcql) + { + /* should put proper diagnostic here */ + return -1; } } else if (!xmlStrcmp(method->name, BAD_CAST "searchRetrieveResponse")) @@ -968,8 +970,7 @@ int yaz_ucp_codec(ODR o, void * vptr, Z_SRW_PDU **handler_data, if (method->type != XML_ELEMENT_NODE) return -1; - *p = (Z_SRW_PDU *) odr_malloc(o, sizeof(**p)); - (*p)->srw_version = odr_strdup(o, "1.1"); + *p = yaz_srw_get_core_v_1_1(o); if (!xmlStrcmp(method->name, BAD_CAST "updateRequest")) { @@ -1091,8 +1092,8 @@ int yaz_ucp_codec(ODR o, void * vptr, Z_SRW_PDU **handler_data, if ((*p)->which == Z_SRW_update_request) { Z_SRW_updateRequest *req = (*p)->u.update_request; - xmlNodePtr ptr = xmlNewChild(pptr, 0, "updateRequest", 0); - ns_srw = xmlNewNs(ptr, ns, "zu"); + xmlNodePtr ptr = xmlNewChild(pptr, 0, BAD_CAST "updateRequest", 0); + ns_srw = xmlNewNs(ptr, BAD_CAST ns, BAD_CAST "zu"); xmlSetNs(ptr, ns_srw); add_xsd_string(ptr, "version", (*p)->srw_version); @@ -1102,8 +1103,9 @@ int yaz_ucp_codec(ODR o, void * vptr, Z_SRW_PDU **handler_data, else if ((*p)->which == Z_SRW_update_response) { Z_SRW_updateResponse *res = (*p)->u.update_response; - xmlNodePtr ptr = xmlNewChild(pptr, 0, "updateResponse", 0); - ns_srw = xmlNewNs(ptr, ns, "zu"); + xmlNodePtr ptr = xmlNewChild(pptr, 0, (xmlChar *) + "updateResponse", 0); + ns_srw = xmlNewNs(ptr, BAD_CAST ns, BAD_CAST "zu"); xmlSetNs(ptr, ns_srw); add_xsd_string(ptr, "version", (*p)->srw_version); @@ -1115,13 +1117,13 @@ int yaz_ucp_codec(ODR o, void * vptr, Z_SRW_PDU **handler_data, add_xsd_string(ptr, "recordChecksum", res->recordChecksum ); if (res->record.recordData_len) { - xmlNodePtr rptr = xmlNewChild(ptr, 0, "record", 0); + xmlNodePtr rptr = xmlNewChild(ptr, 0, BAD_CAST "record", 0); yaz_srw_record(o, rptr, &res->record, &res->extra_record, client_data, ns); } if (res->num_diagnostics) { - xmlNodePtr rptr = xmlNewChild(ptr, 0, "diagnostics", 0); + xmlNodePtr rptr = xmlNewChild(ptr, 0, BAD_CAST "diagnostics", 0); yaz_srw_diagnostics(o, rptr, &res->diagnostics, &res->num_diagnostics, client_data, ns); }