summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/SessionServantManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IceGrid/SessionServantManager.cpp')
-rw-r--r--cpp/src/IceGrid/SessionServantManager.cpp21
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);