564 Z_InitRequest *req = gdu->u.z3950->u.initRequest;
566 frontend->m_is_virtual =
true;
567 frontend->m_init_options = *req->options;
569 req->idAuthentication = 0;
573 BackendClassMap::const_iterator it;
584 frontend->m_backend_class = b;
588 frontend->m_backend_class = it->second;
597 bool create_first_one =
false;
599 boost::mutex::scoped_lock lock(bc->m_mutex_backend_class);
600 if (!bc->m_no_succeeded)
601 create_first_one =
true;
605 while (!bc->m_no_failed && !bc->m_no_succeeded && bc->m_no_init)
607 bc->m_cond_set_ready.wait(lock);
611 if (create_first_one)
618 bc->release_backend(backend);
620 yazpp_1::GDU init_response;
622 boost::mutex::scoped_lock lock(bc->m_mutex_backend_class);
624 init_response = bc->m_init_response;
627 if (init_response.get())
629 Z_GDU *response_gdu = init_response.get();
630 mp::util::transfer_referenceId(odr, gdu->u.z3950,
631 response_gdu->u.z3950);
632 Z_InitResponse *init_res = response_gdu->u.z3950->u.initResponse;
633 Z_Options *server_options = init_res->options;
634 Z_Options *client_options = &frontend->m_init_options;
636 for (i = 0; i < 30; i++)
637 if (!ODR_MASK_GET(client_options, i))
638 ODR_MASK_CLEAR(server_options, i);
641 *init_res->preferredMessageSize > *req->preferredMessageSize)
642 *init_res->preferredMessageSize = *req->preferredMessageSize;
645 *init_res->maximumRecordSize > *req->maximumRecordSize)
646 *init_res->maximumRecordSize = *req->maximumRecordSize;
648 package.response() = init_response;
649 if (!*response_gdu->u.z3950->u.initResponse->result)
650 package.session().close();
655 odr.create_initResponse(
656 gdu->u.z3950, YAZ_BIB1_TEMPORARY_SYSTEM_ERROR,
657 "session_shared: target closed connection during init");
658 *apdu->u.initResponse->result = 0;
659 package.response() = apdu;
660 package.session().close();