X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fseshigh.c;h=52ced9b5e6c92c8ed3d3bb5a9a164e9317c7b6d5;hp=2ef4ad5ee2437996c3f430701c18a6211b8b6c3a;hb=8cb8947e3a7bff4dbf8f124871cb4905df1adce7;hpb=59015cc6ed698cf6548ef177479ea2863494f2a7 diff --git a/src/seshigh.c b/src/seshigh.c index 2ef4ad5..52ced9b 100644 --- a/src/seshigh.c +++ b/src/seshigh.c @@ -74,7 +74,7 @@ #include #include #include - +#include #include #include #include @@ -1862,8 +1862,8 @@ static void process_http_request(association *assoc, request *req) if (sr->which == Z_SRW_searchRetrieve_request) { Z_SRW_PDU *res = - yaz_srw_get_pdu(assoc->encode, Z_SRW_searchRetrieve_response, - sr->srw_version); + yaz_srw_get_pdu_e(assoc->encode, Z_SRW_searchRetrieve_response, + sr); stylesheet = sr->u.request->stylesheet; if (num_diagnostic) { @@ -1879,8 +1879,7 @@ static void process_http_request(association *assoc, request *req) } else if (sr->which == Z_SRW_explain_request) { - Z_SRW_PDU *res = yaz_srw_get_pdu(o, Z_SRW_explain_response, - sr->srw_version); + Z_SRW_PDU *res = yaz_srw_get_pdu_e(o, Z_SRW_explain_response, sr); stylesheet = sr->u.explain_request->stylesheet; if (num_diagnostic) { @@ -1894,8 +1893,7 @@ static void process_http_request(association *assoc, request *req) } else if (sr->which == Z_SRW_scan_request) { - Z_SRW_PDU *res = yaz_srw_get_pdu(o, Z_SRW_scan_response, - sr->srw_version); + Z_SRW_PDU *res = yaz_srw_get_pdu_e(o, Z_SRW_scan_response, sr); stylesheet = sr->u.scan_request->stylesheet; if (num_diagnostic) { @@ -2500,7 +2498,8 @@ static Z_Records *pack_records(association *a, char *setname, Odr_int start, Z_ReferenceId *referenceId, Odr_oid *oid, int *errcode) { - int recno, total_length = 0, dumped_records = 0; + int recno; + Odr_int dumped_records = 0; int toget = odr_int_to_int(*num); Z_Records *records = (Z_Records *) odr_malloc(a->encode, sizeof(*records)); @@ -2530,13 +2529,13 @@ static Z_Records *pack_records(association *a, char *setname, Odr_int start, { bend_fetch_rr freq; Z_NamePlusRecord *thisrec; - int this_length = 0; + Odr_int this_length = 0; /* * we get the number of bytes allocated on the stream before any * allocation done by the backend - this should give us a reasonable * idea of the total size of the data so far. */ - total_length = odr_total(a->encode) - dumped_records; + Odr_int total_length = odr_total(a->encode) - dumped_records; freq.errcode = 0; freq.errstring = 0; freq.basename = 0; @@ -2592,10 +2591,11 @@ static Z_Records *pack_records(association *a, char *setname, Odr_int start, this_length = freq.len; else this_length = odr_total(a->encode) - total_length - dumped_records; - yaz_log(YLOG_DEBUG, " fetched record, len=%d, total=%d dumped=%d", - this_length, total_length, dumped_records); + yaz_log(log_requestdetail, " fetched record, len=" ODR_INT_PRINTF + " total=" ODR_INT_PRINTF " dumped=" ODR_INT_PRINTF, + this_length, total_length, dumped_records); if (a->preferredMessageSize > 0 && - this_length + total_length > a->preferredMessageSize) + this_length + total_length > a->preferredMessageSize) { /* record is small enough, really */ if (this_length <= a->preferredMessageSize && recno > start) @@ -2625,7 +2625,7 @@ static Z_Records *pack_records(association *a, char *setname, Odr_int start, else /* too big entirely */ { yaz_log(log_requestdetail, "Record > maxrcdsz " - "this=%d max=%d", + "this=" ODR_INT_PRINTF " max=%d", this_length, a->maximumRecordSize); reclist->records[reclist->num_records] = surrogatediagrec( @@ -2708,6 +2708,19 @@ static Z_APDU *process_searchRequest(association *assoc, request *reqb) bsrr->search_input = req->otherInfo; bsrr->present_number = *req->mediumSetPresentNumber; + if (assoc->server && assoc->server->client_query_charset && + req->query->which == Z_Query_type_1) + { + yaz_iconv_t cd = + yaz_iconv_open("UTF-8", assoc->server->client_query_charset); + if (cd) + { + yaz_query_charset_convert_rpnquery(req->query->u.type_1, + assoc->decode, cd); + yaz_iconv_close(cd); + } + } + if (assoc->server && assoc->server->cql_transform && req->query->which == Z_Query_type_104 && req->query->u.type_104->which == Z_External_CQL)