zeroc-ice 3.6b1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/ICE_LICENSE +54 -0
- data/LICENSE +339 -0
- data/bin/slice2rb +17 -0
- data/ext/Communicator.cpp +596 -0
- data/ext/Communicator.h +25 -0
- data/ext/Config.h +111 -0
- data/ext/Connection.cpp +381 -0
- data/ext/Connection.h +26 -0
- data/ext/Endpoint.cpp +311 -0
- data/ext/Endpoint.h +27 -0
- data/ext/ImplicitContext.cpp +152 -0
- data/ext/ImplicitContext.h +25 -0
- data/ext/Init.cpp +52 -0
- data/ext/Logger.cpp +151 -0
- data/ext/Logger.h +28 -0
- data/ext/ObjectFactory.cpp +140 -0
- data/ext/ObjectFactory.h +50 -0
- data/ext/Operation.cpp +676 -0
- data/ext/Operation.h +36 -0
- data/ext/Properties.cpp +369 -0
- data/ext/Properties.h +25 -0
- data/ext/Proxy.cpp +1354 -0
- data/ext/Proxy.h +27 -0
- data/ext/Slice.cpp +223 -0
- data/ext/Slice.h +22 -0
- data/ext/Types.cpp +3160 -0
- data/ext/Types.h +545 -0
- data/ext/Util.cpp +792 -0
- data/ext/Util.h +511 -0
- data/ext/extconf.rb +118 -0
- data/ext/ice/BZIP_LICENSE +42 -0
- data/ext/ice/MCPP_LICENSE +36 -0
- data/ext/ice/bzip2/blocksort.c +1094 -0
- data/ext/ice/bzip2/bzlib.c +1572 -0
- data/ext/ice/bzip2/bzlib.h +282 -0
- data/ext/ice/bzip2/bzlib_private.h +509 -0
- data/ext/ice/bzip2/compress.c +672 -0
- data/ext/ice/bzip2/crctable.c +104 -0
- data/ext/ice/bzip2/decompress.c +646 -0
- data/ext/ice/bzip2/huffman.c +205 -0
- data/ext/ice/bzip2/randtable.c +84 -0
- data/ext/ice/cpp/include/Ice/ACMF.h +30 -0
- data/ext/ice/cpp/include/Ice/Application.h +156 -0
- data/ext/ice/cpp/include/Ice/AsyncResult.h +363 -0
- data/ext/ice/cpp/include/Ice/AsyncResultF.h +26 -0
- data/ext/ice/cpp/include/Ice/BasicStream.h +1315 -0
- data/ext/ice/cpp/include/Ice/Buffer.h +159 -0
- data/ext/ice/cpp/include/Ice/BuiltinSequences.h +74 -0
- data/ext/ice/cpp/include/Ice/Communicator.h +194 -0
- data/ext/ice/cpp/include/Ice/CommunicatorAsync.h +115 -0
- data/ext/ice/cpp/include/Ice/CommunicatorF.h +60 -0
- data/ext/ice/cpp/include/Ice/Config.h +97 -0
- data/ext/ice/cpp/include/Ice/Connection.h +495 -0
- data/ext/ice/cpp/include/Ice/ConnectionAsync.h +115 -0
- data/ext/ice/cpp/include/Ice/ConnectionF.h +72 -0
- data/ext/ice/cpp/include/Ice/ConnectionFactoryF.h +30 -0
- data/ext/ice/cpp/include/Ice/ConnectionIF.h +37 -0
- data/ext/ice/cpp/include/Ice/Current.h +94 -0
- data/ext/ice/cpp/include/Ice/DefaultObjectFactory.h +48 -0
- data/ext/ice/cpp/include/Ice/DeprecatedStringConverter.h +62 -0
- data/ext/ice/cpp/include/Ice/DispatchInterceptor.h +33 -0
- data/ext/ice/cpp/include/Ice/Dispatcher.h +51 -0
- data/ext/ice/cpp/include/Ice/DynamicLibrary.h +105 -0
- data/ext/ice/cpp/include/Ice/DynamicLibraryF.h +29 -0
- data/ext/ice/cpp/include/Ice/Endpoint.h +350 -0
- data/ext/ice/cpp/include/Ice/EndpointF.h +97 -0
- data/ext/ice/cpp/include/Ice/EndpointTypes.h +74 -0
- data/ext/ice/cpp/include/Ice/Exception.h +114 -0
- data/ext/ice/cpp/include/Ice/FacetMap.h +56 -0
- data/ext/ice/cpp/include/Ice/FactoryTable.h +69 -0
- data/ext/ice/cpp/include/Ice/FactoryTableInit.h +87 -0
- data/ext/ice/cpp/include/Ice/Format.h +39 -0
- data/ext/ice/cpp/include/Ice/Functional.h +138 -0
- data/ext/ice/cpp/include/Ice/GCObject.h +73 -0
- data/ext/ice/cpp/include/Ice/Handle.h +192 -0
- data/ext/ice/cpp/include/Ice/Ice.h +54 -0
- data/ext/ice/cpp/include/Ice/Identity.h +160 -0
- data/ext/ice/cpp/include/Ice/ImplicitContext.h +96 -0
- data/ext/ice/cpp/include/Ice/ImplicitContextF.h +60 -0
- data/ext/ice/cpp/include/Ice/Incoming.h +131 -0
- data/ext/ice/cpp/include/Ice/IncomingAsync.h +108 -0
- data/ext/ice/cpp/include/Ice/IncomingAsyncF.h +35 -0
- data/ext/ice/cpp/include/Ice/Initialize.h +141 -0
- data/ext/ice/cpp/include/Ice/InstanceF.h +26 -0
- data/ext/ice/cpp/include/Ice/Instrumentation.h +377 -0
- data/ext/ice/cpp/include/Ice/InstrumentationF.h +71 -0
- data/ext/ice/cpp/include/Ice/LocalException.h +1022 -0
- data/ext/ice/cpp/include/Ice/LocalObject.h +36 -0
- data/ext/ice/cpp/include/Ice/LocalObjectF.h +26 -0
- data/ext/ice/cpp/include/Ice/Locator.h +2191 -0
- data/ext/ice/cpp/include/Ice/LocatorF.h +89 -0
- data/ext/ice/cpp/include/Ice/Logger.h +94 -0
- data/ext/ice/cpp/include/Ice/LoggerF.h +60 -0
- data/ext/ice/cpp/include/Ice/LoggerUtil.h +153 -0
- data/ext/ice/cpp/include/Ice/Makefile +26 -0
- data/ext/ice/cpp/include/Ice/Metrics.h +2989 -0
- data/ext/ice/cpp/include/Ice/MetricsAdminI.h +662 -0
- data/ext/ice/cpp/include/Ice/MetricsFunctional.h +144 -0
- data/ext/ice/cpp/include/Ice/MetricsObserverI.h +576 -0
- data/ext/ice/cpp/include/Ice/NativePropertiesAdmin.h +55 -0
- data/ext/ice/cpp/include/Ice/Object.h +165 -0
- data/ext/ice/cpp/include/Ice/ObjectAdapter.h +162 -0
- data/ext/ice/cpp/include/Ice/ObjectAdapterF.h +60 -0
- data/ext/ice/cpp/include/Ice/ObjectAdapterFactoryF.h +26 -0
- data/ext/ice/cpp/include/Ice/ObjectF.h +26 -0
- data/ext/ice/cpp/include/Ice/ObjectFactory.h +86 -0
- data/ext/ice/cpp/include/Ice/ObjectFactoryF.h +60 -0
- data/ext/ice/cpp/include/Ice/ObjectFactoryManagerF.h +26 -0
- data/ext/ice/cpp/include/Ice/ObserverHelper.h +177 -0
- data/ext/ice/cpp/include/Ice/Outgoing.h +197 -0
- data/ext/ice/cpp/include/Ice/OutgoingAsync.h +264 -0
- data/ext/ice/cpp/include/Ice/OutgoingAsyncF.h +38 -0
- data/ext/ice/cpp/include/Ice/Plugin.h +121 -0
- data/ext/ice/cpp/include/Ice/PluginF.h +66 -0
- data/ext/ice/cpp/include/Ice/Process.h +568 -0
- data/ext/ice/cpp/include/Ice/ProcessF.h +77 -0
- data/ext/ice/cpp/include/Ice/Properties.h +130 -0
- data/ext/ice/cpp/include/Ice/PropertiesAdmin.h +824 -0
- data/ext/ice/cpp/include/Ice/PropertiesF.h +83 -0
- data/ext/ice/cpp/include/Ice/Protocol.h +242 -0
- data/ext/ice/cpp/include/Ice/Proxy.h +2448 -0
- data/ext/ice/cpp/include/Ice/ProxyF.h +78 -0
- data/ext/ice/cpp/include/Ice/ProxyFactoryF.h +26 -0
- data/ext/ice/cpp/include/Ice/ProxyHandle.h +330 -0
- data/ext/ice/cpp/include/Ice/ReferenceF.h +34 -0
- data/ext/ice/cpp/include/Ice/RemoteLogger.h +1496 -0
- data/ext/ice/cpp/include/Ice/RequestHandlerF.h +29 -0
- data/ext/ice/cpp/include/Ice/ResponseHandlerF.h +25 -0
- data/ext/ice/cpp/include/Ice/Router.h +1155 -0
- data/ext/ice/cpp/include/Ice/RouterF.h +77 -0
- data/ext/ice/cpp/include/Ice/ServantLocator.h +90 -0
- data/ext/ice/cpp/include/Ice/ServantLocatorF.h +60 -0
- data/ext/ice/cpp/include/Ice/ServantManagerF.h +26 -0
- data/ext/ice/cpp/include/Ice/Service.h +260 -0
- data/ext/ice/cpp/include/Ice/SliceChecksumDict.h +56 -0
- data/ext/ice/cpp/include/Ice/SliceChecksums.h +34 -0
- data/ext/ice/cpp/include/Ice/SlicedData.h +103 -0
- data/ext/ice/cpp/include/Ice/SlicedDataF.h +34 -0
- data/ext/ice/cpp/include/Ice/Stream.h +449 -0
- data/ext/ice/cpp/include/Ice/StreamF.h +30 -0
- data/ext/ice/cpp/include/Ice/StreamHelpers.h +877 -0
- data/ext/ice/cpp/include/Ice/ThreadPoolF.h +28 -0
- data/ext/ice/cpp/include/Ice/UserExceptionFactory.h +56 -0
- data/ext/ice/cpp/include/Ice/Version.h +254 -0
- data/ext/ice/cpp/include/IceSSL/Config.h +23 -0
- data/ext/ice/cpp/include/IceSSL/ConnectionInfo.h +119 -0
- data/ext/ice/cpp/include/IceSSL/EndpointInfo.h +101 -0
- data/ext/ice/cpp/include/IceSSL/IceSSL.h +22 -0
- data/ext/ice/cpp/include/IceSSL/Makefile +26 -0
- data/ext/ice/cpp/include/IceSSL/Plugin.h +558 -0
- data/ext/ice/cpp/include/IceUtil/AbstractMutex.h +119 -0
- data/ext/ice/cpp/include/IceUtil/Cache.h +362 -0
- data/ext/ice/cpp/include/IceUtil/Cond.h +323 -0
- data/ext/ice/cpp/include/IceUtil/Config.h +234 -0
- data/ext/ice/cpp/include/IceUtil/CountDownLatch.h +50 -0
- data/ext/ice/cpp/include/IceUtil/CtrlCHandler.h +70 -0
- data/ext/ice/cpp/include/IceUtil/DisableWarnings.h +45 -0
- data/ext/ice/cpp/include/IceUtil/Exception.h +184 -0
- data/ext/ice/cpp/include/IceUtil/Functional.h +389 -0
- data/ext/ice/cpp/include/IceUtil/Handle.h +266 -0
- data/ext/ice/cpp/include/IceUtil/IceUtil.h +51 -0
- data/ext/ice/cpp/include/IceUtil/IconvStringConverter.h +302 -0
- data/ext/ice/cpp/include/IceUtil/InputUtil.h +47 -0
- data/ext/ice/cpp/include/IceUtil/Iterator.h +36 -0
- data/ext/ice/cpp/include/IceUtil/Lock.h +135 -0
- data/ext/ice/cpp/include/IceUtil/Makefile +26 -0
- data/ext/ice/cpp/include/IceUtil/Monitor.h +249 -0
- data/ext/ice/cpp/include/IceUtil/Mutex.h +357 -0
- data/ext/ice/cpp/include/IceUtil/MutexProtocol.h +28 -0
- data/ext/ice/cpp/include/IceUtil/MutexPtrLock.h +83 -0
- data/ext/ice/cpp/include/IceUtil/MutexPtrTryLock.h +82 -0
- data/ext/ice/cpp/include/IceUtil/Optional.h +322 -0
- data/ext/ice/cpp/include/IceUtil/Options.h +141 -0
- data/ext/ice/cpp/include/IceUtil/OutputUtil.h +362 -0
- data/ext/ice/cpp/include/IceUtil/PopDisableWarnings.h +19 -0
- data/ext/ice/cpp/include/IceUtil/PushDisableWarnings.h +26 -0
- data/ext/ice/cpp/include/IceUtil/Random.h +24 -0
- data/ext/ice/cpp/include/IceUtil/RecMutex.h +113 -0
- data/ext/ice/cpp/include/IceUtil/SHA1.h +65 -0
- data/ext/ice/cpp/include/IceUtil/ScannerConfig.h +44 -0
- data/ext/ice/cpp/include/IceUtil/ScopedArray.h +97 -0
- data/ext/ice/cpp/include/IceUtil/Shared.h +168 -0
- data/ext/ice/cpp/include/IceUtil/StringConverter.h +175 -0
- data/ext/ice/cpp/include/IceUtil/StringUtil.h +91 -0
- data/ext/ice/cpp/include/IceUtil/Thread.h +181 -0
- data/ext/ice/cpp/include/IceUtil/ThreadException.h +108 -0
- data/ext/ice/cpp/include/IceUtil/Time.h +209 -0
- data/ext/ice/cpp/include/IceUtil/Timer.h +143 -0
- data/ext/ice/cpp/include/IceUtil/UUID.h +22 -0
- data/ext/ice/cpp/include/IceUtil/UndefSysMacros.h +42 -0
- data/ext/ice/cpp/include/IceUtil/UniquePtr.h +101 -0
- data/ext/ice/cpp/include/Slice/CPlusPlusUtil.h +64 -0
- data/ext/ice/cpp/include/Slice/Checksum.h +26 -0
- data/ext/ice/cpp/include/Slice/CsUtil.h +92 -0
- data/ext/ice/cpp/include/Slice/DotNetNames.h +34 -0
- data/ext/ice/cpp/include/Slice/FileTracker.h +71 -0
- data/ext/ice/cpp/include/Slice/JavaUtil.h +277 -0
- data/ext/ice/cpp/include/Slice/Makefile +26 -0
- data/ext/ice/cpp/include/Slice/PHPUtil.h +50 -0
- data/ext/ice/cpp/include/Slice/Parser.h +1116 -0
- data/ext/ice/cpp/include/Slice/Preprocessor.h +68 -0
- data/ext/ice/cpp/include/Slice/PythonUtil.h +64 -0
- data/ext/ice/cpp/include/Slice/RubyUtil.h +54 -0
- data/ext/ice/cpp/include/Slice/Util.h +33 -0
- data/ext/ice/cpp/src/Ice/ACM.cpp +343 -0
- data/ext/ice/cpp/src/Ice/ACM.h +117 -0
- data/ext/ice/cpp/src/Ice/Acceptor.cpp +16 -0
- data/ext/ice/cpp/src/Ice/Acceptor.h +41 -0
- data/ext/ice/cpp/src/Ice/AcceptorF.h +30 -0
- data/ext/ice/cpp/src/Ice/Application.cpp +760 -0
- data/ext/ice/cpp/src/Ice/AsyncResult.cpp +599 -0
- data/ext/ice/cpp/src/Ice/Base64.cpp +269 -0
- data/ext/ice/cpp/src/Ice/Base64.h +36 -0
- data/ext/ice/cpp/src/Ice/BasicStream.cpp +3393 -0
- data/ext/ice/cpp/src/Ice/Buffer.cpp +98 -0
- data/ext/ice/cpp/src/Ice/BuiltinSequences.cpp +34 -0
- data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.cpp +718 -0
- data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.h +106 -0
- data/ext/ice/cpp/src/Ice/Communicator.cpp +45 -0
- data/ext/ice/cpp/src/Ice/CommunicatorF.cpp +38 -0
- data/ext/ice/cpp/src/Ice/CommunicatorI.cpp +386 -0
- data/ext/ice/cpp/src/Ice/CommunicatorI.h +112 -0
- data/ext/ice/cpp/src/Ice/ConnectRequestHandler.cpp +546 -0
- data/ext/ice/cpp/src/Ice/ConnectRequestHandler.h +97 -0
- data/ext/ice/cpp/src/Ice/Connection.cpp +58 -0
- data/ext/ice/cpp/src/Ice/ConnectionF.cpp +38 -0
- data/ext/ice/cpp/src/Ice/ConnectionFactory.cpp +1639 -0
- data/ext/ice/cpp/src/Ice/ConnectionFactory.h +236 -0
- data/ext/ice/cpp/src/Ice/ConnectionI.cpp +3876 -0
- data/ext/ice/cpp/src/Ice/ConnectionI.h +364 -0
- data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.cpp +115 -0
- data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.h +50 -0
- data/ext/ice/cpp/src/Ice/Connector.cpp +16 -0
- data/ext/ice/cpp/src/Ice/Connector.h +36 -0
- data/ext/ice/cpp/src/Ice/ConnectorF.h +26 -0
- data/ext/ice/cpp/src/Ice/Current.cpp +38 -0
- data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.cpp +168 -0
- data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.h +57 -0
- data/ext/ice/cpp/src/Ice/DefaultsAndOverridesF.h +26 -0
- data/ext/ice/cpp/src/Ice/DeprecatedStringConverter.cpp +60 -0
- data/ext/ice/cpp/src/Ice/DispatchInterceptor.cpp +49 -0
- data/ext/ice/cpp/src/Ice/DynamicLibrary.cpp +281 -0
- data/ext/ice/cpp/src/Ice/Endpoint.cpp +53 -0
- data/ext/ice/cpp/src/Ice/EndpointF.cpp +38 -0
- data/ext/ice/cpp/src/Ice/EndpointFactory.cpp +25 -0
- data/ext/ice/cpp/src/Ice/EndpointFactory.h +44 -0
- data/ext/ice/cpp/src/Ice/EndpointFactoryF.h +26 -0
- data/ext/ice/cpp/src/Ice/EndpointFactoryManager.cpp +208 -0
- data/ext/ice/cpp/src/Ice/EndpointFactoryManager.h +46 -0
- data/ext/ice/cpp/src/Ice/EndpointFactoryManagerF.h +26 -0
- data/ext/ice/cpp/src/Ice/EndpointI.cpp +87 -0
- data/ext/ice/cpp/src/Ice/EndpointI.h +165 -0
- data/ext/ice/cpp/src/Ice/EndpointIF.h +41 -0
- data/ext/ice/cpp/src/Ice/EndpointTypes.cpp +38 -0
- data/ext/ice/cpp/src/Ice/EventHandler.cpp +35 -0
- data/ext/ice/cpp/src/Ice/EventHandler.h +78 -0
- data/ext/ice/cpp/src/Ice/EventHandlerF.h +26 -0
- data/ext/ice/cpp/src/Ice/EventLoggerMsg.h +53 -0
- data/ext/ice/cpp/src/Ice/Exception.cpp +832 -0
- data/ext/ice/cpp/src/Ice/FacetMap.cpp +34 -0
- data/ext/ice/cpp/src/Ice/FactoryTable.cpp +158 -0
- data/ext/ice/cpp/src/Ice/FactoryTableInit.cpp +95 -0
- data/ext/ice/cpp/src/Ice/GCObject.cpp +444 -0
- data/ext/ice/cpp/src/Ice/HashUtil.h +59 -0
- data/ext/ice/cpp/src/Ice/HttpParser.cpp +680 -0
- data/ext/ice/cpp/src/Ice/HttpParser.h +124 -0
- data/ext/ice/cpp/src/Ice/IPEndpointI.cpp +733 -0
- data/ext/ice/cpp/src/Ice/IPEndpointI.h +157 -0
- data/ext/ice/cpp/src/Ice/IPEndpointIF.h +29 -0
- data/ext/ice/cpp/src/Ice/Identity.cpp +42 -0
- data/ext/ice/cpp/src/Ice/ImplicitContext.cpp +41 -0
- data/ext/ice/cpp/src/Ice/ImplicitContextF.cpp +38 -0
- data/ext/ice/cpp/src/Ice/ImplicitContextI.cpp +639 -0
- data/ext/ice/cpp/src/Ice/ImplicitContextI.h +51 -0
- data/ext/ice/cpp/src/Ice/Incoming.cpp +757 -0
- data/ext/ice/cpp/src/Ice/IncomingAsync.cpp +340 -0
- data/ext/ice/cpp/src/Ice/IncomingRequest.h +37 -0
- data/ext/ice/cpp/src/Ice/Initialize.cpp +401 -0
- data/ext/ice/cpp/src/Ice/Instance.cpp +1928 -0
- data/ext/ice/cpp/src/Ice/Instance.h +198 -0
- data/ext/ice/cpp/src/Ice/Instrumentation.cpp +68 -0
- data/ext/ice/cpp/src/Ice/InstrumentationF.cpp +43 -0
- data/ext/ice/cpp/src/Ice/InstrumentationI.cpp +1083 -0
- data/ext/ice/cpp/src/Ice/InstrumentationI.h +262 -0
- data/ext/ice/cpp/src/Ice/LocalException.cpp +2091 -0
- data/ext/ice/cpp/src/Ice/LocalObject.cpp +29 -0
- data/ext/ice/cpp/src/Ice/Locator.cpp +1946 -0
- data/ext/ice/cpp/src/Ice/LocatorF.cpp +39 -0
- data/ext/ice/cpp/src/Ice/LocatorInfo.cpp +917 -0
- data/ext/ice/cpp/src/Ice/LocatorInfo.h +193 -0
- data/ext/ice/cpp/src/Ice/LocatorInfoF.h +34 -0
- data/ext/ice/cpp/src/Ice/Logger.cpp +40 -0
- data/ext/ice/cpp/src/Ice/LoggerAdminI.cpp +862 -0
- data/ext/ice/cpp/src/Ice/LoggerAdminI.h +46 -0
- data/ext/ice/cpp/src/Ice/LoggerF.cpp +38 -0
- data/ext/ice/cpp/src/Ice/LoggerI.cpp +199 -0
- data/ext/ice/cpp/src/Ice/LoggerI.h +57 -0
- data/ext/ice/cpp/src/Ice/LoggerUtil.cpp +107 -0
- data/ext/ice/cpp/src/Ice/Makefile +190 -0
- data/ext/ice/cpp/src/Ice/Metrics.cpp +2159 -0
- data/ext/ice/cpp/src/Ice/MetricsAdminI.cpp +669 -0
- data/ext/ice/cpp/src/Ice/MetricsObserverI.cpp +14 -0
- data/ext/ice/cpp/src/Ice/Network.cpp +2694 -0
- data/ext/ice/cpp/src/Ice/Network.h +291 -0
- data/ext/ice/cpp/src/Ice/NetworkF.h +28 -0
- data/ext/ice/cpp/src/Ice/NetworkProxy.cpp +325 -0
- data/ext/ice/cpp/src/Ice/NetworkProxy.h +74 -0
- data/ext/ice/cpp/src/Ice/NetworkProxyF.h +26 -0
- data/ext/ice/cpp/src/Ice/Object.cpp +440 -0
- data/ext/ice/cpp/src/Ice/ObjectAdapter.cpp +41 -0
- data/ext/ice/cpp/src/Ice/ObjectAdapterF.cpp +38 -0
- data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.cpp +241 -0
- data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.h +52 -0
- data/ext/ice/cpp/src/Ice/ObjectAdapterI.cpp +1498 -0
- data/ext/ice/cpp/src/Ice/ObjectAdapterI.h +155 -0
- data/ext/ice/cpp/src/Ice/ObjectFactory.cpp +41 -0
- data/ext/ice/cpp/src/Ice/ObjectFactoryF.cpp +38 -0
- data/ext/ice/cpp/src/Ice/ObjectFactoryManager.cpp +140 -0
- data/ext/ice/cpp/src/Ice/ObjectFactoryManager.h +43 -0
- data/ext/ice/cpp/src/Ice/ObserverHelper.cpp +84 -0
- data/ext/ice/cpp/src/Ice/OpaqueEndpointI.cpp +407 -0
- data/ext/ice/cpp/src/Ice/OpaqueEndpointI.h +70 -0
- data/ext/ice/cpp/src/Ice/Outgoing.cpp +737 -0
- data/ext/ice/cpp/src/Ice/OutgoingAsync.cpp +874 -0
- data/ext/ice/cpp/src/Ice/Plugin.cpp +43 -0
- data/ext/ice/cpp/src/Ice/PluginF.cpp +38 -0
- data/ext/ice/cpp/src/Ice/PluginManagerI.cpp +503 -0
- data/ext/ice/cpp/src/Ice/PluginManagerI.h +67 -0
- data/ext/ice/cpp/src/Ice/Process.cpp +299 -0
- data/ext/ice/cpp/src/Ice/ProcessF.cpp +39 -0
- data/ext/ice/cpp/src/Ice/Properties.cpp +45 -0
- data/ext/ice/cpp/src/Ice/PropertiesAdmin.cpp +555 -0
- data/ext/ice/cpp/src/Ice/PropertiesAdminI.cpp +207 -0
- data/ext/ice/cpp/src/Ice/PropertiesAdminI.h +45 -0
- data/ext/ice/cpp/src/Ice/PropertiesF.cpp +39 -0
- data/ext/ice/cpp/src/Ice/PropertiesI.cpp +759 -0
- data/ext/ice/cpp/src/Ice/PropertiesI.h +78 -0
- data/ext/ice/cpp/src/Ice/PropertyNames.cpp +1293 -0
- data/ext/ice/cpp/src/Ice/PropertyNames.h +81 -0
- data/ext/ice/cpp/src/Ice/Protocol.cpp +137 -0
- data/ext/ice/cpp/src/Ice/ProtocolInstance.cpp +98 -0
- data/ext/ice/cpp/src/Ice/ProtocolInstance.h +91 -0
- data/ext/ice/cpp/src/Ice/ProtocolInstanceF.h +26 -0
- data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.cpp +51 -0
- data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.h +67 -0
- data/ext/ice/cpp/src/Ice/ProtocolPluginFacadeF.h +26 -0
- data/ext/ice/cpp/src/Ice/Proxy.cpp +1810 -0
- data/ext/ice/cpp/src/Ice/ProxyFactory.cpp +305 -0
- data/ext/ice/cpp/src/Ice/ProxyFactory.h +57 -0
- data/ext/ice/cpp/src/Ice/Reference.cpp +1947 -0
- data/ext/ice/cpp/src/Ice/Reference.h +305 -0
- data/ext/ice/cpp/src/Ice/ReferenceFactory.cpp +937 -0
- data/ext/ice/cpp/src/Ice/ReferenceFactory.h +81 -0
- data/ext/ice/cpp/src/Ice/ReferenceFactoryF.h +24 -0
- data/ext/ice/cpp/src/Ice/RemoteLogger.cpp +958 -0
- data/ext/ice/cpp/src/Ice/ReplyStatus.h +29 -0
- data/ext/ice/cpp/src/Ice/RequestHandler.cpp +40 -0
- data/ext/ice/cpp/src/Ice/RequestHandler.h +90 -0
- data/ext/ice/cpp/src/Ice/RequestHandlerFactory.cpp +70 -0
- data/ext/ice/cpp/src/Ice/RequestHandlerFactory.h +41 -0
- data/ext/ice/cpp/src/Ice/ResponseHandler.cpp +20 -0
- data/ext/ice/cpp/src/Ice/ResponseHandler.h +39 -0
- data/ext/ice/cpp/src/Ice/RetryQueue.cpp +154 -0
- data/ext/ice/cpp/src/Ice/RetryQueue.h +69 -0
- data/ext/ice/cpp/src/Ice/RetryQueueF.h +24 -0
- data/ext/ice/cpp/src/Ice/Router.cpp +849 -0
- data/ext/ice/cpp/src/Ice/RouterF.cpp +39 -0
- data/ext/ice/cpp/src/Ice/RouterInfo.cpp +381 -0
- data/ext/ice/cpp/src/Ice/RouterInfo.h +148 -0
- data/ext/ice/cpp/src/Ice/RouterInfoF.h +30 -0
- data/ext/ice/cpp/src/Ice/Selector.cpp +926 -0
- data/ext/ice/cpp/src/Ice/Selector.h +231 -0
- data/ext/ice/cpp/src/Ice/ServantLocator.cpp +41 -0
- data/ext/ice/cpp/src/Ice/ServantLocatorF.cpp +38 -0
- data/ext/ice/cpp/src/Ice/ServantManager.cpp +495 -0
- data/ext/ice/cpp/src/Ice/ServantManager.h +74 -0
- data/ext/ice/cpp/src/Ice/Service.cpp +1897 -0
- data/ext/ice/cpp/src/Ice/SharedContext.h +51 -0
- data/ext/ice/cpp/src/Ice/SliceChecksumDict.cpp +34 -0
- data/ext/ice/cpp/src/Ice/SliceChecksums.cpp +80 -0
- data/ext/ice/cpp/src/Ice/SlicedData.cpp +80 -0
- data/ext/ice/cpp/src/Ice/Stream.cpp +53 -0
- data/ext/ice/cpp/src/Ice/StreamI.cpp +832 -0
- data/ext/ice/cpp/src/Ice/StreamI.h +198 -0
- data/ext/ice/cpp/src/Ice/StreamSocket.cpp +521 -0
- data/ext/ice/cpp/src/Ice/StreamSocket.h +85 -0
- data/ext/ice/cpp/src/Ice/StringConverterPlugin.cpp +145 -0
- data/ext/ice/cpp/src/Ice/SysLoggerI.cpp +167 -0
- data/ext/ice/cpp/src/Ice/SysLoggerI.h +43 -0
- data/ext/ice/cpp/src/Ice/TcpAcceptor.cpp +235 -0
- data/ext/ice/cpp/src/Ice/TcpAcceptor.h +67 -0
- data/ext/ice/cpp/src/Ice/TcpConnector.cpp +133 -0
- data/ext/ice/cpp/src/Ice/TcpConnector.h +51 -0
- data/ext/ice/cpp/src/Ice/TcpEndpointI.cpp +397 -0
- data/ext/ice/cpp/src/Ice/TcpEndpointI.h +93 -0
- data/ext/ice/cpp/src/Ice/TcpTransceiver.cpp +127 -0
- data/ext/ice/cpp/src/Ice/TcpTransceiver.h +61 -0
- data/ext/ice/cpp/src/Ice/ThreadPool.cpp +1357 -0
- data/ext/ice/cpp/src/Ice/ThreadPool.h +399 -0
- data/ext/ice/cpp/src/Ice/TraceLevels.cpp +43 -0
- data/ext/ice/cpp/src/Ice/TraceLevels.h +50 -0
- data/ext/ice/cpp/src/Ice/TraceLevelsF.h +26 -0
- data/ext/ice/cpp/src/Ice/TraceUtil.cpp +452 -0
- data/ext/ice/cpp/src/Ice/TraceUtil.h +28 -0
- data/ext/ice/cpp/src/Ice/Transceiver.cpp +24 -0
- data/ext/ice/cpp/src/Ice/Transceiver.h +52 -0
- data/ext/ice/cpp/src/Ice/TransceiverF.h +38 -0
- data/ext/ice/cpp/src/Ice/UdpConnector.cpp +144 -0
- data/ext/ice/cpp/src/Ice/UdpConnector.h +51 -0
- data/ext/ice/cpp/src/Ice/UdpEndpointI.cpp +483 -0
- data/ext/ice/cpp/src/Ice/UdpEndpointI.h +95 -0
- data/ext/ice/cpp/src/Ice/UdpTransceiver.cpp +1156 -0
- data/ext/ice/cpp/src/Ice/UdpTransceiver.h +123 -0
- data/ext/ice/cpp/src/Ice/Version.cpp +46 -0
- data/ext/ice/cpp/src/Ice/WSAcceptor.cpp +103 -0
- data/ext/ice/cpp/src/Ice/WSAcceptor.h +61 -0
- data/ext/ice/cpp/src/Ice/WSConnector.cpp +113 -0
- data/ext/ice/cpp/src/Ice/WSConnector.h +51 -0
- data/ext/ice/cpp/src/Ice/WSEndpoint.cpp +441 -0
- data/ext/ice/cpp/src/Ice/WSEndpoint.h +97 -0
- data/ext/ice/cpp/src/Ice/WSTransceiver.cpp +1728 -0
- data/ext/ice/cpp/src/Ice/WSTransceiver.h +149 -0
- data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.cpp +594 -0
- data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.h +1035 -0
- data/ext/ice/cpp/src/IceDiscovery/LocatorI.cpp +208 -0
- data/ext/ice/cpp/src/IceDiscovery/LocatorI.h +78 -0
- data/ext/ice/cpp/src/IceDiscovery/LookupI.cpp +308 -0
- data/ext/ice/cpp/src/IceDiscovery/LookupI.h +183 -0
- data/ext/ice/cpp/src/IceDiscovery/Makefile +61 -0
- data/ext/ice/cpp/src/IceDiscovery/PluginI.cpp +148 -0
- data/ext/ice/cpp/src/IceDiscovery/PluginI.h +39 -0
- data/ext/ice/cpp/src/IceSSL/AcceptorI.cpp +258 -0
- data/ext/ice/cpp/src/IceSSL/AcceptorI.h +66 -0
- data/ext/ice/cpp/src/IceSSL/Certificate.cpp +1334 -0
- data/ext/ice/cpp/src/IceSSL/ConnectionInfo.cpp +42 -0
- data/ext/ice/cpp/src/IceSSL/ConnectorI.cpp +151 -0
- data/ext/ice/cpp/src/IceSSL/ConnectorI.h +56 -0
- data/ext/ice/cpp/src/IceSSL/EndpointI.cpp +397 -0
- data/ext/ice/cpp/src/IceSSL/EndpointI.h +96 -0
- data/ext/ice/cpp/src/IceSSL/EndpointInfo.cpp +41 -0
- data/ext/ice/cpp/src/IceSSL/Instance.cpp +38 -0
- data/ext/ice/cpp/src/IceSSL/Instance.h +42 -0
- data/ext/ice/cpp/src/IceSSL/InstanceF.h +34 -0
- data/ext/ice/cpp/src/IceSSL/Makefile +82 -0
- data/ext/ice/cpp/src/IceSSL/OpenSSLEngine.cpp +1001 -0
- data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.cpp +607 -0
- data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.h +75 -0
- data/ext/ice/cpp/src/IceSSL/PluginI.cpp +102 -0
- data/ext/ice/cpp/src/IceSSL/PluginI.h +56 -0
- data/ext/ice/cpp/src/IceSSL/RFC2253.cpp +541 -0
- data/ext/ice/cpp/src/IceSSL/RFC2253.h +67 -0
- data/ext/ice/cpp/src/IceSSL/SChannelEngine.cpp +729 -0
- data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.cpp +1062 -0
- data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.h +130 -0
- data/ext/ice/cpp/src/IceSSL/SSLEngine.cpp +291 -0
- data/ext/ice/cpp/src/IceSSL/SSLEngine.h +264 -0
- data/ext/ice/cpp/src/IceSSL/SSLEngineF.h +41 -0
- data/ext/ice/cpp/src/IceSSL/SecureTransportEngine.cpp +1514 -0
- data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.cpp +609 -0
- data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.h +91 -0
- data/ext/ice/cpp/src/IceSSL/TrustManager.cpp +246 -0
- data/ext/ice/cpp/src/IceSSL/TrustManager.h +51 -0
- data/ext/ice/cpp/src/IceSSL/TrustManagerF.h +26 -0
- data/ext/ice/cpp/src/IceSSL/Util.cpp +1423 -0
- data/ext/ice/cpp/src/IceSSL/Util.h +136 -0
- data/ext/ice/cpp/src/IceUtil/ArgVector.cpp +65 -0
- data/ext/ice/cpp/src/IceUtil/ArgVector.h +41 -0
- data/ext/ice/cpp/src/IceUtil/Cond.cpp +386 -0
- data/ext/ice/cpp/src/IceUtil/ConvertUTF.cpp +477 -0
- data/ext/ice/cpp/src/IceUtil/ConvertUTF.h +144 -0
- data/ext/ice/cpp/src/IceUtil/CountDownLatch.cpp +184 -0
- data/ext/ice/cpp/src/IceUtil/CtrlCHandler.cpp +273 -0
- data/ext/ice/cpp/src/IceUtil/Exception.cpp +782 -0
- data/ext/ice/cpp/src/IceUtil/FileUtil.cpp +532 -0
- data/ext/ice/cpp/src/IceUtil/FileUtil.h +159 -0
- data/ext/ice/cpp/src/IceUtil/InputUtil.cpp +41 -0
- data/ext/ice/cpp/src/IceUtil/Makefile +68 -0
- data/ext/ice/cpp/src/IceUtil/MutexProtocol.cpp +24 -0
- data/ext/ice/cpp/src/IceUtil/Options.cpp +1049 -0
- data/ext/ice/cpp/src/IceUtil/OutputUtil.cpp +591 -0
- data/ext/ice/cpp/src/IceUtil/Random.cpp +185 -0
- data/ext/ice/cpp/src/IceUtil/RecMutex.cpp +257 -0
- data/ext/ice/cpp/src/IceUtil/SHA1.cpp +126 -0
- data/ext/ice/cpp/src/IceUtil/Shared.cpp +200 -0
- data/ext/ice/cpp/src/IceUtil/StopWatch.h +54 -0
- data/ext/ice/cpp/src/IceUtil/StringConverter.cpp +450 -0
- data/ext/ice/cpp/src/IceUtil/StringUtil.cpp +842 -0
- data/ext/ice/cpp/src/IceUtil/Thread.cpp +809 -0
- data/ext/ice/cpp/src/IceUtil/ThreadException.cpp +172 -0
- data/ext/ice/cpp/src/IceUtil/Time.cpp +306 -0
- data/ext/ice/cpp/src/IceUtil/Timer.cpp +251 -0
- data/ext/ice/cpp/src/IceUtil/UUID.cpp +174 -0
- data/ext/ice/cpp/src/IceUtil/Unicode.cpp +131 -0
- data/ext/ice/cpp/src/IceUtil/Unicode.h +49 -0
- data/ext/ice/cpp/src/Slice/CPlusPlusUtil.cpp +1139 -0
- data/ext/ice/cpp/src/Slice/Checksum.cpp +452 -0
- data/ext/ice/cpp/src/Slice/CsUtil.cpp +2650 -0
- data/ext/ice/cpp/src/Slice/DotNetNames.cpp +146 -0
- data/ext/ice/cpp/src/Slice/FileTracker.cpp +203 -0
- data/ext/ice/cpp/src/Slice/Grammar.cpp +4755 -0
- data/ext/ice/cpp/src/Slice/Grammar.h +98 -0
- data/ext/ice/cpp/src/Slice/GrammarUtil.h +234 -0
- data/ext/ice/cpp/src/Slice/JavaUtil.cpp +4376 -0
- data/ext/ice/cpp/src/Slice/MD5.cpp +57 -0
- data/ext/ice/cpp/src/Slice/MD5.h +44 -0
- data/ext/ice/cpp/src/Slice/MD5I.cpp +385 -0
- data/ext/ice/cpp/src/Slice/MD5I.h +91 -0
- data/ext/ice/cpp/src/Slice/Makefile +65 -0
- data/ext/ice/cpp/src/Slice/PHPUtil.cpp +156 -0
- data/ext/ice/cpp/src/Slice/Parser.cpp +6386 -0
- data/ext/ice/cpp/src/Slice/Preprocessor.cpp +686 -0
- data/ext/ice/cpp/src/Slice/Python.cpp +675 -0
- data/ext/ice/cpp/src/Slice/PythonUtil.cpp +2614 -0
- data/ext/ice/cpp/src/Slice/Ruby.cpp +317 -0
- data/ext/ice/cpp/src/Slice/RubyUtil.cpp +1774 -0
- data/ext/ice/cpp/src/Slice/Scanner.cpp +2426 -0
- data/ext/ice/cpp/src/Slice/Util.cpp +325 -0
- data/ext/ice/mcpp/config.h.Darwin +227 -0
- data/ext/ice/mcpp/config.h.Linux +227 -0
- data/ext/ice/mcpp/config.h.MINGW +7 -0
- data/ext/ice/mcpp/configed.H +382 -0
- data/ext/ice/mcpp/directive.c +1699 -0
- data/ext/ice/mcpp/eval.c +1673 -0
- data/ext/ice/mcpp/expand.c +2980 -0
- data/ext/ice/mcpp/internal.H +564 -0
- data/ext/ice/mcpp/main.c +1131 -0
- data/ext/ice/mcpp/mbchar.c +869 -0
- data/ext/ice/mcpp/mcpp_lib.h +31 -0
- data/ext/ice/mcpp/mcpp_out.h +13 -0
- data/ext/ice/mcpp/support.c +2811 -0
- data/ext/ice/mcpp/system.H +396 -0
- data/ext/ice/mcpp/system.c +4940 -0
- data/ice.gemspec +41 -0
- data/lib/Glacier2.rb +12 -0
- data/lib/Glacier2/Metrics.rb +99 -0
- data/lib/Glacier2/PermissionsVerifier.rb +168 -0
- data/lib/Glacier2/PermissionsVerifierF.rb +34 -0
- data/lib/Glacier2/Router.rb +141 -0
- data/lib/Glacier2/RouterF.rb +29 -0
- data/lib/Glacier2/SSLInfo.rb +79 -0
- data/lib/Glacier2/Session.rb +470 -0
- data/lib/Ice.rb +659 -0
- data/lib/Ice/BuiltinSequences.rb +64 -0
- data/lib/Ice/Communicator.rb +93 -0
- data/lib/Ice/CommunicatorF.rb +28 -0
- data/lib/Ice/Connection.rb +414 -0
- data/lib/Ice/ConnectionF.rb +36 -0
- data/lib/Ice/Current.rb +152 -0
- data/lib/Ice/Endpoint.rb +265 -0
- data/lib/Ice/EndpointF.rb +52 -0
- data/lib/Ice/EndpointTypes.rb +77 -0
- data/lib/Ice/FacetMap.rb +28 -0
- data/lib/Ice/Identity.rb +70 -0
- data/lib/Ice/ImplicitContext.rb +59 -0
- data/lib/Ice/ImplicitContextF.rb +28 -0
- data/lib/Ice/Instrumentation.rb +425 -0
- data/lib/Ice/InstrumentationF.rb +35 -0
- data/lib/Ice/LocalException.rb +1081 -0
- data/lib/Ice/Locator.rb +314 -0
- data/lib/Ice/LocatorF.rb +34 -0
- data/lib/Ice/Logger.rb +57 -0
- data/lib/Ice/LoggerF.rb +28 -0
- data/lib/Ice/Metrics.rb +696 -0
- data/lib/Ice/ObjectAdapterF.rb +28 -0
- data/lib/Ice/ObjectFactory.rb +53 -0
- data/lib/Ice/ObjectFactoryF.rb +28 -0
- data/lib/Ice/Plugin.rb +87 -0
- data/lib/Ice/PluginF.rb +32 -0
- data/lib/Ice/Process.rb +93 -0
- data/lib/Ice/ProcessF.rb +29 -0
- data/lib/Ice/Properties.rb +65 -0
- data/lib/Ice/PropertiesAdmin.rb +104 -0
- data/lib/Ice/PropertiesF.rb +33 -0
- data/lib/Ice/Router.rb +163 -0
- data/lib/Ice/RouterF.rb +29 -0
- data/lib/Ice/SliceChecksumDict.rb +28 -0
- data/lib/Ice/Version.rb +100 -0
- data/lib/IceBox.rb +10 -0
- data/lib/IceBox/IceBox.rb +272 -0
- data/lib/IceGrid.rb +17 -0
- data/lib/IceGrid/Admin.rb +1076 -0
- data/lib/IceGrid/Descriptor.rb +1505 -0
- data/lib/IceGrid/Exception.rb +401 -0
- data/lib/IceGrid/FileParser.rb +105 -0
- data/lib/IceGrid/Locator.rb +105 -0
- data/lib/IceGrid/Observer.rb +571 -0
- data/lib/IceGrid/Query.rb +168 -0
- data/lib/IceGrid/Registry.rb +120 -0
- data/lib/IceGrid/Session.rb +114 -0
- data/lib/IceGrid/UserAccountMapper.rb +101 -0
- data/lib/IcePatch2.rb +10 -0
- data/lib/IcePatch2/FileInfo.rb +75 -0
- data/lib/IcePatch2/FileServer.rb +141 -0
- data/lib/IceStorm.rb +11 -0
- data/lib/IceStorm/IceStorm.rb +463 -0
- data/lib/IceStorm/Metrics.rb +155 -0
- data/slice/Freeze/BackgroundSaveEvictor.ice +111 -0
- data/slice/Freeze/CatalogData.ice +49 -0
- data/slice/Freeze/Connection.ice +111 -0
- data/slice/Freeze/ConnectionF.ice +20 -0
- data/slice/Freeze/DB.ice +37 -0
- data/slice/Freeze/Evictor.ice +339 -0
- data/slice/Freeze/EvictorF.ice +22 -0
- data/slice/Freeze/EvictorStorage.ice +72 -0
- data/slice/Freeze/Exception.ice +100 -0
- data/slice/Freeze/Transaction.ice +57 -0
- data/slice/Freeze/TransactionalEvictor.ice +50 -0
- data/slice/Glacier2/Metrics.ice +77 -0
- data/slice/Glacier2/PermissionsVerifier.ice +105 -0
- data/slice/Glacier2/PermissionsVerifierF.ice +21 -0
- data/slice/Glacier2/Router.ice +178 -0
- data/slice/Glacier2/RouterF.ice +20 -0
- data/slice/Glacier2/SSLInfo.ice +50 -0
- data/slice/Glacier2/Session.ice +273 -0
- data/slice/Ice/BuiltinSequences.ice +48 -0
- data/slice/Ice/Communicator.ice +567 -0
- data/slice/Ice/CommunicatorF.ice +20 -0
- data/slice/Ice/Connection.ice +323 -0
- data/slice/Ice/ConnectionF.ice +22 -0
- data/slice/Ice/Current.ice +160 -0
- data/slice/Ice/Endpoint.ice +227 -0
- data/slice/Ice/EndpointF.ice +32 -0
- data/slice/Ice/EndpointTypes.ice +38 -0
- data/slice/Ice/FacetMap.ice +25 -0
- data/slice/Ice/Identity.ice +59 -0
- data/slice/Ice/ImplicitContext.ice +109 -0
- data/slice/Ice/ImplicitContextF.ice +20 -0
- data/slice/Ice/Instrumentation.ice +499 -0
- data/slice/Ice/InstrumentationF.ice +26 -0
- data/slice/Ice/LocalException.ice +1015 -0
- data/slice/Ice/Locator.ice +227 -0
- data/slice/Ice/LocatorF.ice +21 -0
- data/slice/Ice/Logger.ice +86 -0
- data/slice/Ice/LoggerF.ice +20 -0
- data/slice/Ice/Metrics.ice +422 -0
- data/slice/Ice/ObjectAdapter.ice +673 -0
- data/slice/Ice/ObjectAdapterF.ice +20 -0
- data/slice/Ice/ObjectFactory.ice +60 -0
- data/slice/Ice/ObjectFactoryF.ice +20 -0
- data/slice/Ice/Plugin.ice +117 -0
- data/slice/Ice/PluginF.ice +21 -0
- data/slice/Ice/Process.ice +54 -0
- data/slice/Ice/ProcessF.ice +20 -0
- data/slice/Ice/Properties.ice +228 -0
- data/slice/Ice/PropertiesAdmin.ice +75 -0
- data/slice/Ice/PropertiesF.ice +21 -0
- data/slice/Ice/RemoteLogger.ice +232 -0
- data/slice/Ice/Router.ice +83 -0
- data/slice/Ice/RouterF.ice +20 -0
- data/slice/Ice/ServantLocator.ice +117 -0
- data/slice/Ice/ServantLocatorF.ice +20 -0
- data/slice/Ice/SliceChecksumDict.ice +25 -0
- data/slice/Ice/Version.ice +39 -0
- data/slice/IceBox/IceBox.ice +194 -0
- data/slice/IceDiscovery/IceDiscovery.ice +32 -0
- data/slice/IceGrid/Admin.ice +1578 -0
- data/slice/IceGrid/Descriptor.ice +1079 -0
- data/slice/IceGrid/Discovery.ice +73 -0
- data/slice/IceGrid/Exception.ice +383 -0
- data/slice/IceGrid/FileParser.ice +61 -0
- data/slice/IceGrid/Locator.ice +56 -0
- data/slice/IceGrid/Observer.ice +394 -0
- data/slice/IceGrid/PluginFacade.ice +316 -0
- data/slice/IceGrid/Query.ice +130 -0
- data/slice/IceGrid/Registry.ice +138 -0
- data/slice/IceGrid/Session.ice +124 -0
- data/slice/IceGrid/UserAccountMapper.ice +58 -0
- data/slice/IcePatch2/FileInfo.ice +49 -0
- data/slice/IcePatch2/FileServer.ice +129 -0
- data/slice/IceSSL/ConnectionInfo.ice +34 -0
- data/slice/IceSSL/EndpointInfo.ice +41 -0
- data/slice/IceStorm/IceStorm.ice +405 -0
- data/slice/IceStorm/Metrics.ice +71 -0
- metadata +737 -0
|
@@ -0,0 +1,1928 @@
|
|
|
1
|
+
// **********************************************************************
|
|
2
|
+
//
|
|
3
|
+
// Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved.
|
|
4
|
+
//
|
|
5
|
+
// This copy of Ice is licensed to you under the terms described in the
|
|
6
|
+
// ICE_LICENSE file included in this distribution.
|
|
7
|
+
//
|
|
8
|
+
// **********************************************************************
|
|
9
|
+
|
|
10
|
+
#include <IceUtil/DisableWarnings.h>
|
|
11
|
+
#include <Ice/Instance.h>
|
|
12
|
+
#include <Ice/TraceLevels.h>
|
|
13
|
+
#include <Ice/DefaultsAndOverrides.h>
|
|
14
|
+
#include <Ice/RouterInfo.h>
|
|
15
|
+
#include <Ice/Router.h>
|
|
16
|
+
#include <Ice/LocatorInfo.h>
|
|
17
|
+
#include <Ice/Locator.h>
|
|
18
|
+
#include <Ice/ReferenceFactory.h>
|
|
19
|
+
#include <Ice/ProxyFactory.h>
|
|
20
|
+
#include <Ice/ThreadPool.h>
|
|
21
|
+
#include <Ice/ConnectionFactory.h>
|
|
22
|
+
#include <Ice/ObjectFactoryManager.h>
|
|
23
|
+
#include <Ice/LocalException.h>
|
|
24
|
+
#include <Ice/ObjectAdapterFactory.h>
|
|
25
|
+
#include <Ice/Exception.h>
|
|
26
|
+
#include <Ice/PropertiesI.h>
|
|
27
|
+
#include <Ice/PropertiesAdminI.h>
|
|
28
|
+
#include <Ice/LoggerI.h>
|
|
29
|
+
#include <Ice/Network.h>
|
|
30
|
+
#include <Ice/NetworkProxy.h>
|
|
31
|
+
#include <Ice/EndpointFactoryManager.h>
|
|
32
|
+
#include <Ice/RequestHandlerFactory.h>
|
|
33
|
+
#include <Ice/RetryQueue.h>
|
|
34
|
+
#include <Ice/DynamicLibrary.h>
|
|
35
|
+
#include <Ice/PluginManagerI.h>
|
|
36
|
+
#include <Ice/Initialize.h>
|
|
37
|
+
#include <Ice/LoggerUtil.h>
|
|
38
|
+
#include <IceUtil/StringUtil.h>
|
|
39
|
+
#include <Ice/PropertiesI.h>
|
|
40
|
+
#include <Ice/Communicator.h>
|
|
41
|
+
#include <Ice/InstrumentationI.h>
|
|
42
|
+
#include <Ice/ProtocolInstance.h>
|
|
43
|
+
#include <Ice/LoggerAdminI.h>
|
|
44
|
+
#include <IceUtil/UUID.h>
|
|
45
|
+
#include <IceUtil/Mutex.h>
|
|
46
|
+
#include <IceUtil/MutexPtrLock.h>
|
|
47
|
+
#include <Ice/ObserverHelper.h>
|
|
48
|
+
|
|
49
|
+
#include <stdio.h>
|
|
50
|
+
#include <list>
|
|
51
|
+
|
|
52
|
+
#ifndef _WIN32
|
|
53
|
+
# include <Ice/SysLoggerI.h>
|
|
54
|
+
|
|
55
|
+
# include <signal.h>
|
|
56
|
+
# include <syslog.h>
|
|
57
|
+
# include <pwd.h>
|
|
58
|
+
# include <sys/types.h>
|
|
59
|
+
#endif
|
|
60
|
+
|
|
61
|
+
#if defined(__linux) || defined(__sun)
|
|
62
|
+
# include <grp.h> // for initgroups
|
|
63
|
+
#endif
|
|
64
|
+
|
|
65
|
+
#include <Ice/UdpEndpointI.h>
|
|
66
|
+
|
|
67
|
+
#ifndef ICE_OS_WINRT
|
|
68
|
+
# include <Ice/TcpEndpointI.h>
|
|
69
|
+
#else
|
|
70
|
+
# include <IceSSL/EndpointInfo.h> // For IceSSL::EndpointType
|
|
71
|
+
# include <Ice/winrt/StreamEndpointI.h>
|
|
72
|
+
#endif
|
|
73
|
+
|
|
74
|
+
#include <Ice/WSEndpoint.h>
|
|
75
|
+
|
|
76
|
+
using namespace std;
|
|
77
|
+
using namespace Ice;
|
|
78
|
+
using namespace IceInternal;
|
|
79
|
+
|
|
80
|
+
namespace IceUtilInternal
|
|
81
|
+
{
|
|
82
|
+
|
|
83
|
+
extern bool ICE_DECLSPEC_IMPORT nullHandleAbort;
|
|
84
|
+
extern bool ICE_DECLSPEC_IMPORT printStackTraces;
|
|
85
|
+
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
namespace
|
|
89
|
+
{
|
|
90
|
+
|
|
91
|
+
IceUtil::Mutex* staticMutex = 0;
|
|
92
|
+
bool oneOfDone = false;
|
|
93
|
+
std::list<IceInternal::Instance*>* instanceList = 0;
|
|
94
|
+
|
|
95
|
+
#ifndef _WIN32
|
|
96
|
+
struct sigaction oldAction;
|
|
97
|
+
#endif
|
|
98
|
+
bool printProcessIdDone = false;
|
|
99
|
+
string identForOpenlog;
|
|
100
|
+
|
|
101
|
+
//
|
|
102
|
+
// Should be called with staticMutex locked
|
|
103
|
+
//
|
|
104
|
+
size_t instanceCount()
|
|
105
|
+
{
|
|
106
|
+
if(instanceList == 0)
|
|
107
|
+
{
|
|
108
|
+
return 0;
|
|
109
|
+
}
|
|
110
|
+
else
|
|
111
|
+
{
|
|
112
|
+
return instanceList->size();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
class Init
|
|
117
|
+
{
|
|
118
|
+
public:
|
|
119
|
+
|
|
120
|
+
Init()
|
|
121
|
+
{
|
|
122
|
+
staticMutex = new IceUtil::Mutex;
|
|
123
|
+
|
|
124
|
+
//
|
|
125
|
+
// Although probably not necessary here, we consistently lock
|
|
126
|
+
// staticMutex before accessing instanceList
|
|
127
|
+
//
|
|
128
|
+
IceUtilInternal::MutexPtrLock<IceUtil::Mutex> sync(staticMutex);
|
|
129
|
+
instanceList = new std::list<IceInternal::Instance*>;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
~Init()
|
|
133
|
+
{
|
|
134
|
+
{
|
|
135
|
+
IceUtilInternal::MutexPtrLock<IceUtil::Mutex> sync(staticMutex);
|
|
136
|
+
int notDestroyedCount = 0;
|
|
137
|
+
|
|
138
|
+
for(std::list<IceInternal::Instance*>::const_iterator p = instanceList->begin();
|
|
139
|
+
p != instanceList->end(); ++p)
|
|
140
|
+
{
|
|
141
|
+
if(!(*p)->destroyed())
|
|
142
|
+
{
|
|
143
|
+
notDestroyedCount++;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
if(notDestroyedCount > 0)
|
|
148
|
+
{
|
|
149
|
+
cerr << "!! " << IceUtil::Time::now().toDateTime() << " error: ";
|
|
150
|
+
if(notDestroyedCount == 1)
|
|
151
|
+
{
|
|
152
|
+
cerr << "communicator ";
|
|
153
|
+
}
|
|
154
|
+
else
|
|
155
|
+
{
|
|
156
|
+
cerr << notDestroyedCount << " communicators ";
|
|
157
|
+
}
|
|
158
|
+
cerr << "not destroyed during global destruction.";
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
delete instanceList;
|
|
162
|
+
instanceList = 0;
|
|
163
|
+
}
|
|
164
|
+
delete staticMutex;
|
|
165
|
+
staticMutex = 0;
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
Init init;
|
|
170
|
+
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
namespace IceInternal // Required because ObserverUpdaterI is a friend of Instance
|
|
174
|
+
{
|
|
175
|
+
|
|
176
|
+
class ObserverUpdaterI : public Ice::Instrumentation::ObserverUpdater
|
|
177
|
+
{
|
|
178
|
+
public:
|
|
179
|
+
|
|
180
|
+
ObserverUpdaterI(const InstancePtr&);
|
|
181
|
+
|
|
182
|
+
virtual void updateConnectionObservers();
|
|
183
|
+
virtual void updateThreadObservers();
|
|
184
|
+
|
|
185
|
+
private:
|
|
186
|
+
|
|
187
|
+
const InstancePtr _instance;
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
//
|
|
192
|
+
// Timer specialization which supports the thread observer
|
|
193
|
+
//
|
|
194
|
+
class Timer : public IceUtil::Timer
|
|
195
|
+
{
|
|
196
|
+
public:
|
|
197
|
+
|
|
198
|
+
Timer(int priority) :
|
|
199
|
+
IceUtil::Timer(priority),
|
|
200
|
+
_hasObserver(false)
|
|
201
|
+
{
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
Timer() :
|
|
205
|
+
_hasObserver(false)
|
|
206
|
+
{
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
void updateObserver(const Ice::Instrumentation::CommunicatorObserverPtr&);
|
|
210
|
+
|
|
211
|
+
private:
|
|
212
|
+
|
|
213
|
+
virtual void runTimerTask(const IceUtil::TimerTaskPtr&);
|
|
214
|
+
|
|
215
|
+
IceUtil::Mutex _mutex;
|
|
216
|
+
volatile bool _hasObserver;
|
|
217
|
+
ObserverHelperT<Ice::Instrumentation::ThreadObserver> _observer;
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
void
|
|
223
|
+
Timer::updateObserver(const Ice::Instrumentation::CommunicatorObserverPtr& obsv)
|
|
224
|
+
{
|
|
225
|
+
IceUtil::Mutex::Lock sync(_mutex);
|
|
226
|
+
assert(obsv);
|
|
227
|
+
_observer.attach(obsv->getThreadObserver("Communicator",
|
|
228
|
+
"Ice.Timer",
|
|
229
|
+
Ice::Instrumentation::ThreadStateIdle,
|
|
230
|
+
_observer.get()));
|
|
231
|
+
_hasObserver = _observer.get();
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
void
|
|
235
|
+
Timer::runTimerTask(const IceUtil::TimerTaskPtr& task)
|
|
236
|
+
{
|
|
237
|
+
if(_hasObserver)
|
|
238
|
+
{
|
|
239
|
+
Ice::Instrumentation::ThreadObserverPtr threadObserver;
|
|
240
|
+
{
|
|
241
|
+
IceUtil::Mutex::Lock sync(_mutex);
|
|
242
|
+
threadObserver = _observer.get();
|
|
243
|
+
}
|
|
244
|
+
if(threadObserver)
|
|
245
|
+
{
|
|
246
|
+
threadObserver->stateChanged(Ice::Instrumentation::ThreadStateIdle,
|
|
247
|
+
Ice::Instrumentation::ThreadStateInUseForOther);
|
|
248
|
+
}
|
|
249
|
+
try
|
|
250
|
+
{
|
|
251
|
+
task->runTimerTask();
|
|
252
|
+
}
|
|
253
|
+
catch(...)
|
|
254
|
+
{
|
|
255
|
+
if(threadObserver)
|
|
256
|
+
{
|
|
257
|
+
threadObserver->stateChanged(Ice::Instrumentation::ThreadStateInUseForOther,
|
|
258
|
+
Ice::Instrumentation::ThreadStateIdle);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
if(threadObserver)
|
|
262
|
+
{
|
|
263
|
+
threadObserver->stateChanged(Ice::Instrumentation::ThreadStateInUseForOther,
|
|
264
|
+
Ice::Instrumentation::ThreadStateIdle);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
else
|
|
268
|
+
{
|
|
269
|
+
task->runTimerTask();
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
IceUtil::Shared* IceInternal::upCast(Instance* p) { return p; }
|
|
274
|
+
|
|
275
|
+
IceInternal::ObserverUpdaterI::ObserverUpdaterI(const InstancePtr& instance) : _instance(instance)
|
|
276
|
+
{
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
void
|
|
280
|
+
IceInternal::ObserverUpdaterI::updateConnectionObservers()
|
|
281
|
+
{
|
|
282
|
+
_instance->updateConnectionObservers();
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
void
|
|
286
|
+
IceInternal::ObserverUpdaterI::updateThreadObservers()
|
|
287
|
+
{
|
|
288
|
+
_instance->updateThreadObservers();
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
bool
|
|
292
|
+
IceInternal::Instance::destroyed() const
|
|
293
|
+
{
|
|
294
|
+
Lock sync(*this);
|
|
295
|
+
return _state == StateDestroyed;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
TraceLevelsPtr
|
|
299
|
+
IceInternal::Instance::traceLevels() const
|
|
300
|
+
{
|
|
301
|
+
// No mutex lock, immutable.
|
|
302
|
+
assert(_traceLevels);
|
|
303
|
+
return _traceLevels;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
DefaultsAndOverridesPtr
|
|
307
|
+
IceInternal::Instance::defaultsAndOverrides() const
|
|
308
|
+
{
|
|
309
|
+
// No mutex lock, immutable.
|
|
310
|
+
assert(_defaultsAndOverrides);
|
|
311
|
+
return _defaultsAndOverrides;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
RouterManagerPtr
|
|
315
|
+
IceInternal::Instance::routerManager() const
|
|
316
|
+
{
|
|
317
|
+
Lock sync(*this);
|
|
318
|
+
|
|
319
|
+
if(_state == StateDestroyed)
|
|
320
|
+
{
|
|
321
|
+
throw CommunicatorDestroyedException(__FILE__, __LINE__);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
assert(_routerManager);
|
|
325
|
+
return _routerManager;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
LocatorManagerPtr
|
|
329
|
+
IceInternal::Instance::locatorManager() const
|
|
330
|
+
{
|
|
331
|
+
Lock sync(*this);
|
|
332
|
+
|
|
333
|
+
if(_state == StateDestroyed)
|
|
334
|
+
{
|
|
335
|
+
throw CommunicatorDestroyedException(__FILE__, __LINE__);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
assert(_locatorManager);
|
|
339
|
+
return _locatorManager;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
ReferenceFactoryPtr
|
|
343
|
+
IceInternal::Instance::referenceFactory() const
|
|
344
|
+
{
|
|
345
|
+
Lock sync(*this);
|
|
346
|
+
|
|
347
|
+
if(_state == StateDestroyed)
|
|
348
|
+
{
|
|
349
|
+
throw CommunicatorDestroyedException(__FILE__, __LINE__);
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
assert(_referenceFactory);
|
|
353
|
+
return _referenceFactory;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
RequestHandlerFactoryPtr
|
|
357
|
+
IceInternal::Instance::requestHandlerFactory() const
|
|
358
|
+
{
|
|
359
|
+
Lock sync(*this);
|
|
360
|
+
|
|
361
|
+
if(_state == StateDestroyed)
|
|
362
|
+
{
|
|
363
|
+
throw CommunicatorDestroyedException(__FILE__, __LINE__);
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
assert(_requestHandlerFactory);
|
|
367
|
+
return _requestHandlerFactory;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
ProxyFactoryPtr
|
|
371
|
+
IceInternal::Instance::proxyFactory() const
|
|
372
|
+
{
|
|
373
|
+
Lock sync(*this);
|
|
374
|
+
|
|
375
|
+
if(_state == StateDestroyed)
|
|
376
|
+
{
|
|
377
|
+
throw CommunicatorDestroyedException(__FILE__, __LINE__);
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
assert(_proxyFactory);
|
|
381
|
+
return _proxyFactory;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
OutgoingConnectionFactoryPtr
|
|
385
|
+
IceInternal::Instance::outgoingConnectionFactory() const
|
|
386
|
+
{
|
|
387
|
+
Lock sync(*this);
|
|
388
|
+
|
|
389
|
+
if(_state == StateDestroyed)
|
|
390
|
+
{
|
|
391
|
+
throw CommunicatorDestroyedException(__FILE__, __LINE__);
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
assert(_outgoingConnectionFactory);
|
|
395
|
+
return _outgoingConnectionFactory;
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
ObjectFactoryManagerPtr
|
|
399
|
+
IceInternal::Instance::servantFactoryManager() const
|
|
400
|
+
{
|
|
401
|
+
Lock sync(*this);
|
|
402
|
+
|
|
403
|
+
if(_state == StateDestroyed)
|
|
404
|
+
{
|
|
405
|
+
throw CommunicatorDestroyedException(__FILE__, __LINE__);
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
assert(_servantFactoryManager);
|
|
409
|
+
return _servantFactoryManager;
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
ObjectAdapterFactoryPtr
|
|
413
|
+
IceInternal::Instance::objectAdapterFactory() const
|
|
414
|
+
{
|
|
415
|
+
Lock sync(*this);
|
|
416
|
+
|
|
417
|
+
if(_state == StateDestroyed)
|
|
418
|
+
{
|
|
419
|
+
throw CommunicatorDestroyedException(__FILE__, __LINE__);
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
assert(_objectAdapterFactory);
|
|
423
|
+
return _objectAdapterFactory;
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
ProtocolSupport
|
|
427
|
+
IceInternal::Instance::protocolSupport() const
|
|
428
|
+
{
|
|
429
|
+
return _protocolSupport;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
bool
|
|
433
|
+
IceInternal::Instance::preferIPv6() const
|
|
434
|
+
{
|
|
435
|
+
return _preferIPv6;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
NetworkProxyPtr
|
|
439
|
+
IceInternal::Instance::networkProxy() const
|
|
440
|
+
{
|
|
441
|
+
return _networkProxy;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
ThreadPoolPtr
|
|
445
|
+
IceInternal::Instance::clientThreadPool()
|
|
446
|
+
{
|
|
447
|
+
Lock sync(*this);
|
|
448
|
+
|
|
449
|
+
if(_state == StateDestroyed)
|
|
450
|
+
{
|
|
451
|
+
throw CommunicatorDestroyedException(__FILE__, __LINE__);
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
assert(_clientThreadPool);
|
|
455
|
+
return _clientThreadPool;
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
ThreadPoolPtr
|
|
459
|
+
IceInternal::Instance::serverThreadPool()
|
|
460
|
+
{
|
|
461
|
+
Lock sync(*this);
|
|
462
|
+
|
|
463
|
+
if(_state == StateDestroyed)
|
|
464
|
+
{
|
|
465
|
+
throw CommunicatorDestroyedException(__FILE__, __LINE__);
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
if(!_serverThreadPool) // Lazy initialization.
|
|
469
|
+
{
|
|
470
|
+
if(_state == StateDestroyInProgress)
|
|
471
|
+
{
|
|
472
|
+
throw CommunicatorDestroyedException(__FILE__, __LINE__);
|
|
473
|
+
}
|
|
474
|
+
int timeout = _initData.properties->getPropertyAsInt("Ice.ServerIdleTime");
|
|
475
|
+
_serverThreadPool = new ThreadPool(this, "Ice.ThreadPool.Server", timeout);
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
return _serverThreadPool;
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
EndpointHostResolverPtr
|
|
482
|
+
IceInternal::Instance::endpointHostResolver()
|
|
483
|
+
{
|
|
484
|
+
Lock sync(*this);
|
|
485
|
+
|
|
486
|
+
if(_state == StateDestroyed)
|
|
487
|
+
{
|
|
488
|
+
throw CommunicatorDestroyedException(__FILE__, __LINE__);
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
assert(_endpointHostResolver);
|
|
492
|
+
return _endpointHostResolver;
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
RetryQueuePtr
|
|
496
|
+
IceInternal::Instance::retryQueue()
|
|
497
|
+
{
|
|
498
|
+
Lock sync(*this);
|
|
499
|
+
|
|
500
|
+
if(_state == StateDestroyed)
|
|
501
|
+
{
|
|
502
|
+
throw CommunicatorDestroyedException(__FILE__, __LINE__);
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
assert(_retryQueue);
|
|
506
|
+
return _retryQueue;
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
IceUtil::TimerPtr
|
|
510
|
+
IceInternal::Instance::timer()
|
|
511
|
+
{
|
|
512
|
+
Lock sync(*this);
|
|
513
|
+
|
|
514
|
+
if(_state == StateDestroyed)
|
|
515
|
+
{
|
|
516
|
+
throw CommunicatorDestroyedException(__FILE__, __LINE__);
|
|
517
|
+
}
|
|
518
|
+
assert(_timer);
|
|
519
|
+
return _timer;
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
EndpointFactoryManagerPtr
|
|
523
|
+
IceInternal::Instance::endpointFactoryManager() const
|
|
524
|
+
{
|
|
525
|
+
Lock sync(*this);
|
|
526
|
+
|
|
527
|
+
if(_state == StateDestroyed)
|
|
528
|
+
{
|
|
529
|
+
throw CommunicatorDestroyedException(__FILE__, __LINE__);
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
assert(_endpointFactoryManager);
|
|
533
|
+
return _endpointFactoryManager;
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
DynamicLibraryListPtr
|
|
537
|
+
IceInternal::Instance::dynamicLibraryList() const
|
|
538
|
+
{
|
|
539
|
+
Lock sync(*this);
|
|
540
|
+
|
|
541
|
+
if(_state == StateDestroyed)
|
|
542
|
+
{
|
|
543
|
+
throw CommunicatorDestroyedException(__FILE__, __LINE__);
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
assert(_dynamicLibraryList);
|
|
547
|
+
return _dynamicLibraryList;
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
PluginManagerPtr
|
|
551
|
+
IceInternal::Instance::pluginManager() const
|
|
552
|
+
{
|
|
553
|
+
Lock sync(*this);
|
|
554
|
+
|
|
555
|
+
if(_state == StateDestroyed)
|
|
556
|
+
{
|
|
557
|
+
throw CommunicatorDestroyedException(__FILE__, __LINE__);
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
assert(_pluginManager);
|
|
561
|
+
return _pluginManager;
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
const ACMConfig&
|
|
565
|
+
IceInternal::Instance::clientACM() const
|
|
566
|
+
{
|
|
567
|
+
// No mutex lock, immutable.
|
|
568
|
+
return _clientACM;
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
const ACMConfig&
|
|
572
|
+
IceInternal::Instance::serverACM() const
|
|
573
|
+
{
|
|
574
|
+
// No mutex lock, immutable.
|
|
575
|
+
return _serverACM;
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
Identity
|
|
579
|
+
IceInternal::Instance::stringToIdentity(const string& s) const
|
|
580
|
+
{
|
|
581
|
+
//
|
|
582
|
+
// This method only accepts printable ascii. Since printable ascii is a subset
|
|
583
|
+
// of all narrow string encodings, it is not necessary to convert the string
|
|
584
|
+
// from the native string encoding. Any characters other than printable-ASCII
|
|
585
|
+
// will cause an IllegalArgumentException. Note that it can contain Unicode
|
|
586
|
+
// encoded in the escaped form which is the reason why we call fromUTF8 after
|
|
587
|
+
// unespcaping the printable ASCII string.
|
|
588
|
+
//
|
|
589
|
+
|
|
590
|
+
Identity ident;
|
|
591
|
+
|
|
592
|
+
//
|
|
593
|
+
// Find unescaped separator; note that the string may contain an escaped
|
|
594
|
+
// backslash before the separator.
|
|
595
|
+
//
|
|
596
|
+
string::size_type slash = string::npos, pos = 0;
|
|
597
|
+
while((pos = s.find('/', pos)) != string::npos)
|
|
598
|
+
{
|
|
599
|
+
int escapes = 0;
|
|
600
|
+
while(static_cast<int>(pos)- escapes > 0 && s[pos - escapes - 1] == '\\')
|
|
601
|
+
{
|
|
602
|
+
escapes++;
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
//
|
|
606
|
+
// We ignore escaped escapes
|
|
607
|
+
//
|
|
608
|
+
if(escapes % 2 == 0)
|
|
609
|
+
{
|
|
610
|
+
if(slash == string::npos)
|
|
611
|
+
{
|
|
612
|
+
slash = pos;
|
|
613
|
+
}
|
|
614
|
+
else
|
|
615
|
+
{
|
|
616
|
+
//
|
|
617
|
+
// Extra unescaped slash found.
|
|
618
|
+
//
|
|
619
|
+
IdentityParseException ex(__FILE__, __LINE__);
|
|
620
|
+
ex.str = "unescaped backslash in identity `" + s + "'";
|
|
621
|
+
throw ex;
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
pos++;
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
if(slash == string::npos)
|
|
628
|
+
{
|
|
629
|
+
try
|
|
630
|
+
{
|
|
631
|
+
ident.name = IceUtilInternal::unescapeString(s, 0, s.size());
|
|
632
|
+
}
|
|
633
|
+
catch(const IceUtil::IllegalArgumentException& e)
|
|
634
|
+
{
|
|
635
|
+
IdentityParseException ex(__FILE__, __LINE__);
|
|
636
|
+
ex.str = "invalid identity name `" + s + "': " + e.reason();
|
|
637
|
+
throw ex;
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
else
|
|
641
|
+
{
|
|
642
|
+
try
|
|
643
|
+
{
|
|
644
|
+
ident.category = IceUtilInternal::unescapeString(s, 0, slash);
|
|
645
|
+
}
|
|
646
|
+
catch(const IceUtil::IllegalArgumentException& e)
|
|
647
|
+
{
|
|
648
|
+
IdentityParseException ex(__FILE__, __LINE__);
|
|
649
|
+
ex.str = "invalid category in identity `" + s + "': " + e.reason();
|
|
650
|
+
throw ex;
|
|
651
|
+
}
|
|
652
|
+
if(slash + 1 < s.size())
|
|
653
|
+
{
|
|
654
|
+
try
|
|
655
|
+
{
|
|
656
|
+
ident.name = IceUtilInternal::unescapeString(s, slash + 1, s.size());
|
|
657
|
+
}
|
|
658
|
+
catch(const IceUtil::IllegalArgumentException& e)
|
|
659
|
+
{
|
|
660
|
+
IdentityParseException ex(__FILE__, __LINE__);
|
|
661
|
+
ex.str = "invalid name in identity `" + s + "': " + e.reason();
|
|
662
|
+
throw ex;
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
ident.name = UTF8ToNative(ident.name, _stringConverter);
|
|
668
|
+
ident.category = UTF8ToNative(ident.category, _stringConverter);
|
|
669
|
+
|
|
670
|
+
return ident;
|
|
671
|
+
}
|
|
672
|
+
|
|
673
|
+
string
|
|
674
|
+
IceInternal::Instance::identityToString(const Identity& ident) const
|
|
675
|
+
{
|
|
676
|
+
//
|
|
677
|
+
// This method returns the stringified identity. The returned string only
|
|
678
|
+
// contains printable ascii. It can contain UTF8 in the escaped form.
|
|
679
|
+
//
|
|
680
|
+
string name = nativeToUTF8(ident.name, _stringConverter);
|
|
681
|
+
string category = nativeToUTF8(ident.category, _stringConverter);
|
|
682
|
+
|
|
683
|
+
if(category.empty())
|
|
684
|
+
{
|
|
685
|
+
return IceUtilInternal::escapeString(name, "/");
|
|
686
|
+
}
|
|
687
|
+
else
|
|
688
|
+
{
|
|
689
|
+
return IceUtilInternal::escapeString(category, "/") + '/' + IceUtilInternal::escapeString(name, "/");
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
Ice::ObjectPrx
|
|
694
|
+
IceInternal::Instance::createAdmin(const ObjectAdapterPtr& adminAdapter, const Identity& adminIdentity)
|
|
695
|
+
{
|
|
696
|
+
ObjectAdapterPtr adapter = adminAdapter;
|
|
697
|
+
bool createAdapter = !adminAdapter;
|
|
698
|
+
|
|
699
|
+
Lock sync(*this);
|
|
700
|
+
|
|
701
|
+
if(_state == StateDestroyed)
|
|
702
|
+
{
|
|
703
|
+
throw CommunicatorDestroyedException(__FILE__, __LINE__);
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
if(adminIdentity.name.empty())
|
|
707
|
+
{
|
|
708
|
+
throw Ice::IllegalIdentityException(__FILE__, __LINE__, adminIdentity);
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
if(_adminAdapter)
|
|
712
|
+
{
|
|
713
|
+
throw InitializationException(__FILE__, __LINE__, "Admin already created");
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
if(!_adminEnabled)
|
|
717
|
+
{
|
|
718
|
+
throw InitializationException(__FILE__, __LINE__, "Admin is disabled");
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
if(createAdapter)
|
|
722
|
+
{
|
|
723
|
+
if(_initData.properties->getProperty("Ice.Admin.Endpoints") != "")
|
|
724
|
+
{
|
|
725
|
+
adapter = _objectAdapterFactory->createObjectAdapter("Ice.Admin", 0);
|
|
726
|
+
}
|
|
727
|
+
else
|
|
728
|
+
{
|
|
729
|
+
throw InitializationException(__FILE__, __LINE__, "Ice.Admin.Endpoints is not set");
|
|
730
|
+
}
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
_adminIdentity = adminIdentity;
|
|
734
|
+
_adminAdapter = adapter;
|
|
735
|
+
addAllAdminFacets();
|
|
736
|
+
sync.release();
|
|
737
|
+
|
|
738
|
+
if(createAdapter)
|
|
739
|
+
{
|
|
740
|
+
try
|
|
741
|
+
{
|
|
742
|
+
adapter->activate();
|
|
743
|
+
}
|
|
744
|
+
catch(...)
|
|
745
|
+
{
|
|
746
|
+
//
|
|
747
|
+
// We clean it up, even through this error is not recoverable
|
|
748
|
+
// (can't call again createAdmin after fixing the problem since all the facets
|
|
749
|
+
// in the adapter are lost)
|
|
750
|
+
//
|
|
751
|
+
adapter->destroy();
|
|
752
|
+
sync.acquire();
|
|
753
|
+
_adminAdapter = 0;
|
|
754
|
+
throw;
|
|
755
|
+
}
|
|
756
|
+
}
|
|
757
|
+
setServerProcessProxy(adapter, adminIdentity);
|
|
758
|
+
return adapter->createProxy(adminIdentity);
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
Ice::ObjectPrx
|
|
762
|
+
IceInternal::Instance::getAdmin()
|
|
763
|
+
{
|
|
764
|
+
Lock sync(*this);
|
|
765
|
+
|
|
766
|
+
if(_state == StateDestroyed)
|
|
767
|
+
{
|
|
768
|
+
throw CommunicatorDestroyedException(__FILE__, __LINE__);
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
if(_adminAdapter)
|
|
772
|
+
{
|
|
773
|
+
return _adminAdapter->createProxy(_adminIdentity);
|
|
774
|
+
}
|
|
775
|
+
else if(_adminEnabled)
|
|
776
|
+
{
|
|
777
|
+
ObjectAdapterPtr adapter;
|
|
778
|
+
if(_initData.properties->getProperty("Ice.Admin.Endpoints") != "")
|
|
779
|
+
{
|
|
780
|
+
adapter = _objectAdapterFactory->createObjectAdapter("Ice.Admin", 0);
|
|
781
|
+
}
|
|
782
|
+
else
|
|
783
|
+
{
|
|
784
|
+
return 0;
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
Identity adminIdentity;
|
|
788
|
+
adminIdentity.name = "admin";
|
|
789
|
+
adminIdentity.category = _initData.properties->getProperty("Ice.Admin.InstanceName");
|
|
790
|
+
if(adminIdentity.category.empty())
|
|
791
|
+
{
|
|
792
|
+
adminIdentity.category = IceUtil::generateUUID();
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
_adminIdentity = adminIdentity;
|
|
796
|
+
_adminAdapter = adapter;
|
|
797
|
+
addAllAdminFacets();
|
|
798
|
+
sync.release();
|
|
799
|
+
try
|
|
800
|
+
{
|
|
801
|
+
adapter->activate();
|
|
802
|
+
}
|
|
803
|
+
catch(...)
|
|
804
|
+
{
|
|
805
|
+
//
|
|
806
|
+
// We clean it up, even through this error is not recoverable
|
|
807
|
+
// (can't call again createAdmin after fixing the problem since all the facets
|
|
808
|
+
// in the adapter are lost)
|
|
809
|
+
//
|
|
810
|
+
adapter->destroy();
|
|
811
|
+
sync.acquire();
|
|
812
|
+
_adminAdapter = 0;
|
|
813
|
+
throw;
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
setServerProcessProxy(adapter, adminIdentity);
|
|
817
|
+
return adapter->createProxy(adminIdentity);
|
|
818
|
+
}
|
|
819
|
+
else
|
|
820
|
+
{
|
|
821
|
+
return 0;
|
|
822
|
+
}
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
void
|
|
826
|
+
IceInternal::Instance::addAllAdminFacets()
|
|
827
|
+
{
|
|
828
|
+
// must be called with this locked
|
|
829
|
+
|
|
830
|
+
//
|
|
831
|
+
// Add all facets to OA
|
|
832
|
+
//
|
|
833
|
+
FacetMap filteredFacets;
|
|
834
|
+
|
|
835
|
+
for(FacetMap::iterator p = _adminFacets.begin(); p != _adminFacets.end(); ++p)
|
|
836
|
+
{
|
|
837
|
+
if(_adminFacetFilter.empty() || _adminFacetFilter.find(p->first) != _adminFacetFilter.end())
|
|
838
|
+
{
|
|
839
|
+
_adminAdapter->addFacet(p->second, _adminIdentity, p->first);
|
|
840
|
+
}
|
|
841
|
+
else
|
|
842
|
+
{
|
|
843
|
+
filteredFacets[p->first] = p->second;
|
|
844
|
+
}
|
|
845
|
+
}
|
|
846
|
+
_adminFacets.swap(filteredFacets);
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
void
|
|
850
|
+
IceInternal::Instance::setServerProcessProxy(const ObjectAdapterPtr& adminAdapter, const Identity& adminIdentity)
|
|
851
|
+
{
|
|
852
|
+
ObjectPrx admin = adminAdapter->createProxy(adminIdentity);
|
|
853
|
+
LocatorPrx locator = adminAdapter->getLocator();
|
|
854
|
+
const string serverId = _initData.properties->getProperty("Ice.Admin.ServerId");
|
|
855
|
+
if(locator && serverId != "")
|
|
856
|
+
{
|
|
857
|
+
ProcessPrx process = ProcessPrx::uncheckedCast(admin->ice_facet("Process"));
|
|
858
|
+
try
|
|
859
|
+
{
|
|
860
|
+
//
|
|
861
|
+
// Note that as soon as the process proxy is registered, the communicator might be
|
|
862
|
+
// shutdown by a remote client and admin facets might start receiving calls.
|
|
863
|
+
//
|
|
864
|
+
locator->getRegistry()->setServerProcessProxy(serverId, process);
|
|
865
|
+
}
|
|
866
|
+
catch(const ServerNotFoundException&)
|
|
867
|
+
{
|
|
868
|
+
if(_traceLevels->location >= 1)
|
|
869
|
+
{
|
|
870
|
+
Trace out(_initData.logger, _traceLevels->locationCat);
|
|
871
|
+
out << "couldn't register server `" + serverId + "' with the locator registry:\n";
|
|
872
|
+
out << "the server is not known to the locator registry";
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
throw InitializationException(__FILE__, __LINE__, "Locator `" + _proxyFactory->proxyToString(locator) +
|
|
876
|
+
"' knows nothing about server `" + serverId + "'");
|
|
877
|
+
}
|
|
878
|
+
catch(const LocalException& ex)
|
|
879
|
+
{
|
|
880
|
+
if(_traceLevels->location >= 1)
|
|
881
|
+
{
|
|
882
|
+
Trace out(_initData.logger, _traceLevels->locationCat);
|
|
883
|
+
out << "couldn't register server `" + serverId + "' with the locator registry:\n" << ex;
|
|
884
|
+
}
|
|
885
|
+
throw;
|
|
886
|
+
}
|
|
887
|
+
|
|
888
|
+
if(_traceLevels->location >= 1)
|
|
889
|
+
{
|
|
890
|
+
Trace out(_initData.logger, _traceLevels->locationCat);
|
|
891
|
+
out << "registered server `" + serverId + "' with the locator registry";
|
|
892
|
+
}
|
|
893
|
+
}
|
|
894
|
+
}
|
|
895
|
+
|
|
896
|
+
void
|
|
897
|
+
IceInternal::Instance::addAdminFacet(const Ice::ObjectPtr& servant, const string& facet)
|
|
898
|
+
{
|
|
899
|
+
Lock sync(*this);
|
|
900
|
+
|
|
901
|
+
if(_state == StateDestroyed)
|
|
902
|
+
{
|
|
903
|
+
throw CommunicatorDestroyedException(__FILE__, __LINE__);
|
|
904
|
+
}
|
|
905
|
+
|
|
906
|
+
if(_adminAdapter == 0 || (!_adminFacetFilter.empty() && _adminFacetFilter.find(facet) == _adminFacetFilter.end()))
|
|
907
|
+
{
|
|
908
|
+
if(_adminFacets.insert(FacetMap::value_type(facet, servant)).second == false)
|
|
909
|
+
{
|
|
910
|
+
throw AlreadyRegisteredException(__FILE__, __LINE__, "facet", facet);
|
|
911
|
+
}
|
|
912
|
+
}
|
|
913
|
+
else
|
|
914
|
+
{
|
|
915
|
+
_adminAdapter->addFacet(servant, _adminIdentity, facet);
|
|
916
|
+
}
|
|
917
|
+
}
|
|
918
|
+
|
|
919
|
+
Ice::ObjectPtr
|
|
920
|
+
IceInternal::Instance::removeAdminFacet(const string& facet)
|
|
921
|
+
{
|
|
922
|
+
Lock sync(*this);
|
|
923
|
+
|
|
924
|
+
if(_state == StateDestroyed)
|
|
925
|
+
{
|
|
926
|
+
throw CommunicatorDestroyedException(__FILE__, __LINE__);
|
|
927
|
+
}
|
|
928
|
+
|
|
929
|
+
ObjectPtr result;
|
|
930
|
+
|
|
931
|
+
if(_adminAdapter == 0 || (!_adminFacetFilter.empty() && _adminFacetFilter.find(facet) == _adminFacetFilter.end()))
|
|
932
|
+
{
|
|
933
|
+
FacetMap::iterator p = _adminFacets.find(facet);
|
|
934
|
+
if(p == _adminFacets.end())
|
|
935
|
+
{
|
|
936
|
+
throw NotRegisteredException(__FILE__, __LINE__, "facet", facet);
|
|
937
|
+
}
|
|
938
|
+
else
|
|
939
|
+
{
|
|
940
|
+
result = p->second;
|
|
941
|
+
_adminFacets.erase(p);
|
|
942
|
+
}
|
|
943
|
+
}
|
|
944
|
+
else
|
|
945
|
+
{
|
|
946
|
+
result = _adminAdapter->removeFacet(_adminIdentity, facet);
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
return result;
|
|
950
|
+
}
|
|
951
|
+
|
|
952
|
+
Ice::ObjectPtr
|
|
953
|
+
IceInternal::Instance::findAdminFacet(const string& facet)
|
|
954
|
+
{
|
|
955
|
+
Lock sync(*this);
|
|
956
|
+
|
|
957
|
+
if(_state == StateDestroyed)
|
|
958
|
+
{
|
|
959
|
+
throw CommunicatorDestroyedException(__FILE__, __LINE__);
|
|
960
|
+
}
|
|
961
|
+
|
|
962
|
+
ObjectPtr result;
|
|
963
|
+
|
|
964
|
+
//
|
|
965
|
+
// If the _adminAdapter was not yet created, or this facet is filtered out, we check _adminFacets
|
|
966
|
+
//
|
|
967
|
+
if(!_adminAdapter || (!_adminFacetFilter.empty() && _adminFacetFilter.find(facet) == _adminFacetFilter.end()))
|
|
968
|
+
{
|
|
969
|
+
FacetMap::iterator p = _adminFacets.find(facet);
|
|
970
|
+
if(p != _adminFacets.end())
|
|
971
|
+
{
|
|
972
|
+
result = p->second;
|
|
973
|
+
}
|
|
974
|
+
}
|
|
975
|
+
else
|
|
976
|
+
{
|
|
977
|
+
// Otherwise, just check the _adminAdapter
|
|
978
|
+
result = _adminAdapter->findFacet(_adminIdentity, facet);
|
|
979
|
+
}
|
|
980
|
+
|
|
981
|
+
return result;
|
|
982
|
+
}
|
|
983
|
+
|
|
984
|
+
FacetMap
|
|
985
|
+
IceInternal::Instance::findAllAdminFacets()
|
|
986
|
+
{
|
|
987
|
+
Lock sync(*this);
|
|
988
|
+
|
|
989
|
+
if(_state == StateDestroyed)
|
|
990
|
+
{
|
|
991
|
+
throw CommunicatorDestroyedException(__FILE__, __LINE__);
|
|
992
|
+
}
|
|
993
|
+
|
|
994
|
+
if(!_adminAdapter)
|
|
995
|
+
{
|
|
996
|
+
return _adminFacets;
|
|
997
|
+
}
|
|
998
|
+
else
|
|
999
|
+
{
|
|
1000
|
+
FacetMap result = _adminAdapter->findAllFacets(_adminIdentity);
|
|
1001
|
+
if(!_adminFacets.empty())
|
|
1002
|
+
{
|
|
1003
|
+
// Also returns filtered facets
|
|
1004
|
+
result.insert(_adminFacets.begin(), _adminFacets.end());
|
|
1005
|
+
}
|
|
1006
|
+
return result;
|
|
1007
|
+
}
|
|
1008
|
+
}
|
|
1009
|
+
|
|
1010
|
+
void
|
|
1011
|
+
IceInternal::Instance::setDefaultLocator(const Ice::LocatorPrx& defaultLocator)
|
|
1012
|
+
{
|
|
1013
|
+
Lock sync(*this);
|
|
1014
|
+
|
|
1015
|
+
if(_state == StateDestroyed)
|
|
1016
|
+
{
|
|
1017
|
+
throw CommunicatorDestroyedException(__FILE__, __LINE__);
|
|
1018
|
+
}
|
|
1019
|
+
|
|
1020
|
+
_referenceFactory = _referenceFactory->setDefaultLocator(defaultLocator);
|
|
1021
|
+
}
|
|
1022
|
+
|
|
1023
|
+
void
|
|
1024
|
+
IceInternal::Instance::setDefaultRouter(const Ice::RouterPrx& defaultRouter)
|
|
1025
|
+
{
|
|
1026
|
+
Lock sync(*this);
|
|
1027
|
+
|
|
1028
|
+
if(_state == StateDestroyed)
|
|
1029
|
+
{
|
|
1030
|
+
throw CommunicatorDestroyedException(__FILE__, __LINE__);
|
|
1031
|
+
}
|
|
1032
|
+
|
|
1033
|
+
_referenceFactory = _referenceFactory->setDefaultRouter(defaultRouter);
|
|
1034
|
+
}
|
|
1035
|
+
|
|
1036
|
+
void
|
|
1037
|
+
IceInternal::Instance::setLogger(const Ice::LoggerPtr& logger)
|
|
1038
|
+
{
|
|
1039
|
+
//
|
|
1040
|
+
// No locking, as it can only be called during plug-in loading
|
|
1041
|
+
//
|
|
1042
|
+
_initData.logger = logger;
|
|
1043
|
+
}
|
|
1044
|
+
|
|
1045
|
+
void
|
|
1046
|
+
IceInternal::Instance::setThreadHook(const Ice::ThreadNotificationPtr& threadHook)
|
|
1047
|
+
{
|
|
1048
|
+
//
|
|
1049
|
+
// No locking, as it can only be called during plug-in loading
|
|
1050
|
+
//
|
|
1051
|
+
_initData.threadHook = threadHook;
|
|
1052
|
+
}
|
|
1053
|
+
|
|
1054
|
+
namespace
|
|
1055
|
+
{
|
|
1056
|
+
|
|
1057
|
+
bool logStdErrConvert = true;
|
|
1058
|
+
|
|
1059
|
+
}
|
|
1060
|
+
|
|
1061
|
+
IceInternal::Instance::Instance(const CommunicatorPtr& communicator, const InitializationData& initData) :
|
|
1062
|
+
_state(StateActive),
|
|
1063
|
+
_initData(initData),
|
|
1064
|
+
_messageSizeMax(0),
|
|
1065
|
+
_batchAutoFlushSize(0),
|
|
1066
|
+
_collectObjects(false),
|
|
1067
|
+
_implicitContext(0),
|
|
1068
|
+
_stringConverter(IceUtil::getProcessStringConverter()),
|
|
1069
|
+
_wstringConverter(IceUtil::getProcessWstringConverter()),
|
|
1070
|
+
_adminEnabled(false)
|
|
1071
|
+
{
|
|
1072
|
+
try
|
|
1073
|
+
{
|
|
1074
|
+
__setNoDelete(true);
|
|
1075
|
+
{
|
|
1076
|
+
IceUtilInternal::MutexPtrLock<IceUtil::Mutex> sync(staticMutex);
|
|
1077
|
+
instanceList->push_back(this);
|
|
1078
|
+
|
|
1079
|
+
if(!_initData.properties)
|
|
1080
|
+
{
|
|
1081
|
+
_initData.properties = createProperties();
|
|
1082
|
+
}
|
|
1083
|
+
|
|
1084
|
+
if(!oneOfDone)
|
|
1085
|
+
{
|
|
1086
|
+
//
|
|
1087
|
+
// StdOut and StdErr redirection
|
|
1088
|
+
//
|
|
1089
|
+
string stdOutFilename = _initData.properties->getProperty("Ice.StdOut");
|
|
1090
|
+
string stdErrFilename = _initData.properties->getProperty("Ice.StdErr");
|
|
1091
|
+
|
|
1092
|
+
if(stdOutFilename != "")
|
|
1093
|
+
{
|
|
1094
|
+
FILE* file = IceUtilInternal::freopen(stdOutFilename, "a", stdout);
|
|
1095
|
+
if(file == 0)
|
|
1096
|
+
{
|
|
1097
|
+
FileException ex(__FILE__, __LINE__);
|
|
1098
|
+
ex.path = stdOutFilename;
|
|
1099
|
+
ex.error = getSystemErrno();
|
|
1100
|
+
throw ex;
|
|
1101
|
+
}
|
|
1102
|
+
}
|
|
1103
|
+
|
|
1104
|
+
if(stdErrFilename != "")
|
|
1105
|
+
{
|
|
1106
|
+
FILE* file = IceUtilInternal::freopen(stdErrFilename, "a", stderr);
|
|
1107
|
+
if(file == 0)
|
|
1108
|
+
{
|
|
1109
|
+
FileException ex(__FILE__, __LINE__);
|
|
1110
|
+
ex.path = stdErrFilename;
|
|
1111
|
+
ex.error = getSystemErrno();
|
|
1112
|
+
throw ex;
|
|
1113
|
+
}
|
|
1114
|
+
}
|
|
1115
|
+
|
|
1116
|
+
if(_initData.properties->getPropertyAsInt("Ice.NullHandleAbort") > 0)
|
|
1117
|
+
{
|
|
1118
|
+
IceUtilInternal::nullHandleAbort = true;
|
|
1119
|
+
}
|
|
1120
|
+
|
|
1121
|
+
#ifdef NDEBUG
|
|
1122
|
+
if(_initData.properties->getPropertyAsIntWithDefault("Ice.PrintStackTraces", 0) > 0)
|
|
1123
|
+
#else
|
|
1124
|
+
if(_initData.properties->getPropertyAsIntWithDefault("Ice.PrintStackTraces", 1) > 0)
|
|
1125
|
+
#endif
|
|
1126
|
+
{
|
|
1127
|
+
IceUtilInternal::printStackTraces = true;
|
|
1128
|
+
}
|
|
1129
|
+
|
|
1130
|
+
#ifndef _WIN32
|
|
1131
|
+
string newUser = _initData.properties->getProperty("Ice.ChangeUser");
|
|
1132
|
+
if(!newUser.empty())
|
|
1133
|
+
{
|
|
1134
|
+
errno = 0;
|
|
1135
|
+
struct passwd* pw = getpwnam(newUser.c_str());
|
|
1136
|
+
if(!pw)
|
|
1137
|
+
{
|
|
1138
|
+
if(errno)
|
|
1139
|
+
{
|
|
1140
|
+
SyscallException ex(__FILE__, __LINE__);
|
|
1141
|
+
ex.error = getSystemErrno();
|
|
1142
|
+
throw ex;
|
|
1143
|
+
}
|
|
1144
|
+
else
|
|
1145
|
+
{
|
|
1146
|
+
InitializationException ex(__FILE__, __LINE__, "Unknown user account `" + newUser + "'");
|
|
1147
|
+
throw ex;
|
|
1148
|
+
}
|
|
1149
|
+
}
|
|
1150
|
+
|
|
1151
|
+
if(setgid(pw->pw_gid) == -1)
|
|
1152
|
+
{
|
|
1153
|
+
SyscallException ex(__FILE__, __LINE__);
|
|
1154
|
+
ex.error = getSystemErrno();
|
|
1155
|
+
throw ex;
|
|
1156
|
+
}
|
|
1157
|
+
|
|
1158
|
+
if(initgroups(pw->pw_name, pw->pw_gid) == -1)
|
|
1159
|
+
{
|
|
1160
|
+
SyscallException ex(__FILE__, __LINE__);
|
|
1161
|
+
ex.error = getSystemErrno();
|
|
1162
|
+
throw ex;
|
|
1163
|
+
}
|
|
1164
|
+
|
|
1165
|
+
if(setuid(pw->pw_uid) == -1)
|
|
1166
|
+
{
|
|
1167
|
+
SyscallException ex(__FILE__, __LINE__);
|
|
1168
|
+
ex.error = getSystemErrno();
|
|
1169
|
+
throw ex;
|
|
1170
|
+
}
|
|
1171
|
+
}
|
|
1172
|
+
#endif
|
|
1173
|
+
oneOfDone = true;
|
|
1174
|
+
}
|
|
1175
|
+
|
|
1176
|
+
if(instanceCount() == 1)
|
|
1177
|
+
{
|
|
1178
|
+
#if defined(_WIN32) && !defined(ICE_OS_WINRT)
|
|
1179
|
+
WORD version = MAKEWORD(1, 1);
|
|
1180
|
+
WSADATA data;
|
|
1181
|
+
if(WSAStartup(version, &data) != 0)
|
|
1182
|
+
{
|
|
1183
|
+
SocketException ex(__FILE__, __LINE__);
|
|
1184
|
+
ex.error = getSocketErrno();
|
|
1185
|
+
throw ex;
|
|
1186
|
+
}
|
|
1187
|
+
#endif
|
|
1188
|
+
|
|
1189
|
+
#ifndef _WIN32
|
|
1190
|
+
struct sigaction action;
|
|
1191
|
+
action.sa_handler = SIG_IGN;
|
|
1192
|
+
sigemptyset(&action.sa_mask);
|
|
1193
|
+
action.sa_flags = 0;
|
|
1194
|
+
sigaction(SIGPIPE, &action, &oldAction);
|
|
1195
|
+
if(_initData.properties->getPropertyAsInt("Ice.UseSyslog") > 0)
|
|
1196
|
+
{
|
|
1197
|
+
identForOpenlog = _initData.properties->getProperty("Ice.ProgramName");
|
|
1198
|
+
if(identForOpenlog.empty())
|
|
1199
|
+
{
|
|
1200
|
+
identForOpenlog = "<Unknown Ice Program>";
|
|
1201
|
+
}
|
|
1202
|
+
openlog(identForOpenlog.c_str(), LOG_PID, LOG_USER);
|
|
1203
|
+
}
|
|
1204
|
+
#else
|
|
1205
|
+
logStdErrConvert =
|
|
1206
|
+
_initData.properties->getPropertyAsIntWithDefault("Ice.LogStdErr.Convert", 1) > 0 &&
|
|
1207
|
+
_initData.properties->getProperty("Ice.StdErr").empty();
|
|
1208
|
+
#endif
|
|
1209
|
+
}
|
|
1210
|
+
}
|
|
1211
|
+
|
|
1212
|
+
|
|
1213
|
+
if(!_initData.logger)
|
|
1214
|
+
{
|
|
1215
|
+
string logfile = _initData.properties->getProperty("Ice.LogFile");
|
|
1216
|
+
#ifndef _WIN32
|
|
1217
|
+
if(_initData.properties->getPropertyAsInt("Ice.UseSyslog") > 0)
|
|
1218
|
+
{
|
|
1219
|
+
if(!logfile.empty())
|
|
1220
|
+
{
|
|
1221
|
+
throw InitializationException(__FILE__, __LINE__, "Both syslog and file logger cannot be enabled.");
|
|
1222
|
+
}
|
|
1223
|
+
|
|
1224
|
+
_initData.logger =
|
|
1225
|
+
new SysLoggerI(_initData.properties->getProperty("Ice.ProgramName"),
|
|
1226
|
+
_initData.properties->getPropertyWithDefault("Ice.SyslogFacility", "LOG_USER"));
|
|
1227
|
+
}
|
|
1228
|
+
else
|
|
1229
|
+
#endif
|
|
1230
|
+
if(!logfile.empty())
|
|
1231
|
+
{
|
|
1232
|
+
_initData.logger = new LoggerI(_initData.properties->getProperty("Ice.ProgramName"), logfile);
|
|
1233
|
+
}
|
|
1234
|
+
else
|
|
1235
|
+
{
|
|
1236
|
+
_initData.logger = getProcessLogger();
|
|
1237
|
+
if(LoggerIPtr::dynamicCast(_initData.logger))
|
|
1238
|
+
{
|
|
1239
|
+
_initData.logger = new LoggerI(_initData.properties->getProperty("Ice.ProgramName"), "",
|
|
1240
|
+
logStdErrConvert, _stringConverter);
|
|
1241
|
+
}
|
|
1242
|
+
}
|
|
1243
|
+
}
|
|
1244
|
+
|
|
1245
|
+
const_cast<TraceLevelsPtr&>(_traceLevels) = new TraceLevels(_initData.properties);
|
|
1246
|
+
|
|
1247
|
+
const_cast<DefaultsAndOverridesPtr&>(_defaultsAndOverrides) =
|
|
1248
|
+
new DefaultsAndOverrides(_initData.properties, _initData.logger);
|
|
1249
|
+
|
|
1250
|
+
const ACMConfig defaultClientACM(_initData.properties, _initData.logger, "Ice.ACM", ACMConfig(false));
|
|
1251
|
+
const ACMConfig defaultServerACM(_initData.properties, _initData.logger, "Ice.ACM", ACMConfig(true));
|
|
1252
|
+
|
|
1253
|
+
const_cast<ACMConfig&>(_clientACM) = ACMConfig(_initData.properties,
|
|
1254
|
+
_initData.logger,
|
|
1255
|
+
"Ice.ACM.Client",
|
|
1256
|
+
defaultClientACM);
|
|
1257
|
+
|
|
1258
|
+
const_cast<ACMConfig&>(_serverACM) = ACMConfig(_initData.properties,
|
|
1259
|
+
_initData.logger,
|
|
1260
|
+
"Ice.ACM.Server",
|
|
1261
|
+
defaultServerACM);
|
|
1262
|
+
|
|
1263
|
+
{
|
|
1264
|
+
static const int defaultMessageSizeMax = 1024;
|
|
1265
|
+
Int num = _initData.properties->getPropertyAsIntWithDefault("Ice.MessageSizeMax", defaultMessageSizeMax);
|
|
1266
|
+
if(num < 1 || static_cast<size_t>(num) > static_cast<size_t>(0x7fffffff / 1024))
|
|
1267
|
+
{
|
|
1268
|
+
const_cast<size_t&>(_messageSizeMax) = static_cast<size_t>(0x7fffffff);
|
|
1269
|
+
}
|
|
1270
|
+
else
|
|
1271
|
+
{
|
|
1272
|
+
// Property is in kilobytes, _messageSizeMax in bytes.
|
|
1273
|
+
const_cast<size_t&>(_messageSizeMax) = static_cast<size_t>(num) * 1024;
|
|
1274
|
+
}
|
|
1275
|
+
}
|
|
1276
|
+
|
|
1277
|
+
if(_initData.properties->getProperty("Ice.BatchAutoFlushSize").empty() &&
|
|
1278
|
+
!_initData.properties->getProperty("Ice.BatchAutoFlush").empty())
|
|
1279
|
+
{
|
|
1280
|
+
if(_initData.properties->getPropertyAsInt("Ice.BatchAutoFlush") > 0)
|
|
1281
|
+
{
|
|
1282
|
+
const_cast<size_t&>(_batchAutoFlushSize) = _messageSizeMax;
|
|
1283
|
+
}
|
|
1284
|
+
}
|
|
1285
|
+
else
|
|
1286
|
+
{
|
|
1287
|
+
Int num = _initData.properties->getPropertyAsIntWithDefault("Ice.BatchAutoFlushSize", 1024); // 1MB default
|
|
1288
|
+
if(num < 1)
|
|
1289
|
+
{
|
|
1290
|
+
const_cast<size_t&>(_batchAutoFlushSize) = num;
|
|
1291
|
+
}
|
|
1292
|
+
else if(static_cast<size_t>(num) > static_cast<size_t>(0x7fffffff / 1024))
|
|
1293
|
+
{
|
|
1294
|
+
const_cast<size_t&>(_batchAutoFlushSize) = static_cast<size_t>(0x7fffffff);
|
|
1295
|
+
}
|
|
1296
|
+
else
|
|
1297
|
+
{
|
|
1298
|
+
// Property is in kilobytes, convert in bytes.
|
|
1299
|
+
const_cast<size_t&>(_batchAutoFlushSize) = static_cast<size_t>(num) * 1024;
|
|
1300
|
+
}
|
|
1301
|
+
}
|
|
1302
|
+
|
|
1303
|
+
const_cast<bool&>(_collectObjects) = _initData.properties->getPropertyAsInt("Ice.CollectObjects") > 0;
|
|
1304
|
+
|
|
1305
|
+
//
|
|
1306
|
+
// Client ACM enabled by default. Server ACM disabled by default.
|
|
1307
|
+
//
|
|
1308
|
+
#ifndef ICE_OS_WINRT
|
|
1309
|
+
const_cast<ImplicitContextIPtr&>(_implicitContext) =
|
|
1310
|
+
ImplicitContextI::create(_initData.properties->getProperty("Ice.ImplicitContext"));
|
|
1311
|
+
#endif
|
|
1312
|
+
_routerManager = new RouterManager;
|
|
1313
|
+
|
|
1314
|
+
_locatorManager = new LocatorManager(_initData.properties);
|
|
1315
|
+
|
|
1316
|
+
_referenceFactory = new ReferenceFactory(this, communicator);
|
|
1317
|
+
|
|
1318
|
+
_requestHandlerFactory = new RequestHandlerFactory(this);
|
|
1319
|
+
|
|
1320
|
+
_proxyFactory = new ProxyFactory(this);
|
|
1321
|
+
|
|
1322
|
+
const bool isIPv6Supported = IceInternal::isIPv6Supported();
|
|
1323
|
+
const bool ipv4 = _initData.properties->getPropertyAsIntWithDefault("Ice.IPv4", 1) > 0;
|
|
1324
|
+
const bool ipv6 = _initData.properties->getPropertyAsIntWithDefault("Ice.IPv6", isIPv6Supported ? 1 : 0) > 0;
|
|
1325
|
+
if(!ipv4 && !ipv6)
|
|
1326
|
+
{
|
|
1327
|
+
throw InitializationException(__FILE__, __LINE__, "Both IPV4 and IPv6 support cannot be disabled.");
|
|
1328
|
+
}
|
|
1329
|
+
else if(ipv4 && ipv6)
|
|
1330
|
+
{
|
|
1331
|
+
_protocolSupport = EnableBoth;
|
|
1332
|
+
}
|
|
1333
|
+
else if(ipv4)
|
|
1334
|
+
{
|
|
1335
|
+
_protocolSupport = EnableIPv4;
|
|
1336
|
+
}
|
|
1337
|
+
else
|
|
1338
|
+
{
|
|
1339
|
+
_protocolSupport = EnableIPv6;
|
|
1340
|
+
}
|
|
1341
|
+
_preferIPv6 = _initData.properties->getPropertyAsInt("Ice.PreferIPv6Address") > 0;
|
|
1342
|
+
|
|
1343
|
+
_networkProxy = IceInternal::createNetworkProxy(_initData.properties, _protocolSupport);
|
|
1344
|
+
|
|
1345
|
+
_endpointFactoryManager = new EndpointFactoryManager(this);
|
|
1346
|
+
#ifndef ICE_OS_WINRT
|
|
1347
|
+
ProtocolInstancePtr tcpProtocolInstance = new ProtocolInstance(this, TCPEndpointType, "tcp");
|
|
1348
|
+
EndpointFactoryPtr tcpEndpointFactory = new TcpEndpointFactory(tcpProtocolInstance);
|
|
1349
|
+
_endpointFactoryManager->add(tcpEndpointFactory);
|
|
1350
|
+
#else
|
|
1351
|
+
ProtocolInstancePtr tcpProtocolInstance = new ProtocolInstance(this, TCPEndpointType, "tcp");
|
|
1352
|
+
EndpointFactoryPtr tcpEndpointFactory = new StreamEndpointFactory(tcpProtocolInstance);
|
|
1353
|
+
_endpointFactoryManager->add(tcpEndpointFactory);
|
|
1354
|
+
|
|
1355
|
+
ProtocolInstancePtr sslProtocolInstance = new ProtocolInstance(this, IceSSL::EndpointType, "ssl");
|
|
1356
|
+
EndpointFactoryPtr sslEndpointFactory = new StreamEndpointFactory(sslProtocolInstance);
|
|
1357
|
+
_endpointFactoryManager->add(sslEndpointFactory);
|
|
1358
|
+
|
|
1359
|
+
ProtocolInstancePtr wssProtocolInstance = new ProtocolInstance(this, WSSEndpointType, "wss");
|
|
1360
|
+
EndpointFactoryPtr wssEndpointFactory = new WSEndpointFactory(wssProtocolInstance,
|
|
1361
|
+
sslEndpointFactory->clone(wssProtocolInstance));
|
|
1362
|
+
_endpointFactoryManager->add(wssEndpointFactory);
|
|
1363
|
+
#endif
|
|
1364
|
+
ProtocolInstancePtr udpProtocolInstance = new ProtocolInstance(this, UDPEndpointType, "udp");
|
|
1365
|
+
EndpointFactoryPtr udpEndpointFactory = new UdpEndpointFactory(udpProtocolInstance);
|
|
1366
|
+
_endpointFactoryManager->add(udpEndpointFactory);
|
|
1367
|
+
|
|
1368
|
+
ProtocolInstancePtr wsProtocolInstance = new ProtocolInstance(this, WSEndpointType, "ws");
|
|
1369
|
+
EndpointFactoryPtr wsEndpointFactory = new WSEndpointFactory(wsProtocolInstance,
|
|
1370
|
+
tcpEndpointFactory->clone(wsProtocolInstance));
|
|
1371
|
+
|
|
1372
|
+
_endpointFactoryManager->add(wsEndpointFactory);
|
|
1373
|
+
|
|
1374
|
+
_dynamicLibraryList = new DynamicLibraryList;
|
|
1375
|
+
|
|
1376
|
+
_pluginManager = new PluginManagerI(communicator, _dynamicLibraryList);
|
|
1377
|
+
|
|
1378
|
+
_outgoingConnectionFactory = new OutgoingConnectionFactory(communicator, this);
|
|
1379
|
+
|
|
1380
|
+
_servantFactoryManager = new ObjectFactoryManager();
|
|
1381
|
+
|
|
1382
|
+
_objectAdapterFactory = new ObjectAdapterFactory(this, communicator);
|
|
1383
|
+
|
|
1384
|
+
_retryQueue = new RetryQueue(this);
|
|
1385
|
+
|
|
1386
|
+
//
|
|
1387
|
+
// When _wstringConverter isn't set, use the default Unicode wstring converter
|
|
1388
|
+
//
|
|
1389
|
+
if(!_wstringConverter)
|
|
1390
|
+
{
|
|
1391
|
+
_wstringConverter = new IceUtil::UnicodeWstringConverter;
|
|
1392
|
+
}
|
|
1393
|
+
|
|
1394
|
+
__setNoDelete(false);
|
|
1395
|
+
}
|
|
1396
|
+
catch(...)
|
|
1397
|
+
{
|
|
1398
|
+
{
|
|
1399
|
+
IceUtilInternal::MutexPtrLock<IceUtil::Mutex> sync(staticMutex);
|
|
1400
|
+
instanceList->remove(this);
|
|
1401
|
+
}
|
|
1402
|
+
destroy();
|
|
1403
|
+
__setNoDelete(false);
|
|
1404
|
+
throw;
|
|
1405
|
+
}
|
|
1406
|
+
}
|
|
1407
|
+
|
|
1408
|
+
IceInternal::Instance::~Instance()
|
|
1409
|
+
{
|
|
1410
|
+
assert(_state == StateDestroyed);
|
|
1411
|
+
assert(!_referenceFactory);
|
|
1412
|
+
assert(!_proxyFactory);
|
|
1413
|
+
assert(!_outgoingConnectionFactory);
|
|
1414
|
+
|
|
1415
|
+
assert(!_servantFactoryManager);
|
|
1416
|
+
assert(!_objectAdapterFactory);
|
|
1417
|
+
assert(!_clientThreadPool);
|
|
1418
|
+
assert(!_serverThreadPool);
|
|
1419
|
+
assert(!_endpointHostResolver);
|
|
1420
|
+
assert(!_retryQueue);
|
|
1421
|
+
assert(!_timer);
|
|
1422
|
+
assert(!_routerManager);
|
|
1423
|
+
assert(!_locatorManager);
|
|
1424
|
+
assert(!_endpointFactoryManager);
|
|
1425
|
+
assert(!_dynamicLibraryList);
|
|
1426
|
+
assert(!_pluginManager);
|
|
1427
|
+
|
|
1428
|
+
IceUtilInternal::MutexPtrLock<IceUtil::Mutex> sync(staticMutex);
|
|
1429
|
+
if(instanceList != 0)
|
|
1430
|
+
{
|
|
1431
|
+
instanceList->remove(this);
|
|
1432
|
+
}
|
|
1433
|
+
if(instanceCount() == 0)
|
|
1434
|
+
{
|
|
1435
|
+
#if defined(_WIN32) && !defined(ICE_OS_WINRT)
|
|
1436
|
+
WSACleanup();
|
|
1437
|
+
#endif
|
|
1438
|
+
|
|
1439
|
+
#ifndef _WIN32
|
|
1440
|
+
sigaction(SIGPIPE, &oldAction, 0);
|
|
1441
|
+
|
|
1442
|
+
if(!identForOpenlog.empty())
|
|
1443
|
+
{
|
|
1444
|
+
closelog();
|
|
1445
|
+
identForOpenlog.clear();
|
|
1446
|
+
}
|
|
1447
|
+
#endif
|
|
1448
|
+
}
|
|
1449
|
+
}
|
|
1450
|
+
|
|
1451
|
+
void
|
|
1452
|
+
IceInternal::Instance::finishSetup(int& argc, char* argv[], const Ice::CommunicatorPtr& communicator)
|
|
1453
|
+
{
|
|
1454
|
+
//
|
|
1455
|
+
// Load plug-ins.
|
|
1456
|
+
//
|
|
1457
|
+
assert(!_serverThreadPool);
|
|
1458
|
+
PluginManagerI* pluginManagerImpl = dynamic_cast<PluginManagerI*>(_pluginManager.get());
|
|
1459
|
+
assert(pluginManagerImpl);
|
|
1460
|
+
pluginManagerImpl->loadPlugins(argc, argv);
|
|
1461
|
+
|
|
1462
|
+
//
|
|
1463
|
+
// Reset _stringConverter and _wstringConverter, in case a plugin changed them
|
|
1464
|
+
//
|
|
1465
|
+
_stringConverter = IceUtil::getProcessStringConverter();
|
|
1466
|
+
|
|
1467
|
+
IceUtil::WstringConverterPtr newWstringConverter = IceUtil::getProcessWstringConverter();
|
|
1468
|
+
if(newWstringConverter)
|
|
1469
|
+
{
|
|
1470
|
+
_wstringConverter = newWstringConverter;
|
|
1471
|
+
}
|
|
1472
|
+
else if(!dynamic_cast<IceUtil::UnicodeWstringConverter*>(_wstringConverter.get()))
|
|
1473
|
+
{
|
|
1474
|
+
_wstringConverter = new IceUtil::UnicodeWstringConverter;
|
|
1475
|
+
}
|
|
1476
|
+
|
|
1477
|
+
//
|
|
1478
|
+
// Create Admin facets, if enabled.
|
|
1479
|
+
//
|
|
1480
|
+
// Note that any logger-dependent admin facet must be created after we load all plugins,
|
|
1481
|
+
// since one of these plugins can be a Logger plugin that sets a new logger during loading
|
|
1482
|
+
//
|
|
1483
|
+
|
|
1484
|
+
if(_initData.properties->getProperty("Ice.Admin.Enabled") == "")
|
|
1485
|
+
{
|
|
1486
|
+
_adminEnabled = _initData.properties->getProperty("Ice.Admin.Endpoints") != "";
|
|
1487
|
+
}
|
|
1488
|
+
else
|
|
1489
|
+
{
|
|
1490
|
+
_adminEnabled = _initData.properties->getPropertyAsInt("Ice.Admin.Enabled") > 0;
|
|
1491
|
+
}
|
|
1492
|
+
|
|
1493
|
+
StringSeq facetSeq = _initData.properties->getPropertyAsList("Ice.Admin.Facets");
|
|
1494
|
+
if(!facetSeq.empty())
|
|
1495
|
+
{
|
|
1496
|
+
_adminFacetFilter.insert(facetSeq.begin(), facetSeq.end());
|
|
1497
|
+
}
|
|
1498
|
+
|
|
1499
|
+
if(_adminEnabled)
|
|
1500
|
+
{
|
|
1501
|
+
//
|
|
1502
|
+
// Process facet
|
|
1503
|
+
//
|
|
1504
|
+
const string processFacetName = "Process";
|
|
1505
|
+
if(_adminFacetFilter.empty() || _adminFacetFilter.find(processFacetName) != _adminFacetFilter.end())
|
|
1506
|
+
{
|
|
1507
|
+
_adminFacets.insert(make_pair(processFacetName, new ProcessI(communicator)));
|
|
1508
|
+
}
|
|
1509
|
+
|
|
1510
|
+
//
|
|
1511
|
+
// Logger facet
|
|
1512
|
+
//
|
|
1513
|
+
const string loggerFacetName = "Logger";
|
|
1514
|
+
if(_adminFacetFilter.empty() || _adminFacetFilter.find(loggerFacetName) != _adminFacetFilter.end())
|
|
1515
|
+
{
|
|
1516
|
+
LoggerAdminLoggerPtr logger = createLoggerAdminLogger(_initData.properties, _initData.logger);
|
|
1517
|
+
setLogger(logger);
|
|
1518
|
+
_adminFacets.insert(make_pair(loggerFacetName, logger->getFacet()));
|
|
1519
|
+
}
|
|
1520
|
+
|
|
1521
|
+
//
|
|
1522
|
+
// Properties facet
|
|
1523
|
+
//
|
|
1524
|
+
const string propertiesFacetName = "Properties";
|
|
1525
|
+
PropertiesAdminIPtr propsAdmin;
|
|
1526
|
+
if(_adminFacetFilter.empty() || _adminFacetFilter.find(propertiesFacetName) != _adminFacetFilter.end())
|
|
1527
|
+
{
|
|
1528
|
+
propsAdmin = new PropertiesAdminI(_initData.properties, _initData.logger);
|
|
1529
|
+
_adminFacets.insert(make_pair(propertiesFacetName, propsAdmin));
|
|
1530
|
+
}
|
|
1531
|
+
|
|
1532
|
+
//
|
|
1533
|
+
// Metrics facet
|
|
1534
|
+
//
|
|
1535
|
+
const string metricsFacetName = "Metrics";
|
|
1536
|
+
if(_adminFacetFilter.empty() || _adminFacetFilter.find(metricsFacetName) != _adminFacetFilter.end())
|
|
1537
|
+
{
|
|
1538
|
+
CommunicatorObserverIPtr observer = new CommunicatorObserverI(_initData);
|
|
1539
|
+
_initData.observer = observer;
|
|
1540
|
+
_adminFacets.insert(make_pair(metricsFacetName, observer->getFacet()));
|
|
1541
|
+
|
|
1542
|
+
//
|
|
1543
|
+
// Make sure the metrics admin facet receives property updates.
|
|
1544
|
+
//
|
|
1545
|
+
if(propsAdmin)
|
|
1546
|
+
{
|
|
1547
|
+
propsAdmin->addUpdateCallback(observer->getFacet());
|
|
1548
|
+
}
|
|
1549
|
+
}
|
|
1550
|
+
}
|
|
1551
|
+
|
|
1552
|
+
//
|
|
1553
|
+
// Set observer updater
|
|
1554
|
+
//
|
|
1555
|
+
if(_initData.observer)
|
|
1556
|
+
{
|
|
1557
|
+
_initData.observer->setObserverUpdater(new ObserverUpdaterI(this));
|
|
1558
|
+
}
|
|
1559
|
+
|
|
1560
|
+
//
|
|
1561
|
+
// Create threads.
|
|
1562
|
+
//
|
|
1563
|
+
try
|
|
1564
|
+
{
|
|
1565
|
+
bool hasPriority = _initData.properties->getProperty("Ice.ThreadPriority") != "";
|
|
1566
|
+
int priority = _initData.properties->getPropertyAsInt("Ice.ThreadPriority");
|
|
1567
|
+
if(hasPriority)
|
|
1568
|
+
{
|
|
1569
|
+
_timer = new Timer(priority);
|
|
1570
|
+
}
|
|
1571
|
+
else
|
|
1572
|
+
{
|
|
1573
|
+
_timer = new Timer;
|
|
1574
|
+
}
|
|
1575
|
+
}
|
|
1576
|
+
catch(const IceUtil::Exception& ex)
|
|
1577
|
+
{
|
|
1578
|
+
Error out(_initData.logger);
|
|
1579
|
+
out << "cannot create thread for timer:\n" << ex;
|
|
1580
|
+
throw;
|
|
1581
|
+
}
|
|
1582
|
+
|
|
1583
|
+
try
|
|
1584
|
+
{
|
|
1585
|
+
_endpointHostResolver = new EndpointHostResolver(this);
|
|
1586
|
+
}
|
|
1587
|
+
catch(const IceUtil::Exception& ex)
|
|
1588
|
+
{
|
|
1589
|
+
Error out(_initData.logger);
|
|
1590
|
+
out << "cannot create thread for endpoint host resolver:\n" << ex;
|
|
1591
|
+
throw;
|
|
1592
|
+
}
|
|
1593
|
+
|
|
1594
|
+
_clientThreadPool = new ThreadPool(this, "Ice.ThreadPool.Client", 0);
|
|
1595
|
+
|
|
1596
|
+
//
|
|
1597
|
+
// The default router/locator may have been set during the loading of plugins.
|
|
1598
|
+
// Therefore we make sure it is not already set before checking the property.
|
|
1599
|
+
//
|
|
1600
|
+
if(!_referenceFactory->getDefaultRouter())
|
|
1601
|
+
{
|
|
1602
|
+
RouterPrx router = RouterPrx::uncheckedCast(_proxyFactory->propertyToProxy("Ice.Default.Router"));
|
|
1603
|
+
if(router)
|
|
1604
|
+
{
|
|
1605
|
+
_referenceFactory = _referenceFactory->setDefaultRouter(router);
|
|
1606
|
+
}
|
|
1607
|
+
}
|
|
1608
|
+
|
|
1609
|
+
if(!_referenceFactory->getDefaultLocator())
|
|
1610
|
+
{
|
|
1611
|
+
LocatorPrx locator = LocatorPrx::uncheckedCast(_proxyFactory->propertyToProxy("Ice.Default.Locator"));
|
|
1612
|
+
if(locator)
|
|
1613
|
+
{
|
|
1614
|
+
_referenceFactory = _referenceFactory->setDefaultLocator(locator);
|
|
1615
|
+
}
|
|
1616
|
+
}
|
|
1617
|
+
|
|
1618
|
+
//
|
|
1619
|
+
// Show process id if requested (but only once).
|
|
1620
|
+
//
|
|
1621
|
+
bool printProcessId = false;
|
|
1622
|
+
if(!printProcessIdDone && _initData.properties->getPropertyAsInt("Ice.PrintProcessId") > 0)
|
|
1623
|
+
{
|
|
1624
|
+
//
|
|
1625
|
+
// Safe double-check locking (no dependent variable!)
|
|
1626
|
+
//
|
|
1627
|
+
IceUtilInternal::MutexPtrLock<IceUtil::Mutex> sync(staticMutex);
|
|
1628
|
+
printProcessId = !printProcessIdDone;
|
|
1629
|
+
|
|
1630
|
+
//
|
|
1631
|
+
// We anticipate: we want to print it once, and we don't care when.
|
|
1632
|
+
//
|
|
1633
|
+
printProcessIdDone = true;
|
|
1634
|
+
}
|
|
1635
|
+
|
|
1636
|
+
if(printProcessId)
|
|
1637
|
+
{
|
|
1638
|
+
#ifdef _MSC_VER
|
|
1639
|
+
cout << GetCurrentProcessId() << endl;
|
|
1640
|
+
#else
|
|
1641
|
+
cout << getpid() << endl;
|
|
1642
|
+
#endif
|
|
1643
|
+
}
|
|
1644
|
+
|
|
1645
|
+
//
|
|
1646
|
+
// Server thread pool initialization is lazy in serverThreadPool().
|
|
1647
|
+
//
|
|
1648
|
+
|
|
1649
|
+
//
|
|
1650
|
+
// An application can set Ice.InitPlugins=0 if it wants to postpone
|
|
1651
|
+
// initialization until after it has interacted directly with the
|
|
1652
|
+
// plug-ins.
|
|
1653
|
+
//
|
|
1654
|
+
if(_initData.properties->getPropertyAsIntWithDefault("Ice.InitPlugins", 1) > 0)
|
|
1655
|
+
{
|
|
1656
|
+
pluginManagerImpl->initializePlugins();
|
|
1657
|
+
}
|
|
1658
|
+
|
|
1659
|
+
//
|
|
1660
|
+
// This must be done last as this call creates the Ice.Admin object adapter
|
|
1661
|
+
// and eventually register a process proxy with the Ice locator (allowing
|
|
1662
|
+
// remote clients to invoke Admin facets as soon as it's registered).
|
|
1663
|
+
//
|
|
1664
|
+
// Note: getAdmin here can return 0 and do nothing in the event the
|
|
1665
|
+
// application set Ice.Admin.Enabled but did not set Ice.Admin.Enpoints
|
|
1666
|
+
// and one or more of the properties required to create the Admin object.
|
|
1667
|
+
//
|
|
1668
|
+
if(_adminEnabled && _initData.properties->getPropertyAsIntWithDefault("Ice.Admin.DelayCreation", 0) <= 0)
|
|
1669
|
+
{
|
|
1670
|
+
getAdmin();
|
|
1671
|
+
}
|
|
1672
|
+
}
|
|
1673
|
+
|
|
1674
|
+
void
|
|
1675
|
+
IceInternal::Instance::destroy()
|
|
1676
|
+
{
|
|
1677
|
+
{
|
|
1678
|
+
Lock sync(*this);
|
|
1679
|
+
|
|
1680
|
+
//
|
|
1681
|
+
// If destroy is in progress, wait for it to be done. This is
|
|
1682
|
+
// necessary in case destroy() is called concurrently by
|
|
1683
|
+
// multiple threads.
|
|
1684
|
+
//
|
|
1685
|
+
while(_state == StateDestroyInProgress)
|
|
1686
|
+
{
|
|
1687
|
+
wait();
|
|
1688
|
+
}
|
|
1689
|
+
|
|
1690
|
+
if(_state == StateDestroyed)
|
|
1691
|
+
{
|
|
1692
|
+
return;
|
|
1693
|
+
}
|
|
1694
|
+
_state = StateDestroyInProgress;
|
|
1695
|
+
}
|
|
1696
|
+
|
|
1697
|
+
//
|
|
1698
|
+
// Shutdown and destroy all the incoming and outgoing Ice
|
|
1699
|
+
// connections and wait for the connections to be finished.
|
|
1700
|
+
//
|
|
1701
|
+
if(_objectAdapterFactory)
|
|
1702
|
+
{
|
|
1703
|
+
_objectAdapterFactory->shutdown();
|
|
1704
|
+
}
|
|
1705
|
+
|
|
1706
|
+
if(_outgoingConnectionFactory)
|
|
1707
|
+
{
|
|
1708
|
+
_outgoingConnectionFactory->destroy();
|
|
1709
|
+
}
|
|
1710
|
+
|
|
1711
|
+
if(_objectAdapterFactory)
|
|
1712
|
+
{
|
|
1713
|
+
_objectAdapterFactory->destroy();
|
|
1714
|
+
}
|
|
1715
|
+
|
|
1716
|
+
if(_outgoingConnectionFactory)
|
|
1717
|
+
{
|
|
1718
|
+
_outgoingConnectionFactory->waitUntilFinished();
|
|
1719
|
+
}
|
|
1720
|
+
|
|
1721
|
+
if(_retryQueue)
|
|
1722
|
+
{
|
|
1723
|
+
_retryQueue->destroy(); // Must be called before destroying thread pools.
|
|
1724
|
+
}
|
|
1725
|
+
|
|
1726
|
+
if(_initData.observer)
|
|
1727
|
+
{
|
|
1728
|
+
CommunicatorObserverIPtr observer = CommunicatorObserverIPtr::dynamicCast(_initData.observer);
|
|
1729
|
+
if(observer)
|
|
1730
|
+
{
|
|
1731
|
+
observer->destroy(); // Break cyclic reference counts. Don't clear _observer, it's immutable.
|
|
1732
|
+
}
|
|
1733
|
+
_initData.observer->setObserverUpdater(0); // Break cyclic reference count.
|
|
1734
|
+
}
|
|
1735
|
+
|
|
1736
|
+
LoggerAdminLoggerPtr logger = LoggerAdminLoggerPtr::dynamicCast(_initData.logger);
|
|
1737
|
+
if(logger)
|
|
1738
|
+
{
|
|
1739
|
+
//
|
|
1740
|
+
// This only disables the remote logging; we don't set or reset _initData.logger
|
|
1741
|
+
//
|
|
1742
|
+
logger->destroy();
|
|
1743
|
+
}
|
|
1744
|
+
|
|
1745
|
+
//
|
|
1746
|
+
// Now, destroy the thread pools. This must be done *only* after
|
|
1747
|
+
// all the connections are finished (the connections destruction
|
|
1748
|
+
// can require invoking callbacks with the thread pools).
|
|
1749
|
+
//
|
|
1750
|
+
if(_serverThreadPool)
|
|
1751
|
+
{
|
|
1752
|
+
_serverThreadPool->destroy();
|
|
1753
|
+
}
|
|
1754
|
+
if(_clientThreadPool)
|
|
1755
|
+
{
|
|
1756
|
+
_clientThreadPool->destroy();
|
|
1757
|
+
}
|
|
1758
|
+
if(_endpointHostResolver)
|
|
1759
|
+
{
|
|
1760
|
+
_endpointHostResolver->destroy();
|
|
1761
|
+
}
|
|
1762
|
+
if(_timer)
|
|
1763
|
+
{
|
|
1764
|
+
_timer->destroy();
|
|
1765
|
+
}
|
|
1766
|
+
|
|
1767
|
+
//
|
|
1768
|
+
// Wait for all the threads to be finished.
|
|
1769
|
+
//
|
|
1770
|
+
if(_clientThreadPool)
|
|
1771
|
+
{
|
|
1772
|
+
_clientThreadPool->joinWithAllThreads();
|
|
1773
|
+
}
|
|
1774
|
+
if(_serverThreadPool)
|
|
1775
|
+
{
|
|
1776
|
+
_serverThreadPool->joinWithAllThreads();
|
|
1777
|
+
}
|
|
1778
|
+
#ifndef ICE_OS_WINRT
|
|
1779
|
+
if(_endpointHostResolver)
|
|
1780
|
+
{
|
|
1781
|
+
_endpointHostResolver->getThreadControl().join();
|
|
1782
|
+
}
|
|
1783
|
+
#endif
|
|
1784
|
+
|
|
1785
|
+
if(_servantFactoryManager)
|
|
1786
|
+
{
|
|
1787
|
+
_servantFactoryManager->destroy();
|
|
1788
|
+
}
|
|
1789
|
+
|
|
1790
|
+
if(_routerManager)
|
|
1791
|
+
{
|
|
1792
|
+
_routerManager->destroy();
|
|
1793
|
+
}
|
|
1794
|
+
|
|
1795
|
+
if(_locatorManager)
|
|
1796
|
+
{
|
|
1797
|
+
_locatorManager->destroy();
|
|
1798
|
+
}
|
|
1799
|
+
|
|
1800
|
+
if(_endpointFactoryManager)
|
|
1801
|
+
{
|
|
1802
|
+
_endpointFactoryManager->destroy();
|
|
1803
|
+
}
|
|
1804
|
+
|
|
1805
|
+
if(_initData.properties->getPropertyAsInt("Ice.Warn.UnusedProperties") > 0)
|
|
1806
|
+
{
|
|
1807
|
+
set<string> unusedProperties = static_cast<PropertiesI*>(_initData.properties.get())->getUnusedProperties();
|
|
1808
|
+
if(unusedProperties.size() != 0)
|
|
1809
|
+
{
|
|
1810
|
+
Warning out(_initData.logger);
|
|
1811
|
+
out << "The following properties were set but never read:";
|
|
1812
|
+
for(set<string>::const_iterator p = unusedProperties.begin(); p != unusedProperties.end(); ++p)
|
|
1813
|
+
{
|
|
1814
|
+
out << "\n " << *p;
|
|
1815
|
+
}
|
|
1816
|
+
}
|
|
1817
|
+
}
|
|
1818
|
+
|
|
1819
|
+
//
|
|
1820
|
+
// Destroy last so that a Logger plugin can receive all log/traces before its destruction.
|
|
1821
|
+
//
|
|
1822
|
+
if(_pluginManager)
|
|
1823
|
+
{
|
|
1824
|
+
_pluginManager->destroy();
|
|
1825
|
+
}
|
|
1826
|
+
|
|
1827
|
+
{
|
|
1828
|
+
Lock sync(*this);
|
|
1829
|
+
|
|
1830
|
+
_objectAdapterFactory = 0;
|
|
1831
|
+
_outgoingConnectionFactory = 0;
|
|
1832
|
+
_retryQueue = 0;
|
|
1833
|
+
|
|
1834
|
+
_serverThreadPool = 0;
|
|
1835
|
+
_clientThreadPool = 0;
|
|
1836
|
+
_endpointHostResolver = 0;
|
|
1837
|
+
_timer = 0;
|
|
1838
|
+
|
|
1839
|
+
_servantFactoryManager = 0;
|
|
1840
|
+
_referenceFactory = 0;
|
|
1841
|
+
_requestHandlerFactory = 0;
|
|
1842
|
+
_proxyFactory = 0;
|
|
1843
|
+
_routerManager = 0;
|
|
1844
|
+
_locatorManager = 0;
|
|
1845
|
+
_endpointFactoryManager = 0;
|
|
1846
|
+
_pluginManager = 0;
|
|
1847
|
+
_dynamicLibraryList = 0;
|
|
1848
|
+
|
|
1849
|
+
_adminAdapter = 0;
|
|
1850
|
+
_adminFacets.clear();
|
|
1851
|
+
|
|
1852
|
+
_state = StateDestroyed;
|
|
1853
|
+
notifyAll();
|
|
1854
|
+
}
|
|
1855
|
+
}
|
|
1856
|
+
|
|
1857
|
+
void
|
|
1858
|
+
IceInternal::Instance::updateConnectionObservers()
|
|
1859
|
+
{
|
|
1860
|
+
try
|
|
1861
|
+
{
|
|
1862
|
+
assert(_outgoingConnectionFactory);
|
|
1863
|
+
_outgoingConnectionFactory->updateConnectionObservers();
|
|
1864
|
+
assert(_objectAdapterFactory);
|
|
1865
|
+
_objectAdapterFactory->updateObservers(&ObjectAdapterI::updateConnectionObservers);
|
|
1866
|
+
}
|
|
1867
|
+
catch(const Ice::CommunicatorDestroyedException&)
|
|
1868
|
+
{
|
|
1869
|
+
}
|
|
1870
|
+
}
|
|
1871
|
+
|
|
1872
|
+
void
|
|
1873
|
+
IceInternal::Instance::updateThreadObservers()
|
|
1874
|
+
{
|
|
1875
|
+
try
|
|
1876
|
+
{
|
|
1877
|
+
if(_clientThreadPool)
|
|
1878
|
+
{
|
|
1879
|
+
_clientThreadPool->updateObservers();
|
|
1880
|
+
}
|
|
1881
|
+
if(_serverThreadPool)
|
|
1882
|
+
{
|
|
1883
|
+
_serverThreadPool->updateObservers();
|
|
1884
|
+
}
|
|
1885
|
+
assert(_objectAdapterFactory);
|
|
1886
|
+
_objectAdapterFactory->updateObservers(&ObjectAdapterI::updateThreadObservers);
|
|
1887
|
+
if(_endpointHostResolver)
|
|
1888
|
+
{
|
|
1889
|
+
_endpointHostResolver->updateObserver();
|
|
1890
|
+
}
|
|
1891
|
+
if(_timer)
|
|
1892
|
+
{
|
|
1893
|
+
_timer->updateObserver(_initData.observer);
|
|
1894
|
+
}
|
|
1895
|
+
}
|
|
1896
|
+
catch(const Ice::CommunicatorDestroyedException&)
|
|
1897
|
+
{
|
|
1898
|
+
}
|
|
1899
|
+
}
|
|
1900
|
+
|
|
1901
|
+
IceInternal::ProcessI::ProcessI(const CommunicatorPtr& communicator) :
|
|
1902
|
+
_communicator(communicator)
|
|
1903
|
+
{
|
|
1904
|
+
}
|
|
1905
|
+
|
|
1906
|
+
void
|
|
1907
|
+
IceInternal::ProcessI::shutdown(const Current&)
|
|
1908
|
+
{
|
|
1909
|
+
_communicator->shutdown();
|
|
1910
|
+
}
|
|
1911
|
+
|
|
1912
|
+
void
|
|
1913
|
+
IceInternal::ProcessI::writeMessage(const string& message, Int fd, const Current&)
|
|
1914
|
+
{
|
|
1915
|
+
switch(fd)
|
|
1916
|
+
{
|
|
1917
|
+
case 1:
|
|
1918
|
+
{
|
|
1919
|
+
cout << message << endl;
|
|
1920
|
+
break;
|
|
1921
|
+
}
|
|
1922
|
+
case 2:
|
|
1923
|
+
{
|
|
1924
|
+
cerr << message << endl;
|
|
1925
|
+
break;
|
|
1926
|
+
}
|
|
1927
|
+
}
|
|
1928
|
+
}
|