X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=src%2Fzoom-z3950.c;h=a8cf99bbf736dc3f8a4fceaa17748b1c94873645;hb=86878f261a0679ae4cbddad2f8eb3208722e2e3b;hp=bbd2e2a29198f9e82dfbec1054bcd358b39d4d30;hpb=63c48920fd45817bf28177279f65099670fe258b;p=yaz-moved-to-github.git diff --git a/src/zoom-z3950.c b/src/zoom-z3950.c index bbd2e2a..a8cf99b 100644 --- a/src/zoom-z3950.c +++ b/src/zoom-z3950.c @@ -1,11 +1,14 @@ /* This file is part of the YAZ toolkit. - * Copyright (C) 1995-2010 Index Data + * Copyright (C) 1995-2011 Index Data * See the file LICENSE for details. */ /** * \file zoom-z3950.c * \brief Implements ZOOM Z39.50 handling */ +#if HAVE_CONFIG_H +#include +#endif #include #include @@ -321,12 +324,15 @@ static Z_APDU *create_update_package(ZOOM_package p) p->odr_out); } if (!syntax_oid) + { + ZOOM_set_error(p->connection, ZOOM_ERROR_ES_INVALID_SYNTAX, syntax_str); return 0; + } if (num_db > 0) first_db = db[0]; - switch(*version) + switch (*version) { case '1': package_oid = yaz_oid_extserv_database_update_first_version; @@ -345,6 +351,7 @@ static Z_APDU *create_update_package(ZOOM_package p) package_oid = yaz_oid_extserv_database_update; break; default: + ZOOM_set_error(p->connection, ZOOM_ERROR_ES_INVALID_VERSION, version); return 0; } @@ -359,7 +366,10 @@ static Z_APDU *create_update_package(ZOOM_package p) else if (!strcmp(action, "specialUpdate")) action_no = Z_IUOriginPartToKeep_specialUpdate; else + { + ZOOM_set_error(p->connection, ZOOM_ERROR_ES_INVALID_ACTION, action); return 0; + } apdu = create_es_package(p, package_oid); if (apdu) @@ -663,10 +673,10 @@ zoom_ret ZOOM_connection_Z3950_send_search(ZOOM_connection c) if (facet_list) { Z_OtherInformation **oi; yaz_oi_APDU(apdu, &oi); - if (facet_list) { - yaz_oi_set_facetlist(oi, c->odr_out, facet_list); - } + yaz_oi_set_facetlist(oi, c->odr_out, facet_list); } + else + yaz_log(YLOG_WARN, "Unable to parse facets: %s", facets); } assert(r); @@ -1136,6 +1146,22 @@ static ZOOM_facet_field get_zoom_facet_field(ODR odr, Z_FacetField *facet) { return facet_field; } +/* Can be share with SOLR/SRU/SRW requests */ +void handle_facet_list(ZOOM_resultset r, Z_FacetList *fl) { + int j; + r->num_facets = fl->num; + yaz_log(YLOG_DEBUG, "Facets found: %d", fl->num); + r->facets = odr_malloc(r->odr, r->num_facets * sizeof(*r->facets)); + r->facets_names = odr_malloc(r->odr, r->num_facets * sizeof(*r->facets_names)); + for (j = 0; j < fl->num; j++) + { + r->facets[j] = get_zoom_facet_field(r->odr, fl->elements[j]); + if (!r->facets[j]) + yaz_log(YLOG_DEBUG, "Facet field missing on index %d !", j); + r->facets_names[j] = (char *) ZOOM_facet_field_name(r->facets[j]); + } +} + static void handle_facet_result(ZOOM_connection c, ZOOM_resultset r, Z_OtherInformation *o) { @@ -1147,19 +1173,7 @@ static void handle_facet_result(ZOOM_connection c, ZOOM_resultset r, Z_External *ext = o->list[i]->information.externallyDefinedInfo; if (ext->which == Z_External_userFacets) { - int j; - Z_FacetList *fl = ext->u.facetList; - r->num_facets = fl->num; - yaz_log(YLOG_DEBUG, "Facets found: %d", fl->num); - r->facets = odr_malloc(r->odr, r->num_facets * sizeof(*r->facets)); - r->facets_names = odr_malloc(r->odr, r->num_facets * sizeof(*r->facets_names)); - for (j = 0; j < fl->num; j++) - { - r->facets[j] = get_zoom_facet_field(r->odr, fl->elements[j]); - if (!r->facets[j]) - yaz_log(YLOG_DEBUG, "Facet field missing on index %d !", j); - r->facets_names[j] = (char *) ZOOM_facet_field_name(r->facets[j]); - } + handle_facet_list(r, ext->u.facetList); } } }