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.
|
|
@@ -23,7 +23,7 @@ using namespace Ice;
|
|
|
23
23
|
using namespace IceInternal;
|
|
24
24
|
using namespace IceMX;
|
|
25
25
|
|
|
26
|
-
namespace
|
|
26
|
+
namespace
|
|
27
27
|
{
|
|
28
28
|
|
|
29
29
|
const string suffixes[] =
|
|
@@ -80,7 +80,7 @@ parseRule(const PropertiesPtr& properties, const string& name)
|
|
|
80
80
|
{
|
|
81
81
|
try
|
|
82
82
|
{
|
|
83
|
-
regexps.push_back(
|
|
83
|
+
regexps.push_back(ICE_MAKE_SHARED(MetricsMapI::RegExp, p->first.substr(name.length() + 1), p->second));
|
|
84
84
|
}
|
|
85
85
|
catch(const std::exception&)
|
|
86
86
|
{
|
|
@@ -99,10 +99,10 @@ MetricsMapI::RegExp::RegExp(const string& attribute, const string& regexp) : _at
|
|
|
99
99
|
// No regexp support with MinGW, when MinGW C++11 mode is not experimental
|
|
100
100
|
// we can use std::regex.
|
|
101
101
|
//
|
|
102
|
-
#elif !defined(
|
|
102
|
+
#elif !defined(ICE_CPP11_COMPILER_REGEXP)
|
|
103
103
|
if(regcomp(&_preg, regexp.c_str(), REG_EXTENDED | REG_NOSUB) != 0)
|
|
104
104
|
{
|
|
105
|
-
throw SyscallException(__FILE__, __LINE__);
|
|
105
|
+
throw SyscallException(__FILE__, __LINE__);
|
|
106
106
|
}
|
|
107
107
|
#else
|
|
108
108
|
# if _MSC_VER < 1600
|
|
@@ -120,7 +120,7 @@ MetricsMapI::RegExp::~RegExp()
|
|
|
120
120
|
// No regexp support with MinGW, when MinGW C++11 mode is not experimental
|
|
121
121
|
// we can use std::regex.
|
|
122
122
|
//
|
|
123
|
-
#elif !defined(
|
|
123
|
+
#elif !defined(ICE_CPP11_COMPILER_REGEXP)
|
|
124
124
|
regfree(&_preg);
|
|
125
125
|
#endif
|
|
126
126
|
}
|
|
@@ -134,7 +134,7 @@ MetricsMapI::RegExp::match(const string& value)
|
|
|
134
134
|
// we can use std::regex.
|
|
135
135
|
//
|
|
136
136
|
return false;
|
|
137
|
-
#elif !defined(
|
|
137
|
+
#elif !defined(ICE_CPP11_COMPILER_REGEXP)
|
|
138
138
|
return regexec(&_preg, value.c_str(), 0, 0, 0) == 0;
|
|
139
139
|
#else
|
|
140
140
|
# if _MSC_VER < 1600
|
|
@@ -145,6 +145,11 @@ MetricsMapI::RegExp::match(const string& value)
|
|
|
145
145
|
#endif
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
+
MetricsMapI::~MetricsMapI()
|
|
149
|
+
{
|
|
150
|
+
// Out of line to avoid weak vtable
|
|
151
|
+
}
|
|
152
|
+
|
|
148
153
|
MetricsMapI::MetricsMapI(const std::string& mapPrefix, const PropertiesPtr& properties) :
|
|
149
154
|
_properties(properties->getPropertiesForPrefix(mapPrefix)),
|
|
150
155
|
_retain(properties->getPropertyAsIntWithDefault(mapPrefix + "RetainDetached", 10)),
|
|
@@ -164,7 +169,7 @@ MetricsMapI::MetricsMapI(const std::string& mapPrefix, const PropertiesPtr& prop
|
|
|
164
169
|
{
|
|
165
170
|
groupByAttributes.push_back("");
|
|
166
171
|
}
|
|
167
|
-
|
|
172
|
+
|
|
168
173
|
for(string::const_iterator p = groupBy.begin(); p != groupBy.end(); ++p)
|
|
169
174
|
{
|
|
170
175
|
bool isAlphaNum = IceUtilInternal::isAlpha(*p) || IceUtilInternal::isDigit(*p) || *p == '.';
|
|
@@ -213,6 +218,11 @@ MetricsMapI::getProperties() const
|
|
|
213
218
|
return _properties;
|
|
214
219
|
}
|
|
215
220
|
|
|
221
|
+
MetricsMapFactory::~MetricsMapFactory()
|
|
222
|
+
{
|
|
223
|
+
// Out of line to avoid weak vtable
|
|
224
|
+
}
|
|
225
|
+
|
|
216
226
|
MetricsMapFactory::MetricsMapFactory(Updater* updater) : _updater(updater)
|
|
217
227
|
{
|
|
218
228
|
}
|
|
@@ -223,7 +233,7 @@ MetricsMapFactory::update()
|
|
|
223
233
|
assert(_updater);
|
|
224
234
|
_updater->update();
|
|
225
235
|
}
|
|
226
|
-
|
|
236
|
+
|
|
227
237
|
MetricsViewI::MetricsViewI(const string& name) : _name(name)
|
|
228
238
|
{
|
|
229
239
|
}
|
|
@@ -238,7 +248,7 @@ MetricsViewI::destroy()
|
|
|
238
248
|
}
|
|
239
249
|
|
|
240
250
|
bool
|
|
241
|
-
MetricsViewI::addOrUpdateMap(const PropertiesPtr& properties, const string& mapName,
|
|
251
|
+
MetricsViewI::addOrUpdateMap(const PropertiesPtr& properties, const string& mapName,
|
|
242
252
|
const MetricsMapFactoryPtr& factory, const ::Ice::LoggerPtr& logger)
|
|
243
253
|
{
|
|
244
254
|
const string viewPrefix = "IceMX.Metrics." + _name + ".";
|
|
@@ -378,10 +388,10 @@ MetricsViewI::getMap(const string& mapName) const
|
|
|
378
388
|
{
|
|
379
389
|
return p->second;
|
|
380
390
|
}
|
|
381
|
-
return
|
|
391
|
+
return ICE_NULLPTR;
|
|
382
392
|
}
|
|
383
393
|
|
|
384
|
-
MetricsAdminI::MetricsAdminI(const PropertiesPtr& properties, const LoggerPtr& logger) :
|
|
394
|
+
MetricsAdminI::MetricsAdminI(const PropertiesPtr& properties, const LoggerPtr& logger) :
|
|
385
395
|
_logger(logger), _properties(properties)
|
|
386
396
|
{
|
|
387
397
|
updateViews();
|
|
@@ -439,7 +449,7 @@ MetricsAdminI::updateViews()
|
|
|
439
449
|
map<string, MetricsViewIPtr>::const_iterator q = _views.find(viewName);
|
|
440
450
|
if(q == _views.end())
|
|
441
451
|
{
|
|
442
|
-
q = views.insert(map<string, MetricsViewIPtr>::value_type(viewName,
|
|
452
|
+
q = views.insert(map<string, MetricsViewIPtr>::value_type(viewName, ICE_MAKE_SHARED(MetricsViewI, viewName))).first;
|
|
443
453
|
}
|
|
444
454
|
else
|
|
445
455
|
{
|
|
@@ -455,7 +465,7 @@ MetricsAdminI::updateViews()
|
|
|
455
465
|
}
|
|
456
466
|
}
|
|
457
467
|
_views.swap(views);
|
|
458
|
-
|
|
468
|
+
|
|
459
469
|
//
|
|
460
470
|
// Go through removed views to collect maps to update.
|
|
461
471
|
//
|
|
@@ -472,7 +482,7 @@ MetricsAdminI::updateViews()
|
|
|
472
482
|
}
|
|
473
483
|
}
|
|
474
484
|
}
|
|
475
|
-
|
|
485
|
+
|
|
476
486
|
//
|
|
477
487
|
// Call the updaters to update the maps.
|
|
478
488
|
//
|
|
@@ -523,13 +533,17 @@ MetricsAdminI::getMetricsViewNames(Ice::StringSeq& disabledViews, const Current&
|
|
|
523
533
|
|
|
524
534
|
#else
|
|
525
535
|
disabledViews.insert(disabledViews.end(), _disabledViews.begin(), _disabledViews.end());
|
|
526
|
-
#endif
|
|
536
|
+
#endif
|
|
527
537
|
|
|
528
538
|
return enabledViews;
|
|
529
539
|
}
|
|
530
540
|
|
|
531
541
|
void
|
|
542
|
+
#ifdef ICE_CPP11_MAPPING
|
|
543
|
+
MetricsAdminI::enableMetricsView(string viewName, const Current&)
|
|
544
|
+
#else
|
|
532
545
|
MetricsAdminI::enableMetricsView(const string& viewName, const Current&)
|
|
546
|
+
#endif
|
|
533
547
|
{
|
|
534
548
|
{
|
|
535
549
|
Lock sync(*this);
|
|
@@ -540,7 +554,11 @@ MetricsAdminI::enableMetricsView(const string& viewName, const Current&)
|
|
|
540
554
|
}
|
|
541
555
|
|
|
542
556
|
void
|
|
557
|
+
#ifdef ICE_CPP11_MAPPING
|
|
558
|
+
MetricsAdminI::disableMetricsView(string viewName, const Current&)
|
|
559
|
+
#else
|
|
543
560
|
MetricsAdminI::disableMetricsView(const string& viewName, const Current&)
|
|
561
|
+
#endif
|
|
544
562
|
{
|
|
545
563
|
{
|
|
546
564
|
Lock sync(*this);
|
|
@@ -551,7 +569,11 @@ MetricsAdminI::disableMetricsView(const string& viewName, const Current&)
|
|
|
551
569
|
}
|
|
552
570
|
|
|
553
571
|
MetricsView
|
|
572
|
+
#ifdef ICE_CPP11_MAPPING
|
|
573
|
+
MetricsAdminI::getMetricsView(string viewName, ::Ice::Long& timestamp, const Current&)
|
|
574
|
+
#else
|
|
554
575
|
MetricsAdminI::getMetricsView(const string& viewName, ::Ice::Long& timestamp, const Current&)
|
|
576
|
+
#endif
|
|
555
577
|
{
|
|
556
578
|
Lock sync(*this);
|
|
557
579
|
MetricsViewIPtr view = getMetricsView(viewName);
|
|
@@ -564,7 +586,11 @@ MetricsAdminI::getMetricsView(const string& viewName, ::Ice::Long& timestamp, co
|
|
|
564
586
|
}
|
|
565
587
|
|
|
566
588
|
MetricsFailuresSeq
|
|
589
|
+
#ifdef ICE_CPP11_MAPPING
|
|
590
|
+
MetricsAdminI::getMapMetricsFailures(string viewName, string map, const Current&)
|
|
591
|
+
#else
|
|
567
592
|
MetricsAdminI::getMapMetricsFailures(const string& viewName, const string& map, const Current&)
|
|
593
|
+
#endif
|
|
568
594
|
{
|
|
569
595
|
Lock sync(*this);
|
|
570
596
|
MetricsViewIPtr view = getMetricsView(viewName);
|
|
@@ -576,7 +602,11 @@ MetricsAdminI::getMapMetricsFailures(const string& viewName, const string& map,
|
|
|
576
602
|
}
|
|
577
603
|
|
|
578
604
|
MetricsFailures
|
|
605
|
+
#ifdef ICE_CPP11_MAPPING
|
|
606
|
+
MetricsAdminI::getMetricsFailures(string viewName, string map, string id, const Current&)
|
|
607
|
+
#else
|
|
579
608
|
MetricsAdminI::getMetricsFailures(const string& viewName, const string& map, const string& id, const Current&)
|
|
609
|
+
#endif
|
|
580
610
|
{
|
|
581
611
|
Lock sync(*this);
|
|
582
612
|
MetricsViewIPtr view = getMetricsView(viewName);
|
|
@@ -587,7 +617,7 @@ MetricsAdminI::getMetricsFailures(const string& viewName, const string& map, con
|
|
|
587
617
|
return MetricsFailures();
|
|
588
618
|
}
|
|
589
619
|
|
|
590
|
-
vector<MetricsMapIPtr>
|
|
620
|
+
vector<MetricsMapIPtr>
|
|
591
621
|
MetricsAdminI::getMaps(const string& mapName) const
|
|
592
622
|
{
|
|
593
623
|
Lock sync(*this);
|
|
@@ -619,12 +649,12 @@ MetricsAdminI::getMetricsView(const std::string& name)
|
|
|
619
649
|
{
|
|
620
650
|
throw UnknownMetricsView();
|
|
621
651
|
}
|
|
622
|
-
return
|
|
652
|
+
return ICE_NULLPTR;
|
|
623
653
|
}
|
|
624
654
|
return p->second;
|
|
625
655
|
}
|
|
626
656
|
|
|
627
|
-
void
|
|
657
|
+
void
|
|
628
658
|
MetricsAdminI::updated(const PropertyDict& props)
|
|
629
659
|
{
|
|
630
660
|
for(PropertyDict::const_iterator p = props.begin(); p != props.end(); ++p)
|
|
@@ -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.
|
|
@@ -11,4 +11,3 @@
|
|
|
11
11
|
|
|
12
12
|
#include <Ice/Connection.h>
|
|
13
13
|
#include <Ice/Endpoint.h>
|
|
14
|
-
|
|
@@ -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.
|
|
@@ -21,17 +21,17 @@
|
|
|
21
21
|
#include <Ice/Network.h>
|
|
22
22
|
#include <Ice/NetworkProxy.h>
|
|
23
23
|
#include <IceUtil/StringUtil.h>
|
|
24
|
-
#include <
|
|
24
|
+
#include <Ice/StringConverter.h>
|
|
25
25
|
#include <Ice/LocalException.h>
|
|
26
26
|
#include <Ice/ProtocolInstance.h> // For setTcpBufSize
|
|
27
27
|
#include <Ice/Properties.h> // For setTcpBufSize
|
|
28
28
|
#include <Ice/LoggerUtil.h> // For setTcpBufSize
|
|
29
29
|
#include <Ice/Buffer.h>
|
|
30
30
|
#include <IceUtil/Random.h>
|
|
31
|
+
#include <functional>
|
|
31
32
|
|
|
32
|
-
#if defined(
|
|
33
|
+
#if defined(ICE_OS_UWP)
|
|
33
34
|
# include <IceUtil/InputUtil.h>
|
|
34
|
-
# include <IceUtil/CountDownLatch.h>
|
|
35
35
|
#elif defined(_WIN32)
|
|
36
36
|
# include <winsock2.h>
|
|
37
37
|
# include <ws2tcpip.h>
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
# include <sys/ioctl.h>
|
|
47
47
|
#endif
|
|
48
48
|
|
|
49
|
-
#if defined(
|
|
49
|
+
#if defined(__linux) || defined(__APPLE__) || defined(__FreeBSD__)
|
|
50
50
|
# include <ifaddrs.h>
|
|
51
51
|
#elif defined(__sun)
|
|
52
52
|
# include <sys/sockio.h>
|
|
@@ -72,12 +72,12 @@ extern "C"
|
|
|
72
72
|
}
|
|
73
73
|
#endif
|
|
74
74
|
|
|
75
|
-
|
|
76
75
|
using namespace std;
|
|
77
76
|
using namespace Ice;
|
|
78
77
|
using namespace IceInternal;
|
|
79
78
|
|
|
80
|
-
#ifdef
|
|
79
|
+
#ifdef ICE_OS_UWP
|
|
80
|
+
using namespace Concurrency;
|
|
81
81
|
using namespace Platform;
|
|
82
82
|
using namespace Windows::Foundation;
|
|
83
83
|
using namespace Windows::Foundation::Collections;
|
|
@@ -87,10 +87,24 @@ using namespace Windows::Networking::Sockets;
|
|
|
87
87
|
using namespace Windows::Networking::Connectivity;
|
|
88
88
|
#endif
|
|
89
89
|
|
|
90
|
+
#ifdef _WIN32
|
|
91
|
+
int
|
|
92
|
+
IceInternal::getSystemErrno()
|
|
93
|
+
{
|
|
94
|
+
return GetLastError();
|
|
95
|
+
}
|
|
96
|
+
#else
|
|
97
|
+
int
|
|
98
|
+
IceInternal::getSystemErrno()
|
|
99
|
+
{
|
|
100
|
+
return errno;
|
|
101
|
+
}
|
|
102
|
+
#endif
|
|
103
|
+
|
|
90
104
|
namespace
|
|
91
105
|
{
|
|
92
106
|
|
|
93
|
-
#ifndef
|
|
107
|
+
#ifndef ICE_OS_UWP
|
|
94
108
|
struct AddressIsIPv6 : public unary_function<Address, bool>
|
|
95
109
|
{
|
|
96
110
|
public:
|
|
@@ -113,7 +127,7 @@ struct RandomNumberGenerator : public std::unary_function<ptrdiff_t, ptrdiff_t>
|
|
|
113
127
|
void
|
|
114
128
|
sortAddresses(vector<Address>& addrs, ProtocolSupport protocol, Ice::EndpointSelectionType selType, bool preferIPv6)
|
|
115
129
|
{
|
|
116
|
-
if(selType == Ice::Random)
|
|
130
|
+
if(selType == Ice::ICE_ENUM(EndpointSelectionType, Random))
|
|
117
131
|
{
|
|
118
132
|
RandomNumberGenerator rng;
|
|
119
133
|
random_shuffle(addrs.begin(), addrs.end(), rng);
|
|
@@ -159,7 +173,31 @@ setKeepAlive(SOCKET fd)
|
|
|
159
173
|
}
|
|
160
174
|
#endif
|
|
161
175
|
|
|
162
|
-
#
|
|
176
|
+
#if defined(_WIN32) && !defined(ICE_OS_UWP)
|
|
177
|
+
void
|
|
178
|
+
setTcpLoopbackFastPath(SOCKET fd)
|
|
179
|
+
{
|
|
180
|
+
int OptionValue = 1;
|
|
181
|
+
DWORD NumberOfBytesReturned = 0;
|
|
182
|
+
|
|
183
|
+
int status =
|
|
184
|
+
WSAIoctl(fd, SIO_LOOPBACK_FAST_PATH, &OptionValue, sizeof(OptionValue), ICE_NULLPTR, 0, &NumberOfBytesReturned, 0, 0);
|
|
185
|
+
if(status == SOCKET_ERROR)
|
|
186
|
+
{
|
|
187
|
+
// On platforms that do not support fast path (< Windows 8), WSAEONOTSUPP is expected.
|
|
188
|
+
DWORD LastError = ::GetLastError();
|
|
189
|
+
if(LastError != WSAEOPNOTSUPP)
|
|
190
|
+
{
|
|
191
|
+
closeSocketNoThrow(fd);
|
|
192
|
+
SocketException ex(__FILE__, __LINE__);
|
|
193
|
+
ex.error = getSocketErrno();
|
|
194
|
+
throw ex;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
#endif
|
|
199
|
+
|
|
200
|
+
#ifdef ICE_OS_UWP
|
|
163
201
|
SOCKET
|
|
164
202
|
createSocketImpl(bool udp, int)
|
|
165
203
|
{
|
|
@@ -205,7 +243,7 @@ createSocketImpl(bool udp, int family)
|
|
|
205
243
|
setTcpNoDelay(fd);
|
|
206
244
|
setKeepAlive(fd);
|
|
207
245
|
|
|
208
|
-
#if defined(_WIN32) && !defined(
|
|
246
|
+
#if defined(_WIN32) && !defined(ICE_OS_UWP)
|
|
209
247
|
//
|
|
210
248
|
// FIX: the fast path loopback appears to cause issues with
|
|
211
249
|
// connection closure when it's enabled. Sometime, a peer
|
|
@@ -222,7 +260,7 @@ createSocketImpl(bool udp, int family)
|
|
|
222
260
|
}
|
|
223
261
|
#endif
|
|
224
262
|
|
|
225
|
-
#ifndef
|
|
263
|
+
#ifndef ICE_OS_UWP
|
|
226
264
|
vector<Address>
|
|
227
265
|
getLocalAddresses(ProtocolSupport protocol, bool includeLoopback)
|
|
228
266
|
{
|
|
@@ -244,16 +282,20 @@ getLocalAddresses(ProtocolSupport protocol, bool includeLoopback)
|
|
|
244
282
|
}
|
|
245
283
|
|
|
246
284
|
DWORD size;
|
|
247
|
-
DWORD rv = GetAdaptersAddresses(family, 0,
|
|
248
|
-
if
|
|
285
|
+
DWORD rv = GetAdaptersAddresses(family, 0, ICE_NULLPTR, ICE_NULLPTR, &size);
|
|
286
|
+
if(rv == ERROR_BUFFER_OVERFLOW)
|
|
249
287
|
{
|
|
250
288
|
PIP_ADAPTER_ADDRESSES adapter_addresses = (PIP_ADAPTER_ADDRESSES) malloc(size);
|
|
251
|
-
rv = GetAdaptersAddresses(family, 0,
|
|
252
|
-
if
|
|
289
|
+
rv = GetAdaptersAddresses(family, 0, ICE_NULLPTR, adapter_addresses, &size);
|
|
290
|
+
if(rv == ERROR_SUCCESS)
|
|
253
291
|
{
|
|
254
|
-
for
|
|
292
|
+
for(PIP_ADAPTER_ADDRESSES aa = adapter_addresses; aa != ICE_NULLPTR; aa = aa->Next)
|
|
255
293
|
{
|
|
256
|
-
|
|
294
|
+
if(aa->OperStatus != IfOperStatusUp)
|
|
295
|
+
{
|
|
296
|
+
continue;
|
|
297
|
+
}
|
|
298
|
+
for(PIP_ADAPTER_UNICAST_ADDRESS ua = aa->FirstUnicastAddress; ua != ICE_NULLPTR; ua = ua->Next)
|
|
257
299
|
{
|
|
258
300
|
Address addr;
|
|
259
301
|
memcpy(&addr.saStorage, ua->Address.lpSockaddr, ua->Address.iSockaddrLength);
|
|
@@ -279,7 +321,7 @@ getLocalAddresses(ProtocolSupport protocol, bool includeLoopback)
|
|
|
279
321
|
|
|
280
322
|
free(adapter_addresses);
|
|
281
323
|
}
|
|
282
|
-
#elif defined(
|
|
324
|
+
#elif defined(__linux) || defined(__APPLE__) || defined(__FreeBSD__)
|
|
283
325
|
struct ifaddrs* ifap;
|
|
284
326
|
if(::getifaddrs(&ifap) == SOCKET_ERROR)
|
|
285
327
|
{
|
|
@@ -438,11 +480,11 @@ getLocalAddresses(ProtocolSupport protocol, bool includeLoopback)
|
|
|
438
480
|
bool
|
|
439
481
|
isLinklocal(const Address& addr)
|
|
440
482
|
{
|
|
441
|
-
if
|
|
483
|
+
if(addr.saStorage.ss_family == AF_INET6)
|
|
442
484
|
{
|
|
443
485
|
return IN6_IS_ADDR_LINKLOCAL(&addr.saIn6.sin6_addr);
|
|
444
486
|
}
|
|
445
|
-
else if
|
|
487
|
+
else if(addr.saStorage.ss_family == AF_INET)
|
|
446
488
|
{
|
|
447
489
|
// Check for 169.254.X.X in network order
|
|
448
490
|
return (addr.saIn.sin_addr.s_addr & 0xFF) == 169 && ((addr.saIn.sin_addr.s_addr & 0xFF00)>>8) == 254;
|
|
@@ -453,58 +495,66 @@ isLinklocal(const Address& addr)
|
|
|
453
495
|
bool
|
|
454
496
|
isWildcard(const string& host, ProtocolSupport protocol, bool& ipv4)
|
|
455
497
|
{
|
|
456
|
-
|
|
498
|
+
Address addr = getAddressForServer(host, 0, protocol, true, false);
|
|
499
|
+
if(addr.saStorage.ss_family == AF_INET)
|
|
457
500
|
{
|
|
458
|
-
|
|
459
|
-
if(addr.saStorage.ss_family == AF_INET)
|
|
460
|
-
{
|
|
461
|
-
if(addr.saIn.sin_addr.s_addr == INADDR_ANY)
|
|
462
|
-
{
|
|
463
|
-
ipv4 = true;
|
|
464
|
-
return true;
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
else if(addr.saStorage.ss_family)
|
|
501
|
+
if(addr.saIn.sin_addr.s_addr == INADDR_ANY)
|
|
468
502
|
{
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
ipv4 = false;
|
|
472
|
-
return true;
|
|
473
|
-
}
|
|
503
|
+
ipv4 = true;
|
|
504
|
+
return true;
|
|
474
505
|
}
|
|
475
506
|
}
|
|
476
|
-
|
|
507
|
+
else if(addr.saStorage.ss_family == AF_INET6)
|
|
477
508
|
{
|
|
509
|
+
if(IN6_IS_ADDR_UNSPECIFIED(&addr.saIn6.sin6_addr))
|
|
510
|
+
{
|
|
511
|
+
ipv4 = false;
|
|
512
|
+
return true;
|
|
513
|
+
}
|
|
478
514
|
}
|
|
479
515
|
return false;
|
|
480
516
|
}
|
|
481
517
|
|
|
482
518
|
int
|
|
483
|
-
getInterfaceIndex(const string&
|
|
519
|
+
getInterfaceIndex(const string& intf)
|
|
484
520
|
{
|
|
485
|
-
if(
|
|
521
|
+
if(intf.empty())
|
|
486
522
|
{
|
|
487
523
|
return 0;
|
|
488
524
|
}
|
|
489
525
|
|
|
490
|
-
|
|
526
|
+
string name;
|
|
527
|
+
bool isAddr;
|
|
528
|
+
in6_addr addr;
|
|
529
|
+
string::size_type pos = intf.find("%");
|
|
530
|
+
if(pos != string::npos)
|
|
531
|
+
{
|
|
532
|
+
//
|
|
533
|
+
// If it's a link-local address, use the zone indice.
|
|
534
|
+
//
|
|
535
|
+
isAddr = false;
|
|
536
|
+
name = intf.substr(pos + 1);
|
|
537
|
+
}
|
|
538
|
+
else
|
|
539
|
+
{
|
|
540
|
+
//
|
|
541
|
+
// Then check if it's an IPv6 address. If it's an address we'll
|
|
542
|
+
// look for the interface index by address.
|
|
543
|
+
//
|
|
544
|
+
isAddr = inet_pton(AF_INET6, intf.c_str(), &addr) > 0;
|
|
545
|
+
name = intf;
|
|
546
|
+
}
|
|
491
547
|
|
|
492
548
|
//
|
|
493
|
-
//
|
|
549
|
+
// Check if index
|
|
494
550
|
//
|
|
551
|
+
int index = -1;
|
|
495
552
|
istringstream p(name);
|
|
496
553
|
if((p >> index) && p.eof())
|
|
497
554
|
{
|
|
498
555
|
return index;
|
|
499
556
|
}
|
|
500
557
|
|
|
501
|
-
//
|
|
502
|
-
// Then check if it's an IPv6 address. If it's an address we'll
|
|
503
|
-
// look for the interface index by address.
|
|
504
|
-
//
|
|
505
|
-
in6_addr addr;
|
|
506
|
-
bool isAddr = inet_pton(AF_INET6, name.c_str(), &addr) > 0;
|
|
507
|
-
|
|
508
558
|
#ifdef _WIN32
|
|
509
559
|
IP_ADAPTER_ADDRESSES addrs;
|
|
510
560
|
ULONG buflen = 0;
|
|
@@ -545,7 +595,7 @@ getInterfaceIndex(const string& name)
|
|
|
545
595
|
// Don't need to pass a wide string converter as the wide string
|
|
546
596
|
// come from Windows API.
|
|
547
597
|
//
|
|
548
|
-
if(
|
|
598
|
+
if(wstringToString(paddrs->FriendlyName, getProcessStringConverter()) == name)
|
|
549
599
|
{
|
|
550
600
|
index = paddrs->Ipv6IfIndex;
|
|
551
601
|
break;
|
|
@@ -556,6 +606,10 @@ getInterfaceIndex(const string& name)
|
|
|
556
606
|
}
|
|
557
607
|
delete[] buf;
|
|
558
608
|
}
|
|
609
|
+
if(index < 0) // interface not found
|
|
610
|
+
{
|
|
611
|
+
throw Ice::SocketException(__FILE__, __LINE__, WSAEINVAL);
|
|
612
|
+
}
|
|
559
613
|
#elif !defined(__hpux)
|
|
560
614
|
|
|
561
615
|
//
|
|
@@ -563,7 +617,7 @@ getInterfaceIndex(const string& name)
|
|
|
563
617
|
//
|
|
564
618
|
if(isAddr)
|
|
565
619
|
{
|
|
566
|
-
# if defined(
|
|
620
|
+
# if defined(__linux) || defined(__APPLE__) || defined(__FreeBSD__)
|
|
567
621
|
struct ifaddrs* ifap;
|
|
568
622
|
if(::getifaddrs(&ifap) != SOCKET_ERROR)
|
|
569
623
|
{
|
|
@@ -653,6 +707,11 @@ getInterfaceIndex(const string& name)
|
|
|
653
707
|
{
|
|
654
708
|
index = if_nametoindex(name.c_str());
|
|
655
709
|
}
|
|
710
|
+
if(index <= 0)
|
|
711
|
+
{
|
|
712
|
+
// index == 0 if if_nametoindex returned 0, < 0 if name wasn't found
|
|
713
|
+
throw Ice::SocketException(__FILE__, __LINE__, index == 0 ? getSocketErrno() : ENXIO);
|
|
714
|
+
}
|
|
656
715
|
#endif
|
|
657
716
|
|
|
658
717
|
return index;
|
|
@@ -689,19 +748,20 @@ getInterfaceAddress(const string& name)
|
|
|
689
748
|
// Don't need to pass a wide string converter as the wide string come
|
|
690
749
|
// from Windows API.
|
|
691
750
|
//
|
|
692
|
-
if(
|
|
751
|
+
if(wstringToString(paddrs->FriendlyName, getProcessStringConverter()) == name)
|
|
693
752
|
{
|
|
694
753
|
struct sockaddr_in addrin;
|
|
695
754
|
memcpy(&addrin, paddrs->FirstUnicastAddress->Address.lpSockaddr,
|
|
696
755
|
paddrs->FirstUnicastAddress->Address.iSockaddrLength);
|
|
697
|
-
|
|
698
|
-
|
|
756
|
+
delete[] buf;
|
|
757
|
+
return addrin.sin_addr;
|
|
699
758
|
}
|
|
700
759
|
paddrs = paddrs->Next;
|
|
701
760
|
}
|
|
702
761
|
}
|
|
703
762
|
delete[] buf;
|
|
704
763
|
}
|
|
764
|
+
throw Ice::SocketException(__FILE__, __LINE__, WSAEINVAL);
|
|
705
765
|
#else
|
|
706
766
|
ifreq if_address;
|
|
707
767
|
strcpy(if_address.ifr_name, name.c_str());
|
|
@@ -709,14 +769,12 @@ getInterfaceAddress(const string& name)
|
|
|
709
769
|
SOCKET fd = createSocketImpl(false, AF_INET);
|
|
710
770
|
int rc = ioctl(fd, SIOCGIFADDR, &if_address);
|
|
711
771
|
closeSocketNoThrow(fd);
|
|
712
|
-
|
|
713
|
-
if(rc != SOCKET_ERROR)
|
|
772
|
+
if(rc == SOCKET_ERROR)
|
|
714
773
|
{
|
|
715
|
-
|
|
774
|
+
throw Ice::SocketException(__FILE__, __LINE__, getSocketErrno());
|
|
716
775
|
}
|
|
776
|
+
return reinterpret_cast<struct sockaddr_in*>(&if_address.ifr_addr)->sin_addr;
|
|
717
777
|
#endif
|
|
718
|
-
|
|
719
|
-
return addr;
|
|
720
778
|
}
|
|
721
779
|
|
|
722
780
|
int
|
|
@@ -734,11 +792,28 @@ getAddressStorageSize(const Address& addr)
|
|
|
734
792
|
return size;
|
|
735
793
|
}
|
|
736
794
|
|
|
737
|
-
#endif // #ifndef
|
|
795
|
+
#endif // #ifndef ICE_OS_UWP
|
|
796
|
+
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
ReadyCallback::~ReadyCallback()
|
|
800
|
+
{
|
|
801
|
+
// Out of line to avoid weak vtable
|
|
802
|
+
}
|
|
803
|
+
|
|
804
|
+
NativeInfo::~NativeInfo()
|
|
805
|
+
{
|
|
806
|
+
// Out of line to avoid weak vtable
|
|
807
|
+
}
|
|
738
808
|
|
|
809
|
+
void
|
|
810
|
+
NativeInfo::setReadyCallback(const ReadyCallbackPtr& callback)
|
|
811
|
+
{
|
|
812
|
+
_readyCallback = callback;
|
|
739
813
|
}
|
|
740
814
|
|
|
741
815
|
#ifdef ICE_USE_IOCP
|
|
816
|
+
|
|
742
817
|
IceInternal::AsyncInfo::AsyncInfo(SocketOperation s)
|
|
743
818
|
{
|
|
744
819
|
ZeroMemory(this, sizeof(AsyncInfo));
|
|
@@ -762,7 +837,97 @@ IceInternal::NativeInfo::completed(SocketOperation operation)
|
|
|
762
837
|
throw ex;
|
|
763
838
|
}
|
|
764
839
|
}
|
|
765
|
-
|
|
840
|
+
|
|
841
|
+
#elif defined(ICE_OS_UWP)
|
|
842
|
+
|
|
843
|
+
void
|
|
844
|
+
IceInternal::NativeInfo::queueAction(SocketOperation op, IAsyncAction^ action, bool connect)
|
|
845
|
+
{
|
|
846
|
+
AsyncInfo* asyncInfo = getAsyncInfo(op);
|
|
847
|
+
if(checkIfErrorOrCompleted(op, action, connect))
|
|
848
|
+
{
|
|
849
|
+
asyncInfo->count = 0;
|
|
850
|
+
}
|
|
851
|
+
else
|
|
852
|
+
{
|
|
853
|
+
action->Completed = ref new AsyncActionCompletedHandler(
|
|
854
|
+
[=] (IAsyncAction^ info, Windows::Foundation::AsyncStatus status)
|
|
855
|
+
{
|
|
856
|
+
//
|
|
857
|
+
// COMPILERFIX with VC141 using operator!= and operator== inside
|
|
858
|
+
// a lambda callback triggers a compiler bug, we move the code to
|
|
859
|
+
// a seperate private method to workaround the issue.
|
|
860
|
+
//
|
|
861
|
+
this->queueActionCompleted(op, asyncInfo, info, status);
|
|
862
|
+
});
|
|
863
|
+
}
|
|
864
|
+
}
|
|
865
|
+
|
|
866
|
+
void
|
|
867
|
+
IceInternal::NativeInfo::queueActionCompleted(SocketOperation op, AsyncInfo* asyncInfo, IAsyncAction^ info,
|
|
868
|
+
Windows::Foundation::AsyncStatus status)
|
|
869
|
+
{
|
|
870
|
+
if(status != Windows::Foundation::AsyncStatus::Completed)
|
|
871
|
+
{
|
|
872
|
+
asyncInfo->count = SOCKET_ERROR;
|
|
873
|
+
asyncInfo->error = info->ErrorCode.Value;
|
|
874
|
+
}
|
|
875
|
+
else
|
|
876
|
+
{
|
|
877
|
+
asyncInfo->count = 0;
|
|
878
|
+
}
|
|
879
|
+
completed(op);
|
|
880
|
+
}
|
|
881
|
+
|
|
882
|
+
void
|
|
883
|
+
IceInternal::NativeInfo::queueOperation(SocketOperation op, IAsyncOperation<unsigned int>^ operation)
|
|
884
|
+
{
|
|
885
|
+
AsyncInfo* info = getAsyncInfo(op);
|
|
886
|
+
if(checkIfErrorOrCompleted(op, operation))
|
|
887
|
+
{
|
|
888
|
+
info->count = static_cast<int>(operation->GetResults());
|
|
889
|
+
}
|
|
890
|
+
else
|
|
891
|
+
{
|
|
892
|
+
if(!info->completedHandler)
|
|
893
|
+
{
|
|
894
|
+
info->completedHandler = ref new AsyncOperationCompletedHandler<unsigned int>(
|
|
895
|
+
[=] (IAsyncOperation<unsigned int>^ operation, Windows::Foundation::AsyncStatus status)
|
|
896
|
+
{
|
|
897
|
+
//
|
|
898
|
+
// COMPILERFIX with VC141 using operator!= and operator== inside
|
|
899
|
+
// a lambda callback triggers a compiler bug, we move the code to
|
|
900
|
+
// a seperate private method to workaround the issue.
|
|
901
|
+
//
|
|
902
|
+
this->queueOperationCompleted(op, info, operation, status);
|
|
903
|
+
});
|
|
904
|
+
}
|
|
905
|
+
operation->Completed = info->completedHandler;
|
|
906
|
+
}
|
|
907
|
+
}
|
|
908
|
+
|
|
909
|
+
void
|
|
910
|
+
IceInternal::NativeInfo::queueOperationCompleted(SocketOperation op, AsyncInfo* info,
|
|
911
|
+
IAsyncOperation<unsigned int>^ operation,
|
|
912
|
+
Windows::Foundation::AsyncStatus status)
|
|
913
|
+
{
|
|
914
|
+
if(status != Windows::Foundation::AsyncStatus::Completed)
|
|
915
|
+
{
|
|
916
|
+
info->count = SOCKET_ERROR;
|
|
917
|
+
info->error = operation->ErrorCode.Value;
|
|
918
|
+
}
|
|
919
|
+
else
|
|
920
|
+
{
|
|
921
|
+
info->count = static_cast<int>(operation->GetResults());
|
|
922
|
+
}
|
|
923
|
+
completed(op);
|
|
924
|
+
}
|
|
925
|
+
|
|
926
|
+
void
|
|
927
|
+
IceInternal::NativeInfo::setCompletedHandler(SocketOperationCompletedHandler^ handler)
|
|
928
|
+
{
|
|
929
|
+
_completedHandler = handler;
|
|
930
|
+
}
|
|
766
931
|
|
|
767
932
|
void
|
|
768
933
|
IceInternal::NativeInfo::completed(SocketOperation operation)
|
|
@@ -771,12 +936,69 @@ IceInternal::NativeInfo::completed(SocketOperation operation)
|
|
|
771
936
|
_completedHandler(operation);
|
|
772
937
|
}
|
|
773
938
|
|
|
939
|
+
bool
|
|
940
|
+
IceInternal::NativeInfo::checkIfErrorOrCompleted(SocketOperation op, IAsyncInfo^ info, bool connect)
|
|
941
|
+
{
|
|
942
|
+
//
|
|
943
|
+
// NOTE: It's important to only check for info->Status once as it
|
|
944
|
+
// might change during the checks below (the Status can be changed
|
|
945
|
+
// by the Windows thread pool concurrently).
|
|
946
|
+
//
|
|
947
|
+
// We consider that a canceled async status is the same as an
|
|
948
|
+
// error. A canceled async status can occur if there's a timeout
|
|
949
|
+
// and the socket is closed.
|
|
950
|
+
//
|
|
951
|
+
Windows::Foundation::AsyncStatus status = info->Status;
|
|
952
|
+
if(status == Windows::Foundation::AsyncStatus::Completed)
|
|
953
|
+
{
|
|
954
|
+
_completedHandler(op);
|
|
955
|
+
return true;
|
|
956
|
+
}
|
|
957
|
+
else if (status == Windows::Foundation::AsyncStatus::Started)
|
|
958
|
+
{
|
|
959
|
+
return false;
|
|
960
|
+
}
|
|
961
|
+
else
|
|
962
|
+
{
|
|
963
|
+
if(connect) // Connect
|
|
964
|
+
{
|
|
965
|
+
checkConnectErrorCode(__FILE__, __LINE__, info->ErrorCode.Value);
|
|
966
|
+
}
|
|
967
|
+
else
|
|
968
|
+
{
|
|
969
|
+
checkErrorCode(__FILE__, __LINE__, info->ErrorCode.Value);
|
|
970
|
+
}
|
|
971
|
+
return true; // Prevent compiler warning.
|
|
972
|
+
}
|
|
973
|
+
}
|
|
974
|
+
|
|
975
|
+
#else
|
|
976
|
+
|
|
977
|
+
void
|
|
978
|
+
IceInternal::NativeInfo::setNewFd(SOCKET fd)
|
|
979
|
+
{
|
|
980
|
+
assert(_fd == INVALID_SOCKET); // This can only be called once, when the current socket isn't set yet.
|
|
981
|
+
_newFd = fd;
|
|
982
|
+
}
|
|
983
|
+
|
|
984
|
+
bool
|
|
985
|
+
IceInternal::NativeInfo::newFd()
|
|
986
|
+
{
|
|
987
|
+
if(_newFd == INVALID_SOCKET)
|
|
988
|
+
{
|
|
989
|
+
return false;
|
|
990
|
+
}
|
|
991
|
+
assert(_fd == INVALID_SOCKET);
|
|
992
|
+
swap(_fd, _newFd);
|
|
993
|
+
return true;
|
|
994
|
+
}
|
|
995
|
+
|
|
774
996
|
#endif
|
|
775
997
|
|
|
776
998
|
bool
|
|
777
999
|
IceInternal::noMoreFds(int error)
|
|
778
1000
|
{
|
|
779
|
-
#if defined(
|
|
1001
|
+
#if defined(ICE_OS_UWP)
|
|
780
1002
|
return error == (int)SocketErrorStatus::TooManyOpenFiles;
|
|
781
1003
|
#elif defined(_WIN32)
|
|
782
1004
|
return error == WSAEMFILE;
|
|
@@ -785,7 +1007,7 @@ IceInternal::noMoreFds(int error)
|
|
|
785
1007
|
#endif
|
|
786
1008
|
}
|
|
787
1009
|
|
|
788
|
-
#if defined(
|
|
1010
|
+
#if defined(ICE_OS_UWP)
|
|
789
1011
|
string
|
|
790
1012
|
IceInternal::errorToStringDNS(int)
|
|
791
1013
|
{
|
|
@@ -803,7 +1025,7 @@ IceInternal::errorToStringDNS(int error)
|
|
|
803
1025
|
}
|
|
804
1026
|
#endif
|
|
805
1027
|
|
|
806
|
-
#ifdef
|
|
1028
|
+
#ifdef ICE_OS_UWP
|
|
807
1029
|
vector<Address>
|
|
808
1030
|
IceInternal::getAddresses(const string& host, int port, ProtocolSupport, Ice::EndpointSelectionType, bool, bool)
|
|
809
1031
|
{
|
|
@@ -822,16 +1044,16 @@ IceInternal::getAddresses(const string& host, int port, ProtocolSupport, Ice::En
|
|
|
822
1044
|
// to Windows API.
|
|
823
1045
|
//
|
|
824
1046
|
addr.host = ref new HostName(ref new String(
|
|
825
|
-
|
|
826
|
-
|
|
1047
|
+
stringToWstring(host,
|
|
1048
|
+
getProcessStringConverter()).c_str()));
|
|
827
1049
|
}
|
|
828
1050
|
stringstream os;
|
|
829
1051
|
os << port;
|
|
830
1052
|
//
|
|
831
1053
|
// Don't need to use any string converter here as the port number use just
|
|
832
|
-
//
|
|
1054
|
+
// ASCII characters.
|
|
833
1055
|
//
|
|
834
|
-
addr.port = ref new String(
|
|
1056
|
+
addr.port = ref new String(stringToWstring(os.str()).c_str());
|
|
835
1057
|
result.push_back(addr);
|
|
836
1058
|
return result;
|
|
837
1059
|
}
|
|
@@ -847,7 +1069,7 @@ IceInternal::getAddresses(const string& host, int port, ProtocolSupport, Ice::En
|
|
|
847
1069
|
#else
|
|
848
1070
|
vector<Address>
|
|
849
1071
|
IceInternal::getAddresses(const string& host, int port, ProtocolSupport protocol, Ice::EndpointSelectionType selType,
|
|
850
|
-
bool preferIPv6, bool
|
|
1072
|
+
bool preferIPv6, bool canBlock)
|
|
851
1073
|
{
|
|
852
1074
|
vector<Address> result;
|
|
853
1075
|
Address addr;
|
|
@@ -895,7 +1117,7 @@ IceInternal::getAddresses(const string& host, int port, ProtocolSupport protocol
|
|
|
895
1117
|
hints.ai_family = PF_UNSPEC;
|
|
896
1118
|
}
|
|
897
1119
|
|
|
898
|
-
if(!
|
|
1120
|
+
if(!canBlock)
|
|
899
1121
|
{
|
|
900
1122
|
hints.ai_flags = AI_NUMERICHOST;
|
|
901
1123
|
}
|
|
@@ -912,12 +1134,12 @@ IceInternal::getAddresses(const string& host, int port, ProtocolSupport protocol
|
|
|
912
1134
|
// address. However on some platforms (e.g. macOS 10.4.x)
|
|
913
1135
|
// EAI_NODATA is also returned so we also check for it.
|
|
914
1136
|
# ifdef EAI_NODATA
|
|
915
|
-
if(!
|
|
1137
|
+
if(!canBlock && (rs == EAI_NONAME || rs == EAI_NODATA))
|
|
916
1138
|
# else
|
|
917
|
-
if(!
|
|
1139
|
+
if(!canBlock && rs == EAI_NONAME)
|
|
918
1140
|
# endif
|
|
919
1141
|
{
|
|
920
|
-
return result; // Empty result indicates that a
|
|
1142
|
+
return result; // Empty result indicates that a canBlock lookup is necessary.
|
|
921
1143
|
}
|
|
922
1144
|
else if(rs != 0)
|
|
923
1145
|
{
|
|
@@ -927,7 +1149,7 @@ IceInternal::getAddresses(const string& host, int port, ProtocolSupport protocol
|
|
|
927
1149
|
throw ex;
|
|
928
1150
|
}
|
|
929
1151
|
|
|
930
|
-
for(struct addrinfo* p = info; p !=
|
|
1152
|
+
for(struct addrinfo* p = info; p != ICE_NULLPTR; p = p->ai_next)
|
|
931
1153
|
{
|
|
932
1154
|
memcpy(&addr.saStorage, p->ai_addr, p->ai_addrlen);
|
|
933
1155
|
if(p->ai_family == PF_INET)
|
|
@@ -967,11 +1189,11 @@ IceInternal::getAddresses(const string& host, int port, ProtocolSupport protocol
|
|
|
967
1189
|
}
|
|
968
1190
|
#endif
|
|
969
1191
|
|
|
970
|
-
#ifdef
|
|
1192
|
+
#ifdef ICE_OS_UWP
|
|
971
1193
|
ProtocolSupport
|
|
972
1194
|
IceInternal::getProtocolSupport(const Address&)
|
|
973
1195
|
{
|
|
974
|
-
// For
|
|
1196
|
+
// For UWP, there's no distinction between IPv4 and IPv6 adresses.
|
|
975
1197
|
return EnableBoth;
|
|
976
1198
|
}
|
|
977
1199
|
#else
|
|
@@ -983,7 +1205,7 @@ IceInternal::getProtocolSupport(const Address& addr)
|
|
|
983
1205
|
#endif
|
|
984
1206
|
|
|
985
1207
|
Address
|
|
986
|
-
IceInternal::getAddressForServer(const string& host, int port, ProtocolSupport protocol, bool preferIPv6)
|
|
1208
|
+
IceInternal::getAddressForServer(const string& host, int port, ProtocolSupport protocol, bool preferIPv6, bool canBlock)
|
|
987
1209
|
{
|
|
988
1210
|
//
|
|
989
1211
|
// We don't use getaddrinfo when host is empty as it's not portable (some old Linux
|
|
@@ -992,14 +1214,14 @@ IceInternal::getAddressForServer(const string& host, int port, ProtocolSupport p
|
|
|
992
1214
|
if(host.empty())
|
|
993
1215
|
{
|
|
994
1216
|
Address addr;
|
|
995
|
-
#ifdef
|
|
1217
|
+
#ifdef ICE_OS_UWP
|
|
996
1218
|
ostringstream os;
|
|
997
1219
|
os << port;
|
|
998
1220
|
//
|
|
999
1221
|
// Don't need to use any string converter here as the port number use just
|
|
1000
1222
|
// ASCII characters.
|
|
1001
1223
|
//
|
|
1002
|
-
addr.port = ref new String(
|
|
1224
|
+
addr.port = ref new String(stringToWstring(os.str()).c_str());
|
|
1003
1225
|
addr.host = nullptr; // Equivalent of inaddr_any, see doBind implementation.
|
|
1004
1226
|
#else
|
|
1005
1227
|
memset(&addr.saStorage, 0, sizeof(sockaddr_storage));
|
|
@@ -1018,13 +1240,14 @@ IceInternal::getAddressForServer(const string& host, int port, ProtocolSupport p
|
|
|
1018
1240
|
#endif
|
|
1019
1241
|
return addr;
|
|
1020
1242
|
}
|
|
1021
|
-
|
|
1243
|
+
vector<Address> addrs = getAddresses(host, port, protocol, Ice::ICE_ENUM(EndpointSelectionType, Ordered), preferIPv6, canBlock);
|
|
1244
|
+
return addrs.empty() ? Address() : addrs[0];
|
|
1022
1245
|
}
|
|
1023
1246
|
|
|
1024
1247
|
int
|
|
1025
1248
|
IceInternal::compareAddress(const Address& addr1, const Address& addr2)
|
|
1026
1249
|
{
|
|
1027
|
-
#ifdef
|
|
1250
|
+
#ifdef ICE_OS_UWP
|
|
1028
1251
|
int o = String::CompareOrdinal(addr1.port, addr2.port);
|
|
1029
1252
|
if(o != 0)
|
|
1030
1253
|
{
|
|
@@ -1099,7 +1322,7 @@ IceInternal::compareAddress(const Address& addr1, const Address& addr2)
|
|
|
1099
1322
|
#endif
|
|
1100
1323
|
}
|
|
1101
1324
|
|
|
1102
|
-
#ifdef
|
|
1325
|
+
#ifdef ICE_OS_UWP
|
|
1103
1326
|
bool
|
|
1104
1327
|
IceInternal::isIPv6Supported()
|
|
1105
1328
|
{
|
|
@@ -1122,7 +1345,7 @@ IceInternal::isIPv6Supported()
|
|
|
1122
1345
|
}
|
|
1123
1346
|
#endif
|
|
1124
1347
|
|
|
1125
|
-
#ifdef
|
|
1348
|
+
#ifdef ICE_OS_UWP
|
|
1126
1349
|
SOCKET
|
|
1127
1350
|
IceInternal::createSocket(bool udp, const Address&)
|
|
1128
1351
|
{
|
|
@@ -1136,7 +1359,7 @@ IceInternal::createSocket(bool udp, const Address& addr)
|
|
|
1136
1359
|
}
|
|
1137
1360
|
#endif
|
|
1138
1361
|
|
|
1139
|
-
#ifndef
|
|
1362
|
+
#ifndef ICE_OS_UWP
|
|
1140
1363
|
SOCKET
|
|
1141
1364
|
IceInternal::createServerSocket(bool udp, const Address& addr, ProtocolSupport protocol)
|
|
1142
1365
|
{
|
|
@@ -1171,7 +1394,7 @@ IceInternal::createServerSocket(bool udp, const Address& addr, ProtocolSupport)
|
|
|
1171
1394
|
void
|
|
1172
1395
|
IceInternal::closeSocketNoThrow(SOCKET fd)
|
|
1173
1396
|
{
|
|
1174
|
-
#if defined(
|
|
1397
|
+
#if defined(ICE_OS_UWP)
|
|
1175
1398
|
//
|
|
1176
1399
|
// NOTE: StreamSocket::Close or DatagramSocket::Close aren't
|
|
1177
1400
|
// exposed in C++, you have to delete the socket to close
|
|
@@ -1194,7 +1417,7 @@ IceInternal::closeSocketNoThrow(SOCKET fd)
|
|
|
1194
1417
|
void
|
|
1195
1418
|
IceInternal::closeSocket(SOCKET fd)
|
|
1196
1419
|
{
|
|
1197
|
-
#if defined(
|
|
1420
|
+
#if defined(ICE_OS_UWP)
|
|
1198
1421
|
//
|
|
1199
1422
|
// NOTE: StreamSocket::Close or DatagramSocket::Close aren't
|
|
1200
1423
|
// exposed in C++, you have to delete the socket to close
|
|
@@ -1245,7 +1468,7 @@ IceInternal::addrToString(const Address& addr)
|
|
|
1245
1468
|
void
|
|
1246
1469
|
IceInternal::fdToLocalAddress(SOCKET fd, Address& addr)
|
|
1247
1470
|
{
|
|
1248
|
-
#ifndef
|
|
1471
|
+
#ifndef ICE_OS_UWP
|
|
1249
1472
|
socklen_t len = static_cast<socklen_t>(sizeof(sockaddr_storage));
|
|
1250
1473
|
if(getsockname(fd, &addr.sa, &len) == SOCKET_ERROR)
|
|
1251
1474
|
{
|
|
@@ -1272,7 +1495,7 @@ IceInternal::fdToLocalAddress(SOCKET fd, Address& addr)
|
|
|
1272
1495
|
bool
|
|
1273
1496
|
IceInternal::fdToRemoteAddress(SOCKET fd, Address& addr)
|
|
1274
1497
|
{
|
|
1275
|
-
#ifndef
|
|
1498
|
+
#ifndef ICE_OS_UWP
|
|
1276
1499
|
socklen_t len = static_cast<socklen_t>(sizeof(sockaddr_storage));
|
|
1277
1500
|
if(getpeername(fd, &addr.sa, &len) == SOCKET_ERROR)
|
|
1278
1501
|
{
|
|
@@ -1427,14 +1650,14 @@ IceInternal::addressesToString(const Address& localAddr, const Address& remoteAd
|
|
|
1427
1650
|
bool
|
|
1428
1651
|
IceInternal::isAddressValid(const Address& addr)
|
|
1429
1652
|
{
|
|
1430
|
-
#ifndef
|
|
1653
|
+
#ifndef ICE_OS_UWP
|
|
1431
1654
|
return addr.saStorage.ss_family != AF_UNSPEC;
|
|
1432
1655
|
#else
|
|
1433
1656
|
return addr.host != nullptr || addr.port != nullptr;
|
|
1434
1657
|
#endif
|
|
1435
1658
|
}
|
|
1436
1659
|
|
|
1437
|
-
#ifdef
|
|
1660
|
+
#ifdef ICE_OS_UWP
|
|
1438
1661
|
vector<string>
|
|
1439
1662
|
IceInternal::getHostsForEndpointExpand(const string& host, ProtocolSupport protocolSupport, bool includeLoopback)
|
|
1440
1663
|
{
|
|
@@ -1446,8 +1669,7 @@ IceInternal::getHostsForEndpointExpand(const string& host, ProtocolSupport proto
|
|
|
1446
1669
|
HostName^ h = it->Current;
|
|
1447
1670
|
if(h->IPInformation != nullptr && h->IPInformation->NetworkAdapter != nullptr)
|
|
1448
1671
|
{
|
|
1449
|
-
hosts.push_back(
|
|
1450
|
-
IceUtil::getProcessStringConverter()));
|
|
1672
|
+
hosts.push_back(wstringToString(h->CanonicalName->Data(), getProcessStringConverter()));
|
|
1451
1673
|
}
|
|
1452
1674
|
}
|
|
1453
1675
|
if(includeLoopback)
|
|
@@ -1464,6 +1686,17 @@ IceInternal::getHostsForEndpointExpand(const string& host, ProtocolSupport proto
|
|
|
1464
1686
|
}
|
|
1465
1687
|
return hosts;
|
|
1466
1688
|
}
|
|
1689
|
+
|
|
1690
|
+
vector<string>
|
|
1691
|
+
IceInternal::getInterfacesForMulticast(const string& intf, ProtocolSupport protocolSupport)
|
|
1692
|
+
{
|
|
1693
|
+
vector<string> interfaces = getHostsForEndpointExpand(intf, protocolSupport, true);
|
|
1694
|
+
if(interfaces.empty())
|
|
1695
|
+
{
|
|
1696
|
+
interfaces.push_back(intf);
|
|
1697
|
+
}
|
|
1698
|
+
return interfaces;
|
|
1699
|
+
}
|
|
1467
1700
|
#else
|
|
1468
1701
|
vector<string>
|
|
1469
1702
|
IceInternal::getHostsForEndpointExpand(const string& host, ProtocolSupport protocolSupport, bool includeLoopback)
|
|
@@ -1488,12 +1721,32 @@ IceInternal::getHostsForEndpointExpand(const string& host, ProtocolSupport proto
|
|
|
1488
1721
|
}
|
|
1489
1722
|
return hosts; // An empty host list indicates to just use the given host.
|
|
1490
1723
|
}
|
|
1724
|
+
|
|
1725
|
+
vector<string>
|
|
1726
|
+
IceInternal::getInterfacesForMulticast(const string& intf, ProtocolSupport protocolSupport)
|
|
1727
|
+
{
|
|
1728
|
+
vector<string> interfaces;
|
|
1729
|
+
bool ipv4Wildcard = false;
|
|
1730
|
+
if(isWildcard(intf, protocolSupport, ipv4Wildcard))
|
|
1731
|
+
{
|
|
1732
|
+
vector<Address> addrs = getLocalAddresses(ipv4Wildcard ? EnableIPv4 : protocolSupport, true);
|
|
1733
|
+
for(vector<Address>::const_iterator p = addrs.begin(); p != addrs.end(); ++p)
|
|
1734
|
+
{
|
|
1735
|
+
interfaces.push_back(inetAddrToString(*p)); // We keep link local addresses for multicast
|
|
1736
|
+
}
|
|
1737
|
+
}
|
|
1738
|
+
if(interfaces.empty())
|
|
1739
|
+
{
|
|
1740
|
+
interfaces.push_back(intf);
|
|
1741
|
+
}
|
|
1742
|
+
return interfaces;
|
|
1743
|
+
}
|
|
1491
1744
|
#endif
|
|
1492
1745
|
|
|
1493
1746
|
string
|
|
1494
1747
|
IceInternal::inetAddrToString(const Address& ss)
|
|
1495
1748
|
{
|
|
1496
|
-
#ifndef
|
|
1749
|
+
#ifndef ICE_OS_UWP
|
|
1497
1750
|
int size = getAddressStorageSize(ss);
|
|
1498
1751
|
if(size == 0)
|
|
1499
1752
|
{
|
|
@@ -1515,7 +1768,7 @@ IceInternal::inetAddrToString(const Address& ss)
|
|
|
1515
1768
|
// Don't need to pass a wide string converter as the wide string come
|
|
1516
1769
|
// from Windows API.
|
|
1517
1770
|
//
|
|
1518
|
-
return
|
|
1771
|
+
return wstringToString(ss.host->RawName->Data(), getProcessStringConverter());
|
|
1519
1772
|
}
|
|
1520
1773
|
#endif
|
|
1521
1774
|
}
|
|
@@ -1523,7 +1776,7 @@ IceInternal::inetAddrToString(const Address& ss)
|
|
|
1523
1776
|
int
|
|
1524
1777
|
IceInternal::getPort(const Address& addr)
|
|
1525
1778
|
{
|
|
1526
|
-
#ifndef
|
|
1779
|
+
#ifndef ICE_OS_UWP
|
|
1527
1780
|
if(addr.saStorage.ss_family == AF_INET)
|
|
1528
1781
|
{
|
|
1529
1782
|
return ntohs(addr.saIn.sin_port);
|
|
@@ -1541,7 +1794,7 @@ IceInternal::getPort(const Address& addr)
|
|
|
1541
1794
|
//
|
|
1542
1795
|
// Don't need to use any string converter here as the port number use just ASCII characters.
|
|
1543
1796
|
//
|
|
1544
|
-
if(addr.port == nullptr || !IceUtilInternal::stringToInt64(
|
|
1797
|
+
if(addr.port == nullptr || !IceUtilInternal::stringToInt64(wstringToString(addr.port->Data()), port))
|
|
1545
1798
|
{
|
|
1546
1799
|
return -1;
|
|
1547
1800
|
}
|
|
@@ -1552,7 +1805,7 @@ IceInternal::getPort(const Address& addr)
|
|
|
1552
1805
|
void
|
|
1553
1806
|
IceInternal::setPort(Address& addr, int port)
|
|
1554
1807
|
{
|
|
1555
|
-
#ifndef
|
|
1808
|
+
#ifndef ICE_OS_UWP
|
|
1556
1809
|
if(addr.saStorage.ss_family == AF_INET)
|
|
1557
1810
|
{
|
|
1558
1811
|
addr.saIn.sin_port = htons(port);
|
|
@@ -1567,16 +1820,16 @@ IceInternal::setPort(Address& addr, int port)
|
|
|
1567
1820
|
os << port;
|
|
1568
1821
|
//
|
|
1569
1822
|
// Don't need to use any string converter here as the port number use just
|
|
1570
|
-
//
|
|
1823
|
+
// ASCII characters.
|
|
1571
1824
|
//
|
|
1572
|
-
addr.port = ref new String(
|
|
1825
|
+
addr.port = ref new String(stringToWstring(os.str()).c_str());
|
|
1573
1826
|
#endif
|
|
1574
1827
|
}
|
|
1575
1828
|
|
|
1576
1829
|
bool
|
|
1577
1830
|
IceInternal::isMulticast(const Address& addr)
|
|
1578
1831
|
{
|
|
1579
|
-
#ifndef
|
|
1832
|
+
#ifndef ICE_OS_UWP
|
|
1580
1833
|
if(addr.saStorage.ss_family == AF_INET)
|
|
1581
1834
|
{
|
|
1582
1835
|
return IN_MULTICAST(ntohl(addr.saIn.sin_addr.s_addr));
|
|
@@ -1594,7 +1847,7 @@ IceInternal::isMulticast(const Address& addr)
|
|
|
1594
1847
|
// Don't need to use string converters here, this is just to do a local
|
|
1595
1848
|
// comparison to find if the address is multicast.
|
|
1596
1849
|
//
|
|
1597
|
-
string host =
|
|
1850
|
+
string host = wstringToString(addr.host->RawName->Data());
|
|
1598
1851
|
string ip = IceUtilInternal::toUpper(host);
|
|
1599
1852
|
vector<string> tokens;
|
|
1600
1853
|
IceUtilInternal::splitString(ip, ".", tokens);
|
|
@@ -1689,7 +1942,7 @@ IceInternal::setTcpBufSize(SOCKET fd, int rcvSize, int sndSize, const ProtocolIn
|
|
|
1689
1942
|
}
|
|
1690
1943
|
}
|
|
1691
1944
|
|
|
1692
|
-
#ifdef
|
|
1945
|
+
#ifdef ICE_OS_UWP
|
|
1693
1946
|
void
|
|
1694
1947
|
IceInternal::setBlock(SOCKET fd, bool)
|
|
1695
1948
|
{
|
|
@@ -1753,7 +2006,7 @@ IceInternal::setBlock(SOCKET fd, bool block)
|
|
|
1753
2006
|
void
|
|
1754
2007
|
IceInternal::setSendBufferSize(SOCKET fd, int sz)
|
|
1755
2008
|
{
|
|
1756
|
-
#ifndef
|
|
2009
|
+
#ifndef ICE_OS_UWP
|
|
1757
2010
|
if(setsockopt(fd, SOL_SOCKET, SO_SNDBUF, reinterpret_cast<char*>(&sz), int(sizeof(int))) == SOCKET_ERROR)
|
|
1758
2011
|
{
|
|
1759
2012
|
closeSocketNoThrow(fd);
|
|
@@ -1773,7 +2026,7 @@ IceInternal::setSendBufferSize(SOCKET fd, int sz)
|
|
|
1773
2026
|
int
|
|
1774
2027
|
IceInternal::getSendBufferSize(SOCKET fd)
|
|
1775
2028
|
{
|
|
1776
|
-
#ifndef
|
|
2029
|
+
#ifndef ICE_OS_UWP
|
|
1777
2030
|
int sz;
|
|
1778
2031
|
socklen_t len = sizeof(sz);
|
|
1779
2032
|
if(getsockopt(fd, SOL_SOCKET, SO_SNDBUF, reinterpret_cast<char*>(&sz), &len) == SOCKET_ERROR ||
|
|
@@ -1795,7 +2048,7 @@ IceInternal::getSendBufferSize(SOCKET fd)
|
|
|
1795
2048
|
#endif
|
|
1796
2049
|
}
|
|
1797
2050
|
|
|
1798
|
-
#ifdef
|
|
2051
|
+
#ifdef ICE_OS_UWP
|
|
1799
2052
|
void
|
|
1800
2053
|
IceInternal::setRecvBufferSize(SOCKET, int)
|
|
1801
2054
|
{
|
|
@@ -1817,7 +2070,7 @@ IceInternal::setRecvBufferSize(SOCKET fd, int sz)
|
|
|
1817
2070
|
int
|
|
1818
2071
|
IceInternal::getRecvBufferSize(SOCKET fd)
|
|
1819
2072
|
{
|
|
1820
|
-
#ifndef
|
|
2073
|
+
#ifndef ICE_OS_UWP
|
|
1821
2074
|
int sz;
|
|
1822
2075
|
socklen_t len = sizeof(sz);
|
|
1823
2076
|
if(getsockopt(fd, SOL_SOCKET, SO_RCVBUF, reinterpret_cast<char*>(&sz), &len) == SOCKET_ERROR ||
|
|
@@ -1834,31 +2087,41 @@ IceInternal::getRecvBufferSize(SOCKET fd)
|
|
|
1834
2087
|
#endif
|
|
1835
2088
|
}
|
|
1836
2089
|
|
|
1837
|
-
#ifndef
|
|
2090
|
+
#ifndef ICE_OS_UWP
|
|
1838
2091
|
void
|
|
1839
2092
|
IceInternal::setMcastGroup(SOCKET fd, const Address& group, const string& intf)
|
|
1840
2093
|
{
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
|
|
1844
|
-
struct ip_mreq mreq;
|
|
1845
|
-
mreq.imr_multiaddr = group.saIn.sin_addr;
|
|
1846
|
-
mreq.imr_interface = getInterfaceAddress(intf);
|
|
1847
|
-
rc = setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, reinterpret_cast<char*>(&mreq), int(sizeof(mreq)));
|
|
1848
|
-
}
|
|
1849
|
-
else
|
|
1850
|
-
{
|
|
1851
|
-
struct ipv6_mreq mreq;
|
|
1852
|
-
mreq.ipv6mr_multiaddr = group.saIn6.sin6_addr;
|
|
1853
|
-
mreq.ipv6mr_interface = getInterfaceIndex(intf);
|
|
1854
|
-
rc = setsockopt(fd, IPPROTO_IPV6, IPV6_JOIN_GROUP, reinterpret_cast<char*>(&mreq), int(sizeof(mreq)));
|
|
1855
|
-
}
|
|
1856
|
-
if(rc == SOCKET_ERROR)
|
|
2094
|
+
vector<string> interfaces = getInterfacesForMulticast(intf, getProtocolSupport(group));
|
|
2095
|
+
set<int> indexes;
|
|
2096
|
+
for(vector<string>::const_iterator p = interfaces.begin(); p != interfaces.end(); ++p)
|
|
1857
2097
|
{
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
2098
|
+
int rc = 0;
|
|
2099
|
+
if(group.saStorage.ss_family == AF_INET)
|
|
2100
|
+
{
|
|
2101
|
+
struct ip_mreq mreq;
|
|
2102
|
+
mreq.imr_multiaddr = group.saIn.sin_addr;
|
|
2103
|
+
mreq.imr_interface = getInterfaceAddress(*p);
|
|
2104
|
+
rc = setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, reinterpret_cast<char*>(&mreq), int(sizeof(mreq)));
|
|
2105
|
+
}
|
|
2106
|
+
else
|
|
2107
|
+
{
|
|
2108
|
+
int index = getInterfaceIndex(*p);
|
|
2109
|
+
if(indexes.find(index) == indexes.end()) // Don't join twice the same interface (if it has multiple IPs)
|
|
2110
|
+
{
|
|
2111
|
+
indexes.insert(index);
|
|
2112
|
+
struct ipv6_mreq mreq;
|
|
2113
|
+
mreq.ipv6mr_multiaddr = group.saIn6.sin6_addr;
|
|
2114
|
+
mreq.ipv6mr_interface = index;
|
|
2115
|
+
rc = setsockopt(fd, IPPROTO_IPV6, IPV6_JOIN_GROUP, reinterpret_cast<char*>(&mreq), int(sizeof(mreq)));
|
|
2116
|
+
}
|
|
2117
|
+
}
|
|
2118
|
+
if(rc == SOCKET_ERROR)
|
|
2119
|
+
{
|
|
2120
|
+
closeSocketNoThrow(fd);
|
|
2121
|
+
SocketException ex(__FILE__, __LINE__);
|
|
2122
|
+
ex.error = getSocketErrno();
|
|
2123
|
+
throw ex;
|
|
2124
|
+
}
|
|
1862
2125
|
}
|
|
1863
2126
|
}
|
|
1864
2127
|
#else
|
|
@@ -1868,9 +2131,34 @@ IceInternal::setMcastGroup(SOCKET fd, const Address& group, const string&)
|
|
|
1868
2131
|
try
|
|
1869
2132
|
{
|
|
1870
2133
|
//
|
|
1871
|
-
// NOTE:
|
|
2134
|
+
// NOTE: UWP mcast interface is set earlier in doBind.
|
|
1872
2135
|
//
|
|
1873
2136
|
safe_cast<DatagramSocket^>(fd)->JoinMulticastGroup(group.host);
|
|
2137
|
+
|
|
2138
|
+
//
|
|
2139
|
+
// BUGFIX DatagramSocket will not recive any messages from a multicast group if the
|
|
2140
|
+
// messages originate in the same host until the socket is used to send at least one
|
|
2141
|
+
// message. We send a valiate connection message that the peers will ignore to workaround
|
|
2142
|
+
// the issue.
|
|
2143
|
+
//
|
|
2144
|
+
auto out = IceInternal::runSync(safe_cast<DatagramSocket^>(fd)->GetOutputStreamAsync(group.host, group.port));
|
|
2145
|
+
auto writer = ref new DataWriter(out);
|
|
2146
|
+
|
|
2147
|
+
OutputStream os;
|
|
2148
|
+
os.write(magic[0]);
|
|
2149
|
+
os.write(magic[1]);
|
|
2150
|
+
os.write(magic[2]);
|
|
2151
|
+
os.write(magic[3]);
|
|
2152
|
+
os.write(currentProtocol);
|
|
2153
|
+
os.write(currentProtocolEncoding);
|
|
2154
|
+
os.write(validateConnectionMsg);
|
|
2155
|
+
os.write(static_cast<Byte>(0)); // Compression status (always zero for validate connection).
|
|
2156
|
+
os.write(headerSize); // Message size.
|
|
2157
|
+
os.i = os.b.begin();
|
|
2158
|
+
|
|
2159
|
+
writer->WriteBytes(ref new Array<unsigned char>(&*os.i, static_cast<unsigned int>(headerSize)));
|
|
2160
|
+
|
|
2161
|
+
IceInternal::runSync(writer->StoreAsync());
|
|
1874
2162
|
}
|
|
1875
2163
|
catch(Platform::Exception^ pex)
|
|
1876
2164
|
{
|
|
@@ -1879,7 +2167,7 @@ IceInternal::setMcastGroup(SOCKET fd, const Address& group, const string&)
|
|
|
1879
2167
|
}
|
|
1880
2168
|
#endif
|
|
1881
2169
|
|
|
1882
|
-
#ifdef
|
|
2170
|
+
#ifdef ICE_OS_UWP
|
|
1883
2171
|
void
|
|
1884
2172
|
IceInternal::setMcastInterface(SOCKET, const string&, const Address&)
|
|
1885
2173
|
{
|
|
@@ -1909,7 +2197,7 @@ IceInternal::setMcastInterface(SOCKET fd, const string& intf, const Address& add
|
|
|
1909
2197
|
}
|
|
1910
2198
|
#endif
|
|
1911
2199
|
|
|
1912
|
-
#ifdef
|
|
2200
|
+
#ifdef ICE_OS_UWP
|
|
1913
2201
|
void
|
|
1914
2202
|
IceInternal::setMcastTtl(SOCKET, int, const Address&)
|
|
1915
2203
|
{
|
|
@@ -1937,7 +2225,7 @@ IceInternal::setMcastTtl(SOCKET fd, int ttl, const Address& addr)
|
|
|
1937
2225
|
}
|
|
1938
2226
|
#endif
|
|
1939
2227
|
|
|
1940
|
-
#ifdef
|
|
2228
|
+
#ifdef ICE_OS_UWP
|
|
1941
2229
|
void
|
|
1942
2230
|
IceInternal::setReuseAddress(SOCKET, bool)
|
|
1943
2231
|
{
|
|
@@ -1957,41 +2245,51 @@ IceInternal::setReuseAddress(SOCKET fd, bool reuse)
|
|
|
1957
2245
|
}
|
|
1958
2246
|
#endif
|
|
1959
2247
|
|
|
2248
|
+
#ifdef ICE_OS_UWP
|
|
2249
|
+
namespace
|
|
2250
|
+
{
|
|
1960
2251
|
|
|
1961
|
-
#ifdef ICE_OS_WINRT
|
|
1962
2252
|
void
|
|
1963
2253
|
checkResultAndWait(IAsyncAction^ action)
|
|
1964
2254
|
{
|
|
1965
|
-
|
|
2255
|
+
auto status = action->Status;
|
|
2256
|
+
switch(status)
|
|
1966
2257
|
{
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
if(status != Windows::Foundation::AsyncStatus::Completed)
|
|
2258
|
+
case Windows::Foundation::AsyncStatus::Started:
|
|
2259
|
+
{
|
|
2260
|
+
promise<HRESULT> p;
|
|
2261
|
+
action->Completed = ref new AsyncActionCompletedHandler(
|
|
2262
|
+
[&p] (IAsyncAction^ action, Windows::Foundation::AsyncStatus status)
|
|
1973
2263
|
{
|
|
1974
|
-
|
|
1975
|
-
}
|
|
1976
|
-
|
|
1977
|
-
|
|
1978
|
-
|
|
1979
|
-
|
|
2264
|
+
p.set_value(status != Windows::Foundation::AsyncStatus::Completed ? action->ErrorCode.Value : 0);
|
|
2265
|
+
});
|
|
2266
|
+
|
|
2267
|
+
HRESULT result = p.get_future().get();
|
|
2268
|
+
if(result)
|
|
2269
|
+
{
|
|
2270
|
+
checkErrorCode(__FILE__, __LINE__, result);
|
|
2271
|
+
}
|
|
2272
|
+
break;
|
|
2273
|
+
}
|
|
2274
|
+
case Windows::Foundation::AsyncStatus::Error:
|
|
1980
2275
|
{
|
|
1981
|
-
checkErrorCode(__FILE__, __LINE__,
|
|
2276
|
+
checkErrorCode(__FILE__, __LINE__, action->ErrorCode.Value);
|
|
2277
|
+
break;
|
|
2278
|
+
}
|
|
2279
|
+
default:
|
|
2280
|
+
{
|
|
2281
|
+
break;
|
|
1982
2282
|
}
|
|
1983
|
-
}
|
|
1984
|
-
else if(action->Status == Windows::Foundation::AsyncStatus::Error)
|
|
1985
|
-
{
|
|
1986
|
-
checkErrorCode(__FILE__, __LINE__, action->ErrorCode.Value);
|
|
1987
2283
|
}
|
|
1988
2284
|
}
|
|
2285
|
+
|
|
2286
|
+
}
|
|
1989
2287
|
#endif
|
|
1990
2288
|
|
|
2289
|
+
#ifdef ICE_OS_UWP
|
|
1991
2290
|
Address
|
|
1992
|
-
IceInternal::doBind(SOCKET fd, const Address& addr)
|
|
2291
|
+
IceInternal::doBind(SOCKET fd, const Address& addr, const string& intf)
|
|
1993
2292
|
{
|
|
1994
|
-
#ifdef ICE_OS_WINRT
|
|
1995
2293
|
Address local;
|
|
1996
2294
|
try
|
|
1997
2295
|
{
|
|
@@ -2015,7 +2313,32 @@ IceInternal::doBind(SOCKET fd, const Address& addr)
|
|
|
2015
2313
|
{
|
|
2016
2314
|
if(addr.host == nullptr) // inaddr_any
|
|
2017
2315
|
{
|
|
2018
|
-
|
|
2316
|
+
NetworkAdapter^ adapter;
|
|
2317
|
+
if(!intf.empty())
|
|
2318
|
+
{
|
|
2319
|
+
auto s = ref new String(Ice::stringToWstring(intf).c_str());
|
|
2320
|
+
auto profiles = NetworkInformation::GetConnectionProfiles();
|
|
2321
|
+
for(auto i = profiles->First(); adapter == nullptr && i->HasCurrent; i->MoveNext())
|
|
2322
|
+
{
|
|
2323
|
+
auto names = i->Current->GetNetworkNames();
|
|
2324
|
+
for(auto j = names->First(); adapter == nullptr && j->HasCurrent; j->MoveNext())
|
|
2325
|
+
{
|
|
2326
|
+
if(j->Current->Equals(s))
|
|
2327
|
+
{
|
|
2328
|
+
adapter = i->Current->NetworkAdapter;
|
|
2329
|
+
}
|
|
2330
|
+
}
|
|
2331
|
+
}
|
|
2332
|
+
}
|
|
2333
|
+
|
|
2334
|
+
if(adapter)
|
|
2335
|
+
{
|
|
2336
|
+
checkResultAndWait(datagram->BindServiceNameAsync(addr.port, adapter));
|
|
2337
|
+
}
|
|
2338
|
+
else
|
|
2339
|
+
{
|
|
2340
|
+
checkResultAndWait(datagram->BindServiceNameAsync(addr.port));
|
|
2341
|
+
}
|
|
2019
2342
|
}
|
|
2020
2343
|
else
|
|
2021
2344
|
{
|
|
@@ -2031,7 +2354,11 @@ IceInternal::doBind(SOCKET fd, const Address& addr)
|
|
|
2031
2354
|
throw;
|
|
2032
2355
|
}
|
|
2033
2356
|
return local;
|
|
2357
|
+
}
|
|
2034
2358
|
#else
|
|
2359
|
+
Address
|
|
2360
|
+
IceInternal::doBind(SOCKET fd, const Address& addr, const string&)
|
|
2361
|
+
{
|
|
2035
2362
|
int size = getAddressStorageSize(addr);
|
|
2036
2363
|
assert(size != 0);
|
|
2037
2364
|
|
|
@@ -2052,15 +2379,16 @@ IceInternal::doBind(SOCKET fd, const Address& addr)
|
|
|
2052
2379
|
assert(ret != SOCKET_ERROR);
|
|
2053
2380
|
# endif
|
|
2054
2381
|
return local;
|
|
2055
|
-
#endif
|
|
2056
2382
|
}
|
|
2383
|
+
#endif
|
|
2057
2384
|
|
|
2058
|
-
#ifndef
|
|
2385
|
+
#ifndef ICE_OS_UWP
|
|
2059
2386
|
|
|
2060
2387
|
Address
|
|
2061
2388
|
IceInternal::getNumericAddress(const std::string& address)
|
|
2062
2389
|
{
|
|
2063
|
-
vector<Address> addrs = getAddresses(address, 0, EnableBoth, Ice::Ordered, false,
|
|
2390
|
+
vector<Address> addrs = getAddresses(address, 0, EnableBoth, Ice::ICE_ENUM(EndpointSelectionType, Ordered), false,
|
|
2391
|
+
false);
|
|
2064
2392
|
if(addrs.empty())
|
|
2065
2393
|
{
|
|
2066
2394
|
return Address();
|
|
@@ -2293,7 +2621,7 @@ repeatConnect:
|
|
|
2293
2621
|
}
|
|
2294
2622
|
}
|
|
2295
2623
|
|
|
2296
|
-
#if defined(
|
|
2624
|
+
#if defined(__linux)
|
|
2297
2625
|
//
|
|
2298
2626
|
// Prevent self connect (self connect happens on Linux when a client tries to connect to
|
|
2299
2627
|
// a server which was just deactivated if the client socket re-uses the same ephemeral
|
|
@@ -2372,7 +2700,7 @@ IceInternal::doFinishConnect(SOCKET fd)
|
|
|
2372
2700
|
}
|
|
2373
2701
|
}
|
|
2374
2702
|
|
|
2375
|
-
#if defined(
|
|
2703
|
+
#if defined(__linux)
|
|
2376
2704
|
//
|
|
2377
2705
|
// Prevent self connect (self connect happens on Linux when a client tries to connect to
|
|
2378
2706
|
// a server which was just deactivated if the client socket re-uses the same ephemeral
|
|
@@ -2417,7 +2745,6 @@ repeatAccept:
|
|
|
2417
2745
|
return ret;
|
|
2418
2746
|
}
|
|
2419
2747
|
|
|
2420
|
-
|
|
2421
2748
|
void
|
|
2422
2749
|
IceInternal::createPipe(SOCKET fds[2])
|
|
2423
2750
|
{
|
|
@@ -2521,10 +2848,10 @@ IceInternal::createPipe(SOCKET fds[2])
|
|
|
2521
2848
|
#endif
|
|
2522
2849
|
}
|
|
2523
2850
|
|
|
2524
|
-
#else //
|
|
2851
|
+
#else // ICE_OS_UWP
|
|
2525
2852
|
|
|
2526
2853
|
void
|
|
2527
|
-
IceInternal::checkConnectErrorCode(const char* file, int line, HRESULT herr
|
|
2854
|
+
IceInternal::checkConnectErrorCode(const char* file, int line, HRESULT herr)
|
|
2528
2855
|
{
|
|
2529
2856
|
if(herr == E_ACCESSDENIED)
|
|
2530
2857
|
{
|
|
@@ -2554,11 +2881,6 @@ IceInternal::checkConnectErrorCode(const char* file, int line, HRESULT herr, Hos
|
|
|
2554
2881
|
{
|
|
2555
2882
|
DNSException ex(file, line);
|
|
2556
2883
|
ex.error = static_cast<int>(error);
|
|
2557
|
-
//
|
|
2558
|
-
// Don't need to pass a wide string converter as the wide string come from
|
|
2559
|
-
// Windows API.
|
|
2560
|
-
//
|
|
2561
|
-
ex.host = IceUtil::wstringToString(host->RawName->Data(), IceUtil::getProcessStringConverter());
|
|
2562
2884
|
throw ex;
|
|
2563
2885
|
}
|
|
2564
2886
|
else
|
|
@@ -2601,6 +2923,34 @@ IceInternal::checkErrorCode(const char* file, int line, HRESULT herr)
|
|
|
2601
2923
|
}
|
|
2602
2924
|
}
|
|
2603
2925
|
|
|
2926
|
+
//
|
|
2927
|
+
// UWP impose some restriction on operations that block when run from
|
|
2928
|
+
// STA thread and throws concurrency::invalid_operation. We cannot
|
|
2929
|
+
// directly call task::get or task::way, this helper method is used to
|
|
2930
|
+
// workaround this limitation.
|
|
2931
|
+
//
|
|
2932
|
+
void
|
|
2933
|
+
IceInternal::runSync(Windows::Foundation::IAsyncAction^ action)
|
|
2934
|
+
{
|
|
2935
|
+
std::promise<void> p;
|
|
2936
|
+
|
|
2937
|
+
concurrency::create_task(action).then(
|
|
2938
|
+
[&p](concurrency::task<void> t)
|
|
2939
|
+
{
|
|
2940
|
+
try
|
|
2941
|
+
{
|
|
2942
|
+
t.get();
|
|
2943
|
+
p.set_value();
|
|
2944
|
+
}
|
|
2945
|
+
catch(...)
|
|
2946
|
+
{
|
|
2947
|
+
p.set_exception(std::current_exception());
|
|
2948
|
+
}
|
|
2949
|
+
},
|
|
2950
|
+
concurrency::task_continuation_context::use_arbitrary());
|
|
2951
|
+
|
|
2952
|
+
return p.get_future().get();
|
|
2953
|
+
}
|
|
2604
2954
|
|
|
2605
2955
|
#endif
|
|
2606
2956
|
|
|
@@ -2644,7 +2994,7 @@ IceInternal::doConnectAsync(SOCKET fd, const Address& addr, const Address& sourc
|
|
|
2644
2994
|
throw ex;
|
|
2645
2995
|
}
|
|
2646
2996
|
|
|
2647
|
-
LPFN_CONNECTEX ConnectEx =
|
|
2997
|
+
LPFN_CONNECTEX ConnectEx = ICE_NULLPTR; // a pointer to the 'ConnectEx()' function
|
|
2648
2998
|
GUID GuidConnectEx = WSAID_CONNECTEX; // The Guid
|
|
2649
2999
|
DWORD dwBytes;
|
|
2650
3000
|
if(WSAIoctl(fd,
|
|
@@ -2654,8 +3004,8 @@ IceInternal::doConnectAsync(SOCKET fd, const Address& addr, const Address& sourc
|
|
|
2654
3004
|
&ConnectEx,
|
|
2655
3005
|
sizeof(ConnectEx),
|
|
2656
3006
|
&dwBytes,
|
|
2657
|
-
|
|
2658
|
-
|
|
3007
|
+
ICE_NULLPTR,
|
|
3008
|
+
ICE_NULLPTR) == SOCKET_ERROR)
|
|
2659
3009
|
{
|
|
2660
3010
|
SocketException ex(__FILE__, __LINE__);
|
|
2661
3011
|
ex.error = getSocketErrno();
|
|
@@ -2719,7 +3069,7 @@ IceInternal::doFinishConnectAsync(SOCKET fd, AsyncInfo& info)
|
|
|
2719
3069
|
}
|
|
2720
3070
|
}
|
|
2721
3071
|
|
|
2722
|
-
if(setsockopt(fd, SOL_SOCKET, SO_UPDATE_CONNECT_CONTEXT,
|
|
3072
|
+
if(setsockopt(fd, SOL_SOCKET, SO_UPDATE_CONNECT_CONTEXT, ICE_NULLPTR, 0) == SOCKET_ERROR)
|
|
2723
3073
|
{
|
|
2724
3074
|
SocketException ex(__FILE__, __LINE__);
|
|
2725
3075
|
ex.error = getSocketErrno();
|
|
@@ -2728,3 +3078,17 @@ IceInternal::doFinishConnectAsync(SOCKET fd, AsyncInfo& info)
|
|
|
2728
3078
|
}
|
|
2729
3079
|
#endif
|
|
2730
3080
|
|
|
3081
|
+
bool
|
|
3082
|
+
IceInternal::isIpAddress(const string& name)
|
|
3083
|
+
{
|
|
3084
|
+
#ifdef ICE_OS_UWP
|
|
3085
|
+
HostName^ hostname = ref new HostName(ref new String(stringToWstring(name,
|
|
3086
|
+
getProcessStringConverter()).c_str()));
|
|
3087
|
+
return hostname->Type == HostNameType::Ipv4 || hostname->Type == HostNameType::Ipv6;
|
|
3088
|
+
#else
|
|
3089
|
+
in_addr addr;
|
|
3090
|
+
in6_addr addr6;
|
|
3091
|
+
|
|
3092
|
+
return inet_pton(AF_INET, name.c_str(), &addr) > 0 || inet_pton(AF_INET6, name.c_str(), &addr6) > 0;
|
|
3093
|
+
#endif
|
|
3094
|
+
}
|