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
|
@@ -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.
|
|
@@ -15,93 +15,123 @@
|
|
|
15
15
|
#include <Ice/ProtocolPluginFacade.h>
|
|
16
16
|
#include <Ice/ProtocolInstance.h>
|
|
17
17
|
#include <Ice/LocalException.h>
|
|
18
|
+
#include <Ice/RegisterPlugins.h>
|
|
18
19
|
|
|
19
20
|
using namespace std;
|
|
20
21
|
using namespace Ice;
|
|
21
22
|
using namespace IceSSL;
|
|
22
23
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
//
|
|
26
|
-
extern "C"
|
|
24
|
+
#ifndef ICE_CPP11_MAPPING
|
|
25
|
+
CertificateVerifier::~CertificateVerifier()
|
|
27
26
|
{
|
|
28
|
-
|
|
29
|
-
ICE_SSL_API Ice::Plugin*
|
|
30
|
-
createIceSSL(const CommunicatorPtr& communicator, const string& /*name*/, const StringSeq& /*args*/)
|
|
31
|
-
{
|
|
32
|
-
return new PluginI(communicator);
|
|
27
|
+
// Out of line to avoid weak vtable
|
|
33
28
|
}
|
|
34
29
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
namespace Ice
|
|
38
|
-
{
|
|
39
|
-
|
|
40
|
-
ICE_SSL_API void
|
|
41
|
-
registerIceSSL(bool loadOnInitialize)
|
|
30
|
+
PasswordPrompt::~PasswordPrompt()
|
|
42
31
|
{
|
|
43
|
-
|
|
32
|
+
// Out of line to avoid weak vtable
|
|
44
33
|
}
|
|
34
|
+
#endif
|
|
45
35
|
|
|
36
|
+
IceSSL::Plugin::~Plugin()
|
|
37
|
+
{
|
|
38
|
+
// Out of line to avoid weak vtable
|
|
46
39
|
}
|
|
47
40
|
|
|
48
41
|
//
|
|
49
42
|
// Plugin implementation.
|
|
50
43
|
//
|
|
51
|
-
|
|
44
|
+
PluginI::PluginI(const Ice::CommunicatorPtr& com, const SSLEnginePtr& engine) :
|
|
45
|
+
_engine(engine)
|
|
52
46
|
{
|
|
53
|
-
#if defined(ICE_USE_SECURE_TRANSPORT)
|
|
54
|
-
_engine = new SecureTransportEngine(com);
|
|
55
|
-
#elif defined(ICE_USE_SCHANNEL)
|
|
56
|
-
_engine = new SChannelEngine(com);
|
|
57
|
-
#else
|
|
58
|
-
_engine = new OpenSSLEngine(com);
|
|
59
|
-
#endif
|
|
60
|
-
|
|
61
47
|
//
|
|
62
48
|
// Register the endpoint factory. We have to do this now, rather
|
|
63
49
|
// than in initialize, because the communicator may need to
|
|
64
50
|
// interpret proxies before the plug-in is fully initialized.
|
|
65
51
|
//
|
|
66
|
-
|
|
67
|
-
IceInternal::getProtocolPluginFacade(com)->addEndpointFactory(
|
|
52
|
+
InstancePtr instance = new Instance(_engine, SSLEndpointType, "ssl"); // SSL based on TCP
|
|
53
|
+
IceInternal::getProtocolPluginFacade(com)->addEndpointFactory(new EndpointFactoryI(instance, TCPEndpointType));
|
|
68
54
|
}
|
|
69
55
|
|
|
70
56
|
void
|
|
71
|
-
|
|
57
|
+
PluginI::initialize()
|
|
72
58
|
{
|
|
73
59
|
_engine->initialize();
|
|
74
60
|
}
|
|
75
61
|
|
|
76
62
|
void
|
|
77
|
-
|
|
63
|
+
PluginI::destroy()
|
|
78
64
|
{
|
|
79
65
|
_engine->destroy();
|
|
80
66
|
_engine = 0;
|
|
81
67
|
}
|
|
82
68
|
|
|
69
|
+
#ifdef ICE_CPP11_MAPPING
|
|
83
70
|
void
|
|
84
|
-
|
|
71
|
+
PluginI::setCertificateVerifier(std::function<bool(const std::shared_ptr<IceSSL::ConnectionInfo>&)> verifier)
|
|
72
|
+
{
|
|
73
|
+
if(verifier)
|
|
74
|
+
{
|
|
75
|
+
_engine->setCertificateVerifier(make_shared<CertificateVerifier>(std::move(verifier)));
|
|
76
|
+
}
|
|
77
|
+
else
|
|
78
|
+
{
|
|
79
|
+
_engine->setCertificateVerifier(nullptr);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
#else
|
|
83
|
+
void
|
|
84
|
+
PluginI::setCertificateVerifier(const CertificateVerifierPtr& verifier)
|
|
85
85
|
{
|
|
86
86
|
_engine->setCertificateVerifier(verifier);
|
|
87
87
|
}
|
|
88
|
+
#endif
|
|
88
89
|
|
|
90
|
+
#ifdef ICE_CPP11_MAPPING
|
|
89
91
|
void
|
|
90
|
-
|
|
92
|
+
PluginI::setPasswordPrompt(std::function<std::string()> prompt)
|
|
93
|
+
{
|
|
94
|
+
if(prompt)
|
|
95
|
+
{
|
|
96
|
+
_engine->setPasswordPrompt(make_shared<PasswordPrompt>(std::move(prompt)));
|
|
97
|
+
}
|
|
98
|
+
else
|
|
99
|
+
{
|
|
100
|
+
_engine->setPasswordPrompt(nullptr);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
#else
|
|
104
|
+
void
|
|
105
|
+
PluginI::setPasswordPrompt(const PasswordPromptPtr& prompt)
|
|
91
106
|
{
|
|
92
107
|
_engine->setPasswordPrompt(prompt);
|
|
93
108
|
}
|
|
109
|
+
#endif
|
|
94
110
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
111
|
+
extern "C"
|
|
112
|
+
{
|
|
113
|
+
|
|
114
|
+
ICESSL_API Ice::Plugin*
|
|
115
|
+
createIceSSL(const CommunicatorPtr&, const string&, const StringSeq&);
|
|
116
|
+
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
namespace Ice
|
|
120
|
+
{
|
|
121
|
+
|
|
122
|
+
ICESSL_API void
|
|
123
|
+
registerIceSSL(bool loadOnInitialize)
|
|
98
124
|
{
|
|
99
|
-
|
|
125
|
+
Ice::registerPluginFactory("IceSSL", createIceSSL, loadOnInitialize);
|
|
100
126
|
}
|
|
101
127
|
|
|
102
|
-
|
|
103
|
-
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
//
|
|
131
|
+
// Objective-C function to allow Objective-C programs to register plugin.
|
|
132
|
+
//
|
|
133
|
+
extern "C" ICESSL_API void
|
|
134
|
+
ICEregisterIceSSL(bool loadOnInitialize)
|
|
104
135
|
{
|
|
105
|
-
|
|
136
|
+
Ice::registerIceSSL(loadOnInitialize);
|
|
106
137
|
}
|
|
107
|
-
#endif
|
|
@@ -1,14 +1,14 @@
|
|
|
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.
|
|
7
7
|
//
|
|
8
8
|
// **********************************************************************
|
|
9
9
|
|
|
10
|
-
#ifndef
|
|
11
|
-
#define
|
|
10
|
+
#ifndef ICESSL_PLUGIN_I_H
|
|
11
|
+
#define ICESSL_PLUGIN_I_H
|
|
12
12
|
|
|
13
13
|
#include <IceSSL/Plugin.h>
|
|
14
14
|
#include <IceSSL/SSLEngineF.h>
|
|
@@ -17,12 +17,11 @@
|
|
|
17
17
|
namespace IceSSL
|
|
18
18
|
{
|
|
19
19
|
|
|
20
|
-
class PluginI : public IceSSL::Plugin
|
|
20
|
+
class ICESSL_API PluginI : public virtual IceSSL::Plugin
|
|
21
21
|
{
|
|
22
22
|
public:
|
|
23
23
|
|
|
24
|
-
PluginI(const Ice::CommunicatorPtr&);
|
|
25
|
-
|
|
24
|
+
PluginI(const Ice::CommunicatorPtr&, const IceSSL::SSLEnginePtr&);
|
|
26
25
|
//
|
|
27
26
|
// From Ice::Plugin.
|
|
28
27
|
//
|
|
@@ -32,23 +31,19 @@ public:
|
|
|
32
31
|
//
|
|
33
32
|
// From IceSSL::Plugin.
|
|
34
33
|
//
|
|
34
|
+
#ifdef ICE_CPP11_MAPPING
|
|
35
|
+
virtual void setCertificateVerifier(std::function<bool(const std::shared_ptr<ConnectionInfo>&)>);
|
|
36
|
+
virtual void setPasswordPrompt(std::function<std::string()>);
|
|
37
|
+
#else
|
|
35
38
|
virtual void setCertificateVerifier(const CertificateVerifierPtr&);
|
|
36
39
|
virtual void setPasswordPrompt(const PasswordPromptPtr&);
|
|
37
|
-
|
|
38
|
-
#ifdef ICE_USE_OPENSSL
|
|
39
|
-
virtual void setContext(SSL_CTX*);
|
|
40
|
-
virtual SSL_CTX* getContext();
|
|
41
40
|
#endif
|
|
42
41
|
|
|
43
|
-
|
|
42
|
+
virtual CertificatePtr load(const std::string&) const = 0;
|
|
43
|
+
virtual CertificatePtr decode(const std::string&) const = 0;
|
|
44
|
+
protected:
|
|
44
45
|
|
|
45
|
-
|
|
46
|
-
SecureTransportEnginePtr _engine;
|
|
47
|
-
#elif defined(ICE_USE_SCHANNEL)
|
|
48
|
-
SChannelEnginePtr _engine;
|
|
49
|
-
#else
|
|
50
|
-
OpenSSLEnginePtr _engine;
|
|
51
|
-
#endif
|
|
46
|
+
SSLEnginePtr _engine;
|
|
52
47
|
};
|
|
53
48
|
|
|
54
49
|
}
|
|
@@ -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.
|
|
@@ -37,8 +37,8 @@ static string parsePair(const string&, size_t&);
|
|
|
37
37
|
static string parseHexPair(const string&, size_t&, bool);
|
|
38
38
|
static void eatWhite(const string&, size_t&);
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
RFC2253::RDNEntrySeq
|
|
41
|
+
RFC2253::parse(const string& data)
|
|
42
42
|
{
|
|
43
43
|
RDNEntrySeq results;
|
|
44
44
|
RDNEntry current;
|
|
@@ -82,8 +82,8 @@ IceSSL::RFC2253::parse(const string& data)
|
|
|
82
82
|
return results;
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
-
|
|
86
|
-
|
|
85
|
+
RFC2253::RDNSeq
|
|
86
|
+
RFC2253::parseStrict(const string& data)
|
|
87
87
|
{
|
|
88
88
|
RDNSeq results;
|
|
89
89
|
size_t pos = 0;
|
|
@@ -104,7 +104,7 @@ IceSSL::RFC2253::parseStrict(const string& data)
|
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
string
|
|
107
|
-
|
|
107
|
+
RFC2253::unescape(const string& data)
|
|
108
108
|
{
|
|
109
109
|
if(data.size() == 0)
|
|
110
110
|
{
|
|
@@ -271,7 +271,7 @@ parseAttributeType(const string& data, size_t& pos)
|
|
|
271
271
|
//
|
|
272
272
|
// Here we must also check for "oid." and "OID." before parsing
|
|
273
273
|
// according to the ALPHA KEYCHAR* rule.
|
|
274
|
-
//
|
|
274
|
+
//
|
|
275
275
|
// First the OID case.
|
|
276
276
|
//
|
|
277
277
|
if(IceUtilInternal::isDigit(data[pos]) ||
|
|
@@ -318,7 +318,7 @@ parseAttributeType(const string& data, size_t& pos)
|
|
|
318
318
|
result += data[pos];
|
|
319
319
|
++pos;
|
|
320
320
|
// 1* KEYCHAR
|
|
321
|
-
while(pos < data.size() &&
|
|
321
|
+
while(pos < data.size() &&
|
|
322
322
|
(IceUtilInternal::isAlpha(data[pos]) || IceUtilInternal::isDigit(data[pos]) || data[pos] == '-'))
|
|
323
323
|
{
|
|
324
324
|
result += data[pos];
|
|
@@ -448,7 +448,7 @@ parsePair(const string& data, size_t& pos)
|
|
|
448
448
|
}
|
|
449
449
|
return parseHexPair(data, pos, false);
|
|
450
450
|
}
|
|
451
|
-
|
|
451
|
+
|
|
452
452
|
//
|
|
453
453
|
// RFC 2253
|
|
454
454
|
// hexpair = hexchar hexchar
|
|
@@ -494,48 +494,3 @@ eatWhite(const string& data, size_t& pos)
|
|
|
494
494
|
++pos;
|
|
495
495
|
}
|
|
496
496
|
}
|
|
497
|
-
|
|
498
|
-
#ifdef never
|
|
499
|
-
void
|
|
500
|
-
print(const list< list<pair<string, string> > >& r)
|
|
501
|
-
{
|
|
502
|
-
if(r.size() > 1)
|
|
503
|
-
{
|
|
504
|
-
cout << "result: " << r.size() << " DNs" << endl;
|
|
505
|
-
}
|
|
506
|
-
for(list< list<pair<string, string> > >::const_iterator q = r.begin(); q != r.end(); ++q)
|
|
507
|
-
{
|
|
508
|
-
list<pair<string, string> > l = *q;
|
|
509
|
-
cout << "result: " << l.size() << " RDNs" << endl;
|
|
510
|
-
for(list<pair<string, string> >::const_iterator p = l.begin(); p != l.end(); ++p)
|
|
511
|
-
{
|
|
512
|
-
cout << "\t\"" << p->first << "\"=\"" << p->second << "\"" << endl;
|
|
513
|
-
}
|
|
514
|
-
}
|
|
515
|
-
}
|
|
516
|
-
|
|
517
|
-
int
|
|
518
|
-
main()
|
|
519
|
-
{
|
|
520
|
-
string examples[] = {
|
|
521
|
-
"CN=Steve Kille,O=Isode Limited,C=GB",
|
|
522
|
-
"OU=Sales+CN=J. Smith,O=Widget Inc.,C=US",
|
|
523
|
-
"CN=L. Eagle,O=Sue\\, Grabbit and Runn,C=GB",
|
|
524
|
-
"CN=Before\\0DAfter,O=Test,C=GB",
|
|
525
|
-
"1.3.6.1.4.1.1466.0=#04024869,O=Test,C=GB",
|
|
526
|
-
"SN=Lu\\C4\\8Di\\C4\\87",
|
|
527
|
-
};
|
|
528
|
-
try
|
|
529
|
-
{
|
|
530
|
-
for(int i = 0; i < sizeof(examples)/sizeof(examples[0]); ++i)
|
|
531
|
-
{
|
|
532
|
-
cout << "string: " << examples[i] << endl;
|
|
533
|
-
print(RFC2253::parse(examples[i]));
|
|
534
|
-
}
|
|
535
|
-
}
|
|
536
|
-
catch(const RFC2253::ParseException& e)
|
|
537
|
-
{
|
|
538
|
-
cout << "error: " << e.reason << endl;
|
|
539
|
-
}
|
|
540
|
-
}
|
|
541
|
-
#endif
|
|
@@ -1,14 +1,14 @@
|
|
|
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.
|
|
7
7
|
//
|
|
8
8
|
// **********************************************************************
|
|
9
9
|
|
|
10
|
-
#ifndef
|
|
11
|
-
#define
|
|
10
|
+
#ifndef ICESSL_RFC_2253_H
|
|
11
|
+
#define ICESSL_RFC_2253_H
|
|
12
12
|
|
|
13
13
|
#include <IceUtil/Config.h>
|
|
14
14
|
#include <list>
|
|
@@ -33,7 +33,7 @@ namespace RFC2253
|
|
|
33
33
|
|
|
34
34
|
typedef std::list< std::pair<std::string, std::string> > RDNSeq;
|
|
35
35
|
|
|
36
|
-
struct RDNEntry
|
|
36
|
+
struct ICESSL_API RDNEntry
|
|
37
37
|
{
|
|
38
38
|
RDNSeq rdn;
|
|
39
39
|
bool negate;
|
|
@@ -46,7 +46,7 @@ typedef std::list<RDNEntry> RDNEntrySeq;
|
|
|
46
46
|
// The function returns a list of RDNEntry structures. Any failure in
|
|
47
47
|
// parsing results in a ParseException being thrown.
|
|
48
48
|
//
|
|
49
|
-
RDNEntrySeq parse(const std::string&);
|
|
49
|
+
ICESSL_API RDNEntrySeq parse(const std::string&);
|
|
50
50
|
|
|
51
51
|
//
|
|
52
52
|
// RDNs are separated with ',' and ';'.
|
|
@@ -54,12 +54,12 @@ RDNEntrySeq parse(const std::string&);
|
|
|
54
54
|
// This function returns a list of RDN pairs. Any failure in parsing
|
|
55
55
|
// results in a ParseException being thrown.
|
|
56
56
|
//
|
|
57
|
-
RDNSeq parseStrict(const std::string&);
|
|
57
|
+
ICESSL_API RDNSeq parseStrict(const std::string&);
|
|
58
58
|
|
|
59
59
|
//
|
|
60
60
|
// Unescape the string.
|
|
61
61
|
//
|
|
62
|
-
std::string unescape(const std::string&);
|
|
62
|
+
ICESSL_API std::string unescape(const std::string&);
|
|
63
63
|
|
|
64
64
|
}
|
|
65
65
|
}
|
|
@@ -0,0 +1,585 @@
|
|
|
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/Plugin.h>
|
|
11
|
+
#include <IceSSL/SChannel.h>
|
|
12
|
+
#include <IceSSL/CertificateI.h>
|
|
13
|
+
#include <IceSSL/Util.h>
|
|
14
|
+
#include <Ice/StringUtil.h>
|
|
15
|
+
#include <Ice/StringConverter.h>
|
|
16
|
+
|
|
17
|
+
#include <wincrypt.h>
|
|
18
|
+
|
|
19
|
+
#include <string>
|
|
20
|
+
#include <vector>
|
|
21
|
+
|
|
22
|
+
using namespace std;
|
|
23
|
+
using namespace Ice;
|
|
24
|
+
using namespace IceSSL;
|
|
25
|
+
|
|
26
|
+
namespace
|
|
27
|
+
{
|
|
28
|
+
|
|
29
|
+
class CertInfoHolder : public IceUtil::Shared
|
|
30
|
+
{
|
|
31
|
+
public:
|
|
32
|
+
|
|
33
|
+
CertInfoHolder(CERT_INFO* v) : _certInfo(v)
|
|
34
|
+
{
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
virtual ~CertInfoHolder()
|
|
38
|
+
{
|
|
39
|
+
LocalFree(_certInfo);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
private:
|
|
43
|
+
|
|
44
|
+
CERT_INFO* _certInfo;
|
|
45
|
+
};
|
|
46
|
+
typedef IceUtil::Handle<CertInfoHolder> CertInfoHolderPtr;
|
|
47
|
+
|
|
48
|
+
class SCHannelX509ExtensionI : public X509Extension
|
|
49
|
+
{
|
|
50
|
+
|
|
51
|
+
public:
|
|
52
|
+
|
|
53
|
+
SCHannelX509ExtensionI(CERT_EXTENSION , const string&, const CertInfoHolderPtr&);
|
|
54
|
+
virtual bool isCritical() const;
|
|
55
|
+
virtual string getOID() const;
|
|
56
|
+
virtual vector<Ice::Byte> getData() const;
|
|
57
|
+
|
|
58
|
+
private:
|
|
59
|
+
|
|
60
|
+
CERT_EXTENSION _extension;
|
|
61
|
+
string _oid;
|
|
62
|
+
CertInfoHolderPtr _certInfo; // Keep a reference on the CERT_INFO struct that holds the extension
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
class SChannelCertificateI : public SChannel::Certificate,
|
|
66
|
+
public CertificateI,
|
|
67
|
+
public IceUtil::Mutex
|
|
68
|
+
{
|
|
69
|
+
public:
|
|
70
|
+
|
|
71
|
+
SChannelCertificateI(CERT_SIGNED_CONTENT_INFO*);
|
|
72
|
+
~SChannelCertificateI();
|
|
73
|
+
|
|
74
|
+
virtual bool operator==(const IceSSL::Certificate&) const;
|
|
75
|
+
|
|
76
|
+
virtual vector<Ice::Byte> getAuthorityKeyIdentifier() const;
|
|
77
|
+
virtual vector<Ice::Byte> getSubjectKeyIdentifier() const;
|
|
78
|
+
virtual bool verify(const CertificatePtr&) const;
|
|
79
|
+
virtual string encode() const;
|
|
80
|
+
|
|
81
|
+
#ifdef ICE_CPP11_MAPPING
|
|
82
|
+
virtual chrono::system_clock::time_point getNotAfter() const;
|
|
83
|
+
virtual chrono::system_clock::time_point getNotBefore() const;
|
|
84
|
+
#else
|
|
85
|
+
virtual IceUtil::Time getNotAfter() const;
|
|
86
|
+
virtual IceUtil::Time getNotBefore() const;
|
|
87
|
+
#endif
|
|
88
|
+
virtual string getSerialNumber() const;
|
|
89
|
+
virtual DistinguishedName getIssuerDN() const;
|
|
90
|
+
virtual vector<pair<int, string> > getIssuerAlternativeNames() const;
|
|
91
|
+
virtual DistinguishedName getSubjectDN() const;
|
|
92
|
+
virtual vector<pair<int, string> > getSubjectAlternativeNames() const;
|
|
93
|
+
virtual int getVersion() const;
|
|
94
|
+
virtual CERT_SIGNED_CONTENT_INFO* getCert() const;
|
|
95
|
+
|
|
96
|
+
protected:
|
|
97
|
+
|
|
98
|
+
virtual void loadX509Extensions() const;
|
|
99
|
+
|
|
100
|
+
private:
|
|
101
|
+
|
|
102
|
+
CERT_SIGNED_CONTENT_INFO* _cert;
|
|
103
|
+
CERT_INFO* _certInfo;
|
|
104
|
+
CertInfoHolderPtr _certInfoHolder;
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
const Ice::Long TICKS_PER_MSECOND = 10000LL;
|
|
108
|
+
const Ice::Long MSECS_TO_EPOCH = 11644473600000LL;
|
|
109
|
+
|
|
110
|
+
void
|
|
111
|
+
loadCertificate(PCERT_SIGNED_CONTENT_INFO* cert, const char* buffer, DWORD length)
|
|
112
|
+
{
|
|
113
|
+
DWORD outLength = length;
|
|
114
|
+
vector<BYTE> outBuffer;
|
|
115
|
+
outBuffer.resize(outLength);
|
|
116
|
+
|
|
117
|
+
if(!CryptStringToBinary(buffer, length, CRYPT_STRING_BASE64HEADER, &outBuffer[0], &outLength, 0, 0))
|
|
118
|
+
{
|
|
119
|
+
//
|
|
120
|
+
// Base64 data should always be bigger than binary
|
|
121
|
+
//
|
|
122
|
+
assert(GetLastError() != ERROR_MORE_DATA);
|
|
123
|
+
throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
DWORD decodedLeng = 0;
|
|
127
|
+
if(!CryptDecodeObjectEx(X509_ASN_ENCODING, X509_CERT, &outBuffer[0], outLength, CRYPT_DECODE_ALLOC_FLAG, 0,
|
|
128
|
+
cert, &decodedLeng))
|
|
129
|
+
{
|
|
130
|
+
throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
void
|
|
135
|
+
loadCertificate(PCERT_SIGNED_CONTENT_INFO* cert, const string& file)
|
|
136
|
+
{
|
|
137
|
+
vector<char> buffer;
|
|
138
|
+
readFile(file, buffer);
|
|
139
|
+
if(buffer.empty())
|
|
140
|
+
{
|
|
141
|
+
throw CertificateReadException(__FILE__, __LINE__, "certificate file " + file + " is empty");
|
|
142
|
+
}
|
|
143
|
+
loadCertificate(cert, &buffer[0], static_cast<DWORD>(buffer.size()));
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
# ifdef ICE_CPP11_MAPPING
|
|
147
|
+
chrono::system_clock::time_point
|
|
148
|
+
# else
|
|
149
|
+
IceUtil::Time
|
|
150
|
+
# endif
|
|
151
|
+
filetimeToTime(FILETIME ftime)
|
|
152
|
+
{
|
|
153
|
+
Ice::Long value = 0;
|
|
154
|
+
DWORD* dest = reinterpret_cast<DWORD*>(&value);
|
|
155
|
+
*dest++ = ftime.dwLowDateTime;
|
|
156
|
+
*dest = ftime.dwHighDateTime;
|
|
157
|
+
|
|
158
|
+
IceUtil::Time time = IceUtil::Time::milliSeconds((value / TICKS_PER_MSECOND) - MSECS_TO_EPOCH);
|
|
159
|
+
|
|
160
|
+
# ifdef ICE_CPP11_MAPPING
|
|
161
|
+
return chrono::system_clock::time_point(chrono::microseconds(time.toMicroSeconds()));
|
|
162
|
+
# else
|
|
163
|
+
return time;
|
|
164
|
+
# endif
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
string
|
|
168
|
+
certNameToString(CERT_NAME_BLOB* name)
|
|
169
|
+
{
|
|
170
|
+
assert(name);
|
|
171
|
+
DWORD length = 0;
|
|
172
|
+
if(!(length = CertNameToStr(X509_ASN_ENCODING, name, CERT_OID_NAME_STR|CERT_NAME_STR_REVERSE_FLAG, 0, 0)))
|
|
173
|
+
{
|
|
174
|
+
throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
vector<char> buffer(length);
|
|
178
|
+
if(!CertNameToStr(X509_ASN_ENCODING, name, CERT_OID_NAME_STR|CERT_NAME_STR_REVERSE_FLAG, &buffer[0], length))
|
|
179
|
+
{
|
|
180
|
+
throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
string s(&buffer[0]);
|
|
184
|
+
for(int i = 0; i < certificateOIDSSize; ++i)
|
|
185
|
+
{
|
|
186
|
+
const CertificateOID* certificateOID = &certificateOIDS[i];
|
|
187
|
+
assert(certificateOID);
|
|
188
|
+
const string name = string(certificateOID->name) + "=";
|
|
189
|
+
const string alias = string(certificateOID->alias) + "=";
|
|
190
|
+
size_t pos = 0;
|
|
191
|
+
while((pos = s.find(name, pos)) != string::npos)
|
|
192
|
+
{
|
|
193
|
+
s.replace(pos, name.size(), alias);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return s;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
vector<pair<int, string> >
|
|
200
|
+
certificateAltNames(CERT_INFO* certInfo, LPCSTR altNameOID)
|
|
201
|
+
{
|
|
202
|
+
vector<pair<int, string> > altNames;
|
|
203
|
+
|
|
204
|
+
PCERT_EXTENSION extension = CertFindExtension(altNameOID, certInfo->cExtension, certInfo->rgExtension);
|
|
205
|
+
if(extension)
|
|
206
|
+
{
|
|
207
|
+
CERT_ALT_NAME_INFO* altName;
|
|
208
|
+
DWORD length = 0;
|
|
209
|
+
if(!CryptDecodeObjectEx(X509_ASN_ENCODING, X509_ALTERNATE_NAME, extension->Value.pbData,
|
|
210
|
+
extension->Value.cbData, CRYPT_DECODE_ALLOC_FLAG, 0, &altName, &length))
|
|
211
|
+
{
|
|
212
|
+
throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
for(DWORD i = 0; i < altName->cAltEntry; ++i)
|
|
216
|
+
{
|
|
217
|
+
CERT_ALT_NAME_ENTRY* entry = &altName->rgAltEntry[i];
|
|
218
|
+
|
|
219
|
+
switch(entry->dwAltNameChoice)
|
|
220
|
+
{
|
|
221
|
+
case CERT_ALT_NAME_RFC822_NAME:
|
|
222
|
+
{
|
|
223
|
+
altNames.push_back(make_pair(AltNameEmail, Ice::wstringToString(entry->pwszRfc822Name)));
|
|
224
|
+
break;
|
|
225
|
+
}
|
|
226
|
+
case CERT_ALT_NAME_DNS_NAME:
|
|
227
|
+
{
|
|
228
|
+
altNames.push_back(make_pair(AltNameDNS, Ice::wstringToString(entry->pwszDNSName)));
|
|
229
|
+
break;
|
|
230
|
+
}
|
|
231
|
+
case CERT_ALT_NAME_DIRECTORY_NAME:
|
|
232
|
+
{
|
|
233
|
+
altNames.push_back(make_pair(AltNameDirectory, certNameToString(&entry->DirectoryName)));
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
case CERT_ALT_NAME_URL:
|
|
237
|
+
{
|
|
238
|
+
altNames.push_back(make_pair(AltNameURL, Ice::wstringToString(entry->pwszURL)));
|
|
239
|
+
break;
|
|
240
|
+
}
|
|
241
|
+
case CERT_ALT_NAME_IP_ADDRESS:
|
|
242
|
+
{
|
|
243
|
+
if(entry->IPAddress.cbData == 4)
|
|
244
|
+
{
|
|
245
|
+
//
|
|
246
|
+
// IPv4 address
|
|
247
|
+
//
|
|
248
|
+
ostringstream os;
|
|
249
|
+
Byte* src = reinterpret_cast<Byte*>(entry->IPAddress.pbData);
|
|
250
|
+
for(int j = 0; j < 4;)
|
|
251
|
+
{
|
|
252
|
+
int value = 0;
|
|
253
|
+
Byte* dest = reinterpret_cast<Byte*>(&value);
|
|
254
|
+
*dest = *src++;
|
|
255
|
+
os << value;
|
|
256
|
+
if(++j < 4)
|
|
257
|
+
{
|
|
258
|
+
os << ".";
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
altNames.push_back(make_pair(AltNAmeIP, os.str()));
|
|
262
|
+
}
|
|
263
|
+
//
|
|
264
|
+
// TODO IPv6 Address support.
|
|
265
|
+
//
|
|
266
|
+
break;
|
|
267
|
+
}
|
|
268
|
+
default:
|
|
269
|
+
{
|
|
270
|
+
// Not supported
|
|
271
|
+
break;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
LocalFree(altName);
|
|
276
|
+
}
|
|
277
|
+
return altNames;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
} // End anonymous namespace
|
|
281
|
+
|
|
282
|
+
SCHannelX509ExtensionI::SCHannelX509ExtensionI(CERT_EXTENSION extension, const string& oid, const CertInfoHolderPtr& ci) :
|
|
283
|
+
_extension(extension),
|
|
284
|
+
_oid(oid),
|
|
285
|
+
_certInfo(ci)
|
|
286
|
+
{
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
bool
|
|
290
|
+
SCHannelX509ExtensionI::isCritical() const
|
|
291
|
+
{
|
|
292
|
+
return _extension.fCritical != 0;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
string
|
|
296
|
+
SCHannelX509ExtensionI::getOID() const
|
|
297
|
+
{
|
|
298
|
+
return _oid;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
vector<Ice::Byte>
|
|
302
|
+
SCHannelX509ExtensionI::getData() const
|
|
303
|
+
{
|
|
304
|
+
vector<Ice::Byte> data;
|
|
305
|
+
data.resize(_extension.Value.cbData);
|
|
306
|
+
memcpy(&data[0], _extension.Value.pbData, _extension.Value.cbData);
|
|
307
|
+
return data;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
SChannelCertificateI::SChannelCertificateI(CERT_SIGNED_CONTENT_INFO* cert) :
|
|
311
|
+
_cert(cert)
|
|
312
|
+
{
|
|
313
|
+
if(!_cert)
|
|
314
|
+
{
|
|
315
|
+
#ifdef ICE_CPP11_MAPPING
|
|
316
|
+
throw invalid_argument("Invalid certificate reference");
|
|
317
|
+
#else
|
|
318
|
+
throw IceUtil::IllegalArgumentException(__FILE__, __LINE__, "Invalid certificate reference");
|
|
319
|
+
#endif
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
try
|
|
323
|
+
{
|
|
324
|
+
//
|
|
325
|
+
// Decode certificate info
|
|
326
|
+
//
|
|
327
|
+
DWORD length = 0;
|
|
328
|
+
if(!CryptDecodeObjectEx(X509_ASN_ENCODING, X509_CERT_TO_BE_SIGNED, _cert->ToBeSigned.pbData,
|
|
329
|
+
_cert->ToBeSigned.cbData, CRYPT_DECODE_ALLOC_FLAG, 0, &_certInfo, &length))
|
|
330
|
+
{
|
|
331
|
+
throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
|
|
332
|
+
}
|
|
333
|
+
_certInfoHolder = new CertInfoHolder(_certInfo);
|
|
334
|
+
}
|
|
335
|
+
catch(...)
|
|
336
|
+
{
|
|
337
|
+
LocalFree(_cert);
|
|
338
|
+
_cert = 0;
|
|
339
|
+
throw;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
SChannelCertificateI::~SChannelCertificateI()
|
|
344
|
+
{
|
|
345
|
+
if(_cert)
|
|
346
|
+
{
|
|
347
|
+
LocalFree(_cert);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
bool
|
|
352
|
+
SChannelCertificateI::operator==(const IceSSL::Certificate& r) const
|
|
353
|
+
{
|
|
354
|
+
const SChannelCertificateI* p = dynamic_cast<const SChannelCertificateI*>(&r);
|
|
355
|
+
if(!p)
|
|
356
|
+
{
|
|
357
|
+
return false;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
return CertCompareCertificate(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, _certInfo, p->_certInfo) != 0;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
vector<Ice::Byte>
|
|
364
|
+
SChannelCertificateI::getAuthorityKeyIdentifier() const
|
|
365
|
+
{
|
|
366
|
+
vector<Ice::Byte> keyid;
|
|
367
|
+
PCERT_EXTENSION extension = CertFindExtension(szOID_AUTHORITY_KEY_IDENTIFIER2, _certInfo->cExtension,
|
|
368
|
+
_certInfo->rgExtension);
|
|
369
|
+
if(extension)
|
|
370
|
+
{
|
|
371
|
+
CERT_AUTHORITY_KEY_ID2_INFO* decoded;
|
|
372
|
+
DWORD length = 0;
|
|
373
|
+
if(!CryptDecodeObjectEx(X509_ASN_ENCODING, X509_AUTHORITY_KEY_ID2, extension->Value.pbData,
|
|
374
|
+
extension->Value.cbData, CRYPT_DECODE_ALLOC_FLAG, 0, &decoded, &length))
|
|
375
|
+
{
|
|
376
|
+
throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
if(decoded->KeyId.pbData && decoded->KeyId.cbData)
|
|
380
|
+
{
|
|
381
|
+
keyid.resize(decoded->KeyId.cbData);
|
|
382
|
+
memcpy(&keyid[0], decoded->KeyId.pbData, decoded->KeyId.cbData);
|
|
383
|
+
LocalFree(decoded);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
return keyid;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
vector<Ice::Byte>
|
|
390
|
+
SChannelCertificateI::getSubjectKeyIdentifier() const
|
|
391
|
+
{
|
|
392
|
+
vector<Ice::Byte> keyid;
|
|
393
|
+
PCERT_EXTENSION extension = CertFindExtension(szOID_SUBJECT_KEY_IDENTIFIER, _certInfo->cExtension,
|
|
394
|
+
_certInfo->rgExtension);
|
|
395
|
+
if(extension)
|
|
396
|
+
{
|
|
397
|
+
CRYPT_DATA_BLOB* decoded;
|
|
398
|
+
DWORD length = 0;
|
|
399
|
+
if(!CryptDecodeObjectEx(X509_ASN_ENCODING, szOID_SUBJECT_KEY_IDENTIFIER, extension->Value.pbData,
|
|
400
|
+
extension->Value.cbData, CRYPT_DECODE_ALLOC_FLAG, 0, &decoded, &length))
|
|
401
|
+
{
|
|
402
|
+
throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
if(decoded->pbData && decoded->cbData)
|
|
406
|
+
{
|
|
407
|
+
keyid.resize(decoded->cbData);
|
|
408
|
+
memcpy(&keyid[0], decoded->pbData, decoded->cbData);
|
|
409
|
+
LocalFree(decoded);
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
return keyid;
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
bool
|
|
416
|
+
SChannelCertificateI::verify(const CertificatePtr& cert) const
|
|
417
|
+
{
|
|
418
|
+
bool result = false;
|
|
419
|
+
SChannelCertificateI* c = dynamic_cast<SChannelCertificateI*>(cert.get());
|
|
420
|
+
if(c)
|
|
421
|
+
{
|
|
422
|
+
BYTE* buffer = 0;
|
|
423
|
+
DWORD length = 0;
|
|
424
|
+
if(!CryptEncodeObjectEx(X509_ASN_ENCODING, X509_CERT, _cert, CRYPT_ENCODE_ALLOC_FLAG , 0, &buffer, &length))
|
|
425
|
+
{
|
|
426
|
+
throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
|
|
427
|
+
}
|
|
428
|
+
result = CryptVerifyCertificateSignature(0, X509_ASN_ENCODING, buffer, length, &c->_certInfo->SubjectPublicKeyInfo) != 0;
|
|
429
|
+
LocalFree(buffer);
|
|
430
|
+
}
|
|
431
|
+
return result;
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
string
|
|
435
|
+
SChannelCertificateI::encode() const
|
|
436
|
+
{
|
|
437
|
+
string s;
|
|
438
|
+
DWORD length = 0;
|
|
439
|
+
BYTE* buffer = 0;
|
|
440
|
+
try
|
|
441
|
+
{
|
|
442
|
+
if(!CryptEncodeObjectEx(X509_ASN_ENCODING, X509_CERT, _cert, CRYPT_ENCODE_ALLOC_FLAG , 0, &buffer, &length))
|
|
443
|
+
{
|
|
444
|
+
throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
DWORD encodedLength = 0;
|
|
448
|
+
if(!CryptBinaryToString(buffer, length, CRYPT_STRING_BASE64HEADER | CRYPT_STRING_NOCR, 0, &encodedLength))
|
|
449
|
+
{
|
|
450
|
+
throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
std::vector<char> encoded;
|
|
454
|
+
encoded.resize(encodedLength);
|
|
455
|
+
if(!CryptBinaryToString(buffer, length, CRYPT_STRING_BASE64HEADER | CRYPT_STRING_NOCR, &encoded[0],
|
|
456
|
+
&encodedLength))
|
|
457
|
+
{
|
|
458
|
+
throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
|
|
459
|
+
}
|
|
460
|
+
LocalFree(buffer);
|
|
461
|
+
buffer = 0;
|
|
462
|
+
s.assign(&encoded[0]);
|
|
463
|
+
}
|
|
464
|
+
catch(...)
|
|
465
|
+
{
|
|
466
|
+
if(buffer)
|
|
467
|
+
{
|
|
468
|
+
LocalFree(buffer);
|
|
469
|
+
}
|
|
470
|
+
throw;
|
|
471
|
+
}
|
|
472
|
+
return s;
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
# ifdef ICE_CPP11_MAPPING
|
|
476
|
+
chrono::system_clock::time_point
|
|
477
|
+
# else
|
|
478
|
+
IceUtil::Time
|
|
479
|
+
# endif
|
|
480
|
+
SChannelCertificateI::getNotAfter() const
|
|
481
|
+
{
|
|
482
|
+
return filetimeToTime(_certInfo->NotAfter);
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
# ifdef ICE_CPP11_MAPPING
|
|
486
|
+
chrono::system_clock::time_point
|
|
487
|
+
# else
|
|
488
|
+
IceUtil::Time
|
|
489
|
+
# endif
|
|
490
|
+
SChannelCertificateI::getNotBefore() const
|
|
491
|
+
{
|
|
492
|
+
return filetimeToTime(_certInfo->NotBefore);
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
string
|
|
496
|
+
SChannelCertificateI::getSerialNumber() const
|
|
497
|
+
{
|
|
498
|
+
ostringstream os;
|
|
499
|
+
for(int i = _certInfo->SerialNumber.cbData - 1; i >= 0; --i)
|
|
500
|
+
{
|
|
501
|
+
unsigned char c = _certInfo->SerialNumber.pbData[i];
|
|
502
|
+
os.fill('0');
|
|
503
|
+
os.width(2);
|
|
504
|
+
os << hex << static_cast<int>(c);
|
|
505
|
+
if(i)
|
|
506
|
+
{
|
|
507
|
+
os << ' ';
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
return IceUtilInternal::toUpper(os.str());
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
DistinguishedName
|
|
514
|
+
SChannelCertificateI::getIssuerDN() const
|
|
515
|
+
{
|
|
516
|
+
return DistinguishedName(certNameToString(&_certInfo->Issuer));
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
vector<pair<int, string> >
|
|
520
|
+
SChannelCertificateI::getIssuerAlternativeNames() const
|
|
521
|
+
{
|
|
522
|
+
return certificateAltNames(_certInfo, szOID_ISSUER_ALT_NAME2);
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
DistinguishedName
|
|
526
|
+
SChannelCertificateI::getSubjectDN() const
|
|
527
|
+
{
|
|
528
|
+
return DistinguishedName(certNameToString(&_certInfo->Subject));
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
vector<pair<int, string> >
|
|
532
|
+
SChannelCertificateI::getSubjectAlternativeNames() const
|
|
533
|
+
{
|
|
534
|
+
return certificateAltNames(_certInfo, szOID_SUBJECT_ALT_NAME2);
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
int
|
|
538
|
+
SChannelCertificateI::getVersion() const
|
|
539
|
+
{
|
|
540
|
+
return _certInfo->dwVersion;
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
CERT_SIGNED_CONTENT_INFO*
|
|
544
|
+
SChannelCertificateI::getCert() const
|
|
545
|
+
{
|
|
546
|
+
return _cert;
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
void
|
|
550
|
+
SChannelCertificateI::loadX509Extensions() const
|
|
551
|
+
{
|
|
552
|
+
IceUtil::Mutex::Lock sync(*this);
|
|
553
|
+
if(_extensions.empty())
|
|
554
|
+
{
|
|
555
|
+
for(size_t i = 0; i < _certInfo->cExtension; ++i)
|
|
556
|
+
{
|
|
557
|
+
CERT_EXTENSION ext = _certInfo->rgExtension[i];
|
|
558
|
+
_extensions.push_back(ICE_DYNAMIC_CAST(X509Extension,
|
|
559
|
+
ICE_MAKE_SHARED(SCHannelX509ExtensionI, ext, ext.pszObjId,
|
|
560
|
+
_certInfoHolder)));
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
SChannel::CertificatePtr
|
|
566
|
+
SChannel::Certificate::create(CERT_SIGNED_CONTENT_INFO* cert)
|
|
567
|
+
{
|
|
568
|
+
return ICE_MAKE_SHARED(SChannelCertificateI, cert);
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
SChannel::CertificatePtr
|
|
572
|
+
SChannel::Certificate::load(const std::string& file)
|
|
573
|
+
{
|
|
574
|
+
CERT_SIGNED_CONTENT_INFO* cert;
|
|
575
|
+
loadCertificate(&cert, file);
|
|
576
|
+
return ICE_MAKE_SHARED(SChannelCertificateI, cert);
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
SChannel::CertificatePtr
|
|
580
|
+
SChannel::Certificate::decode(const std::string& encoding)
|
|
581
|
+
{
|
|
582
|
+
CERT_SIGNED_CONTENT_INFO* cert;
|
|
583
|
+
loadCertificate(&cert, encoding.c_str(), static_cast<DWORD>(encoding.size()));
|
|
584
|
+
return ICE_MAKE_SHARED(SChannelCertificateI, cert);
|
|
585
|
+
}
|