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
@@ -0,0 +1,52 @@
1
+ // **********************************************************************
2
+ //
3
+ // Copyright (c) 2003-2017 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 LOCATOR_DISCOVERY_PLUGIN_I_H
11
+ #define LOCATOR_DISCOVERY_PLUGIN_I_H
12
+
13
+ #include <Ice/Config.h>
14
+ #include <Ice/Plugin.h>
15
+ #include <Ice/Locator.h>
16
+ #include <IceUtil/Time.h>
17
+
18
+ //
19
+ // Automatically link IceLocatorDiscovery[D|++11|++11D].lib with Visual C++
20
+ //
21
+ #if !defined(ICE_BUILDING_ICE_LOCATOR_DISCOVERY) && defined(ICE_LOCATOR_DISCOVERY_API_EXPORTS)
22
+ # define ICE_BUILDING_ICE_LOCATOR_DISCOVERY
23
+ #endif
24
+
25
+ #if defined(_MSC_VER) && !defined(ICE_BUILDING_ICE_LOCATOR_DISCOVERY)
26
+ # pragma comment(lib, ICE_LIBNAME("IceLocatorDiscovery"))
27
+ #endif
28
+
29
+ #ifndef ICE_LOCATOR_DISCOVERY_API
30
+ # if defined(ICE_STATIC_LIBS)
31
+ # define ICE_LOCATOR_DISCOVERY_API /**/
32
+ # elif defined(ICE_LOCATOR_DISCOVERY_API_EXPORTS)
33
+ # define ICE_LOCATOR_DISCOVERY_API ICE_DECLSPEC_EXPORT
34
+ # else
35
+ # define ICE_LOCATOR_DISCOVERY_API ICE_DECLSPEC_IMPORT
36
+ # endif
37
+ #endif
38
+
39
+ namespace IceLocatorDiscovery
40
+ {
41
+
42
+ class ICE_LOCATOR_DISCOVERY_API Plugin : public Ice::Plugin
43
+ {
44
+ public:
45
+
46
+ virtual std::vector<Ice::LocatorPrxPtr> getLocators(const std::string&, const IceUtil::Time&) const = 0;
47
+ };
48
+ ICE_DEFINE_PTR(PluginPtr, Plugin);
49
+
50
+ };
51
+
52
+ #endif
@@ -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.
@@ -9,26 +9,33 @@
9
9
 
10
10
  #include <IceUtil/IceUtil.h>
11
11
  #include <Ice/Ice.h>
12
+ #include <Ice/Network.h> // For getInterfacesForMulticast
13
+ #include <Ice/LoggerUtil.h>
12
14
 
15
+ #include <IceLocatorDiscovery/Plugin.h>
13
16
  #include <IceLocatorDiscovery/IceLocatorDiscovery.h>
14
17
 
15
18
  using namespace std;
16
19
  using namespace IceLocatorDiscovery;
17
20
 
18
- #ifndef ICE_LOCATOR_DISCOVERY_API
19
- # ifdef ICE_LOCATOR_DISCOVERY_API_EXPORTS
20
- # define ICE_LOCATOR_DISCOVERY_API ICE_DECLSPEC_EXPORT
21
- # else
22
- # define ICE_LOCATOR_DISCOVERY_API /**/
23
- # endif
24
- #endif
25
-
26
21
  namespace
27
22
  {
28
23
 
29
24
  class LocatorI; // Forward declaration
30
25
 
31
- class Request : public IceUtil::Shared
26
+ #ifdef ICE_CPP11_MAPPING
27
+ typedef std::pair<function<void(bool, const pair<const Ice::Byte*, const Ice::Byte*>&)>,
28
+ function<void(exception_ptr)>> AMDCallback;
29
+ #else
30
+ typedef Ice::AMD_Object_ice_invokePtr AMDCallback;
31
+ #endif
32
+
33
+ class Request :
34
+ #ifdef ICE_CPP11_MAPPING
35
+ public std::enable_shared_from_this<Request>
36
+ #else
37
+ public virtual IceUtil::Shared
38
+ #endif
32
39
  {
33
40
  public:
34
41
 
@@ -37,7 +44,7 @@ public:
37
44
  Ice::OperationMode mode,
38
45
  const pair<const Ice::Byte*, const Ice::Byte*>& inParams,
39
46
  const Ice::Context& ctx,
40
- const Ice::AMD_Object_ice_invokePtr& amdCB) :
47
+ const AMDCallback& amdCB) :
41
48
  _locator(locator),
42
49
  _operation(operation),
43
50
  _mode(mode),
@@ -47,8 +54,8 @@ public:
47
54
  {
48
55
  }
49
56
 
50
- void invoke(const Ice::LocatorPrx&);
51
- void response(const bool, const pair<const Ice::Byte*, const Ice::Byte*>&);
57
+ void invoke(const Ice::LocatorPrxPtr&);
58
+ void response(bool, const pair<const Ice::Byte*, const Ice::Byte*>&);
52
59
  void exception(const Ice::Exception&);
53
60
 
54
61
  protected:
@@ -58,31 +65,52 @@ protected:
58
65
  const Ice::OperationMode _mode;
59
66
  const Ice::Context _context;
60
67
  const Ice::ByteSeq _inParams;
61
- const Ice::AMD_Object_ice_invokePtr _amdCB;
68
+ AMDCallback _amdCB;
69
+ #ifdef ICE_CPP11_MAPPING
70
+ exception_ptr _exception;
71
+ #else
72
+ IceInternal::UniquePtr<Ice::Exception> _exception;
73
+ #endif
62
74
 
63
- Ice::LocatorPrx _locatorPrx;
64
- IceUtil::UniquePtr<Ice::Exception> _exception;
75
+ Ice::LocatorPrxPtr _locatorPrx;
65
76
  };
66
- typedef IceUtil::Handle<Request> RequestPtr;
77
+ ICE_DEFINE_PTR(RequestPtr, Request);
67
78
 
68
- class LocatorI : public Ice::BlobjectArrayAsync, private IceUtil::TimerTask, private IceUtil::Monitor<IceUtil::Mutex>
79
+ class LocatorI : public Ice::BlobjectArrayAsync,
80
+ public IceUtil::TimerTask,
81
+ private IceUtil::Monitor<IceUtil::Mutex>
82
+ #ifdef ICE_CPP11_MAPPING
83
+ , public std::enable_shared_from_this<LocatorI>
84
+ #endif
69
85
  {
70
86
  public:
71
87
 
72
- LocatorI(const LookupPrx&, const Ice::PropertiesPtr&, const string&, const Ice::LocatorPrx&);
73
- void setLookupReply(const LookupReplyPrx&);
88
+ LocatorI(const string&, const LookupPrxPtr&, const Ice::PropertiesPtr&, const string&, const Ice::LocatorPrxPtr&);
89
+ void setLookupReply(const LookupReplyPrxPtr&);
74
90
 
91
+ #ifdef ICE_CPP11_MAPPING
92
+ virtual void ice_invokeAsync(pair<const Ice::Byte*, const Ice::Byte*>,
93
+ function<void(bool, const pair<const Ice::Byte*, const Ice::Byte*>&)>,
94
+ function<void(exception_ptr)>,
95
+ const Ice::Current&);
96
+ #else
75
97
  virtual void ice_invoke_async(const Ice::AMD_Object_ice_invokePtr&, const pair<const Ice::Byte*, const Ice::Byte*>&,
76
98
  const Ice::Current&);
99
+ #endif
77
100
 
78
- void foundLocator(const Ice::LocatorPrx&);
79
- void invoke(const Ice::LocatorPrx&, const RequestPtr&);
101
+ void foundLocator(const Ice::LocatorPrxPtr&);
102
+ void invoke(const Ice::LocatorPrxPtr&, const RequestPtr&);
103
+
104
+ vector<Ice::LocatorPrxPtr> getLocators(const string&, const IceUtil::Time&);
105
+
106
+ void exception(const Ice::LocalException&);
80
107
 
81
108
  private:
82
109
 
83
110
  virtual void runTimerTask();
84
111
 
85
- const LookupPrx _lookup;
112
+ LookupPrxPtr _lookup;
113
+ vector<pair<LookupPrxPtr, LookupReplyPrxPtr> > _lookups;
86
114
  const IceUtil::Time _timeout;
87
115
  const int _retryCount;
88
116
  const IceUtil::Time _retryDelay;
@@ -90,15 +118,17 @@ private:
90
118
 
91
119
  string _instanceName;
92
120
  bool _warned;
93
- LookupReplyPrx _lookupReply;
94
- Ice::LocatorPrx _locator;
95
- Ice::LocatorPrx _voidLocator;
121
+ Ice::LocatorPrxPtr _locator;
122
+ map<string, Ice::LocatorPrxPtr> _locators;
123
+ Ice::LocatorPrxPtr _voidLocator;
96
124
 
97
125
  IceUtil::Time _nextRetry;
98
126
  int _pendingRetryCount;
127
+ size_t _failureCount;
128
+ bool _warnOnce;
99
129
  vector<RequestPtr> _pendingRequests;
100
130
  };
101
- typedef IceUtil::Handle<LocatorI> LocatorIPtr;
131
+ ICE_DEFINE_PTR(LocatorIPtr, LocatorI);
102
132
 
103
133
  class LookupReplyI : public LookupReply
104
134
  {
@@ -108,13 +138,20 @@ public:
108
138
  {
109
139
  }
110
140
 
111
- virtual void foundLocator(const Ice::LocatorPrx&, const Ice::Current&);
141
+ virtual void foundLocator(ICE_IN(Ice::LocatorPrxPtr), const Ice::Current&);
112
142
 
113
143
  private:
114
144
 
115
145
  const LocatorIPtr _locator;
116
146
  };
117
147
 
148
+ const ::std::string IceGrid_Locator_ids[3] =
149
+ {
150
+ "::Ice::Locator",
151
+ "::Ice::Object",
152
+ "::IceGrid::Locator"
153
+ };
154
+
118
155
  //
119
156
  // The void locator implementation below is used when no locator is found.
120
157
  //
@@ -122,6 +159,25 @@ class VoidLocatorI : public Ice::Locator
122
159
  {
123
160
  public:
124
161
 
162
+ #ifdef ICE_CPP11_MAPPING
163
+ virtual void
164
+ findObjectByIdAsync(::Ice::Identity,
165
+ function<void(const shared_ptr<::Ice::ObjectPrx>&)> response,
166
+ function<void(exception_ptr)>,
167
+ const Ice::Current&) const
168
+ {
169
+ response(nullptr);
170
+ }
171
+
172
+ virtual void
173
+ findAdapterByIdAsync(string,
174
+ function<void(const shared_ptr<::Ice::ObjectPrx>&)> response,
175
+ function<void(exception_ptr)>,
176
+ const Ice::Current&) const
177
+ {
178
+ response(nullptr);
179
+ }
180
+ #else
125
181
  virtual void
126
182
  findObjectById_async(const Ice::AMD_Locator_findObjectByIdPtr& amdCB,
127
183
  const Ice::Identity&,
@@ -137,46 +193,75 @@ public:
137
193
  {
138
194
  amdCB->ice_response(0);
139
195
  }
196
+ #endif
140
197
 
141
- virtual Ice::LocatorRegistryPrx
198
+ virtual Ice::LocatorRegistryPrxPtr
142
199
  getRegistry(const Ice::Current&) const
143
200
  {
144
- return 0;
201
+ return ICE_NULLPTR;
145
202
  }
146
203
  };
147
204
 
148
- class PluginI : public Ice::Plugin
205
+ class PluginI : public Plugin
149
206
  {
150
207
  public:
151
208
 
152
- PluginI(const Ice::CommunicatorPtr&);
209
+ PluginI(const std::string&, const Ice::CommunicatorPtr&);
153
210
 
154
211
  virtual void initialize();
155
212
  virtual void destroy();
213
+ virtual vector<Ice::LocatorPrxPtr> getLocators(const string&, const IceUtil::Time&) const;
156
214
 
157
215
  private:
158
216
 
217
+ const string _name;
159
218
  const Ice::CommunicatorPtr _communicator;
160
219
  Ice::ObjectAdapterPtr _locatorAdapter;
161
220
  Ice::ObjectAdapterPtr _replyAdapter;
162
- Ice::LocatorPrx _locatorPrx;
163
- Ice::LocatorPrx _defaultLocator;
221
+ LocatorIPtr _locator;
222
+ Ice::LocatorPrxPtr _locatorPrx;
223
+ Ice::LocatorPrxPtr _defaultLocator;
224
+ };
225
+
226
+ #ifndef ICE_CPP11_MAPPING
227
+
228
+ class CallbackI : public IceUtil::Shared
229
+ {
230
+ public:
231
+
232
+ CallbackI(const LocatorIPtr& locator) : _locator(locator)
233
+ {
234
+ }
235
+
236
+ void
237
+ completed(const Ice::AsyncResultPtr& result)
238
+ {
239
+ try
240
+ {
241
+ result->throwLocalException();
242
+ }
243
+ catch(const Ice::LocalException& ex)
244
+ {
245
+ _locator->exception(ex);
246
+ }
247
+ }
248
+
249
+ private:
250
+
251
+ LocatorIPtr _locator;
164
252
  };
165
253
 
254
+ #endif
255
+
166
256
  }
167
257
 
168
258
  //
169
259
  // Plugin factory function.
170
260
  //
171
- extern "C"
261
+ extern "C" ICE_LOCATOR_DISCOVERY_API Ice::Plugin*
262
+ createIceLocatorDiscovery(const Ice::CommunicatorPtr& communicator, const string& name, const Ice::StringSeq&)
172
263
  {
173
-
174
- ICE_LOCATOR_DISCOVERY_API Ice::Plugin*
175
- createIceLocatorDiscovery(const Ice::CommunicatorPtr& communicator, const string&, const Ice::StringSeq&)
176
- {
177
- return new PluginI(communicator);
178
- }
179
-
264
+ return new PluginI(name, communicator);
180
265
  }
181
266
 
182
267
  namespace Ice
@@ -186,12 +271,28 @@ ICE_LOCATOR_DISCOVERY_API void
186
271
  registerIceLocatorDiscovery(bool loadOnInitialize)
187
272
  {
188
273
  Ice::registerPluginFactory("IceLocatorDiscovery", createIceLocatorDiscovery, loadOnInitialize);
274
+
275
+ #ifdef ICE_STATIC_LIBS
276
+ //
277
+ // Also register the UDP plugin with static builds to ensure the UDP transport is loaded.
278
+ //
279
+ registerIceUDP(true);
280
+ #endif
189
281
  }
190
282
 
191
283
  }
192
284
 
285
+ //
286
+ // Objective-C function to allow Objective-C programs to register plugin.
287
+ //
288
+ extern "C" ICE_LOCATOR_DISCOVERY_API void
289
+ ICEregisterIceLocatorDiscovery(bool loadOnInitialize)
290
+ {
291
+ Ice::registerIceLocatorDiscovery(loadOnInitialize);
292
+ }
193
293
 
194
- PluginI::PluginI(const Ice::CommunicatorPtr& communicator) : _communicator(communicator)
294
+ PluginI::PluginI(const string& name, const Ice::CommunicatorPtr& communicator) :
295
+ _name(name), _communicator(communicator)
195
296
  {
196
297
  }
197
298
 
@@ -205,89 +306,83 @@ PluginI::initialize()
205
306
  string address;
206
307
  if(ipv4 && !preferIPv6)
207
308
  {
208
- address = properties->getPropertyWithDefault("IceLocatorDiscovery.Address", "239.255.0.1");
309
+ address = properties->getPropertyWithDefault(_name + ".Address", "239.255.0.1");
209
310
  }
210
311
  else
211
312
  {
212
- address = properties->getPropertyWithDefault("IceLocatorDiscovery.Address", "ff15::1");
313
+ address = properties->getPropertyWithDefault(_name + ".Address", "ff15::1");
213
314
  }
214
- int port = properties->getPropertyAsIntWithDefault("IceLocatorDiscovery.Port", 4061);
215
- string intf = properties->getProperty("IceLocatorDiscovery.Interface");
315
+ int port = properties->getPropertyAsIntWithDefault(_name + ".Port", 4061);
316
+ string intf = properties->getProperty(_name + ".Interface");
216
317
 
217
- if(properties->getProperty("IceLocatorDiscovery.Reply.Endpoints").empty())
318
+ string lookupEndpoints = properties->getProperty(_name + ".Lookup");
319
+ if(lookupEndpoints.empty())
218
320
  {
219
- ostringstream os;
220
- os << "udp";
221
- if(!intf.empty())
321
+ //
322
+ // If no lookup endpoints are specified, we get all the network interfaces and create
323
+ // an endpoint for each of them. We'll send UDP multicast packages on each interface.
324
+ //
325
+ IceInternal::ProtocolSupport protocol = ipv4 && !preferIPv6 ? IceInternal::EnableIPv4 : IceInternal::EnableIPv6;
326
+ vector<string> interfaces = IceInternal::getInterfacesForMulticast(intf, protocol);
327
+ ostringstream lookup;
328
+ for(vector<string>::const_iterator p = interfaces.begin(); p != interfaces.end(); ++p)
222
329
  {
223
- os << " -h \"" << intf << "\"";
330
+ if(p != interfaces.begin())
331
+ {
332
+ lookup << ":";
333
+ }
334
+ lookup << "udp -h \"" << address << "\" -p " << port << " --interface \"" << *p << "\"";
224
335
  }
225
- properties->setProperty("IceLocatorDiscovery.Reply.Endpoints", os.str());
336
+ lookupEndpoints = lookup.str();
337
+ }
338
+
339
+ if(properties->getProperty(_name + ".Reply.Endpoints").empty())
340
+ {
341
+ properties->setProperty(_name + ".Reply.Endpoints", "udp -h " + (intf.empty() ? "*" : "\"" + intf + "\""));
226
342
  }
227
- if(properties->getProperty("IceLocatorDiscovery.Locator.Endpoints").empty())
343
+
344
+ if(properties->getProperty(_name + ".Locator.Endpoints").empty())
228
345
  {
229
- properties->setProperty("IceLocatorDiscovery.Locator.AdapterId", IceUtil::generateUUID()); // Collocated adapter
346
+ properties->setProperty(_name + ".Locator.AdapterId", Ice::generateUUID()); // Collocated adapter
230
347
  }
231
348
 
232
- _replyAdapter = _communicator->createObjectAdapter("IceLocatorDiscovery.Reply");
233
- _locatorAdapter = _communicator->createObjectAdapter("IceLocatorDiscovery.Locator");
349
+ _replyAdapter = _communicator->createObjectAdapter(_name + ".Reply");
350
+ _locatorAdapter = _communicator->createObjectAdapter(_name + ".Locator");
234
351
 
235
352
  // We don't want those adapters to be registered with the locator so clear their locator.
236
353
  _replyAdapter->setLocator(0);
237
354
  _locatorAdapter->setLocator(0);
238
355
 
239
- string lookupEndpoints = properties->getProperty("IceLocatorDiscovery.Lookup");
240
- if(lookupEndpoints.empty())
241
- {
242
- ostringstream os;
243
- os << "udp -h \"" << address << "\" -p " << port;
244
- if(!intf.empty())
245
- {
246
- os << " --interface \"" << intf << "\"";
247
- }
248
- lookupEndpoints = os.str();
249
- }
356
+ Ice::ObjectPrxPtr lookupPrx = _communicator->stringToProxy("IceLocatorDiscovery/Lookup -d:" + lookupEndpoints);
357
+ // No collocation optimization for the multicast proxy!
358
+ lookupPrx = lookupPrx->ice_collocationOptimized(false)->ice_router(ICE_NULLPTR);
250
359
 
251
- Ice::ObjectPrx lookupPrx = _communicator->stringToProxy("IceLocatorDiscovery/Lookup -d:" + lookupEndpoints);
252
- // No collocation optimization for the multicast proxy!
253
- lookupPrx = lookupPrx->ice_collocationOptimized(false)->ice_router(0);
254
- try
255
- {
256
- // Ensure we can establish a connection to the multicast proxy
257
- // but don't block.
258
- Ice::AsyncResultPtr result = lookupPrx->begin_ice_getConnection();
259
- if(result->sentSynchronously())
260
- {
261
- lookupPrx->end_ice_getConnection(result);
262
- }
263
- }
264
- catch(const Ice::LocalException& ex)
265
- {
266
- ostringstream os;
267
- os << "IceLocatorDiscovery is unable to establish a multicast connection:\n";
268
- os << "proxy = " << lookupPrx << '\n';
269
- os << ex;
270
- throw Ice::PluginInitializationException(__FILE__, __LINE__, os.str());
271
- }
360
+ Ice::LocatorPrxPtr voidLocator = ICE_UNCHECKED_CAST(Ice::LocatorPrx,
361
+ _locatorAdapter->addWithUUID(ICE_MAKE_SHARED(VoidLocatorI)));
272
362
 
273
- Ice::LocatorPrx voidLocator = Ice::LocatorPrx::uncheckedCast(_locatorAdapter->addWithUUID(new VoidLocatorI()));
274
-
275
- string instanceName = properties->getProperty("IceLocatorDiscovery.InstanceName");
363
+ string instanceName = properties->getProperty(_name + ".InstanceName");
276
364
  Ice::Identity id;
277
365
  id.name = "Locator";
278
- id.category = !instanceName.empty() ? instanceName : IceUtil::generateUUID();
279
- LocatorIPtr locator = new LocatorI(LookupPrx::uncheckedCast(lookupPrx), properties, instanceName, voidLocator);
366
+ id.category = !instanceName.empty() ? instanceName : Ice::generateUUID();
367
+ _locator = ICE_MAKE_SHARED(LocatorI, _name, ICE_UNCHECKED_CAST(LookupPrx, lookupPrx), properties, instanceName,
368
+ voidLocator);
280
369
  _defaultLocator = _communicator->getDefaultLocator();
281
- _locatorPrx = Ice::LocatorPrx::uncheckedCast(_locatorAdapter->add(locator, id));
370
+ _locatorPrx = ICE_UNCHECKED_CAST(Ice::LocatorPrx, _locatorAdapter->add(_locator, id));
282
371
  _communicator->setDefaultLocator(_locatorPrx);
283
372
 
284
- Ice::ObjectPrx lookupReply = _replyAdapter->addWithUUID(new LookupReplyI(locator))->ice_datagram();
285
- locator->setLookupReply(LookupReplyPrx::uncheckedCast(lookupReply));
373
+ Ice::ObjectPrxPtr lookupReply = _replyAdapter->addWithUUID(ICE_MAKE_SHARED(LookupReplyI, _locator))->ice_datagram();
374
+ _locator->setLookupReply(ICE_UNCHECKED_CAST(LookupReplyPrx, lookupReply));
286
375
 
287
376
  _replyAdapter->activate();
288
377
  _locatorAdapter->activate();
289
378
  }
290
379
 
380
+ vector<Ice::LocatorPrxPtr>
381
+ PluginI::getLocators(const string& instanceName, const IceUtil::Time& waitTime) const
382
+ {
383
+ return _locator->getLocators(instanceName, waitTime);
384
+ }
385
+
291
386
  void
292
387
  PluginI::destroy()
293
388
  {
@@ -307,8 +402,56 @@ PluginI::destroy()
307
402
  }
308
403
 
309
404
  void
310
- Request::invoke(const Ice::LocatorPrx& l)
405
+ Request::invoke(const Ice::LocatorPrxPtr& l)
311
406
  {
407
+ #ifdef ICE_CPP11_MAPPING
408
+ if(l != _locatorPrx)
409
+ {
410
+ _locatorPrx = l;
411
+ try
412
+ {
413
+ auto self = shared_from_this();
414
+ l->ice_invokeAsync(_operation, _mode, _inParams,
415
+ [self](bool ok, vector<Ice::Byte> outParams)
416
+ {
417
+ pair<const Ice::Byte*, const Ice::Byte*> outPair;
418
+ if(outParams.empty())
419
+ {
420
+ outPair.first = outPair.second = 0;
421
+ }
422
+ else
423
+ {
424
+ outPair.first = &outParams[0];
425
+ outPair.second = outPair.first + outParams.size();
426
+ }
427
+ self->response(ok, outPair);
428
+ },
429
+ [self](exception_ptr e)
430
+ {
431
+ try
432
+ {
433
+ rethrow_exception(e);
434
+ }
435
+ catch(const Ice::Exception& ex)
436
+ {
437
+ self->exception(ex);
438
+ }
439
+ },
440
+ nullptr,
441
+ _context);
442
+ }
443
+ catch(const Ice::LocalException& ex)
444
+ {
445
+ exception(ex);
446
+ }
447
+ }
448
+ else
449
+ {
450
+ assert(_exception); // Don't retry if the proxy didn't change
451
+ _amdCB.second(_exception);
452
+ }
453
+
454
+ #else
312
455
  if(l != _locatorPrx)
313
456
  {
314
457
  _locatorPrx = l;
@@ -327,17 +470,74 @@ Request::invoke(const Ice::LocatorPrx& l)
327
470
  assert(_exception.get()); // Don't retry if the proxy didn't change
328
471
  _amdCB->ice_exception(*_exception.get());
329
472
  }
473
+ #endif
330
474
  }
331
475
 
332
476
  void
333
477
  Request::response(bool ok, const pair<const Ice::Byte*, const Ice::Byte*>& outParams)
334
478
  {
479
+ #ifdef ICE_CPP11_MAPPING
480
+ _amdCB.first(ok, outParams);
481
+ #else
335
482
  _amdCB->ice_response(ok, outParams);
483
+ #endif
336
484
  }
337
485
 
338
486
  void
339
487
  Request::exception(const Ice::Exception& ex)
340
488
  {
489
+ #ifdef ICE_CPP11_MAPPING
490
+ try
491
+ {
492
+ ex.ice_throw();
493
+ }
494
+ catch(const Ice::RequestFailedException&)
495
+ {
496
+ _amdCB.second(current_exception());
497
+ }
498
+ catch(const Ice::UnknownException&)
499
+ {
500
+ _amdCB.second(current_exception());
501
+ }
502
+ catch(const Ice::NoEndpointException&)
503
+ {
504
+ try
505
+ {
506
+ throw Ice::ObjectNotExistException(__FILE__, __LINE__);
507
+ }
508
+ catch(...)
509
+ {
510
+ _amdCB.second(current_exception());
511
+ }
512
+ }
513
+ catch(const Ice::CommunicatorDestroyedException&)
514
+ {
515
+ try
516
+ {
517
+ throw Ice::ObjectNotExistException(__FILE__, __LINE__);
518
+ }
519
+ catch(...)
520
+ {
521
+ _amdCB.second(current_exception());
522
+ }
523
+ }
524
+ catch(const Ice::ObjectAdapterDeactivatedException&)
525
+ {
526
+ try
527
+ {
528
+ throw Ice::ObjectNotExistException(__FILE__, __LINE__);
529
+ }
530
+ catch(...)
531
+ {
532
+ _amdCB.second(current_exception());
533
+ }
534
+ }
535
+ catch(const Ice::Exception&)
536
+ {
537
+ _exception = current_exception();
538
+ _locator->invoke(_locatorPrx, shared_from_this()); // Retry with new locator proxy
539
+ }
540
+ #else
341
541
  try
342
542
  {
343
543
  ex.ice_throw();
@@ -367,31 +567,83 @@ Request::exception(const Ice::Exception& ex)
367
567
  _exception.reset(ex.ice_clone());
368
568
  _locator->invoke(_locatorPrx, this); // Retry with new locator proxy
369
569
  }
570
+ #endif
370
571
  }
371
572
 
372
- LocatorI::LocatorI(const LookupPrx& lookup,
573
+ LocatorI::LocatorI(const string& name,
574
+ const LookupPrxPtr& lookup,
373
575
  const Ice::PropertiesPtr& p,
374
576
  const string& instanceName,
375
- const Ice::LocatorPrx& voidLocator) :
577
+ const Ice::LocatorPrxPtr& voidLocator) :
376
578
  _lookup(lookup),
377
- _timeout(IceUtil::Time::milliSeconds(p->getPropertyAsIntWithDefault("IceLocatorDiscovery.Timeout", 300))),
378
- _retryCount(p->getPropertyAsIntWithDefault("IceLocatorDiscovery.RetryCount", 3)),
379
- _retryDelay(IceUtil::Time::milliSeconds(p->getPropertyAsIntWithDefault("IceLocatorDiscovery.RetryDelay", 2000))),
579
+ _timeout(IceUtil::Time::milliSeconds(p->getPropertyAsIntWithDefault(name + ".Timeout", 300))),
580
+ _retryCount(p->getPropertyAsIntWithDefault(name + ".RetryCount", 3)),
581
+ _retryDelay(IceUtil::Time::milliSeconds(p->getPropertyAsIntWithDefault(name + ".RetryDelay", 2000))),
380
582
  _timer(IceInternal::getInstanceTimer(lookup->ice_getCommunicator())),
381
583
  _instanceName(instanceName),
382
584
  _warned(false),
383
585
  _locator(lookup->ice_getCommunicator()->getDefaultLocator()),
384
586
  _voidLocator(voidLocator),
385
- _pendingRetryCount(0)
587
+ _pendingRetryCount(0),
588
+ _failureCount(0),
589
+ _warnOnce(true)
386
590
  {
591
+ //
592
+ // Create one lookup proxy per endpoint from the given proxy. We want to send a multicast
593
+ // datagram on each endpoint.
594
+ //
595
+ Ice::EndpointSeq endpoints = lookup->ice_getEndpoints();
596
+ for(vector<Ice::EndpointPtr>::const_iterator p = endpoints.begin(); p != endpoints.end(); ++p)
597
+ {
598
+ Ice::EndpointSeq single;
599
+ single.push_back(*p);
600
+ _lookups.push_back(make_pair(lookup->ice_endpoints(single), LookupReplyPrxPtr()));
601
+ }
602
+ assert(!_lookups.empty());
387
603
  }
388
604
 
389
605
  void
390
- LocatorI::setLookupReply(const LookupReplyPrx& lookupReply)
606
+ LocatorI::setLookupReply(const LookupReplyPrxPtr& lookupReply)
391
607
  {
392
- _lookupReply = lookupReply;
608
+ //
609
+ // Use a lookup reply proxy whose adress matches the interface used to send multicast datagrams.
610
+ //
611
+ for(vector<pair<LookupPrxPtr, LookupReplyPrxPtr> >::iterator p = _lookups.begin(); p != _lookups.end(); ++p)
612
+ {
613
+ Ice::UDPEndpointInfoPtr info = ICE_DYNAMIC_CAST(Ice::UDPEndpointInfo, p->first->ice_getEndpoints()[0]->getInfo());
614
+ if(info && !info->mcastInterface.empty())
615
+ {
616
+ Ice::EndpointSeq endpts = lookupReply->ice_getEndpoints();
617
+ for(Ice::EndpointSeq::const_iterator q = endpts.begin(); q != endpts.end(); ++q)
618
+ {
619
+ Ice::IPEndpointInfoPtr r = ICE_DYNAMIC_CAST(Ice::IPEndpointInfo, (*q)->getInfo());
620
+ if(r && r->host == info->mcastInterface)
621
+ {
622
+ Ice::EndpointSeq single;
623
+ single.push_back(*q);
624
+ p->second = lookupReply->ice_endpoints(single);
625
+ }
626
+ }
627
+ }
628
+
629
+ if(!p->second)
630
+ {
631
+ p->second = lookupReply; // Fallback: just use the given lookup reply proxy if no matching endpoint found.
632
+ }
633
+ }
393
634
  }
394
635
 
636
+ #ifdef ICE_CPP11_MAPPING
637
+ void
638
+ LocatorI::ice_invokeAsync(pair<const Ice::Byte*, const Ice::Byte*> inParams,
639
+ function<void(bool, const pair<const Ice::Byte*, const Ice::Byte*>&)> responseCB,
640
+ function<void(exception_ptr)> exceptionCB,
641
+ const Ice::Current& current)
642
+ {
643
+ invoke(nullptr, make_shared<Request>(this, current.operation, current.mode, inParams, current.ctx,
644
+ make_pair(move(responseCB), move(exceptionCB))));
645
+ }
646
+ #else
395
647
  void
396
648
  LocatorI::ice_invoke_async(const Ice::AMD_Object_ice_invokePtr& amdCB,
397
649
  const pair<const Ice::Byte*, const Ice::Byte*>& inParams,
@@ -399,9 +651,54 @@ LocatorI::ice_invoke_async(const Ice::AMD_Object_ice_invokePtr& amdCB,
399
651
  {
400
652
  invoke(0, new Request(this, current.operation, current.mode, inParams, current.ctx, amdCB));
401
653
  }
654
+ #endif
655
+
656
+ vector<Ice::LocatorPrxPtr>
657
+ LocatorI::getLocators(const string& instanceName, const IceUtil::Time& waitTime)
658
+ {
659
+ //
660
+ // Clear locators from previous search
661
+ //
662
+ {
663
+ Lock sync(*this);
664
+ _locators.clear();
665
+ }
666
+
667
+ //
668
+ // Find a locator
669
+ //
670
+ invoke(ICE_NULLPTR, ICE_NULLPTR);
671
+
672
+ //
673
+ // Wait for responses
674
+ //
675
+ if(instanceName.empty())
676
+ {
677
+ IceUtil::ThreadControl::sleep(waitTime);
678
+ }
679
+ else
680
+ {
681
+ Lock sync(*this);
682
+ while(_locators.find(instanceName) == _locators.end() && _pendingRetryCount > 0)
683
+ {
684
+ timedWait(waitTime);
685
+ }
686
+ }
687
+
688
+ //
689
+ // Return found locators
690
+ //
691
+ Lock sync(*this);
692
+ vector<Ice::LocatorPrxPtr> locators;
693
+ for(map<string, Ice::LocatorPrxPtr>::const_iterator p = _locators.begin(); p != _locators.end(); ++p)
694
+ {
695
+ locators.push_back(p->second);
696
+ }
697
+ return locators;
698
+ }
402
699
 
403
700
  void
404
- LocatorI::foundLocator(const Ice::LocatorPrx& locator)
701
+ LocatorI::foundLocator(const Ice::LocatorPrxPtr& locator)
405
702
  {
406
703
  Lock sync(*this);
407
704
  if(!locator || (!_instanceName.empty() && locator->ice_getIdentity().category != _instanceName))
@@ -413,7 +710,8 @@ LocatorI::foundLocator(const Ice::LocatorPrx& locator)
413
710
  // If we already have a locator assigned, ensure the given locator
414
711
  // has the same identity, otherwise ignore it.
415
712
  //
416
- if(_locator && locator->ice_getIdentity().category != _locator->ice_getIdentity().category)
713
+ if(!_pendingRequests.empty() &&
714
+ _locator && locator->ice_getIdentity().category != _locator->ice_getIdentity().category)
417
715
  {
418
716
  if(!_warned)
419
717
  {
@@ -432,17 +730,18 @@ LocatorI::foundLocator(const Ice::LocatorPrx& locator)
432
730
 
433
731
  if(_pendingRetryCount > 0) // No need to retry, we found a locator.
434
732
  {
435
- _timer->cancel(this);
733
+ _timer->cancel(ICE_SHARED_FROM_THIS);
436
734
  _pendingRetryCount = 0;
437
735
  }
438
736
 
439
- if(_locator)
737
+ Ice::LocatorPrxPtr l = _pendingRequests.empty() ? _locators[locator->ice_getIdentity().category] : _locator;
738
+ if(l)
440
739
  {
441
740
  //
442
741
  // We found another locator replica, append its endpoints to the
443
742
  // current locator proxy endpoints.
444
743
  //
445
- Ice::EndpointSeq newEndpoints = _locator->ice_getEndpoints();
744
+ Ice::EndpointSeq newEndpoints = l->ice_getEndpoints();
446
745
  Ice::EndpointSeq endpts = locator->ice_getEndpoints();
447
746
  for(Ice::EndpointSeq::const_iterator p = endpts.begin(); p != endpts.end(); ++p)
448
747
  {
@@ -463,29 +762,39 @@ LocatorI::foundLocator(const Ice::LocatorPrx& locator)
463
762
  newEndpoints.push_back(*p);
464
763
  }
465
764
  }
466
- _locator = _locator->ice_endpoints(newEndpoints);
765
+ l = l->ice_endpoints(newEndpoints);
467
766
  }
468
767
  else
469
768
  {
470
- _locator = locator;
769
+ l = locator;
770
+ }
771
+
772
+ if(_pendingRequests.empty())
773
+ {
774
+ _locators[locator->ice_getIdentity().category] = l;
775
+ notify();
776
+ }
777
+ else
778
+ {
779
+ _locator = l;
471
780
  if(_instanceName.empty())
472
781
  {
473
782
  _instanceName = _locator->ice_getIdentity().category; // Stick to the first discovered locator.
474
783
  }
475
- }
476
784
 
477
- //
478
- // Send pending requests if any.
479
- //
480
- for(vector<RequestPtr>::const_iterator p = _pendingRequests.begin(); p != _pendingRequests.end(); ++p)
481
- {
482
- (*p)->invoke(_locator);
785
+ //
786
+ // Send pending requests if any.
787
+ //
788
+ for(vector<RequestPtr>::const_iterator p = _pendingRequests.begin(); p != _pendingRequests.end(); ++p)
789
+ {
790
+ (*p)->invoke(_locator);
791
+ }
792
+ _pendingRequests.clear();
483
793
  }
484
- _pendingRequests.clear();
485
794
  }
486
795
 
487
796
  void
488
- LocatorI::invoke(const Ice::LocatorPrx& locator, const RequestPtr& request)
797
+ LocatorI::invoke(const Ice::LocatorPrxPtr& locator, const RequestPtr& request)
489
798
  {
490
799
  Lock sync(*this);
491
800
  if(request && _locator && _locator != locator)
@@ -500,15 +809,39 @@ LocatorI::invoke(const Ice::LocatorPrx& locator, const RequestPtr& request)
500
809
  {
501
810
  _locator = 0;
502
811
 
503
- _pendingRequests.push_back(request);
812
+ if(request)
813
+ {
814
+ _pendingRequests.push_back(request);
815
+ }
504
816
 
505
817
  if(_pendingRetryCount == 0) // No request in progress
506
818
  {
819
+ _failureCount = 0;
507
820
  _pendingRetryCount = _retryCount;
508
821
  try
509
822
  {
510
- _lookup->begin_findLocator(_instanceName, _lookupReply); // Send multicast request.
511
- _timer->schedule(this, _timeout);
823
+ for(vector<pair<LookupPrxPtr, LookupReplyPrxPtr> >::const_iterator l = _lookups.begin();
824
+ l != _lookups.end(); ++l)
825
+ {
826
+ #ifdef ICE_CPP11_MAPPING
827
+ auto self = shared_from_this();
828
+ l->first->findLocatorAsync(_instanceName, l->second, nullptr, [self](exception_ptr ex)
829
+ {
830
+ try
831
+ {
832
+ rethrow_exception(ex);
833
+ }
834
+ catch(const Ice::LocalException& e)
835
+ {
836
+ self->exception(e);
837
+ }
838
+ });
839
+ #else
840
+ l->first->begin_findLocator(_instanceName, l->second, Ice::newCallback(new CallbackI(this),
841
+ &CallbackI::completed));
842
+ #endif
843
+ }
844
+ _timer->schedule(ICE_SHARED_FROM_THIS, _timeout);
512
845
  }
513
846
  catch(const Ice::LocalException&)
514
847
  {
@@ -523,6 +856,40 @@ LocatorI::invoke(const Ice::LocatorPrx& locator, const RequestPtr& request)
523
856
  }
524
857
  }
525
858
 
859
+ void
860
+ LocatorI::exception(const Ice::LocalException& ex)
861
+ {
862
+ Lock sync(*this);
863
+ if(++_failureCount == _lookups.size() && _pendingRetryCount > 0)
864
+ {
865
+ //
866
+ // All the lookup calls failed, cancel the timer and propagate the error to the requests.
867
+ //
868
+ _timer->cancel(ICE_SHARED_FROM_THIS);
869
+ _pendingRetryCount = 0;
870
+
871
+ if(_warnOnce)
872
+ {
873
+ Ice::Warning warn(_lookup->ice_getCommunicator()->getLogger());
874
+ warn << "failed to lookup locator with lookup proxy `" << _lookup << "':\n" << ex;
875
+ _warnOnce = false;
876
+ }
877
+
878
+ if(_pendingRequests.empty())
879
+ {
880
+ notify();
881
+ }
882
+ else
883
+ {
884
+ for(vector<RequestPtr>::const_iterator p = _pendingRequests.begin(); p != _pendingRequests.end(); ++p)
885
+ {
886
+ (*p)->invoke(_voidLocator);
887
+ }
888
+ _pendingRequests.clear();
889
+ }
890
+ }
891
+ }
892
+
526
893
  void
527
894
  LocatorI::runTimerTask()
528
895
  {
@@ -531,8 +898,29 @@ LocatorI::runTimerTask()
531
898
  {
532
899
  try
533
900
  {
534
- _lookup->begin_findLocator(_instanceName, _lookupReply); // Send multicast request.
535
- _timer->schedule(this, _timeout);
901
+ _failureCount = 0;
902
+ for(vector<pair<LookupPrxPtr, LookupReplyPrxPtr> >::const_iterator l = _lookups.begin();
903
+ l != _lookups.end(); ++l)
904
+ {
905
+ #ifdef ICE_CPP11_MAPPING
906
+ auto self = shared_from_this();
907
+ l->first->findLocatorAsync(_instanceName, l->second, nullptr, [self](exception_ptr ex)
908
+ {
909
+ try
910
+ {
911
+ rethrow_exception(ex);
912
+ }
913
+ catch(const Ice::LocalException& e)
914
+ {
915
+ self->exception(e);
916
+ }
917
+ });
918
+ #else
919
+ l->first->begin_findLocator(_instanceName, l->second, Ice::newCallback(new CallbackI(this),
920
+ &CallbackI::completed));
921
+ #endif
922
+ }
923
+ _timer->schedule(ICE_SHARED_FROM_THIS, _timeout);
536
924
  return;
537
925
  }
538
926
  catch(const Ice::LocalException&)
@@ -541,16 +929,23 @@ LocatorI::runTimerTask()
541
929
  _pendingRetryCount = 0;
542
930
  }
543
931
 
544
- for(vector<RequestPtr>::const_iterator p = _pendingRequests.begin(); p != _pendingRequests.end(); ++p)
932
+ if(_pendingRequests.empty())
545
933
  {
546
- (*p)->invoke(_voidLocator); // Send pending requests on void locator.
934
+ notify();
935
+ }
936
+ else
937
+ {
938
+ for(vector<RequestPtr>::const_iterator p = _pendingRequests.begin(); p != _pendingRequests.end(); ++p)
939
+ {
940
+ (*p)->invoke(_voidLocator); // Send pending requests on void locator.
941
+ }
942
+ _pendingRequests.clear();
547
943
  }
548
- _pendingRequests.clear();
549
944
  _nextRetry = IceUtil::Time::now() + _retryDelay; // Only retry when the retry delay expires
550
945
  }
551
946
 
552
947
  void
553
- LookupReplyI::foundLocator(const Ice::LocatorPrx& locator, const Ice::Current&)
948
+ LookupReplyI::foundLocator(ICE_IN(Ice::LocatorPrxPtr) locator, const Ice::Current&)
554
949
  {
555
950
  _locator->foundLocator(locator);
556
951
  }