zeroc-ice 3.6.5 → 3.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (752) hide show
  1. checksums.yaml +4 -4
  2. data/BZIP2_LICENSE +42 -0
  3. data/ICE_LICENSE +17 -17
  4. data/LICENSE +12 -12
  5. data/bin/slice2rb +1 -1
  6. data/ext/Communicator.cpp +150 -53
  7. data/ext/Communicator.h +1 -1
  8. data/ext/Config.h +2 -12
  9. data/ext/Connection.cpp +89 -68
  10. data/ext/Connection.h +1 -1
  11. data/ext/Endpoint.cpp +16 -45
  12. data/ext/Endpoint.h +1 -1
  13. data/ext/ImplicitContext.cpp +1 -5
  14. data/ext/ImplicitContext.h +1 -1
  15. data/ext/Init.cpp +4 -1
  16. data/ext/Logger.cpp +1 -1
  17. data/ext/Logger.h +1 -1
  18. data/ext/Operation.cpp +33 -44
  19. data/ext/Operation.h +1 -1
  20. data/ext/Properties.cpp +1 -1
  21. data/ext/Properties.h +1 -1
  22. data/ext/Proxy.cpp +22 -57
  23. data/ext/Proxy.h +1 -1
  24. data/ext/Slice.cpp +5 -5
  25. data/ext/Slice.h +1 -1
  26. data/ext/Types.cpp +244 -171
  27. data/ext/Types.h +118 -66
  28. data/ext/Util.cpp +13 -9
  29. data/ext/Util.h +10 -10
  30. data/ext/ValueFactoryManager.cpp +445 -0
  31. data/ext/ValueFactoryManager.h +100 -0
  32. data/ext/extconf.rb +47 -45
  33. data/ext/ice/bzip2/blocksort.c +1094 -0
  34. data/ext/ice/bzip2/bzlib.c +1572 -0
  35. data/ext/ice/bzip2/bzlib.h +282 -0
  36. data/ext/ice/bzip2/bzlib_private.h +509 -0
  37. data/ext/ice/bzip2/compress.c +672 -0
  38. data/ext/ice/bzip2/crctable.c +104 -0
  39. data/ext/ice/bzip2/decompress.c +646 -0
  40. data/ext/ice/bzip2/huffman.c +205 -0
  41. data/ext/ice/bzip2/randtable.c +84 -0
  42. data/ext/ice/cpp/include/Ice/Application.h +77 -60
  43. data/ext/ice/cpp/include/Ice/AsyncResult.h +34 -318
  44. data/ext/ice/cpp/include/Ice/AsyncResultF.h +4 -2
  45. data/ext/ice/cpp/include/Ice/BatchRequestInterceptor.h +5 -10
  46. data/ext/ice/cpp/include/Ice/BatchRequestQueueF.h +1 -1
  47. data/ext/ice/cpp/include/Ice/Buffer.h +10 -10
  48. data/ext/ice/cpp/include/Ice/CommunicatorAsync.h +14 -12
  49. data/ext/ice/cpp/include/Ice/Comparable.h +130 -0
  50. data/ext/ice/cpp/include/Ice/Config.h +7 -36
  51. data/ext/ice/cpp/include/Ice/ConnectionAsync.h +107 -11
  52. data/ext/ice/cpp/include/Ice/ConnectionIF.h +5 -1
  53. data/ext/ice/cpp/include/Ice/ConsoleUtil.h +28 -0
  54. data/ext/ice/cpp/include/Ice/{DefaultObjectFactory.h → DefaultValueFactory.h} +28 -14
  55. data/ext/ice/cpp/include/Ice/DispatchInterceptor.h +4 -6
  56. data/ext/ice/cpp/include/Ice/Dispatcher.h +14 -13
  57. data/ext/ice/cpp/include/Ice/DynamicLibrary.h +7 -5
  58. data/ext/ice/cpp/include/Ice/DynamicLibraryF.h +1 -1
  59. data/ext/ice/cpp/include/Ice/Exception.h +66 -56
  60. data/ext/ice/cpp/include/Ice/ExceptionHelpers.h +69 -0
  61. data/ext/ice/cpp/include/Ice/FactoryTable.h +11 -12
  62. data/ext/ice/cpp/include/Ice/FactoryTableInit.h +27 -25
  63. data/ext/ice/cpp/include/Ice/Format.h +6 -1
  64. data/ext/ice/cpp/include/Ice/Functional.h +33 -33
  65. data/ext/ice/cpp/include/Ice/GCObject.h +9 -5
  66. data/ext/ice/cpp/include/Ice/Handle.h +6 -11
  67. data/ext/ice/cpp/include/Ice/Ice.h +9 -5
  68. data/ext/ice/cpp/include/{IceUtil → Ice}/IconvStringConverter.h +108 -62
  69. data/ext/ice/cpp/include/Ice/Incoming.h +109 -33
  70. data/ext/ice/cpp/include/Ice/IncomingAsync.h +63 -23
  71. data/ext/ice/cpp/include/Ice/IncomingAsyncF.h +7 -1
  72. data/ext/ice/cpp/include/Ice/Initialize.h +178 -38
  73. data/ext/ice/cpp/include/Ice/InputStream.h +994 -0
  74. data/ext/ice/cpp/include/Ice/InstanceF.h +1 -2
  75. data/ext/ice/cpp/include/Ice/InterfaceByValue.h +46 -0
  76. data/ext/ice/cpp/include/Ice/LocalObject.h +9 -9
  77. data/ext/ice/cpp/include/Ice/LocalObjectF.h +1 -1
  78. data/ext/ice/cpp/include/Ice/LoggerUtil.h +20 -14
  79. data/ext/ice/cpp/include/Ice/MetricsAdminI.h +114 -65
  80. data/ext/ice/cpp/include/Ice/MetricsFunctional.h +23 -5
  81. data/ext/ice/cpp/include/Ice/MetricsObserverI.h +99 -26
  82. data/ext/ice/cpp/include/Ice/NativePropertiesAdmin.h +17 -4
  83. data/ext/ice/cpp/include/Ice/Object.h +105 -56
  84. data/ext/ice/cpp/include/Ice/ObjectF.h +8 -3
  85. data/ext/ice/cpp/include/Ice/ObserverHelper.h +18 -8
  86. data/ext/ice/cpp/include/Ice/Optional.h +1084 -0
  87. data/ext/ice/cpp/include/Ice/OutgoingAsync.h +655 -84
  88. data/ext/ice/cpp/include/Ice/OutgoingAsyncF.h +12 -6
  89. data/ext/ice/cpp/include/Ice/OutputStream.h +753 -0
  90. data/ext/ice/cpp/include/Ice/Protocol.h +19 -12
  91. data/ext/ice/cpp/include/Ice/Proxy.h +1329 -717
  92. data/ext/ice/cpp/include/Ice/ProxyF.h +11 -33
  93. data/ext/ice/cpp/include/Ice/ProxyFactoryF.h +1 -1
  94. data/ext/ice/cpp/include/Ice/ProxyHandle.h +34 -50
  95. data/ext/ice/cpp/include/Ice/ReferenceF.h +1 -1
  96. data/ext/ice/cpp/include/Ice/RegisterPlugins.h +22 -3
  97. data/ext/ice/cpp/include/Ice/RequestHandlerF.h +10 -4
  98. data/ext/ice/cpp/include/Ice/ResponseHandlerF.h +6 -1
  99. data/ext/ice/cpp/include/{IceUtil → Ice}/SHA1.h +16 -16
  100. data/ext/ice/cpp/include/Ice/ServantManagerF.h +1 -1
  101. data/ext/ice/cpp/include/Ice/Service.h +13 -18
  102. data/ext/ice/cpp/include/Ice/SliceChecksums.h +1 -1
  103. data/ext/ice/cpp/include/Ice/SlicedData.h +46 -20
  104. data/ext/ice/cpp/include/Ice/SlicedDataF.h +14 -6
  105. data/ext/ice/cpp/include/Ice/StreamHelpers.h +159 -49
  106. data/ext/ice/cpp/include/Ice/StringConverter.h +52 -0
  107. data/ext/ice/cpp/include/Ice/ThreadPoolF.h +1 -1
  108. data/{slice/Ice/ObjectFactoryF.ice → ext/ice/cpp/include/Ice/UUID.h} +9 -7
  109. data/ext/ice/cpp/include/{IceUtil → Ice}/UniquePtr.h +21 -22
  110. data/ext/ice/cpp/include/Ice/UniqueRef.h +98 -0
  111. data/ext/ice/cpp/include/Ice/UserExceptionFactory.h +40 -8
  112. data/ext/ice/cpp/include/Ice/Value.h +104 -0
  113. data/{slice/Freeze/ConnectionF.ice → ext/ice/cpp/include/Ice/ValueF.h} +11 -7
  114. data/ext/ice/cpp/include/IceSSL/Config.h +8 -23
  115. data/ext/ice/cpp/include/IceSSL/IceSSL.h +17 -6
  116. data/ext/ice/cpp/include/IceSSL/OpenSSL.h +130 -0
  117. data/ext/ice/cpp/include/IceSSL/Plugin.h +172 -259
  118. data/ext/ice/cpp/include/IceSSL/SChannel.h +66 -0
  119. data/ext/ice/cpp/include/IceSSL/SecureTransport.h +66 -0
  120. data/ext/ice/cpp/include/IceSSL/UWP.h +58 -0
  121. data/ext/ice/cpp/include/IceUtil/Atomic.h +8 -10
  122. data/ext/ice/cpp/include/IceUtil/Cond.h +17 -18
  123. data/ext/ice/cpp/include/IceUtil/Config.h +138 -39
  124. data/ext/ice/cpp/include/IceUtil/ConsoleUtil.h +97 -0
  125. data/ext/ice/cpp/include/IceUtil/CountDownLatch.h +5 -5
  126. data/ext/ice/cpp/include/IceUtil/CtrlCHandler.h +23 -17
  127. data/ext/ice/cpp/include/IceUtil/DisableWarnings.h +1 -3
  128. data/ext/ice/cpp/include/IceUtil/Exception.h +157 -67
  129. data/ext/ice/cpp/include/IceUtil/FileUtil.h +148 -0
  130. data/ext/ice/cpp/include/IceUtil/Functional.h +1 -2
  131. data/ext/ice/cpp/include/IceUtil/Handle.h +11 -11
  132. data/ext/ice/cpp/include/IceUtil/IceUtil.h +4 -10
  133. data/ext/ice/cpp/include/IceUtil/InputUtil.h +3 -3
  134. data/ext/ice/cpp/include/IceUtil/Iterator.h +2 -2
  135. data/ext/ice/cpp/include/IceUtil/Lock.h +8 -10
  136. data/ext/ice/cpp/include/IceUtil/Monitor.h +1 -2
  137. data/ext/ice/cpp/include/IceUtil/Mutex.h +17 -11
  138. data/ext/ice/cpp/include/IceUtil/MutexProtocol.h +2 -2
  139. data/ext/ice/cpp/include/IceUtil/MutexPtrLock.h +4 -4
  140. data/ext/ice/cpp/include/IceUtil/MutexPtrTryLock.h +4 -4
  141. data/ext/ice/cpp/include/IceUtil/Optional.h +32 -18
  142. data/ext/ice/cpp/include/IceUtil/Options.h +17 -18
  143. data/ext/ice/cpp/include/IceUtil/OutputUtil.h +55 -29
  144. data/ext/ice/cpp/include/IceUtil/PopDisableWarnings.h +6 -6
  145. data/ext/ice/cpp/include/IceUtil/PushDisableWarnings.h +11 -10
  146. data/ext/ice/cpp/include/IceUtil/Random.h +3 -3
  147. data/ext/ice/cpp/include/IceUtil/RecMutex.h +7 -8
  148. data/ext/ice/cpp/include/IceUtil/ResourceConfig.h +58 -0
  149. data/ext/ice/cpp/include/IceUtil/ScannerConfig.h +1 -9
  150. data/ext/ice/cpp/include/IceUtil/ScopedArray.h +8 -2
  151. data/ext/ice/cpp/include/IceUtil/Shared.h +5 -7
  152. data/ext/ice/cpp/{src → include}/IceUtil/StopWatch.h +2 -2
  153. data/ext/ice/cpp/include/IceUtil/StringConverter.h +77 -72
  154. data/ext/ice/cpp/include/IceUtil/StringUtil.h +32 -21
  155. data/ext/ice/cpp/include/IceUtil/Thread.h +10 -12
  156. data/ext/ice/cpp/include/IceUtil/ThreadException.h +33 -42
  157. data/ext/ice/cpp/include/IceUtil/Time.h +3 -3
  158. data/ext/ice/cpp/include/IceUtil/Timer.h +14 -13
  159. data/ext/ice/cpp/include/IceUtil/UUID.h +2 -2
  160. data/ext/ice/cpp/include/IceUtil/UndefSysMacros.h +1 -1
  161. data/ext/ice/cpp/include/{Ice → generated/Ice}/BuiltinSequences.h +41 -8
  162. data/ext/ice/cpp/include/generated/Ice/Communicator.h +364 -0
  163. data/ext/ice/cpp/include/{Ice → generated/Ice}/CommunicatorF.h +40 -8
  164. data/ext/ice/cpp/include/generated/Ice/Connection.h +872 -0
  165. data/ext/ice/cpp/include/{Ice → generated/Ice}/ConnectionF.h +46 -8
  166. data/ext/ice/cpp/include/{Ice → generated/Ice}/Current.h +71 -8
  167. data/ext/ice/cpp/include/generated/Ice/Endpoint.h +582 -0
  168. data/ext/ice/cpp/include/{Ice → generated/Ice}/EndpointF.h +62 -8
  169. data/ext/ice/cpp/include/{Ice → generated/Ice}/EndpointTypes.h +31 -16
  170. data/ext/ice/cpp/include/{Ice → generated/Ice}/FacetMap.h +23 -8
  171. data/ext/ice/cpp/include/generated/Ice/Identity.h +221 -0
  172. data/ext/ice/cpp/include/{Ice → generated/Ice}/ImplicitContext.h +72 -13
  173. data/ext/ice/cpp/include/{Ice → generated/Ice}/ImplicitContextF.h +40 -8
  174. data/ext/ice/cpp/include/generated/Ice/Instrumentation.h +602 -0
  175. data/ext/ice/cpp/include/{Ice → generated/Ice}/InstrumentationF.h +54 -8
  176. data/ext/ice/cpp/include/generated/Ice/LocalException.h +2802 -0
  177. data/ext/ice/cpp/include/generated/Ice/Locator.h +2036 -0
  178. data/ext/ice/cpp/include/{Ice → generated/Ice}/LocatorF.h +53 -12
  179. data/ext/ice/cpp/include/{Ice → generated/Ice}/Logger.h +71 -13
  180. data/ext/ice/cpp/include/{Ice → generated/Ice}/LoggerF.h +40 -8
  181. data/ext/ice/cpp/include/generated/Ice/Metrics.h +2649 -0
  182. data/ext/ice/cpp/include/generated/Ice/ObjectAdapter.h +302 -0
  183. data/ext/ice/cpp/include/{Ice → generated/Ice}/ObjectAdapterF.h +40 -8
  184. data/ext/ice/cpp/include/generated/Ice/ObjectFactory.h +142 -0
  185. data/ext/ice/cpp/include/generated/Ice/Plugin.h +197 -0
  186. data/ext/ice/cpp/include/{Ice → generated/Ice}/PluginF.h +43 -8
  187. data/ext/ice/cpp/include/generated/Ice/Process.h +536 -0
  188. data/ext/ice/cpp/include/{Ice → generated/Ice}/ProcessF.h +45 -10
  189. data/ext/ice/cpp/include/{Ice → generated/Ice}/Properties.h +88 -21
  190. data/ext/ice/cpp/include/generated/Ice/PropertiesAdmin.h +749 -0
  191. data/ext/ice/cpp/include/{Ice → generated/Ice}/PropertiesF.h +48 -10
  192. data/ext/ice/cpp/include/generated/Ice/RemoteLogger.h +1449 -0
  193. data/ext/ice/cpp/include/generated/Ice/Router.h +1032 -0
  194. data/ext/ice/cpp/include/{Ice → generated/Ice}/RouterF.h +45 -10
  195. data/ext/ice/cpp/include/{Ice → generated/Ice}/ServantLocator.h +65 -13
  196. data/ext/ice/cpp/include/{Ice → generated/Ice}/ServantLocatorF.h +40 -8
  197. data/ext/ice/cpp/include/{Ice → generated/Ice}/SliceChecksumDict.h +23 -8
  198. data/ext/ice/cpp/include/generated/Ice/ValueFactory.h +169 -0
  199. data/ext/ice/cpp/include/generated/Ice/Version.h +334 -0
  200. data/ext/ice/cpp/include/generated/IceSSL/ConnectionInfo.h +172 -0
  201. data/ext/ice/cpp/include/generated/IceSSL/ConnectionInfoF.h +98 -0
  202. data/ext/ice/cpp/include/generated/IceSSL/EndpointInfo.h +156 -0
  203. data/ext/ice/cpp/src/Ice/ACM.cpp +18 -14
  204. data/ext/ice/cpp/src/Ice/ACM.h +9 -2
  205. data/ext/ice/cpp/{include → src}/Ice/ACMF.h +10 -5
  206. data/ext/ice/cpp/src/Ice/Acceptor.cpp +6 -1
  207. data/ext/ice/cpp/src/Ice/Acceptor.h +4 -3
  208. data/ext/ice/cpp/src/Ice/AcceptorF.h +1 -1
  209. data/ext/ice/cpp/src/{IceUtil → Ice}/ArgVector.cpp +9 -9
  210. data/ext/ice/cpp/src/{IceUtil → Ice}/ArgVector.h +7 -7
  211. data/ext/ice/cpp/src/Ice/AsyncResult.cpp +15 -538
  212. data/ext/ice/cpp/src/Ice/Base64.cpp +11 -11
  213. data/ext/ice/cpp/src/Ice/Base64.h +1 -1
  214. data/ext/ice/cpp/src/Ice/BatchRequestQueue.cpp +40 -12
  215. data/ext/ice/cpp/src/Ice/BatchRequestQueue.h +15 -10
  216. data/ext/ice/cpp/src/Ice/Buffer.cpp +74 -12
  217. data/ext/ice/cpp/src/Ice/BuiltinSequences.cpp +20 -6
  218. data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.cpp +85 -190
  219. data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.h +17 -18
  220. data/ext/ice/cpp/src/Ice/Communicator.cpp +39 -8
  221. data/ext/ice/cpp/src/Ice/CommunicatorF.cpp +27 -5
  222. data/ext/ice/cpp/src/Ice/CommunicatorI.cpp +271 -104
  223. data/ext/ice/cpp/src/Ice/CommunicatorI.h +84 -28
  224. data/ext/ice/cpp/src/{IceUtil → Ice}/Cond.cpp +3 -3
  225. data/ext/ice/cpp/src/Ice/ConnectRequestHandler.cpp +58 -125
  226. data/ext/ice/cpp/src/Ice/ConnectRequestHandler.h +11 -22
  227. data/ext/ice/cpp/src/Ice/ConnectRequestHandlerF.h +6 -2
  228. data/ext/ice/cpp/src/Ice/Connection.cpp +88 -8
  229. data/ext/ice/cpp/src/Ice/ConnectionF.cpp +27 -5
  230. data/ext/ice/cpp/src/Ice/ConnectionFactory.cpp +158 -80
  231. data/ext/ice/cpp/src/Ice/ConnectionFactory.h +41 -23
  232. data/ext/ice/cpp/{include → src}/Ice/ConnectionFactoryF.h +8 -3
  233. data/ext/ice/cpp/src/Ice/ConnectionI.cpp +707 -653
  234. data/ext/ice/cpp/src/Ice/ConnectionI.h +97 -69
  235. data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.cpp +2 -15
  236. data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.h +4 -3
  237. data/ext/ice/cpp/src/Ice/Connector.cpp +6 -1
  238. data/ext/ice/cpp/src/Ice/Connector.h +4 -3
  239. data/ext/ice/cpp/src/Ice/ConnectorF.h +1 -1
  240. data/ext/ice/cpp/src/{IceUtil → Ice}/CountDownLatch.cpp +4 -4
  241. data/ext/ice/cpp/src/Ice/Current.cpp +29 -6
  242. data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.cpp +6 -5
  243. data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.h +1 -1
  244. data/ext/ice/cpp/src/Ice/DefaultsAndOverridesF.h +1 -1
  245. data/ext/ice/cpp/src/Ice/DispatchInterceptor.cpp +5 -25
  246. data/ext/ice/cpp/src/Ice/DynamicLibrary.cpp +29 -19
  247. data/ext/ice/cpp/src/Ice/Endpoint.cpp +85 -6
  248. data/ext/ice/cpp/src/Ice/EndpointF.cpp +27 -5
  249. data/ext/ice/cpp/src/Ice/EndpointFactory.cpp +152 -1
  250. data/ext/ice/cpp/src/Ice/EndpointFactory.h +72 -6
  251. data/ext/ice/cpp/src/Ice/EndpointFactoryF.h +1 -1
  252. data/ext/ice/cpp/src/Ice/EndpointFactoryManager.cpp +35 -19
  253. data/ext/ice/cpp/src/Ice/EndpointFactoryManager.h +10 -4
  254. data/ext/ice/cpp/src/Ice/EndpointFactoryManagerF.h +1 -1
  255. data/ext/ice/cpp/src/Ice/EndpointI.cpp +17 -1
  256. data/ext/ice/cpp/src/Ice/EndpointI.h +35 -9
  257. data/ext/ice/cpp/src/Ice/EndpointIF.h +18 -5
  258. data/ext/ice/cpp/src/Ice/EndpointTypes.cpp +18 -6
  259. data/ext/ice/cpp/src/Ice/EventHandler.cpp +6 -4
  260. data/ext/ice/cpp/src/Ice/EventHandler.h +13 -8
  261. data/ext/ice/cpp/src/Ice/EventHandlerF.h +5 -2
  262. data/ext/ice/cpp/src/Ice/Exception.cpp +95 -86
  263. data/ext/ice/cpp/src/Ice/FacetMap.cpp +20 -6
  264. data/ext/ice/cpp/src/Ice/FactoryTable.cpp +37 -28
  265. data/ext/ice/cpp/src/Ice/FactoryTableInit.cpp +2 -4
  266. data/ext/ice/cpp/src/Ice/GCObject.cpp +28 -25
  267. data/ext/ice/cpp/src/Ice/HashUtil.h +2 -3
  268. data/ext/ice/cpp/src/Ice/HttpParser.cpp +1 -2
  269. data/ext/ice/cpp/src/Ice/HttpParser.h +1 -1
  270. data/ext/ice/cpp/src/Ice/IPEndpointI.cpp +92 -53
  271. data/ext/ice/cpp/src/Ice/IPEndpointI.h +19 -10
  272. data/ext/ice/cpp/src/Ice/IPEndpointIF.h +6 -2
  273. data/ext/ice/cpp/src/Ice/IconvStringConverter.cpp +56 -0
  274. data/ext/ice/cpp/src/Ice/Identity.cpp +24 -10
  275. data/ext/ice/cpp/src/Ice/ImplicitContext.cpp +37 -6
  276. data/ext/ice/cpp/src/Ice/ImplicitContextF.cpp +27 -5
  277. data/ext/ice/cpp/src/Ice/ImplicitContextI.cpp +14 -14
  278. data/ext/ice/cpp/src/Ice/ImplicitContextI.h +7 -5
  279. data/ext/ice/cpp/src/Ice/Incoming.cpp +276 -245
  280. data/ext/ice/cpp/src/Ice/IncomingAsync.cpp +104 -209
  281. data/ext/ice/cpp/src/Ice/IncomingRequest.h +5 -4
  282. data/ext/ice/cpp/src/Ice/Initialize.cpp +299 -172
  283. data/ext/ice/cpp/src/Ice/InputStream.cpp +2773 -0
  284. data/ext/ice/cpp/src/Ice/Instance.cpp +191 -231
  285. data/ext/ice/cpp/src/Ice/Instance.h +30 -18
  286. data/ext/ice/cpp/src/Ice/Instrumentation.cpp +106 -7
  287. data/ext/ice/cpp/src/Ice/InstrumentationF.cpp +27 -5
  288. data/ext/ice/cpp/src/Ice/InstrumentationI.cpp +117 -99
  289. data/ext/ice/cpp/src/Ice/InstrumentationI.h +30 -31
  290. data/ext/ice/cpp/src/Ice/LocalException.cpp +1190 -416
  291. data/ext/ice/cpp/src/Ice/LocalObject.cpp +1 -2
  292. data/ext/ice/cpp/src/Ice/Locator.cpp +1167 -1215
  293. data/ext/ice/cpp/src/Ice/LocatorF.cpp +29 -6
  294. data/ext/ice/cpp/src/Ice/LocatorInfo.cpp +129 -163
  295. data/ext/ice/cpp/src/Ice/LocatorInfo.h +29 -29
  296. data/ext/ice/cpp/src/Ice/LocatorInfoF.h +1 -1
  297. data/ext/ice/cpp/src/Ice/Logger.cpp +35 -5
  298. data/ext/ice/cpp/src/Ice/LoggerAdminI.cpp +178 -73
  299. data/ext/ice/cpp/src/Ice/LoggerAdminI.h +4 -4
  300. data/ext/ice/cpp/src/Ice/LoggerF.cpp +27 -5
  301. data/ext/ice/cpp/src/Ice/LoggerI.cpp +14 -44
  302. data/ext/ice/cpp/src/Ice/LoggerI.h +7 -13
  303. data/ext/ice/cpp/src/Ice/LoggerUtil.cpp +10 -12
  304. data/ext/ice/cpp/src/Ice/Metrics.cpp +1059 -1069
  305. data/ext/ice/cpp/src/Ice/MetricsAdminI.cpp +49 -19
  306. data/ext/ice/cpp/src/Ice/MetricsObserverI.cpp +1 -2
  307. data/ext/ice/cpp/src/Ice/Network.cpp +534 -170
  308. data/ext/ice/cpp/src/Ice/Network.h +100 -23
  309. data/ext/ice/cpp/src/Ice/NetworkF.h +2 -2
  310. data/ext/ice/cpp/src/Ice/NetworkProxy.cpp +21 -14
  311. data/ext/ice/cpp/src/Ice/NetworkProxy.h +5 -2
  312. data/ext/ice/cpp/src/Ice/NetworkProxyF.h +1 -1
  313. data/ext/ice/cpp/src/Ice/Object.cpp +217 -221
  314. data/ext/ice/cpp/src/Ice/ObjectAdapter.cpp +41 -6
  315. data/ext/ice/cpp/src/Ice/ObjectAdapterF.cpp +27 -5
  316. data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.cpp +35 -14
  317. data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.h +13 -7
  318. data/ext/ice/cpp/{include → src}/Ice/ObjectAdapterFactoryF.h +5 -1
  319. data/ext/ice/cpp/src/Ice/ObjectAdapterI.cpp +184 -58
  320. data/ext/ice/cpp/src/Ice/ObjectAdapterI.h +32 -26
  321. data/ext/ice/cpp/src/Ice/ObjectFactory.cpp +37 -6
  322. data/ext/ice/cpp/src/Ice/ObserverHelper.cpp +9 -32
  323. data/ext/ice/cpp/src/Ice/OpaqueEndpointI.cpp +40 -18
  324. data/ext/ice/cpp/src/Ice/OpaqueEndpointI.h +14 -5
  325. data/ext/ice/cpp/src/Ice/OutgoingAsync.cpp +803 -365
  326. data/ext/ice/cpp/src/Ice/OutputStream.cpp +1399 -0
  327. data/ext/ice/cpp/src/Ice/Plugin.cpp +45 -6
  328. data/ext/ice/cpp/src/Ice/PluginF.cpp +27 -5
  329. data/ext/ice/cpp/src/Ice/PluginManagerI.cpp +13 -13
  330. data/ext/ice/cpp/src/Ice/PluginManagerI.h +5 -6
  331. data/ext/ice/cpp/src/Ice/Process.cpp +256 -114
  332. data/ext/ice/cpp/src/Ice/ProcessF.cpp +29 -6
  333. data/ext/ice/cpp/src/Ice/Properties.cpp +38 -8
  334. data/ext/ice/cpp/src/Ice/PropertiesAdmin.cpp +340 -328
  335. data/ext/ice/cpp/src/Ice/PropertiesAdminI.cpp +81 -17
  336. data/ext/ice/cpp/src/Ice/PropertiesAdminI.h +29 -5
  337. data/ext/ice/cpp/src/Ice/PropertiesF.cpp +29 -6
  338. data/ext/ice/cpp/src/Ice/PropertiesI.cpp +25 -26
  339. data/ext/ice/cpp/src/Ice/PropertiesI.h +8 -11
  340. data/ext/ice/cpp/src/Ice/PropertyNames.cpp +107 -50
  341. data/ext/ice/cpp/src/Ice/PropertyNames.h +4 -2
  342. data/ext/ice/cpp/src/Ice/Protocol.cpp +2 -2
  343. data/ext/ice/cpp/src/Ice/ProtocolInstance.cpp +37 -2
  344. data/ext/ice/cpp/src/Ice/ProtocolInstance.h +9 -20
  345. data/ext/ice/cpp/src/Ice/ProtocolInstanceF.h +1 -1
  346. data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.cpp +6 -1
  347. data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.h +3 -1
  348. data/ext/ice/cpp/src/Ice/ProtocolPluginFacadeF.h +1 -1
  349. data/ext/ice/cpp/src/Ice/Proxy.cpp +690 -964
  350. data/ext/ice/cpp/src/Ice/ProxyFactory.cpp +23 -32
  351. data/ext/ice/cpp/src/Ice/ProxyFactory.h +16 -11
  352. data/ext/ice/cpp/src/Ice/Reference.cpp +75 -69
  353. data/ext/ice/cpp/src/Ice/Reference.h +27 -22
  354. data/ext/ice/cpp/src/Ice/ReferenceFactory.cpp +18 -21
  355. data/ext/ice/cpp/src/Ice/ReferenceFactory.h +12 -12
  356. data/ext/ice/cpp/src/Ice/ReferenceFactoryF.h +1 -1
  357. data/ext/ice/cpp/src/Ice/RegisterPluginsInit.cpp +18 -4
  358. data/ext/ice/cpp/src/Ice/RegisterPluginsInit.h +1 -1
  359. data/ext/ice/cpp/src/Ice/RemoteLogger.cpp +672 -552
  360. data/ext/ice/cpp/src/Ice/ReplyStatus.h +1 -1
  361. data/ext/ice/cpp/src/Ice/RequestHandler.cpp +5 -3
  362. data/ext/ice/cpp/src/Ice/RequestHandler.h +10 -13
  363. data/ext/ice/cpp/src/Ice/RequestHandlerFactory.cpp +10 -6
  364. data/ext/ice/cpp/src/Ice/RequestHandlerFactory.h +2 -2
  365. data/ext/ice/cpp/src/Ice/ResponseHandler.cpp +3 -6
  366. data/ext/ice/cpp/src/Ice/ResponseHandler.h +16 -7
  367. data/ext/ice/cpp/src/Ice/RetryQueue.cpp +6 -12
  368. data/ext/ice/cpp/src/Ice/RetryQueue.h +7 -6
  369. data/ext/ice/cpp/src/Ice/RetryQueueF.h +1 -1
  370. data/ext/ice/cpp/src/Ice/Router.cpp +523 -474
  371. data/ext/ice/cpp/src/Ice/RouterF.cpp +29 -6
  372. data/ext/ice/cpp/src/Ice/RouterInfo.cpp +91 -70
  373. data/ext/ice/cpp/src/Ice/RouterInfo.h +43 -32
  374. data/ext/ice/cpp/src/Ice/RouterInfoF.h +1 -1
  375. data/ext/ice/cpp/src/{IceUtil → Ice}/SHA1.cpp +21 -21
  376. data/ext/ice/cpp/src/Ice/Selector.cpp +989 -923
  377. data/ext/ice/cpp/src/Ice/Selector.h +100 -147
  378. data/ext/ice/cpp/src/Ice/ServantLocator.cpp +37 -6
  379. data/ext/ice/cpp/src/Ice/ServantLocatorF.cpp +27 -5
  380. data/ext/ice/cpp/src/Ice/ServantManager.cpp +9 -9
  381. data/ext/ice/cpp/src/Ice/ServantManager.h +1 -1
  382. data/ext/ice/cpp/src/Ice/SharedContext.h +2 -2
  383. data/ext/ice/cpp/src/Ice/SliceChecksumDict.cpp +20 -6
  384. data/ext/ice/cpp/src/Ice/SliceChecksums.cpp +2 -2
  385. data/ext/ice/cpp/src/Ice/SlicedData.cpp +72 -20
  386. data/ext/ice/cpp/src/Ice/StreamSocket.cpp +173 -18
  387. data/ext/ice/cpp/src/Ice/StreamSocket.h +13 -4
  388. data/ext/ice/cpp/src/Ice/StringConverterPlugin.cpp +48 -17
  389. data/ext/ice/cpp/src/Ice/StringUtil.h +35 -0
  390. data/ext/ice/cpp/src/Ice/SysLoggerI.cpp +8 -4
  391. data/ext/ice/cpp/src/Ice/SysLoggerI.h +2 -3
  392. data/ext/ice/cpp/src/Ice/TcpAcceptor.cpp +158 -32
  393. data/ext/ice/cpp/src/Ice/TcpAcceptor.h +12 -5
  394. data/ext/ice/cpp/src/Ice/TcpConnector.cpp +1 -7
  395. data/ext/ice/cpp/src/Ice/TcpConnector.h +1 -2
  396. data/ext/ice/cpp/src/Ice/TcpEndpointI.cpp +40 -32
  397. data/ext/ice/cpp/src/Ice/TcpEndpointI.h +11 -8
  398. data/ext/ice/cpp/src/Ice/TcpTransceiver.cpp +12 -27
  399. data/ext/ice/cpp/src/Ice/TcpTransceiver.h +7 -10
  400. data/ext/ice/cpp/src/{IceUtil → Ice}/Thread.cpp +24 -41
  401. data/ext/ice/cpp/src/Ice/ThreadPool.cpp +175 -267
  402. data/ext/ice/cpp/src/Ice/ThreadPool.h +38 -43
  403. data/ext/ice/cpp/src/{IceUtil → Ice}/Timer.cpp +28 -21
  404. data/ext/ice/cpp/src/Ice/TraceLevels.cpp +2 -2
  405. data/ext/ice/cpp/src/Ice/TraceLevels.h +1 -1
  406. data/ext/ice/cpp/src/Ice/TraceLevelsF.h +2 -2
  407. data/ext/ice/cpp/src/Ice/TraceUtil.cpp +53 -31
  408. data/ext/ice/cpp/src/Ice/TraceUtil.h +13 -6
  409. data/ext/ice/cpp/src/Ice/Transceiver.cpp +1 -2
  410. data/ext/ice/cpp/src/Ice/Transceiver.h +8 -7
  411. data/ext/ice/cpp/src/Ice/TransceiverF.h +1 -1
  412. data/ext/ice/cpp/src/Ice/UdpConnector.cpp +2 -8
  413. data/ext/ice/cpp/src/Ice/UdpConnector.h +1 -2
  414. data/ext/ice/cpp/src/Ice/UdpEndpointI.cpp +92 -31
  415. data/ext/ice/cpp/src/Ice/UdpEndpointI.h +12 -4
  416. data/ext/ice/cpp/src/Ice/UdpTransceiver.cpp +150 -179
  417. data/ext/ice/cpp/src/Ice/UdpTransceiver.h +15 -17
  418. data/ext/ice/cpp/src/Ice/Value.cpp +81 -0
  419. data/ext/ice/cpp/src/Ice/ValueFactory.cpp +84 -0
  420. data/ext/ice/cpp/src/Ice/ValueFactoryManagerI.cpp +70 -0
  421. data/ext/ice/cpp/src/Ice/ValueFactoryManagerI.h +42 -0
  422. data/ext/ice/cpp/src/Ice/Version.cpp +24 -14
  423. data/ext/ice/cpp/src/Ice/VirtualShared.h +43 -0
  424. data/ext/ice/cpp/src/Ice/WSAcceptor.cpp +3 -9
  425. data/ext/ice/cpp/src/Ice/WSAcceptor.h +3 -7
  426. data/ext/ice/cpp/src/Ice/WSConnector.cpp +5 -11
  427. data/ext/ice/cpp/src/Ice/WSConnector.h +3 -6
  428. data/ext/ice/cpp/src/Ice/WSEndpoint.cpp +185 -80
  429. data/ext/ice/cpp/src/Ice/WSEndpoint.h +21 -31
  430. data/ext/ice/cpp/src/Ice/WSTransceiver.cpp +41 -37
  431. data/ext/ice/cpp/src/Ice/WSTransceiver.h +7 -21
  432. data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.cpp +526 -264
  433. data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.h +341 -455
  434. data/ext/ice/cpp/src/IceDiscovery/LocatorI.cpp +86 -26
  435. data/ext/ice/cpp/src/IceDiscovery/LocatorI.h +59 -23
  436. data/ext/ice/cpp/src/IceDiscovery/LookupI.cpp +315 -61
  437. data/ext/ice/cpp/src/IceDiscovery/LookupI.h +83 -36
  438. data/ext/ice/cpp/src/IceDiscovery/PluginI.cpp +57 -59
  439. data/ext/ice/cpp/src/IceDiscovery/PluginI.h +3 -3
  440. data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.cpp +396 -159
  441. data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.h +251 -355
  442. data/ext/ice/cpp/src/IceLocatorDiscovery/Plugin.h +52 -0
  443. data/ext/ice/cpp/src/IceLocatorDiscovery/PluginI.cpp +526 -131
  444. data/ext/ice/cpp/src/IceSSL/AcceptorI.cpp +19 -165
  445. data/ext/ice/cpp/src/IceSSL/AcceptorI.h +8 -17
  446. data/ext/ice/cpp/src/IceSSL/CertificateI.cpp +284 -0
  447. data/ext/ice/cpp/src/IceSSL/CertificateI.h +69 -0
  448. data/ext/ice/cpp/src/IceSSL/ConnectionInfo.cpp +39 -11
  449. data/ext/ice/cpp/src/{Ice/ObjectFactoryF.cpp → IceSSL/ConnectionInfoF.cpp} +31 -9
  450. data/ext/ice/cpp/src/IceSSL/ConnectorI.cpp +14 -56
  451. data/ext/ice/cpp/src/IceSSL/ConnectorI.h +6 -13
  452. data/ext/ice/cpp/src/IceSSL/EndpointI.cpp +205 -197
  453. data/ext/ice/cpp/src/IceSSL/EndpointI.h +41 -33
  454. data/ext/ice/cpp/src/IceSSL/EndpointInfo.cpp +39 -10
  455. data/ext/ice/cpp/src/IceSSL/Instance.cpp +1 -6
  456. data/ext/ice/cpp/src/IceSSL/Instance.h +7 -7
  457. data/ext/ice/cpp/src/IceSSL/InstanceF.h +11 -7
  458. data/ext/ice/cpp/src/IceSSL/OpenSSLCertificateI.cpp +588 -0
  459. data/ext/ice/cpp/src/IceSSL/OpenSSLEngine.cpp +117 -152
  460. data/ext/ice/cpp/src/IceSSL/OpenSSLEngine.h +64 -0
  461. data/ext/ice/cpp/src/IceSSL/OpenSSLEngineF.h +32 -0
  462. data/ext/ice/cpp/src/IceSSL/OpenSSLPluginI.cpp +132 -0
  463. data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.cpp +400 -89
  464. data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.h +36 -21
  465. data/ext/ice/cpp/src/IceSSL/OpenSSLUtil.cpp +291 -0
  466. data/ext/ice/cpp/src/IceSSL/OpenSSLUtil.h +63 -0
  467. data/ext/ice/cpp/src/IceSSL/PluginI.cpp +71 -41
  468. data/ext/ice/cpp/src/IceSSL/PluginI.h +13 -18
  469. data/ext/ice/cpp/src/IceSSL/RFC2253.cpp +9 -54
  470. data/ext/ice/cpp/src/IceSSL/RFC2253.h +7 -7
  471. data/ext/ice/cpp/src/IceSSL/SChannelCertificateI.cpp +585 -0
  472. data/ext/ice/cpp/src/IceSSL/SChannelEngine.cpp +491 -75
  473. data/ext/ice/cpp/src/IceSSL/SChannelEngine.h +126 -0
  474. data/ext/ice/cpp/src/IceSSL/SChannelEngineF.h +32 -0
  475. data/ext/ice/cpp/src/IceSSL/SChannelPluginI.cpp +78 -0
  476. data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.cpp +126 -169
  477. data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.h +19 -22
  478. data/ext/ice/cpp/src/IceSSL/SSLEngine.cpp +79 -74
  479. data/ext/ice/cpp/src/IceSSL/SSLEngine.h +24 -187
  480. data/ext/ice/cpp/src/IceSSL/SSLEngineF.h +4 -19
  481. data/ext/ice/cpp/src/IceSSL/SecureTransportCertificateI.cpp +862 -0
  482. data/ext/ice/cpp/src/IceSSL/SecureTransportEngine.cpp +56 -214
  483. data/ext/ice/cpp/src/IceSSL/SecureTransportEngine.h +60 -0
  484. data/ext/ice/cpp/src/IceSSL/SecureTransportEngineF.h +31 -0
  485. data/ext/ice/cpp/src/IceSSL/SecureTransportPluginI.cpp +80 -0
  486. data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.cpp +137 -144
  487. data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.h +25 -28
  488. data/ext/ice/cpp/src/IceSSL/SecureTransportUtil.cpp +857 -0
  489. data/ext/ice/cpp/src/IceSSL/SecureTransportUtil.h +46 -0
  490. data/ext/ice/cpp/src/IceSSL/TrustManager.cpp +9 -13
  491. data/ext/ice/cpp/src/IceSSL/TrustManager.h +4 -4
  492. data/ext/ice/cpp/src/IceSSL/TrustManagerF.h +3 -3
  493. data/ext/ice/cpp/src/IceSSL/UWPCertificateI.cpp +271 -0
  494. data/ext/ice/cpp/src/IceSSL/UWPEngine.cpp +343 -0
  495. data/ext/ice/cpp/src/IceSSL/UWPEngine.h +46 -0
  496. data/ext/ice/cpp/{include/Ice/ObjectFactoryManagerF.h → src/IceSSL/UWPEngineF.h} +13 -8
  497. data/ext/ice/cpp/src/IceSSL/UWPPluginI.cpp +94 -0
  498. data/ext/ice/cpp/src/IceSSL/UWPTransceiverI.cpp +388 -0
  499. data/ext/ice/cpp/src/IceSSL/UWPTransceiverI.h +76 -0
  500. data/ext/ice/cpp/src/IceSSL/Util.cpp +66 -1256
  501. data/ext/ice/cpp/src/IceSSL/Util.h +48 -137
  502. data/ext/ice/cpp/src/IceUtil/ConsoleUtil.cpp +162 -0
  503. data/ext/ice/cpp/src/IceUtil/ConvertUTF.cpp +22 -22
  504. data/ext/ice/cpp/src/IceUtil/ConvertUTF.h +34 -26
  505. data/ext/ice/cpp/src/IceUtil/CtrlCHandler.cpp +20 -31
  506. data/ext/ice/cpp/src/IceUtil/FileUtil.cpp +25 -116
  507. data/ext/ice/cpp/src/IceUtil/InputUtil.cpp +1 -1
  508. data/ext/ice/cpp/src/IceUtil/MutexProtocol.cpp +1 -1
  509. data/ext/ice/cpp/src/IceUtil/Options.cpp +23 -46
  510. data/ext/ice/cpp/src/IceUtil/OutputUtil.cpp +7 -6
  511. data/ext/ice/cpp/src/IceUtil/Random.cpp +13 -13
  512. data/ext/ice/cpp/src/IceUtil/RecMutex.cpp +3 -9
  513. data/ext/ice/cpp/src/IceUtil/Shared.cpp +8 -3
  514. data/ext/ice/cpp/src/IceUtil/StringConverter.cpp +501 -264
  515. data/ext/ice/cpp/src/IceUtil/StringUtil.cpp +540 -235
  516. data/ext/ice/cpp/src/IceUtil/ThreadException.cpp +37 -74
  517. data/ext/ice/cpp/src/IceUtil/Time.cpp +1 -1
  518. data/ext/ice/cpp/src/IceUtil/UUID.cpp +10 -10
  519. data/ext/ice/cpp/src/IceUtil/Unicode.cpp +98 -97
  520. data/ext/ice/cpp/src/IceUtil/Unicode.h +21 -35
  521. data/ext/ice/cpp/src/IceUtil/UtilException.cpp +838 -0
  522. data/ext/ice/cpp/src/Slice/CPlusPlusUtil.cpp +815 -163
  523. data/ext/ice/cpp/src/Slice/CPlusPlusUtil.h +76 -0
  524. data/ext/ice/cpp/src/Slice/Checksum.cpp +2 -2
  525. data/ext/ice/cpp/{include → src}/Slice/Checksum.h +2 -2
  526. data/ext/ice/cpp/src/Slice/FileTracker.cpp +25 -78
  527. data/ext/ice/cpp/{include → src}/Slice/FileTracker.h +9 -9
  528. data/ext/ice/cpp/src/Slice/Grammar.cpp +1994 -1943
  529. data/ext/ice/cpp/src/Slice/Grammar.h +44 -24
  530. data/ext/ice/cpp/src/Slice/GrammarUtil.h +14 -14
  531. data/ext/ice/cpp/src/Slice/JavaUtil.cpp +2658 -1927
  532. data/ext/ice/cpp/{include → src}/Slice/JavaUtil.h +178 -59
  533. data/ext/ice/cpp/src/Slice/MD5.cpp +1 -1
  534. data/ext/ice/cpp/src/Slice/MD5.h +1 -1
  535. data/ext/ice/cpp/src/Slice/MD5I.cpp +0 -1
  536. data/ext/ice/cpp/src/Slice/MD5I.h +1 -1
  537. data/ext/ice/cpp/src/Slice/PHPUtil.cpp +12 -15
  538. data/ext/ice/cpp/{include → src}/Slice/PHPUtil.h +6 -15
  539. data/ext/ice/cpp/src/Slice/Parser.cpp +802 -307
  540. data/ext/ice/cpp/{include → src}/Slice/Parser.h +76 -84
  541. data/ext/ice/cpp/src/Slice/Preprocessor.cpp +43 -21
  542. data/ext/ice/cpp/{include → src}/Slice/Preprocessor.h +7 -12
  543. data/ext/ice/cpp/src/Slice/Python.cpp +207 -86
  544. data/ext/ice/cpp/src/Slice/PythonUtil.cpp +683 -679
  545. data/ext/ice/cpp/{include → src}/Slice/PythonUtil.h +19 -8
  546. data/ext/ice/cpp/src/Slice/Ruby.cpp +38 -34
  547. data/ext/ice/cpp/src/Slice/RubyUtil.cpp +177 -445
  548. data/ext/ice/cpp/{include → src}/Slice/RubyUtil.h +6 -6
  549. data/ext/ice/cpp/src/Slice/Scanner.cpp +218 -306
  550. data/ext/ice/cpp/src/Slice/{Util.cpp → SliceUtil.cpp} +37 -64
  551. data/ext/ice/cpp/src/Slice/StringLiteralUtil.cpp +374 -0
  552. data/ext/ice/cpp/src/Slice/Util.h +54 -0
  553. data/ext/ice/mcpp/Makefile +5 -2
  554. data/ice.gemspec +2 -7
  555. data/lib/Glacier2.rb +1 -1
  556. data/lib/Glacier2/Metrics.rb +7 -46
  557. data/lib/Glacier2/PermissionsVerifier.rb +24 -95
  558. data/lib/Glacier2/PermissionsVerifierF.rb +3 -3
  559. data/lib/Glacier2/Router.rb +32 -74
  560. data/lib/Glacier2/RouterF.rb +3 -3
  561. data/lib/Glacier2/SSLInfo.rb +4 -7
  562. data/lib/Glacier2/Session.rb +88 -307
  563. data/lib/Ice.rb +83 -52
  564. data/lib/Ice/BuiltinSequences.rb +4 -4
  565. data/lib/Ice/Communicator.rb +56 -58
  566. data/lib/Ice/CommunicatorF.rb +3 -3
  567. data/lib/Ice/Connection.rb +153 -162
  568. data/lib/Ice/ConnectionF.rb +3 -3
  569. data/lib/Ice/Current.rb +4 -11
  570. data/lib/Ice/Endpoint.rb +57 -133
  571. data/lib/Ice/EndpointF.rb +3 -3
  572. data/lib/Ice/EndpointTypes.rb +3 -7
  573. data/lib/Ice/FacetMap.rb +4 -4
  574. data/lib/Ice/Identity.rb +5 -8
  575. data/lib/Ice/ImplicitContext.rb +5 -34
  576. data/lib/Ice/ImplicitContextF.rb +3 -3
  577. data/lib/Ice/Instrumentation.rb +23 -275
  578. data/lib/Ice/InstrumentationF.rb +3 -3
  579. data/lib/Ice/LocalException.rb +95 -141
  580. data/lib/Ice/Locator.rb +51 -165
  581. data/lib/Ice/LocatorF.rb +3 -3
  582. data/lib/Ice/Logger.rb +5 -34
  583. data/lib/Ice/LoggerF.rb +3 -3
  584. data/lib/Ice/Metrics.rb +61 -416
  585. data/lib/Ice/ObjectAdapter.rb +34 -0
  586. data/lib/Ice/ObjectAdapterF.rb +3 -3
  587. data/lib/Ice/ObjectFactory.rb +5 -30
  588. data/lib/Ice/Plugin.rb +7 -60
  589. data/lib/Ice/PluginF.rb +3 -3
  590. data/lib/Ice/Process.rb +16 -52
  591. data/lib/Ice/ProcessF.rb +3 -3
  592. data/lib/Ice/Properties.rb +5 -41
  593. data/lib/Ice/PropertiesAdmin.rb +19 -56
  594. data/lib/Ice/PropertiesF.rb +3 -3
  595. data/lib/Ice/RemoteLogger.rb +34 -115
  596. data/lib/Ice/Router.rb +29 -101
  597. data/lib/Ice/RouterF.rb +3 -3
  598. data/lib/Ice/ServantLocator.rb +31 -0
  599. data/lib/Ice/{ObjectFactoryF.rb → ServantLocatorF.rb} +6 -6
  600. data/lib/Ice/SliceChecksumDict.rb +3 -3
  601. data/lib/Ice/ValueFactory.rb +33 -0
  602. data/lib/Ice/Version.rb +5 -11
  603. data/lib/IceBox.rb +1 -1
  604. data/lib/IceBox/IceBox.rb +44 -148
  605. data/lib/IceGrid.rb +1 -4
  606. data/lib/IceGrid/Admin.rb +551 -427
  607. data/lib/IceGrid/Descriptor.rb +62 -529
  608. data/lib/IceGrid/Exception.rb +24 -45
  609. data/lib/IceGrid/FileParser.rb +14 -50
  610. data/lib/IceGrid/PluginFacade.rb +40 -0
  611. data/lib/IceGrid/Registry.rb +151 -58
  612. data/lib/IceGrid/Session.rb +25 -64
  613. data/lib/IceGrid/UserAccountMapper.rb +14 -50
  614. data/lib/IcePatch2.rb +1 -1
  615. data/lib/IcePatch2/FileInfo.rb +5 -11
  616. data/lib/IcePatch2/FileServer.rb +33 -76
  617. data/lib/IceStorm.rb +1 -1
  618. data/lib/IceStorm/IceStorm.rb +79 -206
  619. data/lib/IceStorm/Metrics.rb +11 -89
  620. data/slice/Glacier2/Metrics.ice +8 -4
  621. data/slice/Glacier2/PermissionsVerifier.ice +10 -7
  622. data/slice/Glacier2/PermissionsVerifierF.ice +7 -4
  623. data/slice/Glacier2/Router.ice +10 -8
  624. data/slice/Glacier2/RouterF.ice +7 -4
  625. data/slice/Glacier2/SSLInfo.ice +8 -5
  626. data/slice/Glacier2/Session.ice +15 -13
  627. data/slice/Ice/BuiltinSequences.ice +7 -4
  628. data/slice/Ice/Communicator.ice +141 -66
  629. data/slice/Ice/CommunicatorF.ice +7 -4
  630. data/slice/Ice/Connection.ice +183 -86
  631. data/slice/Ice/ConnectionF.ice +7 -4
  632. data/slice/Ice/Current.ice +13 -9
  633. data/slice/Ice/Endpoint.ice +63 -14
  634. data/slice/Ice/EndpointF.ice +7 -4
  635. data/slice/Ice/EndpointTypes.ice +8 -6
  636. data/slice/Ice/FacetMap.ice +7 -4
  637. data/slice/Ice/Identity.ice +13 -5
  638. data/slice/Ice/ImplicitContext.ice +20 -18
  639. data/slice/Ice/ImplicitContextF.ice +7 -4
  640. data/slice/Ice/Instrumentation.ice +20 -19
  641. data/slice/Ice/InstrumentationF.ice +8 -5
  642. data/slice/Ice/LocalException.ice +87 -87
  643. data/slice/Ice/Locator.ice +19 -18
  644. data/slice/Ice/LocatorF.ice +7 -4
  645. data/slice/Ice/Logger.ice +9 -7
  646. data/slice/Ice/LoggerF.ice +7 -4
  647. data/slice/Ice/Metrics.ice +18 -14
  648. data/slice/Ice/ObjectAdapter.ice +30 -13
  649. data/slice/Ice/ObjectAdapterF.ice +7 -4
  650. data/slice/Ice/ObjectFactory.ice +15 -12
  651. data/slice/Ice/Plugin.ice +9 -6
  652. data/slice/Ice/PluginF.ice +8 -5
  653. data/slice/Ice/Process.ice +9 -6
  654. data/slice/Ice/ProcessF.ice +7 -4
  655. data/slice/Ice/Properties.ice +15 -12
  656. data/slice/Ice/PropertiesAdmin.ice +9 -5
  657. data/slice/Ice/PropertiesF.ice +7 -4
  658. data/slice/Ice/RemoteLogger.ice +33 -24
  659. data/slice/Ice/Router.ice +16 -7
  660. data/slice/Ice/RouterF.ice +7 -4
  661. data/slice/Ice/ServantLocator.ice +13 -10
  662. data/slice/Ice/ServantLocatorF.ice +7 -4
  663. data/slice/Ice/SliceChecksumDict.ice +7 -4
  664. data/slice/Ice/ValueFactory.ice +127 -0
  665. data/slice/Ice/Version.ice +9 -5
  666. data/slice/IceBT/ConnectionInfo.ice +53 -0
  667. data/slice/IceBT/EndpointInfo.ice +51 -0
  668. data/slice/IceBT/Types.ice +39 -0
  669. data/slice/IceBox/IceBox.ice +20 -21
  670. data/slice/IceDiscovery/IceDiscovery.ice +9 -5
  671. data/slice/IceGrid/Admin.ice +390 -30
  672. data/slice/IceGrid/Descriptor.ice +37 -29
  673. data/slice/IceGrid/Exception.ice +33 -27
  674. data/slice/IceGrid/FileParser.ice +9 -6
  675. data/slice/IceGrid/PluginFacade.ice +11 -9
  676. data/slice/IceGrid/Registry.ice +139 -16
  677. data/slice/IceGrid/Session.ice +10 -8
  678. data/slice/IceGrid/UserAccountMapper.ice +9 -6
  679. data/slice/IceIAP/ConnectionInfo.ice +70 -0
  680. data/slice/IceIAP/EndpointInfo.ice +64 -0
  681. data/slice/IceLocatorDiscovery/IceLocatorDiscovery.ice +9 -7
  682. data/slice/IcePatch2/FileInfo.ice +9 -8
  683. data/slice/IcePatch2/FileServer.ice +17 -13
  684. data/slice/IceSSL/ConnectionInfo.ice +14 -17
  685. data/slice/IceSSL/ConnectionInfoF.ice +24 -0
  686. data/slice/IceSSL/EndpointInfo.ice +9 -30
  687. data/slice/IceStorm/IceStorm.ice +22 -18
  688. data/slice/IceStorm/Metrics.ice +9 -5
  689. metadata +154 -120
  690. data/ext/ObjectFactory.cpp +0 -140
  691. data/ext/ObjectFactory.h +0 -50
  692. data/ext/ice/cpp/include/Ice/BasicStream.h +0 -1335
  693. data/ext/ice/cpp/include/Ice/Communicator.h +0 -200
  694. data/ext/ice/cpp/include/Ice/Connection.h +0 -497
  695. data/ext/ice/cpp/include/Ice/DeprecatedStringConverter.h +0 -62
  696. data/ext/ice/cpp/include/Ice/Endpoint.h +0 -341
  697. data/ext/ice/cpp/include/Ice/Identity.h +0 -168
  698. data/ext/ice/cpp/include/Ice/Instrumentation.h +0 -365
  699. data/ext/ice/cpp/include/Ice/LocalException.h +0 -1030
  700. data/ext/ice/cpp/include/Ice/Locator.h +0 -2193
  701. data/ext/ice/cpp/include/Ice/Metrics.h +0 -2974
  702. data/ext/ice/cpp/include/Ice/ObjectAdapter.h +0 -168
  703. data/ext/ice/cpp/include/Ice/ObjectFactory.h +0 -92
  704. data/ext/ice/cpp/include/Ice/ObjectFactoryF.h +0 -66
  705. data/ext/ice/cpp/include/Ice/Outgoing.h +0 -225
  706. data/ext/ice/cpp/include/Ice/Plugin.h +0 -125
  707. data/ext/ice/cpp/include/Ice/Process.h +0 -574
  708. data/ext/ice/cpp/include/Ice/PropertiesAdmin.h +0 -830
  709. data/ext/ice/cpp/include/Ice/RemoteLogger.h +0 -1500
  710. data/ext/ice/cpp/include/Ice/Router.h +0 -1159
  711. data/ext/ice/cpp/include/Ice/Stream.h +0 -447
  712. data/ext/ice/cpp/include/Ice/StreamF.h +0 -30
  713. data/ext/ice/cpp/include/Ice/Version.h +0 -262
  714. data/ext/ice/cpp/include/IceSSL/ConnectionInfo.h +0 -158
  715. data/ext/ice/cpp/include/IceSSL/EndpointInfo.h +0 -142
  716. data/ext/ice/cpp/include/IceUtil/AbstractMutex.h +0 -119
  717. data/ext/ice/cpp/include/IceUtil/Cache.h +0 -362
  718. data/ext/ice/cpp/include/Slice/CPlusPlusUtil.h +0 -65
  719. data/ext/ice/cpp/include/Slice/CsUtil.h +0 -92
  720. data/ext/ice/cpp/include/Slice/DotNetNames.h +0 -34
  721. data/ext/ice/cpp/include/Slice/ObjCUtil.h +0 -127
  722. data/ext/ice/cpp/include/Slice/Util.h +0 -56
  723. data/ext/ice/cpp/src/Ice/BasicStream.cpp +0 -3428
  724. data/ext/ice/cpp/src/Ice/DeprecatedStringConverter.cpp +0 -62
  725. data/ext/ice/cpp/src/Ice/ObjectFactoryManager.cpp +0 -139
  726. data/ext/ice/cpp/src/Ice/ObjectFactoryManager.h +0 -43
  727. data/ext/ice/cpp/src/Ice/Outgoing.cpp +0 -694
  728. data/ext/ice/cpp/src/Ice/Stream.cpp +0 -53
  729. data/ext/ice/cpp/src/Ice/StreamI.cpp +0 -832
  730. data/ext/ice/cpp/src/Ice/StreamI.h +0 -198
  731. data/ext/ice/cpp/src/IceSSL/Certificate.cpp +0 -1336
  732. data/ext/ice/cpp/src/IceUtil/Exception.cpp +0 -792
  733. data/ext/ice/cpp/src/IceUtil/FileUtil.h +0 -185
  734. data/ext/ice/cpp/src/Slice/CsUtil.cpp +0 -2660
  735. data/ext/ice/cpp/src/Slice/DotNetNames.cpp +0 -146
  736. data/ext/ice/cpp/src/Slice/ObjCUtil.cpp +0 -1310
  737. data/lib/IceGrid/Locator.rb +0 -106
  738. data/lib/IceGrid/Observer.rb +0 -572
  739. data/lib/IceGrid/Query.rb +0 -169
  740. data/slice/Freeze/BackgroundSaveEvictor.ice +0 -111
  741. data/slice/Freeze/CatalogData.ice +0 -49
  742. data/slice/Freeze/Connection.ice +0 -121
  743. data/slice/Freeze/DB.ice +0 -37
  744. data/slice/Freeze/Evictor.ice +0 -346
  745. data/slice/Freeze/EvictorF.ice +0 -22
  746. data/slice/Freeze/EvictorStorage.ice +0 -72
  747. data/slice/Freeze/Exception.ice +0 -100
  748. data/slice/Freeze/Transaction.ice +0 -58
  749. data/slice/Freeze/TransactionalEvictor.ice +0 -50
  750. data/slice/IceGrid/Locator.ice +0 -57
  751. data/slice/IceGrid/Observer.ice +0 -395
  752. data/slice/IceGrid/Query.ice +0 -131
@@ -0,0 +1,1399 @@
1
+ // **********************************************************************
2
+ //
3
+ // Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
4
+ //
5
+ // This copy of Ice is licensed to you under the terms described in the
6
+ // ICE_LICENSE file included in this distribution.
7
+ //
8
+ // **********************************************************************
9
+
10
+ #include <IceUtil/DisableWarnings.h>
11
+ #include <Ice/OutputStream.h>
12
+ #include <Ice/DefaultsAndOverrides.h>
13
+ #include <Ice/Instance.h>
14
+ #include <Ice/Object.h>
15
+ #include <Ice/Proxy.h>
16
+ #include <Ice/ProxyFactory.h>
17
+ #include <Ice/ValueFactory.h>
18
+ #include <Ice/LocalException.h>
19
+ #include <Ice/Protocol.h>
20
+ #include <Ice/TraceUtil.h>
21
+ #include <Ice/LoggerUtil.h>
22
+ #include <Ice/SlicedData.h>
23
+ #include <Ice/StringConverter.h>
24
+ #include <iterator>
25
+
26
+ using namespace std;
27
+ using namespace Ice;
28
+ using namespace IceInternal;
29
+
30
+ namespace
31
+ {
32
+
33
+ class StreamUTF8BufferI : public IceUtil::UTF8Buffer
34
+ {
35
+ public:
36
+
37
+ StreamUTF8BufferI(OutputStream& stream) :
38
+ _stream(stream)
39
+ {
40
+ }
41
+
42
+ Ice::Byte* getMoreBytes(size_t howMany, Ice::Byte* firstUnused)
43
+ {
44
+ assert(howMany > 0);
45
+
46
+ if(firstUnused != 0)
47
+ {
48
+ //
49
+ // Return unused bytes
50
+ //
51
+ _stream.resize(firstUnused - _stream.b.begin());
52
+ }
53
+
54
+ //
55
+ // Index of first unused byte
56
+ //
57
+ Buffer::Container::size_type pos = _stream.b.size();
58
+
59
+ //
60
+ // Since resize may reallocate the buffer, when firstUnused != 0, the
61
+ // return value can be != firstUnused
62
+ //
63
+ _stream.resize(pos + howMany);
64
+
65
+ return &_stream.b[pos];
66
+ }
67
+
68
+ private:
69
+
70
+ OutputStream& _stream;
71
+ };
72
+
73
+ }
74
+
75
+ Ice::OutputStream::OutputStream() :
76
+ _instance(0),
77
+ _closure(0),
78
+ _encoding(currentEncoding),
79
+ _format(ICE_ENUM(FormatType, CompactFormat)),
80
+ _currentEncaps(0)
81
+ {
82
+ }
83
+
84
+ Ice::OutputStream::OutputStream(const CommunicatorPtr& communicator) :
85
+ _closure(0),
86
+ _currentEncaps(0)
87
+ {
88
+ initialize(communicator);
89
+ }
90
+
91
+ Ice::OutputStream::OutputStream(const CommunicatorPtr& communicator, const EncodingVersion& encoding) :
92
+ _closure(0),
93
+ _currentEncaps(0)
94
+ {
95
+ initialize(communicator, encoding);
96
+ }
97
+
98
+ Ice::OutputStream::OutputStream(const CommunicatorPtr& communicator, const EncodingVersion& encoding,
99
+ const pair<const Byte*, const Byte*>& buf) :
100
+ Buffer(buf.first, buf.second),
101
+ _closure(0),
102
+ _currentEncaps(0)
103
+ {
104
+ initialize(communicator, encoding);
105
+ b.reset();
106
+ }
107
+
108
+ Ice::OutputStream::OutputStream(Instance* instance, const EncodingVersion& encoding) :
109
+ _closure(0),
110
+ _currentEncaps(0)
111
+ {
112
+ initialize(instance, encoding);
113
+ }
114
+
115
+ void
116
+ Ice::OutputStream::initialize(const CommunicatorPtr& communicator)
117
+ {
118
+ assert(communicator);
119
+ Instance* instance = getInstance(communicator).get();
120
+ initialize(instance, instance->defaultsAndOverrides()->defaultEncoding);
121
+ }
122
+
123
+ void
124
+ Ice::OutputStream::initialize(const CommunicatorPtr& communicator, const EncodingVersion& encoding)
125
+ {
126
+ assert(communicator);
127
+ initialize(getInstance(communicator).get(), encoding);
128
+ }
129
+
130
+ void
131
+ Ice::OutputStream::initialize(Instance* instance, const EncodingVersion& encoding)
132
+ {
133
+ assert(instance);
134
+
135
+ _instance = instance;
136
+ _encoding = encoding;
137
+
138
+ _format = _instance->defaultsAndOverrides()->defaultFormat;
139
+ }
140
+
141
+ void
142
+ Ice::OutputStream::clear()
143
+ {
144
+ while(_currentEncaps && _currentEncaps != &_preAllocatedEncaps)
145
+ {
146
+ Encaps* oldEncaps = _currentEncaps;
147
+ _currentEncaps = _currentEncaps->previous;
148
+ delete oldEncaps;
149
+ }
150
+ }
151
+
152
+ void
153
+ Ice::OutputStream::setFormat(FormatType fmt)
154
+ {
155
+ _format = fmt;
156
+ }
157
+
158
+ void*
159
+ Ice::OutputStream::getClosure() const
160
+ {
161
+ return _closure;
162
+ }
163
+
164
+ void*
165
+ Ice::OutputStream::setClosure(void* p)
166
+ {
167
+ void* prev = _closure;
168
+ _closure = p;
169
+ return prev;
170
+ }
171
+
172
+ void
173
+ Ice::OutputStream::swap(OutputStream& other)
174
+ {
175
+ swapBuffer(other);
176
+
177
+ std::swap(_instance, other._instance);
178
+ std::swap(_closure, other._closure);
179
+ std::swap(_encoding, other._encoding);
180
+ std::swap(_format, other._format);
181
+
182
+ //
183
+ // Swap is never called for streams that have encapsulations being written. However,
184
+ // encapsulations might still be set in case marshalling failed. We just
185
+ // reset the encapsulations if there are still some set.
186
+ //
187
+ resetEncapsulation();
188
+ other.resetEncapsulation();
189
+ }
190
+
191
+ void
192
+ Ice::OutputStream::resetEncapsulation()
193
+ {
194
+ while(_currentEncaps && _currentEncaps != &_preAllocatedEncaps)
195
+ {
196
+ Encaps* oldEncaps = _currentEncaps;
197
+ _currentEncaps = _currentEncaps->previous;
198
+ delete oldEncaps;
199
+ }
200
+
201
+ _preAllocatedEncaps.reset();
202
+ }
203
+
204
+ void
205
+ Ice::OutputStream::startEncapsulation()
206
+ {
207
+ //
208
+ // If no encoding version is specified, use the current write
209
+ // encapsulation encoding version if there's a current write
210
+ // encapsulation, otherwise, use the stream encoding version.
211
+ //
212
+
213
+ if(_currentEncaps)
214
+ {
215
+ startEncapsulation(_currentEncaps->encoding, _currentEncaps->format);
216
+ }
217
+ else
218
+ {
219
+ startEncapsulation(_encoding, Ice::ICE_ENUM(FormatType, DefaultFormat));
220
+ }
221
+ }
222
+
223
+ void
224
+ Ice::OutputStream::writePendingValues()
225
+ {
226
+ if(_currentEncaps && _currentEncaps->encoder)
227
+ {
228
+ _currentEncaps->encoder->writePendingValues();
229
+ }
230
+ else if(getEncoding() == Ice::Encoding_1_0)
231
+ {
232
+ //
233
+ // If using the 1.0 encoding and no instances were written, we
234
+ // still write an empty sequence for pending instances if
235
+ // requested (i.e.: if this is called).
236
+ //
237
+ // This is required by the 1.0 encoding, even if no instances
238
+ // are written we do marshal an empty sequence if marshaled
239
+ // data types use classes.
240
+ //
241
+ writeSize(0);
242
+ }
243
+ }
244
+
245
+ void
246
+ Ice::OutputStream::writeBlob(const vector<Byte>& v)
247
+ {
248
+ if(!v.empty())
249
+ {
250
+ Container::size_type pos = b.size();
251
+ resize(pos + v.size());
252
+ memcpy(&b[pos], &v[0], v.size());
253
+ }
254
+ }
255
+
256
+ void
257
+ Ice::OutputStream::write(const Byte* begin, const Byte* end)
258
+ {
259
+ Int sz = static_cast<Int>(end - begin);
260
+ writeSize(sz);
261
+ if(sz > 0)
262
+ {
263
+ Container::size_type pos = b.size();
264
+ resize(pos + sz);
265
+ memcpy(&b[pos], begin, sz);
266
+ }
267
+ }
268
+
269
+ void
270
+ Ice::OutputStream::write(const vector<bool>& v)
271
+ {
272
+ Int sz = static_cast<Int>(v.size());
273
+ writeSize(sz);
274
+ if(sz > 0)
275
+ {
276
+ Container::size_type pos = b.size();
277
+ resize(pos + sz);
278
+ copy(v.begin(), v.end(), b.begin() + pos);
279
+ }
280
+ }
281
+
282
+ namespace
283
+ {
284
+
285
+ template<size_t boolSize>
286
+ struct WriteBoolHelper
287
+ {
288
+ static void write(const bool* begin, OutputStream::Container::size_type pos, OutputStream::Container& b, Int sz)
289
+ {
290
+ for(int idx = 0; idx < sz; ++idx)
291
+ {
292
+ b[pos + idx] = static_cast<Byte>(*(begin + idx));
293
+ }
294
+ }
295
+ };
296
+
297
+ template<>
298
+ struct WriteBoolHelper<1>
299
+ {
300
+ static void write(const bool* begin, OutputStream::Container::size_type pos, OutputStream::Container& b, Int sz)
301
+ {
302
+ memcpy(&b[pos], begin, sz);
303
+ }
304
+ };
305
+
306
+ }
307
+
308
+ void
309
+ Ice::OutputStream::write(const bool* begin, const bool* end)
310
+ {
311
+ Int sz = static_cast<Int>(end - begin);
312
+ writeSize(sz);
313
+ if(sz > 0)
314
+ {
315
+ Container::size_type pos = b.size();
316
+ resize(pos + sz);
317
+ WriteBoolHelper<sizeof(bool)>::write(begin, pos, b, sz);
318
+ }
319
+ }
320
+
321
+ void
322
+ Ice::OutputStream::write(Short v)
323
+ {
324
+ Container::size_type pos = b.size();
325
+ resize(pos + sizeof(Short));
326
+ Byte* dest = &b[pos];
327
+ #ifdef ICE_BIG_ENDIAN
328
+ const Byte* src = reinterpret_cast<const Byte*>(&v) + sizeof(Short) - 1;
329
+ *dest++ = *src--;
330
+ *dest = *src;
331
+ #else
332
+ const Byte* src = reinterpret_cast<const Byte*>(&v);
333
+ *dest++ = *src++;
334
+ *dest = *src;
335
+ #endif
336
+ }
337
+
338
+ void
339
+ Ice::OutputStream::write(const Short* begin, const Short* end)
340
+ {
341
+ Int sz = static_cast<Int>(end - begin);
342
+ writeSize(sz);
343
+ if(sz > 0)
344
+ {
345
+ Container::size_type pos = b.size();
346
+ resize(pos + sz * sizeof(Short));
347
+ #ifdef ICE_BIG_ENDIAN
348
+ const Byte* src = reinterpret_cast<const Byte*>(begin) + sizeof(Short) - 1;
349
+ Byte* dest = &(*(b.begin() + pos));
350
+ for(int j = 0 ; j < sz ; ++j)
351
+ {
352
+ *dest++ = *src--;
353
+ *dest++ = *src--;
354
+ src += 2 * sizeof(Short);
355
+ }
356
+ #else
357
+ memcpy(&b[pos], reinterpret_cast<const Byte*>(begin), sz * sizeof(Short));
358
+ #endif
359
+ }
360
+ }
361
+
362
+ void
363
+ Ice::OutputStream::write(const Int* begin, const Int* end)
364
+ {
365
+ Int sz = static_cast<Int>(end - begin);
366
+ writeSize(sz);
367
+ if(sz > 0)
368
+ {
369
+ Container::size_type pos = b.size();
370
+ resize(pos + sz * sizeof(Int));
371
+ #ifdef ICE_BIG_ENDIAN
372
+ const Byte* src = reinterpret_cast<const Byte*>(begin) + sizeof(Int) - 1;
373
+ Byte* dest = &(*(b.begin() + pos));
374
+ for(int j = 0 ; j < sz ; ++j)
375
+ {
376
+ *dest++ = *src--;
377
+ *dest++ = *src--;
378
+ *dest++ = *src--;
379
+ *dest++ = *src--;
380
+ src += 2 * sizeof(Int);
381
+ }
382
+ #else
383
+ memcpy(&b[pos], reinterpret_cast<const Byte*>(begin), sz * sizeof(Int));
384
+ #endif
385
+ }
386
+ }
387
+
388
+ void
389
+ Ice::OutputStream::write(Long v)
390
+ {
391
+ Container::size_type pos = b.size();
392
+ resize(pos + sizeof(Long));
393
+ Byte* dest = &b[pos];
394
+ #ifdef ICE_BIG_ENDIAN
395
+ const Byte* src = reinterpret_cast<const Byte*>(&v) + sizeof(Long) - 1;
396
+ *dest++ = *src--;
397
+ *dest++ = *src--;
398
+ *dest++ = *src--;
399
+ *dest++ = *src--;
400
+ *dest++ = *src--;
401
+ *dest++ = *src--;
402
+ *dest++ = *src--;
403
+ *dest = *src;
404
+ #else
405
+ const Byte* src = reinterpret_cast<const Byte*>(&v);
406
+ *dest++ = *src++;
407
+ *dest++ = *src++;
408
+ *dest++ = *src++;
409
+ *dest++ = *src++;
410
+ *dest++ = *src++;
411
+ *dest++ = *src++;
412
+ *dest++ = *src++;
413
+ *dest = *src;
414
+ #endif
415
+ }
416
+
417
+ void
418
+ Ice::OutputStream::write(const Long* begin, const Long* end)
419
+ {
420
+ Int sz = static_cast<Int>(end - begin);
421
+ writeSize(sz);
422
+ if(sz > 0)
423
+ {
424
+ Container::size_type pos = b.size();
425
+ resize(pos + sz * sizeof(Long));
426
+ #ifdef ICE_BIG_ENDIAN
427
+ const Byte* src = reinterpret_cast<const Byte*>(begin) + sizeof(Long) - 1;
428
+ Byte* dest = &(*(b.begin() + pos));
429
+ for(int j = 0 ; j < sz ; ++j)
430
+ {
431
+ *dest++ = *src--;
432
+ *dest++ = *src--;
433
+ *dest++ = *src--;
434
+ *dest++ = *src--;
435
+ *dest++ = *src--;
436
+ *dest++ = *src--;
437
+ *dest++ = *src--;
438
+ *dest++ = *src--;
439
+ src += 2 * sizeof(Long);
440
+ }
441
+ #else
442
+ memcpy(&b[pos], reinterpret_cast<const Byte*>(begin), sz * sizeof(Long));
443
+ #endif
444
+ }
445
+ }
446
+
447
+ void
448
+ Ice::OutputStream::write(Float v)
449
+ {
450
+ Container::size_type pos = b.size();
451
+ resize(pos + sizeof(Float));
452
+ Byte* dest = &b[pos];
453
+ #ifdef ICE_BIG_ENDIAN
454
+ const Byte* src = reinterpret_cast<const Byte*>(&v) + sizeof(Float) - 1;
455
+ *dest++ = *src--;
456
+ *dest++ = *src--;
457
+ *dest++ = *src--;
458
+ *dest = *src;
459
+ #else
460
+ const Byte* src = reinterpret_cast<const Byte*>(&v);
461
+ *dest++ = *src++;
462
+ *dest++ = *src++;
463
+ *dest++ = *src++;
464
+ *dest = *src;
465
+ #endif
466
+ }
467
+
468
+ void
469
+ Ice::OutputStream::write(const Float* begin, const Float* end)
470
+ {
471
+ Int sz = static_cast<Int>(end - begin);
472
+ writeSize(sz);
473
+ if(sz > 0)
474
+ {
475
+ Container::size_type pos = b.size();
476
+ resize(pos + sz * sizeof(Float));
477
+ #ifdef ICE_BIG_ENDIAN
478
+ const Byte* src = reinterpret_cast<const Byte*>(begin) + sizeof(Float) - 1;
479
+ Byte* dest = &(*(b.begin() + pos));
480
+ for(int j = 0 ; j < sz ; ++j)
481
+ {
482
+ *dest++ = *src--;
483
+ *dest++ = *src--;
484
+ *dest++ = *src--;
485
+ *dest++ = *src--;
486
+ src += 2 * sizeof(Float);
487
+ }
488
+ #else
489
+ memcpy(&b[pos], reinterpret_cast<const Byte*>(begin), sz * sizeof(Float));
490
+ #endif
491
+ }
492
+ }
493
+
494
+ void
495
+ Ice::OutputStream::write(Double v)
496
+ {
497
+ Container::size_type pos = b.size();
498
+ resize(pos + sizeof(Double));
499
+ Byte* dest = &b[pos];
500
+ #ifdef ICE_BIG_ENDIAN
501
+ const Byte* src = reinterpret_cast<const Byte*>(&v) + sizeof(Double) - 1;
502
+ *dest++ = *src--;
503
+ *dest++ = *src--;
504
+ *dest++ = *src--;
505
+ *dest++ = *src--;
506
+ *dest++ = *src--;
507
+ *dest++ = *src--;
508
+ *dest++ = *src--;
509
+ *dest = *src;
510
+ #else
511
+ const Byte* src = reinterpret_cast<const Byte*>(&v);
512
+ # if defined(ICE_LITTLEBYTE_BIGWORD)
513
+ dest[4] = *src++;
514
+ dest[5] = *src++;
515
+ dest[6] = *src++;
516
+ dest[7] = *src++;
517
+ dest[0] = *src++;
518
+ dest[1] = *src++;
519
+ dest[2] = *src++;
520
+ dest[3] = *src;
521
+ # else
522
+ *dest++ = *src++;
523
+ *dest++ = *src++;
524
+ *dest++ = *src++;
525
+ *dest++ = *src++;
526
+ *dest++ = *src++;
527
+ *dest++ = *src++;
528
+ *dest++ = *src++;
529
+ *dest = *src;
530
+ # endif
531
+ #endif
532
+ }
533
+
534
+ void
535
+ Ice::OutputStream::write(const Double* begin, const Double* end)
536
+ {
537
+ Int sz = static_cast<Int>(end - begin);
538
+ writeSize(sz);
539
+ if(sz > 0)
540
+ {
541
+ Container::size_type pos = b.size();
542
+ resize(pos + sz * sizeof(Double));
543
+ #ifdef ICE_BIG_ENDIAN
544
+ const Byte* src = reinterpret_cast<const Byte*>(begin) + sizeof(Double) - 1;
545
+ Byte* dest = &(*(b.begin() + pos));
546
+ for(int j = 0 ; j < sz ; ++j)
547
+ {
548
+ *dest++ = *src--;
549
+ *dest++ = *src--;
550
+ *dest++ = *src--;
551
+ *dest++ = *src--;
552
+ *dest++ = *src--;
553
+ *dest++ = *src--;
554
+ *dest++ = *src--;
555
+ *dest++ = *src--;
556
+ src += 2 * sizeof(Double);
557
+ }
558
+ #elif defined(ICE_LITTLEBYTE_BIGWORD)
559
+ const Byte* src = reinterpret_cast<const Byte*>(begin);
560
+ Byte* dest = &(*(b.begin() + pos));
561
+ for(int j = 0 ; j < sz ; ++j)
562
+ {
563
+ dest[4] = *src++;
564
+ dest[5] = *src++;
565
+ dest[6] = *src++;
566
+ dest[7] = *src++;
567
+ dest[0] = *src++;
568
+ dest[1] = *src++;
569
+ dest[2] = *src++;
570
+ dest[3] = *src++;
571
+ dest += sizeof(Double);
572
+ }
573
+ #else
574
+ memcpy(&b[pos], reinterpret_cast<const Byte*>(begin), sz * sizeof(Double));
575
+ #endif
576
+ }
577
+ }
578
+
579
+ //
580
+ // NOTE: This member function is intentionally omitted in order to
581
+ // cause a link error if it is used. This is for efficiency reasons:
582
+ // writing a const char * requires a traversal of the string to get
583
+ // the string length first, which takes O(n) time, whereas getting the
584
+ // string length from a std::string takes constant time.
585
+ //
586
+ /*
587
+ void
588
+ Ice::OutputStream::write(const char*)
589
+ {
590
+ }
591
+ */
592
+
593
+ void
594
+ Ice::OutputStream::writeConverted(const char* vdata, size_t vsize)
595
+ {
596
+ //
597
+ // What is the size of the resulting UTF-8 encoded string?
598
+ // Impossible to tell, so we guess. If we don't guess correctly,
599
+ // we'll have to fix the mistake afterwards
600
+ //
601
+ try
602
+ {
603
+ Int guessedSize = static_cast<Int>(vsize);
604
+ writeSize(guessedSize); // writeSize() only writes the size; it does not reserve any buffer space.
605
+
606
+ size_t firstIndex = b.size();
607
+ StreamUTF8BufferI buffer(*this);
608
+
609
+ Byte* lastByte = ICE_NULLPTR;
610
+ bool converted = false;
611
+ if(_instance)
612
+ {
613
+ const StringConverterPtr& stringConverter = _instance->getStringConverter();
614
+ if(stringConverter)
615
+ {
616
+ lastByte = stringConverter->toUTF8(vdata, vdata + vsize, buffer);
617
+ converted = true;
618
+ }
619
+ }
620
+ else
621
+ {
622
+ StringConverterPtr stringConverter = getProcessStringConverter();
623
+ if(stringConverter)
624
+ {
625
+ lastByte = stringConverter->toUTF8(vdata, vdata + vsize, buffer);
626
+ converted = true;
627
+ }
628
+ }
629
+
630
+ if(!converted)
631
+ {
632
+ Container::size_type position = b.size();
633
+ resize(position + vsize);
634
+ memcpy(&b[position], vdata, vsize);
635
+ return;
636
+ }
637
+
638
+ if(lastByte != b.end())
639
+ {
640
+ resize(lastByte - b.begin());
641
+ }
642
+ size_t lastIndex = b.size();
643
+
644
+ Int actualSize = static_cast<Int>(lastIndex - firstIndex);
645
+
646
+ //
647
+ // Check against the guess
648
+ //
649
+ if(guessedSize != actualSize)
650
+ {
651
+ if(guessedSize <= 254 && actualSize > 254)
652
+ {
653
+ //
654
+ // Move the UTF-8 sequence 4 bytes further
655
+ // Use memmove instead of memcpy since the source and destination typically overlap.
656
+ //
657
+ resize(b.size() + 4);
658
+ memmove(b.begin() + firstIndex + 4, b.begin() + firstIndex, actualSize);
659
+ }
660
+ else if(guessedSize > 254 && actualSize <= 254)
661
+ {
662
+ //
663
+ // Move the UTF-8 sequence 4 bytes back
664
+ //
665
+ memmove(b.begin() + firstIndex - 4, b.begin() + firstIndex, actualSize);
666
+ resize(b.size() - 4);
667
+ }
668
+
669
+ if(guessedSize <= 254)
670
+ {
671
+ rewriteSize(actualSize, b.begin() + firstIndex - 1);
672
+ }
673
+ else
674
+ {
675
+ rewriteSize(actualSize, b.begin() + firstIndex - 1 - 4);
676
+ }
677
+ }
678
+ }
679
+ catch(const IceUtil::IllegalConversionException& ex)
680
+ {
681
+ throw StringConversionException(__FILE__, __LINE__, ex.reason());
682
+ }
683
+ }
684
+
685
+ void
686
+ Ice::OutputStream::write(const string* begin, const string* end, bool convert)
687
+ {
688
+ Int sz = static_cast<Int>(end - begin);
689
+ writeSize(sz);
690
+ if(sz > 0)
691
+ {
692
+ for(int i = 0; i < sz; ++i)
693
+ {
694
+ write(begin[i], convert);
695
+ }
696
+ }
697
+ }
698
+
699
+ void
700
+ Ice::OutputStream::write(const wstring& v)
701
+ {
702
+ if(v.empty())
703
+ {
704
+ writeSize(0);
705
+ return;
706
+ }
707
+
708
+ //
709
+ // What is the size of the resulting UTF-8 encoded string?
710
+ // Impossible to tell, so we guess. If we don't guess correctly,
711
+ // we'll have to fix the mistake afterwards
712
+ //
713
+ try
714
+ {
715
+ Int guessedSize = static_cast<Int>(v.size());
716
+ writeSize(guessedSize); // writeSize() only writes the size; it does not reserve any buffer space.
717
+
718
+ size_t firstIndex = b.size();
719
+ StreamUTF8BufferI buffer(*this);
720
+
721
+ Byte* lastByte = ICE_NULLPTR;
722
+
723
+ // Note: wstringConverter is never null; when set to null, get returns the default unicode wstring converter
724
+ if(_instance)
725
+ {
726
+ lastByte = _instance->getWstringConverter()->toUTF8(v.data(), v.data() + v.size(), buffer);
727
+ }
728
+ else
729
+ {
730
+ lastByte = getProcessWstringConverter()->toUTF8(v.data(), v.data() + v.size(), buffer);
731
+ }
732
+
733
+ if(lastByte != b.end())
734
+ {
735
+ resize(lastByte - b.begin());
736
+ }
737
+ size_t lastIndex = b.size();
738
+
739
+ Int actualSize = static_cast<Int>(lastIndex - firstIndex);
740
+
741
+ //
742
+ // Check against the guess
743
+ //
744
+ if(guessedSize != actualSize)
745
+ {
746
+ if(guessedSize <= 254 && actualSize > 254)
747
+ {
748
+ //
749
+ // Move the UTF-8 sequence 4 bytes further
750
+ // Use memmove instead of memcpy since the source and destination typically overlap.
751
+ //
752
+ resize(b.size() + 4);
753
+ memmove(b.begin() + firstIndex + 4, b.begin() + firstIndex, actualSize);
754
+ }
755
+ else if(guessedSize > 254 && actualSize <= 254)
756
+ {
757
+ //
758
+ // Move the UTF-8 sequence 4 bytes back
759
+ //
760
+ memmove(b.begin() + firstIndex - 4, b.begin() + firstIndex, actualSize);
761
+ resize(b.size() - 4);
762
+ }
763
+
764
+ if(guessedSize <= 254)
765
+ {
766
+ rewriteSize(actualSize, b.begin() + firstIndex - 1);
767
+ }
768
+ else
769
+ {
770
+ rewriteSize(actualSize, b.begin() + firstIndex - 1 - 4);
771
+ }
772
+ }
773
+ }
774
+ catch(const IceUtil::IllegalConversionException& ex)
775
+ {
776
+ throw StringConversionException(__FILE__, __LINE__, ex.reason());
777
+ }
778
+ }
779
+
780
+ void
781
+ Ice::OutputStream::write(const wstring* begin, const wstring* end)
782
+ {
783
+ Int sz = static_cast<Int>(end - begin);
784
+ writeSize(sz);
785
+ if(sz > 0)
786
+ {
787
+ for(int i = 0; i < sz; ++i)
788
+ {
789
+ write(begin[i]);
790
+ }
791
+ }
792
+ }
793
+
794
+ void
795
+ #ifdef ICE_CPP11_MAPPING
796
+ Ice::OutputStream::writeProxy(const shared_ptr<ObjectPrx>& v)
797
+ #else
798
+ Ice::OutputStream::write(const ObjectPrx& v)
799
+ #endif
800
+ {
801
+ if(v)
802
+ {
803
+ v->_write(*this);
804
+ }
805
+ else
806
+ {
807
+ Identity ident;
808
+ write(ident);
809
+ }
810
+ }
811
+
812
+ void
813
+ Ice::OutputStream::writeEnum(Int v, Int maxValue)
814
+ {
815
+ if(getEncoding() == Encoding_1_0)
816
+ {
817
+ if(maxValue < 127)
818
+ {
819
+ write(static_cast<Byte>(v));
820
+ }
821
+ else if(maxValue < 32767)
822
+ {
823
+ write(static_cast<Short>(v));
824
+ }
825
+ else
826
+ {
827
+ write(v);
828
+ }
829
+ }
830
+ else
831
+ {
832
+ writeSize(v);
833
+ }
834
+ }
835
+
836
+ void
837
+ Ice::OutputStream::writeException(const UserException& e)
838
+ {
839
+ initEncaps();
840
+ _currentEncaps->encoder->write(e);
841
+ }
842
+
843
+ bool
844
+ Ice::OutputStream::writeOptImpl(Int tag, OptionalFormat type)
845
+ {
846
+ if(getEncoding() == Encoding_1_0)
847
+ {
848
+ return false; // Optional members aren't supported with the 1.0 encoding.
849
+ }
850
+
851
+ Byte v = static_cast<Byte>(type);
852
+ if(tag < 30)
853
+ {
854
+ v |= static_cast<Byte>(tag << 3);
855
+ write(v);
856
+ }
857
+ else
858
+ {
859
+ v |= 0xF0; // tag = 30
860
+ write(v);
861
+ writeSize(tag);
862
+ }
863
+ return true;
864
+ }
865
+
866
+ void
867
+ Ice::OutputStream::finished(vector<Byte>& bytes)
868
+ {
869
+ vector<Byte>(b.begin(), b.end()).swap(bytes);
870
+ }
871
+
872
+ pair<const Byte*, const Byte*>
873
+ Ice::OutputStream::finished()
874
+ {
875
+ if(b.empty())
876
+ {
877
+ return pair<const Byte*, const Byte*>(reinterpret_cast<Ice::Byte*>(0), reinterpret_cast<Ice::Byte*>(0));
878
+ }
879
+ else
880
+ {
881
+ return pair<const Byte*, const Byte*>(&b[0], &b[0] + b.size());
882
+ }
883
+ }
884
+
885
+ void
886
+ Ice::OutputStream::throwEncapsulationException(const char* file, int line)
887
+ {
888
+ throw EncapsulationException(file, line);
889
+ }
890
+
891
+ void
892
+ Ice::OutputStream::initEncaps()
893
+ {
894
+ if(!_currentEncaps) // Lazy initialization.
895
+ {
896
+ _currentEncaps = &_preAllocatedEncaps;
897
+ _currentEncaps->start = b.size();
898
+ _currentEncaps->encoding = _encoding;
899
+ }
900
+
901
+ if(_currentEncaps->format == Ice::ICE_ENUM(FormatType, DefaultFormat))
902
+ {
903
+ _currentEncaps->format = _format;
904
+ }
905
+
906
+ if(!_currentEncaps->encoder) // Lazy initialization.
907
+ {
908
+ if(_currentEncaps->encoding == Encoding_1_0)
909
+ {
910
+ _currentEncaps->encoder = new EncapsEncoder10(this, _currentEncaps);
911
+ }
912
+ else
913
+ {
914
+ _currentEncaps->encoder = new EncapsEncoder11(this, _currentEncaps);
915
+ }
916
+ }
917
+ }
918
+
919
+ Ice::OutputStream::EncapsEncoder::~EncapsEncoder()
920
+ {
921
+ // Out of line to avoid weak vtable
922
+ }
923
+
924
+ Int
925
+ Ice::OutputStream::EncapsEncoder::registerTypeId(const string& typeId)
926
+ {
927
+ TypeIdMap::const_iterator p = _typeIdMap.find(typeId);
928
+ if(p != _typeIdMap.end())
929
+ {
930
+ return p->second;
931
+ }
932
+ else
933
+ {
934
+ _typeIdMap.insert(make_pair(typeId, ++_typeIdIndex));
935
+ return -1;
936
+ }
937
+ }
938
+
939
+ void
940
+ Ice::OutputStream::EncapsEncoder10::write(const ValuePtr& v)
941
+ {
942
+ //
943
+ // Object references are encoded as a negative integer in 1.0.
944
+ //
945
+ if(v)
946
+ {
947
+ _stream->write(-registerValue(v));
948
+ }
949
+ else
950
+ {
951
+ _stream->write(0);
952
+ }
953
+ }
954
+
955
+ void
956
+ Ice::OutputStream::EncapsEncoder10::write(const UserException& v)
957
+ {
958
+ //
959
+ // User exception with the 1.0 encoding start with a boolean
960
+ // flag that indicates whether or not the exception uses
961
+ // classes.
962
+ //
963
+ // This allows reading the pending instances even if some part of
964
+ // the exception was sliced.
965
+ //
966
+ bool usesClasses = v._usesClasses();
967
+ _stream->write(usesClasses);
968
+ v._write(_stream);
969
+ if(usesClasses)
970
+ {
971
+ writePendingValues();
972
+ }
973
+ }
974
+
975
+ void
976
+ Ice::OutputStream::EncapsEncoder10::startInstance(SliceType sliceType, const SlicedDataPtr&)
977
+ {
978
+ _sliceType = sliceType;
979
+ }
980
+
981
+ void
982
+ Ice::OutputStream::EncapsEncoder10::endInstance()
983
+ {
984
+ if(_sliceType == ValueSlice)
985
+ {
986
+ //
987
+ // Write the Object slice.
988
+ //
989
+ startSlice(Object::ice_staticId(), -1, true);
990
+ _stream->writeSize(0); // For compatibility with the old AFM.
991
+ endSlice();
992
+ }
993
+ _sliceType = NoSlice;
994
+ }
995
+
996
+ void
997
+ Ice::OutputStream::EncapsEncoder10::startSlice(const string& typeId, int, bool /*last*/)
998
+ {
999
+ //
1000
+ // For instance slices, encode a boolean to indicate how the type ID
1001
+ // is encoded and the type ID either as a string or index. For
1002
+ // exception slices, always encode the type ID as a string.
1003
+ //
1004
+ if(_sliceType == ValueSlice)
1005
+ {
1006
+ Int index = registerTypeId(typeId);
1007
+ if(index < 0)
1008
+ {
1009
+ _stream->write(false);
1010
+ _stream->write(typeId, false);
1011
+ }
1012
+ else
1013
+ {
1014
+ _stream->write(true);
1015
+ _stream->writeSize(index);
1016
+ }
1017
+ }
1018
+ else
1019
+ {
1020
+ _stream->write(typeId, false);
1021
+ }
1022
+
1023
+ _stream->write(Int(0)); // Placeholder for the slice length.
1024
+
1025
+ _writeSlice = _stream->b.size();
1026
+ }
1027
+
1028
+ void
1029
+ Ice::OutputStream::EncapsEncoder10::endSlice()
1030
+ {
1031
+ //
1032
+ // Write the slice length.
1033
+ //
1034
+ Int sz = static_cast<Int>(_stream->b.size() - _writeSlice + sizeof(Int));
1035
+ Byte* dest = &(*(_stream->b.begin() + _writeSlice - sizeof(Int)));
1036
+ _stream->write(sz, dest);
1037
+ }
1038
+
1039
+ void
1040
+ Ice::OutputStream::EncapsEncoder10::writePendingValues()
1041
+ {
1042
+ while(!_toBeMarshaledMap.empty())
1043
+ {
1044
+ //
1045
+ // Consider the to be marshalled instances as marshalled now,
1046
+ // this is necessary to avoid adding again the "to be
1047
+ // marshalled instances" into _toBeMarshaledMap while writing
1048
+ // instances.
1049
+ //
1050
+ _marshaledMap.insert(_toBeMarshaledMap.begin(), _toBeMarshaledMap.end());
1051
+
1052
+ PtrToIndexMap savedMap;
1053
+ savedMap.swap(_toBeMarshaledMap);
1054
+ _stream->writeSize(static_cast<Int>(savedMap.size()));
1055
+ for(PtrToIndexMap::iterator p = savedMap.begin(); p != savedMap.end(); ++p)
1056
+ {
1057
+ //
1058
+ // Ask the instance to marshal itself. Any new class
1059
+ // instances that are triggered by the classes marshaled
1060
+ // are added to toBeMarshaledMap.
1061
+ //
1062
+ _stream->write(p->second);
1063
+
1064
+ try
1065
+ {
1066
+ p->first->ice_preMarshal();
1067
+ }
1068
+ catch(const std::exception& ex)
1069
+ {
1070
+ Warning out(_stream->instance()->initializationData().logger);
1071
+ out << "std::exception raised by ice_preMarshal:\n" << ex;
1072
+ }
1073
+ catch(...)
1074
+ {
1075
+ Warning out(_stream->instance()->initializationData().logger);
1076
+ out << "unknown exception raised by ice_preMarshal";
1077
+ }
1078
+
1079
+ p->first->_iceWrite(_stream);
1080
+ }
1081
+ }
1082
+ _stream->writeSize(0); // Zero marker indicates end of sequence of sequences of instances.
1083
+ }
1084
+
1085
+ Int
1086
+ Ice::OutputStream::EncapsEncoder10::registerValue(const ValuePtr& v)
1087
+ {
1088
+ assert(v);
1089
+
1090
+ //
1091
+ // Look for this instance in the to-be-marshaled map.
1092
+ //
1093
+ PtrToIndexMap::const_iterator p = _toBeMarshaledMap.find(v);
1094
+ if(p != _toBeMarshaledMap.end())
1095
+ {
1096
+ return p->second;
1097
+ }
1098
+
1099
+ //
1100
+ // Didn't find it, try the marshaled map next.
1101
+ //
1102
+ PtrToIndexMap::const_iterator q = _marshaledMap.find(v);
1103
+ if(q != _marshaledMap.end())
1104
+ {
1105
+ return q->second;
1106
+ }
1107
+
1108
+ //
1109
+ // We haven't seen this instance previously, create a new
1110
+ // index, and insert it into the to-be-marshaled map.
1111
+ //
1112
+ _toBeMarshaledMap.insert(make_pair(v, ++_valueIdIndex));
1113
+ return _valueIdIndex;
1114
+ }
1115
+
1116
+ void
1117
+ Ice::OutputStream::EncapsEncoder11::write(const ValuePtr& v)
1118
+ {
1119
+ if(!v)
1120
+ {
1121
+ _stream->writeSize(0); // Nil reference.
1122
+ }
1123
+ else if(_current && _encaps->format == ICE_ENUM(FormatType, SlicedFormat))
1124
+ {
1125
+ //
1126
+ // If writing an instance within a slice and using the sliced
1127
+ // format, write an index from the instance indirection
1128
+ // table. The indirect instance table is encoded at the end of
1129
+ // each slice and is always read (even if the Slice is
1130
+ // unknown).
1131
+ //
1132
+ PtrToIndexMap::const_iterator p = _current->indirectionMap.find(v);
1133
+ if(p == _current->indirectionMap.end())
1134
+ {
1135
+ _current->indirectionTable.push_back(v);
1136
+ Int idx = static_cast<Int>(_current->indirectionTable.size()); // Position + 1 (0 is reserved for nil)
1137
+ _current->indirectionMap.insert(make_pair(v, idx));
1138
+ _stream->writeSize(idx);
1139
+ }
1140
+ else
1141
+ {
1142
+ _stream->writeSize(p->second);
1143
+ }
1144
+ }
1145
+ else
1146
+ {
1147
+ writeInstance(v); // Write the instance or a reference if already marshaled.
1148
+ }
1149
+ }
1150
+
1151
+ void
1152
+ Ice::OutputStream::EncapsEncoder11::write(const UserException& v)
1153
+ {
1154
+ v._write(_stream);
1155
+ }
1156
+
1157
+ void
1158
+ Ice::OutputStream::EncapsEncoder11::startInstance(SliceType sliceType, const SlicedDataPtr& data)
1159
+ {
1160
+ if(!_current)
1161
+ {
1162
+ _current = &_preAllocatedInstanceData;
1163
+ }
1164
+ else
1165
+ {
1166
+ _current = _current->next ? _current->next : new InstanceData(_current);
1167
+ }
1168
+ _current->sliceType = sliceType;
1169
+ _current->firstSlice = true;
1170
+
1171
+ if(data)
1172
+ {
1173
+ writeSlicedData(data);
1174
+ }
1175
+ }
1176
+
1177
+ void
1178
+ Ice::OutputStream::EncapsEncoder11::endInstance()
1179
+ {
1180
+ _current = _current->previous;
1181
+ }
1182
+
1183
+ void
1184
+ Ice::OutputStream::EncapsEncoder11::startSlice(const string& typeId, int compactId, bool last)
1185
+ {
1186
+ assert(_current->indirectionTable.empty() && _current->indirectionMap.empty());
1187
+
1188
+ _current->sliceFlagsPos = _stream->b.size();
1189
+
1190
+ _current->sliceFlags = 0;
1191
+ if(_encaps->format == ICE_ENUM(FormatType, SlicedFormat))
1192
+ {
1193
+ _current->sliceFlags |= FLAG_HAS_SLICE_SIZE; // Encode the slice size if using the sliced format.
1194
+ }
1195
+ if(last)
1196
+ {
1197
+ _current->sliceFlags |= FLAG_IS_LAST_SLICE; // This is the last slice.
1198
+ }
1199
+
1200
+ _stream->write(Byte(0)); // Placeholder for the slice flags
1201
+
1202
+ //
1203
+ // For instance slices, encode the flag and the type ID either as a
1204
+ // string or index. For exception slices, always encode the type
1205
+ // ID a string.
1206
+ //
1207
+ if(_current->sliceType == ValueSlice)
1208
+ {
1209
+ //
1210
+ // Encode the type ID (only in the first slice for the compact
1211
+ // encoding).
1212
+ //
1213
+ if(_encaps->format == ICE_ENUM(FormatType, SlicedFormat) || _current->firstSlice)
1214
+ {
1215
+ if(compactId >= 0)
1216
+ {
1217
+ _current->sliceFlags |= FLAG_HAS_TYPE_ID_COMPACT;
1218
+ _stream->writeSize(compactId);
1219
+ }
1220
+ else
1221
+ {
1222
+ Int index = registerTypeId(typeId);
1223
+ if(index < 0)
1224
+ {
1225
+ _current->sliceFlags |= FLAG_HAS_TYPE_ID_STRING;
1226
+ _stream->write(typeId, false);
1227
+ }
1228
+ else
1229
+ {
1230
+ _current->sliceFlags |= FLAG_HAS_TYPE_ID_INDEX;
1231
+ _stream->writeSize(index);
1232
+ }
1233
+ }
1234
+ }
1235
+ }
1236
+ else
1237
+ {
1238
+ _stream->write(typeId, false);
1239
+ }
1240
+
1241
+ if(_current->sliceFlags & FLAG_HAS_SLICE_SIZE)
1242
+ {
1243
+ _stream->write(Int(0)); // Placeholder for the slice length.
1244
+ }
1245
+
1246
+ _current->writeSlice = _stream->b.size();
1247
+ _current->firstSlice = false;
1248
+ }
1249
+
1250
+ void
1251
+ Ice::OutputStream::EncapsEncoder11::endSlice()
1252
+ {
1253
+ //
1254
+ // Write the optional member end marker if some optional members
1255
+ // were encoded. Note that the optional members are encoded before
1256
+ // the indirection table and are included in the slice size.
1257
+ //
1258
+ if(_current->sliceFlags & FLAG_HAS_OPTIONAL_MEMBERS)
1259
+ {
1260
+ _stream->write(OPTIONAL_END_MARKER);
1261
+ }
1262
+
1263
+ //
1264
+ // Write the slice length if necessary.
1265
+ //
1266
+ if(_current->sliceFlags & FLAG_HAS_SLICE_SIZE)
1267
+ {
1268
+ Int sz = static_cast<Int>(_stream->b.size() - _current->writeSlice + sizeof(Int));
1269
+ Byte* dest = &(*(_stream->b.begin() + _current->writeSlice - sizeof(Int)));
1270
+ _stream->write(sz, dest);
1271
+ }
1272
+
1273
+ //
1274
+ // Only write the indirection table if it contains entries.
1275
+ //
1276
+ if(!_current->indirectionTable.empty())
1277
+ {
1278
+ assert(_encaps->format == ICE_ENUM(FormatType, SlicedFormat));
1279
+ _current->sliceFlags |= FLAG_HAS_INDIRECTION_TABLE;
1280
+
1281
+ //
1282
+ // Write the indirect instance table.
1283
+ //
1284
+ _stream->writeSize(static_cast<Int>(_current->indirectionTable.size()));
1285
+ ValueList::const_iterator p;
1286
+ for(p = _current->indirectionTable.begin(); p != _current->indirectionTable.end(); ++p)
1287
+ {
1288
+ writeInstance(*p);
1289
+ }
1290
+ _current->indirectionTable.clear();
1291
+ _current->indirectionMap.clear();
1292
+ }
1293
+
1294
+ //
1295
+ // Finally, update the slice flags.
1296
+ //
1297
+ Byte* dest = &(*(_stream->b.begin() + _current->sliceFlagsPos));
1298
+ *dest = _current->sliceFlags;
1299
+ }
1300
+
1301
+ bool
1302
+ Ice::OutputStream::EncapsEncoder11::writeOptional(Ice::Int tag, Ice::OptionalFormat format)
1303
+ {
1304
+ if(!_current)
1305
+ {
1306
+ return _stream->writeOptImpl(tag, format);
1307
+ }
1308
+ else
1309
+ {
1310
+ if(_stream->writeOptImpl(tag, format))
1311
+ {
1312
+ _current->sliceFlags |= FLAG_HAS_OPTIONAL_MEMBERS;
1313
+ return true;
1314
+ }
1315
+ else
1316
+ {
1317
+ return false;
1318
+ }
1319
+ }
1320
+ }
1321
+
1322
+ void
1323
+ Ice::OutputStream::EncapsEncoder11::writeSlicedData(const SlicedDataPtr& slicedData)
1324
+ {
1325
+ assert(slicedData);
1326
+
1327
+ //
1328
+ // We only remarshal preserved slices if we are using the sliced
1329
+ // format. Otherwise, we ignore the preserved slices, which
1330
+ // essentially "slices" the instance into the most-derived type
1331
+ // known by the sender.
1332
+ //
1333
+ if(_encaps->format != ICE_ENUM(FormatType, SlicedFormat))
1334
+ {
1335
+ return;
1336
+ }
1337
+
1338
+ for(SliceInfoSeq::const_iterator p = slicedData->slices.begin(); p != slicedData->slices.end(); ++p)
1339
+ {
1340
+ startSlice((*p)->typeId, (*p)->compactId, (*p)->isLastSlice);
1341
+
1342
+ //
1343
+ // Write the bytes associated with this slice.
1344
+ //
1345
+ _stream->writeBlob((*p)->bytes);
1346
+
1347
+ if((*p)->hasOptionalMembers)
1348
+ {
1349
+ _current->sliceFlags |= FLAG_HAS_OPTIONAL_MEMBERS;
1350
+ }
1351
+
1352
+ //
1353
+ // Make sure to also re-write the instance indirection table.
1354
+ //
1355
+ _current->indirectionTable = (*p)->instances;
1356
+
1357
+ endSlice();
1358
+ }
1359
+ }
1360
+
1361
+ void
1362
+ Ice::OutputStream::EncapsEncoder11::writeInstance(const ValuePtr& v)
1363
+ {
1364
+ assert(v);
1365
+
1366
+ //
1367
+ // If the instance was already marshaled, just write it's ID.
1368
+ //
1369
+ PtrToIndexMap::const_iterator q = _marshaledMap.find(v);
1370
+ if(q != _marshaledMap.end())
1371
+ {
1372
+ _stream->writeSize(q->second);
1373
+ return;
1374
+ }
1375
+
1376
+ //
1377
+ // We haven't seen this instance previously, create a new ID,
1378
+ // insert it into the marshaled map, and write the instance.
1379
+ //
1380
+ _marshaledMap.insert(make_pair(v, ++_valueIdIndex));
1381
+
1382
+ try
1383
+ {
1384
+ v->ice_preMarshal();
1385
+ }
1386
+ catch(const std::exception& ex)
1387
+ {
1388
+ Warning out(_stream->instance()->initializationData().logger);
1389
+ out << "std::exception raised by ice_preMarshal:\n" << ex;
1390
+ }
1391
+ catch(...)
1392
+ {
1393
+ Warning out(_stream->instance()->initializationData().logger);
1394
+ out << "unknown exception raised by ice_preMarshal";
1395
+ }
1396
+
1397
+ _stream->writeSize(1); // Object instance marker.
1398
+ v->_iceWrite(_stream);
1399
+ }