184 Package init_package(b->m_backend_session, package.origin());
185 init_package.copy_filter(package);
189 Z_APDU *init_apdu = zget_APDU(odr, Z_APDU_initRequest);
191 mp::util::set_vhost_otherinfo(&init_apdu->u.initRequest->otherInfo, odr,
193 Z_InitRequest *req = init_apdu->u.initRequest;
197 Z_InitRequest *org_init = org_gdu->u.z3950->u.initRequest;
200 const char *peer_name = yaz_oi_get_string_oid(
201 &org_init->otherInfo, yaz_oid_userinfo_client_ip, 1, 0);
203 yaz_oi_set_string_oid(&init_apdu->u.initRequest->otherInfo, odr,
204 yaz_oid_userinfo_client_ip, 1, peer_name);
206 req->idAuthentication = org_init->idAuthentication;
207 req->implementationId = org_init->implementationId;
208 req->implementationName = org_init->implementationName;
209 req->implementationVersion = org_init->implementationVersion;
210 *req->preferredMessageSize = *org_init->preferredMessageSize;
211 *req->maximumRecordSize = *org_init->maximumRecordSize;
213 ODR_MASK_SET(req->options, Z_Options_search);
214 ODR_MASK_SET(req->options, Z_Options_present);
215 ODR_MASK_SET(req->options, Z_Options_namedResultSets);
216 ODR_MASK_SET(req->options, Z_Options_scan);
218 ODR_MASK_SET(req->protocolVersion, Z_ProtocolVersion_1);
219 ODR_MASK_SET(req->protocolVersion, Z_ProtocolVersion_2);
220 ODR_MASK_SET(req->protocolVersion, Z_ProtocolVersion_3);
222 init_package.request() = init_apdu;
224 init_package.move(b->m_route);
226 Z_GDU *gdu = init_package.response().get();
229 if (gdu && gdu->which == Z_GDU_Z3950
230 && gdu->u.z3950->which == Z_APDU_initResponse)
232 Z_InitResponse *res = gdu->u.z3950->u.initResponse;
233 if (ODR_MASK_GET(res->options, Z_Options_namedResultSets))
235 b->m_named_result_sets =
true;
237 if (*res->result && !init_package.session().is_closed())
242 mp::util::get_init_diagnostics(res, error_code, addinfo);
246 std::list<std::string>::const_iterator db_it = databases.begin();
247 error_code = YAZ_BIB1_ACCESS_TO_SPECIFIED_DATABASE_DENIED;
248 if (db_it != databases.end())
251 if (!init_package.session().is_closed())
253 Package close_package(b->m_backend_session, package.origin());
254 close_package.copy_filter(package);
255 close_package.session().close();
256 close_package.move(b->m_route);