zeroc-ice 3.6b1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (675) hide show
  1. checksums.yaml +7 -0
  2. data/ICE_LICENSE +54 -0
  3. data/LICENSE +339 -0
  4. data/bin/slice2rb +17 -0
  5. data/ext/Communicator.cpp +596 -0
  6. data/ext/Communicator.h +25 -0
  7. data/ext/Config.h +111 -0
  8. data/ext/Connection.cpp +381 -0
  9. data/ext/Connection.h +26 -0
  10. data/ext/Endpoint.cpp +311 -0
  11. data/ext/Endpoint.h +27 -0
  12. data/ext/ImplicitContext.cpp +152 -0
  13. data/ext/ImplicitContext.h +25 -0
  14. data/ext/Init.cpp +52 -0
  15. data/ext/Logger.cpp +151 -0
  16. data/ext/Logger.h +28 -0
  17. data/ext/ObjectFactory.cpp +140 -0
  18. data/ext/ObjectFactory.h +50 -0
  19. data/ext/Operation.cpp +676 -0
  20. data/ext/Operation.h +36 -0
  21. data/ext/Properties.cpp +369 -0
  22. data/ext/Properties.h +25 -0
  23. data/ext/Proxy.cpp +1354 -0
  24. data/ext/Proxy.h +27 -0
  25. data/ext/Slice.cpp +223 -0
  26. data/ext/Slice.h +22 -0
  27. data/ext/Types.cpp +3160 -0
  28. data/ext/Types.h +545 -0
  29. data/ext/Util.cpp +792 -0
  30. data/ext/Util.h +511 -0
  31. data/ext/extconf.rb +118 -0
  32. data/ext/ice/BZIP_LICENSE +42 -0
  33. data/ext/ice/MCPP_LICENSE +36 -0
  34. data/ext/ice/bzip2/blocksort.c +1094 -0
  35. data/ext/ice/bzip2/bzlib.c +1572 -0
  36. data/ext/ice/bzip2/bzlib.h +282 -0
  37. data/ext/ice/bzip2/bzlib_private.h +509 -0
  38. data/ext/ice/bzip2/compress.c +672 -0
  39. data/ext/ice/bzip2/crctable.c +104 -0
  40. data/ext/ice/bzip2/decompress.c +646 -0
  41. data/ext/ice/bzip2/huffman.c +205 -0
  42. data/ext/ice/bzip2/randtable.c +84 -0
  43. data/ext/ice/cpp/include/Ice/ACMF.h +30 -0
  44. data/ext/ice/cpp/include/Ice/Application.h +156 -0
  45. data/ext/ice/cpp/include/Ice/AsyncResult.h +363 -0
  46. data/ext/ice/cpp/include/Ice/AsyncResultF.h +26 -0
  47. data/ext/ice/cpp/include/Ice/BasicStream.h +1315 -0
  48. data/ext/ice/cpp/include/Ice/Buffer.h +159 -0
  49. data/ext/ice/cpp/include/Ice/BuiltinSequences.h +74 -0
  50. data/ext/ice/cpp/include/Ice/Communicator.h +194 -0
  51. data/ext/ice/cpp/include/Ice/CommunicatorAsync.h +115 -0
  52. data/ext/ice/cpp/include/Ice/CommunicatorF.h +60 -0
  53. data/ext/ice/cpp/include/Ice/Config.h +97 -0
  54. data/ext/ice/cpp/include/Ice/Connection.h +495 -0
  55. data/ext/ice/cpp/include/Ice/ConnectionAsync.h +115 -0
  56. data/ext/ice/cpp/include/Ice/ConnectionF.h +72 -0
  57. data/ext/ice/cpp/include/Ice/ConnectionFactoryF.h +30 -0
  58. data/ext/ice/cpp/include/Ice/ConnectionIF.h +37 -0
  59. data/ext/ice/cpp/include/Ice/Current.h +94 -0
  60. data/ext/ice/cpp/include/Ice/DefaultObjectFactory.h +48 -0
  61. data/ext/ice/cpp/include/Ice/DeprecatedStringConverter.h +62 -0
  62. data/ext/ice/cpp/include/Ice/DispatchInterceptor.h +33 -0
  63. data/ext/ice/cpp/include/Ice/Dispatcher.h +51 -0
  64. data/ext/ice/cpp/include/Ice/DynamicLibrary.h +105 -0
  65. data/ext/ice/cpp/include/Ice/DynamicLibraryF.h +29 -0
  66. data/ext/ice/cpp/include/Ice/Endpoint.h +350 -0
  67. data/ext/ice/cpp/include/Ice/EndpointF.h +97 -0
  68. data/ext/ice/cpp/include/Ice/EndpointTypes.h +74 -0
  69. data/ext/ice/cpp/include/Ice/Exception.h +114 -0
  70. data/ext/ice/cpp/include/Ice/FacetMap.h +56 -0
  71. data/ext/ice/cpp/include/Ice/FactoryTable.h +69 -0
  72. data/ext/ice/cpp/include/Ice/FactoryTableInit.h +87 -0
  73. data/ext/ice/cpp/include/Ice/Format.h +39 -0
  74. data/ext/ice/cpp/include/Ice/Functional.h +138 -0
  75. data/ext/ice/cpp/include/Ice/GCObject.h +73 -0
  76. data/ext/ice/cpp/include/Ice/Handle.h +192 -0
  77. data/ext/ice/cpp/include/Ice/Ice.h +54 -0
  78. data/ext/ice/cpp/include/Ice/Identity.h +160 -0
  79. data/ext/ice/cpp/include/Ice/ImplicitContext.h +96 -0
  80. data/ext/ice/cpp/include/Ice/ImplicitContextF.h +60 -0
  81. data/ext/ice/cpp/include/Ice/Incoming.h +131 -0
  82. data/ext/ice/cpp/include/Ice/IncomingAsync.h +108 -0
  83. data/ext/ice/cpp/include/Ice/IncomingAsyncF.h +35 -0
  84. data/ext/ice/cpp/include/Ice/Initialize.h +141 -0
  85. data/ext/ice/cpp/include/Ice/InstanceF.h +26 -0
  86. data/ext/ice/cpp/include/Ice/Instrumentation.h +377 -0
  87. data/ext/ice/cpp/include/Ice/InstrumentationF.h +71 -0
  88. data/ext/ice/cpp/include/Ice/LocalException.h +1022 -0
  89. data/ext/ice/cpp/include/Ice/LocalObject.h +36 -0
  90. data/ext/ice/cpp/include/Ice/LocalObjectF.h +26 -0
  91. data/ext/ice/cpp/include/Ice/Locator.h +2191 -0
  92. data/ext/ice/cpp/include/Ice/LocatorF.h +89 -0
  93. data/ext/ice/cpp/include/Ice/Logger.h +94 -0
  94. data/ext/ice/cpp/include/Ice/LoggerF.h +60 -0
  95. data/ext/ice/cpp/include/Ice/LoggerUtil.h +153 -0
  96. data/ext/ice/cpp/include/Ice/Makefile +26 -0
  97. data/ext/ice/cpp/include/Ice/Metrics.h +2989 -0
  98. data/ext/ice/cpp/include/Ice/MetricsAdminI.h +662 -0
  99. data/ext/ice/cpp/include/Ice/MetricsFunctional.h +144 -0
  100. data/ext/ice/cpp/include/Ice/MetricsObserverI.h +576 -0
  101. data/ext/ice/cpp/include/Ice/NativePropertiesAdmin.h +55 -0
  102. data/ext/ice/cpp/include/Ice/Object.h +165 -0
  103. data/ext/ice/cpp/include/Ice/ObjectAdapter.h +162 -0
  104. data/ext/ice/cpp/include/Ice/ObjectAdapterF.h +60 -0
  105. data/ext/ice/cpp/include/Ice/ObjectAdapterFactoryF.h +26 -0
  106. data/ext/ice/cpp/include/Ice/ObjectF.h +26 -0
  107. data/ext/ice/cpp/include/Ice/ObjectFactory.h +86 -0
  108. data/ext/ice/cpp/include/Ice/ObjectFactoryF.h +60 -0
  109. data/ext/ice/cpp/include/Ice/ObjectFactoryManagerF.h +26 -0
  110. data/ext/ice/cpp/include/Ice/ObserverHelper.h +177 -0
  111. data/ext/ice/cpp/include/Ice/Outgoing.h +197 -0
  112. data/ext/ice/cpp/include/Ice/OutgoingAsync.h +264 -0
  113. data/ext/ice/cpp/include/Ice/OutgoingAsyncF.h +38 -0
  114. data/ext/ice/cpp/include/Ice/Plugin.h +121 -0
  115. data/ext/ice/cpp/include/Ice/PluginF.h +66 -0
  116. data/ext/ice/cpp/include/Ice/Process.h +568 -0
  117. data/ext/ice/cpp/include/Ice/ProcessF.h +77 -0
  118. data/ext/ice/cpp/include/Ice/Properties.h +130 -0
  119. data/ext/ice/cpp/include/Ice/PropertiesAdmin.h +824 -0
  120. data/ext/ice/cpp/include/Ice/PropertiesF.h +83 -0
  121. data/ext/ice/cpp/include/Ice/Protocol.h +242 -0
  122. data/ext/ice/cpp/include/Ice/Proxy.h +2448 -0
  123. data/ext/ice/cpp/include/Ice/ProxyF.h +78 -0
  124. data/ext/ice/cpp/include/Ice/ProxyFactoryF.h +26 -0
  125. data/ext/ice/cpp/include/Ice/ProxyHandle.h +330 -0
  126. data/ext/ice/cpp/include/Ice/ReferenceF.h +34 -0
  127. data/ext/ice/cpp/include/Ice/RemoteLogger.h +1496 -0
  128. data/ext/ice/cpp/include/Ice/RequestHandlerF.h +29 -0
  129. data/ext/ice/cpp/include/Ice/ResponseHandlerF.h +25 -0
  130. data/ext/ice/cpp/include/Ice/Router.h +1155 -0
  131. data/ext/ice/cpp/include/Ice/RouterF.h +77 -0
  132. data/ext/ice/cpp/include/Ice/ServantLocator.h +90 -0
  133. data/ext/ice/cpp/include/Ice/ServantLocatorF.h +60 -0
  134. data/ext/ice/cpp/include/Ice/ServantManagerF.h +26 -0
  135. data/ext/ice/cpp/include/Ice/Service.h +260 -0
  136. data/ext/ice/cpp/include/Ice/SliceChecksumDict.h +56 -0
  137. data/ext/ice/cpp/include/Ice/SliceChecksums.h +34 -0
  138. data/ext/ice/cpp/include/Ice/SlicedData.h +103 -0
  139. data/ext/ice/cpp/include/Ice/SlicedDataF.h +34 -0
  140. data/ext/ice/cpp/include/Ice/Stream.h +449 -0
  141. data/ext/ice/cpp/include/Ice/StreamF.h +30 -0
  142. data/ext/ice/cpp/include/Ice/StreamHelpers.h +877 -0
  143. data/ext/ice/cpp/include/Ice/ThreadPoolF.h +28 -0
  144. data/ext/ice/cpp/include/Ice/UserExceptionFactory.h +56 -0
  145. data/ext/ice/cpp/include/Ice/Version.h +254 -0
  146. data/ext/ice/cpp/include/IceSSL/Config.h +23 -0
  147. data/ext/ice/cpp/include/IceSSL/ConnectionInfo.h +119 -0
  148. data/ext/ice/cpp/include/IceSSL/EndpointInfo.h +101 -0
  149. data/ext/ice/cpp/include/IceSSL/IceSSL.h +22 -0
  150. data/ext/ice/cpp/include/IceSSL/Makefile +26 -0
  151. data/ext/ice/cpp/include/IceSSL/Plugin.h +558 -0
  152. data/ext/ice/cpp/include/IceUtil/AbstractMutex.h +119 -0
  153. data/ext/ice/cpp/include/IceUtil/Cache.h +362 -0
  154. data/ext/ice/cpp/include/IceUtil/Cond.h +323 -0
  155. data/ext/ice/cpp/include/IceUtil/Config.h +234 -0
  156. data/ext/ice/cpp/include/IceUtil/CountDownLatch.h +50 -0
  157. data/ext/ice/cpp/include/IceUtil/CtrlCHandler.h +70 -0
  158. data/ext/ice/cpp/include/IceUtil/DisableWarnings.h +45 -0
  159. data/ext/ice/cpp/include/IceUtil/Exception.h +184 -0
  160. data/ext/ice/cpp/include/IceUtil/Functional.h +389 -0
  161. data/ext/ice/cpp/include/IceUtil/Handle.h +266 -0
  162. data/ext/ice/cpp/include/IceUtil/IceUtil.h +51 -0
  163. data/ext/ice/cpp/include/IceUtil/IconvStringConverter.h +302 -0
  164. data/ext/ice/cpp/include/IceUtil/InputUtil.h +47 -0
  165. data/ext/ice/cpp/include/IceUtil/Iterator.h +36 -0
  166. data/ext/ice/cpp/include/IceUtil/Lock.h +135 -0
  167. data/ext/ice/cpp/include/IceUtil/Makefile +26 -0
  168. data/ext/ice/cpp/include/IceUtil/Monitor.h +249 -0
  169. data/ext/ice/cpp/include/IceUtil/Mutex.h +357 -0
  170. data/ext/ice/cpp/include/IceUtil/MutexProtocol.h +28 -0
  171. data/ext/ice/cpp/include/IceUtil/MutexPtrLock.h +83 -0
  172. data/ext/ice/cpp/include/IceUtil/MutexPtrTryLock.h +82 -0
  173. data/ext/ice/cpp/include/IceUtil/Optional.h +322 -0
  174. data/ext/ice/cpp/include/IceUtil/Options.h +141 -0
  175. data/ext/ice/cpp/include/IceUtil/OutputUtil.h +362 -0
  176. data/ext/ice/cpp/include/IceUtil/PopDisableWarnings.h +19 -0
  177. data/ext/ice/cpp/include/IceUtil/PushDisableWarnings.h +26 -0
  178. data/ext/ice/cpp/include/IceUtil/Random.h +24 -0
  179. data/ext/ice/cpp/include/IceUtil/RecMutex.h +113 -0
  180. data/ext/ice/cpp/include/IceUtil/SHA1.h +65 -0
  181. data/ext/ice/cpp/include/IceUtil/ScannerConfig.h +44 -0
  182. data/ext/ice/cpp/include/IceUtil/ScopedArray.h +97 -0
  183. data/ext/ice/cpp/include/IceUtil/Shared.h +168 -0
  184. data/ext/ice/cpp/include/IceUtil/StringConverter.h +175 -0
  185. data/ext/ice/cpp/include/IceUtil/StringUtil.h +91 -0
  186. data/ext/ice/cpp/include/IceUtil/Thread.h +181 -0
  187. data/ext/ice/cpp/include/IceUtil/ThreadException.h +108 -0
  188. data/ext/ice/cpp/include/IceUtil/Time.h +209 -0
  189. data/ext/ice/cpp/include/IceUtil/Timer.h +143 -0
  190. data/ext/ice/cpp/include/IceUtil/UUID.h +22 -0
  191. data/ext/ice/cpp/include/IceUtil/UndefSysMacros.h +42 -0
  192. data/ext/ice/cpp/include/IceUtil/UniquePtr.h +101 -0
  193. data/ext/ice/cpp/include/Slice/CPlusPlusUtil.h +64 -0
  194. data/ext/ice/cpp/include/Slice/Checksum.h +26 -0
  195. data/ext/ice/cpp/include/Slice/CsUtil.h +92 -0
  196. data/ext/ice/cpp/include/Slice/DotNetNames.h +34 -0
  197. data/ext/ice/cpp/include/Slice/FileTracker.h +71 -0
  198. data/ext/ice/cpp/include/Slice/JavaUtil.h +277 -0
  199. data/ext/ice/cpp/include/Slice/Makefile +26 -0
  200. data/ext/ice/cpp/include/Slice/PHPUtil.h +50 -0
  201. data/ext/ice/cpp/include/Slice/Parser.h +1116 -0
  202. data/ext/ice/cpp/include/Slice/Preprocessor.h +68 -0
  203. data/ext/ice/cpp/include/Slice/PythonUtil.h +64 -0
  204. data/ext/ice/cpp/include/Slice/RubyUtil.h +54 -0
  205. data/ext/ice/cpp/include/Slice/Util.h +33 -0
  206. data/ext/ice/cpp/src/Ice/ACM.cpp +343 -0
  207. data/ext/ice/cpp/src/Ice/ACM.h +117 -0
  208. data/ext/ice/cpp/src/Ice/Acceptor.cpp +16 -0
  209. data/ext/ice/cpp/src/Ice/Acceptor.h +41 -0
  210. data/ext/ice/cpp/src/Ice/AcceptorF.h +30 -0
  211. data/ext/ice/cpp/src/Ice/Application.cpp +760 -0
  212. data/ext/ice/cpp/src/Ice/AsyncResult.cpp +599 -0
  213. data/ext/ice/cpp/src/Ice/Base64.cpp +269 -0
  214. data/ext/ice/cpp/src/Ice/Base64.h +36 -0
  215. data/ext/ice/cpp/src/Ice/BasicStream.cpp +3393 -0
  216. data/ext/ice/cpp/src/Ice/Buffer.cpp +98 -0
  217. data/ext/ice/cpp/src/Ice/BuiltinSequences.cpp +34 -0
  218. data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.cpp +718 -0
  219. data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.h +106 -0
  220. data/ext/ice/cpp/src/Ice/Communicator.cpp +45 -0
  221. data/ext/ice/cpp/src/Ice/CommunicatorF.cpp +38 -0
  222. data/ext/ice/cpp/src/Ice/CommunicatorI.cpp +386 -0
  223. data/ext/ice/cpp/src/Ice/CommunicatorI.h +112 -0
  224. data/ext/ice/cpp/src/Ice/ConnectRequestHandler.cpp +546 -0
  225. data/ext/ice/cpp/src/Ice/ConnectRequestHandler.h +97 -0
  226. data/ext/ice/cpp/src/Ice/Connection.cpp +58 -0
  227. data/ext/ice/cpp/src/Ice/ConnectionF.cpp +38 -0
  228. data/ext/ice/cpp/src/Ice/ConnectionFactory.cpp +1639 -0
  229. data/ext/ice/cpp/src/Ice/ConnectionFactory.h +236 -0
  230. data/ext/ice/cpp/src/Ice/ConnectionI.cpp +3876 -0
  231. data/ext/ice/cpp/src/Ice/ConnectionI.h +364 -0
  232. data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.cpp +115 -0
  233. data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.h +50 -0
  234. data/ext/ice/cpp/src/Ice/Connector.cpp +16 -0
  235. data/ext/ice/cpp/src/Ice/Connector.h +36 -0
  236. data/ext/ice/cpp/src/Ice/ConnectorF.h +26 -0
  237. data/ext/ice/cpp/src/Ice/Current.cpp +38 -0
  238. data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.cpp +168 -0
  239. data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.h +57 -0
  240. data/ext/ice/cpp/src/Ice/DefaultsAndOverridesF.h +26 -0
  241. data/ext/ice/cpp/src/Ice/DeprecatedStringConverter.cpp +60 -0
  242. data/ext/ice/cpp/src/Ice/DispatchInterceptor.cpp +49 -0
  243. data/ext/ice/cpp/src/Ice/DynamicLibrary.cpp +281 -0
  244. data/ext/ice/cpp/src/Ice/Endpoint.cpp +53 -0
  245. data/ext/ice/cpp/src/Ice/EndpointF.cpp +38 -0
  246. data/ext/ice/cpp/src/Ice/EndpointFactory.cpp +25 -0
  247. data/ext/ice/cpp/src/Ice/EndpointFactory.h +44 -0
  248. data/ext/ice/cpp/src/Ice/EndpointFactoryF.h +26 -0
  249. data/ext/ice/cpp/src/Ice/EndpointFactoryManager.cpp +208 -0
  250. data/ext/ice/cpp/src/Ice/EndpointFactoryManager.h +46 -0
  251. data/ext/ice/cpp/src/Ice/EndpointFactoryManagerF.h +26 -0
  252. data/ext/ice/cpp/src/Ice/EndpointI.cpp +87 -0
  253. data/ext/ice/cpp/src/Ice/EndpointI.h +165 -0
  254. data/ext/ice/cpp/src/Ice/EndpointIF.h +41 -0
  255. data/ext/ice/cpp/src/Ice/EndpointTypes.cpp +38 -0
  256. data/ext/ice/cpp/src/Ice/EventHandler.cpp +35 -0
  257. data/ext/ice/cpp/src/Ice/EventHandler.h +78 -0
  258. data/ext/ice/cpp/src/Ice/EventHandlerF.h +26 -0
  259. data/ext/ice/cpp/src/Ice/EventLoggerMsg.h +53 -0
  260. data/ext/ice/cpp/src/Ice/Exception.cpp +832 -0
  261. data/ext/ice/cpp/src/Ice/FacetMap.cpp +34 -0
  262. data/ext/ice/cpp/src/Ice/FactoryTable.cpp +158 -0
  263. data/ext/ice/cpp/src/Ice/FactoryTableInit.cpp +95 -0
  264. data/ext/ice/cpp/src/Ice/GCObject.cpp +444 -0
  265. data/ext/ice/cpp/src/Ice/HashUtil.h +59 -0
  266. data/ext/ice/cpp/src/Ice/HttpParser.cpp +680 -0
  267. data/ext/ice/cpp/src/Ice/HttpParser.h +124 -0
  268. data/ext/ice/cpp/src/Ice/IPEndpointI.cpp +733 -0
  269. data/ext/ice/cpp/src/Ice/IPEndpointI.h +157 -0
  270. data/ext/ice/cpp/src/Ice/IPEndpointIF.h +29 -0
  271. data/ext/ice/cpp/src/Ice/Identity.cpp +42 -0
  272. data/ext/ice/cpp/src/Ice/ImplicitContext.cpp +41 -0
  273. data/ext/ice/cpp/src/Ice/ImplicitContextF.cpp +38 -0
  274. data/ext/ice/cpp/src/Ice/ImplicitContextI.cpp +639 -0
  275. data/ext/ice/cpp/src/Ice/ImplicitContextI.h +51 -0
  276. data/ext/ice/cpp/src/Ice/Incoming.cpp +757 -0
  277. data/ext/ice/cpp/src/Ice/IncomingAsync.cpp +340 -0
  278. data/ext/ice/cpp/src/Ice/IncomingRequest.h +37 -0
  279. data/ext/ice/cpp/src/Ice/Initialize.cpp +401 -0
  280. data/ext/ice/cpp/src/Ice/Instance.cpp +1928 -0
  281. data/ext/ice/cpp/src/Ice/Instance.h +198 -0
  282. data/ext/ice/cpp/src/Ice/Instrumentation.cpp +68 -0
  283. data/ext/ice/cpp/src/Ice/InstrumentationF.cpp +43 -0
  284. data/ext/ice/cpp/src/Ice/InstrumentationI.cpp +1083 -0
  285. data/ext/ice/cpp/src/Ice/InstrumentationI.h +262 -0
  286. data/ext/ice/cpp/src/Ice/LocalException.cpp +2091 -0
  287. data/ext/ice/cpp/src/Ice/LocalObject.cpp +29 -0
  288. data/ext/ice/cpp/src/Ice/Locator.cpp +1946 -0
  289. data/ext/ice/cpp/src/Ice/LocatorF.cpp +39 -0
  290. data/ext/ice/cpp/src/Ice/LocatorInfo.cpp +917 -0
  291. data/ext/ice/cpp/src/Ice/LocatorInfo.h +193 -0
  292. data/ext/ice/cpp/src/Ice/LocatorInfoF.h +34 -0
  293. data/ext/ice/cpp/src/Ice/Logger.cpp +40 -0
  294. data/ext/ice/cpp/src/Ice/LoggerAdminI.cpp +862 -0
  295. data/ext/ice/cpp/src/Ice/LoggerAdminI.h +46 -0
  296. data/ext/ice/cpp/src/Ice/LoggerF.cpp +38 -0
  297. data/ext/ice/cpp/src/Ice/LoggerI.cpp +199 -0
  298. data/ext/ice/cpp/src/Ice/LoggerI.h +57 -0
  299. data/ext/ice/cpp/src/Ice/LoggerUtil.cpp +107 -0
  300. data/ext/ice/cpp/src/Ice/Makefile +190 -0
  301. data/ext/ice/cpp/src/Ice/Metrics.cpp +2159 -0
  302. data/ext/ice/cpp/src/Ice/MetricsAdminI.cpp +669 -0
  303. data/ext/ice/cpp/src/Ice/MetricsObserverI.cpp +14 -0
  304. data/ext/ice/cpp/src/Ice/Network.cpp +2694 -0
  305. data/ext/ice/cpp/src/Ice/Network.h +291 -0
  306. data/ext/ice/cpp/src/Ice/NetworkF.h +28 -0
  307. data/ext/ice/cpp/src/Ice/NetworkProxy.cpp +325 -0
  308. data/ext/ice/cpp/src/Ice/NetworkProxy.h +74 -0
  309. data/ext/ice/cpp/src/Ice/NetworkProxyF.h +26 -0
  310. data/ext/ice/cpp/src/Ice/Object.cpp +440 -0
  311. data/ext/ice/cpp/src/Ice/ObjectAdapter.cpp +41 -0
  312. data/ext/ice/cpp/src/Ice/ObjectAdapterF.cpp +38 -0
  313. data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.cpp +241 -0
  314. data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.h +52 -0
  315. data/ext/ice/cpp/src/Ice/ObjectAdapterI.cpp +1498 -0
  316. data/ext/ice/cpp/src/Ice/ObjectAdapterI.h +155 -0
  317. data/ext/ice/cpp/src/Ice/ObjectFactory.cpp +41 -0
  318. data/ext/ice/cpp/src/Ice/ObjectFactoryF.cpp +38 -0
  319. data/ext/ice/cpp/src/Ice/ObjectFactoryManager.cpp +140 -0
  320. data/ext/ice/cpp/src/Ice/ObjectFactoryManager.h +43 -0
  321. data/ext/ice/cpp/src/Ice/ObserverHelper.cpp +84 -0
  322. data/ext/ice/cpp/src/Ice/OpaqueEndpointI.cpp +407 -0
  323. data/ext/ice/cpp/src/Ice/OpaqueEndpointI.h +70 -0
  324. data/ext/ice/cpp/src/Ice/Outgoing.cpp +737 -0
  325. data/ext/ice/cpp/src/Ice/OutgoingAsync.cpp +874 -0
  326. data/ext/ice/cpp/src/Ice/Plugin.cpp +43 -0
  327. data/ext/ice/cpp/src/Ice/PluginF.cpp +38 -0
  328. data/ext/ice/cpp/src/Ice/PluginManagerI.cpp +503 -0
  329. data/ext/ice/cpp/src/Ice/PluginManagerI.h +67 -0
  330. data/ext/ice/cpp/src/Ice/Process.cpp +299 -0
  331. data/ext/ice/cpp/src/Ice/ProcessF.cpp +39 -0
  332. data/ext/ice/cpp/src/Ice/Properties.cpp +45 -0
  333. data/ext/ice/cpp/src/Ice/PropertiesAdmin.cpp +555 -0
  334. data/ext/ice/cpp/src/Ice/PropertiesAdminI.cpp +207 -0
  335. data/ext/ice/cpp/src/Ice/PropertiesAdminI.h +45 -0
  336. data/ext/ice/cpp/src/Ice/PropertiesF.cpp +39 -0
  337. data/ext/ice/cpp/src/Ice/PropertiesI.cpp +759 -0
  338. data/ext/ice/cpp/src/Ice/PropertiesI.h +78 -0
  339. data/ext/ice/cpp/src/Ice/PropertyNames.cpp +1293 -0
  340. data/ext/ice/cpp/src/Ice/PropertyNames.h +81 -0
  341. data/ext/ice/cpp/src/Ice/Protocol.cpp +137 -0
  342. data/ext/ice/cpp/src/Ice/ProtocolInstance.cpp +98 -0
  343. data/ext/ice/cpp/src/Ice/ProtocolInstance.h +91 -0
  344. data/ext/ice/cpp/src/Ice/ProtocolInstanceF.h +26 -0
  345. data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.cpp +51 -0
  346. data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.h +67 -0
  347. data/ext/ice/cpp/src/Ice/ProtocolPluginFacadeF.h +26 -0
  348. data/ext/ice/cpp/src/Ice/Proxy.cpp +1810 -0
  349. data/ext/ice/cpp/src/Ice/ProxyFactory.cpp +305 -0
  350. data/ext/ice/cpp/src/Ice/ProxyFactory.h +57 -0
  351. data/ext/ice/cpp/src/Ice/Reference.cpp +1947 -0
  352. data/ext/ice/cpp/src/Ice/Reference.h +305 -0
  353. data/ext/ice/cpp/src/Ice/ReferenceFactory.cpp +937 -0
  354. data/ext/ice/cpp/src/Ice/ReferenceFactory.h +81 -0
  355. data/ext/ice/cpp/src/Ice/ReferenceFactoryF.h +24 -0
  356. data/ext/ice/cpp/src/Ice/RemoteLogger.cpp +958 -0
  357. data/ext/ice/cpp/src/Ice/ReplyStatus.h +29 -0
  358. data/ext/ice/cpp/src/Ice/RequestHandler.cpp +40 -0
  359. data/ext/ice/cpp/src/Ice/RequestHandler.h +90 -0
  360. data/ext/ice/cpp/src/Ice/RequestHandlerFactory.cpp +70 -0
  361. data/ext/ice/cpp/src/Ice/RequestHandlerFactory.h +41 -0
  362. data/ext/ice/cpp/src/Ice/ResponseHandler.cpp +20 -0
  363. data/ext/ice/cpp/src/Ice/ResponseHandler.h +39 -0
  364. data/ext/ice/cpp/src/Ice/RetryQueue.cpp +154 -0
  365. data/ext/ice/cpp/src/Ice/RetryQueue.h +69 -0
  366. data/ext/ice/cpp/src/Ice/RetryQueueF.h +24 -0
  367. data/ext/ice/cpp/src/Ice/Router.cpp +849 -0
  368. data/ext/ice/cpp/src/Ice/RouterF.cpp +39 -0
  369. data/ext/ice/cpp/src/Ice/RouterInfo.cpp +381 -0
  370. data/ext/ice/cpp/src/Ice/RouterInfo.h +148 -0
  371. data/ext/ice/cpp/src/Ice/RouterInfoF.h +30 -0
  372. data/ext/ice/cpp/src/Ice/Selector.cpp +926 -0
  373. data/ext/ice/cpp/src/Ice/Selector.h +231 -0
  374. data/ext/ice/cpp/src/Ice/ServantLocator.cpp +41 -0
  375. data/ext/ice/cpp/src/Ice/ServantLocatorF.cpp +38 -0
  376. data/ext/ice/cpp/src/Ice/ServantManager.cpp +495 -0
  377. data/ext/ice/cpp/src/Ice/ServantManager.h +74 -0
  378. data/ext/ice/cpp/src/Ice/Service.cpp +1897 -0
  379. data/ext/ice/cpp/src/Ice/SharedContext.h +51 -0
  380. data/ext/ice/cpp/src/Ice/SliceChecksumDict.cpp +34 -0
  381. data/ext/ice/cpp/src/Ice/SliceChecksums.cpp +80 -0
  382. data/ext/ice/cpp/src/Ice/SlicedData.cpp +80 -0
  383. data/ext/ice/cpp/src/Ice/Stream.cpp +53 -0
  384. data/ext/ice/cpp/src/Ice/StreamI.cpp +832 -0
  385. data/ext/ice/cpp/src/Ice/StreamI.h +198 -0
  386. data/ext/ice/cpp/src/Ice/StreamSocket.cpp +521 -0
  387. data/ext/ice/cpp/src/Ice/StreamSocket.h +85 -0
  388. data/ext/ice/cpp/src/Ice/StringConverterPlugin.cpp +145 -0
  389. data/ext/ice/cpp/src/Ice/SysLoggerI.cpp +167 -0
  390. data/ext/ice/cpp/src/Ice/SysLoggerI.h +43 -0
  391. data/ext/ice/cpp/src/Ice/TcpAcceptor.cpp +235 -0
  392. data/ext/ice/cpp/src/Ice/TcpAcceptor.h +67 -0
  393. data/ext/ice/cpp/src/Ice/TcpConnector.cpp +133 -0
  394. data/ext/ice/cpp/src/Ice/TcpConnector.h +51 -0
  395. data/ext/ice/cpp/src/Ice/TcpEndpointI.cpp +397 -0
  396. data/ext/ice/cpp/src/Ice/TcpEndpointI.h +93 -0
  397. data/ext/ice/cpp/src/Ice/TcpTransceiver.cpp +127 -0
  398. data/ext/ice/cpp/src/Ice/TcpTransceiver.h +61 -0
  399. data/ext/ice/cpp/src/Ice/ThreadPool.cpp +1357 -0
  400. data/ext/ice/cpp/src/Ice/ThreadPool.h +399 -0
  401. data/ext/ice/cpp/src/Ice/TraceLevels.cpp +43 -0
  402. data/ext/ice/cpp/src/Ice/TraceLevels.h +50 -0
  403. data/ext/ice/cpp/src/Ice/TraceLevelsF.h +26 -0
  404. data/ext/ice/cpp/src/Ice/TraceUtil.cpp +452 -0
  405. data/ext/ice/cpp/src/Ice/TraceUtil.h +28 -0
  406. data/ext/ice/cpp/src/Ice/Transceiver.cpp +24 -0
  407. data/ext/ice/cpp/src/Ice/Transceiver.h +52 -0
  408. data/ext/ice/cpp/src/Ice/TransceiverF.h +38 -0
  409. data/ext/ice/cpp/src/Ice/UdpConnector.cpp +144 -0
  410. data/ext/ice/cpp/src/Ice/UdpConnector.h +51 -0
  411. data/ext/ice/cpp/src/Ice/UdpEndpointI.cpp +483 -0
  412. data/ext/ice/cpp/src/Ice/UdpEndpointI.h +95 -0
  413. data/ext/ice/cpp/src/Ice/UdpTransceiver.cpp +1156 -0
  414. data/ext/ice/cpp/src/Ice/UdpTransceiver.h +123 -0
  415. data/ext/ice/cpp/src/Ice/Version.cpp +46 -0
  416. data/ext/ice/cpp/src/Ice/WSAcceptor.cpp +103 -0
  417. data/ext/ice/cpp/src/Ice/WSAcceptor.h +61 -0
  418. data/ext/ice/cpp/src/Ice/WSConnector.cpp +113 -0
  419. data/ext/ice/cpp/src/Ice/WSConnector.h +51 -0
  420. data/ext/ice/cpp/src/Ice/WSEndpoint.cpp +441 -0
  421. data/ext/ice/cpp/src/Ice/WSEndpoint.h +97 -0
  422. data/ext/ice/cpp/src/Ice/WSTransceiver.cpp +1728 -0
  423. data/ext/ice/cpp/src/Ice/WSTransceiver.h +149 -0
  424. data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.cpp +594 -0
  425. data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.h +1035 -0
  426. data/ext/ice/cpp/src/IceDiscovery/LocatorI.cpp +208 -0
  427. data/ext/ice/cpp/src/IceDiscovery/LocatorI.h +78 -0
  428. data/ext/ice/cpp/src/IceDiscovery/LookupI.cpp +308 -0
  429. data/ext/ice/cpp/src/IceDiscovery/LookupI.h +183 -0
  430. data/ext/ice/cpp/src/IceDiscovery/Makefile +61 -0
  431. data/ext/ice/cpp/src/IceDiscovery/PluginI.cpp +148 -0
  432. data/ext/ice/cpp/src/IceDiscovery/PluginI.h +39 -0
  433. data/ext/ice/cpp/src/IceSSL/AcceptorI.cpp +258 -0
  434. data/ext/ice/cpp/src/IceSSL/AcceptorI.h +66 -0
  435. data/ext/ice/cpp/src/IceSSL/Certificate.cpp +1334 -0
  436. data/ext/ice/cpp/src/IceSSL/ConnectionInfo.cpp +42 -0
  437. data/ext/ice/cpp/src/IceSSL/ConnectorI.cpp +151 -0
  438. data/ext/ice/cpp/src/IceSSL/ConnectorI.h +56 -0
  439. data/ext/ice/cpp/src/IceSSL/EndpointI.cpp +397 -0
  440. data/ext/ice/cpp/src/IceSSL/EndpointI.h +96 -0
  441. data/ext/ice/cpp/src/IceSSL/EndpointInfo.cpp +41 -0
  442. data/ext/ice/cpp/src/IceSSL/Instance.cpp +38 -0
  443. data/ext/ice/cpp/src/IceSSL/Instance.h +42 -0
  444. data/ext/ice/cpp/src/IceSSL/InstanceF.h +34 -0
  445. data/ext/ice/cpp/src/IceSSL/Makefile +82 -0
  446. data/ext/ice/cpp/src/IceSSL/OpenSSLEngine.cpp +1001 -0
  447. data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.cpp +607 -0
  448. data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.h +75 -0
  449. data/ext/ice/cpp/src/IceSSL/PluginI.cpp +102 -0
  450. data/ext/ice/cpp/src/IceSSL/PluginI.h +56 -0
  451. data/ext/ice/cpp/src/IceSSL/RFC2253.cpp +541 -0
  452. data/ext/ice/cpp/src/IceSSL/RFC2253.h +67 -0
  453. data/ext/ice/cpp/src/IceSSL/SChannelEngine.cpp +729 -0
  454. data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.cpp +1062 -0
  455. data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.h +130 -0
  456. data/ext/ice/cpp/src/IceSSL/SSLEngine.cpp +291 -0
  457. data/ext/ice/cpp/src/IceSSL/SSLEngine.h +264 -0
  458. data/ext/ice/cpp/src/IceSSL/SSLEngineF.h +41 -0
  459. data/ext/ice/cpp/src/IceSSL/SecureTransportEngine.cpp +1514 -0
  460. data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.cpp +609 -0
  461. data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.h +91 -0
  462. data/ext/ice/cpp/src/IceSSL/TrustManager.cpp +246 -0
  463. data/ext/ice/cpp/src/IceSSL/TrustManager.h +51 -0
  464. data/ext/ice/cpp/src/IceSSL/TrustManagerF.h +26 -0
  465. data/ext/ice/cpp/src/IceSSL/Util.cpp +1423 -0
  466. data/ext/ice/cpp/src/IceSSL/Util.h +136 -0
  467. data/ext/ice/cpp/src/IceUtil/ArgVector.cpp +65 -0
  468. data/ext/ice/cpp/src/IceUtil/ArgVector.h +41 -0
  469. data/ext/ice/cpp/src/IceUtil/Cond.cpp +386 -0
  470. data/ext/ice/cpp/src/IceUtil/ConvertUTF.cpp +477 -0
  471. data/ext/ice/cpp/src/IceUtil/ConvertUTF.h +144 -0
  472. data/ext/ice/cpp/src/IceUtil/CountDownLatch.cpp +184 -0
  473. data/ext/ice/cpp/src/IceUtil/CtrlCHandler.cpp +273 -0
  474. data/ext/ice/cpp/src/IceUtil/Exception.cpp +782 -0
  475. data/ext/ice/cpp/src/IceUtil/FileUtil.cpp +532 -0
  476. data/ext/ice/cpp/src/IceUtil/FileUtil.h +159 -0
  477. data/ext/ice/cpp/src/IceUtil/InputUtil.cpp +41 -0
  478. data/ext/ice/cpp/src/IceUtil/Makefile +68 -0
  479. data/ext/ice/cpp/src/IceUtil/MutexProtocol.cpp +24 -0
  480. data/ext/ice/cpp/src/IceUtil/Options.cpp +1049 -0
  481. data/ext/ice/cpp/src/IceUtil/OutputUtil.cpp +591 -0
  482. data/ext/ice/cpp/src/IceUtil/Random.cpp +185 -0
  483. data/ext/ice/cpp/src/IceUtil/RecMutex.cpp +257 -0
  484. data/ext/ice/cpp/src/IceUtil/SHA1.cpp +126 -0
  485. data/ext/ice/cpp/src/IceUtil/Shared.cpp +200 -0
  486. data/ext/ice/cpp/src/IceUtil/StopWatch.h +54 -0
  487. data/ext/ice/cpp/src/IceUtil/StringConverter.cpp +450 -0
  488. data/ext/ice/cpp/src/IceUtil/StringUtil.cpp +842 -0
  489. data/ext/ice/cpp/src/IceUtil/Thread.cpp +809 -0
  490. data/ext/ice/cpp/src/IceUtil/ThreadException.cpp +172 -0
  491. data/ext/ice/cpp/src/IceUtil/Time.cpp +306 -0
  492. data/ext/ice/cpp/src/IceUtil/Timer.cpp +251 -0
  493. data/ext/ice/cpp/src/IceUtil/UUID.cpp +174 -0
  494. data/ext/ice/cpp/src/IceUtil/Unicode.cpp +131 -0
  495. data/ext/ice/cpp/src/IceUtil/Unicode.h +49 -0
  496. data/ext/ice/cpp/src/Slice/CPlusPlusUtil.cpp +1139 -0
  497. data/ext/ice/cpp/src/Slice/Checksum.cpp +452 -0
  498. data/ext/ice/cpp/src/Slice/CsUtil.cpp +2650 -0
  499. data/ext/ice/cpp/src/Slice/DotNetNames.cpp +146 -0
  500. data/ext/ice/cpp/src/Slice/FileTracker.cpp +203 -0
  501. data/ext/ice/cpp/src/Slice/Grammar.cpp +4755 -0
  502. data/ext/ice/cpp/src/Slice/Grammar.h +98 -0
  503. data/ext/ice/cpp/src/Slice/GrammarUtil.h +234 -0
  504. data/ext/ice/cpp/src/Slice/JavaUtil.cpp +4376 -0
  505. data/ext/ice/cpp/src/Slice/MD5.cpp +57 -0
  506. data/ext/ice/cpp/src/Slice/MD5.h +44 -0
  507. data/ext/ice/cpp/src/Slice/MD5I.cpp +385 -0
  508. data/ext/ice/cpp/src/Slice/MD5I.h +91 -0
  509. data/ext/ice/cpp/src/Slice/Makefile +65 -0
  510. data/ext/ice/cpp/src/Slice/PHPUtil.cpp +156 -0
  511. data/ext/ice/cpp/src/Slice/Parser.cpp +6386 -0
  512. data/ext/ice/cpp/src/Slice/Preprocessor.cpp +686 -0
  513. data/ext/ice/cpp/src/Slice/Python.cpp +675 -0
  514. data/ext/ice/cpp/src/Slice/PythonUtil.cpp +2614 -0
  515. data/ext/ice/cpp/src/Slice/Ruby.cpp +317 -0
  516. data/ext/ice/cpp/src/Slice/RubyUtil.cpp +1774 -0
  517. data/ext/ice/cpp/src/Slice/Scanner.cpp +2426 -0
  518. data/ext/ice/cpp/src/Slice/Util.cpp +325 -0
  519. data/ext/ice/mcpp/config.h.Darwin +227 -0
  520. data/ext/ice/mcpp/config.h.Linux +227 -0
  521. data/ext/ice/mcpp/config.h.MINGW +7 -0
  522. data/ext/ice/mcpp/configed.H +382 -0
  523. data/ext/ice/mcpp/directive.c +1699 -0
  524. data/ext/ice/mcpp/eval.c +1673 -0
  525. data/ext/ice/mcpp/expand.c +2980 -0
  526. data/ext/ice/mcpp/internal.H +564 -0
  527. data/ext/ice/mcpp/main.c +1131 -0
  528. data/ext/ice/mcpp/mbchar.c +869 -0
  529. data/ext/ice/mcpp/mcpp_lib.h +31 -0
  530. data/ext/ice/mcpp/mcpp_out.h +13 -0
  531. data/ext/ice/mcpp/support.c +2811 -0
  532. data/ext/ice/mcpp/system.H +396 -0
  533. data/ext/ice/mcpp/system.c +4940 -0
  534. data/ice.gemspec +41 -0
  535. data/lib/Glacier2.rb +12 -0
  536. data/lib/Glacier2/Metrics.rb +99 -0
  537. data/lib/Glacier2/PermissionsVerifier.rb +168 -0
  538. data/lib/Glacier2/PermissionsVerifierF.rb +34 -0
  539. data/lib/Glacier2/Router.rb +141 -0
  540. data/lib/Glacier2/RouterF.rb +29 -0
  541. data/lib/Glacier2/SSLInfo.rb +79 -0
  542. data/lib/Glacier2/Session.rb +470 -0
  543. data/lib/Ice.rb +659 -0
  544. data/lib/Ice/BuiltinSequences.rb +64 -0
  545. data/lib/Ice/Communicator.rb +93 -0
  546. data/lib/Ice/CommunicatorF.rb +28 -0
  547. data/lib/Ice/Connection.rb +414 -0
  548. data/lib/Ice/ConnectionF.rb +36 -0
  549. data/lib/Ice/Current.rb +152 -0
  550. data/lib/Ice/Endpoint.rb +265 -0
  551. data/lib/Ice/EndpointF.rb +52 -0
  552. data/lib/Ice/EndpointTypes.rb +77 -0
  553. data/lib/Ice/FacetMap.rb +28 -0
  554. data/lib/Ice/Identity.rb +70 -0
  555. data/lib/Ice/ImplicitContext.rb +59 -0
  556. data/lib/Ice/ImplicitContextF.rb +28 -0
  557. data/lib/Ice/Instrumentation.rb +425 -0
  558. data/lib/Ice/InstrumentationF.rb +35 -0
  559. data/lib/Ice/LocalException.rb +1081 -0
  560. data/lib/Ice/Locator.rb +314 -0
  561. data/lib/Ice/LocatorF.rb +34 -0
  562. data/lib/Ice/Logger.rb +57 -0
  563. data/lib/Ice/LoggerF.rb +28 -0
  564. data/lib/Ice/Metrics.rb +696 -0
  565. data/lib/Ice/ObjectAdapterF.rb +28 -0
  566. data/lib/Ice/ObjectFactory.rb +53 -0
  567. data/lib/Ice/ObjectFactoryF.rb +28 -0
  568. data/lib/Ice/Plugin.rb +87 -0
  569. data/lib/Ice/PluginF.rb +32 -0
  570. data/lib/Ice/Process.rb +93 -0
  571. data/lib/Ice/ProcessF.rb +29 -0
  572. data/lib/Ice/Properties.rb +65 -0
  573. data/lib/Ice/PropertiesAdmin.rb +104 -0
  574. data/lib/Ice/PropertiesF.rb +33 -0
  575. data/lib/Ice/Router.rb +163 -0
  576. data/lib/Ice/RouterF.rb +29 -0
  577. data/lib/Ice/SliceChecksumDict.rb +28 -0
  578. data/lib/Ice/Version.rb +100 -0
  579. data/lib/IceBox.rb +10 -0
  580. data/lib/IceBox/IceBox.rb +272 -0
  581. data/lib/IceGrid.rb +17 -0
  582. data/lib/IceGrid/Admin.rb +1076 -0
  583. data/lib/IceGrid/Descriptor.rb +1505 -0
  584. data/lib/IceGrid/Exception.rb +401 -0
  585. data/lib/IceGrid/FileParser.rb +105 -0
  586. data/lib/IceGrid/Locator.rb +105 -0
  587. data/lib/IceGrid/Observer.rb +571 -0
  588. data/lib/IceGrid/Query.rb +168 -0
  589. data/lib/IceGrid/Registry.rb +120 -0
  590. data/lib/IceGrid/Session.rb +114 -0
  591. data/lib/IceGrid/UserAccountMapper.rb +101 -0
  592. data/lib/IcePatch2.rb +10 -0
  593. data/lib/IcePatch2/FileInfo.rb +75 -0
  594. data/lib/IcePatch2/FileServer.rb +141 -0
  595. data/lib/IceStorm.rb +11 -0
  596. data/lib/IceStorm/IceStorm.rb +463 -0
  597. data/lib/IceStorm/Metrics.rb +155 -0
  598. data/slice/Freeze/BackgroundSaveEvictor.ice +111 -0
  599. data/slice/Freeze/CatalogData.ice +49 -0
  600. data/slice/Freeze/Connection.ice +111 -0
  601. data/slice/Freeze/ConnectionF.ice +20 -0
  602. data/slice/Freeze/DB.ice +37 -0
  603. data/slice/Freeze/Evictor.ice +339 -0
  604. data/slice/Freeze/EvictorF.ice +22 -0
  605. data/slice/Freeze/EvictorStorage.ice +72 -0
  606. data/slice/Freeze/Exception.ice +100 -0
  607. data/slice/Freeze/Transaction.ice +57 -0
  608. data/slice/Freeze/TransactionalEvictor.ice +50 -0
  609. data/slice/Glacier2/Metrics.ice +77 -0
  610. data/slice/Glacier2/PermissionsVerifier.ice +105 -0
  611. data/slice/Glacier2/PermissionsVerifierF.ice +21 -0
  612. data/slice/Glacier2/Router.ice +178 -0
  613. data/slice/Glacier2/RouterF.ice +20 -0
  614. data/slice/Glacier2/SSLInfo.ice +50 -0
  615. data/slice/Glacier2/Session.ice +273 -0
  616. data/slice/Ice/BuiltinSequences.ice +48 -0
  617. data/slice/Ice/Communicator.ice +567 -0
  618. data/slice/Ice/CommunicatorF.ice +20 -0
  619. data/slice/Ice/Connection.ice +323 -0
  620. data/slice/Ice/ConnectionF.ice +22 -0
  621. data/slice/Ice/Current.ice +160 -0
  622. data/slice/Ice/Endpoint.ice +227 -0
  623. data/slice/Ice/EndpointF.ice +32 -0
  624. data/slice/Ice/EndpointTypes.ice +38 -0
  625. data/slice/Ice/FacetMap.ice +25 -0
  626. data/slice/Ice/Identity.ice +59 -0
  627. data/slice/Ice/ImplicitContext.ice +109 -0
  628. data/slice/Ice/ImplicitContextF.ice +20 -0
  629. data/slice/Ice/Instrumentation.ice +499 -0
  630. data/slice/Ice/InstrumentationF.ice +26 -0
  631. data/slice/Ice/LocalException.ice +1015 -0
  632. data/slice/Ice/Locator.ice +227 -0
  633. data/slice/Ice/LocatorF.ice +21 -0
  634. data/slice/Ice/Logger.ice +86 -0
  635. data/slice/Ice/LoggerF.ice +20 -0
  636. data/slice/Ice/Metrics.ice +422 -0
  637. data/slice/Ice/ObjectAdapter.ice +673 -0
  638. data/slice/Ice/ObjectAdapterF.ice +20 -0
  639. data/slice/Ice/ObjectFactory.ice +60 -0
  640. data/slice/Ice/ObjectFactoryF.ice +20 -0
  641. data/slice/Ice/Plugin.ice +117 -0
  642. data/slice/Ice/PluginF.ice +21 -0
  643. data/slice/Ice/Process.ice +54 -0
  644. data/slice/Ice/ProcessF.ice +20 -0
  645. data/slice/Ice/Properties.ice +228 -0
  646. data/slice/Ice/PropertiesAdmin.ice +75 -0
  647. data/slice/Ice/PropertiesF.ice +21 -0
  648. data/slice/Ice/RemoteLogger.ice +232 -0
  649. data/slice/Ice/Router.ice +83 -0
  650. data/slice/Ice/RouterF.ice +20 -0
  651. data/slice/Ice/ServantLocator.ice +117 -0
  652. data/slice/Ice/ServantLocatorF.ice +20 -0
  653. data/slice/Ice/SliceChecksumDict.ice +25 -0
  654. data/slice/Ice/Version.ice +39 -0
  655. data/slice/IceBox/IceBox.ice +194 -0
  656. data/slice/IceDiscovery/IceDiscovery.ice +32 -0
  657. data/slice/IceGrid/Admin.ice +1578 -0
  658. data/slice/IceGrid/Descriptor.ice +1079 -0
  659. data/slice/IceGrid/Discovery.ice +73 -0
  660. data/slice/IceGrid/Exception.ice +383 -0
  661. data/slice/IceGrid/FileParser.ice +61 -0
  662. data/slice/IceGrid/Locator.ice +56 -0
  663. data/slice/IceGrid/Observer.ice +394 -0
  664. data/slice/IceGrid/PluginFacade.ice +316 -0
  665. data/slice/IceGrid/Query.ice +130 -0
  666. data/slice/IceGrid/Registry.ice +138 -0
  667. data/slice/IceGrid/Session.ice +124 -0
  668. data/slice/IceGrid/UserAccountMapper.ice +58 -0
  669. data/slice/IcePatch2/FileInfo.ice +49 -0
  670. data/slice/IcePatch2/FileServer.ice +129 -0
  671. data/slice/IceSSL/ConnectionInfo.ice +34 -0
  672. data/slice/IceSSL/EndpointInfo.ice +41 -0
  673. data/slice/IceStorm/IceStorm.ice +405 -0
  674. data/slice/IceStorm/Metrics.ice +71 -0
  675. 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;