{ // searchRetrieve
Z_SRW_searchRetrieveRequest *sr_req = sru_pdu_req->u.request;
- sru_pdu_res = yaz_srw_get(odr_en, Z_SRW_searchRetrieve_response);
+ sru_pdu_res = yaz_srw_get_pdu(odr_en, Z_SRW_searchRetrieve_response,
+ sru_pdu_req->srw_version);
// checking that we have a query
ok = mp_util::check_sru_query_exists(package, odr_en,
else if (sru_pdu_req->which == Z_SRW_scan_request
&& sru_pdu_req->u.scan_request)
{
- sru_pdu_res = yaz_srw_get(odr_en, Z_SRW_scan_response);
+ sru_pdu_res = yaz_srw_get_pdu(odr_en, Z_SRW_scan_response,
+ sru_pdu_req->srw_version);
// we do not do scan at the moment, therefore issuing a diagnostic
yaz_add_srw_diagnostic(odr_en,
sru_res->records[i + num].recordPacking = record_packing;
- if (npr->which == Z_NamePlusRecord_databaseRecord &&
+ if (npr->which == Z_NamePlusRecord_surrogateDiagnostic)
+ {
+ Z_DiagRec *p = npr->u.surrogateDiagnostic;
+ if (p->which == Z_DiagRec_defaultFormat)
+ {
+ Z_DefaultDiagFormat *df = p->u.defaultFormat;
+ int c = yaz_diag_bib1_to_srw(*df->condition);
+
+ yaz_mk_sru_surrogate(
+ odr_en, sru_res->records + i + num, position,
+ c, df->u.v2Addinfo);
+ }
+ else
+ {
+ yaz_mk_sru_surrogate(
+ odr_en, sru_res->records + i + num, position,
+ YAZ_SRW_RECORD_TEMPORARILY_UNAVAILABLE, 0);
+ }
+ }
+ else if (npr->which == Z_NamePlusRecord_databaseRecord &&
npr->u.databaseRecord->direct_reference
&& !oid_oidcmp(npr->u.databaseRecord->direct_reference,
yaz_oid_recsyn_xml))