summaryrefslogtreecommitdiff
path: root/cpp/src/Ice
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Ice')
-rw-r--r--cpp/src/Ice/.depend173
-rw-r--r--cpp/src/Ice/ConnectRequestHandler.cpp412
-rw-r--r--cpp/src/Ice/ConnectRequestHandler.h88
-rw-r--r--cpp/src/Ice/ConnectionFactory.cpp1212
-rw-r--r--cpp/src/Ice/ConnectionFactory.h101
-rw-r--r--cpp/src/Ice/ConnectionI.cpp2569
-rw-r--r--cpp/src/Ice/ConnectionI.h116
-rw-r--r--cpp/src/Ice/ConnectionMonitor.cpp2
-rw-r--r--cpp/src/Ice/ConnectionMonitor.h2
-rw-r--r--cpp/src/Ice/ConnectionRequestHandler.cpp107
-rw-r--r--cpp/src/Ice/ConnectionRequestHandler.h48
-rw-r--r--cpp/src/Ice/Connector.h7
-rw-r--r--cpp/src/Ice/EndpointFactoryManager.cpp91
-rw-r--r--cpp/src/Ice/EndpointI.cpp105
-rw-r--r--cpp/src/Ice/EndpointI.h55
-rw-r--r--cpp/src/Ice/EventHandler.cpp1
-rw-r--r--cpp/src/Ice/EventHandler.h14
-rw-r--r--cpp/src/Ice/EventHandlerF.h4
-rw-r--r--cpp/src/Ice/Instance.cpp61
-rw-r--r--cpp/src/Ice/Instance.h5
-rw-r--r--cpp/src/Ice/LocatorInfo.cpp375
-rw-r--r--cpp/src/Ice/LocatorInfo.h16
-rw-r--r--cpp/src/Ice/Makefile5
-rw-r--r--cpp/src/Ice/Makefile.mak5
-rw-r--r--cpp/src/Ice/Network.cpp409
-rw-r--r--cpp/src/Ice/Network.h5
-rw-r--r--cpp/src/Ice/ObjectAdapterFactory.cpp2
-rw-r--r--cpp/src/Ice/ObjectAdapterI.cpp27
-rw-r--r--cpp/src/Ice/Outgoing.cpp211
-rw-r--r--cpp/src/Ice/OutgoingAsync.cpp344
-rw-r--r--cpp/src/Ice/PropertyNames.cpp2
-rw-r--r--cpp/src/Ice/PropertyNames.h2
-rw-r--r--cpp/src/Ice/ProtocolPluginFacade.cpp12
-rw-r--r--cpp/src/Ice/Proxy.cpp177
-rw-r--r--cpp/src/Ice/Reference.cpp626
-rw-r--r--cpp/src/Ice/Reference.h24
-rw-r--r--cpp/src/Ice/ReferenceFactory.cpp3
-rw-r--r--cpp/src/Ice/RequestHandler.cpp23
-rw-r--r--cpp/src/Ice/RequestHandler.h55
-rw-r--r--cpp/src/Ice/RouterInfo.cpp237
-rw-r--r--cpp/src/Ice/RouterInfo.h35
-rw-r--r--cpp/src/Ice/Selector.cpp497
-rw-r--r--cpp/src/Ice/Selector.h137
-rw-r--r--cpp/src/Ice/SelectorThread.cpp309
-rw-r--r--cpp/src/Ice/SelectorThread.h137
-rw-r--r--cpp/src/Ice/SelectorThreadF.h26
-rw-r--r--cpp/src/Ice/TcpAcceptor.cpp2
-rw-r--r--cpp/src/Ice/TcpConnector.cpp30
-rw-r--r--cpp/src/Ice/TcpConnector.h7
-rw-r--r--cpp/src/Ice/TcpEndpointI.cpp33
-rw-r--r--cpp/src/Ice/TcpEndpointI.h5
-rw-r--r--cpp/src/Ice/TcpTransceiver.cpp55
-rw-r--r--cpp/src/Ice/TcpTransceiver.h19
-rw-r--r--cpp/src/Ice/ThreadPool.cpp501
-rw-r--r--cpp/src/Ice/ThreadPool.h48
-rw-r--r--cpp/src/Ice/TraceUtil.cpp393
-rw-r--r--cpp/src/Ice/TraceUtil.h7
-rw-r--r--cpp/src/Ice/Transceiver.h9
-rw-r--r--cpp/src/Ice/UdpConnector.cpp15
-rw-r--r--cpp/src/Ice/UdpConnector.h3
-rw-r--r--cpp/src/Ice/UdpEndpointI.cpp35
-rw-r--r--cpp/src/Ice/UdpEndpointI.h5
-rw-r--r--cpp/src/Ice/UdpTransceiver.cpp66
-rw-r--r--cpp/src/Ice/UdpTransceiver.h6
-rw-r--r--cpp/src/Ice/UnknownEndpointI.cpp8
-rw-r--r--cpp/src/Ice/UnknownEndpointI.h3
66 files changed, 7247 insertions, 2877 deletions
diff --git a/cpp/src/Ice/.depend b/cpp/src/Ice/.depend
index 569597da8fb..d4cede0d2a0 100644
--- a/cpp/src/Ice/.depend
+++ b/cpp/src/Ice/.depend
@@ -1,92 +1,97 @@
-Acceptor$(OBJEXT): Acceptor.cpp ../Ice/Acceptor.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../Ice/AcceptorF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../Ice/TransceiverF.h
-Application$(OBJEXT): Application.cpp ../../include/Ice/Application.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/RecMutex.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Process.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Locator.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/Router.h ../../include/Ice/DispatchInterceptor.h ../../include/Ice/IconvStringConverter.h ../../include/IceUtil/CtrlCHandler.h ../../include/IceUtil/ArgVector.h ../Ice/GC.h ../../include/IceUtil/Thread.h
-Buffer$(OBJEXT): Buffer.cpp ../../include/Ice/Buffer.h ../../include/Ice/Config.h ../../include/IceUtil/Config.h ../../include/Ice/LocalException.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h
-BasicStream$(OBJEXT): BasicStream.cpp ../../include/IceUtil/DisableWarnings.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/Instance.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/CommunicatorF.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/ProxyFactory.h ../../include/Ice/ObjectFactory.h ../Ice/ObjectFactoryManager.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../Ice/TraceUtil.h ../Ice/TraceLevels.h ../../include/Ice/LoggerUtil.h
-BuiltinSequences$(OBJEXT): BuiltinSequences.cpp ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
-CommunicatorI$(OBJEXT): CommunicatorI.cpp ../../include/IceUtil/DisableWarnings.h ../Ice/CommunicatorI.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/DynamicLibraryF.h ../../include/IceUtil/Shared.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Communicator.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../Ice/Instance.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/Properties.h ../Ice/ReferenceFactory.h ../Ice/Reference.h ../Ice/ProxyFactory.h ../Ice/ObjectFactoryManager.h ../Ice/ObjectAdapterFactory.h ../Ice/ObjectAdapterI.h ../../include/Ice/ObjectAdapter.h ../Ice/ConnectorF.h ../../include/Ice/LoggerUtil.h ../Ice/DefaultsAndOverrides.h ../Ice/TraceLevels.h ../Ice/GC.h
-Communicator$(OBJEXT): Communicator.cpp ../../include/Ice/Communicator.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/PropertiesF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
-ConnectionFactory$(OBJEXT): ConnectionFactory.cpp ../Ice/ConnectionFactory.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Handle.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ConnectionIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/TransceiverF.h ../Ice/RouterInfoF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ThreadPoolF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/ConnectionI.h ../../include/Ice/Connection.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/Ice/StatsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../../include/Ice/LoggerUtil.h ../Ice/TraceLevels.h ../Ice/DefaultsAndOverrides.h ../../include/Ice/Properties.h ../Ice/Transceiver.h ../Ice/Connector.h ../Ice/Acceptor.h ../Ice/ThreadPool.h ../Ice/ObjectAdapterI.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../Ice/Reference.h ../Ice/EndpointI.h ../Ice/RouterInfo.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/IceUtil/Random.h
-ConnectionI$(OBJEXT): ConnectionI.cpp ../../include/IceUtil/DisableWarnings.h ../Ice/ConnectionI.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Handle.h ../../include/Ice/Connection.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ThreadPoolF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/Ice/StatsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Properties.h ../Ice/TraceUtil.h ../Ice/DefaultsAndOverrides.h ../Ice/Transceiver.h ../Ice/ThreadPool.h ../Ice/ConnectionMonitor.h ../Ice/ObjectAdapterI.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../Ice/ConnectorF.h ../Ice/EndpointI.h ../Ice/AcceptorF.h ../Ice/ReferenceFactory.h ../Ice/Reference.h ../Ice/ProxyFactory.h
-ConnectionMonitor$(OBJEXT): ConnectionMonitor.cpp ../Ice/ConnectionMonitor.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Handle.h ../../include/Ice/ConnectionMonitorF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ConnectionIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/InstanceF.h ../Ice/ConnectionI.h ../../include/Ice/Connection.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/ConnectionFactoryF.h ../Ice/TransceiverF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ThreadPoolF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LoggerUtil.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/Ice/StatsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h
-Connection$(OBJEXT): Connection.cpp ../../include/Ice/Connection.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
-Connector$(OBJEXT): Connector.cpp ../Ice/Connector.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../Ice/ConnectorF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../Ice/TransceiverF.h
-Current$(OBJEXT): Current.cpp ../../include/Ice/Current.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StreamF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
-DefaultsAndOverrides$(OBJEXT): DefaultsAndOverrides.cpp ../Ice/DefaultsAndOverrides.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../Ice/DefaultsAndOverridesF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/PropertiesF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Properties.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/BuiltinSequences.h ../Ice/Network.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalException.h
-Direct$(OBJEXT): Direct.cpp ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ReferenceF.h ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../Ice/ObjectAdapterI.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ServantManagerF.h ../Ice/RouterInfoF.h ../Ice/ConnectorF.h ../Ice/LocatorInfoF.h ../Ice/ThreadPoolF.h ../../include/Ice/BuiltinSequences.h ../Ice/ServantManager.h ../../include/Ice/ServantLocator.h ../Ice/Reference.h ../Ice/ReferenceFactoryF.h ../Ice/SharedContext.h ../../include/Ice/LocalException.h
-DispatchInterceptor$(OBJEXT): DispatchInterceptor.cpp ../../include/Ice/DispatchInterceptor.h ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Shared.h ../../include/Ice/GCShared.h ../../include/Ice/Config.h ../../include/Ice/GCCountMap.h ../../include/Ice/ObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../Ice/IncomingRequest.h ../../include/Ice/Incoming.h ../../include/Ice/InstanceF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Direct.h ../../include/Ice/ReferenceF.h ../../include/Ice/LocalException.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h
-DynamicLibrary$(OBJEXT): DynamicLibrary.cpp ../../include/Ice/DynamicLibrary.h ../../include/Ice/DynamicLibraryF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h
-EndpointFactoryManager$(OBJEXT): EndpointFactoryManager.cpp ../Ice/EndpointFactoryManager.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/InstanceF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/EndpointIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/EndpointFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/Endpoint.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/UndefSysMacros.h ../Ice/UnknownEndpointI.h ../Ice/EndpointI.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../../include/Ice/EndpointFactory.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/LocalException.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/Properties.h ../Ice/DefaultsAndOverrides.h
-EndpointFactory$(OBJEXT): EndpointFactory.cpp ../../include/Ice/EndpointFactory.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/EndpointIF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/EndpointFactoryF.h
-Endpoint$(OBJEXT): Endpoint.cpp ../../include/Ice/Endpoint.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
-EndpointI$(OBJEXT): EndpointI.cpp ../Ice/EndpointI.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Endpoint.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/EndpointIF.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h
-EventHandler$(OBJEXT): EventHandler.cpp ../Ice/EventHandler.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../Ice/EventHandlerF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../Ice/ThreadPoolF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/Instance.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/CommunicatorF.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h
-Exception$(OBJEXT): Exception.cpp ../../include/Ice/Exception.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/LocalException.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h ../Ice/Network.h ../../include/Ice/PropertiesF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/Plugin.h ../../include/IceUtil/StringUtil.h
-FacetMap$(OBJEXT): FacetMap.cpp ../../include/Ice/FacetMap.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
+Acceptor$(OBJEXT): Acceptor.cpp ../Ice/Acceptor.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../Ice/AcceptorF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../Ice/TransceiverF.h
+Application$(OBJEXT): Application.cpp ../../include/Ice/Application.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Process.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Locator.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/Router.h ../../include/Ice/DispatchInterceptor.h ../../include/Ice/IconvStringConverter.h ../../include/IceUtil/CtrlCHandler.h ../../include/IceUtil/ArgVector.h ../Ice/GC.h
+Buffer$(OBJEXT): Buffer.cpp ../../include/Ice/Buffer.h ../../include/Ice/Config.h ../../include/IceUtil/Config.h ../../include/Ice/LocalException.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h
+BasicStream$(OBJEXT): BasicStream.cpp ../../include/IceUtil/DisableWarnings.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/CommunicatorF.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/ProxyFactory.h ../../include/Ice/ObjectFactory.h ../Ice/ObjectFactoryManager.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../Ice/TraceUtil.h ../Ice/TraceLevels.h ../../include/Ice/LoggerUtil.h
+BuiltinSequences$(OBJEXT): BuiltinSequences.cpp ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
+CommunicatorI$(OBJEXT): CommunicatorI.cpp ../../include/IceUtil/DisableWarnings.h ../Ice/CommunicatorI.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/DynamicLibraryF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Communicator.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../Ice/Instance.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/Properties.h ../Ice/ReferenceFactory.h ../Ice/Reference.h ../Ice/ProxyFactory.h ../Ice/ObjectFactoryManager.h ../Ice/ObjectAdapterFactory.h ../Ice/ObjectAdapterI.h ../../include/Ice/ObjectAdapter.h ../Ice/ConnectorF.h ../../include/Ice/LoggerUtil.h ../Ice/DefaultsAndOverrides.h ../Ice/TraceLevels.h ../Ice/GC.h
+Communicator$(OBJEXT): Communicator.cpp ../../include/Ice/Communicator.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/PropertiesF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
+ConnectRequestHandler$(OBJEXT): ConnectRequestHandler.cpp ../Ice/ConnectRequestHandler.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Mutex.h ../Ice/RequestHandler.h ../../include/IceUtil/Shared.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../Ice/Reference.h ../../include/IceUtil/RecMutex.h ../Ice/ReferenceFactoryF.h ../../include/Ice/EndpointIF.h ../../include/Ice/InstanceF.h ../../include/Ice/RouterF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LocatorF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/SharedContext.h ../Ice/RouterInfo.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/ConnectionRequestHandler.h ../Ice/Instance.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/ConnectionI.h ../../include/Ice/Connection.h ../Ice/TransceiverF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/SelectorThread.h ../Ice/Selector.h ../../include/Ice/Properties.h
+ConnectionFactory$(OBJEXT): ConnectionFactory.cpp ../Ice/ConnectionFactory.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Handle.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../Ice/ConnectionI.h ../../include/Ice/Connection.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ThreadPoolF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/SelectorThread.h ../../include/IceUtil/Timer.h ../Ice/SelectorThreadF.h ../Ice/Selector.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/RouterInfoF.h ../Ice/EndpointI.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/Ice/StatsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../../include/Ice/LoggerUtil.h ../Ice/TraceLevels.h ../Ice/DefaultsAndOverrides.h ../../include/Ice/Properties.h ../Ice/Transceiver.h ../Ice/Connector.h ../Ice/Acceptor.h ../Ice/ThreadPool.h ../Ice/ObjectAdapterI.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../Ice/Reference.h ../Ice/RouterInfo.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/IceUtil/Random.h
+ConnectionI$(OBJEXT): ConnectionI.cpp ../../include/IceUtil/DisableWarnings.h ../Ice/ConnectionI.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Handle.h ../../include/Ice/Connection.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ThreadPoolF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/SelectorThread.h ../../include/IceUtil/Timer.h ../Ice/SelectorThreadF.h ../Ice/Selector.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/Ice/StatsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Properties.h ../Ice/TraceUtil.h ../Ice/DefaultsAndOverrides.h ../Ice/Transceiver.h ../Ice/ThreadPool.h ../Ice/ConnectionMonitor.h ../Ice/ObjectAdapterI.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../Ice/ConnectorF.h ../Ice/EndpointI.h ../Ice/AcceptorF.h ../Ice/ReferenceFactory.h ../Ice/Reference.h ../Ice/ProxyFactory.h
+ConnectionMonitor$(OBJEXT): ConnectionMonitor.cpp ../Ice/ConnectionMonitor.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Handle.h ../../include/Ice/ConnectionMonitorF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ConnectionIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/InstanceF.h ../Ice/ConnectionI.h ../../include/Ice/Connection.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/ConnectionFactoryF.h ../Ice/TransceiverF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ThreadPoolF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/SelectorThread.h ../Ice/SelectorThreadF.h ../Ice/Selector.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LoggerUtil.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/Ice/StatsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h
+Connection$(OBJEXT): Connection.cpp ../../include/Ice/Connection.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
+ConnectionRequestHandler$(OBJEXT): ConnectionRequestHandler.cpp ../Ice/ConnectionRequestHandler.h ../Ice/RequestHandler.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../Ice/Reference.h ../../include/IceUtil/RecMutex.h ../Ice/ReferenceFactoryF.h ../../include/Ice/InstanceF.h ../../include/Ice/RouterF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LocatorF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/SharedContext.h ../Ice/ConnectionI.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Thread.h ../../include/Ice/Connection.h ../../include/Ice/ConnectionFactoryF.h ../Ice/TransceiverF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ThreadPoolF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/SelectorThread.h ../../include/IceUtil/Timer.h ../Ice/SelectorThreadF.h ../Ice/Selector.h ../Ice/RouterInfo.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h
+Connector$(OBJEXT): Connector.cpp ../Ice/Connector.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../Ice/ConnectorF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../Ice/TransceiverF.h
+Current$(OBJEXT): Current.cpp ../../include/Ice/Current.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StreamF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
+DefaultsAndOverrides$(OBJEXT): DefaultsAndOverrides.cpp ../Ice/DefaultsAndOverrides.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../Ice/DefaultsAndOverridesF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/PropertiesF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Properties.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/InstanceF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/BuiltinSequences.h ../Ice/Network.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalException.h
+Direct$(OBJEXT): Direct.cpp ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ReferenceF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../Ice/ObjectAdapterI.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ServantManagerF.h ../Ice/RouterInfoF.h ../Ice/ConnectorF.h ../Ice/LocatorInfoF.h ../Ice/ThreadPoolF.h ../../include/Ice/BuiltinSequences.h ../Ice/ServantManager.h ../../include/Ice/ServantLocator.h ../Ice/Reference.h ../Ice/ReferenceFactoryF.h ../Ice/SharedContext.h ../../include/Ice/LocalException.h
+DispatchInterceptor$(OBJEXT): DispatchInterceptor.cpp ../../include/Ice/DispatchInterceptor.h ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Shared.h ../../include/Ice/GCShared.h ../../include/Ice/Config.h ../../include/Ice/GCCountMap.h ../../include/Ice/ObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../Ice/IncomingRequest.h ../../include/Ice/Incoming.h ../../include/Ice/InstanceF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Direct.h ../../include/Ice/ReferenceF.h ../../include/Ice/LocalException.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h
+DynamicLibrary$(OBJEXT): DynamicLibrary.cpp ../../include/Ice/DynamicLibrary.h ../../include/Ice/DynamicLibraryF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h
+EndpointFactoryManager$(OBJEXT): EndpointFactoryManager.cpp ../Ice/EndpointFactoryManager.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/InstanceF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/EndpointIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/EndpointFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/Endpoint.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/UndefSysMacros.h ../Ice/UnknownEndpointI.h ../Ice/EndpointI.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../../include/Ice/EndpointFactory.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/LocalException.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/Properties.h ../Ice/DefaultsAndOverrides.h
+EndpointFactory$(OBJEXT): EndpointFactory.cpp ../../include/Ice/EndpointFactory.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/EndpointIF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/EndpointFactoryF.h
+Endpoint$(OBJEXT): Endpoint.cpp ../../include/Ice/Endpoint.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
+EndpointI$(OBJEXT): EndpointI.cpp ../Ice/EndpointI.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Endpoint.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/EndpointIF.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/Ice/CommunicatorF.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/Network.h
+EventHandler$(OBJEXT): EventHandler.cpp ../Ice/EventHandler.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../Ice/EventHandlerF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../Ice/ThreadPoolF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/CommunicatorF.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h
+Exception$(OBJEXT): Exception.cpp ../../include/Ice/Exception.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/LocalException.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h ../Ice/Network.h ../../include/Ice/PropertiesF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/Plugin.h ../../include/IceUtil/StringUtil.h
+FacetMap$(OBJEXT): FacetMap.cpp ../../include/Ice/FacetMap.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
FactoryTableDef$(OBJEXT): FactoryTableDef.cpp ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Mutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/IceUtil/Handle.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/UserExceptionFactory.h
FactoryTable$(OBJEXT): FactoryTable.cpp ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Mutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/IceUtil/Handle.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/UserExceptionFactory.h
-GC$(OBJEXT): GC.cpp ../../include/IceUtil/Time.h ../../include/IceUtil/Config.h ../../include/IceUtil/StaticMutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/RecMutex.h ../Ice/GC.h ../../include/Ice/Config.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/Ice/GCShared.h ../../include/Ice/GCCountMap.h
-Identity$(OBJEXT): Identity.cpp ../../include/Ice/Identity.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/StreamF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
-IdentityUtil$(OBJEXT): IdentityUtil.cpp ../../include/Ice/IdentityUtil.h ../../include/Ice/Identity.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/LocalException.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h ../../include/IceUtil/StringUtil.h
-ImplicitContextI$(OBJEXT): ImplicitContextI.cpp ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../../include/IceUtil/StaticMutex.h
-ImplicitContext$(OBJEXT): ImplicitContext.cpp ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
-IncomingAsync$(OBJEXT): IncomingAsync.cpp ../../include/Ice/IncomingAsync.h ../../include/Ice/IncomingAsyncF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Incoming.h ../../include/Ice/InstanceF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ServantManagerF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/ServantLocator.h ../Ice/ConnectionI.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Thread.h ../../include/Ice/Connection.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/ConnectionFactoryF.h ../Ice/TransceiverF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ThreadPoolF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/Ice/StatsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Direct.h ../../include/Ice/Properties.h ../Ice/ReplyStatus.h ../../include/IceUtil/StaticMutex.h
-Incoming$(OBJEXT): Incoming.cpp ../../include/Ice/Incoming.h ../../include/Ice/InstanceF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ConnectionIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ServantManagerF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/IncomingAsync.h ../Ice/IncomingRequest.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../Ice/ServantManager.h ../Ice/ConnectionI.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Thread.h ../../include/Ice/Connection.h ../../include/Ice/ConnectionFactoryF.h ../Ice/TransceiverF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ThreadPoolF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/Ice/StatsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Direct.h ../../include/Ice/Properties.h ../../include/Ice/LoggerUtil.h ../Ice/ReplyStatus.h ../../include/IceUtil/StringUtil.h
-Initialize$(OBJEXT): Initialize.cpp ../../include/IceUtil/DisableWarnings.h ../../include/IceUtil/ArgVector.h ../../include/IceUtil/Config.h ../Ice/GC.h ../../include/Ice/Config.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../Ice/CommunicatorI.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Communicator.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../Ice/PropertiesI.h ../../include/Ice/Properties.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LocalException.h ../Ice/StreamI.h ../../include/Ice/Stream.h ../Ice/LoggerI.h ../../include/Ice/Logger.h
-Instance$(OBJEXT): Instance.cpp ../../include/IceUtil/DisableWarnings.h ../Ice/Instance.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/InstanceF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/TraceLevels.h ../Ice/DefaultsAndOverrides.h ../Ice/RouterInfo.h ../../include/Ice/RouterF.h ../../include/Ice/Router.h ../Ice/LocatorInfo.h ../../include/Ice/LocatorF.h ../../include/Ice/Locator.h ../../include/Ice/IncomingAsync.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../Ice/ReferenceFactory.h ../Ice/Reference.h ../Ice/ProxyFactory.h ../Ice/ThreadPool.h ../Ice/EventHandlerF.h ../Ice/ConnectionFactory.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/TransceiverF.h ../Ice/EventHandler.h ../Ice/ConnectionMonitor.h ../Ice/ObjectFactoryManager.h ../Ice/ObjectAdapterFactory.h ../Ice/ObjectAdapterI.h ../../include/Ice/ObjectAdapter.h ../Ice/PropertiesI.h ../../include/Ice/Properties.h ../Ice/LoggerI.h ../../include/Ice/Logger.h ../Ice/Network.h ../Ice/EndpointFactoryManager.h ../../include/Ice/EndpointFactoryF.h ../Ice/TcpEndpointI.h ../Ice/EndpointI.h ../../include/Ice/EndpointFactory.h ../Ice/UdpEndpointI.h ../../include/Ice/DynamicLibrary.h ../Ice/PluginManagerI.h ../../include/Ice/Plugin.h ../../include/Ice/LoggerUtil.h ../../include/IceUtil/StringUtil.h ../../include/IceUtil/UUID.h ../../include/Ice/Communicator.h ../../include/Ice/ImplicitContextF.h ../Ice/SysLoggerI.h
-LocalException$(OBJEXT): LocalException.cpp ../../include/Ice/LocalException.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
-LocalObject$(OBJEXT): LocalObject.cpp ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h
-LocatorInfo$(OBJEXT): LocatorInfo.cpp ../Ice/LocatorInfo.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Time.h ../Ice/LocatorInfoF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/LocatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Locator.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/RecMutex.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Direct.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../Ice/Instance.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../Ice/TraceLevels.h ../../include/Ice/LoggerUtil.h ../Ice/EndpointI.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/Reference.h ../../include/Ice/RouterF.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h
-Locator$(OBJEXT): Locator.cpp ../../include/Ice/Locator.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/RecMutex.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Direct.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/ObjectFactory.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
-LoggerI$(OBJEXT): LoggerI.cpp ../../include/IceUtil/Time.h ../../include/IceUtil/Config.h ../Ice/LoggerI.h ../../include/Ice/Logger.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/IceUtil/StaticMutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h
-Logger$(OBJEXT): Logger.cpp ../../include/Ice/Logger.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
-LoggerUtil$(OBJEXT): LoggerUtil.cpp ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Logger.h
-Network$(OBJEXT): Network.cpp ../../include/IceUtil/StaticMutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../Ice/Network.h ../../include/Ice/Config.h ../../include/Ice/PropertiesF.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Properties.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LoggerUtil.h
-ObjectAdapterFactory$(OBJEXT): ObjectAdapterFactory.cpp ../Ice/ObjectAdapterFactory.h ../Ice/ObjectAdapterI.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ServantManagerF.h ../Ice/RouterInfoF.h ../Ice/ConnectorF.h ../Ice/LocatorInfoF.h ../Ice/ThreadPoolF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalException.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/IceUtil/UUID.h
-ObjectAdapterI$(OBJEXT): ObjectAdapterI.cpp ../../include/IceUtil/UUID.h ../../include/IceUtil/Config.h ../Ice/ObjectAdapterI.h ../../include/IceUtil/Shared.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ServantManagerF.h ../Ice/RouterInfoF.h ../Ice/ConnectorF.h ../Ice/LocatorInfoF.h ../Ice/ThreadPoolF.h ../../include/Ice/BuiltinSequences.h ../Ice/ObjectAdapterFactory.h ../Ice/Instance.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../../include/Ice/StringConverter.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../Ice/ProxyFactory.h ../Ice/ReferenceFactory.h ../Ice/Reference.h ../Ice/EndpointI.h ../Ice/TransceiverF.h ../Ice/AcceptorF.h ../Ice/EndpointFactoryManager.h ../../include/Ice/EndpointFactoryF.h ../Ice/ConnectionFactory.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ServantManager.h ../Ice/RouterInfo.h ../../include/Ice/Properties.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../Ice/LocatorInfo.h ../../include/Ice/Locator.h ../../include/Ice/IncomingAsync.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/LoggerUtil.h ../Ice/ThreadPool.h ../../include/Ice/Communicator.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/Router.h ../Ice/DefaultsAndOverrides.h ../Ice/TraceLevels.h ../Ice/PropertyNames.h
-ObjectAdapter$(OBJEXT): ObjectAdapter.cpp ../../include/Ice/ObjectAdapter.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
-ObjectFactoryManager$(OBJEXT): ObjectFactoryManager.cpp ../Ice/ObjectFactoryManager.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectFactory.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/LocalException.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h
-ObjectFactory$(OBJEXT): ObjectFactory.cpp ../../include/Ice/ObjectFactory.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
-Object$(OBJEXT): Object.cpp ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Shared.h ../../include/Ice/GCShared.h ../../include/Ice/Config.h ../../include/Ice/GCCountMap.h ../../include/Ice/ObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Incoming.h ../../include/Ice/InstanceF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/IncomingAsync.h ../Ice/IncomingRequest.h ../../include/Ice/Direct.h ../../include/Ice/ReferenceF.h ../../include/Ice/LocalException.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Stream.h
-OutgoingAsync$(OBJEXT): OutgoingAsync.cpp ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/RecMutex.h ../../include/Ice/OutgoingAsyncF.h ../../include/IceUtil/Shared.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ReferenceF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Current.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StreamF.h ../Ice/ConnectionI.h ../../include/IceUtil/Thread.h ../../include/Ice/Connection.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/CommunicatorF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ThreadPoolF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/Reference.h ../Ice/ReferenceFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/SharedContext.h ../Ice/Instance.h ../../include/IceUtil/Timer.h ../../include/Ice/StatsF.h ../Ice/DefaultsAndOverridesF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/BuiltinSequences.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../../include/Ice/Properties.h ../../include/Ice/LoggerUtil.h ../Ice/LocatorInfo.h ../Ice/ProxyFactory.h ../Ice/RouterInfo.h ../Ice/ReplyStatus.h
-Outgoing$(OBJEXT): Outgoing.cpp ../../include/Ice/Outgoing.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/ConnectionIF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ReferenceF.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Exception.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StreamF.h ../Ice/ConnectionI.h ../../include/IceUtil/Thread.h ../../include/Ice/Connection.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/ConnectionFactoryF.h ../Ice/TransceiverF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ThreadPoolF.h ../Ice/Reference.h ../../include/IceUtil/RecMutex.h ../Ice/ReferenceFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/SharedContext.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../Ice/Instance.h ../../include/IceUtil/Timer.h ../../include/Ice/StatsF.h ../Ice/DefaultsAndOverridesF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../Ice/ReplyStatus.h
-PluginManagerI$(OBJEXT): PluginManagerI.cpp ../Ice/PluginManagerI.h ../../include/Ice/Plugin.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/LoggerF.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/InstanceF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/DynamicLibrary.h ../../include/Ice/Communicator.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StatsF.h ../../include/Ice/PropertiesF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/Properties.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Initialize.h ../../include/Ice/LocalException.h
-Plugin$(OBJEXT): Plugin.cpp ../../include/Ice/Plugin.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/LoggerF.h ../../include/Ice/UndefSysMacros.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
-Process$(OBJEXT): Process.cpp ../../include/Ice/Process.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/RecMutex.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/ObjectFactory.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
-PropertiesI$(OBJEXT): PropertiesI.cpp ../../include/IceUtil/DisableWarnings.h ../../include/IceUtil/StringUtil.h ../../include/IceUtil/Config.h ../Ice/PropertiesI.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Properties.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/LocalException.h ../Ice/PropertyNames.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Communicator.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h
-Properties$(OBJEXT): Properties.cpp ../../include/Ice/Properties.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalException.h ../../include/Ice/ObjectFactory.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
+GC$(OBJEXT): GC.cpp ../../include/IceUtil/Time.h ../../include/IceUtil/Config.h ../../include/IceUtil/StaticMutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/RecMutex.h ../Ice/GC.h ../../include/Ice/Config.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/Ice/GCShared.h ../../include/Ice/GCCountMap.h
+Identity$(OBJEXT): Identity.cpp ../../include/Ice/Identity.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/StreamF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
+IdentityUtil$(OBJEXT): IdentityUtil.cpp ../../include/Ice/IdentityUtil.h ../../include/Ice/Identity.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/LocalException.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h ../../include/IceUtil/StringUtil.h
+ImplicitContextI$(OBJEXT): ImplicitContextI.cpp ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../../include/IceUtil/StaticMutex.h
+ImplicitContext$(OBJEXT): ImplicitContext.cpp ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
+IncomingAsync$(OBJEXT): IncomingAsync.cpp ../../include/Ice/IncomingAsync.h ../../include/Ice/IncomingAsyncF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Incoming.h ../../include/Ice/InstanceF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ServantManagerF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/ServantLocator.h ../Ice/ConnectionI.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Thread.h ../../include/Ice/Connection.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/ConnectionFactoryF.h ../Ice/TransceiverF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThread.h ../../include/IceUtil/Timer.h ../Ice/SelectorThreadF.h ../Ice/Selector.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/Ice/StatsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Direct.h ../../include/Ice/Properties.h ../Ice/ReplyStatus.h ../../include/IceUtil/StaticMutex.h
+Incoming$(OBJEXT): Incoming.cpp ../../include/Ice/Incoming.h ../../include/Ice/InstanceF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ConnectionIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ServantManagerF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/IncomingAsync.h ../Ice/IncomingRequest.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../Ice/ServantManager.h ../Ice/ConnectionI.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Thread.h ../../include/Ice/Connection.h ../../include/Ice/ConnectionFactoryF.h ../Ice/TransceiverF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThread.h ../../include/IceUtil/Timer.h ../Ice/SelectorThreadF.h ../Ice/Selector.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/Ice/StatsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Direct.h ../../include/Ice/Properties.h ../../include/Ice/LoggerUtil.h ../Ice/ReplyStatus.h ../../include/IceUtil/StringUtil.h
+Initialize$(OBJEXT): Initialize.cpp ../../include/IceUtil/DisableWarnings.h ../../include/IceUtil/ArgVector.h ../../include/IceUtil/Config.h ../Ice/GC.h ../../include/Ice/Config.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../Ice/CommunicatorI.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Communicator.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../Ice/PropertiesI.h ../../include/Ice/Properties.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LocalException.h ../Ice/StreamI.h ../../include/Ice/Stream.h ../Ice/LoggerI.h ../../include/Ice/Logger.h
+Instance$(OBJEXT): Instance.cpp ../../include/IceUtil/DisableWarnings.h ../Ice/Instance.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/InstanceF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/TraceLevels.h ../Ice/DefaultsAndOverrides.h ../Ice/RouterInfo.h ../../include/Ice/RouterF.h ../../include/Ice/Router.h ../Ice/LocatorInfo.h ../../include/Ice/LocatorF.h ../../include/Ice/Locator.h ../../include/Ice/IncomingAsync.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../Ice/ReferenceFactory.h ../Ice/Reference.h ../Ice/ProxyFactory.h ../Ice/ThreadPool.h ../Ice/EventHandlerF.h ../Ice/Selector.h ../Ice/SelectorThread.h ../Ice/ConnectionFactory.h ../Ice/ConnectionI.h ../../include/Ice/Connection.h ../Ice/TransceiverF.h ../Ice/EventHandler.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/EndpointI.h ../Ice/ConnectionMonitor.h ../Ice/ObjectFactoryManager.h ../Ice/ObjectAdapterFactory.h ../Ice/ObjectAdapterI.h ../../include/Ice/ObjectAdapter.h ../Ice/PropertiesI.h ../../include/Ice/Properties.h ../Ice/LoggerI.h ../../include/Ice/Logger.h ../Ice/Network.h ../Ice/EndpointFactoryManager.h ../../include/Ice/EndpointFactoryF.h ../Ice/TcpEndpointI.h ../../include/Ice/EndpointFactory.h ../Ice/UdpEndpointI.h ../../include/Ice/DynamicLibrary.h ../Ice/PluginManagerI.h ../../include/Ice/Plugin.h ../../include/Ice/LoggerUtil.h ../../include/IceUtil/StringUtil.h ../../include/IceUtil/UUID.h ../../include/Ice/Communicator.h ../../include/Ice/ImplicitContextF.h ../Ice/SysLoggerI.h
+LocalException$(OBJEXT): LocalException.cpp ../../include/Ice/LocalException.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
+LocalObject$(OBJEXT): LocalObject.cpp ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h
+LocatorInfo$(OBJEXT): LocatorInfo.cpp ../Ice/LocatorInfo.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Time.h ../Ice/LocatorInfoF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/LocatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Locator.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/Ice/InstanceF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Direct.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../Ice/TraceLevels.h ../../include/Ice/LoggerUtil.h ../Ice/EndpointI.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/Reference.h ../../include/Ice/RouterF.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h
+Locator$(OBJEXT): Locator.cpp ../../include/Ice/Locator.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/InstanceF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Direct.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/ObjectFactory.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
+LoggerI$(OBJEXT): LoggerI.cpp ../../include/IceUtil/Time.h ../../include/IceUtil/Config.h ../Ice/LoggerI.h ../../include/Ice/Logger.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/IceUtil/StaticMutex.h
+Logger$(OBJEXT): Logger.cpp ../../include/Ice/Logger.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
+LoggerUtil$(OBJEXT): LoggerUtil.cpp ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Logger.h
+Network$(OBJEXT): Network.cpp ../../include/IceUtil/StaticMutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../Ice/Network.h ../../include/Ice/Config.h ../../include/Ice/PropertiesF.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Properties.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/InstanceF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LoggerUtil.h
+ObjectAdapterFactory$(OBJEXT): ObjectAdapterFactory.cpp ../Ice/ObjectAdapterFactory.h ../Ice/ObjectAdapterI.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ServantManagerF.h ../Ice/RouterInfoF.h ../Ice/ConnectorF.h ../Ice/LocatorInfoF.h ../Ice/ThreadPoolF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalException.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/IceUtil/UUID.h
+ObjectAdapterI$(OBJEXT): ObjectAdapterI.cpp ../../include/IceUtil/UUID.h ../../include/IceUtil/Config.h ../Ice/ObjectAdapterI.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ServantManagerF.h ../Ice/RouterInfoF.h ../Ice/ConnectorF.h ../Ice/LocatorInfoF.h ../Ice/ThreadPoolF.h ../../include/Ice/BuiltinSequences.h ../Ice/ObjectAdapterFactory.h ../Ice/Instance.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/ReferenceFactoryF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../../include/Ice/StringConverter.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../Ice/ProxyFactory.h ../Ice/ReferenceFactory.h ../Ice/Reference.h ../Ice/EndpointI.h ../Ice/TransceiverF.h ../Ice/AcceptorF.h ../Ice/EndpointFactoryManager.h ../../include/Ice/EndpointFactoryF.h ../Ice/ConnectionFactory.h ../Ice/ConnectionI.h ../../include/Ice/Connection.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/SelectorThread.h ../Ice/Selector.h ../Ice/ServantManager.h ../Ice/RouterInfo.h ../../include/Ice/Properties.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../Ice/LocatorInfo.h ../../include/Ice/Locator.h ../../include/Ice/IncomingAsync.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/LoggerUtil.h ../Ice/ThreadPool.h ../../include/Ice/Communicator.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/Router.h ../Ice/DefaultsAndOverrides.h ../Ice/TraceLevels.h ../Ice/PropertyNames.h
+ObjectAdapter$(OBJEXT): ObjectAdapter.cpp ../../include/Ice/ObjectAdapter.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
+ObjectFactoryManager$(OBJEXT): ObjectFactoryManager.cpp ../Ice/ObjectFactoryManager.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectFactory.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/LocalException.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h
+ObjectFactory$(OBJEXT): ObjectFactory.cpp ../../include/Ice/ObjectFactory.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
+Object$(OBJEXT): Object.cpp ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Shared.h ../../include/Ice/GCShared.h ../../include/Ice/Config.h ../../include/Ice/GCCountMap.h ../../include/Ice/ObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Incoming.h ../../include/Ice/InstanceF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/IncomingAsync.h ../Ice/IncomingRequest.h ../../include/Ice/Direct.h ../../include/Ice/ReferenceF.h ../../include/Ice/LocalException.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Stream.h
+OutgoingAsync$(OBJEXT): OutgoingAsync.cpp ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Handle.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../../include/Ice/ReferenceF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Current.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StreamF.h ../Ice/ConnectionI.h ../../include/Ice/Connection.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/CommunicatorF.h ../../include/Ice/ConnectionFactoryF.h ../Ice/TransceiverF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ThreadPoolF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/SelectorThread.h ../Ice/SelectorThreadF.h ../Ice/Selector.h ../Ice/RequestHandler.h ../Ice/Reference.h ../../include/IceUtil/RecMutex.h ../Ice/ReferenceFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/SharedContext.h ../Ice/Instance.h ../../include/Ice/StatsF.h ../Ice/DefaultsAndOverridesF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/BuiltinSequences.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../../include/Ice/Properties.h ../../include/Ice/LoggerUtil.h ../Ice/LocatorInfo.h ../Ice/ProxyFactory.h ../Ice/RouterInfo.h ../Ice/ReplyStatus.h
+Outgoing$(OBJEXT): Outgoing.cpp ../../include/Ice/Outgoing.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/RequestHandlerF.h ../../include/IceUtil/Shared.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ReferenceF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Exception.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StreamF.h ../Ice/RequestHandler.h ../../include/Ice/OutgoingAsyncF.h ../Ice/ConnectionI.h ../../include/IceUtil/Thread.h ../../include/Ice/Connection.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/CommunicatorF.h ../../include/Ice/ConnectionFactoryF.h ../Ice/TransceiverF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThread.h ../../include/IceUtil/Timer.h ../Ice/SelectorThreadF.h ../Ice/Selector.h ../Ice/Reference.h ../../include/IceUtil/RecMutex.h ../Ice/ReferenceFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/SharedContext.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../Ice/Instance.h ../../include/Ice/StatsF.h ../Ice/DefaultsAndOverridesF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../Ice/ReplyStatus.h
+PluginManagerI$(OBJEXT): PluginManagerI.cpp ../Ice/PluginManagerI.h ../../include/Ice/Plugin.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/LoggerF.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/InstanceF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/DynamicLibrary.h ../../include/Ice/Communicator.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StatsF.h ../../include/Ice/PropertiesF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/Properties.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Initialize.h ../../include/Ice/LocalException.h
+Plugin$(OBJEXT): Plugin.cpp ../../include/Ice/Plugin.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/LoggerF.h ../../include/Ice/UndefSysMacros.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
+Process$(OBJEXT): Process.cpp ../../include/Ice/Process.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/InstanceF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/ObjectFactory.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
+PropertiesI$(OBJEXT): PropertiesI.cpp ../../include/IceUtil/DisableWarnings.h ../../include/IceUtil/StringUtil.h ../../include/IceUtil/Config.h ../Ice/PropertiesI.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Properties.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/InstanceF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/LocalException.h ../Ice/PropertyNames.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Communicator.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h
+Properties$(OBJEXT): Properties.cpp ../../include/Ice/Properties.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/InstanceF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalException.h ../../include/Ice/ObjectFactory.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
PropertyNames$(OBJEXT): PropertyNames.cpp ../Ice/PropertyNames.h ../../include/Ice/Config.h ../../include/IceUtil/Config.h
Protocol$(OBJEXT): Protocol.cpp ../../include/Ice/Protocol.h ../../include/Ice/Config.h ../../include/IceUtil/Config.h
-ProtocolPluginFacade$(OBJEXT): ProtocolPluginFacade.cpp ../../include/Ice/ProtocolPluginFacade.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/ProtocolPluginFacadeF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/EndpointFactoryF.h ../../include/Ice/InstanceF.h ../Ice/Instance.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/EndpointFactoryManager.h ../Ice/TraceLevels.h ../Ice/DefaultsAndOverrides.h
-ProxyFactory$(OBJEXT): ProxyFactory.cpp ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Time.h ../Ice/ProxyFactory.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../../include/Ice/ReferenceF.h ../../include/Ice/ProxyF.h ../../include/Ice/Exception.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/ReferenceFactory.h ../Ice/Reference.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../Ice/LocatorInfo.h ../../include/Ice/Properties.h ../../include/Ice/LoggerUtil.h ../Ice/TraceLevels.h
-Proxy$(OBJEXT): Proxy.cpp ../../include/Ice/Proxy.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/ProxyF.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/IceUtil/Handle.h ../../include/Ice/Handle.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../Ice/ProxyFactory.h ../../include/Ice/InstanceF.h ../Ice/ReferenceFactory.h ../Ice/ReferenceFactoryF.h ../Ice/Reference.h ../../include/IceUtil/RecMutex.h ../../include/Ice/RouterF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LocatorF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/SharedContext.h ../../include/Ice/BuiltinSequences.h ../Ice/ObjectAdapterFactory.h ../Ice/ObjectAdapterI.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ServantManagerF.h ../Ice/ConnectorF.h ../Ice/ThreadPoolF.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Direct.h ../Ice/EndpointI.h ../Ice/TransceiverF.h ../Ice/AcceptorF.h ../Ice/Instance.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/Process.h ../../include/Ice/Incoming.h ../Ice/RouterInfo.h ../Ice/LocatorInfo.h ../Ice/ConnectionI.h ../../include/Ice/Connection.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../../include/Ice/Stream.h
-ReferenceFactory$(OBJEXT): ReferenceFactory.cpp ../../include/Ice/Communicator.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/PropertiesF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../Ice/ReferenceFactory.h ../Ice/ReferenceFactoryF.h ../Ice/Reference.h ../../include/IceUtil/RecMutex.h ../../include/Ice/InstanceF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/SharedContext.h ../../include/Ice/BuiltinSequences.h ../Ice/ProxyFactory.h ../../include/Ice/LocalException.h ../Ice/Instance.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/Initialize.h ../../include/Ice/StringConverter.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/EndpointI.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/EndpointFactoryManager.h ../../include/Ice/EndpointFactoryF.h ../Ice/RouterInfo.h ../../include/Ice/Router.h ../Ice/LocatorInfo.h ../../include/Ice/Locator.h ../../include/Ice/IncomingAsync.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Properties.h ../Ice/DefaultsAndOverrides.h ../Ice/PropertyNames.h ../../include/IceUtil/StringUtil.h
-Reference$(OBJEXT): Reference.cpp ../Ice/Reference.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/ReferenceF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../Ice/ReferenceFactoryF.h ../../include/Ice/EndpointIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/InstanceF.h ../../include/Ice/RouterF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LocatorF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/SharedContext.h ../Ice/ReferenceFactory.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalException.h ../Ice/Instance.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../../include/Ice/StringConverter.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/EndpointI.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/RouterInfo.h ../../include/Ice/Router.h ../Ice/LocatorInfo.h ../../include/Ice/Locator.h ../../include/Ice/IncomingAsync.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../Ice/ConnectionI.h ../../include/Ice/Connection.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ConnectionFactory.h ../../include/Ice/LoggerUtil.h ../Ice/TraceLevels.h ../Ice/DefaultsAndOverrides.h ../../include/IceUtil/StringUtil.h ../../include/IceUtil/Random.h
-RouterInfo$(OBJEXT): RouterInfo.cpp ../Ice/RouterInfo.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../Ice/RouterInfoF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/RouterF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Router.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalException.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../Ice/Reference.h ../../include/IceUtil/RecMutex.h ../Ice/ReferenceFactoryF.h ../../include/Ice/LocatorF.h ../Ice/LocatorInfoF.h ../Ice/SharedContext.h
-Router$(OBJEXT): Router.cpp ../../include/Ice/Router.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalException.h ../../include/Ice/ObjectFactory.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
-ServantLocator$(OBJEXT): ServantLocator.cpp ../../include/Ice/ServantLocator.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StreamF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
-ServantManager$(OBJEXT): ServantManager.cpp ../Ice/ServantManager.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Identity.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/LocalException.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StringConverter.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/IceUtil/StringUtil.h
-Service$(OBJEXT): Service.cpp ../../include/IceUtil/DisableWarnings.h ../../include/IceUtil/CtrlCHandler.h ../../include/IceUtil/Config.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/ArgVector.h ../../include/Ice/Service.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/RecMutex.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Process.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Locator.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/Router.h ../../include/Ice/DispatchInterceptor.h ../../include/Ice/IconvStringConverter.h ../Ice/LoggerI.h ../Ice/Network.h
-SliceChecksumDict$(OBJEXT): SliceChecksumDict.cpp ../../include/Ice/SliceChecksumDict.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
-SliceChecksums$(OBJEXT): SliceChecksums.cpp ../../include/Ice/SliceChecksums.h ../../include/Ice/SliceChecksumDict.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/IceUtil/StaticMutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h
-Stats$(OBJEXT): Stats.cpp ../../include/Ice/Stats.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
-StreamI$(OBJEXT): StreamI.cpp ../Ice/StreamI.h ../../include/Ice/Stream.h ../../include/Ice/StreamF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/BuiltinSequences.h
-Stream$(OBJEXT): Stream.cpp ../../include/Ice/Stream.h ../../include/Ice/StreamF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h
-StringConverter$(OBJEXT): StringConverter.cpp ../../include/Ice/StringConverter.h ../../include/Ice/Config.h ../../include/IceUtil/Config.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Handle.h ../../include/IceUtil/IceUtil.h ../../include/IceUtil/AbstractMutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Algorithm.h ../../include/IceUtil/ArgVector.h ../../include/IceUtil/Base64.h ../../include/IceUtil/Cache.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/CountDownLatch.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/CtrlCHandler.h ../../include/IceUtil/Functional.h ../../include/IceUtil/InputUtil.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/MD5.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Options.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/OutputUtil.h ../../include/IceUtil/RWRecMutex.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Random.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/StaticMutex.h ../../include/IceUtil/StringUtil.h ../../include/IceUtil/UUID.h ../../include/IceUtil/Unicode.h ../../include/IceUtil/Timer.h ../../include/Ice/LocalException.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h
+ProtocolPluginFacade$(OBJEXT): ProtocolPluginFacade.cpp ../../include/Ice/ProtocolPluginFacade.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/ProtocolPluginFacadeF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/EndpointFactoryF.h ../../include/Ice/InstanceF.h ../../include/Ice/EndpointIF.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/EndpointFactoryManager.h ../Ice/TraceLevels.h ../Ice/DefaultsAndOverrides.h
+ProxyFactory$(OBJEXT): ProxyFactory.cpp ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Time.h ../Ice/ProxyFactory.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../../include/Ice/ReferenceF.h ../../include/Ice/ProxyF.h ../../include/Ice/Exception.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/ReferenceFactory.h ../Ice/Reference.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../Ice/LocatorInfo.h ../../include/Ice/Properties.h ../../include/Ice/LoggerUtil.h ../Ice/TraceLevels.h
+Proxy$(OBJEXT): Proxy.cpp ../../include/Ice/Proxy.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/ProxyF.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/IceUtil/Handle.h ../../include/Ice/Handle.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../Ice/ProxyFactory.h ../../include/Ice/InstanceF.h ../Ice/ReferenceFactory.h ../Ice/ReferenceFactoryF.h ../Ice/Reference.h ../../include/IceUtil/RecMutex.h ../../include/Ice/RouterF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LocatorF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/SharedContext.h ../../include/Ice/BuiltinSequences.h ../Ice/ObjectAdapterFactory.h ../Ice/ObjectAdapterI.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ServantManagerF.h ../Ice/ConnectorF.h ../Ice/ThreadPoolF.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../Ice/ConnectRequestHandler.h ../Ice/RequestHandler.h ../Ice/RouterInfo.h ../Ice/ConnectionRequestHandler.h ../../include/Ice/Direct.h ../Ice/EndpointI.h ../Ice/TransceiverF.h ../Ice/AcceptorF.h ../Ice/Instance.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/Process.h ../../include/Ice/Incoming.h ../Ice/LocatorInfo.h ../Ice/ConnectionI.h ../../include/Ice/Connection.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/SelectorThread.h ../Ice/Selector.h ../../include/Ice/Stream.h
+ReferenceFactory$(OBJEXT): ReferenceFactory.cpp ../../include/Ice/Communicator.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/PropertiesF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../Ice/ReferenceFactory.h ../Ice/ReferenceFactoryF.h ../Ice/Reference.h ../../include/IceUtil/RecMutex.h ../../include/Ice/InstanceF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/SharedContext.h ../../include/Ice/BuiltinSequences.h ../Ice/ProxyFactory.h ../../include/Ice/LocalException.h ../Ice/Instance.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/Initialize.h ../../include/Ice/StringConverter.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/EndpointI.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/EndpointFactoryManager.h ../../include/Ice/EndpointFactoryF.h ../Ice/RouterInfo.h ../../include/Ice/Router.h ../Ice/LocatorInfo.h ../../include/Ice/Locator.h ../../include/Ice/IncomingAsync.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Properties.h ../Ice/DefaultsAndOverrides.h ../Ice/PropertyNames.h ../../include/IceUtil/StringUtil.h
+Reference$(OBJEXT): Reference.cpp ../Ice/Reference.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/RecMutex.h ../../include/Ice/ReferenceF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../Ice/ReferenceFactoryF.h ../../include/Ice/EndpointIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h ../../include/Ice/InstanceF.h ../../include/Ice/RouterF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LocatorF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/SharedContext.h ../Ice/ReferenceFactory.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalException.h ../Ice/Instance.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../../include/Ice/StringConverter.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/EndpointI.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/RouterInfo.h ../../include/Ice/Router.h ../Ice/LocatorInfo.h ../../include/Ice/Locator.h ../../include/Ice/IncomingAsync.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../Ice/ConnectionI.h ../../include/Ice/Connection.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/SelectorThread.h ../Ice/Selector.h ../Ice/ConnectionFactory.h ../../include/Ice/LoggerUtil.h ../Ice/TraceLevels.h ../Ice/DefaultsAndOverrides.h ../../include/IceUtil/StringUtil.h ../../include/IceUtil/Random.h
+RequestHandler$(OBJEXT): RequestHandler.cpp ../Ice/RequestHandler.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/LocalObject.h ../../include/Ice/LocalObjectF.h
+RouterInfo$(OBJEXT): RouterInfo.cpp ../Ice/RouterInfo.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../Ice/RouterInfoF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/RouterF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Router.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/InstanceF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LocalException.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../Ice/Reference.h ../../include/IceUtil/RecMutex.h ../Ice/ReferenceFactoryF.h ../../include/Ice/LocatorF.h ../Ice/LocatorInfoF.h ../Ice/SharedContext.h
+Router$(OBJEXT): Router.cpp ../../include/Ice/Router.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/InstanceF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalException.h ../../include/Ice/ObjectFactory.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
+Selector$(OBJEXT): Selector.cpp ../../include/IceUtil/DisableWarnings.h ../Ice/Selector.h ../../include/Ice/Config.h ../../include/IceUtil/Config.h ../../include/Ice/InstanceF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/ProxyHandle.h ../Ice/Network.h ../../include/Ice/PropertiesF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LoggerUtil.h
+SelectorThread$(OBJEXT): SelectorThread.cpp ../../include/IceUtil/DisableWarnings.h ../Ice/SelectorThread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Timer.h ../../include/Ice/Config.h ../Ice/SelectorThreadF.h ../../include/Ice/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../Ice/Selector.h ../Ice/Network.h ../../include/Ice/PropertiesF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LoggerUtil.h
+ServantLocator$(OBJEXT): ServantLocator.cpp ../../include/Ice/ServantLocator.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StreamF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
+ServantManager$(OBJEXT): ServantManager.cpp ../Ice/ServantManager.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Identity.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/LocalException.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StringConverter.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/IceUtil/StringUtil.h
+Service$(OBJEXT): Service.cpp ../../include/IceUtil/DisableWarnings.h ../../include/IceUtil/CtrlCHandler.h ../../include/IceUtil/Config.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/ArgVector.h ../../include/Ice/Service.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Timer.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Process.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Locator.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/Router.h ../../include/Ice/DispatchInterceptor.h ../../include/Ice/IconvStringConverter.h ../Ice/LoggerI.h ../Ice/Network.h
+SliceChecksumDict$(OBJEXT): SliceChecksumDict.cpp ../../include/Ice/SliceChecksumDict.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
+SliceChecksums$(OBJEXT): SliceChecksums.cpp ../../include/Ice/SliceChecksums.h ../../include/Ice/SliceChecksumDict.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/IceUtil/StaticMutex.h
+Stats$(OBJEXT): Stats.cpp ../../include/Ice/Stats.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
+StreamI$(OBJEXT): StreamI.cpp ../Ice/StreamI.h ../../include/Ice/Stream.h ../../include/Ice/StreamF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/BuiltinSequences.h
+Stream$(OBJEXT): Stream.cpp ../../include/Ice/Stream.h ../../include/Ice/StreamF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h
+StringConverter$(OBJEXT): StringConverter.cpp ../../include/Ice/StringConverter.h ../../include/Ice/Config.h ../../include/IceUtil/Config.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Handle.h ../../include/IceUtil/IceUtil.h ../../include/IceUtil/AbstractMutex.h ../../include/IceUtil/Algorithm.h ../../include/IceUtil/ArgVector.h ../../include/IceUtil/Base64.h ../../include/IceUtil/Cache.h ../../include/IceUtil/CountDownLatch.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/CtrlCHandler.h ../../include/IceUtil/Functional.h ../../include/IceUtil/InputUtil.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/MD5.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Options.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/OutputUtil.h ../../include/IceUtil/RWRecMutex.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Random.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/StaticMutex.h ../../include/IceUtil/StringUtil.h ../../include/IceUtil/UUID.h ../../include/IceUtil/Unicode.h ../../include/IceUtil/Timer.h ../../include/Ice/LocalException.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h
SysLoggerI$(OBJEXT): SysLoggerI.cpp ../Ice/SysLoggerI.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Logger.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h
-TcpAcceptor$(OBJEXT): TcpAcceptor.cpp ../Ice/TcpAcceptor.h ../Ice/TransceiverF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../Ice/TraceLevelsF.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../Ice/Acceptor.h ../Ice/AcceptorF.h ../Ice/TcpTransceiver.h ../../include/Ice/StatsF.h ../Ice/Transceiver.h ../Ice/Instance.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/CommunicatorF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/TraceLevels.h ../../include/Ice/LoggerUtil.h ../Ice/Network.h
-TcpConnector$(OBJEXT): TcpConnector.cpp ../Ice/TcpConnector.h ../Ice/TransceiverF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../Ice/TraceLevelsF.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../Ice/Connector.h ../Ice/ConnectorF.h ../Ice/TcpTransceiver.h ../../include/Ice/StatsF.h ../Ice/Transceiver.h ../Ice/TcpEndpointI.h ../Ice/EndpointI.h ../../include/Ice/Endpoint.h ../../include/Ice/EndpointIF.h ../Ice/AcceptorF.h ../../include/Ice/EndpointFactory.h ../../include/Ice/EndpointFactoryF.h ../Ice/Instance.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/CommunicatorF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/TraceLevels.h ../../include/Ice/LoggerUtil.h ../Ice/Network.h
-TcpEndpointI$(OBJEXT): TcpEndpointI.cpp ../Ice/TcpEndpointI.h ../Ice/EndpointI.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Endpoint.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/EndpointIF.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../../include/Ice/EndpointFactory.h ../../include/Ice/EndpointFactoryF.h ../Ice/Network.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../Ice/TcpAcceptor.h ../Ice/TraceLevelsF.h ../Ice/Acceptor.h ../Ice/TcpConnector.h ../Ice/Connector.h ../Ice/TcpTransceiver.h ../../include/Ice/StatsF.h ../Ice/Transceiver.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/DefaultsAndOverrides.h
-TcpTransceiver$(OBJEXT): TcpTransceiver.cpp ../Ice/TcpTransceiver.h ../../include/Ice/InstanceF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../Ice/TraceLevelsF.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/StatsF.h ../Ice/Transceiver.h ../Ice/TransceiverF.h ../Ice/Instance.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/CommunicatorF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/TraceLevels.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../Ice/Network.h
-ThreadPool$(OBJEXT): ThreadPool.cpp ../../include/IceUtil/DisableWarnings.h ../Ice/ThreadPool.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Handle.h ../Ice/ThreadPoolF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../Ice/EventHandlerF.h ../Ice/EventHandler.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/Network.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../Ice/ObjectAdapterFactory.h ../Ice/ObjectAdapterI.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../Ice/ConnectorF.h ../../include/Ice/Properties.h
-TraceLevels$(OBJEXT): TraceLevels.cpp ../Ice/TraceLevels.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../Ice/TraceLevelsF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/PropertiesF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Properties.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/BuiltinSequences.h
-TraceUtil$(OBJEXT): TraceUtil.cpp ../../include/IceUtil/StaticMutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/StringUtil.h ../Ice/TraceUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../Ice/TraceLevelsF.h ../Ice/Instance.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/InstanceF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/StatsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/TraceLevels.h ../../include/Ice/Logger.h ../Ice/ReplyStatus.h
-Transceiver$(OBJEXT): Transceiver.cpp ../Ice/Transceiver.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../Ice/TransceiverF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h
-UdpConnector$(OBJEXT): UdpConnector.cpp ../Ice/UdpConnector.h ../Ice/TransceiverF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../Ice/Connector.h ../Ice/ConnectorF.h ../Ice/UdpTransceiver.h ../Ice/TraceLevelsF.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/StatsF.h ../Ice/Transceiver.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../Ice/UdpEndpointI.h ../Ice/EndpointI.h ../../include/Ice/Endpoint.h ../../include/Ice/EndpointIF.h ../Ice/AcceptorF.h ../../include/Ice/EndpointFactory.h ../../include/Ice/EndpointFactoryF.h ../Ice/Network.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h
-UdpEndpointI$(OBJEXT): UdpEndpointI.cpp ../Ice/UdpEndpointI.h ../Ice/EndpointI.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Endpoint.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/EndpointIF.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../../include/Ice/EndpointFactory.h ../../include/Ice/EndpointFactoryF.h ../Ice/Network.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../Ice/UdpConnector.h ../Ice/Connector.h ../Ice/UdpTransceiver.h ../Ice/TraceLevelsF.h ../../include/Ice/StatsF.h ../Ice/Transceiver.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/DefaultsAndOverrides.h
-UdpTransceiver$(OBJEXT): UdpTransceiver.cpp ../Ice/UdpTransceiver.h ../../include/Ice/InstanceF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../Ice/TraceLevelsF.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/StatsF.h ../Ice/Transceiver.h ../Ice/TransceiverF.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/CommunicatorF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/TraceLevels.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../Ice/Network.h ../../include/Ice/Properties.h
-UnknownEndpointI$(OBJEXT): UnknownEndpointI.cpp ../Ice/UnknownEndpointI.h ../Ice/EndpointI.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Endpoint.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/EndpointIF.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../../include/Ice/EndpointFactory.h ../../include/Ice/EndpointFactoryF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/Instance.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/CommunicatorF.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/IceUtil/Base64.h
-DLLMain$(OBJEXT): DLLMain.cpp ../Ice/EventLoggerI.h ../../include/Ice/Logger.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Service.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/Properties.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/RecMutex.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Process.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../../include/Ice/Locator.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/Router.h ../../include/Ice/DispatchInterceptor.h ../../include/Ice/IconvStringConverter.h
-EventLoggerI$(OBJEXT): EventLoggerI.cpp ../Ice/EventLoggerI.h ../../include/Ice/Logger.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../Ice/EventLoggerMsg.h ../../include/Ice/LocalException.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h ../Ice/Network.h ../../include/Ice/PropertiesF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/IceUtil/StaticMutex.h
+TcpAcceptor$(OBJEXT): TcpAcceptor.cpp ../Ice/TcpAcceptor.h ../Ice/TransceiverF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../Ice/TraceLevelsF.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../Ice/Acceptor.h ../Ice/AcceptorF.h ../Ice/TcpTransceiver.h ../../include/Ice/StatsF.h ../Ice/Transceiver.h ../Ice/Selector.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/CommunicatorF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/TraceLevels.h ../../include/Ice/LoggerUtil.h ../Ice/Network.h
+TcpConnector$(OBJEXT): TcpConnector.cpp ../Ice/TcpConnector.h ../Ice/TransceiverF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../Ice/TraceLevelsF.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../Ice/Connector.h ../Ice/ConnectorF.h ../Ice/TcpTransceiver.h ../../include/Ice/StatsF.h ../Ice/Transceiver.h ../Ice/Selector.h ../Ice/TcpEndpointI.h ../Ice/EndpointI.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Endpoint.h ../../include/Ice/EndpointIF.h ../Ice/AcceptorF.h ../../include/Ice/EndpointFactory.h ../../include/Ice/EndpointFactoryF.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/Ice/CommunicatorF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/TraceLevels.h ../../include/Ice/LoggerUtil.h ../Ice/Network.h
+TcpEndpointI$(OBJEXT): TcpEndpointI.cpp ../Ice/TcpEndpointI.h ../Ice/EndpointI.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Endpoint.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/EndpointIF.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../../include/Ice/EndpointFactory.h ../../include/Ice/EndpointFactoryF.h ../Ice/Network.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../Ice/TcpAcceptor.h ../Ice/TraceLevelsF.h ../Ice/Acceptor.h ../Ice/TcpConnector.h ../Ice/Connector.h ../Ice/TcpTransceiver.h ../../include/Ice/StatsF.h ../Ice/Transceiver.h ../Ice/Selector.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/DefaultsAndOverrides.h
+TcpTransceiver$(OBJEXT): TcpTransceiver.cpp ../Ice/TcpTransceiver.h ../../include/Ice/InstanceF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../Ice/TraceLevelsF.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/StatsF.h ../Ice/Transceiver.h ../Ice/TransceiverF.h ../Ice/Selector.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/CommunicatorF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/TraceLevels.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../Ice/Network.h
+ThreadPool$(OBJEXT): ThreadPool.cpp ../../include/IceUtil/DisableWarnings.h ../Ice/ThreadPool.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../Ice/ThreadPoolF.h ../../include/Ice/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../Ice/EventHandlerF.h ../Ice/Selector.h ../Ice/EventHandler.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/Network.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../Ice/ObjectAdapterFactory.h ../Ice/ObjectAdapterI.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../Ice/ConnectorF.h ../../include/Ice/Properties.h
+TraceLevels$(OBJEXT): TraceLevels.cpp ../Ice/TraceLevels.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../Ice/TraceLevelsF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/PropertiesF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Properties.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/InstanceF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/BuiltinSequences.h
+TraceUtil$(OBJEXT): TraceUtil.cpp ../../include/IceUtil/StaticMutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/StringUtil.h ../Ice/TraceUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../Ice/TraceLevelsF.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/InstanceF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/StatsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/TraceLevels.h ../../include/Ice/Logger.h ../Ice/ReplyStatus.h
+Transceiver$(OBJEXT): Transceiver.cpp ../Ice/Transceiver.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../Ice/TransceiverF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../Ice/Selector.h ../../include/Ice/InstanceF.h
+UdpConnector$(OBJEXT): UdpConnector.cpp ../Ice/UdpConnector.h ../Ice/TransceiverF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/InstanceF.h ../Ice/Connector.h ../Ice/ConnectorF.h ../Ice/UdpTransceiver.h ../Ice/TraceLevelsF.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/StatsF.h ../Ice/Transceiver.h ../Ice/Selector.h ../Ice/UdpEndpointI.h ../Ice/EndpointI.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Endpoint.h ../../include/Ice/EndpointIF.h ../Ice/AcceptorF.h ../../include/Ice/EndpointFactory.h ../../include/Ice/EndpointFactoryF.h ../Ice/Network.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h
+UdpEndpointI$(OBJEXT): UdpEndpointI.cpp ../Ice/UdpEndpointI.h ../Ice/EndpointI.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Endpoint.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/EndpointIF.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../../include/Ice/EndpointFactory.h ../../include/Ice/EndpointFactoryF.h ../Ice/Network.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../Ice/UdpConnector.h ../Ice/Connector.h ../Ice/UdpTransceiver.h ../Ice/TraceLevelsF.h ../../include/Ice/StatsF.h ../Ice/Transceiver.h ../Ice/Selector.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/DefaultsAndOverrides.h
+UdpTransceiver$(OBJEXT): UdpTransceiver.cpp ../Ice/UdpTransceiver.h ../../include/Ice/InstanceF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../Ice/TraceLevelsF.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/StatsF.h ../Ice/Transceiver.h ../Ice/TransceiverF.h ../Ice/Selector.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/CommunicatorF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../Ice/TraceLevels.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../Ice/Network.h ../../include/Ice/Properties.h
+UnknownEndpointI$(OBJEXT): UnknownEndpointI.cpp ../Ice/UnknownEndpointI.h ../Ice/EndpointI.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Endpoint.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/EndpointIF.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../../include/Ice/EndpointFactory.h ../../include/Ice/EndpointFactoryF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Timer.h ../../include/Ice/CommunicatorF.h ../../include/Ice/StatsF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ThreadPoolF.h ../Ice/SelectorThreadF.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/ConnectionMonitorF.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/Ice/BuiltinSequences.h ../Ice/SharedContext.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/LocalException.h ../../include/Ice/FacetMap.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/IceUtil/Base64.h
+DLLMain$(OBJEXT): DLLMain.cpp ../Ice/EventLoggerI.h ../../include/Ice/Logger.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../Ice/ImplicitContextI.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Service.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/Properties.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Timer.h ../../include/IceUtil/Thread.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Process.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../../include/Ice/Locator.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/Router.h ../../include/Ice/DispatchInterceptor.h ../../include/Ice/IconvStringConverter.h
+EventLoggerI$(OBJEXT): EventLoggerI.cpp ../Ice/EventLoggerI.h ../../include/Ice/Logger.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../Ice/EventLoggerMsg.h ../../include/Ice/LocalException.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/RequestHandlerF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/BuiltinSequences.h ../Ice/Network.h ../../include/Ice/PropertiesF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/LoggerF.h ../../include/IceUtil/StaticMutex.h
BuiltinSequences.cpp: ../../../slice/Ice/BuiltinSequences.ice
CommunicatorF.cpp: ../../../slice/Ice/CommunicatorF.ice
Communicator.cpp: ../../../slice/Ice/Communicator.ice ../../../slice/Ice/LoggerF.ice ../../../slice/Ice/StatsF.ice ../../../slice/Ice/ObjectAdapterF.ice ../../../slice/Ice/PropertiesF.ice ../../../slice/Ice/ObjectFactoryF.ice ../../../slice/Ice/RouterF.ice ../../../slice/Ice/LocatorF.ice ../../../slice/Ice/PluginF.ice ../../../slice/Ice/ImplicitContextF.ice ../../../slice/Ice/Current.ice ../../../slice/Ice/ConnectionF.ice ../../../slice/Ice/Identity.ice
diff --git a/cpp/src/Ice/ConnectRequestHandler.cpp b/cpp/src/Ice/ConnectRequestHandler.cpp
new file mode 100644
index 00000000000..f306b6c26b6
--- /dev/null
+++ b/cpp/src/Ice/ConnectRequestHandler.cpp
@@ -0,0 +1,412 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2007 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 <Ice/ConnectRequestHandler.h>
+#include <Ice/ConnectionRequestHandler.h>
+#include <Ice/Instance.h>
+#include <Ice/Proxy.h>
+#include <Ice/ConnectionI.h>
+#include <Ice/RouterInfo.h>
+#include <Ice/Outgoing.h>
+#include <Ice/OutgoingAsync.h>
+#include <Ice/Protocol.h>
+#include <Ice/Properties.h>
+
+using namespace std;
+using namespace IceInternal;
+
+ConnectRequestHandler::ConnectRequestHandler(const ReferencePtr& ref,
+ const Ice::ObjectPrx& proxy,
+ const Handle< ::IceDelegate::Ice::Object>& delegate) :
+ RequestHandler(ref),
+ _proxy(proxy),
+ _delegate(delegate),
+ _response(ref->getMode() == Reference::ModeTwoway),
+ _batchAutoFlush(
+ ref->getInstance()->initializationData().properties->getPropertyAsIntWithDefault("Ice.BatchAutoFlush", 1) > 0),
+ _initialized(false),
+ _flushing(false),
+ _batchRequestInProgress(false),
+ _batchRequestsSize(sizeof(requestBatchHdr)),
+ _batchStream(ref->getInstance().get(), _batchAutoFlush),
+ _updateRequestHandler(false)
+{
+}
+
+ConnectRequestHandler::~ConnectRequestHandler()
+{
+}
+
+RequestHandlerPtr
+ConnectRequestHandler::connect()
+{
+ _reference->getConnection(this);
+
+ Lock sync(*this);
+ if(_connection)
+ {
+ return new ConnectionRequestHandler(_reference, _connection, _compress);
+ }
+ else
+ {
+ _updateRequestHandler = true; // The proxy request handler will be updated when the connection is set.
+ return this;
+ }
+}
+
+void
+ConnectRequestHandler::prepareBatchRequest(BasicStream* os)
+{
+ {
+ Lock sync(*this);
+ while(_batchRequestInProgress)
+ {
+ wait();
+ }
+
+ if(!initialized())
+ {
+ _batchRequestInProgress = true;
+ _batchStream.swap(*os);
+ return;
+ }
+ }
+ _connection->prepareBatchRequest(os);
+}
+
+void
+ConnectRequestHandler::finishBatchRequest(BasicStream* os)
+{
+ {
+ Lock sync(*this);
+ if(!initialized())
+ {
+ assert(_batchRequestInProgress);
+ _batchRequestInProgress = false;
+ notifyAll();
+
+ _batchStream.swap(*os);
+
+ if(!_batchAutoFlush &&
+ _batchStream.b.size() + _batchRequestsSize > _reference->getInstance()->messageSizeMax())
+ {
+ throw Ice::MemoryLimitException(__FILE__, __LINE__);
+ }
+
+ _batchRequestsSize += _batchStream.b.size();
+
+ Request req;
+ req.os = new BasicStream(_reference->getInstance().get(), _batchAutoFlush);
+ req.os->swap(_batchStream);
+ _requests.push_back(req);
+ return;
+ }
+ }
+ _connection->finishBatchRequest(os, _compress);
+}
+
+void
+ConnectRequestHandler::abortBatchRequest()
+{
+ {
+ Lock sync(*this);
+ if(!initialized())
+ {
+ assert(_batchRequestInProgress);
+ _batchRequestInProgress = false;
+ notifyAll();
+
+ BasicStream dummy(_reference->getInstance().get(), _batchAutoFlush);
+ _batchStream.swap(dummy);
+ _batchRequestsSize = sizeof(requestBatchHdr);
+
+ return;
+ }
+ }
+ _connection->abortBatchRequest();
+}
+
+Ice::ConnectionI*
+ConnectRequestHandler::sendRequest(Outgoing* out)
+{
+ return (!getConnection(true)->sendRequest(out, _compress, _response) || _response) ? _connection.get() : 0;
+}
+
+void
+ConnectRequestHandler::sendAsyncRequest(const OutgoingAsyncPtr& out)
+{
+ try
+ {
+ {
+ Lock sync(*this);
+ if(!initialized())
+ {
+ Request req;
+ req.out = out;
+ _requests.push_back(req);
+ return;
+ }
+ }
+ _connection->sendAsyncRequest(out, _compress, _response);
+ }
+ catch(const LocalExceptionWrapper& ex)
+ {
+ out->__finished(ex);
+ }
+ catch(const Ice::LocalException& ex)
+ {
+ out->__finished(ex);
+ }
+}
+
+bool
+ConnectRequestHandler::flushBatchRequests(BatchOutgoing* out)
+{
+ return getConnection(true)->flushBatchRequests(out);
+}
+
+void
+ConnectRequestHandler::flushAsyncBatchRequests(const BatchOutgoingAsyncPtr& out)
+{
+ try
+ {
+ {
+ Lock sync(*this);
+ if(!initialized())
+ {
+ Request req;
+ req.batchOut = out;
+ _requests.push_back(req);
+ return;
+ }
+ }
+ _connection->flushAsyncBatchRequests(out);
+ }
+ catch(const Ice::LocalException& ex)
+ {
+ out->__finished(ex);
+ }
+}
+
+Ice::ConnectionIPtr
+ConnectRequestHandler::getConnection(bool waitInit)
+{
+ if(waitInit)
+ {
+ //
+ // Wait for the connection establishment to complete or fail.
+ //
+ Lock sync(*this);
+ while(!_initialized && !_exception.get())
+ {
+ wait();
+ }
+ }
+
+ if(_exception.get())
+ {
+ _exception->ice_throw();
+ return false; // Keep the compiler happy.
+ }
+ else
+ {
+ assert(!waitInit || _initialized);
+ return _connection;
+ }
+}
+
+void
+ConnectRequestHandler::setConnection(const Ice::ConnectionIPtr& connection, bool compress)
+{
+ {
+ Lock sync(*this);
+ _connection = connection;
+ _compress = compress;
+ }
+
+ //
+ // If this proxy is for a non-local object, and we are using a router, then
+ // add this proxy to the router info object.
+ //
+ RouterInfoPtr ri = _reference->getRouterInfo();
+ if(ri)
+ {
+ if(!ri->addProxy(_proxy, this))
+ {
+ return; // The request handler will be initialized once addProxy returns.
+ }
+ }
+
+ flushRequests();
+}
+
+void
+ConnectRequestHandler::setException(const Ice::LocalException& ex)
+{
+ {
+ Lock sync(*this);
+ _exception.reset(dynamic_cast<Ice::LocalException*>(ex.ice_clone()));
+ _proxy = 0; // Break cyclic reference count.
+ _delegate = 0; // Break cyclic reference count.
+ notifyAll();
+ }
+
+ for(vector<Request>::const_iterator p = _requests.begin(); p != _requests.end(); ++p)
+ {
+ if(p->out)
+ {
+ p->out->__finished(ex);
+ }
+ else if(p->batchOut)
+ {
+ p->batchOut->__finished(ex);
+ }
+ else
+ {
+ assert(p->os);
+ delete p->os;
+ }
+ }
+ _requests.clear();
+}
+
+void
+ConnectRequestHandler::addedProxy()
+{
+ flushRequests();
+}
+
+bool
+ConnectRequestHandler::initialized()
+{
+ // Must be called with the mutex locked.
+
+ if(_initialized)
+ {
+ assert(_connection);
+ return true;
+ }
+ else
+ {
+ while(_flushing)
+ {
+ wait();
+ }
+
+ if(_exception.get())
+ {
+ _exception->ice_throw();
+ return false; // Keep the compiler happy.
+ }
+ else
+ {
+ return _initialized;
+ }
+ }
+}
+
+void
+ConnectRequestHandler::flushRequests()
+{
+ {
+ Lock sync(*this);
+ assert(_connection);
+
+ while(_batchRequestInProgress)
+ {
+ wait();
+ }
+
+ //
+ // We set the _flushing flag to true to prevent any additional queuing. Callers
+ // might block for a little while as the queued requests are being sent but this
+ // shouldn't be an issue as the request sends are non-blocking.
+ //
+ _flushing = true;
+ }
+
+ for(vector<Request>::const_iterator p = _requests.begin(); p != _requests.end(); ++p)
+ {
+ // _requests is immutable when _flushing = true
+ if(p->out)
+ {
+ try
+ {
+ _connection->sendAsyncRequest(p->out, _compress, _response);
+ }
+ catch(const LocalExceptionWrapper& ex)
+ {
+ p->out->__finished(ex);
+ }
+ catch(const Ice::LocalException& ex)
+ {
+ p->out->__finished(ex);
+ }
+ }
+ else if(p->batchOut)
+ {
+ try
+ {
+ _connection->flushAsyncBatchRequests(p->batchOut);
+ }
+ catch(const Ice::LocalException& ex)
+ {
+ p->batchOut->__finished(ex);
+ }
+ }
+ else
+ {
+ assert(p->os);
+ if(_exception.get())
+ {
+ delete p->os;
+ }
+ else
+ {
+ //
+ // TODO: Add sendBatchRequest() method to ConnectionI?
+ //
+ try
+ {
+ BasicStream os(p->os->instance());
+ _connection->prepareBatchRequest(&os);
+ const Ice::Byte* bytes;
+ p->os->i = p->os->b.begin();
+ p->os->readBlob(bytes, p->os->b.size());
+ os.writeBlob(bytes, p->os->b.size());
+ _connection->finishBatchRequest(&os, _compress);
+ delete p->os;
+ }
+ catch(const Ice::LocalException& ex)
+ {
+ delete p->os;
+ _connection->abortBatchRequest();
+ _exception.reset(dynamic_cast<Ice::LocalException*>(ex.ice_clone()));
+ }
+ }
+ }
+ }
+ _requests.clear();
+
+ {
+ Lock sync(*this);
+ _initialized = true;
+ _flushing = false;
+ notifyAll();
+ }
+
+ if(_updateRequestHandler && !_exception.get())
+ {
+ _proxy->__setRequestHandler(_delegate, new ConnectionRequestHandler(_reference, _connection, _compress));
+ }
+ _proxy = 0; // Break cyclic reference count.
+ _delegate = 0; // Break cyclic reference count.
+}
+
+
diff --git a/cpp/src/Ice/ConnectRequestHandler.h b/cpp/src/Ice/ConnectRequestHandler.h
new file mode 100644
index 00000000000..bdf8d1b3a16
--- /dev/null
+++ b/cpp/src/Ice/ConnectRequestHandler.h
@@ -0,0 +1,88 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2007 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 ICE_CONNECT_REQUEST_HANDLER_H
+#define ICE_CONNECT_REQUEST_HANDLER_H
+
+#include <IceUtil/Monitor.h>
+#include <IceUtil/Mutex.h>
+
+#include <Ice/RequestHandler.h>
+#include <Ice/Reference.h>
+#include <Ice/RouterInfo.h>
+#include <Ice/ProxyF.h>
+#include <Ice/BasicStream.h>
+
+namespace IceInternal
+{
+
+class ConnectRequestHandler : public RequestHandler,
+ public Reference::GetConnectionCallback,
+ public RouterInfo::AddProxyCallback,
+ public IceUtil::Monitor<IceUtil::Mutex>
+{
+public:
+
+ ConnectRequestHandler(const ReferencePtr&, const Ice::ObjectPrx&, const Handle< ::IceDelegate::Ice::Object>&);
+ virtual ~ConnectRequestHandler();
+
+ RequestHandlerPtr connect();
+
+ virtual void prepareBatchRequest(BasicStream*);
+ virtual void finishBatchRequest(BasicStream*);
+ virtual void abortBatchRequest();
+
+ virtual Ice::ConnectionI* sendRequest(Outgoing*);
+ virtual void sendAsyncRequest(const OutgoingAsyncPtr&);
+
+ virtual bool flushBatchRequests(BatchOutgoing*);
+ virtual void flushAsyncBatchRequests(const BatchOutgoingAsyncPtr&);
+
+ virtual Ice::ConnectionIPtr getConnection(bool);
+
+ virtual void setConnection(const Ice::ConnectionIPtr&, bool);
+ virtual void setException(const Ice::LocalException&);
+
+ virtual void addedProxy();
+
+private:
+
+ bool initialized();
+ void flushRequests();
+
+ struct Request
+ {
+ OutgoingAsyncPtr out;
+ BatchOutgoingAsyncPtr batchOut;
+ BasicStream* os;
+ };
+
+ Ice::ObjectPrx _proxy;
+ Handle< ::IceDelegate::Ice::Object> _delegate;
+
+ const bool _response;
+ const bool _batchAutoFlush;
+
+ Ice::ConnectionIPtr _connection;
+ bool _compress;
+ std::auto_ptr<Ice::LocalException> _exception;
+ bool _initialized;
+ bool _flushing;
+
+ std::vector<Request> _requests;
+ bool _batchRequestInProgress;
+ size_t _batchRequestsSize;
+ BasicStream _batchStream;
+ bool _updateRequestHandler;
+};
+typedef IceUtil::Handle<ConnectRequestHandler> ConnectRequestHandlerPtr;
+
+}
+
+#endif
diff --git a/cpp/src/Ice/ConnectionFactory.cpp b/cpp/src/Ice/ConnectionFactory.cpp
index af2b506193d..6d69a36cb84 100644
--- a/cpp/src/Ice/ConnectionFactory.cpp
+++ b/cpp/src/Ice/ConnectionFactory.cpp
@@ -38,6 +38,7 @@ IceUtil::Shared* IceInternal::upCast(IncomingConnectionFactory* p) { return p; }
namespace
{
+
struct RandomNumberGenerator : public std::unary_function<ptrdiff_t, ptrdiff_t>
{
ptrdiff_t operator()(ptrdiff_t d)
@@ -45,6 +46,22 @@ struct RandomNumberGenerator : public std::unary_function<ptrdiff_t, ptrdiff_t>
return IceUtil::random(static_cast<int>(d));
}
};
+
+}
+
+bool
+IceInternal::OutgoingConnectionFactory::ConnectorInfo::operator<(const ConnectorInfo& other) const
+{
+ if(!threadPerConnection && other.threadPerConnection)
+ {
+ return true;
+ }
+ else if(other.threadPerConnection < threadPerConnection)
+ {
+ return false;
+ }
+
+ return connector < other.connector;
}
void
@@ -60,11 +77,11 @@ IceInternal::OutgoingConnectionFactory::destroy()
#ifdef _STLP_BEGIN_NAMESPACE
// voidbind2nd is an STLport extension for broken compilers in IceUtil/Functional.h
for_each(_connections.begin(), _connections.end(),
- voidbind2nd(Ice::secondVoidMemFun1<ConnectorPtr, ConnectionI, ConnectionI::DestructionReason>
+ voidbind2nd(Ice::secondVoidMemFun1<ConnectorInfo, ConnectionI, ConnectionI::DestructionReason>
(&ConnectionI::destroy), ConnectionI::CommunicatorDestroyed));
#else
for_each(_connections.begin(), _connections.end(),
- bind2nd(Ice::secondVoidMemFun1<const ConnectorPtr, ConnectionI, ConnectionI::DestructionReason>
+ bind2nd(Ice::secondVoidMemFun1<const ConnectorInfo, ConnectionI, ConnectionI::DestructionReason>
(&ConnectionI::destroy), ConnectionI::CommunicatorDestroyed));
#endif
@@ -75,7 +92,7 @@ IceInternal::OutgoingConnectionFactory::destroy()
void
IceInternal::OutgoingConnectionFactory::waitUntilFinished()
{
- multimap<ConnectorPtr, ConnectionIPtr> connections;
+ multimap<ConnectorInfo, ConnectionIPtr> connections;
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
@@ -85,7 +102,7 @@ IceInternal::OutgoingConnectionFactory::waitUntilFinished()
// until there are no pending connections anymore. Only then
// we can be sure the _connections contains all connections.
//
- while(!_destroyed || !_pending.empty())
+ while(!_destroyed || !_pending.empty() || !_pendingEndpoints.empty())
{
wait();
}
@@ -94,311 +111,187 @@ IceInternal::OutgoingConnectionFactory::waitUntilFinished()
// We want to wait until all connections are finished outside the
// thread synchronization.
//
- connections.swap(_connections);
+ connections = _connections;
}
for_each(connections.begin(), connections.end(),
- Ice::secondVoidMemFun<const ConnectorPtr, ConnectionI>(&ConnectionI::waitUntilFinished));
+ Ice::secondVoidMemFun<const ConnectorInfo, ConnectionI>(&ConnectionI::waitUntilFinished));
+
+ {
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ _connections.clear();
+ }
}
ConnectionIPtr
-IceInternal::OutgoingConnectionFactory::create(const vector<EndpointIPtr>& endpts, bool moreEndpts,
+IceInternal::OutgoingConnectionFactory::create(const vector<EndpointIPtr>& endpts, bool hasMore,
bool threadPerConnection, Ice::EndpointSelectionType selType,
bool& compress)
{
assert(!endpts.empty());
- vector<pair<ConnectorPtr, EndpointIPtr> > connectors;
+
+ //
+ // Apply the overrides.
+ //
+ vector<EndpointIPtr> endpoints = applyOverrides(endpts);
+ //
+ // Try to find a connection to one of the given endpoints.
+ //
+ Ice::ConnectionIPtr connection = findConnection(endpoints, threadPerConnection, compress);
+ if(connection)
{
- IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ return connection;
+ }
- if(_destroyed)
- {
- throw CommunicatorDestroyedException(__FILE__, __LINE__);
- }
+ auto_ptr<Ice::LocalException> exception;
+ //
+ // If we didn't find a connection with the endpoints, we create the connectors
+ // for the endpoints.
+ //
+ vector<ConnectorInfo> connectors;
+ for(vector<EndpointIPtr>::const_iterator p = endpoints.begin(); p != endpoints.end(); ++p)
+ {
//
- // Reap connections for which destruction has completed.
+ // Create connectors for the endpoint.
//
- std::multimap<ConnectorPtr, ConnectionIPtr>::iterator p = _connections.begin();
- while(p != _connections.end())
- {
- if(p->second->isFinished())
- {
- _connections.erase(p++);
- }
- else
- {
- ++p;
- }
- }
-
- vector<EndpointIPtr> endpoints = endpts;
- vector<EndpointIPtr>::iterator q;
- for(q = endpoints.begin(); q != endpoints.end(); ++q)
+ try
{
- //
- // Modify endpoints with overrides.
- //
- if(_instance->defaultsAndOverrides()->overrideTimeout)
- {
- *q = (*q)->timeout(_instance->defaultsAndOverrides()->overrideTimeoutValue);
- }
-
- //
- // Create connectors for the endpoints.
- //
- vector<ConnectorPtr> cons = (*q)->connectors();
- assert(cons.size() > 0);
-
- //
- // Shuffle connectors is endpoint selection type is Random.
- //
+ vector<ConnectorPtr> cons = (*p)->connectors();
+ assert(!cons.empty());
+
if(selType == Random)
{
RandomNumberGenerator rng;
random_shuffle(cons.begin(), cons.end(), rng);
}
-
- vector<ConnectorPtr>::const_iterator r;
- for(r = cons.begin(); r != cons.end(); ++r)
- {
- connectors.push_back(make_pair(*r, *q));
- }
- }
-
- //
- // Search for existing connections.
- //
- vector<pair<ConnectorPtr, EndpointIPtr> >::const_iterator r;
- for(r = connectors.begin(); r != connectors.end(); ++r)
- {
- pair<multimap<ConnectorPtr, ConnectionIPtr>::iterator,
- multimap<ConnectorPtr, ConnectionIPtr>::iterator> pr = _connections.equal_range((*r).first);
- while(pr.first != pr.second)
+ for(vector<ConnectorPtr>::const_iterator r = cons.begin(); r != cons.end(); ++r)
{
- //
- // Don't return connections for which destruction has
- // been initiated. The connection must also match the
- // requested thread-per-connection setting.
- //
- if(!pr.first->second->isDestroyed() &&
- pr.first->second->threadPerConnection() == threadPerConnection)
- {
- if(_instance->defaultsAndOverrides()->overrideCompress)
- {
- compress = _instance->defaultsAndOverrides()->overrideCompressValue;
- }
- else
- {
- compress = (*r).second->compress();
- }
-
- return pr.first->second;
- }
-
- ++pr.first;
+ assert(*r);
+ connectors.push_back(ConnectorInfo(*r, *p, threadPerConnection));
}
}
-
- //
- // If some other thread is currently trying to establish a
- // connection to any of our endpoints, we wait until this
- // thread is finished.
- //
- bool searchAgain = false;
- while(!_destroyed)
+ catch(const Ice::LocalException& ex)
{
- for(r = connectors.begin(); r != connectors.end(); ++r)
- {
- if(_pending.find((*r).first) != _pending.end())
- {
- break;
- }
- }
-
- if(r == connectors.end())
- {
- break;
- }
-
- searchAgain = true;
-
- wait();
- }
-
- if(_destroyed)
- {
- throw CommunicatorDestroyedException(__FILE__, __LINE__);
- }
-
- //
- // Search for existing connections again if we waited above,
- // as new connections might have been added in the meantime.
- //
- if(searchAgain)
- {
- for(r = connectors.begin(); r != connectors.end(); ++r)
- {
- pair<multimap<ConnectorPtr, ConnectionIPtr>::iterator,
- multimap<ConnectorPtr, ConnectionIPtr>::iterator> pr = _connections.equal_range((*r).first);
-
- while(pr.first != pr.second)
- {
- //
- // Don't return connections for which destruction has
- // been initiated. The connection must also match the
- // requested thread-per-connection setting.
- //
- if(!pr.first->second->isDestroyed() &&
- pr.first->second->threadPerConnection() == threadPerConnection)
- {
- if(_instance->defaultsAndOverrides()->overrideCompress)
- {
- compress = _instance->defaultsAndOverrides()->overrideCompressValue;
- }
- else
- {
- compress = (*r).second->compress();
- }
-
- return pr.first->second;
- }
-
- ++pr.first;
- }
- }
- }
-
- //
- // No connection to any of our endpoints exists yet, so we
- // will try to create one. To avoid that other threads try to
- // create connections to the same endpoints, we add our
- // endpoints to _pending.
- //
- for(r = connectors.begin(); r != connectors.end(); ++r)
- {
- _pending.insert((*r).first);
+ exception.reset(dynamic_cast<Ice::LocalException*>(ex.ice_clone()));
+ handleException(ex, hasMore || p != endpoints.end() - 1);
}
}
- ConnectorPtr connector;
- ConnectionIPtr connection;
- auto_ptr<LocalException> exception;
+ if(connectors.empty())
+ {
+ assert(exception.get());
+ exception->ice_throw();
+ }
- vector<pair<ConnectorPtr, EndpointIPtr> >::const_iterator q;
- for(q = connectors.begin(); q != connectors.end(); ++q)
+ //
+ // Try to get a connection to one of the connectors. A null result indicates that no
+ // connection was found and that we should try to establish the connection (and that
+ // the connectors were added to _pending to prevent other threads from establishing
+ // the connection).
+ //
+ connection = getConnection(connectors, 0, compress);
+ if(connection)
+ {
+ return connection;
+ }
+
+ //
+ // Try to establish the connection to the connectors.
+ //
+ DefaultsAndOverridesPtr defaultsAndOverrides = _instance->defaultsAndOverrides();
+ for(vector<ConnectorInfo>::const_iterator p = connectors.begin(); p != connectors.end(); ++p)
{
- connector = (*q).first;
- EndpointIPtr endpoint = (*q).second;
-
try
{
-
int timeout;
- if(_instance->defaultsAndOverrides()->overrideConnectTimeout)
+ if(defaultsAndOverrides->overrideConnectTimeout)
{
- timeout = _instance->defaultsAndOverrides()->overrideConnectTimeoutValue;
+ timeout = defaultsAndOverrides->overrideConnectTimeoutValue;
}
- // It is not necessary to check for overrideTimeout,
- // the endpoint has already been modified with this
- // override, if set.
else
{
- timeout = endpoint->timeout();
+ //
+ // It is not necessary to check for overrideTimeout, the endpoint has already
+ // been modified with this override, if set.
+ //
+ timeout = p->endpoint->timeout();
}
- TransceiverPtr transceiver = connector->connect(timeout);
- assert(transceiver);
-
- connection = new ConnectionI(_instance, transceiver, endpoint->compress(false), 0, threadPerConnection,
- _instance->threadPerConnectionStackSize());
- connection->start();
- connection->validate();
+ connection = createConnection(p->connector->connect(timeout), *p);
+ connection->start(0);
- if(_instance->defaultsAndOverrides()->overrideCompress)
+ if(defaultsAndOverrides->overrideCompress)
{
- compress = _instance->defaultsAndOverrides()->overrideCompressValue;
+ compress = defaultsAndOverrides->overrideCompressValue;
}
else
{
- compress = endpoint->compress();
+ compress = p->endpoint->compress();
}
+
break;
}
- catch(const LocalException& ex)
+ catch(const Ice::CommunicatorDestroyedException& ex)
{
- exception.reset(dynamic_cast<LocalException*>(ex.ice_clone()));
-
- //
- // If a connection object was constructed, then validate()
- // must have raised the exception.
- //
- if(connection)
- {
- connection->waitUntilFinished(); // We must call waitUntilFinished() for cleanup.
- connection = 0;
- }
+ exception.reset(dynamic_cast<Ice::LocalException*>(ex.ice_clone()));
+ handleException(*exception.get(), *p, connection, hasMore || p != connectors.end() - 1);
+ connection = 0;
+ break; // No need to continue
}
-
- TraceLevelsPtr traceLevels = _instance->traceLevels();
- if(traceLevels->retry >= 2)
+ catch(const Ice::LocalException& ex)
{
- Trace out(_instance->initializationData().logger, traceLevels->retryCat);
-
- out << "connection to endpoint failed";
- if(moreEndpts || q + 1 != connectors.end())
- {
- out << ", trying next endpoint\n";
- }
- else
- {
- out << " and no more endpoints to try\n";
- }
- out << *exception.get();
+ exception.reset(dynamic_cast<Ice::LocalException*>(ex.ice_clone()));
+ handleException(*exception.get(), *p, connection, hasMore || p != connectors.end() - 1);
+ connection = 0;
}
}
-
- {
- IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
-
- //
- // Signal other threads that we are done with trying to
- // establish connections to our endpoints.
- //
- for(q = connectors.begin(); q != connectors.end(); ++q)
- {
- _pending.erase((*q).first);
- }
- notifyAll();
- if(!connection)
- {
- assert(exception.get());
- exception->ice_throw();
- }
- else
- {
- _connections.insert(_connections.end(), pair<const ConnectorPtr, ConnectionIPtr>(connector, connection));
+ //
+ // Finish creating the connection (this removes the connectors from the _pending
+ // list and notifies any waiting threads).
+ //
+ finishGetConnection(connectors, 0, connection);
- if(_destroyed)
- {
- connection->destroy(ConnectionI::CommunicatorDestroyed);
- throw CommunicatorDestroyedException(__FILE__, __LINE__);
- }
- else
- {
- connection->activate();
- }
- }
+ if(!connection)
+ {
+ assert(exception.get());
+ exception->ice_throw();
}
- assert(connection);
return connection;
}
void
+IceInternal::OutgoingConnectionFactory::create(const vector<EndpointIPtr>& endpts, bool hasMore,
+ bool tpc, Ice::EndpointSelectionType selType,
+ const CreateConnectionCallbackPtr& callback)
+{
+ assert(!endpts.empty());
+
+ //
+ // Apply the overrides.
+ //
+ vector<EndpointIPtr> endpoints = applyOverrides(endpts);
+
+ //
+ // Try to find a connection to one of the given endpoints.
+ //
+ bool compress;
+ Ice::ConnectionIPtr connection = findConnection(endpoints, tpc, compress);
+ if(connection)
+ {
+ callback->setConnection(connection, compress);
+ return;
+ }
+
+ ConnectCallbackPtr cb = new ConnectCallback(this, endpoints, hasMore, callback, selType, tpc);
+ cb->getConnection();
+}
+
+void
IceInternal::OutgoingConnectionFactory::setRouterInfo(const RouterInfoPtr& routerInfo)
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
@@ -442,14 +335,14 @@ IceInternal::OutgoingConnectionFactory::setRouterInfo(const RouterInfoPtr& route
//
endpoint = endpoint->compress(false);
- multimap<ConnectorPtr, ConnectionIPtr>::const_iterator q;
+ multimap<ConnectorInfo, ConnectionIPtr>::const_iterator q;
for(q = _connections.begin(); q != _connections.end(); ++q)
{
- if((*q).second->endpoint() == endpoint)
+ if(q->second->endpoint() == endpoint)
{
try
{
- (*q).second->setAdapter(adapter);
+ q->second->setAdapter(adapter);
}
catch(const Ice::LocalException&)
{
@@ -472,7 +365,7 @@ IceInternal::OutgoingConnectionFactory::removeAdapter(const ObjectAdapterPtr& ad
return;
}
- for(multimap<ConnectorPtr, ConnectionIPtr>::const_iterator p = _connections.begin(); p != _connections.end(); ++p)
+ for(multimap<ConnectorInfo, ConnectionIPtr>::const_iterator p = _connections.begin(); p != _connections.end(); ++p)
{
if(p->second->getAdapter() == adapter)
{
@@ -497,9 +390,7 @@ IceInternal::OutgoingConnectionFactory::flushBatchRequests()
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
-
- for(std::multimap<ConnectorPtr, ConnectionIPtr>::const_iterator p = _connections.begin();
- p != _connections.end();
+ for(multimap<ConnectorInfo, ConnectionIPtr>::const_iterator p = _connections.begin(); p != _connections.end();
++p)
{
c.push_back(p->second);
@@ -531,6 +422,668 @@ IceInternal::OutgoingConnectionFactory::~OutgoingConnectionFactory()
assert(_connections.empty());
}
+vector<EndpointIPtr>
+IceInternal::OutgoingConnectionFactory::applyOverrides(const vector<EndpointIPtr>& endpts)
+{
+ DefaultsAndOverridesPtr defaultsAndOverrides = _instance->defaultsAndOverrides();
+ vector<EndpointIPtr> endpoints = endpts;
+ for(vector<EndpointIPtr>::iterator p = endpoints.begin(); p != endpoints.end(); ++p)
+ {
+ //
+ // Modify endpoints with overrides.
+ //
+ if(defaultsAndOverrides->overrideTimeout)
+ {
+ *p = (*p)->timeout(defaultsAndOverrides->overrideTimeoutValue);
+ }
+ }
+ return endpoints;
+}
+
+ConnectionIPtr
+IceInternal::OutgoingConnectionFactory::findConnection(const vector<EndpointIPtr>& endpoints, bool tpc, bool& compress)
+{
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+
+ DefaultsAndOverridesPtr defaultsAndOverrides = _instance->defaultsAndOverrides();
+ assert(!endpoints.empty());
+ for(vector<EndpointIPtr>::const_iterator p = endpoints.begin(); p != endpoints.end(); ++p)
+ {
+ pair<multimap<EndpointIPtr, ConnectionIPtr>::iterator,
+ multimap<EndpointIPtr, ConnectionIPtr>::iterator> pr = _connectionsByEndpoint.equal_range(*p);
+
+ for(multimap<EndpointIPtr, ConnectionIPtr>::iterator q = pr.first; q != pr.second; ++q)
+ {
+ if(q->second->isActiveOrHolding() &&
+ q->second->threadPerConnection() == tpc) // Don't return destroyed or un-validated connections
+ {
+ if(defaultsAndOverrides->overrideCompress)
+ {
+ compress = defaultsAndOverrides->overrideCompressValue;
+ }
+ else
+ {
+ compress = (*p)->compress();
+ }
+ return q->second;
+ }
+ }
+ }
+ return 0;
+}
+
+ConnectionIPtr
+IceInternal::OutgoingConnectionFactory::findConnection(const vector<ConnectorInfo>& connectors, bool& compress)
+{
+ DefaultsAndOverridesPtr defaultsAndOverrides = _instance->defaultsAndOverrides();
+ for(vector<ConnectorInfo>::const_iterator p = connectors.begin(); p != connectors.end(); ++p)
+ {
+ pair<multimap<ConnectorInfo, ConnectionIPtr>::iterator,
+ multimap<ConnectorInfo, ConnectionIPtr>::iterator> pr = _connections.equal_range(*p);
+
+ if(pr.first == pr.second)
+ {
+ continue;
+ }
+
+ for(multimap<ConnectorInfo, ConnectionIPtr>::iterator q = pr.first; q != pr.second; ++q)
+ {
+ if(q->second->isActiveOrHolding()) // Don't return destroyed or un-validated connections
+ {
+ if(q->second->endpoint() != p->endpoint)
+ {
+ _connectionsByEndpoint.insert(make_pair(p->endpoint, q->second));
+ }
+
+ if(defaultsAndOverrides->overrideCompress)
+ {
+ compress = defaultsAndOverrides->overrideCompressValue;
+ }
+ else
+ {
+ compress = p->endpoint->compress();
+ }
+ return q->second;
+ }
+ }
+ }
+
+ return 0;
+}
+
+void
+IceInternal::OutgoingConnectionFactory::addPendingEndpoints(const vector<EndpointIPtr>& endpoints)
+{
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ if(_destroyed)
+ {
+ throw Ice::CommunicatorDestroyedException(__FILE__, __LINE__);
+ }
+ _pendingEndpoints.insert(endpoints.begin(), endpoints.end());
+}
+
+void
+IceInternal::OutgoingConnectionFactory::removePendingEndpoints(const vector<EndpointIPtr>& endpoints)
+{
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ for(vector<EndpointIPtr>::const_iterator p = endpoints.begin(); p != endpoints.end(); ++p)
+ {
+ assert(_pendingEndpoints.find(*p) != _pendingEndpoints.end());
+ _pendingEndpoints.erase(_pendingEndpoints.find(*p));
+ }
+
+ if(_destroyed)
+ {
+ notifyAll();
+ }
+}
+
+ConnectionIPtr
+IceInternal::OutgoingConnectionFactory::getConnection(const vector<ConnectorInfo>& connectors,
+ const ConnectCallbackPtr& cb, bool& compress)
+{
+ {
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ if(_destroyed)
+ {
+ throw Ice::CommunicatorDestroyedException(__FILE__, __LINE__);
+ }
+
+ //
+ // Reap connections for which destruction has completed.
+ //
+ multimap<ConnectorInfo, ConnectionIPtr>::iterator p = _connections.begin();
+ while(p != _connections.end())
+ {
+ if(p->second->isFinished())
+ {
+ _connections.erase(p++);
+ }
+ else
+ {
+ ++p;
+ }
+ }
+
+ multimap<EndpointIPtr, ConnectionIPtr>::iterator q = _connectionsByEndpoint.begin();
+ while(q != _connectionsByEndpoint.end())
+ {
+ if(q->second->isFinished())
+ {
+ _connectionsByEndpoint.erase(q++);
+ }
+ else
+ {
+ ++q;
+ }
+ }
+
+ //
+ // Try to get the connection. We may need to wait for other threads to
+ // finish if one of them is currently establishing a connection to one
+ // of our connectors.
+ //
+ while(!_destroyed)
+ {
+ //
+ // Search for a matching connection. If we find one, we're done.
+ //
+ Ice::ConnectionIPtr connection = findConnection(connectors, compress);
+ if(connection)
+ {
+ if(cb)
+ {
+ //
+ // This might not be the first getConnection call for the callback. We need
+ // to ensure that the callback isn't registered with any other pending
+ // connectors since we just found a connection and therefore don't need to
+ // wait anymore for other pending connectors.
+ //
+ for(vector<ConnectorInfo>::const_iterator p = connectors.begin(); p != connectors.end(); ++p)
+ {
+ map<ConnectorInfo, set<ConnectCallbackPtr> >::iterator q = _pending.find(*p);
+ if(q != _pending.end())
+ {
+ q->second.erase(cb);
+ }
+ }
+ }
+ return connection;
+ }
+
+ //
+ // Determine whether another thread is currently attempting to connect to one of our endpoints;
+ // if so we wait until it's done.
+ //
+ bool found = false;
+ for(vector<ConnectorInfo>::const_iterator p = connectors.begin(); p != connectors.end(); ++p)
+ {
+ map<ConnectorInfo, set<ConnectCallbackPtr> >::iterator q = _pending.find(*p);
+ if(q != _pending.end())
+ {
+ found = true;
+ if(cb)
+ {
+ q->second.insert(cb); // Add the callback to each pending connector.
+ }
+ }
+ }
+
+ if(!found)
+ {
+ //
+ // If no thread is currently establishing a connection to one of our connectors,
+ // we get out of this loop and start the connection establishment to one of the
+ // given connectors.
+ //
+ break;
+ }
+ else
+ {
+ //
+ // If a callback is not specified we wait until another thread notifies us about a
+ // change to the pending list. Otherwise, if a callback is provided we're done:
+ // when the pending list changes the callback will be notified and will try to
+ // get the connection again.
+ //
+ if(!cb)
+ {
+ wait();
+ }
+ else
+ {
+ return 0;
+ }
+ }
+ }
+
+ if(_destroyed)
+ {
+ throw Ice::CommunicatorDestroyedException(__FILE__, __LINE__);
+ }
+
+ //
+ // No connection to any of our endpoints exists yet; we add the given connectors to
+ // the _pending set to indicate that we're attempting connection establishment to
+ // these connectors.
+ //
+ for(vector<ConnectorInfo>::const_iterator p = connectors.begin(); p != connectors.end(); ++p)
+ {
+ assert(_pending.find(*p) == _pending.end());
+ _pending.insert(pair<ConnectorInfo, set<ConnectCallbackPtr> >(*p, set<ConnectCallbackPtr>()));
+ }
+ }
+
+ //
+ // At this point, we're responsible for establishing the connection to one of
+ // the given connectors. If it's a non-blocking connect, calling nextConnector
+ // will start the connection establishment. Otherwise, we return null to get
+ // the caller to establish the connection.
+ //
+ if(cb)
+ {
+ cb->nextConnector();
+ }
+
+ return 0;
+}
+
+ConnectionIPtr
+IceInternal::OutgoingConnectionFactory::createConnection(const TransceiverPtr& transceiver, const ConnectorInfo& ci)
+{
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ assert(_pending.find(ci) != _pending.end() && transceiver);
+
+ //
+ // Create and add the connection to the connection map. Adding the connection to the map
+ // is necessary to support the interruption of the connection initialization and validation
+ // in case the communicator is destroyed.
+ //
+ try
+ {
+ if(_destroyed)
+ {
+ throw Ice::CommunicatorDestroyedException(__FILE__, __LINE__);
+ }
+
+ Ice::ConnectionIPtr connection = new ConnectionI(_instance, transceiver, ci.endpoint->compress(false),
+ 0, ci.threadPerConnection,
+ _instance->threadPerConnectionStackSize());
+ _connections.insert(make_pair(ci, connection));
+ _connectionsByEndpoint.insert(make_pair(ci.endpoint, connection));
+ return connection;
+ }
+ catch(const Ice::LocalException&)
+ {
+ try
+ {
+ transceiver->close();
+ }
+ catch(const Ice::LocalException&)
+ {
+ // Ignore
+ }
+ throw;
+ }
+}
+
+void
+IceInternal::OutgoingConnectionFactory::finishGetConnection(const vector<ConnectorInfo>& connectors,
+ const ConnectCallbackPtr& cb,
+ const ConnectionIPtr& connection)
+{
+ vector<ConnectCallbackPtr> callbacks;
+
+ {
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+
+ //
+ // We're done trying to connect to the given connectors so we remove the
+ // connectors from the pending list and notify waiting threads. We also
+ // notify the pending connect callbacks (outside the synchronization).
+ //
+
+ for(vector<ConnectorInfo>::const_iterator p = connectors.begin(); p != connectors.end(); ++p)
+ {
+ map<ConnectorInfo, set<ConnectCallbackPtr> >::iterator q = _pending.find(*p);
+ assert(q != _pending.end());
+ callbacks.insert(callbacks.end(), q->second.begin(), q->second.end());
+ _pending.erase(q);
+ }
+ notifyAll();
+
+ //
+ // If the connect attempt succeeded and the communicator is not destroyed,
+ // activate the connection!
+ //
+ if(connection && !_destroyed)
+ {
+ connection->activate();
+ }
+ }
+
+ //
+ // Notify any waiting callbacks.
+ //
+ for(vector<ConnectCallbackPtr>::const_iterator p = callbacks.begin(); p != callbacks.end(); ++p)
+ {
+ (*p)->getConnection();
+ }
+}
+
+void
+IceInternal::OutgoingConnectionFactory::handleException(const LocalException& ex, const ConnectorInfo& ci,
+ const ConnectionIPtr& connection, bool hasMore)
+{
+ TraceLevelsPtr traceLevels = _instance->traceLevels();
+ if(traceLevels->retry >= 2)
+ {
+ Trace out(_instance->initializationData().logger, traceLevels->retryCat);
+
+ out << "connection to endpoint failed";
+ if(dynamic_cast<const CommunicatorDestroyedException*>(&ex))
+ {
+ out << "\n";
+ }
+ else
+ {
+ if(hasMore)
+ {
+ out << ", trying next endpoint\n";
+ }
+ else
+ {
+ out << " and no more endpoints to try\n";
+ }
+ }
+ out << ex;
+ }
+
+ if(connection && connection->isFinished())
+ {
+ //
+ // If the connection is finished, we remove it right away instead of
+ // waiting for the reaping.
+ //
+ // NOTE: it's possible for the connection to not be finished yet. That's
+ // for instance the case when using thread per connection and if it's the
+ // thread which is calling back the outgoing connection factory to notify
+ // it of the failure.
+ //
+ {
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ pair<multimap<ConnectorInfo, ConnectionIPtr>::iterator,
+ multimap<ConnectorInfo, ConnectionIPtr>::iterator> pr = _connections.equal_range(ci);
+
+ for(multimap<ConnectorInfo, ConnectionIPtr>::iterator p = pr.first; p != pr.second; ++p)
+ {
+ if(p->second == connection)
+ {
+ _connections.erase(p);
+ break;
+ }
+ }
+
+ pair<multimap<EndpointIPtr, ConnectionIPtr>::iterator,
+ multimap<EndpointIPtr, ConnectionIPtr>::iterator> qr = _connectionsByEndpoint.equal_range(ci.endpoint);
+
+ for(multimap<EndpointIPtr, ConnectionIPtr>::iterator q = qr.first; q != qr.second; ++q)
+ {
+ if(q->second == connection)
+ {
+ _connectionsByEndpoint.erase(q);
+ break;
+ }
+ }
+ }
+ }
+}
+
+void
+IceInternal::OutgoingConnectionFactory::handleException(const LocalException& ex, bool hasMore)
+{
+ TraceLevelsPtr traceLevels = _instance->traceLevels();
+ if(traceLevels->retry >= 2)
+ {
+ Trace out(_instance->initializationData().logger, traceLevels->retryCat);
+
+ out << "couldn't resolve endpoint host";
+ if(dynamic_cast<const CommunicatorDestroyedException*>(&ex))
+ {
+ out << "\n";
+ }
+ else
+ {
+ if(hasMore)
+ {
+ out << ", trying next endpoint\n";
+ }
+ else
+ {
+ out << " and no more endpoints to try\n";
+ }
+ }
+ out << ex;
+ }
+}
+
+IceInternal::OutgoingConnectionFactory::ConnectCallback::ConnectCallback(const OutgoingConnectionFactoryPtr& factory,
+ const vector<EndpointIPtr>& endpoints,
+ bool hasMore,
+ const CreateConnectionCallbackPtr& cb,
+ Ice::EndpointSelectionType selType,
+ bool threadPerConnection) :
+ _factory(factory),
+ _selectorThread(_factory->_instance->selectorThread()),
+ _endpoints(endpoints),
+ _hasMore(hasMore),
+ _callback(cb),
+ _selType(selType),
+ _threadPerConnection(threadPerConnection)
+{
+ _endpointsIter = _endpoints.begin();
+}
+
+//
+// Methods from ConnectionI.StartCallback
+//
+void
+IceInternal::OutgoingConnectionFactory::ConnectCallback::connectionStartCompleted(const ConnectionIPtr& connection)
+{
+ assert(!_exception.get() && connection == _connection);
+
+ bool compress;
+ DefaultsAndOverridesPtr defaultsAndOverrides = _factory->_instance->defaultsAndOverrides();
+ if(defaultsAndOverrides->overrideCompress)
+ {
+ compress = defaultsAndOverrides->overrideCompressValue;
+ }
+ else
+ {
+ compress = _iter->endpoint->compress();
+ }
+
+ _factory->finishGetConnection(_connectors, this, connection);
+ _factory->removePendingEndpoints(_endpoints);
+ _callback->setConnection(connection, compress);
+}
+
+void
+IceInternal::OutgoingConnectionFactory::ConnectCallback::connectionStartFailed(const ConnectionIPtr& connection,
+ const LocalException& ex)
+{
+ assert(!_exception.get() && connection == _connection);
+
+ _exception.reset(dynamic_cast<LocalException*>(ex.ice_clone()));
+ handleException();
+}
+
+//
+// Methods from EndpointI_connectors
+//
+void
+IceInternal::OutgoingConnectionFactory::ConnectCallback::connectors(const vector<ConnectorPtr>& connectors)
+{
+ vector<ConnectorPtr> cons = connectors;
+ if(_selType == Random)
+ {
+ RandomNumberGenerator rng;
+ random_shuffle(cons.begin(), cons.end(), rng);
+ }
+
+ for(vector<ConnectorPtr>::const_iterator p = cons.begin(); p != cons.end(); ++p)
+ {
+ _connectors.push_back(ConnectorInfo(*p, *_endpointsIter, _threadPerConnection));
+ }
+
+ if(++_endpointsIter != _endpoints.end())
+ {
+ (*_endpointsIter)->connectors_async(this);
+ }
+ else
+ {
+ assert(!_connectors.empty());
+
+ //
+ // We now have all the connectors for the given endpoints. We can try to obtain the
+ // connection.
+ //
+ _iter = _connectors.begin();
+ getConnection();
+ }
+}
+
+void
+IceInternal::OutgoingConnectionFactory::ConnectCallback::exception(const Ice::LocalException& ex)
+{
+ _factory->handleException(ex, _hasMore || _endpointsIter != _endpoints.end() - 1);
+ if(++_endpointsIter != _endpoints.end())
+ {
+ (*_endpointsIter)->connectors_async(this);
+ }
+ else if(!_connectors.empty())
+ {
+ //
+ // We now have all the connectors for the given endpoints. We can try to obtain the
+ // connection.
+ //
+ _iter = _connectors.begin();
+ getConnection();
+ }
+ else
+ {
+ _exception.reset(dynamic_cast<Ice::LocalException*>(ex.ice_clone()));
+ _factory->_instance->clientThreadPool()->execute(this);
+ }
+}
+
+//
+// Methods from ThreadPoolWorkItem
+//
+void
+IceInternal::OutgoingConnectionFactory::ConnectCallback::execute(const ThreadPoolPtr& threadPool)
+{
+ threadPool->promoteFollower();
+ assert(_exception.get());
+ _factory->removePendingEndpoints(_endpoints);
+ _callback->setException(*_exception.get());
+}
+
+void
+IceInternal::OutgoingConnectionFactory::ConnectCallback::getConnection()
+{
+ //
+ // First, get the connectors for all the endpoints.
+ //
+ if(_endpointsIter != _endpoints.end())
+ {
+ try
+ {
+ _factory->addPendingEndpoints(_endpoints);
+ (*_endpointsIter)->connectors_async(this);
+ }
+ catch(const Ice::LocalException& ex)
+ {
+ _callback->setException(ex);
+ }
+ return;
+ }
+
+ try
+ {
+ //
+ // If all the connectors have been created, we ask the factory to get a
+ // connection.
+ //
+ bool compress;
+ Ice::ConnectionIPtr connection = _factory->getConnection(_connectors, this, compress);
+ if(!connection)
+ {
+ //
+ // A null return value from getConnection indicates that the connection
+ // is being established and that everthing has been done to ensure that
+ // the callback will be notified when the connection establishment is
+ // done.
+ //
+ return;
+ }
+
+ _factory->removePendingEndpoints(_endpoints);
+ _callback->setConnection(connection, compress);
+ }
+ catch(const Ice::LocalException& ex)
+ {
+ _exception.reset(dynamic_cast<Ice::LocalException*>(ex.ice_clone()));
+ _factory->_instance->clientThreadPool()->execute(this);
+ }
+}
+
+void
+IceInternal::OutgoingConnectionFactory::ConnectCallback::nextConnector()
+{
+ try
+ {
+ _exception.reset(0);
+ _connection = _factory->createConnection(_iter->connector->connect(0), *_iter);
+ _connection->start(this);
+ }
+ catch(const Ice::LocalException& ex)
+ {
+ _exception.reset(dynamic_cast<Ice::LocalException*>(ex.ice_clone()));
+ handleException();
+ }
+}
+
+void
+IceInternal::OutgoingConnectionFactory::ConnectCallback::handleException()
+{
+ assert(_iter != _connectors.end() && _exception.get());
+
+ _factory->handleException(*_exception.get(), *_iter, _connection, _hasMore || _iter != _connectors.end() - 1);
+ if(dynamic_cast<Ice::CommunicatorDestroyedException*>(_exception.get())) // No need to continue.
+ {
+ _factory->finishGetConnection(_connectors, this, 0);
+ _factory->removePendingEndpoints(_endpoints);
+ _callback->setException(*_exception.get());
+ }
+ else if(++_iter != _connectors.end()) // Try the next connector.
+ {
+ nextConnector();
+ }
+ else
+ {
+ _factory->finishGetConnection(_connectors, this, 0);
+ _factory->removePendingEndpoints(_endpoints);
+ _callback->setException(*_exception.get());
+ }
+}
+
+bool
+IceInternal::OutgoingConnectionFactory::ConnectCallback::operator<(const ConnectCallback& rhs) const
+{
+ return this < &rhs;
+}
+
void
IceInternal::IncomingConnectionFactory::activate()
{
@@ -612,7 +1165,7 @@ IceInternal::IncomingConnectionFactory::waitUntilFinished()
// We want to wait until all connections are finished outside the
// thread synchronization.
//
- connections.swap(_connections);
+ connections = _connections;
}
if(threadPerIncomingConnectionFactory)
@@ -621,6 +1174,11 @@ IceInternal::IncomingConnectionFactory::waitUntilFinished()
}
for_each(connections.begin(), connections.end(), Ice::voidMemFun(&ConnectionI::waitUntilFinished));
+
+ {
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ _connections.clear();
+ }
}
EndpointIPtr
@@ -641,7 +1199,7 @@ IceInternal::IncomingConnectionFactory::connections() const
// Only copy connections which have not been destroyed.
//
remove_copy_if(_connections.begin(), _connections.end(), back_inserter(result),
- Ice::constMemFun(&ConnectionI::isDestroyed));
+ not1(Ice::constMemFun(&ConnectionI::isActiveOrHolding)));
return result;
}
@@ -678,11 +1236,12 @@ IceInternal::IncomingConnectionFactory::readable() const
return false;
}
-void
+bool
IceInternal::IncomingConnectionFactory::read(BasicStream&)
{
assert(!_threadPerConnection); // Only for use with a thread pool.
- assert(false); // Must not be called.
+ assert(false); // Must not be called, readable() returns false.
+ return false;
}
class PromoteFollower
@@ -772,10 +1331,23 @@ IceInternal::IncomingConnectionFactory::message(BasicStream&, const ThreadPoolPt
{
assert(!_threadPerConnection);
connection = new ConnectionI(_instance, transceiver, _endpoint, _adapter, false, 0);
- connection->start();
}
- catch(const LocalException&)
+ catch(const LocalException& ex)
{
+ try
+ {
+ transceiver->close();
+ }
+ catch(const Ice::LocalException&)
+ {
+ // Ignore.
+ }
+
+ if(_warn)
+ {
+ Warning out(_instance->initializationData().logger);
+ out << "connection exception:\n" << ex << '\n' << _acceptor->toString();
+ }
return;
}
@@ -784,23 +1356,7 @@ IceInternal::IncomingConnectionFactory::message(BasicStream&, const ThreadPoolPt
assert(connection);
- //
- // We validate outside the thread synchronization, to not block
- // the factory.
- //
- try
- {
- connection->validate();
- }
- catch(const LocalException&)
- {
- IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
- connection->waitUntilFinished(); // We must call waitUntilFinished() for cleanup.
- _connections.remove(connection);
- return;
- }
-
- connection->activate();
+ connection->start(this);
}
void
@@ -844,6 +1400,48 @@ IceInternal::IncomingConnectionFactory::toString() const
return _acceptor->toString();
}
+void
+IceInternal::IncomingConnectionFactory::connectionStartCompleted(const Ice::ConnectionIPtr& connection)
+{
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+
+ //
+ // Initialy, connections are in the holding state. If the factory is active
+ // we activate the connection.
+ //
+ if(_state == StateActive)
+ {
+ connection->activate();
+ }
+}
+
+void
+IceInternal::IncomingConnectionFactory::connectionStartFailed(const Ice::ConnectionIPtr& connection,
+ const Ice::LocalException& ex)
+{
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ if(_state == StateClosed)
+ {
+ return;
+ }
+
+ if(_warn)
+ {
+ Warning out(_instance->initializationData().logger);
+ out << "connection exception:\n" << ex << '\n' << _acceptor->toString();
+ }
+
+ //
+ // If the connection is finished, remove it right away from
+ // the connection map. Otherwise, we keep it in the map, it
+ // will eventually be reaped.
+ //
+ if(connection->isFinished())
+ {
+ _connections.remove(connection);
+ }
+}
+
IceInternal::IncomingConnectionFactory::IncomingConnectionFactory(const InstancePtr& instance,
const EndpointIPtr& endpoint,
const ObjectAdapterPtr& adapter,
@@ -881,23 +1479,22 @@ IceInternal::IncomingConnectionFactory::IncomingConnectionFactory(const Instance
{
connection = new ConnectionI(_instance, _transceiver, _endpoint, _adapter, _threadPerConnection,
_threadPerConnectionStackSize);
- connection->start();
- connection->validate();
}
catch(const LocalException&)
{
- //
- // If a connection object was constructed, then validate()
- // must have raised the exception.
- //
- if(connection)
+ try
{
- connection->waitUntilFinished(); // We must call waitUntilFinished() for cleanup.
+ _transceiver->close();
}
-
- return;
+ catch(const Ice::LocalException&)
+ {
+ // Ignore
+ }
+ throw;
}
+ connection->start(0);
+
_connections.push_back(connection);
}
else
@@ -1148,33 +1745,44 @@ IceInternal::IncomingConnectionFactory::run()
//
// Create a connection object for the connection.
//
- if(transceiver)
+ if(!transceiver)
+ {
+ continue;
+ }
+
+ try
+ {
+ connection = new ConnectionI(_instance, transceiver, _endpoint, _adapter, _threadPerConnection,
+ _threadPerConnectionStackSize);
+ }
+ catch(const LocalException& ex)
{
try
{
- connection = new ConnectionI(_instance, transceiver, _endpoint, _adapter, _threadPerConnection,
- _threadPerConnectionStackSize);
- connection->start();
+ transceiver->close();
}
- catch(const LocalException&)
+ catch(const Ice::LocalException&)
{
- return;
}
- _connections.push_back(connection);
+ if(_warn)
+ {
+ Warning out(_instance->initializationData().logger);
+ out << "connection exception:\n" << ex << '\n' << _acceptor->toString();
+ }
+ continue;
}
+
+ _connections.push_back(connection);
}
//
- // In thread per connection mode, the connection's thread will
- // take care of connection validation and activation (for
- // non-datagram connections). We don't want to block this
- // thread waiting until validation is complete, because in
- // contrast to thread pool mode, it is the only thread that
- // can accept connections with this factory's
- // acceptor. Therefore we don't call validate() and activate()
- // from the connection factory in thread per connection mode.
+ // In thread-per-connection mode and regardless of the background mode,
+ // start() doesn't block. The connection thread is started and takes
+ // care of the connection validation and notifies the factory through
+ // the callback when it's done.
//
+ connection->start(this);
}
}
diff --git a/cpp/src/Ice/ConnectionFactory.h b/cpp/src/Ice/ConnectionFactory.h
index e1351e976a7..1c2c3349a42 100644
--- a/cpp/src/Ice/ConnectionFactory.h
+++ b/cpp/src/Ice/ConnectionFactory.h
@@ -14,7 +14,7 @@
#include <IceUtil/Monitor.h>
#include <IceUtil/Thread.h> // For ThreadPerIncomingConnectionFactory.
#include <Ice/ConnectionFactoryF.h>
-#include <Ice/ConnectionIF.h>
+#include <Ice/ConnectionI.h>
#include <Ice/InstanceF.h>
#include <Ice/ObjectAdapterF.h>
#include <Ice/EndpointIF.h>
@@ -24,6 +24,7 @@
#include <Ice/TransceiverF.h>
#include <Ice/RouterInfoF.h>
#include <Ice/EventHandler.h>
+#include <Ice/EndpointI.h>
#include <list>
#include <set>
@@ -38,15 +39,26 @@ class ObjectAdapterI;
namespace IceInternal
{
-class OutgoingConnectionFactory : public IceUtil::Shared, public IceUtil::Monitor<IceUtil::Mutex>
+class OutgoingConnectionFactory : virtual public IceUtil::Shared, public IceUtil::Monitor<IceUtil::Mutex>
{
public:
+ class CreateConnectionCallback : virtual public IceUtil::Shared
+ {
+ public:
+
+ virtual void setConnection(const Ice::ConnectionIPtr&, bool) = 0;
+ virtual void setException(const Ice::LocalException&) = 0;
+ };
+ typedef IceUtil::Handle<CreateConnectionCallback> CreateConnectionCallbackPtr;
+
void destroy();
void waitUntilFinished();
Ice::ConnectionIPtr create(const std::vector<EndpointIPtr>&, bool, bool, Ice::EndpointSelectionType, bool&);
+ void create(const std::vector<EndpointIPtr>&, bool, bool, Ice::EndpointSelectionType,
+ const CreateConnectionCallbackPtr&);
void setRouterInfo(const RouterInfoPtr&);
void removeAdapter(const Ice::ObjectAdapterPtr&);
void flushBatchRequests();
@@ -57,13 +69,87 @@ private:
virtual ~OutgoingConnectionFactory();
friend class Instance;
+ struct ConnectorInfo
+ {
+ ConnectorInfo(const ConnectorPtr& c, const EndpointIPtr& e, bool t) :
+ connector(c), endpoint(e), threadPerConnection(t)
+ {
+ }
+
+ bool operator<(const ConnectorInfo& other) const;
+
+ ConnectorPtr connector;
+ EndpointIPtr endpoint;
+ bool threadPerConnection;
+ };
+
+ class ConnectCallback : public Ice::ConnectionI::StartCallback, public IceInternal::EndpointI_connectors,
+ public IceInternal::ThreadPoolWorkItem
+ {
+ public:
+
+ ConnectCallback(const OutgoingConnectionFactoryPtr&, const std::vector<EndpointIPtr>&, bool,
+ const CreateConnectionCallbackPtr&, Ice::EndpointSelectionType, bool);
+
+ virtual void connectionStartCompleted(const Ice::ConnectionIPtr&);
+ virtual void connectionStartFailed(const Ice::ConnectionIPtr&, const Ice::LocalException&);
+
+ virtual void connectors(const std::vector<ConnectorPtr>&);
+ virtual void exception(const Ice::LocalException&);
+
+ virtual void execute(const ThreadPoolPtr&);
+
+ void getConnection();
+ void nextConnector();
+
+ bool operator<(const ConnectCallback&) const;
+
+ private:
+
+ void handleException();
+
+ const OutgoingConnectionFactoryPtr _factory;
+ const SelectorThreadPtr _selectorThread;
+ const std::vector<EndpointIPtr> _endpoints;
+ const bool _hasMore;
+ const CreateConnectionCallbackPtr _callback;
+ const Ice::EndpointSelectionType _selType;
+ const bool _threadPerConnection;
+ std::vector<EndpointIPtr>::const_iterator _endpointsIter;
+ std::vector<ConnectorInfo> _connectors;
+ std::vector<ConnectorInfo>::const_iterator _iter;
+ std::auto_ptr<Ice::LocalException> _exception;
+ Ice::ConnectionIPtr _connection;
+ };
+ typedef IceUtil::Handle<ConnectCallback> ConnectCallbackPtr;
+ friend class ConnectCallback;
+
+ std::vector<EndpointIPtr> applyOverrides(const std::vector<EndpointIPtr>&);
+ Ice::ConnectionIPtr findConnection(const std::vector<EndpointIPtr>&, bool, bool&);
+ void addPendingEndpoints(const std::vector<EndpointIPtr>&);
+ void removePendingEndpoints(const std::vector<EndpointIPtr>&);
+ Ice::ConnectionIPtr getConnection(const std::vector<ConnectorInfo>&, const ConnectCallbackPtr&, bool&);
+ void finishGetConnection(const std::vector<ConnectorInfo>&, const ConnectCallbackPtr&, const Ice::ConnectionIPtr&);
+ Ice::ConnectionIPtr findConnection(const std::vector<ConnectorInfo>&, bool&);
+ Ice::ConnectionIPtr createConnection(const TransceiverPtr&, const ConnectorInfo&);
+
+ void handleException(const Ice::LocalException&, bool);
+ void handleException(const Ice::LocalException&, const ConnectorInfo&, const Ice::ConnectionIPtr&, bool);
+
const InstancePtr _instance;
bool _destroyed;
- std::multimap<ConnectorPtr, Ice::ConnectionIPtr> _connections;
- std::set<ConnectorPtr> _pending; // Connectors for which connection establishment is pending.
+
+ std::multimap<ConnectorInfo, Ice::ConnectionIPtr> _connections;
+ std::map<ConnectorInfo, std::set<ConnectCallbackPtr> > _pending;
+
+ std::multimap<EndpointIPtr, Ice::ConnectionIPtr> _connectionsByEndpoint;
+ std::multiset<EndpointIPtr> _pendingEndpoints;
};
-class IncomingConnectionFactory : public EventHandler, public IceUtil::Monitor<IceUtil::Mutex>
+class IncomingConnectionFactory : public EventHandler,
+ public Ice::ConnectionI::StartCallback,
+ public IceUtil::Monitor<IceUtil::Mutex>
+
{
public:
@@ -83,11 +169,14 @@ public:
//
virtual bool datagram() const;
virtual bool readable() const;
- virtual void read(BasicStream&);
+ virtual bool read(BasicStream&);
virtual void message(BasicStream&, const ThreadPoolPtr&);
virtual void finished(const ThreadPoolPtr&);
virtual void exception(const Ice::LocalException&);
virtual std::string toString() const;
+
+ virtual void connectionStartCompleted(const Ice::ConnectionIPtr&);
+ virtual void connectionStartFailed(const Ice::ConnectionIPtr&, const Ice::LocalException&);
private:
diff --git a/cpp/src/Ice/ConnectionI.cpp b/cpp/src/Ice/ConnectionI.cpp
index cdf3dce6b80..ccc6d5236e7 100644
--- a/cpp/src/Ice/ConnectionI.cpp
+++ b/cpp/src/Ice/ConnectionI.cpp
@@ -34,195 +34,226 @@ using namespace IceInternal;
Ice::LocalObject* IceInternal::upCast(ConnectionI* p) { return p; }
void
-Ice::ConnectionI::validate()
+Ice::ConnectionI::OutgoingMessage::adopt(BasicStream* str)
{
- bool active = false;
+ if(adopted)
+ {
+ if(str)
+ {
+ delete stream;
+ stream = 0;
+ adopted = false;
+ }
+ else
+ {
+ return; // Stream is already adopted.
+ }
+ }
+ else if(!str)
+ {
+ if(out || outAsync)
+ {
+ return; // Adopting request stream is not necessary.
+ }
+ else
+ {
+ str = stream; // Adopt this stream
+ stream = 0;
+ }
+ }
- if(!_endpoint->datagram()) // Datagram connections are always implicitly validated.
+ assert(str);
+ stream = new BasicStream(str->instance());
+ stream->swap(*str);
+ adopted = true;
+}
+
+void
+Ice::ConnectionI::OutgoingMessage::sent(ConnectionI* connection, bool notify)
+{
+ if(out)
+ {
+ out->sent(notify); // true = notify the waiting thread that the request was sent.
+ }
+ else if(outAsync)
+ {
+ outAsync->__sent(connection);
+ }
+
+ if(adopted)
+ {
+ delete stream;
+ stream = 0;
+ }
+}
+
+void
+Ice::ConnectionI::OutgoingMessage::finished(const Ice::LocalException& ex)
+{
+ if(!response)
+ {
+ //
+ // Only notify oneway requests. The connection keeps track of twoway
+ // requests in the _requests/_asyncRequests maps and will notify them
+ // of the connection exceptions.
+ //
+ if(out)
+ {
+ out->finished(ex);
+ }
+ else if(outAsync)
+ {
+ outAsync->__finished(ex);
+ }
+ }
+
+ if(adopted)
+ {
+ delete stream;
+ stream = 0;
+ }
+}
+
+void
+Ice::ConnectionI::start(const StartCallbackPtr& callback)
+{
+ try
{
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
-
- if(_thread && _thread->getThreadControl() != IceUtil::ThreadControl())
- {
- //
- // In thread per connection mode, this connection's thread
- // will take care of connection validation. Therefore all we
- // have to do here is to wait until this thread has completed
- // validation.
- //
- while(_state == StateNotValidated)
- {
- wait();
- }
-
- if(_state >= StateClosing)
- {
- assert(_exception.get());
- _exception->ice_throw();
- }
-
- return;
- }
-
+ _startCallback = callback;
+
//
- // The connection might already be closed (e.g.: the communicator
- // was destroyed or object adapter deactivated.)
+ // The connection might already be closed if the communicator was destroyed.
//
- assert(_state == StateNotValidated || _state == StateClosed);
if(_state == StateClosed)
{
assert(_exception.get());
_exception->ice_throw();
}
-
- if(_adapter)
- {
- active = true; // The server side has the active role for connection validation.
- }
- else
- {
- active = false; // The client side has the passive role for connection validation.
- }
- }
-
- try
- {
- Int timeout;
- if(_instance->defaultsAndOverrides()->overrideConnectTimeout)
- {
- timeout = _instance->defaultsAndOverrides()->overrideConnectTimeoutValue;
- }
- else
- {
- timeout = _endpoint->timeout();
- }
-
- if(active)
- {
- IceUtil::Mutex::Lock sendSync(_sendMutex);
- if(!_transceiver) // Has the transceiver already been closed?
- {
- assert(_exception.get());
- _exception->ice_throw(); // The exception is immutable at this point.
- }
-
- BasicStream os(_instance.get());
- os.write(magic[0]);
- os.write(magic[1]);
- os.write(magic[2]);
- os.write(magic[3]);
- os.write(protocolMajor);
- os.write(protocolMinor);
- os.write(encodingMajor);
- os.write(encodingMinor);
- os.write(validateConnectionMsg);
- os.write(static_cast<Byte>(0)); // Compression status (always zero for validate connection).
- os.write(headerSize); // Message size.
- os.i = os.b.begin();
- traceHeader("sending validate connection", os, _logger, _traceLevels);
- try
- {
- _transceiver->initialize(timeout);
- _transceiver->write(os, timeout);
- }
- catch(const TimeoutException&)
- {
- throw ConnectTimeoutException(__FILE__, __LINE__);
- }
- }
- else
+ //
+ // In thread per connection mode, we create the thread for the connection. The
+ // intialization and validation of the connection is taken care of by the thread
+ // per connection. If a callback is given, no need to wait, the thread will notify
+ // the callback, otherwise wait until the connection is validated.
+ //
+ if(_threadPerConnection)
{
- BasicStream is(_instance.get());
- is.b.resize(headerSize);
- is.i = is.b.begin();
try
{
- _transceiver->initialize(timeout);
- _transceiver->read(is, timeout);
+ _thread = new ThreadPerConnection(this);
+ _thread->start(_threadPerConnectionStackSize);
}
- catch(const TimeoutException&)
+ catch(const IceUtil::Exception& ex)
{
- throw ConnectTimeoutException(__FILE__, __LINE__);
- }
- assert(is.i == is.b.end());
- is.i = is.b.begin();
- Byte m[4];
- is.read(m[0]);
- is.read(m[1]);
- is.read(m[2]);
- is.read(m[3]);
- if(m[0] != magic[0] || m[1] != magic[1] || m[2] != magic[2] || m[3] != magic[3])
- {
- BadMagicException ex(__FILE__, __LINE__);
- ex.badMagic = Ice::ByteSeq(&m[0], &m[0] + sizeof(magic));
- throw ex;
- }
- Byte pMajor;
- Byte pMinor;
- is.read(pMajor);
- is.read(pMinor);
- if(pMajor != protocolMajor)
- {
- UnsupportedProtocolException ex(__FILE__, __LINE__);
- ex.badMajor = static_cast<unsigned char>(pMajor);
- ex.badMinor = static_cast<unsigned char>(pMinor);
- ex.major = static_cast<unsigned char>(protocolMajor);
- ex.minor = static_cast<unsigned char>(protocolMinor);
- throw ex;
- }
- Byte eMajor;
- Byte eMinor;
- is.read(eMajor);
- is.read(eMinor);
- if(eMajor != encodingMajor)
- {
- UnsupportedEncodingException ex(__FILE__, __LINE__);
- ex.badMajor = static_cast<unsigned char>(eMajor);
- ex.badMinor = static_cast<unsigned char>(eMinor);
- ex.major = static_cast<unsigned char>(encodingMajor);
- ex.minor = static_cast<unsigned char>(encodingMinor);
- throw ex;
- }
- Byte messageType;
- is.read(messageType);
- if(messageType != validateConnectionMsg)
- {
- throw ConnectionNotValidatedException(__FILE__, __LINE__);
+ {
+ Error out(_logger);
+ out << "cannot create thread for connection:\n" << ex;
+ }
+
+ //
+ // Clean up.
+ //
+ _thread = 0;
+ _state = StateClosed;
+
+ ex.ice_throw();
}
- Byte compress;
- is.read(compress); // Ignore compression status for validate connection.
- Int size;
- is.read(size);
- if(size != headerSize)
+
+ if(!callback) // Wait for the connection to be validated.
{
- throw IllegalMessageSizeException(__FILE__, __LINE__);
+ while(_state <= StateNotValidated)
+ {
+ wait();
+ }
+
+ if(_state >= StateClosing)
+ {
+ assert(_exception.get());
+ _exception->ice_throw();
+ }
}
- traceHeader("received validate connection", is, _logger, _traceLevels);
+ return; // We're done.
}
}
- catch(const LocalException& ex)
+
+ SocketStatus status = initialize();
+ if(status == Finished)
+ {
+ status = validate();
+ }
+
+ if(status == Finished)
+ {
+ finishStart();
+ return; // We're done!
+ }
+
+ assert(callback);
+
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ if(_state == StateClosed)
{
- IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
- setState(StateClosed, ex);
assert(_exception.get());
_exception->ice_throw();
}
- }
- {
- IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ int timeout;
+ DefaultsAndOverridesPtr defaultsAndOverrides = _instance->defaultsAndOverrides();
+ if(defaultsAndOverrides->overrideConnectTimeout)
+ {
+ timeout = defaultsAndOverrides->overrideConnectTimeoutValue;
+ }
+ else
+ {
+ timeout = _endpoint->timeout();
+ }
- if(_acmTimeout > 0)
+ _sendInProgress = true;
+ _selectorThread->_register(_transceiver->fd(), this, status, timeout);
+ return;
+ }
+ catch(const Ice::LocalException& ex)
+ {
{
- _acmAbsoluteTimeout = IceUtil::Time::now(IceUtil::Time::Monotonic) + IceUtil::Time::seconds(_acmTimeout);
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ setState(StateClosed, ex);
+
+ //
+ // If start is called with a callback, the callback is notified either by the
+ // thread per conncetion or the thread pool.
+ //
+ if(callback)
+ {
+ if(!_threadPerConnection)
+ {
+ registerWithPool();
+ unregisterWithPool(); // Let finished do the close.
+ }
+ return;
+ }
+
+ //
+ // Close the transceiver if there's no thread per connection, otherwise, the
+ // thread per connection takes care of it.
+ //
+ if(!_thread && _transceiver)
+ {
+ try
+ {
+ _transceiver->close();
+ }
+ catch(const Ice::LocalException&)
+ {
+ // Here we ignore any exceptions in close().
+ }
+ _transceiver = 0;
+ }
}
- //
- // We start out in holding state.
- //
- setState(StateHolding);
+ waitUntilFinished();
+ throw;
}
}
@@ -230,10 +261,14 @@ void
Ice::ConnectionI::activate()
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ if(_state <= StateNotValidated)
+ {
+ return;
+ }
- while(_state == StateNotValidated)
+ if(_acmTimeout > 0)
{
- wait();
+ _acmAbsoluteTimeout = IceUtil::Time::now(IceUtil::Time::Monotonic) + IceUtil::Time::seconds(_acmTimeout);
}
setState(StateActive);
@@ -243,10 +278,9 @@ void
Ice::ConnectionI::hold()
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
-
- while(_state == StateNotValidated)
+ if(_state <= StateNotValidated)
{
- wait();
+ return;
}
setState(StateHolding);
@@ -255,20 +289,35 @@ Ice::ConnectionI::hold()
void
Ice::ConnectionI::destroy(DestructionReason reason)
{
- IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
-
- switch(reason)
+ bool send = false;
+ {
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+
+ switch(reason)
+ {
+ case ObjectAdapterDeactivated:
+ {
+ send = setState(StateClosing, ObjectAdapterDeactivatedException(__FILE__, __LINE__));
+ break;
+ }
+
+ case CommunicatorDestroyed:
+ {
+ send = setState(StateClosing, CommunicatorDestroyedException(__FILE__, __LINE__));
+ break;
+ }
+ }
+ }
+
+ if(send) // Send the close connection message
{
- case ObjectAdapterDeactivated:
+ try
{
- setState(StateClosing, ObjectAdapterDeactivatedException(__FILE__, __LINE__));
- break;
+ finishSendMessage();
}
-
- case CommunicatorDestroyed:
+ catch(const Ice::LocalException&)
{
- setState(StateClosing, CommunicatorDestroyedException(__FILE__, __LINE__));
- break;
+ // Ignore.
}
}
}
@@ -276,32 +325,47 @@ Ice::ConnectionI::destroy(DestructionReason reason)
void
Ice::ConnectionI::close(bool force)
{
- IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
-
- if(force)
+ bool send = false;
{
- setState(StateClosed, ForcedCloseConnectionException(__FILE__, __LINE__));
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+
+ if(force)
+ {
+ setState(StateClosed, ForcedCloseConnectionException(__FILE__, __LINE__));
+ }
+ else
+ {
+ //
+ // If we do a graceful shutdown, then we wait until all
+ // outstanding requests have been completed. Otherwise, the
+ // CloseConnectionException will cause all outstanding
+ // requests to be retried, regardless of whether the server
+ // has processed them or not.
+ //
+ while(!_requests.empty() || !_asyncRequests.empty())
+ {
+ wait();
+ }
+
+ send = setState(StateClosing, CloseConnectionException(__FILE__, __LINE__));
+ }
}
- else
+
+ if(send) // Send the close connection message
{
- //
- // If we do a graceful shutdown, then we wait until all
- // outstanding requests have been completed. Otherwise, the
- // CloseConnectionException will cause all outstanding
- // requests to be retried, regardless of whether the server
- // has processed them or not.
- //
- while(!_requests.empty() || !_asyncRequests.empty())
+ try
{
- wait();
+ finishSendMessage();
+ }
+ catch(const Ice::LocalException&)
+ {
+ // Ignore.
}
-
- setState(StateClosing, CloseConnectionException(__FILE__, __LINE__));
}
}
bool
-Ice::ConnectionI::isDestroyed() const
+Ice::ConnectionI::isActiveOrHolding() const
{
//
// We can not use trylock here, otherwise the outgoing connection
@@ -310,7 +374,7 @@ Ice::ConnectionI::isDestroyed() const
//
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
- return _state >= StateClosing;
+ return _state > StateNotValidated && _state < StateClosing;
}
bool
@@ -460,56 +524,55 @@ Ice::ConnectionI::waitUntilFinished()
void
Ice::ConnectionI::monitor()
{
- IceUtil::Monitor<IceUtil::Mutex>::TryLock sync(*this);
-
- if(!sync.acquired())
+ bool send = false;
{
- return;
- }
+ IceUtil::Monitor<IceUtil::Mutex>::TryLock sync(*this);
+ if(!sync.acquired())
+ {
+ return;
+ }
- if(_state != StateActive)
- {
- return;
- }
+ if(_state != StateActive)
+ {
+ return;
+ }
- //
- // Check for timed out async requests.
- //
- for(map<Int, AsyncRequest>::iterator p = _asyncRequests.begin(); p != _asyncRequests.end(); ++p)
- {
- if(p->second.t > IceUtil::Time() && p->second.t <= IceUtil::Time::now(IceUtil::Time::Monotonic))
+ //
+ // Active connection management for idle connections.
+ //
+ if(_acmTimeout <= 0 ||
+ !_requests.empty() || !_asyncRequests.empty() ||
+ _batchStreamInUse || !_batchStream.b.empty() ||
+ _sendInProgress || _dispatchCount > 0)
{
- setState(StateClosed, TimeoutException(__FILE__, __LINE__));
return;
}
+
+ if(IceUtil::Time::now(IceUtil::Time::Monotonic) >= _acmAbsoluteTimeout)
+ {
+ send = setState(StateClosing, ConnectionTimeoutException(__FILE__, __LINE__));
+ }
}
-
- //
- // Active connection management for idle connections.
- //
- if(_acmTimeout > 0 &&
- _requests.empty() && _asyncRequests.empty() &&
- !_batchStreamInUse && _batchStream.b.empty() &&
- _dispatchCount == 0)
+
+ if(send)
{
- if(IceUtil::Time::now(IceUtil::Time::Monotonic) >= _acmAbsoluteTimeout)
+ try
+ {
+ finishSendMessage();
+ }
+ catch(const Ice::LocalException&)
{
- setState(StateClosing, ConnectionTimeoutException(__FILE__, __LINE__));
- return;
}
}
}
-void
-Ice::ConnectionI::sendRequest(BasicStream* os, Outgoing* out, bool compress)
+bool
+Ice::ConnectionI::sendRequest(Outgoing* out, bool compress, bool response)
{
- Int requestId;
-
+ BasicStream* os = out->os();
+ bool send = false;
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
-
- assert(!(out && _endpoint->datagram())); // Twoway requests cannot be datagrams.
-
if(_exception.get())
{
//
@@ -523,10 +586,8 @@ Ice::ConnectionI::sendRequest(BasicStream* os, Outgoing* out, bool compress)
assert(_state > StateNotValidated);
assert(_state < StateClosing);
- //
- // Only add to the request map if this is a twoway call.
- //
- if(out)
+ Int requestId;
+ if(response)
{
//
// Create a new unique request ID.
@@ -547,134 +608,65 @@ Ice::ConnectionI::sendRequest(BasicStream* os, Outgoing* out, bool compress)
#else
copy(p, p + sizeof(Int), os->b.begin() + headerSize);
#endif
-
- //
- // Add to the requests map.
- //
- _requestsHint = _requests.insert(_requests.end(), pair<const Int, Outgoing*>(requestId, out));
}
-
- if(_acmTimeout > 0)
+
+ //
+ // Send the message. If it can't be sent without blocking the message is added
+ // to _sendStreams and it will be sent by the selector thread or by this thread
+ // if flush is true.
+ //
+ try
{
- _acmAbsoluteTimeout = IceUtil::Time::now(IceUtil::Time::Monotonic) + IceUtil::Time::seconds(_acmTimeout);
+ OutgoingMessage message(out, os, compress, response);
+ send = sendMessage(message);
}
- }
-
- try
- {
- IceUtil::Mutex::Lock sendSync(_sendMutex);
-
- if(!_transceiver) // Has the transceiver already been closed?
+ catch(const LocalException& ex)
{
- assert(_exception.get());
- _exception->ice_throw(); // The exception is immutable at this point.
+ setState(StateClosed, ex);
+ assert(_exception.get());
+ _exception->ice_throw();
}
-
- if(compress && os->b.size() >= 100) // Only compress messages larger than 100 bytes.
+
+ if(response)
{
//
- // Message compressed. Request compressed response, if any.
- //
- os->b[9] = 2;
-
- //
- // Do compression.
- //
- BasicStream cstream(_instance.get());
- doCompress(*os, cstream);
-
- //
- // Send the request.
+ // Add to the requests map.
//
- os->i = os->b.begin();
- traceRequest("sending request", *os, _logger, _traceLevels);
- cstream.i = cstream.b.begin();
- _transceiver->write(cstream, _endpoint->timeout());
+ _requestsHint = _requests.insert(_requests.end(), pair<const Int, Outgoing*>(requestId, out));
}
- else
- {
- if(compress)
- {
- //
- // Message not compressed. Request compressed response, if any.
- //
- os->b[9] = 1;
- }
- //
- // No compression, just fill in the message size.
- //
- Int sz = static_cast<Int>(os->b.size());
- const Byte* p = reinterpret_cast<const Byte*>(&sz);
-#ifdef ICE_BIG_ENDIAN
- reverse_copy(p, p + sizeof(Int), os->b.begin() + 10);
-#else
- copy(p, p + sizeof(Int), os->b.begin() + 10);
-#endif
-
- //
- // Send the request.
- //
- os->i = os->b.begin();
- traceRequest("sending request", *os, _logger, _traceLevels);
- _transceiver->write(*os, _endpoint->timeout());
+ if(!send)
+ {
+ return !_sendInProgress && _queuedStreams.empty(); // The request was sent if it's not queued!
}
}
- catch(const LocalException& ex)
- {
- IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
- setState(StateClosed, ex);
- assert(_exception.get());
- if(out)
+ if(send)
+ {
+ try
{
- //
- // If the request has already been removed from the
- // request map, we are out of luck. It would mean that
- // finished() has been called already, and therefore the
- // exception has been set using the Outgoing::finished()
- // callback. In this case, we cannot throw the exception
- // here, because we must not both raise an exception and
- // have Outgoing::finished() called with an
- // exception. This means that in some rare cases, a
- // request will not be retried even though it could. But I
- // honestly don't know how I could avoid this, without a
- // very elaborate and complex design, which would be bad
- // for performance.
- //
- map<Int, Outgoing*>::iterator p = _requests.find(requestId);
- if(p != _requests.end())
- {
- if(p == _requestsHint)
- {
- _requests.erase(p++);
- _requestsHint = p;
- }
- else
- {
- _requests.erase(p);
- }
-
- _exception->ice_throw();
- }
+ finishSendMessage();
}
- else
+ catch(const Ice::LocalException&)
{
- _exception->ice_throw();
+ assert(_exception.get());
+ if(!response) // Twoway calls are notified through finished()
+ {
+ throw;
+ }
}
}
+ return true; // The request was sent.
}
void
-Ice::ConnectionI::sendAsyncRequest(BasicStream* os, const OutgoingAsyncPtr& out, bool compress)
+Ice::ConnectionI::sendAsyncRequest(const OutgoingAsyncPtr& out, bool compress, bool response)
{
- Int requestId;
+ BasicStream* os = out->__getOs();
+ bool send = false;
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
-
- assert(!_endpoint->datagram()); // Twoway requests cannot be datagrams, and async implies twoway.
-
if(_exception.get())
{
//
@@ -687,140 +679,66 @@ Ice::ConnectionI::sendAsyncRequest(BasicStream* os, const OutgoingAsyncPtr& out,
assert(_state > StateNotValidated);
assert(_state < StateClosing);
-
- //
- // Create a new unique request ID.
- //
- requestId = _nextRequestId++;
- if(requestId <= 0)
+
+ Int requestId;
+ if(response)
{
- _nextRequestId = 1;
+ //
+ // Create a new unique request ID.
+ //
requestId = _nextRequestId++;
- }
-
- //
- // Fill in the request ID.
- //
- const Byte* p = reinterpret_cast<const Byte*>(&requestId);
+ if(requestId <= 0)
+ {
+ _nextRequestId = 1;
+ requestId = _nextRequestId++;
+ }
+
+ //
+ // Fill in the request ID.
+ //
+ const Byte* p = reinterpret_cast<const Byte*>(&requestId);
#ifdef ICE_BIG_ENDIAN
- reverse_copy(p, p + sizeof(Int), os->b.begin() + headerSize);
+ reverse_copy(p, p + sizeof(Int), os->b.begin() + headerSize);
#else
- copy(p, p + sizeof(Int), os->b.begin() + headerSize);
+ copy(p, p + sizeof(Int), os->b.begin() + headerSize);
#endif
-
- //
- // Add to the async requests map.
- //
- struct AsyncRequest asyncRequest;
- asyncRequest.p = out;
- if(_endpoint->timeout() > 0)
- {
- asyncRequest.t =
- IceUtil::Time::now(IceUtil::Time::Monotonic) + IceUtil::Time::milliSeconds(_endpoint->timeout());
}
- _asyncRequestsHint = _asyncRequests.insert(_asyncRequests.end(),
- pair<const Int, AsyncRequest>(requestId, asyncRequest));
-
- if(_acmTimeout > 0)
+
+ try
{
- _acmAbsoluteTimeout = IceUtil::Time::now(IceUtil::Time::Monotonic) + IceUtil::Time::seconds(_acmTimeout);
+ OutgoingMessage message(out, os, compress, response);
+ send = sendMessage(message);
}
- }
-
- try
- {
- IceUtil::Mutex::Lock sendSync(_sendMutex);
-
- if(!_transceiver) // Has the transceiver already been closed?
+ catch(const LocalException& ex)
{
+ setState(StateClosed, ex);
assert(_exception.get());
- _exception->ice_throw(); // The exception is immutable at this point.
+ _exception->ice_throw();
}
- if(compress && os->b.size() >= 100) // Only compress messages larger than 100 bytes.
- {
- //
- // Message compressed. Request compressed response, if any.
- //
- os->b[9] = 2;
-
- //
- // Do compression.
- //
- BasicStream cstream(_instance.get());
- doCompress(*os, cstream);
-
- //
- // Send the request.
- //
- os->i = os->b.begin();
- traceRequest("sending asynchronous request", *os, _logger, _traceLevels);
- cstream.i = cstream.b.begin();
- _transceiver->write(cstream, _endpoint->timeout());
- }
- else
+ if(response)
{
- if(compress)
- {
- //
- // Message not compressed. Request compressed response, if any.
- //
- os->b[9] = 1;
- }
-
- //
- // No compression, just fill in the message size.
- //
- Int sz = static_cast<Int>(os->b.size());
- const Byte* p = reinterpret_cast<const Byte*>(&sz);
-#ifdef ICE_BIG_ENDIAN
- reverse_copy(p, p + sizeof(Int), os->b.begin() + 10);
-#else
- copy(p, p + sizeof(Int), os->b.begin() + 10);
-#endif
-
//
- // Send the request.
+ // Add to the async requests map.
//
- os->i = os->b.begin();
- traceRequest("sending asynchronous request", *os, _logger, _traceLevels);
- _transceiver->write(*os, _endpoint->timeout());
+ _asyncRequestsHint = _asyncRequests.insert(_asyncRequests.end(),
+ pair<const Int, OutgoingAsyncPtr>(requestId, out));
}
}
- catch(const LocalException& ex)
+
+ if(send)
{
- IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
- setState(StateClosed, ex);
- assert(_exception.get());
-
- //
- // If the request has already been removed from the async
- // request map, we are out of luck. It would mean that
- // finished() has been called already, and therefore the
- // exception has been set using the
- // OutgoingAsync::__finished() callback. In this case, we
- // cannot throw the exception here, because we must not both
- // raise an exception and have OutgoingAsync::__finished()
- // called with an exception. This means that in some rare
- // cases, a request will not be retried even though it
- // could. But I honestly don't know how I could avoid this,
- // without a very elaborate and complex design, which would be
- // bad for performance.
- //
- map<Int, AsyncRequest>::iterator p = _asyncRequests.find(requestId);
- if(p != _asyncRequests.end())
+ try
{
- if(p == _asyncRequestsHint)
- {
- _asyncRequests.erase(p++);
- _asyncRequestsHint = p;
- }
- else
+ finishSendMessage();
+ }
+ catch(const Ice::LocalException&)
+ {
+ assert(_exception.get());
+ if(!response) // Twoway calls are notified through finished().
{
- _asyncRequests.erase(p);
- }
-
- _exception->ice_throw();
+ throw;
+ }
}
}
}
@@ -872,9 +790,8 @@ Ice::ConnectionI::prepareBatchRequest(BasicStream* os)
void
Ice::ConnectionI::finishBatchRequest(BasicStream* os, bool compress)
{
- bool autoflush = false;
- vector<Ice::Byte> lastRequest;
-
+ bool send = false;
+ try
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
@@ -882,16 +799,15 @@ Ice::ConnectionI::finishBatchRequest(BasicStream* os, bool compress)
// Get the batch stream back.
//
_batchStream.swap(*os);
-
+
+ if(_exception.get())
+ {
+ _exception->ice_throw();
+ }
+
+ bool flush = false;
if(_batchAutoFlush)
{
- IceUtil::Mutex::Lock sendSync(_sendMutex);
- if(!_transceiver)
- {
- assert(_exception.get());
- _exception->ice_throw(); // The exception is immutable at this point.
- }
-
//
// Throw memory limit exception if the first message added causes us to
// go over limit. Otherwise put aside the marshalled message that caused
@@ -903,122 +819,152 @@ Ice::ConnectionI::finishBatchRequest(BasicStream* os, bool compress)
}
catch(const Ice::Exception&)
{
- if(_batchRequestNum == 0)
+ if(_batchRequestNum > 0)
+ {
+ flush = true;
+ }
+ else
{
- resetBatch(true);
throw;
}
- vector<Ice::Byte>(_batchStream.b.begin() + _batchMarker, _batchStream.b.end()).swap(lastRequest);
- _batchStream.b.resize(_batchMarker);
- autoflush = true;
}
}
- if(!autoflush)
+ if(flush)
{
//
- // Increment the number of requests in the batch.
+ // Temporarily save the last request.
+ //
+ vector<Ice::Byte> lastRequest(_batchStream.b.begin() + _batchMarker, _batchStream.b.end());
+ _batchStream.b.resize(_batchMarker);
+
+ //
+ // Send the batch stream without the last request.
+ //
+ try
+ {
+ //
+ // Fill in the number of requests in the batch.
+ //
+ const Byte* p = reinterpret_cast<const Byte*>(&_batchRequestNum);
+#ifdef ICE_BIG_ENDIAN
+ reverse_copy(p, p + sizeof(Int), _batchStream.b.begin() + headerSize);
+#else
+ copy(p, p + sizeof(Int), _batchStream.b.begin() + headerSize);
+#endif
+
+ OutgoingMessage message(&_batchStream, _batchRequestCompress);
+ send = sendMessage(message);
+ if(send)
+ {
+ //
+ // If the request can't be sent immediately and this is a foreground send,
+ // we adopt the stream to be able to re-use _batchStream immediately.
+ //
+ assert(!_sendStreams.empty());
+ _sendStreams.back().adopt(0);
+ }
+ }
+ catch(const Ice::LocalException& ex)
+ {
+ setState(StateClosed, ex);
+ assert(_exception.get());
+ _exception->ice_throw();
+ }
+
+ //
+ // Reset the batch.
//
- ++_batchRequestNum;
+ BasicStream dummy(_instance.get(), _batchAutoFlush);
+ _batchStream.swap(dummy);
+ _batchRequestNum = 0;
+ _batchRequestCompress = false;
+ _batchMarker = 0;
//
- // We compress the whole batch if there is at least one compressed
- // message.
+ // Check again if the last request doesn't exceed what we can send with the auto flush
//
- if(compress)
+ if(sizeof(requestBatchHdr) + lastRequest.size() > _instance->messageSizeMax())
{
- _batchRequestCompress = true;
+ throw MemoryLimitException(__FILE__, __LINE__);
}
-
+
//
- // Notify about the batch stream not being in use anymore.
+ // Start a new batch with the last message that caused us to go over the limit.
//
- assert(_batchStreamInUse);
- _batchStreamInUse = false;
- notifyAll();
+ _batchStream.writeBlob(requestBatchHdr, sizeof(requestBatchHdr));
+ _batchStream.writeBlob(&lastRequest[0], lastRequest.size());
}
- }
-
- if(autoflush)
- {
- //
- // We have to keep _batchStreamInUse set until after we insert the
- // saved marshalled data into a new stream.
- //
- flushBatchRequestsInternal(true);
-
- IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
//
- // Throw memory limit exception if the message that caused us to go over
- // limit causes us to exceed the limit by itself.
+ // Increment the number of requests in the batch.
//
- if(sizeof(requestBatchHdr) + lastRequest.size() > _instance->messageSizeMax())
- {
- resetBatch(true);
- throw MemoryLimitException(__FILE__, __LINE__);
- }
-
+ ++_batchRequestNum;
+
//
- // Start a new batch with the last message that caused us to
- // go over the limit.
+ // We compress the whole batch if there is at least one compressed
+ // message.
//
- try
- {
- _batchStream.writeBlob(requestBatchHdr, sizeof(requestBatchHdr));
- _batchStream.writeBlob(&lastRequest[0], lastRequest.size());
- }
- catch(const LocalException& ex)
- {
- setState(StateClosed, ex);
- ex.ice_throw();
- }
-
if(compress)
{
_batchRequestCompress = true;
}
-
+
//
- // Notify that the batch stream not in use anymore.
+ // Notify about the batch stream not being in use anymore.
//
- ++_batchRequestNum;
+ assert(_batchStreamInUse);
_batchStreamInUse = false;
notifyAll();
}
+ catch(const Ice::LocalException&)
+ {
+ abortBatchRequest();
+ if(send)
+ {
+ finishSendMessage(); // Let exceptions go through to report auto-flush failures to the caller.
+ }
+ throw;
+ }
+
+ if(send)
+ {
+ finishSendMessage(); // Let exceptions go through to report auto-flush failures to the caller.
+ }
}
void
Ice::ConnectionI::abortBatchRequest()
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
-
- //
- // Reset the batch stream. We cannot save old requests
- // in the batch stream, as they might be corrupted due to
- // incomplete marshaling.
- //
- resetBatch(true);
+
+ BasicStream dummy(_instance.get(), _batchAutoFlush);
+ _batchStream.swap(dummy);
+ _batchRequestNum = 0;
+ _batchRequestCompress = false;
+ _batchMarker = 0;
+
+ assert(_batchStreamInUse);
+ _batchStreamInUse = false;
+ notifyAll();
}
void
Ice::ConnectionI::flushBatchRequests()
{
- flushBatchRequestsInternal(false);
+ BatchOutgoing out(this, _instance.get());
+ out.invoke();
}
-void
-Ice::ConnectionI::flushBatchRequestsInternal(bool ignoreInUse)
+bool
+Ice::ConnectionI::flushBatchRequests(BatchOutgoing* out)
{
+ bool send = false;
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
-
- if(!ignoreInUse)
+ while(_batchStreamInUse && !_exception.get())
{
- while(_batchStreamInUse && !_exception.get())
- {
- wait();
- }
+ wait();
}
if(_exception.get())
@@ -1026,36 +972,78 @@ Ice::ConnectionI::flushBatchRequestsInternal(bool ignoreInUse)
_exception->ice_throw();
}
- if(_batchStream.b.empty())
+ if(_batchRequestNum == 0)
{
- return; // Nothing to do.
+ return true;
}
- assert(_state > StateNotValidated);
- assert(_state < StateClosing);
-
- _batchStream.i = _batchStream.b.begin();
+ //
+ // Fill in the number of requests in the batch.
+ //
+ const Byte* p = reinterpret_cast<const Byte*>(&_batchRequestNum);
+#ifdef ICE_BIG_ENDIAN
+ reverse_copy(p, p + sizeof(Int), _batchStream.b.begin() + headerSize);
+#else
+ copy(p, p + sizeof(Int), _batchStream.b.begin() + headerSize);
+#endif
+ _batchStream.swap(*out->os());
- if(_acmTimeout > 0)
+ //
+ // Send the batch stream.
+ //
+ try
{
- _acmAbsoluteTimeout = IceUtil::Time::now(IceUtil::Time::Monotonic) + IceUtil::Time::seconds(_acmTimeout);
+ OutgoingMessage message(out, out->os(), _batchRequestCompress, false);
+ send = sendMessage(message);
+ }
+ catch(const Ice::LocalException& ex)
+ {
+ setState(StateClosed, ex);
+ assert(_exception.get());
+ _exception->ice_throw();
}
//
- // Prevent that new batch requests are added while we are
- // flushing.
+ // Reset the batch stream.
//
- _batchStreamInUse = true;
+ BasicStream dummy(_instance.get(), _batchAutoFlush);
+ _batchStream.swap(dummy);
+ _batchRequestNum = 0;
+ _batchRequestCompress = false;
+ _batchMarker = 0;
+
+ if(!send)
+ {
+ return !_sendInProgress && _queuedStreams.empty(); // The request was sent if it's not queued!
+ }
}
-
- try
+
+ if(send)
+ {
+ finishSendMessage();
+ }
+ return true;
+}
+
+void
+Ice::ConnectionI::flushAsyncBatchRequests(const BatchOutgoingAsyncPtr& outAsync)
+{
+ bool send = false;
{
- IceUtil::Mutex::Lock sendSync(_sendMutex);
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ while(_batchStreamInUse && !_exception.get())
+ {
+ wait();
+ }
+
+ if(_exception.get())
+ {
+ _exception->ice_throw();
+ }
- if(!_transceiver) // Has the transceiver already been closed?
+ if(_batchRequestNum == 0)
{
- assert(_exception.get());
- _exception->ice_throw(); // The exception is immutable at this point.
+ return;
}
//
@@ -1067,195 +1055,123 @@ Ice::ConnectionI::flushBatchRequestsInternal(bool ignoreInUse)
#else
copy(p, p + sizeof(Int), _batchStream.b.begin() + headerSize);
#endif
-
- if(_batchRequestCompress && _batchStream.b.size() >= 100) // Only compress messages larger than 100 bytes.
+ _batchStream.swap(*outAsync->__getOs());
+
+ //
+ // Send the batch stream.
+ //
+ try
{
- //
- // Message compressed. Request compressed response, if any.
- //
- _batchStream.b[9] = 2;
-
- //
- // Do compression.
- //
- BasicStream cstream(_instance.get());
- doCompress(_batchStream, cstream);
-
- //
- // Send the batch request.
- //
- _batchStream.i = _batchStream.b.begin();
- traceBatchRequest("sending batch request", _batchStream, _logger, _traceLevels);
- cstream.i = cstream.b.begin();
- _transceiver->write(cstream, _endpoint->timeout());
+ OutgoingMessage message(outAsync, outAsync->__getOs(), _batchRequestCompress, false);
+ send = sendMessage(message);
}
- else
+ catch(const Ice::LocalException& ex)
{
- if(_batchRequestCompress)
- {
- //
- // Message not compressed. Request compressed response, if any.
- //
- _batchStream.b[9] = 1;
- }
-
- //
- // No compression, just fill in the message size.
- //
- Int sz = static_cast<Int>(_batchStream.b.size());
- const Byte* q = reinterpret_cast<const Byte*>(&sz);
-#ifdef ICE_BIG_ENDIAN
- reverse_copy(q, q + sizeof(Int), _batchStream.b.begin() + 10);
-#else
- copy(q, q + sizeof(Int), _batchStream.b.begin() + 10);
-#endif
-
- //
- // Send the batch request.
- //
- _batchStream.i = _batchStream.b.begin();
- traceBatchRequest("sending batch request", _batchStream, _logger, _traceLevels);
- _transceiver->write(_batchStream, _endpoint->timeout());
+ setState(StateClosed, ex);
+ assert(_exception.get());
+ _exception->ice_throw();
}
- }
- catch(const LocalException& ex)
- {
- IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
- setState(StateClosed, ex);
- assert(_exception.get());
//
- // Since batch requests are all oneways (or datagrams), we
- // must report the exception to the caller.
+ // Reset the batch stream.
//
- _exception->ice_throw();
+ BasicStream dummy(_instance.get(), _batchAutoFlush);
+ _batchStream.swap(dummy);
+ _batchRequestNum = 0;
+ _batchRequestCompress = false;
+ _batchMarker = 0;
}
+ if(send)
{
- IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
-
- //
- // Reset the batch stream, and notify that flushing is over.
- //
- resetBatch(!ignoreInUse);
- }
-}
-
-void
-Ice::ConnectionI::resetBatch(bool resetInUse)
-{
- BasicStream dummy(_instance.get(), _batchAutoFlush);
- _batchStream.swap(dummy);
- _batchRequestNum = 0;
- _batchRequestCompress = false;
- _batchMarker = 0;
-
- //
- // Notify about the batch stream not being in use
- // anymore.
- //
- if(resetInUse)
- {
- assert(_batchStreamInUse);
- _batchStreamInUse = false;
- notifyAll();
+ finishSendMessage();
}
}
void
Ice::ConnectionI::sendResponse(BasicStream* os, Byte compressFlag)
{
- try
+ bool send = false;
{
- IceUtil::Mutex::Lock sendSync(_sendMutex);
-
- if(!_transceiver) // Has the transceiver already been closed?
- {
- assert(_exception.get());
- _exception->ice_throw(); // The exception is immutable at this point.
- }
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ assert(_state > StateNotValidated);
- //
- // Only compress if compression was requested by the client,
- // and if the message is larger than 100 bytes.
- //
- if(compressFlag > 0 && os->b.size() >= 100)
+ try
{
- //
- // Message compressed. Request compressed response, if any.
- //
- os->b[9] = 2;
+ if(--_dispatchCount == 0)
+ {
+ notifyAll();
+ }
- //
- // Do compression.
- //
- BasicStream cstream(_instance.get());
- doCompress(*os, cstream);
+ if(_state == StateClosed)
+ {
+ assert(_exception.get());
+ _exception->ice_throw();
+ }
- //
- // Send the reply.
- //
- os->i = os->b.begin();
- traceReply("sending reply", *os, _logger, _traceLevels);
- cstream.i = cstream.b.begin();
- _transceiver->write(cstream, _endpoint->timeout());
- }
- else
- {
- if(compressFlag > 0)
+ OutgoingMessage message(os, compressFlag > 0);
+ send = sendMessage(message);
+
+ if(_state == StateClosing && _dispatchCount == 0)
{
- //
- // Message not compressed. Request compressed response, if any.
- //
- os->b[9] = 1;
+ send = initiateShutdown(send);
}
- //
- // No compression, just fill in the message size.
- //
- Int sz = static_cast<Int>(os->b.size());
- const Byte* p = reinterpret_cast<const Byte*>(&sz);
-#ifdef ICE_BIG_ENDIAN
- reverse_copy(p, p + sizeof(Int), os->b.begin() + 10);
-#else
- copy(p, p + sizeof(Int), os->b.begin() + 10);
-#endif
-
- //
- // Send the reply.
- //
- os->i = os->b.begin();
- traceReply("sending reply", *os, _logger, _traceLevels);
- _transceiver->write(*os, _endpoint->timeout());
+ if(_acmTimeout > 0)
+ {
+ _acmAbsoluteTimeout = IceUtil::Time::now(IceUtil::Time::Monotonic) +
+ IceUtil::Time::seconds(_acmTimeout);
+ }
+ }
+ catch(const LocalException& ex)
+ {
+ setState(StateClosed, ex);
}
}
- catch(const LocalException& ex)
+
+ if(send)
{
- IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
- setState(StateClosed, ex);
+ try
+ {
+ finishSendMessage();
+ }
+ catch(Ice::LocalException&)
+ {
+ // Ignore.
+ }
}
+}
+void
+Ice::ConnectionI::sendNoResponse()
+{
+ bool send = false;
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
-
assert(_state > StateNotValidated);
-
+
try
{
if(--_dispatchCount == 0)
{
notifyAll();
}
-
+
+ if(_state == StateClosed)
+ {
+ assert(_exception.get());
+ _exception->ice_throw();
+ }
+
if(_state == StateClosing && _dispatchCount == 0)
{
- initiateShutdown();
+ send = initiateShutdown(false);
}
-
+
if(_acmTimeout > 0)
{
- _acmAbsoluteTimeout =
- IceUtil::Time::now(IceUtil::Time::Monotonic) + IceUtil::Time::seconds(_acmTimeout);
+ _acmAbsoluteTimeout = IceUtil::Time::now(IceUtil::Time::Monotonic) +
+ IceUtil::Time::seconds(_acmTimeout);
}
}
catch(const LocalException& ex)
@@ -1263,31 +1179,18 @@ Ice::ConnectionI::sendResponse(BasicStream* os, Byte compressFlag)
setState(StateClosed, ex);
}
}
-}
-void
-Ice::ConnectionI::sendNoResponse()
-{
- IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
-
- assert(_state > StateNotValidated);
-
- try
+ if(send)
{
- if(--_dispatchCount == 0)
+ try
{
- notifyAll();
+ finishSendMessage();
}
-
- if(_state == StateClosing && _dispatchCount == 0)
+ catch(Ice::LocalException&)
{
- initiateShutdown();
+ // Ignore.
}
}
- catch(const LocalException& ex)
- {
- setState(StateClosed, ex);
- }
}
EndpointIPtr
@@ -1307,12 +1210,15 @@ Ice::ConnectionI::setAdapter(const ObjectAdapterPtr& adapter)
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
- if(_exception.get())
+ if(_state == StateClosing || _state == StateClosed)
{
+ assert(_exception.get());
_exception->ice_throw();
}
-
- assert(_state < StateClosing);
+ else if(_state <= StateNotValidated)
+ {
+ return;
+ }
_adapter = adapter;
@@ -1370,12 +1276,12 @@ Ice::ConnectionI::readable() const
return true;
}
-void
+bool
Ice::ConnectionI::read(BasicStream& stream)
{
assert(!_threadPerConnection); // Only for use with a thread pool.
- _transceiver->read(stream, 0);
+ return _transceiver->read(stream, 0);
//
// Updating _acmAbsoluteTimeout is too expensive here, because we
@@ -1446,9 +1352,6 @@ Ice::ConnectionI::finished(const ThreadPoolPtr& threadPool)
threadPool->promoteFollower();
auto_ptr<LocalException> localEx;
-
- map<Int, Outgoing*> requests;
- map<Int, AsyncRequest> asyncRequests;
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
@@ -1456,49 +1359,48 @@ Ice::ConnectionI::finished(const ThreadPoolPtr& threadPool)
--_finishedCount;
assert(threadPool.get() == _threadPool.get());
- if(_finishedCount == 0 && _state == StateClosed)
+ if(_finishedCount > 0 || _state != StateClosed || _sendInProgress)
{
- _threadPool->decFdsInUse();
+ return;
+ }
- //
- // We must make sure that nobody is sending when we close
- // the transceiver.
- //
- IceUtil::Mutex::Lock sendSync(_sendMutex);
+ _threadPool->decFdsInUse();
+ _selectorThread->decFdsInUse();
- try
- {
- _transceiver->close();
- }
- catch(const LocalException& ex)
- {
- localEx.reset(dynamic_cast<LocalException*>(ex.ice_clone()));
- }
-
- _transceiver = 0;
- notifyAll();
+ try
+ {
+ _transceiver->close();
}
-
- if(_state == StateClosed || _state == StateClosing)
+ catch(const LocalException& ex)
{
- requests.swap(_requests);
- _requestsHint = _requests.end();
-
- asyncRequests.swap(_asyncRequests);
- _asyncRequestsHint = _asyncRequests.end();
+ localEx.reset(dynamic_cast<LocalException*>(ex.ice_clone()));
}
+
+ _transceiver = 0;
+ notifyAll();
}
- for(map<Int, Outgoing*>::iterator p = requests.begin(); p != requests.end(); ++p)
+ finishStart(*_exception.get());
+
+ // Note: the streams must be cleared first because they expect the Outgoing objects to still be valid.
+ for(deque<OutgoingMessage>::iterator o = _queuedStreams.begin(); o != _queuedStreams.end(); ++o)
{
- p->second->finished(*_exception.get()); // The exception is immutable at this point.
+ o->finished(*_exception.get());
}
+ _queuedStreams.clear();
- for(map<Int, AsyncRequest>::iterator q = asyncRequests.begin(); q != asyncRequests.end(); ++q)
+ for(map<Int, Outgoing*>::iterator p = _requests.begin(); p != _requests.end(); ++p)
{
- q->second.p->__finished(*_exception.get()); // The exception is immutable at this point.
+ p->second->finished(*_exception.get()); // The exception is immutable at this point.
}
+ _requests.clear();
+ for(map<Int, OutgoingAsyncPtr>::iterator q = _asyncRequests.begin(); q != _asyncRequests.end(); ++q)
+ {
+ q->second->__finished(*_exception.get()); // The exception is immutable at this point.
+ }
+ _asyncRequests.clear();
+
if(localEx.get())
{
localEx->ice_throw();
@@ -1554,6 +1456,139 @@ Ice::ConnectionI::toString() const
}
//
+// Operations from SocketReadyCallback
+//
+SocketStatus
+Ice::ConnectionI::socketReady(bool finished)
+{
+ if(!finished)
+ {
+ try
+ {
+ //
+ // First, we check if there's something to send. If that's the case, the connection
+ // must be active and the only thing to do is send the queued streams.
+ //
+ if(!_sendStreams.empty())
+ {
+ if(!send(0))
+ {
+ return NeedWrite;
+ }
+ assert(_sendStreams.empty());
+ }
+ else
+ {
+ //
+ // If there's nothing to send, we're still validating the connection.
+ //
+ int state;
+ {
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ assert(_state == StateClosed || _state <= StateNotValidated);
+
+ state = _state;
+
+ if(_state == StateClosed)
+ {
+ assert(_exception.get());
+ _exception->ice_throw();
+ }
+ }
+
+ if(state == StateNotInitialized)
+ {
+ SocketStatus status = initialize();
+ if(status != Finished)
+ {
+ return status;
+ }
+ }
+
+ if(state <= StateNotValidated)
+ {
+ SocketStatus status = validate();
+ if(status != Finished)
+ {
+ return status;
+ }
+ }
+
+ finishStart();
+ }
+ }
+ catch(const Ice::LocalException& ex)
+ {
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ setState(StateClosed, ex);
+ }
+ }
+
+ //
+ // If there's no more data to send or if connection validation is finished, we checkout
+ // the connection state to figure out whether or not it's time to unregister with the
+ // selector thread.
+ //
+
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ assert(_sendInProgress);
+ if(_state == StateClosed)
+ {
+ assert(!_startCallback || (!_threadPerConnection && !_registeredWithPool));
+
+ _queuedStreams.insert(_queuedStreams.begin(), _sendStreams.begin(), _sendStreams.end());
+ _sendStreams.clear();
+ _sendInProgress = false;
+
+ if(_threadPerConnection)
+ {
+ _transceiver->shutdownReadWrite();
+ }
+ else
+ {
+ registerWithPool();
+ unregisterWithPool(); // Let finished() do the close.
+ }
+ notifyAll();
+ return Finished;
+ }
+ else if(_waitingForSend > 0) // If there's synchronous calls waiting to be sent, unregister.
+ {
+ _sendInProgress = false;
+ notifyAll();
+ return Finished;
+ }
+ else if(_queuedStreams.empty())
+ {
+ _sendInProgress = false;
+ if(_acmTimeout > 0)
+ {
+ _acmAbsoluteTimeout = IceUtil::Time::now(IceUtil::Time::Monotonic) + IceUtil::Time::seconds(_acmTimeout);
+ }
+ return Finished;
+ }
+ else
+ {
+ _sendStreams.swap(_queuedStreams);
+ return NeedWrite; // We're not finished yet, there's more data to send!
+ }
+}
+
+void
+Ice::ConnectionI::socketTimeout()
+{
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ if(_state <= StateNotValidated)
+ {
+ setState(StateClosed, ConnectTimeoutException(__FILE__, __LINE__));
+ }
+ else if(_state <= StateClosing)
+ {
+ setState(StateClosed, TimeoutException(__FILE__, __LINE__));
+ }
+}
+
+//
// Only used by the SSL plug-in.
//
// The external party has to synchronize the connection, since the
@@ -1596,8 +1631,10 @@ Ice::ConnectionI::ConnectionI(const InstancePtr& instance,
_batchRequestNum(0),
_batchRequestCompress(false),
_batchMarker(0),
+ _sendInProgress(false),
+ _waitingForSend(0),
_dispatchCount(0),
- _state(StateNotValidated),
+ _state(StateNotInitialized),
_stateTime(IceUtil::Time::now(IceUtil::Time::Monotonic))
{
Int& acmTimeout = const_cast<Int&>(_acmTimeout);
@@ -1635,17 +1672,17 @@ Ice::ConnectionI::ConnectionI(const InstancePtr& instance,
_servantManager = adapterImpl->getServantManager();
}
- if(!threadPerConnection)
+ __setNoDelete(true);
+ try
{
- //
- // Only set _threadPool if we really need it, i.e., if we are
- // not in thread per connection mode. Thread pools have lazy
- // initialization in Instance, and we don't want them to be
- // created if they are not needed.
- //
- __setNoDelete(true);
- try
+ if(!threadPerConnection)
{
+ //
+ // Only set _threadPool if we really need it, i.e., if we are
+ // not in thread per connection mode. Thread pools have lazy
+ // initialization in Instance, and we don't want them to be
+ // created if they are not needed.
+ //
if(adapterImpl)
{
const_cast<ThreadPoolPtr&>(_threadPool) = adapterImpl->getThreadPool();
@@ -1656,76 +1693,34 @@ Ice::ConnectionI::ConnectionI(const InstancePtr& instance,
}
_threadPool->incFdsInUse();
}
- catch(const IceUtil::Exception& ex)
- {
- try
- {
- _transceiver->close();
- }
- catch(const LocalException&)
- {
- // Here we ignore any exceptions in close().
- }
- __setNoDelete(false);
- ex.ice_throw();
- }
+ //
+ // Only set selector thread if we really need it.
+ //
+ const_cast<SelectorThreadPtr&>(_selectorThread) = _instance->selectorThread();
+ _selectorThread->incFdsInUse();
+ }
+ catch(const IceUtil::Exception&)
+ {
__setNoDelete(false);
+ throw;
}
+ __setNoDelete(false);
}
Ice::ConnectionI::~ConnectionI()
{
+ assert(!_startCallback);
assert(_state == StateClosed);
assert(!_transceiver);
assert(_dispatchCount == 0);
assert(!_thread);
+ assert(_queuedStreams.empty());
+ assert(_requests.empty());
+ assert(_asyncRequests.empty());
}
-void
-Ice::ConnectionI::start()
-{
- //
- // If we are in thread per connection mode, create the thread for this connection.
- // We can't start the thread in the constructor because it can cause a race condition
- // (see bug 1718).
- //
- if(_threadPerConnection)
- {
- try
- {
- _thread = new ThreadPerConnection(this);
- _thread->start(_threadPerConnectionStackSize);
- }
- catch(const IceUtil::Exception& ex)
- {
- {
- Error out(_logger);
- out << "cannot create thread for connection:\n" << ex;
- }
-
- try
- {
- _transceiver->close();
- }
- catch(const LocalException&)
- {
- // Here we ignore any exceptions in close().
- }
-
- //
- // Clean up.
- //
- _transceiver = 0;
- _thread = 0;
- _state = StateClosed;
-
- ex.ice_throw();
- }
- }
-}
-
-void
+bool
Ice::ConnectionI::setState(State state, const LocalException& ex)
{
//
@@ -1736,7 +1731,7 @@ Ice::ConnectionI::setState(State state, const LocalException& ex)
if(_state == state) // Don't switch twice.
{
- return;
+ return false;
}
if(!_exception.get())
@@ -1777,10 +1772,10 @@ Ice::ConnectionI::setState(State state, const LocalException& ex)
// exceptions. Otherwise new requests may retry on a connection
// that is not yet marked as closed or closing.
//
- setState(state);
+ return setState(state);
}
-void
+bool
Ice::ConnectionI::setState(State state)
{
//
@@ -1795,135 +1790,122 @@ Ice::ConnectionI::setState(State state)
//
// Skip graceful shutdown if we are destroyed before validation.
//
- if(_state == StateNotValidated && state == StateClosing)
+ if(_state <= StateNotValidated && state == StateClosing)
{
state = StateClosed;
}
if(_state == state) // Don't switch twice.
{
- return;
+ return false;
}
switch(state)
{
- case StateNotValidated:
+ case StateNotInitialized:
+ {
+ assert(false);
+ break;
+ }
+
+ case StateNotValidated:
+ {
+ if(_state != StateNotInitialized)
{
- assert(false);
- break;
+ assert(_state == StateClosed);
+ return false;
}
+ break;
+ }
- case StateActive:
+ case StateActive:
+ {
+ //
+ // Can only switch from holding or not validated to
+ // active.
+ //
+ if(_state != StateHolding && _state != StateNotValidated)
{
- //
- // Can only switch from holding or not validated to
- // active.
- //
- if(_state != StateHolding && _state != StateNotValidated)
- {
- return;
- }
- if(!_threadPerConnection)
- {
- registerWithPool();
- }
- break;
+ return false;
+ }
+ if(!_threadPerConnection)
+ {
+ registerWithPool();
+ }
+ break;
+ }
+
+ case StateHolding:
+ {
+ //
+ // Can only switch from active or not validated to
+ // holding.
+ //
+ if(_state != StateActive && _state != StateNotValidated)
+ {
+ return false;
+ }
+ if(!_threadPerConnection)
+ {
+ unregisterWithPool();
+ }
+ break;
+ }
+
+ case StateClosing:
+ {
+ //
+ // Can't change back from closed.
+ //
+ if(_state == StateClosed)
+ {
+ return false;
}
+ if(!_threadPerConnection)
+ {
+ registerWithPool(); // We need to continue to read in closing state.
+ }
+ break;
+ }
- case StateHolding:
+ case StateClosed:
+ {
+ if(_sendInProgress)
{
//
- // Can only switch from active or not validated to
- // holding.
+ // Unregister with both the pool and the selector thread. We unregister with
+ // the pool to ensure that it stops reading on the socket (otherwise, if the
+ // socket is closed the thread pool would spin always reading 0 from the FD).
+ // The selector thread will register again the FD with the pool once it's
+ // done.
//
- if(_state != StateActive && _state != StateNotValidated)
- {
- return;
- }
+ _selectorThread->unregister(_transceiver->fd());
if(!_threadPerConnection)
{
unregisterWithPool();
}
- break;
- }
- case StateClosing:
+ _transceiver->shutdownWrite(); // Prevent further writes.
+ }
+ else if(_state <= StateNotValidated || _threadPerConnection)
{
//
- // Can't change back from closed.
+ // If we are in thread per connection mode or we're initializing
+ // the connection in blocking mode, we shutdown both for reading
+ // and writing. This will unblock and read call with an exception.
+ // The thread per connection then closes the transceiver.
//
- if(_state == StateClosed)
- {
- return;
- }
- if(!_threadPerConnection)
- {
- registerWithPool(); // We need to continue to read in closing state.
- }
- break;
+ _transceiver->shutdownReadWrite();
}
-
- case StateClosed:
+ else
{
- if(_threadPerConnection)
- {
- //
- // If we are in thread per connection mode, we
- // shutdown both for reading and writing. This will
- // unblock and read call with an exception. The thread
- // per connection then closes the transceiver.
- //
- _transceiver->shutdownReadWrite();
- }
- else if(_state == StateNotValidated)
- {
- //
- // If we change from not validated we can close right
- // away.
- //
- assert(!_registeredWithPool);
-
- _threadPool->decFdsInUse();
-
- //
- // We must make sure that nobody is sending when we
- // close the transceiver.
- //
- IceUtil::Mutex::Lock sendSync(_sendMutex);
-
- try
- {
- _transceiver->close();
- }
- catch(const LocalException&)
- {
- // Here we ignore any exceptions in close().
- }
-
- _transceiver = 0;
- //notifyAll(); // We notify already below.
- }
- else
- {
- //
- // Otherwise we first must make sure that we are
- // registered, then we unregister, and let finished()
- // do the close.
- //
- registerWithPool();
- unregisterWithPool();
+ registerWithPool();
+ unregisterWithPool(); // Let finished() do the close.
- //
- // We must prevent any further writes when _state == StateClosed.
- // However, functions such as sendResponse cannot acquire the main
- // mutex in order to check _state. Therefore we shut down the write
- // end of the transceiver, which causes subsequent write attempts
- // to fail with an exception.
- //
- _transceiver->shutdownWrite();
- }
- break;
+ _transceiver->shutdownWrite(); // Prevent further writes.
}
+ break;
+ }
}
//
@@ -1954,25 +1936,25 @@ Ice::ConnectionI::setState(State state)
{
try
{
- initiateShutdown();
+ return initiateShutdown(false);
}
catch(const LocalException& ex)
{
setState(StateClosed, ex);
}
}
+
+ return false;
}
-void
-Ice::ConnectionI::initiateShutdown() const
+bool
+Ice::ConnectionI::initiateShutdown(bool queue)
{
assert(_state == StateClosing);
assert(_dispatchCount == 0);
if(!_endpoint->datagram())
{
- IceUtil::Mutex::Lock sendSync(_sendMutex);
-
//
// Before we shut down, we send a close connection message.
//
@@ -1989,12 +1971,9 @@ Ice::ConnectionI::initiateShutdown() const
os.write((Byte)1); // Compression status: compression supported but not used.
os.write(headerSize); // Message size.
- //
- // Send the message.
- //
- os.i = os.b.begin();
- traceHeader("sending close connection", os, _logger, _traceLevels);
- _transceiver->write(os, _endpoint->timeout());
+ OutgoingMessage message(&os, false);
+ return sendMessage(message, queue);
+
//
// The CloseConnection message should be sufficient. Closing the write
// end of the socket is probably an artifact of how things were done
@@ -2005,6 +1984,610 @@ Ice::ConnectionI::initiateShutdown() const
//
//_transceiver->shutdownWrite();
}
+
+ return false;
+}
+
+SocketStatus
+Ice::ConnectionI::initialize()
+{
+ int timeout = 0;
+ if(!_startCallback || _threadPerConnection)
+ {
+ DefaultsAndOverridesPtr defaultsAndOverrides = _instance->defaultsAndOverrides();
+ if(defaultsAndOverrides->overrideConnectTimeout)
+ {
+ timeout = defaultsAndOverrides->overrideConnectTimeoutValue;
+ }
+ else
+ {
+ timeout = _endpoint->timeout();
+ }
+ }
+
+ try
+ {
+ SocketStatus status = _transceiver->initialize(timeout);
+ if(status != Finished)
+ {
+ if(!_startCallback || _threadPerConnection)
+ {
+ throw TimeoutException(__FILE__, __LINE__);
+ }
+ return status;
+ }
+ }
+ catch(const TimeoutException&)
+ {
+ throw ConnectTimeoutException(__FILE__, __LINE__);
+ }
+
+ {
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ if(_state == StateClosed)
+ {
+ assert(_exception.get());
+ _exception->ice_throw();
+ }
+
+ //
+ // Update the connection description once the transceiver is initialized.
+ //
+ const_cast<string&>(_desc) = _transceiver->toString();
+
+ setState(StateNotValidated);
+ }
+
+ return Finished;
+}
+
+SocketStatus
+Ice::ConnectionI::validate()
+{
+ if(!_endpoint->datagram()) // Datagram connections are always implicitly validated.
+ {
+ Int timeout = 0;
+ if(!_startCallback || _threadPerConnection)
+ {
+ if(_instance->defaultsAndOverrides()->overrideConnectTimeout)
+ {
+ timeout = _instance->defaultsAndOverrides()->overrideConnectTimeoutValue;
+ }
+ else
+ {
+ timeout = _endpoint->timeout();
+ }
+ }
+
+ if(_adapter) // The server side has the active role for connection validation.
+ {
+ BasicStream& os = _stream;
+ if(os.b.empty())
+ {
+ os.write(magic[0]);
+ os.write(magic[1]);
+ os.write(magic[2]);
+ os.write(magic[3]);
+ os.write(protocolMajor);
+ os.write(protocolMinor);
+ os.write(encodingMajor);
+ os.write(encodingMinor);
+ os.write(validateConnectionMsg);
+ os.write(static_cast<Byte>(0)); // Compression status (always zero for validate connection).
+ os.write(headerSize); // Message size.
+ os.i = os.b.begin();
+ traceSend(os, _logger, _traceLevels);
+ }
+ else
+ {
+ // The stream can only be non-empty if we're doing a non-blocking connection validation.
+ assert(_startCallback && !_threadPerConnection);
+ }
+
+ try
+ {
+ if(!_transceiver->write(os, timeout))
+ {
+ if(!_startCallback || _threadPerConnection)
+ {
+ throw TimeoutException(__FILE__, __LINE__);
+ }
+ return NeedWrite;
+ }
+ }
+ catch(const TimeoutException&)
+ {
+ throw ConnectTimeoutException(__FILE__, __LINE__);
+ }
+ }
+ else // The client side has the passive role for connection validation.
+ {
+ BasicStream& is = _stream;
+ if(is.b.empty())
+ {
+ is.b.resize(headerSize);
+ is.i = is.b.begin();
+ }
+ else
+ {
+ // The stream can only be non-empty if we're doing a non-blocking connection validation.
+ assert(_startCallback && !_threadPerConnection);
+ }
+
+ try
+ {
+ if(!_transceiver->read(is, timeout))
+ {
+ if(!_startCallback || _threadPerConnection)
+ {
+ throw TimeoutException(__FILE__, __LINE__);
+ }
+ return NeedRead;
+ }
+ }
+ catch(const TimeoutException&)
+ {
+ throw ConnectTimeoutException(__FILE__, __LINE__);
+ }
+
+ assert(is.i == is.b.end());
+ is.i = is.b.begin();
+ Byte m[4];
+ is.read(m[0]);
+ is.read(m[1]);
+ is.read(m[2]);
+ is.read(m[3]);
+ if(m[0] != magic[0] || m[1] != magic[1] || m[2] != magic[2] || m[3] != magic[3])
+ {
+ BadMagicException ex(__FILE__, __LINE__);
+ ex.badMagic = Ice::ByteSeq(&m[0], &m[0] + sizeof(magic));
+ throw ex;
+ }
+ Byte pMajor;
+ Byte pMinor;
+ is.read(pMajor);
+ is.read(pMinor);
+ if(pMajor != protocolMajor)
+ {
+ UnsupportedProtocolException ex(__FILE__, __LINE__);
+ ex.badMajor = static_cast<unsigned char>(pMajor);
+ ex.badMinor = static_cast<unsigned char>(pMinor);
+ ex.major = static_cast<unsigned char>(protocolMajor);
+ ex.minor = static_cast<unsigned char>(protocolMinor);
+ throw ex;
+ }
+ Byte eMajor;
+ Byte eMinor;
+ is.read(eMajor);
+ is.read(eMinor);
+ if(eMajor != encodingMajor)
+ {
+ UnsupportedEncodingException ex(__FILE__, __LINE__);
+ ex.badMajor = static_cast<unsigned char>(eMajor);
+ ex.badMinor = static_cast<unsigned char>(eMinor);
+ ex.major = static_cast<unsigned char>(encodingMajor);
+ ex.minor = static_cast<unsigned char>(encodingMinor);
+ throw ex;
+ }
+ Byte messageType;
+ is.read(messageType);
+ if(messageType != validateConnectionMsg)
+ {
+ throw ConnectionNotValidatedException(__FILE__, __LINE__);
+ }
+ Byte compress;
+ is.read(compress); // Ignore compression status for validate connection.
+ Int size;
+ is.read(size);
+ if(size != headerSize)
+ {
+ throw IllegalMessageSizeException(__FILE__, __LINE__);
+ }
+ traceRecv(is, _logger, _traceLevels);
+ }
+ }
+
+ {
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ _stream.resize(0);
+ _stream.i = _stream.b.begin();
+
+ if(_state == StateClosed)
+ {
+ assert(_exception.get());
+ _exception->ice_throw();
+ }
+
+ //
+ // We start out in holding state.
+ //
+ setState(StateHolding);
+ }
+
+ return Finished;
+}
+
+bool
+Ice::ConnectionI::send(int timeout)
+{
+ assert(_transceiver);
+ assert(!_sendStreams.empty());
+
+ while(!_sendStreams.empty())
+ {
+ OutgoingMessage* message = &_sendStreams.front();
+
+ //
+ // Prepare the message stream for writing if necessary.
+ //
+ if(!message->stream->i)
+ {
+ message->stream->i = message->stream->b.begin();
+ if(message->compress && message->stream->b.size() >= 100) // Only compress messages larger than 100 bytes.
+ {
+ //
+ // Message compressed. Request compressed response, if any.
+ //
+ message->stream->b[9] = 2;
+
+ //
+ // Do compression.
+ //
+ BasicStream stream(_instance.get());
+ doCompress(*message->stream, stream);
+
+ if(message->outAsync)
+ {
+ trace("sending asynchronous request", *message->stream, _logger, _traceLevels);
+ }
+ else
+ {
+ traceSend(*message->stream, _logger, _traceLevels);
+ }
+
+ message->adopt(&stream); // Adopt the compressed stream.
+ message->stream->i = message->stream->b.begin();
+ }
+ else
+ {
+ if(message->compress)
+ {
+ //
+ // Message not compressed. Request compressed response, if any.
+ //
+ message->stream->b[9] = 1;
+ }
+
+ //
+ // No compression, just fill in the message size.
+ //
+ Int sz = static_cast<Int>(message->stream->b.size());
+ const Byte* p = reinterpret_cast<const Byte*>(&sz);
+#ifdef ICE_BIG_ENDIAN
+ reverse_copy(p, p + sizeof(Int), message->stream->b.begin() + 10);
+#else
+ copy(p, p + sizeof(Int), message->stream->b.begin() + 10);
+#endif
+ message->stream->i = message->stream->b.begin();
+
+ if(message->outAsync)
+ {
+ trace("sending asynchronous request", *message->stream, _logger, _traceLevels);
+ }
+ else
+ {
+ traceSend(*message->stream, _logger, _traceLevels);
+ }
+ }
+ }
+
+ //
+ // Send the first message.
+ //
+ assert(message->stream->i);
+ if(!_transceiver->write(*message->stream, timeout))
+ {
+ assert(timeout == 0);
+ return false;
+ }
+
+ //
+ // Notify the message that it was sent.
+ //
+ message->sent(this, timeout == 0); // timeout == 0 indicates that this is called by the selector thread.
+ _sendStreams.pop_front();
+ }
+
+ return true;
+}
+
+bool
+Ice::ConnectionI::sendMessage(OutgoingMessage& message, bool queue)
+{
+ assert(_state != StateClosed);
+
+ //
+ // TODO: Remove support for foreground send? If set to true, messages are sent
+ // by the calling thread. Foreground send might still be useful for transports
+ // that don't support non-blocking send.
+ //
+ bool foreground = false;
+
+ message.stream->i = 0; // Reset the message stream iterator before starting sending the message.
+
+ //
+ // If another thread is currently sending messages, we queue the message in _queuedStreams
+ // if we're not required to send the message in the foreground. If we're required to send
+ // the request in the foreground we wait until no more threads send messages.
+ //
+ if(_sendInProgress)
+ {
+ if(!foreground)
+ {
+ _queuedStreams.push_back(message);
+ _queuedStreams.back().adopt(0);
+ return false;
+ }
+ else if(queue)
+ {
+ //
+ // Add the message to _sendStreams if requested, this is useful for sendResponse() to
+ // send the close connection message after sending the response.
+ //
+ _sendStreams.push_back(message);
+ return true; // The calling thread must send the messages by calling finishSendMessage()
+ }
+ else
+ {
+ ++_waitingForSend;
+ while(_sendInProgress)
+ {
+ wait();
+ }
+ --_waitingForSend;
+
+ if(_state == StateClosed)
+ {
+ assert(_exception.get());
+ _exception->ice_throw();
+ }
+ }
+ }
+
+ assert(!_sendInProgress);
+
+ //
+ // Attempt to send the message without blocking. If the send blocks, we register
+ // the connection with the selector thread or we request the caller to call
+ // finishSendMessage() outside the synchronization.
+ //
+
+ message.stream->i = message.stream->b.begin();
+
+ if(message.compress && message.stream->b.size() >= 100) // Only compress messages larger than 100 bytes.
+ {
+ //
+ // Message compressed. Request compressed response, if any.
+ //
+ message.stream->b[9] = 2;
+
+ //
+ // Do compression.
+ //
+ BasicStream stream(_instance.get());
+ doCompress(*message.stream, stream);
+ stream.i = stream.b.begin();
+
+ if(message.outAsync)
+ {
+ trace("sending asynchronous request", *message.stream, _logger, _traceLevels);
+ }
+ else
+ {
+ traceSend(*message.stream, _logger, _traceLevels);
+ }
+
+ //
+ // Send the message without blocking.
+ //
+ if(!foreground && _transceiver->write(stream, 0))
+ {
+ message.sent(this, false);
+ if(_acmTimeout > 0)
+ {
+ _acmAbsoluteTimeout =
+ IceUtil::Time::now(IceUtil::Time::Monotonic) + IceUtil::Time::seconds(_acmTimeout);
+ }
+ return false;
+ }
+
+ _sendStreams.push_back(message);
+ _sendStreams.back().adopt(&stream);
+ }
+ else
+ {
+ if(message.compress)
+ {
+ //
+ // Message not compressed. Request compressed response, if any.
+ //
+ message.stream->b[9] = 1;
+ }
+
+ //
+ // No compression, just fill in the message size.
+ //
+ Int sz = static_cast<Int>(message.stream->b.size());
+ const Byte* p = reinterpret_cast<const Byte*>(&sz);
+#ifdef ICE_BIG_ENDIAN
+ reverse_copy(p, p + sizeof(Int), message.stream->b.begin() + 10);
+#else
+ copy(p, p + sizeof(Int), message.stream->b.begin() + 10);
+#endif
+ message.stream->i = message.stream->b.begin();
+
+ if(message.outAsync)
+ {
+ trace("sending asynchronous request", *message.stream, _logger, _traceLevels);
+ }
+ else
+ {
+ traceSend(*message.stream, _logger, _traceLevels);
+ }
+
+ //
+ // Send the message without blocking.
+ //
+ if(!foreground && _transceiver->write(*message.stream, 0))
+ {
+ message.sent(this, false);
+ if(_acmTimeout > 0)
+ {
+ _acmAbsoluteTimeout =
+ IceUtil::Time::now(IceUtil::Time::Monotonic) + IceUtil::Time::seconds(_acmTimeout);
+ }
+ return false;
+ }
+
+ _sendStreams.push_back(message);
+ if(!foreground)
+ {
+ _sendStreams.back().adopt(0);
+ }
+ }
+
+ _sendInProgress = true;
+ if(!foreground)
+ {
+ _selectorThread->_register(_transceiver->fd(), this, NeedWrite, _endpoint->timeout());
+ return false; // The selector thread will send the message.
+ }
+ else
+ {
+ return true; // The calling thread must send the message by calling finishSendMessage()
+ }
+}
+
+void
+Ice::ConnectionI::finishSendMessage()
+{
+ try
+ {
+ //
+ // Send the send messages with a blocking write().
+ //
+ send(_endpoint->timeout());
+ }
+ catch(const Ice::LocalException& ex)
+ {
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ setState(StateClosed, ex);
+
+ for(deque<OutgoingMessage>::const_iterator p = _sendStreams.begin(); p != _sendStreams.end(); ++p)
+ {
+ if(p->adopted)
+ {
+ delete p->stream;
+ }
+ }
+ _sendStreams.clear();
+ _sendInProgress = false;
+
+ if(_threadPerConnection)
+ {
+ _transceiver->shutdownReadWrite();
+ }
+ else
+ {
+ registerWithPool();
+ unregisterWithPool(); // Let finished() do the close.
+ }
+
+ notifyAll();
+
+ assert(_exception.get());
+ _exception->ice_throw();
+ }
+
+
+ //
+ // Clear the _sendInProgress flag and notify waiting threads that we're not
+ // sending anymore data.
+ //
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ assert(_sendStreams.empty());
+
+ if(_state == StateClosed)
+ {
+ _sendInProgress = false;
+ if(_threadPerConnection)
+ {
+ _transceiver->shutdownReadWrite();
+ }
+ else
+ {
+ registerWithPool();
+ unregisterWithPool(); // Let finished() do the close.
+ }
+ notifyAll();
+ }
+ else if(_waitingForSend > 0)
+ {
+ _sendInProgress = false;
+ notifyAll();
+ }
+ else if(_queuedStreams.empty())
+ {
+ if(_acmTimeout > 0)
+ {
+ _acmAbsoluteTimeout = IceUtil::Time::now(IceUtil::Time::Monotonic) + IceUtil::Time::seconds(_acmTimeout);
+ }
+ _sendInProgress = false;
+ }
+ else
+ {
+ _selectorThread->_register(_transceiver->fd(), this, NeedWrite, _endpoint->timeout());
+ }
+}
+
+void
+Ice::ConnectionI::finishStart()
+{
+ //
+ // We set _startCallback to null to break potential cyclic reference count
+ // and because the destructor checks for it to ensure that we always invoke
+ // on the callback.
+ //
+
+ StartCallbackPtr callback;
+ {
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ swap(callback, _startCallback);
+ }
+ if(callback)
+ {
+ callback->connectionStartCompleted(this);
+ }
+}
+
+void
+Ice::ConnectionI::finishStart(const Ice::LocalException& ex)
+{
+ //
+ // We set _startCallback to null to break potential cyclic reference count
+ // and because the destructor checks for it to ensure that we always invoke
+ // on the callback.
+ //
+
+ StartCallbackPtr callback;
+ {
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ swap(callback, _startCallback);
+ }
+ if(callback)
+ {
+ callback->connectionStartFailed(this, ex);
+ }
}
void
@@ -2213,7 +2796,7 @@ Ice::ConnectionI::parseMessage(BasicStream& stream, Int& invokeNum, Int& request
{
case closeConnectionMsg:
{
- traceHeader("received close connection", stream, _logger, _traceLevels);
+ traceRecv(stream, _logger, _traceLevels);
if(_endpoint->datagram())
{
if(_warn)
@@ -2233,13 +2816,12 @@ Ice::ConnectionI::parseMessage(BasicStream& stream, Int& invokeNum, Int& request
{
if(_state == StateClosing)
{
- traceRequest("received request during closing\n"
- "(ignored by server, client will retry)",
- stream, _logger, _traceLevels);
+ trace("received request during closing\n(ignored by server, client will retry)", stream, _logger,
+ _traceLevels);
}
else
{
- traceRequest("received request", stream, _logger, _traceLevels);
+ traceRecv(stream, _logger, _traceLevels);
stream.read(requestId);
invokeNum = 1;
servantManager = _servantManager;
@@ -2253,13 +2835,12 @@ Ice::ConnectionI::parseMessage(BasicStream& stream, Int& invokeNum, Int& request
{
if(_state == StateClosing)
{
- traceBatchRequest("received batch request during closing\n"
- "(ignored by server, client will retry)",
- stream, _logger, _traceLevels);
+ trace("received batch request during closing\n(ignored by server, client will retry)", stream,
+ _logger, _traceLevels);
}
else
{
- traceBatchRequest("received batch request", stream, _logger, _traceLevels);
+ traceRecv(stream, _logger, _traceLevels);
stream.read(invokeNum);
if(invokeNum < 0)
{
@@ -2275,12 +2856,12 @@ Ice::ConnectionI::parseMessage(BasicStream& stream, Int& invokeNum, Int& request
case replyMsg:
{
- traceReply("received reply", stream, _logger, _traceLevels);
+ traceRecv(stream, _logger, _traceLevels);
stream.read(requestId);
map<Int, Outgoing*>::iterator p = _requests.end();
- map<Int, AsyncRequest>::iterator q = _asyncRequests.end();
+ map<Int, OutgoingAsyncPtr>::iterator q = _asyncRequests.end();
if(_requestsHint != _requests.end())
{
@@ -2334,7 +2915,7 @@ Ice::ConnectionI::parseMessage(BasicStream& stream, Int& invokeNum, Int& request
{
assert(q != _asyncRequests.end());
- outAsync = q->second.p;
+ outAsync = q->second;
if(q == _asyncRequestsHint)
{
@@ -2352,7 +2933,7 @@ Ice::ConnectionI::parseMessage(BasicStream& stream, Int& invokeNum, Int& request
case validateConnectionMsg:
{
- traceHeader("received validate connection", stream, _logger, _traceLevels);
+ traceRecv(stream, _logger, _traceLevels);
if(_warn)
{
Warning out(_logger);
@@ -2363,9 +2944,7 @@ Ice::ConnectionI::parseMessage(BasicStream& stream, Int& invokeNum, Int& request
default:
{
- traceHeader("received unknown message\n"
- "(invalid, closing connection)",
- stream, _logger, _traceLevels);
+ trace("received unknown message\n(invalid, closing connection)", stream, _logger, _traceLevels);
throw UnknownMessageException(__FILE__, __LINE__);
break;
}
@@ -2448,30 +3027,26 @@ Ice::ConnectionI::invokeAll(BasicStream& stream, Int invokeNum, Int requestId, B
void
Ice::ConnectionI::run()
{
- //
- // For non-datagram connections, the thread-per-connection must
- // validate and activate this connection, and not in the
- // connection factory. Please see the comments in the connection
- // factory for details.
- //
- if(!_endpoint->datagram())
+ try
+ {
+ //
+ // Initialize the connection transceiver and validate the connection using
+ // blocking operations.
+ //
+ SocketStatus status;
+
+ status = initialize();
+ assert(status == Finished);
+
+ status = validate();
+ assert(status == Finished);
+ }
+ catch(const LocalException& ex)
{
- try
- {
- validate();
- }
- catch(const LocalException&)
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
-
- assert(_state == StateClosed);
-
- //
- // We must make sure that nobody is sending when we close
- // the transceiver.
- //
- IceUtil::Mutex::Lock sendSync(_sendMutex);
-
+ setState(StateClosed, ex);
+
if(_transceiver)
{
try
@@ -2482,15 +3057,17 @@ Ice::ConnectionI::run()
{
// Here we ignore any exceptions in close().
}
-
+
_transceiver = 0;
}
notifyAll();
- return;
}
-
- activate();
+
+ finishStart(ex);
+ return;
}
+
+ finishStart();
const bool warnUdp = _instance->initializationData().properties->getPropertyAsInt("Ice.Warn.Datagrams") > 0;
@@ -2615,9 +3192,6 @@ Ice::ConnectionI::run()
OutgoingAsyncPtr outAsync;
auto_ptr<LocalException> localEx;
-
- map<Int, Outgoing*> requests;
- map<Int, AsyncRequest> asyncRequests;
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
@@ -2638,12 +3212,24 @@ Ice::ConnectionI::run()
//
if(_state == StateClosed)
{
+ if(_sendInProgress)
+ {
+ _selectorThread->unregister(_transceiver->fd());
+ }
+
//
- // We must make sure that nobody is sending when we close
- // the transceiver.
+ // Prevent further writes.
//
- IceUtil::Mutex::Lock sendSync(_sendMutex);
-
+ _transceiver->shutdownWrite();
+
+ //
+ // We must make sure that nobody is sending before closing the transceiver.
+ //
+ while(_sendInProgress)
+ {
+ wait();
+ }
+
try
{
_transceiver->close();
@@ -2652,26 +3238,15 @@ Ice::ConnectionI::run()
{
localEx.reset(dynamic_cast<LocalException*>(ex.ice_clone()));
}
-
_transceiver = 0;
notifyAll();
//
- // We cannot simply return here. We have to make sure
- // that all requests (regular and async) are notified
- // about the closed connection below.
+ // We cannot simply return here. We have to make sure that all requests (regular and
+ // async) are notified about the closed connection below.
//
closed = true;
}
-
- if(_state == StateClosed || _state == StateClosing)
- {
- requests.swap(_requests);
- _requestsHint = _requests.end();
-
- asyncRequests.swap(_asyncRequests);
- _asyncRequestsHint = _asyncRequests.end();
- }
}
//
@@ -2690,21 +3265,33 @@ Ice::ConnectionI::run()
//
invokeAll(stream, invokeNum, requestId, compress, servantManager, adapter);
- for(map<Int, Outgoing*>::iterator p = requests.begin(); p != requests.end(); ++p)
- {
- p->second->finished(*_exception.get()); // The exception is immutable at this point.
- }
-
- for(map<Int, AsyncRequest>::iterator q = asyncRequests.begin(); q != asyncRequests.end(); ++q)
+ if(closed)
{
- q->second.p->__finished(*_exception.get()); // The exception is immutable at this point.
- }
+ // Note: the streams must be cleared first because they expect the Outgoing objects to still be valid.
+ for(deque<OutgoingMessage>::iterator o = _queuedStreams.begin(); o != _queuedStreams.end(); ++o)
+ {
+ o->finished(*_exception.get());
+ }
+ _queuedStreams.clear();
+
+ for(map<Int, Outgoing*>::iterator p = _requests.begin(); p != _requests.end(); ++p)
+ {
+ p->second->finished(*_exception.get()); // The exception is immutable at this point.
+ }
+ _requests.clear();
+ for(map<Int, OutgoingAsyncPtr>::iterator q = _asyncRequests.begin(); q != _asyncRequests.end(); ++q)
+ {
+ q->second->__finished(*_exception.get()); // The exception is immutable at this point.
+ }
+ _asyncRequests.clear();
+ }
+
if(localEx.get())
{
assert(closed);
localEx->ice_throw();
- }
+ }
}
}
diff --git a/cpp/src/Ice/ConnectionI.h b/cpp/src/Ice/ConnectionI.h
index 8e712cb3b42..9d7b9cc15af 100644
--- a/cpp/src/Ice/ConnectionI.h
+++ b/cpp/src/Ice/ConnectionI.h
@@ -26,11 +26,16 @@
#include <Ice/TraceLevelsF.h>
#include <Ice/OutgoingAsyncF.h>
#include <Ice/EventHandler.h>
+#include <Ice/SelectorThread.h>
+
+#include <deque>
namespace IceInternal
{
class Outgoing;
+class BatchOutgoing;
+class OutgoingMessageCallback;
}
@@ -39,23 +44,35 @@ namespace Ice
class LocalException;
-class ICE_API ConnectionI : public Connection, public IceInternal::EventHandler,
+class ICE_API ConnectionI : public Connection,
+ public IceInternal::EventHandler,
+ public IceInternal::SocketReadyCallback,
public IceUtil::Monitor<IceUtil::Mutex>
{
public:
- void validate();
+ class StartCallback : virtual public IceUtil::Shared
+ {
+ public:
+
+ virtual void connectionStartCompleted(const ConnectionIPtr&) = 0;
+ virtual void connectionStartFailed(const ConnectionIPtr&, const Ice::LocalException&) = 0;
+ };
+ typedef IceUtil::Handle<StartCallback> StartCallbackPtr;
+
enum DestructionReason
{
ObjectAdapterDeactivated,
CommunicatorDestroyed
};
+
+ void start(const StartCallbackPtr&);
void activate();
void hold();
void destroy(DestructionReason);
virtual void close(bool); // From Connection.
- bool isDestroyed() const;
+ bool isActiveOrHolding() const;
bool isFinished() const;
void throwException() const; // Throws the connection exception if destroyed.
@@ -65,14 +82,18 @@ public:
void monitor();
- void sendRequest(IceInternal::BasicStream*, IceInternal::Outgoing*, bool);
- void sendAsyncRequest(IceInternal::BasicStream*, const IceInternal::OutgoingAsyncPtr&, bool);
+ bool sendRequest(IceInternal::Outgoing*, bool, bool);
+ void sendAsyncRequest(const IceInternal::OutgoingAsyncPtr&, bool, bool);
void prepareBatchRequest(IceInternal::BasicStream*);
void finishBatchRequest(IceInternal::BasicStream*, bool);
void abortBatchRequest();
+
virtual void flushBatchRequests(); // From Connection.
+ bool flushBatchRequests(IceInternal::BatchOutgoing*);
+ void flushAsyncBatchRequests(const IceInternal::BatchOutgoingAsyncPtr&);
+
void sendResponse(IceInternal::BasicStream*, Byte);
void sendNoResponse();
@@ -88,7 +109,7 @@ public:
//
virtual bool datagram() const;
virtual bool readable() const;
- virtual void read(IceInternal::BasicStream&);
+ virtual bool read(IceInternal::BasicStream&);
virtual void message(IceInternal::BasicStream&, const IceInternal::ThreadPoolPtr&);
virtual void finished(const IceInternal::ThreadPoolPtr&);
virtual void exception(const LocalException&);
@@ -97,6 +118,12 @@ public:
virtual Ice::Int timeout() const; // From Connection.
virtual std::string toString() const; // From Connection and EvantHandler.
+ //
+ // Operations from SocketReadyCallback
+ //
+ virtual IceInternal::SocketStatus socketReady(bool);
+ virtual void socketTimeout();
+
// SSL plug-in needs to be able to get the transceiver.
IceInternal::TransceiverPtr getTransceiver() const;
@@ -105,12 +132,13 @@ private:
ConnectionI(const IceInternal::InstancePtr&, const IceInternal::TransceiverPtr&,
const IceInternal::EndpointIPtr&, const ObjectAdapterPtr&, bool, size_t);
virtual ~ConnectionI();
- void start();
+
friend class IceInternal::IncomingConnectionFactory;
friend class IceInternal::OutgoingConnectionFactory;
enum State
{
+ StateNotInitialized,
StateNotValidated,
StateActive,
StateHolding,
@@ -118,13 +146,53 @@ private:
StateClosed
};
- void resetBatch(bool);
- void flushBatchRequestsInternal(bool);
+ bool setState(State, const LocalException&);
+ bool setState(State);
+
+ bool initiateShutdown(bool);
+
+ struct OutgoingMessage
+ {
+ OutgoingMessage()
+ {
+ }
+
+ OutgoingMessage(IceInternal::BasicStream* str, bool comp) :
+ stream(str), out(0), compress(comp), response(false), adopted(false)
+ {
+ }
+
+ OutgoingMessage(IceInternal::OutgoingMessageCallback* o, IceInternal::BasicStream* str, bool comp, bool resp) :
+ stream(str), out(o), compress(comp), response(resp), adopted(false)
+ {
+ }
+
+ OutgoingMessage(const IceInternal::OutgoingAsyncMessageCallbackPtr& o, IceInternal::BasicStream* str,
+ bool comp, bool resp) :
+ stream(str), out(0), outAsync(o), compress(comp), response(resp), adopted(false)
+ {
+ }
+
+ void adopt(IceInternal::BasicStream*);
+ void sent(ConnectionI*, bool);
+ void finished(const Ice::LocalException&);
+
+ IceInternal::BasicStream* stream;
+ IceInternal::OutgoingMessageCallback* out;
+ IceInternal::OutgoingAsyncMessageCallbackPtr outAsync;
+ bool compress;
+ bool response;
+ bool adopted;
+ };
- void setState(State, const LocalException&);
- void setState(State);
+ IceInternal::SocketStatus initialize();
+ IceInternal::SocketStatus validate();
+ bool send(int);
+ bool sendMessage(OutgoingMessage&, bool = false);
+ void finishSendMessage();
- void initiateShutdown() const;
+ void finishStart();
+ void finishStart(const Ice::LocalException&);
void registerWithPool();
void unregisterWithPool();
@@ -171,6 +239,10 @@ private:
int _finishedCount;
const IceInternal::ThreadPoolPtr _threadPool;
+ const IceInternal::SelectorThreadPtr _selectorThread;
+
+ StartCallbackPtr _startCallback;
+
const bool _warn;
const int _acmTimeout;
@@ -183,13 +255,8 @@ private:
std::map<Int, IceInternal::Outgoing*> _requests;
std::map<Int, IceInternal::Outgoing*>::iterator _requestsHint;
- struct AsyncRequest
- {
- IceInternal::OutgoingAsyncPtr p;
- IceUtil::Time t;
- };
- std::map<Int, AsyncRequest> _asyncRequests;
- std::map<Int, AsyncRequest>::iterator _asyncRequestsHint;
+ std::map<Int, IceInternal::OutgoingAsyncPtr> _asyncRequests;
+ std::map<Int, IceInternal::OutgoingAsyncPtr>::iterator _asyncRequestsHint;
std::auto_ptr<LocalException> _exception;
@@ -200,16 +267,15 @@ private:
bool _batchRequestCompress;
size_t _batchMarker;
+ std::deque<OutgoingMessage> _queuedStreams;
+ std::deque<OutgoingMessage> _sendStreams;
+ bool _sendInProgress;
+ int _waitingForSend;
+
int _dispatchCount;
State _state; // The current state.
IceUtil::Time _stateTime; // The last time when the state was changed.
-
- //
- // We have a separate mutex for sending, so that we don't block
- // the whole connection when we do a blocking send.
- //
- IceUtil::Mutex _sendMutex;
};
}
diff --git a/cpp/src/Ice/ConnectionMonitor.cpp b/cpp/src/Ice/ConnectionMonitor.cpp
index cf4104e805d..a462251679b 100644
--- a/cpp/src/Ice/ConnectionMonitor.cpp
+++ b/cpp/src/Ice/ConnectionMonitor.cpp
@@ -69,7 +69,7 @@ IceInternal::ConnectionMonitor::~ConnectionMonitor()
}
void
-IceInternal::ConnectionMonitor::run()
+IceInternal::ConnectionMonitor::runTimerTask()
{
set<ConnectionIPtr> connections;
diff --git a/cpp/src/Ice/ConnectionMonitor.h b/cpp/src/Ice/ConnectionMonitor.h
index bfd7954dc4c..63f4be8457e 100644
--- a/cpp/src/Ice/ConnectionMonitor.h
+++ b/cpp/src/Ice/ConnectionMonitor.h
@@ -36,7 +36,7 @@ private:
virtual ~ConnectionMonitor();
friend class Instance;
- virtual void run();
+ virtual void runTimerTask();
InstancePtr _instance;
std::set<Ice::ConnectionIPtr> _connections;
diff --git a/cpp/src/Ice/ConnectionRequestHandler.cpp b/cpp/src/Ice/ConnectionRequestHandler.cpp
new file mode 100644
index 00000000000..dffab29e69b
--- /dev/null
+++ b/cpp/src/Ice/ConnectionRequestHandler.cpp
@@ -0,0 +1,107 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2007 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 <Ice/ConnectionRequestHandler.h>
+#include <Ice/Proxy.h>
+#include <Ice/Reference.h>
+#include <Ice/ConnectionI.h>
+#include <Ice/RouterInfo.h>
+#include <Ice/Outgoing.h>
+#include <Ice/OutgoingAsync.h>
+
+using namespace std;
+using namespace IceInternal;
+
+ConnectionRequestHandler::ConnectionRequestHandler(const ReferencePtr& reference, const Ice::ObjectPrx& proxy) :
+ RequestHandler(reference),
+ _response(reference->getMode() == Reference::ModeTwoway)
+{
+ _connection = _reference->getConnection(_compress);
+ RouterInfoPtr ri = reference->getRouterInfo();
+ if(ri)
+ {
+ ri->addProxy(proxy);
+ }
+}
+
+ConnectionRequestHandler::ConnectionRequestHandler(const ReferencePtr& reference,
+ const Ice::ConnectionIPtr& connection,
+ bool compress) :
+ RequestHandler(reference),
+ _response(reference->getMode() == Reference::ModeTwoway),
+ _connection(connection),
+ _compress(compress)
+{
+}
+
+void
+ConnectionRequestHandler::prepareBatchRequest(BasicStream* out)
+{
+ _connection->prepareBatchRequest(out);
+}
+
+void
+ConnectionRequestHandler::finishBatchRequest(BasicStream* out)
+{
+ _connection->finishBatchRequest(out, _compress);
+}
+
+void
+ConnectionRequestHandler::abortBatchRequest()
+{
+ _connection->abortBatchRequest();
+}
+
+Ice::ConnectionI*
+ConnectionRequestHandler::sendRequest(Outgoing* out)
+{
+ return (!_connection->sendRequest(out, _compress, _response) || _response) ? _connection.get() : 0;
+}
+
+void
+ConnectionRequestHandler::sendAsyncRequest(const OutgoingAsyncPtr& out)
+{
+ try
+ {
+ _connection->sendAsyncRequest(out, _compress, _response);
+ }
+ catch(const LocalExceptionWrapper& ex)
+ {
+ out->__finished(ex);
+ }
+ catch(const Ice::LocalException& ex)
+ {
+ out->__finished(ex);
+ }
+}
+
+bool
+ConnectionRequestHandler::flushBatchRequests(BatchOutgoing* out)
+{
+ return _connection->flushBatchRequests(out);
+}
+
+void
+ConnectionRequestHandler::flushAsyncBatchRequests(const BatchOutgoingAsyncPtr& out)
+{
+ try
+ {
+ _connection->flushAsyncBatchRequests(out);
+ }
+ catch(const Ice::LocalException& ex)
+ {
+ out->__finished(ex);
+ }
+}
+
+Ice::ConnectionIPtr
+ConnectionRequestHandler::getConnection(bool wait)
+{
+ return _connection;
+}
diff --git a/cpp/src/Ice/ConnectionRequestHandler.h b/cpp/src/Ice/ConnectionRequestHandler.h
new file mode 100644
index 00000000000..785cda3b5b6
--- /dev/null
+++ b/cpp/src/Ice/ConnectionRequestHandler.h
@@ -0,0 +1,48 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2007 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 ICE_CONNECTION_REQUEST_HANDLER_H
+#define ICE_CONNECTION_REQUEST_HANDLER_H
+
+#include <Ice/RequestHandler.h>
+#include <Ice/ReferenceF.h>
+#include <Ice/ProxyF.h>
+
+namespace IceInternal
+{
+
+class ConnectionRequestHandler : public RequestHandler
+{
+public:
+
+ ConnectionRequestHandler(const ReferencePtr&, const Ice::ObjectPrx&);
+ ConnectionRequestHandler(const ReferencePtr&, const Ice::ConnectionIPtr&, bool);
+
+ virtual void prepareBatchRequest(BasicStream*);
+ virtual void finishBatchRequest(BasicStream*);
+ virtual void abortBatchRequest();
+
+ virtual Ice::ConnectionI* sendRequest(Outgoing*);
+ virtual void sendAsyncRequest(const OutgoingAsyncPtr&);
+
+ virtual bool flushBatchRequests(BatchOutgoing*);
+ virtual void flushAsyncBatchRequests(const BatchOutgoingAsyncPtr&);
+
+ virtual Ice::ConnectionIPtr getConnection(bool);
+
+private:
+
+ const bool _response;
+ Ice::ConnectionIPtr _connection;
+ bool _compress;
+};
+
+}
+
+#endif
diff --git a/cpp/src/Ice/Connector.h b/cpp/src/Ice/Connector.h
index 347997afbce..825afa86383 100644
--- a/cpp/src/Ice/Connector.h
+++ b/cpp/src/Ice/Connector.h
@@ -14,6 +14,12 @@
#include <Ice/ConnectorF.h>
#include <Ice/TransceiverF.h>
+#ifdef _WIN32
+# include <winsock2.h>
+#else
+# define SOCKET int
+#endif
+
namespace IceInternal
{
@@ -22,6 +28,7 @@ class ICE_API Connector : public ::IceUtil::Shared
public:
virtual TransceiverPtr connect(int) = 0;
+
virtual Ice::Short type() const = 0;
virtual std::string toString() const = 0;
diff --git a/cpp/src/Ice/EndpointFactoryManager.cpp b/cpp/src/Ice/EndpointFactoryManager.cpp
index a2a7900c26d..9b1a126a1d6 100644
--- a/cpp/src/Ice/EndpointFactoryManager.cpp
+++ b/cpp/src/Ice/EndpointFactoryManager.cpp
@@ -66,8 +66,6 @@ IceInternal::EndpointFactoryManager::get(Short type) const
EndpointIPtr
IceInternal::EndpointFactoryManager::create(const string& str, bool oaEndpoint) const
{
- IceUtil::Mutex::Lock sync(*this); // TODO: Necessary?
-
const string delim = " \t\n\r";
string::size_type beg = str.find_first_not_of(delim);
@@ -91,30 +89,40 @@ IceInternal::EndpointFactoryManager::create(const string& str, bool oaEndpoint)
protocol = _instance->defaultsAndOverrides()->defaultProtocol;
}
- //
- // TODO: Optimize with a map?
- //
- for(vector<EndpointFactoryPtr>::size_type i = 0; i < _factories.size(); i++)
+ EndpointFactoryPtr factory;
{
- if(_factories[i]->protocol() == protocol)
+ IceUtil::Mutex::Lock sync(*this); // TODO: Necessary?
+
+ //
+ // TODO: Optimize with a map?
+ //
+ for(vector<EndpointFactoryPtr>::size_type i = 0; i < _factories.size(); i++)
{
+ if(_factories[i]->protocol() == protocol)
+ {
+ factory = _factories[i];
+ }
+ }
+ }
+
+ if(factory)
+ {
#if 1
- return _factories[i]->create(str.substr(end), oaEndpoint);
+ return factory->create(str.substr(end), oaEndpoint);
#else
- // Code below left in place for debugging.
-
- EndpointIPtr e = _factories[i]->create(str.substr(end), oaEndpoint);
- BasicStream bs(_instance.get());
- e->streamWrite(&bs);
- bs.i = bs.b.begin();
- short type;
- bs.read(type);
- EndpointIPtr ue = new IceInternal::UnknownEndpointI(type, &bs);
- cerr << "Normal: " << e->toString() << endl;
- cerr << "Opaque: " << ue->toString() << endl;
- return e;
+ // Code below left in place for debugging.
+
+ EndpointIPtr e = factory->create(str.substr(end), oaEndpoint);
+ BasicStream bs(_instance.get());
+ e->streamWrite(&bs);
+ bs.i = bs.b.begin();
+ short type;
+ bs.read(type);
+ EndpointIPtr ue = new IceInternal::UnknownEndpointI(type, &bs);
+ cerr << "Normal: " << e->toString() << endl;
+ cerr << "Opaque: " << ue->toString() << endl;
+ return e;
#endif
- }
}
//
@@ -124,22 +132,20 @@ IceInternal::EndpointFactoryManager::create(const string& str, bool oaEndpoint)
if(protocol == "opaque")
{
EndpointIPtr ue = new UnknownEndpointI(str.substr(end));
- for(vector<EndpointFactoryPtr>::size_type i = 0; i < _factories.size(); i++)
+ factory = get(ue->type());
+ if(factory)
{
- if(_factories[i]->type() == ue->type())
- {
- //
- // Make a temporary stream, write the opaque endpoint data into the stream,
- // and ask the factory to read the endpoint data from that stream to create
- // the actual endpoint.
- //
- BasicStream bs(_instance.get());
- ue->streamWrite(&bs);
- bs.i = bs.b.begin();
- short type;
- bs.read(type);
- return _factories[i]->read(&bs);
- }
+ //
+ // Make a temporary stream, write the opaque endpoint data into the stream,
+ // and ask the factory to read the endpoint data from that stream to create
+ // the actual endpoint.
+ //
+ BasicStream bs(_instance.get());
+ ue->streamWrite(&bs);
+ bs.i = bs.b.begin();
+ short type;
+ bs.read(type);
+ return factory->read(&bs);
}
return ue; // Endpoint is opaque, but we don't have a factory for its type.
}
@@ -150,20 +156,13 @@ IceInternal::EndpointFactoryManager::create(const string& str, bool oaEndpoint)
EndpointIPtr
IceInternal::EndpointFactoryManager::read(BasicStream* s) const
{
- IceUtil::Mutex::Lock sync(*this); // TODO: Necessary?
-
Short type;
s->read(type);
- //
- // TODO: Optimize with a map?
- //
- for(vector<EndpointFactoryPtr>::size_type i = 0; i < _factories.size(); i++)
+ EndpointFactoryPtr factory = get(type);
+ if(factory)
{
- if(_factories[i]->type() == type)
- {
- return _factories[i]->read(s);
- }
+ return factory->read(s);
}
return new UnknownEndpointI(type, s);
diff --git a/cpp/src/Ice/EndpointI.cpp b/cpp/src/Ice/EndpointI.cpp
index 45f88a6cde8..f3505005f28 100644
--- a/cpp/src/Ice/EndpointI.cpp
+++ b/cpp/src/Ice/EndpointI.cpp
@@ -8,7 +8,110 @@
// **********************************************************************
#include <Ice/EndpointI.h>
+#include <Ice/Instance.h>
+#include <Ice/LocalException.h>
+#include <Ice/Network.h>
-using namespace Ice;
+using namespace std;
+using namespace IceInternal;
Ice::LocalObject* IceInternal::upCast(EndpointI* p) { return p; }
+IceUtil::Shared* IceInternal::upCast(EndpointHostResolver* p) { return p; }
+
+vector<ConnectorPtr>
+IceInternal::EndpointI::connectors(const vector<struct sockaddr_in>& addrs) const
+{
+ //
+ // This method must be extended by endpoints which use the EndpointHostResolver to create
+ // connectors from IP addresses.
+ //
+ assert(false);
+ return vector<ConnectorPtr>();
+}
+
+IceInternal::EndpointHostResolver::EndpointHostResolver(const InstancePtr& instance) :
+ _instance(instance),
+ _destroyed(false)
+{
+ start();
+}
+
+void
+IceInternal::EndpointHostResolver::resolve(const string& host, int port, const EndpointIPtr& endpoint,
+ const EndpointI_connectorsPtr& callback)
+{
+ //
+ // Try to get the addresses without DNS lookup. If this doesn't work, we queue a resolve
+ // entry and the thread will take care of getting the endpoint addresses.
+ //
+ vector<struct sockaddr_in> addrs = getAddresses(host, port, false);
+ if(!addrs.empty())
+ {
+ callback->connectors(endpoint->connectors(addrs));
+ return;
+ }
+
+ Lock sync(*this);
+ assert(!_destroyed);
+
+ ResolveEntry entry;
+ entry.host = host;
+ entry.port = port;
+ entry.endpoint = endpoint;
+ entry.callback = callback;
+ _queue.push_back(entry);
+ notify();
+}
+
+void
+IceInternal::EndpointHostResolver::destroy()
+{
+ Lock sync(*this);
+ assert(!_destroyed);
+ _destroyed = true;
+ notify();
+}
+
+void
+IceInternal::EndpointHostResolver::run()
+{
+ if(_instance->initializationData().threadHook)
+ {
+ _instance->initializationData().threadHook->start();
+ }
+
+ while(true)
+ {
+ ResolveEntry resolve;
+
+ {
+ Lock sync(*this);
+
+ while(!_destroyed && _queue.empty())
+ {
+ wait();
+ }
+
+ if(_destroyed)
+ {
+ break;
+ }
+
+ resolve = _queue.front();
+ _queue.pop_front();
+ }
+
+ resolve.callback->connectors(resolve.endpoint->connectors(getAddresses(resolve.host, resolve.port)));
+ }
+
+ for(deque<ResolveEntry>::const_iterator p = _queue.begin(); p != _queue.end(); ++p)
+ {
+ p->callback->exception(Ice::CommunicatorDestroyedException(__FILE__, __LINE__));
+ }
+ _queue.clear();
+
+ if(_instance->initializationData().threadHook)
+ {
+ _instance->initializationData().threadHook->stop();
+ }
+}
diff --git a/cpp/src/Ice/EndpointI.h b/cpp/src/Ice/EndpointI.h
index 9470d0e4468..1d5eff2df76 100644
--- a/cpp/src/Ice/EndpointI.h
+++ b/cpp/src/Ice/EndpointI.h
@@ -11,6 +11,8 @@
#define ICE_ENDPOINT_I_H
#include <IceUtil/Shared.h>
+#include <IceUtil/Thread.h>
+#include <IceUtil/Monitor.h>
#include <Ice/Endpoint.h>
#include <Ice/EndpointIF.h>
#include <Ice/InstanceF.h>
@@ -18,11 +20,30 @@
#include <Ice/ConnectorF.h>
#include <Ice/AcceptorF.h>
+#ifdef _WIN32
+# include <winsock2.h>
+#else
+# include <netinet/in.h> // For struct sockaddr_in
+#endif
+
+#include <deque>
+
namespace IceInternal
{
class BasicStream;
+class ICE_API EndpointI_connectors : public virtual IceUtil::Shared
+{
+public:
+
+ virtual ~EndpointI_connectors() { }
+
+ virtual void connectors(const std::vector<ConnectorPtr>&) = 0;
+ virtual void exception(const Ice::LocalException&) = 0;
+};
+typedef IceUtil::Handle<EndpointI_connectors> EndpointI_connectorsPtr;
+
class ICE_API EndpointI : public Ice::Endpoint
{
public:
@@ -97,6 +118,7 @@ public:
// connector is available.
//
virtual std::vector<ConnectorPtr> connectors() const = 0;
+ virtual void connectors_async(const EndpointI_connectorsPtr&) const = 0;
//
// Return an acceptor for this endpoint, or null if no acceptors
@@ -114,9 +136,9 @@ public:
virtual std::vector<EndpointIPtr> expand() const = 0;
//
- // Check whether the endpoint is equivalent to a specific Connector.
+ // Check whether the endpoint is equivalent to another one.
//
- virtual bool equivalent(const ConnectorPtr&) const = 0;
+ virtual bool equivalent(const EndpointIPtr&) const = 0;
//
// Compare endpoints for sorting purposes.
@@ -127,6 +149,9 @@ public:
private:
+ virtual std::vector<ConnectorPtr> connectors(const std::vector<struct sockaddr_in>&) const;
+ friend class EndpointHostResolver;
+
#if defined(__SUNPRO_CC) || defined(__HP_aCC)
//
// COMPILERFIX: prevent the compiler from emitting a warning about
@@ -137,6 +162,32 @@ private:
#endif
};
+class ICE_API EndpointHostResolver : public IceUtil::Thread, public IceUtil::Monitor<IceUtil::Mutex>
+{
+public:
+
+ EndpointHostResolver(const InstancePtr&);
+
+ void resolve(const std::string&, int, const EndpointIPtr&, const EndpointI_connectorsPtr&);
+ void destroy();
+
+ virtual void run();
+
+private:
+
+ struct ResolveEntry
+ {
+ std::string host;
+ int port;
+ EndpointIPtr endpoint;
+ EndpointI_connectorsPtr callback;
+ };
+
+ const InstancePtr _instance;
+ bool _destroyed;
+ std::deque<ResolveEntry> _queue;
+};
+
}
#endif
diff --git a/cpp/src/Ice/EventHandler.cpp b/cpp/src/Ice/EventHandler.cpp
index 6a92e51788d..c14576855b8 100644
--- a/cpp/src/Ice/EventHandler.cpp
+++ b/cpp/src/Ice/EventHandler.cpp
@@ -15,6 +15,7 @@ using namespace Ice;
using namespace IceInternal;
IceUtil::Shared* IceInternal::upCast(EventHandler* p) { return p; }
+IceUtil::Shared* IceInternal::upCast(ThreadPoolWorkItem* p) { return p; }
InstancePtr
IceInternal::EventHandler::instance() const
diff --git a/cpp/src/Ice/EventHandler.h b/cpp/src/Ice/EventHandler.h
index 03c34bc3fe0..88111ce545b 100644
--- a/cpp/src/Ice/EventHandler.h
+++ b/cpp/src/Ice/EventHandler.h
@@ -46,7 +46,7 @@ public:
// Read data via the event handler. May only be called if
// readable() returns true.
//
- virtual void read(BasicStream&) = 0;
+ virtual bool read(BasicStream&) = 0;
//
// A complete message has been received.
@@ -77,15 +77,21 @@ protected:
const InstancePtr _instance;
-private:
-
//
- // The _stream data member is for use by ThreadPool only
+ // The _stream data member is for use by ThreadPool or by the
+ // connection for connection validation only.
//
BasicStream _stream;
friend class ThreadPool;
};
+class ThreadPoolWorkItem : virtual public IceUtil::Shared
+{
+public:
+
+ virtual void execute(const ThreadPoolPtr&) = 0;
+};
+
}
#endif
diff --git a/cpp/src/Ice/EventHandlerF.h b/cpp/src/Ice/EventHandlerF.h
index 576fbaac575..d15b1ff96da 100644
--- a/cpp/src/Ice/EventHandlerF.h
+++ b/cpp/src/Ice/EventHandlerF.h
@@ -21,6 +21,10 @@ class EventHandler;
IceUtil::Shared* upCast(EventHandler*);
typedef Handle<EventHandler> EventHandlerPtr;
+class ThreadPoolWorkItem;
+IceUtil::Shared* upCast(ThreadPoolWorkItem*);
+typedef Handle<ThreadPoolWorkItem> ThreadPoolWorkItemPtr;
+
}
#endif
diff --git a/cpp/src/Ice/Instance.cpp b/cpp/src/Ice/Instance.cpp
index ef5a4b2f167..9349990bb63 100644
--- a/cpp/src/Ice/Instance.cpp
+++ b/cpp/src/Ice/Instance.cpp
@@ -18,6 +18,7 @@
#include <Ice/ReferenceFactory.h>
#include <Ice/ProxyFactory.h>
#include <Ice/ThreadPool.h>
+#include <Ice/SelectorThread.h>
#include <Ice/ConnectionFactory.h>
#include <Ice/ConnectionMonitor.h>
#include <Ice/ObjectFactoryManager.h>
@@ -235,6 +236,42 @@ IceInternal::Instance::serverThreadPool()
return _serverThreadPool;
}
+SelectorThreadPtr
+IceInternal::Instance::selectorThread()
+{
+ IceUtil::RecMutex::Lock sync(*this);
+
+ if(_state == StateDestroyed)
+ {
+ throw CommunicatorDestroyedException(__FILE__, __LINE__);
+ }
+
+ if(!_selectorThread) // Lazy initialization.
+ {
+ _selectorThread = new SelectorThread(this);
+ }
+
+ return _selectorThread;
+}
+
+EndpointHostResolverPtr
+IceInternal::Instance::endpointHostResolver()
+{
+ IceUtil::RecMutex::Lock sync(*this);
+
+ if(_state == StateDestroyed)
+ {
+ throw CommunicatorDestroyedException(__FILE__, __LINE__);
+ }
+
+ if(!_endpointHostResolver) // Lazy initialization.
+ {
+ _endpointHostResolver = new EndpointHostResolver(this);
+ }
+
+ return _endpointHostResolver;
+}
+
IceUtil::TimerPtr
IceInternal::Instance::timer()
{
@@ -914,6 +951,8 @@ IceInternal::Instance::~Instance()
assert(!_objectAdapterFactory);
assert(!_clientThreadPool);
assert(!_serverThreadPool);
+ assert(!_selectorThread);
+ assert(!_endpointHostResolver);
assert(!_timer);
assert(!_routerManager);
assert(!_locatorManager);
@@ -1077,6 +1116,8 @@ IceInternal::Instance::destroy()
ThreadPoolPtr serverThreadPool;
ThreadPoolPtr clientThreadPool;
+ SelectorThreadPtr selectorThread;
+ EndpointHostResolverPtr endpointHostResolver;
{
IceUtil::RecMutex::Lock sync(*this);
@@ -1102,6 +1143,18 @@ IceInternal::Instance::destroy()
std::swap(_clientThreadPool, clientThreadPool);
}
+ if(_selectorThread)
+ {
+ _selectorThread->destroy();
+ std::swap(selectorThread, _selectorThread);
+ }
+
+ if(_endpointHostResolver)
+ {
+ _endpointHostResolver->destroy();
+ std::swap(endpointHostResolver, _endpointHostResolver);
+ }
+
if(_timer)
{
_timer->destroy();
@@ -1169,6 +1222,14 @@ IceInternal::Instance::destroy()
{
serverThreadPool->joinWithAllThreads();
}
+ if(selectorThread)
+ {
+ selectorThread->joinWithThread();
+ }
+ if(endpointHostResolver)
+ {
+ endpointHostResolver->getThreadControl().join();
+ }
if(_initData.properties->getPropertyAsInt("Ice.Warn.UnusedProperties") > 0)
{
diff --git a/cpp/src/Ice/Instance.h b/cpp/src/Ice/Instance.h
index f3aa41fb58e..cbf6ad36ecf 100644
--- a/cpp/src/Ice/Instance.h
+++ b/cpp/src/Ice/Instance.h
@@ -24,6 +24,7 @@
#include <Ice/ReferenceFactoryF.h>
#include <Ice/ProxyFactoryF.h>
#include <Ice/ThreadPoolF.h>
+#include <Ice/SelectorThreadF.h>
#include <Ice/ConnectionFactoryF.h>
#include <Ice/ConnectionMonitorF.h>
#include <Ice/ObjectFactoryManagerF.h>
@@ -67,6 +68,8 @@ public:
ObjectAdapterFactoryPtr objectAdapterFactory() const;
ThreadPoolPtr clientThreadPool();
ThreadPoolPtr serverThreadPool();
+ SelectorThreadPtr selectorThread();
+ EndpointHostResolverPtr endpointHostResolver();
IceUtil::TimerPtr timer();
bool threadPerConnection() const;
size_t threadPerConnectionStackSize() const;
@@ -122,6 +125,8 @@ private:
ObjectAdapterFactoryPtr _objectAdapterFactory;
ThreadPoolPtr _clientThreadPool;
ThreadPoolPtr _serverThreadPool;
+ SelectorThreadPtr _selectorThread;
+ EndpointHostResolverPtr _endpointHostResolver;
IceUtil::TimerPtr _timer;
const bool _threadPerConnection;
const size_t _threadPerConnectionStackSize;
diff --git a/cpp/src/Ice/LocatorInfo.cpp b/cpp/src/Ice/LocatorInfo.cpp
index 606d7557fdd..f14561fef20 100644
--- a/cpp/src/Ice/LocatorInfo.cpp
+++ b/cpp/src/Ice/LocatorInfo.cpp
@@ -375,92 +375,149 @@ IceInternal::LocatorInfo::getEndpoints(const IndirectReferencePtr& ref, int ttl,
cached = objectCached || endpointsCached;
}
}
- catch(const AdapterNotFoundException&)
+ catch(const Ice::Exception& ex)
{
- if(ref->getInstance()->traceLevels()->location >= 1)
- {
- Trace out(ref->getInstance()->initializationData().logger,
- ref->getInstance()->traceLevels()->locationCat);
- out << "adapter not found" << "\n";
- out << "adapter = " << ref->getAdapterId();
- }
-
- NotRegisteredException ex(__FILE__, __LINE__);
- ex.kindOfObject = "object adapter";
- ex.id = ref->getAdapterId();
- throw ex;
+ getEndpointsException(ref, ex);
}
- catch(const ObjectNotFoundException&)
- {
- if(ref->getInstance()->traceLevels()->location >= 1)
- {
- Trace out(ref->getInstance()->initializationData().logger,
- ref->getInstance()->traceLevels()->locationCat);
- out << "object not found" << "\n";
- out << "object = " << ref->getInstance()->identityToString(ref->getIdentity());
- }
- NotRegisteredException ex(__FILE__, __LINE__);
- ex.kindOfObject = "object";
- ex.id = ref->getInstance()->identityToString(ref->getIdentity());
- throw ex;
- }
- catch(const NotRegisteredException&)
+ if(ref->getInstance()->traceLevels()->location >= 1)
{
- throw;
+ getEndpointsTrace(ref, endpoints, cached);
}
- catch(const LocalException& ex)
+
+ return endpoints;
+}
+
+void
+IceInternal::LocatorInfo::getEndpoints(const IndirectReferencePtr& ref, int ttl,
+ const GetEndpointsCallbackPtr& callback)
+{
+ string adapterId = ref->getAdapterId();
+ Ice::Identity identity = ref->getIdentity();
+ InstancePtr instance = ref->getInstance();
+ if(!adapterId.empty())
{
- if(ref->getInstance()->traceLevels()->location >= 1)
+ vector<EndpointIPtr> endpoints;
+ if(!_table->getAdapterEndpoints(adapterId, ttl, endpoints))
{
- Trace out(ref->getInstance()->initializationData().logger,
- ref->getInstance()->traceLevels()->locationCat);
- out << "couldn't contact the locator to retrieve adapter endpoints\n";
- if(ref->getAdapterId().empty())
+ if(instance->traceLevels()->location >= 1)
{
- out << "object = " << ref->getInstance()->identityToString(ref->getIdentity()) << "\n";
+ Trace out(instance->initializationData().logger, instance->traceLevels()->locationCat);
+ out << "searching for adapter by id" << "\nadapter = " << adapterId;
}
- else
+
+ class Callback : public AMI_Locator_findAdapterById
{
- out << "adapter = " << ref->getAdapterId() << "\n";
+ public:
+
+ virtual void
+ ice_response(const Ice::ObjectPrx& object)
+ {
+ vector<EndpointIPtr> endpoints;
+ if(object)
+ {
+ endpoints = object->__reference()->getEndpoints();
+ if(!endpoints.empty())
+ {
+ _table->addAdapterEndpoints(_reference->getAdapterId(), endpoints);
+ }
+ }
+
+ if(_reference->getInstance()->traceLevels()->location >= 1)
+ {
+ _locatorInfo->getEndpointsTrace(_reference, endpoints, false);
+ }
+
+ _callback->setEndpoints(endpoints, false);
+ }
+
+ virtual void
+ ice_exception(const Ice::Exception& ex)
+ {
+ _locatorInfo->getEndpointsException(_reference, ex, _callback);
+ }
+
+ Callback(const LocatorInfoPtr& locatorInfo, const LocatorTablePtr& table,
+ const IndirectReferencePtr& reference, const GetEndpointsCallbackPtr& callback) :
+ _locatorInfo(locatorInfo), _table(table), _reference(reference), _callback(callback)
+ {
+ }
+
+ private:
+
+ const LocatorInfoPtr _locatorInfo;
+ const LocatorTablePtr _table;
+ const IndirectReferencePtr _reference;
+ const GetEndpointsCallbackPtr _callback;
+ };
+
+ //
+ // Search the adapter in the location service if we didn't
+ // find it in the cache.
+ //
+ _locator->findAdapterById_async(new Callback(this, _table, ref, callback), adapterId);
+ return;
+ }
+ else
+ {
+ if(instance->traceLevels()->location >= 1)
+ {
+ getEndpointsTrace(ref, endpoints, true);
}
- out << "reason = " << ex;
+ callback->setEndpoints(endpoints, true);
+ return;
}
- throw;
}
-
-
- if(ref->getInstance()->traceLevels()->location >= 1)
+ else
{
- if(!endpoints.empty())
+ Ice::ObjectPrx object;
+ if(!_table->getProxy(identity, ttl, object))
{
- if(cached)
+ if(instance->traceLevels()->location >= 1)
{
- trace("found endpoints in locator table", ref, endpoints);
+ Trace out(instance->initializationData().logger, instance->traceLevels()->locationCat);
+ out << "searching for object by id" << "\nobject = " << instance->identityToString(ref->getIdentity());
}
- else
+
+ class Callback : public Ice::AMI_Locator_findObjectById
{
- trace("retrieved endpoints from locator, adding to locator table", ref, endpoints);
- }
+ public:
+
+ virtual void
+ ice_response(const Ice::ObjectPrx& object)
+ {
+ _locatorInfo->getWellKnownObjectEndpoints(_reference, object, _ttl, false, _callback);
+ }
+
+ virtual void
+ ice_exception(const Ice::Exception& ex)
+ {
+ _locatorInfo->getEndpointsException(_reference, ex, _callback);
+ }
+
+ Callback(const LocatorInfoPtr& locatorInfo, const IndirectReferencePtr& reference, int ttl,
+ const GetEndpointsCallbackPtr& callback) :
+ _locatorInfo(locatorInfo), _reference(reference), _ttl(ttl), _callback(callback)
+ {
+ }
+
+ private:
+
+ const LocatorInfoPtr _locatorInfo;
+ const IndirectReferencePtr _reference;
+ int _ttl;
+ const GetEndpointsCallbackPtr _callback;
+ };
+
+ _locator->findObjectById_async(new Callback(this, ref, ttl, callback), identity);
+ return;
}
else
{
- Trace out(ref->getInstance()->initializationData().logger, ref->getInstance()->traceLevels()->locationCat);
- out << "no endpoints configured for ";
- if(ref->getAdapterId().empty())
- {
- out << "object\n";
- out << "object = " << ref->getInstance()->identityToString(ref->getIdentity());
- }
- else
- {
- out << "adapter\n";
- out << "adapter = " << ref->getAdapterId();
- }
+ getWellKnownObjectEndpoints(ref, object, ttl, true, callback);
+ return;
}
}
-
- return endpoints;
}
void
@@ -548,3 +605,195 @@ IceInternal::LocatorInfo::trace(const string& msg,
Ice::constMemFun(&Endpoint::toString));
out << "endpoints = " << o.str();
}
+
+void
+IceInternal::LocatorInfo::getEndpointsException(const IndirectReferencePtr& ref, const Ice::Exception& exc)
+{
+ try
+ {
+ exc.ice_throw();
+ }
+ catch(const AdapterNotFoundException&)
+ {
+ if(ref->getInstance()->traceLevels()->location >= 1)
+ {
+ Trace out(ref->getInstance()->initializationData().logger,
+ ref->getInstance()->traceLevels()->locationCat);
+ out << "adapter not found" << "\n";
+ out << "adapter = " << ref->getAdapterId();
+ }
+
+ NotRegisteredException ex(__FILE__, __LINE__);
+ ex.kindOfObject = "object adapter";
+ ex.id = ref->getAdapterId();
+ throw ex;
+ }
+ catch(const ObjectNotFoundException&)
+ {
+ if(ref->getInstance()->traceLevels()->location >= 1)
+ {
+ Trace out(ref->getInstance()->initializationData().logger,
+ ref->getInstance()->traceLevels()->locationCat);
+ out << "object not found" << "\n";
+ out << "object = " << ref->getInstance()->identityToString(ref->getIdentity());
+ }
+
+ NotRegisteredException ex(__FILE__, __LINE__);
+ ex.kindOfObject = "object";
+ ex.id = ref->getInstance()->identityToString(ref->getIdentity());
+ throw ex;
+ }
+ catch(const NotRegisteredException&)
+ {
+ throw;
+ }
+ catch(const LocalException& ex)
+ {
+ if(ref->getInstance()->traceLevels()->location >= 1)
+ {
+ Trace out(ref->getInstance()->initializationData().logger,
+ ref->getInstance()->traceLevels()->locationCat);
+ out << "couldn't contact the locator to retrieve adapter endpoints\n";
+ if(ref->getAdapterId().empty())
+ {
+ out << "object = " << ref->getInstance()->identityToString(ref->getIdentity()) << "\n";
+ }
+ else
+ {
+ out << "adapter = " << ref->getAdapterId() << "\n";
+ }
+ out << "reason = " << ex;
+ }
+ throw;
+ }
+}
+
+void
+IceInternal::LocatorInfo::getEndpointsException(const IndirectReferencePtr& ref, const Ice::Exception& exc,
+ const GetEndpointsCallbackPtr& callback)
+{
+ try
+ {
+ getEndpointsException(ref, exc);
+ }
+ catch(const Ice::LocalException& ex)
+ {
+ callback->setException(ex);
+ }
+}
+
+void
+IceInternal::LocatorInfo::getWellKnownObjectEndpoints(const IndirectReferencePtr& ref,
+ const Ice::ObjectPrx& object,
+ int ttl,
+ bool objectCached,
+ const GetEndpointsCallbackPtr& callback)
+{
+ class Callback : public GetEndpointsCallback
+ {
+ public:
+
+ virtual void
+ setEndpoints(const vector<EndpointIPtr>& endpoints, bool endpointsCached)
+ {
+ if(!_objectCached && !endpoints.empty())
+ {
+ _table->addProxy(_reference->getIdentity(), _object);
+ }
+
+ if(_reference->getInstance()->traceLevels()->location >= 1)
+ {
+ _locatorInfo->getEndpointsTrace(_reference, endpoints, _objectCached || endpointsCached);
+ }
+
+ _callback->setEndpoints(endpoints, _objectCached || endpointsCached);
+ }
+
+ virtual void
+ setException(const Ice::LocalException& ex)
+ {
+ _callback->setException(ex);
+ }
+
+ Callback(const LocatorInfoPtr& locatorInfo, const LocatorTablePtr& table,
+ const IndirectReferencePtr& reference, const Ice::ObjectPrx& object,
+ bool objectCached, const GetEndpointsCallbackPtr& callback) :
+ _locatorInfo(locatorInfo), _table(table), _reference(reference), _object(object),
+ _objectCached(objectCached), _callback(callback)
+ {
+ }
+
+ private:
+
+ const LocatorInfoPtr _locatorInfo;
+ const LocatorTablePtr _table;
+ const IndirectReferencePtr _reference;
+ const Ice::ObjectPrx _object;
+ const bool _objectCached;
+ const GetEndpointsCallbackPtr _callback;
+ };
+
+ vector<EndpointIPtr> endpoints;
+ if(object)
+ {
+ DirectReferencePtr odr = DirectReferencePtr::dynamicCast(object->__reference());
+ if(odr)
+ {
+ endpoints = odr->getEndpoints();
+ }
+ else
+ {
+ IndirectReferencePtr oir = IndirectReferencePtr::dynamicCast(object->__reference());
+ assert(oir);
+ if(!oir->getAdapterId().empty())
+ {
+ getEndpoints(oir, ttl, new Callback(this, _table, ref, object, objectCached, callback));
+ return;
+ }
+ }
+ }
+
+ if(!objectCached && !endpoints.empty())
+ {
+ _table->addProxy(ref->getIdentity(), object);
+ }
+
+ if(ref->getInstance()->traceLevels()->location >= 1)
+ {
+ getEndpointsTrace(ref, endpoints, objectCached);
+ }
+
+ callback->setEndpoints(endpoints, objectCached);
+}
+
+void
+IceInternal::LocatorInfo::getEndpointsTrace(const IndirectReferencePtr& ref, const vector<EndpointIPtr>& endpoints,
+ bool cached)
+{
+ if(!endpoints.empty())
+ {
+ if(cached)
+ {
+ trace("found endpoints in locator table", ref, endpoints);
+ }
+ else
+ {
+ trace("retrieved endpoints from locator, adding to locator table", ref, endpoints);
+ }
+ }
+ else
+ {
+ Trace out(ref->getInstance()->initializationData().logger, ref->getInstance()->traceLevels()->locationCat);
+ out << "no endpoints configured for ";
+ if(ref->getAdapterId().empty())
+ {
+ out << "object\n";
+ out << "object = " << ref->getInstance()->identityToString(ref->getIdentity());
+ }
+ else
+ {
+ out << "adapter\n";
+ out << "adapter = " << ref->getAdapterId();
+ }
+ }
+}
diff --git a/cpp/src/Ice/LocatorInfo.h b/cpp/src/Ice/LocatorInfo.h
index 4811030d97c..f0a1032fa05 100644
--- a/cpp/src/Ice/LocatorInfo.h
+++ b/cpp/src/Ice/LocatorInfo.h
@@ -71,6 +71,15 @@ class LocatorInfo : public IceUtil::Shared, public IceUtil::Mutex
{
public:
+ class GetEndpointsCallback : virtual public IceUtil::Shared
+ {
+ public:
+
+ virtual void setEndpoints(const std::vector<EndpointIPtr>&, bool) = 0;
+ virtual void setException(const Ice::LocalException&) = 0;
+ };
+ typedef IceUtil::Handle<GetEndpointsCallback> GetEndpointsCallbackPtr;
+
LocatorInfo(const Ice::LocatorPrx&, const LocatorTablePtr&);
void destroy();
@@ -83,6 +92,7 @@ public:
Ice::LocatorRegistryPrx getLocatorRegistry();
std::vector<EndpointIPtr> getEndpoints(const IndirectReferencePtr&, int, bool&);
+ void getEndpoints(const IndirectReferencePtr&, int, const GetEndpointsCallbackPtr&);
void clearCache(const IndirectReferencePtr&);
void clearObjectCache(const IndirectReferencePtr&);
@@ -90,6 +100,12 @@ private:
void trace(const std::string&, const IndirectReferencePtr&, const std::vector<EndpointIPtr>&);
+ void getEndpointsException(const IndirectReferencePtr&, const Ice::Exception&);
+ void getWellKnownObjectEndpoints(const IndirectReferencePtr&, const Ice::ObjectPrx&, int, bool,
+ const GetEndpointsCallbackPtr&);
+ void getEndpointsException(const IndirectReferencePtr&, const Ice::Exception&, const GetEndpointsCallbackPtr&);
+ void getEndpointsTrace(const IndirectReferencePtr&, const std::vector<EndpointIPtr>&, bool);
+
const Ice::LocatorPrx _locator;
Ice::LocatorRegistryPrx _locatorRegistry;
const LocatorTablePtr _table;
diff --git a/cpp/src/Ice/Makefile b/cpp/src/Ice/Makefile
index ebecec755eb..2c7c06d5238 100644
--- a/cpp/src/Ice/Makefile
+++ b/cpp/src/Ice/Makefile
@@ -22,10 +22,12 @@ OBJS = Acceptor.o \
BuiltinSequences.o \
CommunicatorI.o \
Communicator.o \
+ ConnectRequestHandler.o \
ConnectionFactory.o \
ConnectionI.o \
ConnectionMonitor.o \
Connection.o \
+ ConnectionRequestHandler.o \
Connector.o \
Current.o \
DefaultsAndOverrides.o \
@@ -78,8 +80,11 @@ OBJS = Acceptor.o \
Proxy.o \
ReferenceFactory.o \
Reference.o \
+ RequestHandler.o \
RouterInfo.o \
Router.o \
+ Selector.o \
+ SelectorThread.o \
ServantLocator.o \
ServantManager.o \
Service.o \
diff --git a/cpp/src/Ice/Makefile.mak b/cpp/src/Ice/Makefile.mak
index 80c69167223..6b4d6ee0318 100644
--- a/cpp/src/Ice/Makefile.mak
+++ b/cpp/src/Ice/Makefile.mak
@@ -21,11 +21,13 @@ OBJS = Acceptor.obj \
BuiltinSequences.obj \
CommunicatorI.obj \
Communicator.obj \
+ ConnectRequestHandler.obj \
ConnectionFactory.obj \
ConnectionI.obj \
ConnectionMonitor.obj \
Connection.obj \
Connector.obj \
+ ConnectionRequestHandler.obj \
Current.obj \
DefaultsAndOverrides.obj \
Direct.obj \
@@ -79,8 +81,11 @@ OBJS = Acceptor.obj \
Proxy.obj \
ReferenceFactory.obj \
Reference.obj \
+ RequestHandler.obj \
RouterInfo.obj \
Router.obj \
+ Selector.obj \
+ SelectorThread.obj \
ServantLocator.obj \
ServantManager.obj \
Service.obj \
diff --git a/cpp/src/Ice/Network.cpp b/cpp/src/Ice/Network.cpp
index 0ee86c6472d..1fb9491e479 100644
--- a/cpp/src/Ice/Network.cpp
+++ b/cpp/src/Ice/Network.cpp
@@ -190,6 +190,8 @@ IceInternal::notConnected()
{
#ifdef _WIN32
return WSAGetLastError() == WSAENOTCONN;
+#elif defined(__APPLE__) || defined(__FreeBSD__)
+ return errno == ENOTCONN || errno == EINVAL;
#else
return errno == ENOTCONN;
#endif
@@ -293,7 +295,7 @@ IceInternal::shutdownSocketWrite(SOCKET fd)
{
return;
}
-#elif defined(__APPLE__)
+#elif defined(__APPLE__) || defined(__FreeBSD__)
if(errno == ENOTCONN || errno == EINVAL)
{
return;
@@ -329,7 +331,7 @@ IceInternal::shutdownSocketReadWrite(SOCKET fd)
{
return;
}
-#elif defined(__APPLE__)
+#elif defined(__APPLE__) || defined(__FreeBSD__)
if(errno == ENOTCONN || errno == EINVAL)
{
return;
@@ -568,44 +570,9 @@ repeatListen:
}
}
-void
+bool
IceInternal::doConnect(SOCKET fd, struct sockaddr_in& addr, int timeout)
{
-#ifdef _WIN32
- //
- // Set larger send buffer size to avoid performance problems on
- // WIN32.
- //
- setSendBufferSize(fd, 64 * 1024);
-
- //
- // Under WinCE its not possible to find out the connection failure
- // reason with SO_ERROR, so its necessary to use the WSAEVENT
- // mechanism. We use the same mechanism for any Winsock platform.
- //
- WSAEVENT event = WSACreateEvent();
- if(event == 0)
- {
- closeSocketNoThrow(fd);
-
- SocketException ex(__FILE__, __LINE__);
- ex.error = WSAGetLastError();
- throw ex;
- }
-
- if(WSAEventSelect(fd, event, FD_CONNECT) == SOCKET_ERROR)
- {
- int error = WSAGetLastError();
-
- WSACloseEvent(event);
- closeSocketNoThrow(fd);
-
- SocketException ex(__FILE__, __LINE__);
- ex.error = error;
- throw ex;
- }
-#endif
-
repeatConnect:
if(::connect(fd, reinterpret_cast<struct sockaddr*>(&addr), int(sizeof(addr))) == SOCKET_ERROR)
{
@@ -616,125 +583,141 @@ repeatConnect:
if(connectInProgress())
{
- int val;
-#ifdef _WIN32
- WSAEVENT events[1];
- events[0] = event;
- long tout = (timeout >= 0) ? timeout : WSA_INFINITE;
- DWORD rc = WSAWaitForMultipleEvents(1, events, FALSE, tout, FALSE);
- if(rc == WSA_WAIT_FAILED)
+ if(timeout == 0)
{
- int error = WSAGetLastError();
-
- WSACloseEvent(event);
- closeSocketNoThrow(fd);
-
- SocketException ex(__FILE__, __LINE__);
- ex.error = error;
- throw ex;
+ return false;
}
- if(rc == WSA_WAIT_TIMEOUT)
+ try
{
- WSACloseEvent(event);
- closeSocketNoThrow(fd);
-
- assert(timeout >= 0);
- throw ConnectTimeoutException(__FILE__, __LINE__);
+ doFinishConnect(fd, timeout);
}
- assert(rc == WSA_WAIT_EVENT_0);
-
- WSANETWORKEVENTS nevents;
- if(WSAEnumNetworkEvents(fd, event, &nevents) == SOCKET_ERROR)
+ catch(const Ice::LocalException&)
{
- int error = WSAGetLastError();
- WSACloseEvent(event);
closeSocketNoThrow(fd);
-
- SocketException ex(__FILE__, __LINE__);
- ex.error = error;
- throw ex;
+ throw;
}
+ return true;
+ }
+
+ closeSocketNoThrow(fd);
+ if(connectionRefused())
+ {
+ ConnectionRefusedException ex(__FILE__, __LINE__);
+ ex.error = getSocketErrno();
+ throw ex;
+ }
+ else if(connectFailed())
+ {
+ ConnectFailedException ex(__FILE__, __LINE__);
+ ex.error = getSocketErrno();
+ throw ex;
+ }
+ else
+ {
+ SocketException ex(__FILE__, __LINE__);
+ ex.error = getSocketErrno();
+ throw ex;
+ }
+ }
- //
- // Now we close the event, because we're finished and
- // this code be repeated.
- //
- WSACloseEvent(event);
+#if defined(__linux)
+ //
+ // Prevent self connect (self connect happens on Linux when a client tries to connect to
+ // a server which was just deactivated if the client socket re-uses the same ephemeral
+ // port as the server).
+ //
+ struct sockaddr_in localAddr;
+ fdToLocalAddress(fd, localAddr);
+ if(compareAddress(addr, localAddr) == 0)
+ {
+ ConnectionRefusedException ex(__FILE__, __LINE__);
+ ex.error = 0; // No appropriate errno
+ throw ex;
+ }
+#endif
+ return true;
+}
- assert(nevents.lNetworkEvents & FD_CONNECT);
- val = nevents.iErrorCode[FD_CONNECT_BIT];
+void
+IceInternal::doFinishConnect(SOCKET fd, int timeout)
+{
+ //
+ // Note: we don't close the socket if there's an exception. It's the responsability
+ // of the caller to do so.
+ //
+
+ if(timeout != 0)
+ {
+ repeatSelect:
+#ifdef _WIN32
+ fd_set wFdSet;
+ fd_set eFdSet;
+ FD_ZERO(&wFdSet);
+ FD_ZERO(&eFdSet);
+ FD_SET(fd, &wFdSet);
+ FD_SET(fd, &eFdSet);
+
+ int ret;
+ if(timeout >= 0)
+ {
+ struct timeval tv;
+ tv.tv_sec = timeout / 1000;
+ tv.tv_usec = (timeout - tv.tv_sec * 1000) * 1000;
+ ret = ::select(static_cast<int>(fd + 1), 0, &wFdSet, &eFdSet, &tv);
+ }
+ else
+ {
+ ret = ::select(static_cast<int>(fd + 1), 0, &wFdSet, &eFdSet, 0);
+ }
#else
- repeatPoll:
- struct pollfd pollFd[1];
- pollFd[0].fd = fd;
- pollFd[0].events = POLLOUT;
- int ret = ::poll(pollFd, 1, timeout);
- if(ret == 0)
+ struct pollfd pollFd[1];
+ pollFd[0].fd = fd;
+ pollFd[0].events = POLLOUT;
+ int ret = ::poll(pollFd, 1, timeout);
+#endif
+ if(ret == 0)
+ {
+ throw ConnectTimeoutException(__FILE__, __LINE__);
+ }
+ else if(ret == SOCKET_ERROR)
+ {
+ if(interrupted())
{
- closeSocketNoThrow(fd);
- throw ConnectTimeoutException(__FILE__, __LINE__);
+ goto repeatSelect;
}
- else if(ret == SOCKET_ERROR)
- {
- if(interrupted())
- {
- goto repeatPoll;
- }
- SocketException ex(__FILE__, __LINE__);
- ex.error = getSocketErrno();
- throw ex;
- }
-
- //
- // Strange windows bug: The following call to Sleep() is
- // necessary, otherwise no error is reported through
- // getsockopt.
- //
- //Sleep(0);
- socklen_t len = static_cast<socklen_t>(sizeof(int));
- if(getsockopt(fd, SOL_SOCKET, SO_ERROR, reinterpret_cast<char*>(&val), &len) == SOCKET_ERROR)
- {
- closeSocketNoThrow(fd);
- SocketException ex(__FILE__, __LINE__);
- ex.error = getSocketErrno();
- throw ex;
- }
+ SocketException ex(__FILE__, __LINE__);
+ ex.error = getSocketErrno();
+ throw ex;
+ }
+ }
+
+ int val;
+
+ //
+ // Strange windows bug: The following call to Sleep() is
+ // necessary, otherwise no error is reported through
+ // getsockopt.
+ //
+#ifdef _WIN32
+ Sleep(0);
#endif
+ socklen_t len = static_cast<socklen_t>(sizeof(int));
+ if(getsockopt(fd, SOL_SOCKET, SO_ERROR, reinterpret_cast<char*>(&val), &len) == SOCKET_ERROR)
+ {
+ SocketException ex(__FILE__, __LINE__);
+ ex.error = getSocketErrno();
+ throw ex;
+ }
- if(val > 0)
- {
- closeSocketNoThrow(fd);
+ if(val > 0)
+ {
#ifdef _WIN32
- WSASetLastError(val);
+ WSASetLastError(val);
#else
- errno = val;
+ errno = val;
#endif
- if(connectionRefused())
- {
- ConnectionRefusedException ex(__FILE__, __LINE__);
- ex.error = getSocketErrno();
- throw ex;
- }
- else if(connectFailed())
- {
- ConnectFailedException ex(__FILE__, __LINE__);
- ex.error = getSocketErrno();
- throw ex;
- }
- else
- {
- SocketException ex(__FILE__, __LINE__);
- ex.error = getSocketErrno();
- throw ex;
- }
- }
-
- return;
- }
-
- closeSocketNoThrow(fd);
if(connectionRefused())
{
ConnectionRefusedException ex(__FILE__, __LINE__);
@@ -754,6 +737,23 @@ repeatConnect:
throw ex;
}
}
+
+#if defined(__linux)
+ //
+ // Prevent self connect (self connect happens on Linux when a client tries to connect to
+ // a server which was just deactivated if the client socket re-uses the same ephemeral
+ // port as the server).
+ //
+ struct sockaddr_in localAddr;
+ fdToLocalAddress(fd, localAddr);
+ struct sockaddr_in remoteAddr;
+ if(fdToRemoteAddress(fd, remoteAddr) && compareAddress(remoteAddr, localAddr) == 0)
+ {
+ ConnectionRefusedException ex(__FILE__, __LINE__);
+ ex.error = 0; // No appropriate errno
+ throw ex;
+ }
+#endif
}
SOCKET
@@ -826,15 +826,6 @@ repeatAccept:
setTcpNoDelay(ret);
setKeepAlive(ret);
-
-#ifdef _WIN32
- //
- // Set larger send buffer size to avoid performance problems on
- // WIN32.
- //
- setSendBufferSize(ret, 64 * 1024);
-#endif
-
return ret;
}
@@ -848,41 +839,44 @@ IceInternal::getAddress(const string& host, int port, struct sockaddr_in& addr)
if(addr.sin_addr.s_addr == INADDR_NONE)
{
-#ifdef _WIN32
-
//
- // Windows XP has getaddrinfo(), but we don't want to require XP to run Ice.
+ // We now use getaddrinfo() on Windows.
//
+// #ifdef _WIN32
+
+// //
+// // Windows XP has getaddrinfo(), but we don't want to require XP to run Ice.
+// //
- //
- // gethostbyname() is thread safe on Windows, with a separate hostent per thread
- //
- struct hostent* entry;
- int retry = 5;
- do
- {
- entry = gethostbyname(host.c_str());
- }
- while(entry == 0 && WSAGetLastError() == WSATRY_AGAIN && --retry >= 0);
+// //
+// // gethostbyname() is thread safe on Windows, with a separate hostent per thread
+// //
+// struct hostent* entry;
+// int retry = 5;
+// do
+// {
+// entry = gethostbyname(host.c_str());
+// }
+// while(entry == 0 && WSAGetLastError() == WSATRY_AGAIN && --retry >= 0);
- if(entry == 0)
- {
- DNSException ex(__FILE__, __LINE__);
+// if(entry == 0)
+// {
+// DNSException ex(__FILE__, __LINE__);
- ex.error = WSAGetLastError();
- ex.host = host;
- throw ex;
- }
- memcpy(&addr.sin_addr, entry->h_addr, entry->h_length);
+// ex.error = WSAGetLastError();
+// ex.host = host;
+// throw ex;
+// }
+// memcpy(&addr.sin_addr, entry->h_addr, entry->h_length);
-#else
+// #else
struct addrinfo* info = 0;
int retry = 5;
struct addrinfo hints = { 0 };
hints.ai_family = PF_INET;
-
+
int rs = 0;
do
{
@@ -903,8 +897,6 @@ IceInternal::getAddress(const string& host, int port, struct sockaddr_in& addr)
addr.sin_addr.s_addr = sin->sin_addr.s_addr;
freeaddrinfo(info);
-
-#endif
}
}
@@ -1346,7 +1338,7 @@ IceInternal::addrToString(const struct sockaddr_in& addr)
}
vector<struct sockaddr_in>
-IceInternal::getAddresses(const string& host, int port)
+IceInternal::getAddresses(const string& host, int port, bool blocking)
{
vector<struct sockaddr_in> result;
@@ -1367,47 +1359,54 @@ IceInternal::getAddresses(const string& host, int port)
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
-#ifdef _WIN32
-
- //
- // Windows XP has getaddrinfo(), but we don't want to require XP to run Ice.
- //
-
//
- // gethostbyname() is thread safe on Windows, with a separate hostent per thread
+ // We now use getaddrinfo() on Windows.
//
- struct hostent* entry = 0;
- int retry = 5;
+// #ifdef _WIN32
- do
- {
- entry = gethostbyname(host.c_str());
- }
- while(entry == 0 && h_errno == TRY_AGAIN && --retry >= 0);
+// //
+// // Windows XP has getaddrinfo(), but we don't want to require XP to run Ice.
+// //
+
+// //
+// // gethostbyname() is thread safe on Windows, with a separate hostent per thread
+// //
+// struct hostent* entry = 0;
+// int retry = 5;
+
+// do
+// {
+// entry = gethostbyname(host.c_str());
+// }
+// while(entry == 0 && h_errno == TRY_AGAIN && --retry >= 0);
- if(entry == 0)
- {
- DNSException ex(__FILE__, __LINE__);
- ex.error = h_errno;
- ex.host = host;
- throw ex;
- }
-
- char** p = entry->h_addr_list;
- while(*p)
- {
- memcpy(&addr.sin_addr, *p, entry->h_length);
- result.push_back(addr);
- p++;
- }
-
-#else
+// if(entry == 0)
+// {
+// DNSException ex(__FILE__, __LINE__);
+// ex.error = h_errno;
+// ex.host = host;
+// throw ex;
+// }
+
+// char** p = entry->h_addr_list;
+// while(*p)
+// {
+// memcpy(&addr.sin_addr, *p, entry->h_length);
+// result.push_back(addr);
+// p++;
+// }
+
+// #else
struct addrinfo* info = 0;
int retry = 5;
struct addrinfo hints = { 0 };
hints.ai_family = PF_INET;
+ if(!blocking)
+ {
+ hints.ai_flags = AI_NUMERICHOST;
+ }
int rs = 0;
do
@@ -1451,7 +1450,7 @@ IceInternal::getAddresses(const string& host, int port)
freeaddrinfo(info);
-#endif
+//#endif
}
return result;
diff --git a/cpp/src/Ice/Network.h b/cpp/src/Ice/Network.h
index 178e08a6e1a..5936a2cd2c0 100644
--- a/cpp/src/Ice/Network.h
+++ b/cpp/src/Ice/Network.h
@@ -96,7 +96,8 @@ ICE_API void setReuseAddress(SOCKET, bool);
ICE_API void doBind(SOCKET, struct sockaddr_in&);
ICE_API void doListen(SOCKET, int);
-ICE_API void doConnect(SOCKET, struct sockaddr_in&, int);
+ICE_API bool doConnect(SOCKET, struct sockaddr_in&, int);
+ICE_API void doFinishConnect(SOCKET, int);
ICE_API SOCKET doAccept(SOCKET, int);
ICE_API void getAddress(const std::string&, int, struct sockaddr_in&);
@@ -114,7 +115,7 @@ ICE_API void fdToLocalAddress(SOCKET, struct sockaddr_in&);
ICE_API bool fdToRemoteAddress(SOCKET, struct sockaddr_in&);
ICE_API std::string addrToString(const struct sockaddr_in&);
-ICE_API std::vector<struct sockaddr_in> getAddresses(const std::string&, int);
+ICE_API std::vector<struct sockaddr_in> getAddresses(const std::string&, int, bool = true);
ICE_API std::vector<std::string> getLocalHosts();
ICE_API void setTcpBufSize(SOCKET, const Ice::PropertiesPtr&, const Ice::LoggerPtr&);
ICE_API int getSocketErrno();
diff --git a/cpp/src/Ice/ObjectAdapterFactory.cpp b/cpp/src/Ice/ObjectAdapterFactory.cpp
index a6009d658e3..5d7f1d131f9 100644
--- a/cpp/src/Ice/ObjectAdapterFactory.cpp
+++ b/cpp/src/Ice/ObjectAdapterFactory.cpp
@@ -79,7 +79,7 @@ IceInternal::ObjectAdapterFactory::waitForShutdown()
_waitForShutdown = true;
adapters = _adapters;
}
-
+
//
// Now we wait for deactivation of each object adapter.
//
diff --git a/cpp/src/Ice/ObjectAdapterI.cpp b/cpp/src/Ice/ObjectAdapterI.cpp
index 9d7cf4c7d5c..ccd571147ec 100644
--- a/cpp/src/Ice/ObjectAdapterI.cpp
+++ b/cpp/src/Ice/ObjectAdapterI.cpp
@@ -256,7 +256,6 @@ Ice::ObjectAdapterI::waitForDeactivate()
{
IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
-
if(_destroyed)
{
return;
@@ -365,7 +364,6 @@ Ice::ObjectAdapterI::destroy()
_routerInfo = 0;
_publishedEndpoints.clear();
_locatorInfo = 0;
- _connectors.clear();
objectAdapterFactory = _objectAdapterFactory;
_objectAdapterFactory = 0;
@@ -583,14 +581,6 @@ Ice::ObjectAdapterI::refreshPublishedEndpoints()
oldPublishedEndpoints = _publishedEndpoints;
_publishedEndpoints = parsePublishedEndpoints();
- _connectors.clear();
- vector<IncomingConnectionFactoryPtr>::const_iterator p;
- for(p = _incomingConnectionFactories.begin(); p != _incomingConnectionFactories.end(); ++p)
- {
- vector<ConnectorPtr> cons = (*p)->endpoint()->connectors();
- _connectors.insert(_connectors.end(), cons.begin(), cons.end());
- }
-
locatorInfo = _locatorInfo;
if(!_noConfig)
{
@@ -671,10 +661,18 @@ Ice::ObjectAdapterI::isLocal(const ObjectPrx& proxy) const
//
for(p = endpoints.begin(); p != endpoints.end(); ++p)
{
- vector<ConnectorPtr>::const_iterator q;
- for(q = _connectors.begin(); q != _connectors.end(); ++q)
+ vector<IncomingConnectionFactoryPtr>::const_iterator q;
+ for(q = _incomingConnectionFactories.begin(); q != _incomingConnectionFactories.end(); ++q)
+ {
+ if((*p)->equivalent((*q)->endpoint()))
+ {
+ return true;
+ }
+ }
+ vector<EndpointIPtr>::const_iterator r;
+ for(r = _publishedEndpoints.begin(); r != _publishedEndpoints.end(); ++r)
{
- if((*p)->equivalent(*q))
+ if((*p)->equivalent(*r))
{
return true;
}
@@ -944,9 +942,6 @@ Ice::ObjectAdapterI::ObjectAdapterI(const InstancePtr& instance, const Communica
{
IncomingConnectionFactoryPtr factory = new IncomingConnectionFactory(instance, *p, this, _name);
_incomingConnectionFactories.push_back(factory);
-
- vector<ConnectorPtr> cons = factory->endpoint()->connectors();
- _connectors.insert(_connectors.end(), cons.begin(), cons.end());
}
if(endpoints.empty())
{
diff --git a/cpp/src/Ice/Outgoing.cpp b/cpp/src/Ice/Outgoing.cpp
index 8eedeffe6a1..14fb41c7afd 100644
--- a/cpp/src/Ice/Outgoing.cpp
+++ b/cpp/src/Ice/Outgoing.cpp
@@ -9,6 +9,7 @@
#include <Ice/Outgoing.h>
#include <Ice/Object.h>
+#include <Ice/RequestHandler.h>
#include <Ice/ConnectionI.h>
#include <Ice/Reference.h>
#include <Ice/Endpoint.h>
@@ -78,16 +79,15 @@ IceInternal::LocalExceptionWrapper::retry() const
return _retry;
}
-IceInternal::Outgoing::Outgoing(ConnectionI* connection, Reference* ref, const string& operation,
- OperationMode mode, const Context* context, bool compress) :
- _connection(connection),
- _reference(ref),
+IceInternal::Outgoing::Outgoing(RequestHandler* handler, const string& operation, OperationMode mode,
+ const Context* context) :
+ _handler(handler),
_state(StateUnsent),
- _is(ref->getInstance().get()),
- _os(ref->getInstance().get()),
- _compress(compress)
+ _is(handler->getReference()->getInstance().get()),
+ _os(handler->getReference()->getInstance().get()),
+ _sent(false)
{
- switch(_reference->getMode())
+ switch(_handler->getReference()->getMode())
{
case Reference::ModeTwoway:
case Reference::ModeOneway:
@@ -100,25 +100,25 @@ IceInternal::Outgoing::Outgoing(ConnectionI* connection, Reference* ref, const s
case Reference::ModeBatchOneway:
case Reference::ModeBatchDatagram:
{
- _connection->prepareBatchRequest(&_os);
+ _handler->prepareBatchRequest(&_os);
break;
}
}
try
{
- _reference->getIdentity().__write(&_os);
+ _handler->getReference()->getIdentity().__write(&_os);
//
// For compatibility with the old FacetPath.
//
- if(_reference->getFacet().empty())
+ if(_handler->getReference()->getFacet().empty())
{
_os.write(static_cast<string*>(0), static_cast<string*>(0));
}
else
{
- string facet = _reference->getFacet();
+ string facet = _handler->getReference()->getFacet();
_os.write(&facet, &facet + 1);
}
@@ -138,11 +138,8 @@ IceInternal::Outgoing::Outgoing(ConnectionI* connection, Reference* ref, const s
//
// Implicit context
//
- const ImplicitContextIPtr& implicitContext =
- _reference->getInstance()->getImplicitContext();
-
- const Context& prxContext = _reference->getContext()->getValue();
-
+ const ImplicitContextIPtr& implicitContext = _handler->getReference()->getInstance()->getImplicitContext();
+ const Context& prxContext = _handler->getReference()->getContext()->getValue();
if(implicitContext == 0)
{
__writeContext(&_os, prxContext);
@@ -173,42 +170,33 @@ IceInternal::Outgoing::invoke()
_os.endWriteEncaps();
- switch(_reference->getMode())
+ switch(_handler->getReference()->getMode())
{
case Reference::ModeTwoway:
{
- //
- // We let all exceptions raised by sending directly
- // propagate to the caller, because they can be retried
- // without violating "at-most-once". In case of such
- // exceptions, the connection object does not call back on
- // this object, so we don't need to lock the mutex, keep
- // track of state, or save exceptions.
- //
- _connection->sendRequest(&_os, this, _compress);
-
- //
- // Wait until the request has completed, or until the
- // request times out.
- //
+ _state = StateInProgress;
- bool timedOut = false;
+ Ice::ConnectionI* connection = _handler->sendRequest(this);
+ bool timedOut = false;
+
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor);
//
- // It's possible that the request has already
- // completed, due to a regular response, or because of
- // an exception. So we only change the state to "in
- // progress" if it is still "unsent".
+ // If the request is being sent in the background we first wait for the
+ // sent notification.
//
- if(_state == StateUnsent)
+ while(_state != StateFailed && !_sent)
{
- _state = StateInProgress;
+ _monitor.wait();
}
-
- Int timeout = _connection->timeout();
+
+ //
+ // Wait until the request has completed, or until the request times out.
+ //
+
+ Int timeout = connection->timeout();
while(_state == StateInProgress && !timedOut)
{
if(timeout >= 0)
@@ -233,7 +221,7 @@ IceInternal::Outgoing::invoke()
// Must be called outside the synchronization of this
// object.
//
- _connection->exception(TimeoutException(__FILE__, __LINE__));
+ connection->exception(TimeoutException(__FILE__, __LINE__));
//
// We must wait until the exception set above has
@@ -241,7 +229,6 @@ IceInternal::Outgoing::invoke()
//
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor);
-
while(_state == StateInProgress)
{
_monitor.wait();
@@ -262,7 +249,8 @@ IceInternal::Outgoing::invoke()
// An ObjectNotExistException can always be retried as
// well without violating "at-most-once".
//
- if(dynamic_cast<CloseConnectionException*>(_exception.get()) ||
+ if(!_sent ||
+ dynamic_cast<CloseConnectionException*>(_exception.get()) ||
dynamic_cast<ObjectNotExistException*>(_exception.get()))
{
_exception->ice_throw();
@@ -281,25 +269,35 @@ IceInternal::Outgoing::invoke()
{
return false;
}
-
- assert(_state == StateOK);
- break;
+ else
+ {
+ assert(_state == StateOK);
+ return true;
+ }
}
-
+
case Reference::ModeOneway:
case Reference::ModeDatagram:
{
- //
- // For oneway and datagram requests, the connection object
- // never calls back on this object. Therefore we don't
- // need to lock the mutex or save exceptions. We simply
- // let all exceptions from sending propagate to the
- // caller, because such exceptions can be retried without
- // violating "at-most-once".
- //
_state = StateInProgress;
- _connection->sendRequest(&_os, 0, _compress);
- break;
+ if(_handler->sendRequest(this))
+ {
+ //
+ // If the handler returns the connection, we must wait for the sent callback.
+ //
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor);
+ while(_state != StateFailed && !_sent)
+ {
+ _monitor.wait();
+ }
+
+ if(_exception.get())
+ {
+ assert(!_sent);
+ _exception->ice_throw();
+ }
+ }
+ return true;
}
case Reference::ModeBatchOneway:
@@ -311,12 +309,13 @@ IceInternal::Outgoing::invoke()
// apply.
//
_state = StateInProgress;
- _connection->finishBatchRequest(&_os, _compress);
- break;
+ _handler->finishBatchRequest(&_os);
+ return true;
}
}
- return true;
+ assert(false);
+ return false;
}
void
@@ -329,9 +328,10 @@ IceInternal::Outgoing::abort(const LocalException& ex)
// notify the connection about that we give up ownership of the
// batch stream.
//
- if(_reference->getMode() == Reference::ModeBatchOneway || _reference->getMode() == Reference::ModeBatchDatagram)
+ if(_handler->getReference()->getMode() == Reference::ModeBatchOneway ||
+ _handler->getReference()->getMode() == Reference::ModeBatchDatagram)
{
- _connection->abortBatchRequest();
+ _handler->abortBatchRequest();
//
// If we abort a batch requests, we cannot retry, because not
@@ -345,11 +345,30 @@ IceInternal::Outgoing::abort(const LocalException& ex)
}
void
+IceInternal::Outgoing::sent(bool notify)
+{
+ if(notify)
+ {
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor);
+ _sent = true;
+ _monitor.notify();
+ }
+ else
+ {
+ //
+ // No synchronization is necessary if called from sendRequest() because the connection
+ // send mutex is locked and no other threads can call on Outgoing until it's released.
+ //
+ _sent = true;
+ }
+}
+
+void
IceInternal::Outgoing::finished(BasicStream& is)
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor);
- assert(_reference->getMode() == Reference::ModeTwoway); // Can only be called for twoways.
+ assert(_handler->getReference()->getMode() == Reference::ModeTwoway); // Can only be called for twoways.
assert(_state <= StateInProgress);
@@ -514,12 +533,68 @@ void
IceInternal::Outgoing::finished(const LocalException& ex)
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor);
-
- assert(_reference->getMode() == Reference::ModeTwoway); // Can only be called for twoways.
-
assert(_state <= StateInProgress);
- _state = StateLocalException;
+ _state = StateFailed;
+ _exception.reset(dynamic_cast<LocalException*>(ex.ice_clone()));
+ _monitor.notify();
+}
+
+IceInternal::BatchOutgoing::BatchOutgoing(RequestHandler* handler) :
+ _handler(handler),
+ _connection(0),
+ _sent(false),
+ _os(handler->getReference()->getInstance().get())
+{
+}
+
+IceInternal::BatchOutgoing::BatchOutgoing(ConnectionI* connection, Instance* instance) :
+ _handler(0),
+ _connection(connection),
+ _sent(false),
+ _os(instance)
+{
+}
+
+void
+IceInternal::BatchOutgoing::invoke()
+{
+ assert(_handler || _connection);
+ if(_handler && !_handler->flushBatchRequests(this) || _connection && !_connection->flushBatchRequests(this))
+ {
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor);
+ while(!_exception.get() && !_sent)
+ {
+ _monitor.wait();
+ }
+
+ if(_exception.get())
+ {
+ assert(!_sent);
+ _exception->ice_throw();
+ }
+ }
+}
+
+void
+IceInternal::BatchOutgoing::sent(bool notify)
+{
+ if(notify)
+ {
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor);
+ _sent = true;
+ _monitor.notify();
+ }
+ else
+ {
+ _sent = true;
+ }
+}
+
+void
+IceInternal::BatchOutgoing::finished(const Ice::LocalException& ex)
+{
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor);
_exception.reset(dynamic_cast<LocalException*>(ex.ice_clone()));
_monitor.notify();
}
diff --git a/cpp/src/Ice/OutgoingAsync.cpp b/cpp/src/Ice/OutgoingAsync.cpp
index 40cb5336c23..4286cc1949c 100644
--- a/cpp/src/Ice/OutgoingAsync.cpp
+++ b/cpp/src/Ice/OutgoingAsync.cpp
@@ -10,6 +10,7 @@
#include <Ice/OutgoingAsync.h>
#include <Ice/Object.h>
#include <Ice/ConnectionI.h>
+#include <Ice/RequestHandler.h>
#include <Ice/Reference.h>
#include <Ice/Instance.h>
#include <Ice/LocalException.h>
@@ -27,9 +28,12 @@ using namespace std;
using namespace Ice;
using namespace IceInternal;
+IceUtil::Shared* IceInternal::upCast(OutgoingAsyncMessageCallback* p) { return p; }
IceUtil::Shared* IceInternal::upCast(OutgoingAsync* p) { return p; }
+IceUtil::Shared* IceInternal::upCast(BatchOutgoingAsync* p) { return p; }
IceUtil::Shared* IceInternal::upCast(AMI_Object_ice_invoke* p) { return p; }
IceUtil::Shared* IceInternal::upCast(AMI_Array_Object_ice_invoke* p) { return p; }
+IceUtil::Shared* IceInternal::upCast(AMI_Object_ice_flushBatchRequests* p) { return p; }
IceInternal::OutgoingAsync::OutgoingAsync() :
__is(0),
@@ -44,17 +48,52 @@ IceInternal::OutgoingAsync::~OutgoingAsync()
}
void
+IceInternal::OutgoingAsync::__sent(Ice::ConnectionI* connection)
+{
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor);
+ _sent = true;
+
+ if(!_proxy->ice_isTwoway())
+ {
+ cleanup(); // No response expected, we're done with the OutgoingAsync.
+ }
+ else if(_response)
+ {
+ _monitor.notifyAll(); // If the response was already received notify finished() which is waiting.
+ }
+ else if(connection->timeout() > 0)
+ {
+ assert(!_timerTaskConnection);
+ _timerTaskConnection = connection;
+ IceUtil::Time timeout = IceUtil::Time::milliSeconds(connection->timeout());
+ _proxy->__reference()->getInstance()->timer()->schedule(this, timeout);
+ }
+}
+
+void
IceInternal::OutgoingAsync::__finished(BasicStream& is)
{
- IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(_monitor);
+ assert(_proxy->ice_isTwoway()); // Can only be called for twoways.
Ice::Byte replyStatus;
-
try
{
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor);
+ assert(__os);
+ _response = true;
+
+ if(_timerTaskConnection && _proxy->__reference()->getInstance()->timer()->cancel(this))
+ {
+ _timerTaskConnection = 0; // Timer cancelled.
+ }
+
+ while(!_sent || _timerTaskConnection)
+ {
+ _monitor.wait();
+ }
+
__is->swap(is);
__is->read(replyStatus);
-
switch(replyStatus)
{
@@ -190,43 +229,65 @@ IceInternal::OutgoingAsync::__finished(BasicStream& is)
warning();
}
+
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor);
cleanup();
}
void
IceInternal::OutgoingAsync::__finished(const LocalException& exc)
{
- IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(_monitor);
-
- if(__os) // Don't retry if cleanup() was already called.
+ bool retry = false;
{
- //
- // A CloseConnectionException indicates graceful server
- // shutdown, and is therefore always repeatable without
- // violating "at-most-once". That's because by sending a close
- // connection message, the server guarantees that all
- // outstanding requests can safely be repeated. Otherwise, we
- // can also retry if the operation mode is Nonmutating or
- // Idempotent.
- //
- // An ObjectNotExistException can always be retried as
- // well without violating "at-most-once".
- //
- if(_mode == Nonmutating || _mode == Idempotent || dynamic_cast<const CloseConnectionException*>(&exc) ||
- dynamic_cast<const ObjectNotExistException*>(&exc))
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor);
+
+ if(__os) // Might be called from __prepare or before __prepare
{
- try
+ if(_timerTaskConnection && _proxy->__reference()->getInstance()->timer()->cancel(this))
{
- _proxy->__handleException(_delegate, exc, _cnt);
- __send();
- return;
+ _timerTaskConnection = 0; // Timer cancelled.
}
- catch(const LocalException&)
+
+ while(_timerTaskConnection)
+ {
+ _monitor.wait();
+ }
+
+ //
+ // A CloseConnectionException indicates graceful server
+ // shutdown, and is therefore always repeatable without
+ // violating "at-most-once". That's because by sending a close
+ // connection message, the server guarantees that all
+ // outstanding requests can safely be repeated. Otherwise, we
+ // can also retry if the operation mode is Nonmutating or
+ // Idempotent.
+ //
+ // An ObjectNotExistException can always be retried as
+ // well without violating "at-most-once".
+ //
+ if(!_sent ||
+ _mode == Nonmutating || _mode == Idempotent ||
+ dynamic_cast<const CloseConnectionException*>(&exc) ||
+ dynamic_cast<const ObjectNotExistException*>(&exc))
{
+ retry = true;
}
}
}
+ if(retry)
+ {
+ try
+ {
+ _proxy->__handleException(_delegate, exc, _cnt);
+ __send();
+ return;
+ }
+ catch(const LocalException&)
+ {
+ }
+ }
+
try
{
ice_exception(exc);
@@ -240,14 +301,58 @@ IceInternal::OutgoingAsync::__finished(const LocalException& exc)
warning();
}
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor);
cleanup();
}
void
+IceInternal::OutgoingAsync::__finished(const LocalExceptionWrapper& ex)
+{
+ //
+ // NOTE: This is called if sendRequest/sendAsyncRequest fails with
+ // a LocalExceptionWrapper exception. It's not possible for the
+ // timer to be set at this point because the request couldn't be
+ // sent.
+ //
+ assert(!_sent && !_timerTaskConnection);
+
+ try
+ {
+ if(_mode == Nonmutating || _mode == Idempotent)
+ {
+ _proxy->__handleExceptionWrapperRelaxed(_delegate, ex, _cnt);
+ }
+ else
+ {
+ _proxy->__handleExceptionWrapper(_delegate, ex);
+ }
+ __send();
+ }
+ catch(const Ice::LocalException& exc)
+ {
+ try
+ {
+ ice_exception(exc);
+ }
+ catch(const std::exception& ex)
+ {
+ warning(ex);
+ }
+ catch(...)
+ {
+ warning();
+ }
+
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor);
+ cleanup();
+ }
+}
+
+void
IceInternal::OutgoingAsync::__prepare(const ObjectPrx& prx, const string& operation, OperationMode mode,
const Context* context)
{
- IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(_monitor);
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor);
try
{
@@ -258,16 +363,20 @@ IceInternal::OutgoingAsync::__prepare(const ObjectPrx& prx, const string& operat
{
_monitor.wait();
}
-
+
//
- // Can't call async via a oneway proxy.
+ // Can't call async via a batch proxy.
//
- prx->__checkTwowayOnly(operation);
-
_proxy = prx;
+ if(_proxy->ice_isBatchOneway() || _proxy->ice_isBatchDatagram())
+ {
+ throw Ice::FeatureNotSupportedException(__FILE__, __LINE__, "can't send batch requests with AMI");
+ }
_delegate = 0;
_cnt = 0;
_mode = mode;
+ _sent = false;
+ _response = false;
ReferencePtr ref = _proxy->__reference();
assert(!__is);
@@ -308,11 +417,8 @@ IceInternal::OutgoingAsync::__prepare(const ObjectPrx& prx, const string& operat
//
// Implicit context
//
- const ImplicitContextIPtr& implicitContext =
- ref->getInstance()->getImplicitContext();
-
+ const ImplicitContextIPtr& implicitContext = ref->getInstance()->getImplicitContext();
const Context& prxContext = ref->getContext()->getValue();
-
if(implicitContext == 0)
{
__writeContext(__os, prxContext);
@@ -335,41 +441,45 @@ IceInternal::OutgoingAsync::__prepare(const ObjectPrx& prx, const string& operat
void
IceInternal::OutgoingAsync::__send()
{
- IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(_monitor);
-
+ //
+ // NOTE: no synchronization needed. At this point, no other threads can be calling on this object.
+ //
+ RequestHandler* handler;
try
{
- while(true)
+ _delegate = _proxy->__getDelegate(true);
+ handler = _delegate->__getRequestHandler().get();
+ }
+ catch(const Ice::LocalException& ex)
+ {
+ __finished(ex);
+ return;
+ }
+
+ _sent = false;
+ _response = false;
+ handler->sendAsyncRequest(this);
+}
+
+void
+IceInternal::OutgoingAsync::runTimerTask() // Implementation of TimerTask::runTimerTask()
+{
+ Ice::ConnectionIPtr connection;
+ {
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor);
+ assert(_timerTaskConnection && _sent); // Can only be set once the request is sent.
+
+ if(!_response) // If the response was just received, don't close the connection.
{
- bool compress;
- _delegate = _proxy->__getDelegate();
- Ice::ConnectionIPtr connection = _delegate->__getConnection(compress);
- try
- {
- connection->sendAsyncRequest(__os, this, compress);
-
- //
- // Don't do anything after sendAsyncRequest() returned
- // without an exception. I such case, there will be
- // callbacks, i.e., calls to the __finished()
- // functions. Since there is no mutex protection, we
- // cannot modify state here and in such callbacks.
- //
- return;
- }
- catch(const LocalExceptionWrapper& ex)
- {
- _proxy->__handleExceptionWrapper(_delegate, ex);
- }
- catch(const LocalException& ex)
- {
- _proxy->__handleException(_delegate, ex, _cnt);
- }
+ connection = _timerTaskConnection;
}
+ _timerTaskConnection = 0;
+ _monitor.notifyAll();
}
- catch(const LocalException& ex)
+
+ if(connection)
{
- __finished(ex);
+ connection->exception(Ice::TimeoutException(__FILE__, __LINE__));
}
}
@@ -414,6 +524,8 @@ IceInternal::OutgoingAsync::warning() const
void
IceInternal::OutgoingAsync::cleanup()
{
+ assert(!_timerTaskConnection);
+
delete __is;
__is = 0;
delete __os;
@@ -422,6 +534,91 @@ IceInternal::OutgoingAsync::cleanup()
_monitor.notify();
}
+IceInternal::BatchOutgoingAsync::BatchOutgoingAsync() : _os(0)
+{
+}
+
+void
+IceInternal::BatchOutgoingAsync::__prepare(const InstancePtr& instance)
+{
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor);
+ while(_os)
+ {
+ _monitor.wait();
+ }
+ _os = new BasicStream(instance.get());
+}
+
+void
+IceInternal::BatchOutgoingAsync::__sent(Ice::ConnectionI* connection)
+{
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor);
+ cleanup();
+}
+
+void
+IceInternal::BatchOutgoingAsync::__finished(const Ice::LocalException& exc)
+{
+ try
+ {
+ ice_exception(exc);
+ }
+ catch(const std::exception& ex)
+ {
+ warning(ex);
+ }
+ catch(...)
+ {
+ warning();
+ }
+
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor);
+ cleanup();
+}
+
+void
+IceInternal::BatchOutgoingAsync::warning(const std::exception& exc) const
+{
+ if(_os) // Don't print anything if cleanup() was already called.
+ {
+ if(_os->instance()->initializationData().properties->getPropertyAsIntWithDefault("Ice.Warn.AMICallback", 1) > 0)
+ {
+ Warning out(_os->instance()->initializationData().logger);
+ const Exception* ex = dynamic_cast<const ObjectNotExistException*>(&exc);
+ if(ex)
+ {
+ out << "Ice::Exception raised by AMI callback:\n" << ex;
+ }
+ else
+ {
+ out << "std::exception raised by AMI callback:\n" << exc.what();
+ }
+ }
+ }
+}
+
+void
+IceInternal::BatchOutgoingAsync::warning() const
+{
+ if(_os) // Don't print anything if cleanup() was already called.
+ {
+ if(_os->instance()->initializationData().properties->getPropertyAsIntWithDefault("Ice.Warn.AMICallback", 1) > 0)
+ {
+ Warning out(_os->instance()->initializationData().logger);
+ out << "unknown exception raised by AMI callback";
+ }
+ }
+}
+
+void
+IceInternal::BatchOutgoingAsync::cleanup()
+{
+ delete _os;
+ _os = 0;
+
+ _monitor.notify();
+}
+
void
Ice::AMI_Object_ice_invoke::__invoke(const ObjectPrx& prx, const string& operation, OperationMode mode,
const vector<Byte>& inParams, const Context* context)
@@ -492,3 +689,24 @@ Ice::AMI_Array_Object_ice_invoke::__response(bool ok) // ok == true means no use
}
ice_response(ok, outParams);
}
+
+void
+Ice::AMI_Object_ice_flushBatchRequests::__invoke(const ObjectPrx& prx)
+{
+ Handle< ::IceDelegate::Ice::Object> delegate;
+ RequestHandler* handler;
+ try
+ {
+ __prepare(prx->__reference()->getInstance());
+ delegate = prx->__getDelegate(true);
+ handler = delegate->__getRequestHandler().get();
+ }
+ catch(const Ice::LocalException& ex)
+ {
+ __finished(ex);
+ return;
+ }
+
+ handler->flushAsyncBatchRequests(this);
+}
+
diff --git a/cpp/src/Ice/PropertyNames.cpp b/cpp/src/Ice/PropertyNames.cpp
index 82b47e23ac6..f72db807b30 100644
--- a/cpp/src/Ice/PropertyNames.cpp
+++ b/cpp/src/Ice/PropertyNames.cpp
@@ -7,7 +7,7 @@
//
// **********************************************************************
//
-// Generated by makeprops.py from file ../config/PropertyNames.xml, Thu Nov 22 20:40:28 2007
+// Generated by makeprops.py from file ../config/PropertyNames.xml, Mon Nov 26 11:29:02 2007
// IMPORTANT: Do not edit this file -- any edits made here will be lost!
diff --git a/cpp/src/Ice/PropertyNames.h b/cpp/src/Ice/PropertyNames.h
index e326b32c07f..eeb33e1fb30 100644
--- a/cpp/src/Ice/PropertyNames.h
+++ b/cpp/src/Ice/PropertyNames.h
@@ -7,7 +7,7 @@
//
// **********************************************************************
//
-// Generated by makeprops.py from file ../config/PropertyNames.xml, Thu Nov 22 20:40:28 2007
+// Generated by makeprops.py from file ../config/PropertyNames.xml, Mon Nov 26 11:29:02 2007
// IMPORTANT: Do not edit this file -- any edits made here will be lost!
diff --git a/cpp/src/Ice/ProtocolPluginFacade.cpp b/cpp/src/Ice/ProtocolPluginFacade.cpp
index f8ff17e63e9..2134bdd6ec1 100644
--- a/cpp/src/Ice/ProtocolPluginFacade.cpp
+++ b/cpp/src/Ice/ProtocolPluginFacade.cpp
@@ -50,12 +50,24 @@ IceInternal::ProtocolPluginFacade::getNetworkTraceCategory() const
return _instance->traceLevels()->networkCat;
}
+EndpointHostResolverPtr
+IceInternal::ProtocolPluginFacade::getEndpointHostResolver() const
+{
+ return _instance->endpointHostResolver();
+}
+
void
IceInternal::ProtocolPluginFacade::addEndpointFactory(const EndpointFactoryPtr& factory) const
{
_instance->endpointFactoryManager()->add(factory);
}
+EndpointFactoryPtr
+IceInternal::ProtocolPluginFacade::getEndpointFactory(Ice::Short type) const
+{
+ return _instance->endpointFactoryManager()->get(type);
+}
+
IceInternal::ProtocolPluginFacade::ProtocolPluginFacade(const CommunicatorPtr& communicator) :
_instance(getInstance(communicator)),
_communicator(communicator)
diff --git a/cpp/src/Ice/Proxy.cpp b/cpp/src/Ice/Proxy.cpp
index 4d986ef0abc..845d40ffee5 100644
--- a/cpp/src/Ice/Proxy.cpp
+++ b/cpp/src/Ice/Proxy.cpp
@@ -14,6 +14,8 @@
#include <Ice/ObjectAdapterFactory.h>
#include <Ice/Outgoing.h>
#include <Ice/OutgoingAsync.h>
+#include <Ice/ConnectRequestHandler.h>
+#include <Ice/ConnectionRequestHandler.h>
#include <Ice/Direct.h>
#include <Ice/Reference.h>
#include <Ice/EndpointI.h>
@@ -123,7 +125,7 @@ IceProxy::Ice::Object::ice_isA(const string& typeId, const Context* context)
try
{
__checkTwowayOnly("ice_isA");
- __del = __getDelegate();
+ __del = __getDelegate(false);
return __del->ice_isA(typeId, context);
}
catch(const LocalExceptionWrapper& __ex)
@@ -146,7 +148,7 @@ IceProxy::Ice::Object::ice_ping(const Context* context)
Handle< ::IceDelegate::Ice::Object> __del;
try
{
- __del = __getDelegate();
+ __del = __getDelegate(false);
__del->ice_ping(context);
return;
}
@@ -171,7 +173,7 @@ IceProxy::Ice::Object::ice_ids(const Context* context)
try
{
__checkTwowayOnly("ice_ids");
- __del = __getDelegate();
+ __del = __getDelegate(false);
return __del->ice_ids(context);
}
catch(const LocalExceptionWrapper& __ex)
@@ -195,7 +197,7 @@ IceProxy::Ice::Object::ice_id(const Context* context)
try
{
__checkTwowayOnly("ice_id");
- __del = __getDelegate();
+ __del = __getDelegate(false);
return __del->ice_id(context);
}
catch(const LocalExceptionWrapper& __ex)
@@ -244,7 +246,7 @@ IceProxy::Ice::Object::ice_invoke(const string& operation,
Handle< ::IceDelegate::Ice::Object> __del;
try
{
- __del = __getDelegate();
+ __del = __getDelegate(false);
return __del->ice_invoke(operation, mode, inParams, outParams, context);
}
catch(const LocalExceptionWrapper& __ex)
@@ -824,9 +826,8 @@ IceProxy::Ice::Object::ice_getConnection()
Handle< ::IceDelegate::Ice::Object> __del;
try
{
- __del = __getDelegate();
- bool compress;
- return __del->__getConnection(compress);
+ __del = __getDelegate(false);
+ return __del->__getRequestHandler()->getConnection(true);
}
catch(const LocalException& __ex)
{
@@ -848,8 +849,7 @@ IceProxy::Ice::Object::ice_getCachedConnection() const
{
try
{
- bool compress;
- return __del->__getConnection(compress);
+ return __del->__getRequestHandler()->getConnection(false);
}
catch(const CollocationOptimizationException&)
{
@@ -858,6 +858,36 @@ IceProxy::Ice::Object::ice_getCachedConnection() const
return 0;
}
+void
+IceProxy::Ice::Object::ice_flushBatchRequests()
+{
+ int __cnt;
+ while(true)
+ {
+ Handle< ::IceDelegate::Ice::Object> __del;
+ try
+ {
+ __del = __getDelegate(false);
+ __del->ice_flushBatchRequests();
+ return;
+ }
+ catch(const LocalExceptionWrapper& __ex)
+ {
+ __handleExceptionWrapper(__del, __ex);
+ }
+ catch(const LocalException& __ex)
+ {
+ __handleException(__del, __ex, __cnt);
+ }
+ }
+}
+
+void
+IceProxy::Ice::Object::ice_flushBatchRequests_async(const AMI_Object_ice_flushBatchRequestsPtr& cb)
+{
+ cb->__invoke(this);
+}
+
ReferencePtr
IceProxy::Ice::Object::__reference() const
{
@@ -1024,7 +1054,7 @@ operator<<(ostream& os, const ::IceProxy::Ice::Object& p)
}
Handle< ::IceDelegate::Ice::Object>
-IceProxy::Ice::Object::__getDelegate()
+IceProxy::Ice::Object::__getDelegate(bool async)
{
IceUtil::Mutex::Lock sync(*this);
@@ -1048,19 +1078,8 @@ IceProxy::Ice::Object::__getDelegate()
if(!delegate)
{
Handle< ::IceDelegateM::Ice::Object> d = __createDelegateM();
- d->setup(_reference);
+ d->setup(_reference, this, async);
delegate = d;
-
- //
- // If this proxy is for a non-local object, and we are
- // using a router, then add this proxy to the router info
- // object.
- //
- RouterInfoPtr ri = _reference->getRouterInfo();
- if(ri)
- {
- ri->addProxy(this);
- }
}
if(_reference->getCacheConnection())
@@ -1076,6 +1095,26 @@ IceProxy::Ice::Object::__getDelegate()
return delegate;
}
+void
+IceProxy::Ice::Object::__setRequestHandler(const Handle< ::IceDelegate::Ice::Object>& delegate,
+ const ::IceInternal::RequestHandlerPtr& handler)
+{
+ IceUtil::Mutex::Lock sync(*this);
+ if(_delegate.get() == delegate.get())
+ {
+ if(dynamic_cast< ::IceDelegateM::Ice::Object*>(_delegate.get()))
+ {
+ _delegate = __createDelegateM();
+ _delegate->__setRequestHandler(handler);
+ }
+ else if(dynamic_cast< ::IceDelegateD::Ice::Object*>(_delegate.get()))
+ {
+ _delegate = __createDelegateD();
+ _delegate->__setRequestHandler(handler);
+ }
+ }
+}
+
Handle< ::IceDelegateM::Ice::Object>
IceProxy::Ice::Object::__createDelegateM()
{
@@ -1116,7 +1155,7 @@ bool
IceDelegateM::Ice::Object::ice_isA(const string& __id, const Context* context)
{
static const string __operation("ice_isA");
- Outgoing __og(__connection.get(), __reference.get(), __operation, ::Ice::Nonmutating, context, __compress);
+ Outgoing __og(__handler.get(), __operation, ::Ice::Nonmutating, context);
try
{
BasicStream* __os = __og.os();
@@ -1155,7 +1194,7 @@ void
IceDelegateM::Ice::Object::ice_ping(const Context* context)
{
static const string __operation("ice_ping");
- Outgoing __og(__connection.get(), __reference.get(), __operation, ::Ice::Nonmutating, context, __compress);
+ Outgoing __og(__handler.get(), __operation, ::Ice::Nonmutating, context);
bool __ok = __og.invoke();
try
{
@@ -1182,7 +1221,7 @@ vector<string>
IceDelegateM::Ice::Object::ice_ids(const Context* context)
{
static const string __operation("ice_ids");
- Outgoing __og(__connection.get(), __reference.get(), __operation, ::Ice::Nonmutating, context, __compress);
+ Outgoing __og(__handler.get(), __operation, ::Ice::Nonmutating, context);
vector<string> __ret;
bool __ok = __og.invoke();
try
@@ -1212,7 +1251,7 @@ string
IceDelegateM::Ice::Object::ice_id(const Context* context)
{
static const string __operation("ice_id");
- Outgoing __og(__connection.get(), __reference.get(), __operation, ::Ice::Nonmutating, context, __compress);
+ Outgoing __og(__handler.get(), __operation, ::Ice::Nonmutating, context);
string __ret;
bool __ok = __og.invoke();
try
@@ -1245,7 +1284,7 @@ IceDelegateM::Ice::Object::ice_invoke(const string& operation,
vector<Byte>& outParams,
const Context* context)
{
- Outgoing __og(__connection.get(), __reference.get(), operation, mode, context, __compress);
+ Outgoing __og(__handler.get(), operation, mode, context);
try
{
BasicStream* __os = __og.os();
@@ -1256,7 +1295,7 @@ IceDelegateM::Ice::Object::ice_invoke(const string& operation,
__og.abort(__ex);
}
bool ok = __og.invoke();
- if(__reference->getMode() == Reference::ModeTwoway)
+ if(__handler->getReference()->getMode() == Reference::ModeTwoway)
{
try
{
@@ -1272,11 +1311,35 @@ IceDelegateM::Ice::Object::ice_invoke(const string& operation,
return ok;
}
-ConnectionIPtr
-IceDelegateM::Ice::Object::__getConnection(bool& compress) const
+void
+IceDelegateM::Ice::Object::ice_flushBatchRequests()
{
- compress = __compress;
- return __connection;
+ BatchOutgoing __og(__handler.get());
+ try
+ {
+ __og.invoke();
+ }
+ catch(const ::Ice::LocalException& __ex)
+ {
+ //
+ // We never retry flusing the batch requests as the connection batched
+ // requests were discarded and the caller needs to be notified of the
+ // failure.
+ //
+ throw ::IceInternal::LocalExceptionWrapper(__ex, false);
+ }
+}
+
+RequestHandlerPtr
+IceDelegateM::Ice::Object::__getRequestHandler() const
+{
+ return __handler;
+}
+
+void
+IceDelegateM::Ice::Object::__setRequestHandler(const RequestHandlerPtr& handler)
+{
+ __handler = handler;
}
void
@@ -1291,28 +1354,36 @@ IceDelegateM::Ice::Object::__copyFrom(const ::IceInternal::Handle< ::IceDelegate
// No need to synchronize "*this", as this operation is only
// called upon initialization.
//
-
- assert(!__reference);
- assert(!__connection);
-
- __reference = from->__reference;
- __connection = from->__connection;
- __compress = from->__compress;
+
+ assert(!__handler);
+
+ __handler = from->__handler;
}
void
-IceDelegateM::Ice::Object::setup(const ReferencePtr& ref)
+IceDelegateM::Ice::Object::setup(const ReferencePtr& ref, const ::Ice::ObjectPrx& proxy, bool async)
{
//
// No need to synchronize "*this", as this operation is only
// called upon initialization.
//
- assert(!__reference);
- assert(!__connection);
+ assert(!__handler);
- __reference = ref;
- __connection = __reference->getConnection(__compress);
+ //
+ // If the delegate is created as a result of an AMI call or if the proxy is
+ // a batch proxy we use the connect request handler to connect the in the
+ // background.
+ //
+ if(async || ref->getMode() == Reference::ModeBatchOneway || ref->getMode() == Reference::ModeBatchDatagram)
+ {
+ IceInternal::ConnectRequestHandlerPtr handler = new ::IceInternal::ConnectRequestHandler(ref, proxy, this);
+ __handler = handler->connect();
+ }
+ else
+ {
+ __handler = new ::IceInternal::ConnectionRequestHandler(ref, proxy);
+ }
}
bool
@@ -1577,14 +1648,26 @@ IceDelegateD::Ice::Object::ice_invoke(const string&,
return false;
}
-ConnectionIPtr
-IceDelegateD::Ice::Object::__getConnection(bool&) const
+void
+IceDelegateD::Ice::Object::ice_flushBatchRequests()
+{
+ throw CollocationOptimizationException(__FILE__, __LINE__);
+}
+
+RequestHandlerPtr
+IceDelegateD::Ice::Object::__getRequestHandler() const
{
throw CollocationOptimizationException(__FILE__, __LINE__);
return 0;
}
void
+IceDelegateD::Ice::Object::__setRequestHandler(const RequestHandlerPtr&)
+{
+ throw CollocationOptimizationException(__FILE__, __LINE__);
+}
+
+void
IceDelegateD::Ice::Object::__copyFrom(const ::IceInternal::Handle< ::IceDelegateD::Ice::Object>& from)
{
//
diff --git a/cpp/src/Ice/Reference.cpp b/cpp/src/Ice/Reference.cpp
index b9e1d534836..3fe7eee422d 100644
--- a/cpp/src/Ice/Reference.cpp
+++ b/cpp/src/Ice/Reference.cpp
@@ -625,6 +625,20 @@ IceInternal::FixedReference::getConnection(bool& compress) const
return connection;
}
+void
+IceInternal::FixedReference::getConnection(const GetConnectionCallbackPtr& callback) const
+{
+ try
+ {
+ bool compress;
+ callback->setConnection(getConnection(compress), compress);
+ }
+ catch(const Ice::LocalException& ex)
+ {
+ callback->setException(ex);
+ }
+}
+
bool
IceInternal::FixedReference::operator==(const Reference& r) const
{
@@ -743,20 +757,6 @@ IceInternal::FixedReference::filterConnections(const vector<ConnectionIPtr>& all
IceUtil::Shared* IceInternal::upCast(IceInternal::RoutableReference* p) { return p; }
-vector<EndpointIPtr>
-IceInternal::RoutableReference::getRoutedEndpoints() const
-{
- if(_routerInfo)
- {
- //
- // If we route, we send everything to the router's client
- // proxy endpoints.
- //
- return _routerInfo->getClientEndpoints();
- }
- return vector<EndpointIPtr>();
-}
-
bool
IceInternal::RoutableReference::getSecure() const
{
@@ -1093,6 +1093,232 @@ IceInternal::RoutableReference::operator<(const Reference& r) const
return false;
}
+ConnectionIPtr
+IceInternal::RoutableReference::createConnection(const vector<EndpointIPtr>& allEndpoints, bool& comp) const
+{
+ vector<EndpointIPtr> endpoints = filterEndpoints(allEndpoints);
+ if(endpoints.empty())
+ {
+ throw Ice::NoEndpointException(__FILE__, __LINE__, toString());
+ }
+
+ OutgoingConnectionFactoryPtr factory = getInstance()->outgoingConnectionFactory();
+ Ice::ConnectionIPtr connection;
+ if(getCacheConnection() || endpoints.size() == 1)
+ {
+ //
+ // Get an existing connection or create one if there's no
+ // existing connection to one of the given endpoints.
+ //
+ connection = factory->create(endpoints, false, _threadPerConnection, getEndpointSelection(), comp);
+ }
+ else
+ {
+ //
+ // Go through the list of endpoints and try to create the
+ // connection until it succeeds. This is different from just
+ // calling create() with the given endpoints since this might
+ // create a new connection even if there's an existing
+ // connection for one of the endpoints.
+ //
+
+ auto_ptr<LocalException> exception;
+ vector<EndpointIPtr> endpoint;
+ endpoint.push_back(0);
+
+ for(vector<EndpointIPtr>::const_iterator p = endpoints.begin(); p != endpoints.end(); ++p)
+ {
+ try
+ {
+ endpoint.back() = *p;
+ connection = factory->create(endpoint, p + 1 == endpoints.end(), _threadPerConnection,
+ getEndpointSelection(), comp);
+ break;
+ }
+ catch(const LocalException& ex)
+ {
+ exception.reset(dynamic_cast<LocalException*>(ex.ice_clone()));
+ }
+ }
+
+ if(!connection)
+ {
+ assert(exception.get());
+ exception->ice_throw();
+ }
+ }
+
+ assert(connection);
+
+ //
+ // If we have a router, set the object adapter for this router
+ // (if any) to the new connection, so that callbacks from the
+ // router can be received over this new connection.
+ //
+ if(_routerInfo)
+ {
+ connection->setAdapter(_routerInfo->getAdapter());
+ }
+
+ return connection;
+}
+
+void
+IceInternal::RoutableReference::createConnection(const vector<EndpointIPtr>& allEndpoints,
+ const GetConnectionCallbackPtr& callback) const
+{
+ vector<EndpointIPtr> endpoints = filterEndpoints(allEndpoints);
+ if(endpoints.empty())
+ {
+ callback->setException(Ice::NoEndpointException(__FILE__, __LINE__, toString()));
+ return;
+ }
+
+ //
+ // Finally, create the connection.
+ //
+ OutgoingConnectionFactoryPtr factory = getInstance()->outgoingConnectionFactory();
+ if(getCacheConnection() || endpoints.size() == 1)
+ {
+ class CB1 : public OutgoingConnectionFactory::CreateConnectionCallback
+ {
+ public:
+
+ virtual void
+ setConnection(const Ice::ConnectionIPtr& connection, bool compress)
+ {
+ //
+ // If we have a router, set the object adapter for this router
+ // (if any) to the new connection, so that callbacks from the
+ // router can be received over this new connection.
+ //
+ if(_routerInfo)
+ {
+ connection->setAdapter(_routerInfo->getAdapter());
+ }
+ _callback->setConnection(connection, compress);
+ }
+
+ virtual void
+ setException(const Ice::LocalException& ex)
+ {
+ _callback->setException(ex);
+ }
+
+ CB1(const RouterInfoPtr& routerInfo, const GetConnectionCallbackPtr& callback) :
+ _routerInfo(routerInfo), _callback(callback)
+ {
+ }
+
+ private:
+
+ const RouterInfoPtr _routerInfo;
+ const GetConnectionCallbackPtr _callback;
+ };
+
+ //
+ // Get an existing connection or create one if there's no
+ // existing connection to one of the given endpoints.
+ //
+ factory->create(endpoints, false, _threadPerConnection, getEndpointSelection(), new CB1(_routerInfo, callback));
+ return;
+ }
+ else
+ {
+ class CB2 : public OutgoingConnectionFactory::CreateConnectionCallback
+ {
+ public:
+
+ virtual void
+ setConnection(const Ice::ConnectionIPtr& connection, bool compress)
+ {
+ //
+ // If we have a router, set the object adapter for this router
+ // (if any) to the new connection, so that callbacks from the
+ // router can be received over this new connection.
+ //
+ if(_reference->getRouterInfo())
+ {
+ connection->setAdapter(_reference->getRouterInfo()->getAdapter());
+ }
+ _callback->setConnection(connection, compress);
+ }
+
+ virtual void
+ setException(const Ice::LocalException& ex)
+ {
+ if(!_exception.get())
+ {
+ _exception.reset(dynamic_cast<Ice::LocalException*>(ex.ice_clone()));
+ }
+
+ if(++_i == _endpoints.size())
+ {
+ _callback->setException(*_exception.get());
+ return;
+ }
+
+ bool more = _i != _endpoints.size() - 1;
+ vector<EndpointIPtr> endpoint;
+ endpoint.push_back(_endpoints[_i]);
+
+ OutgoingConnectionFactoryPtr factory = _reference->getInstance()->outgoingConnectionFactory();
+ bool threadPerConnection = _reference->getThreadPerConnection();
+ EndpointSelectionType sel = _reference->getEndpointSelection();
+ factory->create(endpoint, more, threadPerConnection, sel, this);
+ }
+
+ CB2(const RoutableReferencePtr& reference, const vector<EndpointIPtr>& endpoints,
+ const GetConnectionCallbackPtr& callback) :
+ _reference(reference),
+ _endpoints(endpoints),
+ _callback(callback),
+ _i(0)
+ {
+ }
+
+ private:
+
+ const RoutableReferencePtr _reference;
+ const vector<EndpointIPtr> _endpoints;
+ const GetConnectionCallbackPtr _callback;
+ size_t _i;
+ std::auto_ptr<Ice::LocalException> _exception;
+ };
+
+ //
+ // Go through the list of endpoints and try to create the
+ // connection until it succeeds. This is different from just
+ // calling create() with the given endpoints since this might
+ // create a new connection even if there's an existing
+ // connection for one of the endpoints.
+ //
+
+ vector<EndpointIPtr> endpt;
+ endpt.push_back(endpoints[0]);
+ RoutableReference* self = const_cast<RoutableReference*>(this);
+ factory->create(endpt, true, _threadPerConnection, getEndpointSelection(), new CB2(self, endpoints, callback));
+ return;
+ }
+}
+
+void
+IceInternal::RoutableReference::applyOverrides(vector<EndpointIPtr>& endpoints) const
+{
+ for(vector<EndpointIPtr>::iterator p = endpoints.begin(); p != endpoints.end(); ++p)
+ {
+ *p = (*p)->connectionId(_connectionId);
+ if(_overrideCompress)
+ {
+ *p = (*p)->compress(_compress);
+ }
+ if(_overrideTimeout)
+ {
+ *p = (*p)->timeout(_timeout);
+ }
+ }
+}
+
IceInternal::RoutableReference::RoutableReference(const InstancePtr& inst, const CommunicatorPtr& com,
const Identity& ident, const SharedContextPtr& ctx, const string& fs,
Mode md, bool sec, bool prefSec, const RouterInfoPtr& rtrInfo,
@@ -1130,8 +1356,8 @@ IceInternal::RoutableReference::RoutableReference(const RoutableReference& r) :
{
}
-ConnectionIPtr
-IceInternal::RoutableReference::createConnection(const vector<EndpointIPtr>& allEndpoints, bool& comp) const
+vector<EndpointIPtr>
+IceInternal::RoutableReference::filterEndpoints(const vector<EndpointIPtr>& allEndpoints) const
{
vector<EndpointIPtr> endpoints = allEndpoints;
@@ -1224,75 +1450,8 @@ IceInternal::RoutableReference::createConnection(const vector<EndpointIPtr>& all
//
stable_partition(endpoints.begin(), endpoints.end(), not1(Ice::constMemFun(&EndpointI::secure)));
}
-
- if(endpoints.empty())
- {
- NoEndpointException ex(__FILE__, __LINE__);
- ex.proxy = toString();
- throw ex;
- }
-
- //
- // Finally, create the connection.
- //
- OutgoingConnectionFactoryPtr factory = getInstance()->outgoingConnectionFactory();
- if(getCacheConnection() || endpoints.size() == 1)
- {
- //
- // Get an existing connection or create one if there's no
- // existing connection to one of the given endpoints.
- //
- return factory->create(endpoints, false, _threadPerConnection, getEndpointSelection(), comp);
- }
- else
- {
- //
- // Go through the list of endpoints and try to create the
- // connection until it succeeds. This is different from just
- // calling create() with the given endpoints since this might
- // create a new connection even if there's an existing
- // connection for one of the endpoints.
- //
-
- auto_ptr<LocalException> exception;
- vector<EndpointIPtr> endpoint;
- endpoint.push_back(0);
-
- for(vector<EndpointIPtr>::const_iterator p = endpoints.begin(); p != endpoints.end(); ++p)
- {
- try
- {
- endpoint.back() = *p;
- return factory->create(endpoint, p + 1 == endpoints.end(), _threadPerConnection,
- getEndpointSelection(), comp);
- }
- catch(const LocalException& ex)
- {
- exception.reset(dynamic_cast<LocalException*>(ex.ice_clone()));
- }
- }
-
- assert(exception.get());
- exception->ice_throw();
- return 0; // Keeps the compiler happy.
- }
-}
-
-void
-IceInternal::RoutableReference::applyOverrides(vector<EndpointIPtr>& endpoints) const
-{
- for(vector<EndpointIPtr>::iterator p = endpoints.begin(); p != endpoints.end(); ++p)
- {
- *p = (*p)->connectionId(_connectionId);
- if(_overrideCompress)
- {
- *p = (*p)->compress(_compress);
- }
- if(_overrideTimeout)
- {
- *p = (*p)->timeout(_timeout);
- }
- }
+
+ return endpoints;
}
IceUtil::Shared* IceInternal::upCast(IceInternal::DirectReference* p) { return p; }
@@ -1403,7 +1562,8 @@ IceInternal::DirectReference::changeAdapterId(const string& newAdapterId) const
getSecure(), getPreferSecure(), newAdapterId, getRouterInfo(),
locatorInfo, getCollocationOptimization(),
getCacheConnection(), getEndpointSelection(),
- getThreadPerConnection(), getLocatorCacheTimeout());
+ getThreadPerConnection(),
+ getLocatorCacheTimeout());
}
else
{
@@ -1472,28 +1632,68 @@ IceInternal::DirectReference::toString() const
ConnectionIPtr
IceInternal::DirectReference::getConnection(bool& comp) const
{
- vector<EndpointIPtr> endpts = RoutableReference::getRoutedEndpoints();
- applyOverrides(endpts);
-
- if(endpts.empty())
+ if(getRouterInfo())
{
- endpts = _endpoints; // Endpoint overrides are already applied on these endpoints.
+ vector<EndpointIPtr> endpts = getRouterInfo()->getClientEndpoints();
+ if(!endpts.empty())
+ {
+ applyOverrides(endpts);
+ return createConnection(endpts, comp);
+ }
}
- ConnectionIPtr connection = createConnection(endpts, comp);
+ return createConnection(_endpoints, comp);
+}
+
+void
+IceInternal::DirectReference::getConnection(const GetConnectionCallbackPtr& callback) const
+{
+ class Callback : public RouterInfo::GetClientEndpointsCallback
+ {
+ public:
+
+ virtual void
+ setEndpoints(const vector<EndpointIPtr>& endpoints)
+ {
+ vector<EndpointIPtr> endpts = endpoints;
+ if(!endpts.empty())
+ {
+ _reference->applyOverrides(endpts);
+ _reference->createConnection(endpts, _callback);
+ return;
+ }
+
+ _reference->createConnection(_reference->getEndpoints(), _callback);
+ }
+
+ virtual void
+ setException(const Ice::LocalException& ex)
+ {
+ _callback->setException(ex);
+ }
+
+ Callback(const DirectReferencePtr& reference, const GetConnectionCallbackPtr& callback) :
+ _reference(reference), _callback(callback)
+ {
+ }
+
+ private:
+
+ const DirectReferencePtr _reference;
+ const GetConnectionCallbackPtr _callback;
+ };
- //
- // If we have a router, set the object adapter for this router
- // (if any) to the new connection, so that callbacks from the
- // router can be received over this new connection.
- //
if(getRouterInfo())
{
- connection->setAdapter(getRouterInfo()->getAdapter());
+ //
+ // If we route, we send everything to the router's client
+ // proxy endpoints.
+ //
+ getRouterInfo()->getClientEndpoints(new Callback(const_cast<DirectReference*>(this), callback));
+ return;
}
- assert(connection);
- return connection;
+ createConnection(_endpoints, callback);
}
bool
@@ -1699,77 +1899,223 @@ IceInternal::IndirectReference::toString() const
ConnectionIPtr
IceInternal::IndirectReference::getConnection(bool& comp) const
{
- ConnectionIPtr connection;
+ if(getRouterInfo())
+ {
+ //
+ // If we route, we send everything to the router's client
+ // proxy endpoints.
+ //
+ vector<EndpointIPtr> endpts = getRouterInfo()->getClientEndpoints();
+ if(!endpts.empty())
+ {
+ applyOverrides(endpts);
+ return createConnection(endpts, comp);
+ }
+ }
while(true)
{
- vector<EndpointIPtr> endpts = RoutableReference::getRoutedEndpoints();
bool cached = false;
- if(endpts.empty() && _locatorInfo)
+ vector<EndpointIPtr> endpts;
+ if(_locatorInfo)
{
- const IndirectReferencePtr self = const_cast<IndirectReference*>(this);
- endpts = _locatorInfo->getEndpoints(self, _locatorCacheTimeout, cached);
+ endpts = _locatorInfo->getEndpoints(const_cast<IndirectReference*>(this), _locatorCacheTimeout, cached);
+ applyOverrides(endpts);
}
- applyOverrides(endpts);
+ if(endpts.empty())
+ {
+ throw Ice::NoEndpointException(__FILE__, __LINE__, toString());
+ }
try
{
- connection = createConnection(endpts, comp);
- assert(connection);
+ return createConnection(endpts, comp);
}
- catch(const NoEndpointException& ex)
+ catch(const NoEndpointException&)
{
- throw ex; // No need to retry if there's no endpoints.
+ throw; // No need to retry if there's no endpoints.
}
catch(const LocalException& ex)
{
- if(!getRouterInfo())
+ assert(_locatorInfo);
+ _locatorInfo->clearCache(const_cast<IndirectReference*>(this));
+
+ if(cached)
{
- assert(_locatorInfo);
-
- // COMPILERFIX: Braces needed to prevent BCB from causing Reference refCount from
+ // COMPILERFIX: Braces needed to prevent BCB from causing TraceLevels refCount from
// being decremented twice when loop continues.
{
- const IndirectReferencePtr self = const_cast<IndirectReference*>(this);
- _locatorInfo->clearCache(self);
+ TraceLevelsPtr traceLevels = getInstance()->traceLevels();
+ if(traceLevels->retry >= 2)
+ {
+ Trace out(getInstance()->initializationData().logger, traceLevels->retryCat);
+ out << "connection to cached endpoints failed\n"
+ << "removing endpoints from cache and trying one more time\n" << ex;
+ }
}
+ continue;
+ }
+ throw;
+ }
+ }
+
+ assert(false);
+ return 0;
+}
+
+void
+IceInternal::IndirectReference::getConnection(const GetConnectionCallbackPtr& callback) const
+{
+ class Callback : public RouterInfo::GetClientEndpointsCallback
+ {
+ public:
+
+ virtual void
+ setEndpoints(const vector<EndpointIPtr>& endpoints)
+ {
+ vector<EndpointIPtr> endpts = endpoints;
+ if(!endpts.empty())
+ {
+ _reference->applyOverrides(endpts);
+ _reference->createConnection(endpts, _callback);
+ return;
+ }
+
+ _reference->getConnectionNoRouterInfo(_callback);
+ }
+
+ virtual void
+ setException(const Ice::LocalException& ex)
+ {
+ _callback->setException(ex);
+ }
+
+ Callback(const IndirectReferencePtr& reference, const GetConnectionCallbackPtr& callback) :
+ _reference(reference), _callback(callback)
+ {
+ }
+
+ private:
+
+ const IndirectReferencePtr _reference;
+ const GetConnectionCallbackPtr _callback;
+ };
- if(cached)
+ if(getRouterInfo())
+ {
+ //
+ // If we route, we send everything to the router's client
+ // proxy endpoints.
+ //
+ getRouterInfo()->getClientEndpoints(new Callback(const_cast<IndirectReference*>(this), callback));
+ return;
+ }
+
+ getConnectionNoRouterInfo(callback);
+}
+
+void
+IceInternal::IndirectReference::getConnectionNoRouterInfo(const GetConnectionCallbackPtr& callback) const
+{
+ class Callback2 : public Reference::GetConnectionCallback
+ {
+ public:
+
+ virtual void
+ setConnection(const Ice::ConnectionIPtr& connection, bool compress)
+ {
+ _callback->setConnection(connection, compress);
+ }
+
+ virtual void
+ setException(const Ice::LocalException& exc)
+ {
+ try
+ {
+ exc.ice_throw();
+ }
+ catch(const Ice::NoEndpointException& ex)
+ {
+ _callback->setException(ex); // No need to retry if there's no endpoints.
+ }
+ catch(const Ice::LocalException& ex)
+ {
+ LocatorInfoPtr locatorInfo = _reference->getLocatorInfo();
+ assert(locatorInfo);
+ locatorInfo->clearCache(_reference);
+ if(_cached)
{
- // COMPILERFIX: Braces needed to prevent BCB from causing TraceLevels refCount from
- // being decremented twice when loop continues.
+ TraceLevelsPtr traceLvls = _reference->getInstance()->traceLevels();
+ if(traceLvls->retry >= 2)
{
- TraceLevelsPtr traceLevels = getInstance()->traceLevels();
- if(traceLevels->retry >= 2)
- {
- Trace out(getInstance()->initializationData().logger, traceLevels->retryCat);
- out << "connection to cached endpoints failed\n"
- << "removing endpoints from cache and trying one more time\n" << ex;
- }
+ Trace out(_reference->getInstance()->initializationData().logger, traceLvls->retryCat);
+ out << "connection to cached endpoints failed\n"
+ << "removing endpoints from cache and trying one more time\n" << ex;
}
- continue;
+ _reference->getConnectionNoRouterInfo(_callback); // Retry.
+ return;
}
+ _callback->setException(ex);
}
+ }
- throw;
+ Callback2(const IndirectReferencePtr& reference, const GetConnectionCallbackPtr& callback, bool cached):
+ _reference(reference), _callback(callback), _cached(cached)
+ {
}
+
+ private:
+
+ const IndirectReferencePtr _reference;
+ const GetConnectionCallbackPtr _callback;
+ const bool _cached;
+ };
+
+ class Callback : public LocatorInfo::GetEndpointsCallback
+ {
+ public:
- break;
- }
+ virtual void
+ setEndpoints(const vector<EndpointIPtr>& endpoints, bool cached)
+ {
+ if(endpoints.empty())
+ {
+ _callback->setException(Ice::NoEndpointException(__FILE__, __LINE__, _reference->toString()));
+ return;
+ }
+
+ vector<EndpointIPtr> endpts = endpoints;
+ _reference->applyOverrides(endpts);
+ _reference->createConnection(endpts, new Callback2(_reference, _callback, cached));
+ }
+
+ virtual void
+ setException(const Ice::LocalException& ex)
+ {
+ _callback->setException(ex);
+ }
- //
- // If we have a router, set the object adapter for this router
- // (if any) to the new connection, so that callbacks from the
- // router can be received over this new connection.
- //
- if(getRouterInfo())
+ Callback(const IndirectReferencePtr& reference, const GetConnectionCallbackPtr& callback) :
+ _reference(reference), _callback(callback)
+ {
+ }
+
+ private:
+
+ const IndirectReferencePtr _reference;
+ const GetConnectionCallbackPtr _callback;
+ };
+
+ if(_locatorInfo)
{
- connection->setAdapter(getRouterInfo()->getAdapter());
+ IndirectReference* self = const_cast<IndirectReference*>(this);
+ _locatorInfo->getEndpoints(self, _locatorCacheTimeout, new Callback(self, callback));
+ }
+ else
+ {
+ callback->setException(Ice::NoEndpointException(__FILE__, __LINE__, toString()));
}
-
- assert(connection);
- return connection;
}
int
diff --git a/cpp/src/Ice/Reference.h b/cpp/src/Ice/Reference.h
index 1430ebf7278..95715300787 100644
--- a/cpp/src/Ice/Reference.h
+++ b/cpp/src/Ice/Reference.h
@@ -33,6 +33,15 @@ class Reference : public IceUtil::Shared
{
public:
+ class GetConnectionCallback : virtual public IceUtil::Shared
+ {
+ public:
+
+ virtual void setConnection(const Ice::ConnectionIPtr&, bool) = 0;
+ virtual void setException(const Ice::LocalException&) = 0;
+ };
+ typedef IceUtil::Handle<GetConnectionCallback> GetConnectionCallbackPtr;
+
enum Type
{
TypeDirect,
@@ -115,6 +124,7 @@ public:
// Get a suitable connection for this reference.
//
virtual Ice::ConnectionIPtr getConnection(bool&) const = 0;
+ virtual void getConnection(const GetConnectionCallbackPtr&) const = 0;
virtual bool operator==(const Reference&) const = 0;
virtual bool operator!=(const Reference&) const = 0;
@@ -180,6 +190,7 @@ public:
virtual std::string toString() const;
virtual Ice::ConnectionIPtr getConnection(bool&) const;
+ virtual void getConnection(const GetConnectionCallbackPtr&) const;
virtual bool operator==(const Reference&) const;
virtual bool operator!=(const Reference&) const;
@@ -203,7 +214,6 @@ class RoutableReference : public Reference
public:
virtual RouterInfoPtr getRouterInfo() const { return _routerInfo; }
- std::vector<EndpointIPtr> getRoutedEndpoints() const;
virtual bool getSecure() const;
virtual bool getPreferSecure() const;
@@ -223,8 +233,6 @@ public:
virtual ReferencePtr changeEndpointSelection(Ice::EndpointSelectionType) const;
virtual ReferencePtr changeThreadPerConnection(bool) const;
- virtual Ice::ConnectionIPtr getConnection(bool&) const = 0;
-
virtual int hash() const;
virtual bool operator==(const Reference&) const = 0;
@@ -233,6 +241,10 @@ public:
virtual ReferencePtr clone() const = 0;
+ Ice::ConnectionIPtr createConnection(const std::vector<EndpointIPtr>&, bool&) const;
+ void createConnection(const std::vector<EndpointIPtr>&, const GetConnectionCallbackPtr&) const;
+ void applyOverrides(std::vector<EndpointIPtr>&) const;
+
protected:
RoutableReference(const InstancePtr&, const Ice::CommunicatorPtr&, const Ice::Identity&, const SharedContextPtr&,
@@ -240,8 +252,7 @@ protected:
Ice::EndpointSelectionType, bool);
RoutableReference(const RoutableReference&);
- Ice::ConnectionIPtr createConnection(const std::vector<EndpointIPtr>&, bool&) const;
- void applyOverrides(std::vector<EndpointIPtr>&) const;
+ std::vector<EndpointIPtr> filterEndpoints(const std::vector<EndpointIPtr>&) const;
private:
@@ -284,6 +295,7 @@ public:
virtual void streamWrite(BasicStream*) const;
virtual std::string toString() const;
virtual Ice::ConnectionIPtr getConnection(bool&) const;
+ virtual void getConnection(const GetConnectionCallbackPtr&) const;
virtual bool operator==(const Reference&) const;
virtual bool operator!=(const Reference&) const;
@@ -323,6 +335,8 @@ public:
virtual void streamWrite(BasicStream*) const;
virtual std::string toString() const;
virtual Ice::ConnectionIPtr getConnection(bool&) const;
+ virtual void getConnection(const GetConnectionCallbackPtr&) const;
+ virtual void getConnectionNoRouterInfo(const GetConnectionCallbackPtr&) const;
virtual int hash() const; // Conceptually const.
diff --git a/cpp/src/Ice/ReferenceFactory.cpp b/cpp/src/Ice/ReferenceFactory.cpp
index 4c055017f68..0e894056597 100644
--- a/cpp/src/Ice/ReferenceFactory.cpp
+++ b/cpp/src/Ice/ReferenceFactory.cpp
@@ -623,8 +623,7 @@ IceInternal::ReferenceFactory::createFromProperties(const string& propertyPrefix
}
else
{
- ref = ref->changeRouter(
- RouterPrx::uncheckedCast(_communicator->propertyToProxy(property)));
+ ref = ref->changeRouter(RouterPrx::uncheckedCast(_communicator->propertyToProxy(property)));
}
}
diff --git a/cpp/src/Ice/RequestHandler.cpp b/cpp/src/Ice/RequestHandler.cpp
new file mode 100644
index 00000000000..cf2845c77ae
--- /dev/null
+++ b/cpp/src/Ice/RequestHandler.cpp
@@ -0,0 +1,23 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2007 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 <Ice/RequestHandler.h>
+
+using namespace std;
+using namespace IceInternal;
+
+IceUtil::Shared* IceInternal::upCast(RequestHandler* obj) { return obj; }
+
+RequestHandler::~RequestHandler()
+{
+}
+
+RequestHandler::RequestHandler(const ReferencePtr& reference) : _reference(reference)
+{
+}
diff --git a/cpp/src/Ice/RequestHandler.h b/cpp/src/Ice/RequestHandler.h
new file mode 100644
index 00000000000..1b22794930c
--- /dev/null
+++ b/cpp/src/Ice/RequestHandler.h
@@ -0,0 +1,55 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2007 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 ICE_REQUEST_HANDLER_H
+#define ICE_REQUEST_HANDLER_H
+
+#include <IceUtil/Shared.h>
+
+#include <Ice/RequestHandlerF.h>
+#include <Ice/ReferenceF.h>
+#include <Ice/OutgoingAsyncF.h>
+#include <Ice/ConnectionIF.h>
+
+namespace IceInternal
+{
+
+class BasicStream;
+class Outgoing;
+class BatchOutgoing;
+
+class RequestHandler : virtual public ::IceUtil::Shared
+{
+public:
+
+ virtual ~RequestHandler();
+
+ virtual void prepareBatchRequest(BasicStream*) = 0;
+ virtual void finishBatchRequest(BasicStream*) = 0;
+ virtual void abortBatchRequest() = 0;
+
+ virtual Ice::ConnectionI* sendRequest(Outgoing*) = 0;
+ virtual void sendAsyncRequest(const OutgoingAsyncPtr&) = 0;
+
+ virtual bool flushBatchRequests(BatchOutgoing*) = 0;
+ virtual void flushAsyncBatchRequests(const BatchOutgoingAsyncPtr&) = 0;
+
+ const ReferencePtr& getReference() const { return _reference; } // Inlined for performances.
+
+ virtual Ice::ConnectionIPtr getConnection(bool) = 0;
+
+protected:
+
+ RequestHandler(const ReferencePtr&);
+ const ReferencePtr _reference;
+};
+
+}
+
+#endif
diff --git a/cpp/src/Ice/RouterInfo.cpp b/cpp/src/Ice/RouterInfo.cpp
index fd2e9ea5300..4ab5323593a 100644
--- a/cpp/src/Ice/RouterInfo.cpp
+++ b/cpp/src/Ice/RouterInfo.cpp
@@ -154,12 +154,168 @@ IceInternal::RouterInfo::getRouter() const
vector<EndpointIPtr>
IceInternal::RouterInfo::getClientEndpoints()
{
+ {
+ IceUtil::Mutex::Lock sync(*this);
+ if(!_clientEndpoints.empty())
+ {
+ return _clientEndpoints;
+ }
+ }
+
+ return setClientEndpoints(_router->getClientProxy());
+}
+
+void
+IceInternal::RouterInfo::getClientEndpoints(const GetClientEndpointsCallbackPtr& callback)
+{
+ vector<EndpointIPtr> clientEndpoints;
+ {
+ IceUtil::Mutex::Lock sync(*this);
+ clientEndpoints = _clientEndpoints;
+ }
+
+ if(!clientEndpoints.empty())
+ {
+ callback->setEndpoints(clientEndpoints);
+ return;
+ }
+
+ class Callback : public AMI_Router_getClientProxy
+ {
+ public:
+
+ virtual void
+ ice_response(const Ice::ObjectPrx& clientProxy)
+ {
+ _callback->setEndpoints(_routerInfo->setClientEndpoints(clientProxy));
+ }
+
+ virtual void
+ ice_exception(const Ice::Exception& ex)
+ {
+ _callback->setException(dynamic_cast<const Ice::LocalException&>(ex));
+ }
+
+ Callback(const RouterInfoPtr& routerInfo, const GetClientEndpointsCallbackPtr& callback) :
+ _routerInfo(routerInfo), _callback(callback)
+ {
+ }
+
+ private:
+
+ const RouterInfoPtr _routerInfo;
+ const GetClientEndpointsCallbackPtr _callback;
+ };
+
+ _router->getClientProxy_async(new Callback(this, callback));
+}
+
+vector<EndpointIPtr>
+IceInternal::RouterInfo::getServerEndpoints()
+{
+ {
+ IceUtil::Mutex::Lock sync(*this);
+ if(!_serverEndpoints.empty())
+ {
+ return _serverEndpoints;
+ }
+ }
+
+ return setServerEndpoints(_router->getServerProxy());
+}
+
+void
+IceInternal::RouterInfo::addProxy(const ObjectPrx& proxy)
+{
+ assert(proxy); // Must not be called for null proxies.
+
+ {
+ IceUtil::Mutex::Lock sync(*this);
+ if(_identities.find(proxy->ice_getIdentity()) != _identities.end())
+ {
+ //
+ // Only add the proxy to the router if it's not already in our local map.
+ //
+ return;
+ }
+ }
+
+ ObjectProxySeq proxies;
+ proxies.push_back(proxy);
+ addAndEvictProxies(proxy, _router->addProxies(proxies));
+}
+
+bool
+IceInternal::RouterInfo::addProxy(const Ice::ObjectPrx& proxy, const AddProxyCallbackPtr& callback)
+{
+ assert(proxy);
+ {
+ IceUtil::Mutex::Lock sync(*this);
+ if(_identities.find(proxy->ice_getIdentity()) == _identities.end())
+ {
+ //
+ // Only add the proxy to the router if it's not already in our local map.
+ //
+ return true;
+ }
+ }
+
+ class Callback : public AMI_Router_addProxies
+ {
+ public:
+
+ virtual void
+ ice_response(const Ice::ObjectProxySeq& evictedProxies)
+ {
+ _routerInfo->addAndEvictProxies(_proxy, evictedProxies);
+ _callback->addedProxy();
+ }
+
+ virtual void
+ ice_exception(const Ice::Exception& ex)
+ {
+ _callback->setException(dynamic_cast<const Ice::LocalException&>(ex));
+ }
+
+ Callback(const RouterInfoPtr& routerInfo, const Ice::ObjectPrx& proxy, const AddProxyCallbackPtr& callback) :
+ _routerInfo(routerInfo), _proxy(proxy), _callback(callback)
+ {
+ }
+
+ private:
+
+ const RouterInfoPtr _routerInfo;
+ const Ice::ObjectPrx _proxy;
+ const AddProxyCallbackPtr _callback;
+ };
+
+ Ice::ObjectProxySeq proxies;
+ proxies.push_back(proxy);
+ _router->addProxies_async(new Callback(this, proxy, callback), proxies);
+ return false;
+}
+
+void
+IceInternal::RouterInfo::setAdapter(const ObjectAdapterPtr& adapter)
+{
IceUtil::Mutex::Lock sync(*this);
-
- if(_clientEndpoints.size() == 0) // Lazy initialization.
+ _adapter = adapter;
+}
+
+ObjectAdapterPtr
+IceInternal::RouterInfo::getAdapter() const
+{
+ IceUtil::Mutex::Lock sync(*this);
+ return _adapter;
+}
+
+vector<EndpointIPtr>
+IceInternal::RouterInfo::setClientEndpoints(const Ice::ObjectPrx& proxy)
+{
+ IceUtil::Mutex::Lock sync(*this);
+ if(_clientEndpoints.empty())
{
- ObjectPrx clientProxy = _router->getClientProxy();
- if(!clientProxy)
+ if(!proxy)
{
//
// If getClientProxy() return nil, use router endpoints.
@@ -168,7 +324,7 @@ IceInternal::RouterInfo::getClientEndpoints()
}
else
{
- clientProxy = clientProxy->ice_router(0); // The client proxy cannot be routed.
+ Ice::ObjectPrx clientProxy = proxy->ice_router(0); // The client proxy cannot be routed.
//
// In order to avoid creating a new connection to the router,
@@ -187,16 +343,15 @@ IceInternal::RouterInfo::getClientEndpoints()
_clientEndpoints = clientProxy->__reference()->getEndpoints();
}
}
-
return _clientEndpoints;
}
+
vector<EndpointIPtr>
-IceInternal::RouterInfo::getServerEndpoints()
+IceInternal::RouterInfo::setServerEndpoints(const Ice::ObjectPrx& serverProxy)
{
IceUtil::Mutex::Lock sync(*this);
-
- if(_serverEndpoints.size() == 0) // Lazy initialization.
+ if(_serverEndpoints.empty()) // Lazy initialization.
{
ObjectPrx serverProxy = _router->getServerProxy();
if(!serverProxy)
@@ -208,53 +363,45 @@ IceInternal::RouterInfo::getServerEndpoints()
_serverEndpoints = serverProxy->__reference()->getEndpoints();
}
-
return _serverEndpoints;
}
void
-IceInternal::RouterInfo::addProxy(const ObjectPrx& proxy)
+IceInternal::RouterInfo::addAndEvictProxies(const Ice::ObjectPrx& proxy, const Ice::ObjectProxySeq& evictedProxies)
{
- assert(proxy); // Must not be called for null proxies.
-
IceUtil::Mutex::Lock sync(*this);
- set<Identity>::iterator p = _identities.find(proxy->ice_getIdentity());
-
- if(p == _identities.end())
+ //
+ // Check if the proxy hasn't already been evicted by a concurrent addProxies call.
+ // If it's the case, don't add it to our local map.
+ //
+ multiset<Identity>::iterator p = _evictedIdentities.find(proxy->ice_getIdentity());
+ if(p != _evictedIdentities.end())
+ {
+ _evictedIdentities.erase(p);
+ }
+ else
{
//
- // Only add the proxy to the router if it's not already in our local map.
- //
- ObjectProxySeq proxies;
- proxies.push_back(proxy);
- ObjectProxySeq evictedProxies = _router->addProxies(proxies);
-
- //
- // If we successfully added the proxy to the router, we add it to our local map.
- //
- _identities.insert(_identities.begin(), proxy->ice_getIdentity());
-
- //
- // We also must remove whatever proxies the router evicted.
+ // If we successfully added the proxy to the router,
+ // we add it to our local map.
//
- for(ObjectProxySeq::iterator q = evictedProxies.begin(); q != evictedProxies.end(); ++q)
+ _identities.insert(proxy->ice_getIdentity());
+ }
+
+ //
+ // We also must remove whatever proxies the router evicted.
+ //
+ for(Ice::ObjectProxySeq::const_iterator q = evictedProxies.begin(); q != evictedProxies.end(); ++q)
+ {
+ if(_identities.erase((*q)->ice_getIdentity()) == 0)
{
- _identities.erase((*q)->ice_getIdentity());
+ //
+ // It's possible for the proxy to not have been
+ // added yet in the local map if two threads
+ // concurrently call addProxies.
+ //
+ _evictedIdentities.insert((*q)->ice_getIdentity());
}
}
}
-
-void
-IceInternal::RouterInfo::setAdapter(const ObjectAdapterPtr& adapter)
-{
- IceUtil::Mutex::Lock sync(*this);
- _adapter = adapter;
-}
-
-ObjectAdapterPtr
-IceInternal::RouterInfo::getAdapter() const
-{
- IceUtil::Mutex::Lock sync(*this);
- return _adapter;
-}
diff --git a/cpp/src/Ice/RouterInfo.h b/cpp/src/Ice/RouterInfo.h
index f7a6d9d773f..7a05dacddd2 100644
--- a/cpp/src/Ice/RouterInfo.h
+++ b/cpp/src/Ice/RouterInfo.h
@@ -16,6 +16,7 @@
#include <Ice/RouterF.h>
#include <Ice/ProxyF.h>
#include <Ice/EndpointIF.h>
+#include <Ice/BuiltinSequences.h>
#include <set>
@@ -47,6 +48,24 @@ class RouterInfo : public IceUtil::Shared, public IceUtil::Mutex
{
public:
+ class GetClientEndpointsCallback : virtual public IceUtil::Shared
+ {
+ public:
+
+ virtual void setEndpoints(const std::vector<EndpointIPtr>&) = 0;
+ virtual void setException(const Ice::LocalException&) = 0;
+ };
+ typedef IceUtil::Handle<GetClientEndpointsCallback> GetClientEndpointsCallbackPtr;
+
+ class AddProxyCallback : virtual public IceUtil::Shared
+ {
+ public:
+
+ virtual void addedProxy() = 0;
+ virtual void setException(const Ice::LocalException&) = 0;
+ };
+ typedef IceUtil::Handle<AddProxyCallback> AddProxyCallbackPtr;
+
RouterInfo(const Ice::RouterPrx&);
void destroy();
@@ -56,19 +75,27 @@ public:
bool operator<(const RouterInfo&) const;
Ice::RouterPrx getRouter() const;
- std::vector<IceInternal::EndpointIPtr> getClientEndpoints();
- std::vector<IceInternal::EndpointIPtr> getServerEndpoints();
+ std::vector<EndpointIPtr> getClientEndpoints();
+ void getClientEndpoints(const GetClientEndpointsCallbackPtr&);
+ std::vector<EndpointIPtr> getServerEndpoints();
void addProxy(const Ice::ObjectPrx&);
+ bool addProxy(const Ice::ObjectPrx&, const AddProxyCallbackPtr&);
+
void setAdapter(const Ice::ObjectAdapterPtr&);
Ice::ObjectAdapterPtr getAdapter() const;
private:
+ std::vector<EndpointIPtr> setClientEndpoints(const Ice::ObjectPrx&);
+ std::vector<EndpointIPtr> setServerEndpoints(const Ice::ObjectPrx&);
+ void addAndEvictProxies(const Ice::ObjectPrx&, const Ice::ObjectProxySeq&);
+
const Ice::RouterPrx _router;
- std::vector<IceInternal::EndpointIPtr> _clientEndpoints;
- std::vector<IceInternal::EndpointIPtr> _serverEndpoints;
+ std::vector<EndpointIPtr> _clientEndpoints;
+ std::vector<EndpointIPtr> _serverEndpoints;
Ice::ObjectAdapterPtr _adapter;
std::set<Ice::Identity> _identities;
+ std::multiset<Ice::Identity> _evictedIdentities;
};
}
diff --git a/cpp/src/Ice/Selector.cpp b/cpp/src/Ice/Selector.cpp
new file mode 100644
index 00000000000..5e82c2f7ee3
--- /dev/null
+++ b/cpp/src/Ice/Selector.cpp
@@ -0,0 +1,497 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2007 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/DisableWarnings.h>
+#include <Ice/Selector.h>
+#include <Ice/Network.h>
+#include <Ice/Instance.h>
+#include <Ice/LoggerUtil.h>
+
+using namespace std;
+using namespace Ice;
+using namespace IceInternal;
+
+IceInternal::Selector::Selector(const InstancePtr& instance, int timeout) :
+ _instance(instance),
+ _timeout(timeout)
+{
+#if defined(_WIN32)
+ _fdsInUse = 0;
+ FD_ZERO(&_readFdSet);
+ FD_ZERO(&_writeFdSet);
+ FD_ZERO(&_errorFdSet);
+#elif defined(ICE_USE_EPOLL)
+ _epollFd = epoll_create(1);
+ if(_epollFd < 0)
+ {
+ SocketException ex(__FILE__, __LINE__);
+ ex.error = getSocketErrno();
+ throw ex;
+ }
+#elif defined(__APPLE__)
+ _kqueueFd = kqueue();
+ if(_kqueueFd < 0)
+ {
+ SocketException ex(__FILE__, __LINE__);
+ ex.error = getSocketErrno();
+ throw ex;
+ }
+#endif
+
+ SOCKET fds[2];
+ createPipe(fds);
+ _fdIntrRead = fds[0];
+ _fdIntrWrite = fds[1];
+ setBlock(_fdIntrRead, false);
+ _maxFd = _fdIntrRead;
+ add(_fdIntrRead, NeedRead);
+#if defined(_WIN32)
+ ++_fdsInUse;
+#endif
+
+ _lastFd = _fdIntrRead;
+}
+
+IceInternal::Selector::~Selector()
+{
+#if defined(ICE_USE_EPOLL)
+ try
+ {
+ closeSocket(_epollFd);
+ }
+ catch(const LocalException& ex)
+ {
+ Error out(_instance->initializationData().logger);
+ out << "exception in selector while calling closeSocket():\n" << ex;
+ }
+#elif defined(__APPLE__)
+ try
+ {
+ closeSocket(_kqueueFd);
+ }
+ catch(const LocalException& ex)
+ {
+ Error out(_instance->initializationData().logger);
+ out << "exception in selector while calling closeSocket():\n" << ex;
+ }
+#endif
+
+
+ try
+ {
+ closeSocket(_fdIntrWrite);
+ }
+ catch(const LocalException& ex)
+ {
+ Error out(_instance->initializationData().logger);
+ out << "exception in selector while calling closeSocket():\n" << ex;
+ }
+
+ try
+ {
+ closeSocket(_fdIntrRead);
+ }
+ catch(const LocalException& ex)
+ {
+ Error out(_instance->initializationData().logger);
+ out << "exception in selector while calling closeSocket():\n" << ex;
+ }
+}
+
+void
+IceInternal::Selector::add(SOCKET fd, SocketStatus status)
+{
+ if(fd > _maxFd)
+ {
+ _maxFd = fd;
+ }
+#if defined(_WIN32)
+ switch(status)
+ {
+ case NeedRead:
+ FD_SET(fd, &_readFdSet);
+ break;
+ case NeedWrite:
+ FD_SET(fd, &_writeFdSet);
+ break;
+ case NeedConnect:
+ FD_SET(fd, &_writeFdSet);
+ FD_SET(fd, &_errorFdSet);
+ break;
+ case Finished:
+ assert(false);
+ }
+#elif defined(ICE_USE_EPOLL)
+ epoll_event event;
+ switch(status)
+ {
+ case NeedRead:
+ event.events = EPOLLIN;
+ break;
+ case NeedWrite:
+ case NeedConnect:
+ event.events = EPOLLOUT;
+ break;
+ case Finished:
+ assert(false);
+ }
+ event.data.fd = fd;
+ if(epoll_ctl(_epollFd, EPOLL_CTL_ADD, fd, &event) != 0)
+ {
+ Error out(_instance->initializationData().logger);
+ out << "error while adding filedescriptor to epoll set:\n";
+ out << errorToString(getSocketErrno());
+ }
+ _events.resize(_events.size() + 1);
+#elif defined(__APPLE__)
+ struct kevent event;
+ switch(status)
+ {
+ case NeedRead:
+ EV_SET(&event, fd, EVFILT_READ, EV_ADD, 0, 0, 0);
+ break;
+ case NeedWrite:
+ case NeedConnect:
+ EV_SET(&event, fd, EVFILT_WRITE, EV_ADD, 0, 0, 0);
+ break;
+ case Finished:
+ assert(false);
+ }
+ if(kevent(_kqueueFd, &event, 1, 0, 0, 0) < 0)
+ {
+ Error out(_instance->initializationData().logger);
+ out << "error while adding filedescriptor to kqueue:\n";
+ out << errorToString(getSocketErrno());
+ }
+ _events.resize(_events.size() + 1);
+#else
+ struct pollfd pollFd;
+ pollFd.fd = fd;
+ switch(status)
+ {
+ case NeedRead:
+ pollFd.events = POLLIN;
+ break;
+ case NeedWrite:
+ case NeedConnect:
+ pollFd.events = POLLOUT;
+ break;
+ case Finished:
+ assert(false);
+ }
+ _pollFdSet.push_back(pollFd);
+#endif
+}
+
+void
+Selector::remove(SOCKET fd, SocketStatus status)
+{
+#if defined(_WIN32)
+ switch(status)
+ {
+ case NeedRead:
+ FD_CLR(fd, &_readFdSet);
+ break;
+ case NeedWrite:
+ FD_CLR(fd, &_writeFdSet);
+ break;
+ case NeedConnect:
+ FD_CLR(fd, &_writeFdSet);
+ FD_CLR(fd, &_errorFdSet);
+ break;
+ case Finished:
+ assert(false);
+ }
+#elif defined(ICE_USE_EPOLL)
+ epoll_event event;
+ event.events = 0;
+ int rs = epoll_ctl(_epollFd, EPOLL_CTL_DEL, fd, &event);
+ if(rs < 0)
+ {
+ //
+ // It's possible for the socket to already be closed at this point.
+ //
+// Error out(_instance->initializationData().logger);
+// out << "error while removing filedescriptor from epoll set:\n";
+// out << errorToString(getSocketErrno());
+ }
+ _events.resize(_events.size() - 1);
+#elif defined(__APPLE__)
+ struct kevent event;
+ switch(status)
+ {
+ case NeedRead:
+ EV_SET(&event, fd, EVFILT_READ, EV_DELETE, 0, 0, 0);
+ break;
+ case NeedWrite:
+ case NeedConnect:
+ EV_SET(&event, fd, EVFILT_WRITE, EV_DELETE, 0, 0, 0);
+ break;
+ case Finished:
+ assert(false);
+ }
+ int rs = kevent(_kqueueFd, &event, 1, 0, 0, 0);
+ if(rs < 0)
+ {
+ //
+ // It's possible for the socket to already be closed at this point.
+ //
+// Error out(_instance->initializationData().logger);
+// out << "error while removing filedescriptor from kqueue:\n";
+// out << errorToString(getSocketErrno());
+ }
+ _events.resize(_events.size() - 1);
+#else
+ for(vector<struct pollfd>::iterator p = _pollFdSet.begin(); p != _pollFdSet.end(); ++p)
+ {
+ if(p->fd == fd)
+ {
+ _pollFdSet.erase(p);
+ break;
+ }
+ }
+#endif
+}
+
+SOCKET
+IceInternal::Selector::getNextSelected()
+{
+ assert(_nSelected > 0);
+ if(_nSelectedReturned == _nSelected)
+ {
+ return INVALID_SOCKET;
+ }
+
+ //
+ // Round robin for the filedescriptors.
+ //
+ SOCKET largerFd = _maxFd + 1;
+ SOCKET smallestFd = _maxFd + 1;
+#if defined(_WIN32)
+ if(_selectedReadFdSet.fd_count == 0 && _selectedWriteFdSet.fd_count == 0 && _selectedErrorFdSet.fd_count == 0)
+ {
+ Error out(_instance->initializationData().logger);
+ out << "select() in selector returned " << _nSelected << " but no filedescriptor is ready";
+ return INVALID_SOCKET;
+ }
+
+ const fd_set* fdSet;
+ if(_nSelectedReturned < _selectedReadFdSet.fd_count)
+ {
+ fdSet = &_selectedReadFdSet;
+ }
+ else if(_nSelectedReturned < _selectedWriteFdSet.fd_count + _selectedReadFdSet.fd_count)
+ {
+ fdSet = &_selectedWriteFdSet;
+ }
+ else
+ {
+ fdSet = &_selectedErrorFdSet;
+ }
+
+ for(u_short i = 0; i < fdSet->fd_count; ++i)
+ {
+ SOCKET fd = fdSet->fd_array[i];
+#elif defined(ICE_USE_EPOLL)
+ for(unsigned int i = 0; i < _nSelected; ++i)
+ {
+ SOCKET fd = _events[i].data.fd;
+#elif defined(__APPLE__)
+ for(unsigned int i = 0; i < _nSelected; ++i)
+ {
+ SOCKET fd = _events[i].ident;
+#else
+ for(vector<struct pollfd>::const_iterator p = _pollFdSet.begin(); p != _pollFdSet.end(); ++p)
+ {
+ if(p->revents == 0)
+ {
+ continue;
+ }
+ SOCKET fd = p->fd;
+#endif
+ assert(fd != INVALID_SOCKET);
+ if(fd > _lastFd)
+ {
+ largerFd = min(largerFd, fd);
+ }
+
+ smallestFd = min(smallestFd, fd);
+ }
+#ifdef never // To match ICE_USE_EPOLL __APPLE
+ }}}
+#endif
+
+ if(largerFd <= _maxFd)
+ {
+ _lastFd = largerFd;
+ }
+ else
+ {
+ assert(smallestFd <= _maxFd);
+ _lastFd = smallestFd;
+ }
+ ++_nSelectedReturned;
+ return _lastFd;
+}
+
+int
+IceInternal::Selector::select()
+{
+ while(true)
+ {
+ int ret;
+ _nSelectedReturned = 0;
+ _nSelected = 0;
+#if defined(_WIN32)
+ fd_set* rFdSet = fdSetCopy(_selectedReadFdSet, _readFdSet);
+ fd_set* wFdSet = fdSetCopy(_selectedWriteFdSet, _writeFdSet);
+ fd_set* eFdSet = fdSetCopy(_selectedErrorFdSet, _errorFdSet);
+
+ if(_timeout > 0)
+ {
+ struct timeval tv;
+ tv.tv_sec = _timeout;
+ tv.tv_usec = 0;
+ ret = ::select(0, rFdSet, wFdSet, eFdSet, &tv); // The first parameter is ignored on Windows
+ }
+ else
+ {
+ ret = ::select(0, rFdSet, wFdSet, eFdSet, 0); // The first parameter is ignored on Windows
+ }
+#elif defined(ICE_USE_EPOLL)
+ ret = epoll_wait(_epollFd, &_events[0], _events.size(), _timeout > 0 ? _timeout * 1000 : -1);
+#elif defined(__APPLE__)
+ assert(!_events.empty());
+ if(_timeout > 0)
+ {
+ struct timespec ts;
+ ts.tv_sec = _timeout;
+ ts.tv_nsec = 0;
+ ret = kevent(_kqueueFd, 0, 0, &_events[0], _events.size(), &ts);
+ }
+ else
+ {
+ ret = kevent(_kqueueFd, 0, 0, &_events[0], _events.size(), 0);
+ }
+#else
+ ret = poll(&_pollFdSet[0], _pollFdSet.size(), _timeout > 0 ? _timeout * 1000 : -1);
+#endif
+ if(ret == SOCKET_ERROR)
+ {
+ if(interrupted())
+ {
+ continue;
+ }
+
+ SocketException ex(__FILE__, __LINE__);
+ ex.error = getSocketErrno();
+ throw ex;
+ }
+
+ assert(ret >= 0);
+ _nSelected = static_cast<unsigned int>(ret);
+ if(_nSelected == 0)
+ {
+ assert(_timeout > 0);
+ _timeout = 0;
+ }
+ return _nSelected;
+ }
+}
+
+void
+IceInternal::Selector::setInterrupt()
+{
+ char c = 0;
+ while(true)
+ {
+#ifdef _WIN32
+ if(::send(_fdIntrWrite, &c, 1, 0) == SOCKET_ERROR)
+#else
+ if(::write(_fdIntrWrite, &c, 1) == SOCKET_ERROR)
+#endif
+ {
+ if(interrupted())
+ {
+ continue;
+ }
+
+ SocketException ex(__FILE__, __LINE__);
+ ex.error = getSocketErrno();
+ throw ex;
+ }
+ break;
+ }
+}
+
+void
+IceInternal::Selector::clearInterrupt()
+{
+ char c;
+
+ while(true)
+ {
+ ssize_t ret;
+#ifdef _WIN32
+ ret = ::recv(_fdIntrRead, &c, 1, 0);
+#else
+ ret = ::read(_fdIntrRead, &c, 1);
+#endif
+ if(ret == SOCKET_ERROR)
+ {
+ if(interrupted())
+ {
+ continue;
+ }
+
+ SocketException ex(__FILE__, __LINE__);
+ ex.error = getSocketErrno();
+ throw ex;
+ }
+ break;
+ }
+}
+
+#ifdef _WIN32
+void
+IceInternal::Selector::incFdsInUse()
+{
+ // This is windows specific since every other platform uses an API
+ // that doesn't have a specific FD limit.
+ if(_fdsInUse + 1 > FD_SETSIZE)
+ {
+ Warning warn(_instance->initializationData().logger);
+ warn << "maximum number of connections exceeded";
+
+ //
+ // No appropriate errno.
+ //
+ SocketException ex(__FILE__, __LINE__);
+ ex.error = 0;
+ throw ex;
+ }
+ ++_fdsInUse;
+}
+#endif
+
+#ifdef _WIN32
+void
+IceInternal::Selector::decFdsInUse()
+{
+ // This is windows specific since every other platform uses an API
+ // that doesn't have a specific FD limit.
+ if(_fdsInUse <= 1)
+ {
+ Trace trace(_instance->initializationData().logger, "ThreadPool");
+ trace << "selector: about to assert";
+ }
+ --_fdsInUse;
+}
+#endif
+
diff --git a/cpp/src/Ice/Selector.h b/cpp/src/Ice/Selector.h
new file mode 100644
index 00000000000..4d680f14302
--- /dev/null
+++ b/cpp/src/Ice/Selector.h
@@ -0,0 +1,137 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2007 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 ICE_SELECTOR_H
+#define ICE_SELECTOR_H
+
+#include <Ice/Config.h>
+#include <Ice/InstanceF.h>
+
+#if defined(_WIN32)
+# include <winsock2.h>
+#else
+# define SOCKET int
+# if defined(ICE_USE_EPOLL)
+# include <sys/epoll.h>
+# elif defined(__APPLE__)
+# include <sys/event.h>
+# else
+# include <sys/poll.h>
+# endif
+#endif
+
+
+namespace IceInternal
+{
+
+enum SocketStatus
+{
+ Finished,
+ NeedConnect,
+ NeedRead,
+ NeedWrite
+};
+
+class Selector
+{
+public:
+
+ Selector(const InstancePtr&, int = 0);
+ ~Selector();
+
+ void add(SOCKET, SocketStatus);
+ void remove(SOCKET, SocketStatus);
+
+ int select();
+ SOCKET getNextSelected();
+
+ bool isInterrupted()
+ {
+ assert(_nSelected > 0);
+#if defined(_WIN32)
+ return FD_ISSET(_fdIntrRead, &_selectedReadFdSet);
+#elif defined(ICE_USE_EPOLL)
+ for(unsigned int i = 0; i < _nSelected; ++i)
+ {
+ if(_events[i].data.fd == _fdIntrRead)
+ {
+ return true;
+ }
+ }
+ return false;
+#elif defined(__APPLE__)
+ for(unsigned int i = 0; i < _nSelected; ++i)
+ {
+ if(_events[i].ident == static_cast<unsigned int>(_fdIntrRead))
+ {
+ return true;
+ }
+ }
+ return false;
+#else
+ assert(_pollFdSet[0]->fd == _fdIntrRead);
+ return _pollFdSet[0]->revents != 0;
+#endif
+ }
+ void setInterrupt();
+ void clearInterrupt();
+
+ void updateMinMax(SOCKET minFd, SOCKET maxFd);
+ void clearMinMax();
+
+#if defined(_WIN32)
+ void incFdsInUse();
+ void decFdsInUse();
+#endif
+
+private:
+
+ InstancePtr _instance;
+ int _timeout;
+ SOCKET _maxFd;
+ SOCKET _lastFd;
+ unsigned int _nSelected;
+ unsigned int _nSelectedReturned;
+ SOCKET _fdIntrRead;
+ SOCKET _fdIntrWrite;
+#if defined(_WIN32)
+ fd_set _readFdSet;
+ fd_set _writeFdSet;
+ fd_set _errorFdSet;
+ fd_set _selectedReadFdSet;
+ fd_set _selectedWriteFdSet;
+ fd_set _selectedErrorFdSet;
+ int _fdsInUse;
+
+ fd_set*
+ fdSetCopy(fd_set& dest, fd_set& src)
+ {
+ if(src.fd_count > 0)
+ {
+ dest.fd_count = src.fd_count;
+ memcpy(dest.fd_array, src.fd_array, sizeof(SOCKET) * src.fd_count);
+ return &dest;
+ }
+ return 0;
+ }
+
+#elif defined(ICE_USE_EPOLL)
+ int _epollFd;
+ std::vector<struct epoll_event> _events;
+#elif defined(__APPLE__)
+ int _kqueueFd;
+ std::vector<struct kevent> _events;
+#else
+ std::vector<struct pollfd> _pollFdSet;
+#endif
+};
+
+}
+
+#endif
diff --git a/cpp/src/Ice/SelectorThread.cpp b/cpp/src/Ice/SelectorThread.cpp
new file mode 100644
index 00000000000..b0eb5007257
--- /dev/null
+++ b/cpp/src/Ice/SelectorThread.cpp
@@ -0,0 +1,309 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2007 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/DisableWarnings.h>
+#include <Ice/SelectorThread.h>
+#include <Ice/Network.h>
+#include <Ice/Instance.h>
+#include <Ice/LoggerUtil.h>
+
+using namespace std;
+using namespace Ice;
+using namespace IceInternal;
+
+IceUtil::Shared* IceInternal::upCast(SelectorThread* p) { return p; }
+
+IceInternal::SelectorThread::SelectorThread(const InstancePtr& instance) :
+ _instance(instance),
+ _destroyed(false),
+ _selector(instance),
+ _timer(_instance->timer())
+{
+
+ __setNoDelete(true);
+ try
+ {
+ _thread = new HelperThread(this);
+ _thread->start();
+ }
+ catch(const IceUtil::Exception& ex)
+ {
+ {
+ Error out(_instance->initializationData().logger);
+ out << "cannot create thread for selector thread:\n" << ex;
+ }
+ __setNoDelete(false);
+ throw;
+ }
+ catch(...)
+ {
+ __setNoDelete(false);
+ throw;
+ }
+ __setNoDelete(false);
+}
+
+IceInternal::SelectorThread::~SelectorThread()
+{
+ assert(_destroyed);
+}
+
+void
+IceInternal::SelectorThread::destroy()
+{
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ assert(!_destroyed);
+ _destroyed = true;
+ _selector.setInterrupt();
+}
+
+void
+IceInternal::SelectorThread::incFdsInUse()
+{
+ // This is windows specific since every other platform uses an API
+ // that doesn't have a specific FD limit.
+#ifdef _WIN32
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ assert(!_destroyed);
+ _selector.incFdsInUse();
+#endif
+}
+
+void
+IceInternal::SelectorThread::decFdsInUse()
+{
+ // This is windows specific since every other platform uses an API
+ // that doesn't have a specific FD limit.
+#ifdef _WIN32
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ assert(!_destroyed);
+ _selector.decFdsInUse();
+#endif
+}
+
+void
+IceInternal::SelectorThread::_register(SOCKET fd, const SocketReadyCallbackPtr& cb, SocketStatus status, int timeout)
+{
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ assert(!_destroyed); // The selector thread is destroyed after the incoming/outgoing connection factories.
+ assert(status != Finished);
+ SocketInfo info(fd, cb, status, timeout);
+ _changes.push_back(info);
+ if(info.timeout >= 0)
+ {
+ _timer->schedule(info.cb, IceUtil::Time::milliSeconds(info.timeout));
+ }
+ _selector.setInterrupt();
+}
+
+void
+IceInternal::SelectorThread::unregister(SOCKET fd)
+{
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ assert(!_destroyed); // The selector thread is destroyed after the incoming/outgoing connection factories.
+ _changes.push_back(SocketInfo(fd, 0, Finished, 0));
+ _selector.setInterrupt();
+}
+
+void
+IceInternal::SelectorThread::joinWithThread()
+{
+ assert(_destroyed);
+ if(_thread)
+ {
+ _thread->getThreadControl().join();
+ }
+}
+
+void
+IceInternal::SelectorThread::run()
+{
+ std::map<SOCKET, SocketInfo> socketMap;
+ vector<SocketInfo*> readyList;
+ vector<SocketInfo*> finishedList;
+ while(true)
+ {
+ try
+ {
+ _selector.select();
+ }
+ catch(const Ice::LocalException& ex)
+ {
+ Error out(_instance->initializationData().logger);
+ out << "exception in selector thread:\n" << ex;
+ continue;
+ }
+
+ assert(readyList.empty() && finishedList.empty());
+
+ {
+ if(_selector.isInterrupted())
+ {
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+
+ //
+ // There are two possiblities for an interrupt:
+ //
+ // 1. The selector thread has been destroyed.
+ // 2. A socket was registered or unregistered.
+ //
+
+ //
+ // Thread destroyed?
+ //
+ if(_destroyed)
+ {
+ break;
+ }
+
+ _selector.clearInterrupt();
+
+ SocketInfo& change = _changes.front();
+ if(change.cb) // Registration
+ {
+ _selector.add(change.fd, change.status);
+ assert(socketMap.find(change.fd) == socketMap.end());
+ socketMap.insert(make_pair(change.fd, change));
+ _maxFd = max(_maxFd, change.fd);
+ _minFd = min(_minFd, change.fd);
+ }
+ else // Unregistration
+ {
+ map<SOCKET, SocketInfo>::iterator r = socketMap.find(change.fd);
+ if(r != socketMap.end() && r->second.status != Finished)
+ {
+ if(r->second.timeout >= 0)
+ {
+ _timer->cancel(r->second.cb);
+ }
+ assert(r->second.status != Finished);
+ _selector.remove(r->second.fd, r->second.status);
+ r->second.status = Finished;
+ readyList.push_back(&(r->second));
+ }
+ }
+ _changes.pop_front();
+ }
+ else
+ {
+
+ //
+ // Examine the selection key set.
+ //
+ SOCKET fd;
+ while((fd = _selector.getNextSelected()) != INVALID_SOCKET)
+ {
+ map<SOCKET, SocketInfo>::iterator r = socketMap.find(fd);
+ if(r != socketMap.end())
+ {
+ if(r->second.timeout >= 0)
+ {
+ _timer->cancel(r->second.cb);
+ }
+
+ readyList.push_back(&(r->second));
+ }
+ }
+ }
+ }
+
+ for(vector<SocketInfo*>::iterator p = readyList.begin(); p != readyList.end(); ++p)
+ {
+ SocketInfo* info = *p;
+ SocketStatus status;
+ try
+ {
+ status = info->cb->socketReady(info->status == Finished);
+ }
+ catch(const std::exception& ex)
+ {
+ Error out(_instance->initializationData().logger);
+ out << "exception in selector thread while calling socketReady():\n" << ex.what();
+ status = Finished;
+ }
+ catch(...)
+ {
+ Error out(_instance->initializationData().logger);
+ out << "unknown exception in selector thread while calling socketReady()";
+ status = Finished;
+ }
+
+ if(status == Finished)
+ {
+ finishedList.push_back(info);
+ }
+ else if(status != info->status)
+ {
+ assert(info->status != Finished);
+ _selector.remove(info->fd, info->status);
+ info->status = status;
+ _selector.add(info->fd, info->status);
+ if(info->timeout >= 0)
+ {
+ _timer->schedule(info->cb, IceUtil::Time::milliSeconds(info->timeout));
+ }
+ }
+ }
+
+ readyList.clear();
+
+ if(finishedList.empty())
+ {
+ continue;
+ }
+
+ for(vector<SocketInfo*>::const_iterator p = finishedList.begin(); p != finishedList.end(); ++p)
+ {
+ if((*p)->status != Finished)
+ {
+ _selector.remove((*p)->fd, (*p)->status);
+ }
+ socketMap.erase((*p)->fd);
+ }
+ finishedList.clear();
+ }
+
+ assert(_destroyed);
+}
+
+IceInternal::SelectorThread::HelperThread::HelperThread(const SelectorThreadPtr& selectorThread) :
+ _selectorThread(selectorThread)
+{
+}
+
+void
+IceInternal::SelectorThread::HelperThread::run()
+{
+ if(_selectorThread->_instance->initializationData().threadHook)
+ {
+ _selectorThread->_instance->initializationData().threadHook->start();
+ }
+
+ try
+ {
+ _selectorThread->run();
+ }
+ catch(const std::exception& ex)
+ {
+ Error out(_selectorThread->_instance->initializationData().logger);
+ out << "exception in selector thread:\n" << ex.what();
+ }
+ catch(...)
+ {
+ Error out(_selectorThread->_instance->initializationData().logger);
+ out << "unknown exception in selector thread";
+ }
+
+ if(_selectorThread->_instance->initializationData().threadHook)
+ {
+ _selectorThread->_instance->initializationData().threadHook->stop();
+ }
+
+ _selectorThread = 0; // Break cyclic dependency.
+}
diff --git a/cpp/src/Ice/SelectorThread.h b/cpp/src/Ice/SelectorThread.h
new file mode 100644
index 00000000000..ccf5423984e
--- /dev/null
+++ b/cpp/src/Ice/SelectorThread.h
@@ -0,0 +1,137 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2007 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 ICE_SELECTOR_THREAD_H
+#define ICE_SELECTOR_THREAD_H
+
+#include <IceUtil/Shared.h>
+#include <IceUtil/Handle.h>
+#include <IceUtil/Mutex.h>
+#include <IceUtil/Monitor.h>
+#include <IceUtil/Thread.h>
+#include <IceUtil/Timer.h>
+
+#include <Ice/Config.h>
+#include <Ice/SelectorThreadF.h>
+#include <Ice/InstanceF.h>
+#include <Ice/Selector.h>
+
+#if defined(_WIN32)
+# include <winsock2.h>
+#else
+# define SOCKET int
+# if defined(ICE_USE_EPOLL)
+# include <sys/epoll.h>
+# elif defined(__APPLE__)
+# include <sys/event.h>
+# else
+# include <sys/poll.h>
+# endif
+#endif
+
+#include <deque>
+
+namespace IceInternal
+{
+
+class SocketReadyCallback : public IceUtil::TimerTask
+{
+public:
+
+ //
+ // The selector thread unregisters the callback when socketReady returns SocketStatus.Finished.
+ //
+ virtual SocketStatus socketReady(bool) = 0;
+
+ //
+ // The selector thread doesn't unregister the callback when sockectTimeout is called; socketTimeout
+ // must unregister the callback either explicitly with unregister() or by shutting down the socket
+ // (if necessary).
+ //
+ virtual void socketTimeout() = 0;
+
+private:
+
+ void
+ runTimerTask()
+ {
+ this->socketTimeout();
+ }
+
+ friend class SelectorThread;
+};
+typedef IceUtil::Handle<SocketReadyCallback> SocketReadyCallbackPtr;
+
+class SelectorThread : public IceUtil::Shared, public IceUtil::Monitor<IceUtil::Mutex>
+{
+public:
+
+ SelectorThread(const InstancePtr&);
+ virtual ~SelectorThread();
+
+ void destroy();
+
+ void incFdsInUse();
+ void decFdsInUse();
+
+ void _register(SOCKET, const SocketReadyCallbackPtr&, SocketStatus status, int timeout);
+ void unregister(SOCKET);
+ void joinWithThread();
+
+private:
+
+ void run();
+
+ struct SocketInfo
+ {
+ SOCKET fd;
+ SocketReadyCallbackPtr cb;
+ SocketStatus status;
+ int timeout;
+
+ SocketInfo(SOCKET fd, const SocketReadyCallbackPtr& cb, SocketStatus status, int timeout)
+ {
+ this->fd = fd;
+ this->cb = cb;
+ this->status = status;
+ this->timeout = timeout;
+ }
+ };
+
+ class HelperThread : public IceUtil::Thread
+ {
+ public:
+
+ HelperThread(const SelectorThreadPtr&);
+ virtual void run();
+
+ private:
+
+ SelectorThreadPtr _selectorThread;
+ };
+ friend class HelperThread;
+
+ InstancePtr _instance;
+ bool _destroyed;
+
+ SOCKET _maxFd;
+ SOCKET _minFd;
+ SOCKET _fdIntrRead;
+ SOCKET _fdIntrWrite;
+ Selector _selector;
+
+ std::deque<SocketInfo> _changes;
+
+ IceUtil::ThreadPtr _thread;
+ IceUtil::TimerPtr _timer;
+};
+
+}
+
+#endif
diff --git a/cpp/src/Ice/SelectorThreadF.h b/cpp/src/Ice/SelectorThreadF.h
new file mode 100644
index 00000000000..1e80b87a8b0
--- /dev/null
+++ b/cpp/src/Ice/SelectorThreadF.h
@@ -0,0 +1,26 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2007 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 ICE_SELECTOR_THREAD_F_H
+#define ICE_SELECTOR_THREAD_F_H
+
+#include <IceUtil/Shared.h>
+
+#include <Ice/Handle.h>
+
+namespace IceInternal
+{
+
+class SelectorThread;
+IceUtil::Shared* upCast(SelectorThread*);
+typedef Handle<SelectorThread> SelectorThreadPtr;
+
+}
+
+#endif
diff --git a/cpp/src/Ice/TcpAcceptor.cpp b/cpp/src/Ice/TcpAcceptor.cpp
index fd233738286..baa93aa594a 100644
--- a/cpp/src/Ice/TcpAcceptor.cpp
+++ b/cpp/src/Ice/TcpAcceptor.cpp
@@ -72,7 +72,7 @@ IceInternal::TcpAcceptor::accept(int timeout)
out << "accepted tcp connection\n" << fdToString(fd);
}
- return new TcpTransceiver(_instance, fd);
+ return new TcpTransceiver(_instance, fd, true);
}
void
diff --git a/cpp/src/Ice/TcpConnector.cpp b/cpp/src/Ice/TcpConnector.cpp
index 5979914fedd..a4394598ba9 100644
--- a/cpp/src/Ice/TcpConnector.cpp
+++ b/cpp/src/Ice/TcpConnector.cpp
@@ -32,15 +32,16 @@ IceInternal::TcpConnector::connect(int timeout)
SOCKET fd = createSocket(false);
setBlock(fd, false);
setTcpBufSize(fd, _instance->initializationData().properties, _logger);
- doConnect(fd, _addr, timeout);
-
- if(_traceLevels->network >= 1)
+ bool connected = doConnect(fd, _addr, timeout);
+ if(connected)
{
- Trace out(_logger, _traceLevels->networkCat);
- out << "tcp connection established\n" << fdToString(fd);
+ if(_traceLevels->network >= 1)
+ {
+ Trace out(_logger, _traceLevels->networkCat);
+ out << "tcp connection established\n" << fdToString(fd);
+ }
}
-
- return new TcpTransceiver(_instance, fd);
+ return new TcpTransceiver(_instance, fd, connected);
}
Short
@@ -118,21 +119,6 @@ IceInternal::TcpConnector::operator<(const Connector& r) const
return compareAddress(_addr, p->_addr) == -1;
}
-bool
-IceInternal::TcpConnector::equivalent(const string& host, int port) const
-{
- struct sockaddr_in addr;
- try
- {
- getAddress(host, port, addr);
- }
- catch(const DNSException&)
- {
- return false;
- }
- return compareAddress(addr, _addr) == 0;
-}
-
IceInternal::TcpConnector::TcpConnector(const InstancePtr& instance, const struct sockaddr_in& addr, Ice::Int timeout,
const string& connectionId) :
_instance(instance),
diff --git a/cpp/src/Ice/TcpConnector.h b/cpp/src/Ice/TcpConnector.h
index ae0bc1a72a8..2147f30cccc 100644
--- a/cpp/src/Ice/TcpConnector.h
+++ b/cpp/src/Ice/TcpConnector.h
@@ -16,8 +16,8 @@
#include <Ice/LoggerF.h>
#include <Ice/Connector.h>
-#ifdef _WIN32
-# include <winsock2.h>
+#ifdef _WIN32
+# include <winsock2.h>
#else
# include <netinet/in.h> // For struct sockaddr_in
#endif
@@ -30,6 +30,7 @@ class TcpConnector : public Connector
public:
virtual TransceiverPtr connect(int);
+
virtual Ice::Short type() const;
virtual std::string toString() const;
@@ -37,8 +38,6 @@ public:
virtual bool operator!=(const Connector&) const;
virtual bool operator<(const Connector&) const;
- bool equivalent(const std::string&, int) const;
-
private:
TcpConnector(const InstancePtr&, const struct sockaddr_in&, Ice::Int, const std::string&);
diff --git a/cpp/src/Ice/TcpEndpointI.cpp b/cpp/src/Ice/TcpEndpointI.cpp
index 073ece450a4..0cab29774ad 100644
--- a/cpp/src/Ice/TcpEndpointI.cpp
+++ b/cpp/src/Ice/TcpEndpointI.cpp
@@ -292,13 +292,13 @@ IceInternal::TcpEndpointI::transceiver(EndpointIPtr& endp) const
vector<ConnectorPtr>
IceInternal::TcpEndpointI::connectors() const
{
- vector<ConnectorPtr> connectors;
- vector<struct sockaddr_in> addresses = getAddresses(_host, _port);
- for(unsigned int i = 0; i < addresses.size(); ++i)
- {
- connectors.push_back(new TcpConnector(_instance, addresses[i], _timeout, _connectionId));
- }
- return connectors;
+ return connectors(getAddresses(_host, _port));
+}
+
+void
+IceInternal::TcpEndpointI::connectors_async(const EndpointI_connectorsPtr& callback) const
+{
+ _instance->endpointHostResolver()->resolve(_host, _port, const_cast<TcpEndpointI*>(this), callback);
}
AcceptorPtr
@@ -333,14 +333,14 @@ IceInternal::TcpEndpointI::expand() const
}
bool
-IceInternal::TcpEndpointI::equivalent(const ConnectorPtr& connector) const
+IceInternal::TcpEndpointI::equivalent(const EndpointIPtr& endpoint) const
{
- const TcpConnector* tcpConnector = dynamic_cast<const TcpConnector*>(connector.get());
- if(!tcpConnector)
+ const TcpEndpointI* tcpEndpointI = dynamic_cast<const TcpEndpointI*>(endpoint.get());
+ if(!tcpEndpointI)
{
return false;
}
- return tcpConnector->equivalent(_host, _port);
+ return tcpEndpointI->_host == _host && tcpEndpointI->_port == _port;
}
bool
@@ -453,6 +453,17 @@ IceInternal::TcpEndpointI::operator<(const EndpointI& r) const
return false;
}
+vector<ConnectorPtr>
+IceInternal::TcpEndpointI::connectors(const vector<struct sockaddr_in>& addresses) const
+{
+ vector<ConnectorPtr> connectors;
+ for(unsigned int i = 0; i < addresses.size(); ++i)
+ {
+ connectors.push_back(new TcpConnector(_instance, addresses[i], _timeout, _connectionId));
+ }
+ return connectors;
+}
+
IceInternal::TcpEndpointFactory::TcpEndpointFactory(const InstancePtr& instance)
: _instance(instance)
{
diff --git a/cpp/src/Ice/TcpEndpointI.h b/cpp/src/Ice/TcpEndpointI.h
index 7ea83d790d9..361d7150de8 100644
--- a/cpp/src/Ice/TcpEndpointI.h
+++ b/cpp/src/Ice/TcpEndpointI.h
@@ -39,9 +39,10 @@ public:
virtual bool unknown() const;
virtual TransceiverPtr transceiver(EndpointIPtr&) const;
virtual std::vector<ConnectorPtr> connectors() const;
+ virtual void connectors_async(const EndpointI_connectorsPtr&) const;
virtual AcceptorPtr acceptor(EndpointIPtr&, const std::string&) const;
virtual std::vector<EndpointIPtr> expand() const;
- virtual bool equivalent(const ConnectorPtr&) const;
+ virtual bool equivalent(const EndpointIPtr&) const;
virtual bool operator==(const EndpointI&) const;
virtual bool operator!=(const EndpointI&) const;
@@ -49,6 +50,8 @@ public:
private:
+ virtual std::vector<ConnectorPtr> connectors(const std::vector<struct sockaddr_in>&) const;
+
#if defined(__SUNPRO_CC)
//
// COMPILERFIX: prevent the compiler from emitting a warning about
diff --git a/cpp/src/Ice/TcpTransceiver.cpp b/cpp/src/Ice/TcpTransceiver.cpp
index 200778293c6..09f54e846fa 100644
--- a/cpp/src/Ice/TcpTransceiver.cpp
+++ b/cpp/src/Ice/TcpTransceiver.cpp
@@ -52,6 +52,11 @@ IceInternal::TcpTransceiver::close()
void
IceInternal::TcpTransceiver::shutdownWrite()
{
+ if(_state < StateConnected)
+ {
+ return;
+ }
+
if(_traceLevels->network >= 2)
{
Trace out(_logger, _traceLevels->networkCat);
@@ -65,6 +70,11 @@ IceInternal::TcpTransceiver::shutdownWrite()
void
IceInternal::TcpTransceiver::shutdownReadWrite()
{
+ if(_state < StateConnected)
+ {
+ return;
+ }
+
if(_traceLevels->network >= 2)
{
Trace out(_logger, _traceLevels->networkCat);
@@ -75,7 +85,7 @@ IceInternal::TcpTransceiver::shutdownReadWrite()
shutdownSocketReadWrite(_fd);
}
-void
+bool
IceInternal::TcpTransceiver::write(Buffer& buf, int timeout)
{
// Its impossible for the packetSize to be more than an Int.
@@ -118,6 +128,11 @@ IceInternal::TcpTransceiver::write(Buffer& buf, int timeout)
if(wouldBlock())
{
+ if(timeout == 0)
+ {
+ return false;
+ }
+
repeatSelect:
int rs;
@@ -194,9 +209,11 @@ IceInternal::TcpTransceiver::write(Buffer& buf, int timeout)
packetSize = static_cast<int>(buf.b.end() - buf.i);
}
}
+
+ return true;
}
-void
+bool
IceInternal::TcpTransceiver::read(Buffer& buf, int timeout)
{
// Its impossible for the packetSize to be more than an Int.
@@ -240,6 +257,11 @@ IceInternal::TcpTransceiver::read(Buffer& buf, int timeout)
if(wouldBlock())
{
+ if(timeout == 0)
+ {
+ return false;
+ }
+
repeatSelect:
int rs;
@@ -324,6 +346,8 @@ IceInternal::TcpTransceiver::read(Buffer& buf, int timeout)
packetSize = static_cast<int>(buf.b.end() - buf.i);
}
}
+
+ return true;
}
string
@@ -338,9 +362,27 @@ IceInternal::TcpTransceiver::toString() const
return _desc;
}
-void
-IceInternal::TcpTransceiver::initialize(int)
+SocketStatus
+IceInternal::TcpTransceiver::initialize(int timeout)
{
+ if(_state == StateNeedConnect && timeout == 0)
+ {
+ _state = StateConnectPending;
+ return NeedConnect;
+ }
+ else if(_state <= StateConnectPending)
+ {
+ doFinishConnect(_fd, timeout);
+ _state = StateConnected;
+ _desc = fdToString(_fd);
+ if(_traceLevels->network >= 1)
+ {
+ Trace out(_logger, _traceLevels->networkCat);
+ out << "tcp connection established\n" << _desc;
+ }
+ }
+ assert(_state == StateConnected);
+ return Finished;
}
void
@@ -352,12 +394,13 @@ IceInternal::TcpTransceiver::checkSendSize(const Buffer& buf, size_t messageSize
}
}
-IceInternal::TcpTransceiver::TcpTransceiver(const InstancePtr& instance, SOCKET fd) :
+IceInternal::TcpTransceiver::TcpTransceiver(const InstancePtr& instance, SOCKET fd, bool connected) :
_traceLevels(instance->traceLevels()),
_logger(instance->initializationData().logger),
_stats(instance->initializationData().stats),
_fd(fd),
- _desc(fdToString(fd))
+ _state(connected ? StateConnected : StateNeedConnect),
+ _desc(fdToString(_fd))
{
FD_ZERO(&_rFdSet);
FD_ZERO(&_wFdSet);
diff --git a/cpp/src/Ice/TcpTransceiver.h b/cpp/src/Ice/TcpTransceiver.h
index fe4f78d1724..e86464df408 100644
--- a/cpp/src/Ice/TcpTransceiver.h
+++ b/cpp/src/Ice/TcpTransceiver.h
@@ -24,22 +24,29 @@ class TcpAcceptor;
class TcpTransceiver : public Transceiver
{
+ enum State
+ {
+ StateNeedConnect,
+ StateConnectPending,
+ StateConnected
+ };
+
public:
virtual SOCKET fd();
virtual void close();
virtual void shutdownWrite();
virtual void shutdownReadWrite();
- virtual void write(Buffer&, int);
- virtual void read(Buffer&, int);
+ virtual bool write(Buffer&, int);
+ virtual bool read(Buffer&, int);
virtual std::string type() const;
virtual std::string toString() const;
- virtual void initialize(int);
+ virtual SocketStatus initialize(int);
virtual void checkSendSize(const Buffer&, size_t);
private:
- TcpTransceiver(const InstancePtr&, SOCKET);
+ TcpTransceiver(const InstancePtr&, SOCKET, bool);
virtual ~TcpTransceiver();
friend class TcpConnector;
friend class TcpAcceptor;
@@ -51,8 +58,8 @@ private:
SOCKET _fd;
fd_set _rFdSet;
fd_set _wFdSet;
-
- const std::string _desc;
+ State _state;
+ std::string _desc;
#ifdef _WIN32
int _maxPacketSize;
#endif
diff --git a/cpp/src/Ice/ThreadPool.cpp b/cpp/src/Ice/ThreadPool.cpp
index 9d2cd3bff6a..3f192fe2e7e 100644
--- a/cpp/src/Ice/ThreadPool.cpp
+++ b/cpp/src/Ice/ThreadPool.cpp
@@ -29,8 +29,7 @@ IceInternal::ThreadPool::ThreadPool(const InstancePtr& instance, const string& p
_instance(instance),
_destroyed(false),
_prefix(prefix),
- _lastFd(INVALID_SOCKET),
- _timeout(timeout),
+ _selector(instance, timeout),
_size(0),
_sizeMax(0),
_sizeWarn(0),
@@ -41,59 +40,6 @@ IceInternal::ThreadPool::ThreadPool(const InstancePtr& instance, const string& p
_promote(true),
_warnUdp(_instance->initializationData().properties->getPropertyAsInt("Ice.Warn.Datagrams") > 0)
{
- SOCKET fds[2];
- createPipe(fds);
- _fdIntrRead = fds[0];
- _fdIntrWrite = fds[1];
- setBlock(_fdIntrRead, false);
- _maxFd = _fdIntrRead;
- _minFd = _fdIntrRead;
-
-#if defined(_WIN32)
- _fdsInUse = 1; // _fdIntrRead is always in use.
- FD_ZERO(&_fdSet);
- FD_SET(_fdIntrRead, &_fdSet);
-#elif defined(ICE_USE_EPOLL)
- _epollFd = epoll_create(1);
- if(_epollFd < 0)
- {
- SocketException ex(__FILE__, __LINE__);
- ex.error = getSocketErrno();
- throw ex;
- }
- _events.resize(1);
- struct epoll_event event;
- event.events = EPOLLIN;
- event.data.fd = _fdIntrRead;
- if(epoll_ctl(_epollFd, EPOLL_CTL_ADD, _fdIntrRead, &event) != 0)
- {
- SocketException ex(__FILE__, __LINE__);
- ex.error = getSocketErrno();
- throw ex;
- }
-#elif defined(__APPLE__)
- _kqueueFd = kqueue();
- if(_kqueueFd < 0)
- {
- SocketException ex(__FILE__, __LINE__);
- ex.error = getSocketErrno();
- throw ex;
- }
- _events.resize(1);
- struct kevent event;
- EV_SET(&event, _fdIntrRead, EVFILT_READ, EV_ADD, 0, 0, 0);
- if(kevent(_kqueueFd, &event, 1, 0, 0, 0) < 0)
- {
- SocketException ex(__FILE__, __LINE__);
- ex.error = getSocketErrno();
- throw ex;
- }
-#else
- _pollFdSet.resize(1);
- _pollFdSet[0].fd = _fdIntrRead;
- _pollFdSet[0].events = POLLIN;
-#endif
-
//
// We use just one thread as the default. This is the fastest
// possible setting, still allows one level of nesting, and
@@ -172,48 +118,6 @@ IceInternal::ThreadPool::ThreadPool(const InstancePtr& instance, const string& p
IceInternal::ThreadPool::~ThreadPool()
{
assert(_destroyed);
-
- try
- {
- closeSocket(_fdIntrWrite);
- }
- catch(const LocalException& ex)
- {
- Error out(_instance->initializationData().logger);
- out << "exception in `" << _prefix << "' while calling closeSocket():\n" << ex;
- }
-
- try
- {
- closeSocket(_fdIntrRead);
- }
- catch(const LocalException& ex)
- {
- Error out(_instance->initializationData().logger);
- out << "exception in `" << _prefix << "' while calling closeSocket():\n" << ex;
- }
-
-#if defined(ICE_USE_EPOLL)
- try
- {
- closeSocket(_epollFd);
- }
- catch(const LocalException& ex)
- {
- Error out(_instance->initializationData().logger);
- out << "exception in `" << _prefix << "' while calling closeSocket():\n" << ex;
- }
-#elif defined(__APPLE__)
- try
- {
- closeSocket(_kqueueFd);
- }
- catch(const LocalException& ex)
- {
- Error out(_instance->initializationData().logger);
- out << "exception in `" << _prefix << "' while calling closeSocket():\n" << ex;
- }
-#endif
}
void
@@ -223,8 +127,9 @@ IceInternal::ThreadPool::destroy()
assert(!_destroyed);
assert(_handlerMap.empty());
assert(_changes.empty());
+ assert(_workItems.empty());
_destroyed = true;
- setInterrupt();
+ _selector.setInterrupt();
}
void
@@ -234,20 +139,7 @@ IceInternal::ThreadPool::incFdsInUse()
// that doesn't have a specific FD limit.
#ifdef _WIN32
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
- assert(!_destroyed);
- if(_fdsInUse + 1 > FD_SETSIZE)
- {
- Warning warn(_instance->initializationData().logger);
- warn << "maximum number of connections exceeded";
-
- //
- // No appropriate errno.
- //
- SocketException ex(__FILE__, __LINE__);
- ex.error = 0;
- throw ex;
- }
- ++_fdsInUse;
+ _selector.incFdsInUse();
#endif
}
@@ -258,14 +150,7 @@ IceInternal::ThreadPool::decFdsInUse()
// that doesn't have a specific FD limit.
#ifdef _WIN32
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
- assert(!_destroyed);
- if(_fdsInUse <= 1)
- {
- Trace trace(_instance->initializationData().logger, "ThreadPool");
- trace << _prefix << ": about to assert";
- }
- assert(_fdsInUse > 1); // _fdIntrRead is always in use.
- --_fdsInUse;
+ _selector.decFdsInUse();
#endif
}
@@ -275,7 +160,7 @@ IceInternal::ThreadPool::_register(SOCKET fd, const EventHandlerPtr& handler)
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
assert(!_destroyed);
_changes.push_back(make_pair(fd, handler));
- setInterrupt();
+ _selector.setInterrupt();
}
void
@@ -284,7 +169,16 @@ IceInternal::ThreadPool::unregister(SOCKET fd)
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
assert(!_destroyed);
_changes.push_back(make_pair(fd, EventHandlerPtr(0)));
- setInterrupt();
+ _selector.setInterrupt();
+}
+
+void
+IceInternal::ThreadPool::execute(const ThreadPoolWorkItemPtr& workItem)
+{
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ assert(!_destroyed);
+ _workItems.push_back(workItem);
+ _selector.setInterrupt();
}
void
@@ -352,74 +246,6 @@ IceInternal::ThreadPool::prefix() const
return _prefix;
}
-void
-IceInternal::ThreadPool::clearInterrupt()
-{
- char c;
-
-repeat:
-
-#ifdef _WIN32
- if(::recv(_fdIntrRead, &c, 1, 0) == SOCKET_ERROR)
- {
- if(interrupted())
- {
- goto repeat;
- }
-
- SocketException ex(__FILE__, __LINE__);
- ex.error = getSocketErrno();
- throw ex;
- }
-#else
- if(::read(_fdIntrRead, &c, 1) == -1)
- {
- if(interrupted())
- {
- goto repeat;
- }
-
- SyscallException ex(__FILE__, __LINE__);
- ex.error = getSystemErrno();
- throw ex;
- }
-#endif
-}
-
-void
-IceInternal::ThreadPool::setInterrupt()
-{
- char c = 0;
-
-repeat:
-
-#ifdef _WIN32
- if(::send(_fdIntrWrite, &c, 1, 0) == SOCKET_ERROR)
- {
- if(interrupted())
- {
- goto repeat;
- }
-
- SocketException ex(__FILE__, __LINE__);
- ex.error = getSocketErrno();
- throw ex;
- }
-#else
- if(::write(_fdIntrWrite, &c, 1) == -1)
- {
- if(interrupted())
- {
- goto repeat;
- }
-
- SyscallException ex(__FILE__, __LINE__);
- ex.error = getSystemErrno();
- throw ex;
- }
-#endif
-}
-
bool
IceInternal::ThreadPool::run()
{
@@ -440,54 +266,19 @@ IceInternal::ThreadPool::run()
while(true)
{
int ret;
-#if defined(_WIN32)
- fd_set fdSet;
- memcpy(&fdSet, &_fdSet, sizeof(fd_set));
- if(_timeout > 0)
- {
- struct timeval tv;
- tv.tv_sec = _timeout;
- tv.tv_usec = 0;
- ret = ::select(static_cast<int>(_maxFd + 1), &fdSet, 0, 0, &tv);
- }
- else
- {
- ret = ::select(static_cast<int>(_maxFd + 1), &fdSet, 0, 0, 0);
- }
-#elif defined(ICE_USE_EPOLL)
- ret = epoll_wait(_epollFd, &_events[0], _events.size(), _timeout > 0 ? _timeout * 1000 : -1);
-#elif defined(__APPLE__)
- if(_timeout > 0)
+ try
{
- struct timespec ts;
- ts.tv_sec = _timeout;
- ts.tv_nsec = 0;
- ret = kevent(_kqueueFd, 0, 0, &_events[0], _events.size(), &ts);
+ ret = _selector.select();
}
- else
+ catch(const Ice::LocalException& ex)
{
- ret = kevent(_kqueueFd, 0, 0, &_events[0], _events.size(), 0);
- }
-#else
- ret = poll(&_pollFdSet[0], _pollFdSet.size(), _timeout > 0 ? _timeout * 1000 : -1);
-#endif
-
- if(ret == SOCKET_ERROR)
- {
- if(interrupted())
- {
- continue;
- }
-
- SocketException ex(__FILE__, __LINE__);
- ex.error = getSocketErrno();
- //throw ex;
Error out(_instance->initializationData().logger);
out << "exception in `" << _prefix << "':\n" << ex;
continue;
}
-
+
EventHandlerPtr handler;
+ ThreadPoolWorkItemPtr workItem;
bool finished = false;
bool shutdown = false;
@@ -496,38 +287,11 @@ IceInternal::ThreadPool::run()
if(ret == 0) // We initiate a shutdown if there is a thread pool timeout.
{
- assert(_timeout > 0);
- _timeout = 0;
shutdown = true;
}
else
{
- bool interrupted = false;
-#if defined(_WIN32)
- interrupted = FD_ISSET(_fdIntrRead, &fdSet);
-#elif defined(ICE_USE_EPOLL)
- for(int i = 0; i < ret; ++i)
- {
- if(_events[i].data.fd == _fdIntrRead)
- {
- interrupted = true;
- break;
- }
- }
-#elif defined(__APPLE__)
- for(int i = 0; i < ret; ++i)
- {
- if(_events[i].ident == static_cast<unsigned int>(_fdIntrRead))
- {
- interrupted = true;
- break;
- }
- }
-#else
- assert(_pollFdSet[0].fd == _fdIntrRead);
- interrupted = _pollFdSet[0].revents != 0;
-#endif
- if(interrupted)
+ if(_selector.isInterrupted())
{
//
// There are two possiblities for an interrupt:
@@ -536,7 +300,9 @@ IceInternal::ThreadPool::run()
//
// 2. An event handler was registered or unregistered.
//
-
+ // 3. A work item has been schedulded.
+ //
+
//
// Thread pool destroyed?
//
@@ -549,169 +315,52 @@ IceInternal::ThreadPool::run()
return true;
}
- clearInterrupt();
+ _selector.clearInterrupt();
//
// An event handler must have been registered or
// unregistered.
//
- assert(!_changes.empty());
- pair<SOCKET, EventHandlerPtr> change = _changes.front();
- _changes.pop_front();
-
- if(change.second) // Addition if handler is set.
+ if(_changes.empty())
{
- _handlerMap.insert(change);
-#if defined(_WIN32)
- FD_SET(change.first, &_fdSet);
-#elif defined(ICE_USE_EPOLL)
- epoll_event event;
- event.events = EPOLLIN;
- event.data.fd = change.first;
- if(epoll_ctl(_epollFd, EPOLL_CTL_ADD, change.first, &event) != 0)
- {
- Error out(_instance->initializationData().logger);
- out << "error while adding filedescriptor to epoll set:\n";
- out << errorToString(getSocketErrno());
- continue;
- }
- _events.resize(_handlerMap.size() + 1);
-#elif defined(__APPLE__)
- struct kevent event;
- EV_SET(&event, change.first, EVFILT_READ, EV_ADD, 0, 0, 0);
- if(kevent(_kqueueFd, &event, 1, 0, 0, 0) < 0)
- {
- Error out(_instance->initializationData().logger);
- out << "error while adding filedescriptor to kqueue:\n";
- out << errorToString(getSocketErrno());
- continue;
- }
- _events.resize(_handlerMap.size() + 1);
-#else
- struct pollfd pollFd;
- pollFd.fd = change.first;
- pollFd.events = POLLIN;
- _pollFdSet.push_back(pollFd);
-#endif
- _maxFd = max(_maxFd, change.first);
- _minFd = min(_minFd, change.first);
- continue;
+ assert(!_workItems.empty());
+ workItem = _workItems.front();
+ _workItems.pop_front();
}
- else // Removal if handler is not set.
+ else
{
- map<SOCKET, EventHandlerPtr>::iterator p = _handlerMap.find(change.first);
- assert(p != _handlerMap.end());
- handler = p->second;
- finished = true;
- _handlerMap.erase(p);
-#if defined(_WIN32)
- FD_CLR(change.first, &_fdSet);
-#elif defined(ICE_USE_EPOLL)
- epoll_event event;
- event.events = 0;
- if(epoll_ctl(_epollFd, EPOLL_CTL_DEL, change.first, &event) != 0)
+ assert(!_changes.empty());
+ pair<SOCKET, EventHandlerPtr> change = _changes.front();
+ _changes.pop_front();
+
+ if(change.second) // Addition if handler is set.
{
- Error out(_instance->initializationData().logger);
- out << "error while adding filedescriptor from epoll set:\n";
- out << errorToString(getSocketErrno());
+ _handlerMap.insert(change);
+ _selector.add(change.first, NeedRead);
continue;
}
- _events.resize(_handlerMap.size() + 1);
-#elif defined(__APPLE__)
- struct kevent event;
- EV_SET(&event, change.first, EVFILT_READ, EV_DELETE, 0, 0, 0);
- if(kevent(_kqueueFd, &event, 1, 0, 0, 0) < 0)
- {
- Error out(_instance->initializationData().logger);
- out << "error while removing filedescriptor from kqueue:\n";
- out << errorToString(getSocketErrno());
- continue;
- }
- _events.resize(_handlerMap.size() + 1);
-#else
- for(vector<struct pollfd>::iterator p = _pollFdSet.begin(); p != _pollFdSet.end(); ++p)
- {
- if(p->fd == change.first)
- {
- _pollFdSet.erase(p);
- break;
- }
- }
-#endif
- _maxFd = _fdIntrRead;
- _minFd = _fdIntrRead;
- if(!_handlerMap.empty())
+ else // Removal if handler is not set.
{
- _maxFd = max(_maxFd, (--_handlerMap.end())->first);
- _minFd = min(_minFd, _handlerMap.begin()->first);
+ map<SOCKET, EventHandlerPtr>::iterator p = _handlerMap.find(change.first);
+ assert(p != _handlerMap.end());
+ handler = p->second;
+ finished = true;
+ _handlerMap.erase(p);
+ _selector.remove(change.first, NeedRead);
+ // Don't continue; we have to call
+ // finished() on the event handler below, outside
+ // the thread synchronization.
}
- // Don't continue; we have to call
- // finished() on the event handler below, outside
- // the thread synchronization.
}
}
else
{
- //
- // Round robin for the filedescriptors.
- //
- SOCKET largerFd = _maxFd + 1;
- SOCKET smallestFd = _maxFd + 1;
-#if defined(_WIN32)
- if(fdSet.fd_count == 0)
- {
- Error out(_instance->initializationData().logger);
- out << "select() in `" << _prefix << "' returned " << ret
- << " but no filedescriptor is readable";
- continue;
- }
- for(u_short i = 0; i < fdSet.fd_count; ++i)
- {
- SOCKET fd = fdSet.fd_array[i];
-#elif defined(ICE_USE_EPOLL)
- for(int i = 0; i < ret; ++i)
- {
- SOCKET fd = _events[i].data.fd;
-#elif defined(__APPLE__)
- for(int i = 0; i < ret; ++i)
- {
- SOCKET fd = _events[i].ident;
-#else
- for(vector<struct pollfd>::const_iterator p = _pollFdSet.begin(); p != _pollFdSet.end(); ++p)
- {
- if(p->revents == 0)
- {
- continue;
- }
- SOCKET fd = p->fd;
-#endif
- assert(fd != INVALID_SOCKET);
- if(fd > _lastFd || _lastFd == INVALID_SOCKET)
- {
- largerFd = min(largerFd, fd);
- }
-
- smallestFd = min(smallestFd, fd);
- }
-#ifdef never // To match ICE_USE_EPOLL __APPLE
- }}}
-#endif
- if(largerFd <= _maxFd)
- {
- assert(largerFd >= _minFd);
- _lastFd = largerFd;
- }
- else
- {
- assert(smallestFd >= _minFd && smallestFd <= _maxFd);
- _lastFd = smallestFd;
- }
- assert(_lastFd != _fdIntrRead);
- map<SOCKET, EventHandlerPtr>::iterator p = _handlerMap.find(_lastFd);
+ SOCKET fd = _selector.getNextSelected();
+ map<SOCKET, EventHandlerPtr>::iterator p = _handlerMap.find(fd);
if(p == _handlerMap.end())
{
Error out(_instance->initializationData().logger);
- out << "filedescriptor " << _lastFd << " not registered with `" << _prefix << "'";
+ out << "filedescriptor " << fd << " not registered with `" << _prefix << "'";
continue;
}
@@ -747,6 +396,29 @@ IceInternal::ThreadPool::run()
// promoteFollower().
//
}
+ else if(workItem)
+ {
+ try
+ {
+ //
+ // "self" is faster than "this", as the reference
+ // count is not modified.
+ //
+ workItem->execute(self);
+ }
+ catch(const LocalException& ex)
+ {
+ Error out(_instance->initializationData().logger);
+ out << "exception in `" << _prefix << "' while calling execute():\n" << ex;
+ }
+
+ //
+ // No "continue", because we want execute() to be
+ // called in its own thread from this pool. Note that
+ // this means that execute() must call
+ // promoteFollower().
+ //
+ }
else
{
assert(handler);
@@ -790,10 +462,14 @@ IceInternal::ThreadPool::run()
{
try
{
- read(handler);
+ if(!read(handler))
+ {
+ continue; // Can't read without blocking.
+ }
}
- catch(const TimeoutException&) // Expected.
+ catch(const TimeoutException&)
{
+ assert(false); // This shouldn't occur as we only perform non-blocking reads.
continue;
}
catch(const DatagramLimitException&) // Expected.
@@ -809,8 +485,7 @@ IceInternal::ThreadPool::run()
{
if(handler->datagram())
{
- if(_instance->initializationData().properties->
- getPropertyAsInt("Ice.Warn.Connections") > 0)
+ if(_instance->initializationData().properties->getPropertyAsInt("Ice.Warn.Connections") > 0)
{
Warning out(_instance->initializationData().logger);
out << "datagram connection exception:\n" << ex << '\n' << handler->toString();
@@ -939,7 +614,7 @@ IceInternal::ThreadPool::run()
}
}
-void
+bool
IceInternal::ThreadPool::read(const EventHandlerPtr& handler)
{
BasicStream& stream = handler->_stream;
@@ -952,7 +627,10 @@ IceInternal::ThreadPool::read(const EventHandlerPtr& handler)
if(stream.i != stream.b.end())
{
- handler->read(stream);
+ if(!handler->read(stream))
+ {
+ return false;
+ }
assert(stream.i == stream.b.end());
}
@@ -1036,10 +714,15 @@ IceInternal::ThreadPool::read(const EventHandlerPtr& handler)
}
else
{
- handler->read(stream);
+ if(!handler->read(stream))
+ {
+ return false;
+ }
assert(stream.i == stream.b.end());
}
}
+
+ return true;
}
IceInternal::ThreadPool::EventHandlerThread::EventHandlerThread(const ThreadPoolPtr& pool) :
diff --git a/cpp/src/Ice/ThreadPool.h b/cpp/src/Ice/ThreadPool.h
index 7f7aae48e19..9e520d60ec9 100644
--- a/cpp/src/Ice/ThreadPool.h
+++ b/cpp/src/Ice/ThreadPool.h
@@ -15,31 +15,15 @@
#include <IceUtil/Monitor.h>
#include <IceUtil/Thread.h>
+#include <Ice/Config.h>
#include <Ice/ThreadPoolF.h>
#include <Ice/InstanceF.h>
#include <Ice/LoggerF.h>
#include <Ice/PropertiesF.h>
#include <Ice/EventHandlerF.h>
+#include <Ice/Selector.h>
#include <list>
-#if defined(__linux) && !defined(ICE_NO_EPOLL)
-# define ICE_USE_EPOLL 1
-#endif
-
-#if defined(_WIN32)
-# include <winsock2.h>
-#else
-# define SOCKET int
-# if defined(ICE_USE_EPOLL)
-# include <sys/epoll.h>
-# elif defined(__APPLE__)
-# include <sys/event.h>
-# else
-# include <sys/poll.h>
-# endif
-#endif
-
-
namespace IceInternal
{
@@ -59,6 +43,7 @@ public:
void _register(SOCKET, const EventHandlerPtr&);
void unregister(SOCKET);
+ void execute(const ThreadPoolWorkItemPtr&);
void promoteFollower();
void joinWithAllThreads();
@@ -66,40 +51,19 @@ public:
private:
- void clearInterrupt();
- void setInterrupt();
-
bool run(); // Returns true if a follower should be promoted.
- void read(const EventHandlerPtr&);
+ bool read(const EventHandlerPtr&);
InstancePtr _instance;
bool _destroyed;
const std::string _prefix;
- SOCKET _maxFd;
- SOCKET _minFd;
- SOCKET _lastFd;
- SOCKET _fdIntrRead;
- SOCKET _fdIntrWrite;
-#if defined(_WIN32)
- fd_set _fdSet;
- int _fdsInUse;
-#elif defined(ICE_USE_EPOLL)
- int _epollFd;
- std::vector<struct epoll_event> _events;
-#elif defined(__APPLE__)
- int _kqueueFd;
- std::vector<struct kevent> _events;
-#else
- std::vector<struct pollfd> _pollFdSet;
-#endif
+ Selector _selector;
std::list<std::pair<SOCKET, EventHandlerPtr> > _changes; // Event handler set for addition; null for removal.
-
+ std::list<ThreadPoolWorkItemPtr> _workItems;
std::map<SOCKET, EventHandlerPtr> _handlerMap;
- int _timeout;
-
class EventHandlerThread : public IceUtil::Thread
{
public:
diff --git a/cpp/src/Ice/TraceUtil.cpp b/cpp/src/Ice/TraceUtil.cpp
index cb371f4e35a..b8c4d1f10b1 100644
--- a/cpp/src/Ice/TraceUtil.cpp
+++ b/cpp/src/Ice/TraceUtil.cpp
@@ -44,6 +44,26 @@ printIdentityFacetOperation(ostream& s, BasicStream& stream)
s << "\noperation = " << operation;
}
+static string
+getMessageTypeAsString(Byte type)
+{
+ switch(type)
+ {
+ case requestMsg:
+ return "request";
+ case requestBatchMsg:
+ return "batch request";
+ case replyMsg:
+ return "reply";
+ case closeConnectionMsg:
+ return "close connection";
+ case validateConnectionMsg:
+ return "validate connection";
+ default:
+ return "unknown";
+ }
+}
+
static void
printRequestHeader(ostream& s, BasicStream& stream)
{
@@ -95,7 +115,7 @@ printRequestHeader(ostream& s, BasicStream& stream)
}
}
-static void
+static Byte
printHeader(ostream& s, BasicStream& stream)
{
Byte magicNumber;
@@ -120,105 +140,238 @@ printHeader(ostream& s, BasicStream& stream)
Byte type;
stream.read(type);
- s << "\nmessage type = " << static_cast<int>(type) << ' ';
+ s << "\nmessage type = " << static_cast<int>(type) << " (" << getMessageTypeAsString(type) << ')';
- switch(type)
+ Byte compress;
+ stream.read(compress);
+ s << "\ncompression status = " << static_cast<int>(compress) << ' ';
+
+ switch(compress)
{
- case requestMsg:
+ case 0:
{
- s << "(request)";
+ s << "(not compressed; do not compress response, if any)";
break;
}
- case requestBatchMsg:
+ case 1:
{
- s << "(batch request)";
+ s << "(not compressed; compress response, if any)";
break;
}
- case replyMsg:
+ case 2:
{
- s << "(reply)";
+ s << "(compressed; compress response, if any)";
break;
}
- case closeConnectionMsg:
+ default:
{
- s << "(close connection)";
+ s << "(unknown)";
break;
}
+ }
- case validateConnectionMsg:
+ Int size;
+ stream.read(size);
+ s << "\nmessage size = " << size;
+
+ return type;
+}
+
+static void
+printRequest(ostream& s, BasicStream& stream)
+{
+ Int requestId;
+ stream.read(requestId);
+ s << "\nrequest id = " << requestId;
+ if(requestId == 0)
+ {
+ s << " (oneway)";
+ }
+
+ printRequestHeader(s, stream);
+}
+
+static void
+printBatchRequest(ostream& s, BasicStream& stream)
+{
+ int batchRequestNum;
+ stream.read(batchRequestNum);
+ s << "\nnumber of requests = " << batchRequestNum;
+
+ for(int i = 0; i < batchRequestNum; ++i)
+ {
+ s << "\nrequest #" << i << ':';
+ printRequestHeader(s, stream);
+ stream.skipEncaps();
+ }
+}
+
+static void
+printReply(ostream& s, BasicStream& stream)
+{
+ Int requestId;
+ stream.read(requestId);
+ s << "\nrequest id = " << requestId;
+
+ Byte replyStatus;
+ stream.read(replyStatus);
+ s << "\nreply status = " << static_cast<int>(replyStatus) << ' ';
+ switch(replyStatus)
+ {
+ case replyOK:
+ {
+ s << "(ok)";
+ break;
+ }
+
+ case replyUserException:
+ {
+ s << "(user exception)";
+ break;
+ }
+
+ case replyObjectNotExist:
+ case replyFacetNotExist:
+ case replyOperationNotExist:
+ {
+ switch(replyStatus)
+ {
+ case replyObjectNotExist:
+ {
+ s << "(object not exist)";
+ break;
+ }
+
+ case replyFacetNotExist:
+ {
+ s << "(facet not exist)";
+ break;
+ }
+
+ case replyOperationNotExist:
{
- s << "(validate connection)";
+ s << "(operation not exist)";
break;
}
default:
{
- s << "(unknown)";
+ assert(false);
break;
}
- }
+ }
- Byte compress;
- stream.read(compress);
- s << "\ncompression status = " << static_cast<int>(compress) << ' ';
+ printIdentityFacetOperation(s, stream);
+ break;
+ }
- switch(compress)
+ case replyUnknownException:
+ case replyUnknownLocalException:
+ case replyUnknownUserException:
{
- case 0:
+ switch(replyStatus)
{
- s << "(not compressed; do not compress response, if any)";
+ case replyUnknownException:
+ {
+ s << "(unknown exception)";
break;
}
- case 1:
+ case replyUnknownLocalException:
{
- s << "(not compressed; compress response, if any)";
+ s << "(unknown local exception)";
break;
}
- case 2:
+ case replyUnknownUserException:
{
- s << "(compressed; compress response, if any)";
+ s << "(unknown user exception)";
break;
}
default:
{
- s << "(unknown)";
+ assert(false);
break;
}
+ }
+
+ string unknown;
+ stream.read(unknown, false);
+ s << "\nunknown = " << unknown;
+ break;
}
- Int size;
- stream.read(size);
- s << "\nmessage size = " << size;
+ default:
+ {
+ s << "(unknown)";
+ break;
+ }
+ }
}
-void
-IceInternal::traceHeader(const char* heading, const BasicStream& str, const LoggerPtr& logger,
- const TraceLevelsPtr& tl)
+static Byte
+printMessage(ostream& s, BasicStream& stream)
{
- if(tl->protocol >= 1)
+ Byte type = printHeader(s, stream);
+
+ switch(type)
{
- BasicStream& stream = const_cast<BasicStream&>(str);
- BasicStream::Container::iterator p = stream.i;
- stream.i = stream.b.begin();
+ case closeConnectionMsg:
+ case validateConnectionMsg:
+ {
+ // We're done.
+ break;
+ }
+
+ case requestMsg:
+ {
+ printRequest(s, stream);
+ break;
+ }
+
+ case requestBatchMsg:
+ {
+ printBatchRequest(s, stream);
+ break;
+ }
+
+ case replyMsg:
+ {
+ printReply(s, stream);
+ break;
+ }
+
+ default:
+ {
+ break;
+ }
+ }
- ostringstream s;
- s << heading;
- printHeader(s, stream);
+ return type;
+}
- logger->trace(tl->protocolCat, s.str());
- stream.i = p;
+static IceUtil::StaticMutex slicingMutex = ICE_STATIC_MUTEX_INITIALIZER;
+
+void
+IceInternal::traceSlicing(const char* kind, const string& typeId, const char* slicingCat, const LoggerPtr& logger)
+{
+ IceUtil::StaticMutex::Lock lock(slicingMutex);
+ static set<string> slicingIds;
+ if(slicingIds.insert(typeId).second)
+ {
+ string s("unknown ");
+ s += kind;
+ s += " type `" + typeId + "'";
+ logger->trace(slicingCat, s);
}
}
void
-IceInternal::traceRequest(const char* heading, const BasicStream& str, const LoggerPtr& logger,
- const TraceLevelsPtr& tl)
+IceInternal::traceSend(const BasicStream& str, const LoggerPtr& logger, const TraceLevelsPtr& tl)
{
if(tl->protocol >= 1)
{
@@ -227,27 +380,15 @@ IceInternal::traceRequest(const char* heading, const BasicStream& str, const Log
stream.i = stream.b.begin();
ostringstream s;
- s << heading;
- printHeader(s, stream);
+ Byte type = printMessage(s, stream);
- Int requestId;
- stream.read(requestId);
- s << "\nrequest id = " << requestId;
- if(requestId == 0)
- {
- s << " (oneway)";
- }
-
- printRequestHeader(s, stream);
-
- logger->trace(tl->protocolCat, s.str());
+ logger->trace(tl->protocolCat, "sending " + getMessageTypeAsString(type) + " " + s.str());
stream.i = p;
}
}
void
-IceInternal::traceBatchRequest(const char* heading, const BasicStream& str, const LoggerPtr& logger,
- const TraceLevelsPtr& tl)
+IceInternal::traceRecv(const BasicStream& str, const LoggerPtr& logger, const TraceLevelsPtr& tl)
{
if(tl->protocol >= 1)
{
@@ -256,28 +397,15 @@ IceInternal::traceBatchRequest(const char* heading, const BasicStream& str, cons
stream.i = stream.b.begin();
ostringstream s;
- s << heading;
- printHeader(s, stream);
+ Byte type = printMessage(s, stream);
- int batchRequestNum;
- stream.read(batchRequestNum);
- s << "\nnumber of requests = " << batchRequestNum;
-
- for(int i = 0; i < batchRequestNum; ++i)
- {
- s << "\nrequest #" << i << ':';
- printRequestHeader(s, stream);
- stream.skipEncaps();
- }
-
- logger->trace(tl->protocolCat, s.str());
+ logger->trace(tl->protocolCat, "received " + getMessageTypeAsString(type) + " " + s.str());
stream.i = p;
}
}
void
-IceInternal::traceReply(const char* heading, const BasicStream& str, const LoggerPtr& logger,
- const TraceLevelsPtr& tl)
+IceInternal::trace(const char* heading, const BasicStream& str, const LoggerPtr& logger, const TraceLevelsPtr& tl)
{
if(tl->protocol >= 1)
{
@@ -287,125 +415,10 @@ IceInternal::traceReply(const char* heading, const BasicStream& str, const Logge
ostringstream s;
s << heading;
- printHeader(s, stream);
-
- Int requestId;
- stream.read(requestId);
- s << "\nrequest id = " << requestId;
-
- Byte replyStatus;
- stream.read(replyStatus);
- s << "\nreply status = " << static_cast<int>(replyStatus) << ' ';
- switch(replyStatus)
- {
- case replyOK:
- {
- s << "(ok)";
- break;
- }
-
- case replyUserException:
- {
- s << "(user exception)";
- break;
- }
-
- case replyObjectNotExist:
- case replyFacetNotExist:
- case replyOperationNotExist:
- {
- switch(replyStatus)
- {
- case replyObjectNotExist:
- {
- s << "(object not exist)";
- break;
- }
-
- case replyFacetNotExist:
- {
- s << "(facet not exist)";
- break;
- }
-
- case replyOperationNotExist:
- {
- s << "(operation not exist)";
- break;
- }
-
- default:
- {
- assert(false);
- break;
- }
- }
-
- printIdentityFacetOperation(s, stream);
- break;
- }
-
- case replyUnknownException:
- case replyUnknownLocalException:
- case replyUnknownUserException:
- {
- switch(replyStatus)
- {
- case replyUnknownException:
- {
- s << "(unknown exception)";
- break;
- }
-
- case replyUnknownLocalException:
- {
- s << "(unknown local exception)";
- break;
- }
-
- case replyUnknownUserException:
- {
- s << "(unknown user exception)";
- break;
- }
-
- default:
- {
- assert(false);
- break;
- }
- }
-
- string unknown;
- stream.read(unknown, false);
- s << "\nunknown = " << unknown;
- break;
- }
-
- default:
- {
- s << "(unknown)";
- break;
- }
- }
+ printMessage(s, stream);
logger->trace(tl->protocolCat, s.str());
stream.i = p;
}
}
-static IceUtil::StaticMutex slicingMutex = ICE_STATIC_MUTEX_INITIALIZER;
-
-void
-IceInternal::traceSlicing(const char* kind, const string& typeId, const char* slicingCat, const LoggerPtr& logger)
-{
- IceUtil::StaticMutex::Lock lock(slicingMutex);
- static set<string> slicingIds;
- if(slicingIds.insert(typeId).second)
- {
- string s("unknown ");
- s += kind;
- s += " type `" + typeId + "'";
- logger->trace(slicingCat, s);
- }
-}
diff --git a/cpp/src/Ice/TraceUtil.h b/cpp/src/Ice/TraceUtil.h
index d61af61e1eb..01db5958af0 100644
--- a/cpp/src/Ice/TraceUtil.h
+++ b/cpp/src/Ice/TraceUtil.h
@@ -18,10 +18,9 @@ namespace IceInternal
class BasicStream;
-void traceHeader(const char*, const BasicStream&, const ::Ice::LoggerPtr&, const TraceLevelsPtr&);
-void traceRequest(const char*, const BasicStream&, const ::Ice::LoggerPtr&, const TraceLevelsPtr&);
-void traceBatchRequest(const char*, const BasicStream&, const ::Ice::LoggerPtr&, const TraceLevelsPtr&);
-void traceReply(const char*, const BasicStream&, const ::Ice::LoggerPtr&, const TraceLevelsPtr&);
+void traceSend(const BasicStream&, const ::Ice::LoggerPtr&, const TraceLevelsPtr&);
+void traceRecv(const BasicStream&, const ::Ice::LoggerPtr&, const TraceLevelsPtr&);
+void trace(const char*, const BasicStream&, const ::Ice::LoggerPtr&, const TraceLevelsPtr&);
void traceSlicing(const char*, const ::std::string&, const char *, const ::Ice::LoggerPtr&);
}
diff --git a/cpp/src/Ice/Transceiver.h b/cpp/src/Ice/Transceiver.h
index 1e3d637c9f0..8670779213d 100644
--- a/cpp/src/Ice/Transceiver.h
+++ b/cpp/src/Ice/Transceiver.h
@@ -12,9 +12,10 @@
#include <IceUtil/Shared.h>
#include <Ice/TransceiverF.h>
+#include <Ice/Selector.h>
#ifdef _WIN32
-# include <winsock2.h>
+# include <winsock2.h>
typedef int ssize_t;
#else
# define SOCKET int
@@ -33,11 +34,11 @@ public:
virtual void close() = 0;
virtual void shutdownWrite() = 0;
virtual void shutdownReadWrite() = 0;
- virtual void write(Buffer&, int) = 0;
- virtual void read(Buffer&, int) = 0;
+ virtual bool write(Buffer&, int) = 0;
+ virtual bool read(Buffer&, int) = 0;
virtual std::string type() const = 0;
virtual std::string toString() const = 0;
- virtual void initialize(int) = 0;
+ virtual SocketStatus initialize(int) = 0;
virtual void checkSendSize(const Buffer&, size_t) = 0;
};
diff --git a/cpp/src/Ice/UdpConnector.cpp b/cpp/src/Ice/UdpConnector.cpp
index 128fca83447..05c202a8310 100644
--- a/cpp/src/Ice/UdpConnector.cpp
+++ b/cpp/src/Ice/UdpConnector.cpp
@@ -168,21 +168,6 @@ IceInternal::UdpConnector::operator<(const Connector& r) const
return compareAddress(_addr, p->_addr) == -1;
}
-bool
-IceInternal::UdpConnector::equivalent(const string& host, int port) const
-{
- struct sockaddr_in addr;
- try
- {
- getAddress(host, port, addr);
- }
- catch(const DNSException&)
- {
- return false;
- }
- return compareAddress(addr, _addr) == 0;
-}
-
IceInternal::UdpConnector::UdpConnector(const InstancePtr& instance, const struct sockaddr_in& addr,
const string& mcastInterface, int mcastTtl, Ice::Byte protocolMajor,
Ice::Byte protocolMinor, Ice::Byte encodingMajor, Ice::Byte encodingMinor,
diff --git a/cpp/src/Ice/UdpConnector.h b/cpp/src/Ice/UdpConnector.h
index fa33c3cb330..77d73bba277 100644
--- a/cpp/src/Ice/UdpConnector.h
+++ b/cpp/src/Ice/UdpConnector.h
@@ -28,6 +28,7 @@ class UdpConnector : public Connector
public:
virtual TransceiverPtr connect(int);
+
virtual Ice::Short type() const;
virtual std::string toString() const;
@@ -35,8 +36,6 @@ public:
virtual bool operator!=(const Connector&) const;
virtual bool operator<(const Connector&) const;
- bool equivalent(const std::string&, int) const;
-
private:
UdpConnector(const InstancePtr&, const struct sockaddr_in&, const std::string&, int, Ice::Byte, Ice::Byte,
diff --git a/cpp/src/Ice/UdpEndpointI.cpp b/cpp/src/Ice/UdpEndpointI.cpp
index 2668a589142..b5f4588714c 100644
--- a/cpp/src/Ice/UdpEndpointI.cpp
+++ b/cpp/src/Ice/UdpEndpointI.cpp
@@ -480,14 +480,13 @@ IceInternal::UdpEndpointI::transceiver(EndpointIPtr& endp) const
vector<ConnectorPtr>
IceInternal::UdpEndpointI::connectors() const
{
- vector<ConnectorPtr> connectors;
- vector<struct sockaddr_in> addresses = getAddresses(_host, _port);
- for(unsigned int i = 0; i < addresses.size(); ++i)
- {
- connectors.push_back(new UdpConnector(_instance, addresses[i], _mcastInterface, _mcastTtl, _protocolMajor,
- _protocolMinor, _encodingMajor, _encodingMinor, _connectionId));
- }
- return connectors;
+ return connectors(getAddresses(_host, _port));
+}
+
+void
+IceInternal::UdpEndpointI::connectors_async(const EndpointI_connectorsPtr& callback) const
+{
+ _instance->endpointHostResolver()->resolve(_host, _port, const_cast<UdpEndpointI*>(this), callback);
}
AcceptorPtr
@@ -522,14 +521,14 @@ IceInternal::UdpEndpointI::expand() const
}
bool
-IceInternal::UdpEndpointI::equivalent(const ConnectorPtr& connector) const
+IceInternal::UdpEndpointI::equivalent(const EndpointIPtr& endpoint) const
{
- const UdpConnector* udpConnector = dynamic_cast<const UdpConnector*>(connector.get());
- if(!udpConnector)
+ const UdpEndpointI* udpEndpointI = dynamic_cast<const UdpEndpointI*>(endpoint.get());
+ if(!udpEndpointI)
{
return false;
}
- return udpConnector->equivalent(_host, _port);
+ return udpEndpointI->_host == _host && udpEndpointI->_port == _port;
}
bool
@@ -726,6 +725,18 @@ IceInternal::UdpEndpointI::operator<(const EndpointI& r) const
return false;
}
+vector<ConnectorPtr>
+IceInternal::UdpEndpointI::connectors(const vector<struct sockaddr_in>& addresses) const
+{
+ vector<ConnectorPtr> connectors;
+ for(unsigned int i = 0; i < addresses.size(); ++i)
+ {
+ connectors.push_back(new UdpConnector(_instance, addresses[i], _mcastInterface, _mcastTtl, _protocolMajor,
+ _protocolMinor, _encodingMajor, _encodingMinor, _connectionId));
+ }
+ return connectors;
+}
+
IceInternal::UdpEndpointFactory::UdpEndpointFactory(const InstancePtr& instance)
: _instance(instance)
{
diff --git a/cpp/src/Ice/UdpEndpointI.h b/cpp/src/Ice/UdpEndpointI.h
index 80c33c873e2..07fb3daaf2d 100644
--- a/cpp/src/Ice/UdpEndpointI.h
+++ b/cpp/src/Ice/UdpEndpointI.h
@@ -40,9 +40,10 @@ public:
virtual bool unknown() const;
virtual TransceiverPtr transceiver(EndpointIPtr&) const;
virtual std::vector<ConnectorPtr> connectors() const;
+ virtual void connectors_async(const EndpointI_connectorsPtr&) const;
virtual AcceptorPtr acceptor(EndpointIPtr&, const std::string&) const;
virtual std::vector<EndpointIPtr> expand() const;
- virtual bool equivalent(const ConnectorPtr&) const;
+ virtual bool equivalent(const EndpointIPtr&) const;
virtual bool operator==(const EndpointI&) const;
virtual bool operator!=(const EndpointI&) const;
@@ -50,6 +51,8 @@ public:
private:
+ virtual std::vector<ConnectorPtr> connectors(const std::vector<struct sockaddr_in>&) const;
+
#if defined(__SUNPRO_CC)
//
// COMPILERFIX: prevent the compiler from emitting a warning about
diff --git a/cpp/src/Ice/UdpTransceiver.cpp b/cpp/src/Ice/UdpTransceiver.cpp
index 32ab7600c88..2736587f7a8 100644
--- a/cpp/src/Ice/UdpTransceiver.cpp
+++ b/cpp/src/Ice/UdpTransceiver.cpp
@@ -63,7 +63,7 @@ IceInternal::UdpTransceiver::shutdownReadWrite()
IceUtil::Mutex::Lock sync(_shutdownReadWriteMutex);
_shutdownReadWrite = true;
-#if defined(_WIN32) || defined(__sun) || defined(__hppa) || defined(_AIX)
+#if defined(_WIN32) || defined(__sun) || defined(__hppa) || defined(_AIX) || defined(__APPLE__)
//
// On certain platforms, we have to explicitly wake up a thread blocked in
// select(). This is only relevant when using thread per connection.
@@ -105,8 +105,8 @@ IceInternal::UdpTransceiver::shutdownReadWrite()
#endif
}
-void
-IceInternal::UdpTransceiver::write(Buffer& buf, int)
+bool
+IceInternal::UdpTransceiver::write(Buffer& buf, int timeout)
{
assert(buf.i == buf.b.begin());
//
@@ -120,6 +120,7 @@ IceInternal::UdpTransceiver::write(Buffer& buf, int)
//
// We don't log a warning here because the client gets an exception anyway.
//
+ cerr << packetSize << " " << _maxPacketSize << " " << _sndSize << endl;
throw DatagramLimitException(__FILE__, __LINE__);
}
@@ -127,11 +128,9 @@ repeat:
assert(_fd != INVALID_SOCKET);
#ifdef _WIN32
- ssize_t ret = ::send(_fd, reinterpret_cast<const char*>(&buf.b[0]),
- static_cast<int>(buf.b.size()), 0);
+ ssize_t ret = ::send(_fd, reinterpret_cast<const char*>(&buf.b[0]), static_cast<int>(buf.b.size()), 0);
#else
- ssize_t ret = ::send(_fd, reinterpret_cast<const char*>(&buf.b[0]),
- buf.b.size(), 0);
+ ssize_t ret = ::send(_fd, reinterpret_cast<const char*>(&buf.b[0]), buf.b.size(), 0);
#endif
if(ret == SOCKET_ERROR)
@@ -145,16 +144,33 @@ repeat:
{
repeatSelect:
+ if(timeout == 0)
+ {
+ return false;
+ }
+
+ int rs;
assert(_fd != INVALID_SOCKET);
#ifdef _WIN32
FD_SET(_fd, &_wFdSet);
- int rs = ::select(static_cast<int>(_fd + 1), 0, &_wFdSet, 0, 0);
+
+ if(timeout >= 0)
+ {
+ struct timeval tv;
+ tv.tv_sec = timeout / 1000;
+ tv.tv_usec = (timeout - tv.tv_sec * 1000) * 1000;
+ rs = ::select(static_cast<int>(_fd + 1), 0, &_wFdSet, 0, &tv);
+ }
+ else
+ {
+ rs = ::select(static_cast<int>(_fd + 1), 0, &_wFdSet, 0, 0);
+ }
#else
- struct pollfd fdSet[1];
- fdSet[0].fd = _fd;
- fdSet[0].events = POLLOUT;
- int rs = ::poll(fdSet, 1, -1);
-#endif
+ struct pollfd pollFd[1];
+ pollFd[0].fd = _fd;
+ pollFd[0].events = POLLOUT;
+ rs = ::poll(pollFd, 1, timeout);
+#endif
if(rs == SOCKET_ERROR)
{
if(interrupted())
@@ -166,6 +182,11 @@ repeat:
ex.error = getSocketErrno();
throw ex;
}
+
+ if(rs == 0)
+ {
+ throw new Ice::TimeoutException(__FILE__, __LINE__);
+ }
goto repeat;
}
@@ -188,10 +209,11 @@ repeat:
assert(ret == static_cast<ssize_t>(buf.b.size()));
buf.i = buf.b.end();
+ return true;
}
-void
-IceInternal::UdpTransceiver::read(Buffer& buf, int)
+bool
+IceInternal::UdpTransceiver::read(Buffer& buf, int timeout)
{
assert(buf.i == buf.b.begin());
@@ -270,6 +292,11 @@ repeat:
if(wouldBlock())
{
+ if(timeout == 0)
+ {
+ return false;
+ }
+
repeatSelect:
assert(_fd != INVALID_SOCKET);
@@ -295,6 +322,11 @@ repeat:
throw ex;
}
+ if(rs == 0)
+ {
+ throw TimeoutException(__FILE__, __LINE__);
+ }
+
goto repeat;
}
@@ -328,6 +360,7 @@ repeat:
buf.b.resize(ret);
buf.i = buf.b.end();
+ return true;
}
string
@@ -351,9 +384,10 @@ IceInternal::UdpTransceiver::toString() const
}
}
-void
+SocketStatus
IceInternal::UdpTransceiver::initialize(int)
{
+ return Finished;
}
void
diff --git a/cpp/src/Ice/UdpTransceiver.h b/cpp/src/Ice/UdpTransceiver.h
index 8c4c3282e3d..6fe77182793 100644
--- a/cpp/src/Ice/UdpTransceiver.h
+++ b/cpp/src/Ice/UdpTransceiver.h
@@ -36,11 +36,11 @@ public:
virtual void close();
virtual void shutdownWrite();
virtual void shutdownReadWrite();
- virtual void write(Buffer&, int);
- virtual void read(Buffer&, int);
+ virtual bool write(Buffer&, int);
+ virtual bool read(Buffer&, int);
virtual std::string type() const;
virtual std::string toString() const;
- virtual void initialize(int);
+ virtual SocketStatus initialize(int);
virtual void checkSendSize(const Buffer&, size_t);
int effectivePort() const;
diff --git a/cpp/src/Ice/UnknownEndpointI.cpp b/cpp/src/Ice/UnknownEndpointI.cpp
index c3f91d7563f..e7762649979 100644
--- a/cpp/src/Ice/UnknownEndpointI.cpp
+++ b/cpp/src/Ice/UnknownEndpointI.cpp
@@ -213,6 +213,12 @@ IceInternal::UnknownEndpointI::connectors() const
return ret;
}
+void
+IceInternal::UnknownEndpointI::connectors_async(const EndpointI_connectorsPtr& callback) const
+{
+ callback->connectors(vector<ConnectorPtr>());
+}
+
AcceptorPtr
IceInternal::UnknownEndpointI::acceptor(EndpointIPtr& endp, const string&) const
{
@@ -229,7 +235,7 @@ IceInternal::UnknownEndpointI::expand() const
}
bool
-IceInternal::UnknownEndpointI::equivalent(const ConnectorPtr&) const
+IceInternal::UnknownEndpointI::equivalent(const EndpointIPtr&) const
{
return false;
}
diff --git a/cpp/src/Ice/UnknownEndpointI.h b/cpp/src/Ice/UnknownEndpointI.h
index e9c0069f261..69f33defe0f 100644
--- a/cpp/src/Ice/UnknownEndpointI.h
+++ b/cpp/src/Ice/UnknownEndpointI.h
@@ -36,9 +36,10 @@ public:
virtual bool unknown() const;
virtual TransceiverPtr transceiver(EndpointIPtr&) const;
virtual std::vector<ConnectorPtr> connectors() const;
+ virtual void connectors_async(const EndpointI_connectorsPtr&) const;
virtual AcceptorPtr acceptor(EndpointIPtr&, const std::string&) const;
virtual std::vector<EndpointIPtr> expand() const;
- virtual bool equivalent(const ConnectorPtr&) const;
+ virtual bool equivalent(const EndpointIPtr&) const;
virtual bool operator==(const EndpointI&) const;
virtual bool operator!=(const EndpointI&) const;