+
+ Z_GDU *gdu_res = package.response().get();
+
+ // see if we have a records list to patch!
+ Z_NamePlusRecordList *records = 0;
+ if (gdu_res && gdu_res->which == Z_GDU_Z3950 &&
+ gdu_res->u.z3950->which == Z_APDU_presentResponse)
+ {
+ Z_PresentResponse * pr_res = gdu_res->u.z3950->u.presentResponse;
+
+ if (pr_res
+ && pr_res->numberOfRecordsReturned
+ && *(pr_res->numberOfRecordsReturned) > 0
+ && pr_res->records
+ && pr_res->records->which == Z_Records_DBOSD)
+ {
+ records = pr_res->records->u.databaseOrSurDiagnostics;
+ }
+ }
+ if (gdu_res && gdu_res->which == Z_GDU_Z3950 &&
+ gdu_res->u.z3950->which == Z_APDU_searchResponse)
+ {
+ Z_SearchResponse *sr_res = gdu_res->u.z3950->u.searchResponse;
+
+ if (sr_res
+ && sr_res->numberOfRecordsReturned
+ && *(sr_res->numberOfRecordsReturned) > 0
+ && sr_res->records
+ && sr_res->records->which == Z_Records_DBOSD)
+ {
+ records = sr_res->records->u.databaseOrSurDiagnostics;
+ }
+ }
+ if (records)
+ {
+ int i;
+ for (i = 0; i < records->num_records; i++)
+ {
+ Z_NamePlusRecord **npr = &records->records[i];
+ if ((*npr)->which == Z_NamePlusRecord_databaseRecord)
+ {
+ const char *details = 0;
+ Z_External *r = (*npr)->u.databaseRecord;
+ int ret_trans = -1;
+ if (r->which == Z_External_octet &&
+ !oid_oidcmp(r->direct_reference, yaz_oid_recsyn_xml))
+ {
+ std::string result;
+ if (convert_one_record(
+ r->u.octet_aligned->buf, r->u.octet_aligned->len,
+ result))
+ {
+ (*npr)->u.databaseRecord =
+ z_ext_record_oid(odr_en, yaz_oid_recsyn_xml,
+ result.c_str(),
+ result.length());
+ }
+ else
+ {
+ *npr = zget_surrogateDiagRec(
+ odr_en, (*npr)->databaseName,
+ YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS,
+ result.c_str());
+ }
+ }
+ }
+ }
+ package.response() = gdu_res;
+ }