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,140 +0,0 @@
1
- // **********************************************************************
2
- //
3
- // Copyright (c) 2003-2018 ZeroC, Inc. All rights reserved.
4
- //
5
- // This copy of Ice is licensed to you under the terms described in the
6
- // ICE_LICENSE file included in this distribution.
7
- //
8
- // **********************************************************************
9
-
10
- #include <ObjectFactory.h>
11
- #include <Types.h>
12
- #include <Util.h>
13
- #include <Ice/LocalException.h>
14
-
15
- using namespace std;
16
- using namespace IceRuby;
17
-
18
- IceRuby::ObjectFactory::ObjectFactory()
19
- {
20
- }
21
-
22
- IceRuby::ObjectFactory::~ObjectFactory()
23
- {
24
- assert(_factoryMap.empty());
25
- }
26
-
27
- Ice::ObjectPtr
28
- IceRuby::ObjectFactory::create(const string& id)
29
- {
30
- Lock sync(*this);
31
-
32
- //
33
- // Get the type information.
34
- //
35
- ClassInfoPtr info;
36
- if(id == Ice::Object::ice_staticId())
37
- {
38
- //
39
- // When the ID is that of Ice::Object, it indicates that the stream has not
40
- // found a factory and is providing us an opportunity to preserve the object.
41
- //
42
- info = lookupClassInfo("::Ice::UnknownSlicedObject");
43
- }
44
- else
45
- {
46
- info = lookupClassInfo(id);
47
- }
48
-
49
- if(!info)
50
- {
51
- return 0;
52
- }
53
-
54
- //
55
- // Check if the application has registered a factory for this id.
56
- //
57
- FactoryMap::iterator p = _factoryMap.find(id);
58
- if(p != _factoryMap.end())
59
- {
60
- //
61
- // Invoke the create method on the Ruby factory object.
62
- //
63
- volatile VALUE str = createString(id);
64
- volatile VALUE obj = callRuby(rb_funcall, p->second, rb_intern("create"), 1, str);
65
- if(NIL_P(obj))
66
- {
67
- return 0;
68
- }
69
- return new ObjectReader(obj, info);
70
- }
71
-
72
- //
73
- // Instantiate the object.
74
- //
75
- volatile VALUE obj = callRuby(rb_class_new_instance, 0, reinterpret_cast<VALUE*>(0), info->rubyClass);
76
- assert(!NIL_P(obj));
77
- return new ObjectReader(obj, info);
78
- }
79
-
80
- void
81
- IceRuby::ObjectFactory::destroy()
82
- {
83
- Lock sync(*this);
84
-
85
- for(FactoryMap::iterator p = _factoryMap.begin(); p != _factoryMap.end(); ++p)
86
- {
87
- //
88
- // Invoke the destroy method on each registered Ruby factory.
89
- //
90
- try
91
- {
92
- callRuby(rb_funcall, p->second, rb_intern("destroy"), 0);
93
- }
94
- catch(const RubyException&)
95
- {
96
- // Ignore.
97
- }
98
- }
99
- _factoryMap.clear();
100
- }
101
-
102
- void
103
- IceRuby::ObjectFactory::add(VALUE factory, const string& id)
104
- {
105
- Lock sync(*this);
106
-
107
- FactoryMap::iterator p = _factoryMap.find(id);
108
- if(p != _factoryMap.end())
109
- {
110
- Ice::AlreadyRegisteredException ex(__FILE__, __LINE__);
111
- ex.kindOfObject = "object factory";
112
- ex.id = id;
113
- throw ex;
114
- }
115
-
116
- _factoryMap.insert(FactoryMap::value_type(id, factory));
117
- }
118
-
119
- VALUE
120
- IceRuby::ObjectFactory::find(const string& id)
121
- {
122
- Lock sync(*this);
123
-
124
- FactoryMap::iterator p = _factoryMap.find(id);
125
- if(p == _factoryMap.end())
126
- {
127
- return Qnil;
128
- }
129
-
130
- return p->second;
131
- }
132
-
133
- void
134
- IceRuby::ObjectFactory::mark()
135
- {
136
- for(FactoryMap::iterator p = _factoryMap.begin(); p != _factoryMap.end(); ++p)
137
- {
138
- rb_gc_mark(p->second);
139
- }
140
- }
@@ -1,50 +0,0 @@
1
- // **********************************************************************
2
- //
3
- // Copyright (c) 2003-2018 ZeroC, Inc. All rights reserved.
4
- //
5
- // This copy of Ice is licensed to you under the terms described in the
6
- // ICE_LICENSE file included in this distribution.
7
- //
8
- // **********************************************************************
9
-
10
- #ifndef ICE_RUBY_OBJECT_FACTORY_H
11
- #define ICE_RUBY_OBJECT_FACTORY_H
12
-
13
- #include <Config.h>
14
- #include <Ice/ObjectF.h>
15
- #include <Ice/ObjectFactory.h>
16
- #include <IceUtil/Mutex.h>
17
-
18
- namespace IceRuby
19
- {
20
-
21
- //
22
- // Each communicator registers an instance of ObjectFactory as its
23
- // default object factory. This instance delegates to registered Ruby
24
- // objects, and instantiates concrete classes when no factory is present.
25
- //
26
- class ObjectFactory : public Ice::ObjectFactory, public IceUtil::Mutex
27
- {
28
- public:
29
-
30
- ObjectFactory();
31
- ~ObjectFactory();
32
-
33
- virtual Ice::ObjectPtr create(const std::string&);
34
-
35
- virtual void destroy();
36
-
37
- void add(VALUE, const std::string&);
38
- VALUE find(const std::string&);
39
- void mark();
40
-
41
- private:
42
-
43
- typedef std::map<std::string, VALUE> FactoryMap;
44
- FactoryMap _factoryMap;
45
- };
46
- typedef IceUtil::Handle<ObjectFactory> ObjectFactoryPtr;
47
-
48
- }
49
-
50
- #endif
@@ -1,1335 +0,0 @@
1
- // **********************************************************************
2
- //
3
- // Copyright (c) 2003-2018 ZeroC, Inc. All rights reserved.
4
- //
5
- // This copy of Ice is licensed to you under the terms described in the
6
- // ICE_LICENSE file included in this distribution.
7
- //
8
- // **********************************************************************
9
-
10
- #ifndef ICE_BASIC_STREAM_H
11
- #define ICE_BASIC_STREAM_H
12
-
13
- #include <IceUtil/StringConverter.h>
14
- #include <Ice/InstanceF.h>
15
- #include <Ice/Object.h>
16
- #include <Ice/ProxyF.h>
17
- #include <Ice/ObjectFactoryF.h>
18
- #include <Ice/ObjectFactoryManagerF.h>
19
- #include <Ice/Buffer.h>
20
- #include <Ice/Protocol.h>
21
- #include <Ice/SlicedDataF.h>
22
- #include <Ice/UserExceptionFactory.h>
23
- #include <Ice/StreamHelpers.h>
24
- #include <Ice/FactoryTable.h>
25
-
26
- namespace Ice
27
- {
28
-
29
- class UserException;
30
-
31
- }
32
-
33
- namespace IceInternal
34
- {
35
-
36
- template<typename T> inline void
37
- patchHandle(void* addr, const Ice::ObjectPtr& v)
38
- {
39
- IceInternal::Handle<T>* p = static_cast<IceInternal::Handle<T>*>(addr);
40
- __patch(*p, v); // Generated __patch method, necessary for forward declarations.
41
- }
42
-
43
- class ICE_API BasicStream : public Buffer
44
- {
45
- public:
46
-
47
- typedef size_t size_type;
48
- typedef void (*PatchFunc)(void*, const Ice::ObjectPtr&);
49
-
50
- BasicStream(Instance*, const Ice::EncodingVersion&);
51
- BasicStream(Instance*, const Ice::EncodingVersion&, const Ice::Byte*, const Ice::Byte*);
52
- ~BasicStream()
53
- {
54
- // Inlined for performance reasons.
55
-
56
- if(_currentReadEncaps != &_preAllocatedReadEncaps || _currentWriteEncaps != &_preAllocatedWriteEncaps)
57
- {
58
- clear(); // Not inlined.
59
- }
60
- }
61
-
62
- void clear();
63
-
64
- //
65
- // Must return Instance*, because we don't hold an InstancePtr for
66
- // optimization reasons (see comments below).
67
- //
68
- Instance* instance() const { return _instance; } // Inlined for performance reasons.
69
-
70
- void* closure() const;
71
- void* closure(void*);
72
-
73
- void swap(BasicStream&);
74
- void resetEncaps();
75
-
76
- void resize(Container::size_type sz)
77
- {
78
- b.resize(sz);
79
- i = b.end();
80
- }
81
-
82
- void startWriteObject(const Ice::SlicedDataPtr& data)
83
- {
84
- assert(_currentWriteEncaps && _currentWriteEncaps->encoder);
85
- _currentWriteEncaps->encoder->startInstance(ObjectSlice, data);
86
- }
87
- void endWriteObject()
88
- {
89
- assert(_currentWriteEncaps && _currentWriteEncaps->encoder);
90
- _currentWriteEncaps->encoder->endInstance();
91
- }
92
-
93
- void startReadObject()
94
- {
95
- assert(_currentReadEncaps && _currentReadEncaps->decoder);
96
- _currentReadEncaps->decoder->startInstance(ObjectSlice);
97
- }
98
- Ice::SlicedDataPtr endReadObject(bool preserve)
99
- {
100
- assert(_currentReadEncaps && _currentReadEncaps->decoder);
101
- return _currentReadEncaps->decoder->endInstance(preserve);
102
- }
103
-
104
- void startWriteException(const Ice::SlicedDataPtr& data)
105
- {
106
- assert(_currentWriteEncaps && _currentWriteEncaps->encoder);
107
- _currentWriteEncaps->encoder->startInstance(ExceptionSlice, data);
108
- }
109
- void endWriteException()
110
- {
111
- assert(_currentWriteEncaps && _currentWriteEncaps->encoder);
112
- _currentWriteEncaps->encoder->endInstance();
113
- }
114
-
115
- void startReadException()
116
- {
117
- assert(_currentReadEncaps && _currentReadEncaps->decoder);
118
- _currentReadEncaps->decoder->startInstance(ExceptionSlice);
119
- }
120
- Ice::SlicedDataPtr endReadException(bool preserve)
121
- {
122
- assert(_currentReadEncaps && _currentReadEncaps->decoder);
123
- return _currentReadEncaps->decoder->endInstance(preserve);
124
- }
125
-
126
- void startWriteEncaps();
127
-
128
- void startWriteEncaps(const Ice::EncodingVersion& encoding, Ice::FormatType format)
129
- {
130
- checkSupportedEncoding(encoding);
131
-
132
- WriteEncaps* oldEncaps = _currentWriteEncaps;
133
- if(!oldEncaps) // First allocated encaps?
134
- {
135
- _currentWriteEncaps = &_preAllocatedWriteEncaps;
136
- }
137
- else
138
- {
139
- _currentWriteEncaps = new WriteEncaps();
140
- _currentWriteEncaps->previous = oldEncaps;
141
- }
142
- _currentWriteEncaps->format = format;
143
- _currentWriteEncaps->encoding = encoding;
144
- _currentWriteEncaps->start = b.size();
145
-
146
- write(Ice::Int(0)); // Placeholder for the encapsulation length.
147
- write(_currentWriteEncaps->encoding);
148
- }
149
- void endWriteEncaps()
150
- {
151
- assert(_currentWriteEncaps);
152
-
153
- // Size includes size and version.
154
- const Ice::Int sz = static_cast<Ice::Int>(b.size() - _currentWriteEncaps->start);
155
- write(sz, &(*(b.begin() + _currentWriteEncaps->start)));
156
-
157
- WriteEncaps* oldEncaps = _currentWriteEncaps;
158
- _currentWriteEncaps = _currentWriteEncaps->previous;
159
- if(oldEncaps == &_preAllocatedWriteEncaps)
160
- {
161
- oldEncaps->reset();
162
- }
163
- else
164
- {
165
- delete oldEncaps;
166
- }
167
- }
168
- void endWriteEncapsChecked(); // Used by public stream API.
169
- void writeEmptyEncaps(const Ice::EncodingVersion& encoding)
170
- {
171
- checkSupportedEncoding(encoding);
172
- write(Ice::Int(6)); // Size
173
- write(encoding);
174
- }
175
- void writeEncaps(const Ice::Byte* v, Ice::Int sz)
176
- {
177
- if(sz < 6)
178
- {
179
- throwEncapsulationException(__FILE__, __LINE__);
180
- }
181
-
182
- Container::size_type position = b.size();
183
- resize(position + sz);
184
- memcpy(&b[position], &v[0], sz);
185
- }
186
-
187
- const Ice::EncodingVersion& getWriteEncoding() const
188
- {
189
- return _currentWriteEncaps ? _currentWriteEncaps->encoding : _encoding;
190
- }
191
-
192
- const Ice::EncodingVersion& startReadEncaps()
193
- {
194
- ReadEncaps* oldEncaps = _currentReadEncaps;
195
- if(!oldEncaps) // First allocated encaps?
196
- {
197
- _currentReadEncaps = &_preAllocatedReadEncaps;
198
- }
199
- else
200
- {
201
- _currentReadEncaps = new ReadEncaps();
202
- _currentReadEncaps->previous = oldEncaps;
203
- }
204
- _currentReadEncaps->start = i - b.begin();
205
-
206
- //
207
- // I don't use readSize() and writeSize() for encapsulations,
208
- // because when creating an encapsulation, I must know in advance
209
- // how many bytes the size information will require in the data
210
- // stream. If I use an Int, it is always 4 bytes. For
211
- // readSize()/writeSize(), it could be 1 or 5 bytes.
212
- //
213
- Ice::Int sz;
214
- read(sz);
215
- if(sz < 6)
216
- {
217
- throwUnmarshalOutOfBoundsException(__FILE__, __LINE__);
218
- }
219
- if(i - sizeof(Ice::Int) + sz > b.end())
220
- {
221
- throwUnmarshalOutOfBoundsException(__FILE__, __LINE__);
222
- }
223
- _currentReadEncaps->sz = sz;
224
-
225
- read(_currentReadEncaps->encoding);
226
- checkSupportedEncoding(_currentReadEncaps->encoding); // Make sure the encoding is supported
227
-
228
- return _currentReadEncaps->encoding;
229
- }
230
-
231
- void endReadEncaps()
232
- {
233
- assert(_currentReadEncaps);
234
-
235
- if(_currentReadEncaps->encoding != Ice::Encoding_1_0)
236
- {
237
- skipOpts();
238
- if(i != b.begin() + _currentReadEncaps->start + _currentReadEncaps->sz)
239
- {
240
- throwEncapsulationException(__FILE__, __LINE__);
241
- }
242
- }
243
- else if(i != b.begin() + _currentReadEncaps->start + _currentReadEncaps->sz)
244
- {
245
- if(i + 1 != b.begin() + _currentReadEncaps->start + _currentReadEncaps->sz)
246
- {
247
- throwEncapsulationException(__FILE__, __LINE__);
248
- }
249
-
250
- //
251
- // Ice version < 3.3 had a bug where user exceptions with
252
- // class members could be encoded with a trailing byte
253
- // when dispatched with AMD. So we tolerate an extra byte
254
- // in the encapsulation.
255
- //
256
- ++i;
257
- }
258
-
259
- ReadEncaps* oldEncaps = _currentReadEncaps;
260
- _currentReadEncaps = _currentReadEncaps->previous;
261
- if(oldEncaps == &_preAllocatedReadEncaps)
262
- {
263
- oldEncaps->reset();
264
- }
265
- else
266
- {
267
- delete oldEncaps;
268
- }
269
- }
270
- Ice::EncodingVersion skipEmptyEncaps()
271
- {
272
- Ice::Int sz;
273
- read(sz);
274
- if(sz < 6)
275
- {
276
- throwEncapsulationException(__FILE__, __LINE__);
277
- }
278
- if(i - sizeof(Ice::Int) + sz > b.end())
279
- {
280
- throwUnmarshalOutOfBoundsException(__FILE__, __LINE__);
281
- }
282
- Ice::EncodingVersion encoding;
283
- read(encoding);
284
- if(encoding == Ice::Encoding_1_0)
285
- {
286
- if(sz != static_cast<Ice::Int>(sizeof(Ice::Int)) + 2)
287
- {
288
- throwEncapsulationException(__FILE__, __LINE__);
289
- }
290
- }
291
- else
292
- {
293
- // Skip the optional content of the encapsulation if we are expecting an
294
- // empty encapsulation.
295
- i += sz - sizeof(Ice::Int) - 2;
296
- }
297
- return encoding;
298
- }
299
- void endReadEncapsChecked(); // Used by public stream API.
300
- Ice::EncodingVersion readEncaps(const Ice::Byte*& v, Ice::Int& sz)
301
- {
302
- Ice::EncodingVersion encoding;
303
- v = i;
304
- read(sz);
305
- if(sz < 6)
306
- {
307
- throwEncapsulationException(__FILE__, __LINE__);
308
- }
309
- if(i - sizeof(Ice::Int) + sz > b.end())
310
- {
311
- throwUnmarshalOutOfBoundsException(__FILE__, __LINE__);
312
- }
313
-
314
- read(encoding);
315
- i += sz - sizeof(Ice::Int) - 2;
316
- return encoding;
317
- }
318
-
319
- const Ice::EncodingVersion& getReadEncoding() const
320
- {
321
- return _currentReadEncaps ? _currentReadEncaps->encoding : _encoding;
322
- }
323
-
324
- Ice::Int getReadEncapsSize();
325
- Ice::EncodingVersion skipEncaps();
326
-
327
- void startWriteSlice(const std::string& typeId, int compactId, bool last)
328
- {
329
- assert(_currentWriteEncaps && _currentWriteEncaps->encoder);
330
- _currentWriteEncaps->encoder->startSlice(typeId, compactId, last);
331
- }
332
- void endWriteSlice()
333
- {
334
- assert(_currentWriteEncaps && _currentWriteEncaps->encoder);
335
- _currentWriteEncaps->encoder->endSlice();
336
- }
337
-
338
- std::string startReadSlice()
339
- {
340
- assert(_currentReadEncaps && _currentReadEncaps->decoder);
341
- return _currentReadEncaps->decoder->startSlice();
342
- }
343
- void endReadSlice()
344
- {
345
- assert(_currentReadEncaps && _currentReadEncaps->decoder);
346
- _currentReadEncaps->decoder->endSlice();
347
- }
348
- void skipSlice()
349
- {
350
- assert(_currentReadEncaps && _currentReadEncaps->decoder);
351
- _currentReadEncaps->decoder->skipSlice();
352
- }
353
-
354
- void readPendingObjects();
355
- void writePendingObjects();
356
-
357
- void writeSize(Ice::Int v) // Inlined for performance reasons.
358
- {
359
- assert(v >= 0);
360
- if(v > 254)
361
- {
362
- write(Ice::Byte(255));
363
- write(v);
364
- }
365
- else
366
- {
367
- write(static_cast<Ice::Byte>(v));
368
- }
369
- }
370
- void rewriteSize(Ice::Int v, Container::iterator dest)
371
- {
372
- assert(v >= 0);
373
- if(v > 254)
374
- {
375
- *dest++ = Ice::Byte(255);
376
- write(v, dest);
377
- }
378
- else
379
- {
380
- *dest = static_cast<Ice::Byte>(v);
381
- }
382
- }
383
- Ice::Int readSize() // Inlined for performance reasons.
384
- {
385
- Ice::Byte byte;
386
- read(byte);
387
- unsigned char val = static_cast<unsigned char>(byte);
388
- if(val == 255)
389
- {
390
- Ice::Int v;
391
- read(v);
392
- if(v < 0)
393
- {
394
- throwUnmarshalOutOfBoundsException(__FILE__, __LINE__);
395
- }
396
- return v;
397
- }
398
- else
399
- {
400
- return static_cast<Ice::Int>(static_cast<unsigned char>(byte));
401
- }
402
- }
403
-
404
- Ice::Int readAndCheckSeqSize(int);
405
-
406
- size_type startSize()
407
- {
408
- size_type position = b.size();
409
- write(Ice::Int(0));
410
- return position;
411
- }
412
-
413
- void endSize(size_type position)
414
- {
415
- rewrite(static_cast<Ice::Int>(b.size() - position) - 4, position);
416
- }
417
-
418
- void writeBlob(const std::vector<Ice::Byte>&);
419
- void readBlob(std::vector<Ice::Byte>&, Ice::Int);
420
-
421
- void writeBlob(const Ice::Byte* v, Container::size_type sz)
422
- {
423
- if(sz > 0)
424
- {
425
- Container::size_type position = b.size();
426
- resize(position + sz);
427
- memcpy(&b[position], &v[0], sz);
428
- }
429
- }
430
-
431
- void readBlob(const Ice::Byte*& v, Container::size_type sz)
432
- {
433
- if(sz > 0)
434
- {
435
- v = i;
436
- if(static_cast<Container::size_type>(b.end() - i) < sz)
437
- {
438
- throwUnmarshalOutOfBoundsException(__FILE__, __LINE__);
439
- }
440
- i += sz;
441
- }
442
- else
443
- {
444
- v = i;
445
- }
446
- }
447
-
448
- template<typename T> void write(const T& v)
449
- {
450
- Ice::StreamHelper<T, Ice::StreamableTraits<T>::helper>::write(this, v);
451
- }
452
- template<typename T> void read(T& v)
453
- {
454
- Ice::StreamHelper<T, Ice::StreamableTraits<T>::helper>::read(this, v);
455
- }
456
-
457
- template<typename T> void write(Ice::Int tag, const IceUtil::Optional<T>& v)
458
- {
459
- if(!v)
460
- {
461
- return; // Optional not set
462
- }
463
-
464
- if(writeOpt(tag, Ice::StreamOptionalHelper<T,
465
- Ice::StreamableTraits<T>::helper,
466
- Ice::StreamableTraits<T>::fixedLength>::optionalFormat))
467
- {
468
- Ice::StreamOptionalHelper<T,
469
- Ice::StreamableTraits<T>::helper,
470
- Ice::StreamableTraits<T>::fixedLength>::write(this, *v);
471
- }
472
- }
473
- template<typename T> void read(Ice::Int tag, IceUtil::Optional<T>& v)
474
- {
475
- if(readOpt(tag, Ice::StreamOptionalHelper<T,
476
- Ice::StreamableTraits<T>::helper,
477
- Ice::StreamableTraits<T>::fixedLength>::optionalFormat))
478
- {
479
- v.__setIsSet();
480
- Ice::StreamOptionalHelper<T,
481
- Ice::StreamableTraits<T>::helper,
482
- Ice::StreamableTraits<T>::fixedLength>::read(this, *v);
483
- }
484
- else
485
- {
486
- v = IceUtil::None;
487
- }
488
- }
489
-
490
- //
491
- // Template functions for sequences and custom sequences
492
- //
493
- template<typename T> void write(const std::vector<T>& v)
494
- {
495
- if(v.empty())
496
- {
497
- writeSize(0);
498
- }
499
- else
500
- {
501
- write(&v[0], &v[0] + v.size());
502
- }
503
- }
504
- template<typename T> void write(const T* begin, const T* end)
505
- {
506
- writeSize(static_cast<Ice::Int>(end - begin));
507
- for(const T* p = begin; p != end; ++p)
508
- {
509
- write(*p);
510
- }
511
- }
512
-
513
- // Read/write type and tag for optionals
514
- bool writeOpt(Ice::Int tag, Ice::OptionalFormat format)
515
- {
516
- assert(_currentWriteEncaps);
517
- if(_currentWriteEncaps->encoder)
518
- {
519
- return _currentWriteEncaps->encoder->writeOpt(tag, format);
520
- }
521
- else
522
- {
523
- return writeOptImpl(tag, format);
524
- }
525
- }
526
- bool readOpt(Ice::Int tag, Ice::OptionalFormat expectedFormat)
527
- {
528
- assert(_currentReadEncaps);
529
- if(_currentReadEncaps->decoder)
530
- {
531
- return _currentReadEncaps->decoder->readOpt(tag, expectedFormat);
532
- }
533
- else
534
- {
535
- return readOptImpl(tag, expectedFormat);
536
- }
537
- }
538
-
539
- // Byte
540
- void write(Ice::Byte v)
541
- {
542
- b.push_back(v);
543
- }
544
- void write(const Ice::Byte*, const Ice::Byte*);
545
- void read(Ice::Byte& v)
546
- {
547
- if(i >= b.end())
548
- {
549
- throwUnmarshalOutOfBoundsException(__FILE__, __LINE__);
550
- }
551
- v = *i++;
552
- }
553
- void read(std::vector<Ice::Byte>&);
554
- void read(std::pair<const Ice::Byte*, const Ice::Byte*>&);
555
-
556
- // This method is useful for generic stream helpers
557
- void read(std::pair<const Ice::Byte*, const Ice::Byte*>& p, ::IceUtil::ScopedArray<Ice::Byte>& result)
558
- {
559
- result.reset();
560
- read(p);
561
- }
562
-
563
- // Bool
564
- void write(bool v)
565
- {
566
- b.push_back(static_cast<Ice::Byte>(v));
567
- }
568
- void write(const std::vector<bool>&);
569
- void write(const bool*, const bool*);
570
- void read(bool& v)
571
- {
572
- if(i >= b.end())
573
- {
574
- throwUnmarshalOutOfBoundsException(__FILE__, __LINE__);
575
- }
576
- v = (0 != *i++);
577
- }
578
- void read(std::vector<bool>&);
579
- void read(std::pair<const bool*, const bool*>&, ::IceUtil::ScopedArray<bool>&);
580
-
581
- // Short
582
- void write(Ice::Short);
583
- void write(const Ice::Short*, const Ice::Short*);
584
- void read(Ice::Short&);
585
- void read(std::vector<Ice::Short>&);
586
- void read(std::pair<const Ice::Short*, const Ice::Short*>&, ::IceUtil::ScopedArray<Ice::Short>&);
587
-
588
- // Int
589
- void write(Ice::Int v) // Inlined for performance reasons.
590
- {
591
- Container::size_type position = b.size();
592
- resize(position + sizeof(Ice::Int));
593
- write(v, &b[position]);
594
- }
595
- void write(Ice::Int v, Container::iterator dest)
596
- {
597
- #ifdef ICE_BIG_ENDIAN
598
- const Ice::Byte* src = reinterpret_cast<const Ice::Byte*>(&v) + sizeof(Ice::Int) - 1;
599
- *dest++ = *src--;
600
- *dest++ = *src--;
601
- *dest++ = *src--;
602
- *dest = *src;
603
- #else
604
- const Ice::Byte* src = reinterpret_cast<const Ice::Byte*>(&v);
605
- *dest++ = *src++;
606
- *dest++ = *src++;
607
- *dest++ = *src++;
608
- *dest = *src;
609
- #endif
610
- }
611
-
612
- void read(Ice::Int& v) // Inlined for performance reasons.
613
- {
614
- if(b.end() - i < static_cast<int>(sizeof(Ice::Int)))
615
- {
616
- throwUnmarshalOutOfBoundsException(__FILE__, __LINE__);
617
- }
618
- const Ice::Byte* src = &(*i);
619
- i += sizeof(Ice::Int);
620
- #ifdef ICE_BIG_ENDIAN
621
- Ice::Byte* dest = reinterpret_cast<Ice::Byte*>(&v) + sizeof(Ice::Int) - 1;
622
- *dest-- = *src++;
623
- *dest-- = *src++;
624
- *dest-- = *src++;
625
- *dest = *src;
626
- #else
627
- Ice::Byte* dest = reinterpret_cast<Ice::Byte*>(&v);
628
- *dest++ = *src++;
629
- *dest++ = *src++;
630
- *dest++ = *src++;
631
- *dest = *src;
632
- #endif
633
- }
634
-
635
- void write(const Ice::Int*, const Ice::Int*);
636
- void read(std::vector<Ice::Int>&);
637
- void read(std::pair<const Ice::Int*, const Ice::Int*>&, ::IceUtil::ScopedArray<Ice::Int>&);
638
-
639
- // Long
640
- void write(Ice::Long);
641
- void write(const Ice::Long*, const Ice::Long*);
642
- void read(Ice::Long&);
643
- void read(std::vector<Ice::Long>&);
644
- void read(std::pair<const Ice::Long*, const Ice::Long*>&, ::IceUtil::ScopedArray<Ice::Long>&);
645
-
646
- // Float
647
- void write(Ice::Float);
648
- void write(const Ice::Float*, const Ice::Float*);
649
- void read(Ice::Float&);
650
- void read(std::vector<Ice::Float>&);
651
- void read(std::pair<const Ice::Float*, const Ice::Float*>&, ::IceUtil::ScopedArray<Ice::Float>&);
652
-
653
- // Double
654
- void write(Ice::Double);
655
- void write(const Ice::Double*, const Ice::Double*);
656
- void read(Ice::Double&);
657
- void read(std::vector<Ice::Double>&);
658
- void read(std::pair<const Ice::Double*, const Ice::Double*>&, ::IceUtil::ScopedArray<Ice::Double>&);
659
-
660
- // String
661
- void write(const std::string& v, bool convert = true)
662
- {
663
- Ice::Int sz = static_cast<Ice::Int>(v.size());
664
- if(convert && sz > 0 && _stringConverter != 0)
665
- {
666
- writeConverted(v.data(), static_cast<size_t>(sz));
667
- }
668
- else
669
- {
670
- writeSize(sz);
671
- if(sz > 0)
672
- {
673
- Container::size_type position = b.size();
674
- resize(position + sz);
675
- memcpy(&b[position], v.data(), sz);
676
- }
677
- }
678
- }
679
-
680
- // for custom strings
681
- void write(const char* vdata, size_t vsize, bool convert = true)
682
- {
683
- Ice::Int sz = static_cast<Ice::Int>(vsize);
684
- if(convert && sz > 0 && _stringConverter != 0)
685
- {
686
- writeConverted(vdata, vsize);
687
- }
688
- else
689
- {
690
- writeSize(sz);
691
- if(sz > 0)
692
- {
693
- Container::size_type position = b.size();
694
- resize(position + sz);
695
- memcpy(&b[position], vdata, vsize);
696
- }
697
- }
698
- }
699
-
700
- // Null-terminated C string
701
- void write(const char* vdata, bool convert = true)
702
- {
703
- write(vdata, strlen(vdata), convert);
704
- }
705
-
706
- void write(const std::string*, const std::string*, bool = true);
707
-
708
- void read(std::string& v, bool convert = true)
709
- {
710
- Ice::Int sz = readSize();
711
- if(sz > 0)
712
- {
713
- if(b.end() - i < sz)
714
- {
715
- throwUnmarshalOutOfBoundsException(__FILE__, __LINE__);
716
- }
717
- if(convert && _stringConverter != 0)
718
- {
719
- readConverted(v, sz);
720
- }
721
- else
722
- {
723
- std::string(reinterpret_cast<const char*>(&*i), reinterpret_cast<const char*>(&*i) + sz).swap(v);
724
- }
725
- i += sz;
726
- }
727
- else
728
- {
729
- v.clear();
730
- }
731
- }
732
-
733
- // For custom strings, convert = false
734
- void read(const char*& vdata, size_t& vsize)
735
- {
736
- Ice::Int sz = readSize();
737
- if(sz > 0)
738
- {
739
- if(b.end() - i < sz)
740
- {
741
- throwUnmarshalOutOfBoundsException(__FILE__, __LINE__);
742
- }
743
-
744
- vdata = reinterpret_cast<const char*>(&*i);
745
- vsize = static_cast<size_t>(sz);
746
- i += sz;
747
- }
748
- else
749
- {
750
- vdata = 0;
751
- vsize = 0;
752
- }
753
- }
754
-
755
- // For custom strings, convert = true
756
- void read(const char*& vdata, size_t& vsize, std::string& holder)
757
- {
758
- if(_stringConverter == 0)
759
- {
760
- holder.clear();
761
- read(vdata, vsize);
762
- }
763
- else
764
- {
765
- Ice::Int sz = readSize();
766
- if(sz > 0)
767
- {
768
- if(b.end() - i < sz)
769
- {
770
- throwUnmarshalOutOfBoundsException(__FILE__, __LINE__);
771
- }
772
-
773
- readConverted(holder, sz);
774
- vdata = holder.data();
775
- vsize = holder.size();
776
- }
777
- else
778
- {
779
- holder.clear();
780
- vdata = 0;
781
- vsize = 0;
782
- }
783
- }
784
- }
785
-
786
- void read(std::vector<std::string>&, bool = true);
787
-
788
- void write(const std::wstring& v);
789
- void write(const std::wstring*, const std::wstring*);
790
- void read(std::wstring&);
791
- void read(std::vector<std::wstring>&);
792
-
793
- // Proxy
794
- void write(const Ice::ObjectPrx&);
795
- template<typename T> void write(const IceInternal::ProxyHandle<T>& v)
796
- {
797
- write(Ice::ObjectPrx(upCast(v.get())));
798
- }
799
- void read(Ice::ObjectPrx&);
800
- template<typename T> void read(IceInternal::ProxyHandle<T>& v)
801
- {
802
- __read(this, v); // Generated __read method, necessary for forward declarations.
803
- }
804
-
805
- // Class
806
- void write(const Ice::ObjectPtr& v)
807
- {
808
- initWriteEncaps();
809
- _currentWriteEncaps->encoder->write(v);
810
- }
811
- template<typename T> void write(const IceInternal::Handle<T>& v)
812
- {
813
- write(Ice::ObjectPtr(upCast(v.get())));
814
- }
815
- void read(PatchFunc patchFunc, void* patchAddr)
816
- {
817
- initReadEncaps();
818
- _currentReadEncaps->decoder->read(patchFunc, patchAddr);
819
- }
820
- template<typename T> void read(IceInternal::Handle<T>& v)
821
- {
822
- read(&patchHandle<T>, &v);
823
- }
824
-
825
- // Enum
826
- Ice::Int readEnum(Ice::Int);
827
- void writeEnum(Ice::Int, Ice::Int);
828
-
829
- // Exception
830
- void writeException(const Ice::UserException&);
831
- void throwException(const UserExceptionFactoryPtr& = 0);
832
-
833
- void sliceObjects(bool);
834
-
835
- // Read/write/skip optionals
836
- bool readOptImpl(Ice::Int, Ice::OptionalFormat);
837
- bool writeOptImpl(Ice::Int, Ice::OptionalFormat);
838
- void skipOpt(Ice::OptionalFormat);
839
- void skipOpts();
840
-
841
- // Skip bytes from the stream
842
- void skip(size_type size)
843
- {
844
- if(i + size > b.end())
845
- {
846
- throwUnmarshalOutOfBoundsException(__FILE__, __LINE__);
847
- }
848
- i += size;
849
- }
850
- void skipSize()
851
- {
852
- Ice::Byte bt;
853
- read(bt);
854
- if(static_cast<unsigned char>(bt) == 255)
855
- {
856
- skip(4);
857
- }
858
- }
859
-
860
- size_type pos()
861
- {
862
- return i - b.begin();
863
- }
864
-
865
- void rewrite(Ice::Int value, size_type p)
866
- {
867
- write(value, b.begin() + p);
868
- }
869
-
870
- private:
871
-
872
- //
873
- // String
874
- //
875
- void writeConverted(const char*, size_t);
876
- void readConverted(std::string&, Ice::Int);
877
-
878
- //
879
- // I can't throw these exception from inline functions from within
880
- // this file, because I cannot include the header with the
881
- // exceptions. Doing so would screw up the whole include file
882
- // ordering.
883
- //
884
- void throwUnmarshalOutOfBoundsException(const char*, int);
885
- void throwEncapsulationException(const char*, int);
886
-
887
- //
888
- // Optimization. The instance may not be deleted while a
889
- // stack-allocated BasicStream still holds it.
890
- //
891
- Instance* _instance;
892
-
893
- //
894
- // The public stream API needs to attach data to a stream.
895
- //
896
- void* _closure;
897
-
898
- class ReadEncaps;
899
- class WriteEncaps;
900
- enum SliceType { NoSlice, ObjectSlice, ExceptionSlice };
901
-
902
- typedef std::vector<Ice::ObjectPtr> ObjectList;
903
-
904
- class ICE_API EncapsDecoder : private ::IceUtil::noncopyable
905
- {
906
- public:
907
-
908
- virtual ~EncapsDecoder() { }
909
-
910
- virtual void read(PatchFunc, void*) = 0;
911
- virtual void throwException(const UserExceptionFactoryPtr&) = 0;
912
-
913
- virtual void startInstance(SliceType) = 0;
914
- virtual Ice::SlicedDataPtr endInstance(bool) = 0;
915
- virtual const std::string& startSlice() = 0;
916
- virtual void endSlice() = 0;
917
- virtual void skipSlice() = 0;
918
-
919
- virtual bool readOpt(Ice::Int, Ice::OptionalFormat)
920
- {
921
- return false;
922
- }
923
-
924
- virtual void readPendingObjects()
925
- {
926
- }
927
-
928
- protected:
929
-
930
- EncapsDecoder(BasicStream* stream, ReadEncaps* encaps, bool sliceObjects, size_t classGraphDepthMax,
931
- const ObjectFactoryManagerPtr& f) :
932
- _stream(stream), _encaps(encaps), _sliceObjects(sliceObjects), _classGraphDepthMax(classGraphDepthMax),
933
- _classGraphDepth(0), _servantFactoryManager(f), _typeIdIndex(0)
934
- {
935
- }
936
-
937
- std::string readTypeId(bool);
938
- Ice::ObjectPtr newInstance(const std::string&);
939
-
940
- void addPatchEntry(Ice::Int, PatchFunc, void*);
941
- void unmarshal(Ice::Int, const Ice::ObjectPtr&);
942
-
943
- typedef std::map<Ice::Int, Ice::ObjectPtr> IndexToPtrMap;
944
- typedef std::map<Ice::Int, std::string> TypeIdReadMap;
945
-
946
- struct PatchEntry
947
- {
948
- PatchFunc patchFunc;
949
- void* patchAddr;
950
- size_t classGraphDepth;
951
- };
952
- typedef std::vector<PatchEntry> PatchList;
953
- typedef std::map<Ice::Int, PatchList> PatchMap;
954
-
955
- BasicStream* _stream;
956
- ReadEncaps* _encaps;
957
- const bool _sliceObjects;
958
- const size_t _classGraphDepthMax;
959
- size_t _classGraphDepth;
960
- ObjectFactoryManagerPtr _servantFactoryManager;
961
-
962
- // Encapsulation attributes for object un-marshalling
963
- PatchMap _patchMap;
964
-
965
- private:
966
-
967
- // Encapsulation attributes for object un-marshalling
968
- IndexToPtrMap _unmarshaledMap;
969
- TypeIdReadMap _typeIdMap;
970
- Ice::Int _typeIdIndex;
971
- ObjectList _objectList;
972
- };
973
-
974
- class ICE_API EncapsDecoder10 : public EncapsDecoder
975
- {
976
- public:
977
-
978
- EncapsDecoder10(BasicStream* stream, ReadEncaps* encaps, bool sliceObjects, size_t classGraphDepthMax,
979
- const ObjectFactoryManagerPtr& f) :
980
- EncapsDecoder(stream, encaps, sliceObjects, classGraphDepthMax, f),
981
- _sliceType(NoSlice)
982
- {
983
- }
984
-
985
- virtual void read(PatchFunc, void*);
986
- virtual void throwException(const UserExceptionFactoryPtr&);
987
-
988
- virtual void startInstance(SliceType);
989
- virtual Ice::SlicedDataPtr endInstance(bool);
990
- virtual const std::string& startSlice();
991
- virtual void endSlice();
992
- virtual void skipSlice();
993
-
994
- virtual void readPendingObjects();
995
-
996
- private:
997
-
998
- void readInstance();
999
-
1000
- // Instance attributes
1001
- SliceType _sliceType;
1002
- bool _skipFirstSlice;
1003
-
1004
- // Slice attributes
1005
- Ice::Int _sliceSize;
1006
- std::string _typeId;
1007
- };
1008
-
1009
- class ICE_API EncapsDecoder11 : public EncapsDecoder
1010
- {
1011
- public:
1012
-
1013
- EncapsDecoder11(BasicStream* stream, ReadEncaps* encaps, bool sliceObjects, size_t classGraphDepthMax,
1014
- const ObjectFactoryManagerPtr& f) :
1015
- EncapsDecoder(stream, encaps, sliceObjects, classGraphDepthMax, f),
1016
- _preAllocatedInstanceData(0), _current(0), _objectIdIndex(1)
1017
- {
1018
- }
1019
-
1020
- virtual void read(PatchFunc, void*);
1021
- virtual void throwException(const UserExceptionFactoryPtr&);
1022
-
1023
- virtual void startInstance(SliceType);
1024
- virtual Ice::SlicedDataPtr endInstance(bool);
1025
- virtual const std::string& startSlice();
1026
- virtual void endSlice();
1027
- virtual void skipSlice();
1028
-
1029
- virtual bool readOpt(Ice::Int, Ice::OptionalFormat);
1030
-
1031
- private:
1032
-
1033
- Ice::Int readInstance(Ice::Int, PatchFunc, void*);
1034
- Ice::SlicedDataPtr readSlicedData();
1035
-
1036
- struct IndirectPatchEntry
1037
- {
1038
- Ice::Int index;
1039
- PatchFunc patchFunc;
1040
- void* patchAddr;
1041
- };
1042
- typedef std::vector<IndirectPatchEntry> IndirectPatchList;
1043
-
1044
- typedef std::vector<Ice::Int> IndexList;
1045
- typedef std::vector<IndexList> IndexListList;
1046
-
1047
- struct InstanceData
1048
- {
1049
- InstanceData(InstanceData* p) : previous(p), next(0)
1050
- {
1051
- if(previous)
1052
- {
1053
- previous->next = this;
1054
- }
1055
- }
1056
-
1057
- ~InstanceData()
1058
- {
1059
- if(next)
1060
- {
1061
- delete next;
1062
- }
1063
- }
1064
-
1065
- // Instance attributes
1066
- SliceType sliceType;
1067
- bool skipFirstSlice;
1068
- Ice::SliceInfoSeq slices; // Preserved slices.
1069
- IndexListList indirectionTables;
1070
-
1071
- // Slice attributes
1072
- Ice::Byte sliceFlags;
1073
- Ice::Int sliceSize;
1074
- std::string typeId;
1075
- int compactId;
1076
- IndirectPatchList indirectPatchList;
1077
-
1078
- InstanceData* previous;
1079
- InstanceData* next;
1080
- };
1081
- InstanceData _preAllocatedInstanceData;
1082
- InstanceData* _current;
1083
-
1084
- void push(SliceType sliceType)
1085
- {
1086
- if(!_current)
1087
- {
1088
- _current = &_preAllocatedInstanceData;
1089
- }
1090
- else
1091
- {
1092
- _current = _current->next ? _current->next : new InstanceData(_current);
1093
- }
1094
- _current->sliceType = sliceType;
1095
- _current->skipFirstSlice = false;
1096
- }
1097
-
1098
- Ice::Int _objectIdIndex; // The ID of the next object to un-marshal.
1099
- };
1100
-
1101
- class ICE_API EncapsEncoder : private ::IceUtil::noncopyable
1102
- {
1103
- public:
1104
-
1105
- virtual ~EncapsEncoder() { }
1106
-
1107
- virtual void write(const Ice::ObjectPtr&) = 0;
1108
- virtual void write(const Ice::UserException&) = 0;
1109
-
1110
- virtual void startInstance(SliceType, const Ice::SlicedDataPtr&) = 0;
1111
- virtual void endInstance() = 0;
1112
- virtual void startSlice(const std::string&, int, bool) = 0;
1113
- virtual void endSlice() = 0;
1114
-
1115
- virtual bool writeOpt(Ice::Int, Ice::OptionalFormat)
1116
- {
1117
- return false;
1118
- }
1119
-
1120
- virtual void writePendingObjects()
1121
- {
1122
- }
1123
-
1124
- protected:
1125
-
1126
- EncapsEncoder(BasicStream* stream, WriteEncaps* encaps) : _stream(stream), _encaps(encaps), _typeIdIndex(0)
1127
- {
1128
- }
1129
-
1130
- Ice::Int registerTypeId(const std::string&);
1131
-
1132
- BasicStream* _stream;
1133
- WriteEncaps* _encaps;
1134
-
1135
- typedef std::map<Ice::ObjectPtr, Ice::Int> PtrToIndexMap;
1136
- typedef std::map<std::string, Ice::Int> TypeIdWriteMap;
1137
-
1138
- // Encapsulation attributes for object marshalling.
1139
- PtrToIndexMap _marshaledMap;
1140
-
1141
- private:
1142
-
1143
- // Encapsulation attributes for object marshalling.
1144
- TypeIdWriteMap _typeIdMap;
1145
- Ice::Int _typeIdIndex;
1146
- };
1147
-
1148
- class ICE_API EncapsEncoder10 : public EncapsEncoder
1149
- {
1150
- public:
1151
-
1152
- EncapsEncoder10(BasicStream* stream, WriteEncaps* encaps) :
1153
- EncapsEncoder(stream, encaps), _sliceType(NoSlice), _objectIdIndex(0)
1154
- {
1155
- }
1156
-
1157
- virtual void write(const Ice::ObjectPtr&);
1158
- virtual void write(const Ice::UserException&);
1159
-
1160
- virtual void startInstance(SliceType, const Ice::SlicedDataPtr&);
1161
- virtual void endInstance();
1162
- virtual void startSlice(const std::string&, int, bool);
1163
- virtual void endSlice();
1164
-
1165
- virtual void writePendingObjects();
1166
-
1167
- private:
1168
-
1169
- Ice::Int registerObject(const Ice::ObjectPtr&);
1170
-
1171
- // Instance attributes
1172
- SliceType _sliceType;
1173
-
1174
- // Slice attributes
1175
- Container::size_type _writeSlice; // Position of the slice data members
1176
-
1177
- // Encapsulation attributes for object marshalling.
1178
- Ice::Int _objectIdIndex;
1179
- PtrToIndexMap _toBeMarshaledMap;
1180
- };
1181
-
1182
- class ICE_API EncapsEncoder11 : public EncapsEncoder
1183
- {
1184
- public:
1185
-
1186
- EncapsEncoder11(BasicStream* stream, WriteEncaps* encaps) :
1187
- EncapsEncoder(stream, encaps), _preAllocatedInstanceData(0), _current(0), _objectIdIndex(1)
1188
- {
1189
- }
1190
-
1191
- virtual void write(const Ice::ObjectPtr&);
1192
- virtual void write(const Ice::UserException&);
1193
-
1194
- virtual void startInstance(SliceType, const Ice::SlicedDataPtr&);
1195
- virtual void endInstance();
1196
- virtual void startSlice(const std::string&, int, bool);
1197
- virtual void endSlice();
1198
-
1199
- virtual bool writeOpt(Ice::Int, Ice::OptionalFormat);
1200
-
1201
- private:
1202
-
1203
- void writeSlicedData(const Ice::SlicedDataPtr&);
1204
- void writeInstance(const Ice::ObjectPtr&);
1205
-
1206
- struct InstanceData
1207
- {
1208
- InstanceData(InstanceData* p) : previous(p), next(0)
1209
- {
1210
- if(previous)
1211
- {
1212
- previous->next = this;
1213
- }
1214
- }
1215
-
1216
- ~InstanceData()
1217
- {
1218
- if(next)
1219
- {
1220
- delete next;
1221
- }
1222
- }
1223
-
1224
- // Instance attributes
1225
- SliceType sliceType;
1226
- bool firstSlice;
1227
-
1228
- // Slice attributes
1229
- Ice::Byte sliceFlags;
1230
- Container::size_type writeSlice; // Position of the slice data members
1231
- Container::size_type sliceFlagsPos; // Position of the slice flags
1232
- PtrToIndexMap indirectionMap;
1233
- ObjectList indirectionTable;
1234
-
1235
- InstanceData* previous;
1236
- InstanceData* next;
1237
- };
1238
- InstanceData _preAllocatedInstanceData;
1239
- InstanceData* _current;
1240
-
1241
- Ice::Int _objectIdIndex; // The ID of the next object to marhsal
1242
- };
1243
-
1244
- class ReadEncaps : private ::IceUtil::noncopyable
1245
- {
1246
- public:
1247
-
1248
- ReadEncaps() : start(0), decoder(0), previous(0)
1249
- {
1250
- // Inlined for performance reasons.
1251
- }
1252
- ~ReadEncaps()
1253
- {
1254
- // Inlined for performance reasons.
1255
- delete decoder;
1256
- }
1257
- void reset()
1258
- {
1259
- // Inlined for performance reasons.
1260
- delete decoder;
1261
- decoder = 0;
1262
-
1263
- previous = 0;
1264
- }
1265
-
1266
- Container::size_type start;
1267
- Ice::Int sz;
1268
- Ice::EncodingVersion encoding;
1269
-
1270
- EncapsDecoder* decoder;
1271
-
1272
- ReadEncaps* previous;
1273
- };
1274
-
1275
- class WriteEncaps : private ::IceUtil::noncopyable
1276
- {
1277
-
1278
- public:
1279
-
1280
- WriteEncaps() : format(Ice::DefaultFormat), encoder(0), previous(0)
1281
- {
1282
- // Inlined for performance reasons.
1283
- }
1284
- ~WriteEncaps()
1285
- {
1286
- // Inlined for performance reasons.
1287
- delete encoder;
1288
- }
1289
- void reset()
1290
- {
1291
- // Inlined for performance reasons.
1292
- delete encoder;
1293
- encoder = 0;
1294
-
1295
- previous = 0;
1296
- }
1297
-
1298
- Container::size_type start;
1299
- Ice::EncodingVersion encoding;
1300
- Ice::FormatType format;
1301
-
1302
- EncapsEncoder* encoder;
1303
-
1304
- WriteEncaps* previous;
1305
- };
1306
-
1307
- //
1308
- // The encoding version to use when there's no encapsulation to
1309
- // read from or write to. This is for example used to read message
1310
- // headers or when the user is using the streaming API with no
1311
- // encapsulation.
1312
- //
1313
- Ice::EncodingVersion _encoding;
1314
-
1315
- ReadEncaps* _currentReadEncaps;
1316
- WriteEncaps* _currentWriteEncaps;
1317
-
1318
- void initReadEncaps();
1319
- void initWriteEncaps();
1320
-
1321
- ReadEncaps _preAllocatedReadEncaps;
1322
- WriteEncaps _preAllocatedWriteEncaps;
1323
-
1324
- bool _sliceObjects;
1325
-
1326
- const IceUtil::StringConverterPtr _stringConverter;
1327
- const IceUtil::WstringConverterPtr _wstringConverter;
1328
-
1329
- int _startSeq;
1330
- int _minSeqSize;
1331
- };
1332
-
1333
- } // End namespace IceInternal
1334
-
1335
- #endif