X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fzoom-c.c;h=e364892f2a719bcca3ef5ad90e50e67088fa1844;hb=a94b5a44d632a6df1a1de5dc75e73adc03e8e6b4;hp=6ebcc33e9d314afa7e98b58739f7cd8480dbd07e;hpb=c45f2b8efebe64cf3d8d45eae18dc0fd78bc933f;p=yaz-moved-to-github.git diff --git a/src/zoom-c.c b/src/zoom-c.c index 6ebcc33..e364892 100644 --- a/src/zoom-c.c +++ b/src/zoom-c.c @@ -2,7 +2,7 @@ * Copyright (C) 1995-2007, Index Data ApS * See the file LICENSE for details. * - * $Id: zoom-c.c,v 1.141 2007-08-16 10:09:36 adam Exp $ + * $Id: zoom-c.c,v 1.145 2007-09-06 12:40:53 mike Exp $ */ /** * \file zoom-c.c @@ -395,6 +395,8 @@ ZOOM_API(ZOOM_connection) c->m_queue_front = 0; c->m_queue_back = 0; + + c->sru_version = xstrdup("1.1"); return c; } @@ -541,6 +543,10 @@ ZOOM_API(void) val = ZOOM_options_get(c->options, "sru"); c->sru_mode = get_sru_mode_from_string(val); + xfree(c->sru_version); + val = ZOOM_options_get(c->options, "sru_version"); + c->sru_version = xstrdup(val ? val : "1.1"); + ZOOM_options_set(c->options, "host", c->host_port); xfree(c->cookie_out); @@ -781,6 +787,7 @@ ZOOM_API(void) xfree(c->user); xfree(c->group); xfree(c->password); + xfree(c->sru_version); xfree(c); } @@ -1346,7 +1353,7 @@ static zoom_ret ZOOM_connection_send_init(ZOOM_connection c) odr_prepend(c->odr_out, "ZOOM-C", ireq->implementationName)); - version = odr_strdup(c->odr_out, "$Revision: 1.141 $"); + version = odr_strdup(c->odr_out, "$Revision: 1.145 $"); if (strlen(version) > 10) /* check for unexpanded CVS strings */ version[strlen(version)-2] = '\0'; ireq->implementationVersion = @@ -1436,6 +1443,15 @@ static zoom_ret send_srw(ZOOM_connection c, Z_SRW_PDU *sr) } #endif + +static Z_SRW_PDU *ZOOM_srw_get_pdu(ZOOM_connection c, int type) { + Z_SRW_PDU *sr = yaz_srw_get_pdu(c->odr_out, type, c->sru_version); + sr->username = c->user; + sr->password = c->password; + return sr; +} + + #if YAZ_HAVE_XML2 static zoom_ret ZOOM_connection_srw_send_search(ZOOM_connection c) { @@ -1493,8 +1509,7 @@ static zoom_ret ZOOM_connection_srw_send_search(ZOOM_connection c) } assert(resultset->query); - sr = yaz_srw_get(c->odr_out, Z_SRW_searchRetrieve_request); - + sr = ZOOM_srw_get_pdu(c, Z_SRW_searchRetrieve_request); if (resultset->query->z_query->which == Z_Query_type_104 && resultset->query->z_query->u.type_104->which == Z_External_CQL) { @@ -2832,7 +2847,7 @@ static zoom_ret ZOOM_connection_srw_send_scan(ZOOM_connection c) assert (c->tasks->which == ZOOM_TASK_SCAN); scan = c->tasks->u.scan.scan; - sr = yaz_srw_get(c->odr_out, Z_SRW_scan_request); + sr = ZOOM_srw_get_pdu(c, Z_SRW_scan_request); /* SRU scan can only carry CQL and PQF */ if (scan->query->z_query->which == Z_Query_type_104) @@ -3821,6 +3836,9 @@ static void handle_srw_response(ZOOM_connection c, resultset->size = 0; + if (res->resultSetId) + ZOOM_resultset_option_set(resultset, "resultSetId", res->resultSetId); + yaz_log(log_details, "%p handle_srw_response got SRW response OK", c); if (res->numberOfRecords) @@ -3915,6 +3933,8 @@ static void handle_http(ZOOM_connection c, Z_HTTP_Response *hres) soap_package->u.generic->no == 0) { Z_SRW_PDU *sr = (Z_SRW_PDU*) soap_package->u.generic->p; + + ZOOM_options_set(c->options, "sru_version", sr->srw_version); if (sr->which == Z_SRW_searchRetrieve_response) handle_srw_response(c, sr->u.response); else if (sr->which == Z_SRW_scan_response)