summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
authorJose <jose@zeroc.com>2011-12-09 21:54:40 +0100
committerJose <jose@zeroc.com>2011-12-09 21:54:40 +0100
commit5e631923d9ab482455ec2c22a7f6148722f2b081 (patch)
tree0b69f0c374a72a1617ada3ac2c9594096ba204d5 /cpp
parent4711 - Only initiate connection shutdown if not already done (diff)
downloadice-5e631923d9ab482455ec2c22a7f6148722f2b081.tar.bz2
ice-5e631923d9ab482455ec2c22a7f6148722f2b081.tar.xz
ice-5e631923d9ab482455ec2c22a7f6148722f2b081.zip
Glacier2 SessionHelper related fixes
- Add C++ Glacier2/sessionHelper test - Fix helpers to dispatch connect failed in a separate thread ICE-4714 - No longer clear the communicator on connection lost or disconnect ICE-4707 - Glacier2.SessionHelper const/final ICE-4476
Diffstat (limited to 'cpp')
-rwxr-xr-xcpp/allTests.py1
-rw-r--r--cpp/include/Glacier2/SessionHelper.h107
-rw-r--r--cpp/src/Glacier2Lib/.depend1
-rw-r--r--cpp/src/Glacier2Lib/.depend.mak1
-rw-r--r--cpp/src/Glacier2Lib/Makefile3
-rw-r--r--cpp/src/Glacier2Lib/Makefile.mak3
-rw-r--r--cpp/src/Glacier2Lib/SessionFactoryHelper.cpp239
-rw-r--r--cpp/src/Glacier2Lib/SessionHelper.cpp458
-rw-r--r--cpp/test/Glacier2/Makefile1
-rw-r--r--cpp/test/Glacier2/Makefile.mak1
-rw-r--r--cpp/test/Glacier2/sessionHelper/.depend4
-rw-r--r--cpp/test/Glacier2/sessionHelper/.depend.mak4
-rw-r--r--cpp/test/Glacier2/sessionHelper/.gitignore7
-rw-r--r--cpp/test/Glacier2/sessionHelper/Callback.ice42
-rw-r--r--cpp/test/Glacier2/sessionHelper/Client.cpp470
-rw-r--r--cpp/test/Glacier2/sessionHelper/Makefile41
-rw-r--r--cpp/test/Glacier2/sessionHelper/Makefile.mak49
-rw-r--r--cpp/test/Glacier2/sessionHelper/Server.cpp71
-rw-r--r--cpp/test/Glacier2/sessionHelper/passwords1
-rwxr-xr-xcpp/test/Glacier2/sessionHelper/run.py45
20 files changed, 1163 insertions, 386 deletions
diff --git a/cpp/allTests.py b/cpp/allTests.py
index 33b7d8896cc..7e3c813e710 100755
--- a/cpp/allTests.py
+++ b/cpp/allTests.py
@@ -99,6 +99,7 @@ tests = [
("Glacier2/ssl", ["service", "novalgrind", "novc6"]), # valgrind doesn't work well with openssl
("Glacier2/dynamicFiltering", ["service", "novc6"]),
("Glacier2/staticFiltering", ["service", "noipv6", "novc6"]),
+ ("Glacier2/sessionHelper", ["service", "novc6"]),
]
#
diff --git a/cpp/include/Glacier2/SessionHelper.h b/cpp/include/Glacier2/SessionHelper.h
index 3dbe95faddf..2c3cb01a8cb 100644
--- a/cpp/include/Glacier2/SessionHelper.h
+++ b/cpp/include/Glacier2/SessionHelper.h
@@ -33,111 +33,37 @@ namespace Glacier2
const int GLACIER2_SSL_PORT = 4064;
const int GLACIER2_TCP_PORT = 4063;
-class SessionCallback;
-typedef IceUtil::Handle<SessionCallback> SessionCallbackPtr;
-
-class SessionHelper;
-typedef IceUtil::Handle<SessionHelper> SessionHelperPtr;
-
-class SessionFactoryHelper;
-typedef IceUtil::Handle<SessionFactoryHelper> SessionFactoryHelperPtr;
-
-class ConnectThread;
-class DestroyInternal;
-
-class SessionRefreshThread : public IceUtil::Thread
+class GLACIER2_API SessionHelper : public IceUtil::Shared
{
-
-public:
- SessionRefreshThread(const SessionHelperPtr&, const Glacier2::RouterPrx&, Ice::Long);
- virtual void run();
- void done();
- void success();
- void failure(const Ice::Exception&);
+public:
-private:
+ virtual void destroy() = 0;
+ virtual Ice::CommunicatorPtr communicator() const = 0;
+ virtual std::string categoryForClient() const = 0;
+ virtual Ice::ObjectPrx addWithUUID(const Ice::ObjectPtr&) = 0;
+ virtual Glacier2::SessionPrx session() const = 0;
+ virtual bool isConnected() const = 0;
+ virtual Ice::ObjectAdapterPtr objectAdapter() = 0;
- const Glacier2::Callback_Router_refreshSessionPtr _cb;
- const SessionHelperPtr _session;
- const Glacier2::RouterPrx _router;
- Ice::Long _period;
- bool _done;
- IceUtil::Monitor<IceUtil::Mutex> _monitor;
+ bool operator==(const Glacier2::SessionHelper&) const;
+ bool operator!=(const Glacier2::SessionHelper&) const;
};
-typedef IceUtil::Handle<SessionRefreshThread> SessionRefreshThreadPtr;
+typedef IceUtil::Handle<SessionHelper> SessionHelperPtr;
-class SessionCallback : public IceUtil::Shared
+class GLACIER2_API SessionCallback : public IceUtil::Shared
{
public:
-
- virtual ~SessionCallback(){}
+
virtual void createdCommunicator(const SessionHelperPtr& session) = 0;
virtual void connected(const SessionHelperPtr&) = 0;
virtual void disconnected(const SessionHelperPtr&) = 0;
virtual void connectFailed(const SessionHelperPtr&, const Ice::Exception&) = 0;
};
+typedef IceUtil::Handle<SessionCallback> SessionCallbackPtr;
-class ConnectStrategy : public IceUtil::Shared
-{
-
-public:
-
- virtual Glacier2::SessionPrx connect(const Glacier2::RouterPrx& router) = 0;
-};
-typedef IceUtil::Handle< ConnectStrategy> ConnectStrategyPtr;
-
-class SessionHelper : public IceUtil::Shared
-{
-
-public:
-
- SessionHelper(const SessionCallbackPtr&, const Ice::InitializationData&);
- void destroy();
- Ice::CommunicatorPtr communicator() const;
- std::string categoryForClient() const;
- Ice::ObjectPrx addWithUUID(const Ice::ObjectPtr&);
- Glacier2::SessionPrx session() const;
- bool isConnected() const;
- Ice::ObjectAdapterPtr objectAdapter();
-
- friend class Glacier2::DestroyInternal;
- friend class Glacier2::ConnectThread;
- friend class Glacier2::SessionFactoryHelper;
-
- bool operator==(const SessionHelper&) const;
- bool operator!=(const SessionHelper&) const;
-
-private:
-
- void destroy(const IceUtil::ThreadPtr&);
-
- Ice::ObjectAdapterPtr internalObjectAdapter();
- void connected(const RouterPrx&, const SessionPrx&);
- void destroyInternal(const Ice::DispatcherCallPtr&);
-
- void connect(const std::map<std::string, std::string>&);
- void connect(const std::string&, const std::string&, const std::map<std::string, std::string>&);
-
- void connectImpl(const ConnectStrategyPtr&);
- void dispatchCallback(const Ice::DispatcherCallPtr&, const Ice::ConnectionPtr&);
- void dispatchCallbackAndWait(const Ice::DispatcherCallPtr&, const Ice::ConnectionPtr&);
-
- IceUtil::Mutex _mutex;
- Ice::CommunicatorPtr _communicator;
- Ice::ObjectAdapterPtr _adapter;
- Glacier2::RouterPrx _router;
- Glacier2::SessionPrx _session;
- SessionRefreshThreadPtr _refreshThread;
- std::string _category;
- bool _connected;
- bool _destroy;
- Ice::InitializationData _initData;
- SessionCallbackPtr _callback;
-};
-
-class SessionFactoryHelper : public IceUtil::Shared
+class GLACIER2_API SessionFactoryHelper : public IceUtil::Shared
{
public:
@@ -183,6 +109,7 @@ private:
SessionCallbackPtr _callback;
std::map< std::string, std::string> _context;
};
+typedef IceUtil::Handle<SessionFactoryHelper> SessionFactoryHelperPtr;
}
diff --git a/cpp/src/Glacier2Lib/.depend b/cpp/src/Glacier2Lib/.depend
index a5ecc89316c..641dc06cd60 100644
--- a/cpp/src/Glacier2Lib/.depend
+++ b/cpp/src/Glacier2Lib/.depend
@@ -4,7 +4,6 @@ SSLInfo$(OBJEXT): SSLInfo.cpp $(includedir)/Glacier2/SSLInfo.h $(includedir)/Ice
Session$(OBJEXT): Session.cpp $(includedir)/Glacier2/Session.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/EndpointF.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/FactoryTableInit.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/Stream.h $(includedir)/Glacier2/SSLInfo.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/ObjectFactory.h $(includedir)/IceUtil/Iterator.h
Application$(OBJEXT): Application.cpp $(includedir)/Glacier2/Application.h $(includedir)/Ice/Application.h $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/Dispatcher.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/Stream.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/CommunicatorAsync.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Connection.h $(includedir)/Ice/ConnectionAsync.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/FactoryTableInit.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/Glacier2/Session.h $(includedir)/Glacier2/SSLInfo.h $(includedir)/Glacier2/Router.h $(includedir)/IceUtil/IceUtil.h $(includedir)/IceUtil/AbstractMutex.h $(includedir)/IceUtil/Cache.h $(includedir)/IceUtil/CountDownLatch.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/IceUtil/RWRecMutex.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/IceUtil/UUID.h $(includedir)/IceUtil/ArgVector.h
SessionHelper$(OBJEXT): SessionHelper.cpp $(includedir)/Glacier2/SessionHelper.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/Dispatcher.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/Stream.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/Ice.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/CommunicatorAsync.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/ConnectionAsync.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/FactoryTableInit.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/Glacier2/Session.h $(includedir)/Glacier2/SSLInfo.h $(includedir)/Glacier2/Router.h $(includedir)/IceUtil/UUID.h $(includedir)/IceUtil/CountDownLatch.h
-SessionFactoryHelper$(OBJEXT): SessionFactoryHelper.cpp $(includedir)/Glacier2/SessionHelper.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/Dispatcher.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/Stream.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/Ice.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/CommunicatorAsync.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/ConnectionAsync.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/FactoryTableInit.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/Glacier2/Session.h $(includedir)/Glacier2/SSLInfo.h $(includedir)/Glacier2/Router.h
PermissionsVerifierF.cpp: $(slicedir)/Glacier2/PermissionsVerifierF.ice $(SLICE2CPP) $(SLICEPARSERLIB)
PermissionsVerifier.cpp: $(slicedir)/Glacier2/PermissionsVerifier.ice $(slicedir)/Glacier2/SSLInfo.ice $(slicedir)/Ice/BuiltinSequences.ice $(SLICE2CPP) $(SLICEPARSERLIB)
Router.cpp: $(slicedir)/Glacier2/Router.ice $(slicedir)/Ice/Router.ice $(slicedir)/Ice/BuiltinSequences.ice $(slicedir)/Glacier2/Session.ice $(slicedir)/Ice/Identity.ice $(slicedir)/Glacier2/SSLInfo.ice $(SLICE2CPP) $(SLICEPARSERLIB)
diff --git a/cpp/src/Glacier2Lib/.depend.mak b/cpp/src/Glacier2Lib/.depend.mak
index cfaaf44a6dc..874d34700d7 100644
--- a/cpp/src/Glacier2Lib/.depend.mak
+++ b/cpp/src/Glacier2Lib/.depend.mak
@@ -4,7 +4,6 @@ SSLInfo$(OBJEXT): SSLInfo.cpp "$(includedir)/Glacier2/SSLInfo.h" "$(includedir)/
Session$(OBJEXT): Session.cpp "$(includedir)/Glacier2/Session.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/Ice/Handle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/Ice/Config.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointIF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/Ice/UndefSysMacros.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/GCShared.h" "$(includedir)/Ice/GCCountMap.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/Direct.h" "$(includedir)/Ice/FactoryTableInit.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/Ice/Stream.h" "$(includedir)/Glacier2/SSLInfo.h" "$(includedir)/Ice/LocalException.h" "$(includedir)/Ice/ObjectFactory.h" "$(includedir)/IceUtil/Iterator.h"
Application$(OBJEXT): Application.cpp "$(includedir)/Glacier2/Application.h" "$(includedir)/Ice/Application.h" "$(includedir)/Ice/Ice.h" "$(includedir)/Ice/Initialize.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/Ice/Handle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/Ice/Config.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/Ice/UndefSysMacros.h" "$(includedir)/Ice/PropertiesF.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointIF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/GCShared.h" "$(includedir)/Ice/GCCountMap.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/Ice/StatsF.h" "$(includedir)/Ice/Dispatcher.h" "$(includedir)/Ice/StringConverter.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/Ice/Stream.h" "$(includedir)/IceUtil/Unicode.h" "$(includedir)/Ice/LocalException.h" "$(includedir)/Ice/Properties.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/Direct.h" "$(includedir)/Ice/Logger.h" "$(includedir)/Ice/LoggerUtil.h" "$(includedir)/Ice/Stats.h" "$(includedir)/Ice/Communicator.h" "$(includedir)/Ice/RouterF.h" "$(includedir)/Ice/LocatorF.h" "$(includedir)/Ice/PluginF.h" "$(includedir)/Ice/ImplicitContextF.h" "$(includedir)/Ice/CommunicatorAsync.h" "$(includedir)/Ice/ObjectFactory.h" "$(includedir)/Ice/ObjectAdapter.h" "$(includedir)/Ice/FacetMap.h" "$(includedir)/Ice/Endpoint.h" "$(includedir)/Ice/ServantLocator.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/Process.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/ConnectionAsync.h" "$(includedir)/Ice/Functional.h" "$(includedir)/IceUtil/Functional.h" "$(includedir)/Ice/ImplicitContext.h" "$(includedir)/Ice/Locator.h" "$(includedir)/Ice/FactoryTableInit.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/ProcessF.h" "$(includedir)/Ice/Router.h" "$(includedir)/Ice/DispatchInterceptor.h" "$(includedir)/Ice/IconvStringConverter.h" "$(includedir)/Glacier2/Session.h" "$(includedir)/Glacier2/SSLInfo.h" "$(includedir)/Glacier2/Router.h" "$(includedir)/IceUtil/IceUtil.h" "$(includedir)/IceUtil/AbstractMutex.h" "$(includedir)/IceUtil/Cache.h" "$(includedir)/IceUtil/CountDownLatch.h" "$(includedir)/IceUtil/CtrlCHandler.h" "$(includedir)/IceUtil/MutexPtrLock.h" "$(includedir)/IceUtil/RWRecMutex.h" "$(includedir)/IceUtil/RecMutex.h" "$(includedir)/IceUtil/StaticMutex.h" "$(includedir)/IceUtil/UUID.h" "$(includedir)/IceUtil/ArgVector.h"
SessionHelper$(OBJEXT): SessionHelper.cpp "$(includedir)/Glacier2/SessionHelper.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/Initialize.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/Handle.h" "$(includedir)/Ice/Config.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/Ice/UndefSysMacros.h" "$(includedir)/Ice/PropertiesF.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointIF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/GCShared.h" "$(includedir)/Ice/GCCountMap.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/Ice/StatsF.h" "$(includedir)/Ice/Dispatcher.h" "$(includedir)/Ice/StringConverter.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/Ice/Stream.h" "$(includedir)/IceUtil/Unicode.h" "$(includedir)/Ice/Properties.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/Direct.h" "$(includedir)/Ice/Communicator.h" "$(includedir)/Ice/RouterF.h" "$(includedir)/Ice/LocatorF.h" "$(includedir)/Ice/PluginF.h" "$(includedir)/Ice/ImplicitContextF.h" "$(includedir)/Ice/ObjectAdapter.h" "$(includedir)/Ice/FacetMap.h" "$(includedir)/Ice/Endpoint.h" "$(includedir)/Ice/Ice.h" "$(includedir)/Ice/LocalException.h" "$(includedir)/Ice/Logger.h" "$(includedir)/Ice/LoggerUtil.h" "$(includedir)/Ice/Stats.h" "$(includedir)/Ice/CommunicatorAsync.h" "$(includedir)/Ice/ObjectFactory.h" "$(includedir)/Ice/ServantLocator.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/Process.h" "$(includedir)/Ice/Application.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/ConnectionAsync.h" "$(includedir)/Ice/Functional.h" "$(includedir)/IceUtil/Functional.h" "$(includedir)/Ice/ImplicitContext.h" "$(includedir)/Ice/Locator.h" "$(includedir)/Ice/FactoryTableInit.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/ProcessF.h" "$(includedir)/Ice/Router.h" "$(includedir)/Ice/DispatchInterceptor.h" "$(includedir)/Ice/IconvStringConverter.h" "$(includedir)/Glacier2/Session.h" "$(includedir)/Glacier2/SSLInfo.h" "$(includedir)/Glacier2/Router.h" "$(includedir)/IceUtil/UUID.h" "$(includedir)/IceUtil/CountDownLatch.h"
-SessionFactoryHelper$(OBJEXT): SessionFactoryHelper.cpp "$(includedir)/Glacier2/SessionHelper.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/Initialize.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/Handle.h" "$(includedir)/Ice/Config.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/Ice/UndefSysMacros.h" "$(includedir)/Ice/PropertiesF.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointIF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/GCShared.h" "$(includedir)/Ice/GCCountMap.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/Ice/StatsF.h" "$(includedir)/Ice/Dispatcher.h" "$(includedir)/Ice/StringConverter.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/Ice/Stream.h" "$(includedir)/IceUtil/Unicode.h" "$(includedir)/Ice/Properties.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/Direct.h" "$(includedir)/Ice/Communicator.h" "$(includedir)/Ice/RouterF.h" "$(includedir)/Ice/LocatorF.h" "$(includedir)/Ice/PluginF.h" "$(includedir)/Ice/ImplicitContextF.h" "$(includedir)/Ice/ObjectAdapter.h" "$(includedir)/Ice/FacetMap.h" "$(includedir)/Ice/Endpoint.h" "$(includedir)/Ice/Ice.h" "$(includedir)/Ice/LocalException.h" "$(includedir)/Ice/Logger.h" "$(includedir)/Ice/LoggerUtil.h" "$(includedir)/Ice/Stats.h" "$(includedir)/Ice/CommunicatorAsync.h" "$(includedir)/Ice/ObjectFactory.h" "$(includedir)/Ice/ServantLocator.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/Process.h" "$(includedir)/Ice/Application.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/ConnectionAsync.h" "$(includedir)/Ice/Functional.h" "$(includedir)/IceUtil/Functional.h" "$(includedir)/Ice/ImplicitContext.h" "$(includedir)/Ice/Locator.h" "$(includedir)/Ice/FactoryTableInit.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/ProcessF.h" "$(includedir)/Ice/Router.h" "$(includedir)/Ice/DispatchInterceptor.h" "$(includedir)/Ice/IconvStringConverter.h" "$(includedir)/Glacier2/Session.h" "$(includedir)/Glacier2/SSLInfo.h" "$(includedir)/Glacier2/Router.h"
PermissionsVerifierF.cpp: "$(slicedir)/Glacier2/PermissionsVerifierF.ice" "$(SLICE2CPP)" "$(SLICEPARSERLIB)"
PermissionsVerifier.cpp: "$(slicedir)/Glacier2/PermissionsVerifier.ice" "$(slicedir)/Glacier2/SSLInfo.ice" "$(slicedir)/Ice/BuiltinSequences.ice" "$(SLICE2CPP)" "$(SLICEPARSERLIB)"
Router.cpp: "$(slicedir)/Glacier2/Router.ice" "$(slicedir)/Ice/Router.ice" "$(slicedir)/Ice/BuiltinSequences.ice" "$(slicedir)/Glacier2/Session.ice" "$(slicedir)/Ice/Identity.ice" "$(slicedir)/Glacier2/SSLInfo.ice" "$(SLICE2CPP)" "$(SLICEPARSERLIB)"
diff --git a/cpp/src/Glacier2Lib/Makefile b/cpp/src/Glacier2Lib/Makefile
index df2bb89392e..ce0391e1790 100644
--- a/cpp/src/Glacier2Lib/Makefile
+++ b/cpp/src/Glacier2Lib/Makefile
@@ -21,8 +21,7 @@ OBJS = PermissionsVerifier.o \
SSLInfo.o \
Session.o \
Application.o \
- SessionHelper.o \
- SessionFactoryHelper.o
+ SessionHelper.o
SRCS = $(OBJS:.o=.cpp)
diff --git a/cpp/src/Glacier2Lib/Makefile.mak b/cpp/src/Glacier2Lib/Makefile.mak
index b40de8c0b4e..71d6bcf5063 100644
--- a/cpp/src/Glacier2Lib/Makefile.mak
+++ b/cpp/src/Glacier2Lib/Makefile.mak
@@ -19,8 +19,7 @@ OBJS = PermissionsVerifier.obj \
SSLInfo.obj \
Session.obj \
Application.obj \
- SessionHelper.obj \
- SessionFactoryHelper.obj
+ SessionHelper.obj
SRCS = $(OBJS:.obj=.cpp)
diff --git a/cpp/src/Glacier2Lib/SessionFactoryHelper.cpp b/cpp/src/Glacier2Lib/SessionFactoryHelper.cpp
deleted file mode 100644
index 4ff3ba75509..00000000000
--- a/cpp/src/Glacier2Lib/SessionFactoryHelper.cpp
+++ /dev/null
@@ -1,239 +0,0 @@
-// **********************************************************************
-//
-// Copyright (c) 2003-2011 ZeroC, Inc. All rights reserved.
-//
-// This copy of Ice is licensed to you under the terms described in the
-// ICE_LICENSE file included in this distribution.
-//
-// **********************************************************************
-
-#include <Glacier2/SessionHelper.h>
-
-using namespace std;
-
-Glacier2::SessionFactoryHelper::SessionFactoryHelper(const SessionCallbackPtr& callback) :
- _routerHost("127.0.0.1"),
- _secure(true),
- _port(0),
- _timeout(10000),
- _callback(callback)
-{
- _identity.name = "router";
- _identity.category = "Glacier2";
- _initData.properties = Ice::createProperties();
- setDefaultProperties();
-}
-
-Glacier2::SessionFactoryHelper::SessionFactoryHelper(const Ice::InitializationData& initData,
- const SessionCallbackPtr& callback) :
- _routerHost("127.0.0.1"),
- _secure(true),
- _port(0),
- _timeout(10000),
- _initData(initData),
- _callback(callback)
-{
- _identity.name = "router";
- _identity.category = "Glacier2";
- if(!initData.properties)
- {
- _initData.properties = Ice::createProperties();
- }
- setDefaultProperties();
-}
-
-Glacier2::SessionFactoryHelper::SessionFactoryHelper(const Ice::PropertiesPtr& properties, const SessionCallbackPtr& callback) :
- _routerHost("127.0.0.1"),
- _secure(true),
- _port(0),
- _timeout(10000),
- _callback(callback)
-{
- if(!properties)
- {
- throw Ice::InitializationException(
- __FILE__, __LINE__, "Attempt to create a SessionFactoryHelper with a null Properties argument");
- }
- _identity.name = "router";
- _identity.category = "Glacier2";
- _initData.properties = properties;
- setDefaultProperties();
-}
-
-void
-Glacier2::SessionFactoryHelper::setRouterIdentity(const Ice::Identity& identity)
-{
- IceUtil::Mutex::Lock sync(_mutex);
- _identity = identity;
-}
-
-Ice::Identity
-Glacier2::SessionFactoryHelper::getRouterIdentity() const
-{
- IceUtil::Mutex::Lock sync(_mutex);
- return _identity;
-}
-
-void
-Glacier2::SessionFactoryHelper::setRouterHost(const string& hostname)
-{
- IceUtil::Mutex::Lock sync(_mutex);
- _routerHost = hostname;
-}
-
-string
-Glacier2::SessionFactoryHelper::getRouterHost() const
-{
- IceUtil::Mutex::Lock sync(_mutex);
- return _routerHost;
-}
-
-void
-Glacier2::SessionFactoryHelper::setSecure(bool secure)
-{
- IceUtil::Mutex::Lock sync(_mutex);
- _secure = secure;
-}
-
-bool
-Glacier2::SessionFactoryHelper::getSecure() const
-{
- IceUtil::Mutex::Lock sync(_mutex);
- return _secure;
-}
-
-void
-Glacier2::SessionFactoryHelper::setTimeout(int timeout)
-{
- IceUtil::Mutex::Lock sync(_mutex);
- _timeout = timeout;
-}
-
-int
-Glacier2::SessionFactoryHelper::getTimeout() const
-{
- IceUtil::Mutex::Lock sync(_mutex);
- return _timeout;
-}
-
-void
-Glacier2::SessionFactoryHelper::setPort(int port)
-{
- IceUtil::Mutex::Lock sync(_mutex);
- _port = port;
-}
-
-int
-Glacier2::SessionFactoryHelper::getPort() const
-{
- IceUtil::Mutex::Lock sync(_mutex);
- return _port;
-}
-
-Ice::InitializationData
-Glacier2::SessionFactoryHelper::getInitializationData() const
-{
- IceUtil::Mutex::Lock sync(_mutex);
- return _initData;
-}
-
-void
-Glacier2::SessionFactoryHelper::setConnectContext(map<string, string> context)
-{
- IceUtil::Mutex::Lock sync(_mutex);
- _context = context;
-}
-
-Glacier2::SessionHelperPtr
-Glacier2::SessionFactoryHelper::connect()
-{
- IceUtil::Mutex::Lock sync(_mutex);
- Glacier2::SessionHelperPtr session = new Glacier2::SessionHelper(_callback, createInitData());
- session->connect(_context);
- return session;
-}
-
-Glacier2::SessionHelperPtr
-Glacier2::SessionFactoryHelper::connect(const string& user, const string& password)
-{
- IceUtil::Mutex::Lock sync(_mutex);
- Glacier2::SessionHelperPtr session = new Glacier2::SessionHelper(_callback, createInitData());
- session->connect(user, password, _context);
- return session;
-}
-
-Ice::InitializationData
-Glacier2::SessionFactoryHelper::createInitData()
-{
- //
- // Clone the initialization data and properties.
- //
- Ice::InitializationData initData = _initData;
- initData.properties = initData.properties->clone();
-
- if(initData.properties->getProperty("Ice.Default.Router").size() == 0)
- {
- ostringstream os;
- os << "\"";
-
- //
- // TODO replace with identityToString, we cannot use the Communicator::identityToString
- // current implementation because we need to do that before the communicator has been
- // initialized.
- //
- if(!_identity.category.empty())
- {
- os << _identity.category << "/";
- }
- os << _identity.name;
-
- os << "\"";
- os << ":";
- if(_secure)
- {
- os << "ssl -p ";
- }
- else
- {
- os << "tcp -p ";
- }
-
- if(_port != 0)
- {
- os << _port;
- }
- else
- {
- if(_secure)
- {
- os << GLACIER2_SSL_PORT;
- }
- else
- {
- os << GLACIER2_TCP_PORT;
- }
- }
-
- os << " -h ";
- os << _routerHost;
- if(_timeout > 0)
- {
- os << " -t ";
- os << _timeout;
- }
- initData.properties->setProperty("Ice.Default.Router", os.str());
- }
- return initData;
-}
-
-void
-Glacier2::SessionFactoryHelper::setDefaultProperties()
-{
- assert(_initData.properties);
- _initData.properties->setProperty("Ice.ACM.Client", "0");
- _initData.properties->setProperty("Ice.RetryIntervals", "-1");
- if(_secure)
- {
- _initData.properties->setProperty("Ice.Plugin.IceSSL","IceSSL:createIceSSL");
- }
-}
diff --git a/cpp/src/Glacier2Lib/SessionHelper.cpp b/cpp/src/Glacier2Lib/SessionHelper.cpp
index 04ad5fcd775..efacc6e7727 100644
--- a/cpp/src/Glacier2Lib/SessionHelper.cpp
+++ b/cpp/src/Glacier2Lib/SessionHelper.cpp
@@ -21,7 +21,16 @@ using namespace std;
namespace
{
+
+class ConnectStrategy : public IceUtil::Shared
+{
+
+public:
+ virtual Glacier2::SessionPrx connect(const Glacier2::RouterPrx& router) = 0;
+};
+typedef IceUtil::Handle< ConnectStrategy> ConnectStrategyPtr;
+
class Disconnected : public Ice::DispatcherCall
{
@@ -47,10 +56,79 @@ private:
const Glacier2::SessionCallbackPtr _callback;
};
-}
+class SessionRefreshThread : public IceUtil::Thread
+{
-Glacier2::SessionRefreshThread::SessionRefreshThread(const Glacier2::SessionHelperPtr& session,
- const Glacier2::RouterPrx& router, Ice::Long period) :
+public:
+
+ SessionRefreshThread(const Glacier2::SessionHelperPtr&, const Glacier2::RouterPrx&, Ice::Long);
+ virtual void run();
+ void done();
+ void success();
+ void failure(const Ice::Exception&);
+
+private:
+
+ const Glacier2::Callback_Router_refreshSessionPtr _cb;
+ const Glacier2::SessionHelperPtr _session;
+ const Glacier2::RouterPrx _router;
+ Ice::Long _period;
+ bool _done;
+ IceUtil::Monitor<IceUtil::Mutex> _monitor;
+};
+typedef IceUtil::Handle<SessionRefreshThread> SessionRefreshThreadPtr;
+
+class SessionHelperI : public Glacier2::SessionHelper
+{
+
+public:
+
+ SessionHelperI(const Glacier2::SessionCallbackPtr&, const Ice::InitializationData&);
+ void destroy();
+ Ice::CommunicatorPtr communicator() const;
+ std::string categoryForClient() const;
+ Ice::ObjectPrx addWithUUID(const Ice::ObjectPtr&);
+ Glacier2::SessionPrx session() const;
+ bool isConnected() const;
+ Ice::ObjectAdapterPtr objectAdapter();
+
+ friend class DestroyInternal;
+ friend class ConnectThread;
+ friend class DispatchCallThread;
+ friend class Glacier2::SessionFactoryHelper;
+
+private:
+
+ void destroy(const IceUtil::ThreadPtr&);
+
+ Ice::ObjectAdapterPtr internalObjectAdapter();
+ void connected(const Glacier2::RouterPrx&, const Glacier2::SessionPrx&);
+ void destroyInternal(const Ice::DispatcherCallPtr&);
+ void connectFailed();
+
+ void connect(const std::map<std::string, std::string>&);
+ void connect(const std::string&, const std::string&, const std::map<std::string, std::string>&);
+
+ void connectImpl(const ConnectStrategyPtr&);
+ void dispatchCallback(const Ice::DispatcherCallPtr&, const Ice::ConnectionPtr&);
+ void dispatchCallbackAndWait(const Ice::DispatcherCallPtr&, const Ice::ConnectionPtr&);
+
+ IceUtil::Mutex _mutex;
+ Ice::CommunicatorPtr _communicator;
+ Ice::ObjectAdapterPtr _adapter;
+ Glacier2::RouterPrx _router;
+ Glacier2::SessionPrx _session;
+ SessionRefreshThreadPtr _refreshThread;
+ std::string _category;
+ bool _connected;
+ bool _destroy;
+ const Ice::InitializationData _initData;
+ const Glacier2::SessionCallbackPtr _callback;
+};
+typedef IceUtil::Handle<SessionHelperI> SessionHelperIPtr;
+
+SessionRefreshThread::SessionRefreshThread(const Glacier2::SessionHelperPtr& session,
+ const Glacier2::RouterPrx& router, Ice::Long period) :
_cb(Glacier2::newCallback_Router_refreshSession(this, &SessionRefreshThread::success,
&SessionRefreshThread::failure)),
_session(session),
@@ -61,7 +139,7 @@ Glacier2::SessionRefreshThread::SessionRefreshThread(const Glacier2::SessionHelp
}
void
-Glacier2::SessionRefreshThread::run()
+SessionRefreshThread::run()
{
IceUtil::Monitor<IceUtil::Mutex>::Lock lock(_monitor);
while(true)
@@ -91,7 +169,7 @@ Glacier2::SessionRefreshThread::run()
}
void
-Glacier2::SessionRefreshThread::done()
+SessionRefreshThread::done()
{
IceUtil::Monitor<IceUtil::Mutex>::Lock lock(_monitor);
if(!_done)
@@ -102,23 +180,23 @@ Glacier2::SessionRefreshThread::done()
}
void
-Glacier2::SessionRefreshThread::success()
+SessionRefreshThread::success()
{
}
void
-Glacier2::SessionRefreshThread::failure(const Ice::Exception&)
+SessionRefreshThread::failure(const Ice::Exception&)
{
done();
_session->destroy();
}
-class Glacier2::DestroyInternal : public IceUtil::Thread
+class DestroyInternal : public IceUtil::Thread
{
public:
- DestroyInternal(const Glacier2::SessionHelperPtr& session, const Glacier2::SessionCallbackPtr& callback) :
+ DestroyInternal(const SessionHelperIPtr& session, const Glacier2::SessionCallbackPtr& callback) :
_session(session),
_disconnected(new Disconnected(session, callback))
{
@@ -131,12 +209,14 @@ public:
private:
- const Glacier2::SessionHelperPtr _session;
+ const SessionHelperIPtr _session;
const Ice::DispatcherCallPtr _disconnected;
};
-Glacier2::SessionHelper::SessionHelper(const Glacier2::SessionCallbackPtr& callback,
- const Ice::InitializationData& initData) :
+}
+
+SessionHelperI::SessionHelperI(const Glacier2::SessionCallbackPtr& callback,
+ const Ice::InitializationData& initData) :
_connected(false),
_destroy(false),
_initData(initData),
@@ -145,14 +225,14 @@ Glacier2::SessionHelper::SessionHelper(const Glacier2::SessionCallbackPtr& callb
}
void
-Glacier2::SessionHelper::destroy()
+SessionHelperI::destroy()
{
IceUtil::Mutex::Lock sync(_mutex);
- destroy(new Glacier2::DestroyInternal(this, _callback));
+ destroy(new DestroyInternal(this, _callback));
}
void
-Glacier2::SessionHelper::destroy(const IceUtil::ThreadPtr& destroyInternal)
+SessionHelperI::destroy(const IceUtil::ThreadPtr& destroyInternal)
{
if(_destroy)
{
@@ -160,7 +240,7 @@ Glacier2::SessionHelper::destroy(const IceUtil::ThreadPtr& destroyInternal)
}
_destroy = true;
- if(!_refreshThread)
+ if(!_connected)
{
//
// In this case a connecting session is being
@@ -171,6 +251,7 @@ Glacier2::SessionHelper::destroy(const IceUtil::ThreadPtr& destroyInternal)
return;
}
_session = 0;
+ _connected = false;
//
// Run the destroyInternal in a thread. This is because it
@@ -180,31 +261,30 @@ Glacier2::SessionHelper::destroy(const IceUtil::ThreadPtr& destroyInternal)
}
Ice::CommunicatorPtr
-Glacier2::SessionHelper::communicator() const
+SessionHelperI::communicator() const
{
IceUtil::Mutex::Lock sync(_mutex);
return _communicator;
}
string
-Glacier2::SessionHelper::categoryForClient() const
+SessionHelperI::categoryForClient() const
{
IceUtil::Mutex::Lock sync(_mutex);
if(!_router)
{
- throw SessionNotExistException();
+ throw Glacier2::SessionNotExistException();
}
-
return _category;
}
Ice::ObjectPrx
-Glacier2::SessionHelper::addWithUUID(const Ice::ObjectPtr& servant)
+SessionHelperI::addWithUUID(const Ice::ObjectPtr& servant)
{
IceUtil::Mutex::Lock sync(_mutex);
if(!_router)
{
- throw SessionNotExistException();
+ throw Glacier2::SessionNotExistException();
}
Ice::Identity id;
id.name = IceUtil::generateUUID();
@@ -213,48 +293,48 @@ Glacier2::SessionHelper::addWithUUID(const Ice::ObjectPtr& servant)
}
Glacier2::SessionPrx
-Glacier2::SessionHelper::session() const
+SessionHelperI::session() const
{
IceUtil::Mutex::Lock sync(_mutex);
if(!_session)
{
- throw new SessionNotExistException();
+ throw new Glacier2::SessionNotExistException();
}
return _session;
}
bool
-Glacier2::SessionHelper::isConnected() const
+SessionHelperI::isConnected() const
{
IceUtil::Mutex::Lock sync(_mutex);
return _connected;
}
Ice::ObjectAdapterPtr
-Glacier2::SessionHelper::objectAdapter()
+SessionHelperI::objectAdapter()
{
IceUtil::Mutex::Lock sync(_mutex);
return internalObjectAdapter();
}
bool
-Glacier2::SessionHelper::operator==(const SessionHelper& other) const
+Glacier2::SessionHelper::operator==(const Glacier2::SessionHelper& other) const
{
return this == &other;
}
bool
-Glacier2::SessionHelper::operator!=(const SessionHelper& other) const
+Glacier2::SessionHelper::operator!=(const Glacier2::SessionHelper& other) const
{
return this != &other;
}
Ice::ObjectAdapterPtr
-Glacier2::SessionHelper::internalObjectAdapter()
+SessionHelperI::internalObjectAdapter()
{
if(!_router)
{
- throw SessionNotExistException();
+ throw Glacier2::SessionNotExistException();
}
if(!_adapter)
{
@@ -267,7 +347,7 @@ Glacier2::SessionHelper::internalObjectAdapter()
namespace
{
-class ConnectStrategySecureConnection : public Glacier2::ConnectStrategy
+class ConnectStrategySecureConnection : public ConnectStrategy
{
public:
@@ -288,7 +368,7 @@ private:
const map<string, string> _context;
};
-class ConnectStrategyUserPassword : public Glacier2::ConnectStrategy
+class ConnectStrategyUserPassword : public ConnectStrategy
{
public:
@@ -316,24 +396,26 @@ private:
}
void
-Glacier2::SessionHelper::connect(const map<string, string>& context)
+SessionHelperI::connect(const map<string, string>& context)
{
+ IceUtil::Mutex::Lock sync(_mutex);
connectImpl(new ConnectStrategySecureConnection(context));
}
void
-Glacier2::SessionHelper::connect(const string& user, const string& password, const map<string, string>& context)
+SessionHelperI::connect(const string& user, const string& password, const map<string, string>& context)
{
+ IceUtil::Mutex::Lock sync(_mutex);
connectImpl(new ConnectStrategyUserPassword(user, password, context));
}
void
-Glacier2::SessionHelper::destroyInternal(const Ice::DispatcherCallPtr& disconnected)
+SessionHelperI::destroyInternal(const Ice::DispatcherCallPtr& disconnected)
{
assert(_destroy);
Ice::CommunicatorPtr communicator;
Glacier2::RouterPrx router;
- Glacier2::SessionRefreshThreadPtr refreshThread;
+ SessionRefreshThreadPtr refreshThread;
{
IceUtil::Mutex::Lock sync(_mutex);
router = _router;
@@ -344,7 +426,6 @@ Glacier2::SessionHelper::destroyInternal(const Ice::DispatcherCallPtr& disconnec
_refreshThread = 0;
communicator = _communicator;
- _communicator = 0;
}
if(router)
@@ -401,6 +482,27 @@ Glacier2::SessionHelper::destroyInternal(const Ice::DispatcherCallPtr& disconnec
dispatchCallback(disconnected, 0);
}
+void
+SessionHelperI::connectFailed()
+{
+ Ice::CommunicatorPtr communicator;
+ {
+ IceUtil::Mutex::Lock sync(_mutex);
+ communicator = _communicator;
+ }
+
+ if(communicator)
+ {
+ try
+ {
+ communicator->destroy();
+ }
+ catch(...)
+ {
+ }
+ }
+}
+
namespace
{
@@ -454,15 +556,13 @@ private:
const Glacier2::SessionHelperPtr _session;
};
-}
-
-class Glacier2::ConnectThread : public IceUtil::Thread
+class ConnectThread : public IceUtil::Thread
{
public:
- ConnectThread(const Glacier2::SessionCallbackPtr& callback, const Glacier2::SessionHelperPtr& session,
- const Glacier2::ConnectStrategyPtr& factory, const Ice::CommunicatorPtr& communicator) :
+ ConnectThread(const Glacier2::SessionCallbackPtr& callback, const SessionHelperIPtr& session,
+ const ConnectStrategyPtr& factory, const Ice::CommunicatorPtr& communicator) :
_callback(callback),
_session(session),
_factory(factory),
@@ -484,7 +584,7 @@ public:
{
try
{
- _communicator->destroy();
+ _session->connectFailed();
}
catch(...)
{
@@ -497,13 +597,41 @@ public:
private:
const Glacier2::SessionCallbackPtr _callback;
- const Glacier2::SessionHelperPtr _session;
- const Glacier2::ConnectStrategyPtr _factory;
+ const SessionHelperIPtr _session;
+ const ConnectStrategyPtr _factory;
const Ice::CommunicatorPtr _communicator;
};
+
+class DispatchCallThread : public IceUtil::Thread
+{
+
+public:
+
+ DispatchCallThread(const SessionHelperIPtr& session, const Ice::DispatcherCallPtr& call,
+ const Ice::ConnectionPtr& conn) :
+ _session(session),
+ _call(call),
+ _conn(conn)
+ {
+ }
+
+ virtual void run()
+ {
+ _session->dispatchCallback(_call, _conn);
+ }
+
+private:
+
+ const SessionHelperIPtr _session;
+ const Ice::DispatcherCallPtr _call;
+ const Ice::ConnectionPtr _conn;
+};
+
+}
+
void
-Glacier2::SessionHelper::connectImpl(const ConnectStrategyPtr& factory)
+SessionHelperI::connectImpl(const ConnectStrategyPtr& factory)
{
assert(!_destroy);
@@ -514,7 +642,8 @@ Glacier2::SessionHelper::connectImpl(const ConnectStrategyPtr& factory)
catch(const Ice::LocalException& ex)
{
_destroy = true;
- dispatchCallback(new ConnectFailed(_callback, this, ex), 0);
+ IceUtil::ThreadPtr thread = new DispatchCallThread(this, new ConnectFailed(_callback, this, ex), 0);
+ thread->start();
return;
}
@@ -558,7 +687,7 @@ private:
}
void
-Glacier2::SessionHelper::connected(const Glacier2::RouterPrx& router, const Glacier2::SessionPrx& session)
+SessionHelperI::connected(const Glacier2::RouterPrx& router, const Glacier2::SessionPrx& session)
{
//
// Remote invocation should be done without acquire a mutex lock.
@@ -578,7 +707,7 @@ Glacier2::SessionHelper::connected(const Glacier2::RouterPrx& router, const Glac
// Run the destroyInternal in a thread. This is because it
// destroyInternal makes remote invocations.
//
- IceUtil::ThreadPtr thread = new Glacier2::DestroyInternal(this, _callback);
+ IceUtil::ThreadPtr thread = new DestroyInternal(this, _callback);
thread->start();
return;
}
@@ -606,7 +735,7 @@ Glacier2::SessionHelper::connected(const Glacier2::RouterPrx& router, const Glac
}
void
-Glacier2::SessionHelper::dispatchCallback(const Ice::DispatcherCallPtr& call, const Ice::ConnectionPtr& conn)
+SessionHelperI::dispatchCallback(const Ice::DispatcherCallPtr& call, const Ice::ConnectionPtr& conn)
{
if(_initData.dispatcher)
{
@@ -649,7 +778,7 @@ private:
}
void
-Glacier2::SessionHelper::dispatchCallbackAndWait(const Ice::DispatcherCallPtr& call, const Ice::ConnectionPtr& conn)
+SessionHelperI::dispatchCallbackAndWait(const Ice::DispatcherCallPtr& call, const Ice::ConnectionPtr& conn)
{
if(_initData.dispatcher)
{
@@ -663,3 +792,230 @@ Glacier2::SessionHelper::dispatchCallbackAndWait(const Ice::DispatcherCallPtr& c
call->run();
}
}
+
+Glacier2::SessionFactoryHelper::SessionFactoryHelper(const SessionCallbackPtr& callback) :
+ _routerHost("127.0.0.1"),
+ _secure(true),
+ _port(0),
+ _timeout(10000),
+ _callback(callback)
+{
+ _identity.name = "router";
+ _identity.category = "Glacier2";
+ _initData.properties = Ice::createProperties();
+ setDefaultProperties();
+}
+
+Glacier2::SessionFactoryHelper::SessionFactoryHelper(const Ice::InitializationData& initData,
+ const SessionCallbackPtr& callback) :
+ _routerHost("127.0.0.1"),
+ _secure(true),
+ _port(0),
+ _timeout(10000),
+ _initData(initData),
+ _callback(callback)
+{
+ _identity.name = "router";
+ _identity.category = "Glacier2";
+ if(!initData.properties)
+ {
+ _initData.properties = Ice::createProperties();
+ }
+ setDefaultProperties();
+}
+
+Glacier2::SessionFactoryHelper::SessionFactoryHelper(const Ice::PropertiesPtr& properties, const SessionCallbackPtr& callback) :
+ _routerHost("127.0.0.1"),
+ _secure(true),
+ _port(0),
+ _timeout(10000),
+ _callback(callback)
+{
+ if(!properties)
+ {
+ throw Ice::InitializationException(
+ __FILE__, __LINE__, "Attempt to create a SessionFactoryHelper with a null Properties argument");
+ }
+ _identity.name = "router";
+ _identity.category = "Glacier2";
+ _initData.properties = properties;
+ setDefaultProperties();
+}
+
+void
+Glacier2::SessionFactoryHelper::setRouterIdentity(const Ice::Identity& identity)
+{
+ IceUtil::Mutex::Lock sync(_mutex);
+ _identity = identity;
+}
+
+Ice::Identity
+Glacier2::SessionFactoryHelper::getRouterIdentity() const
+{
+ IceUtil::Mutex::Lock sync(_mutex);
+ return _identity;
+}
+
+void
+Glacier2::SessionFactoryHelper::setRouterHost(const string& hostname)
+{
+ IceUtil::Mutex::Lock sync(_mutex);
+ _routerHost = hostname;
+}
+
+string
+Glacier2::SessionFactoryHelper::getRouterHost() const
+{
+ IceUtil::Mutex::Lock sync(_mutex);
+ return _routerHost;
+}
+
+void
+Glacier2::SessionFactoryHelper::setSecure(bool secure)
+{
+ IceUtil::Mutex::Lock sync(_mutex);
+ _secure = secure;
+}
+
+bool
+Glacier2::SessionFactoryHelper::getSecure() const
+{
+ IceUtil::Mutex::Lock sync(_mutex);
+ return _secure;
+}
+
+void
+Glacier2::SessionFactoryHelper::setTimeout(int timeout)
+{
+ IceUtil::Mutex::Lock sync(_mutex);
+ _timeout = timeout;
+}
+
+int
+Glacier2::SessionFactoryHelper::getTimeout() const
+{
+ IceUtil::Mutex::Lock sync(_mutex);
+ return _timeout;
+}
+
+void
+Glacier2::SessionFactoryHelper::setPort(int port)
+{
+ IceUtil::Mutex::Lock sync(_mutex);
+ _port = port;
+}
+
+int
+Glacier2::SessionFactoryHelper::getPort() const
+{
+ IceUtil::Mutex::Lock sync(_mutex);
+ return _port;
+}
+
+Ice::InitializationData
+Glacier2::SessionFactoryHelper::getInitializationData() const
+{
+ IceUtil::Mutex::Lock sync(_mutex);
+ return _initData;
+}
+
+void
+Glacier2::SessionFactoryHelper::setConnectContext(map<string, string> context)
+{
+ IceUtil::Mutex::Lock sync(_mutex);
+ _context = context;
+}
+
+Glacier2::SessionHelperPtr
+Glacier2::SessionFactoryHelper::connect()
+{
+ IceUtil::Mutex::Lock sync(_mutex);
+ SessionHelperIPtr session = new SessionHelperI(_callback, createInitData());
+ session->connect(_context);
+ return session;
+}
+
+Glacier2::SessionHelperPtr
+Glacier2::SessionFactoryHelper::connect(const string& user, const string& password)
+{
+ IceUtil::Mutex::Lock sync(_mutex);
+ SessionHelperIPtr session = new SessionHelperI(_callback, createInitData());
+ session->connect(user, password, _context);
+ return session;
+}
+
+Ice::InitializationData
+Glacier2::SessionFactoryHelper::createInitData()
+{
+ //
+ // Clone the initialization data and properties.
+ //
+ Ice::InitializationData initData = _initData;
+ initData.properties = initData.properties->clone();
+
+ if(initData.properties->getProperty("Ice.Default.Router").size() == 0)
+ {
+ ostringstream os;
+ os << "\"";
+
+ //
+ // TODO replace with identityToString, we cannot use the Communicator::identityToString
+ // current implementation because we need to do that before the communicator has been
+ // initialized.
+ //
+ if(!_identity.category.empty())
+ {
+ os << _identity.category << "/";
+ }
+ os << _identity.name;
+
+ os << "\"";
+ os << ":";
+ if(_secure)
+ {
+ os << "ssl -p ";
+ }
+ else
+ {
+ os << "tcp -p ";
+ }
+
+ if(_port != 0)
+ {
+ os << _port;
+ }
+ else
+ {
+ if(_secure)
+ {
+ os << GLACIER2_SSL_PORT;
+ }
+ else
+ {
+ os << GLACIER2_TCP_PORT;
+ }
+ }
+
+ os << " -h ";
+ os << _routerHost;
+ if(_timeout > 0)
+ {
+ os << " -t ";
+ os << _timeout;
+ }
+ initData.properties->setProperty("Ice.Default.Router", os.str());
+ }
+ return initData;
+}
+
+void
+Glacier2::SessionFactoryHelper::setDefaultProperties()
+{
+ assert(_initData.properties);
+ _initData.properties->setProperty("Ice.ACM.Client", "0");
+ _initData.properties->setProperty("Ice.RetryIntervals", "-1");
+ if(_secure)
+ {
+ _initData.properties->setProperty("Ice.Plugin.IceSSL","IceSSL:createIceSSL");
+ }
+}
diff --git a/cpp/test/Glacier2/Makefile b/cpp/test/Glacier2/Makefile
index f1bb45994b1..2d1549e6d3f 100644
--- a/cpp/test/Glacier2/Makefile
+++ b/cpp/test/Glacier2/Makefile
@@ -17,6 +17,7 @@ SUBDIRS = router \
staticFiltering \
dynamicFiltering \
sessionControl \
+ sessionHelper \
ssl
$(EVERYTHING)::
diff --git a/cpp/test/Glacier2/Makefile.mak b/cpp/test/Glacier2/Makefile.mak
index b570cb73801..a78aeeaf38e 100644
--- a/cpp/test/Glacier2/Makefile.mak
+++ b/cpp/test/Glacier2/Makefile.mak
@@ -17,6 +17,7 @@ SUBDIRS = router \
staticFiltering \
dynamicFiltering \
sessionControl \
+ sessionHelper \
ssl
$(EVERYTHING)::
diff --git a/cpp/test/Glacier2/sessionHelper/.depend b/cpp/test/Glacier2/sessionHelper/.depend
new file mode 100644
index 00000000000..f9a77b642c6
--- /dev/null
+++ b/cpp/test/Glacier2/sessionHelper/.depend
@@ -0,0 +1,4 @@
+Callback$(OBJEXT): Callback.cpp Callback.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/EndpointF.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/FactoryTableInit.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ObjectFactory.h $(includedir)/IceUtil/Iterator.h
+Client$(OBJEXT): Client.cpp $(includedir)/IceUtil/IceUtil.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/AbstractMutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Cache.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/IceUtil/CountDownLatch.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/IceUtil/Functional.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/IceUtil/RWRecMutex.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/UUID.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/Dispatcher.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/Stream.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/CommunicatorAsync.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/ConnectionAsync.h $(includedir)/Ice/Functional.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/FactoryTableInit.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/Glacier2/Glacier2.h $(includedir)/Glacier2/Router.h $(includedir)/Glacier2/Session.h $(includedir)/Glacier2/SSLInfo.h $(includedir)/Glacier2/PermissionsVerifier.h $(includedir)/Glacier2/Application.h $(includedir)/Glacier2/SessionHelper.h ../../include/TestCommon.h Callback.h
+Server$(OBJEXT): Server.cpp $(includedir)/IceUtil/IceUtil.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/AbstractMutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Cache.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/MutexProtocol.h $(includedir)/IceUtil/CountDownLatch.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/IceUtil/Functional.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/MutexPtrLock.h $(includedir)/IceUtil/RWRecMutex.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/UUID.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/IceUtil/ScopedArray.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/Dispatcher.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/Stream.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/CommunicatorAsync.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/ConnectionAsync.h $(includedir)/Ice/Functional.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/FactoryTableInit.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h Callback.h
+Callback.cpp: Callback.ice $(SLICE2CPP) $(SLICEPARSERLIB)
diff --git a/cpp/test/Glacier2/sessionHelper/.depend.mak b/cpp/test/Glacier2/sessionHelper/.depend.mak
new file mode 100644
index 00000000000..d211f668d41
--- /dev/null
+++ b/cpp/test/Glacier2/sessionHelper/.depend.mak
@@ -0,0 +1,4 @@
+Callback$(OBJEXT): Callback.cpp Callback.h "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/Ice/Handle.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/Ice/Config.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointIF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/Ice/UndefSysMacros.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/GCShared.h" "$(includedir)/Ice/GCCountMap.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/Direct.h" "$(includedir)/Ice/FactoryTableInit.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/LocalException.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/Ice/Stream.h" "$(includedir)/Ice/ObjectFactory.h" "$(includedir)/IceUtil/Iterator.h"
+Client$(OBJEXT): Client.cpp "$(includedir)/IceUtil/IceUtil.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/IceUtil/AbstractMutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/Cache.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/IceUtil/CountDownLatch.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/CtrlCHandler.h" "$(includedir)/IceUtil/Functional.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/MutexPtrLock.h" "$(includedir)/IceUtil/RWRecMutex.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/RecMutex.h" "$(includedir)/IceUtil/StaticMutex.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/UUID.h" "$(includedir)/IceUtil/Unicode.h" "$(includedir)/Ice/Ice.h" "$(includedir)/Ice/Initialize.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/Handle.h" "$(includedir)/Ice/Config.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/Ice/UndefSysMacros.h" "$(includedir)/Ice/PropertiesF.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointIF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/GCShared.h" "$(includedir)/Ice/GCCountMap.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/Ice/StatsF.h" "$(includedir)/Ice/Dispatcher.h" "$(includedir)/Ice/StringConverter.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/Ice/Stream.h" "$(includedir)/Ice/LocalException.h" "$(includedir)/Ice/Properties.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/Direct.h" "$(includedir)/Ice/Logger.h" "$(includedir)/Ice/LoggerUtil.h" "$(includedir)/Ice/Stats.h" "$(includedir)/Ice/Communicator.h" "$(includedir)/Ice/RouterF.h" "$(includedir)/Ice/LocatorF.h" "$(includedir)/Ice/PluginF.h" "$(includedir)/Ice/ImplicitContextF.h" "$(includedir)/Ice/CommunicatorAsync.h" "$(includedir)/Ice/ObjectFactory.h" "$(includedir)/Ice/ObjectAdapter.h" "$(includedir)/Ice/FacetMap.h" "$(includedir)/Ice/Endpoint.h" "$(includedir)/Ice/ServantLocator.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/Process.h" "$(includedir)/Ice/Application.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/ConnectionAsync.h" "$(includedir)/Ice/Functional.h" "$(includedir)/Ice/ImplicitContext.h" "$(includedir)/Ice/Locator.h" "$(includedir)/Ice/FactoryTableInit.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/ProcessF.h" "$(includedir)/Ice/Router.h" "$(includedir)/Ice/DispatchInterceptor.h" "$(includedir)/Ice/IconvStringConverter.h" "$(includedir)/Glacier2/Glacier2.h" "$(includedir)/Glacier2/Router.h" "$(includedir)/Glacier2/Session.h" "$(includedir)/Glacier2/SSLInfo.h" "$(includedir)/Glacier2/PermissionsVerifier.h" "$(includedir)/Glacier2/Application.h" "$(includedir)/Glacier2/SessionHelper.h" ../../include/TestCommon.h Callback.h
+Server$(OBJEXT): Server.cpp "$(includedir)/IceUtil/IceUtil.h" "$(includedir)/IceUtil/Config.h" "$(includedir)/IceUtil/AbstractMutex.h" "$(includedir)/IceUtil/Lock.h" "$(includedir)/IceUtil/ThreadException.h" "$(includedir)/IceUtil/Exception.h" "$(includedir)/IceUtil/Time.h" "$(includedir)/IceUtil/Cache.h" "$(includedir)/IceUtil/Handle.h" "$(includedir)/IceUtil/Mutex.h" "$(includedir)/IceUtil/MutexProtocol.h" "$(includedir)/IceUtil/CountDownLatch.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/CtrlCHandler.h" "$(includedir)/IceUtil/Functional.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/MutexPtrLock.h" "$(includedir)/IceUtil/RWRecMutex.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/IceUtil/Shared.h" "$(includedir)/IceUtil/RecMutex.h" "$(includedir)/IceUtil/StaticMutex.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/UUID.h" "$(includedir)/IceUtil/Unicode.h" "$(includedir)/Ice/Ice.h" "$(includedir)/Ice/Initialize.h" "$(includedir)/Ice/CommunicatorF.h" "$(includedir)/Ice/LocalObjectF.h" "$(includedir)/Ice/Handle.h" "$(includedir)/Ice/Config.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ProxyF.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/IceUtil/ScopedArray.h" "$(includedir)/Ice/UndefSysMacros.h" "$(includedir)/Ice/PropertiesF.h" "$(includedir)/Ice/Proxy.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointIF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/GCShared.h" "$(includedir)/Ice/GCCountMap.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/Ice/StatsF.h" "$(includedir)/Ice/Dispatcher.h" "$(includedir)/Ice/StringConverter.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/Ice/Stream.h" "$(includedir)/Ice/LocalException.h" "$(includedir)/Ice/Properties.h" "$(includedir)/Ice/Outgoing.h" "$(includedir)/Ice/Incoming.h" "$(includedir)/Ice/ServantLocatorF.h" "$(includedir)/Ice/ServantManagerF.h" "$(includedir)/Ice/Direct.h" "$(includedir)/Ice/Logger.h" "$(includedir)/Ice/LoggerUtil.h" "$(includedir)/Ice/Stats.h" "$(includedir)/Ice/Communicator.h" "$(includedir)/Ice/RouterF.h" "$(includedir)/Ice/LocatorF.h" "$(includedir)/Ice/PluginF.h" "$(includedir)/Ice/ImplicitContextF.h" "$(includedir)/Ice/CommunicatorAsync.h" "$(includedir)/Ice/ObjectFactory.h" "$(includedir)/Ice/ObjectAdapter.h" "$(includedir)/Ice/FacetMap.h" "$(includedir)/Ice/Endpoint.h" "$(includedir)/Ice/ServantLocator.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/Process.h" "$(includedir)/Ice/Application.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/ConnectionAsync.h" "$(includedir)/Ice/Functional.h" "$(includedir)/Ice/ImplicitContext.h" "$(includedir)/Ice/Locator.h" "$(includedir)/Ice/FactoryTableInit.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/ProcessF.h" "$(includedir)/Ice/Router.h" "$(includedir)/Ice/DispatchInterceptor.h" "$(includedir)/Ice/IconvStringConverter.h" Callback.h
+Callback.cpp: Callback.ice "$(SLICE2CPP)" "$(SLICEPARSERLIB)"
diff --git a/cpp/test/Glacier2/sessionHelper/.gitignore b/cpp/test/Glacier2/sessionHelper/.gitignore
new file mode 100644
index 00000000000..1cb01a674d1
--- /dev/null
+++ b/cpp/test/Glacier2/sessionHelper/.gitignore
@@ -0,0 +1,7 @@
+// Generated by makegitignore.py
+
+// IMPORTANT: Do not edit this file -- any edits made here will be lost!
+client
+server
+Callback.cpp
+Callback.h
diff --git a/cpp/test/Glacier2/sessionHelper/Callback.ice b/cpp/test/Glacier2/sessionHelper/Callback.ice
new file mode 100644
index 00000000000..64687203df4
--- /dev/null
+++ b/cpp/test/Glacier2/sessionHelper/Callback.ice
@@ -0,0 +1,42 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2011 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+#ifndef CALLBACK_ICE
+#define CALLBACK_ICE
+
+module Test
+{
+
+exception CallbackException
+{
+ double someValue;
+ string someString;
+};
+
+interface CallbackReceiver
+{
+ void callback();
+
+ void callbackEx()
+ throws CallbackException;
+};
+
+interface Callback
+{
+ void initiateCallback(CallbackReceiver* proxy);
+
+ void initiateCallbackEx(CallbackReceiver* proxy)
+ throws CallbackException;
+
+ void shutdown();
+};
+
+};
+
+#endif
diff --git a/cpp/test/Glacier2/sessionHelper/Client.cpp b/cpp/test/Glacier2/sessionHelper/Client.cpp
new file mode 100644
index 00000000000..8d8da2a5dcd
--- /dev/null
+++ b/cpp/test/Glacier2/sessionHelper/Client.cpp
@@ -0,0 +1,470 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2011 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+#include <IceUtil/IceUtil.h>
+#include <Ice/Ice.h>
+#include <Glacier2/Glacier2.h>
+
+#include <TestCommon.h>
+
+#include <iostream>
+#include <iomanip>
+#include <list>
+
+#include <Callback.h>
+
+using namespace std;
+using namespace Test;
+
+namespace
+{
+
+class Notify
+{
+public:
+
+ virtual void notify() = 0;
+};
+
+Notify* instance = 0;
+
+class Dispatcher : public Ice::Dispatcher, public IceUtil::Thread
+{
+
+public:
+
+ Dispatcher():
+ _destroyed(false)
+ {
+ }
+
+ virtual void
+ dispatch(const Ice::DispatcherCallPtr& call,
+ const Ice::ConnectionPtr& conn)
+ {
+ IceUtil::Monitor<IceUtil::Mutex>::Lock lock(_monitor);
+ if(_queue.empty())
+ {
+ _monitor.notify();
+ }
+ _queue.push_back(call);
+ }
+
+ virtual void
+ destroy()
+ {
+ IceUtil::Monitor<IceUtil::Mutex>::Lock lock(_monitor);
+ _destroyed = true;
+ _monitor.notify();
+ }
+
+ virtual void
+ run()
+ {
+ while(1)
+ {
+ Ice::DispatcherCallPtr item = nextItem();
+ if(!item)
+ {
+ break;
+ }
+ item->run();
+ }
+ }
+
+private:
+
+ Ice::DispatcherCallPtr
+ nextItem()
+ {
+ IceUtil::Monitor<IceUtil::Mutex>::Lock lock(_monitor);
+ while(_queue.empty())
+ {
+ if(_destroyed)
+ {
+ return 0;
+ }
+ _monitor.wait();
+ }
+ Ice::DispatcherCallPtr item = _queue.front();
+ _queue.pop_front();
+ return item;
+ }
+
+
+ IceUtil::Monitor<IceUtil::Mutex> _monitor;
+ list<Ice::DispatcherCallPtr> _queue;
+ bool _destroyed;
+};
+typedef IceUtil::Handle<Dispatcher> DispatcherPtr;
+
+class SuccessSessionCallback : public Glacier2::SessionCallback
+{
+
+public:
+
+ virtual void
+ connected(const Glacier2::SessionHelperPtr& session)
+ {
+ cout << "ok" << endl;
+ instance->notify();
+ }
+
+ virtual void
+ disconnected(const Glacier2::SessionHelperPtr& session)
+ {
+ cout << "ok" << endl;
+ instance->notify();
+ }
+
+ virtual void
+ connectFailed(const Glacier2::SessionHelperPtr&, const Ice::Exception&)
+ {
+ test(false);
+ }
+
+ virtual void
+ createdCommunicator(const Glacier2::SessionHelperPtr& session)
+ {
+ test(session->communicator());
+ }
+};
+
+class AfterShutdownSessionCallback : public Glacier2::SessionCallback
+{
+
+public:
+
+ virtual void
+ connected(const Glacier2::SessionHelperPtr& session)
+ {
+ test(false);
+ }
+
+ virtual void
+ disconnected(const Glacier2::SessionHelperPtr& session)
+ {
+ test(false);
+ }
+
+ virtual void
+ connectFailed(const Glacier2::SessionHelperPtr& session, const Ice::Exception& ex)
+ {
+ try
+ {
+ ex.ice_throw();;
+ }
+ catch(const Ice::ConnectionRefusedException&)
+ {
+ cout << "ok" << endl;
+ instance->notify();
+ }
+ catch(...)
+ {
+ test(false);
+ }
+ }
+
+ virtual void
+ createdCommunicator(const Glacier2::SessionHelperPtr& session)
+ {
+ test(session->communicator());
+ }
+};
+
+class FailSessionCallback : public Glacier2::SessionCallback
+{
+
+public:
+
+ virtual void
+ connected(const Glacier2::SessionHelperPtr&)
+ {
+ test(false);
+ }
+
+ virtual void
+ disconnected(const Glacier2::SessionHelperPtr&)
+ {
+ test(false);
+ }
+
+ virtual void
+ connectFailed(const Glacier2::SessionHelperPtr&, const Ice::Exception& ex)
+ {
+ try
+ {
+ ex.ice_throw();
+ }
+ catch(const Glacier2::PermissionDeniedException&)
+ {
+ cout << "ok" << endl;
+ instance->notify();
+ }
+ catch(...)
+ {
+ test(false);
+ }
+ }
+
+ virtual void
+ createdCommunicator(const Glacier2::SessionHelperPtr& session)
+ {
+ test(session->communicator());
+ }
+};
+
+class SessionHelperClient : public Ice::Application, public Notify
+{
+public:
+
+ int run(int argc, char* argv[])
+ {
+ instance = this;
+ _initData.properties = Ice::createProperties(argc, argv);
+ _initData.properties->setProperty("Ice.Default.Router", "Glacier2/router:default -p 12347");
+
+ DispatcherPtr dispatcher = new Dispatcher();
+ dispatcher->start();
+ _initData.dispatcher = dispatcher;
+
+ _factory = new Glacier2::SessionFactoryHelper(_initData, new FailSessionCallback());
+
+ //
+ // Test to create a session with wrong userid/password
+ //
+
+ {
+ IceUtil::Monitor<IceUtil::Mutex>::Lock lock(_monitor);
+
+ cout << "testing SessionHelper connect with wrong userid/password... " << flush;
+
+ _factory->setRouterHost("127.0.0.1");
+ _factory->setPort(12347);
+
+ _factory->setRouterIdentity(communicator()->stringToIdentity("Glacier2/router"));
+ _factory->setSecure(false);
+ _session = _factory->connect("userid", "xxx");
+
+ //
+ // Wait for connectFailed callback
+ //
+ _monitor.wait();
+ }
+
+ _factory = new Glacier2::SessionFactoryHelper(_initData, new SuccessSessionCallback());
+
+ {
+ IceUtil::Monitor<IceUtil::Mutex>::Lock lock(_monitor);
+ cout << "testing SessionHelper connect... " << flush;
+ _factory->setRouterHost("127.0.0.1");
+ _factory->setPort(12347);
+ _factory->setRouterIdentity(communicator()->stringToIdentity("Glacier2/router"));
+ _factory->setSecure(false);
+ _session = _factory->connect("userid", "abc123");
+
+ //
+ // Wait for connect callback
+ //
+ _monitor.wait();
+
+ cout << "testing SessionHelper isConnected after connect... " << flush;
+ test(_session->isConnected());
+ cout << "ok" << endl;
+
+ cout << "testing SessionHelper categoryForClient after connect... " << flush;
+ try
+ {
+ test(!_session->categoryForClient().empty());
+ }
+ catch(const Glacier2::SessionNotExistException&)
+ {
+ test(false);
+ }
+ cout << "ok" << endl;
+
+// try
+// {
+// test(_session.session() != null);
+// }
+// catch(Glacier2.SessionNotExistException ex)
+// {
+// test(false);
+// }
+
+ cout << "testing stringToProxy for server object... " << flush;
+ Ice::ObjectPrx base = _session->communicator()->stringToProxy("callback:tcp -p 12010");
+ cout << "ok" << endl;
+
+ cout << "pinging server after session creation... " << flush;
+ base->ice_ping();
+ cout << "ok" << endl;
+
+ cout << "testing checked cast for server object... " << flush;
+ CallbackPrx twoway = CallbackPrx::checkedCast(base);
+ test(twoway);
+ cout << "ok" << endl;
+
+ cout << "testing server shutdown... " << flush;
+ twoway->shutdown();
+ cout << "ok" << endl;
+
+ test(_session->communicator());
+ cout << "testing SessionHelper destroy... " << flush;
+ _session->destroy();
+
+ //
+ // Wait for disconnected callback
+ //
+ _monitor.wait();
+
+ cout << "testing SessionHelper isConnected after destroy... " << flush;
+ test(_session->isConnected() == false);
+ cout << "ok" << endl;
+
+ cout << "testing SessionHelper categoryForClient after destroy... " << flush;
+ try
+ {
+ test(!_session->categoryForClient().empty());
+ test(false);
+ }
+ catch(const Glacier2::SessionNotExistException&)
+ {
+ }
+ cout << "ok" << endl;
+
+// cout << "testing SessionHelper session after destroy... " << flush;
+// try
+// {
+// Glacier2::SessionPrx session = _session->session();
+// test(false);
+// }
+// catch(const Glacier2::SessionNotExistException&)
+// {
+// cout << "ok" << endl;
+// }
+// catch(const std::exception& ex)
+// {
+// cout << ex.what() << endl;
+// }
+// catch(const std::string& msg)
+// {
+// cout << msg << endl;
+// }
+// catch(...)
+// {
+// test(false);
+// }
+
+ cout << "testing SessionHelper communicator after destroy... " << flush;
+ test(_session->communicator());
+ cout << "ok" << endl;
+
+
+ cout << "uninstalling router with communicator... " << flush;
+ communicator()->setDefaultRouter(0);
+ cout << "ok" << endl;
+
+ Ice::ObjectPrx processBase;
+ {
+ cout << "testing stringToProxy for process object... " << flush;
+ processBase = communicator()->stringToProxy("Glacier2/admin -f Process:tcp -h 127.0.0.1 -p 12348");
+ cout << "ok" << endl;
+ }
+
+
+ Ice::ProcessPrx process;
+ {
+ cout << "testing checked cast for admin object... " << flush;
+ process = Ice::ProcessPrx::checkedCast(processBase);
+ test(process != 0);
+ cout << "ok" << endl;
+ }
+
+ cout << "testing Glacier2 shutdown... " << flush;
+ process->shutdown();
+ try
+ {
+ process->ice_ping();
+ test(false);
+ }
+ catch(const Ice::LocalException&)
+ {
+ cout << "ok" << endl;
+ }
+ }
+
+ _factory = new Glacier2::SessionFactoryHelper(_initData, new AfterShutdownSessionCallback());
+
+ //
+ // Wait a bit to ensure glaci2router has been shutdown.
+ //
+ IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(100));
+
+
+ {
+ IceUtil::Monitor<IceUtil::Mutex>::Lock lock(_monitor);
+ cout << "testing SessionHelper connect after router shutdown... " << flush;
+ _factory->setRouterHost("127.0.0.1");
+ _factory->setPort(12347);
+ _factory->setRouterIdentity(communicator()->stringToIdentity("Glacier2/router"));
+ _factory->setSecure(false);
+ _session = _factory->connect("userid", "abc123");
+
+ //
+ // Wait for connectFailed callback
+ //
+ _monitor.wait();
+
+ cout << "testing SessionHelper isConnect after connect failure... " << flush;
+ test(_session->isConnected() == false);
+ cout << "ok" << endl;
+
+ cout << "testing SessionHelper communicator after connect failure... " << flush;
+ test(_session->communicator());
+ cout << "ok" << endl;
+
+ cout << "testing SessionHelper destroy after connect failure... " << flush;
+ _session->destroy();
+ cout << "ok" << endl;
+ }
+
+ if(dispatcher)
+ {
+ dispatcher->destroy();
+ dispatcher->getThreadControl().join();
+ }
+
+ return 0;
+ }
+
+ void
+ notify()
+ {
+ IceUtil::Monitor<IceUtil::Mutex>::Lock lock(_monitor);
+ _monitor.notify();
+ }
+
+private:
+
+ Glacier2::SessionHelperPtr _session;
+ Glacier2::SessionFactoryHelperPtr _factory;
+ Ice::InitializationData _initData;
+ IceUtil::Monitor<IceUtil::Mutex> _monitor;
+};
+
+} // Anonymous namespace end
+
+
+int
+main(int argc, char* argv[])
+{
+ SessionHelperClient c;
+ return c.main(argc, argv);
+}
diff --git a/cpp/test/Glacier2/sessionHelper/Makefile b/cpp/test/Glacier2/sessionHelper/Makefile
new file mode 100644
index 00000000000..cc7d12bcde1
--- /dev/null
+++ b/cpp/test/Glacier2/sessionHelper/Makefile
@@ -0,0 +1,41 @@
+# **********************************************************************
+#
+# Copyright (c) 2003-2011 ZeroC, Inc. All rights reserved.
+#
+# This copy of Ice is licensed to you under the terms described in the
+# ICE_LICENSE file included in this distribution.
+#
+# **********************************************************************
+
+top_srcdir = ../../..
+
+CLIENT = client
+SERVER = server
+
+TARGETS = $(CLIENT) $(SERVER)
+
+OBJS = Callback.o
+
+COBJS = Client.o
+
+SOBJS = Server.o
+
+SRCS = $(OBJS:.o=.cpp) \
+ $(COBJS:.o=.cpp) \
+ $(SOBJS:.o=.cpp)
+
+SLICE_SRCS = Callback.ice
+
+include $(top_srcdir)/config/Make.rules
+
+CPPFLAGS := -I. -I../../include $(CPPFLAGS)
+
+$(CLIENT): $(OBJS) $(COBJS)
+ rm -f $@
+ $(CXX) $(LDFLAGS) -o $@ $(OBJS) $(COBJS) -lGlacier2 $(LIBS)
+
+$(SERVER): $(OBJS) $(SOBJS)
+ rm -f $@
+ $(CXX) $(LDFLAGS) -o $@ $(OBJS) $(SOBJS) $(LIBS)
+
+include .depend
diff --git a/cpp/test/Glacier2/sessionHelper/Makefile.mak b/cpp/test/Glacier2/sessionHelper/Makefile.mak
new file mode 100644
index 00000000000..fd1d2b103d2
--- /dev/null
+++ b/cpp/test/Glacier2/sessionHelper/Makefile.mak
@@ -0,0 +1,49 @@
+# **********************************************************************
+#
+# Copyright (c) 2003-2011 ZeroC, Inc. All rights reserved.
+#
+# This copy of Ice is licensed to you under the terms described in the
+# ICE_LICENSE file included in this distribution.
+#
+# **********************************************************************
+
+top_srcdir = ..\..\..
+
+CLIENT = client.exe
+SERVER = server.exe
+
+TARGETS = $(CLIENT) $(SERVER)
+
+OBJS = Callback.obj
+
+COBJS = Client.obj
+
+SOBJS = Server.obj
+
+SRCS = $(OBJS:.obj=.cpp) \
+ $(COBJS:.obj=.cpp) \
+ $(SOBJS:.obj=.cpp)
+
+!include $(top_srcdir)/config/Make.rules.mak
+
+CPPFLAGS = -I. -I../../include $(CPPFLAGS) -DWIN32_LEAN_AND_MEAN
+
+!if "$(GENERATE_PDB)" == "yes"
+CPDBFLAGS = /pdb:$(CLIENT:.exe=.pdb)
+SPDBFLAGS = /pdb:$(SERVER:.exe=.pdb)
+!endif
+
+$(CLIENT): $(OBJS) $(COBJS)
+ $(LINK) $(LD_EXEFLAGS) $(CPDBFLAGS) $(SETARGV) $(OBJS) $(COBJS) $(PREOUT)$@ $(PRELIBS)$(LIBS) glacier2$(LIBSUFFIX).lib
+ @if exist $@.manifest echo ^ ^ ^ Embedding manifest using $(MT) && \
+ $(MT) -nologo -manifest $@.manifest -outputresource:$@;#1 && del /q $@.manifest
+
+$(SERVER): $(OBJS) $(SOBJS)
+ $(LINK) $(LD_EXEFLAGS) $(SPDBFLAGS) $(SETARGV) $(OBJS) $(SOBJS) $(PREOUT)$@ $(PRELIBS)$(LIBS)
+ @if exist $@.manifest echo ^ ^ ^ Embedding manifest using $(MT) && \
+ $(MT) -nologo -manifest $@.manifest -outputresource:$@;#1 && del /q $@.manifest
+
+clean::
+ del /q Callback.cpp Callback.h
+
+!include .depend.mak
diff --git a/cpp/test/Glacier2/sessionHelper/Server.cpp b/cpp/test/Glacier2/sessionHelper/Server.cpp
new file mode 100644
index 00000000000..403dc7ef622
--- /dev/null
+++ b/cpp/test/Glacier2/sessionHelper/Server.cpp
@@ -0,0 +1,71 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2011 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+#include <IceUtil/IceUtil.h>
+#include <Ice/Ice.h>
+
+#include <Callback.h>
+
+using namespace Test;
+
+namespace
+{
+
+class SessionHelperServer : public Ice::Application
+{
+public:
+
+ virtual int run(int, char*[]);
+};
+
+class CallbackI : public Callback
+{
+
+public:
+
+ virtual void
+ initiateCallback(const CallbackReceiverPrx& proxy, const Ice::Current& current)
+ {
+ proxy->callback(current.ctx);
+ }
+
+ virtual void
+ initiateCallbackEx(const CallbackReceiverPrx& proxy, const Ice::Current& current)
+ {
+ proxy->callbackEx(current.ctx);
+ }
+
+ virtual void
+ shutdown(const Ice::Current& current)
+ {
+ current.adapter->getCommunicator()->shutdown();
+ }
+};
+
+}
+
+int
+SessionHelperServer::run(int argc, char* argv[])
+{
+ communicator()->getProperties()->setProperty("CallbackAdapter.Endpoints", "default -p 12010");
+ Ice::ObjectAdapterPtr adapter = communicator()->createObjectAdapter("CallbackAdapter");
+ adapter->add(new CallbackI(), communicator()->stringToIdentity("callback"));
+ adapter->activate();
+ communicator()->waitForShutdown();
+
+ return EXIT_SUCCESS;
+}
+
+int
+main(int argc, char* argv[])
+{
+ SessionHelperServer app;
+ return app.main(argc, argv);
+}
+
diff --git a/cpp/test/Glacier2/sessionHelper/passwords b/cpp/test/Glacier2/sessionHelper/passwords
new file mode 100644
index 00000000000..a1527dec2b9
--- /dev/null
+++ b/cpp/test/Glacier2/sessionHelper/passwords
@@ -0,0 +1 @@
+userid xxMqsnnDcK8tw \ No newline at end of file
diff --git a/cpp/test/Glacier2/sessionHelper/run.py b/cpp/test/Glacier2/sessionHelper/run.py
new file mode 100755
index 00000000000..14f5444fa0a
--- /dev/null
+++ b/cpp/test/Glacier2/sessionHelper/run.py
@@ -0,0 +1,45 @@
+#!/usr/bin/env python
+# **********************************************************************
+#
+# Copyright (c) 2003-2011 ZeroC, Inc. All rights reserved.
+#
+# This copy of Ice is licensed to you under the terms described in the
+# ICE_LICENSE file included in this distribution.
+#
+# **********************************************************************
+
+import os, sys
+
+path = [ ".", "..", "../..", "../../..", "../../../.." ]
+head = os.path.dirname(sys.argv[0])
+if len(head) > 0:
+ path = [os.path.join(head, p) for p in path]
+path = [os.path.abspath(p) for p in path if os.path.exists(os.path.join(p, "scripts", "TestUtil.py")) ]
+if len(path) == 0:
+ raise "can't find toplevel directory!"
+sys.path.append(os.path.join(path[0]))
+from scripts import *
+
+router = os.path.join(TestUtil.getCppBinDir(), "glacier2router")
+
+args = ' --Ice.Warn.Dispatch=0' + \
+ ' --Ice.Warn.Connections=0' + \
+ ' --Glacier2.SessionTimeout="30"' + \
+ ' --Glacier2.Client.Endpoints="default -p 12347"' + \
+ ' --Glacier2.Server.Endpoints="tcp -h 127.0.0.1"' \
+ ' --Ice.Admin.Endpoints="tcp -h 127.0.0.1 -p 12348"' + \
+ ' --Ice.Admin.InstanceName=Glacier2' + \
+ ' --Glacier2.CryptPasswords="' + os.path.join(os.getcwd(), "passwords") + '"'
+
+print "starting router...",
+routerConfig = TestUtil.DriverConfig("server")
+routerConfig.lang = "cpp"
+starterProc = TestUtil.startServer(router, args, count=2, config=routerConfig)
+print "ok"
+
+
+
+TestUtil.clientServerTest(additionalClientOptions=" --shutdown")
+
+starterProc.waitTestSuccess()
+