zeroc-ice 3.7.9.1 → 3.7.11

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 (994) hide show
  1. checksums.yaml +4 -4
  2. data/dist/IceRuby/Connection.cpp +536 -0
  3. data/dist/IceRuby/Endpoint.cpp +344 -0
  4. data/dist/IceRuby/ImplicitContext.cpp +148 -0
  5. data/dist/IceRuby/Logger.cpp +151 -0
  6. data/dist/IceRuby/Operation.cpp +665 -0
  7. data/dist/IceRuby/Properties.cpp +369 -0
  8. data/dist/IceRuby/Types.cpp +3336 -0
  9. data/dist/IceRuby/Types.h +604 -0
  10. data/dist/IceRuby/ValueFactoryManager.cpp +445 -0
  11. data/dist/ice/cpp/include/Ice/Config.h +76 -0
  12. data/dist/ice/cpp/include/Ice/ConsoleUtil.h +23 -0
  13. data/dist/ice/cpp/include/Ice/ExceptionHelpers.h +74 -0
  14. data/dist/ice/cpp/include/Ice/Ice.h +55 -0
  15. data/dist/ice/cpp/include/Ice/Initialize.h +957 -0
  16. data/dist/ice/cpp/include/Ice/MetricsObserverI.h +669 -0
  17. data/dist/ice/cpp/include/Ice/OutgoingAsync.h +868 -0
  18. data/dist/ice/cpp/include/Ice/Proxy.h +5171 -0
  19. data/dist/ice/cpp/include/Ice/SHA1.h +40 -0
  20. data/dist/ice/cpp/include/Ice/UserExceptionFactory.h +90 -0
  21. data/dist/ice/cpp/include/IceDiscovery/IceDiscovery.h +1889 -0
  22. data/dist/ice/cpp/include/IceLocatorDiscovery/IceLocatorDiscovery.h +1197 -0
  23. data/dist/ice/cpp/include/IceSSL/IceSSL.h +24 -0
  24. data/dist/ice/cpp/include/IceUtil/Cond.h +317 -0
  25. data/dist/ice/cpp/include/IceUtil/Config.h +392 -0
  26. data/dist/ice/cpp/include/IceUtil/ConsoleUtil.h +92 -0
  27. data/dist/ice/cpp/include/IceUtil/CtrlCHandler.h +96 -0
  28. data/dist/ice/cpp/include/IceUtil/FileUtil.h +140 -0
  29. data/dist/ice/cpp/include/IceUtil/IceUtil.h +40 -0
  30. data/dist/ice/cpp/include/IceUtil/InputUtil.h +42 -0
  31. data/dist/ice/cpp/include/IceUtil/Mutex.h +349 -0
  32. data/dist/ice/cpp/include/IceUtil/ResourceConfig.h +37 -0
  33. data/dist/ice/cpp/include/IceUtil/Thread.h +160 -0
  34. data/dist/ice/cpp/include/IceUtil/Timer.h +153 -0
  35. data/dist/ice/cpp/include/generated/Glacier2/Metrics.h +475 -0
  36. data/dist/ice/cpp/include/generated/Glacier2/PermissionsVerifier.h +1430 -0
  37. data/dist/ice/cpp/include/generated/Glacier2/PermissionsVerifierF.h +147 -0
  38. data/dist/ice/cpp/include/generated/Glacier2/Router.h +3260 -0
  39. data/dist/ice/cpp/include/generated/Glacier2/RouterF.h +125 -0
  40. data/dist/ice/cpp/include/generated/Glacier2/SSLInfo.h +223 -0
  41. data/dist/ice/cpp/include/generated/Glacier2/Session.h +5894 -0
  42. data/dist/ice/cpp/include/generated/Ice/BuiltinSequences.h +170 -0
  43. data/dist/ice/cpp/include/generated/Ice/Communicator.h +1162 -0
  44. data/dist/ice/cpp/include/generated/Ice/CommunicatorF.h +101 -0
  45. data/dist/ice/cpp/include/generated/Ice/Connection.h +1703 -0
  46. data/dist/ice/cpp/include/generated/Ice/ConnectionF.h +119 -0
  47. data/dist/ice/cpp/include/generated/Ice/Current.h +322 -0
  48. data/dist/ice/cpp/include/generated/Ice/Endpoint.h +979 -0
  49. data/dist/ice/cpp/include/generated/Ice/EndpointF.h +166 -0
  50. data/dist/ice/cpp/include/generated/Ice/EndpointTypes.h +118 -0
  51. data/dist/ice/cpp/include/generated/Ice/FacetMap.h +80 -0
  52. data/dist/ice/cpp/include/generated/Ice/Identity.h +264 -0
  53. data/dist/ice/cpp/include/generated/Ice/ImplicitContext.h +284 -0
  54. data/dist/ice/cpp/include/generated/Ice/ImplicitContextF.h +101 -0
  55. data/dist/ice/cpp/include/generated/Ice/Instrumentation.h +1203 -0
  56. data/dist/ice/cpp/include/generated/Ice/InstrumentationF.h +128 -0
  57. data/dist/ice/cpp/include/generated/Ice/LocalException.h +7437 -0
  58. data/dist/ice/cpp/include/generated/Ice/Locator.h +3898 -0
  59. data/dist/ice/cpp/include/generated/Ice/LocatorF.h +147 -0
  60. data/dist/ice/cpp/include/generated/Ice/Logger.h +237 -0
  61. data/dist/ice/cpp/include/generated/Ice/LoggerF.h +101 -0
  62. data/dist/ice/cpp/include/generated/Ice/Metrics.h +4769 -0
  63. data/dist/ice/cpp/include/generated/Ice/ObjectAdapter.h +1181 -0
  64. data/dist/ice/cpp/include/generated/Ice/ObjectAdapterF.h +101 -0
  65. data/dist/ice/cpp/include/generated/Ice/ObjectFactory.h +203 -0
  66. data/dist/ice/cpp/include/generated/Ice/Plugin.h +318 -0
  67. data/dist/ice/cpp/include/generated/Ice/PluginF.h +110 -0
  68. data/dist/ice/cpp/include/generated/Ice/Process.h +977 -0
  69. data/dist/ice/cpp/include/generated/Ice/ProcessF.h +125 -0
  70. data/dist/ice/cpp/include/generated/Ice/Properties.h +452 -0
  71. data/dist/ice/cpp/include/generated/Ice/PropertiesAdmin.h +1366 -0
  72. data/dist/ice/cpp/include/generated/Ice/PropertiesF.h +134 -0
  73. data/dist/ice/cpp/include/generated/Ice/RemoteLogger.h +2707 -0
  74. data/dist/ice/cpp/include/generated/Ice/Router.h +1850 -0
  75. data/dist/ice/cpp/include/generated/Ice/RouterF.h +125 -0
  76. data/dist/ice/cpp/include/generated/Ice/ServantLocator.h +305 -0
  77. data/dist/ice/cpp/include/generated/Ice/ServantLocatorF.h +101 -0
  78. data/dist/ice/cpp/include/generated/Ice/SliceChecksumDict.h +84 -0
  79. data/dist/ice/cpp/include/generated/Ice/ValueFactory.h +330 -0
  80. data/dist/ice/cpp/include/generated/Ice/Version.h +357 -0
  81. data/dist/ice/cpp/include/generated/IceBox/IceBox.h +3269 -0
  82. data/dist/ice/cpp/include/generated/IceGrid/Admin.h +33773 -0
  83. data/dist/ice/cpp/include/generated/IceGrid/Descriptor.h +5254 -0
  84. data/dist/ice/cpp/include/generated/IceGrid/Exception.h +2834 -0
  85. data/dist/ice/cpp/include/generated/IceGrid/FileParser.h +824 -0
  86. data/dist/ice/cpp/include/generated/IceGrid/PluginFacade.h +635 -0
  87. data/dist/ice/cpp/include/generated/IceGrid/Registry.h +5089 -0
  88. data/dist/ice/cpp/include/generated/IceGrid/Session.h +2240 -0
  89. data/dist/ice/cpp/include/generated/IceGrid/UserAccountMapper.h +800 -0
  90. data/dist/ice/cpp/include/generated/IcePatch2/FileInfo.h +325 -0
  91. data/dist/ice/cpp/include/generated/IcePatch2/FileServer.h +2891 -0
  92. data/dist/ice/cpp/include/generated/IceSSL/ConnectionInfo.h +228 -0
  93. data/dist/ice/cpp/include/generated/IceSSL/ConnectionInfoF.h +101 -0
  94. data/dist/ice/cpp/include/generated/IceSSL/EndpointInfo.h +186 -0
  95. data/dist/ice/cpp/include/generated/IceStorm/IceStorm.h +6627 -0
  96. data/dist/ice/cpp/include/generated/IceStorm/Metrics.h +665 -0
  97. data/dist/ice/cpp/src/Ice/Acceptor.h +37 -0
  98. data/dist/ice/cpp/src/Ice/Application.cpp +661 -0
  99. data/dist/ice/cpp/src/Ice/ConnectionFactory.cpp +1972 -0
  100. data/dist/ice/cpp/src/Ice/ConnectionFactory.h +264 -0
  101. data/dist/ice/cpp/src/Ice/ConnectionI.cpp +3670 -0
  102. data/dist/ice/cpp/src/Ice/ConnectionI.h +389 -0
  103. data/dist/ice/cpp/src/Ice/CountDownLatch.cpp +171 -0
  104. data/dist/ice/cpp/src/Ice/DLLMain.cpp +50 -0
  105. data/dist/ice/cpp/src/Ice/DefaultsAndOverrides.cpp +159 -0
  106. data/dist/ice/cpp/src/Ice/DynamicLibrary.cpp +284 -0
  107. data/dist/ice/cpp/src/Ice/EndpointFactory.cpp +189 -0
  108. data/dist/ice/cpp/src/Ice/EndpointI.cpp +98 -0
  109. data/dist/ice/cpp/src/Ice/EventHandler.cpp +32 -0
  110. data/dist/ice/cpp/src/Ice/EventHandler.h +81 -0
  111. data/dist/ice/cpp/src/Ice/Exception.cpp +818 -0
  112. data/dist/ice/cpp/src/Ice/IPEndpointI.cpp +710 -0
  113. data/dist/ice/cpp/src/Ice/IPEndpointI.h +152 -0
  114. data/dist/ice/cpp/src/Ice/InputStream.cpp +2741 -0
  115. data/dist/ice/cpp/src/Ice/Instance.cpp +1967 -0
  116. data/dist/ice/cpp/src/Ice/LoggerI.cpp +259 -0
  117. data/dist/ice/cpp/src/Ice/MetricsAdminI.cpp +694 -0
  118. data/dist/ice/cpp/src/Ice/Network.cpp +2249 -0
  119. data/dist/ice/cpp/src/Ice/Network.h +289 -0
  120. data/dist/ice/cpp/src/Ice/NetworkF.h +19 -0
  121. data/dist/ice/cpp/src/Ice/NetworkProxy.cpp +311 -0
  122. data/dist/ice/cpp/src/Ice/ObjectAdapterI.cpp +1530 -0
  123. data/dist/ice/cpp/src/Ice/OutgoingAsync.cpp +1322 -0
  124. data/dist/ice/cpp/src/Ice/PluginManagerI.cpp +503 -0
  125. data/dist/ice/cpp/src/Ice/PropertiesI.cpp +739 -0
  126. data/dist/ice/cpp/src/Ice/PropertyNames.cpp +1428 -0
  127. data/dist/ice/cpp/src/Ice/PropertyNames.h +78 -0
  128. data/dist/ice/cpp/src/Ice/Proxy.cpp +1604 -0
  129. data/dist/ice/cpp/src/Ice/SHA1.cpp +169 -0
  130. data/dist/ice/cpp/src/Ice/Selector.cpp +1535 -0
  131. data/dist/ice/cpp/src/Ice/Selector.h +292 -0
  132. data/dist/ice/cpp/src/Ice/Service.cpp +1883 -0
  133. data/dist/ice/cpp/src/Ice/StreamSocket.cpp +519 -0
  134. data/dist/ice/cpp/src/Ice/StreamSocket.h +85 -0
  135. data/dist/ice/cpp/src/Ice/TcpAcceptor.cpp +234 -0
  136. data/dist/ice/cpp/src/Ice/TcpAcceptor.h +61 -0
  137. data/dist/ice/cpp/src/Ice/TcpTransceiver.cpp +135 -0
  138. data/dist/ice/cpp/src/Ice/TcpTransceiver.h +58 -0
  139. data/dist/ice/cpp/src/Ice/Thread.cpp +569 -0
  140. data/dist/ice/cpp/src/Ice/ThreadPool.cpp +1292 -0
  141. data/dist/ice/cpp/src/Ice/ThreadPool.h +393 -0
  142. data/dist/ice/cpp/src/Ice/Transceiver.h +49 -0
  143. data/dist/ice/cpp/src/Ice/UdpConnector.cpp +131 -0
  144. data/dist/ice/cpp/src/Ice/UdpTransceiver.cpp +806 -0
  145. data/dist/ice/cpp/src/Ice/UdpTransceiver.h +96 -0
  146. data/dist/ice/cpp/src/Ice/WSAcceptor.cpp +92 -0
  147. data/dist/ice/cpp/src/Ice/WSAcceptor.h +52 -0
  148. data/dist/ice/cpp/src/Ice/WSTransceiver.cpp +1704 -0
  149. data/dist/ice/cpp/src/Ice/WSTransceiver.h +141 -0
  150. data/dist/ice/cpp/src/Ice/generated/BuiltinSequences.cpp +49 -0
  151. data/dist/ice/cpp/src/Ice/generated/Communicator.cpp +79 -0
  152. data/dist/ice/cpp/src/Ice/generated/CommunicatorF.cpp +61 -0
  153. data/dist/ice/cpp/src/Ice/generated/Connection.cpp +155 -0
  154. data/dist/ice/cpp/src/Ice/generated/ConnectionF.cpp +61 -0
  155. data/dist/ice/cpp/src/Ice/generated/Current.cpp +62 -0
  156. data/dist/ice/cpp/src/Ice/generated/Endpoint.cpp +147 -0
  157. data/dist/ice/cpp/src/Ice/generated/EndpointF.cpp +61 -0
  158. data/dist/ice/cpp/src/Ice/generated/EndpointTypes.cpp +51 -0
  159. data/dist/ice/cpp/src/Ice/generated/FacetMap.cpp +49 -0
  160. data/dist/ice/cpp/src/Ice/generated/Identity.cpp +57 -0
  161. data/dist/ice/cpp/src/Ice/generated/ImplicitContext.cpp +75 -0
  162. data/dist/ice/cpp/src/Ice/generated/ImplicitContextF.cpp +61 -0
  163. data/dist/ice/cpp/src/Ice/generated/Instrumentation.cpp +188 -0
  164. data/dist/ice/cpp/src/Ice/generated/InstrumentationF.cpp +66 -0
  165. data/dist/ice/cpp/src/Ice/generated/LocalException.cpp +3262 -0
  166. data/dist/ice/cpp/src/Ice/generated/Locator.cpp +2042 -0
  167. data/dist/ice/cpp/src/Ice/generated/LocatorF.cpp +63 -0
  168. data/dist/ice/cpp/src/Ice/generated/Logger.cpp +73 -0
  169. data/dist/ice/cpp/src/Ice/generated/LoggerF.cpp +61 -0
  170. data/dist/ice/cpp/src/Ice/generated/Metrics.cpp +2352 -0
  171. data/dist/ice/cpp/src/Ice/generated/ObjectAdapter.cpp +79 -0
  172. data/dist/ice/cpp/src/Ice/generated/ObjectAdapterF.cpp +61 -0
  173. data/dist/ice/cpp/src/Ice/generated/ObjectFactory.cpp +75 -0
  174. data/dist/ice/cpp/src/Ice/generated/Plugin.cpp +87 -0
  175. data/dist/ice/cpp/src/Ice/generated/PluginF.cpp +61 -0
  176. data/dist/ice/cpp/src/Ice/generated/Process.cpp +471 -0
  177. data/dist/ice/cpp/src/Ice/generated/ProcessF.cpp +63 -0
  178. data/dist/ice/cpp/src/Ice/generated/Properties.cpp +78 -0
  179. data/dist/ice/cpp/src/Ice/generated/PropertiesAdmin.cpp +603 -0
  180. data/dist/ice/cpp/src/Ice/generated/PropertiesF.cpp +63 -0
  181. data/dist/ice/cpp/src/Ice/generated/RemoteLogger.cpp +1171 -0
  182. data/dist/ice/cpp/src/Ice/generated/Router.cpp +977 -0
  183. data/dist/ice/cpp/src/Ice/generated/RouterF.cpp +63 -0
  184. data/dist/ice/cpp/src/Ice/generated/ServantLocator.cpp +75 -0
  185. data/dist/ice/cpp/src/Ice/generated/ServantLocatorF.cpp +61 -0
  186. data/dist/ice/cpp/src/Ice/generated/SliceChecksumDict.cpp +49 -0
  187. data/dist/ice/cpp/src/Ice/generated/ValueFactory.cpp +83 -0
  188. data/dist/ice/cpp/src/Ice/generated/Version.cpp +57 -0
  189. data/dist/ice/cpp/src/Ice/ios/StreamAcceptor.cpp +154 -0
  190. data/dist/ice/cpp/src/Ice/ios/StreamAcceptor.h +49 -0
  191. data/dist/ice/cpp/src/Ice/ios/StreamConnector.cpp +146 -0
  192. data/dist/ice/cpp/src/Ice/ios/StreamConnector.h +52 -0
  193. data/dist/ice/cpp/src/Ice/ios/StreamEndpointI.cpp +477 -0
  194. data/dist/ice/cpp/src/Ice/ios/StreamEndpointI.h +156 -0
  195. data/dist/ice/cpp/src/Ice/ios/StreamTransceiver.cpp +570 -0
  196. data/dist/ice/cpp/src/Ice/ios/StreamTransceiver.h +93 -0
  197. data/dist/ice/cpp/src/IceDiscovery/generated/IceDiscovery/IceDiscovery.h +1889 -0
  198. data/dist/ice/cpp/src/IceDiscovery/generated/IceDiscovery.cpp +915 -0
  199. data/dist/ice/cpp/src/IceLocatorDiscovery/generated/IceLocatorDiscovery/IceLocatorDiscovery.h +1197 -0
  200. data/dist/ice/cpp/src/IceLocatorDiscovery/generated/IceLocatorDiscovery.cpp +730 -0
  201. data/dist/ice/cpp/src/IceSSL/AcceptorI.cpp +105 -0
  202. data/dist/ice/cpp/src/IceSSL/AcceptorI.h +52 -0
  203. data/dist/ice/cpp/src/IceSSL/OpenSSLTransceiverI.cpp +1092 -0
  204. data/dist/ice/cpp/src/IceSSL/PluginI.cpp +246 -0
  205. data/dist/ice/cpp/src/IceSSL/SecureTransportTransceiverI.cpp +719 -0
  206. data/dist/ice/cpp/src/IceSSL/SecureTransportUtil.cpp +868 -0
  207. data/dist/ice/cpp/src/IceSSL/Util.cpp +192 -0
  208. data/dist/ice/cpp/src/IceSSL/generated/ConnectionInfo.cpp +75 -0
  209. data/dist/ice/cpp/src/IceSSL/generated/ConnectionInfoF.cpp +61 -0
  210. data/dist/ice/cpp/src/IceSSL/generated/EndpointInfo.cpp +75 -0
  211. data/dist/ice/cpp/src/IceUtil/ConsoleUtil.cpp +157 -0
  212. data/dist/ice/cpp/src/IceUtil/FileUtil.cpp +471 -0
  213. data/dist/ice/cpp/src/IceUtil/RecMutex.cpp +238 -0
  214. data/dist/ice/cpp/src/IceUtil/StringConverter.cpp +690 -0
  215. data/dist/ice/cpp/src/IceUtil/StringUtil.cpp +1135 -0
  216. data/dist/ice/cpp/src/IceUtil/UUID.cpp +165 -0
  217. data/dist/ice/cpp/src/IceUtil/UtilException.cpp +839 -0
  218. data/dist/ice/cpp/src/Slice/JavaUtil.cpp +5183 -0
  219. data/dist/ice/cpp/src/Slice/JavaUtil.h +407 -0
  220. data/dist/ice/cpp/src/slice2rb/Main.cpp +35 -0
  221. data/dist/ice/mcpp/directive.c +1407 -0
  222. data/dist/ice/mcpp/internal.H +530 -0
  223. data/dist/ice/mcpp/mcpp_main.c +792 -0
  224. data/dist/ice/mcpp/support.c +1985 -0
  225. data/dist/ice/mcpp/system.c +2741 -0
  226. data/dist/ice/slice/Ice/Connection.ice +516 -0
  227. data/dist/ice/slice/Ice/Current.ice +170 -0
  228. data/dist/ice/slice/Ice/Locator.ice +239 -0
  229. data/dist/ice/slice/Ice/Metrics.ice +436 -0
  230. data/dist/ice/slice/Ice/ObjectAdapter.ice +710 -0
  231. data/dist/ice/slice/Ice/Properties.ice +244 -0
  232. data/dist/ice/slice/Ice/Router.ice +103 -0
  233. data/dist/ice/slice/IceGrid/PluginFacade.ice +329 -0
  234. data/dist/ice/slice/IceStorm/IceStorm.ice +414 -0
  235. data/dist/lib/Glacier2/Metrics.rb +56 -0
  236. data/dist/lib/Glacier2/PermissionsVerifier.rb +93 -0
  237. data/dist/lib/Glacier2/PermissionsVerifierF.rb +30 -0
  238. data/dist/lib/Glacier2/Router.rb +95 -0
  239. data/dist/lib/Glacier2/RouterF.rb +25 -0
  240. data/dist/lib/Glacier2/SSLInfo.rb +72 -0
  241. data/dist/lib/Glacier2/Session.rb +247 -0
  242. data/dist/lib/Ice/BuiltinSequences.rb +60 -0
  243. data/dist/lib/Ice/Communicator.rb +87 -0
  244. data/dist/lib/Ice/CommunicatorF.rb +24 -0
  245. data/dist/lib/Ice/Connection.rb +413 -0
  246. data/dist/lib/Ice/ConnectionF.rb +32 -0
  247. data/dist/lib/Ice/Current.rb +141 -0
  248. data/dist/lib/Ice/Endpoint.rb +187 -0
  249. data/dist/lib/Ice/EndpointF.rb +48 -0
  250. data/dist/lib/Ice/EndpointTypes.rb +69 -0
  251. data/dist/lib/Ice/FacetMap.rb +24 -0
  252. data/dist/lib/Ice/Identity.rb +63 -0
  253. data/dist/lib/Ice/ImplicitContext.rb +26 -0
  254. data/dist/lib/Ice/ImplicitContextF.rb +24 -0
  255. data/dist/lib/Ice/Instrumentation.rb +169 -0
  256. data/dist/lib/Ice/InstrumentationF.rb +31 -0
  257. data/dist/lib/Ice/LocalException.rb +1031 -0
  258. data/dist/lib/Ice/Locator.rb +196 -0
  259. data/dist/lib/Ice/LocatorF.rb +30 -0
  260. data/dist/lib/Ice/Logger.rb +24 -0
  261. data/dist/lib/Ice/LoggerF.rb +24 -0
  262. data/dist/lib/Ice/Metrics.rb +337 -0
  263. data/dist/lib/Ice/ObjectAdapter.rb +29 -0
  264. data/dist/lib/Ice/ObjectAdapterF.rb +24 -0
  265. data/dist/lib/Ice/ObjectFactory.rb +24 -0
  266. data/dist/lib/Ice/Plugin.rb +30 -0
  267. data/dist/lib/Ice/PluginF.rb +28 -0
  268. data/dist/lib/Ice/Process.rb +53 -0
  269. data/dist/lib/Ice/ProcessF.rb +25 -0
  270. data/dist/lib/Ice/Properties.rb +25 -0
  271. data/dist/lib/Ice/PropertiesAdmin.rb +63 -0
  272. data/dist/lib/Ice/PropertiesF.rb +29 -0
  273. data/dist/lib/Ice/RemoteLogger.rb +207 -0
  274. data/dist/lib/Ice/Router.rb +87 -0
  275. data/dist/lib/Ice/RouterF.rb +25 -0
  276. data/dist/lib/Ice/ServantLocator.rb +26 -0
  277. data/dist/lib/Ice/ServantLocatorF.rb +24 -0
  278. data/dist/lib/Ice/SliceChecksumDict.rb +24 -0
  279. data/dist/lib/Ice/ValueFactory.rb +28 -0
  280. data/dist/lib/Ice/Version.rb +90 -0
  281. data/dist/lib/IceBox/IceBox.rb +164 -0
  282. data/dist/lib/IceGrid/Admin.rb +1196 -0
  283. data/dist/lib/IceGrid/Descriptor.rb +1034 -0
  284. data/dist/lib/IceGrid/Exception.rb +376 -0
  285. data/dist/lib/IceGrid/FileParser.rb +65 -0
  286. data/dist/lib/IceGrid/PluginFacade.rb +35 -0
  287. data/dist/lib/IceGrid/Registry.rb +209 -0
  288. data/dist/lib/IceGrid/Session.rb +71 -0
  289. data/dist/lib/IceGrid/UserAccountMapper.rb +61 -0
  290. data/dist/lib/IcePatch2/FileInfo.rb +115 -0
  291. data/dist/lib/IcePatch2/FileServer.rb +123 -0
  292. data/dist/lib/IceStorm/IceStorm.rb +332 -0
  293. data/dist/lib/IceStorm/Metrics.rb +73 -0
  294. data/extconf.rb +91 -0
  295. data/ice.gemspec +21 -16
  296. metadata +715 -711
  297. data/ICE_LICENSE +0 -48
  298. data/LICENSE +0 -340
  299. data/MCPP_LICENSE +0 -29
  300. data/ext/Connection.cpp +0 -532
  301. data/ext/Endpoint.cpp +0 -340
  302. data/ext/ImplicitContext.cpp +0 -144
  303. data/ext/Logger.cpp +0 -147
  304. data/ext/Operation.cpp +0 -661
  305. data/ext/Properties.cpp +0 -365
  306. data/ext/Types.cpp +0 -3325
  307. data/ext/Types.h +0 -595
  308. data/ext/ValueFactoryManager.cpp +0 -441
  309. data/ext/extconf.rb +0 -97
  310. data/ext/ice/cpp/include/Ice/Config.h +0 -78
  311. data/ext/ice/cpp/include/Ice/ConsoleUtil.h +0 -23
  312. data/ext/ice/cpp/include/Ice/ExceptionHelpers.h +0 -74
  313. data/ext/ice/cpp/include/Ice/Ice.h +0 -55
  314. data/ext/ice/cpp/include/Ice/Initialize.h +0 -957
  315. data/ext/ice/cpp/include/Ice/MetricsObserverI.h +0 -669
  316. data/ext/ice/cpp/include/Ice/OutgoingAsync.h +0 -856
  317. data/ext/ice/cpp/include/Ice/Proxy.h +0 -5154
  318. data/ext/ice/cpp/include/Ice/SHA1.h +0 -42
  319. data/ext/ice/cpp/include/Ice/UserExceptionFactory.h +0 -88
  320. data/ext/ice/cpp/include/IceSSL/IceSSL.h +0 -28
  321. data/ext/ice/cpp/include/IceSSL/UWP.h +0 -62
  322. data/ext/ice/cpp/include/IceUtil/Cond.h +0 -317
  323. data/ext/ice/cpp/include/IceUtil/Config.h +0 -424
  324. data/ext/ice/cpp/include/IceUtil/ConsoleUtil.h +0 -92
  325. data/ext/ice/cpp/include/IceUtil/CtrlCHandler.h +0 -92
  326. data/ext/ice/cpp/include/IceUtil/FileUtil.h +0 -143
  327. data/ext/ice/cpp/include/IceUtil/IceUtil.h +0 -40
  328. data/ext/ice/cpp/include/IceUtil/InputUtil.h +0 -42
  329. data/ext/ice/cpp/include/IceUtil/Mutex.h +0 -353
  330. data/ext/ice/cpp/include/IceUtil/ResourceConfig.h +0 -53
  331. data/ext/ice/cpp/include/IceUtil/Thread.h +0 -174
  332. data/ext/ice/cpp/include/IceUtil/Timer.h +0 -143
  333. data/ext/ice/cpp/include/generated/Ice/BuiltinSequences.h +0 -170
  334. data/ext/ice/cpp/include/generated/Ice/Communicator.h +0 -1162
  335. data/ext/ice/cpp/include/generated/Ice/CommunicatorF.h +0 -101
  336. data/ext/ice/cpp/include/generated/Ice/Connection.h +0 -1703
  337. data/ext/ice/cpp/include/generated/Ice/ConnectionF.h +0 -119
  338. data/ext/ice/cpp/include/generated/Ice/Current.h +0 -322
  339. data/ext/ice/cpp/include/generated/Ice/Endpoint.h +0 -979
  340. data/ext/ice/cpp/include/generated/Ice/EndpointF.h +0 -166
  341. data/ext/ice/cpp/include/generated/Ice/EndpointTypes.h +0 -118
  342. data/ext/ice/cpp/include/generated/Ice/FacetMap.h +0 -80
  343. data/ext/ice/cpp/include/generated/Ice/Identity.h +0 -264
  344. data/ext/ice/cpp/include/generated/Ice/ImplicitContext.h +0 -284
  345. data/ext/ice/cpp/include/generated/Ice/ImplicitContextF.h +0 -101
  346. data/ext/ice/cpp/include/generated/Ice/Instrumentation.h +0 -1203
  347. data/ext/ice/cpp/include/generated/Ice/InstrumentationF.h +0 -128
  348. data/ext/ice/cpp/include/generated/Ice/LocalException.h +0 -7437
  349. data/ext/ice/cpp/include/generated/Ice/Locator.h +0 -3898
  350. data/ext/ice/cpp/include/generated/Ice/LocatorF.h +0 -147
  351. data/ext/ice/cpp/include/generated/Ice/Logger.h +0 -237
  352. data/ext/ice/cpp/include/generated/Ice/LoggerF.h +0 -101
  353. data/ext/ice/cpp/include/generated/Ice/Metrics.h +0 -4769
  354. data/ext/ice/cpp/include/generated/Ice/ObjectAdapter.h +0 -1181
  355. data/ext/ice/cpp/include/generated/Ice/ObjectAdapterF.h +0 -101
  356. data/ext/ice/cpp/include/generated/Ice/ObjectFactory.h +0 -203
  357. data/ext/ice/cpp/include/generated/Ice/Plugin.h +0 -318
  358. data/ext/ice/cpp/include/generated/Ice/PluginF.h +0 -110
  359. data/ext/ice/cpp/include/generated/Ice/Process.h +0 -977
  360. data/ext/ice/cpp/include/generated/Ice/ProcessF.h +0 -125
  361. data/ext/ice/cpp/include/generated/Ice/Properties.h +0 -452
  362. data/ext/ice/cpp/include/generated/Ice/PropertiesAdmin.h +0 -1366
  363. data/ext/ice/cpp/include/generated/Ice/PropertiesF.h +0 -134
  364. data/ext/ice/cpp/include/generated/Ice/RemoteLogger.h +0 -2707
  365. data/ext/ice/cpp/include/generated/Ice/Router.h +0 -1850
  366. data/ext/ice/cpp/include/generated/Ice/RouterF.h +0 -125
  367. data/ext/ice/cpp/include/generated/Ice/ServantLocator.h +0 -305
  368. data/ext/ice/cpp/include/generated/Ice/ServantLocatorF.h +0 -101
  369. data/ext/ice/cpp/include/generated/Ice/SliceChecksumDict.h +0 -84
  370. data/ext/ice/cpp/include/generated/Ice/ValueFactory.h +0 -330
  371. data/ext/ice/cpp/include/generated/Ice/Version.h +0 -357
  372. data/ext/ice/cpp/include/generated/IceSSL/ConnectionInfo.h +0 -228
  373. data/ext/ice/cpp/include/generated/IceSSL/ConnectionInfoF.h +0 -101
  374. data/ext/ice/cpp/include/generated/IceSSL/EndpointInfo.h +0 -186
  375. data/ext/ice/cpp/src/Ice/Acceptor.h +0 -37
  376. data/ext/ice/cpp/src/Ice/BuiltinSequences.cpp +0 -49
  377. data/ext/ice/cpp/src/Ice/Communicator.cpp +0 -79
  378. data/ext/ice/cpp/src/Ice/CommunicatorF.cpp +0 -61
  379. data/ext/ice/cpp/src/Ice/Connection.cpp +0 -155
  380. data/ext/ice/cpp/src/Ice/ConnectionF.cpp +0 -61
  381. data/ext/ice/cpp/src/Ice/ConnectionFactory.cpp +0 -1972
  382. data/ext/ice/cpp/src/Ice/ConnectionFactory.h +0 -264
  383. data/ext/ice/cpp/src/Ice/ConnectionI.cpp +0 -3670
  384. data/ext/ice/cpp/src/Ice/ConnectionI.h +0 -391
  385. data/ext/ice/cpp/src/Ice/CountDownLatch.cpp +0 -179
  386. data/ext/ice/cpp/src/Ice/Current.cpp +0 -62
  387. data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.cpp +0 -161
  388. data/ext/ice/cpp/src/Ice/DynamicLibrary.cpp +0 -291
  389. data/ext/ice/cpp/src/Ice/Endpoint.cpp +0 -147
  390. data/ext/ice/cpp/src/Ice/EndpointF.cpp +0 -61
  391. data/ext/ice/cpp/src/Ice/EndpointFactory.cpp +0 -189
  392. data/ext/ice/cpp/src/Ice/EndpointI.cpp +0 -98
  393. data/ext/ice/cpp/src/Ice/EndpointTypes.cpp +0 -51
  394. data/ext/ice/cpp/src/Ice/EventHandler.cpp +0 -32
  395. data/ext/ice/cpp/src/Ice/EventHandler.h +0 -81
  396. data/ext/ice/cpp/src/Ice/Exception.cpp +0 -845
  397. data/ext/ice/cpp/src/Ice/FacetMap.cpp +0 -49
  398. data/ext/ice/cpp/src/Ice/IPEndpointI.cpp +0 -756
  399. data/ext/ice/cpp/src/Ice/IPEndpointI.h +0 -162
  400. data/ext/ice/cpp/src/Ice/Identity.cpp +0 -57
  401. data/ext/ice/cpp/src/Ice/ImplicitContext.cpp +0 -75
  402. data/ext/ice/cpp/src/Ice/ImplicitContextF.cpp +0 -61
  403. data/ext/ice/cpp/src/Ice/InputStream.cpp +0 -2741
  404. data/ext/ice/cpp/src/Ice/Instance.cpp +0 -1971
  405. data/ext/ice/cpp/src/Ice/Instrumentation.cpp +0 -188
  406. data/ext/ice/cpp/src/Ice/InstrumentationF.cpp +0 -66
  407. data/ext/ice/cpp/src/Ice/LocalException.cpp +0 -3262
  408. data/ext/ice/cpp/src/Ice/Locator.cpp +0 -2042
  409. data/ext/ice/cpp/src/Ice/LocatorF.cpp +0 -63
  410. data/ext/ice/cpp/src/Ice/Logger.cpp +0 -73
  411. data/ext/ice/cpp/src/Ice/LoggerF.cpp +0 -61
  412. data/ext/ice/cpp/src/Ice/LoggerI.cpp +0 -261
  413. data/ext/ice/cpp/src/Ice/Metrics.cpp +0 -2352
  414. data/ext/ice/cpp/src/Ice/MetricsAdminI.cpp +0 -694
  415. data/ext/ice/cpp/src/Ice/Network.cpp +0 -3075
  416. data/ext/ice/cpp/src/Ice/Network.h +0 -371
  417. data/ext/ice/cpp/src/Ice/NetworkF.h +0 -23
  418. data/ext/ice/cpp/src/Ice/NetworkProxy.cpp +0 -324
  419. data/ext/ice/cpp/src/Ice/ObjectAdapter.cpp +0 -79
  420. data/ext/ice/cpp/src/Ice/ObjectAdapterF.cpp +0 -61
  421. data/ext/ice/cpp/src/Ice/ObjectAdapterI.cpp +0 -1530
  422. data/ext/ice/cpp/src/Ice/ObjectFactory.cpp +0 -75
  423. data/ext/ice/cpp/src/Ice/OutgoingAsync.cpp +0 -1322
  424. data/ext/ice/cpp/src/Ice/Plugin.cpp +0 -87
  425. data/ext/ice/cpp/src/Ice/PluginF.cpp +0 -61
  426. data/ext/ice/cpp/src/Ice/PluginManagerI.cpp +0 -503
  427. data/ext/ice/cpp/src/Ice/Process.cpp +0 -471
  428. data/ext/ice/cpp/src/Ice/ProcessF.cpp +0 -63
  429. data/ext/ice/cpp/src/Ice/Properties.cpp +0 -78
  430. data/ext/ice/cpp/src/Ice/PropertiesAdmin.cpp +0 -603
  431. data/ext/ice/cpp/src/Ice/PropertiesF.cpp +0 -63
  432. data/ext/ice/cpp/src/Ice/PropertiesI.cpp +0 -747
  433. data/ext/ice/cpp/src/Ice/PropertyNames.cpp +0 -1429
  434. data/ext/ice/cpp/src/Ice/PropertyNames.h +0 -78
  435. data/ext/ice/cpp/src/Ice/Proxy.cpp +0 -1601
  436. data/ext/ice/cpp/src/Ice/RemoteLogger.cpp +0 -1171
  437. data/ext/ice/cpp/src/Ice/Router.cpp +0 -977
  438. data/ext/ice/cpp/src/Ice/RouterF.cpp +0 -63
  439. data/ext/ice/cpp/src/Ice/SHA1.cpp +0 -185
  440. data/ext/ice/cpp/src/Ice/Selector.cpp +0 -1537
  441. data/ext/ice/cpp/src/Ice/Selector.h +0 -308
  442. data/ext/ice/cpp/src/Ice/ServantLocator.cpp +0 -75
  443. data/ext/ice/cpp/src/Ice/ServantLocatorF.cpp +0 -61
  444. data/ext/ice/cpp/src/Ice/SliceChecksumDict.cpp +0 -49
  445. data/ext/ice/cpp/src/Ice/StreamSocket.cpp +0 -682
  446. data/ext/ice/cpp/src/Ice/StreamSocket.h +0 -92
  447. data/ext/ice/cpp/src/Ice/TcpAcceptor.cpp +0 -355
  448. data/ext/ice/cpp/src/Ice/TcpAcceptor.h +0 -69
  449. data/ext/ice/cpp/src/Ice/TcpTransceiver.cpp +0 -135
  450. data/ext/ice/cpp/src/Ice/TcpTransceiver.h +0 -58
  451. data/ext/ice/cpp/src/Ice/Thread.cpp +0 -811
  452. data/ext/ice/cpp/src/Ice/ThreadPool.cpp +0 -1328
  453. data/ext/ice/cpp/src/Ice/ThreadPool.h +0 -393
  454. data/ext/ice/cpp/src/Ice/Transceiver.h +0 -49
  455. data/ext/ice/cpp/src/Ice/UdpConnector.cpp +0 -136
  456. data/ext/ice/cpp/src/Ice/UdpTransceiver.cpp +0 -1153
  457. data/ext/ice/cpp/src/Ice/UdpTransceiver.h +0 -117
  458. data/ext/ice/cpp/src/Ice/ValueFactory.cpp +0 -83
  459. data/ext/ice/cpp/src/Ice/Version.cpp +0 -57
  460. data/ext/ice/cpp/src/Ice/WSAcceptor.cpp +0 -92
  461. data/ext/ice/cpp/src/Ice/WSAcceptor.h +0 -52
  462. data/ext/ice/cpp/src/Ice/WSTransceiver.cpp +0 -1747
  463. data/ext/ice/cpp/src/Ice/WSTransceiver.h +0 -141
  464. data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.cpp +0 -915
  465. data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.h +0 -1889
  466. data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.cpp +0 -730
  467. data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.h +0 -1197
  468. data/ext/ice/cpp/src/IceSSL/AcceptorI.cpp +0 -105
  469. data/ext/ice/cpp/src/IceSSL/AcceptorI.h +0 -52
  470. data/ext/ice/cpp/src/IceSSL/ConnectionInfo.cpp +0 -75
  471. data/ext/ice/cpp/src/IceSSL/ConnectionInfoF.cpp +0 -61
  472. data/ext/ice/cpp/src/IceSSL/EndpointInfo.cpp +0 -75
  473. data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.cpp +0 -1092
  474. data/ext/ice/cpp/src/IceSSL/PluginI.cpp +0 -246
  475. data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.cpp +0 -719
  476. data/ext/ice/cpp/src/IceSSL/SecureTransportUtil.cpp +0 -868
  477. data/ext/ice/cpp/src/IceSSL/UWPCertificateI.cpp +0 -266
  478. data/ext/ice/cpp/src/IceSSL/UWPEngine.cpp +0 -338
  479. data/ext/ice/cpp/src/IceSSL/UWPEngine.h +0 -41
  480. data/ext/ice/cpp/src/IceSSL/UWPEngineF.h +0 -26
  481. data/ext/ice/cpp/src/IceSSL/UWPPluginI.cpp +0 -89
  482. data/ext/ice/cpp/src/IceSSL/UWPTransceiverI.cpp +0 -383
  483. data/ext/ice/cpp/src/IceSSL/UWPTransceiverI.h +0 -71
  484. data/ext/ice/cpp/src/IceSSL/Util.cpp +0 -192
  485. data/ext/ice/cpp/src/IceUtil/ConsoleUtil.cpp +0 -157
  486. data/ext/ice/cpp/src/IceUtil/FileUtil.cpp +0 -484
  487. data/ext/ice/cpp/src/IceUtil/RecMutex.cpp +0 -242
  488. data/ext/ice/cpp/src/IceUtil/StringConverter.cpp +0 -690
  489. data/ext/ice/cpp/src/IceUtil/StringUtil.cpp +0 -1180
  490. data/ext/ice/cpp/src/IceUtil/UUID.cpp +0 -169
  491. data/ext/ice/cpp/src/IceUtil/UtilException.cpp +0 -839
  492. data/ext/ice/cpp/src/Slice/JavaUtil.cpp +0 -5154
  493. data/ext/ice/cpp/src/Slice/JavaUtil.h +0 -398
  494. data/ext/ice/mcpp/CMakeLists.txt +0 -80
  495. data/ext/ice/mcpp/LICENSE +0 -29
  496. data/ext/ice/mcpp/Makefile +0 -63
  497. data/ext/ice/mcpp/README.md +0 -32
  498. data/ext/ice/mcpp/directive.c +0 -1404
  499. data/ext/ice/mcpp/internal.H +0 -530
  500. data/ext/ice/mcpp/main.c +0 -792
  501. data/ext/ice/mcpp/mcpp.gyp +0 -88
  502. data/ext/ice/mcpp/support.c +0 -1985
  503. data/ext/ice/mcpp/system.c +0 -2741
  504. data/lib/Glacier2/Metrics.rb +0 -56
  505. data/lib/Glacier2/PermissionsVerifier.rb +0 -93
  506. data/lib/Glacier2/PermissionsVerifierF.rb +0 -30
  507. data/lib/Glacier2/Router.rb +0 -95
  508. data/lib/Glacier2/RouterF.rb +0 -25
  509. data/lib/Glacier2/SSLInfo.rb +0 -72
  510. data/lib/Glacier2/Session.rb +0 -247
  511. data/lib/Ice/BuiltinSequences.rb +0 -60
  512. data/lib/Ice/Communicator.rb +0 -87
  513. data/lib/Ice/CommunicatorF.rb +0 -24
  514. data/lib/Ice/Connection.rb +0 -413
  515. data/lib/Ice/ConnectionF.rb +0 -32
  516. data/lib/Ice/Current.rb +0 -141
  517. data/lib/Ice/Endpoint.rb +0 -187
  518. data/lib/Ice/EndpointF.rb +0 -48
  519. data/lib/Ice/EndpointTypes.rb +0 -69
  520. data/lib/Ice/FacetMap.rb +0 -24
  521. data/lib/Ice/Identity.rb +0 -63
  522. data/lib/Ice/ImplicitContext.rb +0 -26
  523. data/lib/Ice/ImplicitContextF.rb +0 -24
  524. data/lib/Ice/Instrumentation.rb +0 -169
  525. data/lib/Ice/InstrumentationF.rb +0 -31
  526. data/lib/Ice/LocalException.rb +0 -1031
  527. data/lib/Ice/Locator.rb +0 -196
  528. data/lib/Ice/LocatorF.rb +0 -30
  529. data/lib/Ice/Logger.rb +0 -24
  530. data/lib/Ice/LoggerF.rb +0 -24
  531. data/lib/Ice/Metrics.rb +0 -337
  532. data/lib/Ice/ObjectAdapter.rb +0 -29
  533. data/lib/Ice/ObjectAdapterF.rb +0 -24
  534. data/lib/Ice/ObjectFactory.rb +0 -24
  535. data/lib/Ice/Plugin.rb +0 -30
  536. data/lib/Ice/PluginF.rb +0 -28
  537. data/lib/Ice/Process.rb +0 -53
  538. data/lib/Ice/ProcessF.rb +0 -25
  539. data/lib/Ice/Properties.rb +0 -25
  540. data/lib/Ice/PropertiesAdmin.rb +0 -63
  541. data/lib/Ice/PropertiesF.rb +0 -29
  542. data/lib/Ice/RemoteLogger.rb +0 -207
  543. data/lib/Ice/Router.rb +0 -87
  544. data/lib/Ice/RouterF.rb +0 -25
  545. data/lib/Ice/ServantLocator.rb +0 -26
  546. data/lib/Ice/ServantLocatorF.rb +0 -24
  547. data/lib/Ice/SliceChecksumDict.rb +0 -24
  548. data/lib/Ice/ValueFactory.rb +0 -28
  549. data/lib/Ice/Version.rb +0 -90
  550. data/lib/IceBox/IceBox.rb +0 -164
  551. data/lib/IceGrid/Admin.rb +0 -1196
  552. data/lib/IceGrid/Descriptor.rb +0 -1034
  553. data/lib/IceGrid/Exception.rb +0 -376
  554. data/lib/IceGrid/FileParser.rb +0 -65
  555. data/lib/IceGrid/PluginFacade.rb +0 -35
  556. data/lib/IceGrid/Registry.rb +0 -209
  557. data/lib/IceGrid/Session.rb +0 -71
  558. data/lib/IceGrid/UserAccountMapper.rb +0 -61
  559. data/lib/IcePatch2/FileInfo.rb +0 -115
  560. data/lib/IcePatch2/FileServer.rb +0 -123
  561. data/lib/IceStorm/IceStorm.rb +0 -332
  562. data/lib/IceStorm/Metrics.rb +0 -73
  563. data/slice/Ice/Connection.ice +0 -516
  564. data/slice/Ice/Current.ice +0 -170
  565. data/slice/Ice/Locator.ice +0 -239
  566. data/slice/Ice/Metrics.ice +0 -436
  567. data/slice/Ice/ObjectAdapter.ice +0 -710
  568. data/slice/Ice/Properties.ice +0 -244
  569. data/slice/Ice/Router.ice +0 -103
  570. data/slice/IceBT/ConnectionInfo.ice +0 -59
  571. data/slice/IceBT/EndpointInfo.ice +0 -57
  572. data/slice/IceBT/Types.ice +0 -45
  573. data/slice/IceDiscovery/IceDiscovery.ice +0 -98
  574. data/slice/IceGrid/PluginFacade.ice +0 -329
  575. data/slice/IceIAP/ConnectionInfo.ice +0 -74
  576. data/slice/IceIAP/EndpointInfo.ice +0 -68
  577. data/slice/IceLocatorDiscovery/IceLocatorDiscovery.ice +0 -83
  578. data/slice/IceSSL/ConnectionInfo.ice +0 -54
  579. data/slice/IceSSL/ConnectionInfoF.ice +0 -31
  580. data/slice/IceSSL/EndpointInfo.ice +0 -45
  581. data/slice/IceStorm/IceStorm.ice +0 -414
  582. /data/{ext → dist/IceRuby}/Communicator.cpp +0 -0
  583. /data/{ext → dist/IceRuby}/Communicator.h +0 -0
  584. /data/{ext → dist/IceRuby}/Config.h +0 -0
  585. /data/{ext → dist/IceRuby}/Connection.h +0 -0
  586. /data/{ext → dist/IceRuby}/Endpoint.h +0 -0
  587. /data/{ext → dist/IceRuby}/ImplicitContext.h +0 -0
  588. /data/{ext → dist/IceRuby}/Init.cpp +0 -0
  589. /data/{ext → dist/IceRuby}/Logger.h +0 -0
  590. /data/{ext → dist/IceRuby}/Operation.h +0 -0
  591. /data/{ext → dist/IceRuby}/Properties.h +0 -0
  592. /data/{ext → dist/IceRuby}/Proxy.cpp +0 -0
  593. /data/{ext → dist/IceRuby}/Proxy.h +0 -0
  594. /data/{ext → dist/IceRuby}/Slice.cpp +0 -0
  595. /data/{ext → dist/IceRuby}/Slice.h +0 -0
  596. /data/{ext → dist/IceRuby}/Util.cpp +0 -0
  597. /data/{ext → dist/IceRuby}/Util.h +0 -0
  598. /data/{ext → dist/IceRuby}/ValueFactoryManager.h +0 -0
  599. /data/{ext → dist}/ice/cpp/include/Ice/Application.h +0 -0
  600. /data/{ext → dist}/ice/cpp/include/Ice/AsyncResult.h +0 -0
  601. /data/{ext → dist}/ice/cpp/include/Ice/AsyncResultF.h +0 -0
  602. /data/{ext → dist}/ice/cpp/include/Ice/BatchRequestInterceptor.h +0 -0
  603. /data/{ext → dist}/ice/cpp/include/Ice/BatchRequestQueueF.h +0 -0
  604. /data/{ext → dist}/ice/cpp/include/Ice/Buffer.h +0 -0
  605. /data/{ext → dist}/ice/cpp/include/Ice/CommunicatorAsync.h +0 -0
  606. /data/{ext → dist}/ice/cpp/include/Ice/Comparable.h +0 -0
  607. /data/{ext → dist}/ice/cpp/include/Ice/ConnectionAsync.h +0 -0
  608. /data/{ext → dist}/ice/cpp/include/Ice/ConnectionIF.h +0 -0
  609. /data/{ext → dist}/ice/cpp/include/Ice/DefaultValueFactory.h +0 -0
  610. /data/{ext → dist}/ice/cpp/include/Ice/DispatchInterceptor.h +0 -0
  611. /data/{ext → dist}/ice/cpp/include/Ice/Dispatcher.h +0 -0
  612. /data/{ext → dist}/ice/cpp/include/Ice/DynamicLibrary.h +0 -0
  613. /data/{ext → dist}/ice/cpp/include/Ice/DynamicLibraryF.h +0 -0
  614. /data/{ext → dist}/ice/cpp/include/Ice/Exception.h +0 -0
  615. /data/{ext → dist}/ice/cpp/include/Ice/FactoryTable.h +0 -0
  616. /data/{ext → dist}/ice/cpp/include/Ice/FactoryTableInit.h +0 -0
  617. /data/{ext → dist}/ice/cpp/include/Ice/Format.h +0 -0
  618. /data/{ext → dist}/ice/cpp/include/Ice/Functional.h +0 -0
  619. /data/{ext → dist}/ice/cpp/include/Ice/GCObject.h +0 -0
  620. /data/{ext → dist}/ice/cpp/include/Ice/Handle.h +0 -0
  621. /data/{ext → dist}/ice/cpp/include/Ice/IconvStringConverter.h +0 -0
  622. /data/{ext → dist}/ice/cpp/include/Ice/Incoming.h +0 -0
  623. /data/{ext → dist}/ice/cpp/include/Ice/IncomingAsync.h +0 -0
  624. /data/{ext → dist}/ice/cpp/include/Ice/IncomingAsyncF.h +0 -0
  625. /data/{ext → dist}/ice/cpp/include/Ice/InputStream.h +0 -0
  626. /data/{ext → dist}/ice/cpp/include/Ice/InstanceF.h +0 -0
  627. /data/{ext → dist}/ice/cpp/include/Ice/InterfaceByValue.h +0 -0
  628. /data/{ext → dist}/ice/cpp/include/Ice/LocalObject.h +0 -0
  629. /data/{ext → dist}/ice/cpp/include/Ice/LocalObjectF.h +0 -0
  630. /data/{ext → dist}/ice/cpp/include/Ice/LoggerUtil.h +0 -0
  631. /data/{ext → dist}/ice/cpp/include/Ice/MetricsAdminI.h +0 -0
  632. /data/{ext → dist}/ice/cpp/include/Ice/MetricsFunctional.h +0 -0
  633. /data/{ext → dist}/ice/cpp/include/Ice/NativePropertiesAdmin.h +0 -0
  634. /data/{ext → dist}/ice/cpp/include/Ice/Object.h +0 -0
  635. /data/{ext → dist}/ice/cpp/include/Ice/ObjectF.h +0 -0
  636. /data/{ext → dist}/ice/cpp/include/Ice/ObserverHelper.h +0 -0
  637. /data/{ext → dist}/ice/cpp/include/Ice/Optional.h +0 -0
  638. /data/{ext → dist}/ice/cpp/include/Ice/OutgoingAsyncF.h +0 -0
  639. /data/{ext → dist}/ice/cpp/include/Ice/OutputStream.h +0 -0
  640. /data/{ext → dist}/ice/cpp/include/Ice/Protocol.h +0 -0
  641. /data/{ext → dist}/ice/cpp/include/Ice/ProxyF.h +0 -0
  642. /data/{ext → dist}/ice/cpp/include/Ice/ProxyFactoryF.h +0 -0
  643. /data/{ext → dist}/ice/cpp/include/Ice/ProxyHandle.h +0 -0
  644. /data/{ext → dist}/ice/cpp/include/Ice/ReferenceF.h +0 -0
  645. /data/{ext → dist}/ice/cpp/include/Ice/RegisterPlugins.h +0 -0
  646. /data/{ext → dist}/ice/cpp/include/Ice/RequestHandlerF.h +0 -0
  647. /data/{ext → dist}/ice/cpp/include/Ice/ResponseHandlerF.h +0 -0
  648. /data/{ext → dist}/ice/cpp/include/Ice/ServantManagerF.h +0 -0
  649. /data/{ext → dist}/ice/cpp/include/Ice/Service.h +0 -0
  650. /data/{ext → dist}/ice/cpp/include/Ice/SliceChecksums.h +0 -0
  651. /data/{ext → dist}/ice/cpp/include/Ice/SlicedData.h +0 -0
  652. /data/{ext → dist}/ice/cpp/include/Ice/SlicedDataF.h +0 -0
  653. /data/{ext → dist}/ice/cpp/include/Ice/StreamHelpers.h +0 -0
  654. /data/{ext → dist}/ice/cpp/include/Ice/StringConverter.h +0 -0
  655. /data/{ext → dist}/ice/cpp/include/Ice/ThreadPoolF.h +0 -0
  656. /data/{ext → dist}/ice/cpp/include/Ice/UUID.h +0 -0
  657. /data/{ext → dist}/ice/cpp/include/Ice/UniquePtr.h +0 -0
  658. /data/{ext → dist}/ice/cpp/include/Ice/UniqueRef.h +0 -0
  659. /data/{ext → dist}/ice/cpp/include/Ice/Value.h +0 -0
  660. /data/{ext → dist}/ice/cpp/include/Ice/ValueF.h +0 -0
  661. /data/{ext → dist}/ice/cpp/include/IceSSL/Config.h +0 -0
  662. /data/{ext → dist}/ice/cpp/include/IceSSL/OpenSSL.h +0 -0
  663. /data/{ext → dist}/ice/cpp/include/IceSSL/Plugin.h +0 -0
  664. /data/{ext → dist}/ice/cpp/include/IceSSL/SChannel.h +0 -0
  665. /data/{ext → dist}/ice/cpp/include/IceSSL/SecureTransport.h +0 -0
  666. /data/{ext → dist}/ice/cpp/include/IceUtil/Atomic.h +0 -0
  667. /data/{ext → dist}/ice/cpp/include/IceUtil/CountDownLatch.h +0 -0
  668. /data/{ext → dist}/ice/cpp/include/IceUtil/DisableWarnings.h +0 -0
  669. /data/{ext → dist}/ice/cpp/include/IceUtil/Exception.h +0 -0
  670. /data/{ext → dist}/ice/cpp/include/IceUtil/Functional.h +0 -0
  671. /data/{ext → dist}/ice/cpp/include/IceUtil/Handle.h +0 -0
  672. /data/{ext → dist}/ice/cpp/include/IceUtil/Iterator.h +0 -0
  673. /data/{ext → dist}/ice/cpp/include/IceUtil/Lock.h +0 -0
  674. /data/{ext → dist}/ice/cpp/include/IceUtil/Monitor.h +0 -0
  675. /data/{ext → dist}/ice/cpp/include/IceUtil/MutexProtocol.h +0 -0
  676. /data/{ext → dist}/ice/cpp/include/IceUtil/MutexPtrLock.h +0 -0
  677. /data/{ext → dist}/ice/cpp/include/IceUtil/MutexPtrTryLock.h +0 -0
  678. /data/{ext → dist}/ice/cpp/include/IceUtil/Optional.h +0 -0
  679. /data/{ext → dist}/ice/cpp/include/IceUtil/Options.h +0 -0
  680. /data/{ext → dist}/ice/cpp/include/IceUtil/OutputUtil.h +0 -0
  681. /data/{ext → dist}/ice/cpp/include/IceUtil/PopDisableWarnings.h +0 -0
  682. /data/{ext → dist}/ice/cpp/include/IceUtil/PushDisableWarnings.h +0 -0
  683. /data/{ext → dist}/ice/cpp/include/IceUtil/Random.h +0 -0
  684. /data/{ext → dist}/ice/cpp/include/IceUtil/RecMutex.h +0 -0
  685. /data/{ext → dist}/ice/cpp/include/IceUtil/ScannerConfig.h +0 -0
  686. /data/{ext → dist}/ice/cpp/include/IceUtil/ScopedArray.h +0 -0
  687. /data/{ext → dist}/ice/cpp/include/IceUtil/Shared.h +0 -0
  688. /data/{ext → dist}/ice/cpp/include/IceUtil/StopWatch.h +0 -0
  689. /data/{ext → dist}/ice/cpp/include/IceUtil/StringConverter.h +0 -0
  690. /data/{ext → dist}/ice/cpp/include/IceUtil/StringUtil.h +0 -0
  691. /data/{ext → dist}/ice/cpp/include/IceUtil/ThreadException.h +0 -0
  692. /data/{ext → dist}/ice/cpp/include/IceUtil/Time.h +0 -0
  693. /data/{ext → dist}/ice/cpp/include/IceUtil/UUID.h +0 -0
  694. /data/{ext → dist}/ice/cpp/include/IceUtil/UndefSysMacros.h +0 -0
  695. /data/{ext → dist}/ice/cpp/src/Ice/ACM.cpp +0 -0
  696. /data/{ext → dist}/ice/cpp/src/Ice/ACM.h +0 -0
  697. /data/{ext → dist}/ice/cpp/src/Ice/ACMF.h +0 -0
  698. /data/{ext → dist}/ice/cpp/src/Ice/Acceptor.cpp +0 -0
  699. /data/{ext → dist}/ice/cpp/src/Ice/AcceptorF.h +0 -0
  700. /data/{ext → dist}/ice/cpp/src/Ice/ArgVector.cpp +0 -0
  701. /data/{ext → dist}/ice/cpp/src/Ice/ArgVector.h +0 -0
  702. /data/{ext → dist}/ice/cpp/src/Ice/AsyncResult.cpp +0 -0
  703. /data/{ext → dist}/ice/cpp/src/Ice/Base64.cpp +0 -0
  704. /data/{ext → dist}/ice/cpp/src/Ice/Base64.h +0 -0
  705. /data/{ext → dist}/ice/cpp/src/Ice/BatchRequestQueue.cpp +0 -0
  706. /data/{ext → dist}/ice/cpp/src/Ice/BatchRequestQueue.h +0 -0
  707. /data/{ext → dist}/ice/cpp/src/Ice/Buffer.cpp +0 -0
  708. /data/{ext → dist}/ice/cpp/src/Ice/CollocatedRequestHandler.cpp +0 -0
  709. /data/{ext → dist}/ice/cpp/src/Ice/CollocatedRequestHandler.h +0 -0
  710. /data/{ext → dist}/ice/cpp/src/Ice/CommunicatorI.cpp +0 -0
  711. /data/{ext → dist}/ice/cpp/src/Ice/CommunicatorI.h +0 -0
  712. /data/{ext → dist}/ice/cpp/src/Ice/Cond.cpp +0 -0
  713. /data/{ext → dist}/ice/cpp/src/Ice/ConnectRequestHandler.cpp +0 -0
  714. /data/{ext → dist}/ice/cpp/src/Ice/ConnectRequestHandler.h +0 -0
  715. /data/{ext → dist}/ice/cpp/src/Ice/ConnectRequestHandlerF.h +0 -0
  716. /data/{ext → dist}/ice/cpp/src/Ice/ConnectionFactoryF.h +0 -0
  717. /data/{ext → dist}/ice/cpp/src/Ice/ConnectionRequestHandler.cpp +0 -0
  718. /data/{ext → dist}/ice/cpp/src/Ice/ConnectionRequestHandler.h +0 -0
  719. /data/{ext → dist}/ice/cpp/src/Ice/Connector.cpp +0 -0
  720. /data/{ext → dist}/ice/cpp/src/Ice/Connector.h +0 -0
  721. /data/{ext → dist}/ice/cpp/src/Ice/ConnectorF.h +0 -0
  722. /data/{ext → dist}/ice/cpp/src/Ice/DefaultsAndOverrides.h +0 -0
  723. /data/{ext → dist}/ice/cpp/src/Ice/DefaultsAndOverridesF.h +0 -0
  724. /data/{ext → dist}/ice/cpp/src/Ice/DispatchInterceptor.cpp +0 -0
  725. /data/{ext → dist}/ice/cpp/src/Ice/EndpointFactory.h +0 -0
  726. /data/{ext → dist}/ice/cpp/src/Ice/EndpointFactoryF.h +0 -0
  727. /data/{ext → dist}/ice/cpp/src/Ice/EndpointFactoryManager.cpp +0 -0
  728. /data/{ext → dist}/ice/cpp/src/Ice/EndpointFactoryManager.h +0 -0
  729. /data/{ext → dist}/ice/cpp/src/Ice/EndpointFactoryManagerF.h +0 -0
  730. /data/{ext → dist}/ice/cpp/src/Ice/EndpointI.h +0 -0
  731. /data/{ext → dist}/ice/cpp/src/Ice/EndpointIF.h +0 -0
  732. /data/{ext → dist}/ice/cpp/src/Ice/EventHandlerF.h +0 -0
  733. /data/{ext → dist}/ice/cpp/src/Ice/FactoryTable.cpp +0 -0
  734. /data/{ext → dist}/ice/cpp/src/Ice/FactoryTableInit.cpp +0 -0
  735. /data/{ext → dist}/ice/cpp/src/Ice/GCObject.cpp +0 -0
  736. /data/{ext → dist}/ice/cpp/src/Ice/HashUtil.h +0 -0
  737. /data/{ext → dist}/ice/cpp/src/Ice/HttpParser.cpp +0 -0
  738. /data/{ext → dist}/ice/cpp/src/Ice/HttpParser.h +0 -0
  739. /data/{ext → dist}/ice/cpp/src/Ice/IPEndpointIF.h +0 -0
  740. /data/{ext → dist}/ice/cpp/src/Ice/IconvStringConverter.cpp +0 -0
  741. /data/{ext → dist}/ice/cpp/src/Ice/ImplicitContextI.cpp +0 -0
  742. /data/{ext → dist}/ice/cpp/src/Ice/ImplicitContextI.h +0 -0
  743. /data/{ext → dist}/ice/cpp/src/Ice/Incoming.cpp +0 -0
  744. /data/{ext → dist}/ice/cpp/src/Ice/IncomingAsync.cpp +0 -0
  745. /data/{ext → dist}/ice/cpp/src/Ice/IncomingRequest.h +0 -0
  746. /data/{ext → dist}/ice/cpp/src/Ice/Initialize.cpp +0 -0
  747. /data/{ext → dist}/ice/cpp/src/Ice/Instance.h +0 -0
  748. /data/{ext → dist}/ice/cpp/src/Ice/InstrumentationI.cpp +0 -0
  749. /data/{ext → dist}/ice/cpp/src/Ice/InstrumentationI.h +0 -0
  750. /data/{ext → dist}/ice/cpp/src/Ice/LocalObject.cpp +0 -0
  751. /data/{ext → dist}/ice/cpp/src/Ice/LocatorInfo.cpp +0 -0
  752. /data/{ext → dist}/ice/cpp/src/Ice/LocatorInfo.h +0 -0
  753. /data/{ext → dist}/ice/cpp/src/Ice/LocatorInfoF.h +0 -0
  754. /data/{ext → dist}/ice/cpp/src/Ice/LoggerAdminI.cpp +0 -0
  755. /data/{ext → dist}/ice/cpp/src/Ice/LoggerAdminI.h +0 -0
  756. /data/{ext → dist}/ice/cpp/src/Ice/LoggerI.h +0 -0
  757. /data/{ext → dist}/ice/cpp/src/Ice/LoggerUtil.cpp +0 -0
  758. /data/{ext → dist}/ice/cpp/src/Ice/MetricsObserverI.cpp +0 -0
  759. /data/{ext → dist}/ice/cpp/src/Ice/NetworkProxy.h +0 -0
  760. /data/{ext → dist}/ice/cpp/src/Ice/NetworkProxyF.h +0 -0
  761. /data/{ext → dist}/ice/cpp/src/Ice/OSLogLoggerI.cpp +0 -0
  762. /data/{ext → dist}/ice/cpp/src/Ice/OSLogLoggerI.h +0 -0
  763. /data/{ext → dist}/ice/cpp/src/Ice/Object.cpp +0 -0
  764. /data/{ext → dist}/ice/cpp/src/Ice/ObjectAdapterFactory.cpp +0 -0
  765. /data/{ext → dist}/ice/cpp/src/Ice/ObjectAdapterFactory.h +0 -0
  766. /data/{ext → dist}/ice/cpp/src/Ice/ObjectAdapterFactoryF.h +0 -0
  767. /data/{ext → dist}/ice/cpp/src/Ice/ObjectAdapterI.h +0 -0
  768. /data/{ext → dist}/ice/cpp/src/Ice/ObserverHelper.cpp +0 -0
  769. /data/{ext → dist}/ice/cpp/src/Ice/OpaqueEndpointI.cpp +0 -0
  770. /data/{ext → dist}/ice/cpp/src/Ice/OpaqueEndpointI.h +0 -0
  771. /data/{ext → dist}/ice/cpp/src/Ice/OutputStream.cpp +0 -0
  772. /data/{ext → dist}/ice/cpp/src/Ice/PluginManagerI.h +0 -0
  773. /data/{ext → dist}/ice/cpp/src/Ice/PropertiesAdminI.cpp +0 -0
  774. /data/{ext → dist}/ice/cpp/src/Ice/PropertiesAdminI.h +0 -0
  775. /data/{ext → dist}/ice/cpp/src/Ice/PropertiesI.h +0 -0
  776. /data/{ext → dist}/ice/cpp/src/Ice/Protocol.cpp +0 -0
  777. /data/{ext → dist}/ice/cpp/src/Ice/ProtocolInstance.cpp +0 -0
  778. /data/{ext → dist}/ice/cpp/src/Ice/ProtocolInstance.h +0 -0
  779. /data/{ext → dist}/ice/cpp/src/Ice/ProtocolInstanceF.h +0 -0
  780. /data/{ext → dist}/ice/cpp/src/Ice/ProtocolPluginFacade.cpp +0 -0
  781. /data/{ext → dist}/ice/cpp/src/Ice/ProtocolPluginFacade.h +0 -0
  782. /data/{ext → dist}/ice/cpp/src/Ice/ProtocolPluginFacadeF.h +0 -0
  783. /data/{ext → dist}/ice/cpp/src/Ice/ProxyFactory.cpp +0 -0
  784. /data/{ext → dist}/ice/cpp/src/Ice/ProxyFactory.h +0 -0
  785. /data/{ext → dist}/ice/cpp/src/Ice/Reference.cpp +0 -0
  786. /data/{ext → dist}/ice/cpp/src/Ice/Reference.h +0 -0
  787. /data/{ext → dist}/ice/cpp/src/Ice/ReferenceFactory.cpp +0 -0
  788. /data/{ext → dist}/ice/cpp/src/Ice/ReferenceFactory.h +0 -0
  789. /data/{ext → dist}/ice/cpp/src/Ice/ReferenceFactoryF.h +0 -0
  790. /data/{ext → dist}/ice/cpp/src/Ice/RegisterPluginsInit.cpp +0 -0
  791. /data/{ext → dist}/ice/cpp/src/Ice/RegisterPluginsInit.h +0 -0
  792. /data/{ext → dist}/ice/cpp/src/Ice/ReplyStatus.h +0 -0
  793. /data/{ext → dist}/ice/cpp/src/Ice/RequestHandler.cpp +0 -0
  794. /data/{ext → dist}/ice/cpp/src/Ice/RequestHandler.h +0 -0
  795. /data/{ext → dist}/ice/cpp/src/Ice/RequestHandlerFactory.cpp +0 -0
  796. /data/{ext → dist}/ice/cpp/src/Ice/RequestHandlerFactory.h +0 -0
  797. /data/{ext → dist}/ice/cpp/src/Ice/ResponseHandler.cpp +0 -0
  798. /data/{ext → dist}/ice/cpp/src/Ice/ResponseHandler.h +0 -0
  799. /data/{ext → dist}/ice/cpp/src/Ice/RetryQueue.cpp +0 -0
  800. /data/{ext → dist}/ice/cpp/src/Ice/RetryQueue.h +0 -0
  801. /data/{ext → dist}/ice/cpp/src/Ice/RetryQueueF.h +0 -0
  802. /data/{ext → dist}/ice/cpp/src/Ice/RouterInfo.cpp +0 -0
  803. /data/{ext → dist}/ice/cpp/src/Ice/RouterInfo.h +0 -0
  804. /data/{ext → dist}/ice/cpp/src/Ice/RouterInfoF.h +0 -0
  805. /data/{ext → dist}/ice/cpp/src/Ice/ServantManager.cpp +0 -0
  806. /data/{ext → dist}/ice/cpp/src/Ice/ServantManager.h +0 -0
  807. /data/{ext → dist}/ice/cpp/src/Ice/SharedContext.h +0 -0
  808. /data/{ext → dist}/ice/cpp/src/Ice/SliceChecksums.cpp +0 -0
  809. /data/{ext → dist}/ice/cpp/src/Ice/SlicedData.cpp +0 -0
  810. /data/{ext → dist}/ice/cpp/src/Ice/StringConverterPlugin.cpp +0 -0
  811. /data/{ext → dist}/ice/cpp/src/Ice/StringUtil.h +0 -0
  812. /data/{ext → dist}/ice/cpp/src/Ice/SysLoggerI.cpp +0 -0
  813. /data/{ext → dist}/ice/cpp/src/Ice/SysLoggerI.h +0 -0
  814. /data/{ext → dist}/ice/cpp/src/Ice/SystemdJournalI.cpp +0 -0
  815. /data/{ext → dist}/ice/cpp/src/Ice/SystemdJournalI.h +0 -0
  816. /data/{ext → dist}/ice/cpp/src/Ice/TcpConnector.cpp +0 -0
  817. /data/{ext → dist}/ice/cpp/src/Ice/TcpConnector.h +0 -0
  818. /data/{ext → dist}/ice/cpp/src/Ice/TcpEndpointI.cpp +0 -0
  819. /data/{ext → dist}/ice/cpp/src/Ice/TcpEndpointI.h +0 -0
  820. /data/{ext → dist}/ice/cpp/src/Ice/Timer.cpp +0 -0
  821. /data/{ext → dist}/ice/cpp/src/Ice/TraceLevels.cpp +0 -0
  822. /data/{ext → dist}/ice/cpp/src/Ice/TraceLevels.h +0 -0
  823. /data/{ext → dist}/ice/cpp/src/Ice/TraceLevelsF.h +0 -0
  824. /data/{ext → dist}/ice/cpp/src/Ice/TraceUtil.cpp +0 -0
  825. /data/{ext → dist}/ice/cpp/src/Ice/TraceUtil.h +0 -0
  826. /data/{ext → dist}/ice/cpp/src/Ice/Transceiver.cpp +0 -0
  827. /data/{ext → dist}/ice/cpp/src/Ice/TransceiverF.h +0 -0
  828. /data/{ext → dist}/ice/cpp/src/Ice/UdpConnector.h +0 -0
  829. /data/{ext → dist}/ice/cpp/src/Ice/UdpEndpointI.cpp +0 -0
  830. /data/{ext → dist}/ice/cpp/src/Ice/UdpEndpointI.h +0 -0
  831. /data/{ext → dist}/ice/cpp/src/Ice/Value.cpp +0 -0
  832. /data/{ext → dist}/ice/cpp/src/Ice/ValueFactoryManagerI.cpp +0 -0
  833. /data/{ext → dist}/ice/cpp/src/Ice/ValueFactoryManagerI.h +0 -0
  834. /data/{ext → dist}/ice/cpp/src/Ice/VirtualShared.h +0 -0
  835. /data/{ext → dist}/ice/cpp/src/Ice/WSConnector.cpp +0 -0
  836. /data/{ext → dist}/ice/cpp/src/Ice/WSConnector.h +0 -0
  837. /data/{ext → dist}/ice/cpp/src/Ice/WSEndpoint.cpp +0 -0
  838. /data/{ext → dist}/ice/cpp/src/Ice/WSEndpoint.h +0 -0
  839. /data/{ext → dist}/ice/cpp/src/IceDiscovery/LocatorI.cpp +0 -0
  840. /data/{ext → dist}/ice/cpp/src/IceDiscovery/LocatorI.h +0 -0
  841. /data/{ext → dist}/ice/cpp/src/IceDiscovery/LookupI.cpp +0 -0
  842. /data/{ext → dist}/ice/cpp/src/IceDiscovery/LookupI.h +0 -0
  843. /data/{ext → dist}/ice/cpp/src/IceDiscovery/PluginI.cpp +0 -0
  844. /data/{ext → dist}/ice/cpp/src/IceDiscovery/PluginI.h +0 -0
  845. /data/{ext → dist}/ice/cpp/src/IceLocatorDiscovery/Plugin.h +0 -0
  846. /data/{ext → dist}/ice/cpp/src/IceLocatorDiscovery/PluginI.cpp +0 -0
  847. /data/{ext → dist}/ice/cpp/src/IceSSL/CertificateI.cpp +0 -0
  848. /data/{ext → dist}/ice/cpp/src/IceSSL/CertificateI.h +0 -0
  849. /data/{ext → dist}/ice/cpp/src/IceSSL/ConnectorI.cpp +0 -0
  850. /data/{ext → dist}/ice/cpp/src/IceSSL/ConnectorI.h +0 -0
  851. /data/{ext → dist}/ice/cpp/src/IceSSL/EndpointI.cpp +0 -0
  852. /data/{ext → dist}/ice/cpp/src/IceSSL/EndpointI.h +0 -0
  853. /data/{ext → dist}/ice/cpp/src/IceSSL/Instance.cpp +0 -0
  854. /data/{ext → dist}/ice/cpp/src/IceSSL/Instance.h +0 -0
  855. /data/{ext → dist}/ice/cpp/src/IceSSL/InstanceF.h +0 -0
  856. /data/{ext → dist}/ice/cpp/src/IceSSL/OpenSSLCertificateI.cpp +0 -0
  857. /data/{ext → dist}/ice/cpp/src/IceSSL/OpenSSLEngine.cpp +0 -0
  858. /data/{ext → dist}/ice/cpp/src/IceSSL/OpenSSLEngine.h +0 -0
  859. /data/{ext → dist}/ice/cpp/src/IceSSL/OpenSSLEngineF.h +0 -0
  860. /data/{ext → dist}/ice/cpp/src/IceSSL/OpenSSLPluginI.cpp +0 -0
  861. /data/{ext → dist}/ice/cpp/src/IceSSL/OpenSSLTransceiverI.h +0 -0
  862. /data/{ext → dist}/ice/cpp/src/IceSSL/OpenSSLUtil.cpp +0 -0
  863. /data/{ext → dist}/ice/cpp/src/IceSSL/OpenSSLUtil.h +0 -0
  864. /data/{ext → dist}/ice/cpp/src/IceSSL/PluginI.h +0 -0
  865. /data/{ext → dist}/ice/cpp/src/IceSSL/RFC2253.cpp +0 -0
  866. /data/{ext → dist}/ice/cpp/src/IceSSL/RFC2253.h +0 -0
  867. /data/{ext → dist}/ice/cpp/src/IceSSL/SChannelCertificateI.cpp +0 -0
  868. /data/{ext → dist}/ice/cpp/src/IceSSL/SChannelEngine.cpp +0 -0
  869. /data/{ext → dist}/ice/cpp/src/IceSSL/SChannelEngine.h +0 -0
  870. /data/{ext → dist}/ice/cpp/src/IceSSL/SChannelEngineF.h +0 -0
  871. /data/{ext → dist}/ice/cpp/src/IceSSL/SChannelPluginI.cpp +0 -0
  872. /data/{ext → dist}/ice/cpp/src/IceSSL/SChannelTransceiverI.cpp +0 -0
  873. /data/{ext → dist}/ice/cpp/src/IceSSL/SChannelTransceiverI.h +0 -0
  874. /data/{ext → dist}/ice/cpp/src/IceSSL/SSLEngine.cpp +0 -0
  875. /data/{ext → dist}/ice/cpp/src/IceSSL/SSLEngine.h +0 -0
  876. /data/{ext → dist}/ice/cpp/src/IceSSL/SSLEngineF.h +0 -0
  877. /data/{ext → dist}/ice/cpp/src/IceSSL/SecureTransportCertificateI.cpp +0 -0
  878. /data/{ext → dist}/ice/cpp/src/IceSSL/SecureTransportEngine.cpp +0 -0
  879. /data/{ext → dist}/ice/cpp/src/IceSSL/SecureTransportEngine.h +0 -0
  880. /data/{ext → dist}/ice/cpp/src/IceSSL/SecureTransportEngineF.h +0 -0
  881. /data/{ext → dist}/ice/cpp/src/IceSSL/SecureTransportPluginI.cpp +0 -0
  882. /data/{ext → dist}/ice/cpp/src/IceSSL/SecureTransportTransceiverI.h +0 -0
  883. /data/{ext → dist}/ice/cpp/src/IceSSL/SecureTransportUtil.h +0 -0
  884. /data/{ext → dist}/ice/cpp/src/IceSSL/TrustManager.cpp +0 -0
  885. /data/{ext → dist}/ice/cpp/src/IceSSL/TrustManager.h +0 -0
  886. /data/{ext → dist}/ice/cpp/src/IceSSL/TrustManagerF.h +0 -0
  887. /data/{ext → dist}/ice/cpp/src/IceSSL/Util.h +0 -0
  888. /data/{ext → dist}/ice/cpp/src/IceUtil/ConvertUTF.cpp +0 -0
  889. /data/{ext → dist}/ice/cpp/src/IceUtil/ConvertUTF.h +0 -0
  890. /data/{ext → dist}/ice/cpp/src/IceUtil/CtrlCHandler.cpp +0 -0
  891. /data/{ext → dist}/ice/cpp/src/IceUtil/InputUtil.cpp +0 -0
  892. /data/{ext → dist}/ice/cpp/src/IceUtil/MutexProtocol.cpp +0 -0
  893. /data/{ext → dist}/ice/cpp/src/IceUtil/Options.cpp +0 -0
  894. /data/{ext → dist}/ice/cpp/src/IceUtil/OutputUtil.cpp +0 -0
  895. /data/{ext → dist}/ice/cpp/src/IceUtil/Random.cpp +0 -0
  896. /data/{ext → dist}/ice/cpp/src/IceUtil/Shared.cpp +0 -0
  897. /data/{ext → dist}/ice/cpp/src/IceUtil/ThreadException.cpp +0 -0
  898. /data/{ext → dist}/ice/cpp/src/IceUtil/Time.cpp +0 -0
  899. /data/{ext → dist}/ice/cpp/src/IceUtil/Unicode.cpp +0 -0
  900. /data/{ext → dist}/ice/cpp/src/IceUtil/Unicode.h +0 -0
  901. /data/{ext → dist}/ice/cpp/src/Slice/CPlusPlusUtil.cpp +0 -0
  902. /data/{ext → dist}/ice/cpp/src/Slice/CPlusPlusUtil.h +0 -0
  903. /data/{ext → dist}/ice/cpp/src/Slice/Checksum.cpp +0 -0
  904. /data/{ext → dist}/ice/cpp/src/Slice/Checksum.h +0 -0
  905. /data/{ext → dist}/ice/cpp/src/Slice/FileTracker.cpp +0 -0
  906. /data/{ext → dist}/ice/cpp/src/Slice/FileTracker.h +0 -0
  907. /data/{ext → dist}/ice/cpp/src/Slice/Grammar.cpp +0 -0
  908. /data/{ext → dist}/ice/cpp/src/Slice/Grammar.h +0 -0
  909. /data/{ext → dist}/ice/cpp/src/Slice/GrammarUtil.h +0 -0
  910. /data/{ext → dist}/ice/cpp/src/Slice/MD5.cpp +0 -0
  911. /data/{ext → dist}/ice/cpp/src/Slice/MD5.h +0 -0
  912. /data/{ext → dist}/ice/cpp/src/Slice/MD5I.cpp +0 -0
  913. /data/{ext → dist}/ice/cpp/src/Slice/MD5I.h +0 -0
  914. /data/{ext → dist}/ice/cpp/src/Slice/PHPUtil.cpp +0 -0
  915. /data/{ext → dist}/ice/cpp/src/Slice/PHPUtil.h +0 -0
  916. /data/{ext → dist}/ice/cpp/src/Slice/Parser.cpp +0 -0
  917. /data/{ext → dist}/ice/cpp/src/Slice/Parser.h +0 -0
  918. /data/{ext → dist}/ice/cpp/src/Slice/Preprocessor.cpp +0 -0
  919. /data/{ext → dist}/ice/cpp/src/Slice/Preprocessor.h +0 -0
  920. /data/{ext → dist}/ice/cpp/src/Slice/Python.cpp +0 -0
  921. /data/{ext → dist}/ice/cpp/src/Slice/PythonUtil.cpp +0 -0
  922. /data/{ext → dist}/ice/cpp/src/Slice/PythonUtil.h +0 -0
  923. /data/{ext → dist}/ice/cpp/src/Slice/Ruby.cpp +0 -0
  924. /data/{ext → dist}/ice/cpp/src/Slice/RubyUtil.cpp +0 -0
  925. /data/{ext → dist}/ice/cpp/src/Slice/RubyUtil.h +0 -0
  926. /data/{ext → dist}/ice/cpp/src/Slice/Scanner.cpp +0 -0
  927. /data/{ext → dist}/ice/cpp/src/Slice/SliceUtil.cpp +0 -0
  928. /data/{ext → dist}/ice/cpp/src/Slice/StringLiteralUtil.cpp +0 -0
  929. /data/{ext → dist}/ice/cpp/src/Slice/Util.h +0 -0
  930. /data/{ext → dist}/ice/mcpp/config.h +0 -0
  931. /data/{ext → dist}/ice/mcpp/configed.H +0 -0
  932. /data/{ext → dist}/ice/mcpp/eval.c +0 -0
  933. /data/{ext → dist}/ice/mcpp/expand.c +0 -0
  934. /data/{ext → dist}/ice/mcpp/mbchar.c +0 -0
  935. /data/{ext → dist}/ice/mcpp/mcpp_lib.h +0 -0
  936. /data/{ext → dist}/ice/mcpp/mcpp_out.h +0 -0
  937. /data/{ext → dist}/ice/mcpp/system.H +0 -0
  938. /data/{slice → dist/ice/slice}/Glacier2/Metrics.ice +0 -0
  939. /data/{slice → dist/ice/slice}/Glacier2/PermissionsVerifier.ice +0 -0
  940. /data/{slice → dist/ice/slice}/Glacier2/PermissionsVerifierF.ice +0 -0
  941. /data/{slice → dist/ice/slice}/Glacier2/Router.ice +0 -0
  942. /data/{slice → dist/ice/slice}/Glacier2/RouterF.ice +0 -0
  943. /data/{slice → dist/ice/slice}/Glacier2/SSLInfo.ice +0 -0
  944. /data/{slice → dist/ice/slice}/Glacier2/Session.ice +0 -0
  945. /data/{slice → dist/ice/slice}/Ice/BuiltinSequences.ice +0 -0
  946. /data/{slice → dist/ice/slice}/Ice/Communicator.ice +0 -0
  947. /data/{slice → dist/ice/slice}/Ice/CommunicatorF.ice +0 -0
  948. /data/{slice → dist/ice/slice}/Ice/ConnectionF.ice +0 -0
  949. /data/{slice → dist/ice/slice}/Ice/Endpoint.ice +0 -0
  950. /data/{slice → dist/ice/slice}/Ice/EndpointF.ice +0 -0
  951. /data/{slice → dist/ice/slice}/Ice/EndpointTypes.ice +0 -0
  952. /data/{slice → dist/ice/slice}/Ice/FacetMap.ice +0 -0
  953. /data/{slice → dist/ice/slice}/Ice/Identity.ice +0 -0
  954. /data/{slice → dist/ice/slice}/Ice/ImplicitContext.ice +0 -0
  955. /data/{slice → dist/ice/slice}/Ice/ImplicitContextF.ice +0 -0
  956. /data/{slice → dist/ice/slice}/Ice/Instrumentation.ice +0 -0
  957. /data/{slice → dist/ice/slice}/Ice/InstrumentationF.ice +0 -0
  958. /data/{slice → dist/ice/slice}/Ice/LocalException.ice +0 -0
  959. /data/{slice → dist/ice/slice}/Ice/LocatorF.ice +0 -0
  960. /data/{slice → dist/ice/slice}/Ice/Logger.ice +0 -0
  961. /data/{slice → dist/ice/slice}/Ice/LoggerF.ice +0 -0
  962. /data/{slice → dist/ice/slice}/Ice/ObjectAdapterF.ice +0 -0
  963. /data/{slice → dist/ice/slice}/Ice/ObjectFactory.ice +0 -0
  964. /data/{slice → dist/ice/slice}/Ice/Plugin.ice +0 -0
  965. /data/{slice → dist/ice/slice}/Ice/PluginF.ice +0 -0
  966. /data/{slice → dist/ice/slice}/Ice/Process.ice +0 -0
  967. /data/{slice → dist/ice/slice}/Ice/ProcessF.ice +0 -0
  968. /data/{slice → dist/ice/slice}/Ice/PropertiesAdmin.ice +0 -0
  969. /data/{slice → dist/ice/slice}/Ice/PropertiesF.ice +0 -0
  970. /data/{slice → dist/ice/slice}/Ice/RemoteLogger.ice +0 -0
  971. /data/{slice → dist/ice/slice}/Ice/RouterF.ice +0 -0
  972. /data/{slice → dist/ice/slice}/Ice/ServantLocator.ice +0 -0
  973. /data/{slice → dist/ice/slice}/Ice/ServantLocatorF.ice +0 -0
  974. /data/{slice → dist/ice/slice}/Ice/SliceChecksumDict.ice +0 -0
  975. /data/{slice → dist/ice/slice}/Ice/ValueFactory.ice +0 -0
  976. /data/{slice → dist/ice/slice}/Ice/Version.ice +0 -0
  977. /data/{slice → dist/ice/slice}/IceBox/IceBox.ice +0 -0
  978. /data/{slice → dist/ice/slice}/IceGrid/Admin.ice +0 -0
  979. /data/{slice → dist/ice/slice}/IceGrid/Descriptor.ice +0 -0
  980. /data/{slice → dist/ice/slice}/IceGrid/Exception.ice +0 -0
  981. /data/{slice → dist/ice/slice}/IceGrid/FileParser.ice +0 -0
  982. /data/{slice → dist/ice/slice}/IceGrid/Registry.ice +0 -0
  983. /data/{slice → dist/ice/slice}/IceGrid/Session.ice +0 -0
  984. /data/{slice → dist/ice/slice}/IceGrid/UserAccountMapper.ice +0 -0
  985. /data/{slice → dist/ice/slice}/IcePatch2/FileInfo.ice +0 -0
  986. /data/{slice → dist/ice/slice}/IcePatch2/FileServer.ice +0 -0
  987. /data/{slice → dist/ice/slice}/IceStorm/Metrics.ice +0 -0
  988. /data/{lib → dist/lib}/Glacier2.rb +0 -0
  989. /data/{lib → dist/lib}/Ice.rb +0 -0
  990. /data/{lib → dist/lib}/IceBox.rb +0 -0
  991. /data/{lib → dist/lib}/IceGrid.rb +0 -0
  992. /data/{lib → dist/lib}/IcePatch2.rb +0 -0
  993. /data/{lib → dist/lib}/IceStorm.rb +0 -0
  994. /data/{bin → scripts}/slice2rb +0 -0
@@ -0,0 +1,1704 @@
1
+ //
2
+ // Copyright (c) ZeroC, Inc. All rights reserved.
3
+ //
4
+
5
+ #include <Ice/WSTransceiver.h>
6
+ #include <Ice/Endpoint.h>
7
+ #include <Ice/Connection.h>
8
+ #include <Ice/ProtocolInstance.h>
9
+ #include <Ice/HttpParser.h>
10
+ #include <Ice/Communicator.h>
11
+ #include <Ice/LoggerUtil.h>
12
+ #include <Ice/Buffer.h>
13
+ #include <Ice/LocalException.h>
14
+ #include <Ice/Base64.h>
15
+ #include <IceUtil/Random.h>
16
+ #include <Ice/SHA1.h>
17
+ #include <IceUtil/StringUtil.h>
18
+
19
+ // Python 2.7 under Windows.
20
+ #if _MSC_VER == 1500
21
+ typedef unsigned short uint16_t;
22
+ #else
23
+ #include <stdint.h>
24
+ #endif
25
+
26
+ #include <climits>
27
+
28
+ using namespace std;
29
+ using namespace Ice;
30
+ using namespace IceInternal;
31
+
32
+ //
33
+ // WebSocket opcodes
34
+ //
35
+ #define OP_CONT 0x0 // Continuation frame
36
+ #define OP_TEXT 0x1 // Text frame
37
+ #define OP_DATA 0x2 // Data frame
38
+ #define OP_RES_0x3 0x3 // Reserved
39
+ #define OP_RES_0x4 0x4 // Reserved
40
+ #define OP_RES_0x5 0x5 // Reserved
41
+ #define OP_RES_0x6 0x6 // Reserved
42
+ #define OP_RES_0x7 0x7 // Reserved
43
+ #define OP_CLOSE 0x8 // Connection close
44
+ #define OP_PING 0x9 // Ping
45
+ #define OP_PONG 0xA // Pong
46
+ #define OP_RES_0xB 0xB // Reserved
47
+ #define OP_RES_0xC 0xC // Reserved
48
+ #define OP_RES_0xD 0xD // Reserved
49
+ #define OP_RES_0xE 0xE // Reserved
50
+ #define OP_RES_0xF 0xF // Reserved
51
+ #define FLAG_FINAL 0x80 // Last frame
52
+ #define FLAG_MASKED 0x80 // Payload is masked
53
+
54
+ #define CLOSURE_NORMAL 1000
55
+ #define CLOSURE_SHUTDOWN 1001
56
+ #define CLOSURE_PROTOCOL_ERROR 1002
57
+ #define CLOSURE_TOO_BIG 1009
58
+
59
+ namespace
60
+ {
61
+
62
+ const string _iceProtocol = "ice.zeroc.com";
63
+ const string _wsUUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
64
+
65
+ //
66
+ // Rename to avoid conflict with OS 10.10 htonll
67
+ //
68
+ void ice_htonll(Long v, Byte* dest)
69
+ {
70
+ //
71
+ // Transfer a 64-bit integer in network (big-endian) order.
72
+ //
73
+ #ifdef ICE_BIG_ENDIAN
74
+ const Byte* src = reinterpret_cast<const Byte*>(&v);
75
+ *dest++ = *src++;
76
+ *dest++ = *src++;
77
+ *dest++ = *src++;
78
+ *dest++ = *src++;
79
+ *dest++ = *src++;
80
+ *dest++ = *src++;
81
+ *dest++ = *src++;
82
+ *dest = *src;
83
+ #else
84
+ const Byte* src = reinterpret_cast<const Byte*>(&v) + sizeof(Long) - 1;
85
+ *dest++ = *src--;
86
+ *dest++ = *src--;
87
+ *dest++ = *src--;
88
+ *dest++ = *src--;
89
+ *dest++ = *src--;
90
+ *dest++ = *src--;
91
+ *dest++ = *src--;
92
+ *dest = *src;
93
+ #endif
94
+ }
95
+
96
+ //
97
+ // Rename to avoid conflict with OS 10.10 nlltoh
98
+ //
99
+ Long ice_nlltoh(const Byte* src)
100
+ {
101
+ Long v;
102
+
103
+ //
104
+ // Extract a 64-bit integer in network (big-endian) order.
105
+ //
106
+ #ifdef ICE_BIG_ENDIAN
107
+ Byte* dest = reinterpret_cast<Byte*>(&v);
108
+ *dest++ = *src++;
109
+ *dest++ = *src++;
110
+ *dest++ = *src++;
111
+ *dest++ = *src++;
112
+ *dest++ = *src++;
113
+ *dest++ = *src++;
114
+ *dest++ = *src++;
115
+ *dest = *src;
116
+ #else
117
+ Byte* dest = reinterpret_cast<Byte*>(&v) + sizeof(Long) - 1;
118
+ *dest-- = *src++;
119
+ *dest-- = *src++;
120
+ *dest-- = *src++;
121
+ *dest-- = *src++;
122
+ *dest-- = *src++;
123
+ *dest-- = *src++;
124
+ *dest-- = *src++;
125
+ *dest = *src;
126
+ #endif
127
+
128
+ return v;
129
+ }
130
+
131
+ }
132
+
133
+ NativeInfoPtr
134
+ IceInternal::WSTransceiver::getNativeInfo()
135
+ {
136
+ return _delegate->getNativeInfo();
137
+ }
138
+
139
+ #if defined(ICE_USE_IOCP)
140
+ AsyncInfo*
141
+ IceInternal::WSTransceiver::getAsyncInfo(SocketOperation status)
142
+ {
143
+ return _delegate->getNativeInfo()->getAsyncInfo(status);
144
+ }
145
+ #endif
146
+
147
+ SocketOperation
148
+ IceInternal::WSTransceiver::initialize(Buffer& readBuffer, Buffer& writeBuffer)
149
+ {
150
+ //
151
+ // Delegate logs exceptions that occur during initialize(), so there's no need to trap them here.
152
+ //
153
+ if(_state == StateInitializeDelegate)
154
+ {
155
+ SocketOperation op = _delegate->initialize(readBuffer, writeBuffer);
156
+ if(op != SocketOperationNone)
157
+ {
158
+ return op;
159
+ }
160
+ _state = StateConnected;
161
+ }
162
+
163
+ try
164
+ {
165
+ if(_state == StateConnected)
166
+ {
167
+ //
168
+ // We don't know how much we'll need to read.
169
+ //
170
+ _readBuffer.b.resize(_readBufferSize);
171
+ _readI = _readBuffer.i = _readBuffer.b.begin();
172
+
173
+ //
174
+ // The server waits for the client's upgrade request, the
175
+ // client sends the upgrade request.
176
+ //
177
+ _state = StateUpgradeRequestPending;
178
+ if(!_incoming)
179
+ {
180
+ //
181
+ // Compose the upgrade request.
182
+ //
183
+ ostringstream out;
184
+ out << "GET " << _resource << " HTTP/1.1\r\n"
185
+ << "Host: " << _host << "\r\n"
186
+ << "Upgrade: websocket\r\n"
187
+ << "Connection: Upgrade\r\n"
188
+ << "Sec-WebSocket-Protocol: " << _iceProtocol << "\r\n"
189
+ << "Sec-WebSocket-Version: 13\r\n"
190
+ << "Sec-WebSocket-Key: ";
191
+
192
+ //
193
+ // The value for Sec-WebSocket-Key is a 16-byte random number,
194
+ // encoded with Base64.
195
+ //
196
+ vector<unsigned char> key(16);
197
+ IceUtilInternal::generateRandom(reinterpret_cast<char*>(&key[0]), key.size());
198
+ _key = IceInternal::Base64::encode(key);
199
+ out << _key << "\r\n\r\n"; // EOM
200
+
201
+ string str = out.str();
202
+ _writeBuffer.b.resize(str.size());
203
+ memcpy(&_writeBuffer.b[0], str.c_str(), str.size());
204
+ _writeBuffer.i = _writeBuffer.b.begin();
205
+ }
206
+ }
207
+
208
+ //
209
+ // Try to write the client's upgrade request.
210
+ //
211
+ if(_state == StateUpgradeRequestPending && !_incoming)
212
+ {
213
+ if(_writeBuffer.i < _writeBuffer.b.end())
214
+ {
215
+ SocketOperation s = _delegate->write(_writeBuffer);
216
+ if(s)
217
+ {
218
+ return s;
219
+ }
220
+ }
221
+ assert(_writeBuffer.i == _writeBuffer.b.end());
222
+ _state = StateUpgradeResponsePending;
223
+ }
224
+
225
+ while(true)
226
+ {
227
+ if(_readBuffer.i < _readBuffer.b.end())
228
+ {
229
+ SocketOperation s = _delegate->read(_readBuffer);
230
+ if(s == SocketOperationWrite || _readBuffer.i == _readBuffer.b.begin())
231
+ {
232
+ return s;
233
+ }
234
+ }
235
+
236
+ //
237
+ // Try to read the client's upgrade request or the server's response.
238
+ //
239
+ if((_state == StateUpgradeRequestPending && _incoming) ||
240
+ (_state == StateUpgradeResponsePending && !_incoming))
241
+ {
242
+ //
243
+ // Check if we have enough data for a complete message.
244
+ //
245
+ const Ice::Byte* p = _parser->isCompleteMessage(&_readBuffer.b[0], _readBuffer.i);
246
+ if(!p)
247
+ {
248
+ if(_readBuffer.i < _readBuffer.b.end())
249
+ {
250
+ return SocketOperationRead;
251
+ }
252
+
253
+ //
254
+ // Enlarge the buffer and try to read more.
255
+ //
256
+ const size_t oldSize = static_cast<size_t>(_readBuffer.i - _readBuffer.b.begin());
257
+ if(oldSize + 1024 > _instance->messageSizeMax())
258
+ {
259
+ throw MemoryLimitException(__FILE__, __LINE__);
260
+ }
261
+ _readBuffer.b.resize(oldSize + 1024);
262
+ _readBuffer.i = _readBuffer.b.begin() + oldSize;
263
+ continue; // Try again to read the response/request
264
+ }
265
+
266
+ //
267
+ // Set _readI at the end of the response/request message.
268
+ //
269
+ _readI = _readBuffer.b.begin() + (p - &_readBuffer.b[0]);
270
+ }
271
+
272
+ //
273
+ // We're done, the client's upgrade request or server's response is read.
274
+ //
275
+ break;
276
+ }
277
+
278
+ try
279
+ {
280
+ //
281
+ // Parse the client's upgrade request.
282
+ //
283
+ if(_state == StateUpgradeRequestPending && _incoming)
284
+ {
285
+ if(_parser->parse(&_readBuffer.b[0], _readI))
286
+ {
287
+ handleRequest(_writeBuffer);
288
+ _state = StateUpgradeResponsePending;
289
+ }
290
+ else
291
+ {
292
+ throw ProtocolException(__FILE__, __LINE__, "incomplete request message");
293
+ }
294
+ }
295
+
296
+ if(_state == StateUpgradeResponsePending)
297
+ {
298
+ if(_incoming)
299
+ {
300
+ if(_writeBuffer.i < _writeBuffer.b.end())
301
+ {
302
+ SocketOperation s = _delegate->write(_writeBuffer);
303
+ if(s)
304
+ {
305
+ return s;
306
+ }
307
+ }
308
+ }
309
+ else
310
+ {
311
+ //
312
+ // Parse the server's response
313
+ //
314
+ if(_parser->parse(&_readBuffer.b[0], _readI))
315
+ {
316
+ handleResponse();
317
+ }
318
+ else
319
+ {
320
+ throw ProtocolException(__FILE__, __LINE__, "incomplete response message");
321
+ }
322
+ }
323
+ }
324
+ }
325
+ catch(const WebSocketException& ex)
326
+ {
327
+ throw ProtocolException(__FILE__, __LINE__, ex.reason);
328
+ }
329
+
330
+ _state = StateOpened;
331
+ _nextState = StateOpened;
332
+
333
+ if(_readI < _readBuffer.i)
334
+ {
335
+ _delegate->getNativeInfo()->ready(SocketOperationRead, true);
336
+ }
337
+ }
338
+ catch(const Ice::LocalException& ex)
339
+ {
340
+ if(_instance->traceLevel() >= 2)
341
+ {
342
+ Trace out(_instance->logger(), _instance->traceCategory());
343
+ out << protocol() << " connection HTTP upgrade request failed\n" << toString() << "\n" << ex;
344
+ }
345
+ throw;
346
+ }
347
+
348
+ if(_instance->traceLevel() >= 1)
349
+ {
350
+ Trace out(_instance->logger(), _instance->traceCategory());
351
+ if(_incoming)
352
+ {
353
+ out << "accepted " << protocol() << " connection HTTP upgrade request\n" << toString();
354
+ }
355
+ else
356
+ {
357
+ out << protocol() << " connection HTTP upgrade request accepted\n" << toString();
358
+ }
359
+ }
360
+
361
+ return SocketOperationNone;
362
+ }
363
+
364
+ SocketOperation
365
+ IceInternal::WSTransceiver::closing(bool initiator, const Ice::LocalException& reason)
366
+ {
367
+ if(_instance->traceLevel() >= 1)
368
+ {
369
+ Trace out(_instance->logger(), _instance->traceCategory());
370
+ out << "gracefully closing " << protocol() << " connection\n" << toString();
371
+ }
372
+
373
+ State s = _nextState == StateOpened ? _state : _nextState;
374
+
375
+ if(s == StateClosingRequestPending && _closingInitiator)
376
+ {
377
+ //
378
+ // If we initiated a close connection but also received a
379
+ // close connection, we assume we didn't initiated the
380
+ // connection and we send the close frame now. This is to
381
+ // ensure that if both peers close the connection at the same
382
+ // time we don't hang having both peer waiting for the close
383
+ // frame of the other.
384
+ //
385
+ assert(!initiator);
386
+ _closingInitiator = false;
387
+ return SocketOperationWrite;
388
+ }
389
+ else if(s >= StateClosingRequestPending)
390
+ {
391
+ return SocketOperationNone;
392
+ }
393
+
394
+ _closingInitiator = initiator;
395
+
396
+ if(dynamic_cast<const Ice::CloseConnectionException*>(&reason))
397
+ {
398
+ _closingReason = CLOSURE_NORMAL;
399
+ }
400
+ else if(dynamic_cast<const Ice::ObjectAdapterDeactivatedException*>(&reason) ||
401
+ dynamic_cast<const Ice::CommunicatorDestroyedException*>(&reason))
402
+ {
403
+ _closingReason = CLOSURE_SHUTDOWN;
404
+ }
405
+ else if(dynamic_cast<const Ice::ProtocolException*>(&reason))
406
+ {
407
+ _closingReason = CLOSURE_PROTOCOL_ERROR;
408
+ }
409
+ else if(dynamic_cast<const Ice::MemoryLimitException*>(&reason))
410
+ {
411
+ _closingReason = CLOSURE_TOO_BIG;
412
+ }
413
+
414
+ if(_state == StateOpened)
415
+ {
416
+ _state = StateClosingRequestPending;
417
+ return initiator ? SocketOperationRead : SocketOperationWrite;
418
+ }
419
+ else
420
+ {
421
+ _nextState = StateClosingRequestPending;
422
+ return SocketOperationNone;
423
+ }
424
+ }
425
+
426
+ void
427
+ IceInternal::WSTransceiver::close()
428
+ {
429
+ _delegate->close();
430
+ _state = StateClosed;
431
+
432
+ //
433
+ // Clear the buffers now instead of waiting for destruction.
434
+ //
435
+ if(!_writePending)
436
+ {
437
+ _writeBuffer.b.clear();
438
+ }
439
+ if(!_readPending)
440
+ {
441
+ _readBuffer.b.clear();
442
+ }
443
+ }
444
+
445
+ SocketOperation
446
+ IceInternal::WSTransceiver::write(Buffer& buf)
447
+ {
448
+ if(_writePending)
449
+ {
450
+ return SocketOperationWrite;
451
+ }
452
+
453
+ if(_state < StateOpened)
454
+ {
455
+ if(_state < StateConnected)
456
+ {
457
+ return _delegate->write(buf);
458
+ }
459
+ else
460
+ {
461
+ return _delegate->write(_writeBuffer);
462
+ }
463
+ }
464
+
465
+ do
466
+ {
467
+ if(preWrite(buf))
468
+ {
469
+ if(_writeBuffer.i < _writeBuffer.b.end())
470
+ {
471
+ SocketOperation s = _delegate->write(_writeBuffer);
472
+ if(s)
473
+ {
474
+ return s;
475
+ }
476
+ }
477
+ else if(_incoming && !buf.b.empty() && _writeState == WriteStatePayload)
478
+ {
479
+ SocketOperation s = _delegate->write(buf);
480
+ if(s)
481
+ {
482
+ return s;
483
+ }
484
+ }
485
+ }
486
+ }
487
+ while(postWrite(buf));
488
+
489
+ if(_state == StateClosingResponsePending && !_closingInitiator)
490
+ {
491
+ return SocketOperationRead;
492
+ }
493
+ return SocketOperationNone;
494
+ }
495
+
496
+ SocketOperation
497
+ IceInternal::WSTransceiver::read(Buffer& buf)
498
+ {
499
+ if(_readPending)
500
+ {
501
+ return SocketOperationRead;
502
+ }
503
+
504
+ if(_state < StateOpened)
505
+ {
506
+ if(_state < StateConnected)
507
+ {
508
+ return _delegate->read(buf);
509
+ }
510
+ else
511
+ {
512
+ if(_delegate->read(_readBuffer) == SocketOperationWrite)
513
+ {
514
+ return SocketOperationWrite;
515
+ }
516
+ else
517
+ {
518
+ return SocketOperationNone;
519
+ }
520
+ }
521
+ }
522
+
523
+ //
524
+ // If we read the full Ice message, handle it before trying
525
+ // reading anymore data from the WS connection.
526
+ //
527
+ if(buf.i == buf.b.end())
528
+ {
529
+ if(_readI < _readBuffer.i)
530
+ {
531
+ _delegate->getNativeInfo()->ready(SocketOperationRead, true);
532
+ }
533
+ return SocketOperationNone;
534
+ }
535
+
536
+ SocketOperation s = SocketOperationNone;
537
+ do
538
+ {
539
+ if(preRead(buf))
540
+ {
541
+ if(_readState == ReadStatePayload)
542
+ {
543
+ //
544
+ // If the payload length is smaller than what remains to be read, we read
545
+ // no more than the payload length. The remaining of the buffer will be
546
+ // sent over in another frame.
547
+ //
548
+ size_t readSz = _readPayloadLength - static_cast<size_t>(buf.i - _readStart); // Already read
549
+ if(static_cast<size_t>(buf.b.end() - buf.i) > readSz)
550
+ {
551
+ size_t size = buf.b.size();
552
+ buf.b.resize(static_cast<size_t>(buf.i - buf.b.begin()) + readSz);
553
+ s = _delegate->read(buf);
554
+ buf.b.resize(size);
555
+ }
556
+ else
557
+ {
558
+ s = _delegate->read(buf);
559
+ }
560
+ }
561
+ else
562
+ {
563
+ s = _delegate->read(_readBuffer);
564
+ }
565
+
566
+ if(s == SocketOperationWrite)
567
+ {
568
+ postRead(buf);
569
+ return s;
570
+ }
571
+ }
572
+ }
573
+ while(postRead(buf));
574
+
575
+ if(buf.i == buf.b.end())
576
+ {
577
+ if(_readI < _readBuffer.i)
578
+ {
579
+ _delegate->getNativeInfo()->ready(SocketOperationRead, true);
580
+ }
581
+ s = SocketOperationNone;
582
+ }
583
+ else
584
+ {
585
+ _delegate->getNativeInfo()->ready(SocketOperationRead, false);
586
+ s = SocketOperationRead;
587
+ }
588
+
589
+ if(((_state == StateClosingRequestPending && !_closingInitiator) ||
590
+ (_state == StateClosingResponsePending && _closingInitiator) ||
591
+ _state == StatePingPending ||
592
+ _state == StatePongPending) &&
593
+ _writeState == WriteStateHeader)
594
+ {
595
+ // We have things to write, ask to be notified when writes are ready.
596
+ s = static_cast<SocketOperation>(s | SocketOperationWrite);
597
+ }
598
+ return s;
599
+ }
600
+
601
+ #if defined(ICE_USE_IOCP)
602
+ bool
603
+ IceInternal::WSTransceiver::startWrite(Buffer& buf)
604
+ {
605
+ _writePending = true;
606
+ if(_state < StateOpened)
607
+ {
608
+ if(_state < StateConnected)
609
+ {
610
+ return _delegate->startWrite(buf);
611
+ }
612
+ else
613
+ {
614
+ return _delegate->startWrite(_writeBuffer);
615
+ }
616
+ }
617
+
618
+ if(preWrite(buf))
619
+ {
620
+ if(_writeBuffer.i < _writeBuffer.b.end())
621
+ {
622
+ if(_delegate->startWrite(_writeBuffer))
623
+ {
624
+ return buf.b.size() == _writePayloadLength; // Return true only if we've written the whole buffer.
625
+ }
626
+ return false;
627
+ }
628
+ else
629
+ {
630
+ assert(_incoming);
631
+ return _delegate->startWrite(buf);
632
+ }
633
+ }
634
+ else
635
+ {
636
+ _delegate->getNativeInfo()->completed(IceInternal::SocketOperationWrite);
637
+ return false;
638
+ }
639
+ }
640
+
641
+ void
642
+ IceInternal::WSTransceiver::finishWrite(Buffer& buf)
643
+ {
644
+ _writePending = false;
645
+
646
+ if(_state < StateOpened)
647
+ {
648
+ if(_state < StateConnected)
649
+ {
650
+ _delegate->finishWrite(buf);
651
+ }
652
+ else
653
+ {
654
+ _delegate->finishWrite(_writeBuffer);
655
+ }
656
+ return;
657
+ }
658
+
659
+ if(_writeBuffer.i < _writeBuffer.b.end())
660
+ {
661
+ _delegate->finishWrite(_writeBuffer);
662
+ }
663
+ else if(!buf.b.empty() && buf.i != buf.b.end())
664
+ {
665
+ assert(_incoming);
666
+ _delegate->finishWrite(buf);
667
+ }
668
+
669
+ if(_state == StateClosed)
670
+ {
671
+ _writeBuffer.b.clear();
672
+ return;
673
+ }
674
+
675
+ postWrite(buf);
676
+ }
677
+
678
+ void
679
+ IceInternal::WSTransceiver::startRead(Buffer& buf)
680
+ {
681
+ _readPending = true;
682
+ if(_state < StateOpened)
683
+ {
684
+ if(_state < StateConnected)
685
+ {
686
+ _delegate->startRead(buf);
687
+ }
688
+ else
689
+ {
690
+ _delegate->startRead(_readBuffer);
691
+ }
692
+ return;
693
+ }
694
+
695
+ if(preRead(buf))
696
+ {
697
+ if(_readState == ReadStatePayload)
698
+ {
699
+ //
700
+ // If the payload length is smaller than what remains to be read, we read
701
+ // no more than the payload length. The remaining of the buffer will be
702
+ // sent over in another frame.
703
+ //
704
+ size_t readSz = _readPayloadLength - (buf.i - _readStart);
705
+ if(static_cast<size_t>(buf.b.end() - buf.i) > readSz)
706
+ {
707
+ size_t size = buf.b.size();
708
+ buf.b.resize(buf.i - buf.b.begin() + readSz);
709
+ _delegate->startRead(buf);
710
+ buf.b.resize(size);
711
+ }
712
+ else
713
+ {
714
+ _delegate->startRead(buf);
715
+ }
716
+ }
717
+ else
718
+ {
719
+ _delegate->startRead(_readBuffer);
720
+ }
721
+ }
722
+ else
723
+ {
724
+ _delegate->getNativeInfo()->completed(IceInternal::SocketOperationRead);
725
+ }
726
+ }
727
+
728
+ void
729
+ IceInternal::WSTransceiver::finishRead(Buffer& buf)
730
+ {
731
+ _readPending = false;
732
+ if(_state < StateOpened)
733
+ {
734
+ if(_state < StateConnected)
735
+ {
736
+ _delegate->finishRead(buf);
737
+ }
738
+ else
739
+ {
740
+ _delegate->finishRead(_readBuffer);
741
+ }
742
+ return;
743
+ }
744
+
745
+ if(buf.b.empty() || buf.i == buf.b.end())
746
+ {
747
+ // Nothing to do.
748
+ }
749
+ else if(_readState == ReadStatePayload)
750
+ {
751
+ _delegate->finishRead(buf);
752
+ }
753
+ else
754
+ {
755
+ _delegate->finishRead(_readBuffer);
756
+ }
757
+
758
+ if(_state == StateClosed)
759
+ {
760
+ _readBuffer.b.clear();
761
+ return;
762
+ }
763
+
764
+ postRead(buf);
765
+ }
766
+ #endif
767
+
768
+ string
769
+ IceInternal::WSTransceiver::protocol() const
770
+ {
771
+ return _instance->protocol();
772
+ }
773
+
774
+ string
775
+ IceInternal::WSTransceiver::toString() const
776
+ {
777
+ return _delegate->toString();
778
+ }
779
+
780
+ string
781
+ IceInternal::WSTransceiver::toDetailedString() const
782
+ {
783
+ return _delegate->toDetailedString();
784
+ }
785
+
786
+ Ice::ConnectionInfoPtr
787
+ IceInternal::WSTransceiver::getInfo() const
788
+ {
789
+ WSConnectionInfoPtr info = ICE_MAKE_SHARED(WSConnectionInfo);
790
+ info->underlying = _delegate->getInfo();
791
+ info->headers = _parser->getHeaders();
792
+ return info;
793
+ }
794
+
795
+ void
796
+ IceInternal::WSTransceiver::checkSendSize(const Buffer& buf)
797
+ {
798
+ _delegate->checkSendSize(buf);
799
+ }
800
+
801
+ void
802
+ IceInternal::WSTransceiver::setBufferSize(int rcvSize, int sndSize)
803
+ {
804
+ _delegate->setBufferSize(rcvSize, sndSize);
805
+ }
806
+
807
+ IceInternal::WSTransceiver::WSTransceiver(const ProtocolInstancePtr& instance, const TransceiverPtr& del,
808
+ const string& host, const string& resource) :
809
+ _instance(instance),
810
+ _delegate(del),
811
+ _host(host),
812
+ _resource(resource),
813
+ _incoming(false),
814
+ _state(StateInitializeDelegate),
815
+ _parser(new HttpParser),
816
+ _readState(ReadStateOpcode),
817
+ _readBufferSize(1024),
818
+ _readLastFrame(true),
819
+ _readOpCode(0),
820
+ _readHeaderLength(0),
821
+ _readPayloadLength(0),
822
+ _writeState(WriteStateHeader),
823
+ _writeBufferSize(16 * 1024),
824
+ _readPending(false),
825
+ _writePending(false),
826
+ _closingInitiator(false),
827
+ _closingReason(CLOSURE_NORMAL)
828
+ {
829
+ //
830
+ // Use 1KB read and 16KB write buffer sizes. We use 16KB for the
831
+ // write buffer size because all the data needs to be copied to
832
+ // the write buffer for the purpose of masking. A 16KB buffer
833
+ // appears to be a good compromise to reduce the number of socket
834
+ // write calls and not consume too much memory.
835
+ //
836
+ }
837
+
838
+ IceInternal::WSTransceiver::WSTransceiver(const ProtocolInstancePtr& instance, const TransceiverPtr& del) :
839
+ _instance(instance),
840
+ _delegate(del),
841
+ _incoming(true),
842
+ _state(StateInitializeDelegate),
843
+ _parser(new HttpParser),
844
+ _readState(ReadStateOpcode),
845
+ _readBufferSize(1024),
846
+ _readLastFrame(true),
847
+ _readOpCode(0),
848
+ _readHeaderLength(0),
849
+ _readPayloadLength(0),
850
+ _writeState(WriteStateHeader),
851
+ _writeBufferSize(1024),
852
+ _readPending(false),
853
+ _writePending(false),
854
+ _closingInitiator(false),
855
+ _closingReason(CLOSURE_NORMAL)
856
+ {
857
+ //
858
+ // Use 1KB read and write buffer sizes.
859
+ //
860
+ }
861
+
862
+ IceInternal::WSTransceiver::~WSTransceiver()
863
+ {
864
+ }
865
+
866
+ void
867
+ IceInternal::WSTransceiver::handleRequest(Buffer& responseBuffer)
868
+ {
869
+ string val;
870
+
871
+ //
872
+ // HTTP/1.1
873
+ //
874
+ if(_parser->versionMajor() != 1 || _parser->versionMinor() != 1)
875
+ {
876
+ throw WebSocketException("unsupported HTTP version");
877
+ }
878
+
879
+ //
880
+ // "An |Upgrade| header field containing the value 'websocket',
881
+ // treated as an ASCII case-insensitive value."
882
+ //
883
+ if(!_parser->getHeader("Upgrade", val, true))
884
+ {
885
+ throw WebSocketException("missing value for Upgrade field");
886
+ }
887
+ else if(val != "websocket")
888
+ {
889
+ throw WebSocketException("invalid value `" + val + "' for Upgrade field");
890
+ }
891
+
892
+ //
893
+ // "A |Connection| header field that includes the token 'Upgrade',
894
+ // treated as an ASCII case-insensitive value.
895
+ //
896
+ if(!_parser->getHeader("Connection", val, true))
897
+ {
898
+ throw WebSocketException("missing value for Connection field");
899
+ }
900
+ else if(val.find("upgrade") == string::npos)
901
+ {
902
+ throw WebSocketException("invalid value `" + val + "' for Connection field");
903
+ }
904
+
905
+ //
906
+ // "A |Sec-WebSocket-Version| header field, with a value of 13."
907
+ //
908
+ if(!_parser->getHeader("Sec-WebSocket-Version", val, false))
909
+ {
910
+ throw WebSocketException("missing value for WebSocket version");
911
+ }
912
+ else if(val != "13")
913
+ {
914
+ throw WebSocketException("unsupported WebSocket version `" + val + "'");
915
+ }
916
+
917
+ //
918
+ // "Optionally, a |Sec-WebSocket-Protocol| header field, with a list
919
+ // of values indicating which protocols the client would like to
920
+ // speak, ordered by preference."
921
+ //
922
+ bool addProtocol = false;
923
+ if(_parser->getHeader("Sec-WebSocket-Protocol", val, true))
924
+ {
925
+ vector<string> protocols;
926
+ if(!IceUtilInternal::splitString(val, ",", protocols))
927
+ {
928
+ throw WebSocketException("invalid value `" + val + "' for WebSocket protocol");
929
+ }
930
+ for(vector<string>::iterator p = protocols.begin(); p != protocols.end(); ++p)
931
+ {
932
+ if(IceUtilInternal::trim(*p) != _iceProtocol)
933
+ {
934
+ throw WebSocketException("unknown value `" + *p + "' for WebSocket protocol");
935
+ }
936
+ addProtocol = true;
937
+ }
938
+ }
939
+
940
+ //
941
+ // "A |Sec-WebSocket-Key| header field with a base64-encoded
942
+ // value that, when decoded, is 16 bytes in length."
943
+ //
944
+ string key;
945
+ if(!_parser->getHeader("Sec-WebSocket-Key", key, false))
946
+ {
947
+ throw WebSocketException("missing value for WebSocket key");
948
+ }
949
+
950
+ vector<unsigned char> decodedKey = Base64::decode(key);
951
+ if(decodedKey.size() != 16)
952
+ {
953
+ throw WebSocketException("invalid value `" + key + "' for WebSocket key");
954
+ }
955
+
956
+ //
957
+ // Retain the target resource.
958
+ //
959
+ const_cast<string&>(_resource) = _parser->uri();
960
+
961
+ //
962
+ // Compose the response.
963
+ //
964
+ ostringstream out;
965
+ out << "HTTP/1.1 101 Switching Protocols\r\n"
966
+ << "Upgrade: websocket\r\n"
967
+ << "Connection: Upgrade\r\n";
968
+ if(addProtocol)
969
+ {
970
+ out << "Sec-WebSocket-Protocol: " << _iceProtocol << "\r\n";
971
+ }
972
+
973
+ //
974
+ // The response includes:
975
+ //
976
+ // "A |Sec-WebSocket-Accept| header field. The value of this
977
+ // header field is constructed by concatenating /key/, defined
978
+ // above in step 4 in Section 4.2.2, with the string "258EAFA5-
979
+ // E914-47DA-95CA-C5AB0DC85B11", taking the SHA-1 hash of this
980
+ // concatenated value to obtain a 20-byte value and base64-
981
+ // encoding (see Section 4 of [RFC4648]) this 20-byte hash.
982
+ //
983
+ out << "Sec-WebSocket-Accept: ";
984
+ string input = key + _wsUUID;
985
+ vector<unsigned char> hash;
986
+ sha1(reinterpret_cast<const unsigned char*>(&input[0]), input.size(), hash);
987
+ out << IceInternal::Base64::encode(hash) << "\r\n" << "\r\n"; // EOM
988
+
989
+ string str = out.str();
990
+ responseBuffer.b.resize(str.size());
991
+ memcpy(&responseBuffer.b[0], str.c_str(), str.size());
992
+ responseBuffer.i = responseBuffer.b.begin();
993
+ }
994
+
995
+ void
996
+ IceInternal::WSTransceiver::handleResponse()
997
+ {
998
+ string val;
999
+
1000
+ //
1001
+ // HTTP/1.1
1002
+ //
1003
+ if(_parser->versionMajor() != 1 || _parser->versionMinor() != 1)
1004
+ {
1005
+ throw WebSocketException("unsupported HTTP version");
1006
+ }
1007
+
1008
+ //
1009
+ // "If the status code received from the server is not 101, the
1010
+ // client handles the response per HTTP [RFC2616] procedures. In
1011
+ // particular, the client might perform authentication if it
1012
+ // receives a 401 status code; the server might redirect the client
1013
+ // using a 3xx status code (but clients are not required to follow
1014
+ // them), etc."
1015
+ //
1016
+ if(_parser->status() != 101)
1017
+ {
1018
+ ostringstream out;
1019
+ out << "unexpected status value " << _parser->status();
1020
+ if(!_parser->reason().empty())
1021
+ {
1022
+ out << ":" << endl << _parser->reason();
1023
+ }
1024
+ throw WebSocketException(out.str());
1025
+ }
1026
+
1027
+ //
1028
+ // "If the response lacks an |Upgrade| header field or the |Upgrade|
1029
+ // header field contains a value that is not an ASCII case-
1030
+ // insensitive match for the value "websocket", the client MUST
1031
+ // _Fail the WebSocket Connection_."
1032
+ //
1033
+ if(!_parser->getHeader("Upgrade", val, true))
1034
+ {
1035
+ throw WebSocketException("missing value for Upgrade field");
1036
+ }
1037
+ else if(val != "websocket")
1038
+ {
1039
+ throw WebSocketException("invalid value `" + val + "' for Upgrade field");
1040
+ }
1041
+
1042
+ //
1043
+ // "If the response lacks a |Connection| header field or the
1044
+ // |Connection| header field doesn't contain a token that is an
1045
+ // ASCII case-insensitive match for the value "Upgrade", the client
1046
+ // MUST _Fail the WebSocket Connection_."
1047
+ //
1048
+ if(!_parser->getHeader("Connection", val, true))
1049
+ {
1050
+ throw WebSocketException("missing value for Connection field");
1051
+ }
1052
+ else if(val.find("upgrade") == string::npos)
1053
+ {
1054
+ throw WebSocketException("invalid value `" + val + "' for Connection field");
1055
+ }
1056
+
1057
+ //
1058
+ // "If the response includes a |Sec-WebSocket-Protocol| header field
1059
+ // and this header field indicates the use of a subprotocol that was
1060
+ // not present in the client's handshake (the server has indicated a
1061
+ // subprotocol not requested by the client), the client MUST _Fail
1062
+ // the WebSocket Connection_."
1063
+ //
1064
+ if(_parser->getHeader("Sec-WebSocket-Protocol", val, true) && val != _iceProtocol)
1065
+ {
1066
+ throw WebSocketException("invalid value `" + val + "' for WebSocket protocol");
1067
+ }
1068
+
1069
+ //
1070
+ // "If the response lacks a |Sec-WebSocket-Accept| header field or
1071
+ // the |Sec-WebSocket-Accept| contains a value other than the
1072
+ // base64-encoded SHA-1 of the concatenation of the |Sec-WebSocket-
1073
+ // Key| (as a string, not base64-decoded) with the string "258EAFA5-
1074
+ // E914-47DA-95CA-C5AB0DC85B11" but ignoring any leading and
1075
+ // trailing whitespace, the client MUST _Fail the WebSocket
1076
+ // Connection_."
1077
+ //
1078
+ if(!_parser->getHeader("Sec-WebSocket-Accept", val, false))
1079
+ {
1080
+ throw WebSocketException("missing value for Sec-WebSocket-Accept");
1081
+ }
1082
+ string input = _key + _wsUUID;
1083
+ vector<unsigned char> hash;
1084
+ sha1(reinterpret_cast<const unsigned char*>(&input[0]), input.size(), hash);
1085
+ if(val != IceInternal::Base64::encode(hash))
1086
+ {
1087
+ throw WebSocketException("invalid value `" + val + "' for Sec-WebSocket-Accept");
1088
+ }
1089
+ }
1090
+
1091
+ bool
1092
+ IceInternal::WSTransceiver::preRead(Buffer& buf)
1093
+ {
1094
+ while(true)
1095
+ {
1096
+ if(_readState == ReadStateOpcode)
1097
+ {
1098
+ //
1099
+ // Is there enough data available to read the opcode?
1100
+ //
1101
+ if(!readBuffered(2))
1102
+ {
1103
+ return true;
1104
+ }
1105
+
1106
+ //
1107
+ // Most-significant bit indicates whether this is the
1108
+ // last frame. Least-significant four bits hold the
1109
+ // opcode.
1110
+ //
1111
+ unsigned char ch = static_cast<unsigned char>(*_readI++);
1112
+ _readOpCode = ch & 0xf;
1113
+
1114
+ //
1115
+ // Remember if last frame if we're going to read a data or
1116
+ // continuation frame, this is only for protocol
1117
+ // correctness checking purpose.
1118
+ //
1119
+ if(_readOpCode == OP_DATA)
1120
+ {
1121
+ if(!_readLastFrame)
1122
+ {
1123
+ throw ProtocolException(__FILE__, __LINE__, "invalid data frame, no FIN on previous frame");
1124
+ }
1125
+ _readLastFrame = (ch & FLAG_FINAL) == FLAG_FINAL;
1126
+ }
1127
+ else if(_readOpCode == OP_CONT)
1128
+ {
1129
+ if(_readLastFrame)
1130
+ {
1131
+ throw ProtocolException(__FILE__, __LINE__, "invalid continuation frame, previous frame FIN set");
1132
+ }
1133
+ _readLastFrame = (ch & FLAG_FINAL) == FLAG_FINAL;
1134
+ }
1135
+
1136
+ ch = static_cast<unsigned char>(*_readI++);
1137
+
1138
+ //
1139
+ // Check the MASK bit. Messages sent by a client must be masked;
1140
+ // messages sent by a server must not be masked.
1141
+ //
1142
+ const bool masked = (ch & FLAG_MASKED) == FLAG_MASKED;
1143
+ if(masked != _incoming)
1144
+ {
1145
+ throw ProtocolException(__FILE__, __LINE__, "invalid masking");
1146
+ }
1147
+
1148
+ //
1149
+ // Extract the payload length, which can have the following values:
1150
+ //
1151
+ // 0-125: The payload length
1152
+ // 126: The subsequent two bytes contain the payload length
1153
+ // 127: The subsequent eight bytes contain the payload length
1154
+ //
1155
+ _readPayloadLength = (ch & 0x7f);
1156
+ if(_readPayloadLength < 126)
1157
+ {
1158
+ _readHeaderLength = 0;
1159
+ }
1160
+ else if(_readPayloadLength == 126)
1161
+ {
1162
+ _readHeaderLength = 2; // Need to read a 16-bit payload length.
1163
+ }
1164
+ else
1165
+ {
1166
+ _readHeaderLength = 8; // Need to read a 64-bit payload length.
1167
+ }
1168
+ if(masked)
1169
+ {
1170
+ _readHeaderLength += 4; // Need to read a 32-bit mask.
1171
+ }
1172
+
1173
+ _readState = ReadStateHeader;
1174
+ }
1175
+
1176
+ if(_readState == ReadStateHeader)
1177
+ {
1178
+ //
1179
+ // Is there enough data available to read the header?
1180
+ //
1181
+ if(_readHeaderLength > 0 && !readBuffered(_readHeaderLength))
1182
+ {
1183
+ return true;
1184
+ }
1185
+
1186
+ if(_readPayloadLength == 126)
1187
+ {
1188
+ _readPayloadLength = static_cast<size_t>(ntohs(*reinterpret_cast<uint16_t*>(_readI)));
1189
+ _readI += 2;
1190
+ }
1191
+ else if(_readPayloadLength == 127)
1192
+ {
1193
+ assert(_readPayloadLength == 127);
1194
+ Long l = ice_nlltoh(_readI);
1195
+ _readI += 8;
1196
+ if(l < 0 || l > INT_MAX)
1197
+ {
1198
+ ostringstream ostr;
1199
+ ostr << "invalid WebSocket payload length: " << l;
1200
+ throw ProtocolException(__FILE__, __LINE__, ostr.str());
1201
+ }
1202
+ _readPayloadLength = static_cast<size_t>(l);
1203
+ }
1204
+
1205
+ //
1206
+ // Read the mask if this is an incoming connection.
1207
+ //
1208
+ if(_incoming)
1209
+ {
1210
+ assert(_readBuffer.i - _readI >= 4); // We must have needed to read the mask.
1211
+ memcpy(_readMask, _readI, 4); // Copy the mask.
1212
+ _readI += 4;
1213
+ }
1214
+
1215
+ switch(_readOpCode)
1216
+ {
1217
+ case OP_TEXT: // Text frame
1218
+ {
1219
+ throw ProtocolException(__FILE__, __LINE__, "text frames not supported");
1220
+ }
1221
+ case OP_DATA: // Data frame
1222
+ case OP_CONT: // Continuation frame
1223
+ {
1224
+ if(_instance->traceLevel() >= 2)
1225
+ {
1226
+ Trace out(_instance->logger(), _instance->traceCategory());
1227
+ out << "received " << protocol() << (_readOpCode == OP_DATA ? " data" : " continuation");
1228
+ out << " frame with payload length of " << _readPayloadLength;
1229
+ out << " bytes\n" << toString();
1230
+ }
1231
+
1232
+ if(_readPayloadLength <= 0)
1233
+ {
1234
+ throw ProtocolException(__FILE__, __LINE__, "payload length is 0");
1235
+ }
1236
+ _readState = ReadStatePayload;
1237
+ assert(buf.i != buf.b.end());
1238
+ _readFrameStart = buf.i;
1239
+ break;
1240
+ }
1241
+ case OP_CLOSE: // Connection close
1242
+ {
1243
+ if(_instance->traceLevel() >= 2)
1244
+ {
1245
+ Trace out(_instance->logger(), _instance->traceCategory());
1246
+ out << "received " << protocol() << " connection close frame\n" << toString();
1247
+ }
1248
+
1249
+ State s = _nextState == StateOpened ? _state : _nextState;
1250
+ if(s == StateClosingRequestPending)
1251
+ {
1252
+ //
1253
+ // If we receive a close frame while we were actually
1254
+ // waiting to send one, change the role and send a
1255
+ // close frame response.
1256
+ //
1257
+ if(!_closingInitiator)
1258
+ {
1259
+ _closingInitiator = true;
1260
+ }
1261
+ if(_state == StateClosingRequestPending)
1262
+ {
1263
+ _state = StateClosingResponsePending;
1264
+ }
1265
+ else
1266
+ {
1267
+ _nextState = StateClosingResponsePending;
1268
+ }
1269
+ return false; // No longer interested in reading
1270
+ }
1271
+ else
1272
+ {
1273
+ throw ConnectionLostException(__FILE__, __LINE__, 0);
1274
+ }
1275
+ }
1276
+ case OP_PING:
1277
+ {
1278
+ if(_instance->traceLevel() >= 2)
1279
+ {
1280
+ Trace out(_instance->logger(), _instance->traceCategory());
1281
+ out << "received " << protocol() << " connection ping frame\n" << toString();
1282
+ }
1283
+ _readState = ReadStateControlFrame;
1284
+ break;
1285
+ }
1286
+ case OP_PONG: // Pong
1287
+ {
1288
+ if(_instance->traceLevel() >= 2)
1289
+ {
1290
+ Trace out(_instance->logger(), _instance->traceCategory());
1291
+ out << "received " << protocol() << " connection pong frame\n" << toString();
1292
+ }
1293
+ _readState = ReadStateControlFrame;
1294
+ break;
1295
+ }
1296
+ default:
1297
+ {
1298
+ ostringstream ostr;
1299
+ ostr << "unsupported opcode: " << _readOpCode;
1300
+ throw ProtocolException(__FILE__, __LINE__, ostr.str());
1301
+ }
1302
+ }
1303
+ }
1304
+
1305
+ if(_readState == ReadStateControlFrame)
1306
+ {
1307
+ if(_readPayloadLength > 0 && !readBuffered(_readPayloadLength))
1308
+ {
1309
+ return true;
1310
+ }
1311
+
1312
+ if(_readPayloadLength > 0 && _readOpCode == OP_PING)
1313
+ {
1314
+ _pingPayload.clear();
1315
+ _pingPayload.resize(_readPayloadLength);
1316
+ memcpy(&_pingPayload[0], _readI, _pingPayload.size());
1317
+ }
1318
+
1319
+ _readI += _readPayloadLength;
1320
+ _readPayloadLength = 0;
1321
+
1322
+ if(_readOpCode == OP_PING)
1323
+ {
1324
+ if(_state == StateOpened)
1325
+ {
1326
+ _state = StatePongPending; // Send pong frame now
1327
+ }
1328
+ else if(_nextState < StatePongPending)
1329
+ {
1330
+ _nextState = StatePongPending; // Send pong frame next
1331
+ }
1332
+ }
1333
+
1334
+ //
1335
+ // We've read the payload of the PING/PONG frame, we're ready
1336
+ // to read a new frame.
1337
+ //
1338
+ _readState = ReadStateOpcode;
1339
+ }
1340
+
1341
+ if(_readState == ReadStatePayload)
1342
+ {
1343
+ //
1344
+ // This must be assigned before the check for the buffer. If the buffer is empty
1345
+ // or already read, postRead will return false.
1346
+ //
1347
+ _readStart = buf.i;
1348
+
1349
+ if(buf.b.empty() || buf.i == buf.b.end())
1350
+ {
1351
+ return false;
1352
+ }
1353
+
1354
+ size_t n = min(static_cast<size_t>(_readBuffer.i - _readI), static_cast<size_t>(buf.b.end() - buf.i));
1355
+
1356
+ if(n > _readPayloadLength)
1357
+ {
1358
+ n = _readPayloadLength;
1359
+ }
1360
+ if(n > 0)
1361
+ {
1362
+ memcpy(buf.i, _readI, n);
1363
+ buf.i += n;
1364
+ _readI += n;
1365
+ }
1366
+ //
1367
+ // Continue reading if we didn't read the full message, otherwise give back
1368
+ // the control to the connection
1369
+ //
1370
+ return buf.i < buf.b.end() && n < _readPayloadLength;
1371
+ }
1372
+ }
1373
+ }
1374
+
1375
+ bool
1376
+ IceInternal::WSTransceiver::postRead(Buffer& buf)
1377
+ {
1378
+ if(_readState != ReadStatePayload)
1379
+ {
1380
+ return _readStart < _readBuffer.i; // Returns true if data was read.
1381
+ }
1382
+
1383
+ if(_readStart == buf.i)
1384
+ {
1385
+ return false; // Nothing was read or nothing to read.
1386
+ }
1387
+ assert(_readStart < buf.i);
1388
+
1389
+ if(_incoming)
1390
+ {
1391
+ //
1392
+ // Unmask the data we just read.
1393
+ //
1394
+ IceInternal::Buffer::Container::iterator p = _readStart;
1395
+ for(size_t n = static_cast<size_t>(_readStart - _readFrameStart); p < buf.i; ++p, ++n)
1396
+ {
1397
+ *p ^= _readMask[n % 4];
1398
+ }
1399
+ }
1400
+
1401
+ _readPayloadLength -= static_cast<size_t>(buf.i - _readStart);
1402
+ _readStart = buf.i;
1403
+ if(_readPayloadLength == 0)
1404
+ {
1405
+ //
1406
+ // We've read the complete payload, we're ready to read a new frame.
1407
+ //
1408
+ _readState = ReadStateOpcode;
1409
+ }
1410
+ return buf.i != buf.b.end();
1411
+ }
1412
+
1413
+ bool
1414
+ IceInternal::WSTransceiver::preWrite(Buffer& buf)
1415
+ {
1416
+ if(_writeState == WriteStateHeader)
1417
+ {
1418
+ if(_state == StateOpened)
1419
+ {
1420
+ if(buf.b.empty() || buf.i == buf.b.end())
1421
+ {
1422
+ return false;
1423
+ }
1424
+
1425
+ assert(buf.i == buf.b.begin());
1426
+ prepareWriteHeader(OP_DATA, buf.b.size());
1427
+
1428
+ _writeState = WriteStatePayload;
1429
+ }
1430
+ else if(_state == StatePingPending)
1431
+ {
1432
+ prepareWriteHeader(OP_PING, 0); // Don't send any payload
1433
+
1434
+ _writeBuffer.b.resize(static_cast<size_t>(_writeBuffer.i - _writeBuffer.b.begin()));
1435
+ _writeState = WriteStateControlFrame;
1436
+ _writeBuffer.i = _writeBuffer.b.begin();
1437
+ }
1438
+ else if(_state == StatePongPending)
1439
+ {
1440
+ prepareWriteHeader(OP_PONG, _pingPayload.size());
1441
+ if(_pingPayload.size() > static_cast<size_t>(_writeBuffer.b.end() - _writeBuffer.i))
1442
+ {
1443
+ size_t pos = static_cast<size_t>(_writeBuffer.i - _writeBuffer.b.begin());
1444
+ _writeBuffer.b.resize(pos + _pingPayload.size());
1445
+ _writeBuffer.i = _writeBuffer.b.begin() + pos;
1446
+ }
1447
+ memcpy(_writeBuffer.i, &_pingPayload[0], _pingPayload.size());
1448
+ _writeBuffer.i += _pingPayload.size();
1449
+ _pingPayload.clear();
1450
+
1451
+ _writeBuffer.b.resize(static_cast<size_t>(_writeBuffer.i - _writeBuffer.b.begin()));
1452
+ _writeState = WriteStateControlFrame;
1453
+ _writeBuffer.i = _writeBuffer.b.begin();
1454
+ }
1455
+ else if((_state == StateClosingRequestPending && !_closingInitiator) ||
1456
+ (_state == StateClosingResponsePending && _closingInitiator))
1457
+ {
1458
+ prepareWriteHeader(OP_CLOSE, 2);
1459
+
1460
+ // Write closing reason
1461
+ *reinterpret_cast<uint16_t*>(_writeBuffer.i) = htons(static_cast<uint16_t>(_closingReason));
1462
+ if(!_incoming)
1463
+ {
1464
+ *_writeBuffer.i++ ^= _writeMask[0];
1465
+ *_writeBuffer.i++ ^= _writeMask[1];
1466
+ }
1467
+ else
1468
+ {
1469
+ _writeBuffer.i += 2;
1470
+ }
1471
+
1472
+ _writeState = WriteStateControlFrame;
1473
+ _writeBuffer.b.resize(static_cast<size_t>(_writeBuffer.i - _writeBuffer.b.begin()));
1474
+ _writeBuffer.i = _writeBuffer.b.begin();
1475
+ }
1476
+ else
1477
+ {
1478
+ assert(_state != StateClosed);
1479
+ return false; // Nothing to write in this state
1480
+ }
1481
+
1482
+ _writePayloadLength = 0;
1483
+ }
1484
+
1485
+ if(_writeState == WriteStatePayload)
1486
+ {
1487
+ //
1488
+ // For an outgoing connection, each message must be masked with a random
1489
+ // 32-bit value, so we copy the entire message into the internal buffer
1490
+ // for writing. For incoming connections, we just copy the start of the
1491
+ // message in the internal buffer after the header. If the message is
1492
+ // larger, the reminder is sent directly from the message buffer to avoid
1493
+ // copying.
1494
+ //
1495
+
1496
+ if(!_incoming && (_writePayloadLength == 0 || _writeBuffer.i == _writeBuffer.b.end()))
1497
+ {
1498
+ if(_writeBuffer.i == _writeBuffer.b.end())
1499
+ {
1500
+ _writeBuffer.i = _writeBuffer.b.begin();
1501
+ }
1502
+
1503
+ size_t n = static_cast<size_t>(buf.i - buf.b.begin());
1504
+ for(; n < buf.b.size() && _writeBuffer.i < _writeBuffer.b.end(); ++_writeBuffer.i, ++n)
1505
+ {
1506
+ *_writeBuffer.i = buf.b[n] ^ _writeMask[n % 4];
1507
+ }
1508
+ _writePayloadLength = n;
1509
+ if(_writeBuffer.i < _writeBuffer.b.end())
1510
+ {
1511
+ _writeBuffer.b.resize(static_cast<size_t>(_writeBuffer.i - _writeBuffer.b.begin()));
1512
+ }
1513
+ _writeBuffer.i = _writeBuffer.b.begin();
1514
+ }
1515
+ else if(_writePayloadLength == 0)
1516
+ {
1517
+ size_t n = min(static_cast<size_t>(_writeBuffer.b.end() - _writeBuffer.i),
1518
+ static_cast<size_t>(buf.b.end() - buf.i));
1519
+ memcpy(_writeBuffer.i, buf.i, n);
1520
+ _writeBuffer.i += n;
1521
+ buf.i += n;
1522
+ _writePayloadLength = n;
1523
+ if(_writeBuffer.i < _writeBuffer.b.end())
1524
+ {
1525
+ _writeBuffer.b.resize(static_cast<size_t>(_writeBuffer.i - _writeBuffer.b.begin()));
1526
+ }
1527
+ _writeBuffer.i = _writeBuffer.b.begin();
1528
+ }
1529
+ return true;
1530
+ }
1531
+ else
1532
+ {
1533
+ return _writeBuffer.i < _writeBuffer.b.end();
1534
+ }
1535
+ }
1536
+
1537
+ bool
1538
+ IceInternal::WSTransceiver::postWrite(Buffer& buf)
1539
+ {
1540
+ if(_state > StateOpened && _writeState == WriteStateControlFrame)
1541
+ {
1542
+ if(_writeBuffer.i == _writeBuffer.b.end())
1543
+ {
1544
+ if(_state == StatePingPending)
1545
+ {
1546
+ if(_instance->traceLevel() >= 2)
1547
+ {
1548
+ Trace out(_instance->logger(), _instance->traceCategory());
1549
+ out << "sent " << protocol() << " connection ping frame\n" << toString();
1550
+ }
1551
+ }
1552
+ else if(_state == StatePongPending)
1553
+ {
1554
+ if(_instance->traceLevel() >= 2)
1555
+ {
1556
+ Trace out(_instance->logger(), _instance->traceCategory());
1557
+ out << "sent " << protocol() << " connection pong frame\n" << toString();
1558
+ }
1559
+ }
1560
+ else if((_state == StateClosingRequestPending && !_closingInitiator) ||
1561
+ (_state == StateClosingResponsePending && _closingInitiator))
1562
+ {
1563
+ if(_instance->traceLevel() >= 2)
1564
+ {
1565
+ Trace out(_instance->logger(), _instance->traceCategory());
1566
+ out << "sent " << protocol() << " connection close frame\n" << toString();
1567
+ }
1568
+
1569
+ if(_state == StateClosingRequestPending && !_closingInitiator)
1570
+ {
1571
+ _writeState = WriteStateHeader;
1572
+ _state = StateClosingResponsePending;
1573
+ return false;
1574
+ }
1575
+ else
1576
+ {
1577
+ throw ConnectionLostException(__FILE__, __LINE__, 0);
1578
+ }
1579
+ }
1580
+ else if(_state == StateClosed)
1581
+ {
1582
+ return false;
1583
+ }
1584
+
1585
+ _state = _nextState;
1586
+ _nextState = StateOpened;
1587
+ _writeState = WriteStateHeader;
1588
+ }
1589
+ else
1590
+ {
1591
+ return true;
1592
+ }
1593
+ }
1594
+
1595
+ if((!_incoming || buf.i == buf.b.begin()) && _writePayloadLength > 0)
1596
+ {
1597
+ if(_writeBuffer.i == _writeBuffer.b.end())
1598
+ {
1599
+ buf.i = buf.b.begin() + _writePayloadLength;
1600
+ }
1601
+ }
1602
+
1603
+ if(buf.b.empty() || buf.i == buf.b.end())
1604
+ {
1605
+ _writeState = WriteStateHeader;
1606
+ if(_state == StatePingPending ||
1607
+ _state == StatePongPending ||
1608
+ (_state == StateClosingRequestPending && !_closingInitiator) ||
1609
+ (_state == StateClosingResponsePending && _closingInitiator))
1610
+ {
1611
+ return true;
1612
+ }
1613
+ }
1614
+ else if(_state == StateOpened)
1615
+ {
1616
+ return true;
1617
+ }
1618
+ return false;
1619
+ }
1620
+
1621
+ bool
1622
+ IceInternal::WSTransceiver::readBuffered(IceInternal::Buffer::Container::size_type sz)
1623
+ {
1624
+ if(_readI == _readBuffer.i)
1625
+ {
1626
+ _readBuffer.b.resize(_readBufferSize);
1627
+ _readI = _readBuffer.i = _readBuffer.b.begin();
1628
+ }
1629
+ else
1630
+ {
1631
+ size_t available = static_cast<size_t>(_readBuffer.i - _readI);
1632
+ if(available < sz)
1633
+ {
1634
+ if(_readI != &_readBuffer.b[0])
1635
+ {
1636
+ memmove(&_readBuffer.b[0], _readI, available);
1637
+ }
1638
+ _readBuffer.b.resize(max(_readBufferSize, sz));
1639
+ _readI = _readBuffer.b.begin();
1640
+ _readBuffer.i = _readI + available;
1641
+ }
1642
+ }
1643
+
1644
+ _readStart = _readBuffer.i;
1645
+ if(_readI + sz > _readBuffer.i)
1646
+ {
1647
+ return false; // Not enough read.
1648
+ }
1649
+ assert(_readBuffer.i > _readI);
1650
+ return true;
1651
+ }
1652
+
1653
+ void
1654
+ IceInternal::WSTransceiver::prepareWriteHeader(Byte opCode, IceInternal::Buffer::Container::size_type payloadLength)
1655
+ {
1656
+ //
1657
+ // We need to prepare the frame header.
1658
+ //
1659
+ _writeBuffer.b.resize(_writeBufferSize);
1660
+ _writeBuffer.i = _writeBuffer.b.begin();
1661
+
1662
+ //
1663
+ // Set the opcode - this is the one and only data frame.
1664
+ //
1665
+ *_writeBuffer.i++ = static_cast<Byte>(opCode | FLAG_FINAL);
1666
+
1667
+ //
1668
+ // Set the payload length.
1669
+ //
1670
+ if(payloadLength <= 125)
1671
+ {
1672
+ *_writeBuffer.i++ = static_cast<Byte>(payloadLength);
1673
+ }
1674
+ else if(payloadLength > 125 && payloadLength <= USHRT_MAX)
1675
+ {
1676
+ //
1677
+ // Use an extra 16 bits to encode the payload length.
1678
+ //
1679
+ *_writeBuffer.i++ = static_cast<Byte>(126);
1680
+ *reinterpret_cast<uint16_t*>(_writeBuffer.i) = htons(static_cast<uint16_t>(payloadLength));
1681
+ _writeBuffer.i += 2;
1682
+ }
1683
+ else if(payloadLength > USHRT_MAX)
1684
+ {
1685
+ //
1686
+ // Use an extra 64 bits to encode the payload length.
1687
+ //
1688
+ *_writeBuffer.i++ = static_cast<Byte>(127);
1689
+ ice_htonll(static_cast<Long>(payloadLength), _writeBuffer.i);
1690
+ _writeBuffer.i += 8;
1691
+ }
1692
+
1693
+ if(!_incoming)
1694
+ {
1695
+ //
1696
+ // Add a random 32-bit mask to every outgoing frame, copy the payload data,
1697
+ // and apply the mask.
1698
+ //
1699
+ _writeBuffer.b[1] |= FLAG_MASKED;
1700
+ IceUtilInternal::generateRandom(reinterpret_cast<char*>(_writeMask), sizeof(_writeMask));
1701
+ memcpy(_writeBuffer.i, _writeMask, sizeof(_writeMask));
1702
+ _writeBuffer.i += sizeof(_writeMask);
1703
+ }
1704
+ }