zeroc-ice 3.6b1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/ICE_LICENSE +54 -0
- data/LICENSE +339 -0
- data/bin/slice2rb +17 -0
- data/ext/Communicator.cpp +596 -0
- data/ext/Communicator.h +25 -0
- data/ext/Config.h +111 -0
- data/ext/Connection.cpp +381 -0
- data/ext/Connection.h +26 -0
- data/ext/Endpoint.cpp +311 -0
- data/ext/Endpoint.h +27 -0
- data/ext/ImplicitContext.cpp +152 -0
- data/ext/ImplicitContext.h +25 -0
- data/ext/Init.cpp +52 -0
- data/ext/Logger.cpp +151 -0
- data/ext/Logger.h +28 -0
- data/ext/ObjectFactory.cpp +140 -0
- data/ext/ObjectFactory.h +50 -0
- data/ext/Operation.cpp +676 -0
- data/ext/Operation.h +36 -0
- data/ext/Properties.cpp +369 -0
- data/ext/Properties.h +25 -0
- data/ext/Proxy.cpp +1354 -0
- data/ext/Proxy.h +27 -0
- data/ext/Slice.cpp +223 -0
- data/ext/Slice.h +22 -0
- data/ext/Types.cpp +3160 -0
- data/ext/Types.h +545 -0
- data/ext/Util.cpp +792 -0
- data/ext/Util.h +511 -0
- data/ext/extconf.rb +118 -0
- data/ext/ice/BZIP_LICENSE +42 -0
- data/ext/ice/MCPP_LICENSE +36 -0
- data/ext/ice/bzip2/blocksort.c +1094 -0
- data/ext/ice/bzip2/bzlib.c +1572 -0
- data/ext/ice/bzip2/bzlib.h +282 -0
- data/ext/ice/bzip2/bzlib_private.h +509 -0
- data/ext/ice/bzip2/compress.c +672 -0
- data/ext/ice/bzip2/crctable.c +104 -0
- data/ext/ice/bzip2/decompress.c +646 -0
- data/ext/ice/bzip2/huffman.c +205 -0
- data/ext/ice/bzip2/randtable.c +84 -0
- data/ext/ice/cpp/include/Ice/ACMF.h +30 -0
- data/ext/ice/cpp/include/Ice/Application.h +156 -0
- data/ext/ice/cpp/include/Ice/AsyncResult.h +363 -0
- data/ext/ice/cpp/include/Ice/AsyncResultF.h +26 -0
- data/ext/ice/cpp/include/Ice/BasicStream.h +1315 -0
- data/ext/ice/cpp/include/Ice/Buffer.h +159 -0
- data/ext/ice/cpp/include/Ice/BuiltinSequences.h +74 -0
- data/ext/ice/cpp/include/Ice/Communicator.h +194 -0
- data/ext/ice/cpp/include/Ice/CommunicatorAsync.h +115 -0
- data/ext/ice/cpp/include/Ice/CommunicatorF.h +60 -0
- data/ext/ice/cpp/include/Ice/Config.h +97 -0
- data/ext/ice/cpp/include/Ice/Connection.h +495 -0
- data/ext/ice/cpp/include/Ice/ConnectionAsync.h +115 -0
- data/ext/ice/cpp/include/Ice/ConnectionF.h +72 -0
- data/ext/ice/cpp/include/Ice/ConnectionFactoryF.h +30 -0
- data/ext/ice/cpp/include/Ice/ConnectionIF.h +37 -0
- data/ext/ice/cpp/include/Ice/Current.h +94 -0
- data/ext/ice/cpp/include/Ice/DefaultObjectFactory.h +48 -0
- data/ext/ice/cpp/include/Ice/DeprecatedStringConverter.h +62 -0
- data/ext/ice/cpp/include/Ice/DispatchInterceptor.h +33 -0
- data/ext/ice/cpp/include/Ice/Dispatcher.h +51 -0
- data/ext/ice/cpp/include/Ice/DynamicLibrary.h +105 -0
- data/ext/ice/cpp/include/Ice/DynamicLibraryF.h +29 -0
- data/ext/ice/cpp/include/Ice/Endpoint.h +350 -0
- data/ext/ice/cpp/include/Ice/EndpointF.h +97 -0
- data/ext/ice/cpp/include/Ice/EndpointTypes.h +74 -0
- data/ext/ice/cpp/include/Ice/Exception.h +114 -0
- data/ext/ice/cpp/include/Ice/FacetMap.h +56 -0
- data/ext/ice/cpp/include/Ice/FactoryTable.h +69 -0
- data/ext/ice/cpp/include/Ice/FactoryTableInit.h +87 -0
- data/ext/ice/cpp/include/Ice/Format.h +39 -0
- data/ext/ice/cpp/include/Ice/Functional.h +138 -0
- data/ext/ice/cpp/include/Ice/GCObject.h +73 -0
- data/ext/ice/cpp/include/Ice/Handle.h +192 -0
- data/ext/ice/cpp/include/Ice/Ice.h +54 -0
- data/ext/ice/cpp/include/Ice/Identity.h +160 -0
- data/ext/ice/cpp/include/Ice/ImplicitContext.h +96 -0
- data/ext/ice/cpp/include/Ice/ImplicitContextF.h +60 -0
- data/ext/ice/cpp/include/Ice/Incoming.h +131 -0
- data/ext/ice/cpp/include/Ice/IncomingAsync.h +108 -0
- data/ext/ice/cpp/include/Ice/IncomingAsyncF.h +35 -0
- data/ext/ice/cpp/include/Ice/Initialize.h +141 -0
- data/ext/ice/cpp/include/Ice/InstanceF.h +26 -0
- data/ext/ice/cpp/include/Ice/Instrumentation.h +377 -0
- data/ext/ice/cpp/include/Ice/InstrumentationF.h +71 -0
- data/ext/ice/cpp/include/Ice/LocalException.h +1022 -0
- data/ext/ice/cpp/include/Ice/LocalObject.h +36 -0
- data/ext/ice/cpp/include/Ice/LocalObjectF.h +26 -0
- data/ext/ice/cpp/include/Ice/Locator.h +2191 -0
- data/ext/ice/cpp/include/Ice/LocatorF.h +89 -0
- data/ext/ice/cpp/include/Ice/Logger.h +94 -0
- data/ext/ice/cpp/include/Ice/LoggerF.h +60 -0
- data/ext/ice/cpp/include/Ice/LoggerUtil.h +153 -0
- data/ext/ice/cpp/include/Ice/Makefile +26 -0
- data/ext/ice/cpp/include/Ice/Metrics.h +2989 -0
- data/ext/ice/cpp/include/Ice/MetricsAdminI.h +662 -0
- data/ext/ice/cpp/include/Ice/MetricsFunctional.h +144 -0
- data/ext/ice/cpp/include/Ice/MetricsObserverI.h +576 -0
- data/ext/ice/cpp/include/Ice/NativePropertiesAdmin.h +55 -0
- data/ext/ice/cpp/include/Ice/Object.h +165 -0
- data/ext/ice/cpp/include/Ice/ObjectAdapter.h +162 -0
- data/ext/ice/cpp/include/Ice/ObjectAdapterF.h +60 -0
- data/ext/ice/cpp/include/Ice/ObjectAdapterFactoryF.h +26 -0
- data/ext/ice/cpp/include/Ice/ObjectF.h +26 -0
- data/ext/ice/cpp/include/Ice/ObjectFactory.h +86 -0
- data/ext/ice/cpp/include/Ice/ObjectFactoryF.h +60 -0
- data/ext/ice/cpp/include/Ice/ObjectFactoryManagerF.h +26 -0
- data/ext/ice/cpp/include/Ice/ObserverHelper.h +177 -0
- data/ext/ice/cpp/include/Ice/Outgoing.h +197 -0
- data/ext/ice/cpp/include/Ice/OutgoingAsync.h +264 -0
- data/ext/ice/cpp/include/Ice/OutgoingAsyncF.h +38 -0
- data/ext/ice/cpp/include/Ice/Plugin.h +121 -0
- data/ext/ice/cpp/include/Ice/PluginF.h +66 -0
- data/ext/ice/cpp/include/Ice/Process.h +568 -0
- data/ext/ice/cpp/include/Ice/ProcessF.h +77 -0
- data/ext/ice/cpp/include/Ice/Properties.h +130 -0
- data/ext/ice/cpp/include/Ice/PropertiesAdmin.h +824 -0
- data/ext/ice/cpp/include/Ice/PropertiesF.h +83 -0
- data/ext/ice/cpp/include/Ice/Protocol.h +242 -0
- data/ext/ice/cpp/include/Ice/Proxy.h +2448 -0
- data/ext/ice/cpp/include/Ice/ProxyF.h +78 -0
- data/ext/ice/cpp/include/Ice/ProxyFactoryF.h +26 -0
- data/ext/ice/cpp/include/Ice/ProxyHandle.h +330 -0
- data/ext/ice/cpp/include/Ice/ReferenceF.h +34 -0
- data/ext/ice/cpp/include/Ice/RemoteLogger.h +1496 -0
- data/ext/ice/cpp/include/Ice/RequestHandlerF.h +29 -0
- data/ext/ice/cpp/include/Ice/ResponseHandlerF.h +25 -0
- data/ext/ice/cpp/include/Ice/Router.h +1155 -0
- data/ext/ice/cpp/include/Ice/RouterF.h +77 -0
- data/ext/ice/cpp/include/Ice/ServantLocator.h +90 -0
- data/ext/ice/cpp/include/Ice/ServantLocatorF.h +60 -0
- data/ext/ice/cpp/include/Ice/ServantManagerF.h +26 -0
- data/ext/ice/cpp/include/Ice/Service.h +260 -0
- data/ext/ice/cpp/include/Ice/SliceChecksumDict.h +56 -0
- data/ext/ice/cpp/include/Ice/SliceChecksums.h +34 -0
- data/ext/ice/cpp/include/Ice/SlicedData.h +103 -0
- data/ext/ice/cpp/include/Ice/SlicedDataF.h +34 -0
- data/ext/ice/cpp/include/Ice/Stream.h +449 -0
- data/ext/ice/cpp/include/Ice/StreamF.h +30 -0
- data/ext/ice/cpp/include/Ice/StreamHelpers.h +877 -0
- data/ext/ice/cpp/include/Ice/ThreadPoolF.h +28 -0
- data/ext/ice/cpp/include/Ice/UserExceptionFactory.h +56 -0
- data/ext/ice/cpp/include/Ice/Version.h +254 -0
- data/ext/ice/cpp/include/IceSSL/Config.h +23 -0
- data/ext/ice/cpp/include/IceSSL/ConnectionInfo.h +119 -0
- data/ext/ice/cpp/include/IceSSL/EndpointInfo.h +101 -0
- data/ext/ice/cpp/include/IceSSL/IceSSL.h +22 -0
- data/ext/ice/cpp/include/IceSSL/Makefile +26 -0
- data/ext/ice/cpp/include/IceSSL/Plugin.h +558 -0
- data/ext/ice/cpp/include/IceUtil/AbstractMutex.h +119 -0
- data/ext/ice/cpp/include/IceUtil/Cache.h +362 -0
- data/ext/ice/cpp/include/IceUtil/Cond.h +323 -0
- data/ext/ice/cpp/include/IceUtil/Config.h +234 -0
- data/ext/ice/cpp/include/IceUtil/CountDownLatch.h +50 -0
- data/ext/ice/cpp/include/IceUtil/CtrlCHandler.h +70 -0
- data/ext/ice/cpp/include/IceUtil/DisableWarnings.h +45 -0
- data/ext/ice/cpp/include/IceUtil/Exception.h +184 -0
- data/ext/ice/cpp/include/IceUtil/Functional.h +389 -0
- data/ext/ice/cpp/include/IceUtil/Handle.h +266 -0
- data/ext/ice/cpp/include/IceUtil/IceUtil.h +51 -0
- data/ext/ice/cpp/include/IceUtil/IconvStringConverter.h +302 -0
- data/ext/ice/cpp/include/IceUtil/InputUtil.h +47 -0
- data/ext/ice/cpp/include/IceUtil/Iterator.h +36 -0
- data/ext/ice/cpp/include/IceUtil/Lock.h +135 -0
- data/ext/ice/cpp/include/IceUtil/Makefile +26 -0
- data/ext/ice/cpp/include/IceUtil/Monitor.h +249 -0
- data/ext/ice/cpp/include/IceUtil/Mutex.h +357 -0
- data/ext/ice/cpp/include/IceUtil/MutexProtocol.h +28 -0
- data/ext/ice/cpp/include/IceUtil/MutexPtrLock.h +83 -0
- data/ext/ice/cpp/include/IceUtil/MutexPtrTryLock.h +82 -0
- data/ext/ice/cpp/include/IceUtil/Optional.h +322 -0
- data/ext/ice/cpp/include/IceUtil/Options.h +141 -0
- data/ext/ice/cpp/include/IceUtil/OutputUtil.h +362 -0
- data/ext/ice/cpp/include/IceUtil/PopDisableWarnings.h +19 -0
- data/ext/ice/cpp/include/IceUtil/PushDisableWarnings.h +26 -0
- data/ext/ice/cpp/include/IceUtil/Random.h +24 -0
- data/ext/ice/cpp/include/IceUtil/RecMutex.h +113 -0
- data/ext/ice/cpp/include/IceUtil/SHA1.h +65 -0
- data/ext/ice/cpp/include/IceUtil/ScannerConfig.h +44 -0
- data/ext/ice/cpp/include/IceUtil/ScopedArray.h +97 -0
- data/ext/ice/cpp/include/IceUtil/Shared.h +168 -0
- data/ext/ice/cpp/include/IceUtil/StringConverter.h +175 -0
- data/ext/ice/cpp/include/IceUtil/StringUtil.h +91 -0
- data/ext/ice/cpp/include/IceUtil/Thread.h +181 -0
- data/ext/ice/cpp/include/IceUtil/ThreadException.h +108 -0
- data/ext/ice/cpp/include/IceUtil/Time.h +209 -0
- data/ext/ice/cpp/include/IceUtil/Timer.h +143 -0
- data/ext/ice/cpp/include/IceUtil/UUID.h +22 -0
- data/ext/ice/cpp/include/IceUtil/UndefSysMacros.h +42 -0
- data/ext/ice/cpp/include/IceUtil/UniquePtr.h +101 -0
- data/ext/ice/cpp/include/Slice/CPlusPlusUtil.h +64 -0
- data/ext/ice/cpp/include/Slice/Checksum.h +26 -0
- data/ext/ice/cpp/include/Slice/CsUtil.h +92 -0
- data/ext/ice/cpp/include/Slice/DotNetNames.h +34 -0
- data/ext/ice/cpp/include/Slice/FileTracker.h +71 -0
- data/ext/ice/cpp/include/Slice/JavaUtil.h +277 -0
- data/ext/ice/cpp/include/Slice/Makefile +26 -0
- data/ext/ice/cpp/include/Slice/PHPUtil.h +50 -0
- data/ext/ice/cpp/include/Slice/Parser.h +1116 -0
- data/ext/ice/cpp/include/Slice/Preprocessor.h +68 -0
- data/ext/ice/cpp/include/Slice/PythonUtil.h +64 -0
- data/ext/ice/cpp/include/Slice/RubyUtil.h +54 -0
- data/ext/ice/cpp/include/Slice/Util.h +33 -0
- data/ext/ice/cpp/src/Ice/ACM.cpp +343 -0
- data/ext/ice/cpp/src/Ice/ACM.h +117 -0
- data/ext/ice/cpp/src/Ice/Acceptor.cpp +16 -0
- data/ext/ice/cpp/src/Ice/Acceptor.h +41 -0
- data/ext/ice/cpp/src/Ice/AcceptorF.h +30 -0
- data/ext/ice/cpp/src/Ice/Application.cpp +760 -0
- data/ext/ice/cpp/src/Ice/AsyncResult.cpp +599 -0
- data/ext/ice/cpp/src/Ice/Base64.cpp +269 -0
- data/ext/ice/cpp/src/Ice/Base64.h +36 -0
- data/ext/ice/cpp/src/Ice/BasicStream.cpp +3393 -0
- data/ext/ice/cpp/src/Ice/Buffer.cpp +98 -0
- data/ext/ice/cpp/src/Ice/BuiltinSequences.cpp +34 -0
- data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.cpp +718 -0
- data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.h +106 -0
- data/ext/ice/cpp/src/Ice/Communicator.cpp +45 -0
- data/ext/ice/cpp/src/Ice/CommunicatorF.cpp +38 -0
- data/ext/ice/cpp/src/Ice/CommunicatorI.cpp +386 -0
- data/ext/ice/cpp/src/Ice/CommunicatorI.h +112 -0
- data/ext/ice/cpp/src/Ice/ConnectRequestHandler.cpp +546 -0
- data/ext/ice/cpp/src/Ice/ConnectRequestHandler.h +97 -0
- data/ext/ice/cpp/src/Ice/Connection.cpp +58 -0
- data/ext/ice/cpp/src/Ice/ConnectionF.cpp +38 -0
- data/ext/ice/cpp/src/Ice/ConnectionFactory.cpp +1639 -0
- data/ext/ice/cpp/src/Ice/ConnectionFactory.h +236 -0
- data/ext/ice/cpp/src/Ice/ConnectionI.cpp +3876 -0
- data/ext/ice/cpp/src/Ice/ConnectionI.h +364 -0
- data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.cpp +115 -0
- data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.h +50 -0
- data/ext/ice/cpp/src/Ice/Connector.cpp +16 -0
- data/ext/ice/cpp/src/Ice/Connector.h +36 -0
- data/ext/ice/cpp/src/Ice/ConnectorF.h +26 -0
- data/ext/ice/cpp/src/Ice/Current.cpp +38 -0
- data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.cpp +168 -0
- data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.h +57 -0
- data/ext/ice/cpp/src/Ice/DefaultsAndOverridesF.h +26 -0
- data/ext/ice/cpp/src/Ice/DeprecatedStringConverter.cpp +60 -0
- data/ext/ice/cpp/src/Ice/DispatchInterceptor.cpp +49 -0
- data/ext/ice/cpp/src/Ice/DynamicLibrary.cpp +281 -0
- data/ext/ice/cpp/src/Ice/Endpoint.cpp +53 -0
- data/ext/ice/cpp/src/Ice/EndpointF.cpp +38 -0
- data/ext/ice/cpp/src/Ice/EndpointFactory.cpp +25 -0
- data/ext/ice/cpp/src/Ice/EndpointFactory.h +44 -0
- data/ext/ice/cpp/src/Ice/EndpointFactoryF.h +26 -0
- data/ext/ice/cpp/src/Ice/EndpointFactoryManager.cpp +208 -0
- data/ext/ice/cpp/src/Ice/EndpointFactoryManager.h +46 -0
- data/ext/ice/cpp/src/Ice/EndpointFactoryManagerF.h +26 -0
- data/ext/ice/cpp/src/Ice/EndpointI.cpp +87 -0
- data/ext/ice/cpp/src/Ice/EndpointI.h +165 -0
- data/ext/ice/cpp/src/Ice/EndpointIF.h +41 -0
- data/ext/ice/cpp/src/Ice/EndpointTypes.cpp +38 -0
- data/ext/ice/cpp/src/Ice/EventHandler.cpp +35 -0
- data/ext/ice/cpp/src/Ice/EventHandler.h +78 -0
- data/ext/ice/cpp/src/Ice/EventHandlerF.h +26 -0
- data/ext/ice/cpp/src/Ice/EventLoggerMsg.h +53 -0
- data/ext/ice/cpp/src/Ice/Exception.cpp +832 -0
- data/ext/ice/cpp/src/Ice/FacetMap.cpp +34 -0
- data/ext/ice/cpp/src/Ice/FactoryTable.cpp +158 -0
- data/ext/ice/cpp/src/Ice/FactoryTableInit.cpp +95 -0
- data/ext/ice/cpp/src/Ice/GCObject.cpp +444 -0
- data/ext/ice/cpp/src/Ice/HashUtil.h +59 -0
- data/ext/ice/cpp/src/Ice/HttpParser.cpp +680 -0
- data/ext/ice/cpp/src/Ice/HttpParser.h +124 -0
- data/ext/ice/cpp/src/Ice/IPEndpointI.cpp +733 -0
- data/ext/ice/cpp/src/Ice/IPEndpointI.h +157 -0
- data/ext/ice/cpp/src/Ice/IPEndpointIF.h +29 -0
- data/ext/ice/cpp/src/Ice/Identity.cpp +42 -0
- data/ext/ice/cpp/src/Ice/ImplicitContext.cpp +41 -0
- data/ext/ice/cpp/src/Ice/ImplicitContextF.cpp +38 -0
- data/ext/ice/cpp/src/Ice/ImplicitContextI.cpp +639 -0
- data/ext/ice/cpp/src/Ice/ImplicitContextI.h +51 -0
- data/ext/ice/cpp/src/Ice/Incoming.cpp +757 -0
- data/ext/ice/cpp/src/Ice/IncomingAsync.cpp +340 -0
- data/ext/ice/cpp/src/Ice/IncomingRequest.h +37 -0
- data/ext/ice/cpp/src/Ice/Initialize.cpp +401 -0
- data/ext/ice/cpp/src/Ice/Instance.cpp +1928 -0
- data/ext/ice/cpp/src/Ice/Instance.h +198 -0
- data/ext/ice/cpp/src/Ice/Instrumentation.cpp +68 -0
- data/ext/ice/cpp/src/Ice/InstrumentationF.cpp +43 -0
- data/ext/ice/cpp/src/Ice/InstrumentationI.cpp +1083 -0
- data/ext/ice/cpp/src/Ice/InstrumentationI.h +262 -0
- data/ext/ice/cpp/src/Ice/LocalException.cpp +2091 -0
- data/ext/ice/cpp/src/Ice/LocalObject.cpp +29 -0
- data/ext/ice/cpp/src/Ice/Locator.cpp +1946 -0
- data/ext/ice/cpp/src/Ice/LocatorF.cpp +39 -0
- data/ext/ice/cpp/src/Ice/LocatorInfo.cpp +917 -0
- data/ext/ice/cpp/src/Ice/LocatorInfo.h +193 -0
- data/ext/ice/cpp/src/Ice/LocatorInfoF.h +34 -0
- data/ext/ice/cpp/src/Ice/Logger.cpp +40 -0
- data/ext/ice/cpp/src/Ice/LoggerAdminI.cpp +862 -0
- data/ext/ice/cpp/src/Ice/LoggerAdminI.h +46 -0
- data/ext/ice/cpp/src/Ice/LoggerF.cpp +38 -0
- data/ext/ice/cpp/src/Ice/LoggerI.cpp +199 -0
- data/ext/ice/cpp/src/Ice/LoggerI.h +57 -0
- data/ext/ice/cpp/src/Ice/LoggerUtil.cpp +107 -0
- data/ext/ice/cpp/src/Ice/Makefile +190 -0
- data/ext/ice/cpp/src/Ice/Metrics.cpp +2159 -0
- data/ext/ice/cpp/src/Ice/MetricsAdminI.cpp +669 -0
- data/ext/ice/cpp/src/Ice/MetricsObserverI.cpp +14 -0
- data/ext/ice/cpp/src/Ice/Network.cpp +2694 -0
- data/ext/ice/cpp/src/Ice/Network.h +291 -0
- data/ext/ice/cpp/src/Ice/NetworkF.h +28 -0
- data/ext/ice/cpp/src/Ice/NetworkProxy.cpp +325 -0
- data/ext/ice/cpp/src/Ice/NetworkProxy.h +74 -0
- data/ext/ice/cpp/src/Ice/NetworkProxyF.h +26 -0
- data/ext/ice/cpp/src/Ice/Object.cpp +440 -0
- data/ext/ice/cpp/src/Ice/ObjectAdapter.cpp +41 -0
- data/ext/ice/cpp/src/Ice/ObjectAdapterF.cpp +38 -0
- data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.cpp +241 -0
- data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.h +52 -0
- data/ext/ice/cpp/src/Ice/ObjectAdapterI.cpp +1498 -0
- data/ext/ice/cpp/src/Ice/ObjectAdapterI.h +155 -0
- data/ext/ice/cpp/src/Ice/ObjectFactory.cpp +41 -0
- data/ext/ice/cpp/src/Ice/ObjectFactoryF.cpp +38 -0
- data/ext/ice/cpp/src/Ice/ObjectFactoryManager.cpp +140 -0
- data/ext/ice/cpp/src/Ice/ObjectFactoryManager.h +43 -0
- data/ext/ice/cpp/src/Ice/ObserverHelper.cpp +84 -0
- data/ext/ice/cpp/src/Ice/OpaqueEndpointI.cpp +407 -0
- data/ext/ice/cpp/src/Ice/OpaqueEndpointI.h +70 -0
- data/ext/ice/cpp/src/Ice/Outgoing.cpp +737 -0
- data/ext/ice/cpp/src/Ice/OutgoingAsync.cpp +874 -0
- data/ext/ice/cpp/src/Ice/Plugin.cpp +43 -0
- data/ext/ice/cpp/src/Ice/PluginF.cpp +38 -0
- data/ext/ice/cpp/src/Ice/PluginManagerI.cpp +503 -0
- data/ext/ice/cpp/src/Ice/PluginManagerI.h +67 -0
- data/ext/ice/cpp/src/Ice/Process.cpp +299 -0
- data/ext/ice/cpp/src/Ice/ProcessF.cpp +39 -0
- data/ext/ice/cpp/src/Ice/Properties.cpp +45 -0
- data/ext/ice/cpp/src/Ice/PropertiesAdmin.cpp +555 -0
- data/ext/ice/cpp/src/Ice/PropertiesAdminI.cpp +207 -0
- data/ext/ice/cpp/src/Ice/PropertiesAdminI.h +45 -0
- data/ext/ice/cpp/src/Ice/PropertiesF.cpp +39 -0
- data/ext/ice/cpp/src/Ice/PropertiesI.cpp +759 -0
- data/ext/ice/cpp/src/Ice/PropertiesI.h +78 -0
- data/ext/ice/cpp/src/Ice/PropertyNames.cpp +1293 -0
- data/ext/ice/cpp/src/Ice/PropertyNames.h +81 -0
- data/ext/ice/cpp/src/Ice/Protocol.cpp +137 -0
- data/ext/ice/cpp/src/Ice/ProtocolInstance.cpp +98 -0
- data/ext/ice/cpp/src/Ice/ProtocolInstance.h +91 -0
- data/ext/ice/cpp/src/Ice/ProtocolInstanceF.h +26 -0
- data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.cpp +51 -0
- data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.h +67 -0
- data/ext/ice/cpp/src/Ice/ProtocolPluginFacadeF.h +26 -0
- data/ext/ice/cpp/src/Ice/Proxy.cpp +1810 -0
- data/ext/ice/cpp/src/Ice/ProxyFactory.cpp +305 -0
- data/ext/ice/cpp/src/Ice/ProxyFactory.h +57 -0
- data/ext/ice/cpp/src/Ice/Reference.cpp +1947 -0
- data/ext/ice/cpp/src/Ice/Reference.h +305 -0
- data/ext/ice/cpp/src/Ice/ReferenceFactory.cpp +937 -0
- data/ext/ice/cpp/src/Ice/ReferenceFactory.h +81 -0
- data/ext/ice/cpp/src/Ice/ReferenceFactoryF.h +24 -0
- data/ext/ice/cpp/src/Ice/RemoteLogger.cpp +958 -0
- data/ext/ice/cpp/src/Ice/ReplyStatus.h +29 -0
- data/ext/ice/cpp/src/Ice/RequestHandler.cpp +40 -0
- data/ext/ice/cpp/src/Ice/RequestHandler.h +90 -0
- data/ext/ice/cpp/src/Ice/RequestHandlerFactory.cpp +70 -0
- data/ext/ice/cpp/src/Ice/RequestHandlerFactory.h +41 -0
- data/ext/ice/cpp/src/Ice/ResponseHandler.cpp +20 -0
- data/ext/ice/cpp/src/Ice/ResponseHandler.h +39 -0
- data/ext/ice/cpp/src/Ice/RetryQueue.cpp +154 -0
- data/ext/ice/cpp/src/Ice/RetryQueue.h +69 -0
- data/ext/ice/cpp/src/Ice/RetryQueueF.h +24 -0
- data/ext/ice/cpp/src/Ice/Router.cpp +849 -0
- data/ext/ice/cpp/src/Ice/RouterF.cpp +39 -0
- data/ext/ice/cpp/src/Ice/RouterInfo.cpp +381 -0
- data/ext/ice/cpp/src/Ice/RouterInfo.h +148 -0
- data/ext/ice/cpp/src/Ice/RouterInfoF.h +30 -0
- data/ext/ice/cpp/src/Ice/Selector.cpp +926 -0
- data/ext/ice/cpp/src/Ice/Selector.h +231 -0
- data/ext/ice/cpp/src/Ice/ServantLocator.cpp +41 -0
- data/ext/ice/cpp/src/Ice/ServantLocatorF.cpp +38 -0
- data/ext/ice/cpp/src/Ice/ServantManager.cpp +495 -0
- data/ext/ice/cpp/src/Ice/ServantManager.h +74 -0
- data/ext/ice/cpp/src/Ice/Service.cpp +1897 -0
- data/ext/ice/cpp/src/Ice/SharedContext.h +51 -0
- data/ext/ice/cpp/src/Ice/SliceChecksumDict.cpp +34 -0
- data/ext/ice/cpp/src/Ice/SliceChecksums.cpp +80 -0
- data/ext/ice/cpp/src/Ice/SlicedData.cpp +80 -0
- data/ext/ice/cpp/src/Ice/Stream.cpp +53 -0
- data/ext/ice/cpp/src/Ice/StreamI.cpp +832 -0
- data/ext/ice/cpp/src/Ice/StreamI.h +198 -0
- data/ext/ice/cpp/src/Ice/StreamSocket.cpp +521 -0
- data/ext/ice/cpp/src/Ice/StreamSocket.h +85 -0
- data/ext/ice/cpp/src/Ice/StringConverterPlugin.cpp +145 -0
- data/ext/ice/cpp/src/Ice/SysLoggerI.cpp +167 -0
- data/ext/ice/cpp/src/Ice/SysLoggerI.h +43 -0
- data/ext/ice/cpp/src/Ice/TcpAcceptor.cpp +235 -0
- data/ext/ice/cpp/src/Ice/TcpAcceptor.h +67 -0
- data/ext/ice/cpp/src/Ice/TcpConnector.cpp +133 -0
- data/ext/ice/cpp/src/Ice/TcpConnector.h +51 -0
- data/ext/ice/cpp/src/Ice/TcpEndpointI.cpp +397 -0
- data/ext/ice/cpp/src/Ice/TcpEndpointI.h +93 -0
- data/ext/ice/cpp/src/Ice/TcpTransceiver.cpp +127 -0
- data/ext/ice/cpp/src/Ice/TcpTransceiver.h +61 -0
- data/ext/ice/cpp/src/Ice/ThreadPool.cpp +1357 -0
- data/ext/ice/cpp/src/Ice/ThreadPool.h +399 -0
- data/ext/ice/cpp/src/Ice/TraceLevels.cpp +43 -0
- data/ext/ice/cpp/src/Ice/TraceLevels.h +50 -0
- data/ext/ice/cpp/src/Ice/TraceLevelsF.h +26 -0
- data/ext/ice/cpp/src/Ice/TraceUtil.cpp +452 -0
- data/ext/ice/cpp/src/Ice/TraceUtil.h +28 -0
- data/ext/ice/cpp/src/Ice/Transceiver.cpp +24 -0
- data/ext/ice/cpp/src/Ice/Transceiver.h +52 -0
- data/ext/ice/cpp/src/Ice/TransceiverF.h +38 -0
- data/ext/ice/cpp/src/Ice/UdpConnector.cpp +144 -0
- data/ext/ice/cpp/src/Ice/UdpConnector.h +51 -0
- data/ext/ice/cpp/src/Ice/UdpEndpointI.cpp +483 -0
- data/ext/ice/cpp/src/Ice/UdpEndpointI.h +95 -0
- data/ext/ice/cpp/src/Ice/UdpTransceiver.cpp +1156 -0
- data/ext/ice/cpp/src/Ice/UdpTransceiver.h +123 -0
- data/ext/ice/cpp/src/Ice/Version.cpp +46 -0
- data/ext/ice/cpp/src/Ice/WSAcceptor.cpp +103 -0
- data/ext/ice/cpp/src/Ice/WSAcceptor.h +61 -0
- data/ext/ice/cpp/src/Ice/WSConnector.cpp +113 -0
- data/ext/ice/cpp/src/Ice/WSConnector.h +51 -0
- data/ext/ice/cpp/src/Ice/WSEndpoint.cpp +441 -0
- data/ext/ice/cpp/src/Ice/WSEndpoint.h +97 -0
- data/ext/ice/cpp/src/Ice/WSTransceiver.cpp +1728 -0
- data/ext/ice/cpp/src/Ice/WSTransceiver.h +149 -0
- data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.cpp +594 -0
- data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.h +1035 -0
- data/ext/ice/cpp/src/IceDiscovery/LocatorI.cpp +208 -0
- data/ext/ice/cpp/src/IceDiscovery/LocatorI.h +78 -0
- data/ext/ice/cpp/src/IceDiscovery/LookupI.cpp +308 -0
- data/ext/ice/cpp/src/IceDiscovery/LookupI.h +183 -0
- data/ext/ice/cpp/src/IceDiscovery/Makefile +61 -0
- data/ext/ice/cpp/src/IceDiscovery/PluginI.cpp +148 -0
- data/ext/ice/cpp/src/IceDiscovery/PluginI.h +39 -0
- data/ext/ice/cpp/src/IceSSL/AcceptorI.cpp +258 -0
- data/ext/ice/cpp/src/IceSSL/AcceptorI.h +66 -0
- data/ext/ice/cpp/src/IceSSL/Certificate.cpp +1334 -0
- data/ext/ice/cpp/src/IceSSL/ConnectionInfo.cpp +42 -0
- data/ext/ice/cpp/src/IceSSL/ConnectorI.cpp +151 -0
- data/ext/ice/cpp/src/IceSSL/ConnectorI.h +56 -0
- data/ext/ice/cpp/src/IceSSL/EndpointI.cpp +397 -0
- data/ext/ice/cpp/src/IceSSL/EndpointI.h +96 -0
- data/ext/ice/cpp/src/IceSSL/EndpointInfo.cpp +41 -0
- data/ext/ice/cpp/src/IceSSL/Instance.cpp +38 -0
- data/ext/ice/cpp/src/IceSSL/Instance.h +42 -0
- data/ext/ice/cpp/src/IceSSL/InstanceF.h +34 -0
- data/ext/ice/cpp/src/IceSSL/Makefile +82 -0
- data/ext/ice/cpp/src/IceSSL/OpenSSLEngine.cpp +1001 -0
- data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.cpp +607 -0
- data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.h +75 -0
- data/ext/ice/cpp/src/IceSSL/PluginI.cpp +102 -0
- data/ext/ice/cpp/src/IceSSL/PluginI.h +56 -0
- data/ext/ice/cpp/src/IceSSL/RFC2253.cpp +541 -0
- data/ext/ice/cpp/src/IceSSL/RFC2253.h +67 -0
- data/ext/ice/cpp/src/IceSSL/SChannelEngine.cpp +729 -0
- data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.cpp +1062 -0
- data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.h +130 -0
- data/ext/ice/cpp/src/IceSSL/SSLEngine.cpp +291 -0
- data/ext/ice/cpp/src/IceSSL/SSLEngine.h +264 -0
- data/ext/ice/cpp/src/IceSSL/SSLEngineF.h +41 -0
- data/ext/ice/cpp/src/IceSSL/SecureTransportEngine.cpp +1514 -0
- data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.cpp +609 -0
- data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.h +91 -0
- data/ext/ice/cpp/src/IceSSL/TrustManager.cpp +246 -0
- data/ext/ice/cpp/src/IceSSL/TrustManager.h +51 -0
- data/ext/ice/cpp/src/IceSSL/TrustManagerF.h +26 -0
- data/ext/ice/cpp/src/IceSSL/Util.cpp +1423 -0
- data/ext/ice/cpp/src/IceSSL/Util.h +136 -0
- data/ext/ice/cpp/src/IceUtil/ArgVector.cpp +65 -0
- data/ext/ice/cpp/src/IceUtil/ArgVector.h +41 -0
- data/ext/ice/cpp/src/IceUtil/Cond.cpp +386 -0
- data/ext/ice/cpp/src/IceUtil/ConvertUTF.cpp +477 -0
- data/ext/ice/cpp/src/IceUtil/ConvertUTF.h +144 -0
- data/ext/ice/cpp/src/IceUtil/CountDownLatch.cpp +184 -0
- data/ext/ice/cpp/src/IceUtil/CtrlCHandler.cpp +273 -0
- data/ext/ice/cpp/src/IceUtil/Exception.cpp +782 -0
- data/ext/ice/cpp/src/IceUtil/FileUtil.cpp +532 -0
- data/ext/ice/cpp/src/IceUtil/FileUtil.h +159 -0
- data/ext/ice/cpp/src/IceUtil/InputUtil.cpp +41 -0
- data/ext/ice/cpp/src/IceUtil/Makefile +68 -0
- data/ext/ice/cpp/src/IceUtil/MutexProtocol.cpp +24 -0
- data/ext/ice/cpp/src/IceUtil/Options.cpp +1049 -0
- data/ext/ice/cpp/src/IceUtil/OutputUtil.cpp +591 -0
- data/ext/ice/cpp/src/IceUtil/Random.cpp +185 -0
- data/ext/ice/cpp/src/IceUtil/RecMutex.cpp +257 -0
- data/ext/ice/cpp/src/IceUtil/SHA1.cpp +126 -0
- data/ext/ice/cpp/src/IceUtil/Shared.cpp +200 -0
- data/ext/ice/cpp/src/IceUtil/StopWatch.h +54 -0
- data/ext/ice/cpp/src/IceUtil/StringConverter.cpp +450 -0
- data/ext/ice/cpp/src/IceUtil/StringUtil.cpp +842 -0
- data/ext/ice/cpp/src/IceUtil/Thread.cpp +809 -0
- data/ext/ice/cpp/src/IceUtil/ThreadException.cpp +172 -0
- data/ext/ice/cpp/src/IceUtil/Time.cpp +306 -0
- data/ext/ice/cpp/src/IceUtil/Timer.cpp +251 -0
- data/ext/ice/cpp/src/IceUtil/UUID.cpp +174 -0
- data/ext/ice/cpp/src/IceUtil/Unicode.cpp +131 -0
- data/ext/ice/cpp/src/IceUtil/Unicode.h +49 -0
- data/ext/ice/cpp/src/Slice/CPlusPlusUtil.cpp +1139 -0
- data/ext/ice/cpp/src/Slice/Checksum.cpp +452 -0
- data/ext/ice/cpp/src/Slice/CsUtil.cpp +2650 -0
- data/ext/ice/cpp/src/Slice/DotNetNames.cpp +146 -0
- data/ext/ice/cpp/src/Slice/FileTracker.cpp +203 -0
- data/ext/ice/cpp/src/Slice/Grammar.cpp +4755 -0
- data/ext/ice/cpp/src/Slice/Grammar.h +98 -0
- data/ext/ice/cpp/src/Slice/GrammarUtil.h +234 -0
- data/ext/ice/cpp/src/Slice/JavaUtil.cpp +4376 -0
- data/ext/ice/cpp/src/Slice/MD5.cpp +57 -0
- data/ext/ice/cpp/src/Slice/MD5.h +44 -0
- data/ext/ice/cpp/src/Slice/MD5I.cpp +385 -0
- data/ext/ice/cpp/src/Slice/MD5I.h +91 -0
- data/ext/ice/cpp/src/Slice/Makefile +65 -0
- data/ext/ice/cpp/src/Slice/PHPUtil.cpp +156 -0
- data/ext/ice/cpp/src/Slice/Parser.cpp +6386 -0
- data/ext/ice/cpp/src/Slice/Preprocessor.cpp +686 -0
- data/ext/ice/cpp/src/Slice/Python.cpp +675 -0
- data/ext/ice/cpp/src/Slice/PythonUtil.cpp +2614 -0
- data/ext/ice/cpp/src/Slice/Ruby.cpp +317 -0
- data/ext/ice/cpp/src/Slice/RubyUtil.cpp +1774 -0
- data/ext/ice/cpp/src/Slice/Scanner.cpp +2426 -0
- data/ext/ice/cpp/src/Slice/Util.cpp +325 -0
- data/ext/ice/mcpp/config.h.Darwin +227 -0
- data/ext/ice/mcpp/config.h.Linux +227 -0
- data/ext/ice/mcpp/config.h.MINGW +7 -0
- data/ext/ice/mcpp/configed.H +382 -0
- data/ext/ice/mcpp/directive.c +1699 -0
- data/ext/ice/mcpp/eval.c +1673 -0
- data/ext/ice/mcpp/expand.c +2980 -0
- data/ext/ice/mcpp/internal.H +564 -0
- data/ext/ice/mcpp/main.c +1131 -0
- data/ext/ice/mcpp/mbchar.c +869 -0
- data/ext/ice/mcpp/mcpp_lib.h +31 -0
- data/ext/ice/mcpp/mcpp_out.h +13 -0
- data/ext/ice/mcpp/support.c +2811 -0
- data/ext/ice/mcpp/system.H +396 -0
- data/ext/ice/mcpp/system.c +4940 -0
- data/ice.gemspec +41 -0
- data/lib/Glacier2.rb +12 -0
- data/lib/Glacier2/Metrics.rb +99 -0
- data/lib/Glacier2/PermissionsVerifier.rb +168 -0
- data/lib/Glacier2/PermissionsVerifierF.rb +34 -0
- data/lib/Glacier2/Router.rb +141 -0
- data/lib/Glacier2/RouterF.rb +29 -0
- data/lib/Glacier2/SSLInfo.rb +79 -0
- data/lib/Glacier2/Session.rb +470 -0
- data/lib/Ice.rb +659 -0
- data/lib/Ice/BuiltinSequences.rb +64 -0
- data/lib/Ice/Communicator.rb +93 -0
- data/lib/Ice/CommunicatorF.rb +28 -0
- data/lib/Ice/Connection.rb +414 -0
- data/lib/Ice/ConnectionF.rb +36 -0
- data/lib/Ice/Current.rb +152 -0
- data/lib/Ice/Endpoint.rb +265 -0
- data/lib/Ice/EndpointF.rb +52 -0
- data/lib/Ice/EndpointTypes.rb +77 -0
- data/lib/Ice/FacetMap.rb +28 -0
- data/lib/Ice/Identity.rb +70 -0
- data/lib/Ice/ImplicitContext.rb +59 -0
- data/lib/Ice/ImplicitContextF.rb +28 -0
- data/lib/Ice/Instrumentation.rb +425 -0
- data/lib/Ice/InstrumentationF.rb +35 -0
- data/lib/Ice/LocalException.rb +1081 -0
- data/lib/Ice/Locator.rb +314 -0
- data/lib/Ice/LocatorF.rb +34 -0
- data/lib/Ice/Logger.rb +57 -0
- data/lib/Ice/LoggerF.rb +28 -0
- data/lib/Ice/Metrics.rb +696 -0
- data/lib/Ice/ObjectAdapterF.rb +28 -0
- data/lib/Ice/ObjectFactory.rb +53 -0
- data/lib/Ice/ObjectFactoryF.rb +28 -0
- data/lib/Ice/Plugin.rb +87 -0
- data/lib/Ice/PluginF.rb +32 -0
- data/lib/Ice/Process.rb +93 -0
- data/lib/Ice/ProcessF.rb +29 -0
- data/lib/Ice/Properties.rb +65 -0
- data/lib/Ice/PropertiesAdmin.rb +104 -0
- data/lib/Ice/PropertiesF.rb +33 -0
- data/lib/Ice/Router.rb +163 -0
- data/lib/Ice/RouterF.rb +29 -0
- data/lib/Ice/SliceChecksumDict.rb +28 -0
- data/lib/Ice/Version.rb +100 -0
- data/lib/IceBox.rb +10 -0
- data/lib/IceBox/IceBox.rb +272 -0
- data/lib/IceGrid.rb +17 -0
- data/lib/IceGrid/Admin.rb +1076 -0
- data/lib/IceGrid/Descriptor.rb +1505 -0
- data/lib/IceGrid/Exception.rb +401 -0
- data/lib/IceGrid/FileParser.rb +105 -0
- data/lib/IceGrid/Locator.rb +105 -0
- data/lib/IceGrid/Observer.rb +571 -0
- data/lib/IceGrid/Query.rb +168 -0
- data/lib/IceGrid/Registry.rb +120 -0
- data/lib/IceGrid/Session.rb +114 -0
- data/lib/IceGrid/UserAccountMapper.rb +101 -0
- data/lib/IcePatch2.rb +10 -0
- data/lib/IcePatch2/FileInfo.rb +75 -0
- data/lib/IcePatch2/FileServer.rb +141 -0
- data/lib/IceStorm.rb +11 -0
- data/lib/IceStorm/IceStorm.rb +463 -0
- data/lib/IceStorm/Metrics.rb +155 -0
- data/slice/Freeze/BackgroundSaveEvictor.ice +111 -0
- data/slice/Freeze/CatalogData.ice +49 -0
- data/slice/Freeze/Connection.ice +111 -0
- data/slice/Freeze/ConnectionF.ice +20 -0
- data/slice/Freeze/DB.ice +37 -0
- data/slice/Freeze/Evictor.ice +339 -0
- data/slice/Freeze/EvictorF.ice +22 -0
- data/slice/Freeze/EvictorStorage.ice +72 -0
- data/slice/Freeze/Exception.ice +100 -0
- data/slice/Freeze/Transaction.ice +57 -0
- data/slice/Freeze/TransactionalEvictor.ice +50 -0
- data/slice/Glacier2/Metrics.ice +77 -0
- data/slice/Glacier2/PermissionsVerifier.ice +105 -0
- data/slice/Glacier2/PermissionsVerifierF.ice +21 -0
- data/slice/Glacier2/Router.ice +178 -0
- data/slice/Glacier2/RouterF.ice +20 -0
- data/slice/Glacier2/SSLInfo.ice +50 -0
- data/slice/Glacier2/Session.ice +273 -0
- data/slice/Ice/BuiltinSequences.ice +48 -0
- data/slice/Ice/Communicator.ice +567 -0
- data/slice/Ice/CommunicatorF.ice +20 -0
- data/slice/Ice/Connection.ice +323 -0
- data/slice/Ice/ConnectionF.ice +22 -0
- data/slice/Ice/Current.ice +160 -0
- data/slice/Ice/Endpoint.ice +227 -0
- data/slice/Ice/EndpointF.ice +32 -0
- data/slice/Ice/EndpointTypes.ice +38 -0
- data/slice/Ice/FacetMap.ice +25 -0
- data/slice/Ice/Identity.ice +59 -0
- data/slice/Ice/ImplicitContext.ice +109 -0
- data/slice/Ice/ImplicitContextF.ice +20 -0
- data/slice/Ice/Instrumentation.ice +499 -0
- data/slice/Ice/InstrumentationF.ice +26 -0
- data/slice/Ice/LocalException.ice +1015 -0
- data/slice/Ice/Locator.ice +227 -0
- data/slice/Ice/LocatorF.ice +21 -0
- data/slice/Ice/Logger.ice +86 -0
- data/slice/Ice/LoggerF.ice +20 -0
- data/slice/Ice/Metrics.ice +422 -0
- data/slice/Ice/ObjectAdapter.ice +673 -0
- data/slice/Ice/ObjectAdapterF.ice +20 -0
- data/slice/Ice/ObjectFactory.ice +60 -0
- data/slice/Ice/ObjectFactoryF.ice +20 -0
- data/slice/Ice/Plugin.ice +117 -0
- data/slice/Ice/PluginF.ice +21 -0
- data/slice/Ice/Process.ice +54 -0
- data/slice/Ice/ProcessF.ice +20 -0
- data/slice/Ice/Properties.ice +228 -0
- data/slice/Ice/PropertiesAdmin.ice +75 -0
- data/slice/Ice/PropertiesF.ice +21 -0
- data/slice/Ice/RemoteLogger.ice +232 -0
- data/slice/Ice/Router.ice +83 -0
- data/slice/Ice/RouterF.ice +20 -0
- data/slice/Ice/ServantLocator.ice +117 -0
- data/slice/Ice/ServantLocatorF.ice +20 -0
- data/slice/Ice/SliceChecksumDict.ice +25 -0
- data/slice/Ice/Version.ice +39 -0
- data/slice/IceBox/IceBox.ice +194 -0
- data/slice/IceDiscovery/IceDiscovery.ice +32 -0
- data/slice/IceGrid/Admin.ice +1578 -0
- data/slice/IceGrid/Descriptor.ice +1079 -0
- data/slice/IceGrid/Discovery.ice +73 -0
- data/slice/IceGrid/Exception.ice +383 -0
- data/slice/IceGrid/FileParser.ice +61 -0
- data/slice/IceGrid/Locator.ice +56 -0
- data/slice/IceGrid/Observer.ice +394 -0
- data/slice/IceGrid/PluginFacade.ice +316 -0
- data/slice/IceGrid/Query.ice +130 -0
- data/slice/IceGrid/Registry.ice +138 -0
- data/slice/IceGrid/Session.ice +124 -0
- data/slice/IceGrid/UserAccountMapper.ice +58 -0
- data/slice/IcePatch2/FileInfo.ice +49 -0
- data/slice/IcePatch2/FileServer.ice +129 -0
- data/slice/IceSSL/ConnectionInfo.ice +34 -0
- data/slice/IceSSL/EndpointInfo.ice +41 -0
- data/slice/IceStorm/IceStorm.ice +405 -0
- data/slice/IceStorm/Metrics.ice +71 -0
- metadata +737 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
// **********************************************************************
|
|
2
|
+
//
|
|
3
|
+
// Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved.
|
|
4
|
+
//
|
|
5
|
+
// This copy of Ice is licensed to you under the terms described in the
|
|
6
|
+
// ICE_LICENSE file included in this distribution.
|
|
7
|
+
//
|
|
8
|
+
// **********************************************************************
|
|
9
|
+
|
|
10
|
+
#ifndef ICE_UDP_ENDPOINT_I_H
|
|
11
|
+
#define ICE_UDP_ENDPOINT_I_H
|
|
12
|
+
|
|
13
|
+
#include <IceUtil/Config.h>
|
|
14
|
+
#include <Ice/IPEndpointI.h>
|
|
15
|
+
#include <Ice/EndpointFactory.h>
|
|
16
|
+
#include <Ice/Network.h>
|
|
17
|
+
|
|
18
|
+
namespace IceInternal
|
|
19
|
+
{
|
|
20
|
+
|
|
21
|
+
class UdpEndpointI : public IPEndpointI
|
|
22
|
+
{
|
|
23
|
+
public:
|
|
24
|
+
|
|
25
|
+
UdpEndpointI(const ProtocolInstancePtr&, const std::string&, Ice::Int, const Address&, const std::string&,
|
|
26
|
+
Ice::Int, bool, const std::string&, bool);
|
|
27
|
+
UdpEndpointI(const ProtocolInstancePtr&);
|
|
28
|
+
UdpEndpointI(const ProtocolInstancePtr&, BasicStream*);
|
|
29
|
+
|
|
30
|
+
virtual Ice::EndpointInfoPtr getInfo() const;
|
|
31
|
+
|
|
32
|
+
virtual Ice::Int timeout() const;
|
|
33
|
+
virtual EndpointIPtr timeout(Ice::Int) const;
|
|
34
|
+
virtual bool compress() const;
|
|
35
|
+
virtual EndpointIPtr compress(bool) const;
|
|
36
|
+
virtual bool datagram() const;
|
|
37
|
+
virtual bool secure() const;
|
|
38
|
+
|
|
39
|
+
virtual TransceiverPtr transceiver() const;
|
|
40
|
+
virtual AcceptorPtr acceptor(const std::string&) const;
|
|
41
|
+
virtual std::string options() const;
|
|
42
|
+
|
|
43
|
+
virtual bool operator==(const Ice::LocalObject&) const;
|
|
44
|
+
virtual bool operator<(const Ice::LocalObject&) const;
|
|
45
|
+
|
|
46
|
+
UdpEndpointIPtr endpoint(const UdpTransceiverPtr&) const;
|
|
47
|
+
|
|
48
|
+
using IPEndpointI::connectionId;
|
|
49
|
+
|
|
50
|
+
protected:
|
|
51
|
+
|
|
52
|
+
virtual void streamWriteImpl(BasicStream*) const;
|
|
53
|
+
virtual void hashInit(Ice::Int&) const;
|
|
54
|
+
virtual void fillEndpointInfo(Ice::IPEndpointInfo*) const;
|
|
55
|
+
virtual bool checkOption(const std::string&, const std::string&, const std::string&);
|
|
56
|
+
|
|
57
|
+
virtual ConnectorPtr createConnector(const Address&, const NetworkProxyPtr&) const;
|
|
58
|
+
virtual IPEndpointIPtr createEndpoint(const std::string&, int, const std::string&) const;
|
|
59
|
+
|
|
60
|
+
private:
|
|
61
|
+
|
|
62
|
+
//
|
|
63
|
+
// All members are const, because endpoints are immutable.
|
|
64
|
+
//
|
|
65
|
+
const Ice::Int _mcastTtl;
|
|
66
|
+
const std::string _mcastInterface;
|
|
67
|
+
const bool _connect;
|
|
68
|
+
const bool _compress;
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
class UdpEndpointFactory : public EndpointFactory
|
|
72
|
+
{
|
|
73
|
+
public:
|
|
74
|
+
|
|
75
|
+
virtual ~UdpEndpointFactory();
|
|
76
|
+
|
|
77
|
+
virtual Ice::Short type() const;
|
|
78
|
+
virtual std::string protocol() const;
|
|
79
|
+
virtual EndpointIPtr create(std::vector<std::string>&, bool) const;
|
|
80
|
+
virtual EndpointIPtr read(BasicStream*) const;
|
|
81
|
+
virtual void destroy();
|
|
82
|
+
|
|
83
|
+
virtual EndpointFactoryPtr clone(const ProtocolInstancePtr&) const;
|
|
84
|
+
|
|
85
|
+
private:
|
|
86
|
+
|
|
87
|
+
UdpEndpointFactory(const ProtocolInstancePtr&);
|
|
88
|
+
friend class Instance;
|
|
89
|
+
|
|
90
|
+
ProtocolInstancePtr _instance;
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
#endif
|
|
@@ -0,0 +1,1156 @@
|
|
|
1
|
+
// **********************************************************************
|
|
2
|
+
//
|
|
3
|
+
// Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved.
|
|
4
|
+
//
|
|
5
|
+
// This copy of Ice is licensed to you under the terms described in the
|
|
6
|
+
// ICE_LICENSE file included in this distribution.
|
|
7
|
+
//
|
|
8
|
+
// **********************************************************************
|
|
9
|
+
|
|
10
|
+
#include <Ice/UdpTransceiver.h>
|
|
11
|
+
#include <Ice/UdpEndpointI.h>
|
|
12
|
+
#include <Ice/Connection.h>
|
|
13
|
+
#include <Ice/ProtocolInstance.h>
|
|
14
|
+
#include <Ice/LoggerUtil.h>
|
|
15
|
+
#include <Ice/Buffer.h>
|
|
16
|
+
#include <Ice/LocalException.h>
|
|
17
|
+
#include <Ice/Properties.h>
|
|
18
|
+
#include <IceUtil/StringUtil.h>
|
|
19
|
+
|
|
20
|
+
#include <IceUtil/DisableWarnings.h>
|
|
21
|
+
|
|
22
|
+
#ifdef ICE_OS_WINRT
|
|
23
|
+
# include <ppltasks.h> // For Concurrency::task
|
|
24
|
+
#endif
|
|
25
|
+
|
|
26
|
+
using namespace std;
|
|
27
|
+
using namespace Ice;
|
|
28
|
+
using namespace IceInternal;
|
|
29
|
+
#ifdef ICE_OS_WINRT
|
|
30
|
+
using namespace Platform;
|
|
31
|
+
using namespace Windows::Foundation;
|
|
32
|
+
using namespace Windows::Storage::Streams;
|
|
33
|
+
using namespace Windows::Networking;
|
|
34
|
+
using namespace Windows::Networking::Sockets;
|
|
35
|
+
#endif
|
|
36
|
+
|
|
37
|
+
IceUtil::Shared* IceInternal::upCast(UdpTransceiver* p) { return p; }
|
|
38
|
+
|
|
39
|
+
NativeInfoPtr
|
|
40
|
+
IceInternal::UdpTransceiver::getNativeInfo()
|
|
41
|
+
{
|
|
42
|
+
return this;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
#if defined(ICE_USE_IOCP)
|
|
47
|
+
AsyncInfo*
|
|
48
|
+
IceInternal::UdpTransceiver::getAsyncInfo(SocketOperation status)
|
|
49
|
+
{
|
|
50
|
+
switch(status)
|
|
51
|
+
{
|
|
52
|
+
case SocketOperationRead:
|
|
53
|
+
return &_read;
|
|
54
|
+
case SocketOperationWrite:
|
|
55
|
+
return &_write;
|
|
56
|
+
default:
|
|
57
|
+
assert(false);
|
|
58
|
+
return 0;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
#elif defined(ICE_OS_WINRT)
|
|
62
|
+
void
|
|
63
|
+
IceInternal::UdpTransceiver::setCompletedHandler(SocketOperationCompletedHandler^ handler)
|
|
64
|
+
{
|
|
65
|
+
_completedHandler = handler;
|
|
66
|
+
_writeOperationCompletedHandler = ref new AsyncOperationCompletedHandler<unsigned int>(
|
|
67
|
+
[=] (IAsyncOperation<unsigned int>^ operation, Windows::Foundation::AsyncStatus status)
|
|
68
|
+
{
|
|
69
|
+
if(status != Windows::Foundation::AsyncStatus::Completed)
|
|
70
|
+
{
|
|
71
|
+
_write.count = SOCKET_ERROR;
|
|
72
|
+
_write.error = operation->ErrorCode.Value;
|
|
73
|
+
}
|
|
74
|
+
else
|
|
75
|
+
{
|
|
76
|
+
_write.count = static_cast<int>(operation->GetResults());
|
|
77
|
+
}
|
|
78
|
+
_completedHandler(SocketOperationWrite);
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
#endif
|
|
82
|
+
|
|
83
|
+
SocketOperation
|
|
84
|
+
IceInternal::UdpTransceiver::initialize(Buffer& /*readBuffer*/, Buffer& /*writeBuffer*/, bool& /*hasMoreData*/)
|
|
85
|
+
{
|
|
86
|
+
if(_state == StateNeedConnect)
|
|
87
|
+
{
|
|
88
|
+
_state = StateConnectPending;
|
|
89
|
+
return SocketOperationConnect;
|
|
90
|
+
}
|
|
91
|
+
else if(_state <= StateConnectPending)
|
|
92
|
+
{
|
|
93
|
+
#if defined(ICE_USE_IOCP)
|
|
94
|
+
doFinishConnectAsync(_fd, _write);
|
|
95
|
+
#elif defined(ICE_OS_WINRT)
|
|
96
|
+
if(_write.count == SOCKET_ERROR)
|
|
97
|
+
{
|
|
98
|
+
checkConnectErrorCode(__FILE__, __LINE__, _write.error, _addr.host);
|
|
99
|
+
}
|
|
100
|
+
#else
|
|
101
|
+
doFinishConnect(_fd);
|
|
102
|
+
#endif
|
|
103
|
+
_state = StateConnected;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
assert(_state >= StateConnected);
|
|
107
|
+
return SocketOperationNone;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
SocketOperation
|
|
111
|
+
IceInternal::UdpTransceiver::closing(bool, const Ice::LocalException&)
|
|
112
|
+
{
|
|
113
|
+
// Nothing to do.
|
|
114
|
+
return SocketOperationNone;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
void
|
|
118
|
+
IceInternal::UdpTransceiver::close()
|
|
119
|
+
{
|
|
120
|
+
#ifdef ICE_OS_WINRT
|
|
121
|
+
IceUtil::Mutex::Lock lock(_mutex);
|
|
122
|
+
if(_readPending)
|
|
123
|
+
{
|
|
124
|
+
assert(_received.empty());
|
|
125
|
+
_completedHandler(SocketOperationRead);
|
|
126
|
+
_readPending = false;
|
|
127
|
+
}
|
|
128
|
+
_received.clear();
|
|
129
|
+
#endif
|
|
130
|
+
|
|
131
|
+
assert(_fd != INVALID_SOCKET);
|
|
132
|
+
SOCKET fd = _fd;
|
|
133
|
+
_fd = INVALID_SOCKET;
|
|
134
|
+
closeSocket(fd);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
EndpointIPtr
|
|
138
|
+
IceInternal::UdpTransceiver::bind()
|
|
139
|
+
{
|
|
140
|
+
if(isMulticast(_addr))
|
|
141
|
+
{
|
|
142
|
+
setReuseAddress(_fd, true);
|
|
143
|
+
_mcastAddr = _addr;
|
|
144
|
+
|
|
145
|
+
#ifdef _WIN32
|
|
146
|
+
//
|
|
147
|
+
// Windows does not allow binding to the mcast address itself
|
|
148
|
+
// so we bind to INADDR_ANY (0.0.0.0) instead. As a result,
|
|
149
|
+
// bi-directional connection won't work because the source
|
|
150
|
+
// address won't be the multicast address and the client will
|
|
151
|
+
// therefore reject the datagram.
|
|
152
|
+
//
|
|
153
|
+
const_cast<Address&>(_addr) = getAddressForServer("", _port, getProtocolSupport(_addr), false);
|
|
154
|
+
#endif
|
|
155
|
+
|
|
156
|
+
const_cast<Address&>(_addr) = doBind(_fd, _addr);
|
|
157
|
+
if(getPort(_mcastAddr) == 0)
|
|
158
|
+
{
|
|
159
|
+
setPort(_mcastAddr, getPort(_addr));
|
|
160
|
+
}
|
|
161
|
+
setMcastGroup(_fd, _mcastAddr, _mcastInterface);
|
|
162
|
+
}
|
|
163
|
+
else
|
|
164
|
+
{
|
|
165
|
+
#ifndef _WIN32
|
|
166
|
+
//
|
|
167
|
+
// Enable SO_REUSEADDR on Unix platforms to allow re-using
|
|
168
|
+
// the socket even if it's in the TIME_WAIT state. On
|
|
169
|
+
// Windows, this doesn't appear to be necessary and
|
|
170
|
+
// enabling SO_REUSEADDR would actually not be a good
|
|
171
|
+
// thing since it allows a second process to bind to an
|
|
172
|
+
// address even it's already bound by another process.
|
|
173
|
+
//
|
|
174
|
+
// TODO: using SO_EXCLUSIVEADDRUSE on Windows would
|
|
175
|
+
// probably be better but it's only supported by recent
|
|
176
|
+
// Windows versions (XP SP2, Windows Server 2003).
|
|
177
|
+
//
|
|
178
|
+
setReuseAddress(_fd, true);
|
|
179
|
+
#endif
|
|
180
|
+
const_cast<Address&>(_addr) = doBind(_fd, _addr);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
_bound = true;
|
|
184
|
+
|
|
185
|
+
_endpoint = _endpoint->endpoint(this);
|
|
186
|
+
return _endpoint;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
SocketOperation
|
|
190
|
+
IceInternal::UdpTransceiver::write(Buffer& buf)
|
|
191
|
+
{
|
|
192
|
+
if(buf.i == buf.b.end())
|
|
193
|
+
{
|
|
194
|
+
return SocketOperationNone;
|
|
195
|
+
}
|
|
196
|
+
#ifdef ICE_OS_WINRT
|
|
197
|
+
return SocketOperationWrite;
|
|
198
|
+
#else
|
|
199
|
+
assert(buf.i == buf.b.begin());
|
|
200
|
+
assert(_fd != INVALID_SOCKET && _state >= StateConnected);
|
|
201
|
+
|
|
202
|
+
// The caller is supposed to check the send size before by calling checkSendSize
|
|
203
|
+
assert(min(_maxPacketSize, _sndSize - _udpOverhead) >= static_cast<int>(buf.b.size()));
|
|
204
|
+
|
|
205
|
+
repeat:
|
|
206
|
+
|
|
207
|
+
ssize_t ret;
|
|
208
|
+
if(_state == StateConnected)
|
|
209
|
+
{
|
|
210
|
+
# ifdef _WIN32
|
|
211
|
+
ret = ::send(_fd, reinterpret_cast<const char*>(&buf.b[0]), static_cast<int>(buf.b.size()), 0);
|
|
212
|
+
# else
|
|
213
|
+
ret = ::send(_fd, reinterpret_cast<const char*>(&buf.b[0]), buf.b.size(), 0);
|
|
214
|
+
# endif
|
|
215
|
+
}
|
|
216
|
+
else
|
|
217
|
+
{
|
|
218
|
+
socklen_t len = static_cast<socklen_t>(sizeof(sockaddr_storage));
|
|
219
|
+
if(_peerAddr.saStorage.ss_family == AF_INET)
|
|
220
|
+
{
|
|
221
|
+
len = static_cast<socklen_t>(sizeof(sockaddr_in));
|
|
222
|
+
}
|
|
223
|
+
else if(_peerAddr.saStorage.ss_family == AF_INET6)
|
|
224
|
+
{
|
|
225
|
+
len = static_cast<socklen_t>(sizeof(sockaddr_in6));
|
|
226
|
+
}
|
|
227
|
+
else
|
|
228
|
+
{
|
|
229
|
+
// No peer has sent a datagram yet.
|
|
230
|
+
SocketException ex(__FILE__, __LINE__);
|
|
231
|
+
ex.error = 0;
|
|
232
|
+
throw ex;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
# ifdef _WIN32
|
|
236
|
+
ret = ::sendto(_fd, reinterpret_cast<const char*>(&buf.b[0]), static_cast<int>(buf.b.size()), 0,
|
|
237
|
+
&_peerAddr.sa, len);
|
|
238
|
+
# else
|
|
239
|
+
ret = ::sendto(_fd, reinterpret_cast<const char*>(&buf.b[0]), buf.b.size(), 0,
|
|
240
|
+
&_peerAddr.sa, len);
|
|
241
|
+
# endif
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
if(ret == SOCKET_ERROR)
|
|
245
|
+
{
|
|
246
|
+
if(interrupted())
|
|
247
|
+
{
|
|
248
|
+
goto repeat;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
if(wouldBlock())
|
|
252
|
+
{
|
|
253
|
+
return SocketOperationWrite;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
SocketException ex(__FILE__, __LINE__);
|
|
257
|
+
ex.error = getSocketErrno();
|
|
258
|
+
throw ex;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
assert(ret == static_cast<ssize_t>(buf.b.size()));
|
|
262
|
+
buf.i = buf.b.end();
|
|
263
|
+
return SocketOperationNone;
|
|
264
|
+
#endif
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
SocketOperation
|
|
268
|
+
IceInternal::UdpTransceiver::read(Buffer& buf, bool&)
|
|
269
|
+
{
|
|
270
|
+
if(buf.i == buf.b.end())
|
|
271
|
+
{
|
|
272
|
+
return SocketOperationNone;
|
|
273
|
+
}
|
|
274
|
+
#ifdef ICE_OS_WINRT
|
|
275
|
+
return SocketOperationRead;
|
|
276
|
+
#else
|
|
277
|
+
|
|
278
|
+
assert(buf.i == buf.b.begin());
|
|
279
|
+
assert(_fd != INVALID_SOCKET);
|
|
280
|
+
|
|
281
|
+
const int packetSize = min(_maxPacketSize, _rcvSize - _udpOverhead);
|
|
282
|
+
buf.b.resize(packetSize);
|
|
283
|
+
buf.i = buf.b.begin();
|
|
284
|
+
|
|
285
|
+
repeat:
|
|
286
|
+
|
|
287
|
+
ssize_t ret;
|
|
288
|
+
if(_state == StateConnected)
|
|
289
|
+
{
|
|
290
|
+
ret = ::recv(_fd, reinterpret_cast<char*>(&buf.b[0]), packetSize, 0);
|
|
291
|
+
}
|
|
292
|
+
else
|
|
293
|
+
{
|
|
294
|
+
assert(_incoming);
|
|
295
|
+
|
|
296
|
+
Address peerAddr;
|
|
297
|
+
memset(&peerAddr.saStorage, 0, sizeof(sockaddr_storage));
|
|
298
|
+
socklen_t len = static_cast<socklen_t>(sizeof(sockaddr_storage));
|
|
299
|
+
|
|
300
|
+
ret = recvfrom(_fd, reinterpret_cast<char*>(&buf.b[0]), packetSize, 0,
|
|
301
|
+
&peerAddr.sa, &len);
|
|
302
|
+
|
|
303
|
+
if(ret != SOCKET_ERROR)
|
|
304
|
+
{
|
|
305
|
+
_peerAddr = peerAddr;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
if(ret == SOCKET_ERROR)
|
|
310
|
+
{
|
|
311
|
+
if(recvTruncated())
|
|
312
|
+
{
|
|
313
|
+
// The message was truncated and the whole buffer is filled. We ignore
|
|
314
|
+
// this error here, it will be detected at the connection level when
|
|
315
|
+
// the Ice message size is checked against the buffer size.
|
|
316
|
+
ret = static_cast<ssize_t>(buf.b.size());
|
|
317
|
+
}
|
|
318
|
+
else
|
|
319
|
+
{
|
|
320
|
+
if(interrupted())
|
|
321
|
+
{
|
|
322
|
+
goto repeat;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
if(wouldBlock())
|
|
326
|
+
{
|
|
327
|
+
return SocketOperationRead;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
if(connectionLost())
|
|
331
|
+
{
|
|
332
|
+
ConnectionLostException ex(__FILE__, __LINE__);
|
|
333
|
+
ex.error = getSocketErrno();
|
|
334
|
+
throw ex;
|
|
335
|
+
}
|
|
336
|
+
else
|
|
337
|
+
{
|
|
338
|
+
SocketException ex(__FILE__, __LINE__);
|
|
339
|
+
ex.error = getSocketErrno();
|
|
340
|
+
throw ex;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
if(_state == StateNeedConnect)
|
|
346
|
+
{
|
|
347
|
+
//
|
|
348
|
+
// If we must connect, we connect to the first peer that sends us a packet.
|
|
349
|
+
//
|
|
350
|
+
assert(_incoming); // Client connections should always be connected at this point.
|
|
351
|
+
|
|
352
|
+
# ifndef NDEBUG
|
|
353
|
+
bool connected = doConnect(_fd, _peerAddr, Address());
|
|
354
|
+
assert(connected);
|
|
355
|
+
# else
|
|
356
|
+
doConnect(_fd, _peerAddr, Address());
|
|
357
|
+
# endif
|
|
358
|
+
_state = StateConnected;
|
|
359
|
+
|
|
360
|
+
if(_instance->traceLevel() >= 1)
|
|
361
|
+
{
|
|
362
|
+
Trace out(_instance->logger(), _instance->traceCategory());
|
|
363
|
+
out << "connected " << _instance->protocol() << " socket\n" << toString();
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
buf.b.resize(ret);
|
|
368
|
+
buf.i = buf.b.end();
|
|
369
|
+
return SocketOperationNone;
|
|
370
|
+
#endif
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
#if defined(ICE_USE_IOCP) || defined(ICE_OS_WINRT)
|
|
374
|
+
bool
|
|
375
|
+
IceInternal::UdpTransceiver::startWrite(Buffer& buf)
|
|
376
|
+
{
|
|
377
|
+
assert(buf.i == buf.b.begin());
|
|
378
|
+
|
|
379
|
+
// The caller is supposed to check the send size before by calling checkSendSize
|
|
380
|
+
assert(min(_maxPacketSize, _sndSize - _udpOverhead) >= static_cast<int>(buf.b.size()));
|
|
381
|
+
assert(_fd != INVALID_SOCKET);
|
|
382
|
+
|
|
383
|
+
#ifdef ICE_OS_WINRT
|
|
384
|
+
if(_state < StateConnected)
|
|
385
|
+
{
|
|
386
|
+
try
|
|
387
|
+
{
|
|
388
|
+
bool multicast = isMulticast(_addr) || isAddressValid(_mcastAddr);
|
|
389
|
+
if(!multicast)
|
|
390
|
+
{
|
|
391
|
+
auto operation = safe_cast<DatagramSocket^>(_fd)->ConnectAsync(_addr.host, _addr.port);
|
|
392
|
+
if(!checkIfErrorOrCompleted(SocketOperationConnect, operation))
|
|
393
|
+
{
|
|
394
|
+
operation->Completed = ref new AsyncActionCompletedHandler(
|
|
395
|
+
[=] (IAsyncAction^ info, Windows::Foundation::AsyncStatus status)
|
|
396
|
+
{
|
|
397
|
+
if(status != Windows::Foundation::AsyncStatus::Completed)
|
|
398
|
+
{
|
|
399
|
+
_write.count = SOCKET_ERROR;
|
|
400
|
+
_write.error = info->ErrorCode.Value;
|
|
401
|
+
}
|
|
402
|
+
else
|
|
403
|
+
{
|
|
404
|
+
_write.count = 0;
|
|
405
|
+
_writer = ref new DataWriter(safe_cast<DatagramSocket^>(_fd)->OutputStream);
|
|
406
|
+
}
|
|
407
|
+
_completedHandler(SocketOperationConnect);
|
|
408
|
+
});
|
|
409
|
+
}
|
|
410
|
+
else
|
|
411
|
+
{
|
|
412
|
+
_write.count = 0;
|
|
413
|
+
_writer = ref new DataWriter(safe_cast<DatagramSocket^>(_fd)->OutputStream);
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
else
|
|
417
|
+
{
|
|
418
|
+
auto operation = safe_cast<DatagramSocket^>(_fd)->GetOutputStreamAsync(_addr.host, _addr.port);
|
|
419
|
+
if(!checkIfErrorOrCompleted(SocketOperationConnect, operation))
|
|
420
|
+
{
|
|
421
|
+
operation->Completed = ref new AsyncOperationCompletedHandler<IOutputStream^>(
|
|
422
|
+
[=] (IAsyncOperation<IOutputStream^>^ info, Windows::Foundation::AsyncStatus status)
|
|
423
|
+
{
|
|
424
|
+
if(status != Windows::Foundation::AsyncStatus::Completed)
|
|
425
|
+
{
|
|
426
|
+
_write.count = SOCKET_ERROR;
|
|
427
|
+
_write.error = info->ErrorCode.Value;
|
|
428
|
+
}
|
|
429
|
+
else
|
|
430
|
+
{
|
|
431
|
+
_write.count = 0;
|
|
432
|
+
_writer = ref new DataWriter(info->GetResults());
|
|
433
|
+
}
|
|
434
|
+
if(_mcastAddr.host != nullptr)
|
|
435
|
+
{
|
|
436
|
+
setMcastGroup(_fd, _mcastAddr, "");
|
|
437
|
+
}
|
|
438
|
+
_completedHandler(SocketOperationConnect);
|
|
439
|
+
});
|
|
440
|
+
}
|
|
441
|
+
else
|
|
442
|
+
{
|
|
443
|
+
_write.count = 0;
|
|
444
|
+
_writer = ref new DataWriter(operation->GetResults());
|
|
445
|
+
if(_mcastAddr.host != nullptr)
|
|
446
|
+
{
|
|
447
|
+
setMcastGroup(_fd, _mcastAddr, "");
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
catch(Platform::Exception^ ex)
|
|
453
|
+
{
|
|
454
|
+
checkConnectErrorCode(__FILE__, __LINE__, ex->HResult, _addr.host);
|
|
455
|
+
}
|
|
456
|
+
return false;
|
|
457
|
+
}
|
|
458
|
+
else if(_state == StateNotConnected)
|
|
459
|
+
{
|
|
460
|
+
try
|
|
461
|
+
{
|
|
462
|
+
DatagramSocket^ fd = safe_cast<DatagramSocket^>(_fd);
|
|
463
|
+
concurrency::create_task(fd->GetOutputStreamAsync(_peerAddr.host, _peerAddr.port)).then(
|
|
464
|
+
[=,&buf](concurrency::task<IOutputStream^> task)
|
|
465
|
+
{
|
|
466
|
+
try
|
|
467
|
+
{
|
|
468
|
+
DataWriter^ writer = ref new DataWriter(task.get());
|
|
469
|
+
writer->WriteBytes(ref new Array<unsigned char>(&*buf.i, static_cast<int>(buf.b.size())));
|
|
470
|
+
DataWriterStoreOperation^ operation = writer->StoreAsync();
|
|
471
|
+
|
|
472
|
+
Windows::Foundation::AsyncStatus status = operation->Status;
|
|
473
|
+
if(status == Windows::Foundation::AsyncStatus::Completed)
|
|
474
|
+
{
|
|
475
|
+
//
|
|
476
|
+
// NOTE: unlike other methods, it's important to modify _write.count
|
|
477
|
+
// _before_ calling checkIfErrorOrCompleted since this isn't called
|
|
478
|
+
// with the connection mutex but from a Windows thread pool thread.
|
|
479
|
+
// So we can't modify the _write structure after calling the
|
|
480
|
+
// completed callback.
|
|
481
|
+
//
|
|
482
|
+
_write.count = operation->GetResults();
|
|
483
|
+
_completedHandler(SocketOperationWrite);
|
|
484
|
+
}
|
|
485
|
+
else if(status == Windows::Foundation::AsyncStatus::Started)
|
|
486
|
+
{
|
|
487
|
+
operation->Completed = _writeOperationCompletedHandler;
|
|
488
|
+
}
|
|
489
|
+
else
|
|
490
|
+
{
|
|
491
|
+
if(_state < StateConnected)
|
|
492
|
+
{
|
|
493
|
+
checkConnectErrorCode(__FILE__, __LINE__, operation->ErrorCode.Value, _addr.host);
|
|
494
|
+
}
|
|
495
|
+
else
|
|
496
|
+
{
|
|
497
|
+
checkErrorCode(__FILE__, __LINE__, operation->ErrorCode.Value);
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
catch(Platform::Exception^ pex)
|
|
502
|
+
{
|
|
503
|
+
_write.count = SOCKET_ERROR;
|
|
504
|
+
_write.error = pex->HResult;
|
|
505
|
+
_completedHandler(SocketOperationWrite);
|
|
506
|
+
}
|
|
507
|
+
});
|
|
508
|
+
}
|
|
509
|
+
catch(Platform::Exception^ ex)
|
|
510
|
+
{
|
|
511
|
+
checkErrorCode(__FILE__, __LINE__, ex->HResult);
|
|
512
|
+
}
|
|
513
|
+
return true;
|
|
514
|
+
}
|
|
515
|
+
else
|
|
516
|
+
{
|
|
517
|
+
try
|
|
518
|
+
{
|
|
519
|
+
_writer->WriteBytes(ref new Array<unsigned char>(&*buf.i, static_cast<int>(buf.b.size())));
|
|
520
|
+
DataWriterStoreOperation^ operation = _writer->StoreAsync();
|
|
521
|
+
if(checkIfErrorOrCompleted(SocketOperationWrite, operation))
|
|
522
|
+
{
|
|
523
|
+
_write.count = operation->GetResults();
|
|
524
|
+
}
|
|
525
|
+
else
|
|
526
|
+
{
|
|
527
|
+
operation->Completed = _writeOperationCompletedHandler;
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
catch(Platform::Exception^ ex)
|
|
531
|
+
{
|
|
532
|
+
checkErrorCode(__FILE__, __LINE__, ex->HResult);
|
|
533
|
+
}
|
|
534
|
+
return true;
|
|
535
|
+
}
|
|
536
|
+
#else
|
|
537
|
+
_write.buf.len = static_cast<int>(buf.b.size());
|
|
538
|
+
_write.buf.buf = reinterpret_cast<char*>(&*buf.i);
|
|
539
|
+
int err;
|
|
540
|
+
if(_state == StateConnected)
|
|
541
|
+
{
|
|
542
|
+
err = WSASend(_fd, &_write.buf, 1, &_write.count, 0, &_write, NULL);
|
|
543
|
+
}
|
|
544
|
+
else
|
|
545
|
+
{
|
|
546
|
+
socklen_t len = static_cast<socklen_t>(sizeof(sockaddr_storage));
|
|
547
|
+
if(_peerAddr.saStorage.ss_family == AF_INET)
|
|
548
|
+
{
|
|
549
|
+
len = sizeof(sockaddr_in);
|
|
550
|
+
}
|
|
551
|
+
else if(_peerAddr.saStorage.ss_family == AF_INET6)
|
|
552
|
+
{
|
|
553
|
+
len = sizeof(sockaddr_in6);
|
|
554
|
+
}
|
|
555
|
+
else
|
|
556
|
+
{
|
|
557
|
+
// No peer has sent a datagram yet.
|
|
558
|
+
SocketException ex(__FILE__, __LINE__);
|
|
559
|
+
ex.error = 0;
|
|
560
|
+
throw ex;
|
|
561
|
+
}
|
|
562
|
+
err = WSASendTo(_fd, &_write.buf, 1, &_write.count, 0, &_peerAddr.sa,
|
|
563
|
+
len, &_write, NULL);
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
if(err == SOCKET_ERROR)
|
|
567
|
+
{
|
|
568
|
+
if(!wouldBlock())
|
|
569
|
+
{
|
|
570
|
+
if(connectionLost())
|
|
571
|
+
{
|
|
572
|
+
ConnectionLostException ex(__FILE__, __LINE__);
|
|
573
|
+
ex.error = getSocketErrno();
|
|
574
|
+
throw ex;
|
|
575
|
+
}
|
|
576
|
+
else
|
|
577
|
+
{
|
|
578
|
+
SocketException ex(__FILE__, __LINE__);
|
|
579
|
+
ex.error = getSocketErrno();
|
|
580
|
+
throw ex;
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
#endif
|
|
585
|
+
return true;
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
void
|
|
589
|
+
IceInternal::UdpTransceiver::finishWrite(Buffer& buf)
|
|
590
|
+
{
|
|
591
|
+
if(_state < StateConnected)
|
|
592
|
+
{
|
|
593
|
+
return;
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
if(static_cast<int>(_write.count) == SOCKET_ERROR)
|
|
597
|
+
{
|
|
598
|
+
#ifndef ICE_OS_WINRT
|
|
599
|
+
WSASetLastError(_write.error);
|
|
600
|
+
if(connectionLost())
|
|
601
|
+
{
|
|
602
|
+
ConnectionLostException ex(__FILE__, __LINE__);
|
|
603
|
+
ex.error = getSocketErrno();
|
|
604
|
+
throw ex;
|
|
605
|
+
}
|
|
606
|
+
else
|
|
607
|
+
{
|
|
608
|
+
SocketException ex(__FILE__, __LINE__);
|
|
609
|
+
ex.error = getSocketErrno();
|
|
610
|
+
throw ex;
|
|
611
|
+
}
|
|
612
|
+
#else
|
|
613
|
+
checkErrorCode(__FILE__, __LINE__, _write.error);
|
|
614
|
+
#endif
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
assert(_write.count == buf.b.size());
|
|
618
|
+
buf.i = buf.b.end();
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
void
|
|
622
|
+
IceInternal::UdpTransceiver::startRead(Buffer& buf)
|
|
623
|
+
{
|
|
624
|
+
const int packetSize = min(_maxPacketSize, _rcvSize - _udpOverhead);
|
|
625
|
+
buf.b.resize(packetSize);
|
|
626
|
+
buf.i = buf.b.begin();
|
|
627
|
+
assert(!buf.b.empty() && buf.i != buf.b.end());
|
|
628
|
+
#ifndef ICE_OS_WINRT
|
|
629
|
+
_read.buf.len = packetSize;
|
|
630
|
+
_read.buf.buf = reinterpret_cast<char*>(&*buf.i);
|
|
631
|
+
int err;
|
|
632
|
+
if(_state == StateConnected)
|
|
633
|
+
{
|
|
634
|
+
err = WSARecv(_fd, &_read.buf, 1, &_read.count, &_read.flags, &_read, NULL);
|
|
635
|
+
}
|
|
636
|
+
else
|
|
637
|
+
{
|
|
638
|
+
memset(&_readAddr.saStorage, 0, sizeof(struct sockaddr_storage));
|
|
639
|
+
_readAddrLen = static_cast<socklen_t>(sizeof(sockaddr_storage));
|
|
640
|
+
|
|
641
|
+
err = WSARecvFrom(_fd, &_read.buf, 1, &_read.count, &_read.flags,
|
|
642
|
+
&_readAddr.sa, &_readAddrLen, &_read, NULL);
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
if(err == SOCKET_ERROR)
|
|
646
|
+
{
|
|
647
|
+
if(recvTruncated())
|
|
648
|
+
{
|
|
649
|
+
// Nothing to do.
|
|
650
|
+
}
|
|
651
|
+
else if(!wouldBlock())
|
|
652
|
+
{
|
|
653
|
+
if(connectionLost())
|
|
654
|
+
{
|
|
655
|
+
ConnectionLostException ex(__FILE__, __LINE__);
|
|
656
|
+
ex.error = getSocketErrno();
|
|
657
|
+
throw ex;
|
|
658
|
+
}
|
|
659
|
+
else
|
|
660
|
+
{
|
|
661
|
+
SocketException ex(__FILE__, __LINE__);
|
|
662
|
+
ex.error = getSocketErrno();
|
|
663
|
+
throw ex;
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
#else
|
|
668
|
+
IceUtil::Mutex::Lock lock(_mutex);
|
|
669
|
+
assert(!_readPending);
|
|
670
|
+
if(!_received.empty())
|
|
671
|
+
{
|
|
672
|
+
_completedHandler(SocketOperationRead);
|
|
673
|
+
}
|
|
674
|
+
else
|
|
675
|
+
{
|
|
676
|
+
_readPending = true;
|
|
677
|
+
}
|
|
678
|
+
#endif
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
void
|
|
682
|
+
IceInternal::UdpTransceiver::finishRead(Buffer& buf, bool&)
|
|
683
|
+
{
|
|
684
|
+
#ifdef ICE_OS_WINRT
|
|
685
|
+
IceUtil::Mutex::Lock lock(_mutex);
|
|
686
|
+
assert(!_readPending && (!_received.empty() || _fd == INVALID_SOCKET));
|
|
687
|
+
if(_fd == INVALID_SOCKET)
|
|
688
|
+
{
|
|
689
|
+
return;
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
DatagramSocketMessageReceivedEventArgs^ args = _received.front();
|
|
693
|
+
_received.pop_front();
|
|
694
|
+
|
|
695
|
+
int ret;
|
|
696
|
+
try
|
|
697
|
+
{
|
|
698
|
+
DataReader^ reader = args->GetDataReader();
|
|
699
|
+
// Truncate received data if too large.
|
|
700
|
+
ret = min(static_cast<int>(reader->UnconsumedBufferLength), static_cast<int>(buf.b.size()));
|
|
701
|
+
|
|
702
|
+
Array<unsigned char>^ data = ref new Array<unsigned char>(ret);
|
|
703
|
+
reader->ReadBytes(data);
|
|
704
|
+
memcpy(&*buf.i, data->Data, ret);
|
|
705
|
+
if(_state == StateNotConnected)
|
|
706
|
+
{
|
|
707
|
+
_peerAddr.host = args->RemoteAddress;
|
|
708
|
+
_peerAddr.port = args->RemotePort;
|
|
709
|
+
}
|
|
710
|
+
}
|
|
711
|
+
catch(Platform::Exception^ ex)
|
|
712
|
+
{
|
|
713
|
+
checkErrorCode(__FILE__, __LINE__, ex->HResult);
|
|
714
|
+
}
|
|
715
|
+
#else
|
|
716
|
+
if(static_cast<int>(_read.count) == SOCKET_ERROR)
|
|
717
|
+
{
|
|
718
|
+
WSASetLastError(_read.error);
|
|
719
|
+
|
|
720
|
+
if(recvTruncated())
|
|
721
|
+
{
|
|
722
|
+
// The message was truncated and the whole buffer is filled. We ignore
|
|
723
|
+
// this error here, it will be detected at the connection level when
|
|
724
|
+
// the Ice message size is checked against the buffer size.
|
|
725
|
+
_read.count = static_cast<int>(buf.b.size());
|
|
726
|
+
}
|
|
727
|
+
else
|
|
728
|
+
{
|
|
729
|
+
if(connectionLost())
|
|
730
|
+
{
|
|
731
|
+
ConnectionLostException ex(__FILE__, __LINE__);
|
|
732
|
+
ex.error = getSocketErrno();
|
|
733
|
+
throw ex;
|
|
734
|
+
}
|
|
735
|
+
else
|
|
736
|
+
{
|
|
737
|
+
SocketException ex(__FILE__, __LINE__);
|
|
738
|
+
ex.error = getSocketErrno();
|
|
739
|
+
throw ex;
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
if(_state == StateNotConnected)
|
|
745
|
+
{
|
|
746
|
+
_peerAddr = _readAddr;
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
int ret = _read.count;
|
|
750
|
+
#endif
|
|
751
|
+
|
|
752
|
+
buf.b.resize(ret);
|
|
753
|
+
buf.i = buf.b.end();
|
|
754
|
+
}
|
|
755
|
+
#endif
|
|
756
|
+
|
|
757
|
+
string
|
|
758
|
+
IceInternal::UdpTransceiver::protocol() const
|
|
759
|
+
{
|
|
760
|
+
return _instance->protocol();
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
string
|
|
764
|
+
IceInternal::UdpTransceiver::toString() const
|
|
765
|
+
{
|
|
766
|
+
if(_fd == INVALID_SOCKET)
|
|
767
|
+
{
|
|
768
|
+
return "<closed>";
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
ostringstream s;
|
|
772
|
+
if(_incoming && !_bound)
|
|
773
|
+
{
|
|
774
|
+
s << "local address = " << addrToString(_addr);
|
|
775
|
+
}
|
|
776
|
+
else if(_state == StateNotConnected)
|
|
777
|
+
{
|
|
778
|
+
Address localAddr;
|
|
779
|
+
fdToLocalAddress(_fd, localAddr);
|
|
780
|
+
s << "local address = " << addrToString(localAddr);
|
|
781
|
+
if(isAddressValid(_peerAddr))
|
|
782
|
+
{
|
|
783
|
+
s << "\nremote address = " << addrToString(_peerAddr);
|
|
784
|
+
}
|
|
785
|
+
}
|
|
786
|
+
else
|
|
787
|
+
{
|
|
788
|
+
#ifndef ICE_OS_WINRT
|
|
789
|
+
s << fdToString(_fd);
|
|
790
|
+
#else
|
|
791
|
+
Address localAddr;
|
|
792
|
+
fdToLocalAddress(_fd, localAddr);
|
|
793
|
+
s << "local address = " << addrToString(localAddr);
|
|
794
|
+
s << "\nremote address = " << addrToString(_addr);
|
|
795
|
+
#endif
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
if(isAddressValid(_mcastAddr))
|
|
799
|
+
{
|
|
800
|
+
s << "\nmulticast address = " + addrToString(_mcastAddr);
|
|
801
|
+
}
|
|
802
|
+
return s.str();
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
string
|
|
806
|
+
IceInternal::UdpTransceiver::toDetailedString() const
|
|
807
|
+
{
|
|
808
|
+
ostringstream os;
|
|
809
|
+
os << toString();
|
|
810
|
+
vector<string> intfs = getHostsForEndpointExpand(inetAddrToString(_addr), _instance->protocolSupport(), true);
|
|
811
|
+
if(!intfs.empty())
|
|
812
|
+
{
|
|
813
|
+
os << "\nlocal interfaces = ";
|
|
814
|
+
os << IceUtilInternal::joinString(intfs, ", ");
|
|
815
|
+
}
|
|
816
|
+
return os.str();
|
|
817
|
+
}
|
|
818
|
+
|
|
819
|
+
Ice::ConnectionInfoPtr
|
|
820
|
+
IceInternal::UdpTransceiver::getInfo() const
|
|
821
|
+
{
|
|
822
|
+
Ice::UDPConnectionInfoPtr info = new Ice::UDPConnectionInfo();
|
|
823
|
+
#if defined(ICE_OS_WINRT)
|
|
824
|
+
if(isMulticast(_addr) || isAddressValid(_mcastAddr))
|
|
825
|
+
{
|
|
826
|
+
info->remotePort = 0;
|
|
827
|
+
info->localPort = 0;
|
|
828
|
+
info->mcastPort = 0;
|
|
829
|
+
return info;
|
|
830
|
+
}
|
|
831
|
+
#endif
|
|
832
|
+
if(_fd == INVALID_SOCKET)
|
|
833
|
+
{
|
|
834
|
+
return info;
|
|
835
|
+
}
|
|
836
|
+
|
|
837
|
+
if(_state == StateNotConnected)
|
|
838
|
+
{
|
|
839
|
+
Address localAddr;
|
|
840
|
+
fdToLocalAddress(_fd, localAddr);
|
|
841
|
+
addrToAddressAndPort(localAddr, info->localAddress, info->localPort);
|
|
842
|
+
if(isAddressValid(_peerAddr))
|
|
843
|
+
{
|
|
844
|
+
addrToAddressAndPort(_peerAddr, info->remoteAddress, info->remotePort);
|
|
845
|
+
}
|
|
846
|
+
else
|
|
847
|
+
{
|
|
848
|
+
info->remotePort = 0;
|
|
849
|
+
}
|
|
850
|
+
}
|
|
851
|
+
else
|
|
852
|
+
{
|
|
853
|
+
fdToAddressAndPort(_fd, info->localAddress, info->localPort, info->remoteAddress, info->remotePort);
|
|
854
|
+
}
|
|
855
|
+
|
|
856
|
+
if(isAddressValid(_mcastAddr))
|
|
857
|
+
{
|
|
858
|
+
addrToAddressAndPort(_mcastAddr, info->mcastAddress, info->mcastPort);
|
|
859
|
+
}
|
|
860
|
+
else
|
|
861
|
+
{
|
|
862
|
+
info->mcastPort = 0;
|
|
863
|
+
}
|
|
864
|
+
return info;
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
void
|
|
868
|
+
IceInternal::UdpTransceiver::checkSendSize(const Buffer& buf)
|
|
869
|
+
{
|
|
870
|
+
//
|
|
871
|
+
// The maximum packetSize is either the maximum allowable UDP packet size, or
|
|
872
|
+
// the UDP send buffer size (which ever is smaller).
|
|
873
|
+
//
|
|
874
|
+
const int packetSize = min(_maxPacketSize, _sndSize - _udpOverhead);
|
|
875
|
+
if(packetSize < static_cast<int>(buf.b.size()))
|
|
876
|
+
{
|
|
877
|
+
throw DatagramLimitException(__FILE__, __LINE__);
|
|
878
|
+
}
|
|
879
|
+
}
|
|
880
|
+
|
|
881
|
+
int
|
|
882
|
+
IceInternal::UdpTransceiver::effectivePort() const
|
|
883
|
+
{
|
|
884
|
+
return getPort(_addr);
|
|
885
|
+
}
|
|
886
|
+
|
|
887
|
+
IceInternal::UdpTransceiver::UdpTransceiver(const ProtocolInstancePtr& instance,
|
|
888
|
+
const Address& addr,
|
|
889
|
+
#ifdef ICE_OS_WINRT
|
|
890
|
+
const Address&,
|
|
891
|
+
const string&,
|
|
892
|
+
int
|
|
893
|
+
#else
|
|
894
|
+
const Address& sourceAddr,
|
|
895
|
+
const string& mcastInterface,
|
|
896
|
+
int mcastTtl
|
|
897
|
+
#endif
|
|
898
|
+
) :
|
|
899
|
+
_instance(instance),
|
|
900
|
+
_incoming(false),
|
|
901
|
+
_bound(false),
|
|
902
|
+
_addr(addr),
|
|
903
|
+
_state(StateNeedConnect)
|
|
904
|
+
#if defined(ICE_USE_IOCP)
|
|
905
|
+
, _read(SocketOperationRead),
|
|
906
|
+
_write(SocketOperationWrite)
|
|
907
|
+
#elif defined(ICE_OS_WINRT)
|
|
908
|
+
, _readPending(false)
|
|
909
|
+
#endif
|
|
910
|
+
{
|
|
911
|
+
_fd = createSocket(true, _addr);
|
|
912
|
+
setBufSize(_instance->properties());
|
|
913
|
+
setBlock(_fd, false);
|
|
914
|
+
|
|
915
|
+
#ifndef ICE_OS_WINRT
|
|
916
|
+
_mcastAddr.saStorage.ss_family = AF_UNSPEC;
|
|
917
|
+
_peerAddr.saStorage.ss_family = AF_UNSPEC; // Not initialized yet.
|
|
918
|
+
|
|
919
|
+
//
|
|
920
|
+
// NOTE: setting the multicast interface before performing the
|
|
921
|
+
// connect is important for some OS such as OS X.
|
|
922
|
+
//
|
|
923
|
+
if(isMulticast(_addr))
|
|
924
|
+
{
|
|
925
|
+
if(mcastInterface.length() > 0)
|
|
926
|
+
{
|
|
927
|
+
setMcastInterface(_fd, mcastInterface, _addr);
|
|
928
|
+
}
|
|
929
|
+
if(mcastTtl != -1)
|
|
930
|
+
{
|
|
931
|
+
setMcastTtl(_fd, mcastTtl, _addr);
|
|
932
|
+
}
|
|
933
|
+
}
|
|
934
|
+
|
|
935
|
+
//
|
|
936
|
+
// In general, connecting a datagram socket should be non-blocking as this just setups
|
|
937
|
+
// the default destination address for the socket. However, on some OS, connect sometime
|
|
938
|
+
// returns EWOULDBLOCK. If that's the case, we keep the state as StateNeedConnect. This
|
|
939
|
+
// will make sure the transceiver is notified when the socket is ready for sending (see
|
|
940
|
+
// the initialize() implementation).
|
|
941
|
+
//
|
|
942
|
+
if(doConnect(_fd, _addr, sourceAddr))
|
|
943
|
+
{
|
|
944
|
+
_state = StateConnected;
|
|
945
|
+
}
|
|
946
|
+
#else
|
|
947
|
+
DatagramSocket^ socket = safe_cast<DatagramSocket^>(_fd);
|
|
948
|
+
socket->MessageReceived += ref new TypedEventHandler<DatagramSocket^, DatagramSocketMessageReceivedEventArgs^>(
|
|
949
|
+
[=](DatagramSocket^ fd, DatagramSocketMessageReceivedEventArgs^ args)
|
|
950
|
+
{
|
|
951
|
+
this->appendMessage(args);
|
|
952
|
+
});
|
|
953
|
+
#endif
|
|
954
|
+
|
|
955
|
+
|
|
956
|
+
#ifdef ICE_USE_IOCP
|
|
957
|
+
//
|
|
958
|
+
// On Windows when using IOCP, we must make sure that the socket is connected without
|
|
959
|
+
// blocking as there's no way to do a non-blocking datagram socket conection (ConnectEx
|
|
960
|
+
// only supports connection oriented sockets). According to Microsoft documentation of
|
|
961
|
+
// the connect() call, this should always be the case.
|
|
962
|
+
//
|
|
963
|
+
assert(_state == StateConnected);
|
|
964
|
+
#endif
|
|
965
|
+
}
|
|
966
|
+
|
|
967
|
+
IceInternal::UdpTransceiver::UdpTransceiver(const UdpEndpointIPtr& endpoint, const ProtocolInstancePtr& instance,
|
|
968
|
+
const string& host, int port, const string& mcastInterface, bool connect) :
|
|
969
|
+
_endpoint(endpoint),
|
|
970
|
+
_instance(instance),
|
|
971
|
+
_incoming(true),
|
|
972
|
+
_bound(false),
|
|
973
|
+
_addr(getAddressForServer(host, port, instance->protocolSupport(), instance->preferIPv6())),
|
|
974
|
+
_mcastInterface(mcastInterface),
|
|
975
|
+
_port(port),
|
|
976
|
+
_state(connect ? StateNeedConnect : StateNotConnected)
|
|
977
|
+
#ifdef ICE_OS_WINRT
|
|
978
|
+
, _readPending(false)
|
|
979
|
+
#elif defined(ICE_USE_IOCP)
|
|
980
|
+
, _read(SocketOperationRead),
|
|
981
|
+
_write(SocketOperationWrite)
|
|
982
|
+
#endif
|
|
983
|
+
{
|
|
984
|
+
_fd = createServerSocket(true, _addr, instance->protocolSupport());
|
|
985
|
+
setBufSize(instance->properties());
|
|
986
|
+
setBlock(_fd, false);
|
|
987
|
+
|
|
988
|
+
#ifndef ICE_OS_WINRT
|
|
989
|
+
memset(&_mcastAddr.saStorage, 0, sizeof(sockaddr_storage));
|
|
990
|
+
memset(&_peerAddr.saStorage, 0, sizeof(sockaddr_storage));
|
|
991
|
+
_peerAddr.saStorage.ss_family = AF_UNSPEC;
|
|
992
|
+
_mcastAddr.saStorage.ss_family = AF_UNSPEC;
|
|
993
|
+
#else
|
|
994
|
+
DatagramSocket^ socket = safe_cast<DatagramSocket^>(_fd);
|
|
995
|
+
socket->MessageReceived += ref new TypedEventHandler<DatagramSocket^, DatagramSocketMessageReceivedEventArgs^>(
|
|
996
|
+
[=](DatagramSocket^ fd, DatagramSocketMessageReceivedEventArgs^ args)
|
|
997
|
+
{
|
|
998
|
+
this->appendMessage(args);
|
|
999
|
+
});
|
|
1000
|
+
#endif
|
|
1001
|
+
}
|
|
1002
|
+
|
|
1003
|
+
IceInternal::UdpTransceiver::~UdpTransceiver()
|
|
1004
|
+
{
|
|
1005
|
+
assert(_fd == INVALID_SOCKET);
|
|
1006
|
+
}
|
|
1007
|
+
|
|
1008
|
+
//
|
|
1009
|
+
// Set UDP receive and send buffer sizes.
|
|
1010
|
+
//
|
|
1011
|
+
void
|
|
1012
|
+
IceInternal::UdpTransceiver::setBufSize(const Ice::PropertiesPtr& properties)
|
|
1013
|
+
{
|
|
1014
|
+
assert(_fd != INVALID_SOCKET);
|
|
1015
|
+
|
|
1016
|
+
for(int i = 0; i < 2; ++i)
|
|
1017
|
+
{
|
|
1018
|
+
string direction;
|
|
1019
|
+
string prop;
|
|
1020
|
+
int* addr;
|
|
1021
|
+
int dfltSize;
|
|
1022
|
+
if(i == 0)
|
|
1023
|
+
{
|
|
1024
|
+
direction = "receive";
|
|
1025
|
+
prop = "Ice.UDP.RcvSize";
|
|
1026
|
+
addr = &_rcvSize;
|
|
1027
|
+
dfltSize = getRecvBufferSize(_fd);
|
|
1028
|
+
}
|
|
1029
|
+
else
|
|
1030
|
+
{
|
|
1031
|
+
direction = "send";
|
|
1032
|
+
prop = "Ice.UDP.SndSize";
|
|
1033
|
+
addr = &_sndSize;
|
|
1034
|
+
dfltSize = getSendBufferSize(_fd);
|
|
1035
|
+
}
|
|
1036
|
+
|
|
1037
|
+
if(dfltSize <= 0)
|
|
1038
|
+
{
|
|
1039
|
+
dfltSize = _maxPacketSize;
|
|
1040
|
+
}
|
|
1041
|
+
*addr = dfltSize;
|
|
1042
|
+
|
|
1043
|
+
//
|
|
1044
|
+
// Get property for buffer size and check for sanity.
|
|
1045
|
+
//
|
|
1046
|
+
Int sizeRequested = properties->getPropertyAsIntWithDefault(prop, dfltSize);
|
|
1047
|
+
if(sizeRequested < (_udpOverhead + headerSize))
|
|
1048
|
+
{
|
|
1049
|
+
Warning out(_instance->logger());
|
|
1050
|
+
out << "Invalid " << prop << " value of " << sizeRequested << " adjusted to " << dfltSize;
|
|
1051
|
+
sizeRequested = dfltSize;
|
|
1052
|
+
}
|
|
1053
|
+
|
|
1054
|
+
if(sizeRequested != dfltSize)
|
|
1055
|
+
{
|
|
1056
|
+
//
|
|
1057
|
+
// Try to set the buffer size. The kernel will silently adjust
|
|
1058
|
+
// the size to an acceptable value. Then read the size back to
|
|
1059
|
+
// get the size that was actually set.
|
|
1060
|
+
//
|
|
1061
|
+
if(i == 0)
|
|
1062
|
+
{
|
|
1063
|
+
setRecvBufferSize(_fd, sizeRequested);
|
|
1064
|
+
*addr = getRecvBufferSize(_fd);
|
|
1065
|
+
}
|
|
1066
|
+
else
|
|
1067
|
+
{
|
|
1068
|
+
setSendBufferSize(_fd, sizeRequested);
|
|
1069
|
+
*addr = getSendBufferSize(_fd);
|
|
1070
|
+
}
|
|
1071
|
+
|
|
1072
|
+
//
|
|
1073
|
+
// Warn if the size that was set is less than the requested size.
|
|
1074
|
+
//
|
|
1075
|
+
if(*addr == 0) // set buffer size not supported.
|
|
1076
|
+
{
|
|
1077
|
+
*addr = sizeRequested;
|
|
1078
|
+
}
|
|
1079
|
+
else if(*addr < sizeRequested)
|
|
1080
|
+
{
|
|
1081
|
+
Warning out(_instance->logger());
|
|
1082
|
+
out << "UDP " << direction << " buffer size: requested size of "
|
|
1083
|
+
<< sizeRequested << " adjusted to " << *addr;
|
|
1084
|
+
}
|
|
1085
|
+
}
|
|
1086
|
+
}
|
|
1087
|
+
}
|
|
1088
|
+
|
|
1089
|
+
#ifdef ICE_OS_WINRT
|
|
1090
|
+
bool
|
|
1091
|
+
IceInternal::UdpTransceiver::checkIfErrorOrCompleted(SocketOperation op, IAsyncInfo^ info)
|
|
1092
|
+
{
|
|
1093
|
+
//
|
|
1094
|
+
// NOTE: It's important to only check for info->Status once as it
|
|
1095
|
+
// might change during the checks below (the Status can be changed
|
|
1096
|
+
// by the Windows thread pool concurrently).
|
|
1097
|
+
//
|
|
1098
|
+
// We consider that a canceled async status is the same as an
|
|
1099
|
+
// error. A canceled async status can occur if there's a timeout
|
|
1100
|
+
// and the socket is closed.
|
|
1101
|
+
//
|
|
1102
|
+
Windows::Foundation::AsyncStatus status = info->Status;
|
|
1103
|
+
if(status == Windows::Foundation::AsyncStatus::Completed)
|
|
1104
|
+
{
|
|
1105
|
+
_completedHandler(op);
|
|
1106
|
+
return true;
|
|
1107
|
+
}
|
|
1108
|
+
else if(status == Windows::Foundation::AsyncStatus::Started)
|
|
1109
|
+
{
|
|
1110
|
+
return false;
|
|
1111
|
+
}
|
|
1112
|
+
else
|
|
1113
|
+
{
|
|
1114
|
+
if(_state < StateConnected)
|
|
1115
|
+
{
|
|
1116
|
+
checkConnectErrorCode(__FILE__, __LINE__, info->ErrorCode.Value, _addr.host);
|
|
1117
|
+
}
|
|
1118
|
+
else
|
|
1119
|
+
{
|
|
1120
|
+
checkErrorCode(__FILE__, __LINE__, info->ErrorCode.Value);
|
|
1121
|
+
}
|
|
1122
|
+
return true; // Prevent compiler warning.
|
|
1123
|
+
}
|
|
1124
|
+
}
|
|
1125
|
+
|
|
1126
|
+
void
|
|
1127
|
+
IceInternal::UdpTransceiver::appendMessage(DatagramSocketMessageReceivedEventArgs^ args)
|
|
1128
|
+
{
|
|
1129
|
+
IceUtil::Mutex::Lock lock(_mutex);
|
|
1130
|
+
if(_fd == INVALID_SOCKET) // Transceiver was closed.
|
|
1131
|
+
{
|
|
1132
|
+
return;
|
|
1133
|
+
}
|
|
1134
|
+
_received.push_back(args);
|
|
1135
|
+
|
|
1136
|
+
//
|
|
1137
|
+
// If the transceiver is waiting to read a message, notify the
|
|
1138
|
+
// selector that the transceiver is ready for read. This will in
|
|
1139
|
+
// turn cause finishRead() to be called. If the transceiver is
|
|
1140
|
+
// ready for read, we just queue the message. It will be picked
|
|
1141
|
+
// up by startRead() when it is invoked.
|
|
1142
|
+
//
|
|
1143
|
+
if(_readPending)
|
|
1144
|
+
{
|
|
1145
|
+
_completedHandler(SocketOperationRead);
|
|
1146
|
+
_readPending = false;
|
|
1147
|
+
}
|
|
1148
|
+
}
|
|
1149
|
+
#endif
|
|
1150
|
+
|
|
1151
|
+
//
|
|
1152
|
+
// The maximum IP datagram size is 65535. Subtract 20 bytes for the IP header and 8 bytes for the UDP header
|
|
1153
|
+
// to get the maximum payload.
|
|
1154
|
+
//
|
|
1155
|
+
const int IceInternal::UdpTransceiver::_udpOverhead = 20 + 8;
|
|
1156
|
+
const int IceInternal::UdpTransceiver::_maxPacketSize = 65535 - _udpOverhead;
|