diff options
Diffstat (limited to 'cpp/src/IceGrid/SessionServantManager.cpp')
-rw-r--r-- | cpp/src/IceGrid/SessionServantManager.cpp | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/cpp/src/IceGrid/SessionServantManager.cpp b/cpp/src/IceGrid/SessionServantManager.cpp index 5084d9eeb03..23823caf4b7 100644 --- a/cpp/src/IceGrid/SessionServantManager.cpp +++ b/cpp/src/IceGrid/SessionServantManager.cpp @@ -19,12 +19,15 @@ SessionServantManager::SessionServantManager(const Ice::ObjectAdapterPtr& adapte const string& instanceName, const bool checkConnection, const string& serverAdminCategory, - const Ice::ObjectPtr& serverAdminRouter) : + const Ice::ObjectPtr& serverAdminRouter, + const AdminCallbackRouterPtr& adminCallbackRouter + ) : _adapter(adapter), _instanceName(instanceName), _checkConnection(checkConnection), _serverAdminCategory(serverAdminCategory), - _serverAdminRouter(serverAdminRouter) + _serverAdminRouter(serverAdminRouter), + _adminCallbackRouter(adminCallbackRouter) { } @@ -69,18 +72,19 @@ SessionServantManager::deactivate(const std::string&) } Ice::ObjectPrx -SessionServantManager::addSession(const Ice::ObjectPtr& session, const Ice::ConnectionPtr& con, bool admin) +SessionServantManager::addSession(const Ice::ObjectPtr& session, const Ice::ConnectionPtr& con, const string& category) { Lock sync(*this); - _sessions.insert(make_pair(session, SessionInfo(con, admin))); + _sessions.insert(make_pair(session, SessionInfo(con, category))); // // Keep track of all the connections which have an admin session to allow access // to server admin objects. // - if(admin && con) + if(category != "" && con != 0) { _adminConnections.insert(con); + _adminCallbackRouter->addMapping(category, con); } return addImpl(session, session); // Register a servant for the session and return its proxy. @@ -109,7 +113,7 @@ SessionServantManager::setSessionControl(const Ice::ObjectPtr& session, // // Allow invocations on server admin objects. // - if(p->second.admin && _serverAdminRouter) + if(p->second.category != "" && _serverAdminRouter) { Ice::StringSeq seq; seq.push_back(_serverAdminCategory); @@ -174,10 +178,13 @@ SessionServantManager::removeSession(const Ice::ObjectPtr& session) // // If this is an admin session, remove its connection from the admin connections. // - if(p->second.admin && p->second.connection) + + if(p->second.category != "" && p->second.connection) { assert(_adminConnections.find(p->second.connection) != _adminConnections.end()); _adminConnections.erase(_adminConnections.find(p->second.connection)); + + _adminConnections.erase(p->second.connection); } _sessions.erase(p); |