X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fzoom-sru.c;h=08a18a2433e5ab5bfab0bd9b24dbe95e6dd2118d;hb=3b5a46489f85d20012cff59320d7a43b16a43c99;hp=105970fae1f4e8a6b4619ec04fc728d62b341457;hpb=f9ee3b9ec26306b6397c37434e8066f084d33b3a;p=yaz-moved-to-github.git diff --git a/src/zoom-sru.c b/src/zoom-sru.c index 105970f..08a18a2 100644 --- a/src/zoom-sru.c +++ b/src/zoom-sru.c @@ -101,14 +101,14 @@ zoom_ret ZOOM_connection_srw_send_scan(ZOOM_connection c) { sr->u.scan_request->query_type = Z_SRW_query_type_cql; sr->u.scan_request->scanClause.cql = - ZOOM_query_get_query_string(scan->query); + odr_strdup(c->odr_out, ZOOM_query_get_query_string(scan->query)); } else if (z_query->which == Z_Query_type_1 || z_query->which == Z_Query_type_101) { sr->u.scan_request->query_type = Z_SRW_query_type_pqf; sr->u.scan_request->scanClause.pqf = - ZOOM_query_get_query_string(scan->query); + odr_strdup(c->odr_out, ZOOM_query_get_query_string(scan->query)); } else { @@ -209,13 +209,21 @@ zoom_ret ZOOM_connection_srw_send_search(ZOOM_connection c) { sr->u.request->query_type = Z_SRW_query_type_pqf; sr->u.request->query.pqf = - ZOOM_query_get_query_string(resultset->query); + odr_strdup(c->odr_out, + ZOOM_query_get_query_string(resultset->query)); } else { ZOOM_set_error(c, ZOOM_ERROR_UNSUPPORTED_QUERY, 0); return zoom_complete; } + + option_val = ZOOM_query_get_sru11(resultset->query); + if (option_val) + { + sr->u.request->sort_type = Z_SRW_sort_type_sort; + sr->u.request->sort.sortKeys = odr_strdup(c->odr_out, option_val); + } sr->u.request->startRecord = odr_intdup(c->odr_out, *start + 1); sr->u.request->maximumRecords = odr_intdup( c->odr_out, (resultset->step > 0 && resultset->step < *count) ? @@ -391,16 +399,15 @@ static void handle_srw_scan_response(ZOOM_connection c, #endif int ZOOM_handle_sru(ZOOM_connection c, Z_HTTP_Response *hres, - zoom_ret *cret) + zoom_ret *cret, char **addinfo) { #if YAZ_HAVE_XML2 int ret = 0; - const char *addinfo = 0; /* not redirect (normal response) */ if (!yaz_srw_check_content_type(hres)) { - addinfo = "content-type"; + *addinfo = "content-type"; ret = -1; } else if (c->sru_mode == zoom_sru_solr) @@ -445,7 +452,19 @@ int ZOOM_handle_sru(ZOOM_connection c, Z_HTTP_Response *hres, soap_package->u.fault->fault_string); } else + { + size_t max_chars = 1000; + size_t sz = hres->content_len; + if (sz > max_chars - 1) + sz = max_chars; + *addinfo = odr_malloc(c->odr_in, sz + 4); + memcpy(*addinfo, hres->content_buf, sz); + if (sz == max_chars) + strcpy(*addinfo + sz, "..."); + else + strcpy(*addinfo + sz, ""); ret = -1; + } } return ret; #else