+ BackendClass(const yazpp_1::GDU &init_request);
+ ~BackendClass();
+ };
+ class SessionShared::FrontendSet {
+ Databases m_databases;
+ yazpp_1::Yaz_Z_Query m_query;
+ public:
+ const Databases &get_databases();
+ const yazpp_1::Yaz_Z_Query &get_query();
+ FrontendSet(
+ const Databases &databases,
+ const yazpp_1::Yaz_Z_Query &query);
+ FrontendSet();
+ };
+ struct SessionShared::Frontend {
+ Frontend(Rep *rep);
+ ~Frontend();
+ bool m_is_virtual;
+ bool m_in_use;
+
+ void search(Package &package, Z_APDU *apdu);
+ void present(Package &package, Z_APDU *apdu);
+
+ void get_set(mp::Package &package,
+ const Z_APDU *apdu_req,
+ const Databases &databases,
+ yazpp_1::Yaz_Z_Query &query,
+ BackendInstancePtr &found_backend,
+ BackendSetPtr &found_set);
+ void override_set(BackendInstancePtr &found_backend,
+ std::string &result_set_id);
+
+ Rep *m_p;
+ BackendClassPtr m_backend_class;
+ FrontendSets m_frontend_sets;
+ };
+ class SessionShared::Rep {
+ friend class SessionShared;
+ friend struct Frontend;
+
+ FrontendPtr get_frontend(Package &package);
+ void release_frontend(Package &package);
+ Rep();
+ public:
+ void expire();
+ private:
+ void init(Package &package, const Z_GDU *gdu,
+ FrontendPtr frontend);
+ boost::mutex m_mutex;
+ boost::condition m_cond_session_ready;
+ std::map<mp::Session, FrontendPtr> m_clients;
+
+ BackendClassMap m_backend_map;
+ boost::mutex m_mutex_backend_map;
+ boost::thread_group m_thrds;