zeroc-ice 3.6b1

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 (675) hide show
  1. checksums.yaml +7 -0
  2. data/ICE_LICENSE +54 -0
  3. data/LICENSE +339 -0
  4. data/bin/slice2rb +17 -0
  5. data/ext/Communicator.cpp +596 -0
  6. data/ext/Communicator.h +25 -0
  7. data/ext/Config.h +111 -0
  8. data/ext/Connection.cpp +381 -0
  9. data/ext/Connection.h +26 -0
  10. data/ext/Endpoint.cpp +311 -0
  11. data/ext/Endpoint.h +27 -0
  12. data/ext/ImplicitContext.cpp +152 -0
  13. data/ext/ImplicitContext.h +25 -0
  14. data/ext/Init.cpp +52 -0
  15. data/ext/Logger.cpp +151 -0
  16. data/ext/Logger.h +28 -0
  17. data/ext/ObjectFactory.cpp +140 -0
  18. data/ext/ObjectFactory.h +50 -0
  19. data/ext/Operation.cpp +676 -0
  20. data/ext/Operation.h +36 -0
  21. data/ext/Properties.cpp +369 -0
  22. data/ext/Properties.h +25 -0
  23. data/ext/Proxy.cpp +1354 -0
  24. data/ext/Proxy.h +27 -0
  25. data/ext/Slice.cpp +223 -0
  26. data/ext/Slice.h +22 -0
  27. data/ext/Types.cpp +3160 -0
  28. data/ext/Types.h +545 -0
  29. data/ext/Util.cpp +792 -0
  30. data/ext/Util.h +511 -0
  31. data/ext/extconf.rb +118 -0
  32. data/ext/ice/BZIP_LICENSE +42 -0
  33. data/ext/ice/MCPP_LICENSE +36 -0
  34. data/ext/ice/bzip2/blocksort.c +1094 -0
  35. data/ext/ice/bzip2/bzlib.c +1572 -0
  36. data/ext/ice/bzip2/bzlib.h +282 -0
  37. data/ext/ice/bzip2/bzlib_private.h +509 -0
  38. data/ext/ice/bzip2/compress.c +672 -0
  39. data/ext/ice/bzip2/crctable.c +104 -0
  40. data/ext/ice/bzip2/decompress.c +646 -0
  41. data/ext/ice/bzip2/huffman.c +205 -0
  42. data/ext/ice/bzip2/randtable.c +84 -0
  43. data/ext/ice/cpp/include/Ice/ACMF.h +30 -0
  44. data/ext/ice/cpp/include/Ice/Application.h +156 -0
  45. data/ext/ice/cpp/include/Ice/AsyncResult.h +363 -0
  46. data/ext/ice/cpp/include/Ice/AsyncResultF.h +26 -0
  47. data/ext/ice/cpp/include/Ice/BasicStream.h +1315 -0
  48. data/ext/ice/cpp/include/Ice/Buffer.h +159 -0
  49. data/ext/ice/cpp/include/Ice/BuiltinSequences.h +74 -0
  50. data/ext/ice/cpp/include/Ice/Communicator.h +194 -0
  51. data/ext/ice/cpp/include/Ice/CommunicatorAsync.h +115 -0
  52. data/ext/ice/cpp/include/Ice/CommunicatorF.h +60 -0
  53. data/ext/ice/cpp/include/Ice/Config.h +97 -0
  54. data/ext/ice/cpp/include/Ice/Connection.h +495 -0
  55. data/ext/ice/cpp/include/Ice/ConnectionAsync.h +115 -0
  56. data/ext/ice/cpp/include/Ice/ConnectionF.h +72 -0
  57. data/ext/ice/cpp/include/Ice/ConnectionFactoryF.h +30 -0
  58. data/ext/ice/cpp/include/Ice/ConnectionIF.h +37 -0
  59. data/ext/ice/cpp/include/Ice/Current.h +94 -0
  60. data/ext/ice/cpp/include/Ice/DefaultObjectFactory.h +48 -0
  61. data/ext/ice/cpp/include/Ice/DeprecatedStringConverter.h +62 -0
  62. data/ext/ice/cpp/include/Ice/DispatchInterceptor.h +33 -0
  63. data/ext/ice/cpp/include/Ice/Dispatcher.h +51 -0
  64. data/ext/ice/cpp/include/Ice/DynamicLibrary.h +105 -0
  65. data/ext/ice/cpp/include/Ice/DynamicLibraryF.h +29 -0
  66. data/ext/ice/cpp/include/Ice/Endpoint.h +350 -0
  67. data/ext/ice/cpp/include/Ice/EndpointF.h +97 -0
  68. data/ext/ice/cpp/include/Ice/EndpointTypes.h +74 -0
  69. data/ext/ice/cpp/include/Ice/Exception.h +114 -0
  70. data/ext/ice/cpp/include/Ice/FacetMap.h +56 -0
  71. data/ext/ice/cpp/include/Ice/FactoryTable.h +69 -0
  72. data/ext/ice/cpp/include/Ice/FactoryTableInit.h +87 -0
  73. data/ext/ice/cpp/include/Ice/Format.h +39 -0
  74. data/ext/ice/cpp/include/Ice/Functional.h +138 -0
  75. data/ext/ice/cpp/include/Ice/GCObject.h +73 -0
  76. data/ext/ice/cpp/include/Ice/Handle.h +192 -0
  77. data/ext/ice/cpp/include/Ice/Ice.h +54 -0
  78. data/ext/ice/cpp/include/Ice/Identity.h +160 -0
  79. data/ext/ice/cpp/include/Ice/ImplicitContext.h +96 -0
  80. data/ext/ice/cpp/include/Ice/ImplicitContextF.h +60 -0
  81. data/ext/ice/cpp/include/Ice/Incoming.h +131 -0
  82. data/ext/ice/cpp/include/Ice/IncomingAsync.h +108 -0
  83. data/ext/ice/cpp/include/Ice/IncomingAsyncF.h +35 -0
  84. data/ext/ice/cpp/include/Ice/Initialize.h +141 -0
  85. data/ext/ice/cpp/include/Ice/InstanceF.h +26 -0
  86. data/ext/ice/cpp/include/Ice/Instrumentation.h +377 -0
  87. data/ext/ice/cpp/include/Ice/InstrumentationF.h +71 -0
  88. data/ext/ice/cpp/include/Ice/LocalException.h +1022 -0
  89. data/ext/ice/cpp/include/Ice/LocalObject.h +36 -0
  90. data/ext/ice/cpp/include/Ice/LocalObjectF.h +26 -0
  91. data/ext/ice/cpp/include/Ice/Locator.h +2191 -0
  92. data/ext/ice/cpp/include/Ice/LocatorF.h +89 -0
  93. data/ext/ice/cpp/include/Ice/Logger.h +94 -0
  94. data/ext/ice/cpp/include/Ice/LoggerF.h +60 -0
  95. data/ext/ice/cpp/include/Ice/LoggerUtil.h +153 -0
  96. data/ext/ice/cpp/include/Ice/Makefile +26 -0
  97. data/ext/ice/cpp/include/Ice/Metrics.h +2989 -0
  98. data/ext/ice/cpp/include/Ice/MetricsAdminI.h +662 -0
  99. data/ext/ice/cpp/include/Ice/MetricsFunctional.h +144 -0
  100. data/ext/ice/cpp/include/Ice/MetricsObserverI.h +576 -0
  101. data/ext/ice/cpp/include/Ice/NativePropertiesAdmin.h +55 -0
  102. data/ext/ice/cpp/include/Ice/Object.h +165 -0
  103. data/ext/ice/cpp/include/Ice/ObjectAdapter.h +162 -0
  104. data/ext/ice/cpp/include/Ice/ObjectAdapterF.h +60 -0
  105. data/ext/ice/cpp/include/Ice/ObjectAdapterFactoryF.h +26 -0
  106. data/ext/ice/cpp/include/Ice/ObjectF.h +26 -0
  107. data/ext/ice/cpp/include/Ice/ObjectFactory.h +86 -0
  108. data/ext/ice/cpp/include/Ice/ObjectFactoryF.h +60 -0
  109. data/ext/ice/cpp/include/Ice/ObjectFactoryManagerF.h +26 -0
  110. data/ext/ice/cpp/include/Ice/ObserverHelper.h +177 -0
  111. data/ext/ice/cpp/include/Ice/Outgoing.h +197 -0
  112. data/ext/ice/cpp/include/Ice/OutgoingAsync.h +264 -0
  113. data/ext/ice/cpp/include/Ice/OutgoingAsyncF.h +38 -0
  114. data/ext/ice/cpp/include/Ice/Plugin.h +121 -0
  115. data/ext/ice/cpp/include/Ice/PluginF.h +66 -0
  116. data/ext/ice/cpp/include/Ice/Process.h +568 -0
  117. data/ext/ice/cpp/include/Ice/ProcessF.h +77 -0
  118. data/ext/ice/cpp/include/Ice/Properties.h +130 -0
  119. data/ext/ice/cpp/include/Ice/PropertiesAdmin.h +824 -0
  120. data/ext/ice/cpp/include/Ice/PropertiesF.h +83 -0
  121. data/ext/ice/cpp/include/Ice/Protocol.h +242 -0
  122. data/ext/ice/cpp/include/Ice/Proxy.h +2448 -0
  123. data/ext/ice/cpp/include/Ice/ProxyF.h +78 -0
  124. data/ext/ice/cpp/include/Ice/ProxyFactoryF.h +26 -0
  125. data/ext/ice/cpp/include/Ice/ProxyHandle.h +330 -0
  126. data/ext/ice/cpp/include/Ice/ReferenceF.h +34 -0
  127. data/ext/ice/cpp/include/Ice/RemoteLogger.h +1496 -0
  128. data/ext/ice/cpp/include/Ice/RequestHandlerF.h +29 -0
  129. data/ext/ice/cpp/include/Ice/ResponseHandlerF.h +25 -0
  130. data/ext/ice/cpp/include/Ice/Router.h +1155 -0
  131. data/ext/ice/cpp/include/Ice/RouterF.h +77 -0
  132. data/ext/ice/cpp/include/Ice/ServantLocator.h +90 -0
  133. data/ext/ice/cpp/include/Ice/ServantLocatorF.h +60 -0
  134. data/ext/ice/cpp/include/Ice/ServantManagerF.h +26 -0
  135. data/ext/ice/cpp/include/Ice/Service.h +260 -0
  136. data/ext/ice/cpp/include/Ice/SliceChecksumDict.h +56 -0
  137. data/ext/ice/cpp/include/Ice/SliceChecksums.h +34 -0
  138. data/ext/ice/cpp/include/Ice/SlicedData.h +103 -0
  139. data/ext/ice/cpp/include/Ice/SlicedDataF.h +34 -0
  140. data/ext/ice/cpp/include/Ice/Stream.h +449 -0
  141. data/ext/ice/cpp/include/Ice/StreamF.h +30 -0
  142. data/ext/ice/cpp/include/Ice/StreamHelpers.h +877 -0
  143. data/ext/ice/cpp/include/Ice/ThreadPoolF.h +28 -0
  144. data/ext/ice/cpp/include/Ice/UserExceptionFactory.h +56 -0
  145. data/ext/ice/cpp/include/Ice/Version.h +254 -0
  146. data/ext/ice/cpp/include/IceSSL/Config.h +23 -0
  147. data/ext/ice/cpp/include/IceSSL/ConnectionInfo.h +119 -0
  148. data/ext/ice/cpp/include/IceSSL/EndpointInfo.h +101 -0
  149. data/ext/ice/cpp/include/IceSSL/IceSSL.h +22 -0
  150. data/ext/ice/cpp/include/IceSSL/Makefile +26 -0
  151. data/ext/ice/cpp/include/IceSSL/Plugin.h +558 -0
  152. data/ext/ice/cpp/include/IceUtil/AbstractMutex.h +119 -0
  153. data/ext/ice/cpp/include/IceUtil/Cache.h +362 -0
  154. data/ext/ice/cpp/include/IceUtil/Cond.h +323 -0
  155. data/ext/ice/cpp/include/IceUtil/Config.h +234 -0
  156. data/ext/ice/cpp/include/IceUtil/CountDownLatch.h +50 -0
  157. data/ext/ice/cpp/include/IceUtil/CtrlCHandler.h +70 -0
  158. data/ext/ice/cpp/include/IceUtil/DisableWarnings.h +45 -0
  159. data/ext/ice/cpp/include/IceUtil/Exception.h +184 -0
  160. data/ext/ice/cpp/include/IceUtil/Functional.h +389 -0
  161. data/ext/ice/cpp/include/IceUtil/Handle.h +266 -0
  162. data/ext/ice/cpp/include/IceUtil/IceUtil.h +51 -0
  163. data/ext/ice/cpp/include/IceUtil/IconvStringConverter.h +302 -0
  164. data/ext/ice/cpp/include/IceUtil/InputUtil.h +47 -0
  165. data/ext/ice/cpp/include/IceUtil/Iterator.h +36 -0
  166. data/ext/ice/cpp/include/IceUtil/Lock.h +135 -0
  167. data/ext/ice/cpp/include/IceUtil/Makefile +26 -0
  168. data/ext/ice/cpp/include/IceUtil/Monitor.h +249 -0
  169. data/ext/ice/cpp/include/IceUtil/Mutex.h +357 -0
  170. data/ext/ice/cpp/include/IceUtil/MutexProtocol.h +28 -0
  171. data/ext/ice/cpp/include/IceUtil/MutexPtrLock.h +83 -0
  172. data/ext/ice/cpp/include/IceUtil/MutexPtrTryLock.h +82 -0
  173. data/ext/ice/cpp/include/IceUtil/Optional.h +322 -0
  174. data/ext/ice/cpp/include/IceUtil/Options.h +141 -0
  175. data/ext/ice/cpp/include/IceUtil/OutputUtil.h +362 -0
  176. data/ext/ice/cpp/include/IceUtil/PopDisableWarnings.h +19 -0
  177. data/ext/ice/cpp/include/IceUtil/PushDisableWarnings.h +26 -0
  178. data/ext/ice/cpp/include/IceUtil/Random.h +24 -0
  179. data/ext/ice/cpp/include/IceUtil/RecMutex.h +113 -0
  180. data/ext/ice/cpp/include/IceUtil/SHA1.h +65 -0
  181. data/ext/ice/cpp/include/IceUtil/ScannerConfig.h +44 -0
  182. data/ext/ice/cpp/include/IceUtil/ScopedArray.h +97 -0
  183. data/ext/ice/cpp/include/IceUtil/Shared.h +168 -0
  184. data/ext/ice/cpp/include/IceUtil/StringConverter.h +175 -0
  185. data/ext/ice/cpp/include/IceUtil/StringUtil.h +91 -0
  186. data/ext/ice/cpp/include/IceUtil/Thread.h +181 -0
  187. data/ext/ice/cpp/include/IceUtil/ThreadException.h +108 -0
  188. data/ext/ice/cpp/include/IceUtil/Time.h +209 -0
  189. data/ext/ice/cpp/include/IceUtil/Timer.h +143 -0
  190. data/ext/ice/cpp/include/IceUtil/UUID.h +22 -0
  191. data/ext/ice/cpp/include/IceUtil/UndefSysMacros.h +42 -0
  192. data/ext/ice/cpp/include/IceUtil/UniquePtr.h +101 -0
  193. data/ext/ice/cpp/include/Slice/CPlusPlusUtil.h +64 -0
  194. data/ext/ice/cpp/include/Slice/Checksum.h +26 -0
  195. data/ext/ice/cpp/include/Slice/CsUtil.h +92 -0
  196. data/ext/ice/cpp/include/Slice/DotNetNames.h +34 -0
  197. data/ext/ice/cpp/include/Slice/FileTracker.h +71 -0
  198. data/ext/ice/cpp/include/Slice/JavaUtil.h +277 -0
  199. data/ext/ice/cpp/include/Slice/Makefile +26 -0
  200. data/ext/ice/cpp/include/Slice/PHPUtil.h +50 -0
  201. data/ext/ice/cpp/include/Slice/Parser.h +1116 -0
  202. data/ext/ice/cpp/include/Slice/Preprocessor.h +68 -0
  203. data/ext/ice/cpp/include/Slice/PythonUtil.h +64 -0
  204. data/ext/ice/cpp/include/Slice/RubyUtil.h +54 -0
  205. data/ext/ice/cpp/include/Slice/Util.h +33 -0
  206. data/ext/ice/cpp/src/Ice/ACM.cpp +343 -0
  207. data/ext/ice/cpp/src/Ice/ACM.h +117 -0
  208. data/ext/ice/cpp/src/Ice/Acceptor.cpp +16 -0
  209. data/ext/ice/cpp/src/Ice/Acceptor.h +41 -0
  210. data/ext/ice/cpp/src/Ice/AcceptorF.h +30 -0
  211. data/ext/ice/cpp/src/Ice/Application.cpp +760 -0
  212. data/ext/ice/cpp/src/Ice/AsyncResult.cpp +599 -0
  213. data/ext/ice/cpp/src/Ice/Base64.cpp +269 -0
  214. data/ext/ice/cpp/src/Ice/Base64.h +36 -0
  215. data/ext/ice/cpp/src/Ice/BasicStream.cpp +3393 -0
  216. data/ext/ice/cpp/src/Ice/Buffer.cpp +98 -0
  217. data/ext/ice/cpp/src/Ice/BuiltinSequences.cpp +34 -0
  218. data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.cpp +718 -0
  219. data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.h +106 -0
  220. data/ext/ice/cpp/src/Ice/Communicator.cpp +45 -0
  221. data/ext/ice/cpp/src/Ice/CommunicatorF.cpp +38 -0
  222. data/ext/ice/cpp/src/Ice/CommunicatorI.cpp +386 -0
  223. data/ext/ice/cpp/src/Ice/CommunicatorI.h +112 -0
  224. data/ext/ice/cpp/src/Ice/ConnectRequestHandler.cpp +546 -0
  225. data/ext/ice/cpp/src/Ice/ConnectRequestHandler.h +97 -0
  226. data/ext/ice/cpp/src/Ice/Connection.cpp +58 -0
  227. data/ext/ice/cpp/src/Ice/ConnectionF.cpp +38 -0
  228. data/ext/ice/cpp/src/Ice/ConnectionFactory.cpp +1639 -0
  229. data/ext/ice/cpp/src/Ice/ConnectionFactory.h +236 -0
  230. data/ext/ice/cpp/src/Ice/ConnectionI.cpp +3876 -0
  231. data/ext/ice/cpp/src/Ice/ConnectionI.h +364 -0
  232. data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.cpp +115 -0
  233. data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.h +50 -0
  234. data/ext/ice/cpp/src/Ice/Connector.cpp +16 -0
  235. data/ext/ice/cpp/src/Ice/Connector.h +36 -0
  236. data/ext/ice/cpp/src/Ice/ConnectorF.h +26 -0
  237. data/ext/ice/cpp/src/Ice/Current.cpp +38 -0
  238. data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.cpp +168 -0
  239. data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.h +57 -0
  240. data/ext/ice/cpp/src/Ice/DefaultsAndOverridesF.h +26 -0
  241. data/ext/ice/cpp/src/Ice/DeprecatedStringConverter.cpp +60 -0
  242. data/ext/ice/cpp/src/Ice/DispatchInterceptor.cpp +49 -0
  243. data/ext/ice/cpp/src/Ice/DynamicLibrary.cpp +281 -0
  244. data/ext/ice/cpp/src/Ice/Endpoint.cpp +53 -0
  245. data/ext/ice/cpp/src/Ice/EndpointF.cpp +38 -0
  246. data/ext/ice/cpp/src/Ice/EndpointFactory.cpp +25 -0
  247. data/ext/ice/cpp/src/Ice/EndpointFactory.h +44 -0
  248. data/ext/ice/cpp/src/Ice/EndpointFactoryF.h +26 -0
  249. data/ext/ice/cpp/src/Ice/EndpointFactoryManager.cpp +208 -0
  250. data/ext/ice/cpp/src/Ice/EndpointFactoryManager.h +46 -0
  251. data/ext/ice/cpp/src/Ice/EndpointFactoryManagerF.h +26 -0
  252. data/ext/ice/cpp/src/Ice/EndpointI.cpp +87 -0
  253. data/ext/ice/cpp/src/Ice/EndpointI.h +165 -0
  254. data/ext/ice/cpp/src/Ice/EndpointIF.h +41 -0
  255. data/ext/ice/cpp/src/Ice/EndpointTypes.cpp +38 -0
  256. data/ext/ice/cpp/src/Ice/EventHandler.cpp +35 -0
  257. data/ext/ice/cpp/src/Ice/EventHandler.h +78 -0
  258. data/ext/ice/cpp/src/Ice/EventHandlerF.h +26 -0
  259. data/ext/ice/cpp/src/Ice/EventLoggerMsg.h +53 -0
  260. data/ext/ice/cpp/src/Ice/Exception.cpp +832 -0
  261. data/ext/ice/cpp/src/Ice/FacetMap.cpp +34 -0
  262. data/ext/ice/cpp/src/Ice/FactoryTable.cpp +158 -0
  263. data/ext/ice/cpp/src/Ice/FactoryTableInit.cpp +95 -0
  264. data/ext/ice/cpp/src/Ice/GCObject.cpp +444 -0
  265. data/ext/ice/cpp/src/Ice/HashUtil.h +59 -0
  266. data/ext/ice/cpp/src/Ice/HttpParser.cpp +680 -0
  267. data/ext/ice/cpp/src/Ice/HttpParser.h +124 -0
  268. data/ext/ice/cpp/src/Ice/IPEndpointI.cpp +733 -0
  269. data/ext/ice/cpp/src/Ice/IPEndpointI.h +157 -0
  270. data/ext/ice/cpp/src/Ice/IPEndpointIF.h +29 -0
  271. data/ext/ice/cpp/src/Ice/Identity.cpp +42 -0
  272. data/ext/ice/cpp/src/Ice/ImplicitContext.cpp +41 -0
  273. data/ext/ice/cpp/src/Ice/ImplicitContextF.cpp +38 -0
  274. data/ext/ice/cpp/src/Ice/ImplicitContextI.cpp +639 -0
  275. data/ext/ice/cpp/src/Ice/ImplicitContextI.h +51 -0
  276. data/ext/ice/cpp/src/Ice/Incoming.cpp +757 -0
  277. data/ext/ice/cpp/src/Ice/IncomingAsync.cpp +340 -0
  278. data/ext/ice/cpp/src/Ice/IncomingRequest.h +37 -0
  279. data/ext/ice/cpp/src/Ice/Initialize.cpp +401 -0
  280. data/ext/ice/cpp/src/Ice/Instance.cpp +1928 -0
  281. data/ext/ice/cpp/src/Ice/Instance.h +198 -0
  282. data/ext/ice/cpp/src/Ice/Instrumentation.cpp +68 -0
  283. data/ext/ice/cpp/src/Ice/InstrumentationF.cpp +43 -0
  284. data/ext/ice/cpp/src/Ice/InstrumentationI.cpp +1083 -0
  285. data/ext/ice/cpp/src/Ice/InstrumentationI.h +262 -0
  286. data/ext/ice/cpp/src/Ice/LocalException.cpp +2091 -0
  287. data/ext/ice/cpp/src/Ice/LocalObject.cpp +29 -0
  288. data/ext/ice/cpp/src/Ice/Locator.cpp +1946 -0
  289. data/ext/ice/cpp/src/Ice/LocatorF.cpp +39 -0
  290. data/ext/ice/cpp/src/Ice/LocatorInfo.cpp +917 -0
  291. data/ext/ice/cpp/src/Ice/LocatorInfo.h +193 -0
  292. data/ext/ice/cpp/src/Ice/LocatorInfoF.h +34 -0
  293. data/ext/ice/cpp/src/Ice/Logger.cpp +40 -0
  294. data/ext/ice/cpp/src/Ice/LoggerAdminI.cpp +862 -0
  295. data/ext/ice/cpp/src/Ice/LoggerAdminI.h +46 -0
  296. data/ext/ice/cpp/src/Ice/LoggerF.cpp +38 -0
  297. data/ext/ice/cpp/src/Ice/LoggerI.cpp +199 -0
  298. data/ext/ice/cpp/src/Ice/LoggerI.h +57 -0
  299. data/ext/ice/cpp/src/Ice/LoggerUtil.cpp +107 -0
  300. data/ext/ice/cpp/src/Ice/Makefile +190 -0
  301. data/ext/ice/cpp/src/Ice/Metrics.cpp +2159 -0
  302. data/ext/ice/cpp/src/Ice/MetricsAdminI.cpp +669 -0
  303. data/ext/ice/cpp/src/Ice/MetricsObserverI.cpp +14 -0
  304. data/ext/ice/cpp/src/Ice/Network.cpp +2694 -0
  305. data/ext/ice/cpp/src/Ice/Network.h +291 -0
  306. data/ext/ice/cpp/src/Ice/NetworkF.h +28 -0
  307. data/ext/ice/cpp/src/Ice/NetworkProxy.cpp +325 -0
  308. data/ext/ice/cpp/src/Ice/NetworkProxy.h +74 -0
  309. data/ext/ice/cpp/src/Ice/NetworkProxyF.h +26 -0
  310. data/ext/ice/cpp/src/Ice/Object.cpp +440 -0
  311. data/ext/ice/cpp/src/Ice/ObjectAdapter.cpp +41 -0
  312. data/ext/ice/cpp/src/Ice/ObjectAdapterF.cpp +38 -0
  313. data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.cpp +241 -0
  314. data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.h +52 -0
  315. data/ext/ice/cpp/src/Ice/ObjectAdapterI.cpp +1498 -0
  316. data/ext/ice/cpp/src/Ice/ObjectAdapterI.h +155 -0
  317. data/ext/ice/cpp/src/Ice/ObjectFactory.cpp +41 -0
  318. data/ext/ice/cpp/src/Ice/ObjectFactoryF.cpp +38 -0
  319. data/ext/ice/cpp/src/Ice/ObjectFactoryManager.cpp +140 -0
  320. data/ext/ice/cpp/src/Ice/ObjectFactoryManager.h +43 -0
  321. data/ext/ice/cpp/src/Ice/ObserverHelper.cpp +84 -0
  322. data/ext/ice/cpp/src/Ice/OpaqueEndpointI.cpp +407 -0
  323. data/ext/ice/cpp/src/Ice/OpaqueEndpointI.h +70 -0
  324. data/ext/ice/cpp/src/Ice/Outgoing.cpp +737 -0
  325. data/ext/ice/cpp/src/Ice/OutgoingAsync.cpp +874 -0
  326. data/ext/ice/cpp/src/Ice/Plugin.cpp +43 -0
  327. data/ext/ice/cpp/src/Ice/PluginF.cpp +38 -0
  328. data/ext/ice/cpp/src/Ice/PluginManagerI.cpp +503 -0
  329. data/ext/ice/cpp/src/Ice/PluginManagerI.h +67 -0
  330. data/ext/ice/cpp/src/Ice/Process.cpp +299 -0
  331. data/ext/ice/cpp/src/Ice/ProcessF.cpp +39 -0
  332. data/ext/ice/cpp/src/Ice/Properties.cpp +45 -0
  333. data/ext/ice/cpp/src/Ice/PropertiesAdmin.cpp +555 -0
  334. data/ext/ice/cpp/src/Ice/PropertiesAdminI.cpp +207 -0
  335. data/ext/ice/cpp/src/Ice/PropertiesAdminI.h +45 -0
  336. data/ext/ice/cpp/src/Ice/PropertiesF.cpp +39 -0
  337. data/ext/ice/cpp/src/Ice/PropertiesI.cpp +759 -0
  338. data/ext/ice/cpp/src/Ice/PropertiesI.h +78 -0
  339. data/ext/ice/cpp/src/Ice/PropertyNames.cpp +1293 -0
  340. data/ext/ice/cpp/src/Ice/PropertyNames.h +81 -0
  341. data/ext/ice/cpp/src/Ice/Protocol.cpp +137 -0
  342. data/ext/ice/cpp/src/Ice/ProtocolInstance.cpp +98 -0
  343. data/ext/ice/cpp/src/Ice/ProtocolInstance.h +91 -0
  344. data/ext/ice/cpp/src/Ice/ProtocolInstanceF.h +26 -0
  345. data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.cpp +51 -0
  346. data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.h +67 -0
  347. data/ext/ice/cpp/src/Ice/ProtocolPluginFacadeF.h +26 -0
  348. data/ext/ice/cpp/src/Ice/Proxy.cpp +1810 -0
  349. data/ext/ice/cpp/src/Ice/ProxyFactory.cpp +305 -0
  350. data/ext/ice/cpp/src/Ice/ProxyFactory.h +57 -0
  351. data/ext/ice/cpp/src/Ice/Reference.cpp +1947 -0
  352. data/ext/ice/cpp/src/Ice/Reference.h +305 -0
  353. data/ext/ice/cpp/src/Ice/ReferenceFactory.cpp +937 -0
  354. data/ext/ice/cpp/src/Ice/ReferenceFactory.h +81 -0
  355. data/ext/ice/cpp/src/Ice/ReferenceFactoryF.h +24 -0
  356. data/ext/ice/cpp/src/Ice/RemoteLogger.cpp +958 -0
  357. data/ext/ice/cpp/src/Ice/ReplyStatus.h +29 -0
  358. data/ext/ice/cpp/src/Ice/RequestHandler.cpp +40 -0
  359. data/ext/ice/cpp/src/Ice/RequestHandler.h +90 -0
  360. data/ext/ice/cpp/src/Ice/RequestHandlerFactory.cpp +70 -0
  361. data/ext/ice/cpp/src/Ice/RequestHandlerFactory.h +41 -0
  362. data/ext/ice/cpp/src/Ice/ResponseHandler.cpp +20 -0
  363. data/ext/ice/cpp/src/Ice/ResponseHandler.h +39 -0
  364. data/ext/ice/cpp/src/Ice/RetryQueue.cpp +154 -0
  365. data/ext/ice/cpp/src/Ice/RetryQueue.h +69 -0
  366. data/ext/ice/cpp/src/Ice/RetryQueueF.h +24 -0
  367. data/ext/ice/cpp/src/Ice/Router.cpp +849 -0
  368. data/ext/ice/cpp/src/Ice/RouterF.cpp +39 -0
  369. data/ext/ice/cpp/src/Ice/RouterInfo.cpp +381 -0
  370. data/ext/ice/cpp/src/Ice/RouterInfo.h +148 -0
  371. data/ext/ice/cpp/src/Ice/RouterInfoF.h +30 -0
  372. data/ext/ice/cpp/src/Ice/Selector.cpp +926 -0
  373. data/ext/ice/cpp/src/Ice/Selector.h +231 -0
  374. data/ext/ice/cpp/src/Ice/ServantLocator.cpp +41 -0
  375. data/ext/ice/cpp/src/Ice/ServantLocatorF.cpp +38 -0
  376. data/ext/ice/cpp/src/Ice/ServantManager.cpp +495 -0
  377. data/ext/ice/cpp/src/Ice/ServantManager.h +74 -0
  378. data/ext/ice/cpp/src/Ice/Service.cpp +1897 -0
  379. data/ext/ice/cpp/src/Ice/SharedContext.h +51 -0
  380. data/ext/ice/cpp/src/Ice/SliceChecksumDict.cpp +34 -0
  381. data/ext/ice/cpp/src/Ice/SliceChecksums.cpp +80 -0
  382. data/ext/ice/cpp/src/Ice/SlicedData.cpp +80 -0
  383. data/ext/ice/cpp/src/Ice/Stream.cpp +53 -0
  384. data/ext/ice/cpp/src/Ice/StreamI.cpp +832 -0
  385. data/ext/ice/cpp/src/Ice/StreamI.h +198 -0
  386. data/ext/ice/cpp/src/Ice/StreamSocket.cpp +521 -0
  387. data/ext/ice/cpp/src/Ice/StreamSocket.h +85 -0
  388. data/ext/ice/cpp/src/Ice/StringConverterPlugin.cpp +145 -0
  389. data/ext/ice/cpp/src/Ice/SysLoggerI.cpp +167 -0
  390. data/ext/ice/cpp/src/Ice/SysLoggerI.h +43 -0
  391. data/ext/ice/cpp/src/Ice/TcpAcceptor.cpp +235 -0
  392. data/ext/ice/cpp/src/Ice/TcpAcceptor.h +67 -0
  393. data/ext/ice/cpp/src/Ice/TcpConnector.cpp +133 -0
  394. data/ext/ice/cpp/src/Ice/TcpConnector.h +51 -0
  395. data/ext/ice/cpp/src/Ice/TcpEndpointI.cpp +397 -0
  396. data/ext/ice/cpp/src/Ice/TcpEndpointI.h +93 -0
  397. data/ext/ice/cpp/src/Ice/TcpTransceiver.cpp +127 -0
  398. data/ext/ice/cpp/src/Ice/TcpTransceiver.h +61 -0
  399. data/ext/ice/cpp/src/Ice/ThreadPool.cpp +1357 -0
  400. data/ext/ice/cpp/src/Ice/ThreadPool.h +399 -0
  401. data/ext/ice/cpp/src/Ice/TraceLevels.cpp +43 -0
  402. data/ext/ice/cpp/src/Ice/TraceLevels.h +50 -0
  403. data/ext/ice/cpp/src/Ice/TraceLevelsF.h +26 -0
  404. data/ext/ice/cpp/src/Ice/TraceUtil.cpp +452 -0
  405. data/ext/ice/cpp/src/Ice/TraceUtil.h +28 -0
  406. data/ext/ice/cpp/src/Ice/Transceiver.cpp +24 -0
  407. data/ext/ice/cpp/src/Ice/Transceiver.h +52 -0
  408. data/ext/ice/cpp/src/Ice/TransceiverF.h +38 -0
  409. data/ext/ice/cpp/src/Ice/UdpConnector.cpp +144 -0
  410. data/ext/ice/cpp/src/Ice/UdpConnector.h +51 -0
  411. data/ext/ice/cpp/src/Ice/UdpEndpointI.cpp +483 -0
  412. data/ext/ice/cpp/src/Ice/UdpEndpointI.h +95 -0
  413. data/ext/ice/cpp/src/Ice/UdpTransceiver.cpp +1156 -0
  414. data/ext/ice/cpp/src/Ice/UdpTransceiver.h +123 -0
  415. data/ext/ice/cpp/src/Ice/Version.cpp +46 -0
  416. data/ext/ice/cpp/src/Ice/WSAcceptor.cpp +103 -0
  417. data/ext/ice/cpp/src/Ice/WSAcceptor.h +61 -0
  418. data/ext/ice/cpp/src/Ice/WSConnector.cpp +113 -0
  419. data/ext/ice/cpp/src/Ice/WSConnector.h +51 -0
  420. data/ext/ice/cpp/src/Ice/WSEndpoint.cpp +441 -0
  421. data/ext/ice/cpp/src/Ice/WSEndpoint.h +97 -0
  422. data/ext/ice/cpp/src/Ice/WSTransceiver.cpp +1728 -0
  423. data/ext/ice/cpp/src/Ice/WSTransceiver.h +149 -0
  424. data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.cpp +594 -0
  425. data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.h +1035 -0
  426. data/ext/ice/cpp/src/IceDiscovery/LocatorI.cpp +208 -0
  427. data/ext/ice/cpp/src/IceDiscovery/LocatorI.h +78 -0
  428. data/ext/ice/cpp/src/IceDiscovery/LookupI.cpp +308 -0
  429. data/ext/ice/cpp/src/IceDiscovery/LookupI.h +183 -0
  430. data/ext/ice/cpp/src/IceDiscovery/Makefile +61 -0
  431. data/ext/ice/cpp/src/IceDiscovery/PluginI.cpp +148 -0
  432. data/ext/ice/cpp/src/IceDiscovery/PluginI.h +39 -0
  433. data/ext/ice/cpp/src/IceSSL/AcceptorI.cpp +258 -0
  434. data/ext/ice/cpp/src/IceSSL/AcceptorI.h +66 -0
  435. data/ext/ice/cpp/src/IceSSL/Certificate.cpp +1334 -0
  436. data/ext/ice/cpp/src/IceSSL/ConnectionInfo.cpp +42 -0
  437. data/ext/ice/cpp/src/IceSSL/ConnectorI.cpp +151 -0
  438. data/ext/ice/cpp/src/IceSSL/ConnectorI.h +56 -0
  439. data/ext/ice/cpp/src/IceSSL/EndpointI.cpp +397 -0
  440. data/ext/ice/cpp/src/IceSSL/EndpointI.h +96 -0
  441. data/ext/ice/cpp/src/IceSSL/EndpointInfo.cpp +41 -0
  442. data/ext/ice/cpp/src/IceSSL/Instance.cpp +38 -0
  443. data/ext/ice/cpp/src/IceSSL/Instance.h +42 -0
  444. data/ext/ice/cpp/src/IceSSL/InstanceF.h +34 -0
  445. data/ext/ice/cpp/src/IceSSL/Makefile +82 -0
  446. data/ext/ice/cpp/src/IceSSL/OpenSSLEngine.cpp +1001 -0
  447. data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.cpp +607 -0
  448. data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.h +75 -0
  449. data/ext/ice/cpp/src/IceSSL/PluginI.cpp +102 -0
  450. data/ext/ice/cpp/src/IceSSL/PluginI.h +56 -0
  451. data/ext/ice/cpp/src/IceSSL/RFC2253.cpp +541 -0
  452. data/ext/ice/cpp/src/IceSSL/RFC2253.h +67 -0
  453. data/ext/ice/cpp/src/IceSSL/SChannelEngine.cpp +729 -0
  454. data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.cpp +1062 -0
  455. data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.h +130 -0
  456. data/ext/ice/cpp/src/IceSSL/SSLEngine.cpp +291 -0
  457. data/ext/ice/cpp/src/IceSSL/SSLEngine.h +264 -0
  458. data/ext/ice/cpp/src/IceSSL/SSLEngineF.h +41 -0
  459. data/ext/ice/cpp/src/IceSSL/SecureTransportEngine.cpp +1514 -0
  460. data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.cpp +609 -0
  461. data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.h +91 -0
  462. data/ext/ice/cpp/src/IceSSL/TrustManager.cpp +246 -0
  463. data/ext/ice/cpp/src/IceSSL/TrustManager.h +51 -0
  464. data/ext/ice/cpp/src/IceSSL/TrustManagerF.h +26 -0
  465. data/ext/ice/cpp/src/IceSSL/Util.cpp +1423 -0
  466. data/ext/ice/cpp/src/IceSSL/Util.h +136 -0
  467. data/ext/ice/cpp/src/IceUtil/ArgVector.cpp +65 -0
  468. data/ext/ice/cpp/src/IceUtil/ArgVector.h +41 -0
  469. data/ext/ice/cpp/src/IceUtil/Cond.cpp +386 -0
  470. data/ext/ice/cpp/src/IceUtil/ConvertUTF.cpp +477 -0
  471. data/ext/ice/cpp/src/IceUtil/ConvertUTF.h +144 -0
  472. data/ext/ice/cpp/src/IceUtil/CountDownLatch.cpp +184 -0
  473. data/ext/ice/cpp/src/IceUtil/CtrlCHandler.cpp +273 -0
  474. data/ext/ice/cpp/src/IceUtil/Exception.cpp +782 -0
  475. data/ext/ice/cpp/src/IceUtil/FileUtil.cpp +532 -0
  476. data/ext/ice/cpp/src/IceUtil/FileUtil.h +159 -0
  477. data/ext/ice/cpp/src/IceUtil/InputUtil.cpp +41 -0
  478. data/ext/ice/cpp/src/IceUtil/Makefile +68 -0
  479. data/ext/ice/cpp/src/IceUtil/MutexProtocol.cpp +24 -0
  480. data/ext/ice/cpp/src/IceUtil/Options.cpp +1049 -0
  481. data/ext/ice/cpp/src/IceUtil/OutputUtil.cpp +591 -0
  482. data/ext/ice/cpp/src/IceUtil/Random.cpp +185 -0
  483. data/ext/ice/cpp/src/IceUtil/RecMutex.cpp +257 -0
  484. data/ext/ice/cpp/src/IceUtil/SHA1.cpp +126 -0
  485. data/ext/ice/cpp/src/IceUtil/Shared.cpp +200 -0
  486. data/ext/ice/cpp/src/IceUtil/StopWatch.h +54 -0
  487. data/ext/ice/cpp/src/IceUtil/StringConverter.cpp +450 -0
  488. data/ext/ice/cpp/src/IceUtil/StringUtil.cpp +842 -0
  489. data/ext/ice/cpp/src/IceUtil/Thread.cpp +809 -0
  490. data/ext/ice/cpp/src/IceUtil/ThreadException.cpp +172 -0
  491. data/ext/ice/cpp/src/IceUtil/Time.cpp +306 -0
  492. data/ext/ice/cpp/src/IceUtil/Timer.cpp +251 -0
  493. data/ext/ice/cpp/src/IceUtil/UUID.cpp +174 -0
  494. data/ext/ice/cpp/src/IceUtil/Unicode.cpp +131 -0
  495. data/ext/ice/cpp/src/IceUtil/Unicode.h +49 -0
  496. data/ext/ice/cpp/src/Slice/CPlusPlusUtil.cpp +1139 -0
  497. data/ext/ice/cpp/src/Slice/Checksum.cpp +452 -0
  498. data/ext/ice/cpp/src/Slice/CsUtil.cpp +2650 -0
  499. data/ext/ice/cpp/src/Slice/DotNetNames.cpp +146 -0
  500. data/ext/ice/cpp/src/Slice/FileTracker.cpp +203 -0
  501. data/ext/ice/cpp/src/Slice/Grammar.cpp +4755 -0
  502. data/ext/ice/cpp/src/Slice/Grammar.h +98 -0
  503. data/ext/ice/cpp/src/Slice/GrammarUtil.h +234 -0
  504. data/ext/ice/cpp/src/Slice/JavaUtil.cpp +4376 -0
  505. data/ext/ice/cpp/src/Slice/MD5.cpp +57 -0
  506. data/ext/ice/cpp/src/Slice/MD5.h +44 -0
  507. data/ext/ice/cpp/src/Slice/MD5I.cpp +385 -0
  508. data/ext/ice/cpp/src/Slice/MD5I.h +91 -0
  509. data/ext/ice/cpp/src/Slice/Makefile +65 -0
  510. data/ext/ice/cpp/src/Slice/PHPUtil.cpp +156 -0
  511. data/ext/ice/cpp/src/Slice/Parser.cpp +6386 -0
  512. data/ext/ice/cpp/src/Slice/Preprocessor.cpp +686 -0
  513. data/ext/ice/cpp/src/Slice/Python.cpp +675 -0
  514. data/ext/ice/cpp/src/Slice/PythonUtil.cpp +2614 -0
  515. data/ext/ice/cpp/src/Slice/Ruby.cpp +317 -0
  516. data/ext/ice/cpp/src/Slice/RubyUtil.cpp +1774 -0
  517. data/ext/ice/cpp/src/Slice/Scanner.cpp +2426 -0
  518. data/ext/ice/cpp/src/Slice/Util.cpp +325 -0
  519. data/ext/ice/mcpp/config.h.Darwin +227 -0
  520. data/ext/ice/mcpp/config.h.Linux +227 -0
  521. data/ext/ice/mcpp/config.h.MINGW +7 -0
  522. data/ext/ice/mcpp/configed.H +382 -0
  523. data/ext/ice/mcpp/directive.c +1699 -0
  524. data/ext/ice/mcpp/eval.c +1673 -0
  525. data/ext/ice/mcpp/expand.c +2980 -0
  526. data/ext/ice/mcpp/internal.H +564 -0
  527. data/ext/ice/mcpp/main.c +1131 -0
  528. data/ext/ice/mcpp/mbchar.c +869 -0
  529. data/ext/ice/mcpp/mcpp_lib.h +31 -0
  530. data/ext/ice/mcpp/mcpp_out.h +13 -0
  531. data/ext/ice/mcpp/support.c +2811 -0
  532. data/ext/ice/mcpp/system.H +396 -0
  533. data/ext/ice/mcpp/system.c +4940 -0
  534. data/ice.gemspec +41 -0
  535. data/lib/Glacier2.rb +12 -0
  536. data/lib/Glacier2/Metrics.rb +99 -0
  537. data/lib/Glacier2/PermissionsVerifier.rb +168 -0
  538. data/lib/Glacier2/PermissionsVerifierF.rb +34 -0
  539. data/lib/Glacier2/Router.rb +141 -0
  540. data/lib/Glacier2/RouterF.rb +29 -0
  541. data/lib/Glacier2/SSLInfo.rb +79 -0
  542. data/lib/Glacier2/Session.rb +470 -0
  543. data/lib/Ice.rb +659 -0
  544. data/lib/Ice/BuiltinSequences.rb +64 -0
  545. data/lib/Ice/Communicator.rb +93 -0
  546. data/lib/Ice/CommunicatorF.rb +28 -0
  547. data/lib/Ice/Connection.rb +414 -0
  548. data/lib/Ice/ConnectionF.rb +36 -0
  549. data/lib/Ice/Current.rb +152 -0
  550. data/lib/Ice/Endpoint.rb +265 -0
  551. data/lib/Ice/EndpointF.rb +52 -0
  552. data/lib/Ice/EndpointTypes.rb +77 -0
  553. data/lib/Ice/FacetMap.rb +28 -0
  554. data/lib/Ice/Identity.rb +70 -0
  555. data/lib/Ice/ImplicitContext.rb +59 -0
  556. data/lib/Ice/ImplicitContextF.rb +28 -0
  557. data/lib/Ice/Instrumentation.rb +425 -0
  558. data/lib/Ice/InstrumentationF.rb +35 -0
  559. data/lib/Ice/LocalException.rb +1081 -0
  560. data/lib/Ice/Locator.rb +314 -0
  561. data/lib/Ice/LocatorF.rb +34 -0
  562. data/lib/Ice/Logger.rb +57 -0
  563. data/lib/Ice/LoggerF.rb +28 -0
  564. data/lib/Ice/Metrics.rb +696 -0
  565. data/lib/Ice/ObjectAdapterF.rb +28 -0
  566. data/lib/Ice/ObjectFactory.rb +53 -0
  567. data/lib/Ice/ObjectFactoryF.rb +28 -0
  568. data/lib/Ice/Plugin.rb +87 -0
  569. data/lib/Ice/PluginF.rb +32 -0
  570. data/lib/Ice/Process.rb +93 -0
  571. data/lib/Ice/ProcessF.rb +29 -0
  572. data/lib/Ice/Properties.rb +65 -0
  573. data/lib/Ice/PropertiesAdmin.rb +104 -0
  574. data/lib/Ice/PropertiesF.rb +33 -0
  575. data/lib/Ice/Router.rb +163 -0
  576. data/lib/Ice/RouterF.rb +29 -0
  577. data/lib/Ice/SliceChecksumDict.rb +28 -0
  578. data/lib/Ice/Version.rb +100 -0
  579. data/lib/IceBox.rb +10 -0
  580. data/lib/IceBox/IceBox.rb +272 -0
  581. data/lib/IceGrid.rb +17 -0
  582. data/lib/IceGrid/Admin.rb +1076 -0
  583. data/lib/IceGrid/Descriptor.rb +1505 -0
  584. data/lib/IceGrid/Exception.rb +401 -0
  585. data/lib/IceGrid/FileParser.rb +105 -0
  586. data/lib/IceGrid/Locator.rb +105 -0
  587. data/lib/IceGrid/Observer.rb +571 -0
  588. data/lib/IceGrid/Query.rb +168 -0
  589. data/lib/IceGrid/Registry.rb +120 -0
  590. data/lib/IceGrid/Session.rb +114 -0
  591. data/lib/IceGrid/UserAccountMapper.rb +101 -0
  592. data/lib/IcePatch2.rb +10 -0
  593. data/lib/IcePatch2/FileInfo.rb +75 -0
  594. data/lib/IcePatch2/FileServer.rb +141 -0
  595. data/lib/IceStorm.rb +11 -0
  596. data/lib/IceStorm/IceStorm.rb +463 -0
  597. data/lib/IceStorm/Metrics.rb +155 -0
  598. data/slice/Freeze/BackgroundSaveEvictor.ice +111 -0
  599. data/slice/Freeze/CatalogData.ice +49 -0
  600. data/slice/Freeze/Connection.ice +111 -0
  601. data/slice/Freeze/ConnectionF.ice +20 -0
  602. data/slice/Freeze/DB.ice +37 -0
  603. data/slice/Freeze/Evictor.ice +339 -0
  604. data/slice/Freeze/EvictorF.ice +22 -0
  605. data/slice/Freeze/EvictorStorage.ice +72 -0
  606. data/slice/Freeze/Exception.ice +100 -0
  607. data/slice/Freeze/Transaction.ice +57 -0
  608. data/slice/Freeze/TransactionalEvictor.ice +50 -0
  609. data/slice/Glacier2/Metrics.ice +77 -0
  610. data/slice/Glacier2/PermissionsVerifier.ice +105 -0
  611. data/slice/Glacier2/PermissionsVerifierF.ice +21 -0
  612. data/slice/Glacier2/Router.ice +178 -0
  613. data/slice/Glacier2/RouterF.ice +20 -0
  614. data/slice/Glacier2/SSLInfo.ice +50 -0
  615. data/slice/Glacier2/Session.ice +273 -0
  616. data/slice/Ice/BuiltinSequences.ice +48 -0
  617. data/slice/Ice/Communicator.ice +567 -0
  618. data/slice/Ice/CommunicatorF.ice +20 -0
  619. data/slice/Ice/Connection.ice +323 -0
  620. data/slice/Ice/ConnectionF.ice +22 -0
  621. data/slice/Ice/Current.ice +160 -0
  622. data/slice/Ice/Endpoint.ice +227 -0
  623. data/slice/Ice/EndpointF.ice +32 -0
  624. data/slice/Ice/EndpointTypes.ice +38 -0
  625. data/slice/Ice/FacetMap.ice +25 -0
  626. data/slice/Ice/Identity.ice +59 -0
  627. data/slice/Ice/ImplicitContext.ice +109 -0
  628. data/slice/Ice/ImplicitContextF.ice +20 -0
  629. data/slice/Ice/Instrumentation.ice +499 -0
  630. data/slice/Ice/InstrumentationF.ice +26 -0
  631. data/slice/Ice/LocalException.ice +1015 -0
  632. data/slice/Ice/Locator.ice +227 -0
  633. data/slice/Ice/LocatorF.ice +21 -0
  634. data/slice/Ice/Logger.ice +86 -0
  635. data/slice/Ice/LoggerF.ice +20 -0
  636. data/slice/Ice/Metrics.ice +422 -0
  637. data/slice/Ice/ObjectAdapter.ice +673 -0
  638. data/slice/Ice/ObjectAdapterF.ice +20 -0
  639. data/slice/Ice/ObjectFactory.ice +60 -0
  640. data/slice/Ice/ObjectFactoryF.ice +20 -0
  641. data/slice/Ice/Plugin.ice +117 -0
  642. data/slice/Ice/PluginF.ice +21 -0
  643. data/slice/Ice/Process.ice +54 -0
  644. data/slice/Ice/ProcessF.ice +20 -0
  645. data/slice/Ice/Properties.ice +228 -0
  646. data/slice/Ice/PropertiesAdmin.ice +75 -0
  647. data/slice/Ice/PropertiesF.ice +21 -0
  648. data/slice/Ice/RemoteLogger.ice +232 -0
  649. data/slice/Ice/Router.ice +83 -0
  650. data/slice/Ice/RouterF.ice +20 -0
  651. data/slice/Ice/ServantLocator.ice +117 -0
  652. data/slice/Ice/ServantLocatorF.ice +20 -0
  653. data/slice/Ice/SliceChecksumDict.ice +25 -0
  654. data/slice/Ice/Version.ice +39 -0
  655. data/slice/IceBox/IceBox.ice +194 -0
  656. data/slice/IceDiscovery/IceDiscovery.ice +32 -0
  657. data/slice/IceGrid/Admin.ice +1578 -0
  658. data/slice/IceGrid/Descriptor.ice +1079 -0
  659. data/slice/IceGrid/Discovery.ice +73 -0
  660. data/slice/IceGrid/Exception.ice +383 -0
  661. data/slice/IceGrid/FileParser.ice +61 -0
  662. data/slice/IceGrid/Locator.ice +56 -0
  663. data/slice/IceGrid/Observer.ice +394 -0
  664. data/slice/IceGrid/PluginFacade.ice +316 -0
  665. data/slice/IceGrid/Query.ice +130 -0
  666. data/slice/IceGrid/Registry.ice +138 -0
  667. data/slice/IceGrid/Session.ice +124 -0
  668. data/slice/IceGrid/UserAccountMapper.ice +58 -0
  669. data/slice/IcePatch2/FileInfo.ice +49 -0
  670. data/slice/IcePatch2/FileServer.ice +129 -0
  671. data/slice/IceSSL/ConnectionInfo.ice +34 -0
  672. data/slice/IceSSL/EndpointInfo.ice +41 -0
  673. data/slice/IceStorm/IceStorm.ice +405 -0
  674. data/slice/IceStorm/Metrics.ice +71 -0
  675. metadata +737 -0
@@ -0,0 +1,1062 @@
1
+ // **********************************************************************
2
+ //
3
+ // Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved.
4
+ //
5
+ // This copy of Ice is licensed to you under the terms described in the
6
+ // ICE_LICENSE file included in this distribution.
7
+ //
8
+ // **********************************************************************
9
+
10
+ #include <IceSSL/SChannelTransceiverI.h>
11
+
12
+ #include <IceUtil/StringUtil.h>
13
+
14
+ #include <IceSSL/ConnectionInfo.h>
15
+ #include <IceSSL/Instance.h>
16
+ #include <IceSSL/SSLEngine.h>
17
+ #include <IceSSL/Util.h>
18
+ #include <Ice/Communicator.h>
19
+ #include <Ice/LoggerUtil.h>
20
+ #include <Ice/Buffer.h>
21
+ #include <Ice/LocalException.h>
22
+
23
+ #ifdef ICE_USE_SCHANNEL
24
+
25
+ using namespace std;
26
+ using namespace Ice;
27
+ using namespace IceSSL;
28
+
29
+ namespace
30
+ {
31
+
32
+ string
33
+ protocolName(DWORD protocol)
34
+ {
35
+ switch(protocol)
36
+ {
37
+ case SP_PROT_SSL2_CLIENT:
38
+ case SP_PROT_SSL2_SERVER:
39
+ return "SSL 2.0";
40
+ case SP_PROT_SSL3_CLIENT:
41
+ case SP_PROT_SSL3_SERVER:
42
+ return "SSL 3.0";
43
+ case SP_PROT_TLS1_CLIENT:
44
+ case SP_PROT_TLS1_SERVER:
45
+ return "TLS 1.0";
46
+ case SP_PROT_TLS1_1_CLIENT:
47
+ case SP_PROT_TLS1_1_SERVER:
48
+ return "TLS 1.1";
49
+ case SP_PROT_TLS1_2_CLIENT:
50
+ case SP_PROT_TLS1_2_SERVER:
51
+ return "TLS 1.2";
52
+ default:
53
+ return "Unknown";
54
+ }
55
+ }
56
+
57
+ string
58
+ trustStatusToString(DWORD status)
59
+ {
60
+ if(status & CERT_TRUST_NO_ERROR)
61
+ {
62
+ return "CERT_TRUST_NO_ERROR";
63
+ }
64
+
65
+ if(status & CERT_TRUST_IS_NOT_TIME_VALID)
66
+ {
67
+ return "CERT_TRUST_IS_NOT_TIME_VALID";
68
+ }
69
+
70
+ if(status & CERT_TRUST_IS_REVOKED)
71
+ {
72
+ return "CERT_TRUST_IS_REVOKED";
73
+ }
74
+
75
+ if(status & CERT_TRUST_IS_NOT_SIGNATURE_VALID)
76
+ {
77
+ return "CERT_TRUST_IS_NOT_SIGNATURE_VALID";
78
+ }
79
+
80
+ if(status & CERT_TRUST_IS_NOT_VALID_FOR_USAGE)
81
+ {
82
+ return "CERT_TRUST_IS_NOT_VALID_FOR_USAGE";
83
+ }
84
+
85
+ if(status & CERT_TRUST_IS_UNTRUSTED_ROOT)
86
+ {
87
+ return "CERT_TRUST_IS_UNTRUSTED_ROOT";
88
+ }
89
+
90
+ if(status & CERT_TRUST_REVOCATION_STATUS_UNKNOWN)
91
+ {
92
+ return "CERT_TRUST_REVOCATION_STATUS_UNKNOWN";
93
+ }
94
+
95
+ if(status & CERT_TRUST_IS_CYCLIC)
96
+ {
97
+ return "CERT_TRUST_IS_CYCLIC";
98
+ }
99
+
100
+ if(status & CERT_TRUST_INVALID_EXTENSION)
101
+ {
102
+ return "CERT_TRUST_INVALID_EXTENSION";
103
+ }
104
+
105
+ if(status & CERT_TRUST_INVALID_POLICY_CONSTRAINTS)
106
+ {
107
+ return "CERT_TRUST_INVALID_POLICY_CONSTRAINTS";
108
+ }
109
+
110
+ if(status & CERT_TRUST_INVALID_BASIC_CONSTRAINTS)
111
+ {
112
+ return "CERT_TRUST_INVALID_BASIC_CONSTRAINTS";
113
+ }
114
+
115
+ if(status & CERT_TRUST_INVALID_NAME_CONSTRAINTS)
116
+ {
117
+ return "CERT_TRUST_INVALID_NAME_CONSTRAINTS";
118
+ }
119
+
120
+ if(status & CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT)
121
+ {
122
+ return "CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT";
123
+ }
124
+
125
+ if(status & CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT)
126
+ {
127
+ return "CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT";
128
+ }
129
+
130
+ if(status & CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT)
131
+ {
132
+ return "CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT";
133
+ }
134
+
135
+ if(status & CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT)
136
+ {
137
+ return "CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT";
138
+ }
139
+
140
+ if(status & CERT_TRUST_IS_OFFLINE_REVOCATION)
141
+ {
142
+ return "CERT_TRUST_IS_OFFLINE_REVOCATION";
143
+ }
144
+
145
+ if(status & CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY)
146
+ {
147
+ return "CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY";
148
+ }
149
+
150
+ if(status & CERT_TRUST_IS_EXPLICIT_DISTRUST)
151
+ {
152
+ return "CERT_TRUST_IS_EXPLICIT_DISTRUST";
153
+ }
154
+
155
+ if(status & CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT)
156
+ {
157
+ return "CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT";
158
+ }
159
+
160
+ //
161
+ // New in Windows 8
162
+ //
163
+ //if(status & CERT_TRUST_HAS_WEAK_SIGNATURE)
164
+ //{
165
+ // return "CERT_TRUST_HAS_WEAK_SIGNATURE";
166
+ //}
167
+
168
+ if(status & CERT_TRUST_IS_PARTIAL_CHAIN)
169
+ {
170
+ return "CERT_TRUST_IS_PARTIAL_CHAIN";
171
+ }
172
+
173
+ if(status & CERT_TRUST_CTL_IS_NOT_TIME_VALID)
174
+ {
175
+ return "CERT_TRUST_CTL_IS_NOT_TIME_VALID";
176
+ }
177
+
178
+ if(status & CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID)
179
+ {
180
+ return "CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID";
181
+ }
182
+
183
+ if(status & CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE)
184
+ {
185
+ return "CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE";
186
+ }
187
+
188
+ ostringstream os;
189
+ os << "UNKNOWN TRUST FAILURE: " << status;
190
+ return os.str();
191
+ }
192
+
193
+ SecBuffer*
194
+ getSecBufferWithType(const SecBufferDesc& desc, ULONG bufferType)
195
+ {
196
+ for(ULONG i = 0; i < desc.cBuffers; ++i)
197
+ {
198
+ if(desc.pBuffers[i].BufferType == bufferType)
199
+ {
200
+ return &desc.pBuffers[i];
201
+ }
202
+ }
203
+ return 0;
204
+ }
205
+
206
+ }
207
+
208
+ IceInternal::NativeInfoPtr
209
+ IceSSL::TransceiverI::getNativeInfo()
210
+ {
211
+ return _stream;
212
+ }
213
+
214
+ IceInternal::SocketOperation
215
+ IceSSL::TransceiverI::sslHandshake()
216
+ {
217
+ DWORD flags = ASC_REQ_SEQUENCE_DETECT | ASC_REQ_REPLAY_DETECT | ASC_REQ_CONFIDENTIALITY | ASC_REQ_ALLOCATE_MEMORY |
218
+ ASC_REQ_STREAM;
219
+ if(_incoming)
220
+ {
221
+ flags |= ASC_REQ_EXTENDED_ERROR;
222
+ if(_engine->getVerifyPeer() > 0)
223
+ {
224
+ flags |= ASC_REQ_MUTUAL_AUTH;
225
+ }
226
+ }
227
+ else
228
+ {
229
+ flags |= ISC_REQ_USE_SUPPLIED_CREDS | ISC_REQ_MANUAL_CRED_VALIDATION | ISC_RET_EXTENDED_ERROR;
230
+ }
231
+
232
+ SECURITY_STATUS err = SEC_E_OK;
233
+ DWORD ctxFlags = 0;
234
+ if(_state == StateHandshakeNotStarted)
235
+ {
236
+ _readBuffer.b.resize(2048);
237
+ _readBuffer.i = _readBuffer.b.begin();
238
+ _credentials = _engine->newCredentialsHandle(_incoming);
239
+ _credentialsInitialized = true;
240
+
241
+ if(!_incoming)
242
+ {
243
+ SecBuffer outBuffer = { 0, SECBUFFER_TOKEN, 0 };
244
+ SecBufferDesc outBufferDesc = { SECBUFFER_VERSION, 1, &outBuffer };
245
+
246
+ err = InitializeSecurityContext(&_credentials, 0, const_cast<char *>(_host.c_str()), flags, 0, 0, 0, 0,
247
+ &_ssl, &outBufferDesc, &ctxFlags, 0);
248
+ if(err != SEC_E_OK && err != SEC_I_CONTINUE_NEEDED)
249
+ {
250
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: handshake failure:\n" +
251
+ IceUtilInternal::lastErrorToString());
252
+ }
253
+ _sslInitialized = true;
254
+
255
+ //
256
+ // Copy the data to the write buffer
257
+ //
258
+ _writeBuffer.b.resize(outBuffer.cbBuffer);
259
+ _writeBuffer.i = _writeBuffer.b.begin();
260
+ memcpy(_writeBuffer.i, outBuffer.pvBuffer, outBuffer.cbBuffer);
261
+ FreeContextBuffer(outBuffer.pvBuffer);
262
+
263
+ _state = StateHandshakeWriteContinue;
264
+ }
265
+ else
266
+ {
267
+ _state = StateHandshakeReadContinue;
268
+ }
269
+ }
270
+
271
+ while(true)
272
+ {
273
+ if(_state == StateHandshakeReadContinue)
274
+ {
275
+ // If read buffer is empty, try to read some data.
276
+ if(_readBuffer.i == _readBuffer.b.begin() && !readRaw(_readBuffer))
277
+ {
278
+ return IceInternal::SocketOperationRead;
279
+ }
280
+
281
+ SecBuffer inBuffers[2] = {
282
+ { static_cast<DWORD>(_readBuffer.i - _readBuffer.b.begin()), SECBUFFER_TOKEN, _readBuffer.b.begin() },
283
+ { 0, SECBUFFER_EMPTY, 0 }
284
+ };
285
+ SecBufferDesc inBufferDesc = { SECBUFFER_VERSION, 2, inBuffers };
286
+
287
+ SecBuffer outBuffers[2] = {
288
+ { 0, SECBUFFER_TOKEN, 0 },
289
+ { 0, SECBUFFER_ALERT, 0 }
290
+ };
291
+ SecBufferDesc outBufferDesc = { SECBUFFER_VERSION, 2, outBuffers };
292
+
293
+ if(_incoming)
294
+ {
295
+ err = AcceptSecurityContext(&_credentials, (_sslInitialized ? &_ssl : 0), &inBufferDesc, flags, 0,
296
+ &_ssl, &outBufferDesc, &ctxFlags, 0);
297
+ if(err == SEC_I_CONTINUE_NEEDED || err == SEC_E_OK)
298
+ {
299
+ _sslInitialized = true;
300
+ }
301
+ }
302
+ else
303
+ {
304
+ err = InitializeSecurityContext(&_credentials, &_ssl, const_cast<char*>(_host.c_str()), flags, 0, 0,
305
+ &inBufferDesc, 0, 0, &outBufferDesc, &ctxFlags, 0);
306
+ }
307
+
308
+ //
309
+ // If the message is incomplete we need to read more data.
310
+ //
311
+ if(err == SEC_E_INCOMPLETE_MESSAGE)
312
+ {
313
+ SecBuffer* missing = getSecBufferWithType(inBufferDesc, SECBUFFER_MISSING);
314
+ size_t pos = _readBuffer.i - _readBuffer.b.begin();
315
+ _readBuffer.b.resize(missing ? (pos + missing->cbBuffer) : (pos * 2));
316
+ _readBuffer.i = _readBuffer.b.begin() + pos;
317
+ return IceInternal::SocketOperationRead;
318
+ }
319
+ else if(err != SEC_I_CONTINUE_NEEDED && err != SEC_E_OK)
320
+ {
321
+ throw SecurityException(__FILE__, __LINE__, "SSL handshake failure:\n" +
322
+ IceUtilInternal::lastErrorToString());
323
+ }
324
+
325
+ //
326
+ // Copy out security tokens to the write buffer if any.
327
+ //
328
+ SecBuffer* token = getSecBufferWithType(outBufferDesc, SECBUFFER_TOKEN);
329
+ assert(token);
330
+ if(token->cbBuffer)
331
+ {
332
+ _writeBuffer.b.resize(static_cast<size_t>(token->cbBuffer));
333
+ _writeBuffer.i = _writeBuffer.b.begin();
334
+ memcpy(_writeBuffer.i, token->pvBuffer, token->cbBuffer);
335
+ FreeContextBuffer(token->pvBuffer);
336
+ }
337
+
338
+ //
339
+ // Check for remaining data in the input buffer.
340
+ //
341
+ SecBuffer* extra = getSecBufferWithType(inBufferDesc, SECBUFFER_EXTRA);
342
+ if(extra)
343
+ {
344
+ // Shift the extra data to the start of the input buffer
345
+ memmove(_readBuffer.b.begin(), _readBuffer.i - extra->cbBuffer, extra->cbBuffer);
346
+ _readBuffer.i = _readBuffer.b.begin() + extra->cbBuffer;
347
+ }
348
+ else
349
+ {
350
+ _readBuffer.i = _readBuffer.b.begin();
351
+ }
352
+
353
+ if(token->cbBuffer)
354
+ {
355
+ _state = StateHandshakeWriteContinue; // Continue writing if we have a token.
356
+ }
357
+ else if(err == SEC_E_OK)
358
+ {
359
+ break; // We're done.
360
+ }
361
+
362
+ // Otherwise continue either reading credentials
363
+ }
364
+
365
+ if(_state == StateHandshakeWriteContinue)
366
+ {
367
+ //
368
+ // Write any pending data.
369
+ //
370
+ if(!writeRaw(_writeBuffer))
371
+ {
372
+ return IceInternal::SocketOperationWrite;
373
+ }
374
+ if(err == SEC_E_OK)
375
+ {
376
+ break; // Token is written and we weren't told to continue, so we're done!
377
+ }
378
+ assert(err == SEC_I_CONTINUE_NEEDED);
379
+ _state = StateHandshakeReadContinue;
380
+ }
381
+ }
382
+
383
+ //
384
+ // Check if the requested capabilities are met
385
+ //
386
+ if(flags != ctxFlags)
387
+ {
388
+ if(_incoming)
389
+ {
390
+ if(!(ctxFlags & ASC_REQ_SEQUENCE_DETECT))
391
+ {
392
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: SChannel failed to setup sequence detect");
393
+ }
394
+
395
+ if(!(ctxFlags & ASC_REQ_REPLAY_DETECT))
396
+ {
397
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: SChannel failed to setup replay detect");
398
+ }
399
+
400
+ if(!(ctxFlags & ASC_REQ_CONFIDENTIALITY))
401
+ {
402
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: SChannel failed to setup confidentiality");
403
+ }
404
+
405
+ if(!(ctxFlags & ASC_REQ_EXTENDED_ERROR))
406
+ {
407
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: SChannel failed to setup extended error");
408
+ }
409
+
410
+ if(!(ctxFlags & ASC_REQ_ALLOCATE_MEMORY))
411
+ {
412
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: SChannel failed to setup memory allocation");
413
+ }
414
+
415
+ if(!(ctxFlags & ASC_REQ_STREAM))
416
+ {
417
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: SChannel failed to setup stream");
418
+ }
419
+ }
420
+ else
421
+ {
422
+ if(!(ctxFlags & ISC_REQ_SEQUENCE_DETECT))
423
+ {
424
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: SChannel failed to setup sequence detect");
425
+ }
426
+
427
+ if(!(ctxFlags & ISC_REQ_REPLAY_DETECT))
428
+ {
429
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: SChannel failed to setup replay detect");
430
+ }
431
+
432
+ if(!(ctxFlags & ISC_REQ_CONFIDENTIALITY))
433
+ {
434
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: SChannel failed to setup confidentiality");
435
+ }
436
+
437
+ if(!(ctxFlags & ISC_REQ_EXTENDED_ERROR))
438
+ {
439
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: SChannel failed to setup extended error");
440
+ }
441
+
442
+ if(!(ctxFlags & ISC_REQ_ALLOCATE_MEMORY))
443
+ {
444
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: SChannel failed to setup memory allocation");
445
+ }
446
+
447
+ if(!(ctxFlags & ISC_REQ_STREAM))
448
+ {
449
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: SChannel failed to setup stream");
450
+ }
451
+ }
452
+ }
453
+
454
+ err = QueryContextAttributes(&_ssl, SECPKG_ATTR_STREAM_SIZES, &_sizes);
455
+ if(err != SEC_E_OK)
456
+ {
457
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: failure to query stream sizes attributes:\n" +
458
+ IceUtilInternal::lastErrorToString());
459
+ }
460
+
461
+ size_t pos = _readBuffer.i - _readBuffer.b.begin();
462
+ if(pos <= (_sizes.cbHeader + _sizes.cbMaximumMessage + _sizes.cbTrailer))
463
+ {
464
+ _readBuffer.b.resize(_sizes.cbHeader + _sizes.cbMaximumMessage + _sizes.cbTrailer);
465
+ _readBuffer.i = _readBuffer.b.begin() + pos;
466
+ }
467
+
468
+ _writeBuffer.b.reset();
469
+ _writeBuffer.i = _writeBuffer.b.begin();
470
+
471
+ return IceInternal::SocketOperationNone;
472
+ }
473
+
474
+ //
475
+ // Try to decrypt a message and return the number of bytes decrypted, if the number of bytes
476
+ // decrypted is less than the size requested it means that the application needs to read more
477
+ // data before it can decrypt the complete message.
478
+ //
479
+ size_t
480
+ IceSSL::TransceiverI::decryptMessage(IceInternal::Buffer& buffer)
481
+ {
482
+ assert(_readBuffer.i != _readBuffer.b.begin() || !_readUnprocessed.b.empty());
483
+
484
+ //
485
+ // First check if there is data in the unprocessed buffer.
486
+ //
487
+ size_t length = std::min(static_cast<size_t>(buffer.b.end() - buffer.i), _readUnprocessed.b.size());
488
+ if(length > 0)
489
+ {
490
+ memcpy(buffer.i, _readUnprocessed.b.begin(), length);
491
+ memmove(_readUnprocessed.b.begin(), _readUnprocessed.b.begin() + length, _readUnprocessed.b.size() - length);
492
+ _readUnprocessed.b.resize(_readUnprocessed.b.size() - length);
493
+ }
494
+
495
+ while(true)
496
+ {
497
+ //
498
+ // If we have filled the buffer or if nothing left to read from
499
+ // the read buffer, we're done.
500
+ //
501
+ Byte* i = buffer.i + length;
502
+ if(i == buffer.b.end() || _readBuffer.i == _readBuffer.b.begin())
503
+ {
504
+ break;
505
+ }
506
+
507
+ //
508
+ // Try to decrypt the buffered data.
509
+ //
510
+ SecBuffer inBuffers[4] = {
511
+ { static_cast<DWORD>(_readBuffer.i - _readBuffer.b.begin()), SECBUFFER_DATA, _readBuffer.b.begin() },
512
+ { 0, SECBUFFER_EMPTY, 0 },
513
+ { 0, SECBUFFER_EMPTY, 0 },
514
+ { 0, SECBUFFER_EMPTY, 0 }
515
+ };
516
+ SecBufferDesc inBufferDesc = { SECBUFFER_VERSION, 4, inBuffers };
517
+
518
+ SECURITY_STATUS err = DecryptMessage(&_ssl, &inBufferDesc, 0, 0);
519
+ if(err == SEC_E_INCOMPLETE_MESSAGE)
520
+ {
521
+ //
522
+ // There isn't enough data to decrypt the message. The input
523
+ // buffer is resized to the SSL max message size after the SSL
524
+ // handshake completes so an incomplete message can only occur
525
+ // if the read buffer is not full.
526
+ //
527
+ assert(_readBuffer.i != _readBuffer.b.end());
528
+ return length;
529
+ }
530
+ else if(err == SEC_I_CONTEXT_EXPIRED || err == SEC_I_RENEGOTIATE)
531
+ {
532
+ //
533
+ // The message sender has finished using the connection and
534
+ // has initiated a shutdown.
535
+ //
536
+ throw ConnectionLostException(__FILE__, __LINE__, 0);
537
+ }
538
+ else if(err != SEC_E_OK)
539
+ {
540
+ throw ProtocolException(__FILE__, __LINE__, "IceSSL: protocol error during read:\n" +
541
+ IceUtilInternal::lastErrorToString());
542
+ }
543
+
544
+ SecBuffer* dataBuffer = getSecBufferWithType(inBufferDesc, SECBUFFER_DATA);
545
+ assert(dataBuffer);
546
+ DWORD remaining = min(static_cast<DWORD>(buffer.b.end() - i), dataBuffer->cbBuffer);
547
+ length += remaining;
548
+ if(remaining)
549
+ {
550
+ memcpy(i, dataBuffer->pvBuffer, remaining);
551
+
552
+ //
553
+ // Copy remaining decrypted data to unprocessed buffer
554
+ //
555
+ if(dataBuffer->cbBuffer > remaining)
556
+ {
557
+ _readUnprocessed.b.resize(dataBuffer->cbBuffer - remaining);
558
+ memcpy(_readUnprocessed.b.begin(), reinterpret_cast<Byte*>(dataBuffer->pvBuffer) + remaining,
559
+ dataBuffer->cbBuffer - remaining);
560
+ }
561
+ }
562
+
563
+ //
564
+ // Move any remaining encrypted data to the begining of the input buffer
565
+ //
566
+ SecBuffer* extraBuffer = getSecBufferWithType(inBufferDesc, SECBUFFER_EXTRA);
567
+ if(extraBuffer && extraBuffer->cbBuffer > 0)
568
+ {
569
+ memmove(_readBuffer.b.begin(), _readBuffer.i - extraBuffer->cbBuffer, extraBuffer->cbBuffer);
570
+ _readBuffer.i = _readBuffer.b.begin() + extraBuffer->cbBuffer;
571
+ }
572
+ else
573
+ {
574
+ _readBuffer.i = _readBuffer.b.begin();
575
+ }
576
+ }
577
+ return length;
578
+ }
579
+
580
+ //
581
+ // Encrypt a message and return the number of bytes that has been encrypted, if the
582
+ // number of bytes is less than the message size, the function must be called again.
583
+ //
584
+ size_t
585
+ IceSSL::TransceiverI::encryptMessage(IceInternal::Buffer& buffer)
586
+ {
587
+ //
588
+ // Limit the message size to cbMaximumMessage which is the maximun size data that can be
589
+ // embeded in a SSL record.
590
+ //
591
+ DWORD length = std::min(static_cast<DWORD>(buffer.b.end() - buffer.i), _sizes.cbMaximumMessage);
592
+
593
+ //
594
+ // Resize the buffer to hold the encrypted data
595
+ //
596
+ _writeBuffer.b.resize(_sizes.cbHeader + length + _sizes.cbTrailer);
597
+ _writeBuffer.i = _writeBuffer.b.begin();
598
+
599
+ SecBuffer buffers[4] = {
600
+ { _sizes.cbHeader, SECBUFFER_STREAM_HEADER, _writeBuffer.i },
601
+ { length, SECBUFFER_DATA, _writeBuffer.i + _sizes.cbHeader },
602
+ { _sizes.cbTrailer, SECBUFFER_STREAM_TRAILER, _writeBuffer.i + _sizes.cbHeader + length },
603
+ { 0, SECBUFFER_EMPTY, 0 }
604
+ };
605
+ SecBufferDesc buffersDesc = { SECBUFFER_VERSION, 4, buffers };
606
+
607
+ // Data is encrypted in place, copy the data to be encrypted to the data buffer.
608
+ memcpy(buffers[1].pvBuffer, buffer.i, length);
609
+
610
+ SECURITY_STATUS err = EncryptMessage(&_ssl, 0, &buffersDesc, 0);
611
+ if(err != SEC_E_OK)
612
+ {
613
+ throw ProtocolException(__FILE__, __LINE__, "IceSSL: protocol error encrypting message:\n" +
614
+ IceUtilInternal::lastErrorToString());
615
+ }
616
+
617
+ // EncryptMessage resizes the buffers, so resize the write buffer as well to reflect this.
618
+ _writeBuffer.b.resize(buffers[0].cbBuffer + buffers[1].cbBuffer + buffers[2].cbBuffer);
619
+ _writeBuffer.i = _writeBuffer.b.begin();
620
+
621
+ return length;
622
+ }
623
+
624
+ IceInternal::SocketOperation
625
+ IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::Buffer& writeBuffer, bool& hasMoreData)
626
+ {
627
+ IceInternal::SocketOperation op = _stream->connect(readBuffer, writeBuffer);
628
+ if(op != IceInternal::SocketOperationNone)
629
+ {
630
+ return op;
631
+ }
632
+
633
+ op = sslHandshake();
634
+ if(op != IceInternal::SocketOperationNone)
635
+ {
636
+ return op;
637
+ }
638
+
639
+ if(!_incoming || _engine->getVerifyPeer() > 0)
640
+ {
641
+ //
642
+ // Build the peer certificate chain and verify it.
643
+ //
644
+ PCCERT_CONTEXT cert = 0;
645
+ SECURITY_STATUS err = QueryContextAttributes(&_ssl, SECPKG_ATTR_REMOTE_CERT_CONTEXT, &cert);
646
+ if(err && err != SEC_E_NO_CREDENTIALS)
647
+ {
648
+ throw ProtocolException(__FILE__, __LINE__, "IceSSL: certificate verification failure:" +
649
+ IceUtilInternal::lastErrorToString());
650
+ }
651
+
652
+ if(!cert && (!_incoming || _engine->getVerifyPeer() == 2))
653
+ {
654
+ // Clients require server certificate if VerifyPeer > 0
655
+ // and servers require client certificate if VerifyPeer == 2
656
+ throw ProtocolException(__FILE__, __LINE__, "IceSSL: certificate required:" +
657
+ IceUtilInternal::lastErrorToString());
658
+ }
659
+ else if(cert) // Verify the remote certificate
660
+ {
661
+ try
662
+ {
663
+ CERT_CHAIN_PARA chainP;
664
+ memset(&chainP, 0, sizeof(chainP));
665
+ chainP.cbSize = sizeof(chainP);
666
+
667
+ PCCERT_CHAIN_CONTEXT certChain;
668
+ if(!CertGetCertificateChain(_engine->chainEngine(), cert, 0, 0, &chainP,
669
+ CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY, 0, &certChain))
670
+ {
671
+ CertFreeCertificateContext(cert);
672
+ throw IceUtilInternal::lastErrorToString();
673
+ }
674
+
675
+ CERT_SIMPLE_CHAIN* simpleChain = certChain->rgpChain[0];
676
+
677
+ string trustError;
678
+ if(simpleChain->TrustStatus.dwErrorStatus != CERT_TRUST_NO_ERROR)
679
+ {
680
+ trustError = trustStatusToString(certChain->TrustStatus.dwErrorStatus);
681
+ }
682
+
683
+ CertFreeCertificateChain(certChain);
684
+ CertFreeCertificateContext(cert);
685
+ if(!trustError.empty())
686
+ {
687
+ throw trustError;
688
+ }
689
+ }
690
+ catch(const string& reason)
691
+ {
692
+ if(_engine->getVerifyPeer() == 0)
693
+ {
694
+ if(_instance->traceLevel() >= 1)
695
+ {
696
+ _instance->logger()->trace(_instance->traceCategory(),
697
+ "IceSSL: ignoring certificate verification failure\n" + reason);
698
+ }
699
+ }
700
+ else
701
+ {
702
+ ostringstream os;
703
+ os << "IceSSL: certificate verification failure\n" << reason;
704
+ string msg = os.str();
705
+ if(_instance->traceLevel() >= 1)
706
+ {
707
+ _instance->logger()->trace(_instance->traceCategory(), msg);
708
+ }
709
+ throw ProtocolException(__FILE__, __LINE__, msg);
710
+ }
711
+ }
712
+ }
713
+ }
714
+ _engine->verifyPeer(_stream->fd(), _host, getNativeConnectionInfo());
715
+ _state = StateHandshakeComplete;
716
+
717
+ if(_instance->engine()->securityTraceLevel() >= 1)
718
+ {
719
+ string sslCipherName;
720
+ string sslKeyExchangeAlgorithm;
721
+ string sslProtocolName;
722
+ SecPkgContext_ConnectionInfo info;
723
+ if(QueryContextAttributes(&_ssl, SECPKG_ATTR_CONNECTION_INFO, &info) == SEC_E_OK)
724
+ {
725
+ sslCipherName = _engine->getCipherName(info.aiCipher);
726
+ sslKeyExchangeAlgorithm = _engine->getCipherName(info.aiExch);
727
+ sslProtocolName = protocolName(info.dwProtocol);
728
+ }
729
+
730
+ Trace out(_instance->logger(), _instance->traceCategory());
731
+ out << "SSL summary for " << (_incoming ? "incoming" : "outgoing") << " connection\n";
732
+
733
+ if(sslCipherName.empty())
734
+ {
735
+ out << "unknown cipher\n";
736
+ }
737
+ else
738
+ {
739
+ out << "cipher = " << sslCipherName
740
+ << "\nkey exchange = " << sslKeyExchangeAlgorithm
741
+ << "\nprotocol = " << sslProtocolName << "\n";
742
+ }
743
+ out << toString();
744
+ }
745
+ hasMoreData = !_readUnprocessed.b.empty() || _readBuffer.i != _readBuffer.b.begin();
746
+ return IceInternal::SocketOperationNone;
747
+ }
748
+
749
+ IceInternal::SocketOperation
750
+ IceSSL::TransceiverI::closing(bool initiator, const Ice::LocalException&)
751
+ {
752
+ // If we are initiating the connection closure, wait for the peer
753
+ // to close the TCP/IP connection. Otherwise, close immediately.
754
+ return initiator ? IceInternal::SocketOperationRead : IceInternal::SocketOperationNone;
755
+ }
756
+
757
+ void
758
+ IceSSL::TransceiverI::close()
759
+ {
760
+ if(_sslInitialized)
761
+ {
762
+ DeleteSecurityContext(&_ssl);
763
+ _sslInitialized = false;
764
+ }
765
+
766
+ if(_credentialsInitialized)
767
+ {
768
+ FreeCredentialsHandle(&_credentials);
769
+ _credentialsInitialized = false;
770
+ }
771
+
772
+ _stream->close();
773
+ }
774
+
775
+ IceInternal::SocketOperation
776
+ IceSSL::TransceiverI::write(IceInternal::Buffer& buf)
777
+ {
778
+ if(!_stream->isConnected())
779
+ {
780
+ return _stream->write(buf);
781
+ }
782
+
783
+ if(buf.i == buf.b.end())
784
+ {
785
+ return IceInternal::SocketOperationNone;
786
+ }
787
+ assert(_state == StateHandshakeComplete);
788
+
789
+ while(buf.i != buf.b.end())
790
+ {
791
+ if(_bufferedW == 0)
792
+ {
793
+ assert(_writeBuffer.i == _writeBuffer.b.end());
794
+ _bufferedW = encryptMessage(buf);
795
+ }
796
+
797
+ if(!writeRaw(_writeBuffer))
798
+ {
799
+ return IceInternal::SocketOperationWrite;
800
+ }
801
+
802
+ assert(_writeBuffer.i == _writeBuffer.b.end()); // Finished writing the encrypted data
803
+
804
+ buf.i += _bufferedW;
805
+ _bufferedW = 0;
806
+ }
807
+ return IceInternal::SocketOperationNone;
808
+ }
809
+
810
+ IceInternal::SocketOperation
811
+ IceSSL::TransceiverI::read(IceInternal::Buffer& buf, bool& hasMoreData)
812
+ {
813
+ if(!_stream->isConnected())
814
+ {
815
+ return _stream->read(buf);
816
+ }
817
+
818
+ if(buf.i == buf.b.end())
819
+ {
820
+ return IceInternal::SocketOperationNone;
821
+ }
822
+ assert(_state == StateHandshakeComplete);
823
+
824
+ hasMoreData = false;
825
+ while(buf.i != buf.b.end())
826
+ {
827
+ if(_readUnprocessed.b.empty() && _readBuffer.i == _readBuffer.b.begin() && !readRaw(_readBuffer))
828
+ {
829
+ return IceInternal::SocketOperationRead;
830
+ }
831
+
832
+ size_t decrypted = decryptMessage(buf);
833
+ if(decrypted == 0)
834
+ {
835
+ if(!readRaw(_readBuffer))
836
+ {
837
+ return IceInternal::SocketOperationRead;
838
+ }
839
+ continue;
840
+ }
841
+
842
+ buf.i += decrypted;
843
+ }
844
+ hasMoreData = !_readUnprocessed.b.empty() || _readBuffer.i != _readBuffer.b.begin();
845
+ return IceInternal::SocketOperationNone;
846
+ }
847
+
848
+ #ifdef ICE_USE_IOCP
849
+
850
+ bool
851
+ IceSSL::TransceiverI::startWrite(IceInternal::Buffer& buffer)
852
+ {
853
+ if(!_stream->isConnected())
854
+ {
855
+ return _stream->startWrite(buffer);
856
+ }
857
+
858
+ if(_state == StateHandshakeComplete && _bufferedW == 0)
859
+ {
860
+ assert(_writeBuffer.i == _writeBuffer.b.end());
861
+ _bufferedW = encryptMessage(buffer);
862
+ }
863
+
864
+ return _stream->startWrite(_writeBuffer);
865
+ }
866
+
867
+ void
868
+ IceSSL::TransceiverI::finishWrite(IceInternal::Buffer& buf)
869
+ {
870
+ if(!_stream->isConnected())
871
+ {
872
+ _stream->finishWrite(buf);
873
+ return;
874
+ }
875
+
876
+ _stream->finishWrite(_writeBuffer);
877
+ if(_writeBuffer.i != _writeBuffer.b.end())
878
+ {
879
+ return; // We're not finished yet with writing the write buffer.
880
+ }
881
+
882
+ if(_state == StateHandshakeComplete)
883
+ {
884
+ buf.i += _bufferedW;
885
+ _bufferedW = 0;
886
+ }
887
+ }
888
+
889
+ void
890
+ IceSSL::TransceiverI::startRead(IceInternal::Buffer& buffer)
891
+ {
892
+ if(!_stream->isConnected())
893
+ {
894
+ _stream->startRead(buffer);
895
+ return;
896
+ }
897
+ _stream->startRead(_readBuffer);
898
+ }
899
+
900
+ void
901
+ IceSSL::TransceiverI::finishRead(IceInternal::Buffer& buf, bool& hasMoreData)
902
+ {
903
+ if(!_stream->isConnected())
904
+ {
905
+ _stream->finishRead(buf);
906
+ return;
907
+ }
908
+
909
+ _stream->finishRead(_readBuffer);
910
+ if(_state == StateHandshakeComplete)
911
+ {
912
+ size_t decrypted = decryptMessage(buf);
913
+ if(decrypted > 0)
914
+ {
915
+ buf.i += decrypted;
916
+ hasMoreData = !_readUnprocessed.b.empty() || _readBuffer.i != _readBuffer.b.begin();
917
+ }
918
+ else
919
+ {
920
+ hasMoreData = false;
921
+ }
922
+ }
923
+ }
924
+ #endif
925
+
926
+ string
927
+ IceSSL::TransceiverI::protocol() const
928
+ {
929
+ return _instance->protocol();
930
+ }
931
+
932
+ string
933
+ IceSSL::TransceiverI::toString() const
934
+ {
935
+ return _stream->toString();
936
+ }
937
+
938
+ string
939
+ IceSSL::TransceiverI::toDetailedString() const
940
+ {
941
+ return toString();
942
+ }
943
+
944
+ Ice::ConnectionInfoPtr
945
+ IceSSL::TransceiverI::getInfo() const
946
+ {
947
+ return getNativeConnectionInfo();
948
+ }
949
+
950
+ void
951
+ IceSSL::TransceiverI::checkSendSize(const IceInternal::Buffer&)
952
+ {
953
+ }
954
+
955
+ IceSSL::TransceiverI::TransceiverI(const InstancePtr& instance,
956
+ const IceInternal::StreamSocketPtr& stream,
957
+ const string& hostOrAdapterName,
958
+ bool incoming) :
959
+ _instance(instance),
960
+ _engine(SChannelEnginePtr::dynamicCast(instance->engine())),
961
+ _host(incoming ? "" : hostOrAdapterName),
962
+ _adapterName(incoming ? hostOrAdapterName : ""),
963
+ _incoming(incoming),
964
+ _stream(stream),
965
+ _state(StateHandshakeNotStarted),
966
+ _bufferedW(0),
967
+ _sslInitialized(false),
968
+ _credentialsInitialized(false)
969
+ {
970
+ }
971
+
972
+ IceSSL::TransceiverI::~TransceiverI()
973
+ {
974
+ }
975
+
976
+ NativeConnectionInfoPtr
977
+ IceSSL::TransceiverI::getNativeConnectionInfo() const
978
+ {
979
+ NativeConnectionInfoPtr info = new NativeConnectionInfo();
980
+ IceInternal::fdToAddressAndPort(_stream->fd(), info->localAddress, info->localPort, info->remoteAddress,
981
+ info->remotePort);
982
+
983
+ if(_sslInitialized)
984
+ {
985
+ CtxtHandle* ssl = const_cast<CtxtHandle*>(&_ssl);
986
+ PCCERT_CONTEXT cert = 0;
987
+ PCCERT_CHAIN_CONTEXT certChain = 0;
988
+ SECURITY_STATUS err = QueryContextAttributes(ssl, SECPKG_ATTR_REMOTE_CERT_CONTEXT, &cert);
989
+ if(err == SEC_E_OK)
990
+ {
991
+ assert(cert);
992
+ CERT_CHAIN_PARA chainP;
993
+ memset(&chainP, 0, sizeof(chainP));
994
+ chainP.cbSize = sizeof(chainP);
995
+
996
+ if(CertGetCertificateChain(_engine->chainEngine(), cert, 0, 0, &chainP,
997
+ CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY, 0, &certChain))
998
+ {
999
+ CERT_SIMPLE_CHAIN* simpleChain = certChain->rgpChain[0];
1000
+ for(DWORD i = 0; i < simpleChain->cElement; ++i)
1001
+ {
1002
+ PCCERT_CONTEXT c = simpleChain->rgpElement[i]->pCertContext;
1003
+ PCERT_SIGNED_CONTENT_INFO cc;
1004
+
1005
+ DWORD length = 0;
1006
+ if(!CryptDecodeObjectEx(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, X509_CERT, c->pbCertEncoded,
1007
+ c->cbCertEncoded, CRYPT_DECODE_ALLOC_FLAG, 0, &cc, &length))
1008
+ {
1009
+ CertFreeCertificateChain(certChain);
1010
+ CertFreeCertificateContext(cert);
1011
+ throw SecurityException(__FILE__, __LINE__,
1012
+ "IceSSL: error decoding peer certificate chain:\n" +
1013
+ IceUtilInternal::lastErrorToString());
1014
+ }
1015
+
1016
+ CertificatePtr certificate = new Certificate(cc);
1017
+ info->nativeCerts.push_back(certificate);
1018
+ info->certs.push_back(certificate->encode());
1019
+ }
1020
+ CertFreeCertificateChain(certChain);
1021
+ }
1022
+ CertFreeCertificateContext(cert);
1023
+ }
1024
+ else if(err != SEC_E_NO_CREDENTIALS)
1025
+ {
1026
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: error reading peer certificate:" +
1027
+ IceUtilInternal::lastErrorToString());
1028
+ }
1029
+
1030
+ SecPkgContext_ConnectionInfo connInfo;
1031
+ if(QueryContextAttributes(ssl, SECPKG_ATTR_CONNECTION_INFO, &connInfo) == SEC_E_OK)
1032
+ {
1033
+ info->cipher = _engine->getCipherName(connInfo.aiCipher);
1034
+ }
1035
+ else
1036
+ {
1037
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: error reading cipher info:" +
1038
+ IceUtilInternal::lastErrorToString());
1039
+ }
1040
+ }
1041
+
1042
+ info->adapterName = _adapterName;
1043
+ info->incoming = _incoming;
1044
+ return info;
1045
+ }
1046
+
1047
+ bool
1048
+ IceSSL::TransceiverI::writeRaw(IceInternal::Buffer& buf)
1049
+ {
1050
+ ssize_t ret = _stream->write(reinterpret_cast<const char*>(&*buf.i), buf.b.end() - buf.i);
1051
+ buf.i += ret;
1052
+ return buf.i == buf.b.end();
1053
+ }
1054
+
1055
+ bool
1056
+ IceSSL::TransceiverI::readRaw(IceInternal::Buffer& buf)
1057
+ {
1058
+ ssize_t ret = _stream->read(reinterpret_cast<char*>(&*buf.i), buf.b.end() - buf.i);
1059
+ buf.i += ret;
1060
+ return ret > 0;
1061
+ }
1062
+ #endif