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.
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;