X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fzoom-sru.c;h=57f02a38d8f449d2ac958c353d2fbcf2befcb02d;hb=d962efcd2c1f0a3abfb0c40e81e298d69a9757bd;hp=1932f09d9e0dd0df59527541d5497aea4d7e266a;hpb=83a7bb713c01e6c9b3311c6f5356e76a9a9fb92a;p=yaz-moved-to-github.git diff --git a/src/zoom-sru.c b/src/zoom-sru.c index 1932f09..57f02a3 100644 --- a/src/zoom-sru.c +++ b/src/zoom-sru.c @@ -24,7 +24,6 @@ static void set_SRU_error(ZOOM_connection c, Z_SRW_diagnostic *d) #endif - #if YAZ_HAVE_XML2 static zoom_ret send_srw(ZOOM_connection c, Z_SRW_PDU *sr) { @@ -50,6 +49,10 @@ static zoom_ret send_srw(ZOOM_connection c, Z_SRW_PDU *sr) { yaz_sru_soap_encode(gdu->u.HTTP_Request, sr, c->odr_out, c->charset); } + else if (c->sru_mode == zoom_sru_solr) + { + yaz_solr_encode_request(gdu->u.HTTP_Request, sr, c->odr_out, c->charset); + } if (!z_GDU(c->odr_out, &gdu, 0, 0)) return zoom_complete; if (c->odr_print) @@ -280,8 +283,9 @@ static zoom_ret handle_srw_response(ZOOM_connection c, } else { - if (res->numberOfRecords) + if (res->numberOfRecords) { resultset->size = *res->numberOfRecords; + } for (i = 0; inum_records; i++) { int pos; @@ -291,13 +295,16 @@ static zoom_ret handle_srw_response(ZOOM_connection c, Z_NamePlusRecord *npr = (Z_NamePlusRecord *) odr_malloc(c->odr_in, sizeof(Z_NamePlusRecord)); - + /* + * TODO This does not work with 0-based recordPositions. + * We will iterate over one twice + */ if (res->records[i].recordPosition && *res->records[i].recordPosition > 0) pos = *res->records[i].recordPosition - 1; else pos = *start + i; - + sru_rec = &res->records[i]; npr->databaseName = 0; @@ -333,9 +340,9 @@ static zoom_ret handle_srw_response(ZOOM_connection c, *start += i; if (*count + *start > resultset->size) *count = resultset->size - *start; + yaz_log(YLOG_DEBUG, "SRU result set size " ODR_INT_PRINTF " start %d count %d", resultset->size, *start, *count); if (*count < 0) *count = 0; - nmem = odr_extract_mem(c->odr_in); nmem_transfer(odr_getmem(resultset->odr), nmem); nmem_destroy(nmem); @@ -378,7 +385,18 @@ int ZOOM_handle_sru(ZOOM_connection c, Z_HTTP_Response *hres, /* not redirect (normal response) */ if (!yaz_srw_check_content_type(hres)) + { addinfo = "content-type"; + ret = -1; + } + else if (c->sru_mode == zoom_sru_solr) + { + Z_SRW_PDU *sr; + ret = yaz_solr_decode_response(c->odr_in, hres, &sr); + if (ret == 0) + if (sr->which == Z_SRW_searchRetrieve_response) + *cret = handle_srw_response(c, sr->u.response); + } else { Z_SOAP *soap_package = 0;