zeroc-ice 3.6.5 → 3.7.0

Sign up to get free protection for your applications and to get access to all the features.
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