zeroc-ice 3.6.5 → 3.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (752) hide show
  1. checksums.yaml +4 -4
  2. data/BZIP2_LICENSE +42 -0
  3. data/ICE_LICENSE +17 -17
  4. data/LICENSE +12 -12
  5. data/bin/slice2rb +1 -1
  6. data/ext/Communicator.cpp +150 -53
  7. data/ext/Communicator.h +1 -1
  8. data/ext/Config.h +2 -12
  9. data/ext/Connection.cpp +89 -68
  10. data/ext/Connection.h +1 -1
  11. data/ext/Endpoint.cpp +16 -45
  12. data/ext/Endpoint.h +1 -1
  13. data/ext/ImplicitContext.cpp +1 -5
  14. data/ext/ImplicitContext.h +1 -1
  15. data/ext/Init.cpp +4 -1
  16. data/ext/Logger.cpp +1 -1
  17. data/ext/Logger.h +1 -1
  18. data/ext/Operation.cpp +33 -44
  19. data/ext/Operation.h +1 -1
  20. data/ext/Properties.cpp +1 -1
  21. data/ext/Properties.h +1 -1
  22. data/ext/Proxy.cpp +22 -57
  23. data/ext/Proxy.h +1 -1
  24. data/ext/Slice.cpp +5 -5
  25. data/ext/Slice.h +1 -1
  26. data/ext/Types.cpp +244 -171
  27. data/ext/Types.h +118 -66
  28. data/ext/Util.cpp +13 -9
  29. data/ext/Util.h +10 -10
  30. data/ext/ValueFactoryManager.cpp +445 -0
  31. data/ext/ValueFactoryManager.h +100 -0
  32. data/ext/extconf.rb +47 -45
  33. data/ext/ice/bzip2/blocksort.c +1094 -0
  34. data/ext/ice/bzip2/bzlib.c +1572 -0
  35. data/ext/ice/bzip2/bzlib.h +282 -0
  36. data/ext/ice/bzip2/bzlib_private.h +509 -0
  37. data/ext/ice/bzip2/compress.c +672 -0
  38. data/ext/ice/bzip2/crctable.c +104 -0
  39. data/ext/ice/bzip2/decompress.c +646 -0
  40. data/ext/ice/bzip2/huffman.c +205 -0
  41. data/ext/ice/bzip2/randtable.c +84 -0
  42. data/ext/ice/cpp/include/Ice/Application.h +77 -60
  43. data/ext/ice/cpp/include/Ice/AsyncResult.h +34 -318
  44. data/ext/ice/cpp/include/Ice/AsyncResultF.h +4 -2
  45. data/ext/ice/cpp/include/Ice/BatchRequestInterceptor.h +5 -10
  46. data/ext/ice/cpp/include/Ice/BatchRequestQueueF.h +1 -1
  47. data/ext/ice/cpp/include/Ice/Buffer.h +10 -10
  48. data/ext/ice/cpp/include/Ice/CommunicatorAsync.h +14 -12
  49. data/ext/ice/cpp/include/Ice/Comparable.h +130 -0
  50. data/ext/ice/cpp/include/Ice/Config.h +7 -36
  51. data/ext/ice/cpp/include/Ice/ConnectionAsync.h +107 -11
  52. data/ext/ice/cpp/include/Ice/ConnectionIF.h +5 -1
  53. data/ext/ice/cpp/include/Ice/ConsoleUtil.h +28 -0
  54. data/ext/ice/cpp/include/Ice/{DefaultObjectFactory.h → DefaultValueFactory.h} +28 -14
  55. data/ext/ice/cpp/include/Ice/DispatchInterceptor.h +4 -6
  56. data/ext/ice/cpp/include/Ice/Dispatcher.h +14 -13
  57. data/ext/ice/cpp/include/Ice/DynamicLibrary.h +7 -5
  58. data/ext/ice/cpp/include/Ice/DynamicLibraryF.h +1 -1
  59. data/ext/ice/cpp/include/Ice/Exception.h +66 -56
  60. data/ext/ice/cpp/include/Ice/ExceptionHelpers.h +69 -0
  61. data/ext/ice/cpp/include/Ice/FactoryTable.h +11 -12
  62. data/ext/ice/cpp/include/Ice/FactoryTableInit.h +27 -25
  63. data/ext/ice/cpp/include/Ice/Format.h +6 -1
  64. data/ext/ice/cpp/include/Ice/Functional.h +33 -33
  65. data/ext/ice/cpp/include/Ice/GCObject.h +9 -5
  66. data/ext/ice/cpp/include/Ice/Handle.h +6 -11
  67. data/ext/ice/cpp/include/Ice/Ice.h +9 -5
  68. data/ext/ice/cpp/include/{IceUtil → Ice}/IconvStringConverter.h +108 -62
  69. data/ext/ice/cpp/include/Ice/Incoming.h +109 -33
  70. data/ext/ice/cpp/include/Ice/IncomingAsync.h +63 -23
  71. data/ext/ice/cpp/include/Ice/IncomingAsyncF.h +7 -1
  72. data/ext/ice/cpp/include/Ice/Initialize.h +178 -38
  73. data/ext/ice/cpp/include/Ice/InputStream.h +994 -0
  74. data/ext/ice/cpp/include/Ice/InstanceF.h +1 -2
  75. data/ext/ice/cpp/include/Ice/InterfaceByValue.h +46 -0
  76. data/ext/ice/cpp/include/Ice/LocalObject.h +9 -9
  77. data/ext/ice/cpp/include/Ice/LocalObjectF.h +1 -1
  78. data/ext/ice/cpp/include/Ice/LoggerUtil.h +20 -14
  79. data/ext/ice/cpp/include/Ice/MetricsAdminI.h +114 -65
  80. data/ext/ice/cpp/include/Ice/MetricsFunctional.h +23 -5
  81. data/ext/ice/cpp/include/Ice/MetricsObserverI.h +99 -26
  82. data/ext/ice/cpp/include/Ice/NativePropertiesAdmin.h +17 -4
  83. data/ext/ice/cpp/include/Ice/Object.h +105 -56
  84. data/ext/ice/cpp/include/Ice/ObjectF.h +8 -3
  85. data/ext/ice/cpp/include/Ice/ObserverHelper.h +18 -8
  86. data/ext/ice/cpp/include/Ice/Optional.h +1084 -0
  87. data/ext/ice/cpp/include/Ice/OutgoingAsync.h +655 -84
  88. data/ext/ice/cpp/include/Ice/OutgoingAsyncF.h +12 -6
  89. data/ext/ice/cpp/include/Ice/OutputStream.h +753 -0
  90. data/ext/ice/cpp/include/Ice/Protocol.h +19 -12
  91. data/ext/ice/cpp/include/Ice/Proxy.h +1329 -717
  92. data/ext/ice/cpp/include/Ice/ProxyF.h +11 -33
  93. data/ext/ice/cpp/include/Ice/ProxyFactoryF.h +1 -1
  94. data/ext/ice/cpp/include/Ice/ProxyHandle.h +34 -50
  95. data/ext/ice/cpp/include/Ice/ReferenceF.h +1 -1
  96. data/ext/ice/cpp/include/Ice/RegisterPlugins.h +22 -3
  97. data/ext/ice/cpp/include/Ice/RequestHandlerF.h +10 -4
  98. data/ext/ice/cpp/include/Ice/ResponseHandlerF.h +6 -1
  99. data/ext/ice/cpp/include/{IceUtil → Ice}/SHA1.h +16 -16
  100. data/ext/ice/cpp/include/Ice/ServantManagerF.h +1 -1
  101. data/ext/ice/cpp/include/Ice/Service.h +13 -18
  102. data/ext/ice/cpp/include/Ice/SliceChecksums.h +1 -1
  103. data/ext/ice/cpp/include/Ice/SlicedData.h +46 -20
  104. data/ext/ice/cpp/include/Ice/SlicedDataF.h +14 -6
  105. data/ext/ice/cpp/include/Ice/StreamHelpers.h +159 -49
  106. data/ext/ice/cpp/include/Ice/StringConverter.h +52 -0
  107. data/ext/ice/cpp/include/Ice/ThreadPoolF.h +1 -1
  108. data/{slice/Ice/ObjectFactoryF.ice → ext/ice/cpp/include/Ice/UUID.h} +9 -7
  109. data/ext/ice/cpp/include/{IceUtil → Ice}/UniquePtr.h +21 -22
  110. data/ext/ice/cpp/include/Ice/UniqueRef.h +98 -0
  111. data/ext/ice/cpp/include/Ice/UserExceptionFactory.h +40 -8
  112. data/ext/ice/cpp/include/Ice/Value.h +104 -0
  113. data/{slice/Freeze/ConnectionF.ice → ext/ice/cpp/include/Ice/ValueF.h} +11 -7
  114. data/ext/ice/cpp/include/IceSSL/Config.h +8 -23
  115. data/ext/ice/cpp/include/IceSSL/IceSSL.h +17 -6
  116. data/ext/ice/cpp/include/IceSSL/OpenSSL.h +130 -0
  117. data/ext/ice/cpp/include/IceSSL/Plugin.h +172 -259
  118. data/ext/ice/cpp/include/IceSSL/SChannel.h +66 -0
  119. data/ext/ice/cpp/include/IceSSL/SecureTransport.h +66 -0
  120. data/ext/ice/cpp/include/IceSSL/UWP.h +58 -0
  121. data/ext/ice/cpp/include/IceUtil/Atomic.h +8 -10
  122. data/ext/ice/cpp/include/IceUtil/Cond.h +17 -18
  123. data/ext/ice/cpp/include/IceUtil/Config.h +138 -39
  124. data/ext/ice/cpp/include/IceUtil/ConsoleUtil.h +97 -0
  125. data/ext/ice/cpp/include/IceUtil/CountDownLatch.h +5 -5
  126. data/ext/ice/cpp/include/IceUtil/CtrlCHandler.h +23 -17
  127. data/ext/ice/cpp/include/IceUtil/DisableWarnings.h +1 -3
  128. data/ext/ice/cpp/include/IceUtil/Exception.h +157 -67
  129. data/ext/ice/cpp/include/IceUtil/FileUtil.h +148 -0
  130. data/ext/ice/cpp/include/IceUtil/Functional.h +1 -2
  131. data/ext/ice/cpp/include/IceUtil/Handle.h +11 -11
  132. data/ext/ice/cpp/include/IceUtil/IceUtil.h +4 -10
  133. data/ext/ice/cpp/include/IceUtil/InputUtil.h +3 -3
  134. data/ext/ice/cpp/include/IceUtil/Iterator.h +2 -2
  135. data/ext/ice/cpp/include/IceUtil/Lock.h +8 -10
  136. data/ext/ice/cpp/include/IceUtil/Monitor.h +1 -2
  137. data/ext/ice/cpp/include/IceUtil/Mutex.h +17 -11
  138. data/ext/ice/cpp/include/IceUtil/MutexProtocol.h +2 -2
  139. data/ext/ice/cpp/include/IceUtil/MutexPtrLock.h +4 -4
  140. data/ext/ice/cpp/include/IceUtil/MutexPtrTryLock.h +4 -4
  141. data/ext/ice/cpp/include/IceUtil/Optional.h +32 -18
  142. data/ext/ice/cpp/include/IceUtil/Options.h +17 -18
  143. data/ext/ice/cpp/include/IceUtil/OutputUtil.h +55 -29
  144. data/ext/ice/cpp/include/IceUtil/PopDisableWarnings.h +6 -6
  145. data/ext/ice/cpp/include/IceUtil/PushDisableWarnings.h +11 -10
  146. data/ext/ice/cpp/include/IceUtil/Random.h +3 -3
  147. data/ext/ice/cpp/include/IceUtil/RecMutex.h +7 -8
  148. data/ext/ice/cpp/include/IceUtil/ResourceConfig.h +58 -0
  149. data/ext/ice/cpp/include/IceUtil/ScannerConfig.h +1 -9
  150. data/ext/ice/cpp/include/IceUtil/ScopedArray.h +8 -2
  151. data/ext/ice/cpp/include/IceUtil/Shared.h +5 -7
  152. data/ext/ice/cpp/{src → include}/IceUtil/StopWatch.h +2 -2
  153. data/ext/ice/cpp/include/IceUtil/StringConverter.h +77 -72
  154. data/ext/ice/cpp/include/IceUtil/StringUtil.h +32 -21
  155. data/ext/ice/cpp/include/IceUtil/Thread.h +10 -12
  156. data/ext/ice/cpp/include/IceUtil/ThreadException.h +33 -42
  157. data/ext/ice/cpp/include/IceUtil/Time.h +3 -3
  158. data/ext/ice/cpp/include/IceUtil/Timer.h +14 -13
  159. data/ext/ice/cpp/include/IceUtil/UUID.h +2 -2
  160. data/ext/ice/cpp/include/IceUtil/UndefSysMacros.h +1 -1
  161. data/ext/ice/cpp/include/{Ice → generated/Ice}/BuiltinSequences.h +41 -8
  162. data/ext/ice/cpp/include/generated/Ice/Communicator.h +364 -0
  163. data/ext/ice/cpp/include/{Ice → generated/Ice}/CommunicatorF.h +40 -8
  164. data/ext/ice/cpp/include/generated/Ice/Connection.h +872 -0
  165. data/ext/ice/cpp/include/{Ice → generated/Ice}/ConnectionF.h +46 -8
  166. data/ext/ice/cpp/include/{Ice → generated/Ice}/Current.h +71 -8
  167. data/ext/ice/cpp/include/generated/Ice/Endpoint.h +582 -0
  168. data/ext/ice/cpp/include/{Ice → generated/Ice}/EndpointF.h +62 -8
  169. data/ext/ice/cpp/include/{Ice → generated/Ice}/EndpointTypes.h +31 -16
  170. data/ext/ice/cpp/include/{Ice → generated/Ice}/FacetMap.h +23 -8
  171. data/ext/ice/cpp/include/generated/Ice/Identity.h +221 -0
  172. data/ext/ice/cpp/include/{Ice → generated/Ice}/ImplicitContext.h +72 -13
  173. data/ext/ice/cpp/include/{Ice → generated/Ice}/ImplicitContextF.h +40 -8
  174. data/ext/ice/cpp/include/generated/Ice/Instrumentation.h +602 -0
  175. data/ext/ice/cpp/include/{Ice → generated/Ice}/InstrumentationF.h +54 -8
  176. data/ext/ice/cpp/include/generated/Ice/LocalException.h +2802 -0
  177. data/ext/ice/cpp/include/generated/Ice/Locator.h +2036 -0
  178. data/ext/ice/cpp/include/{Ice → generated/Ice}/LocatorF.h +53 -12
  179. data/ext/ice/cpp/include/{Ice → generated/Ice}/Logger.h +71 -13
  180. data/ext/ice/cpp/include/{Ice → generated/Ice}/LoggerF.h +40 -8
  181. data/ext/ice/cpp/include/generated/Ice/Metrics.h +2649 -0
  182. data/ext/ice/cpp/include/generated/Ice/ObjectAdapter.h +302 -0
  183. data/ext/ice/cpp/include/{Ice → generated/Ice}/ObjectAdapterF.h +40 -8
  184. data/ext/ice/cpp/include/generated/Ice/ObjectFactory.h +142 -0
  185. data/ext/ice/cpp/include/generated/Ice/Plugin.h +197 -0
  186. data/ext/ice/cpp/include/{Ice → generated/Ice}/PluginF.h +43 -8
  187. data/ext/ice/cpp/include/generated/Ice/Process.h +536 -0
  188. data/ext/ice/cpp/include/{Ice → generated/Ice}/ProcessF.h +45 -10
  189. data/ext/ice/cpp/include/{Ice → generated/Ice}/Properties.h +88 -21
  190. data/ext/ice/cpp/include/generated/Ice/PropertiesAdmin.h +749 -0
  191. data/ext/ice/cpp/include/{Ice → generated/Ice}/PropertiesF.h +48 -10
  192. data/ext/ice/cpp/include/generated/Ice/RemoteLogger.h +1449 -0
  193. data/ext/ice/cpp/include/generated/Ice/Router.h +1032 -0
  194. data/ext/ice/cpp/include/{Ice → generated/Ice}/RouterF.h +45 -10
  195. data/ext/ice/cpp/include/{Ice → generated/Ice}/ServantLocator.h +65 -13
  196. data/ext/ice/cpp/include/{Ice → generated/Ice}/ServantLocatorF.h +40 -8
  197. data/ext/ice/cpp/include/{Ice → generated/Ice}/SliceChecksumDict.h +23 -8
  198. data/ext/ice/cpp/include/generated/Ice/ValueFactory.h +169 -0
  199. data/ext/ice/cpp/include/generated/Ice/Version.h +334 -0
  200. data/ext/ice/cpp/include/generated/IceSSL/ConnectionInfo.h +172 -0
  201. data/ext/ice/cpp/include/generated/IceSSL/ConnectionInfoF.h +98 -0
  202. data/ext/ice/cpp/include/generated/IceSSL/EndpointInfo.h +156 -0
  203. data/ext/ice/cpp/src/Ice/ACM.cpp +18 -14
  204. data/ext/ice/cpp/src/Ice/ACM.h +9 -2
  205. data/ext/ice/cpp/{include → src}/Ice/ACMF.h +10 -5
  206. data/ext/ice/cpp/src/Ice/Acceptor.cpp +6 -1
  207. data/ext/ice/cpp/src/Ice/Acceptor.h +4 -3
  208. data/ext/ice/cpp/src/Ice/AcceptorF.h +1 -1
  209. data/ext/ice/cpp/src/{IceUtil → Ice}/ArgVector.cpp +9 -9
  210. data/ext/ice/cpp/src/{IceUtil → Ice}/ArgVector.h +7 -7
  211. data/ext/ice/cpp/src/Ice/AsyncResult.cpp +15 -538
  212. data/ext/ice/cpp/src/Ice/Base64.cpp +11 -11
  213. data/ext/ice/cpp/src/Ice/Base64.h +1 -1
  214. data/ext/ice/cpp/src/Ice/BatchRequestQueue.cpp +40 -12
  215. data/ext/ice/cpp/src/Ice/BatchRequestQueue.h +15 -10
  216. data/ext/ice/cpp/src/Ice/Buffer.cpp +74 -12
  217. data/ext/ice/cpp/src/Ice/BuiltinSequences.cpp +20 -6
  218. data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.cpp +85 -190
  219. data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.h +17 -18
  220. data/ext/ice/cpp/src/Ice/Communicator.cpp +39 -8
  221. data/ext/ice/cpp/src/Ice/CommunicatorF.cpp +27 -5
  222. data/ext/ice/cpp/src/Ice/CommunicatorI.cpp +271 -104
  223. data/ext/ice/cpp/src/Ice/CommunicatorI.h +84 -28
  224. data/ext/ice/cpp/src/{IceUtil → Ice}/Cond.cpp +3 -3
  225. data/ext/ice/cpp/src/Ice/ConnectRequestHandler.cpp +58 -125
  226. data/ext/ice/cpp/src/Ice/ConnectRequestHandler.h +11 -22
  227. data/ext/ice/cpp/src/Ice/ConnectRequestHandlerF.h +6 -2
  228. data/ext/ice/cpp/src/Ice/Connection.cpp +88 -8
  229. data/ext/ice/cpp/src/Ice/ConnectionF.cpp +27 -5
  230. data/ext/ice/cpp/src/Ice/ConnectionFactory.cpp +158 -80
  231. data/ext/ice/cpp/src/Ice/ConnectionFactory.h +41 -23
  232. data/ext/ice/cpp/{include → src}/Ice/ConnectionFactoryF.h +8 -3
  233. data/ext/ice/cpp/src/Ice/ConnectionI.cpp +707 -653
  234. data/ext/ice/cpp/src/Ice/ConnectionI.h +97 -69
  235. data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.cpp +2 -15
  236. data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.h +4 -3
  237. data/ext/ice/cpp/src/Ice/Connector.cpp +6 -1
  238. data/ext/ice/cpp/src/Ice/Connector.h +4 -3
  239. data/ext/ice/cpp/src/Ice/ConnectorF.h +1 -1
  240. data/ext/ice/cpp/src/{IceUtil → Ice}/CountDownLatch.cpp +4 -4
  241. data/ext/ice/cpp/src/Ice/Current.cpp +29 -6
  242. data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.cpp +6 -5
  243. data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.h +1 -1
  244. data/ext/ice/cpp/src/Ice/DefaultsAndOverridesF.h +1 -1
  245. data/ext/ice/cpp/src/Ice/DispatchInterceptor.cpp +5 -25
  246. data/ext/ice/cpp/src/Ice/DynamicLibrary.cpp +29 -19
  247. data/ext/ice/cpp/src/Ice/Endpoint.cpp +85 -6
  248. data/ext/ice/cpp/src/Ice/EndpointF.cpp +27 -5
  249. data/ext/ice/cpp/src/Ice/EndpointFactory.cpp +152 -1
  250. data/ext/ice/cpp/src/Ice/EndpointFactory.h +72 -6
  251. data/ext/ice/cpp/src/Ice/EndpointFactoryF.h +1 -1
  252. data/ext/ice/cpp/src/Ice/EndpointFactoryManager.cpp +35 -19
  253. data/ext/ice/cpp/src/Ice/EndpointFactoryManager.h +10 -4
  254. data/ext/ice/cpp/src/Ice/EndpointFactoryManagerF.h +1 -1
  255. data/ext/ice/cpp/src/Ice/EndpointI.cpp +17 -1
  256. data/ext/ice/cpp/src/Ice/EndpointI.h +35 -9
  257. data/ext/ice/cpp/src/Ice/EndpointIF.h +18 -5
  258. data/ext/ice/cpp/src/Ice/EndpointTypes.cpp +18 -6
  259. data/ext/ice/cpp/src/Ice/EventHandler.cpp +6 -4
  260. data/ext/ice/cpp/src/Ice/EventHandler.h +13 -8
  261. data/ext/ice/cpp/src/Ice/EventHandlerF.h +5 -2
  262. data/ext/ice/cpp/src/Ice/Exception.cpp +95 -86
  263. data/ext/ice/cpp/src/Ice/FacetMap.cpp +20 -6
  264. data/ext/ice/cpp/src/Ice/FactoryTable.cpp +37 -28
  265. data/ext/ice/cpp/src/Ice/FactoryTableInit.cpp +2 -4
  266. data/ext/ice/cpp/src/Ice/GCObject.cpp +28 -25
  267. data/ext/ice/cpp/src/Ice/HashUtil.h +2 -3
  268. data/ext/ice/cpp/src/Ice/HttpParser.cpp +1 -2
  269. data/ext/ice/cpp/src/Ice/HttpParser.h +1 -1
  270. data/ext/ice/cpp/src/Ice/IPEndpointI.cpp +92 -53
  271. data/ext/ice/cpp/src/Ice/IPEndpointI.h +19 -10
  272. data/ext/ice/cpp/src/Ice/IPEndpointIF.h +6 -2
  273. data/ext/ice/cpp/src/Ice/IconvStringConverter.cpp +56 -0
  274. data/ext/ice/cpp/src/Ice/Identity.cpp +24 -10
  275. data/ext/ice/cpp/src/Ice/ImplicitContext.cpp +37 -6
  276. data/ext/ice/cpp/src/Ice/ImplicitContextF.cpp +27 -5
  277. data/ext/ice/cpp/src/Ice/ImplicitContextI.cpp +14 -14
  278. data/ext/ice/cpp/src/Ice/ImplicitContextI.h +7 -5
  279. data/ext/ice/cpp/src/Ice/Incoming.cpp +276 -245
  280. data/ext/ice/cpp/src/Ice/IncomingAsync.cpp +104 -209
  281. data/ext/ice/cpp/src/Ice/IncomingRequest.h +5 -4
  282. data/ext/ice/cpp/src/Ice/Initialize.cpp +299 -172
  283. data/ext/ice/cpp/src/Ice/InputStream.cpp +2773 -0
  284. data/ext/ice/cpp/src/Ice/Instance.cpp +191 -231
  285. data/ext/ice/cpp/src/Ice/Instance.h +30 -18
  286. data/ext/ice/cpp/src/Ice/Instrumentation.cpp +106 -7
  287. data/ext/ice/cpp/src/Ice/InstrumentationF.cpp +27 -5
  288. data/ext/ice/cpp/src/Ice/InstrumentationI.cpp +117 -99
  289. data/ext/ice/cpp/src/Ice/InstrumentationI.h +30 -31
  290. data/ext/ice/cpp/src/Ice/LocalException.cpp +1190 -416
  291. data/ext/ice/cpp/src/Ice/LocalObject.cpp +1 -2
  292. data/ext/ice/cpp/src/Ice/Locator.cpp +1167 -1215
  293. data/ext/ice/cpp/src/Ice/LocatorF.cpp +29 -6
  294. data/ext/ice/cpp/src/Ice/LocatorInfo.cpp +129 -163
  295. data/ext/ice/cpp/src/Ice/LocatorInfo.h +29 -29
  296. data/ext/ice/cpp/src/Ice/LocatorInfoF.h +1 -1
  297. data/ext/ice/cpp/src/Ice/Logger.cpp +35 -5
  298. data/ext/ice/cpp/src/Ice/LoggerAdminI.cpp +178 -73
  299. data/ext/ice/cpp/src/Ice/LoggerAdminI.h +4 -4
  300. data/ext/ice/cpp/src/Ice/LoggerF.cpp +27 -5
  301. data/ext/ice/cpp/src/Ice/LoggerI.cpp +14 -44
  302. data/ext/ice/cpp/src/Ice/LoggerI.h +7 -13
  303. data/ext/ice/cpp/src/Ice/LoggerUtil.cpp +10 -12
  304. data/ext/ice/cpp/src/Ice/Metrics.cpp +1059 -1069
  305. data/ext/ice/cpp/src/Ice/MetricsAdminI.cpp +49 -19
  306. data/ext/ice/cpp/src/Ice/MetricsObserverI.cpp +1 -2
  307. data/ext/ice/cpp/src/Ice/Network.cpp +534 -170
  308. data/ext/ice/cpp/src/Ice/Network.h +100 -23
  309. data/ext/ice/cpp/src/Ice/NetworkF.h +2 -2
  310. data/ext/ice/cpp/src/Ice/NetworkProxy.cpp +21 -14
  311. data/ext/ice/cpp/src/Ice/NetworkProxy.h +5 -2
  312. data/ext/ice/cpp/src/Ice/NetworkProxyF.h +1 -1
  313. data/ext/ice/cpp/src/Ice/Object.cpp +217 -221
  314. data/ext/ice/cpp/src/Ice/ObjectAdapter.cpp +41 -6
  315. data/ext/ice/cpp/src/Ice/ObjectAdapterF.cpp +27 -5
  316. data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.cpp +35 -14
  317. data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.h +13 -7
  318. data/ext/ice/cpp/{include → src}/Ice/ObjectAdapterFactoryF.h +5 -1
  319. data/ext/ice/cpp/src/Ice/ObjectAdapterI.cpp +184 -58
  320. data/ext/ice/cpp/src/Ice/ObjectAdapterI.h +32 -26
  321. data/ext/ice/cpp/src/Ice/ObjectFactory.cpp +37 -6
  322. data/ext/ice/cpp/src/Ice/ObserverHelper.cpp +9 -32
  323. data/ext/ice/cpp/src/Ice/OpaqueEndpointI.cpp +40 -18
  324. data/ext/ice/cpp/src/Ice/OpaqueEndpointI.h +14 -5
  325. data/ext/ice/cpp/src/Ice/OutgoingAsync.cpp +803 -365
  326. data/ext/ice/cpp/src/Ice/OutputStream.cpp +1399 -0
  327. data/ext/ice/cpp/src/Ice/Plugin.cpp +45 -6
  328. data/ext/ice/cpp/src/Ice/PluginF.cpp +27 -5
  329. data/ext/ice/cpp/src/Ice/PluginManagerI.cpp +13 -13
  330. data/ext/ice/cpp/src/Ice/PluginManagerI.h +5 -6
  331. data/ext/ice/cpp/src/Ice/Process.cpp +256 -114
  332. data/ext/ice/cpp/src/Ice/ProcessF.cpp +29 -6
  333. data/ext/ice/cpp/src/Ice/Properties.cpp +38 -8
  334. data/ext/ice/cpp/src/Ice/PropertiesAdmin.cpp +340 -328
  335. data/ext/ice/cpp/src/Ice/PropertiesAdminI.cpp +81 -17
  336. data/ext/ice/cpp/src/Ice/PropertiesAdminI.h +29 -5
  337. data/ext/ice/cpp/src/Ice/PropertiesF.cpp +29 -6
  338. data/ext/ice/cpp/src/Ice/PropertiesI.cpp +25 -26
  339. data/ext/ice/cpp/src/Ice/PropertiesI.h +8 -11
  340. data/ext/ice/cpp/src/Ice/PropertyNames.cpp +107 -50
  341. data/ext/ice/cpp/src/Ice/PropertyNames.h +4 -2
  342. data/ext/ice/cpp/src/Ice/Protocol.cpp +2 -2
  343. data/ext/ice/cpp/src/Ice/ProtocolInstance.cpp +37 -2
  344. data/ext/ice/cpp/src/Ice/ProtocolInstance.h +9 -20
  345. data/ext/ice/cpp/src/Ice/ProtocolInstanceF.h +1 -1
  346. data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.cpp +6 -1
  347. data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.h +3 -1
  348. data/ext/ice/cpp/src/Ice/ProtocolPluginFacadeF.h +1 -1
  349. data/ext/ice/cpp/src/Ice/Proxy.cpp +690 -964
  350. data/ext/ice/cpp/src/Ice/ProxyFactory.cpp +23 -32
  351. data/ext/ice/cpp/src/Ice/ProxyFactory.h +16 -11
  352. data/ext/ice/cpp/src/Ice/Reference.cpp +75 -69
  353. data/ext/ice/cpp/src/Ice/Reference.h +27 -22
  354. data/ext/ice/cpp/src/Ice/ReferenceFactory.cpp +18 -21
  355. data/ext/ice/cpp/src/Ice/ReferenceFactory.h +12 -12
  356. data/ext/ice/cpp/src/Ice/ReferenceFactoryF.h +1 -1
  357. data/ext/ice/cpp/src/Ice/RegisterPluginsInit.cpp +18 -4
  358. data/ext/ice/cpp/src/Ice/RegisterPluginsInit.h +1 -1
  359. data/ext/ice/cpp/src/Ice/RemoteLogger.cpp +672 -552
  360. data/ext/ice/cpp/src/Ice/ReplyStatus.h +1 -1
  361. data/ext/ice/cpp/src/Ice/RequestHandler.cpp +5 -3
  362. data/ext/ice/cpp/src/Ice/RequestHandler.h +10 -13
  363. data/ext/ice/cpp/src/Ice/RequestHandlerFactory.cpp +10 -6
  364. data/ext/ice/cpp/src/Ice/RequestHandlerFactory.h +2 -2
  365. data/ext/ice/cpp/src/Ice/ResponseHandler.cpp +3 -6
  366. data/ext/ice/cpp/src/Ice/ResponseHandler.h +16 -7
  367. data/ext/ice/cpp/src/Ice/RetryQueue.cpp +6 -12
  368. data/ext/ice/cpp/src/Ice/RetryQueue.h +7 -6
  369. data/ext/ice/cpp/src/Ice/RetryQueueF.h +1 -1
  370. data/ext/ice/cpp/src/Ice/Router.cpp +523 -474
  371. data/ext/ice/cpp/src/Ice/RouterF.cpp +29 -6
  372. data/ext/ice/cpp/src/Ice/RouterInfo.cpp +91 -70
  373. data/ext/ice/cpp/src/Ice/RouterInfo.h +43 -32
  374. data/ext/ice/cpp/src/Ice/RouterInfoF.h +1 -1
  375. data/ext/ice/cpp/src/{IceUtil → Ice}/SHA1.cpp +21 -21
  376. data/ext/ice/cpp/src/Ice/Selector.cpp +989 -923
  377. data/ext/ice/cpp/src/Ice/Selector.h +100 -147
  378. data/ext/ice/cpp/src/Ice/ServantLocator.cpp +37 -6
  379. data/ext/ice/cpp/src/Ice/ServantLocatorF.cpp +27 -5
  380. data/ext/ice/cpp/src/Ice/ServantManager.cpp +9 -9
  381. data/ext/ice/cpp/src/Ice/ServantManager.h +1 -1
  382. data/ext/ice/cpp/src/Ice/SharedContext.h +2 -2
  383. data/ext/ice/cpp/src/Ice/SliceChecksumDict.cpp +20 -6
  384. data/ext/ice/cpp/src/Ice/SliceChecksums.cpp +2 -2
  385. data/ext/ice/cpp/src/Ice/SlicedData.cpp +72 -20
  386. data/ext/ice/cpp/src/Ice/StreamSocket.cpp +173 -18
  387. data/ext/ice/cpp/src/Ice/StreamSocket.h +13 -4
  388. data/ext/ice/cpp/src/Ice/StringConverterPlugin.cpp +48 -17
  389. data/ext/ice/cpp/src/Ice/StringUtil.h +35 -0
  390. data/ext/ice/cpp/src/Ice/SysLoggerI.cpp +8 -4
  391. data/ext/ice/cpp/src/Ice/SysLoggerI.h +2 -3
  392. data/ext/ice/cpp/src/Ice/TcpAcceptor.cpp +158 -32
  393. data/ext/ice/cpp/src/Ice/TcpAcceptor.h +12 -5
  394. data/ext/ice/cpp/src/Ice/TcpConnector.cpp +1 -7
  395. data/ext/ice/cpp/src/Ice/TcpConnector.h +1 -2
  396. data/ext/ice/cpp/src/Ice/TcpEndpointI.cpp +40 -32
  397. data/ext/ice/cpp/src/Ice/TcpEndpointI.h +11 -8
  398. data/ext/ice/cpp/src/Ice/TcpTransceiver.cpp +12 -27
  399. data/ext/ice/cpp/src/Ice/TcpTransceiver.h +7 -10
  400. data/ext/ice/cpp/src/{IceUtil → Ice}/Thread.cpp +24 -41
  401. data/ext/ice/cpp/src/Ice/ThreadPool.cpp +175 -267
  402. data/ext/ice/cpp/src/Ice/ThreadPool.h +38 -43
  403. data/ext/ice/cpp/src/{IceUtil → Ice}/Timer.cpp +28 -21
  404. data/ext/ice/cpp/src/Ice/TraceLevels.cpp +2 -2
  405. data/ext/ice/cpp/src/Ice/TraceLevels.h +1 -1
  406. data/ext/ice/cpp/src/Ice/TraceLevelsF.h +2 -2
  407. data/ext/ice/cpp/src/Ice/TraceUtil.cpp +53 -31
  408. data/ext/ice/cpp/src/Ice/TraceUtil.h +13 -6
  409. data/ext/ice/cpp/src/Ice/Transceiver.cpp +1 -2
  410. data/ext/ice/cpp/src/Ice/Transceiver.h +8 -7
  411. data/ext/ice/cpp/src/Ice/TransceiverF.h +1 -1
  412. data/ext/ice/cpp/src/Ice/UdpConnector.cpp +2 -8
  413. data/ext/ice/cpp/src/Ice/UdpConnector.h +1 -2
  414. data/ext/ice/cpp/src/Ice/UdpEndpointI.cpp +92 -31
  415. data/ext/ice/cpp/src/Ice/UdpEndpointI.h +12 -4
  416. data/ext/ice/cpp/src/Ice/UdpTransceiver.cpp +150 -179
  417. data/ext/ice/cpp/src/Ice/UdpTransceiver.h +15 -17
  418. data/ext/ice/cpp/src/Ice/Value.cpp +81 -0
  419. data/ext/ice/cpp/src/Ice/ValueFactory.cpp +84 -0
  420. data/ext/ice/cpp/src/Ice/ValueFactoryManagerI.cpp +70 -0
  421. data/ext/ice/cpp/src/Ice/ValueFactoryManagerI.h +42 -0
  422. data/ext/ice/cpp/src/Ice/Version.cpp +24 -14
  423. data/ext/ice/cpp/src/Ice/VirtualShared.h +43 -0
  424. data/ext/ice/cpp/src/Ice/WSAcceptor.cpp +3 -9
  425. data/ext/ice/cpp/src/Ice/WSAcceptor.h +3 -7
  426. data/ext/ice/cpp/src/Ice/WSConnector.cpp +5 -11
  427. data/ext/ice/cpp/src/Ice/WSConnector.h +3 -6
  428. data/ext/ice/cpp/src/Ice/WSEndpoint.cpp +185 -80
  429. data/ext/ice/cpp/src/Ice/WSEndpoint.h +21 -31
  430. data/ext/ice/cpp/src/Ice/WSTransceiver.cpp +41 -37
  431. data/ext/ice/cpp/src/Ice/WSTransceiver.h +7 -21
  432. data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.cpp +526 -264
  433. data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.h +341 -455
  434. data/ext/ice/cpp/src/IceDiscovery/LocatorI.cpp +86 -26
  435. data/ext/ice/cpp/src/IceDiscovery/LocatorI.h +59 -23
  436. data/ext/ice/cpp/src/IceDiscovery/LookupI.cpp +315 -61
  437. data/ext/ice/cpp/src/IceDiscovery/LookupI.h +83 -36
  438. data/ext/ice/cpp/src/IceDiscovery/PluginI.cpp +57 -59
  439. data/ext/ice/cpp/src/IceDiscovery/PluginI.h +3 -3
  440. data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.cpp +396 -159
  441. data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.h +251 -355
  442. data/ext/ice/cpp/src/IceLocatorDiscovery/Plugin.h +52 -0
  443. data/ext/ice/cpp/src/IceLocatorDiscovery/PluginI.cpp +526 -131
  444. data/ext/ice/cpp/src/IceSSL/AcceptorI.cpp +19 -165
  445. data/ext/ice/cpp/src/IceSSL/AcceptorI.h +8 -17
  446. data/ext/ice/cpp/src/IceSSL/CertificateI.cpp +284 -0
  447. data/ext/ice/cpp/src/IceSSL/CertificateI.h +69 -0
  448. data/ext/ice/cpp/src/IceSSL/ConnectionInfo.cpp +39 -11
  449. data/ext/ice/cpp/src/{Ice/ObjectFactoryF.cpp → IceSSL/ConnectionInfoF.cpp} +31 -9
  450. data/ext/ice/cpp/src/IceSSL/ConnectorI.cpp +14 -56
  451. data/ext/ice/cpp/src/IceSSL/ConnectorI.h +6 -13
  452. data/ext/ice/cpp/src/IceSSL/EndpointI.cpp +205 -197
  453. data/ext/ice/cpp/src/IceSSL/EndpointI.h +41 -33
  454. data/ext/ice/cpp/src/IceSSL/EndpointInfo.cpp +39 -10
  455. data/ext/ice/cpp/src/IceSSL/Instance.cpp +1 -6
  456. data/ext/ice/cpp/src/IceSSL/Instance.h +7 -7
  457. data/ext/ice/cpp/src/IceSSL/InstanceF.h +11 -7
  458. data/ext/ice/cpp/src/IceSSL/OpenSSLCertificateI.cpp +588 -0
  459. data/ext/ice/cpp/src/IceSSL/OpenSSLEngine.cpp +117 -152
  460. data/ext/ice/cpp/src/IceSSL/OpenSSLEngine.h +64 -0
  461. data/ext/ice/cpp/src/IceSSL/OpenSSLEngineF.h +32 -0
  462. data/ext/ice/cpp/src/IceSSL/OpenSSLPluginI.cpp +132 -0
  463. data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.cpp +400 -89
  464. data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.h +36 -21
  465. data/ext/ice/cpp/src/IceSSL/OpenSSLUtil.cpp +291 -0
  466. data/ext/ice/cpp/src/IceSSL/OpenSSLUtil.h +63 -0
  467. data/ext/ice/cpp/src/IceSSL/PluginI.cpp +71 -41
  468. data/ext/ice/cpp/src/IceSSL/PluginI.h +13 -18
  469. data/ext/ice/cpp/src/IceSSL/RFC2253.cpp +9 -54
  470. data/ext/ice/cpp/src/IceSSL/RFC2253.h +7 -7
  471. data/ext/ice/cpp/src/IceSSL/SChannelCertificateI.cpp +585 -0
  472. data/ext/ice/cpp/src/IceSSL/SChannelEngine.cpp +491 -75
  473. data/ext/ice/cpp/src/IceSSL/SChannelEngine.h +126 -0
  474. data/ext/ice/cpp/src/IceSSL/SChannelEngineF.h +32 -0
  475. data/ext/ice/cpp/src/IceSSL/SChannelPluginI.cpp +78 -0
  476. data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.cpp +126 -169
  477. data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.h +19 -22
  478. data/ext/ice/cpp/src/IceSSL/SSLEngine.cpp +79 -74
  479. data/ext/ice/cpp/src/IceSSL/SSLEngine.h +24 -187
  480. data/ext/ice/cpp/src/IceSSL/SSLEngineF.h +4 -19
  481. data/ext/ice/cpp/src/IceSSL/SecureTransportCertificateI.cpp +862 -0
  482. data/ext/ice/cpp/src/IceSSL/SecureTransportEngine.cpp +56 -214
  483. data/ext/ice/cpp/src/IceSSL/SecureTransportEngine.h +60 -0
  484. data/ext/ice/cpp/src/IceSSL/SecureTransportEngineF.h +31 -0
  485. data/ext/ice/cpp/src/IceSSL/SecureTransportPluginI.cpp +80 -0
  486. data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.cpp +137 -144
  487. data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.h +25 -28
  488. data/ext/ice/cpp/src/IceSSL/SecureTransportUtil.cpp +857 -0
  489. data/ext/ice/cpp/src/IceSSL/SecureTransportUtil.h +46 -0
  490. data/ext/ice/cpp/src/IceSSL/TrustManager.cpp +9 -13
  491. data/ext/ice/cpp/src/IceSSL/TrustManager.h +4 -4
  492. data/ext/ice/cpp/src/IceSSL/TrustManagerF.h +3 -3
  493. data/ext/ice/cpp/src/IceSSL/UWPCertificateI.cpp +271 -0
  494. data/ext/ice/cpp/src/IceSSL/UWPEngine.cpp +343 -0
  495. data/ext/ice/cpp/src/IceSSL/UWPEngine.h +46 -0
  496. data/ext/ice/cpp/{include/Ice/ObjectFactoryManagerF.h → src/IceSSL/UWPEngineF.h} +13 -8
  497. data/ext/ice/cpp/src/IceSSL/UWPPluginI.cpp +94 -0
  498. data/ext/ice/cpp/src/IceSSL/UWPTransceiverI.cpp +388 -0
  499. data/ext/ice/cpp/src/IceSSL/UWPTransceiverI.h +76 -0
  500. data/ext/ice/cpp/src/IceSSL/Util.cpp +66 -1256
  501. data/ext/ice/cpp/src/IceSSL/Util.h +48 -137
  502. data/ext/ice/cpp/src/IceUtil/ConsoleUtil.cpp +162 -0
  503. data/ext/ice/cpp/src/IceUtil/ConvertUTF.cpp +22 -22
  504. data/ext/ice/cpp/src/IceUtil/ConvertUTF.h +34 -26
  505. data/ext/ice/cpp/src/IceUtil/CtrlCHandler.cpp +20 -31
  506. data/ext/ice/cpp/src/IceUtil/FileUtil.cpp +25 -116
  507. data/ext/ice/cpp/src/IceUtil/InputUtil.cpp +1 -1
  508. data/ext/ice/cpp/src/IceUtil/MutexProtocol.cpp +1 -1
  509. data/ext/ice/cpp/src/IceUtil/Options.cpp +23 -46
  510. data/ext/ice/cpp/src/IceUtil/OutputUtil.cpp +7 -6
  511. data/ext/ice/cpp/src/IceUtil/Random.cpp +13 -13
  512. data/ext/ice/cpp/src/IceUtil/RecMutex.cpp +3 -9
  513. data/ext/ice/cpp/src/IceUtil/Shared.cpp +8 -3
  514. data/ext/ice/cpp/src/IceUtil/StringConverter.cpp +501 -264
  515. data/ext/ice/cpp/src/IceUtil/StringUtil.cpp +540 -235
  516. data/ext/ice/cpp/src/IceUtil/ThreadException.cpp +37 -74
  517. data/ext/ice/cpp/src/IceUtil/Time.cpp +1 -1
  518. data/ext/ice/cpp/src/IceUtil/UUID.cpp +10 -10
  519. data/ext/ice/cpp/src/IceUtil/Unicode.cpp +98 -97
  520. data/ext/ice/cpp/src/IceUtil/Unicode.h +21 -35
  521. data/ext/ice/cpp/src/IceUtil/UtilException.cpp +838 -0
  522. data/ext/ice/cpp/src/Slice/CPlusPlusUtil.cpp +815 -163
  523. data/ext/ice/cpp/src/Slice/CPlusPlusUtil.h +76 -0
  524. data/ext/ice/cpp/src/Slice/Checksum.cpp +2 -2
  525. data/ext/ice/cpp/{include → src}/Slice/Checksum.h +2 -2
  526. data/ext/ice/cpp/src/Slice/FileTracker.cpp +25 -78
  527. data/ext/ice/cpp/{include → src}/Slice/FileTracker.h +9 -9
  528. data/ext/ice/cpp/src/Slice/Grammar.cpp +1994 -1943
  529. data/ext/ice/cpp/src/Slice/Grammar.h +44 -24
  530. data/ext/ice/cpp/src/Slice/GrammarUtil.h +14 -14
  531. data/ext/ice/cpp/src/Slice/JavaUtil.cpp +2658 -1927
  532. data/ext/ice/cpp/{include → src}/Slice/JavaUtil.h +178 -59
  533. data/ext/ice/cpp/src/Slice/MD5.cpp +1 -1
  534. data/ext/ice/cpp/src/Slice/MD5.h +1 -1
  535. data/ext/ice/cpp/src/Slice/MD5I.cpp +0 -1
  536. data/ext/ice/cpp/src/Slice/MD5I.h +1 -1
  537. data/ext/ice/cpp/src/Slice/PHPUtil.cpp +12 -15
  538. data/ext/ice/cpp/{include → src}/Slice/PHPUtil.h +6 -15
  539. data/ext/ice/cpp/src/Slice/Parser.cpp +802 -307
  540. data/ext/ice/cpp/{include → src}/Slice/Parser.h +76 -84
  541. data/ext/ice/cpp/src/Slice/Preprocessor.cpp +43 -21
  542. data/ext/ice/cpp/{include → src}/Slice/Preprocessor.h +7 -12
  543. data/ext/ice/cpp/src/Slice/Python.cpp +207 -86
  544. data/ext/ice/cpp/src/Slice/PythonUtil.cpp +683 -679
  545. data/ext/ice/cpp/{include → src}/Slice/PythonUtil.h +19 -8
  546. data/ext/ice/cpp/src/Slice/Ruby.cpp +38 -34
  547. data/ext/ice/cpp/src/Slice/RubyUtil.cpp +177 -445
  548. data/ext/ice/cpp/{include → src}/Slice/RubyUtil.h +6 -6
  549. data/ext/ice/cpp/src/Slice/Scanner.cpp +218 -306
  550. data/ext/ice/cpp/src/Slice/{Util.cpp → SliceUtil.cpp} +37 -64
  551. data/ext/ice/cpp/src/Slice/StringLiteralUtil.cpp +374 -0
  552. data/ext/ice/cpp/src/Slice/Util.h +54 -0
  553. data/ext/ice/mcpp/Makefile +5 -2
  554. data/ice.gemspec +2 -7
  555. data/lib/Glacier2.rb +1 -1
  556. data/lib/Glacier2/Metrics.rb +7 -46
  557. data/lib/Glacier2/PermissionsVerifier.rb +24 -95
  558. data/lib/Glacier2/PermissionsVerifierF.rb +3 -3
  559. data/lib/Glacier2/Router.rb +32 -74
  560. data/lib/Glacier2/RouterF.rb +3 -3
  561. data/lib/Glacier2/SSLInfo.rb +4 -7
  562. data/lib/Glacier2/Session.rb +88 -307
  563. data/lib/Ice.rb +83 -52
  564. data/lib/Ice/BuiltinSequences.rb +4 -4
  565. data/lib/Ice/Communicator.rb +56 -58
  566. data/lib/Ice/CommunicatorF.rb +3 -3
  567. data/lib/Ice/Connection.rb +153 -162
  568. data/lib/Ice/ConnectionF.rb +3 -3
  569. data/lib/Ice/Current.rb +4 -11
  570. data/lib/Ice/Endpoint.rb +57 -133
  571. data/lib/Ice/EndpointF.rb +3 -3
  572. data/lib/Ice/EndpointTypes.rb +3 -7
  573. data/lib/Ice/FacetMap.rb +4 -4
  574. data/lib/Ice/Identity.rb +5 -8
  575. data/lib/Ice/ImplicitContext.rb +5 -34
  576. data/lib/Ice/ImplicitContextF.rb +3 -3
  577. data/lib/Ice/Instrumentation.rb +23 -275
  578. data/lib/Ice/InstrumentationF.rb +3 -3
  579. data/lib/Ice/LocalException.rb +95 -141
  580. data/lib/Ice/Locator.rb +51 -165
  581. data/lib/Ice/LocatorF.rb +3 -3
  582. data/lib/Ice/Logger.rb +5 -34
  583. data/lib/Ice/LoggerF.rb +3 -3
  584. data/lib/Ice/Metrics.rb +61 -416
  585. data/lib/Ice/ObjectAdapter.rb +34 -0
  586. data/lib/Ice/ObjectAdapterF.rb +3 -3
  587. data/lib/Ice/ObjectFactory.rb +5 -30
  588. data/lib/Ice/Plugin.rb +7 -60
  589. data/lib/Ice/PluginF.rb +3 -3
  590. data/lib/Ice/Process.rb +16 -52
  591. data/lib/Ice/ProcessF.rb +3 -3
  592. data/lib/Ice/Properties.rb +5 -41
  593. data/lib/Ice/PropertiesAdmin.rb +19 -56
  594. data/lib/Ice/PropertiesF.rb +3 -3
  595. data/lib/Ice/RemoteLogger.rb +34 -115
  596. data/lib/Ice/Router.rb +29 -101
  597. data/lib/Ice/RouterF.rb +3 -3
  598. data/lib/Ice/ServantLocator.rb +31 -0
  599. data/lib/Ice/{ObjectFactoryF.rb → ServantLocatorF.rb} +6 -6
  600. data/lib/Ice/SliceChecksumDict.rb +3 -3
  601. data/lib/Ice/ValueFactory.rb +33 -0
  602. data/lib/Ice/Version.rb +5 -11
  603. data/lib/IceBox.rb +1 -1
  604. data/lib/IceBox/IceBox.rb +44 -148
  605. data/lib/IceGrid.rb +1 -4
  606. data/lib/IceGrid/Admin.rb +551 -427
  607. data/lib/IceGrid/Descriptor.rb +62 -529
  608. data/lib/IceGrid/Exception.rb +24 -45
  609. data/lib/IceGrid/FileParser.rb +14 -50
  610. data/lib/IceGrid/PluginFacade.rb +40 -0
  611. data/lib/IceGrid/Registry.rb +151 -58
  612. data/lib/IceGrid/Session.rb +25 -64
  613. data/lib/IceGrid/UserAccountMapper.rb +14 -50
  614. data/lib/IcePatch2.rb +1 -1
  615. data/lib/IcePatch2/FileInfo.rb +5 -11
  616. data/lib/IcePatch2/FileServer.rb +33 -76
  617. data/lib/IceStorm.rb +1 -1
  618. data/lib/IceStorm/IceStorm.rb +79 -206
  619. data/lib/IceStorm/Metrics.rb +11 -89
  620. data/slice/Glacier2/Metrics.ice +8 -4
  621. data/slice/Glacier2/PermissionsVerifier.ice +10 -7
  622. data/slice/Glacier2/PermissionsVerifierF.ice +7 -4
  623. data/slice/Glacier2/Router.ice +10 -8
  624. data/slice/Glacier2/RouterF.ice +7 -4
  625. data/slice/Glacier2/SSLInfo.ice +8 -5
  626. data/slice/Glacier2/Session.ice +15 -13
  627. data/slice/Ice/BuiltinSequences.ice +7 -4
  628. data/slice/Ice/Communicator.ice +141 -66
  629. data/slice/Ice/CommunicatorF.ice +7 -4
  630. data/slice/Ice/Connection.ice +183 -86
  631. data/slice/Ice/ConnectionF.ice +7 -4
  632. data/slice/Ice/Current.ice +13 -9
  633. data/slice/Ice/Endpoint.ice +63 -14
  634. data/slice/Ice/EndpointF.ice +7 -4
  635. data/slice/Ice/EndpointTypes.ice +8 -6
  636. data/slice/Ice/FacetMap.ice +7 -4
  637. data/slice/Ice/Identity.ice +13 -5
  638. data/slice/Ice/ImplicitContext.ice +20 -18
  639. data/slice/Ice/ImplicitContextF.ice +7 -4
  640. data/slice/Ice/Instrumentation.ice +20 -19
  641. data/slice/Ice/InstrumentationF.ice +8 -5
  642. data/slice/Ice/LocalException.ice +87 -87
  643. data/slice/Ice/Locator.ice +19 -18
  644. data/slice/Ice/LocatorF.ice +7 -4
  645. data/slice/Ice/Logger.ice +9 -7
  646. data/slice/Ice/LoggerF.ice +7 -4
  647. data/slice/Ice/Metrics.ice +18 -14
  648. data/slice/Ice/ObjectAdapter.ice +30 -13
  649. data/slice/Ice/ObjectAdapterF.ice +7 -4
  650. data/slice/Ice/ObjectFactory.ice +15 -12
  651. data/slice/Ice/Plugin.ice +9 -6
  652. data/slice/Ice/PluginF.ice +8 -5
  653. data/slice/Ice/Process.ice +9 -6
  654. data/slice/Ice/ProcessF.ice +7 -4
  655. data/slice/Ice/Properties.ice +15 -12
  656. data/slice/Ice/PropertiesAdmin.ice +9 -5
  657. data/slice/Ice/PropertiesF.ice +7 -4
  658. data/slice/Ice/RemoteLogger.ice +33 -24
  659. data/slice/Ice/Router.ice +16 -7
  660. data/slice/Ice/RouterF.ice +7 -4
  661. data/slice/Ice/ServantLocator.ice +13 -10
  662. data/slice/Ice/ServantLocatorF.ice +7 -4
  663. data/slice/Ice/SliceChecksumDict.ice +7 -4
  664. data/slice/Ice/ValueFactory.ice +127 -0
  665. data/slice/Ice/Version.ice +9 -5
  666. data/slice/IceBT/ConnectionInfo.ice +53 -0
  667. data/slice/IceBT/EndpointInfo.ice +51 -0
  668. data/slice/IceBT/Types.ice +39 -0
  669. data/slice/IceBox/IceBox.ice +20 -21
  670. data/slice/IceDiscovery/IceDiscovery.ice +9 -5
  671. data/slice/IceGrid/Admin.ice +390 -30
  672. data/slice/IceGrid/Descriptor.ice +37 -29
  673. data/slice/IceGrid/Exception.ice +33 -27
  674. data/slice/IceGrid/FileParser.ice +9 -6
  675. data/slice/IceGrid/PluginFacade.ice +11 -9
  676. data/slice/IceGrid/Registry.ice +139 -16
  677. data/slice/IceGrid/Session.ice +10 -8
  678. data/slice/IceGrid/UserAccountMapper.ice +9 -6
  679. data/slice/IceIAP/ConnectionInfo.ice +70 -0
  680. data/slice/IceIAP/EndpointInfo.ice +64 -0
  681. data/slice/IceLocatorDiscovery/IceLocatorDiscovery.ice +9 -7
  682. data/slice/IcePatch2/FileInfo.ice +9 -8
  683. data/slice/IcePatch2/FileServer.ice +17 -13
  684. data/slice/IceSSL/ConnectionInfo.ice +14 -17
  685. data/slice/IceSSL/ConnectionInfoF.ice +24 -0
  686. data/slice/IceSSL/EndpointInfo.ice +9 -30
  687. data/slice/IceStorm/IceStorm.ice +22 -18
  688. data/slice/IceStorm/Metrics.ice +9 -5
  689. metadata +154 -120
  690. data/ext/ObjectFactory.cpp +0 -140
  691. data/ext/ObjectFactory.h +0 -50
  692. data/ext/ice/cpp/include/Ice/BasicStream.h +0 -1335
  693. data/ext/ice/cpp/include/Ice/Communicator.h +0 -200
  694. data/ext/ice/cpp/include/Ice/Connection.h +0 -497
  695. data/ext/ice/cpp/include/Ice/DeprecatedStringConverter.h +0 -62
  696. data/ext/ice/cpp/include/Ice/Endpoint.h +0 -341
  697. data/ext/ice/cpp/include/Ice/Identity.h +0 -168
  698. data/ext/ice/cpp/include/Ice/Instrumentation.h +0 -365
  699. data/ext/ice/cpp/include/Ice/LocalException.h +0 -1030
  700. data/ext/ice/cpp/include/Ice/Locator.h +0 -2193
  701. data/ext/ice/cpp/include/Ice/Metrics.h +0 -2974
  702. data/ext/ice/cpp/include/Ice/ObjectAdapter.h +0 -168
  703. data/ext/ice/cpp/include/Ice/ObjectFactory.h +0 -92
  704. data/ext/ice/cpp/include/Ice/ObjectFactoryF.h +0 -66
  705. data/ext/ice/cpp/include/Ice/Outgoing.h +0 -225
  706. data/ext/ice/cpp/include/Ice/Plugin.h +0 -125
  707. data/ext/ice/cpp/include/Ice/Process.h +0 -574
  708. data/ext/ice/cpp/include/Ice/PropertiesAdmin.h +0 -830
  709. data/ext/ice/cpp/include/Ice/RemoteLogger.h +0 -1500
  710. data/ext/ice/cpp/include/Ice/Router.h +0 -1159
  711. data/ext/ice/cpp/include/Ice/Stream.h +0 -447
  712. data/ext/ice/cpp/include/Ice/StreamF.h +0 -30
  713. data/ext/ice/cpp/include/Ice/Version.h +0 -262
  714. data/ext/ice/cpp/include/IceSSL/ConnectionInfo.h +0 -158
  715. data/ext/ice/cpp/include/IceSSL/EndpointInfo.h +0 -142
  716. data/ext/ice/cpp/include/IceUtil/AbstractMutex.h +0 -119
  717. data/ext/ice/cpp/include/IceUtil/Cache.h +0 -362
  718. data/ext/ice/cpp/include/Slice/CPlusPlusUtil.h +0 -65
  719. data/ext/ice/cpp/include/Slice/CsUtil.h +0 -92
  720. data/ext/ice/cpp/include/Slice/DotNetNames.h +0 -34
  721. data/ext/ice/cpp/include/Slice/ObjCUtil.h +0 -127
  722. data/ext/ice/cpp/include/Slice/Util.h +0 -56
  723. data/ext/ice/cpp/src/Ice/BasicStream.cpp +0 -3428
  724. data/ext/ice/cpp/src/Ice/DeprecatedStringConverter.cpp +0 -62
  725. data/ext/ice/cpp/src/Ice/ObjectFactoryManager.cpp +0 -139
  726. data/ext/ice/cpp/src/Ice/ObjectFactoryManager.h +0 -43
  727. data/ext/ice/cpp/src/Ice/Outgoing.cpp +0 -694
  728. data/ext/ice/cpp/src/Ice/Stream.cpp +0 -53
  729. data/ext/ice/cpp/src/Ice/StreamI.cpp +0 -832
  730. data/ext/ice/cpp/src/Ice/StreamI.h +0 -198
  731. data/ext/ice/cpp/src/IceSSL/Certificate.cpp +0 -1336
  732. data/ext/ice/cpp/src/IceUtil/Exception.cpp +0 -792
  733. data/ext/ice/cpp/src/IceUtil/FileUtil.h +0 -185
  734. data/ext/ice/cpp/src/Slice/CsUtil.cpp +0 -2660
  735. data/ext/ice/cpp/src/Slice/DotNetNames.cpp +0 -146
  736. data/ext/ice/cpp/src/Slice/ObjCUtil.cpp +0 -1310
  737. data/lib/IceGrid/Locator.rb +0 -106
  738. data/lib/IceGrid/Observer.rb +0 -572
  739. data/lib/IceGrid/Query.rb +0 -169
  740. data/slice/Freeze/BackgroundSaveEvictor.ice +0 -111
  741. data/slice/Freeze/CatalogData.ice +0 -49
  742. data/slice/Freeze/Connection.ice +0 -121
  743. data/slice/Freeze/DB.ice +0 -37
  744. data/slice/Freeze/Evictor.ice +0 -346
  745. data/slice/Freeze/EvictorF.ice +0 -22
  746. data/slice/Freeze/EvictorStorage.ice +0 -72
  747. data/slice/Freeze/Exception.ice +0 -100
  748. data/slice/Freeze/Transaction.ice +0 -58
  749. data/slice/Freeze/TransactionalEvictor.ice +0 -50
  750. data/slice/IceGrid/Locator.ice +0 -57
  751. data/slice/IceGrid/Observer.ice +0 -395
  752. data/slice/IceGrid/Query.ice +0 -131
@@ -1,6 +1,6 @@
1
1
  // **********************************************************************
2
2
  //
3
- // Copyright (c) 2003-2018 ZeroC, Inc. All rights reserved.
3
+ // Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
4
4
  //
5
5
  // This copy of Ice is licensed to you under the terms described in the
6
6
  // ICE_LICENSE file included in this distribution.
@@ -17,91 +17,595 @@
17
17
  #include <Ice/ImplicitContextI.h>
18
18
  #include <Ice/ThreadPool.h>
19
19
  #include <Ice/RetryQueue.h>
20
+ #include <Ice/ConnectionFactory.h>
21
+ #include <Ice/ObjectAdapterFactory.h>
22
+ #include <Ice/LoggerUtil.h>
20
23
 
21
24
  using namespace std;
22
25
  using namespace Ice;
23
26
  using namespace IceInternal;
24
27
 
28
+ #ifndef ICE_CPP11_MAPPING
25
29
  IceUtil::Shared* IceInternal::upCast(OutgoingAsyncBase* p) { return p; }
26
30
  IceUtil::Shared* IceInternal::upCast(ProxyOutgoingAsyncBase* p) { return p; }
27
31
  IceUtil::Shared* IceInternal::upCast(OutgoingAsync* p) { return p; }
28
- IceUtil::Shared* IceInternal::upCast(CommunicatorFlushBatchAsync* p) { return p; }
32
+ #endif
33
+
34
+ const unsigned char OutgoingAsyncBase::OK = 0x1;
35
+ const unsigned char OutgoingAsyncBase::Sent = 0x2;
36
+ #ifndef ICE_CPP11_MAPPING
37
+ const unsigned char OutgoingAsyncBase::Done = 0x4;
38
+ const unsigned char OutgoingAsyncBase::EndCalled = 0x8;
39
+ #endif
40
+
41
+ OutgoingAsyncCompletionCallback::~OutgoingAsyncCompletionCallback()
42
+ {
43
+ // Out of line to avoid weak vtable
44
+ }
29
45
 
30
46
  bool
31
47
  OutgoingAsyncBase::sent()
32
48
  {
33
- return sent(true);
49
+ return sentImpl(true);
50
+ }
51
+
52
+ bool
53
+ OutgoingAsyncBase::exception(const Exception& ex)
54
+ {
55
+ return exceptionImpl(ex);
56
+ }
57
+
58
+ bool
59
+ OutgoingAsyncBase::response()
60
+ {
61
+ assert(false); // Must be overriden by request that can handle responses
62
+ return false;
63
+ }
64
+
65
+ void
66
+ OutgoingAsyncBase::invokeSentAsync()
67
+ {
68
+ class AsynchronousSent : public DispatchWorkItem
69
+ {
70
+ public:
71
+
72
+ AsynchronousSent(const ConnectionPtr& connection, const OutgoingAsyncBasePtr& outAsync) :
73
+ DispatchWorkItem(connection), _outAsync(outAsync)
74
+ {
75
+ }
76
+
77
+ virtual void
78
+ run()
79
+ {
80
+ _outAsync->invokeSent();
81
+ }
82
+
83
+ private:
84
+
85
+ const OutgoingAsyncBasePtr _outAsync;
86
+ };
87
+
88
+ //
89
+ // This is called when it's not safe to call the sent callback
90
+ // synchronously from this thread. Instead the exception callback
91
+ // is called asynchronously from the client thread pool.
92
+ //
93
+ try
94
+ {
95
+ _instance->clientThreadPool()->dispatch(new AsynchronousSent(_cachedConnection, ICE_SHARED_FROM_THIS));
96
+ }
97
+ catch(const Ice::CommunicatorDestroyedException&)
98
+ {
99
+ }
100
+ }
101
+
102
+ void
103
+ OutgoingAsyncBase::invokeExceptionAsync()
104
+ {
105
+ class AsynchronousException : public DispatchWorkItem
106
+ {
107
+ public:
108
+
109
+ AsynchronousException(const ConnectionPtr& c, const OutgoingAsyncBasePtr& outAsync) :
110
+ DispatchWorkItem(c), _outAsync(outAsync)
111
+ {
112
+ }
113
+
114
+ virtual void
115
+ run()
116
+ {
117
+ _outAsync->invokeException();
118
+ }
119
+
120
+ private:
121
+
122
+ const OutgoingAsyncBasePtr _outAsync;
123
+ };
124
+
125
+ //
126
+ // CommunicatorDestroyedException is the only exception that can propagate directly from this method.
127
+ //
128
+ _instance->clientThreadPool()->dispatch(new AsynchronousException(_cachedConnection, ICE_SHARED_FROM_THIS));
129
+ }
130
+
131
+ void
132
+ OutgoingAsyncBase::invokeResponseAsync()
133
+ {
134
+ class AsynchronousResponse : public DispatchWorkItem
135
+ {
136
+ public:
137
+
138
+ AsynchronousResponse(const ConnectionPtr& connection, const OutgoingAsyncBasePtr& outAsync) :
139
+ DispatchWorkItem(connection), _outAsync(outAsync)
140
+ {
141
+ }
142
+
143
+ virtual void
144
+ run()
145
+ {
146
+ _outAsync->invokeResponse();
147
+ }
148
+
149
+ private:
150
+
151
+ const OutgoingAsyncBasePtr _outAsync;
152
+ };
153
+
154
+ //
155
+ // CommunicatorDestroyedException is the only exception that can propagate directly from this method.
156
+ //
157
+ _instance->clientThreadPool()->dispatch(new AsynchronousResponse(_cachedConnection, ICE_SHARED_FROM_THIS));
158
+ }
159
+
160
+ void
161
+ OutgoingAsyncBase::invokeSent()
162
+ {
163
+ try
164
+ {
165
+ handleInvokeSent(_sentSynchronously, this);
166
+ }
167
+ catch(const std::exception& ex)
168
+ {
169
+ warning(ex);
170
+ }
171
+ catch(...)
172
+ {
173
+ warning();
174
+ }
175
+
176
+ if(_observer && _doneInSent)
177
+ {
178
+ _observer.detach();
179
+ }
180
+ }
181
+
182
+ void
183
+ OutgoingAsyncBase::invokeException()
184
+ {
185
+ try
186
+ {
187
+ handleInvokeException(*_ex, this);
188
+ }
189
+ catch(const std::exception& ex)
190
+ {
191
+ warning(ex);
192
+ }
193
+ catch(...)
194
+ {
195
+ warning();
196
+ }
197
+
198
+ _observer.detach();
199
+ }
200
+
201
+ void
202
+ OutgoingAsyncBase::invokeResponse()
203
+ {
204
+ if(_ex)
205
+ {
206
+ invokeException();
207
+ return;
208
+ }
209
+
210
+ try
211
+ {
212
+ #ifdef ICE_CPP11_MAPPING
213
+ try
214
+ {
215
+ handleInvokeResponse(_state & OK, this);
216
+ }
217
+ catch(const Ice::Exception& ex)
218
+ {
219
+ if(handleException(ex))
220
+ {
221
+ handleInvokeException(ex, this);
222
+ }
223
+ }
224
+ catch(const exception_ptr& ex)
225
+ {
226
+ rethrow_exception(ex);
227
+ }
228
+ #else
229
+ handleInvokeResponse(_state & OK, this);
230
+ #endif
231
+ }
232
+ catch(const std::exception& ex)
233
+ {
234
+ warning(ex);
235
+ }
236
+ catch(...)
237
+ {
238
+ warning();
239
+ }
240
+
241
+ _observer.detach();
242
+ }
243
+
244
+ void
245
+ OutgoingAsyncBase::cancelable(const CancellationHandlerPtr& handler)
246
+ {
247
+ Lock sync(_m);
248
+ if(_cancellationException)
249
+ {
250
+ try
251
+ {
252
+ _cancellationException->ice_throw();
253
+ }
254
+ catch(const Ice::LocalException&)
255
+ {
256
+ _cancellationException.reset();
257
+ throw;
258
+ }
259
+ }
260
+ _cancellationHandler = handler;
261
+ }
262
+
263
+ void
264
+ OutgoingAsyncBase::cancel()
265
+ {
266
+ cancel(Ice::InvocationCanceledException(__FILE__, __LINE__));
267
+ }
268
+
269
+ OutgoingAsyncBase::OutgoingAsyncBase(const InstancePtr& instance) :
270
+ _instance(instance),
271
+ _sentSynchronously(false),
272
+ _doneInSent(false),
273
+ _state(0),
274
+ _os(instance.get(), Ice::currentProtocolEncoding),
275
+ _is(instance.get(), Ice::currentProtocolEncoding)
276
+ {
277
+ }
278
+
279
+ bool
280
+ OutgoingAsyncBase::sentImpl(bool done)
281
+ {
282
+ Lock sync(_m);
283
+ bool alreadySent = (_state & Sent) > 0;
284
+ _state |= Sent;
285
+ if(done)
286
+ {
287
+ _doneInSent = true;
288
+ _childObserver.detach();
289
+ _cancellationHandler = 0;
290
+ }
291
+
292
+ #ifndef ICE_CPP11_MAPPING
293
+ if(done)
294
+ {
295
+ _state |= Done | OK;
296
+ }
297
+ _m.notifyAll();
298
+ #endif
299
+
300
+ bool invoke = handleSent(done, alreadySent);
301
+ if(!invoke && _doneInSent)
302
+ {
303
+ _observer.detach();
304
+ }
305
+ return invoke;
306
+ }
307
+
308
+ bool
309
+ OutgoingAsyncBase::exceptionImpl(const Exception& ex)
310
+ {
311
+ Lock sync(_m);
312
+ ICE_SET_EXCEPTION_FROM_CLONE(_ex, ex.ice_clone());
313
+ if(_childObserver)
314
+ {
315
+ _childObserver.failed(ex.ice_id());
316
+ _childObserver.detach();
317
+ }
318
+ _cancellationHandler = 0;
319
+ _observer.failed(ex.ice_id());
320
+
321
+ #ifndef ICE_CPP11_MAPPING
322
+ _state |= Done;
323
+ _m.notifyAll();
324
+ #endif
325
+
326
+ bool invoke = handleException(ex);
327
+ if(!invoke)
328
+ {
329
+ _observer.detach();
330
+ }
331
+ return invoke;
332
+ }
333
+
334
+ bool
335
+ OutgoingAsyncBase::responseImpl(bool ok, bool invoke)
336
+ {
337
+ Lock sync(_m);
338
+ if(ok)
339
+ {
340
+ _state |= OK;
341
+ }
342
+
343
+ _cancellationHandler = 0;
344
+
345
+ #ifndef ICE_CPP11_MAPPING
346
+ _state |= Done;
347
+ _m.notifyAll();
348
+ #endif
349
+
350
+ try
351
+ {
352
+ invoke &= handleResponse(ok);
353
+ }
354
+ catch(const Ice::Exception& ex)
355
+ {
356
+ ICE_SET_EXCEPTION_FROM_CLONE(_ex, ex.ice_clone());
357
+ invoke = handleException(ex);
358
+ }
359
+ if(!invoke)
360
+ {
361
+ _observer.detach();
362
+ }
363
+ return invoke;
364
+ }
365
+
366
+ void
367
+ OutgoingAsyncBase::cancel(const Ice::LocalException& ex)
368
+ {
369
+ CancellationHandlerPtr handler;
370
+ {
371
+ Lock sync(_m);
372
+ ICE_SET_EXCEPTION_FROM_CLONE(_cancellationException, ex.ice_clone());
373
+ if(!_cancellationHandler)
374
+ {
375
+ return;
376
+ }
377
+ handler = _cancellationHandler;
378
+ }
379
+ handler->asyncRequestCanceled(ICE_SHARED_FROM_THIS, ex);
380
+ }
381
+
382
+ #ifndef ICE_CPP11_MAPPING
383
+
384
+ Int
385
+ OutgoingAsyncBase::getHash() const
386
+ {
387
+ return static_cast<Int>(reinterpret_cast<Long>(this) >> 4);
388
+ }
389
+
390
+ CommunicatorPtr
391
+ OutgoingAsyncBase::getCommunicator() const
392
+ {
393
+ return 0;
394
+ }
395
+
396
+ ConnectionPtr
397
+ OutgoingAsyncBase::getConnection() const
398
+ {
399
+ return 0;
400
+ }
401
+
402
+ ObjectPrxPtr
403
+ OutgoingAsyncBase::getProxy() const
404
+ {
405
+ return 0;
406
+ }
407
+
408
+ Ice::LocalObjectPtr
409
+ OutgoingAsyncBase::getCookie() const
410
+ {
411
+ return _cookie;
412
+ }
413
+
414
+ const std::string&
415
+ OutgoingAsyncBase::getOperation() const
416
+ {
417
+ assert(false); // Must be overriden
418
+ static string empty;
419
+ return empty;
420
+ }
421
+
422
+ bool
423
+ OutgoingAsyncBase::isCompleted() const
424
+ {
425
+ Lock sync(_m);
426
+ return (_state & Done) > 0;
427
+ }
428
+
429
+ void
430
+ OutgoingAsyncBase::waitForCompleted()
431
+ {
432
+ Lock sync(_m);
433
+ while(!(_state & Done))
434
+ {
435
+ _m.wait();
436
+ }
34
437
  }
35
438
 
36
439
  bool
37
- OutgoingAsyncBase::completed(const Exception& ex)
440
+ OutgoingAsyncBase::isSent() const
38
441
  {
39
- return finished(ex);
442
+ Lock sync(_m);
443
+ return (_state & Sent) > 0;
40
444
  }
41
445
 
42
- bool
43
- OutgoingAsyncBase::completed()
44
- {
45
- assert(false); // Must be overriden by request that can handle responses
46
- return false;
47
- }
446
+ void
447
+ OutgoingAsyncBase::waitForSent()
448
+ {
449
+ Lock sync(_m);
450
+ while(!(_state & Sent) && !_ex.get())
451
+ {
452
+ _m.wait();
453
+ }
454
+ }
455
+
456
+ bool
457
+ OutgoingAsyncBase::sentSynchronously() const
458
+ {
459
+ return _sentSynchronously;
460
+ }
461
+
462
+ void
463
+ OutgoingAsyncBase::throwLocalException() const
464
+ {
465
+ Lock sync(_m);
466
+ if(_ex.get())
467
+ {
468
+ _ex->ice_throw();
469
+ }
470
+ }
471
+
472
+ bool
473
+ OutgoingAsyncBase::_waitForResponse()
474
+ {
475
+ Lock sync(_m);
476
+ if(_state & EndCalled)
477
+ {
478
+ throw IceUtil::IllegalArgumentException(__FILE__, __LINE__, "end_ method called more than once");
479
+ }
480
+ _state |= EndCalled;
481
+ while(!(_state & Done))
482
+ {
483
+ _m.wait();
484
+ }
485
+
486
+ if(_ex.get())
487
+ {
488
+ _ex->ice_throw();
489
+ }
490
+ return _state & OK;
491
+ }
492
+
493
+ Ice::InputStream*
494
+ OutgoingAsyncBase::_startReadParams()
495
+ {
496
+ _is.startEncapsulation();
497
+ return &_is;
498
+ }
499
+
500
+ void
501
+ OutgoingAsyncBase::_endReadParams()
502
+ {
503
+ _is.endEncapsulation();
504
+ }
505
+
506
+ void
507
+ OutgoingAsyncBase::_readEmptyParams()
508
+ {
509
+ _is.skipEmptyEncapsulation();
510
+ }
511
+
512
+ void
513
+ OutgoingAsyncBase::_readParamEncaps(const ::Ice::Byte*& encaps, ::Ice::Int& sz)
514
+ {
515
+ _is.readEncapsulation(encaps, sz);
516
+ }
517
+
518
+ void
519
+ OutgoingAsyncBase::_throwUserException()
520
+ {
521
+ try
522
+ {
523
+ _is.startEncapsulation();
524
+ _is.throwException();
525
+ }
526
+ catch(const Ice::UserException&)
527
+ {
528
+ _is.endEncapsulation();
529
+ throw;
530
+ }
531
+ }
532
+
533
+ void
534
+ OutgoingAsyncBase::_scheduleCallback(const CallbackPtr& cb)
535
+ {
536
+ //
537
+ // NOTE: for internal use only. This should only be called when the invocation has
538
+ // completed. Accessing _cachedConnection is not safe otherwise.
539
+ //
540
+
541
+ class WorkItem : public DispatchWorkItem
542
+ {
543
+ public:
544
+
545
+ WorkItem(const ConnectionPtr& connection, const CallbackPtr& cb) :
546
+ DispatchWorkItem(connection), _cb(cb)
547
+ {
548
+ }
549
+
550
+ virtual void run()
551
+ {
552
+ _cb->run();
553
+ }
554
+
555
+ private:
556
+
557
+ CallbackPtr _cb;
558
+ };
48
559
 
49
- BasicStream*
50
- OutgoingAsyncBase::getIs()
51
- {
52
- return 0; // Must be overriden by request that can handle responses
560
+ //
561
+ // CommunicatorDestroyedException is the only exception that can propagate directly from this method.
562
+ //
563
+ _instance->clientThreadPool()->dispatch(new WorkItem(_cachedConnection, cb));
53
564
  }
54
565
 
55
- OutgoingAsyncBase::OutgoingAsyncBase(const CommunicatorPtr& communicator,
56
- const InstancePtr& instance,
57
- const string& operation,
58
- const CallbackBasePtr& delegate,
59
- const LocalObjectPtr& cookie) :
60
- AsyncResult(communicator, instance, operation, delegate, cookie),
61
- _os(instance.get(), Ice::currentProtocolEncoding)
62
- {
63
- }
566
+ #endif
64
567
 
65
- bool
66
- OutgoingAsyncBase::sent(bool done)
568
+ void
569
+ OutgoingAsyncBase::warning(const std::exception& exc) const
67
570
  {
68
- if(done)
571
+ if(_instance->initializationData().properties->getPropertyAsIntWithDefault("Ice.Warn.AMICallback", 1) > 0)
69
572
  {
70
- _childObserver.detach();
573
+ Ice::Warning out(_instance->initializationData().logger);
574
+ const Ice::Exception* ex = dynamic_cast<const Ice::Exception*>(&exc);
575
+ if(ex)
576
+ {
577
+ out << "Ice::Exception raised by AMI callback:\n" << *ex;
578
+ }
579
+ else
580
+ {
581
+ out << "std::exception raised by AMI callback:\n" << exc.what();
582
+ }
71
583
  }
72
- return AsyncResult::sent(done);
73
584
  }
74
585
 
75
- bool
76
- OutgoingAsyncBase::finished(const Exception& ex)
586
+ void
587
+ OutgoingAsyncBase::warning() const
77
588
  {
78
- if(_childObserver)
589
+ if(_instance->initializationData().properties->getPropertyAsIntWithDefault("Ice.Warn.AMICallback", 1) > 0)
79
590
  {
80
- _childObserver.failed(ex.ice_name());
81
- _childObserver.detach();
591
+ Ice::Warning out(_instance->initializationData().logger);
592
+ out << "unknown exception raised by AMI callback";
82
593
  }
83
- return AsyncResult::finished(ex);
84
- }
85
-
86
- Ice::ObjectPrx
87
- ProxyOutgoingAsyncBase::getProxy() const
88
- {
89
- return _proxy;
90
594
  }
91
595
 
92
596
  bool
93
- ProxyOutgoingAsyncBase::completed(const Exception& exc)
597
+ ProxyOutgoingAsyncBase::exception(const Exception& exc)
94
598
  {
95
599
  if(_childObserver)
96
600
  {
97
- _childObserver.failed(exc.ice_name());
601
+ _childObserver.failed(exc.ice_id());
98
602
  _childObserver.detach();
99
603
  }
100
604
 
101
605
  _cachedConnection = 0;
102
- if(_proxy->__reference()->getInvocationTimeout() == -2)
606
+ if(_proxy->_getReference()->getInvocationTimeout() == -2)
103
607
  {
104
- _instance->timer()->cancel(this);
608
+ _instance->timer()->cancel(ICE_SHARED_FROM_THIS);
105
609
  }
106
610
 
107
611
  //
@@ -115,13 +619,27 @@ ProxyOutgoingAsyncBase::completed(const Exception& exc)
115
619
  // the retry interval is 0. This method can be called with the
116
620
  // connection locked so we can't just retry here.
117
621
  //
118
- _instance->retryQueue()->add(this, handleException(exc));
622
+ _instance->retryQueue()->add(ICE_SHARED_FROM_THIS, _proxy->_handleException(exc, _handler, _mode, _sent, _cnt));
119
623
  return false;
120
624
  }
121
625
  catch(const Exception& ex)
122
626
  {
123
- return finished(ex); // No retries, we're done
627
+ return exceptionImpl(ex); // No retries, we're done
628
+ }
629
+ }
630
+
631
+ void
632
+ ProxyOutgoingAsyncBase::cancelable(const CancellationHandlerPtr& handler)
633
+ {
634
+ if(_proxy->_getReference()->getInvocationTimeout() == -2 && _cachedConnection)
635
+ {
636
+ const int timeout = _cachedConnection->timeout();
637
+ if(timeout > 0)
638
+ {
639
+ _instance->timer()->schedule(ICE_SHARED_FROM_THIS, IceUtil::Time::milliSeconds(timeout));
640
+ }
124
641
  }
642
+ OutgoingAsyncBase::cancelable(handler);
125
643
  }
126
644
 
127
645
  void
@@ -135,30 +653,16 @@ ProxyOutgoingAsyncBase::retryException(const Exception& ex)
135
653
  // require could end up waiting for the flush of the
136
654
  // connection to be done.
137
655
  //
138
- _proxy->__updateRequestHandler(_handler, 0); // Clear request handler and always retry.
139
- _instance->retryQueue()->add(this, 0);
656
+ _proxy->_updateRequestHandler(_handler, 0); // Clear request handler and always retry.
657
+ _instance->retryQueue()->add(ICE_SHARED_FROM_THIS, 0);
140
658
  }
141
659
  catch(const Ice::Exception& exc)
142
660
  {
143
- if(completed(exc))
144
- {
145
- invokeCompletedAsync();
146
- }
147
- }
148
- }
149
-
150
- void
151
- ProxyOutgoingAsyncBase::cancelable(const CancellationHandlerPtr& handler)
152
- {
153
- if(_proxy->__reference()->getInvocationTimeout() == -2 && _cachedConnection)
154
- {
155
- const int timeout = _cachedConnection->timeout();
156
- if(timeout > 0)
661
+ if(exception(exc))
157
662
  {
158
- _instance->timer()->schedule(this, IceUtil::Time::milliSeconds(timeout));
663
+ invokeExceptionAsync();
159
664
  }
160
665
  }
161
- AsyncResult::cancelable(handler);
162
666
  }
163
667
 
164
668
  void
@@ -172,9 +676,9 @@ ProxyOutgoingAsyncBase::abort(const Ice::Exception& ex)
172
676
  {
173
677
  assert(!_childObserver);
174
678
 
175
- if(finished(ex))
679
+ if(exceptionImpl(ex))
176
680
  {
177
- invokeCompletedAsync();
681
+ invokeExceptionAsync();
178
682
  }
179
683
  else if(dynamic_cast<const Ice::CommunicatorDestroyedException*>(&ex))
180
684
  {
@@ -187,18 +691,33 @@ ProxyOutgoingAsyncBase::abort(const Ice::Exception& ex)
187
691
  }
188
692
  }
189
693
 
190
- ProxyOutgoingAsyncBase::ProxyOutgoingAsyncBase(const ObjectPrx& prx,
191
- const string& operation,
192
- const CallbackBasePtr& delegate,
193
- const LocalObjectPtr& cookie) :
194
- OutgoingAsyncBase(prx->ice_getCommunicator(), prx->__reference()->getInstance(), operation, delegate, cookie),
694
+ #ifndef ICE_CPP11_MAPPING
695
+ Ice::ObjectPrx
696
+ ProxyOutgoingAsyncBase::getProxy() const
697
+ {
698
+ return _proxy;
699
+ }
700
+
701
+ Ice::CommunicatorPtr
702
+ ProxyOutgoingAsyncBase::getCommunicator() const
703
+ {
704
+ return _proxy->ice_getCommunicator();
705
+ }
706
+ #endif
707
+
708
+ ProxyOutgoingAsyncBase::ProxyOutgoingAsyncBase(const ObjectPrxPtr& prx) :
709
+ OutgoingAsyncBase(prx->_getReference()->getInstance()),
195
710
  _proxy(prx),
196
- _mode(Normal),
711
+ _mode(ICE_ENUM(OperationMode, Normal)),
197
712
  _cnt(0),
198
713
  _sent(false)
199
714
  {
200
715
  }
201
716
 
717
+ ProxyOutgoingAsyncBase::~ProxyOutgoingAsyncBase()
718
+ {
719
+ }
720
+
202
721
  void
203
722
  ProxyOutgoingAsyncBase::invokeImpl(bool userThread)
204
723
  {
@@ -206,10 +725,10 @@ ProxyOutgoingAsyncBase::invokeImpl(bool userThread)
206
725
  {
207
726
  if(userThread)
208
727
  {
209
- int invocationTimeout = _proxy->__reference()->getInvocationTimeout();
728
+ int invocationTimeout = _proxy->_getReference()->getInvocationTimeout();
210
729
  if(invocationTimeout > 0)
211
730
  {
212
- _instance->timer()->schedule(this, IceUtil::Time::milliSeconds(invocationTimeout));
731
+ _instance->timer()->schedule(ICE_SHARED_FROM_THIS, IceUtil::Time::milliSeconds(invocationTimeout));
213
732
  }
214
733
  }
215
734
  else
@@ -222,8 +741,8 @@ ProxyOutgoingAsyncBase::invokeImpl(bool userThread)
222
741
  try
223
742
  {
224
743
  _sent = false;
225
- _handler = _proxy->__getRequestHandler();
226
- AsyncStatus status = _handler->sendAsyncRequest(this);
744
+ _handler = _proxy->_getRequestHandler();
745
+ AsyncStatus status = _handler->sendAsyncRequest(ICE_SHARED_FROM_THIS);
227
746
  if(status & AsyncStatusSent)
228
747
  {
229
748
  if(userThread)
@@ -246,19 +765,19 @@ ProxyOutgoingAsyncBase::invokeImpl(bool userThread)
246
765
  }
247
766
  catch(const RetryException&)
248
767
  {
249
- _proxy->__updateRequestHandler(_handler, 0); // Clear request handler and always retry.
768
+ _proxy->_updateRequestHandler(_handler, 0); // Clear request handler and always retry.
250
769
  }
251
770
  catch(const Exception& ex)
252
771
  {
253
772
  if(_childObserver)
254
773
  {
255
- _childObserver.failed(ex.ice_name());
774
+ _childObserver.failed(ex.ice_id());
256
775
  _childObserver.detach();
257
776
  }
258
- int interval = handleException(ex);
777
+ int interval = _proxy->_handleException(ex, _handler, _mode, _sent, _cnt);
259
778
  if(interval > 0)
260
779
  {
261
- _instance->retryQueue()->add(this, interval);
780
+ _instance->retryQueue()->add(ICE_SHARED_FROM_THIS, interval);
262
781
  return;
263
782
  }
264
783
  else
@@ -272,63 +791,57 @@ ProxyOutgoingAsyncBase::invokeImpl(bool userThread)
272
791
  {
273
792
  //
274
793
  // If called from the user thread we re-throw, the exception
275
- // will be catch by the caller and abort() will be called.
794
+ // will be catch by the caller and abort(ex) will be called.
276
795
  //
277
796
  if(userThread)
278
797
  {
279
798
  throw;
280
799
  }
281
- else if(finished(ex)) // No retries, we're done
800
+ else if(exceptionImpl(ex)) // No retries, we're done
282
801
  {
283
- invokeCompletedAsync();
802
+ invokeExceptionAsync();
284
803
  }
285
804
  }
286
805
  }
287
806
 
288
807
  bool
289
- ProxyOutgoingAsyncBase::sent(bool done)
808
+ ProxyOutgoingAsyncBase::sentImpl(bool done)
290
809
  {
291
810
  _sent = true;
292
811
  if(done)
293
812
  {
294
- if(_proxy->__reference()->getInvocationTimeout() != -1)
813
+ if(_proxy->_getReference()->getInvocationTimeout() != -1)
295
814
  {
296
- _instance->timer()->cancel(this);
815
+ _instance->timer()->cancel(ICE_SHARED_FROM_THIS);
297
816
  }
298
817
  }
299
- return OutgoingAsyncBase::sent(done);
818
+ return OutgoingAsyncBase::sentImpl(done);
300
819
  }
301
820
 
302
821
  bool
303
- ProxyOutgoingAsyncBase::finished(const Exception& ex)
822
+ ProxyOutgoingAsyncBase::exceptionImpl(const Exception& ex)
304
823
  {
305
- if(_proxy->__reference()->getInvocationTimeout() != -1)
824
+ if(_proxy->_getReference()->getInvocationTimeout() != -1)
306
825
  {
307
- _instance->timer()->cancel(this);
826
+ _instance->timer()->cancel(ICE_SHARED_FROM_THIS);
308
827
  }
309
- return OutgoingAsyncBase::finished(ex);
828
+ return OutgoingAsyncBase::exceptionImpl(ex);
310
829
  }
311
830
 
312
831
  bool
313
- ProxyOutgoingAsyncBase::finished(bool ok)
832
+ ProxyOutgoingAsyncBase::responseImpl(bool ok, bool invoke)
314
833
  {
315
- if(_proxy->__reference()->getInvocationTimeout() != -1)
834
+ if(_proxy->_getReference()->getInvocationTimeout() != -1)
316
835
  {
317
- _instance->timer()->cancel(this);
836
+ _instance->timer()->cancel(ICE_SHARED_FROM_THIS);
318
837
  }
319
- return AsyncResult::finished(ok);
320
- }
321
-
322
- int
323
- ProxyOutgoingAsyncBase::handleException(const Exception& exc)
324
- {
325
- return _proxy->__handleException(exc, _handler, _mode, _sent, _cnt);
838
+ return OutgoingAsyncBase::responseImpl(ok, invoke);
326
839
  }
327
840
 
328
841
  void
329
842
  ProxyOutgoingAsyncBase::runTimerTask()
330
843
  {
331
- if(_proxy->__reference()->getInvocationTimeout() == -2)
844
+ if(_proxy->_getReference()->getInvocationTimeout() == -2)
332
845
  {
333
846
  cancel(ConnectionTimeoutException(__FILE__, __LINE__));
334
847
  }
@@ -338,24 +851,22 @@ ProxyOutgoingAsyncBase::runTimerTask()
338
851
  }
339
852
  }
340
853
 
341
- OutgoingAsync::OutgoingAsync(const ObjectPrx& prx,
342
- const string& operation,
343
- const CallbackBasePtr& delegate,
344
- const LocalObjectPtr& cookie) :
345
- ProxyOutgoingAsyncBase(prx, operation, delegate, cookie),
346
- _encoding(getCompatibleEncoding(prx->__reference()->getEncoding()))
854
+ OutgoingAsync::OutgoingAsync(const ObjectPrxPtr& prx, bool synchronous) :
855
+ ProxyOutgoingAsyncBase(prx),
856
+ _encoding(getCompatibleEncoding(prx->_getReference()->getEncoding())),
857
+ _synchronous(synchronous)
347
858
  {
348
859
  }
349
860
 
350
861
  void
351
- OutgoingAsync::prepare(const string& operation, OperationMode mode, const Context* context)
862
+ OutgoingAsync::prepare(const string& operation, OperationMode mode, const Context& context)
352
863
  {
353
- checkSupportedProtocol(getCompatibleProtocol(_proxy->__reference()->getProtocol()));
864
+ checkSupportedProtocol(getCompatibleProtocol(_proxy->_getReference()->getProtocol()));
354
865
 
355
866
  _mode = mode;
356
- _observer.attach(_proxy.get(), operation, context);
867
+ _observer.attach(_proxy, operation, context);
357
868
 
358
- switch(_proxy->__reference()->getMode())
869
+ switch(_proxy->_getReference()->getMode())
359
870
  {
360
871
  case Reference::ModeTwoway:
361
872
  case Reference::ModeOneway:
@@ -368,12 +879,12 @@ OutgoingAsync::prepare(const string& operation, OperationMode mode, const Contex
368
879
  case Reference::ModeBatchOneway:
369
880
  case Reference::ModeBatchDatagram:
370
881
  {
371
- _proxy->__getBatchRequestQueue()->prepareBatchRequest(&_os);
882
+ _proxy->_getBatchRequestQueue()->prepareBatchRequest(&_os);
372
883
  break;
373
884
  }
374
885
  }
375
886
 
376
- Reference* ref = _proxy->__reference().get();
887
+ Reference* ref = _proxy->_getReference().get();
377
888
 
378
889
  _os.write(ref->getIdentity());
379
890
 
@@ -394,12 +905,22 @@ OutgoingAsync::prepare(const string& operation, OperationMode mode, const Contex
394
905
 
395
906
  _os.write(static_cast<Byte>(_mode));
396
907
 
397
- if(context != 0)
908
+ #if defined(_MSC_VER) && (_MSC_VER <= 1600)
909
+ //
910
+ // COMPILERFIX VC90 and VC100 get confused with namespaces and we need to
911
+ // defined both Ice::noExplicitContext and IceProxy::Ice::noExplicitContext
912
+ // see comments in Ice/Proxy.h.
913
+ //
914
+ if(&context != &Ice::noExplicitContext &&
915
+ &context != &IceProxy::Ice::noExplicitContext)
916
+ #else
917
+ if(&context != &Ice::noExplicitContext)
918
+ #endif
398
919
  {
399
920
  //
400
921
  // Explicit context
401
922
  //
402
- _os.write(*context);
923
+ _os.write(context);
403
924
  }
404
925
  else
405
926
  {
@@ -422,61 +943,11 @@ OutgoingAsync::prepare(const string& operation, OperationMode mode, const Contex
422
943
  bool
423
944
  OutgoingAsync::sent()
424
945
  {
425
- return ProxyOutgoingAsyncBase::sent(!_proxy->ice_isTwoway()); // done = true if it's not a two-way proxy
426
- }
427
-
428
- AsyncStatus
429
- OutgoingAsync::invokeRemote(const ConnectionIPtr& connection, bool compress, bool response)
430
- {
431
- _cachedConnection = connection;
432
- return connection->sendAsyncRequest(this, compress, response, 0);
433
- }
434
-
435
- AsyncStatus
436
- OutgoingAsync::invokeCollocated(CollocatedRequestHandler* handler)
437
- {
438
- return handler->invokeAsyncRequest(this, 0);
439
- }
440
-
441
- void
442
- OutgoingAsync::abort(const Exception& ex)
443
- {
444
- const Reference::Mode mode = _proxy->__reference()->getMode();
445
- if(mode == Reference::ModeBatchOneway || mode == Reference::ModeBatchDatagram)
446
- {
447
- //
448
- // If we didn't finish a batch oneway or datagram request, we
449
- // must notify the connection about that we give up ownership
450
- // of the batch stream.
451
- //
452
- _proxy->__getBatchRequestQueue()->abortBatchRequest(&_os);
453
- }
454
-
455
- ProxyOutgoingAsyncBase::abort(ex);
456
- }
457
-
458
- void
459
- OutgoingAsync::invoke()
460
- {
461
- const Reference::Mode mode = _proxy->__reference()->getMode();
462
- if(mode == Reference::ModeBatchOneway || mode == Reference::ModeBatchDatagram)
463
- {
464
- _sentSynchronously = true;
465
- _proxy->__getBatchRequestQueue()->finishBatchRequest(&_os, _proxy, getOperation());
466
- finished(true);
467
- return; // Don't call sent/completed callback for batch AMI requests
468
- }
469
-
470
- //
471
- // NOTE: invokeImpl doesn't throw so this can be called from the
472
- // try block with the catch block calling abort() in case of an
473
- // exception.
474
- //
475
- invokeImpl(true); // userThread = true
946
+ return ProxyOutgoingAsyncBase::sentImpl(!_proxy->ice_isTwoway()); // done = true if it's not a two-way proxy
476
947
  }
477
948
 
478
949
  bool
479
- OutgoingAsync::completed()
950
+ OutgoingAsync::response()
480
951
  {
481
952
  //
482
953
  // NOTE: this method is called from ConnectionI.parseMessage
@@ -533,7 +1004,7 @@ OutgoingAsync::completed()
533
1004
  string operation;
534
1005
  _is.read(operation, false);
535
1006
 
536
- IceUtil::UniquePtr<RequestFailedException> ex;
1007
+ IceInternal::UniquePtr<RequestFailedException> ex;
537
1008
  switch(replyStatus)
538
1009
  {
539
1010
  case replyObjectNotExist:
@@ -574,7 +1045,7 @@ OutgoingAsync::completed()
574
1045
  string unknown;
575
1046
  _is.read(unknown, false);
576
1047
 
577
- IceUtil::UniquePtr<UnknownException> ex;
1048
+ IceInternal::UniquePtr<UnknownException> ex;
578
1049
  switch(replyStatus)
579
1050
  {
580
1051
  case replyUnknownException:
@@ -612,276 +1083,243 @@ OutgoingAsync::completed()
612
1083
  }
613
1084
  }
614
1085
 
615
- return finished(replyStatus == replyOK);
1086
+ return responseImpl(replyStatus == replyOK, true);
616
1087
  }
617
1088
  catch(const Exception& ex)
618
1089
  {
619
- return completed(ex);
1090
+ return exception(ex);
620
1091
  }
621
1092
  }
622
1093
 
623
- ProxyFlushBatchAsync::ProxyFlushBatchAsync(const ObjectPrx& proxy,
624
- const string& operation,
625
- const CallbackBasePtr& delegate,
626
- const LocalObjectPtr& cookie) :
627
- ProxyOutgoingAsyncBase(proxy, operation, delegate, cookie)
628
- {
629
- _observer.attach(proxy.get(), operation, 0);
630
- _batchRequestNum = proxy->__getBatchRequestQueue()->swap(&_os);
631
- }
632
-
633
1094
  AsyncStatus
634
- ProxyFlushBatchAsync::invokeRemote(const ConnectionIPtr& connection, bool compress, bool)
1095
+ OutgoingAsync::invokeRemote(const ConnectionIPtr& connection, bool compress, bool response)
635
1096
  {
636
- if(_batchRequestNum == 0)
637
- {
638
- if(sent())
639
- {
640
- return static_cast<AsyncStatus>(AsyncStatusSent | AsyncStatusInvokeSentCallback);
641
- }
642
- else
643
- {
644
- return AsyncStatusSent;
645
- }
646
- }
647
1097
  _cachedConnection = connection;
648
- return connection->sendAsyncRequest(this, compress, false, _batchRequestNum);
1098
+ return connection->sendAsyncRequest(ICE_SHARED_FROM_THIS, compress, response, 0);
649
1099
  }
650
1100
 
651
1101
  AsyncStatus
652
- ProxyFlushBatchAsync::invokeCollocated(CollocatedRequestHandler* handler)
1102
+ OutgoingAsync::invokeCollocated(CollocatedRequestHandler* handler)
653
1103
  {
654
- if(_batchRequestNum == 0)
655
- {
656
- if(sent())
657
- {
658
- return static_cast<AsyncStatus>(AsyncStatusSent | AsyncStatusInvokeSentCallback);
659
- }
660
- else
661
- {
662
- return AsyncStatusSent;
663
- }
664
- }
665
- return handler->invokeAsyncRequest(this, _batchRequestNum);
1104
+ return handler->invokeAsyncRequest(this, 0, _synchronous);
666
1105
  }
667
1106
 
668
1107
  void
669
- ProxyFlushBatchAsync::invoke()
670
- {
671
- checkSupportedProtocol(getCompatibleProtocol(_proxy->__reference()->getProtocol()));
672
- invokeImpl(true); // userThread = true
673
- }
674
-
675
- ProxyGetConnection::ProxyGetConnection(const ObjectPrx& prx,
676
- const string& operation,
677
- const CallbackBasePtr& delegate,
678
- const LocalObjectPtr& cookie) :
679
- ProxyOutgoingAsyncBase(prx, operation, delegate, cookie)
680
- {
681
- _observer.attach(prx.get(), operation, 0);
682
- }
683
-
684
- AsyncStatus
685
- ProxyGetConnection::invokeRemote(const ConnectionIPtr& connection, bool, bool)
1108
+ OutgoingAsync::abort(const Exception& ex)
686
1109
  {
687
- _cachedConnection = connection;
688
- if(finished(true))
1110
+ const Reference::Mode mode = _proxy->_getReference()->getMode();
1111
+ if(mode == Reference::ModeBatchOneway || mode == Reference::ModeBatchDatagram)
689
1112
  {
690
- invokeCompletedAsync();
1113
+ //
1114
+ // If we didn't finish a batch oneway or datagram request, we
1115
+ // must notify the connection about that we give up ownership
1116
+ // of the batch stream.
1117
+ //
1118
+ _proxy->_getBatchRequestQueue()->abortBatchRequest(&_os);
691
1119
  }
692
- return AsyncStatusSent;
1120
+
1121
+ ProxyOutgoingAsyncBase::abort(ex);
693
1122
  }
694
1123
 
695
- AsyncStatus
696
- ProxyGetConnection::invokeCollocated(CollocatedRequestHandler*)
1124
+ void
1125
+ OutgoingAsync::invoke(const string& operation)
697
1126
  {
698
- if(finished(true))
1127
+ const Reference::Mode mode = _proxy->_getReference()->getMode();
1128
+ if(mode == Reference::ModeBatchOneway || mode == Reference::ModeBatchDatagram)
699
1129
  {
700
- invokeCompletedAsync();
1130
+ _sentSynchronously = true;
1131
+ _proxy->_getBatchRequestQueue()->finishBatchRequest(&_os, _proxy, operation);
1132
+ responseImpl(true, false); // Don't call sent/completed callback for batch AMI requests
1133
+ return;
701
1134
  }
702
- return AsyncStatusSent;
703
- }
704
1135
 
705
- void
706
- ProxyGetConnection::invoke()
707
- {
1136
+ //
1137
+ // NOTE: invokeImpl doesn't throw so this can be called from the
1138
+ // try block with the catch block calling abort(ex) in case of an
1139
+ // exception.
1140
+ //
708
1141
  invokeImpl(true); // userThread = true
709
1142
  }
710
1143
 
711
- ConnectionFlushBatchAsync::ConnectionFlushBatchAsync(const ConnectionIPtr& connection,
712
- const CommunicatorPtr& communicator,
713
- const InstancePtr& instance,
714
- const string& operation,
715
- const CallbackBasePtr& delegate,
716
- const LocalObjectPtr& cookie) :
717
- OutgoingAsyncBase(communicator, instance, operation, delegate, cookie), _connection(connection)
718
- {
719
- _observer.attach(instance.get(), operation);
720
- }
721
-
722
- ConnectionPtr
723
- ConnectionFlushBatchAsync::getConnection() const
724
- {
725
- return _connection;
726
- }
727
-
1144
+ #ifdef ICE_CPP11_MAPPING
728
1145
  void
729
- ConnectionFlushBatchAsync::invoke()
1146
+ OutgoingAsync::invoke(const string& operation,
1147
+ Ice::OperationMode mode,
1148
+ Ice::FormatType format,
1149
+ const Ice::Context& context,
1150
+ function<void(Ice::OutputStream*)> write)
730
1151
  {
731
1152
  try
732
1153
  {
733
- AsyncStatus status;
734
- int batchRequestNum = _connection->getBatchRequestQueue()->swap(&_os);
735
- if(batchRequestNum == 0)
1154
+ prepare(operation, mode, context);
1155
+ if(write)
736
1156
  {
737
- status = AsyncStatusSent;
738
- if(sent())
739
- {
740
- status = static_cast<AsyncStatus>(status | AsyncStatusInvokeSentCallback);
741
- }
1157
+ _os.startEncapsulation(_encoding, format);
1158
+ write(&_os);
1159
+ _os.endEncapsulation();
742
1160
  }
743
1161
  else
744
1162
  {
745
- status = _connection->sendAsyncRequest(this, false, false, batchRequestNum);
746
- }
747
-
748
- if(status & AsyncStatusSent)
749
- {
750
- _sentSynchronously = true;
751
- if(status & AsyncStatusInvokeSentCallback)
752
- {
753
- invokeSent();
754
- }
1163
+ _os.writeEmptyEncapsulation(_encoding);
755
1164
  }
1165
+ invoke(operation);
756
1166
  }
757
- catch(const RetryException& ex)
1167
+ catch(const Ice::Exception& ex)
758
1168
  {
759
- if(completed(*ex.get()))
760
- {
761
- invokeCompletedAsync();
762
- }
1169
+ abort(ex);
763
1170
  }
764
- catch(const Exception& ex)
1171
+ }
1172
+
1173
+ void
1174
+ OutgoingAsync::throwUserException()
1175
+ {
1176
+ try
765
1177
  {
766
- if(completed(ex))
1178
+ _is.startEncapsulation();
1179
+ _is.throwException();
1180
+ }
1181
+ catch(const UserException& ex)
1182
+ {
1183
+ _is.endEncapsulation();
1184
+ if(_userException)
767
1185
  {
768
- invokeCompletedAsync();
1186
+ _userException(ex);
769
1187
  }
1188
+ throw UnknownUserException(__FILE__, __LINE__, ex.ice_id());
770
1189
  }
771
1190
  }
772
1191
 
773
- CommunicatorFlushBatchAsync::CommunicatorFlushBatchAsync(const CommunicatorPtr& communicator,
774
- const InstancePtr& instance,
775
- const string& operation,
776
- const CallbackBasePtr& cb,
777
- const LocalObjectPtr& cookie) :
778
- AsyncResult(communicator, instance, operation, cb, cookie)
1192
+ #endif
1193
+
1194
+ #ifdef ICE_CPP11_MAPPING
1195
+
1196
+ bool
1197
+ LambdaInvoke::handleSent(bool, bool alreadySent)
1198
+ {
1199
+ return _sent != nullptr && !alreadySent; // Invoke the sent callback only if not already invoked.
1200
+ }
1201
+
1202
+ bool
1203
+ LambdaInvoke::handleException(const Ice::Exception&)
779
1204
  {
780
- _observer.attach(instance.get(), operation);
1205
+ return _exception != nullptr; // Invoke the callback
1206
+ }
781
1207
 
782
- //
783
- // _useCount is initialized to 1 to prevent premature callbacks.
784
- // The caller must invoke ready() after all flush requests have
785
- // been initiated.
786
- //
787
- _useCount = 1;
1208
+ bool
1209
+ LambdaInvoke::handleResponse(bool)
1210
+ {
1211
+ return _response != nullptr;
1212
+ }
1213
+
1214
+ void
1215
+ LambdaInvoke::handleInvokeSent(bool sentSynchronously, OutgoingAsyncBase*) const
1216
+ {
1217
+ _sent(sentSynchronously);
788
1218
  }
789
1219
 
790
1220
  void
791
- CommunicatorFlushBatchAsync::flushConnection(const ConnectionIPtr& con)
1221
+ LambdaInvoke::handleInvokeException(const Ice::Exception& ex, OutgoingAsyncBase*) const
792
1222
  {
793
- class FlushBatch : public OutgoingAsyncBase
1223
+ try
794
1224
  {
795
- public:
1225
+ ex.ice_throw();
1226
+ }
1227
+ catch(const Ice::Exception&)
1228
+ {
1229
+ _exception(current_exception());
1230
+ }
1231
+ }
796
1232
 
797
- FlushBatch(const CommunicatorFlushBatchAsyncPtr& outAsync,
798
- const InstancePtr& instance,
799
- InvocationObserver& observer) :
800
- OutgoingAsyncBase(outAsync->getCommunicator(), instance, outAsync->getOperation(), __dummyCallback, 0),
801
- _outAsync(outAsync),
802
- _observer(observer)
803
- {
804
- }
1233
+ void
1234
+ LambdaInvoke::handleInvokeResponse(bool ok, OutgoingAsyncBase*) const
1235
+ {
1236
+ _response(ok);
1237
+ }
805
1238
 
806
- virtual bool sent()
807
- {
808
- _childObserver.detach();
809
- _outAsync->check(false);
810
- return false;
811
- }
1239
+ #else // C++98
812
1240
 
813
- virtual bool completed(const Exception& ex)
814
- {
815
- _childObserver.failed(ex.ice_name());
816
- _childObserver.detach();
817
- _outAsync->check(false);
818
- return false;
819
- }
1241
+ namespace
1242
+ {
820
1243
 
821
- private:
1244
+ //
1245
+ // Dummy class derived from CallbackBase
1246
+ // We use this class for the dummyCallback extern pointer in OutgoingAsync. In turn,
1247
+ // this allows us to test whether the user supplied a null delegate instance to the
1248
+ // generated begin_ method without having to generate a separate test to throw IllegalArgumentException
1249
+ // in the inlined versions of the begin_ method. In other words, this reduces the amount of generated
1250
+ // object code.
1251
+ //
1252
+ class DummyCallback : public CallbackBase
1253
+ {
1254
+ public:
822
1255
 
823
- virtual InvocationObserver& getObserver()
824
- {
825
- return _observer;
826
- }
1256
+ DummyCallback()
1257
+ {
1258
+ }
827
1259
 
828
- const CommunicatorFlushBatchAsyncPtr _outAsync;
829
- InvocationObserver& _observer;
830
- };
1260
+ virtual void
1261
+ completed(const Ice::AsyncResultPtr&) const
1262
+ {
1263
+ assert(false);
1264
+ }
831
1265
 
1266
+ virtual CallbackBasePtr
1267
+ verify(const Ice::LocalObjectPtr&)
832
1268
  {
833
- IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor);
834
- ++_useCount;
1269
+ //
1270
+ // Called by the AsyncResult constructor to verify the delegate. The dummy
1271
+ // delegate is passed when the user used a begin_ method without delegate.
1272
+ // By returning 0 here, we tell the AsyncResult that no delegates was
1273
+ // provided.
1274
+ //
1275
+ return 0;
835
1276
  }
836
1277
 
837
- try
1278
+ virtual void
1279
+ sent(const AsyncResultPtr&) const
838
1280
  {
839
- OutgoingAsyncBasePtr flushBatch = new FlushBatch(this, _instance, _observer);
840
- int batchRequestNum = con->getBatchRequestQueue()->swap(flushBatch->getOs());
841
- if(batchRequestNum == 0)
842
- {
843
- flushBatch->sent();
844
- }
845
- else
846
- {
847
- con->sendAsyncRequest(flushBatch, false, false, batchRequestNum);
848
- }
1281
+ assert(false);
849
1282
  }
850
- catch(const LocalException&)
1283
+
1284
+ virtual bool
1285
+ hasSentCallback() const
851
1286
  {
852
- check(false);
853
- throw;
1287
+ assert(false);
1288
+ return false;
854
1289
  }
1290
+ };
1291
+
855
1292
  }
856
1293
 
857
- void
858
- CommunicatorFlushBatchAsync::ready()
1294
+ //
1295
+ // This gives a pointer value to compare against in the generated
1296
+ // begin_ method to decide whether the caller passed a null pointer
1297
+ // versus the generated inline version of the begin_ method having
1298
+ // passed a pointer to the dummy delegate.
1299
+ //
1300
+ CallbackBasePtr IceInternal::dummyCallback = new DummyCallback;
1301
+
1302
+ CallbackBase::~CallbackBase()
859
1303
  {
860
- check(true);
1304
+ // Out of line to avoid weak vtable
861
1305
  }
862
1306
 
863
1307
  void
864
- CommunicatorFlushBatchAsync::check(bool userThread)
1308
+ CallbackBase::checkCallback(bool obj, bool cb)
865
1309
  {
1310
+ if(!obj)
866
1311
  {
867
- IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor);
868
- assert(_useCount > 0);
869
- if(--_useCount > 0)
870
- {
871
- return;
872
- }
1312
+ throw IceUtil::IllegalArgumentException(__FILE__, __LINE__, "callback object cannot be null");
873
1313
  }
874
-
875
- if(sent(true))
1314
+ if(!cb)
876
1315
  {
877
- if(userThread)
878
- {
879
- _sentSynchronously = true;
880
- invokeSent();
881
- }
882
- else
883
- {
884
- invokeSentAsync();
885
- }
1316
+ throw IceUtil::IllegalArgumentException(__FILE__, __LINE__, "callback cannot be null");
886
1317
  }
887
1318
  }
1319
+
1320
+ GenericCallbackBase::~GenericCallbackBase()
1321
+ {
1322
+ // Out of line to avoid weak vtable
1323
+ }
1324
+
1325
+ #endif