zeroc-ice 3.7.11 → 3.8.1
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/dist/IceRuby/Communicator.cpp +159 -376
- data/dist/IceRuby/Communicator.h +8 -9
- data/dist/IceRuby/Config.h +23 -89
- data/dist/IceRuby/Connection.cpp +111 -219
- data/dist/IceRuby/Connection.h +8 -12
- data/dist/IceRuby/DefaultSliceLoader.cpp +45 -0
- data/dist/IceRuby/DefaultSliceLoader.h +25 -0
- data/dist/IceRuby/Endpoint.cpp +63 -65
- data/dist/IceRuby/Endpoint.h +7 -11
- data/dist/IceRuby/ImplicitContext.cpp +26 -31
- data/dist/IceRuby/ImplicitContext.h +6 -10
- data/dist/IceRuby/Init.cpp +27 -40
- data/dist/IceRuby/Logger.cpp +23 -28
- data/dist/IceRuby/Logger.h +8 -12
- data/dist/IceRuby/Operation.cpp +177 -219
- data/dist/IceRuby/Operation.h +15 -18
- data/dist/IceRuby/Properties.cpp +133 -89
- data/dist/IceRuby/Properties.h +6 -10
- data/dist/IceRuby/Proxy.cpp +179 -649
- data/dist/IceRuby/Proxy.h +11 -12
- data/dist/IceRuby/RubySliceLoader.cpp +39 -0
- data/dist/IceRuby/RubySliceLoader.h +27 -0
- data/dist/IceRuby/Slice.cpp +88 -94
- data/dist/IceRuby/Slice.h +3 -7
- data/dist/IceRuby/Types.cpp +987 -1190
- data/dist/IceRuby/Types.h +390 -461
- data/dist/IceRuby/Util.cpp +214 -473
- data/dist/IceRuby/Util.h +378 -479
- data/dist/ice/cpp/include/Ice/AsyncResponseHandler.h +85 -0
- data/dist/ice/cpp/include/Ice/BatchRequest.h +39 -0
- data/dist/ice/cpp/include/Ice/BatchRequestQueueF.h +4 -10
- data/dist/ice/cpp/include/Ice/Buffer.h +116 -111
- data/dist/ice/cpp/include/Ice/Communicator.h +411 -0
- data/dist/ice/cpp/include/Ice/CommunicatorF.h +16 -0
- data/dist/ice/cpp/include/Ice/Config.h +46 -62
- data/dist/ice/cpp/include/Ice/Connection.h +410 -0
- data/dist/ice/cpp/include/Ice/ConnectionF.h +36 -0
- data/dist/ice/cpp/include/Ice/ConnectionIF.h +6 -28
- data/dist/ice/cpp/include/Ice/CtrlCHandler.h +56 -0
- data/dist/ice/cpp/include/Ice/Current.h +60 -0
- data/dist/ice/cpp/include/Ice/DefaultSliceLoader.h +160 -0
- data/dist/ice/cpp/include/Ice/Demangle.h +17 -0
- data/dist/ice/cpp/include/Ice/Endpoint.h +298 -0
- data/dist/ice/cpp/include/Ice/EndpointF.h +44 -0
- data/dist/ice/cpp/include/Ice/EndpointSelectionType.h +21 -0
- data/dist/ice/cpp/include/Ice/Exception.h +46 -151
- data/dist/ice/cpp/include/Ice/FacetMap.h +16 -0
- data/dist/ice/cpp/include/Ice/Format.h +11 -27
- data/dist/ice/cpp/include/Ice/Ice.h +53 -48
- data/dist/ice/cpp/include/Ice/IconvStringConverter.h +165 -326
- data/dist/ice/cpp/include/Ice/ImplicitContext.h +76 -0
- data/dist/ice/cpp/include/Ice/IncomingRequest.h +75 -0
- data/dist/ice/cpp/include/Ice/Initialize.h +113 -927
- data/dist/ice/cpp/include/Ice/InputStream.h +748 -1320
- data/dist/ice/cpp/include/Ice/InstanceF.h +4 -10
- data/dist/ice/cpp/include/Ice/Instrumentation.h +319 -0
- data/dist/ice/cpp/include/Ice/LocalException.h +58 -0
- data/dist/ice/cpp/include/Ice/LocalExceptions.h +870 -0
- data/dist/ice/cpp/include/Ice/Logger.h +62 -0
- data/dist/ice/cpp/include/Ice/LoggerUtil.h +124 -147
- data/dist/ice/cpp/include/Ice/MarshaledResult.h +50 -0
- data/dist/ice/cpp/include/Ice/NativePropertiesAdmin.h +41 -71
- data/dist/ice/cpp/include/Ice/Object.h +151 -490
- data/dist/ice/cpp/include/Ice/ObjectAdapter.h +324 -0
- data/dist/ice/cpp/include/Ice/ObjectAdapterF.h +16 -0
- data/dist/ice/cpp/include/Ice/ObjectF.h +5 -19
- data/dist/ice/cpp/include/Ice/ObserverHelper.h +115 -132
- data/dist/ice/cpp/include/Ice/OutgoingAsync.h +392 -748
- data/dist/ice/cpp/include/Ice/OutgoingResponse.h +129 -0
- data/dist/ice/cpp/include/Ice/OutputStream.h +756 -956
- data/dist/ice/cpp/include/Ice/Plugin.h +73 -0
- data/dist/ice/cpp/include/Ice/PluginFactory.h +77 -0
- data/dist/ice/cpp/include/{IceUtil → Ice}/PopDisableWarnings.h +8 -6
- data/dist/ice/cpp/include/Ice/Properties.h +307 -0
- data/dist/ice/cpp/include/Ice/PropertiesF.h +19 -0
- data/dist/ice/cpp/include/Ice/Proxy.h +665 -5094
- data/dist/ice/cpp/include/Ice/ProxyF.h +2 -44
- data/dist/ice/cpp/include/Ice/ProxyFunctions.h +209 -0
- data/dist/ice/cpp/include/Ice/PushDisableWarnings.h +29 -0
- data/dist/ice/cpp/include/Ice/ReferenceF.h +4 -19
- data/dist/ice/cpp/include/Ice/RequestHandlerF.h +8 -18
- data/dist/ice/cpp/include/Ice/SSL/ClientAuthenticationOptions.h +276 -0
- data/dist/ice/cpp/include/Ice/SSL/Config.h +54 -0
- data/dist/ice/cpp/include/Ice/SSL/ConnectionInfo.h +107 -0
- data/dist/ice/cpp/include/Ice/SSL/ConnectionInfoF.h +39 -0
- data/dist/ice/cpp/include/Ice/SSL/EndpointInfo.h +40 -0
- data/dist/ice/cpp/include/Ice/SSL/SSLException.h +32 -0
- data/dist/ice/cpp/include/Ice/SSL/ServerAuthenticationOptions.h +286 -0
- data/dist/ice/cpp/include/Ice/ServantLocator.h +51 -0
- data/dist/ice/cpp/include/Ice/Service.h +182 -342
- data/dist/ice/cpp/include/Ice/SliceLoader.h +67 -0
- data/dist/ice/cpp/include/Ice/SlicedData.h +113 -160
- data/dist/ice/cpp/include/Ice/SlicedDataF.h +17 -27
- data/dist/ice/cpp/include/Ice/StreamHelpers.h +532 -1070
- data/dist/ice/cpp/include/Ice/StreamableTraits.h +291 -0
- data/dist/ice/cpp/include/Ice/StringConverter.h +152 -63
- data/dist/ice/cpp/include/Ice/StringUtil.h +114 -0
- data/dist/ice/cpp/include/Ice/TimerTask.h +24 -0
- data/dist/ice/cpp/include/Ice/TupleCompare.h +103 -0
- data/dist/ice/cpp/include/Ice/UUID.h +6 -9
- data/dist/ice/cpp/include/Ice/UserException.h +46 -0
- data/dist/ice/cpp/include/Ice/UserExceptionFactory.h +4 -79
- data/dist/ice/cpp/include/Ice/Value.h +103 -115
- data/dist/ice/cpp/include/Ice/ValueF.h +6 -11
- data/dist/ice/cpp/include/IceDiscovery/IceDiscovery.h +16 -1877
- data/dist/ice/cpp/include/IceLocatorDiscovery/IceLocatorDiscovery.h +16 -1185
- data/dist/ice/cpp/include/generated/Ice/BuiltinSequences.h +46 -146
- data/dist/ice/cpp/include/generated/Ice/Context.h +40 -0
- data/dist/ice/cpp/include/generated/Ice/EndpointTypes.h +49 -93
- data/dist/ice/cpp/include/generated/Ice/Identity.h +70 -226
- data/dist/ice/cpp/include/generated/Ice/Locator.h +494 -3850
- data/dist/ice/cpp/include/generated/Ice/LocatorRegistry.h +443 -0
- data/dist/ice/cpp/include/generated/Ice/Metrics.h +937 -4603
- data/dist/ice/cpp/include/generated/Ice/OperationMode.h +73 -0
- data/dist/ice/cpp/include/generated/Ice/Process.h +197 -929
- data/dist/ice/cpp/include/generated/Ice/PropertiesAdmin.h +249 -1301
- data/dist/ice/cpp/include/generated/Ice/PropertyDict.h +39 -0
- data/dist/ice/cpp/include/generated/Ice/RemoteLogger.h +637 -2620
- data/dist/ice/cpp/include/generated/Ice/ReplyStatus.h +94 -0
- data/dist/ice/cpp/include/generated/Ice/Router.h +429 -1783
- data/dist/ice/cpp/include/generated/Ice/SliceChecksumDict.h +18 -65
- data/dist/ice/cpp/include/generated/Ice/Version.h +73 -318
- data/dist/ice/cpp/include/generated/IceDiscovery/Lookup.h +498 -0
- data/dist/ice/cpp/include/generated/IceLocatorDiscovery/Lookup.h +387 -0
- data/dist/ice/cpp/src/Ice/Acceptor.h +28 -24
- data/dist/ice/cpp/src/Ice/AcceptorF.h +6 -14
- data/dist/ice/cpp/src/Ice/AddDefaultPluginFactories.h +16 -0
- data/dist/ice/cpp/src/Ice/AddDefaultPluginFactories_all.cpp +43 -0
- data/dist/ice/cpp/src/Ice/AddDefaultPluginFactories_min.cpp +17 -0
- data/dist/ice/cpp/src/Ice/ArgVector.cpp +17 -18
- data/dist/ice/cpp/src/Ice/ArgVector.h +19 -25
- data/dist/ice/cpp/src/Ice/Base64.cpp +66 -66
- data/dist/ice/cpp/src/Ice/Base64.h +14 -19
- data/dist/ice/cpp/src/Ice/BatchRequestQueue.cpp +70 -121
- data/dist/ice/cpp/src/Ice/BatchRequestQueue.h +37 -47
- data/dist/ice/cpp/src/Ice/Buffer.cpp +73 -41
- data/dist/ice/cpp/src/Ice/CheckIdentity.h +21 -0
- data/dist/ice/cpp/src/Ice/CollocatedRequestHandler.cpp +215 -249
- data/dist/ice/cpp/src/Ice/CollocatedRequestHandler.h +38 -60
- data/dist/ice/cpp/src/Ice/Communicator.cpp +399 -0
- data/dist/ice/cpp/src/Ice/CommunicatorFlushBatchAsync.cpp +140 -0
- data/dist/ice/cpp/src/Ice/CommunicatorFlushBatchAsync.h +39 -0
- data/dist/ice/cpp/src/Ice/ConnectRequestHandler.cpp +63 -184
- data/dist/ice/cpp/src/Ice/ConnectRequestHandler.h +30 -51
- data/dist/ice/cpp/src/Ice/ConnectRequestHandlerF.h +4 -14
- data/dist/ice/cpp/src/Ice/Connection.cpp +44 -0
- data/dist/ice/cpp/src/Ice/ConnectionFactory.cpp +578 -792
- data/dist/ice/cpp/src/Ice/ConnectionFactory.h +200 -200
- data/dist/ice/cpp/src/Ice/ConnectionFactoryF.h +6 -19
- data/dist/ice/cpp/src/Ice/ConnectionI.cpp +1674 -1782
- data/dist/ice/cpp/src/Ice/ConnectionI.h +333 -293
- data/dist/ice/cpp/src/Ice/ConnectionOptions.h +22 -0
- data/dist/ice/cpp/src/Ice/Connector.h +25 -19
- data/dist/ice/cpp/src/Ice/ConnectorF.h +4 -11
- data/dist/ice/cpp/src/{IceUtil → Ice}/ConsoleUtil.cpp +32 -53
- data/dist/ice/cpp/src/Ice/ConsoleUtil.h +79 -0
- data/dist/ice/cpp/src/Ice/CtrlCHandler.cpp +189 -0
- data/dist/ice/cpp/src/Ice/Current.cpp +29 -0
- data/dist/ice/cpp/src/Ice/DLLMain.cpp +25 -35
- data/dist/ice/cpp/src/Ice/DefaultSliceLoader.cpp +39 -0
- data/dist/ice/cpp/src/Ice/DefaultsAndOverrides.cpp +41 -119
- data/dist/ice/cpp/src/Ice/DefaultsAndOverrides.h +27 -41
- data/dist/ice/cpp/src/Ice/DefaultsAndOverridesF.h +4 -11
- data/dist/ice/cpp/src/Ice/Demangle.cpp +26 -0
- data/dist/ice/cpp/src/Ice/DisableWarnings.h +31 -0
- data/dist/ice/cpp/src/Ice/DynamicLibrary.cpp +44 -112
- data/dist/ice/cpp/src/Ice/DynamicLibrary.h +91 -0
- data/dist/ice/cpp/src/Ice/Endian.h +40 -0
- data/dist/ice/cpp/src/Ice/EndpointFactory.cpp +35 -59
- data/dist/ice/cpp/src/Ice/EndpointFactory.h +82 -103
- data/dist/ice/cpp/src/Ice/EndpointFactoryF.h +4 -11
- data/dist/ice/cpp/src/Ice/EndpointFactoryManager.cpp +54 -87
- data/dist/ice/cpp/src/Ice/EndpointFactoryManager.h +28 -33
- data/dist/ice/cpp/src/Ice/EndpointFactoryManagerF.h +4 -11
- data/dist/ice/cpp/src/Ice/EndpointI.cpp +53 -23
- data/dist/ice/cpp/src/Ice/EndpointI.h +132 -200
- data/dist/ice/cpp/src/Ice/EndpointIF.h +11 -39
- data/dist/ice/cpp/src/Ice/EventHandler.cpp +3 -26
- data/dist/ice/cpp/src/Ice/EventHandler.h +46 -56
- data/dist/ice/cpp/src/Ice/EventHandlerF.h +4 -14
- data/dist/ice/cpp/src/Ice/Exception.cpp +3 -816
- data/dist/ice/cpp/src/Ice/FileUtil.cpp +476 -0
- data/dist/ice/cpp/src/Ice/FileUtil.h +152 -0
- data/dist/ice/cpp/src/Ice/FixedRequestHandler.cpp +34 -0
- data/dist/ice/cpp/src/Ice/FixedRequestHandler.h +29 -0
- data/dist/ice/cpp/src/Ice/HashUtil.h +46 -32
- data/dist/ice/cpp/src/Ice/HttpParser.cpp +431 -431
- data/dist/ice/cpp/src/Ice/HttpParser.h +95 -100
- data/dist/ice/cpp/src/Ice/IPEndpointI.cpp +207 -324
- data/dist/ice/cpp/src/Ice/IPEndpointI.h +80 -126
- data/dist/ice/cpp/src/Ice/IPEndpointIF.h +6 -17
- data/dist/ice/cpp/src/Ice/IdleTimeoutTransceiverDecorator.cpp +172 -0
- data/dist/ice/cpp/src/Ice/IdleTimeoutTransceiverDecorator.h +89 -0
- data/dist/ice/cpp/src/Ice/ImplicitContext.cpp +109 -0
- data/dist/ice/cpp/src/Ice/IncomingRequest.cpp +66 -0
- data/dist/ice/cpp/src/Ice/Initialize.cpp +48 -542
- data/dist/ice/cpp/src/Ice/InputStream.cpp +848 -1385
- data/dist/ice/cpp/src/Ice/Instance.cpp +816 -827
- data/dist/ice/cpp/src/Ice/Instance.h +202 -212
- data/dist/ice/cpp/src/Ice/InstrumentationI.cpp +526 -661
- data/dist/ice/cpp/src/Ice/InstrumentationI.h +171 -192
- data/dist/ice/cpp/src/Ice/LocalException.cpp +518 -0
- data/dist/ice/cpp/src/Ice/LocalExceptions.cpp +577 -0
- data/dist/ice/cpp/src/Ice/LocatorInfo.cpp +291 -329
- data/dist/ice/cpp/src/Ice/LocatorInfo.h +144 -157
- data/dist/ice/cpp/src/Ice/LocatorInfoF.h +8 -17
- data/dist/ice/cpp/src/Ice/LoggerAdminI.cpp +561 -743
- data/dist/ice/cpp/src/Ice/LoggerAdminI.h +18 -28
- data/dist/ice/cpp/src/Ice/LoggerI.cpp +66 -91
- data/dist/ice/cpp/src/Ice/LoggerI.h +36 -41
- data/dist/ice/cpp/src/Ice/LoggerMiddleware.cpp +176 -0
- data/dist/ice/cpp/src/Ice/LoggerMiddleware.h +42 -0
- data/dist/ice/cpp/src/Ice/LoggerUtil.cpp +14 -38
- data/dist/ice/cpp/src/Ice/MarshaledResult.cpp +20 -0
- data/dist/ice/cpp/src/Ice/MetricsAdminI.cpp +194 -280
- data/dist/ice/cpp/src/Ice/MetricsAdminI.h +600 -0
- data/dist/ice/cpp/src/Ice/MetricsFunctional.h +92 -0
- data/dist/ice/cpp/src/Ice/MetricsObserverI.h +587 -0
- data/dist/ice/cpp/src/Ice/NativePropertiesAdmin.cpp +185 -0
- data/dist/ice/cpp/src/Ice/Network.cpp +595 -917
- data/dist/ice/cpp/src/Ice/Network.h +189 -213
- data/dist/ice/cpp/src/Ice/NetworkF.h +2 -10
- data/dist/ice/cpp/src/Ice/NetworkProxy.cpp +99 -104
- data/dist/ice/cpp/src/Ice/NetworkProxy.h +49 -54
- data/dist/ice/cpp/src/Ice/NetworkProxyF.h +4 -11
- data/dist/ice/cpp/src/Ice/OSLogLoggerI.cpp +16 -18
- data/dist/ice/cpp/src/Ice/OSLogLoggerI.h +22 -27
- data/dist/ice/cpp/src/Ice/Object.cpp +152 -338
- data/dist/ice/cpp/src/Ice/ObjectAdapterFactory.cpp +170 -113
- data/dist/ice/cpp/src/Ice/ObjectAdapterFactory.h +41 -41
- data/dist/ice/cpp/src/Ice/ObjectAdapterFactoryF.h +4 -15
- data/dist/ice/cpp/src/Ice/ObjectAdapterI.cpp +580 -727
- data/dist/ice/cpp/src/Ice/ObjectAdapterI.h +149 -145
- data/dist/ice/cpp/src/Ice/ObserverHelper.cpp +36 -17
- data/dist/ice/cpp/src/Ice/ObserverMiddleware.cpp +96 -0
- data/dist/ice/cpp/src/Ice/ObserverMiddleware.h +25 -0
- data/dist/ice/cpp/src/Ice/OpaqueEndpointI.cpp +147 -187
- data/dist/ice/cpp/src/Ice/OpaqueEndpointI.h +56 -64
- data/dist/ice/cpp/src/{IceUtil → Ice}/Options.cpp +187 -258
- data/dist/ice/cpp/src/Ice/Options.h +119 -0
- data/dist/ice/cpp/src/Ice/OutgoingAsync.cpp +516 -732
- data/dist/ice/cpp/src/Ice/OutgoingResponse.cpp +276 -0
- data/dist/ice/cpp/src/Ice/OutputStream.cpp +610 -543
- data/dist/ice/cpp/src/Ice/OutputUtil.cpp +344 -0
- data/dist/ice/cpp/src/Ice/OutputUtil.h +173 -0
- data/dist/ice/cpp/src/Ice/PluginManagerI.cpp +118 -277
- data/dist/ice/cpp/src/Ice/PluginManagerI.h +41 -48
- data/dist/ice/cpp/src/Ice/Properties.cpp +931 -0
- data/dist/ice/cpp/src/Ice/PropertyNames.cpp +519 -1341
- data/dist/ice/cpp/src/Ice/PropertyNames.h +49 -64
- data/dist/ice/cpp/src/Ice/PropertyUtil.cpp +103 -0
- data/dist/ice/cpp/src/Ice/PropertyUtil.h +31 -0
- data/dist/ice/cpp/src/Ice/Protocol.cpp +129 -94
- data/dist/ice/cpp/src/Ice/Protocol.h +116 -0
- data/dist/ice/cpp/src/Ice/ProtocolInstance.cpp +117 -62
- data/dist/ice/cpp/src/Ice/ProtocolInstance.h +63 -82
- data/dist/ice/cpp/src/Ice/ProtocolInstanceF.h +4 -11
- data/dist/ice/cpp/src/Ice/ProtocolPluginFacade.cpp +10 -32
- data/dist/ice/cpp/src/Ice/ProtocolPluginFacade.h +25 -54
- data/dist/ice/cpp/src/Ice/Proxy.cpp +294 -1357
- data/dist/ice/cpp/src/Ice/ProxyAsync.cpp +684 -0
- data/dist/ice/cpp/src/Ice/ProxyFunctions.cpp +90 -0
- data/dist/ice/cpp/src/Ice/PushDisableDeprecatedWarnings.h +15 -0
- data/dist/ice/cpp/src/Ice/Random.cpp +29 -0
- data/dist/ice/cpp/src/Ice/Random.h +23 -0
- data/dist/ice/cpp/src/Ice/Reference.cpp +635 -1097
- data/dist/ice/cpp/src/Ice/Reference.h +314 -298
- data/dist/ice/cpp/src/Ice/ReferenceFactory.cpp +320 -378
- data/dist/ice/cpp/src/Ice/ReferenceFactory.h +48 -66
- data/dist/ice/cpp/src/Ice/ReferenceFactoryF.h +4 -9
- data/dist/ice/cpp/src/Ice/RequestHandler.cpp +15 -24
- data/dist/ice/cpp/src/Ice/RequestHandler.h +43 -68
- data/dist/ice/cpp/src/Ice/RequestHandlerCache.cpp +76 -0
- data/dist/ice/cpp/src/Ice/RequestHandlerCache.h +33 -0
- data/dist/ice/cpp/src/Ice/ResourceConfig.h +27 -0
- data/dist/ice/cpp/src/Ice/RetryQueue.cpp +51 -57
- data/dist/ice/cpp/src/Ice/RetryQueue.h +39 -46
- data/dist/ice/cpp/src/Ice/RetryQueueF.h +4 -9
- data/dist/ice/cpp/src/Ice/RouterInfo.cpp +97 -201
- data/dist/ice/cpp/src/Ice/RouterInfo.h +61 -118
- data/dist/ice/cpp/src/Ice/RouterInfoF.h +6 -14
- data/dist/ice/cpp/src/Ice/SHA1.cpp +86 -60
- data/dist/ice/cpp/src/Ice/SHA1.h +35 -0
- data/dist/ice/cpp/src/Ice/SSL/DistinguishedName.cpp +89 -0
- data/dist/ice/cpp/src/Ice/SSL/DistinguishedName.h +87 -0
- data/dist/ice/cpp/src/Ice/SSL/OpenSSLEngine.cpp +521 -0
- data/dist/ice/cpp/src/Ice/SSL/OpenSSLEngine.h +40 -0
- data/dist/ice/cpp/src/Ice/SSL/OpenSSLEngineF.h +13 -0
- data/dist/ice/cpp/src/Ice/SSL/OpenSSLTransceiverI.cpp +646 -0
- data/dist/ice/cpp/src/Ice/SSL/OpenSSLTransceiverI.h +80 -0
- data/dist/ice/cpp/src/{IceSSL → Ice/SSL}/RFC2253.cpp +85 -88
- data/dist/ice/cpp/src/Ice/SSL/RFC2253.h +58 -0
- data/dist/ice/cpp/src/Ice/SSL/SSLAcceptorI.cpp +124 -0
- data/dist/ice/cpp/src/Ice/SSL/SSLAcceptorI.h +52 -0
- data/dist/ice/cpp/src/Ice/SSL/SSLConnectorI.cpp +92 -0
- data/dist/ice/cpp/src/Ice/SSL/SSLConnectorI.h +38 -0
- data/dist/ice/cpp/src/Ice/SSL/SSLEndpointI.cpp +377 -0
- data/dist/ice/cpp/src/Ice/SSL/SSLEndpointI.h +84 -0
- data/dist/ice/cpp/src/Ice/SSL/SSLEngine.cpp +115 -0
- data/dist/ice/cpp/src/Ice/SSL/SSLEngine.h +69 -0
- data/dist/ice/cpp/src/Ice/SSL/SSLEngineF.h +14 -0
- data/dist/ice/cpp/src/Ice/SSL/SSLException.cpp +18 -0
- data/dist/ice/cpp/src/Ice/SSL/SSLInstance.cpp +27 -0
- data/dist/ice/cpp/src/Ice/SSL/SSLInstance.h +26 -0
- data/dist/ice/cpp/src/Ice/SSL/SSLInstanceF.h +19 -0
- data/dist/ice/cpp/src/Ice/SSL/SSLUtil.cpp +673 -0
- data/dist/ice/cpp/src/Ice/SSL/SSLUtil.h +118 -0
- data/dist/ice/cpp/src/Ice/SSL/SchannelEngine.cpp +1449 -0
- data/dist/ice/cpp/src/Ice/SSL/SchannelEngine.h +58 -0
- data/dist/ice/cpp/src/Ice/SSL/SchannelEngineF.h +18 -0
- data/dist/ice/cpp/src/Ice/SSL/SchannelTransceiverI.cpp +1088 -0
- data/dist/ice/cpp/src/Ice/SSL/SchannelTransceiverI.h +118 -0
- data/dist/ice/cpp/src/Ice/SSL/SecureTransportEngine.cpp +825 -0
- data/dist/ice/cpp/src/Ice/SSL/SecureTransportEngine.h +44 -0
- data/dist/ice/cpp/src/Ice/SSL/SecureTransportEngineF.h +18 -0
- data/dist/ice/cpp/src/Ice/SSL/SecureTransportTransceiverI.cpp +621 -0
- data/dist/ice/cpp/src/Ice/SSL/SecureTransportTransceiverI.h +91 -0
- data/dist/ice/cpp/src/Ice/SSL/SecureTransportUtil.cpp +1048 -0
- data/dist/ice/cpp/src/Ice/SSL/SecureTransportUtil.h +40 -0
- data/dist/ice/cpp/src/Ice/SSL/TrustManager.cpp +233 -0
- data/dist/ice/cpp/src/Ice/SSL/TrustManager.h +42 -0
- data/dist/ice/cpp/src/Ice/SSL/TrustManagerF.h +14 -0
- data/dist/ice/cpp/src/Ice/ScannerConfig.h +35 -0
- data/dist/ice/cpp/src/Ice/Selector.cpp +341 -606
- data/dist/ice/cpp/src/Ice/Selector.h +167 -224
- data/dist/ice/cpp/src/Ice/ServantManager.cpp +195 -128
- data/dist/ice/cpp/src/Ice/ServantManager.h +52 -55
- data/dist/ice/cpp/src/Ice/ServantManagerF.h +14 -0
- data/dist/ice/cpp/src/Ice/Service.cpp +548 -641
- data/dist/ice/cpp/src/Ice/SharedContext.h +13 -26
- data/dist/ice/cpp/src/Ice/SliceLoader.cpp +53 -0
- data/dist/ice/cpp/src/Ice/SlicedData.cpp +17 -96
- data/dist/ice/cpp/src/Ice/StreamSocket.cpp +104 -151
- data/dist/ice/cpp/src/Ice/StreamSocket.h +48 -60
- data/dist/ice/cpp/src/Ice/StringConverter.cpp +586 -0
- data/dist/ice/cpp/src/Ice/StringUtil.cpp +1137 -0
- data/dist/ice/cpp/src/Ice/SysLoggerI.cpp +41 -47
- data/dist/ice/cpp/src/Ice/SysLoggerI.h +24 -27
- data/dist/ice/cpp/src/Ice/SystemdJournalI.cpp +16 -17
- data/dist/ice/cpp/src/Ice/SystemdJournalI.h +19 -25
- data/dist/ice/cpp/src/Ice/TargetCompare.h +96 -0
- data/dist/ice/cpp/src/Ice/TcpAcceptor.cpp +67 -88
- data/dist/ice/cpp/src/Ice/TcpAcceptor.h +34 -40
- data/dist/ice/cpp/src/Ice/TcpConnector.cpp +42 -41
- data/dist/ice/cpp/src/Ice/TcpConnector.h +26 -35
- data/dist/ice/cpp/src/Ice/TcpEndpointI.cpp +172 -146
- data/dist/ice/cpp/src/Ice/TcpEndpointI.h +76 -80
- data/dist/ice/cpp/src/Ice/TcpTransceiver.cpp +38 -26
- data/dist/ice/cpp/src/Ice/TcpTransceiver.h +40 -45
- data/dist/ice/cpp/src/Ice/ThreadPool.cpp +333 -515
- data/dist/ice/cpp/src/Ice/ThreadPool.h +202 -290
- data/dist/ice/cpp/src/Ice/ThreadPoolF.h +14 -0
- data/dist/ice/cpp/src/Ice/TimeUtil.cpp +47 -0
- data/dist/ice/cpp/src/Ice/TimeUtil.h +21 -0
- data/dist/ice/cpp/src/Ice/Timer.cpp +73 -167
- data/dist/ice/cpp/src/Ice/Timer.h +212 -0
- data/dist/ice/cpp/src/Ice/TraceLevels.cpp +11 -29
- data/dist/ice/cpp/src/Ice/TraceLevels.h +22 -28
- data/dist/ice/cpp/src/Ice/TraceLevelsF.h +4 -11
- data/dist/ice/cpp/src/Ice/TraceUtil.cpp +136 -215
- data/dist/ice/cpp/src/Ice/TraceUtil.h +27 -16
- data/dist/ice/cpp/src/Ice/Transceiver.cpp +3 -7
- data/dist/ice/cpp/src/Ice/Transceiver.h +35 -32
- data/dist/ice/cpp/src/Ice/TransceiverF.h +10 -20
- data/dist/ice/cpp/src/Ice/UUID.cpp +79 -0
- data/dist/ice/cpp/src/Ice/UdpConnector.cpp +39 -39
- data/dist/ice/cpp/src/Ice/UdpConnector.h +27 -36
- data/dist/ice/cpp/src/Ice/UdpEndpointI.cpp +178 -213
- data/dist/ice/cpp/src/Ice/UdpEndpointI.h +82 -85
- data/dist/ice/cpp/src/Ice/UdpTransceiver.cpp +201 -221
- data/dist/ice/cpp/src/Ice/UdpTransceiver.h +68 -74
- data/dist/ice/cpp/{include/IceUtil → src/Ice}/UndefSysMacros.h +12 -12
- data/dist/ice/cpp/src/Ice/UniqueRef.h +77 -0
- data/dist/ice/cpp/src/Ice/UserException.cpp +58 -0
- data/dist/ice/cpp/src/Ice/Value.cpp +107 -38
- data/dist/ice/cpp/src/Ice/WSAcceptor.cpp +10 -15
- data/dist/ice/cpp/src/Ice/WSAcceptor.h +31 -37
- data/dist/ice/cpp/src/Ice/WSConnector.cpp +25 -40
- data/dist/ice/cpp/src/Ice/WSConnector.h +26 -33
- data/dist/ice/cpp/src/Ice/WSEndpoint.cpp +164 -217
- data/dist/ice/cpp/src/Ice/WSEndpoint.h +72 -83
- data/dist/ice/cpp/src/Ice/WSTransceiver.cpp +469 -458
- data/dist/ice/cpp/src/Ice/WSTransceiver.h +117 -123
- data/dist/ice/cpp/src/Ice/generated/BuiltinSequences.cpp +20 -29
- data/dist/ice/cpp/src/Ice/generated/Context.cpp +40 -0
- data/dist/ice/cpp/src/Ice/generated/EndpointTypes.cpp +20 -31
- data/dist/ice/cpp/src/Ice/generated/Identity.cpp +24 -34
- data/dist/ice/cpp/src/Ice/generated/Locator.cpp +454 -1744
- data/dist/ice/cpp/src/Ice/generated/LocatorRegistry.cpp +577 -0
- data/dist/ice/cpp/src/Ice/generated/Metrics.cpp +824 -1971
- data/dist/ice/cpp/src/Ice/generated/OperationMode.cpp +56 -0
- data/dist/ice/cpp/src/Ice/generated/Process.cpp +190 -331
- data/dist/ice/cpp/src/Ice/generated/PropertiesAdmin.cpp +289 -449
- data/dist/ice/cpp/src/Ice/generated/PropertyDict.cpp +40 -0
- data/dist/ice/cpp/src/Ice/generated/RemoteLogger.cpp +547 -867
- data/dist/ice/cpp/src/Ice/generated/ReplyStatus.cpp +70 -0
- data/dist/ice/cpp/src/Ice/generated/Router.cpp +406 -723
- data/dist/ice/cpp/src/Ice/generated/SliceChecksumDict.cpp +19 -29
- data/dist/ice/cpp/src/Ice/generated/Version.cpp +28 -31
- data/dist/ice/cpp/src/IceDiscovery/LocatorI.cpp +76 -139
- data/dist/ice/cpp/src/IceDiscovery/LocatorI.h +55 -96
- data/dist/ice/cpp/src/IceDiscovery/LookupI.cpp +190 -303
- data/dist/ice/cpp/src/IceDiscovery/LookupI.h +126 -185
- data/dist/ice/cpp/src/IceDiscovery/PluginI.cpp +56 -77
- data/dist/ice/cpp/src/IceDiscovery/PluginI.h +20 -25
- data/dist/ice/cpp/src/IceDiscovery/generated/Lookup.cpp +638 -0
- data/dist/ice/cpp/src/IceLocatorDiscovery/Plugin.h +14 -37
- data/dist/ice/cpp/src/IceLocatorDiscovery/PluginI.cpp +411 -649
- data/dist/ice/cpp/src/IceLocatorDiscovery/generated/Lookup.cpp +468 -0
- data/dist/ice/cpp/src/Slice/DeprecationReporter.cpp +172 -0
- data/dist/ice/cpp/src/Slice/DeprecationReporter.h +14 -0
- data/dist/ice/cpp/src/Slice/DocCommentParser.cpp +736 -0
- data/dist/ice/cpp/src/Slice/DocCommentParser.h +61 -0
- data/dist/ice/cpp/src/Slice/FileTracker.cpp +25 -75
- data/dist/ice/cpp/src/Slice/FileTracker.h +35 -56
- data/dist/ice/cpp/src/Slice/Grammar.cpp +2711 -3382
- data/dist/ice/cpp/src/Slice/Grammar.h +95 -75
- data/dist/ice/cpp/src/Slice/GrammarUtil.h +117 -217
- data/dist/ice/cpp/src/Slice/MetadataValidation.cpp +486 -0
- data/dist/ice/cpp/src/Slice/MetadataValidation.h +106 -0
- data/dist/ice/cpp/src/Slice/Parser.cpp +3068 -5223
- data/dist/ice/cpp/src/Slice/Parser.h +1086 -1065
- data/dist/ice/cpp/src/Slice/Preprocessor.cpp +97 -599
- data/dist/ice/cpp/src/Slice/Preprocessor.h +26 -42
- data/dist/ice/cpp/src/Slice/Scanner.cpp +1562 -924
- data/dist/ice/cpp/src/Slice/SliceUtil.cpp +517 -113
- data/dist/ice/cpp/src/Slice/StringLiteralUtil.cpp +254 -269
- data/dist/ice/cpp/src/Slice/Util.h +126 -35
- data/dist/ice/cpp/src/slice2rb/Main.cpp +13 -15
- data/dist/ice/cpp/src/slice2rb/Ruby.cpp +250 -0
- data/dist/ice/cpp/src/slice2rb/RubyUtil.cpp +1197 -0
- data/dist/ice/cpp/src/slice2rb/RubyUtil.h +56 -0
- data/dist/ice/slice/Glacier2/Metrics.ice +34 -75
- data/dist/ice/slice/Glacier2/PermissionsVerifier.ice +42 -98
- data/dist/ice/slice/Glacier2/Router.ice +80 -173
- data/dist/ice/slice/Glacier2/SSLInfo.ice +23 -40
- data/dist/ice/slice/Glacier2/Session.ice +120 -261
- data/dist/ice/slice/Ice/BuiltinSequences.ice +33 -38
- data/dist/ice/slice/Ice/Context.ice +24 -0
- data/dist/ice/slice/Ice/EndpointTypes.ice +35 -33
- data/dist/ice/slice/Ice/Identity.ice +24 -63
- data/dist/ice/slice/Ice/Locator.ice +61 -226
- data/dist/ice/slice/Ice/LocatorRegistry.ice +77 -0
- data/dist/ice/slice/Ice/Metrics.ice +189 -424
- data/dist/ice/slice/Ice/OperationMode.ice +38 -0
- data/dist/ice/slice/Ice/Process.ice +16 -52
- data/dist/ice/slice/Ice/PropertiesAdmin.ice +25 -75
- data/dist/ice/slice/Ice/PropertyDict.ice +23 -0
- data/dist/ice/slice/Ice/RemoteLogger.ice +113 -213
- data/dist/ice/slice/Ice/ReplyStatus.ice +65 -0
- data/dist/ice/slice/Ice/Router.ice +42 -91
- data/dist/ice/slice/Ice/SliceChecksumDict.ice +7 -25
- data/dist/ice/slice/Ice/Version.ice +31 -39
- data/dist/ice/slice/IceBox/ServiceManager.ice +79 -0
- data/dist/ice/slice/IceGrid/Admin.ice +942 -1918
- data/dist/ice/slice/IceGrid/Descriptor.ice +476 -1051
- data/dist/ice/slice/IceGrid/Exception.ice +86 -384
- data/dist/ice/slice/IceGrid/FileParser.ice +23 -59
- data/dist/ice/slice/IceGrid/Registry.ice +117 -256
- data/dist/ice/slice/IceGrid/Session.ice +46 -110
- data/dist/ice/slice/IceGrid/UserAccountMapper.ice +22 -57
- data/dist/ice/slice/IceStorm/IceStorm.ice +173 -401
- data/dist/ice/slice/IceStorm/Metrics.ice +28 -70
- data/dist/lib/Glacier2/Metrics.rb +16 -31
- data/dist/lib/Glacier2/PermissionsVerifier.rb +18 -50
- data/dist/lib/Glacier2/Router.rb +20 -42
- data/dist/lib/Glacier2/SSLInfo.rb +14 -22
- data/dist/lib/Glacier2/Session.rb +53 -113
- data/dist/lib/Glacier2.rb +6 -6
- data/dist/lib/Ice/BuiltinSequences.rb +14 -26
- data/dist/lib/Ice/CompressBatch.rb +50 -0
- data/dist/lib/Ice/Context.rb +12 -0
- data/dist/lib/Ice/EndpointSelectionType.rb +49 -0
- data/dist/lib/Ice/EndpointTypes.rb +14 -55
- data/dist/lib/Ice/Exception.rb +20 -0
- data/dist/lib/Ice/Identity.rb +10 -26
- data/dist/lib/Ice/IdentitySpaceship.rb +16 -0
- data/dist/lib/Ice/InitializationData.rb +12 -0
- data/dist/lib/Ice/LocalExceptions.rb +168 -0
- data/dist/lib/Ice/Locator.rb +21 -134
- data/dist/lib/Ice/LocatorRegistry.rb +73 -0
- data/dist/lib/Ice/Metrics.rb +85 -132
- data/dist/lib/Ice/OperationMode.rb +58 -0
- data/dist/lib/Ice/Process.rb +12 -31
- data/dist/lib/Ice/PropertiesAdmin.rb +12 -36
- data/dist/lib/Ice/PropertyDict.rb +12 -0
- data/dist/lib/Ice/Proxy.rb +85 -0
- data/dist/lib/Ice/ProxyFunctions.rb +69 -0
- data/dist/lib/Ice/RemoteLogger.rb +29 -60
- data/dist/lib/Ice/ReplyStatus.rb +65 -0
- data/dist/lib/Ice/Router.rb +19 -47
- data/dist/lib/Ice/SliceChecksumDict.rb +5 -17
- data/dist/lib/Ice/SliceUtil.rb +41 -0
- data/dist/lib/Ice/Struct.rb +11 -0
- data/dist/lib/Ice/ToStringMode.rb +50 -0
- data/dist/lib/Ice/Value.rb +93 -0
- data/dist/lib/Ice/Version.rb +12 -24
- data/dist/lib/Ice.rb +29 -665
- data/dist/lib/IceBox/ServiceManager.rb +104 -0
- data/dist/lib/IceBox.rb +2 -4
- data/dist/lib/IceGrid/Admin.rb +303 -291
- data/dist/lib/IceGrid/Descriptor.rb +147 -192
- data/dist/lib/IceGrid/Exception.rb +26 -257
- data/dist/lib/IceGrid/FileParser.rb +12 -36
- data/dist/lib/IceGrid/Registry.rb +35 -76
- data/dist/lib/IceGrid/Session.rb +19 -34
- data/dist/lib/IceGrid/UserAccountMapper.rb +11 -34
- data/dist/lib/IceGrid.rb +3 -3
- data/dist/lib/IceStorm/IceStorm.rb +51 -132
- data/dist/lib/IceStorm/Metrics.rb +19 -37
- data/dist/lib/IceStorm.rb +3 -5
- data/extconf.rb +6 -8
- data/ice.gemspec +3 -3
- data/scripts/slice2rb +1 -3
- metadata +206 -386
- data/dist/IceRuby/ValueFactoryManager.cpp +0 -445
- data/dist/IceRuby/ValueFactoryManager.h +0 -95
- data/dist/ice/cpp/include/Ice/Application.h +0 -326
- data/dist/ice/cpp/include/Ice/AsyncResult.h +0 -155
- data/dist/ice/cpp/include/Ice/AsyncResultF.h +0 -23
- data/dist/ice/cpp/include/Ice/BatchRequestInterceptor.h +0 -75
- data/dist/ice/cpp/include/Ice/CommunicatorAsync.h +0 -154
- data/dist/ice/cpp/include/Ice/Comparable.h +0 -205
- data/dist/ice/cpp/include/Ice/ConnectionAsync.h +0 -302
- data/dist/ice/cpp/include/Ice/ConsoleUtil.h +0 -23
- data/dist/ice/cpp/include/Ice/DefaultValueFactory.h +0 -57
- data/dist/ice/cpp/include/Ice/DispatchInterceptor.h +0 -41
- data/dist/ice/cpp/include/Ice/Dispatcher.h +0 -67
- data/dist/ice/cpp/include/Ice/DynamicLibrary.h +0 -102
- data/dist/ice/cpp/include/Ice/DynamicLibraryF.h +0 -24
- data/dist/ice/cpp/include/Ice/ExceptionHelpers.h +0 -74
- data/dist/ice/cpp/include/Ice/FactoryTable.h +0 -73
- data/dist/ice/cpp/include/Ice/FactoryTableInit.h +0 -84
- data/dist/ice/cpp/include/Ice/Functional.h +0 -140
- data/dist/ice/cpp/include/Ice/GCObject.h +0 -76
- data/dist/ice/cpp/include/Ice/Handle.h +0 -182
- data/dist/ice/cpp/include/Ice/Incoming.h +0 -225
- data/dist/ice/cpp/include/Ice/IncomingAsync.h +0 -186
- data/dist/ice/cpp/include/Ice/IncomingAsyncF.h +0 -36
- data/dist/ice/cpp/include/Ice/InterfaceByValue.h +0 -57
- data/dist/ice/cpp/include/Ice/LocalObject.h +0 -35
- data/dist/ice/cpp/include/Ice/LocalObjectF.h +0 -21
- data/dist/ice/cpp/include/Ice/MetricsAdminI.h +0 -715
- data/dist/ice/cpp/include/Ice/MetricsFunctional.h +0 -159
- data/dist/ice/cpp/include/Ice/MetricsObserverI.h +0 -669
- data/dist/ice/cpp/include/Ice/Optional.h +0 -1114
- data/dist/ice/cpp/include/Ice/OutgoingAsyncF.h +0 -39
- data/dist/ice/cpp/include/Ice/Protocol.h +0 -274
- data/dist/ice/cpp/include/Ice/ProxyFactoryF.h +0 -21
- data/dist/ice/cpp/include/Ice/ProxyHandle.h +0 -318
- data/dist/ice/cpp/include/Ice/RegisterPlugins.h +0 -127
- data/dist/ice/cpp/include/Ice/ResponseHandlerF.h +0 -25
- data/dist/ice/cpp/include/Ice/SHA1.h +0 -40
- data/dist/ice/cpp/include/Ice/ServantManagerF.h +0 -21
- data/dist/ice/cpp/include/Ice/SliceChecksums.h +0 -33
- data/dist/ice/cpp/include/Ice/ThreadPoolF.h +0 -23
- data/dist/ice/cpp/include/Ice/UniquePtr.h +0 -95
- data/dist/ice/cpp/include/Ice/UniqueRef.h +0 -97
- data/dist/ice/cpp/include/IceSSL/Config.h +0 -21
- data/dist/ice/cpp/include/IceSSL/IceSSL.h +0 -24
- data/dist/ice/cpp/include/IceSSL/OpenSSL.h +0 -147
- data/dist/ice/cpp/include/IceSSL/Plugin.h +0 -712
- data/dist/ice/cpp/include/IceSSL/SChannel.h +0 -72
- data/dist/ice/cpp/include/IceSSL/SecureTransport.h +0 -72
- data/dist/ice/cpp/include/IceUtil/Atomic.h +0 -179
- data/dist/ice/cpp/include/IceUtil/Cond.h +0 -317
- data/dist/ice/cpp/include/IceUtil/Config.h +0 -392
- data/dist/ice/cpp/include/IceUtil/ConsoleUtil.h +0 -92
- data/dist/ice/cpp/include/IceUtil/CountDownLatch.h +0 -45
- data/dist/ice/cpp/include/IceUtil/CtrlCHandler.h +0 -96
- data/dist/ice/cpp/include/IceUtil/DisableWarnings.h +0 -44
- data/dist/ice/cpp/include/IceUtil/Exception.h +0 -394
- data/dist/ice/cpp/include/IceUtil/FileUtil.h +0 -140
- data/dist/ice/cpp/include/IceUtil/Functional.h +0 -389
- data/dist/ice/cpp/include/IceUtil/Handle.h +0 -261
- data/dist/ice/cpp/include/IceUtil/IceUtil.h +0 -40
- data/dist/ice/cpp/include/IceUtil/InputUtil.h +0 -42
- data/dist/ice/cpp/include/IceUtil/Iterator.h +0 -31
- data/dist/ice/cpp/include/IceUtil/Lock.h +0 -128
- data/dist/ice/cpp/include/IceUtil/Monitor.h +0 -243
- data/dist/ice/cpp/include/IceUtil/Mutex.h +0 -349
- data/dist/ice/cpp/include/IceUtil/MutexProtocol.h +0 -23
- data/dist/ice/cpp/include/IceUtil/MutexPtrLock.h +0 -78
- data/dist/ice/cpp/include/IceUtil/MutexPtrTryLock.h +0 -77
- data/dist/ice/cpp/include/IceUtil/Optional.h +0 -433
- data/dist/ice/cpp/include/IceUtil/Options.h +0 -135
- data/dist/ice/cpp/include/IceUtil/OutputUtil.h +0 -383
- data/dist/ice/cpp/include/IceUtil/PushDisableWarnings.h +0 -33
- data/dist/ice/cpp/include/IceUtil/Random.h +0 -55
- data/dist/ice/cpp/include/IceUtil/RecMutex.h +0 -107
- data/dist/ice/cpp/include/IceUtil/ResourceConfig.h +0 -37
- data/dist/ice/cpp/include/IceUtil/ScannerConfig.h +0 -40
- data/dist/ice/cpp/include/IceUtil/ScopedArray.h +0 -98
- data/dist/ice/cpp/include/IceUtil/Shared.h +0 -127
- data/dist/ice/cpp/include/IceUtil/StopWatch.h +0 -49
- data/dist/ice/cpp/include/IceUtil/StringConverter.h +0 -195
- data/dist/ice/cpp/include/IceUtil/StringUtil.h +0 -97
- data/dist/ice/cpp/include/IceUtil/Thread.h +0 -160
- data/dist/ice/cpp/include/IceUtil/ThreadException.h +0 -94
- data/dist/ice/cpp/include/IceUtil/Time.h +0 -205
- data/dist/ice/cpp/include/IceUtil/Timer.h +0 -153
- data/dist/ice/cpp/include/IceUtil/UUID.h +0 -21
- data/dist/ice/cpp/include/generated/Glacier2/Metrics.h +0 -475
- data/dist/ice/cpp/include/generated/Glacier2/PermissionsVerifier.h +0 -1430
- data/dist/ice/cpp/include/generated/Glacier2/PermissionsVerifierF.h +0 -147
- data/dist/ice/cpp/include/generated/Glacier2/Router.h +0 -3260
- data/dist/ice/cpp/include/generated/Glacier2/RouterF.h +0 -125
- data/dist/ice/cpp/include/generated/Glacier2/SSLInfo.h +0 -223
- data/dist/ice/cpp/include/generated/Glacier2/Session.h +0 -5894
- data/dist/ice/cpp/include/generated/Ice/Communicator.h +0 -1162
- data/dist/ice/cpp/include/generated/Ice/CommunicatorF.h +0 -101
- data/dist/ice/cpp/include/generated/Ice/Connection.h +0 -1703
- data/dist/ice/cpp/include/generated/Ice/ConnectionF.h +0 -119
- data/dist/ice/cpp/include/generated/Ice/Current.h +0 -322
- data/dist/ice/cpp/include/generated/Ice/Endpoint.h +0 -979
- data/dist/ice/cpp/include/generated/Ice/EndpointF.h +0 -166
- data/dist/ice/cpp/include/generated/Ice/FacetMap.h +0 -80
- data/dist/ice/cpp/include/generated/Ice/ImplicitContext.h +0 -284
- data/dist/ice/cpp/include/generated/Ice/ImplicitContextF.h +0 -101
- data/dist/ice/cpp/include/generated/Ice/Instrumentation.h +0 -1203
- data/dist/ice/cpp/include/generated/Ice/InstrumentationF.h +0 -128
- data/dist/ice/cpp/include/generated/Ice/LocalException.h +0 -7437
- data/dist/ice/cpp/include/generated/Ice/LocatorF.h +0 -147
- data/dist/ice/cpp/include/generated/Ice/Logger.h +0 -237
- data/dist/ice/cpp/include/generated/Ice/LoggerF.h +0 -101
- data/dist/ice/cpp/include/generated/Ice/ObjectAdapter.h +0 -1181
- data/dist/ice/cpp/include/generated/Ice/ObjectAdapterF.h +0 -101
- data/dist/ice/cpp/include/generated/Ice/ObjectFactory.h +0 -203
- data/dist/ice/cpp/include/generated/Ice/Plugin.h +0 -318
- data/dist/ice/cpp/include/generated/Ice/PluginF.h +0 -110
- data/dist/ice/cpp/include/generated/Ice/ProcessF.h +0 -125
- data/dist/ice/cpp/include/generated/Ice/Properties.h +0 -452
- data/dist/ice/cpp/include/generated/Ice/PropertiesF.h +0 -134
- data/dist/ice/cpp/include/generated/Ice/RouterF.h +0 -125
- data/dist/ice/cpp/include/generated/Ice/ServantLocator.h +0 -305
- data/dist/ice/cpp/include/generated/Ice/ServantLocatorF.h +0 -101
- data/dist/ice/cpp/include/generated/Ice/ValueFactory.h +0 -330
- data/dist/ice/cpp/include/generated/IceBox/IceBox.h +0 -3269
- data/dist/ice/cpp/include/generated/IceGrid/Admin.h +0 -33773
- data/dist/ice/cpp/include/generated/IceGrid/Descriptor.h +0 -5254
- data/dist/ice/cpp/include/generated/IceGrid/Exception.h +0 -2834
- data/dist/ice/cpp/include/generated/IceGrid/FileParser.h +0 -824
- data/dist/ice/cpp/include/generated/IceGrid/PluginFacade.h +0 -635
- data/dist/ice/cpp/include/generated/IceGrid/Registry.h +0 -5089
- data/dist/ice/cpp/include/generated/IceGrid/Session.h +0 -2240
- data/dist/ice/cpp/include/generated/IceGrid/UserAccountMapper.h +0 -800
- data/dist/ice/cpp/include/generated/IcePatch2/FileInfo.h +0 -325
- data/dist/ice/cpp/include/generated/IcePatch2/FileServer.h +0 -2891
- data/dist/ice/cpp/include/generated/IceSSL/ConnectionInfo.h +0 -228
- data/dist/ice/cpp/include/generated/IceSSL/ConnectionInfoF.h +0 -101
- data/dist/ice/cpp/include/generated/IceSSL/EndpointInfo.h +0 -186
- data/dist/ice/cpp/include/generated/IceStorm/IceStorm.h +0 -6627
- data/dist/ice/cpp/include/generated/IceStorm/Metrics.h +0 -665
- data/dist/ice/cpp/src/Ice/ACM.cpp +0 -380
- data/dist/ice/cpp/src/Ice/ACM.h +0 -119
- data/dist/ice/cpp/src/Ice/ACMF.h +0 -30
- data/dist/ice/cpp/src/Ice/Acceptor.cpp +0 -16
- data/dist/ice/cpp/src/Ice/Application.cpp +0 -661
- data/dist/ice/cpp/src/Ice/AsyncResult.cpp +0 -70
- data/dist/ice/cpp/src/Ice/CommunicatorI.cpp +0 -586
- data/dist/ice/cpp/src/Ice/CommunicatorI.h +0 -167
- data/dist/ice/cpp/src/Ice/Cond.cpp +0 -381
- data/dist/ice/cpp/src/Ice/ConnectionRequestHandler.cpp +0 -73
- data/dist/ice/cpp/src/Ice/ConnectionRequestHandler.h +0 -41
- data/dist/ice/cpp/src/Ice/Connector.cpp +0 -16
- data/dist/ice/cpp/src/Ice/CountDownLatch.cpp +0 -171
- data/dist/ice/cpp/src/Ice/DispatchInterceptor.cpp +0 -37
- data/dist/ice/cpp/src/Ice/FactoryTable.cpp +0 -162
- data/dist/ice/cpp/src/Ice/FactoryTableInit.cpp +0 -88
- data/dist/ice/cpp/src/Ice/GCObject.cpp +0 -442
- data/dist/ice/cpp/src/Ice/IconvStringConverter.cpp +0 -51
- data/dist/ice/cpp/src/Ice/ImplicitContextI.cpp +0 -655
- data/dist/ice/cpp/src/Ice/ImplicitContextI.h +0 -48
- data/dist/ice/cpp/src/Ice/Incoming.cpp +0 -795
- data/dist/ice/cpp/src/Ice/IncomingAsync.cpp +0 -230
- data/dist/ice/cpp/src/Ice/IncomingRequest.h +0 -33
- data/dist/ice/cpp/src/Ice/LocalObject.cpp +0 -23
- data/dist/ice/cpp/src/Ice/MetricsObserverI.cpp +0 -8
- data/dist/ice/cpp/src/Ice/PropertiesAdminI.cpp +0 -265
- data/dist/ice/cpp/src/Ice/PropertiesAdminI.h +0 -64
- data/dist/ice/cpp/src/Ice/PropertiesI.cpp +0 -739
- data/dist/ice/cpp/src/Ice/PropertiesI.h +0 -70
- data/dist/ice/cpp/src/Ice/ProtocolPluginFacadeF.h +0 -21
- data/dist/ice/cpp/src/Ice/ProxyFactory.cpp +0 -300
- data/dist/ice/cpp/src/Ice/ProxyFactory.h +0 -57
- data/dist/ice/cpp/src/Ice/RegisterPluginsInit.cpp +0 -38
- data/dist/ice/cpp/src/Ice/RegisterPluginsInit.h +0 -20
- data/dist/ice/cpp/src/Ice/ReplyStatus.h +0 -24
- data/dist/ice/cpp/src/Ice/RequestHandlerFactory.cpp +0 -77
- data/dist/ice/cpp/src/Ice/RequestHandlerFactory.h +0 -37
- data/dist/ice/cpp/src/Ice/ResponseHandler.cpp +0 -12
- data/dist/ice/cpp/src/Ice/ResponseHandler.h +0 -43
- data/dist/ice/cpp/src/Ice/SliceChecksums.cpp +0 -75
- data/dist/ice/cpp/src/Ice/StringConverterPlugin.cpp +0 -192
- data/dist/ice/cpp/src/Ice/StringUtil.h +0 -30
- data/dist/ice/cpp/src/Ice/Thread.cpp +0 -569
- data/dist/ice/cpp/src/Ice/ValueFactoryManagerI.cpp +0 -61
- data/dist/ice/cpp/src/Ice/ValueFactoryManagerI.h +0 -37
- data/dist/ice/cpp/src/Ice/VirtualShared.h +0 -38
- data/dist/ice/cpp/src/Ice/generated/Communicator.cpp +0 -79
- data/dist/ice/cpp/src/Ice/generated/CommunicatorF.cpp +0 -61
- data/dist/ice/cpp/src/Ice/generated/Connection.cpp +0 -155
- data/dist/ice/cpp/src/Ice/generated/ConnectionF.cpp +0 -61
- data/dist/ice/cpp/src/Ice/generated/Current.cpp +0 -62
- data/dist/ice/cpp/src/Ice/generated/Endpoint.cpp +0 -147
- data/dist/ice/cpp/src/Ice/generated/EndpointF.cpp +0 -61
- data/dist/ice/cpp/src/Ice/generated/FacetMap.cpp +0 -49
- data/dist/ice/cpp/src/Ice/generated/ImplicitContext.cpp +0 -75
- data/dist/ice/cpp/src/Ice/generated/ImplicitContextF.cpp +0 -61
- data/dist/ice/cpp/src/Ice/generated/Instrumentation.cpp +0 -188
- data/dist/ice/cpp/src/Ice/generated/InstrumentationF.cpp +0 -66
- data/dist/ice/cpp/src/Ice/generated/LocalException.cpp +0 -3262
- data/dist/ice/cpp/src/Ice/generated/LocatorF.cpp +0 -63
- data/dist/ice/cpp/src/Ice/generated/Logger.cpp +0 -73
- data/dist/ice/cpp/src/Ice/generated/LoggerF.cpp +0 -61
- data/dist/ice/cpp/src/Ice/generated/ObjectAdapter.cpp +0 -79
- data/dist/ice/cpp/src/Ice/generated/ObjectAdapterF.cpp +0 -61
- data/dist/ice/cpp/src/Ice/generated/ObjectFactory.cpp +0 -75
- data/dist/ice/cpp/src/Ice/generated/Plugin.cpp +0 -87
- data/dist/ice/cpp/src/Ice/generated/PluginF.cpp +0 -61
- data/dist/ice/cpp/src/Ice/generated/ProcessF.cpp +0 -63
- data/dist/ice/cpp/src/Ice/generated/Properties.cpp +0 -78
- data/dist/ice/cpp/src/Ice/generated/PropertiesF.cpp +0 -63
- data/dist/ice/cpp/src/Ice/generated/RouterF.cpp +0 -63
- data/dist/ice/cpp/src/Ice/generated/ServantLocator.cpp +0 -75
- data/dist/ice/cpp/src/Ice/generated/ServantLocatorF.cpp +0 -61
- data/dist/ice/cpp/src/Ice/generated/ValueFactory.cpp +0 -83
- data/dist/ice/cpp/src/Ice/ios/StreamAcceptor.cpp +0 -154
- data/dist/ice/cpp/src/Ice/ios/StreamAcceptor.h +0 -49
- data/dist/ice/cpp/src/Ice/ios/StreamConnector.cpp +0 -146
- data/dist/ice/cpp/src/Ice/ios/StreamConnector.h +0 -52
- data/dist/ice/cpp/src/Ice/ios/StreamEndpointI.cpp +0 -477
- data/dist/ice/cpp/src/Ice/ios/StreamEndpointI.h +0 -156
- data/dist/ice/cpp/src/Ice/ios/StreamTransceiver.cpp +0 -570
- data/dist/ice/cpp/src/Ice/ios/StreamTransceiver.h +0 -93
- data/dist/ice/cpp/src/IceDiscovery/generated/IceDiscovery/IceDiscovery.h +0 -1889
- data/dist/ice/cpp/src/IceDiscovery/generated/IceDiscovery.cpp +0 -915
- data/dist/ice/cpp/src/IceLocatorDiscovery/generated/IceLocatorDiscovery/IceLocatorDiscovery.h +0 -1197
- data/dist/ice/cpp/src/IceLocatorDiscovery/generated/IceLocatorDiscovery.cpp +0 -730
- data/dist/ice/cpp/src/IceSSL/AcceptorI.cpp +0 -105
- data/dist/ice/cpp/src/IceSSL/AcceptorI.h +0 -52
- data/dist/ice/cpp/src/IceSSL/CertificateI.cpp +0 -301
- data/dist/ice/cpp/src/IceSSL/CertificateI.h +0 -64
- data/dist/ice/cpp/src/IceSSL/ConnectorI.cpp +0 -102
- data/dist/ice/cpp/src/IceSSL/ConnectorI.h +0 -44
- data/dist/ice/cpp/src/IceSSL/EndpointI.cpp +0 -372
- data/dist/ice/cpp/src/IceSSL/EndpointI.h +0 -100
- data/dist/ice/cpp/src/IceSSL/Instance.cpp +0 -28
- data/dist/ice/cpp/src/IceSSL/Instance.h +0 -37
- data/dist/ice/cpp/src/IceSSL/InstanceF.h +0 -33
- data/dist/ice/cpp/src/IceSSL/OpenSSLCertificateI.cpp +0 -688
- data/dist/ice/cpp/src/IceSSL/OpenSSLEngine.cpp +0 -1147
- data/dist/ice/cpp/src/IceSSL/OpenSSLEngine.h +0 -59
- data/dist/ice/cpp/src/IceSSL/OpenSSLEngineF.h +0 -27
- data/dist/ice/cpp/src/IceSSL/OpenSSLPluginI.cpp +0 -127
- data/dist/ice/cpp/src/IceSSL/OpenSSLTransceiverI.cpp +0 -1092
- data/dist/ice/cpp/src/IceSSL/OpenSSLTransceiverI.h +0 -90
- data/dist/ice/cpp/src/IceSSL/OpenSSLUtil.cpp +0 -288
- data/dist/ice/cpp/src/IceSSL/OpenSSLUtil.h +0 -58
- data/dist/ice/cpp/src/IceSSL/PluginI.cpp +0 -246
- data/dist/ice/cpp/src/IceSSL/PluginI.h +0 -67
- data/dist/ice/cpp/src/IceSSL/RFC2253.h +0 -62
- data/dist/ice/cpp/src/IceSSL/SChannelCertificateI.cpp +0 -721
- data/dist/ice/cpp/src/IceSSL/SChannelEngine.cpp +0 -1283
- data/dist/ice/cpp/src/IceSSL/SChannelEngine.h +0 -123
- data/dist/ice/cpp/src/IceSSL/SChannelEngineF.h +0 -31
- data/dist/ice/cpp/src/IceSSL/SChannelPluginI.cpp +0 -73
- data/dist/ice/cpp/src/IceSSL/SChannelTransceiverI.cpp +0 -1174
- data/dist/ice/cpp/src/IceSSL/SChannelTransceiverI.h +0 -133
- data/dist/ice/cpp/src/IceSSL/SSLEngine.cpp +0 -313
- data/dist/ice/cpp/src/IceSSL/SSLEngine.h +0 -100
- data/dist/ice/cpp/src/IceSSL/SSLEngineF.h +0 -21
- data/dist/ice/cpp/src/IceSSL/SecureTransportCertificateI.cpp +0 -999
- data/dist/ice/cpp/src/IceSSL/SecureTransportEngine.cpp +0 -1308
- data/dist/ice/cpp/src/IceSSL/SecureTransportEngine.h +0 -59
- data/dist/ice/cpp/src/IceSSL/SecureTransportEngineF.h +0 -29
- data/dist/ice/cpp/src/IceSSL/SecureTransportPluginI.cpp +0 -75
- data/dist/ice/cpp/src/IceSSL/SecureTransportTransceiverI.cpp +0 -719
- data/dist/ice/cpp/src/IceSSL/SecureTransportTransceiverI.h +0 -92
- data/dist/ice/cpp/src/IceSSL/SecureTransportUtil.cpp +0 -868
- data/dist/ice/cpp/src/IceSSL/SecureTransportUtil.h +0 -45
- data/dist/ice/cpp/src/IceSSL/TrustManager.cpp +0 -236
- data/dist/ice/cpp/src/IceSSL/TrustManager.h +0 -46
- data/dist/ice/cpp/src/IceSSL/TrustManagerF.h +0 -21
- data/dist/ice/cpp/src/IceSSL/Util.cpp +0 -192
- data/dist/ice/cpp/src/IceSSL/Util.h +0 -99
- data/dist/ice/cpp/src/IceSSL/generated/ConnectionInfo.cpp +0 -75
- data/dist/ice/cpp/src/IceSSL/generated/ConnectionInfoF.cpp +0 -61
- data/dist/ice/cpp/src/IceSSL/generated/EndpointInfo.cpp +0 -75
- data/dist/ice/cpp/src/IceUtil/ConvertUTF.cpp +0 -472
- data/dist/ice/cpp/src/IceUtil/ConvertUTF.h +0 -147
- data/dist/ice/cpp/src/IceUtil/CtrlCHandler.cpp +0 -259
- data/dist/ice/cpp/src/IceUtil/FileUtil.cpp +0 -471
- data/dist/ice/cpp/src/IceUtil/InputUtil.cpp +0 -36
- data/dist/ice/cpp/src/IceUtil/MutexProtocol.cpp +0 -19
- data/dist/ice/cpp/src/IceUtil/OutputUtil.cpp +0 -609
- data/dist/ice/cpp/src/IceUtil/Random.cpp +0 -180
- data/dist/ice/cpp/src/IceUtil/RecMutex.cpp +0 -238
- data/dist/ice/cpp/src/IceUtil/Shared.cpp +0 -71
- data/dist/ice/cpp/src/IceUtil/StringConverter.cpp +0 -690
- data/dist/ice/cpp/src/IceUtil/StringUtil.cpp +0 -1135
- data/dist/ice/cpp/src/IceUtil/ThreadException.cpp +0 -130
- data/dist/ice/cpp/src/IceUtil/Time.cpp +0 -307
- data/dist/ice/cpp/src/IceUtil/UUID.cpp +0 -165
- data/dist/ice/cpp/src/IceUtil/Unicode.cpp +0 -183
- data/dist/ice/cpp/src/IceUtil/Unicode.h +0 -43
- data/dist/ice/cpp/src/IceUtil/UtilException.cpp +0 -839
- data/dist/ice/cpp/src/Slice/CPlusPlusUtil.cpp +0 -1810
- data/dist/ice/cpp/src/Slice/CPlusPlusUtil.h +0 -72
- data/dist/ice/cpp/src/Slice/Checksum.cpp +0 -447
- data/dist/ice/cpp/src/Slice/Checksum.h +0 -21
- data/dist/ice/cpp/src/Slice/JavaUtil.cpp +0 -5183
- data/dist/ice/cpp/src/Slice/JavaUtil.h +0 -407
- data/dist/ice/cpp/src/Slice/MD5.cpp +0 -52
- data/dist/ice/cpp/src/Slice/MD5.h +0 -39
- data/dist/ice/cpp/src/Slice/MD5I.cpp +0 -393
- data/dist/ice/cpp/src/Slice/MD5I.h +0 -91
- data/dist/ice/cpp/src/Slice/PHPUtil.cpp +0 -157
- data/dist/ice/cpp/src/Slice/PHPUtil.h +0 -36
- data/dist/ice/cpp/src/Slice/Python.cpp +0 -830
- data/dist/ice/cpp/src/Slice/PythonUtil.cpp +0 -3439
- data/dist/ice/cpp/src/Slice/PythonUtil.h +0 -70
- data/dist/ice/cpp/src/Slice/Ruby.cpp +0 -350
- data/dist/ice/cpp/src/Slice/RubyUtil.cpp +0 -1571
- data/dist/ice/cpp/src/Slice/RubyUtil.h +0 -49
- data/dist/ice/slice/Glacier2/PermissionsVerifierF.ice +0 -30
- data/dist/ice/slice/Glacier2/RouterF.ice +0 -29
- data/dist/ice/slice/Ice/Communicator.ice +0 -676
- data/dist/ice/slice/Ice/CommunicatorF.ice +0 -31
- data/dist/ice/slice/Ice/Connection.ice +0 -516
- data/dist/ice/slice/Ice/ConnectionF.ice +0 -33
- data/dist/ice/slice/Ice/Current.ice +0 -170
- data/dist/ice/slice/Ice/Endpoint.ice +0 -291
- data/dist/ice/slice/Ice/EndpointF.ice +0 -43
- data/dist/ice/slice/Ice/FacetMap.ice +0 -36
- data/dist/ice/slice/Ice/ImplicitContext.ice +0 -119
- data/dist/ice/slice/Ice/ImplicitContextF.ice +0 -30
- data/dist/ice/slice/Ice/Instrumentation.ice +0 -509
- data/dist/ice/slice/Ice/InstrumentationF.ice +0 -38
- data/dist/ice/slice/Ice/LocalException.ice +0 -1040
- data/dist/ice/slice/Ice/LocatorF.ice +0 -32
- data/dist/ice/slice/Ice/Logger.ice +0 -99
- data/dist/ice/slice/Ice/LoggerF.ice +0 -31
- data/dist/ice/slice/Ice/ObjectAdapter.ice +0 -710
- data/dist/ice/slice/Ice/ObjectAdapterF.ice +0 -31
- data/dist/ice/slice/Ice/ObjectFactory.ice +0 -71
- data/dist/ice/slice/Ice/Plugin.ice +0 -131
- data/dist/ice/slice/Ice/PluginF.ice +0 -36
- data/dist/ice/slice/Ice/ProcessF.ice +0 -31
- data/dist/ice/slice/Ice/Properties.ice +0 -244
- data/dist/ice/slice/Ice/PropertiesF.ice +0 -32
- data/dist/ice/slice/Ice/RouterF.ice +0 -31
- data/dist/ice/slice/Ice/ServantLocator.ice +0 -136
- data/dist/ice/slice/Ice/ServantLocatorF.ice +0 -31
- data/dist/ice/slice/Ice/ValueFactory.ice +0 -133
- data/dist/ice/slice/IceBox/IceBox.ice +0 -216
- data/dist/ice/slice/IceGrid/PluginFacade.ice +0 -329
- data/dist/ice/slice/IcePatch2/FileInfo.ice +0 -85
- data/dist/ice/slice/IcePatch2/FileServer.ice +0 -191
- data/dist/lib/Glacier2/PermissionsVerifierF.rb +0 -30
- data/dist/lib/Glacier2/RouterF.rb +0 -25
- data/dist/lib/Ice/Communicator.rb +0 -87
- data/dist/lib/Ice/CommunicatorF.rb +0 -24
- data/dist/lib/Ice/Connection.rb +0 -413
- data/dist/lib/Ice/ConnectionF.rb +0 -32
- data/dist/lib/Ice/Current.rb +0 -141
- data/dist/lib/Ice/Endpoint.rb +0 -187
- data/dist/lib/Ice/EndpointF.rb +0 -48
- data/dist/lib/Ice/FacetMap.rb +0 -24
- data/dist/lib/Ice/ImplicitContext.rb +0 -26
- data/dist/lib/Ice/ImplicitContextF.rb +0 -24
- data/dist/lib/Ice/Instrumentation.rb +0 -169
- data/dist/lib/Ice/InstrumentationF.rb +0 -31
- data/dist/lib/Ice/LocalException.rb +0 -1031
- data/dist/lib/Ice/LocatorF.rb +0 -30
- data/dist/lib/Ice/Logger.rb +0 -24
- data/dist/lib/Ice/LoggerF.rb +0 -24
- data/dist/lib/Ice/ObjectAdapter.rb +0 -29
- data/dist/lib/Ice/ObjectAdapterF.rb +0 -24
- data/dist/lib/Ice/ObjectFactory.rb +0 -24
- data/dist/lib/Ice/Plugin.rb +0 -30
- data/dist/lib/Ice/PluginF.rb +0 -28
- data/dist/lib/Ice/ProcessF.rb +0 -25
- data/dist/lib/Ice/Properties.rb +0 -25
- data/dist/lib/Ice/PropertiesF.rb +0 -29
- data/dist/lib/Ice/RouterF.rb +0 -25
- data/dist/lib/Ice/ServantLocator.rb +0 -26
- data/dist/lib/Ice/ServantLocatorF.rb +0 -24
- data/dist/lib/Ice/ValueFactory.rb +0 -28
- data/dist/lib/IceBox/IceBox.rb +0 -164
- data/dist/lib/IceGrid/PluginFacade.rb +0 -35
- data/dist/lib/IcePatch2/FileInfo.rb +0 -115
- data/dist/lib/IcePatch2/FileServer.rb +0 -123
- data/dist/lib/IcePatch2.rb +0 -5
|
@@ -1,93 +1,70 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright (c) ZeroC, Inc. All rights reserved.
|
|
3
|
-
//
|
|
1
|
+
// Copyright (c) ZeroC, Inc.
|
|
4
2
|
|
|
5
|
-
#include
|
|
6
|
-
#include
|
|
7
|
-
#include
|
|
8
|
-
#include
|
|
9
|
-
#include
|
|
10
|
-
#include <IceUtil/Time.h>
|
|
3
|
+
#include "Selector.h"
|
|
4
|
+
#include "EventHandler.h"
|
|
5
|
+
#include "Ice/LocalExceptions.h"
|
|
6
|
+
#include "Ice/LoggerUtil.h"
|
|
7
|
+
#include "Instance.h"
|
|
11
8
|
|
|
12
9
|
#ifdef ICE_USE_CFSTREAM
|
|
13
|
-
#
|
|
14
|
-
#
|
|
10
|
+
# include <CoreFoundation/CFStream.h>
|
|
11
|
+
# include <CoreFoundation/CoreFoundation.h>
|
|
15
12
|
#endif
|
|
16
13
|
|
|
14
|
+
#include <chrono>
|
|
15
|
+
#include <thread>
|
|
16
|
+
|
|
17
17
|
using namespace std;
|
|
18
18
|
using namespace IceInternal;
|
|
19
19
|
|
|
20
20
|
#if defined(ICE_USE_KQUEUE)
|
|
21
21
|
namespace
|
|
22
22
|
{
|
|
23
|
-
struct timespec zeroTimeout = {
|
|
23
|
+
struct timespec zeroTimeout = {0, 0};
|
|
24
24
|
}
|
|
25
25
|
#endif
|
|
26
26
|
|
|
27
27
|
#if defined(ICE_USE_IOCP)
|
|
28
28
|
|
|
29
|
-
Selector::Selector(const InstancePtr& instance) : _instance(instance)
|
|
30
|
-
{
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
Selector::~Selector()
|
|
34
|
-
{
|
|
35
|
-
}
|
|
29
|
+
Selector::Selector(const InstancePtr& instance) : _instance(instance) {}
|
|
36
30
|
|
|
37
|
-
#ifdef ICE_USE_IOCP
|
|
38
31
|
void
|
|
39
32
|
Selector::setup(int sizeIO)
|
|
40
33
|
{
|
|
41
|
-
_handle = CreateIoCompletionPort(INVALID_HANDLE_VALUE,
|
|
42
|
-
if(_handle ==
|
|
34
|
+
_handle = CreateIoCompletionPort(INVALID_HANDLE_VALUE, nullptr, 0, sizeIO);
|
|
35
|
+
if (_handle == nullptr)
|
|
43
36
|
{
|
|
44
37
|
throw Ice::SocketException(__FILE__, __LINE__, GetLastError());
|
|
45
38
|
}
|
|
46
39
|
}
|
|
47
|
-
#endif
|
|
48
40
|
|
|
49
41
|
void
|
|
50
42
|
Selector::destroy()
|
|
51
43
|
{
|
|
52
|
-
#ifdef ICE_USE_IOCP
|
|
53
44
|
CloseHandle(_handle);
|
|
54
|
-
#endif
|
|
55
45
|
}
|
|
56
46
|
|
|
57
47
|
void
|
|
58
48
|
Selector::initialize(EventHandler* handler)
|
|
59
49
|
{
|
|
60
|
-
if(!handler->getNativeInfo())
|
|
50
|
+
if (!handler->getNativeInfo())
|
|
61
51
|
{
|
|
62
52
|
return;
|
|
63
53
|
}
|
|
64
54
|
|
|
65
|
-
#ifdef ICE_USE_IOCP
|
|
66
55
|
SOCKET socket = handler->getNativeInfo()->fd();
|
|
67
|
-
if(socket != INVALID_SOCKET)
|
|
56
|
+
if (socket != INVALID_SOCKET)
|
|
68
57
|
{
|
|
69
|
-
if(CreateIoCompletionPort(
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
58
|
+
if (CreateIoCompletionPort(
|
|
59
|
+
reinterpret_cast<HANDLE>(socket),
|
|
60
|
+
_handle,
|
|
61
|
+
reinterpret_cast<ULONG_PTR>(handler),
|
|
62
|
+
0) == nullptr)
|
|
73
63
|
{
|
|
74
64
|
throw Ice::SocketException(__FILE__, __LINE__, GetLastError());
|
|
75
65
|
}
|
|
76
66
|
}
|
|
77
67
|
handler->getNativeInfo()->initialize(_handle, reinterpret_cast<ULONG_PTR>(handler));
|
|
78
|
-
#else
|
|
79
|
-
EventHandlerPtr h = ICE_GET_SHARED_FROM_THIS(handler);
|
|
80
|
-
handler->getNativeInfo()->setCompletedHandler(
|
|
81
|
-
ref new SocketOperationCompletedHandler(
|
|
82
|
-
[=](int operation)
|
|
83
|
-
{
|
|
84
|
-
//
|
|
85
|
-
// Use the reference counted handler to ensure it's not
|
|
86
|
-
// destroyed as long as the callback lambda exists.
|
|
87
|
-
//
|
|
88
|
-
completed(h.get(), static_cast<SocketOperation>(operation));
|
|
89
|
-
}));
|
|
90
|
-
#endif
|
|
91
68
|
}
|
|
92
69
|
|
|
93
70
|
void
|
|
@@ -95,15 +72,15 @@ Selector::update(EventHandler* handler, SocketOperation remove, SocketOperation
|
|
|
95
72
|
{
|
|
96
73
|
handler->_registered = static_cast<SocketOperation>(handler->_registered & ~remove);
|
|
97
74
|
handler->_registered = static_cast<SocketOperation>(handler->_registered | add);
|
|
98
|
-
if(add & SocketOperationRead && !(handler->_pending & SocketOperationRead))
|
|
75
|
+
if (add & SocketOperationRead && !(handler->_pending & SocketOperationRead))
|
|
99
76
|
{
|
|
100
77
|
handler->_pending = static_cast<SocketOperation>(handler->_pending | SocketOperationRead);
|
|
101
|
-
completed(handler, SocketOperationRead); // Start an
|
|
78
|
+
completed(handler, SocketOperationRead); // Start an asynchronous read
|
|
102
79
|
}
|
|
103
|
-
else if(add & SocketOperationWrite && !(handler->_pending & SocketOperationWrite))
|
|
80
|
+
else if (add & SocketOperationWrite && !(handler->_pending & SocketOperationWrite))
|
|
104
81
|
{
|
|
105
82
|
handler->_pending = static_cast<SocketOperation>(handler->_pending | SocketOperationWrite);
|
|
106
|
-
completed(handler, SocketOperationWrite); // Start an
|
|
83
|
+
completed(handler, SocketOperationWrite); // Start an asynchronous write
|
|
107
84
|
}
|
|
108
85
|
}
|
|
109
86
|
|
|
@@ -117,12 +94,12 @@ Selector::finish(IceInternal::EventHandler* handler)
|
|
|
117
94
|
void
|
|
118
95
|
Selector::ready(EventHandler* handler, SocketOperation status, bool value)
|
|
119
96
|
{
|
|
120
|
-
if(((handler->_ready & status) != 0) == value)
|
|
97
|
+
if (((handler->_ready & status) != 0) == value)
|
|
121
98
|
{
|
|
122
99
|
return; // Nothing to do if ready state already correctly set.
|
|
123
100
|
}
|
|
124
101
|
|
|
125
|
-
if(value)
|
|
102
|
+
if (value)
|
|
126
103
|
{
|
|
127
104
|
handler->_ready = static_cast<SocketOperation>(handler->_ready | status);
|
|
128
105
|
}
|
|
@@ -133,36 +110,32 @@ Selector::ready(EventHandler* handler, SocketOperation status, bool value)
|
|
|
133
110
|
}
|
|
134
111
|
|
|
135
112
|
EventHandler*
|
|
136
|
-
#ifdef ICE_USE_IOCP
|
|
137
113
|
Selector::getNextHandler(SocketOperation& status, DWORD& count, int& error, int timeout)
|
|
138
|
-
#else
|
|
139
|
-
Selector::getNextHandler(SocketOperation& status, int timeout)
|
|
140
|
-
#endif
|
|
141
114
|
{
|
|
142
|
-
#ifdef ICE_USE_IOCP
|
|
143
115
|
ULONG_PTR key;
|
|
144
116
|
LPOVERLAPPED ol;
|
|
145
117
|
error = ERROR_SUCCESS;
|
|
146
118
|
|
|
147
|
-
if(!GetQueuedCompletionStatus(_handle, &count, &key, &ol, timeout > 0 ? timeout * 1000 : INFINITE))
|
|
119
|
+
if (!GetQueuedCompletionStatus(_handle, &count, &key, &ol, timeout > 0 ? timeout * 1000 : INFINITE))
|
|
148
120
|
{
|
|
149
121
|
int err = WSAGetLastError();
|
|
150
|
-
if(ol ==
|
|
122
|
+
if (ol == nullptr)
|
|
151
123
|
{
|
|
152
|
-
if(err == WAIT_TIMEOUT)
|
|
124
|
+
if (err == WAIT_TIMEOUT)
|
|
153
125
|
{
|
|
154
126
|
throw SelectorTimeoutException();
|
|
155
127
|
}
|
|
156
128
|
else
|
|
157
129
|
{
|
|
130
|
+
// This indicates a internal error with the IOCP completion port, we log the error and abort.
|
|
158
131
|
Ice::SocketException ex(__FILE__, __LINE__, err);
|
|
159
132
|
Ice::Error out(_instance->initializationData().logger);
|
|
160
133
|
out << "couldn't dequeue packet from completion port:\n" << ex;
|
|
161
|
-
|
|
134
|
+
std::abort();
|
|
162
135
|
}
|
|
163
136
|
}
|
|
164
137
|
AsyncInfo* info = static_cast<AsyncInfo*>(ol);
|
|
165
|
-
if(info)
|
|
138
|
+
if (info)
|
|
166
139
|
{
|
|
167
140
|
status = info->status;
|
|
168
141
|
}
|
|
@@ -172,7 +145,7 @@ Selector::getNextHandler(SocketOperation& status, int timeout)
|
|
|
172
145
|
}
|
|
173
146
|
|
|
174
147
|
AsyncInfo* info = static_cast<AsyncInfo*>(ol);
|
|
175
|
-
if(info)
|
|
148
|
+
if (info)
|
|
176
149
|
{
|
|
177
150
|
status = info->status;
|
|
178
151
|
}
|
|
@@ -181,56 +154,26 @@ Selector::getNextHandler(SocketOperation& status, int timeout)
|
|
|
181
154
|
status = reinterpret_cast<EventHandler*>(key)->_ready;
|
|
182
155
|
}
|
|
183
156
|
return reinterpret_cast<EventHandler*>(key);
|
|
184
|
-
#else
|
|
185
|
-
IceUtil::Monitor<IceUtil::Mutex>::Lock lock(_monitor);
|
|
186
|
-
while(_events.empty())
|
|
187
|
-
{
|
|
188
|
-
if(timeout > 0)
|
|
189
|
-
{
|
|
190
|
-
_monitor.timedWait(IceUtil::Time::seconds(timeout));
|
|
191
|
-
if(_events.empty())
|
|
192
|
-
{
|
|
193
|
-
throw SelectorTimeoutException();
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
else
|
|
197
|
-
{
|
|
198
|
-
_monitor.wait();
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
assert(!_events.empty());
|
|
202
|
-
IceInternal::EventHandlerPtr handler = _events.front().handler;
|
|
203
|
-
const SelectEvent& event = _events.front();
|
|
204
|
-
status = event.status;
|
|
205
|
-
_events.pop_front();
|
|
206
|
-
return handler.get();
|
|
207
|
-
#endif
|
|
208
157
|
}
|
|
209
158
|
|
|
210
159
|
void
|
|
211
160
|
Selector::completed(EventHandler* handler, SocketOperation op)
|
|
212
161
|
{
|
|
213
|
-
#ifdef ICE_USE_IOCP
|
|
214
162
|
AsyncInfo* info = 0;
|
|
215
163
|
NativeInfoPtr nativeInfo = handler->getNativeInfo();
|
|
216
|
-
if(nativeInfo)
|
|
164
|
+
if (nativeInfo)
|
|
217
165
|
{
|
|
218
166
|
info = nativeInfo->getAsyncInfo(op);
|
|
219
167
|
}
|
|
220
|
-
if(!PostQueuedCompletionStatus(_handle, 0, reinterpret_cast<ULONG_PTR>(handler), info))
|
|
168
|
+
if (!PostQueuedCompletionStatus(_handle, 0, reinterpret_cast<ULONG_PTR>(handler), info))
|
|
221
169
|
{
|
|
222
170
|
throw Ice::SocketException(__FILE__, __LINE__, GetLastError());
|
|
223
171
|
}
|
|
224
|
-
#else
|
|
225
|
-
IceUtil::Monitor<IceUtil::Mutex>::Lock lock(_monitor);
|
|
226
|
-
_events.push_back(SelectEvent(handler->shared_from_this(), op));
|
|
227
|
-
_monitor.notify();
|
|
228
|
-
#endif
|
|
229
172
|
}
|
|
230
173
|
|
|
231
|
-
#elif defined(
|
|
174
|
+
#elif defined(ICE_USE_EPOLL) || defined(ICE_USE_KQUEUE)
|
|
232
175
|
|
|
233
|
-
Selector::Selector(
|
|
176
|
+
Selector::Selector(InstancePtr instance) : _instance(std::move(instance))
|
|
234
177
|
{
|
|
235
178
|
SOCKET fds[2];
|
|
236
179
|
createPipe(fds);
|
|
@@ -238,76 +181,60 @@ Selector::Selector(const InstancePtr& instance) : _instance(instance), _interrup
|
|
|
238
181
|
_fdIntrWrite = fds[1];
|
|
239
182
|
_selecting = false;
|
|
240
183
|
|
|
241
|
-
#if defined(ICE_USE_EPOLL)
|
|
184
|
+
# if defined(ICE_USE_EPOLL)
|
|
242
185
|
_events.resize(256);
|
|
243
186
|
_queueFd = epoll_create(1);
|
|
244
|
-
if(_queueFd < 0)
|
|
187
|
+
if (_queueFd < 0)
|
|
245
188
|
{
|
|
246
189
|
throw Ice::SocketException(__FILE__, __LINE__, IceInternal::getSocketErrno());
|
|
247
190
|
}
|
|
248
191
|
|
|
249
192
|
epoll_event event;
|
|
250
193
|
memset(&event, 0, sizeof(epoll_event));
|
|
251
|
-
event.data.ptr =
|
|
194
|
+
event.data.ptr = nullptr;
|
|
252
195
|
event.events = EPOLLIN;
|
|
253
|
-
if(epoll_ctl(_queueFd, EPOLL_CTL_ADD, _fdIntrRead, &event) != 0)
|
|
196
|
+
if (epoll_ctl(_queueFd, EPOLL_CTL_ADD, _fdIntrRead, &event) != 0)
|
|
254
197
|
{
|
|
255
198
|
Ice::Error out(_instance->initializationData().logger);
|
|
256
|
-
out << "error while updating selector:\n" <<
|
|
199
|
+
out << "error while updating selector:\n" << IceInternal::errorToString(IceInternal::getSocketErrno());
|
|
257
200
|
}
|
|
258
|
-
#
|
|
201
|
+
# else // ICE_USE_KQUEUE
|
|
259
202
|
_events.resize(256);
|
|
260
203
|
_queueFd = kqueue();
|
|
261
|
-
if(_queueFd < 0)
|
|
204
|
+
if (_queueFd < 0)
|
|
262
205
|
{
|
|
263
206
|
throw Ice::SocketException(__FILE__, __LINE__, getSocketErrno());
|
|
264
207
|
}
|
|
265
208
|
|
|
266
209
|
struct kevent ev;
|
|
267
210
|
EV_SET(&ev, _fdIntrRead, EVFILT_READ, EV_ADD, 0, 0, 0);
|
|
268
|
-
int rs = kevent(_queueFd, &ev, 1,
|
|
269
|
-
if(rs < 0)
|
|
211
|
+
int rs = kevent(_queueFd, &ev, 1, nullptr, 0, nullptr);
|
|
212
|
+
if (rs < 0)
|
|
270
213
|
{
|
|
271
214
|
Ice::Error out(_instance->initializationData().logger);
|
|
272
|
-
out << "error while updating selector:\n" <<
|
|
273
|
-
}
|
|
274
|
-
#
|
|
275
|
-
FD_ZERO(&_readFdSet);
|
|
276
|
-
FD_ZERO(&_writeFdSet);
|
|
277
|
-
FD_ZERO(&_errorFdSet);
|
|
278
|
-
FD_SET(_fdIntrRead, &_readFdSet);
|
|
279
|
-
#else
|
|
280
|
-
struct pollfd pollFd;
|
|
281
|
-
pollFd.fd = _fdIntrRead;
|
|
282
|
-
pollFd.events = POLLIN;
|
|
283
|
-
_pollFdSet.push_back(pollFd);
|
|
284
|
-
#endif
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
Selector::~Selector()
|
|
288
|
-
{
|
|
215
|
+
out << "error while updating selector:\n" << IceInternal::errorToString(IceInternal::getSocketErrno());
|
|
216
|
+
}
|
|
217
|
+
# endif
|
|
289
218
|
}
|
|
290
219
|
|
|
291
220
|
void
|
|
292
221
|
Selector::destroy()
|
|
293
222
|
{
|
|
294
|
-
#if defined(ICE_USE_KQUEUE) || defined(ICE_USE_EPOLL)
|
|
295
223
|
try
|
|
296
224
|
{
|
|
297
225
|
closeSocket(_queueFd);
|
|
298
226
|
}
|
|
299
|
-
catch(const Ice::LocalException& ex)
|
|
227
|
+
catch (const Ice::LocalException& ex)
|
|
300
228
|
{
|
|
301
229
|
Ice::Error out(_instance->initializationData().logger);
|
|
302
230
|
out << "exception in selector while calling closeSocket():\n" << ex;
|
|
303
231
|
}
|
|
304
|
-
#endif
|
|
305
232
|
|
|
306
233
|
try
|
|
307
234
|
{
|
|
308
235
|
closeSocket(_fdIntrWrite);
|
|
309
236
|
}
|
|
310
|
-
catch(const Ice::LocalException& ex)
|
|
237
|
+
catch (const Ice::LocalException& ex)
|
|
311
238
|
{
|
|
312
239
|
Ice::Error out(_instance->initializationData().logger);
|
|
313
240
|
out << "exception in selector while calling closeSocket():\n" << ex;
|
|
@@ -317,7 +244,7 @@ Selector::destroy()
|
|
|
317
244
|
{
|
|
318
245
|
closeSocket(_fdIntrRead);
|
|
319
246
|
}
|
|
320
|
-
catch(const Ice::LocalException& ex)
|
|
247
|
+
catch (const Ice::LocalException& ex)
|
|
321
248
|
{
|
|
322
249
|
Ice::Error out(_instance->initializationData().logger);
|
|
323
250
|
out << "exception in selector while calling closeSocket():\n" << ex;
|
|
@@ -330,14 +257,14 @@ Selector::update(EventHandler* handler, SocketOperation remove, SocketOperation
|
|
|
330
257
|
SocketOperation previous = handler->_registered;
|
|
331
258
|
handler->_registered = static_cast<SocketOperation>(handler->_registered & ~remove);
|
|
332
259
|
handler->_registered = static_cast<SocketOperation>(handler->_registered | add);
|
|
333
|
-
if(previous == handler->_registered)
|
|
260
|
+
if (previous == handler->_registered)
|
|
334
261
|
{
|
|
335
262
|
return;
|
|
336
263
|
}
|
|
337
264
|
checkReady(handler);
|
|
338
265
|
|
|
339
266
|
NativeInfoPtr nativeInfo = handler->getNativeInfo();
|
|
340
|
-
if(nativeInfo && nativeInfo->fd() != INVALID_SOCKET)
|
|
267
|
+
if (nativeInfo && nativeInfo->fd() != INVALID_SOCKET)
|
|
341
268
|
{
|
|
342
269
|
updateSelectorForEventHandler(handler, remove, add);
|
|
343
270
|
}
|
|
@@ -346,7 +273,7 @@ Selector::update(EventHandler* handler, SocketOperation remove, SocketOperation
|
|
|
346
273
|
void
|
|
347
274
|
Selector::enable(EventHandler* handler, SocketOperation status)
|
|
348
275
|
{
|
|
349
|
-
if(!(handler->_disabled & status))
|
|
276
|
+
if (!(handler->_disabled & status))
|
|
350
277
|
{
|
|
351
278
|
return;
|
|
352
279
|
}
|
|
@@ -354,53 +281,50 @@ Selector::enable(EventHandler* handler, SocketOperation status)
|
|
|
354
281
|
checkReady(handler);
|
|
355
282
|
|
|
356
283
|
NativeInfoPtr nativeInfo = handler->getNativeInfo();
|
|
357
|
-
if(!nativeInfo || nativeInfo->fd() == INVALID_SOCKET)
|
|
284
|
+
if (!nativeInfo || nativeInfo->fd() == INVALID_SOCKET)
|
|
358
285
|
{
|
|
359
286
|
return;
|
|
360
287
|
}
|
|
361
288
|
|
|
362
|
-
if(handler->_registered & status)
|
|
289
|
+
if (handler->_registered & status)
|
|
363
290
|
{
|
|
364
|
-
#if defined(ICE_USE_EPOLL)
|
|
291
|
+
# if defined(ICE_USE_EPOLL)
|
|
365
292
|
SOCKET fd = nativeInfo->fd();
|
|
366
|
-
|
|
367
|
-
|
|
293
|
+
auto previous = static_cast<SocketOperation>(handler->_registered & ~(handler->_disabled | status));
|
|
294
|
+
auto newStatus = static_cast<SocketOperation>(handler->_registered & ~handler->_disabled);
|
|
368
295
|
epoll_event event;
|
|
369
296
|
memset(&event, 0, sizeof(epoll_event));
|
|
370
297
|
event.data.ptr = handler;
|
|
371
|
-
if(newStatus & SocketOperationRead)
|
|
298
|
+
if (newStatus & SocketOperationRead)
|
|
372
299
|
{
|
|
373
300
|
event.events |= EPOLLIN;
|
|
374
301
|
}
|
|
375
|
-
if(newStatus & SocketOperationWrite)
|
|
302
|
+
if (newStatus & SocketOperationWrite)
|
|
376
303
|
{
|
|
377
304
|
event.events |= EPOLLOUT;
|
|
378
305
|
}
|
|
379
|
-
if(epoll_ctl(_queueFd, previous ? EPOLL_CTL_MOD : EPOLL_CTL_ADD, fd, &event) != 0)
|
|
306
|
+
if (epoll_ctl(_queueFd, previous ? EPOLL_CTL_MOD : EPOLL_CTL_ADD, fd, &event) != 0)
|
|
380
307
|
{
|
|
381
308
|
Ice::Error out(_instance->initializationData().logger);
|
|
382
|
-
out << "error while updating selector:\n" <<
|
|
309
|
+
out << "error while updating selector:\n" << IceInternal::errorToString(IceInternal::getSocketErrno());
|
|
383
310
|
}
|
|
384
|
-
#
|
|
311
|
+
# else // ICE_USE_KQUEUE
|
|
385
312
|
struct kevent ev;
|
|
386
313
|
SOCKET fd = handler->getNativeInfo()->fd();
|
|
387
314
|
EV_SET(&ev, fd, status == SocketOperationRead ? EVFILT_READ : EVFILT_WRITE, EV_ENABLE, 0, 0, handler);
|
|
388
315
|
_changes.push_back(ev);
|
|
389
|
-
if(_selecting)
|
|
316
|
+
if (_selecting)
|
|
390
317
|
{
|
|
391
318
|
updateSelector();
|
|
392
319
|
}
|
|
393
|
-
#
|
|
394
|
-
_changes.push_back(make_pair(handler, static_cast<SocketOperation>(handler->_registered & ~handler->_disabled)));
|
|
395
|
-
wakeup();
|
|
396
|
-
#endif
|
|
320
|
+
# endif
|
|
397
321
|
}
|
|
398
322
|
}
|
|
399
323
|
|
|
400
324
|
void
|
|
401
325
|
Selector::disable(EventHandler* handler, SocketOperation status)
|
|
402
326
|
{
|
|
403
|
-
if(handler->_disabled & status)
|
|
327
|
+
if (handler->_disabled & status)
|
|
404
328
|
{
|
|
405
329
|
return;
|
|
406
330
|
}
|
|
@@ -408,61 +332,55 @@ Selector::disable(EventHandler* handler, SocketOperation status)
|
|
|
408
332
|
checkReady(handler);
|
|
409
333
|
|
|
410
334
|
NativeInfoPtr nativeInfo = handler->getNativeInfo();
|
|
411
|
-
if(!nativeInfo || nativeInfo->fd() == INVALID_SOCKET)
|
|
335
|
+
if (!nativeInfo || nativeInfo->fd() == INVALID_SOCKET)
|
|
412
336
|
{
|
|
413
337
|
return;
|
|
414
338
|
}
|
|
415
339
|
|
|
416
|
-
if(handler->_registered & status)
|
|
340
|
+
if (handler->_registered & status)
|
|
417
341
|
{
|
|
418
|
-
#if defined(ICE_USE_EPOLL)
|
|
342
|
+
# if defined(ICE_USE_EPOLL)
|
|
419
343
|
SOCKET fd = nativeInfo->fd();
|
|
420
|
-
|
|
344
|
+
auto newStatus = static_cast<SocketOperation>(handler->_registered & ~handler->_disabled);
|
|
421
345
|
epoll_event event;
|
|
422
346
|
memset(&event, 0, sizeof(epoll_event));
|
|
423
347
|
event.data.ptr = handler;
|
|
424
|
-
if(newStatus & SocketOperationRead)
|
|
348
|
+
if (newStatus & SocketOperationRead)
|
|
425
349
|
{
|
|
426
350
|
event.events |= EPOLLIN;
|
|
427
351
|
}
|
|
428
|
-
if(newStatus & SocketOperationWrite)
|
|
352
|
+
if (newStatus & SocketOperationWrite)
|
|
429
353
|
{
|
|
430
354
|
event.events |= EPOLLOUT;
|
|
431
355
|
}
|
|
432
|
-
if(epoll_ctl(_queueFd, newStatus ? EPOLL_CTL_MOD : EPOLL_CTL_DEL, fd, &event) != 0)
|
|
356
|
+
if (epoll_ctl(_queueFd, newStatus ? EPOLL_CTL_MOD : EPOLL_CTL_DEL, fd, &event) != 0)
|
|
433
357
|
{
|
|
434
358
|
Ice::Error out(_instance->initializationData().logger);
|
|
435
|
-
out << "error while updating selector:\n" <<
|
|
359
|
+
out << "error while updating selector:\n" << IceInternal::errorToString(IceInternal::getSocketErrno());
|
|
436
360
|
}
|
|
437
|
-
#
|
|
361
|
+
# else // ICE_USE_KQUEUE
|
|
438
362
|
SOCKET fd = nativeInfo->fd();
|
|
439
363
|
struct kevent ev;
|
|
440
364
|
EV_SET(&ev, fd, status == SocketOperationRead ? EVFILT_READ : EVFILT_WRITE, EV_DISABLE, 0, 0, handler);
|
|
441
365
|
_changes.push_back(ev);
|
|
442
|
-
if(_selecting)
|
|
366
|
+
if (_selecting)
|
|
443
367
|
{
|
|
444
368
|
updateSelector();
|
|
445
369
|
}
|
|
446
|
-
#
|
|
447
|
-
_changes.push_back(make_pair(handler, static_cast<SocketOperation>(handler->_registered & ~handler->_disabled)));
|
|
448
|
-
wakeup();
|
|
449
|
-
#endif
|
|
370
|
+
# endif
|
|
450
371
|
}
|
|
451
372
|
}
|
|
452
373
|
|
|
453
374
|
bool
|
|
454
375
|
Selector::finish(EventHandler* handler, bool closeNow)
|
|
455
376
|
{
|
|
456
|
-
if(handler->_registered)
|
|
377
|
+
if (handler->_registered)
|
|
457
378
|
{
|
|
458
379
|
update(handler, handler->_registered, SocketOperationNone);
|
|
459
|
-
#if !defined(ICE_USE_EPOLL) && !defined(ICE_USE_KQUEUE)
|
|
460
|
-
return false; // Don't close now if selecting
|
|
461
|
-
#endif
|
|
462
380
|
}
|
|
463
381
|
|
|
464
|
-
#if defined(ICE_USE_KQUEUE)
|
|
465
|
-
if(closeNow && !_changes.empty())
|
|
382
|
+
# if defined(ICE_USE_KQUEUE)
|
|
383
|
+
if (closeNow && !_changes.empty())
|
|
466
384
|
{
|
|
467
385
|
//
|
|
468
386
|
// Update selector now to remove the FD from the kqueue if
|
|
@@ -471,12 +389,7 @@ Selector::finish(EventHandler* handler, bool closeNow)
|
|
|
471
389
|
//
|
|
472
390
|
updateSelector();
|
|
473
391
|
}
|
|
474
|
-
#
|
|
475
|
-
if(!_changes.empty())
|
|
476
|
-
{
|
|
477
|
-
return false;
|
|
478
|
-
}
|
|
479
|
-
#endif
|
|
392
|
+
# endif
|
|
480
393
|
|
|
481
394
|
return closeNow;
|
|
482
395
|
}
|
|
@@ -484,22 +397,22 @@ Selector::finish(EventHandler* handler, bool closeNow)
|
|
|
484
397
|
void
|
|
485
398
|
Selector::ready(EventHandler* handler, SocketOperation status, bool value)
|
|
486
399
|
{
|
|
487
|
-
if(((handler->_ready & status) != 0) == value)
|
|
400
|
+
if (((handler->_ready & status) != 0) == value)
|
|
488
401
|
{
|
|
489
402
|
return; // Nothing to do if ready state already correctly set.
|
|
490
403
|
}
|
|
491
404
|
|
|
492
|
-
if(status & SocketOperationConnect)
|
|
405
|
+
if (status & SocketOperationConnect)
|
|
493
406
|
{
|
|
494
407
|
NativeInfoPtr nativeInfo = handler->getNativeInfo();
|
|
495
|
-
if(nativeInfo && nativeInfo->newFd() && handler->_registered)
|
|
408
|
+
if (nativeInfo && nativeInfo->newFd() && handler->_registered)
|
|
496
409
|
{
|
|
497
410
|
// If new FD is set after connect, register the FD with the selector.
|
|
498
411
|
updateSelectorForEventHandler(handler, SocketOperationNone, handler->_registered);
|
|
499
412
|
}
|
|
500
413
|
}
|
|
501
414
|
|
|
502
|
-
if(value)
|
|
415
|
+
if (value)
|
|
503
416
|
{
|
|
504
417
|
handler->_ready = static_cast<SocketOperation>(handler->_ready | status);
|
|
505
418
|
}
|
|
@@ -513,14 +426,14 @@ Selector::ready(EventHandler* handler, SocketOperation status, bool value)
|
|
|
513
426
|
void
|
|
514
427
|
Selector::wakeup()
|
|
515
428
|
{
|
|
516
|
-
if(_selecting && !_interrupted)
|
|
429
|
+
if (_selecting && !_interrupted)
|
|
517
430
|
{
|
|
518
431
|
char c = 0;
|
|
519
|
-
while(true)
|
|
432
|
+
while (true)
|
|
520
433
|
{
|
|
521
|
-
if(::write(_fdIntrWrite, &c, 1) == SOCKET_ERROR)
|
|
434
|
+
if (::write(_fdIntrWrite, &c, 1) == SOCKET_ERROR)
|
|
522
435
|
{
|
|
523
|
-
if(interrupted())
|
|
436
|
+
if (interrupted())
|
|
524
437
|
{
|
|
525
438
|
continue;
|
|
526
439
|
}
|
|
@@ -536,15 +449,15 @@ Selector::wakeup()
|
|
|
536
449
|
void
|
|
537
450
|
Selector::startSelect()
|
|
538
451
|
{
|
|
539
|
-
if(_interrupted)
|
|
452
|
+
if (_interrupted)
|
|
540
453
|
{
|
|
541
454
|
char c;
|
|
542
|
-
while(true)
|
|
455
|
+
while (true)
|
|
543
456
|
{
|
|
544
457
|
ssize_t ret = ::read(_fdIntrRead, &c, 1);
|
|
545
|
-
if(ret == SOCKET_ERROR)
|
|
458
|
+
if (ret == SOCKET_ERROR)
|
|
546
459
|
{
|
|
547
|
-
if(interrupted())
|
|
460
|
+
if (interrupted())
|
|
548
461
|
{
|
|
549
462
|
continue;
|
|
550
463
|
}
|
|
@@ -555,12 +468,12 @@ Selector::startSelect()
|
|
|
555
468
|
_interrupted = false;
|
|
556
469
|
}
|
|
557
470
|
|
|
558
|
-
#if
|
|
559
|
-
if(!_changes.empty())
|
|
471
|
+
# if defined(ICE_USE_KQUEUE)
|
|
472
|
+
if (!_changes.empty())
|
|
560
473
|
{
|
|
561
474
|
updateSelector();
|
|
562
475
|
}
|
|
563
|
-
#endif
|
|
476
|
+
# endif
|
|
564
477
|
_selecting = true;
|
|
565
478
|
|
|
566
479
|
//
|
|
@@ -571,96 +484,41 @@ Selector::startSelect()
|
|
|
571
484
|
}
|
|
572
485
|
|
|
573
486
|
void
|
|
574
|
-
Selector::finishSelect(vector<pair<EventHandler*, SocketOperation
|
|
487
|
+
Selector::finishSelect(vector<pair<EventHandler*, SocketOperation>>& handlers)
|
|
575
488
|
{
|
|
576
489
|
_selecting = false;
|
|
577
490
|
|
|
578
491
|
assert(handlers.empty());
|
|
579
492
|
|
|
580
|
-
|
|
581
|
-
if(_interrupted) // Interrupted, we have to process the interrupt before returning any handlers
|
|
582
|
-
{
|
|
583
|
-
return;
|
|
584
|
-
}
|
|
585
|
-
#endif
|
|
586
|
-
|
|
587
|
-
#if defined(ICE_USE_POLL)
|
|
588
|
-
for(vector<struct pollfd>::const_iterator r = _pollFdSet.begin(); r != _pollFdSet.end(); ++r)
|
|
589
|
-
#else
|
|
590
|
-
for(int i = 0; i < _count; ++i)
|
|
591
|
-
#endif
|
|
493
|
+
for (int i = 0; i < _count; ++i)
|
|
592
494
|
{
|
|
593
495
|
pair<EventHandler*, SocketOperation> p;
|
|
594
496
|
|
|
595
|
-
#if defined(ICE_USE_EPOLL)
|
|
497
|
+
# if defined(ICE_USE_EPOLL)
|
|
596
498
|
struct epoll_event& ev = _events[i];
|
|
597
499
|
p.first = reinterpret_cast<EventHandler*>(ev.data.ptr);
|
|
598
|
-
p.second = static_cast<SocketOperation>(
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
#elif defined(ICE_USE_KQUEUE)
|
|
500
|
+
p.second = static_cast<SocketOperation>(
|
|
501
|
+
((ev.events & (EPOLLIN | EPOLLERR)) ? SocketOperationRead : SocketOperationNone) |
|
|
502
|
+
((ev.events & (EPOLLOUT | EPOLLERR)) ? SocketOperationWrite : SocketOperationNone));
|
|
503
|
+
# else // ICE_USE_KQUEUE
|
|
603
504
|
struct kevent& ev = _events[static_cast<size_t>(i)];
|
|
604
|
-
if(ev.flags & EV_ERROR)
|
|
505
|
+
if (ev.flags & EV_ERROR)
|
|
605
506
|
{
|
|
606
507
|
Ice::Error out(_instance->initializationData().logger);
|
|
607
|
-
out << "selector returned error:\n" <<
|
|
508
|
+
out << "selector returned error:\n" << IceInternal::errorToString(static_cast<int>(ev.data));
|
|
608
509
|
continue;
|
|
609
510
|
}
|
|
610
511
|
p.first = reinterpret_cast<EventHandler*>(ev.udata);
|
|
611
512
|
p.second = (ev.filter == EVFILT_READ) ? SocketOperationRead : SocketOperationWrite;
|
|
612
|
-
#
|
|
613
|
-
|
|
614
|
-
// Round robin for the filedescriptors.
|
|
615
|
-
//
|
|
616
|
-
SOCKET fd;
|
|
617
|
-
p.second = SocketOperationNone;
|
|
618
|
-
if(i < _selectedReadFdSet.fd_count)
|
|
619
|
-
{
|
|
620
|
-
fd = _selectedReadFdSet.fd_array[i];
|
|
621
|
-
p.second = static_cast<SocketOperation>(p.second | SocketOperationRead);
|
|
622
|
-
}
|
|
623
|
-
else if(i < _selectedWriteFdSet.fd_count + _selectedReadFdSet.fd_count)
|
|
624
|
-
{
|
|
625
|
-
fd = _selectedWriteFdSet.fd_array[i - _selectedReadFdSet.fd_count];
|
|
626
|
-
p.second = static_cast<SocketOperation>(p.second | SocketOperationWrite);
|
|
627
|
-
}
|
|
628
|
-
else
|
|
629
|
-
{
|
|
630
|
-
fd = _selectedErrorFdSet.fd_array[i - _selectedReadFdSet.fd_count - _selectedWriteFdSet.fd_count];
|
|
631
|
-
p.second = static_cast<SocketOperation>(p.second | SocketOperationConnect);
|
|
632
|
-
}
|
|
633
|
-
|
|
634
|
-
assert(fd != _fdIntrRead);
|
|
635
|
-
p.first = _handlers[fd];
|
|
636
|
-
#else
|
|
637
|
-
if(r->revents == 0)
|
|
638
|
-
{
|
|
639
|
-
continue;
|
|
640
|
-
}
|
|
641
|
-
|
|
642
|
-
SOCKET fd = r->fd;
|
|
643
|
-
assert(_handlers.find(fd) != _handlers.end());
|
|
644
|
-
p.first = _handlers[fd];
|
|
645
|
-
p.second = SocketOperationNone;
|
|
646
|
-
if(r->revents & (POLLIN | POLLERR | POLLHUP))
|
|
647
|
-
{
|
|
648
|
-
p.second = static_cast<SocketOperation>(p.second | SocketOperationRead);
|
|
649
|
-
}
|
|
650
|
-
if(r->revents & (POLLOUT | POLLERR | POLLHUP))
|
|
651
|
-
{
|
|
652
|
-
p.second = static_cast<SocketOperation>(p.second | SocketOperationWrite);
|
|
653
|
-
}
|
|
654
|
-
assert(p.second);
|
|
655
|
-
#endif
|
|
656
|
-
if(!p.first)
|
|
513
|
+
# endif
|
|
514
|
+
if (!p.first)
|
|
657
515
|
{
|
|
658
516
|
continue; // Interrupted
|
|
659
517
|
}
|
|
660
518
|
|
|
661
|
-
|
|
519
|
+
auto q = _readyHandlers.find(p.first->shared_from_this());
|
|
662
520
|
|
|
663
|
-
if(q != _readyHandlers.end()) // Handler will be added by the loop below
|
|
521
|
+
if (q != _readyHandlers.end()) // Handler will be added by the loop below
|
|
664
522
|
{
|
|
665
523
|
q->second = p.second; // We just remember which operations are ready here.
|
|
666
524
|
}
|
|
@@ -670,38 +528,38 @@ Selector::finishSelect(vector<pair<EventHandler*, SocketOperation> >& handlers)
|
|
|
670
528
|
}
|
|
671
529
|
}
|
|
672
530
|
|
|
673
|
-
for
|
|
531
|
+
for (auto& readyHandler : _readyHandlers)
|
|
674
532
|
{
|
|
675
533
|
pair<EventHandler*, SocketOperation> p;
|
|
676
|
-
p.first =
|
|
534
|
+
p.first = readyHandler.first.get();
|
|
677
535
|
p.second = static_cast<SocketOperation>(p.first->_ready & ~p.first->_disabled & p.first->_registered);
|
|
678
|
-
p.second = static_cast<SocketOperation>(p.second |
|
|
679
|
-
if(p.second)
|
|
536
|
+
p.second = static_cast<SocketOperation>(p.second | readyHandler.second);
|
|
537
|
+
if (p.second)
|
|
680
538
|
{
|
|
681
539
|
handlers.push_back(p);
|
|
682
540
|
}
|
|
683
541
|
|
|
684
542
|
//
|
|
685
|
-
// Reset the operation, it's only used by this method to
|
|
543
|
+
// Reset the operation, it's only used by this method to temporarily store the socket status
|
|
686
544
|
// return by the select operation above.
|
|
687
545
|
//
|
|
688
|
-
|
|
546
|
+
readyHandler.second = SocketOperationNone;
|
|
689
547
|
}
|
|
690
548
|
}
|
|
691
549
|
|
|
692
550
|
void
|
|
693
551
|
Selector::select(int timeout)
|
|
694
552
|
{
|
|
695
|
-
if(_selectNow)
|
|
553
|
+
if (_selectNow)
|
|
696
554
|
{
|
|
697
555
|
timeout = 0;
|
|
698
556
|
}
|
|
699
|
-
else if(timeout > 0)
|
|
557
|
+
else if (timeout > 0)
|
|
700
558
|
{
|
|
701
|
-
//
|
|
702
|
-
#
|
|
703
|
-
|
|
704
|
-
#endif
|
|
559
|
+
// kqueue use seconds, epoll use milliseconds
|
|
560
|
+
# ifdef ICE_USE_EPOLL
|
|
561
|
+
timeout = timeout * 1000;
|
|
562
|
+
# endif
|
|
705
563
|
}
|
|
706
564
|
else
|
|
707
565
|
{
|
|
@@ -709,68 +567,50 @@ Selector::select(int timeout)
|
|
|
709
567
|
}
|
|
710
568
|
|
|
711
569
|
int spuriousWakeup = 0;
|
|
712
|
-
while(true)
|
|
570
|
+
while (true)
|
|
713
571
|
{
|
|
714
|
-
#if defined(ICE_USE_EPOLL)
|
|
572
|
+
# if defined(ICE_USE_EPOLL)
|
|
715
573
|
_count = epoll_wait(_queueFd, &_events[0], _events.size(), timeout);
|
|
716
|
-
#
|
|
574
|
+
# else // ICE_USE_KQUEUE
|
|
717
575
|
assert(!_events.empty());
|
|
718
|
-
if(timeout >= 0)
|
|
576
|
+
if (timeout >= 0)
|
|
719
577
|
{
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
ts.tv_nsec = 0;
|
|
723
|
-
_count = kevent(_queueFd, 0, 0, &_events[0], static_cast<int>(_events.size()), &ts);
|
|
578
|
+
timespec ts{.tv_sec = timeout, .tv_nsec = 0};
|
|
579
|
+
_count = kevent(_queueFd, nullptr, 0, &_events[0], static_cast<int>(_events.size()), &ts);
|
|
724
580
|
}
|
|
725
581
|
else
|
|
726
582
|
{
|
|
727
|
-
_count = kevent(_queueFd,
|
|
583
|
+
_count = kevent(_queueFd, nullptr, 0, &_events[0], static_cast<int>(_events.size()), nullptr);
|
|
728
584
|
}
|
|
729
|
-
#
|
|
730
|
-
fd_set* rFdSet = fdSetCopy(_selectedReadFdSet, _readFdSet);
|
|
731
|
-
fd_set* wFdSet = fdSetCopy(_selectedWriteFdSet, _writeFdSet);
|
|
732
|
-
fd_set* eFdSet = fdSetCopy(_selectedErrorFdSet, _errorFdSet);
|
|
733
|
-
if(timeout >= 0)
|
|
734
|
-
{
|
|
735
|
-
struct timeval tv;
|
|
736
|
-
tv.tv_sec = timeout;
|
|
737
|
-
tv.tv_usec = 0;
|
|
738
|
-
_count = ::select(0, rFdSet, wFdSet, eFdSet, &tv); // The first parameter is ignored on Windows
|
|
739
|
-
}
|
|
740
|
-
else
|
|
741
|
-
{
|
|
742
|
-
_count = ::select(0, rFdSet, wFdSet, eFdSet, 0); // The first parameter is ignored on Windows
|
|
743
|
-
}
|
|
744
|
-
#else
|
|
745
|
-
_count = poll(&_pollFdSet[0], _pollFdSet.size(), timeout);
|
|
746
|
-
#endif
|
|
585
|
+
# endif
|
|
747
586
|
|
|
748
|
-
if(_count == SOCKET_ERROR)
|
|
587
|
+
if (_count == SOCKET_ERROR)
|
|
749
588
|
{
|
|
750
|
-
if(interrupted())
|
|
589
|
+
if (interrupted())
|
|
751
590
|
{
|
|
752
591
|
continue;
|
|
753
592
|
}
|
|
754
593
|
|
|
594
|
+
// This indicates a internal error with the selector, we log the error and abort.
|
|
755
595
|
Ice::SocketException ex(__FILE__, __LINE__, IceInternal::getSocketErrno());
|
|
756
596
|
Ice::Error out(_instance->initializationData().logger);
|
|
757
597
|
out << "selector failed:\n" << ex;
|
|
758
|
-
|
|
598
|
+
std::abort();
|
|
759
599
|
}
|
|
760
|
-
else if(_count == 0 && timeout < 0)
|
|
600
|
+
else if (_count == 0 && timeout < 0)
|
|
761
601
|
{
|
|
762
|
-
if(++spuriousWakeup > 100)
|
|
602
|
+
if (++spuriousWakeup > 100)
|
|
763
603
|
{
|
|
764
604
|
spuriousWakeup = 0;
|
|
765
605
|
_instance->initializationData().logger->warning("spurious selector wakeup");
|
|
766
606
|
}
|
|
767
|
-
|
|
607
|
+
std::this_thread::sleep_for(1ms);
|
|
768
608
|
continue;
|
|
769
609
|
}
|
|
770
610
|
break;
|
|
771
611
|
}
|
|
772
612
|
|
|
773
|
-
if(_count == 0 && !_selectNow)
|
|
613
|
+
if (_count == 0 && !_selectNow)
|
|
774
614
|
{
|
|
775
615
|
throw SelectorTimeoutException();
|
|
776
616
|
}
|
|
@@ -779,151 +619,65 @@ Selector::select(int timeout)
|
|
|
779
619
|
void
|
|
780
620
|
Selector::checkReady(EventHandler* handler)
|
|
781
621
|
{
|
|
782
|
-
if(handler->_ready & ~handler->_disabled & handler->_registered)
|
|
622
|
+
if (handler->_ready & ~handler->_disabled & handler->_registered)
|
|
783
623
|
{
|
|
784
|
-
_readyHandlers.insert(make_pair(
|
|
624
|
+
_readyHandlers.insert(make_pair(handler->shared_from_this(), SocketOperationNone));
|
|
785
625
|
wakeup();
|
|
786
626
|
}
|
|
787
627
|
else
|
|
788
628
|
{
|
|
789
|
-
|
|
790
|
-
if(p != _readyHandlers.end())
|
|
629
|
+
auto p = _readyHandlers.find(handler->shared_from_this());
|
|
630
|
+
if (p != _readyHandlers.end())
|
|
791
631
|
{
|
|
792
632
|
_readyHandlers.erase(p);
|
|
793
633
|
}
|
|
794
634
|
}
|
|
795
635
|
}
|
|
796
636
|
|
|
637
|
+
# if defined(ICE_USE_KQUEUE)
|
|
797
638
|
void
|
|
798
639
|
Selector::updateSelector()
|
|
799
640
|
{
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
641
|
+
int rs = kevent(
|
|
642
|
+
_queueFd,
|
|
643
|
+
&_changes[0],
|
|
644
|
+
static_cast<int>(_changes.size()),
|
|
645
|
+
&_changes[0],
|
|
646
|
+
static_cast<int>(_changes.size()),
|
|
647
|
+
&zeroTimeout);
|
|
648
|
+
if (rs < 0)
|
|
804
649
|
{
|
|
805
650
|
Ice::Error out(_instance->initializationData().logger);
|
|
806
|
-
out << "error while updating selector:\n" <<
|
|
651
|
+
out << "error while updating selector:\n" << IceInternal::errorToString(IceInternal::getSocketErrno());
|
|
807
652
|
}
|
|
808
653
|
else
|
|
809
654
|
{
|
|
810
|
-
for(int i = 0; i < rs; ++i)
|
|
655
|
+
for (int i = 0; i < rs; ++i)
|
|
811
656
|
{
|
|
812
657
|
//
|
|
813
658
|
// Check for errors, we ignore EINPROGRESS that started showing up with macOS Sierra
|
|
814
659
|
// and which occurs when another thread removes the FD from the kqueue (see ICE-7419).
|
|
815
660
|
//
|
|
816
|
-
if(_changes[static_cast<size_t>(i)].flags & EV_ERROR &&
|
|
817
|
-
|
|
661
|
+
if (_changes[static_cast<size_t>(i)].flags & EV_ERROR &&
|
|
662
|
+
_changes[static_cast<size_t>(i)].data != EINPROGRESS)
|
|
818
663
|
{
|
|
819
664
|
Ice::Error out(_instance->initializationData().logger);
|
|
820
665
|
out << "error while updating selector:\n"
|
|
821
|
-
<<
|
|
822
|
-
}
|
|
823
|
-
}
|
|
824
|
-
}
|
|
825
|
-
_changes.clear();
|
|
826
|
-
#elif !defined(ICE_USE_EPOLL)
|
|
827
|
-
assert(!_selecting);
|
|
828
|
-
|
|
829
|
-
for(vector<pair<EventHandler*, SocketOperation> >::const_iterator p = _changes.begin(); p != _changes.end(); ++p)
|
|
830
|
-
{
|
|
831
|
-
EventHandler* handler = p->first;
|
|
832
|
-
SocketOperation status = p->second;
|
|
833
|
-
|
|
834
|
-
SOCKET fd = handler->getNativeInfo()->fd();
|
|
835
|
-
if(status)
|
|
836
|
-
{
|
|
837
|
-
#if defined(ICE_USE_SELECT)
|
|
838
|
-
if(status & SocketOperationRead)
|
|
839
|
-
{
|
|
840
|
-
FD_SET(fd, &_readFdSet);
|
|
841
|
-
}
|
|
842
|
-
else
|
|
843
|
-
{
|
|
844
|
-
FD_CLR(fd, &_readFdSet);
|
|
845
|
-
}
|
|
846
|
-
if(status & SocketOperationWrite)
|
|
847
|
-
{
|
|
848
|
-
FD_SET(fd, &_writeFdSet);
|
|
666
|
+
<< IceInternal::errorToString(static_cast<int>(_changes[static_cast<size_t>(i)].data));
|
|
849
667
|
}
|
|
850
|
-
else
|
|
851
|
-
{
|
|
852
|
-
FD_CLR(fd, &_writeFdSet);
|
|
853
|
-
}
|
|
854
|
-
if(status & SocketOperationConnect)
|
|
855
|
-
{
|
|
856
|
-
FD_SET(fd, &_writeFdSet);
|
|
857
|
-
FD_SET(fd, &_errorFdSet);
|
|
858
|
-
}
|
|
859
|
-
else
|
|
860
|
-
{
|
|
861
|
-
FD_CLR(fd, &_writeFdSet);
|
|
862
|
-
FD_CLR(fd, &_errorFdSet);
|
|
863
|
-
}
|
|
864
|
-
_handlers[fd] = handler;
|
|
865
|
-
#else
|
|
866
|
-
short events = 0;
|
|
867
|
-
if(status & SocketOperationRead)
|
|
868
|
-
{
|
|
869
|
-
events |= POLLIN;
|
|
870
|
-
}
|
|
871
|
-
if(status & SocketOperationWrite)
|
|
872
|
-
{
|
|
873
|
-
events |= POLLOUT;
|
|
874
|
-
}
|
|
875
|
-
map<SOCKET, EventHandler*>::const_iterator q = _handlers.find(fd);
|
|
876
|
-
if(q == _handlers.end())
|
|
877
|
-
{
|
|
878
|
-
struct pollfd pollFd;
|
|
879
|
-
pollFd.fd = fd;
|
|
880
|
-
pollFd.events = events;
|
|
881
|
-
pollFd.revents = 0;
|
|
882
|
-
_pollFdSet.push_back(pollFd);
|
|
883
|
-
_handlers.insert(make_pair(fd, handler));
|
|
884
|
-
}
|
|
885
|
-
else
|
|
886
|
-
{
|
|
887
|
-
for(vector<struct pollfd>::iterator r = _pollFdSet.begin(); r != _pollFdSet.end(); ++r)
|
|
888
|
-
{
|
|
889
|
-
if(r->fd == fd)
|
|
890
|
-
{
|
|
891
|
-
r->events = events;
|
|
892
|
-
break;
|
|
893
|
-
}
|
|
894
|
-
}
|
|
895
|
-
}
|
|
896
|
-
#endif
|
|
897
|
-
}
|
|
898
|
-
else
|
|
899
|
-
{
|
|
900
|
-
#if defined(ICE_USE_SELECT)
|
|
901
|
-
FD_CLR(fd, &_readFdSet);
|
|
902
|
-
FD_CLR(fd, &_writeFdSet);
|
|
903
|
-
FD_CLR(fd, &_errorFdSet);
|
|
904
|
-
#else
|
|
905
|
-
for(vector<struct pollfd>::iterator r = _pollFdSet.begin(); r != _pollFdSet.end(); ++r)
|
|
906
|
-
{
|
|
907
|
-
if(r->fd == fd)
|
|
908
|
-
{
|
|
909
|
-
_pollFdSet.erase(r);
|
|
910
|
-
break;
|
|
911
|
-
}
|
|
912
|
-
}
|
|
913
|
-
#endif
|
|
914
|
-
_handlers.erase(fd);
|
|
915
668
|
}
|
|
916
669
|
}
|
|
917
670
|
_changes.clear();
|
|
918
|
-
#endif
|
|
919
671
|
}
|
|
672
|
+
# endif
|
|
920
673
|
|
|
921
674
|
void
|
|
922
|
-
Selector::updateSelectorForEventHandler(
|
|
923
|
-
|
|
924
|
-
|
|
675
|
+
Selector::updateSelectorForEventHandler(
|
|
676
|
+
EventHandler* handler,
|
|
677
|
+
[[maybe_unused]] SocketOperation remove,
|
|
678
|
+
[[maybe_unused]] SocketOperation add)
|
|
925
679
|
{
|
|
926
|
-
#if defined(ICE_USE_EPOLL)
|
|
680
|
+
# if defined(ICE_USE_EPOLL)
|
|
927
681
|
SocketOperation previous = handler->_registered;
|
|
928
682
|
previous = static_cast<SocketOperation>(previous & ~add);
|
|
929
683
|
previous = static_cast<SocketOperation>(previous | remove);
|
|
@@ -933,29 +687,29 @@ Selector::updateSelectorForEventHandler(EventHandler* handler,
|
|
|
933
687
|
memset(&event, 0, sizeof(epoll_event));
|
|
934
688
|
event.data.ptr = handler;
|
|
935
689
|
SocketOperation status = handler->_registered;
|
|
936
|
-
if(handler->_disabled)
|
|
690
|
+
if (handler->_disabled)
|
|
937
691
|
{
|
|
938
692
|
status = static_cast<SocketOperation>(status & ~handler->_disabled);
|
|
939
693
|
previous = static_cast<SocketOperation>(previous & ~handler->_disabled);
|
|
940
694
|
}
|
|
941
|
-
if(status & SocketOperationRead)
|
|
695
|
+
if (status & SocketOperationRead)
|
|
942
696
|
{
|
|
943
697
|
event.events |= EPOLLIN;
|
|
944
698
|
}
|
|
945
|
-
if(status & SocketOperationWrite)
|
|
699
|
+
if (status & SocketOperationWrite)
|
|
946
700
|
{
|
|
947
701
|
event.events |= EPOLLOUT;
|
|
948
702
|
}
|
|
949
703
|
int op;
|
|
950
|
-
if(!previous && status)
|
|
704
|
+
if (!previous && status)
|
|
951
705
|
{
|
|
952
706
|
op = EPOLL_CTL_ADD;
|
|
953
707
|
}
|
|
954
|
-
else if(previous && !status)
|
|
708
|
+
else if (previous && !status)
|
|
955
709
|
{
|
|
956
710
|
op = EPOLL_CTL_DEL;
|
|
957
711
|
}
|
|
958
|
-
else if(previous == status)
|
|
712
|
+
else if (previous == status)
|
|
959
713
|
{
|
|
960
714
|
return;
|
|
961
715
|
}
|
|
@@ -963,48 +717,57 @@ Selector::updateSelectorForEventHandler(EventHandler* handler,
|
|
|
963
717
|
{
|
|
964
718
|
op = EPOLL_CTL_MOD;
|
|
965
719
|
}
|
|
966
|
-
if(epoll_ctl(_queueFd, op, fd, &event) != 0)
|
|
720
|
+
if (epoll_ctl(_queueFd, op, fd, &event) != 0)
|
|
967
721
|
{
|
|
968
722
|
Ice::Error out(_instance->initializationData().logger);
|
|
969
|
-
out << "error while updating selector:\n" <<
|
|
723
|
+
out << "error while updating selector:\n" << IceInternal::errorToString(IceInternal::getSocketErrno());
|
|
970
724
|
}
|
|
971
|
-
#
|
|
725
|
+
# else // ICE_USE_KQUEUE
|
|
972
726
|
SOCKET fd = handler->getNativeInfo()->fd();
|
|
973
727
|
assert(fd != INVALID_SOCKET);
|
|
974
|
-
if(remove & SocketOperationRead)
|
|
728
|
+
if (remove & SocketOperationRead)
|
|
975
729
|
{
|
|
976
730
|
struct kevent ev;
|
|
977
731
|
EV_SET(&ev, fd, EVFILT_READ, EV_DELETE, 0, 0, handler);
|
|
978
732
|
_changes.push_back(ev);
|
|
979
733
|
}
|
|
980
|
-
if(remove & SocketOperationWrite)
|
|
734
|
+
if (remove & SocketOperationWrite)
|
|
981
735
|
{
|
|
982
736
|
struct kevent ev;
|
|
983
737
|
EV_SET(&ev, fd, EVFILT_WRITE, EV_DELETE, 0, 0, handler);
|
|
984
738
|
_changes.push_back(ev);
|
|
985
739
|
}
|
|
986
|
-
if(add & SocketOperationRead)
|
|
740
|
+
if (add & SocketOperationRead)
|
|
987
741
|
{
|
|
988
742
|
struct kevent ev;
|
|
989
|
-
EV_SET(
|
|
990
|
-
|
|
743
|
+
EV_SET(
|
|
744
|
+
&ev,
|
|
745
|
+
fd,
|
|
746
|
+
EVFILT_READ,
|
|
747
|
+
EV_ADD | (handler->_disabled & SocketOperationRead ? EV_DISABLE : 0),
|
|
748
|
+
0,
|
|
749
|
+
0,
|
|
750
|
+
handler);
|
|
991
751
|
_changes.push_back(ev);
|
|
992
752
|
}
|
|
993
|
-
if(add & SocketOperationWrite)
|
|
753
|
+
if (add & SocketOperationWrite)
|
|
994
754
|
{
|
|
995
755
|
struct kevent ev;
|
|
996
|
-
EV_SET(
|
|
997
|
-
|
|
756
|
+
EV_SET(
|
|
757
|
+
&ev,
|
|
758
|
+
fd,
|
|
759
|
+
EVFILT_WRITE,
|
|
760
|
+
EV_ADD | (handler->_disabled & SocketOperationWrite ? EV_DISABLE : 0),
|
|
761
|
+
0,
|
|
762
|
+
0,
|
|
763
|
+
handler);
|
|
998
764
|
_changes.push_back(ev);
|
|
999
765
|
}
|
|
1000
|
-
if(_selecting)
|
|
766
|
+
if (_selecting)
|
|
1001
767
|
{
|
|
1002
768
|
updateSelector();
|
|
1003
769
|
}
|
|
1004
|
-
#
|
|
1005
|
-
_changes.push_back(make_pair(handler, static_cast<SocketOperation>(handler->_registered & ~handler->_disabled)));
|
|
1006
|
-
wakeup();
|
|
1007
|
-
#endif
|
|
770
|
+
# endif
|
|
1008
771
|
checkReady(handler);
|
|
1009
772
|
}
|
|
1010
773
|
|
|
@@ -1012,111 +775,78 @@ Selector::updateSelectorForEventHandler(EventHandler* handler,
|
|
|
1012
775
|
|
|
1013
776
|
namespace
|
|
1014
777
|
{
|
|
778
|
+
void selectorInterrupt(void* info) { reinterpret_cast<Selector*>(info)->processInterrupt(); }
|
|
1015
779
|
|
|
1016
|
-
void
|
|
1017
|
-
|
|
1018
|
-
reinterpret_cast<Selector*>(info)->processInterrupt();
|
|
1019
|
-
}
|
|
1020
|
-
|
|
1021
|
-
void eventHandlerSocketCallback(CFSocketRef, CFSocketCallBackType callbackType, CFDataRef, const void* d, void* info)
|
|
1022
|
-
{
|
|
1023
|
-
if(callbackType == kCFSocketReadCallBack)
|
|
1024
|
-
{
|
|
1025
|
-
reinterpret_cast<EventHandlerWrapper*>(info)->readyCallback(SocketOperationRead);
|
|
1026
|
-
}
|
|
1027
|
-
else if(callbackType == kCFSocketWriteCallBack)
|
|
1028
|
-
{
|
|
1029
|
-
reinterpret_cast<EventHandlerWrapper*>(info)->readyCallback(SocketOperationWrite);
|
|
1030
|
-
}
|
|
1031
|
-
else if(callbackType == kCFSocketConnectCallBack)
|
|
1032
|
-
{
|
|
1033
|
-
reinterpret_cast<EventHandlerWrapper*>(info)->readyCallback(SocketOperationConnect,
|
|
1034
|
-
d ? *reinterpret_cast<const SInt32*>(d) : 0);
|
|
1035
|
-
}
|
|
1036
|
-
}
|
|
1037
|
-
|
|
1038
|
-
class SelectorHelperThread : public IceUtil::Thread
|
|
1039
|
-
{
|
|
1040
|
-
public:
|
|
1041
|
-
|
|
1042
|
-
SelectorHelperThread(Selector& selector) : _selector(selector)
|
|
1043
|
-
{
|
|
1044
|
-
}
|
|
1045
|
-
|
|
1046
|
-
virtual void run()
|
|
780
|
+
void
|
|
781
|
+
eventHandlerSocketCallback(CFSocketRef, CFSocketCallBackType callbackType, CFDataRef, const void* d, void* info)
|
|
1047
782
|
{
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
783
|
+
if (callbackType == kCFSocketReadCallBack)
|
|
784
|
+
{
|
|
785
|
+
reinterpret_cast<EventHandlerWrapper*>(info)->readyCallback(SocketOperationRead);
|
|
786
|
+
}
|
|
787
|
+
else if (callbackType == kCFSocketWriteCallBack)
|
|
788
|
+
{
|
|
789
|
+
reinterpret_cast<EventHandlerWrapper*>(info)->readyCallback(SocketOperationWrite);
|
|
790
|
+
}
|
|
791
|
+
else if (callbackType == kCFSocketConnectCallBack)
|
|
792
|
+
{
|
|
793
|
+
reinterpret_cast<EventHandlerWrapper*>(info)->readyCallback(
|
|
794
|
+
SocketOperationConnect,
|
|
795
|
+
d ? *reinterpret_cast<const SInt32*>(d) : 0);
|
|
796
|
+
}
|
|
1059
797
|
}
|
|
1060
798
|
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
Selector& _selector;
|
|
1064
|
-
};
|
|
1065
|
-
|
|
1066
|
-
CFOptionFlags
|
|
1067
|
-
toCFCallbacks(SocketOperation op)
|
|
1068
|
-
{
|
|
1069
|
-
CFOptionFlags cbs = 0;
|
|
1070
|
-
if(op & SocketOperationRead)
|
|
799
|
+
CFOptionFlags toCFCallbacks(SocketOperation op)
|
|
1071
800
|
{
|
|
1072
|
-
cbs
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
801
|
+
CFOptionFlags cbs = 0;
|
|
802
|
+
if (op & SocketOperationRead)
|
|
803
|
+
{
|
|
804
|
+
cbs |= kCFSocketReadCallBack;
|
|
805
|
+
}
|
|
806
|
+
if (op & SocketOperationWrite)
|
|
807
|
+
{
|
|
808
|
+
cbs |= kCFSocketWriteCallBack;
|
|
809
|
+
}
|
|
810
|
+
if (op & SocketOperationConnect)
|
|
811
|
+
{
|
|
812
|
+
cbs |= kCFSocketConnectCallBack;
|
|
813
|
+
}
|
|
814
|
+
return cbs;
|
|
1081
815
|
}
|
|
1082
|
-
return cbs;
|
|
1083
816
|
}
|
|
1084
817
|
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
_ready(SocketOperationNone),
|
|
1092
|
-
_finish(false)
|
|
818
|
+
EventHandlerWrapper::EventHandlerWrapper(EventHandler* handler, Selector& selector)
|
|
819
|
+
: _handler(handler->shared_from_this()),
|
|
820
|
+
_streamNativeInfo(dynamic_pointer_cast<StreamNativeInfo>(handler->getNativeInfo())),
|
|
821
|
+
_selector(selector),
|
|
822
|
+
_ready(SocketOperationNone),
|
|
823
|
+
_finish(false)
|
|
1093
824
|
{
|
|
1094
|
-
if(_streamNativeInfo)
|
|
825
|
+
if (_streamNativeInfo)
|
|
1095
826
|
{
|
|
1096
827
|
_streamNativeInfo->initStreams(this);
|
|
1097
828
|
}
|
|
1098
|
-
else if(handler->getNativeInfo())
|
|
829
|
+
else if (handler->getNativeInfo())
|
|
1099
830
|
{
|
|
1100
831
|
SOCKET fd = handler->getNativeInfo()->fd();
|
|
1101
|
-
CFSocketContext ctx = {
|
|
1102
|
-
_socket.reset(CFSocketCreateWithNative(
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
&ctx));
|
|
832
|
+
CFSocketContext ctx = {0, this, 0, 0, 0};
|
|
833
|
+
_socket.reset(CFSocketCreateWithNative(
|
|
834
|
+
kCFAllocatorDefault,
|
|
835
|
+
fd,
|
|
836
|
+
kCFSocketReadCallBack | kCFSocketWriteCallBack | kCFSocketConnectCallBack,
|
|
837
|
+
eventHandlerSocketCallback,
|
|
838
|
+
&ctx));
|
|
1109
839
|
|
|
1110
840
|
// Disable automatic re-enabling of callbacks and closing of the native socket.
|
|
1111
841
|
CFSocketSetSocketFlags(_socket.get(), 0);
|
|
1112
|
-
CFSocketDisableCallBacks(
|
|
842
|
+
CFSocketDisableCallBacks(
|
|
843
|
+
_socket.get(),
|
|
844
|
+
kCFSocketReadCallBack | kCFSocketWriteCallBack | kCFSocketConnectCallBack);
|
|
1113
845
|
_source.reset(CFSocketCreateRunLoopSource(kCFAllocatorDefault, _socket.get(), 0));
|
|
1114
846
|
}
|
|
1115
847
|
}
|
|
1116
848
|
|
|
1117
|
-
EventHandlerWrapper::~EventHandlerWrapper()
|
|
1118
|
-
{
|
|
1119
|
-
}
|
|
849
|
+
EventHandlerWrapper::~EventHandlerWrapper() = default;
|
|
1120
850
|
|
|
1121
851
|
void
|
|
1122
852
|
EventHandlerWrapper::updateRunLoop()
|
|
@@ -1124,24 +854,26 @@ EventHandlerWrapper::updateRunLoop()
|
|
|
1124
854
|
SocketOperation op = _handler->_registered;
|
|
1125
855
|
assert(!op || !_finish);
|
|
1126
856
|
|
|
1127
|
-
if(_socket)
|
|
857
|
+
if (_socket)
|
|
1128
858
|
{
|
|
1129
|
-
CFSocketDisableCallBacks(
|
|
1130
|
-
|
|
859
|
+
CFSocketDisableCallBacks(
|
|
860
|
+
_socket.get(),
|
|
861
|
+
kCFSocketReadCallBack | kCFSocketWriteCallBack | kCFSocketConnectCallBack);
|
|
862
|
+
if (op)
|
|
1131
863
|
{
|
|
1132
864
|
CFSocketEnableCallBacks(_socket.get(), toCFCallbacks(op));
|
|
1133
865
|
}
|
|
1134
866
|
|
|
1135
|
-
if(op && !CFRunLoopContainsSource(CFRunLoopGetCurrent(), _source.get(), kCFRunLoopDefaultMode))
|
|
867
|
+
if (op && !CFRunLoopContainsSource(CFRunLoopGetCurrent(), _source.get(), kCFRunLoopDefaultMode))
|
|
1136
868
|
{
|
|
1137
869
|
CFRunLoopAddSource(CFRunLoopGetCurrent(), _source.get(), kCFRunLoopDefaultMode);
|
|
1138
870
|
}
|
|
1139
|
-
else if(!op && CFRunLoopContainsSource(CFRunLoopGetCurrent(), _source.get(), kCFRunLoopDefaultMode))
|
|
871
|
+
else if (!op && CFRunLoopContainsSource(CFRunLoopGetCurrent(), _source.get(), kCFRunLoopDefaultMode))
|
|
1140
872
|
{
|
|
1141
873
|
CFRunLoopRemoveSource(CFRunLoopGetCurrent(), _source.get(), kCFRunLoopDefaultMode);
|
|
1142
874
|
}
|
|
1143
875
|
|
|
1144
|
-
if(_finish)
|
|
876
|
+
if (_finish)
|
|
1145
877
|
{
|
|
1146
878
|
CFSocketInvalidate(_socket.get());
|
|
1147
879
|
}
|
|
@@ -1149,22 +881,22 @@ EventHandlerWrapper::updateRunLoop()
|
|
|
1149
881
|
else
|
|
1150
882
|
{
|
|
1151
883
|
SocketOperation readyOp = _streamNativeInfo->registerWithRunLoop(op);
|
|
1152
|
-
if(!(op & (SocketOperationWrite | SocketOperationConnect)) || _ready & SocketOperationWrite)
|
|
884
|
+
if (!(op & (SocketOperationWrite | SocketOperationConnect)) || _ready & SocketOperationWrite)
|
|
1153
885
|
{
|
|
1154
886
|
_streamNativeInfo->unregisterFromRunLoop(SocketOperationWrite, false);
|
|
1155
887
|
}
|
|
1156
888
|
|
|
1157
|
-
if(!(op & (SocketOperationRead | SocketOperationConnect)) || _ready & SocketOperationRead)
|
|
889
|
+
if (!(op & (SocketOperationRead | SocketOperationConnect)) || _ready & SocketOperationRead)
|
|
1158
890
|
{
|
|
1159
891
|
_streamNativeInfo->unregisterFromRunLoop(SocketOperationRead, false);
|
|
1160
892
|
}
|
|
1161
893
|
|
|
1162
|
-
if(readyOp)
|
|
894
|
+
if (readyOp)
|
|
1163
895
|
{
|
|
1164
896
|
ready(readyOp, 0);
|
|
1165
897
|
}
|
|
1166
898
|
|
|
1167
|
-
if(_finish)
|
|
899
|
+
if (_finish)
|
|
1168
900
|
{
|
|
1169
901
|
_streamNativeInfo->closeStreams();
|
|
1170
902
|
}
|
|
@@ -1180,7 +912,7 @@ EventHandlerWrapper::readyCallback(SocketOperation op, int error)
|
|
|
1180
912
|
void
|
|
1181
913
|
EventHandlerWrapper::ready(SocketOperation op, int error)
|
|
1182
914
|
{
|
|
1183
|
-
if(!_socket)
|
|
915
|
+
if (!_socket)
|
|
1184
916
|
{
|
|
1185
917
|
//
|
|
1186
918
|
// Unregister the stream from the runloop as soon as we got the callback. This is
|
|
@@ -1192,14 +924,14 @@ EventHandlerWrapper::ready(SocketOperation op, int error)
|
|
|
1192
924
|
}
|
|
1193
925
|
|
|
1194
926
|
op = static_cast<SocketOperation>(_handler->_registered & op);
|
|
1195
|
-
if(!op || _ready & op)
|
|
927
|
+
if (!op || _ready & op)
|
|
1196
928
|
{
|
|
1197
929
|
return;
|
|
1198
930
|
}
|
|
1199
931
|
|
|
1200
|
-
if(_socket)
|
|
932
|
+
if (_socket)
|
|
1201
933
|
{
|
|
1202
|
-
if(op & SocketOperationConnect)
|
|
934
|
+
if (op & SocketOperationConnect)
|
|
1203
935
|
{
|
|
1204
936
|
_streamNativeInfo->setConnectError(error);
|
|
1205
937
|
}
|
|
@@ -1212,9 +944,9 @@ EventHandlerWrapper::ready(SocketOperation op, int error)
|
|
|
1212
944
|
bool
|
|
1213
945
|
EventHandlerWrapper::checkReady()
|
|
1214
946
|
{
|
|
1215
|
-
if((_ready | _handler->_ready) & ~_handler->_disabled & _handler->_registered)
|
|
947
|
+
if ((_ready | _handler->_ready) & ~_handler->_disabled & _handler->_registered)
|
|
1216
948
|
{
|
|
1217
|
-
_selector.addReadyHandler(
|
|
949
|
+
_selector.addReadyHandler(shared_from_this());
|
|
1218
950
|
return false;
|
|
1219
951
|
}
|
|
1220
952
|
else
|
|
@@ -1238,14 +970,14 @@ EventHandlerWrapper::update(SocketOperation remove, SocketOperation add)
|
|
|
1238
970
|
SocketOperation previous = _handler->_registered;
|
|
1239
971
|
_handler->_registered = static_cast<SocketOperation>(_handler->_registered & ~remove);
|
|
1240
972
|
_handler->_registered = static_cast<SocketOperation>(_handler->_registered | add);
|
|
1241
|
-
if(previous == _handler->_registered)
|
|
973
|
+
if (previous == _handler->_registered)
|
|
1242
974
|
{
|
|
1243
975
|
return false;
|
|
1244
976
|
}
|
|
1245
977
|
|
|
1246
978
|
// Clear ready flags which might not be valid anymore.
|
|
1247
979
|
_ready = static_cast<SocketOperation>(_ready & _handler->_registered);
|
|
1248
|
-
return _handler->getNativeInfo();
|
|
980
|
+
return _handler->getNativeInfo() != nullptr;
|
|
1249
981
|
}
|
|
1250
982
|
|
|
1251
983
|
bool
|
|
@@ -1254,7 +986,7 @@ EventHandlerWrapper::finish()
|
|
|
1254
986
|
_finish = true;
|
|
1255
987
|
_ready = SocketOperationNone;
|
|
1256
988
|
_handler->_registered = SocketOperationNone;
|
|
1257
|
-
return _handler->getNativeInfo();
|
|
989
|
+
return _handler->getNativeInfo() != nullptr;
|
|
1258
990
|
}
|
|
1259
991
|
|
|
1260
992
|
Selector::Selector(const InstancePtr& instance) : _instance(instance), _destroyed(false)
|
|
@@ -1266,25 +998,32 @@ Selector::Selector(const InstancePtr& instance) : _instance(instance), _destroye
|
|
|
1266
998
|
_source.reset(CFRunLoopSourceCreate(0, 0, &ctx));
|
|
1267
999
|
_runLoop = 0;
|
|
1268
1000
|
|
|
1269
|
-
_thread =
|
|
1270
|
-
|
|
1001
|
+
_thread = std::thread(
|
|
1002
|
+
[this]
|
|
1003
|
+
{
|
|
1004
|
+
run();
|
|
1271
1005
|
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1006
|
+
# if TARGET_IPHONE_SIMULATOR != 0
|
|
1007
|
+
//
|
|
1008
|
+
// Workaround for CFSocket bug where the CFSocketManager thread crashes if an
|
|
1009
|
+
// invalidated socket is being processed for reads/writes. We add this sleep
|
|
1010
|
+
// mostly to prevent spurious crashes with testing. This bug is very unlikely
|
|
1011
|
+
// to be hit otherwise.
|
|
1012
|
+
//
|
|
1013
|
+
this_thread::sleep_for(100ms);
|
|
1014
|
+
# endif
|
|
1015
|
+
});
|
|
1278
1016
|
|
|
1279
|
-
|
|
1280
|
-
{
|
|
1017
|
+
unique_lock lock(_mutex);
|
|
1018
|
+
_conditionVariable.wait(lock, [this] { return _runLoop != 0; });
|
|
1281
1019
|
}
|
|
1282
1020
|
|
|
1283
1021
|
void
|
|
1284
1022
|
Selector::destroy()
|
|
1285
1023
|
{
|
|
1024
|
+
thread t;
|
|
1286
1025
|
{
|
|
1287
|
-
|
|
1026
|
+
unique_lock lock(_mutex);
|
|
1288
1027
|
|
|
1289
1028
|
//
|
|
1290
1029
|
// Make sure any pending changes are processed to ensure remaining
|
|
@@ -1294,22 +1033,24 @@ Selector::destroy()
|
|
|
1294
1033
|
CFRunLoopSourceSignal(_source.get());
|
|
1295
1034
|
CFRunLoopWakeUp(_runLoop);
|
|
1296
1035
|
|
|
1297
|
-
while(!_changes.empty())
|
|
1036
|
+
while (!_changes.empty())
|
|
1298
1037
|
{
|
|
1299
1038
|
CFRunLoopSourceSignal(_source.get());
|
|
1300
1039
|
CFRunLoopWakeUp(_runLoop);
|
|
1301
|
-
|
|
1302
|
-
wait();
|
|
1040
|
+
_conditionVariable.wait(lock);
|
|
1303
1041
|
}
|
|
1042
|
+
t = std::move(_thread);
|
|
1304
1043
|
}
|
|
1305
1044
|
|
|
1306
|
-
|
|
1307
|
-
|
|
1045
|
+
if (t.joinable())
|
|
1046
|
+
{
|
|
1047
|
+
t.join();
|
|
1048
|
+
}
|
|
1308
1049
|
|
|
1309
|
-
|
|
1050
|
+
lock_guard lock(_mutex);
|
|
1310
1051
|
_source.reset(0);
|
|
1311
1052
|
|
|
1312
|
-
//assert(_wrappers.empty());
|
|
1053
|
+
// assert(_wrappers.empty());
|
|
1313
1054
|
_readyHandlers.clear();
|
|
1314
1055
|
_selectedHandlers.clear();
|
|
1315
1056
|
}
|
|
@@ -1317,33 +1058,33 @@ Selector::destroy()
|
|
|
1317
1058
|
void
|
|
1318
1059
|
Selector::initialize(EventHandler* handler)
|
|
1319
1060
|
{
|
|
1320
|
-
|
|
1321
|
-
_wrappers[handler] =
|
|
1061
|
+
lock_guard lock(_mutex);
|
|
1062
|
+
_wrappers[handler] = make_shared<EventHandlerWrapper>(handler, *this);
|
|
1322
1063
|
}
|
|
1323
1064
|
|
|
1324
1065
|
void
|
|
1325
1066
|
Selector::update(EventHandler* handler, SocketOperation remove, SocketOperation add)
|
|
1326
1067
|
{
|
|
1327
|
-
|
|
1068
|
+
lock_guard lock(_mutex);
|
|
1328
1069
|
const EventHandlerWrapperPtr& wrapper = _wrappers[handler];
|
|
1329
|
-
if(wrapper->update(remove, add))
|
|
1070
|
+
if (wrapper->update(remove, add))
|
|
1330
1071
|
{
|
|
1331
1072
|
_changes.insert(wrapper);
|
|
1332
|
-
|
|
1073
|
+
_conditionVariable.notify_one();
|
|
1333
1074
|
}
|
|
1334
1075
|
}
|
|
1335
1076
|
|
|
1336
1077
|
void
|
|
1337
1078
|
Selector::enable(EventHandler* handler, SocketOperation op)
|
|
1338
1079
|
{
|
|
1339
|
-
|
|
1340
|
-
if(!(handler->_disabled & op))
|
|
1080
|
+
lock_guard lock(_mutex);
|
|
1081
|
+
if (!(handler->_disabled & op))
|
|
1341
1082
|
{
|
|
1342
1083
|
return;
|
|
1343
1084
|
}
|
|
1344
1085
|
handler->_disabled = static_cast<SocketOperation>(handler->_disabled & ~op);
|
|
1345
1086
|
|
|
1346
|
-
if(handler->_registered & op)
|
|
1087
|
+
if (handler->_registered & op)
|
|
1347
1088
|
{
|
|
1348
1089
|
_wrappers[handler]->checkReady();
|
|
1349
1090
|
}
|
|
@@ -1352,8 +1093,8 @@ Selector::enable(EventHandler* handler, SocketOperation op)
|
|
|
1352
1093
|
void
|
|
1353
1094
|
Selector::disable(EventHandler* handler, SocketOperation op)
|
|
1354
1095
|
{
|
|
1355
|
-
|
|
1356
|
-
if(handler->_disabled & op)
|
|
1096
|
+
lock_guard lock(_mutex);
|
|
1097
|
+
if (handler->_disabled & op)
|
|
1357
1098
|
{
|
|
1358
1099
|
return;
|
|
1359
1100
|
}
|
|
@@ -1363,14 +1104,14 @@ Selector::disable(EventHandler* handler, SocketOperation op)
|
|
|
1363
1104
|
bool
|
|
1364
1105
|
Selector::finish(EventHandler* handler, bool closeNow)
|
|
1365
1106
|
{
|
|
1366
|
-
|
|
1107
|
+
lock_guard lock(_mutex);
|
|
1367
1108
|
std::map<EventHandler*, EventHandlerWrapperPtr>::iterator p = _wrappers.find(handler);
|
|
1368
1109
|
assert(p != _wrappers.end());
|
|
1369
1110
|
EventHandlerWrapperPtr wrapper = p->second;
|
|
1370
|
-
if(wrapper->finish())
|
|
1111
|
+
if (wrapper->finish())
|
|
1371
1112
|
{
|
|
1372
1113
|
_changes.insert(wrapper);
|
|
1373
|
-
|
|
1114
|
+
_conditionVariable.notify_one();
|
|
1374
1115
|
}
|
|
1375
1116
|
_wrappers.erase(p);
|
|
1376
1117
|
return closeNow;
|
|
@@ -1379,12 +1120,12 @@ Selector::finish(EventHandler* handler, bool closeNow)
|
|
|
1379
1120
|
void
|
|
1380
1121
|
Selector::ready(EventHandler* handler, SocketOperation status, bool value)
|
|
1381
1122
|
{
|
|
1382
|
-
if(((handler->_ready & status) != 0) == value)
|
|
1123
|
+
if (((handler->_ready & status) != 0) == value)
|
|
1383
1124
|
{
|
|
1384
1125
|
return; // Nothing to do if ready state already correctly set.
|
|
1385
1126
|
}
|
|
1386
1127
|
|
|
1387
|
-
if(value)
|
|
1128
|
+
if (value)
|
|
1388
1129
|
{
|
|
1389
1130
|
handler->_ready = static_cast<SocketOperation>(handler->_ready | status);
|
|
1390
1131
|
}
|
|
@@ -1393,7 +1134,7 @@ Selector::ready(EventHandler* handler, SocketOperation status, bool value)
|
|
|
1393
1134
|
handler->_ready = static_cast<SocketOperation>(handler->_ready & ~status);
|
|
1394
1135
|
}
|
|
1395
1136
|
|
|
1396
|
-
|
|
1137
|
+
lock_guard lock(_mutex);
|
|
1397
1138
|
std::map<EventHandler*, EventHandlerWrapperPtr>::iterator p = _wrappers.find(handler);
|
|
1398
1139
|
assert(p != _wrappers.end());
|
|
1399
1140
|
p->second->checkReady();
|
|
@@ -1402,15 +1143,15 @@ Selector::ready(EventHandler* handler, SocketOperation status, bool value)
|
|
|
1402
1143
|
void
|
|
1403
1144
|
Selector::startSelect()
|
|
1404
1145
|
{
|
|
1405
|
-
|
|
1146
|
+
lock_guard lock(_mutex);
|
|
1406
1147
|
|
|
1407
1148
|
//
|
|
1408
1149
|
// Re-enable callbacks for previously selected handlers.
|
|
1409
1150
|
//
|
|
1410
|
-
vector<pair<EventHandlerWrapperPtr, SocketOperation
|
|
1411
|
-
for(p = _selectedHandlers.begin(); p != _selectedHandlers.end(); ++p)
|
|
1151
|
+
vector<pair<EventHandlerWrapperPtr, SocketOperation>>::const_iterator p;
|
|
1152
|
+
for (p = _selectedHandlers.begin(); p != _selectedHandlers.end(); ++p)
|
|
1412
1153
|
{
|
|
1413
|
-
if(p->first->checkReady())
|
|
1154
|
+
if (p->first->checkReady())
|
|
1414
1155
|
{
|
|
1415
1156
|
_changes.insert(p->first);
|
|
1416
1157
|
}
|
|
@@ -1419,14 +1160,14 @@ Selector::startSelect()
|
|
|
1419
1160
|
}
|
|
1420
1161
|
|
|
1421
1162
|
void
|
|
1422
|
-
Selector::finishSelect(std::vector<std::pair<EventHandler*, SocketOperation
|
|
1163
|
+
Selector::finishSelect(std::vector<std::pair<EventHandler*, SocketOperation>>& handlers)
|
|
1423
1164
|
{
|
|
1424
|
-
|
|
1165
|
+
lock_guard lock(_mutex);
|
|
1425
1166
|
handlers.clear();
|
|
1426
|
-
for(set<EventHandlerWrapperPtr>::const_iterator p = _readyHandlers.begin(); p != _readyHandlers.end(); ++p)
|
|
1167
|
+
for (set<EventHandlerWrapperPtr>::const_iterator p = _readyHandlers.begin(); p != _readyHandlers.end(); ++p)
|
|
1427
1168
|
{
|
|
1428
1169
|
SocketOperation op = (*p)->readyOp();
|
|
1429
|
-
if(op)
|
|
1170
|
+
if (op)
|
|
1430
1171
|
{
|
|
1431
1172
|
_selectedHandlers.push_back(pair<EventHandlerWrapperPtr, SocketOperation>(*p, op));
|
|
1432
1173
|
handlers.push_back(pair<EventHandler*, SocketOperation>((*p)->_handler.get(), op));
|
|
@@ -1441,40 +1182,34 @@ Selector::select(int timeout)
|
|
|
1441
1182
|
//
|
|
1442
1183
|
// Wait for handlers to be ready.
|
|
1443
1184
|
//
|
|
1444
|
-
|
|
1445
|
-
while(!_destroyed)
|
|
1185
|
+
unique_lock lock(_mutex);
|
|
1186
|
+
while (!_destroyed)
|
|
1446
1187
|
{
|
|
1447
|
-
while(!_changes.empty())
|
|
1188
|
+
while (!_changes.empty())
|
|
1448
1189
|
{
|
|
1449
1190
|
CFRunLoopSourceSignal(_source.get());
|
|
1450
1191
|
CFRunLoopWakeUp(_runLoop);
|
|
1451
1192
|
|
|
1452
|
-
wait();
|
|
1193
|
+
_conditionVariable.wait(lock);
|
|
1453
1194
|
}
|
|
1454
1195
|
|
|
1455
|
-
if(_readyHandlers.empty())
|
|
1196
|
+
if (_readyHandlers.empty())
|
|
1456
1197
|
{
|
|
1457
|
-
if(timeout > 0)
|
|
1198
|
+
if (timeout > 0)
|
|
1458
1199
|
{
|
|
1459
|
-
|
|
1460
|
-
if(_readyHandlers.empty())
|
|
1200
|
+
if (_conditionVariable.wait_for(lock, chrono::seconds(timeout)) == cv_status::no_timeout)
|
|
1461
1201
|
{
|
|
1462
|
-
|
|
1463
|
-
{
|
|
1464
|
-
throw SelectorTimeoutException(); // Actual timeout
|
|
1465
|
-
}
|
|
1466
|
-
// Signaled but no ready handlers - spurious wakeup, continue waiting
|
|
1467
|
-
continue;
|
|
1202
|
+
break;
|
|
1468
1203
|
}
|
|
1469
|
-
|
|
1204
|
+
throw SelectorTimeoutException();
|
|
1470
1205
|
}
|
|
1471
1206
|
else
|
|
1472
1207
|
{
|
|
1473
|
-
wait();
|
|
1208
|
+
_conditionVariable.wait(lock);
|
|
1474
1209
|
}
|
|
1475
1210
|
}
|
|
1476
1211
|
|
|
1477
|
-
if(_changes.empty())
|
|
1212
|
+
if (_changes.empty())
|
|
1478
1213
|
{
|
|
1479
1214
|
break;
|
|
1480
1215
|
}
|
|
@@ -1484,17 +1219,17 @@ Selector::select(int timeout)
|
|
|
1484
1219
|
void
|
|
1485
1220
|
Selector::processInterrupt()
|
|
1486
1221
|
{
|
|
1487
|
-
|
|
1488
|
-
if(!_changes.empty())
|
|
1222
|
+
lock_guard lock(_mutex);
|
|
1223
|
+
if (!_changes.empty())
|
|
1489
1224
|
{
|
|
1490
|
-
for(set<EventHandlerWrapperPtr>::const_iterator p = _changes.begin(); p != _changes.end(); ++p)
|
|
1225
|
+
for (set<EventHandlerWrapperPtr>::const_iterator p = _changes.begin(); p != _changes.end(); ++p)
|
|
1491
1226
|
{
|
|
1492
1227
|
(*p)->updateRunLoop();
|
|
1493
1228
|
}
|
|
1494
1229
|
_changes.clear();
|
|
1495
|
-
|
|
1230
|
+
_conditionVariable.notify_one();
|
|
1496
1231
|
}
|
|
1497
|
-
if(_destroyed)
|
|
1232
|
+
if (_destroyed)
|
|
1498
1233
|
{
|
|
1499
1234
|
CFRunLoopStop(_runLoop);
|
|
1500
1235
|
}
|
|
@@ -1504,9 +1239,9 @@ void
|
|
|
1504
1239
|
Selector::run()
|
|
1505
1240
|
{
|
|
1506
1241
|
{
|
|
1507
|
-
|
|
1242
|
+
lock_guard lock(_mutex);
|
|
1508
1243
|
_runLoop = CFRunLoopGetCurrent();
|
|
1509
|
-
|
|
1244
|
+
_conditionVariable.notify_one();
|
|
1510
1245
|
}
|
|
1511
1246
|
|
|
1512
1247
|
CFRunLoopAddSource(CFRunLoopGetCurrent(), _source.get(), kCFRunLoopDefaultMode);
|
|
@@ -1517,18 +1252,18 @@ Selector::run()
|
|
|
1517
1252
|
void
|
|
1518
1253
|
Selector::ready(EventHandlerWrapper* wrapper, SocketOperation op, int error)
|
|
1519
1254
|
{
|
|
1520
|
-
|
|
1255
|
+
lock_guard lock(_mutex);
|
|
1521
1256
|
wrapper->ready(op, error);
|
|
1522
1257
|
}
|
|
1523
1258
|
|
|
1524
1259
|
void
|
|
1525
|
-
Selector::addReadyHandler(
|
|
1260
|
+
Selector::addReadyHandler(EventHandlerWrapperPtr wrapper)
|
|
1526
1261
|
{
|
|
1527
1262
|
// Called from ready()
|
|
1528
1263
|
_readyHandlers.insert(wrapper);
|
|
1529
|
-
if(_readyHandlers.size() == 1)
|
|
1264
|
+
if (_readyHandlers.size() == 1)
|
|
1530
1265
|
{
|
|
1531
|
-
|
|
1266
|
+
_conditionVariable.notify_one();
|
|
1532
1267
|
}
|
|
1533
1268
|
}
|
|
1534
1269
|
|