zeroc-ice 3.6.5 → 3.7.0
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 +4 -4
- data/BZIP2_LICENSE +42 -0
- data/ICE_LICENSE +17 -17
- data/LICENSE +12 -12
- data/bin/slice2rb +1 -1
- data/ext/Communicator.cpp +150 -53
- data/ext/Communicator.h +1 -1
- data/ext/Config.h +2 -12
- data/ext/Connection.cpp +89 -68
- data/ext/Connection.h +1 -1
- data/ext/Endpoint.cpp +16 -45
- data/ext/Endpoint.h +1 -1
- data/ext/ImplicitContext.cpp +1 -5
- data/ext/ImplicitContext.h +1 -1
- data/ext/Init.cpp +4 -1
- data/ext/Logger.cpp +1 -1
- data/ext/Logger.h +1 -1
- data/ext/Operation.cpp +33 -44
- data/ext/Operation.h +1 -1
- data/ext/Properties.cpp +1 -1
- data/ext/Properties.h +1 -1
- data/ext/Proxy.cpp +22 -57
- data/ext/Proxy.h +1 -1
- data/ext/Slice.cpp +5 -5
- data/ext/Slice.h +1 -1
- data/ext/Types.cpp +244 -171
- data/ext/Types.h +118 -66
- data/ext/Util.cpp +13 -9
- data/ext/Util.h +10 -10
- data/ext/ValueFactoryManager.cpp +445 -0
- data/ext/ValueFactoryManager.h +100 -0
- data/ext/extconf.rb +47 -45
- 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/Application.h +77 -60
- data/ext/ice/cpp/include/Ice/AsyncResult.h +34 -318
- data/ext/ice/cpp/include/Ice/AsyncResultF.h +4 -2
- data/ext/ice/cpp/include/Ice/BatchRequestInterceptor.h +5 -10
- data/ext/ice/cpp/include/Ice/BatchRequestQueueF.h +1 -1
- data/ext/ice/cpp/include/Ice/Buffer.h +10 -10
- data/ext/ice/cpp/include/Ice/CommunicatorAsync.h +14 -12
- data/ext/ice/cpp/include/Ice/Comparable.h +130 -0
- data/ext/ice/cpp/include/Ice/Config.h +7 -36
- data/ext/ice/cpp/include/Ice/ConnectionAsync.h +107 -11
- data/ext/ice/cpp/include/Ice/ConnectionIF.h +5 -1
- data/ext/ice/cpp/include/Ice/ConsoleUtil.h +28 -0
- data/ext/ice/cpp/include/Ice/{DefaultObjectFactory.h → DefaultValueFactory.h} +28 -14
- data/ext/ice/cpp/include/Ice/DispatchInterceptor.h +4 -6
- data/ext/ice/cpp/include/Ice/Dispatcher.h +14 -13
- data/ext/ice/cpp/include/Ice/DynamicLibrary.h +7 -5
- data/ext/ice/cpp/include/Ice/DynamicLibraryF.h +1 -1
- data/ext/ice/cpp/include/Ice/Exception.h +66 -56
- data/ext/ice/cpp/include/Ice/ExceptionHelpers.h +69 -0
- data/ext/ice/cpp/include/Ice/FactoryTable.h +11 -12
- data/ext/ice/cpp/include/Ice/FactoryTableInit.h +27 -25
- data/ext/ice/cpp/include/Ice/Format.h +6 -1
- data/ext/ice/cpp/include/Ice/Functional.h +33 -33
- data/ext/ice/cpp/include/Ice/GCObject.h +9 -5
- data/ext/ice/cpp/include/Ice/Handle.h +6 -11
- data/ext/ice/cpp/include/Ice/Ice.h +9 -5
- data/ext/ice/cpp/include/{IceUtil → Ice}/IconvStringConverter.h +108 -62
- data/ext/ice/cpp/include/Ice/Incoming.h +109 -33
- data/ext/ice/cpp/include/Ice/IncomingAsync.h +63 -23
- data/ext/ice/cpp/include/Ice/IncomingAsyncF.h +7 -1
- data/ext/ice/cpp/include/Ice/Initialize.h +178 -38
- data/ext/ice/cpp/include/Ice/InputStream.h +994 -0
- data/ext/ice/cpp/include/Ice/InstanceF.h +1 -2
- data/ext/ice/cpp/include/Ice/InterfaceByValue.h +46 -0
- data/ext/ice/cpp/include/Ice/LocalObject.h +9 -9
- data/ext/ice/cpp/include/Ice/LocalObjectF.h +1 -1
- data/ext/ice/cpp/include/Ice/LoggerUtil.h +20 -14
- data/ext/ice/cpp/include/Ice/MetricsAdminI.h +114 -65
- data/ext/ice/cpp/include/Ice/MetricsFunctional.h +23 -5
- data/ext/ice/cpp/include/Ice/MetricsObserverI.h +99 -26
- data/ext/ice/cpp/include/Ice/NativePropertiesAdmin.h +17 -4
- data/ext/ice/cpp/include/Ice/Object.h +105 -56
- data/ext/ice/cpp/include/Ice/ObjectF.h +8 -3
- data/ext/ice/cpp/include/Ice/ObserverHelper.h +18 -8
- data/ext/ice/cpp/include/Ice/Optional.h +1084 -0
- data/ext/ice/cpp/include/Ice/OutgoingAsync.h +655 -84
- data/ext/ice/cpp/include/Ice/OutgoingAsyncF.h +12 -6
- data/ext/ice/cpp/include/Ice/OutputStream.h +753 -0
- data/ext/ice/cpp/include/Ice/Protocol.h +19 -12
- data/ext/ice/cpp/include/Ice/Proxy.h +1329 -717
- data/ext/ice/cpp/include/Ice/ProxyF.h +11 -33
- data/ext/ice/cpp/include/Ice/ProxyFactoryF.h +1 -1
- data/ext/ice/cpp/include/Ice/ProxyHandle.h +34 -50
- data/ext/ice/cpp/include/Ice/ReferenceF.h +1 -1
- data/ext/ice/cpp/include/Ice/RegisterPlugins.h +22 -3
- data/ext/ice/cpp/include/Ice/RequestHandlerF.h +10 -4
- data/ext/ice/cpp/include/Ice/ResponseHandlerF.h +6 -1
- data/ext/ice/cpp/include/{IceUtil → Ice}/SHA1.h +16 -16
- data/ext/ice/cpp/include/Ice/ServantManagerF.h +1 -1
- data/ext/ice/cpp/include/Ice/Service.h +13 -18
- data/ext/ice/cpp/include/Ice/SliceChecksums.h +1 -1
- data/ext/ice/cpp/include/Ice/SlicedData.h +46 -20
- data/ext/ice/cpp/include/Ice/SlicedDataF.h +14 -6
- data/ext/ice/cpp/include/Ice/StreamHelpers.h +159 -49
- data/ext/ice/cpp/include/Ice/StringConverter.h +52 -0
- data/ext/ice/cpp/include/Ice/ThreadPoolF.h +1 -1
- data/{slice/Ice/ObjectFactoryF.ice → ext/ice/cpp/include/Ice/UUID.h} +9 -7
- data/ext/ice/cpp/include/{IceUtil → Ice}/UniquePtr.h +21 -22
- data/ext/ice/cpp/include/Ice/UniqueRef.h +98 -0
- data/ext/ice/cpp/include/Ice/UserExceptionFactory.h +40 -8
- data/ext/ice/cpp/include/Ice/Value.h +104 -0
- data/{slice/Freeze/ConnectionF.ice → ext/ice/cpp/include/Ice/ValueF.h} +11 -7
- data/ext/ice/cpp/include/IceSSL/Config.h +8 -23
- data/ext/ice/cpp/include/IceSSL/IceSSL.h +17 -6
- data/ext/ice/cpp/include/IceSSL/OpenSSL.h +130 -0
- data/ext/ice/cpp/include/IceSSL/Plugin.h +172 -259
- data/ext/ice/cpp/include/IceSSL/SChannel.h +66 -0
- data/ext/ice/cpp/include/IceSSL/SecureTransport.h +66 -0
- data/ext/ice/cpp/include/IceSSL/UWP.h +58 -0
- data/ext/ice/cpp/include/IceUtil/Atomic.h +8 -10
- data/ext/ice/cpp/include/IceUtil/Cond.h +17 -18
- data/ext/ice/cpp/include/IceUtil/Config.h +138 -39
- data/ext/ice/cpp/include/IceUtil/ConsoleUtil.h +97 -0
- data/ext/ice/cpp/include/IceUtil/CountDownLatch.h +5 -5
- data/ext/ice/cpp/include/IceUtil/CtrlCHandler.h +23 -17
- data/ext/ice/cpp/include/IceUtil/DisableWarnings.h +1 -3
- data/ext/ice/cpp/include/IceUtil/Exception.h +157 -67
- data/ext/ice/cpp/include/IceUtil/FileUtil.h +148 -0
- data/ext/ice/cpp/include/IceUtil/Functional.h +1 -2
- data/ext/ice/cpp/include/IceUtil/Handle.h +11 -11
- data/ext/ice/cpp/include/IceUtil/IceUtil.h +4 -10
- data/ext/ice/cpp/include/IceUtil/InputUtil.h +3 -3
- data/ext/ice/cpp/include/IceUtil/Iterator.h +2 -2
- data/ext/ice/cpp/include/IceUtil/Lock.h +8 -10
- data/ext/ice/cpp/include/IceUtil/Monitor.h +1 -2
- data/ext/ice/cpp/include/IceUtil/Mutex.h +17 -11
- data/ext/ice/cpp/include/IceUtil/MutexProtocol.h +2 -2
- data/ext/ice/cpp/include/IceUtil/MutexPtrLock.h +4 -4
- data/ext/ice/cpp/include/IceUtil/MutexPtrTryLock.h +4 -4
- data/ext/ice/cpp/include/IceUtil/Optional.h +32 -18
- data/ext/ice/cpp/include/IceUtil/Options.h +17 -18
- data/ext/ice/cpp/include/IceUtil/OutputUtil.h +55 -29
- data/ext/ice/cpp/include/IceUtil/PopDisableWarnings.h +6 -6
- data/ext/ice/cpp/include/IceUtil/PushDisableWarnings.h +11 -10
- data/ext/ice/cpp/include/IceUtil/Random.h +3 -3
- data/ext/ice/cpp/include/IceUtil/RecMutex.h +7 -8
- data/ext/ice/cpp/include/IceUtil/ResourceConfig.h +58 -0
- data/ext/ice/cpp/include/IceUtil/ScannerConfig.h +1 -9
- data/ext/ice/cpp/include/IceUtil/ScopedArray.h +8 -2
- data/ext/ice/cpp/include/IceUtil/Shared.h +5 -7
- data/ext/ice/cpp/{src → include}/IceUtil/StopWatch.h +2 -2
- data/ext/ice/cpp/include/IceUtil/StringConverter.h +77 -72
- data/ext/ice/cpp/include/IceUtil/StringUtil.h +32 -21
- data/ext/ice/cpp/include/IceUtil/Thread.h +10 -12
- data/ext/ice/cpp/include/IceUtil/ThreadException.h +33 -42
- data/ext/ice/cpp/include/IceUtil/Time.h +3 -3
- data/ext/ice/cpp/include/IceUtil/Timer.h +14 -13
- data/ext/ice/cpp/include/IceUtil/UUID.h +2 -2
- data/ext/ice/cpp/include/IceUtil/UndefSysMacros.h +1 -1
- data/ext/ice/cpp/include/{Ice → generated/Ice}/BuiltinSequences.h +41 -8
- data/ext/ice/cpp/include/generated/Ice/Communicator.h +364 -0
- data/ext/ice/cpp/include/{Ice → generated/Ice}/CommunicatorF.h +40 -8
- data/ext/ice/cpp/include/generated/Ice/Connection.h +872 -0
- data/ext/ice/cpp/include/{Ice → generated/Ice}/ConnectionF.h +46 -8
- data/ext/ice/cpp/include/{Ice → generated/Ice}/Current.h +71 -8
- data/ext/ice/cpp/include/generated/Ice/Endpoint.h +582 -0
- data/ext/ice/cpp/include/{Ice → generated/Ice}/EndpointF.h +62 -8
- data/ext/ice/cpp/include/{Ice → generated/Ice}/EndpointTypes.h +31 -16
- data/ext/ice/cpp/include/{Ice → generated/Ice}/FacetMap.h +23 -8
- data/ext/ice/cpp/include/generated/Ice/Identity.h +221 -0
- data/ext/ice/cpp/include/{Ice → generated/Ice}/ImplicitContext.h +72 -13
- data/ext/ice/cpp/include/{Ice → generated/Ice}/ImplicitContextF.h +40 -8
- data/ext/ice/cpp/include/generated/Ice/Instrumentation.h +602 -0
- data/ext/ice/cpp/include/{Ice → generated/Ice}/InstrumentationF.h +54 -8
- data/ext/ice/cpp/include/generated/Ice/LocalException.h +2802 -0
- data/ext/ice/cpp/include/generated/Ice/Locator.h +2036 -0
- data/ext/ice/cpp/include/{Ice → generated/Ice}/LocatorF.h +53 -12
- data/ext/ice/cpp/include/{Ice → generated/Ice}/Logger.h +71 -13
- data/ext/ice/cpp/include/{Ice → generated/Ice}/LoggerF.h +40 -8
- data/ext/ice/cpp/include/generated/Ice/Metrics.h +2649 -0
- data/ext/ice/cpp/include/generated/Ice/ObjectAdapter.h +302 -0
- data/ext/ice/cpp/include/{Ice → generated/Ice}/ObjectAdapterF.h +40 -8
- data/ext/ice/cpp/include/generated/Ice/ObjectFactory.h +142 -0
- data/ext/ice/cpp/include/generated/Ice/Plugin.h +197 -0
- data/ext/ice/cpp/include/{Ice → generated/Ice}/PluginF.h +43 -8
- data/ext/ice/cpp/include/generated/Ice/Process.h +536 -0
- data/ext/ice/cpp/include/{Ice → generated/Ice}/ProcessF.h +45 -10
- data/ext/ice/cpp/include/{Ice → generated/Ice}/Properties.h +88 -21
- data/ext/ice/cpp/include/generated/Ice/PropertiesAdmin.h +749 -0
- data/ext/ice/cpp/include/{Ice → generated/Ice}/PropertiesF.h +48 -10
- data/ext/ice/cpp/include/generated/Ice/RemoteLogger.h +1449 -0
- data/ext/ice/cpp/include/generated/Ice/Router.h +1032 -0
- data/ext/ice/cpp/include/{Ice → generated/Ice}/RouterF.h +45 -10
- data/ext/ice/cpp/include/{Ice → generated/Ice}/ServantLocator.h +65 -13
- data/ext/ice/cpp/include/{Ice → generated/Ice}/ServantLocatorF.h +40 -8
- data/ext/ice/cpp/include/{Ice → generated/Ice}/SliceChecksumDict.h +23 -8
- data/ext/ice/cpp/include/generated/Ice/ValueFactory.h +169 -0
- data/ext/ice/cpp/include/generated/Ice/Version.h +334 -0
- data/ext/ice/cpp/include/generated/IceSSL/ConnectionInfo.h +172 -0
- data/ext/ice/cpp/include/generated/IceSSL/ConnectionInfoF.h +98 -0
- data/ext/ice/cpp/include/generated/IceSSL/EndpointInfo.h +156 -0
- data/ext/ice/cpp/src/Ice/ACM.cpp +18 -14
- data/ext/ice/cpp/src/Ice/ACM.h +9 -2
- data/ext/ice/cpp/{include → src}/Ice/ACMF.h +10 -5
- data/ext/ice/cpp/src/Ice/Acceptor.cpp +6 -1
- data/ext/ice/cpp/src/Ice/Acceptor.h +4 -3
- data/ext/ice/cpp/src/Ice/AcceptorF.h +1 -1
- data/ext/ice/cpp/src/{IceUtil → Ice}/ArgVector.cpp +9 -9
- data/ext/ice/cpp/src/{IceUtil → Ice}/ArgVector.h +7 -7
- data/ext/ice/cpp/src/Ice/AsyncResult.cpp +15 -538
- data/ext/ice/cpp/src/Ice/Base64.cpp +11 -11
- data/ext/ice/cpp/src/Ice/Base64.h +1 -1
- data/ext/ice/cpp/src/Ice/BatchRequestQueue.cpp +40 -12
- data/ext/ice/cpp/src/Ice/BatchRequestQueue.h +15 -10
- data/ext/ice/cpp/src/Ice/Buffer.cpp +74 -12
- data/ext/ice/cpp/src/Ice/BuiltinSequences.cpp +20 -6
- data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.cpp +85 -190
- data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.h +17 -18
- data/ext/ice/cpp/src/Ice/Communicator.cpp +39 -8
- data/ext/ice/cpp/src/Ice/CommunicatorF.cpp +27 -5
- data/ext/ice/cpp/src/Ice/CommunicatorI.cpp +271 -104
- data/ext/ice/cpp/src/Ice/CommunicatorI.h +84 -28
- data/ext/ice/cpp/src/{IceUtil → Ice}/Cond.cpp +3 -3
- data/ext/ice/cpp/src/Ice/ConnectRequestHandler.cpp +58 -125
- data/ext/ice/cpp/src/Ice/ConnectRequestHandler.h +11 -22
- data/ext/ice/cpp/src/Ice/ConnectRequestHandlerF.h +6 -2
- data/ext/ice/cpp/src/Ice/Connection.cpp +88 -8
- data/ext/ice/cpp/src/Ice/ConnectionF.cpp +27 -5
- data/ext/ice/cpp/src/Ice/ConnectionFactory.cpp +158 -80
- data/ext/ice/cpp/src/Ice/ConnectionFactory.h +41 -23
- data/ext/ice/cpp/{include → src}/Ice/ConnectionFactoryF.h +8 -3
- data/ext/ice/cpp/src/Ice/ConnectionI.cpp +707 -653
- data/ext/ice/cpp/src/Ice/ConnectionI.h +97 -69
- data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.cpp +2 -15
- data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.h +4 -3
- data/ext/ice/cpp/src/Ice/Connector.cpp +6 -1
- data/ext/ice/cpp/src/Ice/Connector.h +4 -3
- data/ext/ice/cpp/src/Ice/ConnectorF.h +1 -1
- data/ext/ice/cpp/src/{IceUtil → Ice}/CountDownLatch.cpp +4 -4
- data/ext/ice/cpp/src/Ice/Current.cpp +29 -6
- data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.cpp +6 -5
- data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.h +1 -1
- data/ext/ice/cpp/src/Ice/DefaultsAndOverridesF.h +1 -1
- data/ext/ice/cpp/src/Ice/DispatchInterceptor.cpp +5 -25
- data/ext/ice/cpp/src/Ice/DynamicLibrary.cpp +29 -19
- data/ext/ice/cpp/src/Ice/Endpoint.cpp +85 -6
- data/ext/ice/cpp/src/Ice/EndpointF.cpp +27 -5
- data/ext/ice/cpp/src/Ice/EndpointFactory.cpp +152 -1
- data/ext/ice/cpp/src/Ice/EndpointFactory.h +72 -6
- data/ext/ice/cpp/src/Ice/EndpointFactoryF.h +1 -1
- data/ext/ice/cpp/src/Ice/EndpointFactoryManager.cpp +35 -19
- data/ext/ice/cpp/src/Ice/EndpointFactoryManager.h +10 -4
- data/ext/ice/cpp/src/Ice/EndpointFactoryManagerF.h +1 -1
- data/ext/ice/cpp/src/Ice/EndpointI.cpp +17 -1
- data/ext/ice/cpp/src/Ice/EndpointI.h +35 -9
- data/ext/ice/cpp/src/Ice/EndpointIF.h +18 -5
- data/ext/ice/cpp/src/Ice/EndpointTypes.cpp +18 -6
- data/ext/ice/cpp/src/Ice/EventHandler.cpp +6 -4
- data/ext/ice/cpp/src/Ice/EventHandler.h +13 -8
- data/ext/ice/cpp/src/Ice/EventHandlerF.h +5 -2
- data/ext/ice/cpp/src/Ice/Exception.cpp +95 -86
- data/ext/ice/cpp/src/Ice/FacetMap.cpp +20 -6
- data/ext/ice/cpp/src/Ice/FactoryTable.cpp +37 -28
- data/ext/ice/cpp/src/Ice/FactoryTableInit.cpp +2 -4
- data/ext/ice/cpp/src/Ice/GCObject.cpp +28 -25
- data/ext/ice/cpp/src/Ice/HashUtil.h +2 -3
- data/ext/ice/cpp/src/Ice/HttpParser.cpp +1 -2
- data/ext/ice/cpp/src/Ice/HttpParser.h +1 -1
- data/ext/ice/cpp/src/Ice/IPEndpointI.cpp +92 -53
- data/ext/ice/cpp/src/Ice/IPEndpointI.h +19 -10
- data/ext/ice/cpp/src/Ice/IPEndpointIF.h +6 -2
- data/ext/ice/cpp/src/Ice/IconvStringConverter.cpp +56 -0
- data/ext/ice/cpp/src/Ice/Identity.cpp +24 -10
- data/ext/ice/cpp/src/Ice/ImplicitContext.cpp +37 -6
- data/ext/ice/cpp/src/Ice/ImplicitContextF.cpp +27 -5
- data/ext/ice/cpp/src/Ice/ImplicitContextI.cpp +14 -14
- data/ext/ice/cpp/src/Ice/ImplicitContextI.h +7 -5
- data/ext/ice/cpp/src/Ice/Incoming.cpp +276 -245
- data/ext/ice/cpp/src/Ice/IncomingAsync.cpp +104 -209
- data/ext/ice/cpp/src/Ice/IncomingRequest.h +5 -4
- data/ext/ice/cpp/src/Ice/Initialize.cpp +299 -172
- data/ext/ice/cpp/src/Ice/InputStream.cpp +2773 -0
- data/ext/ice/cpp/src/Ice/Instance.cpp +191 -231
- data/ext/ice/cpp/src/Ice/Instance.h +30 -18
- data/ext/ice/cpp/src/Ice/Instrumentation.cpp +106 -7
- data/ext/ice/cpp/src/Ice/InstrumentationF.cpp +27 -5
- data/ext/ice/cpp/src/Ice/InstrumentationI.cpp +117 -99
- data/ext/ice/cpp/src/Ice/InstrumentationI.h +30 -31
- data/ext/ice/cpp/src/Ice/LocalException.cpp +1190 -416
- data/ext/ice/cpp/src/Ice/LocalObject.cpp +1 -2
- data/ext/ice/cpp/src/Ice/Locator.cpp +1167 -1215
- data/ext/ice/cpp/src/Ice/LocatorF.cpp +29 -6
- data/ext/ice/cpp/src/Ice/LocatorInfo.cpp +129 -163
- data/ext/ice/cpp/src/Ice/LocatorInfo.h +29 -29
- data/ext/ice/cpp/src/Ice/LocatorInfoF.h +1 -1
- data/ext/ice/cpp/src/Ice/Logger.cpp +35 -5
- data/ext/ice/cpp/src/Ice/LoggerAdminI.cpp +178 -73
- data/ext/ice/cpp/src/Ice/LoggerAdminI.h +4 -4
- data/ext/ice/cpp/src/Ice/LoggerF.cpp +27 -5
- data/ext/ice/cpp/src/Ice/LoggerI.cpp +14 -44
- data/ext/ice/cpp/src/Ice/LoggerI.h +7 -13
- data/ext/ice/cpp/src/Ice/LoggerUtil.cpp +10 -12
- data/ext/ice/cpp/src/Ice/Metrics.cpp +1059 -1069
- data/ext/ice/cpp/src/Ice/MetricsAdminI.cpp +49 -19
- data/ext/ice/cpp/src/Ice/MetricsObserverI.cpp +1 -2
- data/ext/ice/cpp/src/Ice/Network.cpp +534 -170
- data/ext/ice/cpp/src/Ice/Network.h +100 -23
- data/ext/ice/cpp/src/Ice/NetworkF.h +2 -2
- data/ext/ice/cpp/src/Ice/NetworkProxy.cpp +21 -14
- data/ext/ice/cpp/src/Ice/NetworkProxy.h +5 -2
- data/ext/ice/cpp/src/Ice/NetworkProxyF.h +1 -1
- data/ext/ice/cpp/src/Ice/Object.cpp +217 -221
- data/ext/ice/cpp/src/Ice/ObjectAdapter.cpp +41 -6
- data/ext/ice/cpp/src/Ice/ObjectAdapterF.cpp +27 -5
- data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.cpp +35 -14
- data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.h +13 -7
- data/ext/ice/cpp/{include → src}/Ice/ObjectAdapterFactoryF.h +5 -1
- data/ext/ice/cpp/src/Ice/ObjectAdapterI.cpp +184 -58
- data/ext/ice/cpp/src/Ice/ObjectAdapterI.h +32 -26
- data/ext/ice/cpp/src/Ice/ObjectFactory.cpp +37 -6
- data/ext/ice/cpp/src/Ice/ObserverHelper.cpp +9 -32
- data/ext/ice/cpp/src/Ice/OpaqueEndpointI.cpp +40 -18
- data/ext/ice/cpp/src/Ice/OpaqueEndpointI.h +14 -5
- data/ext/ice/cpp/src/Ice/OutgoingAsync.cpp +803 -365
- data/ext/ice/cpp/src/Ice/OutputStream.cpp +1399 -0
- data/ext/ice/cpp/src/Ice/Plugin.cpp +45 -6
- data/ext/ice/cpp/src/Ice/PluginF.cpp +27 -5
- data/ext/ice/cpp/src/Ice/PluginManagerI.cpp +13 -13
- data/ext/ice/cpp/src/Ice/PluginManagerI.h +5 -6
- data/ext/ice/cpp/src/Ice/Process.cpp +256 -114
- data/ext/ice/cpp/src/Ice/ProcessF.cpp +29 -6
- data/ext/ice/cpp/src/Ice/Properties.cpp +38 -8
- data/ext/ice/cpp/src/Ice/PropertiesAdmin.cpp +340 -328
- data/ext/ice/cpp/src/Ice/PropertiesAdminI.cpp +81 -17
- data/ext/ice/cpp/src/Ice/PropertiesAdminI.h +29 -5
- data/ext/ice/cpp/src/Ice/PropertiesF.cpp +29 -6
- data/ext/ice/cpp/src/Ice/PropertiesI.cpp +25 -26
- data/ext/ice/cpp/src/Ice/PropertiesI.h +8 -11
- data/ext/ice/cpp/src/Ice/PropertyNames.cpp +107 -50
- data/ext/ice/cpp/src/Ice/PropertyNames.h +4 -2
- data/ext/ice/cpp/src/Ice/Protocol.cpp +2 -2
- data/ext/ice/cpp/src/Ice/ProtocolInstance.cpp +37 -2
- data/ext/ice/cpp/src/Ice/ProtocolInstance.h +9 -20
- data/ext/ice/cpp/src/Ice/ProtocolInstanceF.h +1 -1
- data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.cpp +6 -1
- data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.h +3 -1
- data/ext/ice/cpp/src/Ice/ProtocolPluginFacadeF.h +1 -1
- data/ext/ice/cpp/src/Ice/Proxy.cpp +690 -964
- data/ext/ice/cpp/src/Ice/ProxyFactory.cpp +23 -32
- data/ext/ice/cpp/src/Ice/ProxyFactory.h +16 -11
- data/ext/ice/cpp/src/Ice/Reference.cpp +75 -69
- data/ext/ice/cpp/src/Ice/Reference.h +27 -22
- data/ext/ice/cpp/src/Ice/ReferenceFactory.cpp +18 -21
- data/ext/ice/cpp/src/Ice/ReferenceFactory.h +12 -12
- data/ext/ice/cpp/src/Ice/ReferenceFactoryF.h +1 -1
- data/ext/ice/cpp/src/Ice/RegisterPluginsInit.cpp +18 -4
- data/ext/ice/cpp/src/Ice/RegisterPluginsInit.h +1 -1
- data/ext/ice/cpp/src/Ice/RemoteLogger.cpp +672 -552
- data/ext/ice/cpp/src/Ice/ReplyStatus.h +1 -1
- data/ext/ice/cpp/src/Ice/RequestHandler.cpp +5 -3
- data/ext/ice/cpp/src/Ice/RequestHandler.h +10 -13
- data/ext/ice/cpp/src/Ice/RequestHandlerFactory.cpp +10 -6
- data/ext/ice/cpp/src/Ice/RequestHandlerFactory.h +2 -2
- data/ext/ice/cpp/src/Ice/ResponseHandler.cpp +3 -6
- data/ext/ice/cpp/src/Ice/ResponseHandler.h +16 -7
- data/ext/ice/cpp/src/Ice/RetryQueue.cpp +6 -12
- data/ext/ice/cpp/src/Ice/RetryQueue.h +7 -6
- data/ext/ice/cpp/src/Ice/RetryQueueF.h +1 -1
- data/ext/ice/cpp/src/Ice/Router.cpp +523 -474
- data/ext/ice/cpp/src/Ice/RouterF.cpp +29 -6
- data/ext/ice/cpp/src/Ice/RouterInfo.cpp +91 -70
- data/ext/ice/cpp/src/Ice/RouterInfo.h +43 -32
- data/ext/ice/cpp/src/Ice/RouterInfoF.h +1 -1
- data/ext/ice/cpp/src/{IceUtil → Ice}/SHA1.cpp +21 -21
- data/ext/ice/cpp/src/Ice/Selector.cpp +989 -923
- data/ext/ice/cpp/src/Ice/Selector.h +100 -147
- data/ext/ice/cpp/src/Ice/ServantLocator.cpp +37 -6
- data/ext/ice/cpp/src/Ice/ServantLocatorF.cpp +27 -5
- data/ext/ice/cpp/src/Ice/ServantManager.cpp +9 -9
- data/ext/ice/cpp/src/Ice/ServantManager.h +1 -1
- data/ext/ice/cpp/src/Ice/SharedContext.h +2 -2
- data/ext/ice/cpp/src/Ice/SliceChecksumDict.cpp +20 -6
- data/ext/ice/cpp/src/Ice/SliceChecksums.cpp +2 -2
- data/ext/ice/cpp/src/Ice/SlicedData.cpp +72 -20
- data/ext/ice/cpp/src/Ice/StreamSocket.cpp +173 -18
- data/ext/ice/cpp/src/Ice/StreamSocket.h +13 -4
- data/ext/ice/cpp/src/Ice/StringConverterPlugin.cpp +48 -17
- data/ext/ice/cpp/src/Ice/StringUtil.h +35 -0
- data/ext/ice/cpp/src/Ice/SysLoggerI.cpp +8 -4
- data/ext/ice/cpp/src/Ice/SysLoggerI.h +2 -3
- data/ext/ice/cpp/src/Ice/TcpAcceptor.cpp +158 -32
- data/ext/ice/cpp/src/Ice/TcpAcceptor.h +12 -5
- data/ext/ice/cpp/src/Ice/TcpConnector.cpp +1 -7
- data/ext/ice/cpp/src/Ice/TcpConnector.h +1 -2
- data/ext/ice/cpp/src/Ice/TcpEndpointI.cpp +40 -32
- data/ext/ice/cpp/src/Ice/TcpEndpointI.h +11 -8
- data/ext/ice/cpp/src/Ice/TcpTransceiver.cpp +12 -27
- data/ext/ice/cpp/src/Ice/TcpTransceiver.h +7 -10
- data/ext/ice/cpp/src/{IceUtil → Ice}/Thread.cpp +24 -41
- data/ext/ice/cpp/src/Ice/ThreadPool.cpp +175 -267
- data/ext/ice/cpp/src/Ice/ThreadPool.h +38 -43
- data/ext/ice/cpp/src/{IceUtil → Ice}/Timer.cpp +28 -21
- data/ext/ice/cpp/src/Ice/TraceLevels.cpp +2 -2
- data/ext/ice/cpp/src/Ice/TraceLevels.h +1 -1
- data/ext/ice/cpp/src/Ice/TraceLevelsF.h +2 -2
- data/ext/ice/cpp/src/Ice/TraceUtil.cpp +53 -31
- data/ext/ice/cpp/src/Ice/TraceUtil.h +13 -6
- data/ext/ice/cpp/src/Ice/Transceiver.cpp +1 -2
- data/ext/ice/cpp/src/Ice/Transceiver.h +8 -7
- data/ext/ice/cpp/src/Ice/TransceiverF.h +1 -1
- data/ext/ice/cpp/src/Ice/UdpConnector.cpp +2 -8
- data/ext/ice/cpp/src/Ice/UdpConnector.h +1 -2
- data/ext/ice/cpp/src/Ice/UdpEndpointI.cpp +92 -31
- data/ext/ice/cpp/src/Ice/UdpEndpointI.h +12 -4
- data/ext/ice/cpp/src/Ice/UdpTransceiver.cpp +150 -179
- data/ext/ice/cpp/src/Ice/UdpTransceiver.h +15 -17
- data/ext/ice/cpp/src/Ice/Value.cpp +81 -0
- data/ext/ice/cpp/src/Ice/ValueFactory.cpp +84 -0
- data/ext/ice/cpp/src/Ice/ValueFactoryManagerI.cpp +70 -0
- data/ext/ice/cpp/src/Ice/ValueFactoryManagerI.h +42 -0
- data/ext/ice/cpp/src/Ice/Version.cpp +24 -14
- data/ext/ice/cpp/src/Ice/VirtualShared.h +43 -0
- data/ext/ice/cpp/src/Ice/WSAcceptor.cpp +3 -9
- data/ext/ice/cpp/src/Ice/WSAcceptor.h +3 -7
- data/ext/ice/cpp/src/Ice/WSConnector.cpp +5 -11
- data/ext/ice/cpp/src/Ice/WSConnector.h +3 -6
- data/ext/ice/cpp/src/Ice/WSEndpoint.cpp +185 -80
- data/ext/ice/cpp/src/Ice/WSEndpoint.h +21 -31
- data/ext/ice/cpp/src/Ice/WSTransceiver.cpp +41 -37
- data/ext/ice/cpp/src/Ice/WSTransceiver.h +7 -21
- data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.cpp +526 -264
- data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.h +341 -455
- data/ext/ice/cpp/src/IceDiscovery/LocatorI.cpp +86 -26
- data/ext/ice/cpp/src/IceDiscovery/LocatorI.h +59 -23
- data/ext/ice/cpp/src/IceDiscovery/LookupI.cpp +315 -61
- data/ext/ice/cpp/src/IceDiscovery/LookupI.h +83 -36
- data/ext/ice/cpp/src/IceDiscovery/PluginI.cpp +57 -59
- data/ext/ice/cpp/src/IceDiscovery/PluginI.h +3 -3
- data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.cpp +396 -159
- data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.h +251 -355
- data/ext/ice/cpp/src/IceLocatorDiscovery/Plugin.h +52 -0
- data/ext/ice/cpp/src/IceLocatorDiscovery/PluginI.cpp +526 -131
- data/ext/ice/cpp/src/IceSSL/AcceptorI.cpp +19 -165
- data/ext/ice/cpp/src/IceSSL/AcceptorI.h +8 -17
- data/ext/ice/cpp/src/IceSSL/CertificateI.cpp +284 -0
- data/ext/ice/cpp/src/IceSSL/CertificateI.h +69 -0
- data/ext/ice/cpp/src/IceSSL/ConnectionInfo.cpp +39 -11
- data/ext/ice/cpp/src/{Ice/ObjectFactoryF.cpp → IceSSL/ConnectionInfoF.cpp} +31 -9
- data/ext/ice/cpp/src/IceSSL/ConnectorI.cpp +14 -56
- data/ext/ice/cpp/src/IceSSL/ConnectorI.h +6 -13
- data/ext/ice/cpp/src/IceSSL/EndpointI.cpp +205 -197
- data/ext/ice/cpp/src/IceSSL/EndpointI.h +41 -33
- data/ext/ice/cpp/src/IceSSL/EndpointInfo.cpp +39 -10
- data/ext/ice/cpp/src/IceSSL/Instance.cpp +1 -6
- data/ext/ice/cpp/src/IceSSL/Instance.h +7 -7
- data/ext/ice/cpp/src/IceSSL/InstanceF.h +11 -7
- data/ext/ice/cpp/src/IceSSL/OpenSSLCertificateI.cpp +588 -0
- data/ext/ice/cpp/src/IceSSL/OpenSSLEngine.cpp +117 -152
- data/ext/ice/cpp/src/IceSSL/OpenSSLEngine.h +64 -0
- data/ext/ice/cpp/src/IceSSL/OpenSSLEngineF.h +32 -0
- data/ext/ice/cpp/src/IceSSL/OpenSSLPluginI.cpp +132 -0
- data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.cpp +400 -89
- data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.h +36 -21
- data/ext/ice/cpp/src/IceSSL/OpenSSLUtil.cpp +291 -0
- data/ext/ice/cpp/src/IceSSL/OpenSSLUtil.h +63 -0
- data/ext/ice/cpp/src/IceSSL/PluginI.cpp +71 -41
- data/ext/ice/cpp/src/IceSSL/PluginI.h +13 -18
- data/ext/ice/cpp/src/IceSSL/RFC2253.cpp +9 -54
- data/ext/ice/cpp/src/IceSSL/RFC2253.h +7 -7
- data/ext/ice/cpp/src/IceSSL/SChannelCertificateI.cpp +585 -0
- data/ext/ice/cpp/src/IceSSL/SChannelEngine.cpp +491 -75
- data/ext/ice/cpp/src/IceSSL/SChannelEngine.h +126 -0
- data/ext/ice/cpp/src/IceSSL/SChannelEngineF.h +32 -0
- data/ext/ice/cpp/src/IceSSL/SChannelPluginI.cpp +78 -0
- data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.cpp +126 -169
- data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.h +19 -22
- data/ext/ice/cpp/src/IceSSL/SSLEngine.cpp +79 -74
- data/ext/ice/cpp/src/IceSSL/SSLEngine.h +24 -187
- data/ext/ice/cpp/src/IceSSL/SSLEngineF.h +4 -19
- data/ext/ice/cpp/src/IceSSL/SecureTransportCertificateI.cpp +862 -0
- data/ext/ice/cpp/src/IceSSL/SecureTransportEngine.cpp +56 -214
- data/ext/ice/cpp/src/IceSSL/SecureTransportEngine.h +60 -0
- data/ext/ice/cpp/src/IceSSL/SecureTransportEngineF.h +31 -0
- data/ext/ice/cpp/src/IceSSL/SecureTransportPluginI.cpp +80 -0
- data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.cpp +137 -144
- data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.h +25 -28
- data/ext/ice/cpp/src/IceSSL/SecureTransportUtil.cpp +857 -0
- data/ext/ice/cpp/src/IceSSL/SecureTransportUtil.h +46 -0
- data/ext/ice/cpp/src/IceSSL/TrustManager.cpp +9 -13
- data/ext/ice/cpp/src/IceSSL/TrustManager.h +4 -4
- data/ext/ice/cpp/src/IceSSL/TrustManagerF.h +3 -3
- data/ext/ice/cpp/src/IceSSL/UWPCertificateI.cpp +271 -0
- data/ext/ice/cpp/src/IceSSL/UWPEngine.cpp +343 -0
- data/ext/ice/cpp/src/IceSSL/UWPEngine.h +46 -0
- data/ext/ice/cpp/{include/Ice/ObjectFactoryManagerF.h → src/IceSSL/UWPEngineF.h} +13 -8
- data/ext/ice/cpp/src/IceSSL/UWPPluginI.cpp +94 -0
- data/ext/ice/cpp/src/IceSSL/UWPTransceiverI.cpp +388 -0
- data/ext/ice/cpp/src/IceSSL/UWPTransceiverI.h +76 -0
- data/ext/ice/cpp/src/IceSSL/Util.cpp +66 -1256
- data/ext/ice/cpp/src/IceSSL/Util.h +48 -137
- data/ext/ice/cpp/src/IceUtil/ConsoleUtil.cpp +162 -0
- data/ext/ice/cpp/src/IceUtil/ConvertUTF.cpp +22 -22
- data/ext/ice/cpp/src/IceUtil/ConvertUTF.h +34 -26
- data/ext/ice/cpp/src/IceUtil/CtrlCHandler.cpp +20 -31
- data/ext/ice/cpp/src/IceUtil/FileUtil.cpp +25 -116
- data/ext/ice/cpp/src/IceUtil/InputUtil.cpp +1 -1
- data/ext/ice/cpp/src/IceUtil/MutexProtocol.cpp +1 -1
- data/ext/ice/cpp/src/IceUtil/Options.cpp +23 -46
- data/ext/ice/cpp/src/IceUtil/OutputUtil.cpp +7 -6
- data/ext/ice/cpp/src/IceUtil/Random.cpp +13 -13
- data/ext/ice/cpp/src/IceUtil/RecMutex.cpp +3 -9
- data/ext/ice/cpp/src/IceUtil/Shared.cpp +8 -3
- data/ext/ice/cpp/src/IceUtil/StringConverter.cpp +501 -264
- data/ext/ice/cpp/src/IceUtil/StringUtil.cpp +540 -235
- data/ext/ice/cpp/src/IceUtil/ThreadException.cpp +37 -74
- data/ext/ice/cpp/src/IceUtil/Time.cpp +1 -1
- data/ext/ice/cpp/src/IceUtil/UUID.cpp +10 -10
- data/ext/ice/cpp/src/IceUtil/Unicode.cpp +98 -97
- data/ext/ice/cpp/src/IceUtil/Unicode.h +21 -35
- data/ext/ice/cpp/src/IceUtil/UtilException.cpp +838 -0
- data/ext/ice/cpp/src/Slice/CPlusPlusUtil.cpp +815 -163
- data/ext/ice/cpp/src/Slice/CPlusPlusUtil.h +76 -0
- data/ext/ice/cpp/src/Slice/Checksum.cpp +2 -2
- data/ext/ice/cpp/{include → src}/Slice/Checksum.h +2 -2
- data/ext/ice/cpp/src/Slice/FileTracker.cpp +25 -78
- data/ext/ice/cpp/{include → src}/Slice/FileTracker.h +9 -9
- data/ext/ice/cpp/src/Slice/Grammar.cpp +1994 -1943
- data/ext/ice/cpp/src/Slice/Grammar.h +44 -24
- data/ext/ice/cpp/src/Slice/GrammarUtil.h +14 -14
- data/ext/ice/cpp/src/Slice/JavaUtil.cpp +2658 -1927
- data/ext/ice/cpp/{include → src}/Slice/JavaUtil.h +178 -59
- data/ext/ice/cpp/src/Slice/MD5.cpp +1 -1
- data/ext/ice/cpp/src/Slice/MD5.h +1 -1
- data/ext/ice/cpp/src/Slice/MD5I.cpp +0 -1
- data/ext/ice/cpp/src/Slice/MD5I.h +1 -1
- data/ext/ice/cpp/src/Slice/PHPUtil.cpp +12 -15
- data/ext/ice/cpp/{include → src}/Slice/PHPUtil.h +6 -15
- data/ext/ice/cpp/src/Slice/Parser.cpp +802 -307
- data/ext/ice/cpp/{include → src}/Slice/Parser.h +76 -84
- data/ext/ice/cpp/src/Slice/Preprocessor.cpp +43 -21
- data/ext/ice/cpp/{include → src}/Slice/Preprocessor.h +7 -12
- data/ext/ice/cpp/src/Slice/Python.cpp +207 -86
- data/ext/ice/cpp/src/Slice/PythonUtil.cpp +683 -679
- data/ext/ice/cpp/{include → src}/Slice/PythonUtil.h +19 -8
- data/ext/ice/cpp/src/Slice/Ruby.cpp +38 -34
- data/ext/ice/cpp/src/Slice/RubyUtil.cpp +177 -445
- data/ext/ice/cpp/{include → src}/Slice/RubyUtil.h +6 -6
- data/ext/ice/cpp/src/Slice/Scanner.cpp +218 -306
- data/ext/ice/cpp/src/Slice/{Util.cpp → SliceUtil.cpp} +37 -64
- data/ext/ice/cpp/src/Slice/StringLiteralUtil.cpp +374 -0
- data/ext/ice/cpp/src/Slice/Util.h +54 -0
- data/ext/ice/mcpp/Makefile +5 -2
- data/ice.gemspec +2 -7
- data/lib/Glacier2.rb +1 -1
- data/lib/Glacier2/Metrics.rb +7 -46
- data/lib/Glacier2/PermissionsVerifier.rb +24 -95
- data/lib/Glacier2/PermissionsVerifierF.rb +3 -3
- data/lib/Glacier2/Router.rb +32 -74
- data/lib/Glacier2/RouterF.rb +3 -3
- data/lib/Glacier2/SSLInfo.rb +4 -7
- data/lib/Glacier2/Session.rb +88 -307
- data/lib/Ice.rb +83 -52
- data/lib/Ice/BuiltinSequences.rb +4 -4
- data/lib/Ice/Communicator.rb +56 -58
- data/lib/Ice/CommunicatorF.rb +3 -3
- data/lib/Ice/Connection.rb +153 -162
- data/lib/Ice/ConnectionF.rb +3 -3
- data/lib/Ice/Current.rb +4 -11
- data/lib/Ice/Endpoint.rb +57 -133
- data/lib/Ice/EndpointF.rb +3 -3
- data/lib/Ice/EndpointTypes.rb +3 -7
- data/lib/Ice/FacetMap.rb +4 -4
- data/lib/Ice/Identity.rb +5 -8
- data/lib/Ice/ImplicitContext.rb +5 -34
- data/lib/Ice/ImplicitContextF.rb +3 -3
- data/lib/Ice/Instrumentation.rb +23 -275
- data/lib/Ice/InstrumentationF.rb +3 -3
- data/lib/Ice/LocalException.rb +95 -141
- data/lib/Ice/Locator.rb +51 -165
- data/lib/Ice/LocatorF.rb +3 -3
- data/lib/Ice/Logger.rb +5 -34
- data/lib/Ice/LoggerF.rb +3 -3
- data/lib/Ice/Metrics.rb +61 -416
- data/lib/Ice/ObjectAdapter.rb +34 -0
- data/lib/Ice/ObjectAdapterF.rb +3 -3
- data/lib/Ice/ObjectFactory.rb +5 -30
- data/lib/Ice/Plugin.rb +7 -60
- data/lib/Ice/PluginF.rb +3 -3
- data/lib/Ice/Process.rb +16 -52
- data/lib/Ice/ProcessF.rb +3 -3
- data/lib/Ice/Properties.rb +5 -41
- data/lib/Ice/PropertiesAdmin.rb +19 -56
- data/lib/Ice/PropertiesF.rb +3 -3
- data/lib/Ice/RemoteLogger.rb +34 -115
- data/lib/Ice/Router.rb +29 -101
- data/lib/Ice/RouterF.rb +3 -3
- data/lib/Ice/ServantLocator.rb +31 -0
- data/lib/Ice/{ObjectFactoryF.rb → ServantLocatorF.rb} +6 -6
- data/lib/Ice/SliceChecksumDict.rb +3 -3
- data/lib/Ice/ValueFactory.rb +33 -0
- data/lib/Ice/Version.rb +5 -11
- data/lib/IceBox.rb +1 -1
- data/lib/IceBox/IceBox.rb +44 -148
- data/lib/IceGrid.rb +1 -4
- data/lib/IceGrid/Admin.rb +551 -427
- data/lib/IceGrid/Descriptor.rb +62 -529
- data/lib/IceGrid/Exception.rb +24 -45
- data/lib/IceGrid/FileParser.rb +14 -50
- data/lib/IceGrid/PluginFacade.rb +40 -0
- data/lib/IceGrid/Registry.rb +151 -58
- data/lib/IceGrid/Session.rb +25 -64
- data/lib/IceGrid/UserAccountMapper.rb +14 -50
- data/lib/IcePatch2.rb +1 -1
- data/lib/IcePatch2/FileInfo.rb +5 -11
- data/lib/IcePatch2/FileServer.rb +33 -76
- data/lib/IceStorm.rb +1 -1
- data/lib/IceStorm/IceStorm.rb +79 -206
- data/lib/IceStorm/Metrics.rb +11 -89
- data/slice/Glacier2/Metrics.ice +8 -4
- data/slice/Glacier2/PermissionsVerifier.ice +10 -7
- data/slice/Glacier2/PermissionsVerifierF.ice +7 -4
- data/slice/Glacier2/Router.ice +10 -8
- data/slice/Glacier2/RouterF.ice +7 -4
- data/slice/Glacier2/SSLInfo.ice +8 -5
- data/slice/Glacier2/Session.ice +15 -13
- data/slice/Ice/BuiltinSequences.ice +7 -4
- data/slice/Ice/Communicator.ice +141 -66
- data/slice/Ice/CommunicatorF.ice +7 -4
- data/slice/Ice/Connection.ice +183 -86
- data/slice/Ice/ConnectionF.ice +7 -4
- data/slice/Ice/Current.ice +13 -9
- data/slice/Ice/Endpoint.ice +63 -14
- data/slice/Ice/EndpointF.ice +7 -4
- data/slice/Ice/EndpointTypes.ice +8 -6
- data/slice/Ice/FacetMap.ice +7 -4
- data/slice/Ice/Identity.ice +13 -5
- data/slice/Ice/ImplicitContext.ice +20 -18
- data/slice/Ice/ImplicitContextF.ice +7 -4
- data/slice/Ice/Instrumentation.ice +20 -19
- data/slice/Ice/InstrumentationF.ice +8 -5
- data/slice/Ice/LocalException.ice +87 -87
- data/slice/Ice/Locator.ice +19 -18
- data/slice/Ice/LocatorF.ice +7 -4
- data/slice/Ice/Logger.ice +9 -7
- data/slice/Ice/LoggerF.ice +7 -4
- data/slice/Ice/Metrics.ice +18 -14
- data/slice/Ice/ObjectAdapter.ice +30 -13
- data/slice/Ice/ObjectAdapterF.ice +7 -4
- data/slice/Ice/ObjectFactory.ice +15 -12
- data/slice/Ice/Plugin.ice +9 -6
- data/slice/Ice/PluginF.ice +8 -5
- data/slice/Ice/Process.ice +9 -6
- data/slice/Ice/ProcessF.ice +7 -4
- data/slice/Ice/Properties.ice +15 -12
- data/slice/Ice/PropertiesAdmin.ice +9 -5
- data/slice/Ice/PropertiesF.ice +7 -4
- data/slice/Ice/RemoteLogger.ice +33 -24
- data/slice/Ice/Router.ice +16 -7
- data/slice/Ice/RouterF.ice +7 -4
- data/slice/Ice/ServantLocator.ice +13 -10
- data/slice/Ice/ServantLocatorF.ice +7 -4
- data/slice/Ice/SliceChecksumDict.ice +7 -4
- data/slice/Ice/ValueFactory.ice +127 -0
- data/slice/Ice/Version.ice +9 -5
- data/slice/IceBT/ConnectionInfo.ice +53 -0
- data/slice/IceBT/EndpointInfo.ice +51 -0
- data/slice/IceBT/Types.ice +39 -0
- data/slice/IceBox/IceBox.ice +20 -21
- data/slice/IceDiscovery/IceDiscovery.ice +9 -5
- data/slice/IceGrid/Admin.ice +390 -30
- data/slice/IceGrid/Descriptor.ice +37 -29
- data/slice/IceGrid/Exception.ice +33 -27
- data/slice/IceGrid/FileParser.ice +9 -6
- data/slice/IceGrid/PluginFacade.ice +11 -9
- data/slice/IceGrid/Registry.ice +139 -16
- data/slice/IceGrid/Session.ice +10 -8
- data/slice/IceGrid/UserAccountMapper.ice +9 -6
- data/slice/IceIAP/ConnectionInfo.ice +70 -0
- data/slice/IceIAP/EndpointInfo.ice +64 -0
- data/slice/IceLocatorDiscovery/IceLocatorDiscovery.ice +9 -7
- data/slice/IcePatch2/FileInfo.ice +9 -8
- data/slice/IcePatch2/FileServer.ice +17 -13
- data/slice/IceSSL/ConnectionInfo.ice +14 -17
- data/slice/IceSSL/ConnectionInfoF.ice +24 -0
- data/slice/IceSSL/EndpointInfo.ice +9 -30
- data/slice/IceStorm/IceStorm.ice +22 -18
- data/slice/IceStorm/Metrics.ice +9 -5
- metadata +154 -120
- data/ext/ObjectFactory.cpp +0 -140
- data/ext/ObjectFactory.h +0 -50
- data/ext/ice/cpp/include/Ice/BasicStream.h +0 -1335
- data/ext/ice/cpp/include/Ice/Communicator.h +0 -200
- data/ext/ice/cpp/include/Ice/Connection.h +0 -497
- data/ext/ice/cpp/include/Ice/DeprecatedStringConverter.h +0 -62
- data/ext/ice/cpp/include/Ice/Endpoint.h +0 -341
- data/ext/ice/cpp/include/Ice/Identity.h +0 -168
- data/ext/ice/cpp/include/Ice/Instrumentation.h +0 -365
- data/ext/ice/cpp/include/Ice/LocalException.h +0 -1030
- data/ext/ice/cpp/include/Ice/Locator.h +0 -2193
- data/ext/ice/cpp/include/Ice/Metrics.h +0 -2974
- data/ext/ice/cpp/include/Ice/ObjectAdapter.h +0 -168
- data/ext/ice/cpp/include/Ice/ObjectFactory.h +0 -92
- data/ext/ice/cpp/include/Ice/ObjectFactoryF.h +0 -66
- data/ext/ice/cpp/include/Ice/Outgoing.h +0 -225
- data/ext/ice/cpp/include/Ice/Plugin.h +0 -125
- data/ext/ice/cpp/include/Ice/Process.h +0 -574
- data/ext/ice/cpp/include/Ice/PropertiesAdmin.h +0 -830
- data/ext/ice/cpp/include/Ice/RemoteLogger.h +0 -1500
- data/ext/ice/cpp/include/Ice/Router.h +0 -1159
- data/ext/ice/cpp/include/Ice/Stream.h +0 -447
- data/ext/ice/cpp/include/Ice/StreamF.h +0 -30
- data/ext/ice/cpp/include/Ice/Version.h +0 -262
- data/ext/ice/cpp/include/IceSSL/ConnectionInfo.h +0 -158
- data/ext/ice/cpp/include/IceSSL/EndpointInfo.h +0 -142
- data/ext/ice/cpp/include/IceUtil/AbstractMutex.h +0 -119
- data/ext/ice/cpp/include/IceUtil/Cache.h +0 -362
- data/ext/ice/cpp/include/Slice/CPlusPlusUtil.h +0 -65
- data/ext/ice/cpp/include/Slice/CsUtil.h +0 -92
- data/ext/ice/cpp/include/Slice/DotNetNames.h +0 -34
- data/ext/ice/cpp/include/Slice/ObjCUtil.h +0 -127
- data/ext/ice/cpp/include/Slice/Util.h +0 -56
- data/ext/ice/cpp/src/Ice/BasicStream.cpp +0 -3428
- data/ext/ice/cpp/src/Ice/DeprecatedStringConverter.cpp +0 -62
- data/ext/ice/cpp/src/Ice/ObjectFactoryManager.cpp +0 -139
- data/ext/ice/cpp/src/Ice/ObjectFactoryManager.h +0 -43
- data/ext/ice/cpp/src/Ice/Outgoing.cpp +0 -694
- data/ext/ice/cpp/src/Ice/Stream.cpp +0 -53
- data/ext/ice/cpp/src/Ice/StreamI.cpp +0 -832
- data/ext/ice/cpp/src/Ice/StreamI.h +0 -198
- data/ext/ice/cpp/src/IceSSL/Certificate.cpp +0 -1336
- data/ext/ice/cpp/src/IceUtil/Exception.cpp +0 -792
- data/ext/ice/cpp/src/IceUtil/FileUtil.h +0 -185
- data/ext/ice/cpp/src/Slice/CsUtil.cpp +0 -2660
- data/ext/ice/cpp/src/Slice/DotNetNames.cpp +0 -146
- data/ext/ice/cpp/src/Slice/ObjCUtil.cpp +0 -1310
- data/lib/IceGrid/Locator.rb +0 -106
- data/lib/IceGrid/Observer.rb +0 -572
- data/lib/IceGrid/Query.rb +0 -169
- data/slice/Freeze/BackgroundSaveEvictor.ice +0 -111
- data/slice/Freeze/CatalogData.ice +0 -49
- data/slice/Freeze/Connection.ice +0 -121
- data/slice/Freeze/DB.ice +0 -37
- data/slice/Freeze/Evictor.ice +0 -346
- data/slice/Freeze/EvictorF.ice +0 -22
- data/slice/Freeze/EvictorStorage.ice +0 -72
- data/slice/Freeze/Exception.ice +0 -100
- data/slice/Freeze/Transaction.ice +0 -58
- data/slice/Freeze/TransactionalEvictor.ice +0 -50
- data/slice/IceGrid/Locator.ice +0 -57
- data/slice/IceGrid/Observer.ice +0 -395
- data/slice/IceGrid/Query.ice +0 -131
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
// **********************************************************************
|
|
2
|
+
//
|
|
3
|
+
// Copyright (c) 2003-2017 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 ICESSL_OPENSSL_ENGINE_H
|
|
11
|
+
#define ICESSL_OPENSSL_ENGINE_H
|
|
12
|
+
|
|
13
|
+
#include <IceSSL/SSLEngine.h>
|
|
14
|
+
#include <IceSSL/InstanceF.h>
|
|
15
|
+
#include <IceSSL/OpenSSLUtil.h>
|
|
16
|
+
|
|
17
|
+
#include <Ice/BuiltinSequences.h>
|
|
18
|
+
|
|
19
|
+
namespace IceSSL
|
|
20
|
+
{
|
|
21
|
+
|
|
22
|
+
namespace OpenSSL
|
|
23
|
+
{
|
|
24
|
+
|
|
25
|
+
class SSLEngine : public IceSSL::SSLEngine
|
|
26
|
+
{
|
|
27
|
+
public:
|
|
28
|
+
|
|
29
|
+
SSLEngine(const Ice::CommunicatorPtr&);
|
|
30
|
+
~SSLEngine();
|
|
31
|
+
|
|
32
|
+
virtual void initialize();
|
|
33
|
+
virtual void destroy();
|
|
34
|
+
virtual void verifyPeer(const std::string&, const IceSSL::ConnectionInfoPtr&, const std::string&);
|
|
35
|
+
virtual IceInternal::TransceiverPtr
|
|
36
|
+
createTransceiver(const IceSSL::InstancePtr&, const IceInternal::TransceiverPtr&, const std::string&, bool);
|
|
37
|
+
|
|
38
|
+
#ifndef OPENSSL_NO_DH
|
|
39
|
+
DH* dhParams(int);
|
|
40
|
+
#endif
|
|
41
|
+
|
|
42
|
+
SSL_CTX* context() const;
|
|
43
|
+
void context(SSL_CTX*);
|
|
44
|
+
std::string sslErrors() const;
|
|
45
|
+
|
|
46
|
+
private:
|
|
47
|
+
|
|
48
|
+
SSL_METHOD* getMethod(int);
|
|
49
|
+
void setOptions(int);
|
|
50
|
+
enum Protocols { SSLv3 = 0x01, TLSv1_0 = 0x02, TLSv1_1 = 0x04, TLSv1_2 = 0x08 };
|
|
51
|
+
int parseProtocols(const Ice::StringSeq&) const;
|
|
52
|
+
|
|
53
|
+
SSL_CTX* _ctx;
|
|
54
|
+
|
|
55
|
+
#ifndef OPENSSL_NO_DH
|
|
56
|
+
IceSSL::OpenSSL::DHParamsPtr _dhParams;
|
|
57
|
+
#endif
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
} // OpenSSL namespace end
|
|
61
|
+
|
|
62
|
+
} // IceSSL namespace endif
|
|
63
|
+
|
|
64
|
+
#endif
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// **********************************************************************
|
|
2
|
+
//
|
|
3
|
+
// Copyright (c) 2003-2017 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 ICESSL_OPENSSL_ENGINE_F_H
|
|
11
|
+
#define ICESSL_OPENSSL_ENGINE_F_H
|
|
12
|
+
|
|
13
|
+
#include <IceUtil/Shared.h>
|
|
14
|
+
#include <Ice/Handle.h>
|
|
15
|
+
|
|
16
|
+
#include <IceSSL/OpenSSL.h>
|
|
17
|
+
|
|
18
|
+
namespace IceSSL
|
|
19
|
+
{
|
|
20
|
+
|
|
21
|
+
namespace OpenSSL
|
|
22
|
+
{
|
|
23
|
+
|
|
24
|
+
class SSLEngine;
|
|
25
|
+
ICESSL_OPENSSL_API IceUtil::Shared* upCast(SSLEngine*);
|
|
26
|
+
typedef IceInternal::Handle<SSLEngine> SSLEnginePtr;
|
|
27
|
+
|
|
28
|
+
} // OpenSSL namespace end
|
|
29
|
+
|
|
30
|
+
} // IceSSL namespace end
|
|
31
|
+
|
|
32
|
+
#endif
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
// **********************************************************************
|
|
2
|
+
//
|
|
3
|
+
// Copyright (c) 2003-2017 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/PluginI.h>
|
|
11
|
+
#include <IceSSL/OpenSSL.h>
|
|
12
|
+
#include <IceSSL/OpenSSLEngine.h>
|
|
13
|
+
|
|
14
|
+
#include <Ice/Initialize.h>
|
|
15
|
+
|
|
16
|
+
using namespace std;
|
|
17
|
+
|
|
18
|
+
namespace
|
|
19
|
+
{
|
|
20
|
+
|
|
21
|
+
class PluginI : public IceSSL::PluginI,
|
|
22
|
+
public IceSSL::OpenSSL::Plugin
|
|
23
|
+
{
|
|
24
|
+
public:
|
|
25
|
+
|
|
26
|
+
PluginI(const Ice::CommunicatorPtr&);
|
|
27
|
+
|
|
28
|
+
virtual Ice::Long getOpenSSLVersion() const;
|
|
29
|
+
virtual IceSSL::CertificatePtr create(x509_st*) const;
|
|
30
|
+
virtual IceSSL::CertificatePtr load(const std::string&) const;
|
|
31
|
+
virtual IceSSL::CertificatePtr decode(const std::string&) const;
|
|
32
|
+
virtual void setContext(SSL_CTX*);
|
|
33
|
+
virtual SSL_CTX* getContext();
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
} // anonymous namespace end
|
|
37
|
+
|
|
38
|
+
//
|
|
39
|
+
// Plugin implementation.
|
|
40
|
+
//
|
|
41
|
+
PluginI::PluginI(const Ice::CommunicatorPtr& com) :
|
|
42
|
+
IceSSL::PluginI(com, new IceSSL::OpenSSL::SSLEngine(com))
|
|
43
|
+
{
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
Ice::Long
|
|
47
|
+
PluginI::getOpenSSLVersion() const
|
|
48
|
+
{
|
|
49
|
+
return SSLeay();
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
IceSSL::CertificatePtr
|
|
53
|
+
PluginI::create(x509_st* cert) const
|
|
54
|
+
{
|
|
55
|
+
return IceSSL::OpenSSL::Certificate::create(cert);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
IceSSL::CertificatePtr
|
|
59
|
+
PluginI::load(const std::string& file) const
|
|
60
|
+
{
|
|
61
|
+
return IceSSL::OpenSSL::Certificate::load(file);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
IceSSL::CertificatePtr
|
|
65
|
+
PluginI::decode(const std::string& encoding) const
|
|
66
|
+
{
|
|
67
|
+
return IceSSL::OpenSSL::Certificate::load(encoding);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
void
|
|
71
|
+
PluginI::setContext(SSL_CTX* context)
|
|
72
|
+
{
|
|
73
|
+
IceSSL::OpenSSL::SSLEngine* engine = dynamic_cast<IceSSL::OpenSSL::SSLEngine*>(_engine.get());
|
|
74
|
+
assert(engine);
|
|
75
|
+
engine->context(context);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
SSL_CTX*
|
|
79
|
+
PluginI::getContext()
|
|
80
|
+
{
|
|
81
|
+
IceSSL::OpenSSL::SSLEngine* engine = dynamic_cast<IceSSL::OpenSSL::SSLEngine*>(_engine.get());
|
|
82
|
+
assert(engine);
|
|
83
|
+
return engine->context();
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
#ifdef _WIN32
|
|
87
|
+
//
|
|
88
|
+
// Plug-in factory function.
|
|
89
|
+
//
|
|
90
|
+
extern "C" ICESSL_OPENSSL_API Ice::Plugin*
|
|
91
|
+
createIceSSLOpenSSL(const Ice::CommunicatorPtr& communicator, const string& /*name*/, const Ice::StringSeq& /*args*/)
|
|
92
|
+
{
|
|
93
|
+
return new PluginI(communicator);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
namespace Ice
|
|
97
|
+
{
|
|
98
|
+
|
|
99
|
+
ICESSL_OPENSSL_API void
|
|
100
|
+
registerIceSSLOpenSSL(bool loadOnInitialize)
|
|
101
|
+
{
|
|
102
|
+
Ice::registerPluginFactory("IceSSL", createIceSSLOpenSSL, loadOnInitialize);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
#else
|
|
108
|
+
|
|
109
|
+
extern "C" ICESSL_API Ice::Plugin*
|
|
110
|
+
createIceSSL(const Ice::CommunicatorPtr& communicator, const string& /*name*/, const Ice::StringSeq& /*args*/)
|
|
111
|
+
{
|
|
112
|
+
return new PluginI(communicator);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
//
|
|
116
|
+
// The following functions are defined only when OpenSSL is the default
|
|
117
|
+
// implementation. In Windows the default implementation is always
|
|
118
|
+
// SChannel.
|
|
119
|
+
//
|
|
120
|
+
IceSSL::CertificatePtr
|
|
121
|
+
IceSSL::Certificate::load(const std::string& file)
|
|
122
|
+
{
|
|
123
|
+
return IceSSL::OpenSSL::Certificate::load(file);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
IceSSL::CertificatePtr
|
|
127
|
+
IceSSL::Certificate::decode(const std::string& encoding)
|
|
128
|
+
{
|
|
129
|
+
return IceSSL::OpenSSL::Certificate::decode(encoding);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
#endif
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// **********************************************************************
|
|
2
2
|
//
|
|
3
|
-
// Copyright (c) 2003-
|
|
3
|
+
// Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
|
|
4
4
|
//
|
|
5
5
|
// This copy of Ice is licensed to you under the terms described in the
|
|
6
6
|
// ICE_LICENSE file included in this distribution.
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
// **********************************************************************
|
|
9
9
|
|
|
10
10
|
#include <IceSSL/OpenSSLTransceiverI.h>
|
|
11
|
+
#include <IceSSL/OpenSSLEngine.h>
|
|
11
12
|
|
|
12
13
|
#include <IceUtil/Mutex.h>
|
|
13
14
|
#include <IceUtil/MutexPtrLock.h>
|
|
@@ -20,9 +21,9 @@
|
|
|
20
21
|
#include <Ice/LoggerUtil.h>
|
|
21
22
|
#include <Ice/Buffer.h>
|
|
22
23
|
#include <Ice/LocalException.h>
|
|
24
|
+
#include <Ice/Network.h>
|
|
23
25
|
|
|
24
|
-
#
|
|
25
|
-
|
|
26
|
+
#include <openssl/ssl.h>
|
|
26
27
|
#include <openssl/err.h>
|
|
27
28
|
#include <openssl/bio.h>
|
|
28
29
|
|
|
@@ -31,7 +32,7 @@ using namespace Ice;
|
|
|
31
32
|
using namespace IceSSL;
|
|
32
33
|
|
|
33
34
|
//
|
|
34
|
-
// BUGFIX: an openssl bug that affects
|
|
35
|
+
// BUGFIX: an openssl bug that affects OpenSSL < 1.0.0k
|
|
35
36
|
// could cause a deadlock when decoding public keys.
|
|
36
37
|
//
|
|
37
38
|
// See: http://cvs.openssl.org/chngview?cn=22569
|
|
@@ -70,33 +71,60 @@ int
|
|
|
70
71
|
IceSSL_opensslVerifyCallback(int ok, X509_STORE_CTX* ctx)
|
|
71
72
|
{
|
|
72
73
|
SSL* ssl = reinterpret_cast<SSL*>(X509_STORE_CTX_get_ex_data(ctx, SSL_get_ex_data_X509_STORE_CTX_idx()));
|
|
73
|
-
TransceiverI* p = reinterpret_cast<TransceiverI*>(SSL_get_ex_data(ssl, 0));
|
|
74
|
+
OpenSSL::TransceiverI* p = reinterpret_cast<OpenSSL::TransceiverI*>(SSL_get_ex_data(ssl, 0));
|
|
74
75
|
return p->verifyCallback(ok, ctx);
|
|
75
76
|
}
|
|
76
77
|
|
|
77
78
|
}
|
|
78
79
|
|
|
79
80
|
IceInternal::NativeInfoPtr
|
|
80
|
-
|
|
81
|
+
OpenSSL::TransceiverI::getNativeInfo()
|
|
81
82
|
{
|
|
82
|
-
return
|
|
83
|
+
return _delegate->getNativeInfo();
|
|
83
84
|
}
|
|
84
85
|
|
|
85
86
|
IceInternal::SocketOperation
|
|
86
|
-
|
|
87
|
+
OpenSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::Buffer& writeBuffer)
|
|
87
88
|
{
|
|
88
|
-
|
|
89
|
-
if(status != IceInternal::SocketOperationNone)
|
|
89
|
+
if(!_connected)
|
|
90
90
|
{
|
|
91
|
-
|
|
91
|
+
IceInternal::SocketOperation status = _delegate->initialize(readBuffer, writeBuffer);
|
|
92
|
+
if(status != IceInternal::SocketOperationNone)
|
|
93
|
+
{
|
|
94
|
+
return status;
|
|
95
|
+
}
|
|
96
|
+
_connected = true;
|
|
92
97
|
}
|
|
93
98
|
|
|
94
99
|
if(!_ssl)
|
|
95
100
|
{
|
|
101
|
+
SOCKET fd = _delegate->getNativeInfo()->fd();
|
|
102
|
+
if(fd == INVALID_SOCKET)
|
|
103
|
+
{
|
|
104
|
+
//
|
|
105
|
+
// The delegate has finished its initialization but may not have a file descriptor yet (e.g., Bluetooth).
|
|
106
|
+
// The underlying transport must (eventually) be socket-based.
|
|
107
|
+
//
|
|
108
|
+
return IceInternal::SocketOperationRead;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
#ifdef ICE_USE_IOCP
|
|
112
|
+
_maxSendPacketSize = std::max(512, IceInternal::getSendBufferSize(fd));
|
|
113
|
+
_maxRecvPacketSize = std::max(512, IceInternal::getRecvBufferSize(fd));
|
|
114
|
+
BIO* bio;
|
|
115
|
+
_sentBytes = 0;
|
|
116
|
+
if(!BIO_new_bio_pair(&bio, _maxSendPacketSize, &_iocpBio, _maxRecvPacketSize))
|
|
117
|
+
{
|
|
118
|
+
bio = 0;
|
|
119
|
+
_iocpBio = 0;
|
|
120
|
+
}
|
|
121
|
+
#else
|
|
96
122
|
//
|
|
97
123
|
// This static_cast is necessary due to 64bit windows. There SOCKET is a non-int type.
|
|
98
124
|
//
|
|
99
|
-
BIO* bio = BIO_new_socket(static_cast<int>(
|
|
125
|
+
BIO* bio = BIO_new_socket(static_cast<int>(fd), 0);
|
|
126
|
+
#endif
|
|
127
|
+
|
|
100
128
|
if(!bio)
|
|
101
129
|
{
|
|
102
130
|
SecurityException ex(__FILE__, __LINE__);
|
|
@@ -108,6 +136,10 @@ IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::B
|
|
|
108
136
|
if(!_ssl)
|
|
109
137
|
{
|
|
110
138
|
BIO_free(bio);
|
|
139
|
+
#ifdef ICE_USE_IOCP
|
|
140
|
+
BIO_free(_iocpBio);
|
|
141
|
+
_iocpBio = 0;
|
|
142
|
+
#endif
|
|
111
143
|
SecurityException ex(__FILE__, __LINE__);
|
|
112
144
|
ex.reason = "openssl failure";
|
|
113
145
|
throw ex;
|
|
@@ -140,6 +172,25 @@ IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::B
|
|
|
140
172
|
assert(false);
|
|
141
173
|
}
|
|
142
174
|
}
|
|
175
|
+
|
|
176
|
+
//
|
|
177
|
+
// Hostname verification was included in OpenSSL 1.0.2
|
|
178
|
+
//
|
|
179
|
+
#if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER >= 0x10002000L
|
|
180
|
+
if(_engine->getCheckCertName() && !_host.empty() && (sslVerifyMode & SSL_VERIFY_PEER))
|
|
181
|
+
{
|
|
182
|
+
X509_VERIFY_PARAM* param = SSL_get0_param(_ssl);
|
|
183
|
+
if(IceInternal::isIpAddress(_host))
|
|
184
|
+
{
|
|
185
|
+
X509_VERIFY_PARAM_set1_ip_asc(param, _host.c_str());
|
|
186
|
+
}
|
|
187
|
+
else
|
|
188
|
+
{
|
|
189
|
+
X509_VERIFY_PARAM_set1_host(param, _host.c_str(), 0);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
#endif
|
|
193
|
+
|
|
143
194
|
SSL_set_verify(_ssl, sslVerifyMode, IceSSL_opensslVerifyCallback);
|
|
144
195
|
}
|
|
145
196
|
}
|
|
@@ -151,7 +202,7 @@ IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::B
|
|
|
151
202
|
//
|
|
152
203
|
|
|
153
204
|
//
|
|
154
|
-
// BUGFIX: an openssl bug that affects
|
|
205
|
+
// BUGFIX: an openssl bug that affects OpenSSL < 1.0.0k
|
|
155
206
|
// could cause a deadlock when decoding public keys.
|
|
156
207
|
//
|
|
157
208
|
// See: http://cvs.openssl.org/chngview?cn=22569
|
|
@@ -165,6 +216,18 @@ IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::B
|
|
|
165
216
|
#if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER < 0x100000bfL && !defined(LIBRESSL_VERSION_NUMBER)
|
|
166
217
|
sync.release();
|
|
167
218
|
#endif
|
|
219
|
+
|
|
220
|
+
#ifdef ICE_USE_IOCP
|
|
221
|
+
if(BIO_ctrl_pending(_iocpBio))
|
|
222
|
+
{
|
|
223
|
+
if(!send())
|
|
224
|
+
{
|
|
225
|
+
return IceInternal::SocketOperationWrite;
|
|
226
|
+
}
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
#endif
|
|
230
|
+
|
|
168
231
|
if(ret <= 0)
|
|
169
232
|
{
|
|
170
233
|
switch(SSL_get_error(_ssl, ret))
|
|
@@ -182,14 +245,27 @@ IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::B
|
|
|
182
245
|
}
|
|
183
246
|
case SSL_ERROR_WANT_READ:
|
|
184
247
|
{
|
|
248
|
+
#ifdef ICE_USE_IOCP
|
|
249
|
+
if(receive())
|
|
250
|
+
{
|
|
251
|
+
continue;
|
|
252
|
+
}
|
|
253
|
+
#endif
|
|
185
254
|
return IceInternal::SocketOperationRead;
|
|
186
255
|
}
|
|
187
256
|
case SSL_ERROR_WANT_WRITE:
|
|
188
257
|
{
|
|
258
|
+
#ifdef ICE_USE_IOCP
|
|
259
|
+
if(send())
|
|
260
|
+
{
|
|
261
|
+
continue;
|
|
262
|
+
}
|
|
263
|
+
#endif
|
|
189
264
|
return IceInternal::SocketOperationWrite;
|
|
190
265
|
}
|
|
191
266
|
case SSL_ERROR_SYSCALL:
|
|
192
267
|
{
|
|
268
|
+
#ifndef ICE_USE_IOCP
|
|
193
269
|
if(IceInternal::interrupted())
|
|
194
270
|
{
|
|
195
271
|
break;
|
|
@@ -215,24 +291,16 @@ IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::B
|
|
|
215
291
|
ex.error = IceInternal::getSocketErrno();
|
|
216
292
|
throw ex;
|
|
217
293
|
}
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
throw ex;
|
|
223
|
-
}
|
|
294
|
+
#endif
|
|
295
|
+
SocketException ex(__FILE__, __LINE__);
|
|
296
|
+
ex.error = IceInternal::getSocketErrno();
|
|
297
|
+
throw ex;
|
|
224
298
|
}
|
|
225
299
|
case SSL_ERROR_SSL:
|
|
226
300
|
{
|
|
227
|
-
IceInternal::Address remoteAddr;
|
|
228
|
-
string desc = "<not available>";
|
|
229
|
-
if(IceInternal::fdToRemoteAddress(_stream->fd(), remoteAddr))
|
|
230
|
-
{
|
|
231
|
-
desc = IceInternal::addrToString(remoteAddr);
|
|
232
|
-
}
|
|
233
301
|
ostringstream ostr;
|
|
234
302
|
ostr << "SSL error occurred for new " << (_incoming ? "incoming" : "outgoing")
|
|
235
|
-
<< " connection:\nremote address = " <<
|
|
303
|
+
<< " connection:\nremote address = " << _delegate->toString() << "\n" << _engine->sslErrors();
|
|
236
304
|
ProtocolException ex(__FILE__, __LINE__);
|
|
237
305
|
ex.reason = ostr.str();
|
|
238
306
|
throw ex;
|
|
@@ -272,7 +340,8 @@ IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::B
|
|
|
272
340
|
_verified = true;
|
|
273
341
|
}
|
|
274
342
|
|
|
275
|
-
|
|
343
|
+
_cipher = SSL_get_cipher_name(_ssl); // Nothing needs to be free'd.
|
|
344
|
+
_engine->verifyPeer(_host, ICE_DYNAMIC_CAST(ConnectionInfo, getInfo()), toString());
|
|
276
345
|
|
|
277
346
|
if(_engine->securityTraceLevel() >= 1)
|
|
278
347
|
{
|
|
@@ -301,7 +370,7 @@ IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::B
|
|
|
301
370
|
}
|
|
302
371
|
|
|
303
372
|
IceInternal::SocketOperation
|
|
304
|
-
|
|
373
|
+
OpenSSL::TransceiverI::closing(bool initiator, const Ice::LocalException&)
|
|
305
374
|
{
|
|
306
375
|
// If we are initiating the connection closure, wait for the peer
|
|
307
376
|
// to close the TCP/IP connection. Otherwise, close immediately.
|
|
@@ -309,7 +378,7 @@ IceSSL::TransceiverI::closing(bool initiator, const Ice::LocalException&)
|
|
|
309
378
|
}
|
|
310
379
|
|
|
311
380
|
void
|
|
312
|
-
|
|
381
|
+
OpenSSL::TransceiverI::close()
|
|
313
382
|
{
|
|
314
383
|
if(_ssl)
|
|
315
384
|
{
|
|
@@ -327,17 +396,35 @@ IceSSL::TransceiverI::close()
|
|
|
327
396
|
_ssl = 0;
|
|
328
397
|
}
|
|
329
398
|
|
|
330
|
-
|
|
399
|
+
#ifdef ICE_USE_IOCP
|
|
400
|
+
if(_iocpBio)
|
|
401
|
+
{
|
|
402
|
+
BIO_free(_iocpBio);
|
|
403
|
+
_iocpBio = 0;
|
|
404
|
+
}
|
|
405
|
+
#endif
|
|
406
|
+
|
|
407
|
+
_delegate->close();
|
|
331
408
|
}
|
|
332
409
|
|
|
333
410
|
IceInternal::SocketOperation
|
|
334
|
-
|
|
411
|
+
OpenSSL::TransceiverI::write(IceInternal::Buffer& buf)
|
|
335
412
|
{
|
|
336
|
-
if(!
|
|
413
|
+
if(!_connected)
|
|
337
414
|
{
|
|
338
|
-
return
|
|
415
|
+
return _delegate->write(buf);
|
|
339
416
|
}
|
|
340
417
|
|
|
418
|
+
#ifdef ICE_USE_IOCP
|
|
419
|
+
if(_writeBuffer.i != _writeBuffer.b.end())
|
|
420
|
+
{
|
|
421
|
+
if(!send())
|
|
422
|
+
{
|
|
423
|
+
return IceInternal::SocketOperationWrite;
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
#endif
|
|
427
|
+
|
|
341
428
|
if(buf.i == buf.b.end())
|
|
342
429
|
{
|
|
343
430
|
return IceInternal::SocketOperationNone;
|
|
@@ -346,11 +433,37 @@ IceSSL::TransceiverI::write(IceInternal::Buffer& buf)
|
|
|
346
433
|
//
|
|
347
434
|
// It's impossible for packetSize to be more than an Int.
|
|
348
435
|
//
|
|
349
|
-
int packetSize =
|
|
436
|
+
int packetSize =
|
|
437
|
+
#ifdef ICE_USE_IOCP
|
|
438
|
+
std::min(static_cast<int>(_maxSendPacketSize), static_cast<int>(buf.b.end() - buf.i));
|
|
439
|
+
#else
|
|
440
|
+
static_cast<int>(buf.b.end() - buf.i);
|
|
441
|
+
#endif
|
|
350
442
|
while(buf.i != buf.b.end())
|
|
351
443
|
{
|
|
352
444
|
ERR_clear_error(); // Clear any spurious errors.
|
|
445
|
+
#ifdef ICE_USE_IOCP
|
|
446
|
+
int ret;
|
|
447
|
+
if(_sentBytes)
|
|
448
|
+
{
|
|
449
|
+
ret = _sentBytes;
|
|
450
|
+
_sentBytes = 0;
|
|
451
|
+
}
|
|
452
|
+
else
|
|
453
|
+
{
|
|
454
|
+
ret = SSL_write(_ssl, reinterpret_cast<const void*>(&*buf.i), packetSize);
|
|
455
|
+
if(ret > 0)
|
|
456
|
+
{
|
|
457
|
+
if(!send())
|
|
458
|
+
{
|
|
459
|
+
_sentBytes = ret;
|
|
460
|
+
return IceInternal::SocketOperationWrite;
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
#else
|
|
353
465
|
int ret = SSL_write(_ssl, reinterpret_cast<const void*>(&*buf.i), packetSize);
|
|
466
|
+
#endif
|
|
354
467
|
if(ret <= 0)
|
|
355
468
|
{
|
|
356
469
|
switch(SSL_get_error(_ssl, ret))
|
|
@@ -371,10 +484,18 @@ IceSSL::TransceiverI::write(IceInternal::Buffer& buf)
|
|
|
371
484
|
}
|
|
372
485
|
case SSL_ERROR_WANT_WRITE:
|
|
373
486
|
{
|
|
487
|
+
#ifdef ICE_USE_IOCP
|
|
488
|
+
if(send())
|
|
489
|
+
{
|
|
490
|
+
continue;
|
|
491
|
+
}
|
|
492
|
+
#endif
|
|
374
493
|
return IceInternal::SocketOperationWrite;
|
|
375
494
|
}
|
|
376
495
|
case SSL_ERROR_SYSCALL:
|
|
377
496
|
{
|
|
497
|
+
#ifndef ICE_USE_IOCP
|
|
498
|
+
|
|
378
499
|
if(IceInternal::interrupted())
|
|
379
500
|
{
|
|
380
501
|
continue;
|
|
@@ -391,7 +512,7 @@ IceSSL::TransceiverI::write(IceInternal::Buffer& buf)
|
|
|
391
512
|
assert(SSL_want_write(_ssl));
|
|
392
513
|
return IceInternal::SocketOperationWrite;
|
|
393
514
|
}
|
|
394
|
-
|
|
515
|
+
#endif
|
|
395
516
|
if(IceInternal::connectionLost() || IceInternal::getSocketErrno() == 0)
|
|
396
517
|
{
|
|
397
518
|
ConnectionLostException ex(__FILE__, __LINE__);
|
|
@@ -421,21 +542,29 @@ IceSSL::TransceiverI::write(IceInternal::Buffer& buf)
|
|
|
421
542
|
packetSize = static_cast<int>(buf.b.end() - buf.i);
|
|
422
543
|
}
|
|
423
544
|
}
|
|
424
|
-
|
|
425
545
|
return IceInternal::SocketOperationNone;
|
|
426
546
|
}
|
|
427
547
|
|
|
428
548
|
IceInternal::SocketOperation
|
|
429
|
-
|
|
549
|
+
OpenSSL::TransceiverI::read(IceInternal::Buffer& buf)
|
|
430
550
|
{
|
|
431
|
-
if(!
|
|
551
|
+
if(!_connected)
|
|
552
|
+
{
|
|
553
|
+
return _delegate->read(buf);
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
#ifdef ICE_USE_IOCP
|
|
557
|
+
if(_readBuffer.i != _readBuffer.b.end())
|
|
432
558
|
{
|
|
433
|
-
|
|
559
|
+
if(!receive())
|
|
560
|
+
{
|
|
561
|
+
return IceInternal::SocketOperationRead;
|
|
562
|
+
}
|
|
434
563
|
}
|
|
564
|
+
#endif
|
|
435
565
|
|
|
436
566
|
//
|
|
437
|
-
// Note:
|
|
438
|
-
// We assume that OpenSSL doesn't read more SSL records than
|
|
567
|
+
// Note: We assume that OpenSSL doesn't read more SSL records than
|
|
439
568
|
// necessary to fill the requested data and that the sender sends
|
|
440
569
|
// Ice messages in individual SSL records.
|
|
441
570
|
//
|
|
@@ -445,6 +574,8 @@ IceSSL::TransceiverI::read(IceInternal::Buffer& buf, bool& hasMoreData)
|
|
|
445
574
|
return IceInternal::SocketOperationNone;
|
|
446
575
|
}
|
|
447
576
|
|
|
577
|
+
_delegate->getNativeInfo()->ready(IceInternal::SocketOperationRead, false);
|
|
578
|
+
|
|
448
579
|
//
|
|
449
580
|
// It's impossible for packetSize to be more than an Int.
|
|
450
581
|
//
|
|
@@ -470,6 +601,12 @@ IceSSL::TransceiverI::read(IceInternal::Buffer& buf, bool& hasMoreData)
|
|
|
470
601
|
}
|
|
471
602
|
case SSL_ERROR_WANT_READ:
|
|
472
603
|
{
|
|
604
|
+
#ifdef ICE_USE_IOCP
|
|
605
|
+
if(receive())
|
|
606
|
+
{
|
|
607
|
+
continue;
|
|
608
|
+
}
|
|
609
|
+
#endif
|
|
473
610
|
return IceInternal::SocketOperationRead;
|
|
474
611
|
}
|
|
475
612
|
case SSL_ERROR_WANT_WRITE:
|
|
@@ -479,6 +616,7 @@ IceSSL::TransceiverI::read(IceInternal::Buffer& buf, bool& hasMoreData)
|
|
|
479
616
|
}
|
|
480
617
|
case SSL_ERROR_SYSCALL:
|
|
481
618
|
{
|
|
619
|
+
#ifndef ICE_USE_IOCP
|
|
482
620
|
if(IceInternal::interrupted())
|
|
483
621
|
{
|
|
484
622
|
continue;
|
|
@@ -495,7 +633,7 @@ IceSSL::TransceiverI::read(IceInternal::Buffer& buf, bool& hasMoreData)
|
|
|
495
633
|
assert(SSL_want_read(_ssl));
|
|
496
634
|
return IceInternal::SocketOperationRead;
|
|
497
635
|
}
|
|
498
|
-
|
|
636
|
+
#endif
|
|
499
637
|
if(IceInternal::connectionLost() || IceInternal::getSocketErrno() == 0)
|
|
500
638
|
{
|
|
501
639
|
ConnectionLostException ex(__FILE__, __LINE__);
|
|
@@ -527,61 +665,199 @@ IceSSL::TransceiverI::read(IceInternal::Buffer& buf, bool& hasMoreData)
|
|
|
527
665
|
}
|
|
528
666
|
|
|
529
667
|
//
|
|
530
|
-
// Check if there's still buffered data to read
|
|
668
|
+
// Check if there's still buffered data to read, set the read ready status.
|
|
531
669
|
//
|
|
532
|
-
|
|
670
|
+
_delegate->getNativeInfo()->ready(IceInternal::SocketOperationRead, SSL_pending(_ssl) > 0);
|
|
533
671
|
|
|
534
672
|
return IceInternal::SocketOperationNone;
|
|
535
673
|
}
|
|
536
674
|
|
|
537
|
-
|
|
538
|
-
|
|
675
|
+
#ifdef ICE_USE_IOCP
|
|
676
|
+
|
|
677
|
+
bool
|
|
678
|
+
OpenSSL::TransceiverI::startWrite(IceInternal::Buffer& buffer)
|
|
539
679
|
{
|
|
540
|
-
|
|
680
|
+
if(!_connected)
|
|
681
|
+
{
|
|
682
|
+
return _delegate->startWrite(buffer);
|
|
683
|
+
}
|
|
684
|
+
|
|
685
|
+
if(_writeBuffer.i == _writeBuffer.b.end())
|
|
686
|
+
{
|
|
687
|
+
assert(_sentBytes == 0);
|
|
688
|
+
int packetSize = std::min(static_cast<int>(_maxSendPacketSize), static_cast<int>(buffer.b.end() - buffer.i));
|
|
689
|
+
_sentBytes = SSL_write(_ssl, reinterpret_cast<void*>(&*buffer.i), packetSize);
|
|
690
|
+
|
|
691
|
+
assert(BIO_ctrl_pending(_iocpBio));
|
|
692
|
+
_writeBuffer.b.resize( BIO_ctrl_pending(_iocpBio));
|
|
693
|
+
_writeBuffer.i = _writeBuffer.b.begin();
|
|
694
|
+
BIO_read(_iocpBio, _writeBuffer.i, static_cast<int>(_writeBuffer.b.size()));
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
return _delegate->startWrite(_writeBuffer) && buffer.i == buffer.b.end();
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
void
|
|
701
|
+
OpenSSL::TransceiverI::finishWrite(IceInternal::Buffer& buffer)
|
|
702
|
+
{
|
|
703
|
+
if(!_connected)
|
|
704
|
+
{
|
|
705
|
+
_delegate->finishWrite(buffer);
|
|
706
|
+
return;
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
_delegate->finishWrite(_writeBuffer);
|
|
710
|
+
if(_sentBytes)
|
|
711
|
+
{
|
|
712
|
+
buffer.i += _sentBytes;
|
|
713
|
+
_sentBytes = 0;
|
|
714
|
+
}
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
void
|
|
718
|
+
OpenSSL::TransceiverI::startRead(IceInternal::Buffer& buffer)
|
|
719
|
+
{
|
|
720
|
+
if(!_connected)
|
|
721
|
+
{
|
|
722
|
+
_delegate->startRead(buffer);
|
|
723
|
+
return;
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
if(_readBuffer.i == _readBuffer.b.end())
|
|
727
|
+
{
|
|
728
|
+
assert(!buffer.b.empty() && buffer.i != buffer.b.end());
|
|
729
|
+
ERR_clear_error(); // Clear any spurious errors.
|
|
730
|
+
#ifndef NDEBUG
|
|
731
|
+
int ret =
|
|
732
|
+
#endif
|
|
733
|
+
SSL_read(_ssl, reinterpret_cast<void*>(&*buffer.i), static_cast<int>(buffer.b.end() - buffer.i));
|
|
734
|
+
assert(ret <= 0 && SSL_get_error(_ssl, ret) == SSL_ERROR_WANT_READ);
|
|
735
|
+
|
|
736
|
+
assert(BIO_ctrl_get_read_request(_iocpBio));
|
|
737
|
+
_readBuffer.b.resize(BIO_ctrl_get_read_request(_iocpBio));
|
|
738
|
+
_readBuffer.i = _readBuffer.b.begin();
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
assert(!_readBuffer.b.empty() && _readBuffer.i != _readBuffer.b.end());
|
|
742
|
+
|
|
743
|
+
_delegate->startRead(_readBuffer);
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
void
|
|
747
|
+
OpenSSL::TransceiverI::finishRead(IceInternal::Buffer& buffer)
|
|
748
|
+
{
|
|
749
|
+
if(!_connected)
|
|
750
|
+
{
|
|
751
|
+
_delegate->finishRead(buffer);
|
|
752
|
+
return;
|
|
753
|
+
}
|
|
754
|
+
|
|
755
|
+
_delegate->finishRead(_readBuffer);
|
|
756
|
+
if(_readBuffer.i == _readBuffer.b.end())
|
|
757
|
+
{
|
|
758
|
+
int n = BIO_write(_iocpBio, _readBuffer.b.begin(), static_cast<int>(_readBuffer.b.size()));
|
|
759
|
+
if(n < 0) // Expected if the transceiver was closed.
|
|
760
|
+
{
|
|
761
|
+
SecurityException ex(__FILE__, __LINE__);
|
|
762
|
+
ex.reason = "SSL bio write failed";
|
|
763
|
+
throw ex;
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
assert(n == static_cast<int>(_readBuffer.b.size()));
|
|
767
|
+
ERR_clear_error(); // Clear any spurious errors.
|
|
768
|
+
int ret = SSL_read(_ssl, reinterpret_cast<void*>(&*buffer.i), static_cast<int>(buffer.b.end() - buffer.i));
|
|
769
|
+
if(ret <= 0)
|
|
770
|
+
{
|
|
771
|
+
switch(SSL_get_error(_ssl, ret))
|
|
772
|
+
{
|
|
773
|
+
case SSL_ERROR_NONE:
|
|
774
|
+
case SSL_ERROR_WANT_WRITE:
|
|
775
|
+
{
|
|
776
|
+
assert(false);
|
|
777
|
+
return;
|
|
778
|
+
}
|
|
779
|
+
case SSL_ERROR_ZERO_RETURN:
|
|
780
|
+
{
|
|
781
|
+
ConnectionLostException ex(__FILE__, __LINE__);
|
|
782
|
+
ex.error = 0;
|
|
783
|
+
throw ex;
|
|
784
|
+
}
|
|
785
|
+
case SSL_ERROR_WANT_READ:
|
|
786
|
+
{
|
|
787
|
+
return;
|
|
788
|
+
}
|
|
789
|
+
case SSL_ERROR_SYSCALL:
|
|
790
|
+
{
|
|
791
|
+
if(IceInternal::connectionLost() || IceInternal::getSocketErrno() == 0)
|
|
792
|
+
{
|
|
793
|
+
ConnectionLostException ex(__FILE__, __LINE__);
|
|
794
|
+
ex.error = IceInternal::getSocketErrno();
|
|
795
|
+
throw ex;
|
|
796
|
+
}
|
|
797
|
+
else
|
|
798
|
+
{
|
|
799
|
+
SocketException ex(__FILE__, __LINE__);
|
|
800
|
+
ex.error = IceInternal::getSocketErrno();
|
|
801
|
+
throw ex;
|
|
802
|
+
}
|
|
803
|
+
}
|
|
804
|
+
case SSL_ERROR_SSL:
|
|
805
|
+
{
|
|
806
|
+
ProtocolException ex(__FILE__, __LINE__);
|
|
807
|
+
ex.reason = "SSL protocol error during read:\n" + _engine->sslErrors();
|
|
808
|
+
throw ex;
|
|
809
|
+
}
|
|
810
|
+
}
|
|
811
|
+
}
|
|
812
|
+
buffer.i += ret;
|
|
813
|
+
}
|
|
541
814
|
}
|
|
815
|
+
#endif
|
|
542
816
|
|
|
543
817
|
string
|
|
544
|
-
|
|
818
|
+
OpenSSL::TransceiverI::protocol() const
|
|
545
819
|
{
|
|
546
|
-
return
|
|
820
|
+
return _instance->protocol();
|
|
547
821
|
}
|
|
548
822
|
|
|
549
823
|
string
|
|
550
|
-
|
|
824
|
+
OpenSSL::TransceiverI::toString() const
|
|
551
825
|
{
|
|
552
|
-
return toString();
|
|
826
|
+
return _delegate->toString();
|
|
553
827
|
}
|
|
554
828
|
|
|
555
|
-
|
|
556
|
-
|
|
829
|
+
string
|
|
830
|
+
OpenSSL::TransceiverI::toDetailedString() const
|
|
557
831
|
{
|
|
558
|
-
|
|
559
|
-
fillConnectionInfo(info, info->nativeCerts);
|
|
560
|
-
return info;
|
|
832
|
+
return toString();
|
|
561
833
|
}
|
|
562
834
|
|
|
563
835
|
Ice::ConnectionInfoPtr
|
|
564
|
-
|
|
836
|
+
OpenSSL::TransceiverI::getInfo() const
|
|
565
837
|
{
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
info->
|
|
838
|
+
ConnectionInfoPtr info = ICE_MAKE_SHARED(ConnectionInfo);
|
|
839
|
+
info->underlying = _delegate->getInfo();
|
|
840
|
+
info->incoming = _incoming;
|
|
841
|
+
info->adapterName = _adapterName;
|
|
842
|
+
info->cipher = _cipher;
|
|
843
|
+
info->certs = _certs;
|
|
844
|
+
info->verified = _verified;
|
|
569
845
|
return info;
|
|
570
846
|
}
|
|
571
847
|
|
|
572
848
|
void
|
|
573
|
-
|
|
849
|
+
OpenSSL::TransceiverI::checkSendSize(const IceInternal::Buffer&)
|
|
574
850
|
{
|
|
575
851
|
}
|
|
576
852
|
|
|
577
853
|
void
|
|
578
|
-
|
|
854
|
+
OpenSSL::TransceiverI::setBufferSize(int rcvSize, int sndSize)
|
|
579
855
|
{
|
|
580
|
-
|
|
856
|
+
_delegate->setBufferSize(rcvSize, sndSize);
|
|
581
857
|
}
|
|
582
858
|
|
|
583
859
|
int
|
|
584
|
-
|
|
860
|
+
OpenSSL::TransceiverI::verifyCallback(int ok, X509_STORE_CTX* c)
|
|
585
861
|
{
|
|
586
862
|
if(!ok && _engine->securityTraceLevel() >= 1)
|
|
587
863
|
{
|
|
@@ -608,10 +884,11 @@ IceSSL::TransceiverI::verifyCallback(int ok, X509_STORE_CTX* c)
|
|
|
608
884
|
STACK_OF(X509)* chain = X509_STORE_CTX_get1_chain(c);
|
|
609
885
|
if(chain != 0)
|
|
610
886
|
{
|
|
611
|
-
|
|
887
|
+
_certs.clear();
|
|
612
888
|
for(int i = 0; i < sk_X509_num(chain); ++i)
|
|
613
889
|
{
|
|
614
|
-
|
|
890
|
+
CertificatePtr cert = OpenSSL::Certificate::create(X509_dup(sk_X509_value(chain, i)));
|
|
891
|
+
_certs.push_back(cert);
|
|
615
892
|
}
|
|
616
893
|
sk_X509_pop_free(chain, X509_free);
|
|
617
894
|
}
|
|
@@ -625,47 +902,81 @@ IceSSL::TransceiverI::verifyCallback(int ok, X509_STORE_CTX* c)
|
|
|
625
902
|
return 1;
|
|
626
903
|
}
|
|
627
904
|
|
|
628
|
-
|
|
629
|
-
|
|
905
|
+
OpenSSL::TransceiverI::TransceiverI(const InstancePtr& instance,
|
|
906
|
+
const IceInternal::TransceiverPtr& delegate,
|
|
907
|
+
const string& hostOrAdapterName,
|
|
908
|
+
bool incoming) :
|
|
630
909
|
_instance(instance),
|
|
631
|
-
_engine(
|
|
910
|
+
_engine(OpenSSL::SSLEnginePtr::dynamicCast(instance->engine())),
|
|
632
911
|
_host(incoming ? "" : hostOrAdapterName),
|
|
633
912
|
_adapterName(incoming ? hostOrAdapterName : ""),
|
|
634
913
|
_incoming(incoming),
|
|
635
|
-
|
|
914
|
+
_delegate(delegate),
|
|
915
|
+
_connected(false),
|
|
636
916
|
_verified(false),
|
|
637
917
|
_ssl(0)
|
|
918
|
+
#ifdef ICE_USE_IOCP
|
|
919
|
+
, _iocpBio(0),
|
|
920
|
+
_sentBytes(0),
|
|
921
|
+
_maxSendPacketSize(0),
|
|
922
|
+
_maxRecvPacketSize(0)
|
|
923
|
+
#endif
|
|
638
924
|
{
|
|
639
925
|
}
|
|
640
926
|
|
|
641
|
-
|
|
927
|
+
OpenSSL::TransceiverI::~TransceiverI()
|
|
642
928
|
{
|
|
643
929
|
}
|
|
644
930
|
|
|
645
|
-
|
|
646
|
-
|
|
931
|
+
#ifdef ICE_USE_IOCP
|
|
932
|
+
bool
|
|
933
|
+
OpenSSL::TransceiverI::receive()
|
|
647
934
|
{
|
|
648
|
-
|
|
649
|
-
info->remotePort);
|
|
650
|
-
if(_stream->fd() != INVALID_SOCKET)
|
|
935
|
+
if(_readBuffer.i == _readBuffer.b.end())
|
|
651
936
|
{
|
|
652
|
-
|
|
653
|
-
|
|
937
|
+
assert(BIO_ctrl_get_read_request(_iocpBio));
|
|
938
|
+
_readBuffer.b.resize(BIO_ctrl_get_read_request(_iocpBio));
|
|
939
|
+
_readBuffer.i = _readBuffer.b.begin();
|
|
654
940
|
}
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
941
|
+
|
|
942
|
+
while(_readBuffer.i != _readBuffer.b.end())
|
|
943
|
+
{
|
|
944
|
+
if(_delegate->read(_readBuffer) != IceInternal::SocketOperationNone)
|
|
945
|
+
{
|
|
946
|
+
return false;
|
|
947
|
+
}
|
|
948
|
+
}
|
|
949
|
+
|
|
950
|
+
assert(_readBuffer.i == _readBuffer.b.end());
|
|
951
|
+
|
|
952
|
+
#ifndef NDEBUG
|
|
953
|
+
int n =
|
|
954
|
+
#endif
|
|
955
|
+
BIO_write(_iocpBio, &_readBuffer.b[0], static_cast<int>(_readBuffer.b.end() - _readBuffer.b.begin()));
|
|
956
|
+
|
|
957
|
+
assert(n == static_cast<int>(_readBuffer.b.end() - _readBuffer.b.begin()));
|
|
958
|
+
|
|
959
|
+
return true;
|
|
960
|
+
}
|
|
961
|
+
|
|
962
|
+
bool
|
|
963
|
+
OpenSSL::TransceiverI::send()
|
|
964
|
+
{
|
|
965
|
+
if(_writeBuffer.i == _writeBuffer.b.end())
|
|
660
966
|
{
|
|
661
|
-
|
|
967
|
+
assert(BIO_ctrl_pending(_iocpBio));
|
|
968
|
+
_writeBuffer.b.resize( BIO_ctrl_pending(_iocpBio));
|
|
969
|
+
_writeBuffer.i = _writeBuffer.b.begin();
|
|
970
|
+
BIO_read(_iocpBio, _writeBuffer.i, static_cast<int>(_writeBuffer.b.size()));
|
|
662
971
|
}
|
|
663
|
-
|
|
972
|
+
|
|
973
|
+
if(_writeBuffer.i != _writeBuffer.b.end())
|
|
664
974
|
{
|
|
665
|
-
|
|
975
|
+
if(_delegate->write(_writeBuffer) != IceInternal::SocketOperationNone)
|
|
976
|
+
{
|
|
977
|
+
return false;
|
|
978
|
+
}
|
|
666
979
|
}
|
|
667
|
-
|
|
668
|
-
info->incoming = _incoming;
|
|
980
|
+
return _writeBuffer.i == _writeBuffer.b.end();
|
|
669
981
|
}
|
|
670
|
-
|
|
671
982
|
#endif
|