+ if (!it->second->m_in_use)
+ {
+ it->second->m_in_use = true;
+ return it->second;
+ }
+ m_cond_session_ready.wait(lock);
+ }
+ FrontendPtr f(new Frontend(this));
+ m_clients[package.session()] = f;
+ f->m_in_use = true;
+ return f;
+}
+
+void yf::Virt_db::Rep::release_frontend(Package &package)
+{
+ boost::mutex::scoped_lock lock(m_mutex);
+ std::map<yp2::Session,yf::Virt_db::FrontendPtr>::iterator it;
+
+ it = m_clients.find(package.session());
+ if (it != m_clients.end())
+ {
+ if (package.session().is_closed())
+ {
+ it->second->close(package);
+ m_clients.erase(it);
+ }
+ else
+ {
+ it->second->m_in_use = false;
+ }
+ m_cond_session_ready.notify_all();
+ }
+}
+
+yf::Virt_db::Set::Set(BackendPtr b, std::string setname)
+ : m_backend(b), m_setname(setname)
+{
+}
+
+
+yf::Virt_db::Set::Set()
+{
+}
+
+
+yf::Virt_db::Set::~Set()
+{
+}
+
+yf::Virt_db::Map::Map(std::list<std::string> targets, std::string route)
+ : m_targets(targets), m_route(route)
+{
+}
+
+yf::Virt_db::Map::Map()
+{
+}
+
+yf::Virt_db::Virt_db() : m_p(new Virt_db::Rep)
+{
+}
+
+yf::Virt_db::~Virt_db() {
+}
+
+void yf::Virt_db::Frontend::present(Package &package, Z_APDU *apdu_req)
+{
+ Z_PresentRequest *req = apdu_req->u.presentRequest;
+ std::string resultSetId = req->resultSetId;
+ yp2::odr odr;
+
+ Sets_it sets_it = m_sets.find(resultSetId);
+ if (sets_it == m_sets.end())
+ {
+ Z_APDU *apdu =
+ odr.create_presentResponse(
+ apdu_req,
+ YAZ_BIB1_SPECIFIED_RESULT_SET_DOES_NOT_EXIST,
+ resultSetId.c_str());