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,96 @@
|
|
|
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
|
+
#ifndef ICE_SSL_ENDPOINT_I_H
|
|
11
|
+
#define ICE_SSL_ENDPOINT_I_H
|
|
12
|
+
|
|
13
|
+
#include <Ice/IPEndpointI.h>
|
|
14
|
+
#include <Ice/EndpointFactory.h>
|
|
15
|
+
#include <IceSSL/InstanceF.h>
|
|
16
|
+
#include <IceSSL/EndpointInfo.h>
|
|
17
|
+
#include <Ice/Network.h>
|
|
18
|
+
|
|
19
|
+
namespace IceSSL
|
|
20
|
+
{
|
|
21
|
+
|
|
22
|
+
class EndpointI : public IceInternal::IPEndpointI
|
|
23
|
+
{
|
|
24
|
+
public:
|
|
25
|
+
|
|
26
|
+
EndpointI(const InstancePtr&, const std::string&, Ice::Int, const IceInternal::Address&, Ice::Int,
|
|
27
|
+
const std::string&, bool);
|
|
28
|
+
EndpointI(const InstancePtr&);
|
|
29
|
+
EndpointI(const InstancePtr&, IceInternal::BasicStream*);
|
|
30
|
+
|
|
31
|
+
virtual Ice::EndpointInfoPtr getInfo() const;
|
|
32
|
+
|
|
33
|
+
virtual Ice::Int timeout() const;
|
|
34
|
+
virtual IceInternal::EndpointIPtr timeout(Ice::Int) const;
|
|
35
|
+
virtual bool compress() const;
|
|
36
|
+
virtual IceInternal::EndpointIPtr compress(bool) const;
|
|
37
|
+
virtual bool datagram() const;
|
|
38
|
+
virtual bool secure() const;
|
|
39
|
+
|
|
40
|
+
virtual IceInternal::TransceiverPtr transceiver() const;
|
|
41
|
+
virtual IceInternal::AcceptorPtr acceptor(const std::string&) const;
|
|
42
|
+
virtual std::string options() const;
|
|
43
|
+
|
|
44
|
+
virtual bool operator==(const Ice::LocalObject&) const;
|
|
45
|
+
virtual bool operator<(const Ice::LocalObject&) const;
|
|
46
|
+
|
|
47
|
+
virtual EndpointIPtr endpoint(const AcceptorIPtr&) const;
|
|
48
|
+
|
|
49
|
+
using IceInternal::IPEndpointI::connectionId;
|
|
50
|
+
|
|
51
|
+
protected:
|
|
52
|
+
|
|
53
|
+
virtual void streamWriteImpl(IceInternal::BasicStream*) const;
|
|
54
|
+
virtual void hashInit(Ice::Int&) const;
|
|
55
|
+
virtual void fillEndpointInfo(Ice::IPEndpointInfo*) const;
|
|
56
|
+
virtual bool checkOption(const std::string&, const std::string&, const std::string&);
|
|
57
|
+
|
|
58
|
+
virtual IceInternal::ConnectorPtr createConnector(const IceInternal::Address&,
|
|
59
|
+
const IceInternal::NetworkProxyPtr&) const;
|
|
60
|
+
virtual IceInternal::IPEndpointIPtr createEndpoint(const std::string&, int, const std::string&) const;
|
|
61
|
+
|
|
62
|
+
private:
|
|
63
|
+
|
|
64
|
+
//
|
|
65
|
+
// All members are const, because endpoints are immutable.
|
|
66
|
+
//
|
|
67
|
+
const InstancePtr _instance;
|
|
68
|
+
const Ice::Int _timeout;
|
|
69
|
+
const bool _compress;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
class EndpointFactoryI : public IceInternal::EndpointFactory
|
|
73
|
+
{
|
|
74
|
+
public:
|
|
75
|
+
|
|
76
|
+
virtual ~EndpointFactoryI();
|
|
77
|
+
|
|
78
|
+
virtual Ice::Short type() const;
|
|
79
|
+
virtual std::string protocol() const;
|
|
80
|
+
virtual IceInternal::EndpointIPtr create(std::vector<std::string>&, bool) const;
|
|
81
|
+
virtual IceInternal::EndpointIPtr read(IceInternal::BasicStream*) const;
|
|
82
|
+
virtual void destroy();
|
|
83
|
+
|
|
84
|
+
virtual IceInternal::EndpointFactoryPtr clone(const IceInternal::ProtocolInstancePtr&) const;
|
|
85
|
+
|
|
86
|
+
private:
|
|
87
|
+
|
|
88
|
+
EndpointFactoryI(const InstancePtr&);
|
|
89
|
+
friend class PluginI;
|
|
90
|
+
|
|
91
|
+
InstancePtr _instance;
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
#endif
|
|
@@ -0,0 +1,41 @@
|
|
|
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
|
+
// Ice version 3.6b
|
|
11
|
+
//
|
|
12
|
+
// <auto-generated>
|
|
13
|
+
//
|
|
14
|
+
// Generated from file `EndpointInfo.ice'
|
|
15
|
+
//
|
|
16
|
+
// Warning: do not edit this file.
|
|
17
|
+
//
|
|
18
|
+
// </auto-generated>
|
|
19
|
+
//
|
|
20
|
+
|
|
21
|
+
#ifndef ICE_SSL_API_EXPORTS
|
|
22
|
+
# define ICE_SSL_API_EXPORTS
|
|
23
|
+
#endif
|
|
24
|
+
#include <IceSSL/EndpointInfo.h>
|
|
25
|
+
#include <IceUtil/PushDisableWarnings.h>
|
|
26
|
+
#include <Ice/BasicStream.h>
|
|
27
|
+
#include <IceUtil/Iterator.h>
|
|
28
|
+
#include <IceUtil/PopDisableWarnings.h>
|
|
29
|
+
|
|
30
|
+
#ifndef ICE_IGNORE_VERSION
|
|
31
|
+
# if ICE_INT_VERSION != 30651
|
|
32
|
+
# error Ice version mismatch: an exact match is required for beta generated code
|
|
33
|
+
# endif
|
|
34
|
+
#endif
|
|
35
|
+
|
|
36
|
+
namespace
|
|
37
|
+
{
|
|
38
|
+
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
ICE_DECLSPEC_EXPORT ::Ice::LocalObject* IceSSL::upCast(::IceSSL::EndpointInfo* p) { return p; }
|
|
@@ -0,0 +1,38 @@
|
|
|
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/Config.h>
|
|
11
|
+
#ifdef _WIN32
|
|
12
|
+
# include <winsock2.h>
|
|
13
|
+
#endif
|
|
14
|
+
#include <IceSSL/Instance.h>
|
|
15
|
+
#include <IceSSL/SSLEngine.h>
|
|
16
|
+
#include <Ice/Properties.h>
|
|
17
|
+
|
|
18
|
+
using namespace std;
|
|
19
|
+
using namespace Ice;
|
|
20
|
+
using namespace IceSSL;
|
|
21
|
+
|
|
22
|
+
IceUtil::Shared* IceSSL::upCast(IceSSL::Instance* p) { return p; }
|
|
23
|
+
|
|
24
|
+
IceSSL::Instance::Instance(const SSLEnginePtr& engine, Short type, const string& protocol) :
|
|
25
|
+
ProtocolInstance(engine->communicator(), type, protocol),
|
|
26
|
+
_engine(engine)
|
|
27
|
+
{
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
IceSSL::Instance::~Instance()
|
|
31
|
+
{
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
bool
|
|
35
|
+
IceSSL::Instance::initialized() const
|
|
36
|
+
{
|
|
37
|
+
return _engine->initialized();
|
|
38
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
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
|
+
#ifndef ICE_SSL_INSTANCE_H
|
|
11
|
+
#define ICE_SSL_INSTANCE_H
|
|
12
|
+
|
|
13
|
+
#include <IceSSL/InstanceF.h>
|
|
14
|
+
#include <Ice/ProtocolInstance.h>
|
|
15
|
+
#include <IceSSL/SSLEngineF.h>
|
|
16
|
+
|
|
17
|
+
namespace IceSSL
|
|
18
|
+
{
|
|
19
|
+
|
|
20
|
+
class Instance : public IceInternal::ProtocolInstance
|
|
21
|
+
{
|
|
22
|
+
public:
|
|
23
|
+
|
|
24
|
+
Instance(const SSLEnginePtr&, Ice::Short, const std::string&);
|
|
25
|
+
virtual ~Instance();
|
|
26
|
+
|
|
27
|
+
SSLEnginePtr
|
|
28
|
+
engine() const
|
|
29
|
+
{
|
|
30
|
+
return _engine;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
bool initialized() const;
|
|
34
|
+
|
|
35
|
+
private:
|
|
36
|
+
|
|
37
|
+
const SSLEnginePtr _engine;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
#endif
|
|
@@ -0,0 +1,34 @@
|
|
|
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
|
+
#ifndef ICE_SSL_INSTANCE_F_H
|
|
11
|
+
#define ICE_SSL_INSTANCE_F_H
|
|
12
|
+
|
|
13
|
+
#include <IceUtil/Shared.h>
|
|
14
|
+
|
|
15
|
+
#include <Ice/Handle.h>
|
|
16
|
+
|
|
17
|
+
namespace IceSSL
|
|
18
|
+
{
|
|
19
|
+
|
|
20
|
+
class Instance;
|
|
21
|
+
IceUtil::Shared* upCast(Instance*);
|
|
22
|
+
typedef IceInternal::Handle<Instance> InstancePtr;
|
|
23
|
+
|
|
24
|
+
class EndpointI;
|
|
25
|
+
IceUtil::Shared* upCast(EndpointI*);
|
|
26
|
+
typedef IceInternal::Handle<EndpointI> EndpointIPtr;
|
|
27
|
+
|
|
28
|
+
class AcceptorI;
|
|
29
|
+
IceUtil::Shared* upCast(AcceptorI*);
|
|
30
|
+
typedef IceInternal::Handle<AcceptorI> AcceptorIPtr;
|
|
31
|
+
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
#endif
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
|
|
2
|
+
# **********************************************************************
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved.
|
|
5
|
+
#
|
|
6
|
+
# This copy of Ice is licensed to you under the terms described in the
|
|
7
|
+
# ICE_LICENSE file included in this distribution.
|
|
8
|
+
#
|
|
9
|
+
# **********************************************************************
|
|
10
|
+
|
|
11
|
+
top_srcdir = ../..
|
|
12
|
+
|
|
13
|
+
LIBFILENAME = $(call mklibfilename,IceSSL,$(VERSION))
|
|
14
|
+
SONAME = $(call mksoname,IceSSL,$(SOVERSION))
|
|
15
|
+
LIBNAME = $(call mklibname,IceSSL)
|
|
16
|
+
|
|
17
|
+
TARGETS = $(call mklibtargets,$(libdir)/$(LIBFILENAME),$(libdir)/$(SONAME),$(libdir)$(cpp11libdirsuffix)/$(LIBNAME))
|
|
18
|
+
|
|
19
|
+
SLICE_OBJS = ConnectionInfo.o \
|
|
20
|
+
EndpointInfo.o
|
|
21
|
+
|
|
22
|
+
OBJS = AcceptorI.o \
|
|
23
|
+
Certificate.o \
|
|
24
|
+
ConnectorI.o \
|
|
25
|
+
EndpointI.o \
|
|
26
|
+
Instance.o \
|
|
27
|
+
PluginI.o \
|
|
28
|
+
RFC2253.o \
|
|
29
|
+
SSLEngine.o \
|
|
30
|
+
TrustManager.o \
|
|
31
|
+
Util.o \
|
|
32
|
+
$(SLICE_OBJS)
|
|
33
|
+
|
|
34
|
+
ifneq ($(findstring MINGW,$(shell uname)),)
|
|
35
|
+
OBJS := $(OBJS) \
|
|
36
|
+
SChannelEngine.o \
|
|
37
|
+
SChannelTransceiverI.o
|
|
38
|
+
else
|
|
39
|
+
ifeq ($(shell uname),Darwin)
|
|
40
|
+
OBJS := $(OBJS) \
|
|
41
|
+
SecureTransportEngine.o \
|
|
42
|
+
SecureTransportTransceiverI.o
|
|
43
|
+
else
|
|
44
|
+
OBJS := $(OBJS) \
|
|
45
|
+
OpenSSLEngine.o \
|
|
46
|
+
OpenSSLTransceiverI.o
|
|
47
|
+
endif
|
|
48
|
+
endif
|
|
49
|
+
|
|
50
|
+
HDIR = $(headerdir)/IceSSL
|
|
51
|
+
SDIR = $(slicedir)/IceSSL
|
|
52
|
+
|
|
53
|
+
include $(top_srcdir)/config/Make.rules
|
|
54
|
+
|
|
55
|
+
CPPFLAGS := -I.. $(CPPFLAGS) -DICE_SSL_API_EXPORTS $(OPENSSL_FLAGS)
|
|
56
|
+
SLICE2CPPFLAGS := --ice --include-dir IceSSL --dll-export ICE_SSL_API $(SLICE2CPPFLAGS)
|
|
57
|
+
|
|
58
|
+
LINKWITH := $(BZIP2_RPATH_LINK) -lIce -lIceUtil $(SSL_OS_LIBS) $(CXXLIBS)
|
|
59
|
+
|
|
60
|
+
ifeq ($(STATICLIBS),yes)
|
|
61
|
+
$(libdir)/$(LIBNAME): $(OBJS)
|
|
62
|
+
@mkdir -p $(dir $@)
|
|
63
|
+
rm -f $@
|
|
64
|
+
$(call mklib,$@,$(OBJS))
|
|
65
|
+
else
|
|
66
|
+
$(libdir)/$(LIBFILENAME): $(OBJS)
|
|
67
|
+
@mkdir -p $(dir $@)
|
|
68
|
+
rm -f $@
|
|
69
|
+
$(call mkshlib,$@,$(SONAME),$(OBJS),$(LINKWITH))
|
|
70
|
+
|
|
71
|
+
$(libdir)/$(SONAME): $(libdir)/$(LIBFILENAME)
|
|
72
|
+
rm -f $@
|
|
73
|
+
ln -s $(LIBFILENAME) $@
|
|
74
|
+
|
|
75
|
+
$(libdir)$(cpp11libdirsuffix)/$(LIBNAME): $(libdir)/$(SONAME)
|
|
76
|
+
@mkdir -p $(libdir)$(cpp11libdirsuffix)
|
|
77
|
+
rm -f $@
|
|
78
|
+
ln -s $(cpp11sonamedir)$(SONAME) $@
|
|
79
|
+
endif
|
|
80
|
+
|
|
81
|
+
install:: all
|
|
82
|
+
$(call installlib,$(DESTDIR)$(install_libdir),$(libdir),$(LIBFILENAME),$(SONAME),$(LIBNAME))
|
|
@@ -0,0 +1,1001 @@
|
|
|
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 <IceSSL/Config.h>
|
|
11
|
+
|
|
12
|
+
#include <IceSSL/SSLEngine.h>
|
|
13
|
+
#include <IceSSL/Util.h>
|
|
14
|
+
#include <IceSSL/TrustManager.h>
|
|
15
|
+
|
|
16
|
+
#include <Ice/Communicator.h>
|
|
17
|
+
#include <Ice/LocalException.h>
|
|
18
|
+
#include <Ice/Logger.h>
|
|
19
|
+
#include <Ice/LoggerUtil.h>
|
|
20
|
+
#include <Ice/Properties.h>
|
|
21
|
+
|
|
22
|
+
#include <IceUtil/StringConverter.h>
|
|
23
|
+
#include <IceUtil/StringUtil.h>
|
|
24
|
+
#include <IceUtil/Mutex.h>
|
|
25
|
+
#include <IceUtil/MutexPtrLock.h>
|
|
26
|
+
#include <IceUtil/FileUtil.h>
|
|
27
|
+
|
|
28
|
+
#ifdef ICE_USE_OPENSSL
|
|
29
|
+
|
|
30
|
+
#include <openssl/rand.h>
|
|
31
|
+
#include <openssl/err.h>
|
|
32
|
+
#include <openssl/ssl.h>
|
|
33
|
+
#include <openssl/pkcs12.h>
|
|
34
|
+
|
|
35
|
+
using namespace std;
|
|
36
|
+
using namespace Ice;
|
|
37
|
+
using namespace IceSSL;
|
|
38
|
+
|
|
39
|
+
namespace
|
|
40
|
+
{
|
|
41
|
+
|
|
42
|
+
IceUtil::Mutex* staticMutex = 0;
|
|
43
|
+
int instanceCount = 0;
|
|
44
|
+
IceUtil::Mutex* locks = 0;
|
|
45
|
+
|
|
46
|
+
class Init
|
|
47
|
+
{
|
|
48
|
+
public:
|
|
49
|
+
|
|
50
|
+
Init()
|
|
51
|
+
{
|
|
52
|
+
staticMutex = new IceUtil::Mutex;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
~Init()
|
|
56
|
+
{
|
|
57
|
+
delete staticMutex;
|
|
58
|
+
staticMutex = 0;
|
|
59
|
+
|
|
60
|
+
if(locks)
|
|
61
|
+
{
|
|
62
|
+
delete[] locks;
|
|
63
|
+
locks = 0;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
Init init;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
extern "C"
|
|
72
|
+
{
|
|
73
|
+
|
|
74
|
+
//
|
|
75
|
+
// OpenSSL mutex callback.
|
|
76
|
+
//
|
|
77
|
+
void
|
|
78
|
+
IceSSL_opensslLockCallback(int mode, int n, const char* /*file*/, int /*line*/)
|
|
79
|
+
{
|
|
80
|
+
assert(locks);
|
|
81
|
+
if(mode & CRYPTO_LOCK)
|
|
82
|
+
{
|
|
83
|
+
locks[n].lock();
|
|
84
|
+
}
|
|
85
|
+
else
|
|
86
|
+
{
|
|
87
|
+
locks[n].unlock();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
//
|
|
92
|
+
// OpenSSL thread id callback.
|
|
93
|
+
//
|
|
94
|
+
unsigned long
|
|
95
|
+
IceSSL_opensslThreadIdCallback()
|
|
96
|
+
{
|
|
97
|
+
# if defined(_WIN32)
|
|
98
|
+
return static_cast<unsigned long>(GetCurrentThreadId());
|
|
99
|
+
# elif defined(__FreeBSD__) || defined(__APPLE__) || defined(__osf1__)
|
|
100
|
+
//
|
|
101
|
+
// On some platforms, pthread_t is a pointer to a per-thread structure.
|
|
102
|
+
//
|
|
103
|
+
return reinterpret_cast<unsigned long>(pthread_self());
|
|
104
|
+
# elif (defined(__linux) || defined(__sun) || defined(__hpux)) || defined(_AIX)
|
|
105
|
+
//
|
|
106
|
+
// On Linux, Solaris, HP-UX and AIX, pthread_t is an integer.
|
|
107
|
+
//
|
|
108
|
+
return static_cast<unsigned long>(pthread_self());
|
|
109
|
+
# else
|
|
110
|
+
# error "Unknown platform"
|
|
111
|
+
# endif
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
int
|
|
115
|
+
IceSSL_opensslPasswordCallback(char* buf, int size, int flag, void* userData)
|
|
116
|
+
{
|
|
117
|
+
OpenSSLEngine* p = reinterpret_cast<OpenSSLEngine*>(userData);
|
|
118
|
+
string passwd = p->password(flag == 1);
|
|
119
|
+
int sz = static_cast<int>(passwd.size());
|
|
120
|
+
if(sz > size)
|
|
121
|
+
{
|
|
122
|
+
sz = size - 1;
|
|
123
|
+
}
|
|
124
|
+
# if defined(_WIN32)
|
|
125
|
+
strncpy_s(buf, size, passwd.c_str(), sz);
|
|
126
|
+
# else
|
|
127
|
+
strncpy(buf, passwd.c_str(), sz);
|
|
128
|
+
# endif
|
|
129
|
+
buf[sz] = '\0';
|
|
130
|
+
|
|
131
|
+
for(string::iterator i = passwd.begin(); i != passwd.end(); ++i)
|
|
132
|
+
{
|
|
133
|
+
*i = '\0';
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return sz;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
# ifndef OPENSSL_NO_DH
|
|
140
|
+
DH*
|
|
141
|
+
IceSSL_opensslDHCallback(SSL* ssl, int /*isExport*/, int keyLength)
|
|
142
|
+
{
|
|
143
|
+
OpenSSLEngine* p = reinterpret_cast<OpenSSLEngine*>(SSL_CTX_get_ex_data(ssl->ctx, 0));
|
|
144
|
+
return p->dhParams(keyLength);
|
|
145
|
+
}
|
|
146
|
+
# endif
|
|
147
|
+
|
|
148
|
+
int
|
|
149
|
+
IceSSL_opensslVerifyCallback(int ok, X509_STORE_CTX* ctx)
|
|
150
|
+
{
|
|
151
|
+
SSL* ssl = reinterpret_cast<SSL*>(X509_STORE_CTX_get_ex_data(ctx, SSL_get_ex_data_X509_STORE_CTX_idx()));
|
|
152
|
+
OpenSSLEngine* p = reinterpret_cast<OpenSSLEngine*>(SSL_CTX_get_ex_data(ssl->ctx, 0));
|
|
153
|
+
return p->verifyCallback(ok, ssl, ctx);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
namespace
|
|
159
|
+
{
|
|
160
|
+
bool
|
|
161
|
+
passwordError()
|
|
162
|
+
{
|
|
163
|
+
int reason = ERR_GET_REASON(ERR_peek_error());
|
|
164
|
+
return (reason == PEM_R_BAD_BASE64_DECODE ||
|
|
165
|
+
reason == PEM_R_BAD_DECRYPT ||
|
|
166
|
+
reason == PEM_R_BAD_PASSWORD_READ ||
|
|
167
|
+
reason == PEM_R_PROBLEMS_GETTING_PASSWORD ||
|
|
168
|
+
reason == PKCS12_R_MAC_VERIFY_FAILURE);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
IceUtil::Shared* IceSSL::upCast(IceSSL::OpenSSLEngine* p) { return p; }
|
|
174
|
+
|
|
175
|
+
OpenSSLEngine::OpenSSLEngine(const CommunicatorPtr& communicator) :
|
|
176
|
+
SSLEngine(communicator),
|
|
177
|
+
_initialized(false),
|
|
178
|
+
_ctx(0)
|
|
179
|
+
{
|
|
180
|
+
__setNoDelete(true);
|
|
181
|
+
|
|
182
|
+
//
|
|
183
|
+
// Initialize OpenSSL if necessary.
|
|
184
|
+
//
|
|
185
|
+
IceUtilInternal::MutexPtrLock<IceUtil::Mutex> sync(staticMutex);
|
|
186
|
+
instanceCount++;
|
|
187
|
+
|
|
188
|
+
if(instanceCount == 1)
|
|
189
|
+
{
|
|
190
|
+
PropertiesPtr properties = communicator->getProperties();
|
|
191
|
+
|
|
192
|
+
//
|
|
193
|
+
// The IceSSL.InitOpenSSL property specifies whether we should perform the global
|
|
194
|
+
// startup (and shutdown) tasks for the OpenSSL library.
|
|
195
|
+
//
|
|
196
|
+
// If an application uses multiple components that each depend on OpenSSL, the
|
|
197
|
+
// application should disable OpenSSL initialization in those components and
|
|
198
|
+
// perform the initialization itself.
|
|
199
|
+
//
|
|
200
|
+
_initOpenSSL = properties->getPropertyAsIntWithDefault("IceSSL.InitOpenSSL", 1) > 0;
|
|
201
|
+
if(_initOpenSSL)
|
|
202
|
+
{
|
|
203
|
+
//
|
|
204
|
+
// Create the mutexes and set the callbacks.
|
|
205
|
+
//
|
|
206
|
+
if(!locks)
|
|
207
|
+
{
|
|
208
|
+
locks = new IceUtil::Mutex[CRYPTO_num_locks()];
|
|
209
|
+
CRYPTO_set_locking_callback(IceSSL_opensslLockCallback);
|
|
210
|
+
CRYPTO_set_id_callback(IceSSL_opensslThreadIdCallback);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
//
|
|
214
|
+
// Load human-readable error messages.
|
|
215
|
+
//
|
|
216
|
+
SSL_load_error_strings();
|
|
217
|
+
|
|
218
|
+
//
|
|
219
|
+
// Initialize the SSL library.
|
|
220
|
+
//
|
|
221
|
+
SSL_library_init();
|
|
222
|
+
|
|
223
|
+
//
|
|
224
|
+
// This is necessary to allow programs that use OpenSSL 0.9.x to
|
|
225
|
+
// load private key files generated by OpenSSL 1.x.
|
|
226
|
+
//
|
|
227
|
+
OpenSSL_add_all_algorithms();
|
|
228
|
+
|
|
229
|
+
//
|
|
230
|
+
// Initialize the PRNG.
|
|
231
|
+
//
|
|
232
|
+
# ifdef WINDOWS
|
|
233
|
+
RAND_screen(); // Uses data from the screen if possible.
|
|
234
|
+
# endif
|
|
235
|
+
char randFile[1024];
|
|
236
|
+
if(RAND_file_name(randFile, sizeof(randFile))) // Gets the name of a default seed file.
|
|
237
|
+
{
|
|
238
|
+
RAND_load_file(randFile, 1024);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
string randFiles = properties->getProperty("IceSSL.Random");
|
|
242
|
+
|
|
243
|
+
if(!randFiles.empty())
|
|
244
|
+
{
|
|
245
|
+
vector<string> files;
|
|
246
|
+
string defaultDir = properties->getProperty("IceSSL.DefaultDir");
|
|
247
|
+
|
|
248
|
+
if(!IceUtilInternal::splitString(randFiles, IceUtilInternal::pathsep, files))
|
|
249
|
+
{
|
|
250
|
+
throw PluginInitializationException(__FILE__, __LINE__,
|
|
251
|
+
"IceSSL: invalid value for IceSSL.Random:\n" + randFiles);
|
|
252
|
+
}
|
|
253
|
+
for(vector<string>::iterator p = files.begin(); p != files.end(); ++p)
|
|
254
|
+
{
|
|
255
|
+
string file = *p;
|
|
256
|
+
if(!checkPath(file, defaultDir, false))
|
|
257
|
+
{
|
|
258
|
+
throw PluginInitializationException(__FILE__, __LINE__,
|
|
259
|
+
"IceSSL: entropy data file not found:\n" + file);
|
|
260
|
+
}
|
|
261
|
+
if(!RAND_load_file(file.c_str(), 1024))
|
|
262
|
+
{
|
|
263
|
+
throw PluginInitializationException(__FILE__, __LINE__,
|
|
264
|
+
"IceSSL: unable to load entropy data from " + file);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
# ifndef _WIN32
|
|
269
|
+
//
|
|
270
|
+
// The Entropy Gathering Daemon (EGD) is not available on Windows.
|
|
271
|
+
// The file should be a Unix domain socket for the daemon.
|
|
272
|
+
//
|
|
273
|
+
string entropyDaemon = properties->getProperty("IceSSL.EntropyDaemon");
|
|
274
|
+
if(!entropyDaemon.empty())
|
|
275
|
+
{
|
|
276
|
+
if(RAND_egd(entropyDaemon.c_str()) <= 0)
|
|
277
|
+
{
|
|
278
|
+
throw PluginInitializationException(__FILE__, __LINE__,
|
|
279
|
+
"IceSSL: EGD failure using file " + entropyDaemon);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
# endif
|
|
283
|
+
if(!RAND_status())
|
|
284
|
+
{
|
|
285
|
+
getLogger()->warning("IceSSL: insufficient data to initialize PRNG");
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
else
|
|
289
|
+
{
|
|
290
|
+
if(!properties->getProperty("IceSSL.Random").empty())
|
|
291
|
+
{
|
|
292
|
+
getLogger()->warning("IceSSL: ignoring IceSSL.Random because OpenSSL initialization is disabled");
|
|
293
|
+
}
|
|
294
|
+
# ifndef _WIN32
|
|
295
|
+
else if(!properties->getProperty("IceSSL.EntropyDaemon").empty())
|
|
296
|
+
{
|
|
297
|
+
getLogger()->warning("IceSSL: ignoring IceSSL.EntropyDaemon because OpenSSL initialization is disabled");
|
|
298
|
+
}
|
|
299
|
+
# endif
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
__setNoDelete(false);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
OpenSSLEngine::~OpenSSLEngine()
|
|
306
|
+
{
|
|
307
|
+
//
|
|
308
|
+
// Clean up OpenSSL resources.
|
|
309
|
+
//
|
|
310
|
+
IceUtilInternal::MutexPtrLock<IceUtil::Mutex> sync(staticMutex);
|
|
311
|
+
|
|
312
|
+
if(--instanceCount == 0 && _initOpenSSL)
|
|
313
|
+
{
|
|
314
|
+
//
|
|
315
|
+
// NOTE: We can't destroy the locks here: threads which might have called openssl methods
|
|
316
|
+
// might access openssl locks upon termination (from DllMain/THREAD_DETACHED). Instead,
|
|
317
|
+
// we release the locks in the ~Init() static destructor. See bug #4156.
|
|
318
|
+
//
|
|
319
|
+
//CRYPTO_set_locking_callback(0);
|
|
320
|
+
//CRYPTO_set_id_callback(0);
|
|
321
|
+
//delete[] locks;
|
|
322
|
+
//locks = 0;
|
|
323
|
+
|
|
324
|
+
CRYPTO_cleanup_all_ex_data();
|
|
325
|
+
RAND_cleanup();
|
|
326
|
+
ERR_free_strings();
|
|
327
|
+
EVP_cleanup();
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
bool
|
|
332
|
+
OpenSSLEngine::initialized() const
|
|
333
|
+
{
|
|
334
|
+
IceUtil::Mutex::Lock lock(_mutex);
|
|
335
|
+
return _initialized;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
void
|
|
339
|
+
OpenSSLEngine::initialize()
|
|
340
|
+
{
|
|
341
|
+
IceUtil::Mutex::Lock lock(_mutex);
|
|
342
|
+
if(_initialized)
|
|
343
|
+
{
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
try
|
|
348
|
+
{
|
|
349
|
+
SSLEngine::initialize();
|
|
350
|
+
|
|
351
|
+
const string propPrefix = "IceSSL.";
|
|
352
|
+
PropertiesPtr properties = communicator()->getProperties();
|
|
353
|
+
|
|
354
|
+
//
|
|
355
|
+
// Protocols selects which protocols to enable, by default we only enable TLS1.0
|
|
356
|
+
// TLS1.1 and TLS1.2 to avoid security issues with SSLv3
|
|
357
|
+
//
|
|
358
|
+
vector<string> defaultProtocols;
|
|
359
|
+
defaultProtocols.push_back("tls1_0");
|
|
360
|
+
defaultProtocols.push_back("tls1_1");
|
|
361
|
+
defaultProtocols.push_back("tls1_2");
|
|
362
|
+
|
|
363
|
+
const int protocols =
|
|
364
|
+
parseProtocols(properties->getPropertyAsListWithDefault(propPrefix + "Protocols", defaultProtocols));
|
|
365
|
+
|
|
366
|
+
//
|
|
367
|
+
// Create an SSL context if the application hasn't supplied one.
|
|
368
|
+
//
|
|
369
|
+
if(!_ctx)
|
|
370
|
+
{
|
|
371
|
+
_ctx = SSL_CTX_new(getMethod(protocols));
|
|
372
|
+
if(!_ctx)
|
|
373
|
+
{
|
|
374
|
+
throw PluginInitializationException(__FILE__, __LINE__,
|
|
375
|
+
"IceSSL: unable to create SSL context:\n" + sslErrors());
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
//
|
|
379
|
+
// Check for a default directory. We look in this directory for
|
|
380
|
+
// files mentioned in the configuration.
|
|
381
|
+
//
|
|
382
|
+
string defaultDir = properties->getProperty(propPrefix + "DefaultDir");
|
|
383
|
+
|
|
384
|
+
//
|
|
385
|
+
// If the configuration defines a password, or the application has supplied
|
|
386
|
+
// a password prompt object, then register a password callback. Otherwise,
|
|
387
|
+
// let OpenSSL use its default behavior.
|
|
388
|
+
//
|
|
389
|
+
{
|
|
390
|
+
// TODO: Support quoted value?
|
|
391
|
+
string password = properties->getProperty(propPrefix + "Password");
|
|
392
|
+
if(!password.empty() || getPasswordPrompt())
|
|
393
|
+
{
|
|
394
|
+
SSL_CTX_set_default_passwd_cb(_ctx, IceSSL_opensslPasswordCallback);
|
|
395
|
+
SSL_CTX_set_default_passwd_cb_userdata(_ctx, this);
|
|
396
|
+
setPassword(password);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
int passwordRetryMax = properties->getPropertyAsIntWithDefault(propPrefix + "PasswordRetryMax", 3);
|
|
401
|
+
|
|
402
|
+
//
|
|
403
|
+
// Establish the location of CA certificates.
|
|
404
|
+
//
|
|
405
|
+
{
|
|
406
|
+
string caFile = properties->getProperty(propPrefix + "CertAuthFile");
|
|
407
|
+
string caDir = properties->getPropertyWithDefault(propPrefix + "CertAuthDir", defaultDir);
|
|
408
|
+
const char* file = 0;
|
|
409
|
+
const char* dir = 0;
|
|
410
|
+
if(!caFile.empty())
|
|
411
|
+
{
|
|
412
|
+
if(!checkPath(caFile, defaultDir, false))
|
|
413
|
+
{
|
|
414
|
+
throw PluginInitializationException(__FILE__, __LINE__,
|
|
415
|
+
"IceSSL: CA certificate file not found:\n" + caFile);
|
|
416
|
+
}
|
|
417
|
+
file = caFile.c_str();
|
|
418
|
+
}
|
|
419
|
+
if(!caDir.empty())
|
|
420
|
+
{
|
|
421
|
+
if(!checkPath(caDir, defaultDir, true))
|
|
422
|
+
{
|
|
423
|
+
throw PluginInitializationException(__FILE__, __LINE__,
|
|
424
|
+
"IceSSL: CA certificate directory not found:\n" + caDir);
|
|
425
|
+
}
|
|
426
|
+
dir = caDir.c_str();
|
|
427
|
+
}
|
|
428
|
+
if(file || dir)
|
|
429
|
+
{
|
|
430
|
+
//
|
|
431
|
+
// The certificate may be stored in an encrypted file, so handle
|
|
432
|
+
// password retries.
|
|
433
|
+
//
|
|
434
|
+
int count = 0;
|
|
435
|
+
int success = 0;
|
|
436
|
+
while(count < passwordRetryMax)
|
|
437
|
+
{
|
|
438
|
+
ERR_clear_error();
|
|
439
|
+
if((success = SSL_CTX_load_verify_locations(_ctx, file, dir))|| !passwordError())
|
|
440
|
+
{
|
|
441
|
+
break;
|
|
442
|
+
}
|
|
443
|
+
++count;
|
|
444
|
+
}
|
|
445
|
+
if(!success)
|
|
446
|
+
{
|
|
447
|
+
string msg = "IceSSL: unable to establish CA certificates";
|
|
448
|
+
if(passwordError())
|
|
449
|
+
{
|
|
450
|
+
msg += ":\ninvalid password";
|
|
451
|
+
}
|
|
452
|
+
else
|
|
453
|
+
{
|
|
454
|
+
string err = sslErrors();
|
|
455
|
+
if(!err.empty())
|
|
456
|
+
{
|
|
457
|
+
msg += ":\n" + err;
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
throw PluginInitializationException(__FILE__, __LINE__, msg);
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
//
|
|
466
|
+
// Establish the certificate chains and private keys. One RSA certificate and
|
|
467
|
+
// one DSA certificate are allowed.
|
|
468
|
+
//
|
|
469
|
+
string certFile = properties->getProperty(propPrefix + "CertFile");
|
|
470
|
+
string keyFile = properties->getProperty(propPrefix + "KeyFile");
|
|
471
|
+
bool keyLoaded = false;
|
|
472
|
+
|
|
473
|
+
vector<string>::size_type numCerts = 0;
|
|
474
|
+
if(!certFile.empty())
|
|
475
|
+
{
|
|
476
|
+
vector<string> files;
|
|
477
|
+
if(!IceUtilInternal::splitString(certFile, IceUtilInternal::pathsep, files) || files.size() > 2)
|
|
478
|
+
{
|
|
479
|
+
PluginInitializationException ex(__FILE__, __LINE__,
|
|
480
|
+
"IceSSL: invalid value for " + propPrefix + "CertFile:\n" + certFile);
|
|
481
|
+
}
|
|
482
|
+
numCerts = files.size();
|
|
483
|
+
for(vector<string>::iterator p = files.begin(); p != files.end(); ++p)
|
|
484
|
+
{
|
|
485
|
+
string file = *p;
|
|
486
|
+
if(!checkPath(file, defaultDir, false))
|
|
487
|
+
{
|
|
488
|
+
PluginInitializationException ex(__FILE__, __LINE__,
|
|
489
|
+
"IceSSL: certificate file not found:\n" + file);
|
|
490
|
+
}
|
|
491
|
+
//
|
|
492
|
+
// First we try to load the certificate using PKCS12 format if that fails
|
|
493
|
+
// we fallback to PEM format.
|
|
494
|
+
//
|
|
495
|
+
FILE* f = fopen(file.c_str(), "rb");
|
|
496
|
+
if(!f)
|
|
497
|
+
{
|
|
498
|
+
throw PluginInitializationException(__FILE__, __LINE__,
|
|
499
|
+
"IceSSL: unable to load certificate chain from file " + file + "\n" +
|
|
500
|
+
IceUtilInternal::lastErrorToString());
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
int success = 0;
|
|
504
|
+
|
|
505
|
+
PKCS12* p12 = d2i_PKCS12_fp(f, 0);
|
|
506
|
+
fclose(f);
|
|
507
|
+
if(p12)
|
|
508
|
+
{
|
|
509
|
+
EVP_PKEY* key = 0;
|
|
510
|
+
X509* cert = 0;
|
|
511
|
+
STACK_OF(X509)* chain = 0;
|
|
512
|
+
|
|
513
|
+
int count = 0;
|
|
514
|
+
try
|
|
515
|
+
{
|
|
516
|
+
while(count < passwordRetryMax)
|
|
517
|
+
{
|
|
518
|
+
ERR_clear_error();
|
|
519
|
+
//
|
|
520
|
+
// chain may have a bogus value from a previous call to PKCS12_parse, so we
|
|
521
|
+
// reset it prior to each call.
|
|
522
|
+
//
|
|
523
|
+
key = 0;
|
|
524
|
+
cert = 0;
|
|
525
|
+
chain = 0;
|
|
526
|
+
if(!(success = PKCS12_parse(p12, password(false).c_str(), &key, &cert, &chain)))
|
|
527
|
+
{
|
|
528
|
+
if(passwordError())
|
|
529
|
+
{
|
|
530
|
+
count++;
|
|
531
|
+
continue;
|
|
532
|
+
}
|
|
533
|
+
break;
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
if(!cert || !SSL_CTX_use_certificate(_ctx, cert))
|
|
537
|
+
{
|
|
538
|
+
throw PluginInitializationException(__FILE__, __LINE__,
|
|
539
|
+
"IceSSL: unable to establish SSL certificate:\n" +
|
|
540
|
+
(cert ? sslErrors() : "certificate not found"));
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
if(!key || !SSL_CTX_use_PrivateKey(_ctx, key))
|
|
544
|
+
{
|
|
545
|
+
throw PluginInitializationException(__FILE__, __LINE__,
|
|
546
|
+
"IceSSL: unable to establish SSL private key:\n" +
|
|
547
|
+
(key ? sslErrors() : "key not found"));
|
|
548
|
+
}
|
|
549
|
+
keyLoaded = true;
|
|
550
|
+
|
|
551
|
+
if(chain && sk_X509_num(chain))
|
|
552
|
+
{
|
|
553
|
+
for(int i = 0; i < sk_X509_num(chain); i++)
|
|
554
|
+
{
|
|
555
|
+
if(!SSL_CTX_add_extra_chain_cert(_ctx, sk_X509_value(chain, i)))
|
|
556
|
+
{
|
|
557
|
+
throw PluginInitializationException(__FILE__, __LINE__,
|
|
558
|
+
"IceSSL: unable to add extra SSL certificate:\n" + sslErrors());
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
if(chain)
|
|
564
|
+
{
|
|
565
|
+
sk_X509_pop_free(chain, X509_free);
|
|
566
|
+
}
|
|
567
|
+
assert(key && cert);
|
|
568
|
+
EVP_PKEY_free(key);
|
|
569
|
+
X509_free(cert);
|
|
570
|
+
break;
|
|
571
|
+
}
|
|
572
|
+
PKCS12_free(p12);
|
|
573
|
+
}
|
|
574
|
+
catch(...)
|
|
575
|
+
{
|
|
576
|
+
PKCS12_free(p12);
|
|
577
|
+
if(chain)
|
|
578
|
+
{
|
|
579
|
+
sk_X509_pop_free(chain, X509_free);
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
if(key)
|
|
583
|
+
{
|
|
584
|
+
EVP_PKEY_free(key);
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
if(cert)
|
|
588
|
+
{
|
|
589
|
+
X509_free(cert);
|
|
590
|
+
}
|
|
591
|
+
throw;
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
else
|
|
595
|
+
{
|
|
596
|
+
//
|
|
597
|
+
// The certificate may be stored in an encrypted file, so handle
|
|
598
|
+
// password retries.
|
|
599
|
+
//
|
|
600
|
+
int count = 0;
|
|
601
|
+
while(count < passwordRetryMax)
|
|
602
|
+
{
|
|
603
|
+
ERR_clear_error();
|
|
604
|
+
if(!(success = SSL_CTX_use_certificate_chain_file(_ctx, file.c_str())))
|
|
605
|
+
{
|
|
606
|
+
if(passwordError())
|
|
607
|
+
{
|
|
608
|
+
count++;
|
|
609
|
+
continue;
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
count++;
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
if(!success)
|
|
617
|
+
{
|
|
618
|
+
string msg = "IceSSL: unable to load certificate chain from file " + file;
|
|
619
|
+
if(passwordError())
|
|
620
|
+
{
|
|
621
|
+
msg += ":\ninvalid password";
|
|
622
|
+
}
|
|
623
|
+
else
|
|
624
|
+
{
|
|
625
|
+
string err = sslErrors();
|
|
626
|
+
if(!err.empty())
|
|
627
|
+
{
|
|
628
|
+
msg += ":\n" + err;
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
throw PluginInitializationException(__FILE__, __LINE__, msg);
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
if(keyFile.empty())
|
|
637
|
+
{
|
|
638
|
+
keyFile = certFile; // Assume the certificate file also contains the private key.
|
|
639
|
+
}
|
|
640
|
+
if(!keyLoaded && !keyFile.empty())
|
|
641
|
+
{
|
|
642
|
+
vector<string> files;
|
|
643
|
+
if(!IceUtilInternal::splitString(keyFile, IceUtilInternal::pathsep, files) || files.size() > 2)
|
|
644
|
+
{
|
|
645
|
+
throw PluginInitializationException(__FILE__, __LINE__,
|
|
646
|
+
"IceSSL: invalid value for " + propPrefix + "KeyFile:\n" + keyFile);
|
|
647
|
+
}
|
|
648
|
+
if(files.size() != numCerts)
|
|
649
|
+
{
|
|
650
|
+
throw PluginInitializationException(__FILE__, __LINE__,
|
|
651
|
+
"IceSSL: " + propPrefix + "KeyFile does not agree with " + propPrefix + "CertFile");
|
|
652
|
+
}
|
|
653
|
+
for(vector<string>::iterator p = files.begin(); p != files.end(); ++p)
|
|
654
|
+
{
|
|
655
|
+
string file = *p;
|
|
656
|
+
if(!checkPath(file, defaultDir, false))
|
|
657
|
+
{
|
|
658
|
+
throw PluginInitializationException(__FILE__, __LINE__,
|
|
659
|
+
"IceSSL: key file not found:\n" + file);
|
|
660
|
+
}
|
|
661
|
+
//
|
|
662
|
+
// The private key may be stored in an encrypted file, so handle
|
|
663
|
+
// password retries.
|
|
664
|
+
//
|
|
665
|
+
int count = 0;
|
|
666
|
+
int err = 0;
|
|
667
|
+
while(count < passwordRetryMax)
|
|
668
|
+
{
|
|
669
|
+
ERR_clear_error();
|
|
670
|
+
err = SSL_CTX_use_PrivateKey_file(_ctx, file.c_str(), SSL_FILETYPE_PEM);
|
|
671
|
+
if(err)
|
|
672
|
+
{
|
|
673
|
+
break;
|
|
674
|
+
}
|
|
675
|
+
++count;
|
|
676
|
+
}
|
|
677
|
+
if(err == 0)
|
|
678
|
+
{
|
|
679
|
+
string msg = "IceSSL: unable to load private key from file " + file;
|
|
680
|
+
if(passwordError())
|
|
681
|
+
{
|
|
682
|
+
msg += ":\ninvalid password";
|
|
683
|
+
}
|
|
684
|
+
else
|
|
685
|
+
{
|
|
686
|
+
string err = sslErrors();
|
|
687
|
+
if(!err.empty())
|
|
688
|
+
{
|
|
689
|
+
msg += ":\n" + err;
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
throw PluginInitializationException(__FILE__, __LINE__, msg);
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
keyLoaded = true;
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
if(keyLoaded && !SSL_CTX_check_private_key(_ctx))
|
|
699
|
+
{
|
|
700
|
+
throw PluginInitializationException(__FILE__, __LINE__,
|
|
701
|
+
"IceSSL: unable to validate private key(s):\n" + sslErrors());
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
//
|
|
705
|
+
// Diffie Hellman configuration.
|
|
706
|
+
//
|
|
707
|
+
{
|
|
708
|
+
# ifndef OPENSSL_NO_DH
|
|
709
|
+
_dhParams = new DHParams;
|
|
710
|
+
SSL_CTX_set_options(_ctx, SSL_OP_SINGLE_DH_USE);
|
|
711
|
+
SSL_CTX_set_tmp_dh_callback(_ctx, IceSSL_opensslDHCallback);
|
|
712
|
+
# endif
|
|
713
|
+
//
|
|
714
|
+
// Properties have the following form:
|
|
715
|
+
//
|
|
716
|
+
// ...DH.<keyLength>=file
|
|
717
|
+
//
|
|
718
|
+
const string dhPrefix = propPrefix + "DH.";
|
|
719
|
+
PropertyDict d = properties->getPropertiesForPrefix(dhPrefix);
|
|
720
|
+
if(!d.empty())
|
|
721
|
+
{
|
|
722
|
+
# ifdef OPENSSL_NO_DH
|
|
723
|
+
getLogger()->warning("IceSSL: OpenSSL is not configured for Diffie Hellman");
|
|
724
|
+
# else
|
|
725
|
+
for(PropertyDict::iterator p = d.begin(); p != d.end(); ++p)
|
|
726
|
+
{
|
|
727
|
+
string s = p->first.substr(dhPrefix.size());
|
|
728
|
+
int keyLength = atoi(s.c_str());
|
|
729
|
+
if(keyLength > 0)
|
|
730
|
+
{
|
|
731
|
+
string file = p->second;
|
|
732
|
+
if(!checkPath(file, defaultDir, false))
|
|
733
|
+
{
|
|
734
|
+
throw PluginInitializationException(__FILE__, __LINE__,
|
|
735
|
+
"IceSSL: DH parameter file not found:\n" + file);
|
|
736
|
+
}
|
|
737
|
+
if(!_dhParams->add(keyLength, file))
|
|
738
|
+
{
|
|
739
|
+
throw PluginInitializationException(__FILE__, __LINE__,
|
|
740
|
+
"IceSSL: unable to read DH parameter file " + file);
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
}
|
|
744
|
+
# endif
|
|
745
|
+
}
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
SSL_CTX_set_mode(_ctx, SSL_MODE_ENABLE_PARTIAL_WRITE);
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
//
|
|
752
|
+
// Store a pointer to ourself for use in OpenSSL callbacks.
|
|
753
|
+
//
|
|
754
|
+
SSL_CTX_set_ex_data(_ctx, 0, this);
|
|
755
|
+
|
|
756
|
+
//
|
|
757
|
+
// This is necessary for successful interop with Java. Without it, a Java
|
|
758
|
+
// client would fail to reestablish a connection: the server gets the
|
|
759
|
+
// error "session id context uninitialized" and the client receives
|
|
760
|
+
// "SSLHandshakeException: Remote host closed connection during handshake".
|
|
761
|
+
//
|
|
762
|
+
SSL_CTX_set_session_cache_mode(_ctx, SSL_SESS_CACHE_OFF);
|
|
763
|
+
|
|
764
|
+
//
|
|
765
|
+
// Although we disable session caching, we still need to set a session ID
|
|
766
|
+
// context (ICE-5103). The value can be anything; here we just use the
|
|
767
|
+
// pointer to this SharedInstance object.
|
|
768
|
+
//
|
|
769
|
+
SSL_CTX_set_session_id_context(_ctx, reinterpret_cast<unsigned char*>(this),
|
|
770
|
+
static_cast<unsigned int>(sizeof(this)));
|
|
771
|
+
|
|
772
|
+
//
|
|
773
|
+
// Select protocols.
|
|
774
|
+
//
|
|
775
|
+
if(protocols != 0)
|
|
776
|
+
{
|
|
777
|
+
setOptions(protocols);
|
|
778
|
+
}
|
|
779
|
+
|
|
780
|
+
//
|
|
781
|
+
// Establish the cipher list.
|
|
782
|
+
//
|
|
783
|
+
string ciphers = properties->getProperty(propPrefix + "Ciphers");
|
|
784
|
+
if(!ciphers.empty())
|
|
785
|
+
{
|
|
786
|
+
if(!SSL_CTX_set_cipher_list(_ctx, ciphers.c_str()))
|
|
787
|
+
{
|
|
788
|
+
throw PluginInitializationException(__FILE__, __LINE__,
|
|
789
|
+
"IceSSL: unable to set ciphers using `" + ciphers + "':\n" + sslErrors());
|
|
790
|
+
}
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
if(securityTraceLevel() >= 1)
|
|
794
|
+
{
|
|
795
|
+
ostringstream os;
|
|
796
|
+
os << "enabling SSL ciphersuites:";
|
|
797
|
+
|
|
798
|
+
SSL* ssl = SSL_new(_ctx);
|
|
799
|
+
STACK_OF(SSL_CIPHER)* ciphers = SSL_get_ciphers(ssl);
|
|
800
|
+
if(ciphers)
|
|
801
|
+
{
|
|
802
|
+
for(int i = 0, length = sk_SSL_CIPHER_num(ciphers); i < length; ++i)
|
|
803
|
+
{
|
|
804
|
+
os << "\n" << SSL_CIPHER_get_name(sk_SSL_CIPHER_value(ciphers, i));
|
|
805
|
+
}
|
|
806
|
+
}
|
|
807
|
+
SSL_free(ssl);
|
|
808
|
+
getLogger()->trace(securityTraceCategory(), os.str());
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
//
|
|
812
|
+
// Determine whether a certificate is required from the peer.
|
|
813
|
+
//
|
|
814
|
+
{
|
|
815
|
+
int sslVerifyMode = SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT;;
|
|
816
|
+
switch(getVerifyPeer())
|
|
817
|
+
{
|
|
818
|
+
case 0:
|
|
819
|
+
sslVerifyMode = SSL_VERIFY_NONE;
|
|
820
|
+
break;
|
|
821
|
+
case 1:
|
|
822
|
+
sslVerifyMode = SSL_VERIFY_PEER;
|
|
823
|
+
break;
|
|
824
|
+
case 2:
|
|
825
|
+
sslVerifyMode = SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT;
|
|
826
|
+
break;
|
|
827
|
+
default:
|
|
828
|
+
{
|
|
829
|
+
assert(false);
|
|
830
|
+
}
|
|
831
|
+
}
|
|
832
|
+
SSL_CTX_set_verify(_ctx, sslVerifyMode, IceSSL_opensslVerifyCallback);
|
|
833
|
+
}
|
|
834
|
+
}
|
|
835
|
+
catch(...)
|
|
836
|
+
{
|
|
837
|
+
//
|
|
838
|
+
// We free the SSL context regardless of whether the plugin created it
|
|
839
|
+
// or the application supplied it.
|
|
840
|
+
//
|
|
841
|
+
SSL_CTX_free(_ctx);
|
|
842
|
+
_ctx = 0;
|
|
843
|
+
throw;
|
|
844
|
+
}
|
|
845
|
+
|
|
846
|
+
_initialized = true;
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
void
|
|
850
|
+
OpenSSLEngine::context(SSL_CTX* context)
|
|
851
|
+
{
|
|
852
|
+
if(initialized())
|
|
853
|
+
{
|
|
854
|
+
throw PluginInitializationException(__FILE__, __LINE__, "IceSSL: plug-in is already initialized");
|
|
855
|
+
}
|
|
856
|
+
|
|
857
|
+
assert(!_ctx);
|
|
858
|
+
_ctx = context;
|
|
859
|
+
}
|
|
860
|
+
|
|
861
|
+
SSL_CTX*
|
|
862
|
+
OpenSSLEngine::context() const
|
|
863
|
+
{
|
|
864
|
+
return _ctx;
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
string
|
|
868
|
+
OpenSSLEngine::sslErrors() const
|
|
869
|
+
{
|
|
870
|
+
return getSslErrors(securityTraceLevel() >= 1);
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
void
|
|
874
|
+
OpenSSLEngine::destroy()
|
|
875
|
+
{
|
|
876
|
+
if(_ctx)
|
|
877
|
+
{
|
|
878
|
+
SSL_CTX_free(_ctx);
|
|
879
|
+
}
|
|
880
|
+
}
|
|
881
|
+
|
|
882
|
+
int
|
|
883
|
+
OpenSSLEngine::verifyCallback(int ok, SSL* ssl, X509_STORE_CTX* c)
|
|
884
|
+
{
|
|
885
|
+
if(!ok && securityTraceLevel() >= 1)
|
|
886
|
+
{
|
|
887
|
+
X509* cert = X509_STORE_CTX_get_current_cert(c);
|
|
888
|
+
int err = X509_STORE_CTX_get_error(c);
|
|
889
|
+
char buf[256];
|
|
890
|
+
|
|
891
|
+
Trace out(getLogger(), securityTraceCategory());
|
|
892
|
+
out << "certificate verification failure\n";
|
|
893
|
+
|
|
894
|
+
X509_NAME_oneline(X509_get_issuer_name(cert), buf, static_cast<int>(sizeof(buf)));
|
|
895
|
+
out << "issuer = " << buf << '\n';
|
|
896
|
+
X509_NAME_oneline(X509_get_subject_name(cert), buf, static_cast<int>(sizeof(buf)));
|
|
897
|
+
out << "subject = " << buf << '\n';
|
|
898
|
+
out << "depth = " << X509_STORE_CTX_get_error_depth(c) << '\n';
|
|
899
|
+
out << "error = " << X509_verify_cert_error_string(err) << '\n';
|
|
900
|
+
out << IceInternal::fdToString(SSL_get_fd(ssl));
|
|
901
|
+
}
|
|
902
|
+
return ok;
|
|
903
|
+
}
|
|
904
|
+
|
|
905
|
+
# ifndef OPENSSL_NO_DH
|
|
906
|
+
DH*
|
|
907
|
+
OpenSSLEngine::dhParams(int keyLength)
|
|
908
|
+
{
|
|
909
|
+
return _dhParams->get(keyLength);
|
|
910
|
+
}
|
|
911
|
+
# endif
|
|
912
|
+
|
|
913
|
+
int
|
|
914
|
+
OpenSSLEngine::parseProtocols(const StringSeq& protocols) const
|
|
915
|
+
{
|
|
916
|
+
int v = 0;
|
|
917
|
+
|
|
918
|
+
for(Ice::StringSeq::const_iterator p = protocols.begin(); p != protocols.end(); ++p)
|
|
919
|
+
{
|
|
920
|
+
string prot = IceUtilInternal::toUpper(*p);
|
|
921
|
+
if(prot == "SSL3" || prot == "SSLV3")
|
|
922
|
+
{
|
|
923
|
+
v |= SSLv3;
|
|
924
|
+
}
|
|
925
|
+
else if(prot == "TLS" || prot == "TLS1" || prot == "TLSV1" || prot == "TLS1_0" || prot == "TLSV1_0")
|
|
926
|
+
{
|
|
927
|
+
v |= TLSv1_0;
|
|
928
|
+
}
|
|
929
|
+
else if(prot == "TLS1_1" || prot == "TLSV1_1")
|
|
930
|
+
{
|
|
931
|
+
v |= TLSv1_1;
|
|
932
|
+
}
|
|
933
|
+
else if(prot == "TLS1_2" || prot == "TLSV1_2")
|
|
934
|
+
{
|
|
935
|
+
v |= TLSv1_2;
|
|
936
|
+
}
|
|
937
|
+
else
|
|
938
|
+
{
|
|
939
|
+
throw PluginInitializationException(__FILE__, __LINE__, "IceSSL: unrecognized protocol `" + *p + "'");
|
|
940
|
+
}
|
|
941
|
+
}
|
|
942
|
+
|
|
943
|
+
return v;
|
|
944
|
+
}
|
|
945
|
+
|
|
946
|
+
SSL_METHOD*
|
|
947
|
+
OpenSSLEngine::getMethod(int /*protocols*/)
|
|
948
|
+
{
|
|
949
|
+
//
|
|
950
|
+
// Despite its name, the SSLv23 method can negotiate SSL3, TLS1.0, TLS1.1, and TLS1.2.
|
|
951
|
+
// We use the const_cast for backward compatibility with older OpenSSL releases.
|
|
952
|
+
//
|
|
953
|
+
SSL_METHOD* meth = const_cast<SSL_METHOD*>(SSLv23_method());
|
|
954
|
+
|
|
955
|
+
/*
|
|
956
|
+
* Early versions of OpenSSL 1.0.1 would not negotiate a TLS1.2 connection using
|
|
957
|
+
* the SSLv23 method. You can enable the code below to override the method.
|
|
958
|
+
if(protocols & TLSv1_2)
|
|
959
|
+
{
|
|
960
|
+
meth = const_cast<SSL_METHOD*>(TLSv1_2_method());
|
|
961
|
+
}
|
|
962
|
+
*/
|
|
963
|
+
|
|
964
|
+
return meth;
|
|
965
|
+
}
|
|
966
|
+
|
|
967
|
+
void
|
|
968
|
+
OpenSSLEngine::setOptions(int protocols)
|
|
969
|
+
{
|
|
970
|
+
long opts = SSL_OP_NO_SSLv2; // SSLv2 is not supported.
|
|
971
|
+
if(!(protocols & SSLv3))
|
|
972
|
+
{
|
|
973
|
+
opts |= SSL_OP_NO_SSLv3;
|
|
974
|
+
}
|
|
975
|
+
if(!(protocols & TLSv1_0))
|
|
976
|
+
{
|
|
977
|
+
opts |= SSL_OP_NO_TLSv1;
|
|
978
|
+
}
|
|
979
|
+
# ifdef SSL_OP_NO_TLSv1_1
|
|
980
|
+
if(!(protocols & TLSv1_1))
|
|
981
|
+
{
|
|
982
|
+
opts |= SSL_OP_NO_TLSv1_1;
|
|
983
|
+
//
|
|
984
|
+
// The value of SSL_OP_NO_TLSv1_1 changed between 1.0.1a and 1.0.1b.
|
|
985
|
+
//
|
|
986
|
+
if(SSL_OP_NO_TLSv1_1 == 0x00000400L)
|
|
987
|
+
{
|
|
988
|
+
opts |= 0x10000000L; // New value of SSL_OP_NO_TLSv1_1.
|
|
989
|
+
}
|
|
990
|
+
}
|
|
991
|
+
# endif
|
|
992
|
+
# ifdef SSL_OP_NO_TLSv1_2
|
|
993
|
+
if(!(protocols & TLSv1_2))
|
|
994
|
+
{
|
|
995
|
+
opts |= SSL_OP_NO_TLSv1_2;
|
|
996
|
+
}
|
|
997
|
+
# endif
|
|
998
|
+
SSL_CTX_set_options(_ctx, opts);
|
|
999
|
+
}
|
|
1000
|
+
|
|
1001
|
+
#endif // ICESSL_USE_OPENSSL
|