+ const char *vhost_cstr = vhost.c_str();
+ if (true)
+ { // sending init to backend
+ Package init_package(*id, package.origin());
+ init_package.copy_filter(package);
+
+ ODR odr = odr_createmem(ODR_ENCODE);
+ Z_APDU *init_apdu = zget_APDU(odr, Z_APDU_initRequest);
+
+ yaz_oi_set_string_oidval(&init_apdu->u.initRequest->otherInfo, odr,
+ VAL_PROXY, 1, vhost_cstr);
+
+ init_package.request() = init_apdu;
+ odr_destroy(odr);
+
+ init_package.move(); // send init
+
+ if (init_package.session().is_closed())
+ {
+ ODR odr = odr_createmem(ODR_ENCODE);
+ Z_APDU *apdu = zget_APDU(odr, Z_APDU_searchResponse);
+
+ Z_Records *rec = (Z_Records *) odr_malloc(odr, sizeof(Z_Records));
+ apdu->u.searchResponse->records = rec;
+ rec->which = Z_Records_NSD;
+ rec->u.nonSurrogateDiagnostic =
+ zget_DefaultDiagFormat(
+ odr, YAZ_BIB1_DATABASE_UNAVAILABLE, database.c_str());
+ package.response() = apdu;
+
+ odr_destroy(odr);
+ return;
+ }
+ }
+ // sending search to backend
+ Package search_package(*id, package.origin());
+ search_package.copy_filter(package);
+ const char *sep = strchr(vhost_cstr, '/');
+ ODR odr = odr_createmem(ODR_ENCODE);
+ if (sep)
+ req->databaseNames[0] = odr_strdup(odr, sep+1);
+
+ search_package.request() = yazpp_1::GDU(apdu);
+
+ odr_destroy(odr);
+
+ search_package.move();
+
+ package.response() = search_package.response();