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,67 @@
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
+ #ifndef ICE_SSL_RFC_2253_H
11
+ #define ICE_SSL_RFC_2253_H
12
+
13
+ #include <IceUtil/Config.h>
14
+ #include <list>
15
+
16
+ //
17
+ // The methods in the IceSSL::RFC2253 namespace implement a parser
18
+ // for relative distinguished name (RDN) pairs using the parsing
19
+ // rules outlined in sections 3 and 4 of RFC 2253.
20
+ //
21
+ // Note that this parser does not unescape the elements of the RDNs.
22
+ // For example, parsing the following RDN
23
+ //
24
+ // O=Sue\, Grabit and Runn
25
+ //
26
+ // results in the pair ("O","Sue\, Grabit and Runn") and not
27
+ // ("O","Sue, Grabit and Runn").
28
+ //
29
+ namespace IceSSL
30
+ {
31
+ namespace RFC2253
32
+ {
33
+
34
+ typedef std::list< std::pair<std::string, std::string> > RDNSeq;
35
+
36
+ struct RDNEntry
37
+ {
38
+ RDNSeq rdn;
39
+ bool negate;
40
+ };
41
+ typedef std::list<RDNEntry> RDNEntrySeq;
42
+
43
+ //
44
+ // This function separates DNs with the ';' character. A list of RDN
45
+ // pairs may optionally be prefixed with '!' to indicate a negation.
46
+ // The function returns a list of RDNEntry structures. Any failure in
47
+ // parsing results in a ParseException being thrown.
48
+ //
49
+ RDNEntrySeq parse(const std::string&);
50
+
51
+ //
52
+ // RDNs are separated with ',' and ';'.
53
+ //
54
+ // This function returns a list of RDN pairs. Any failure in parsing
55
+ // results in a ParseException being thrown.
56
+ //
57
+ RDNSeq parseStrict(const std::string&);
58
+
59
+ //
60
+ // Unescape the string.
61
+ //
62
+ std::string unescape(const std::string&);
63
+
64
+ }
65
+ }
66
+
67
+ #endif
@@ -0,0 +1,729 @@
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/SSLEngine.h>
11
+ #include <IceSSL/Plugin.h>
12
+
13
+ #include <Ice/LocalException.h>
14
+ #include <Ice/Logger.h>
15
+ #include <Ice/Communicator.h>
16
+
17
+ #include <IceUtil/StringUtil.h>
18
+ #include <IceUtil/FileUtil.h>
19
+ #include <IceUtil/UUID.h>
20
+
21
+ using namespace std;
22
+ using namespace Ice;
23
+ using namespace IceUtil;
24
+ using namespace IceUtilInternal;
25
+ using namespace IceSSL;
26
+
27
+ #ifdef ICE_USE_SCHANNEL
28
+
29
+ Shared* IceSSL::upCast(IceSSL::SChannelEngine* p) { return p; }
30
+
31
+ namespace
32
+ {
33
+
34
+ # ifdef __MINGW32__
35
+ //
36
+ // CERT_CHAIN_ENGINE_CONFIG struct in mingw headers doesn't include
37
+ // new members added in Windows 7, we add our ouwn definition and
38
+ // then cast it to CERT_CHAIN_ENGINE_CONFIG this works because the
39
+ // linked libraries include the new version.
40
+ //
41
+ struct CertChainEngineConfig
42
+ {
43
+ DWORD cbSize;
44
+ HCERTSTORE hRestrictedRoot;
45
+ HCERTSTORE hRestrictedTrust;
46
+ HCERTSTORE hRestrictedOther;
47
+ DWORD cAdditionalStore;
48
+ HCERTSTORE *rghAdditionalStore;
49
+ DWORD dwFlags;
50
+ DWORD dwUrlRetrievalTimeout;
51
+ DWORD MaximumCachedCertificates;
52
+ DWORD CycleDetectionModulus;
53
+ HCERTSTORE hExclusiveRoot;
54
+ HCERTSTORE hExclusiveTrustedPeople;
55
+ };
56
+ # endif
57
+
58
+ void
59
+ addCertificateToStore(const string& file, HCERTSTORE store, PCCERT_CONTEXT* cert = 0)
60
+ {
61
+ vector<char> buffer;
62
+ readFile(file, buffer);
63
+ vector<BYTE> outBuffer;
64
+ outBuffer.resize(buffer.size());
65
+ DWORD outLength = static_cast<DWORD>(outBuffer.size());
66
+
67
+ if(!CryptStringToBinary(&buffer[0], static_cast<DWORD>(buffer.size()), CRYPT_STRING_BASE64HEADER,
68
+ &outBuffer[0], &outLength, 0, 0))
69
+ {
70
+ //
71
+ // Base64 data should always be bigger than binary
72
+ //
73
+ assert(GetLastError() != ERROR_MORE_DATA);
74
+ throw PluginInitializationException(__FILE__, __LINE__,
75
+ "IceSSL: error decoding certificate:\n" + lastErrorToString());
76
+ }
77
+
78
+ if(!CertAddEncodedCertificateToStore(store, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, &outBuffer[0],
79
+ outLength, CERT_STORE_ADD_NEW, cert))
80
+ {
81
+ if(GetLastError() != static_cast<DWORD>(CRYPT_E_EXISTS))
82
+ {
83
+ throw PluginInitializationException(__FILE__, __LINE__,
84
+ "IceSSL: error decoding certificate:\n" + lastErrorToString());
85
+ }
86
+ }
87
+ }
88
+
89
+ DWORD
90
+ parseProtocols(const StringSeq& protocols)
91
+ {
92
+ DWORD v = 0;
93
+
94
+ for(Ice::StringSeq::const_iterator p = protocols.begin(); p != protocols.end(); ++p)
95
+ {
96
+ string prot = IceUtilInternal::toUpper(*p);
97
+
98
+ if(prot == "SSL3" || prot == "SSLV3")
99
+ {
100
+ v |= SP_PROT_SSL3_SERVER;
101
+ v |= SP_PROT_SSL3_CLIENT;
102
+ }
103
+ else if(prot == "TLS" || prot == "TLS1" || prot == "TLSV1" || prot == "TLS1_0" || prot == "TLSV1_0")
104
+ {
105
+ v |= SP_PROT_TLS1_SERVER;
106
+ v |= SP_PROT_TLS1_CLIENT;
107
+ }
108
+ else if(prot == "TLS1_1" || prot == "TLSV1_1")
109
+ {
110
+ v |= SP_PROT_TLS1_1_SERVER;
111
+ v |= SP_PROT_TLS1_1_CLIENT;
112
+ }
113
+ else if(prot == "TLS1_2" || prot == "TLSV1_2")
114
+ {
115
+ v |= SP_PROT_TLS1_2_SERVER;
116
+ v |= SP_PROT_TLS1_2_CLIENT;
117
+ }
118
+ else
119
+ {
120
+ throw PluginInitializationException(__FILE__, __LINE__, "IceSSL: unrecognized protocol `" + *p + "'");
121
+ }
122
+ }
123
+
124
+ return v;
125
+ }
126
+
127
+ const ALG_ID supportedCiphers[] = { CALG_3DES, CALG_AES_128, CALG_AES_256, CALG_DES, CALG_RC2, CALG_RC4 };
128
+ const int supportedCiphersSize = sizeof(supportedCiphers)/sizeof(ALG_ID);
129
+
130
+ ALG_ID
131
+ algorithmId(const string& name)
132
+ {
133
+ if(name == "3DES")
134
+ {
135
+ return CALG_3DES;
136
+ }
137
+ if(name == "AES_128")
138
+ {
139
+ return CALG_AES_128;
140
+ }
141
+ if(name == "AES_256")
142
+ {
143
+ return CALG_AES_256;
144
+ }
145
+ if(name == "DES")
146
+ {
147
+ return CALG_DES;
148
+ }
149
+ if(name == "RC2")
150
+ {
151
+ return CALG_RC2;
152
+ }
153
+ if(name == "RC4")
154
+ {
155
+ return CALG_RC4;
156
+ }
157
+ return 0;
158
+ }
159
+
160
+ }
161
+
162
+ SChannelEngine::SChannelEngine(const CommunicatorPtr& communicator) :
163
+ SSLEngine(communicator),
164
+ _initialized(false),
165
+ _rootStore(0),
166
+ _chainEngine(0)
167
+ {
168
+ }
169
+
170
+ void
171
+ SChannelEngine::initialize()
172
+ {
173
+ Mutex::Lock lock(_mutex);
174
+ if(_initialized)
175
+ {
176
+ return;
177
+ }
178
+
179
+ SSLEngine::initialize();
180
+
181
+ const string prefix = "IceSSL.";
182
+ const PropertiesPtr properties = communicator()->getProperties();
183
+
184
+ //
185
+ // Protocols selects which protocols to enable, by default we only enable TLS1.0
186
+ // TLS1.1 and TLS1.2 to avoid security issues with SSLv3
187
+ //
188
+ vector<string> defaultProtocols;
189
+ defaultProtocols.push_back("tls1_0");
190
+ defaultProtocols.push_back("tls1_1");
191
+ defaultProtocols.push_back("tls1_2");
192
+ const_cast<DWORD&>(_protocols) =
193
+ parseProtocols(properties->getPropertyAsListWithDefault(prefix + "Protocols", defaultProtocols));
194
+
195
+ //
196
+ // Check for a default directory. We look in this directory for
197
+ // files mentioned in the configuration.
198
+ //
199
+ string defaultDir = properties->getProperty(prefix + "DefaultDir");
200
+
201
+ int passwordRetryMax = properties->getPropertyAsIntWithDefault(prefix + "PasswordRetryMax", 3);
202
+ PasswordPromptPtr passwordPrompt = getPasswordPrompt();
203
+ setPassword(properties->getProperty(prefix + "Password"));
204
+
205
+ string ciphers = properties->getProperty(prefix + "Ciphers");
206
+ if(!ciphers.empty())
207
+ {
208
+ parseCiphers(ciphers);
209
+ }
210
+
211
+ if(securityTraceLevel() >= 1)
212
+ {
213
+ ostringstream os;
214
+ os << "enabling SSL ciphersuites:";
215
+ if(_ciphers.empty())
216
+ {
217
+ for(int i = 0; i < supportedCiphersSize; ++i)
218
+ {
219
+ os << "\n " << getCipherName(supportedCiphers[i]);
220
+ }
221
+ }
222
+ else
223
+ {
224
+ for(vector<ALG_ID>::const_iterator i = _ciphers.begin(); i != _ciphers.end(); ++i)
225
+ {
226
+ os << "\n " << getCipherName(*i);
227
+ }
228
+ }
229
+ getLogger()->trace(securityTraceCategory(), os.str());
230
+ }
231
+
232
+ string certStore = properties->getPropertyWithDefault(prefix + "CertStore", "CurrentUser");
233
+ if(certStore != "CurrentUser" && certStore != "LocalMachine")
234
+ {
235
+ getLogger()->warning("Invalid IceSSL.CertStore value `" + certStore + "' adjusted to `CurrentUser'");
236
+ certStore = "CurrentUser";
237
+ }
238
+
239
+ //
240
+ // Create trusted CA store with contents of CertAuthFile
241
+ //
242
+ string caFile = properties->getProperty(prefix + "CertAuthFile");
243
+ if(!caFile.empty())
244
+ {
245
+ _rootStore = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, 0, 0, 0);
246
+ if(!_rootStore)
247
+ {
248
+ throw PluginInitializationException(__FILE__, __LINE__,
249
+ "IceSSL: error creating in memory certificate store:\n" + lastErrorToString());
250
+ }
251
+
252
+ if(!checkPath(caFile, defaultDir, false))
253
+ {
254
+ throw PluginInitializationException(__FILE__, __LINE__,
255
+ "IceSSL: CA certificate file not found:\n" + caFile);
256
+ }
257
+
258
+ addCertificateToStore(caFile, _rootStore);
259
+
260
+ //
261
+ // Create a chain engine that uses our Trusted Root Store
262
+ //
263
+ #ifdef __MINGW32__
264
+ CertChainEngineConfig config;
265
+ memset(&config, 0, sizeof(CertChainEngineConfig));
266
+ config.cbSize = sizeof(CertChainEngineConfig);
267
+ #else
268
+ CERT_CHAIN_ENGINE_CONFIG config;
269
+ memset(&config, 0, sizeof(CERT_CHAIN_ENGINE_CONFIG));
270
+ config.cbSize = sizeof(CERT_CHAIN_ENGINE_CONFIG);
271
+ #endif
272
+ config.hExclusiveRoot = _rootStore;
273
+
274
+ //
275
+ // Build the chain using the LocalMachine registry location as opposed
276
+ // to the CurrentUser location.
277
+ //
278
+ if(certStore == "LocalMachine")
279
+ {
280
+ config.dwFlags = CERT_CHAIN_USE_LOCAL_MACHINE_STORE;
281
+ }
282
+
283
+ #ifdef __MINGW32__
284
+ if(!CertCreateCertificateChainEngine(reinterpret_cast<CERT_CHAIN_ENGINE_CONFIG*>(&config), &_chainEngine))
285
+ #else
286
+ if(!CertCreateCertificateChainEngine(&config, &_chainEngine))
287
+ #endif
288
+ {
289
+ throw PluginInitializationException(__FILE__, __LINE__,
290
+ "IceSSL: error creating certificate chain engine:\n" + lastErrorToString());
291
+ }
292
+ }
293
+ else
294
+ {
295
+ _chainEngine = (certStore == "LocalMachine") ? HCCE_LOCAL_MACHINE : HCCE_CURRENT_USER;
296
+ }
297
+
298
+ //
299
+ // Import the application certificate and private keys.
300
+ //
301
+ string keySet = properties->getPropertyWithDefault(prefix + "KeySet", "DefaultKeySet");
302
+ if(keySet != "DefaultKeySet" && keySet != "UserKeySet" && keySet != "MachineKeySet")
303
+ {
304
+ getLogger()->warning("Invalid IceSSL.KeySet value `" + keySet + "' adjusted to `DefaultKeySet'");
305
+ keySet = "DefaultKeySet";
306
+ }
307
+
308
+ DWORD importFlags = (keySet == "MachineKeySet") ? CRYPT_MACHINE_KEYSET : CRYPT_USER_KEYSET;
309
+
310
+ string certFile = properties->getProperty(prefix + "CertFile");
311
+ string keyFile = properties->getPropertyWithDefault(prefix + "KeyFile", certFile);
312
+
313
+ if(!certFile.empty())
314
+ {
315
+ vector<string> certFiles;
316
+ if(!splitString(certFile, IceUtilInternal::pathsep, certFiles) || certFiles.size() > 2)
317
+ {
318
+ throw PluginInitializationException(__FILE__, __LINE__,
319
+ "IceSSL: invalid value for " + prefix + "CertFile:\n" + certFile);
320
+ }
321
+
322
+ vector<string> keyFiles;
323
+ if(!splitString(keyFile, IceUtilInternal::pathsep, keyFiles) || keyFiles.size() > 2)
324
+ {
325
+ throw PluginInitializationException(__FILE__, __LINE__,
326
+ "IceSSL: invalid value for " + prefix + "KeyFile:\n" + keyFile);
327
+ }
328
+
329
+ if(certFiles.size() != keyFiles.size())
330
+ {
331
+ throw PluginInitializationException(__FILE__, __LINE__,
332
+ "IceSSL: " + prefix + "KeyFile does not agree with " + prefix + "CertFile");
333
+ }
334
+
335
+ for(size_t i = 0; i < certFiles.size(); ++i)
336
+ {
337
+ string certFile = certFiles[i];
338
+ if(!checkPath(certFile, defaultDir, false))
339
+ {
340
+ throw PluginInitializationException(__FILE__, __LINE__,
341
+ "IceSSL: certificate file not found:\n" + certFile);
342
+ }
343
+
344
+ vector<char> buffer;
345
+ readFile(certFile, buffer);
346
+
347
+ CRYPT_DATA_BLOB pfxBlob;
348
+ pfxBlob.cbData = static_cast<DWORD>(buffer.size());
349
+ pfxBlob.pbData = reinterpret_cast<BYTE*>(&buffer[0]);
350
+
351
+ HCERTSTORE store = 0;
352
+ PCCERT_CONTEXT cert = 0;
353
+ int err = 0;
354
+ int count = 0;
355
+ do
356
+ {
357
+ string s = password(false);
358
+ store = PFXImportCertStore(&pfxBlob, stringToWstring(s).c_str(), importFlags);
359
+ err = store ? 0 : GetLastError();
360
+ }
361
+ while(err == ERROR_INVALID_PASSWORD && passwordPrompt && ++count < passwordRetryMax);
362
+
363
+ if(store)
364
+ {
365
+ _stores.push_back(store);
366
+ cert = CertFindCertificateInStore(store, X509_ASN_ENCODING, 0, CERT_FIND_ANY, 0, cert);
367
+ if(!cert)
368
+ {
369
+ throw PluginInitializationException(__FILE__, __LINE__,
370
+ "IceSSL: certificate error:\n" + lastErrorToString());
371
+ }
372
+ _certs.push_back(cert);
373
+ continue;
374
+ }
375
+
376
+ assert(err);
377
+
378
+ if(err != CRYPT_E_BAD_ENCODE)
379
+ {
380
+ throw PluginInitializationException(__FILE__, __LINE__,
381
+ "IceSSL: error decoding certificate:\n" + lastErrorToString());
382
+ }
383
+
384
+ //
385
+ // Try to load certificate & key as PEM files.
386
+ //
387
+ err = 0;
388
+ keyFile = keyFiles[i];
389
+ if(!checkPath(keyFile, defaultDir, false))
390
+ {
391
+ throw PluginInitializationException(__FILE__, __LINE__, "IceSSL: key file not found:\n" + keyFile);
392
+ }
393
+
394
+ readFile(keyFile, buffer);
395
+
396
+ vector<BYTE> outBuffer;
397
+ outBuffer.resize(buffer.size());
398
+ DWORD outLength = static_cast<DWORD>(buffer.size());
399
+
400
+ //
401
+ // Convert the PEM encoded buffer to DER binary format.
402
+ //
403
+ if(!CryptStringToBinary(&buffer[0], static_cast<DWORD>(buffer.size()), CRYPT_STRING_BASE64HEADER,
404
+ &outBuffer[0], &outLength, 0, 0))
405
+ {
406
+ throw PluginInitializationException(__FILE__, __LINE__,
407
+ "IceSSL: error decoding key:\n" + lastErrorToString());
408
+ }
409
+
410
+ PCRYPT_PRIVATE_KEY_INFO keyInfo = 0;
411
+ BYTE* key = 0;
412
+ HCRYPTKEY hKey = 0;
413
+
414
+ try
415
+ {
416
+ DWORD decodedLength = 0;
417
+ if(!CryptDecodeObjectEx(X509_ASN_ENCODING, PKCS_PRIVATE_KEY_INFO, &outBuffer[0], outLength,
418
+ CRYPT_DECODE_ALLOC_FLAG, 0, &keyInfo, &decodedLength))
419
+ {
420
+ throw PluginInitializationException(__FILE__, __LINE__,
421
+ "IceSSL: error decoding key:\n" + lastErrorToString());
422
+ }
423
+
424
+ //
425
+ // Check that we are using a RSA Key
426
+ //
427
+ if(strcmp(keyInfo->Algorithm.pszObjId, szOID_RSA_RSA))
428
+ {
429
+ throw PluginInitializationException(__FILE__, __LINE__,
430
+ string("IceSSL: error unknow key algorithm: `") + keyInfo->Algorithm.pszObjId + "'");
431
+ }
432
+
433
+ //
434
+ // Create a new RSA key set to store our key
435
+ //
436
+ const wstring keySetName = stringToWstring(generateUUID());
437
+ HCRYPTPROV cryptProv = 0;
438
+
439
+ DWORD contextFlags = (keySet == "MachineKeySet") ? CRYPT_MACHINE_KEYSET | CRYPT_NEWKEYSET :
440
+ CRYPT_NEWKEYSET;
441
+
442
+ if(!CryptAcquireContextW(&cryptProv, keySetName.c_str(), MS_DEF_PROV_W, PROV_RSA_FULL, contextFlags))
443
+ {
444
+ throw PluginInitializationException(__FILE__, __LINE__,
445
+ "IceSSL: error acquiring cryptographic context:\n" + lastErrorToString());
446
+ }
447
+
448
+ //
449
+ // Decode the private key BLOB
450
+ //
451
+ if(!CryptDecodeObjectEx(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, PKCS_RSA_PRIVATE_KEY,
452
+ keyInfo->PrivateKey.pbData, keyInfo->PrivateKey.cbData,
453
+ CRYPT_DECODE_ALLOC_FLAG, 0, &key, &outLength))
454
+ {
455
+ throw PluginInitializationException(__FILE__, __LINE__,
456
+ "IceSSL: error decoding key:\n" + lastErrorToString());
457
+ }
458
+ LocalFree(keyInfo);
459
+ keyInfo = 0;
460
+
461
+ //
462
+ // Import the private key
463
+ //
464
+ if(!CryptImportKey(cryptProv, key, outLength, 0, 0, &hKey))
465
+ {
466
+ throw PluginInitializationException(__FILE__, __LINE__,
467
+ "IceSSL: error importing key:\n" + lastErrorToString());
468
+ }
469
+ LocalFree(key);
470
+ key = 0;
471
+
472
+ CryptDestroyKey(hKey);
473
+ hKey = 0;
474
+
475
+ //
476
+ // Create a new memory store to place the certificate
477
+ //
478
+ store = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, 0, 0, 0);
479
+ if(!store)
480
+ {
481
+ throw PluginInitializationException(__FILE__, __LINE__,
482
+ "IceSSL: error creating certificate store:\n" + lastErrorToString());
483
+ }
484
+
485
+ addCertificateToStore(certFile, store, &cert);
486
+
487
+ //
488
+ // Associate key & certificate
489
+ //
490
+ CRYPT_KEY_PROV_INFO keyProvInfo;
491
+ memset(&keyProvInfo, 0, sizeof(keyProvInfo));
492
+ keyProvInfo.pwszContainerName = const_cast<wchar_t*>(keySetName.c_str());
493
+ keyProvInfo.pwszProvName = const_cast<wchar_t*>(MS_DEF_PROV_W);
494
+ keyProvInfo.dwProvType = PROV_RSA_FULL;
495
+ keyProvInfo.dwKeySpec = AT_KEYEXCHANGE;
496
+
497
+ if(!CertSetCertificateContextProperty(cert, CERT_KEY_PROV_INFO_PROP_ID, 0, &keyProvInfo))
498
+ {
499
+ throw PluginInitializationException(__FILE__, __LINE__,
500
+ "IceSSL: error seting certificate property:\n" + lastErrorToString());
501
+ }
502
+
503
+ _certs.push_back(cert);
504
+ _stores.push_back(store);
505
+ }
506
+ catch(...)
507
+ {
508
+ if(keyInfo)
509
+ {
510
+ LocalFree(keyInfo);
511
+ }
512
+
513
+ if(key)
514
+ {
515
+ LocalFree(key);
516
+ }
517
+
518
+ if(hKey)
519
+ {
520
+ CryptDestroyKey(hKey);
521
+ }
522
+
523
+ if(cert)
524
+ {
525
+ CertFreeCertificateContext(cert);
526
+ }
527
+
528
+ if(store)
529
+ {
530
+ CertCloseStore(store, 0);
531
+ }
532
+ throw;
533
+ }
534
+ }
535
+
536
+ _allCerts.insert(_allCerts.end(), _certs.begin(), _certs.end());
537
+ }
538
+
539
+ const string findPrefix = prefix + "FindCert.";
540
+ map<string, string> certProps = properties->getPropertiesForPrefix(findPrefix);
541
+ if(!certProps.empty())
542
+ {
543
+ for(map<string, string>::const_iterator i = certProps.begin(); i != certProps.end(); ++i)
544
+ {
545
+ const string name = i->first;
546
+ const string val = i->second;
547
+
548
+ if(!val.empty())
549
+ {
550
+ string storeSpec = name.substr(findPrefix.size());
551
+ vector<PCCERT_CONTEXT> certs = findCertificates(name, storeSpec, val, _stores);
552
+ _allCerts.insert(_allCerts.end(), certs.begin(), certs.end());
553
+ }
554
+ }
555
+
556
+ if(_allCerts.empty())
557
+ {
558
+ throw PluginInitializationException(__FILE__, __LINE__, "IceSSL: no certificates found");
559
+ }
560
+ }
561
+ _initialized = true;
562
+ }
563
+
564
+ string
565
+ SChannelEngine::getCipherName(ALG_ID cipher) const
566
+ {
567
+ switch(cipher)
568
+ {
569
+ case CALG_RSA_KEYX:
570
+ return "RSA_KEYX";
571
+ case CALG_RSA_SIGN:
572
+ return "RSA_SIGN";
573
+ case CALG_DSS_SIGN:
574
+ return "DSS_SIGN";
575
+ case CALG_KEA_KEYX:
576
+ return "KEA_KEYX";
577
+ case CALG_DH_EPHEM:
578
+ return "DH_EPHEM";
579
+ case CALG_ECDH:
580
+ return "ECDH";
581
+ case CALG_ECDSA:
582
+ return "ECDSA";
583
+ case CALG_3DES:
584
+ return "3DES";
585
+ case CALG_AES_128:
586
+ return "AES_128";
587
+ case CALG_AES_256:
588
+ return "AES_256";
589
+ case CALG_DES:
590
+ return "DES";
591
+ case CALG_RC2:
592
+ return "RC2";
593
+ case CALG_RC4:
594
+ return "RC4";
595
+ default:
596
+ return "Unknown";
597
+ }
598
+ }
599
+
600
+ bool
601
+ SChannelEngine::initialized() const
602
+ {
603
+ Mutex::Lock lock(_mutex);
604
+ return _initialized;
605
+ }
606
+
607
+ CredHandle
608
+ SChannelEngine::newCredentialsHandle(bool incoming)
609
+ {
610
+ SCHANNEL_CRED cred;
611
+ memset(&cred, 0, sizeof(cred));
612
+ cred.dwVersion = SCHANNEL_CRED_VERSION;
613
+
614
+ if(!_allCerts.empty())
615
+ {
616
+ cred.cCreds = static_cast<DWORD>(_allCerts.size());
617
+ cred.paCred = &_allCerts[0];
618
+ }
619
+
620
+ cred.grbitEnabledProtocols = _protocols;
621
+
622
+ if(incoming)
623
+ {
624
+ //
625
+ // Don't set SCH_SEND_ROOT_CERT as it seems to cause problems with
626
+ // Java certificate validation and SChannel doesn't seems to send
627
+ // the root certificate either way.
628
+ //
629
+ cred.dwFlags = SCH_CRED_NO_SYSTEM_MAPPER;
630
+ if(_rootStore)
631
+ {
632
+ cred.hRootStore = _rootStore;
633
+ }
634
+ }
635
+ else
636
+ {
637
+ cred.dwFlags = SCH_CRED_MANUAL_CRED_VALIDATION | SCH_CRED_NO_SERVERNAME_CHECK | SCH_CRED_NO_DEFAULT_CREDS;
638
+ }
639
+
640
+ if(!_ciphers.empty())
641
+ {
642
+ cred.cSupportedAlgs = static_cast<DWORD>(_ciphers.size());
643
+ cred.palgSupportedAlgs = &_ciphers[0];
644
+ }
645
+
646
+ CredHandle credHandle;
647
+ memset(&credHandle, 0, sizeof(credHandle));
648
+
649
+ SECURITY_STATUS err =
650
+ AcquireCredentialsHandle(0, const_cast<char*>(UNISP_NAME), (incoming ? SECPKG_CRED_INBOUND : SECPKG_CRED_OUTBOUND), 0, &cred, 0,
651
+ 0, &credHandle, 0);
652
+
653
+ if(err != SEC_E_OK)
654
+ {
655
+ throw SecurityException(__FILE__, __LINE__,
656
+ "IceSSL: failed to acquire credentials handle:\n" + lastErrorToString());
657
+ }
658
+ return credHandle;
659
+ }
660
+
661
+ HCERTCHAINENGINE
662
+ SChannelEngine::chainEngine() const
663
+ {
664
+ return _chainEngine;
665
+ }
666
+
667
+ void
668
+ SChannelEngine::parseCiphers(const std::string& ciphers)
669
+ {
670
+ vector<string> tokens;
671
+ splitString(ciphers, " \t", tokens);
672
+ for(vector<string>::const_iterator i = tokens.begin(); i != tokens.end(); ++i)
673
+ {
674
+ ALG_ID id = algorithmId(*i);
675
+ if(id)
676
+ {
677
+ _ciphers.push_back(id);
678
+ }
679
+ }
680
+ }
681
+
682
+ void
683
+ SChannelEngine::destroy()
684
+ {
685
+ if(_chainEngine && _chainEngine != HCCE_CURRENT_USER && _chainEngine != HCCE_LOCAL_MACHINE)
686
+ {
687
+ CertFreeCertificateChainEngine(_chainEngine);
688
+ }
689
+
690
+ if(_rootStore)
691
+ {
692
+ CertCloseStore(_rootStore, 0);
693
+ }
694
+
695
+ for(vector<PCCERT_CONTEXT>::const_iterator i = _allCerts.begin(); i != _allCerts.end(); ++i)
696
+ {
697
+ PCCERT_CONTEXT cert = *i;
698
+
699
+ //
700
+ // Only remove the keysets we create.
701
+ //
702
+ if(find(_certs.begin(), _certs.end(), cert) != _certs.end())
703
+ {
704
+ //
705
+ // Retrieve the certificate CERT_KEY_PROV_INFO_PROP_ID property, we use the CRYPT_KEY_PROV_INFO
706
+ // data to then remove the key set associated with the certificate.
707
+ //
708
+ DWORD length = 0;
709
+ if(CertGetCertificateContextProperty(cert, CERT_KEY_PROV_INFO_PROP_ID, 0, &length))
710
+ {
711
+ vector<char> buf(length);
712
+ if(CertGetCertificateContextProperty(cert, CERT_KEY_PROV_INFO_PROP_ID, &buf[0], &length))
713
+ {
714
+ CRYPT_KEY_PROV_INFO* keyProvInfo = reinterpret_cast<CRYPT_KEY_PROV_INFO*>(&buf[0]);
715
+ HCRYPTPROV cryptProv = 0;
716
+ CryptAcquireContextW(&cryptProv, keyProvInfo->pwszContainerName, keyProvInfo->pwszProvName,
717
+ keyProvInfo->dwProvType, CRYPT_DELETEKEYSET);
718
+ }
719
+ CertFreeCertificateContext(cert);
720
+ }
721
+ }
722
+ }
723
+
724
+ for(vector<HCERTSTORE>::const_iterator i = _stores.begin(); i != _stores.end(); ++i)
725
+ {
726
+ CertCloseStore(*i, 0);
727
+ }
728
+ }
729
+ #endif