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,96 @@
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_ENDPOINT_I_H
11
+ #define ICE_SSL_ENDPOINT_I_H
12
+
13
+ #include <Ice/IPEndpointI.h>
14
+ #include <Ice/EndpointFactory.h>
15
+ #include <IceSSL/InstanceF.h>
16
+ #include <IceSSL/EndpointInfo.h>
17
+ #include <Ice/Network.h>
18
+
19
+ namespace IceSSL
20
+ {
21
+
22
+ class EndpointI : public IceInternal::IPEndpointI
23
+ {
24
+ public:
25
+
26
+ EndpointI(const InstancePtr&, const std::string&, Ice::Int, const IceInternal::Address&, Ice::Int,
27
+ const std::string&, bool);
28
+ EndpointI(const InstancePtr&);
29
+ EndpointI(const InstancePtr&, IceInternal::BasicStream*);
30
+
31
+ virtual Ice::EndpointInfoPtr getInfo() const;
32
+
33
+ virtual Ice::Int timeout() const;
34
+ virtual IceInternal::EndpointIPtr timeout(Ice::Int) const;
35
+ virtual bool compress() const;
36
+ virtual IceInternal::EndpointIPtr compress(bool) const;
37
+ virtual bool datagram() const;
38
+ virtual bool secure() const;
39
+
40
+ virtual IceInternal::TransceiverPtr transceiver() const;
41
+ virtual IceInternal::AcceptorPtr acceptor(const std::string&) const;
42
+ virtual std::string options() const;
43
+
44
+ virtual bool operator==(const Ice::LocalObject&) const;
45
+ virtual bool operator<(const Ice::LocalObject&) const;
46
+
47
+ virtual EndpointIPtr endpoint(const AcceptorIPtr&) const;
48
+
49
+ using IceInternal::IPEndpointI::connectionId;
50
+
51
+ protected:
52
+
53
+ virtual void streamWriteImpl(IceInternal::BasicStream*) const;
54
+ virtual void hashInit(Ice::Int&) const;
55
+ virtual void fillEndpointInfo(Ice::IPEndpointInfo*) const;
56
+ virtual bool checkOption(const std::string&, const std::string&, const std::string&);
57
+
58
+ virtual IceInternal::ConnectorPtr createConnector(const IceInternal::Address&,
59
+ const IceInternal::NetworkProxyPtr&) const;
60
+ virtual IceInternal::IPEndpointIPtr createEndpoint(const std::string&, int, const std::string&) const;
61
+
62
+ private:
63
+
64
+ //
65
+ // All members are const, because endpoints are immutable.
66
+ //
67
+ const InstancePtr _instance;
68
+ const Ice::Int _timeout;
69
+ const bool _compress;
70
+ };
71
+
72
+ class EndpointFactoryI : public IceInternal::EndpointFactory
73
+ {
74
+ public:
75
+
76
+ virtual ~EndpointFactoryI();
77
+
78
+ virtual Ice::Short type() const;
79
+ virtual std::string protocol() const;
80
+ virtual IceInternal::EndpointIPtr create(std::vector<std::string>&, bool) const;
81
+ virtual IceInternal::EndpointIPtr read(IceInternal::BasicStream*) const;
82
+ virtual void destroy();
83
+
84
+ virtual IceInternal::EndpointFactoryPtr clone(const IceInternal::ProtocolInstancePtr&) const;
85
+
86
+ private:
87
+
88
+ EndpointFactoryI(const InstancePtr&);
89
+ friend class PluginI;
90
+
91
+ InstancePtr _instance;
92
+ };
93
+
94
+ }
95
+
96
+ #endif
@@ -0,0 +1,41 @@
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
+ // Ice version 3.6b
11
+ //
12
+ // <auto-generated>
13
+ //
14
+ // Generated from file `EndpointInfo.ice'
15
+ //
16
+ // Warning: do not edit this file.
17
+ //
18
+ // </auto-generated>
19
+ //
20
+
21
+ #ifndef ICE_SSL_API_EXPORTS
22
+ # define ICE_SSL_API_EXPORTS
23
+ #endif
24
+ #include <IceSSL/EndpointInfo.h>
25
+ #include <IceUtil/PushDisableWarnings.h>
26
+ #include <Ice/BasicStream.h>
27
+ #include <IceUtil/Iterator.h>
28
+ #include <IceUtil/PopDisableWarnings.h>
29
+
30
+ #ifndef ICE_IGNORE_VERSION
31
+ # if ICE_INT_VERSION != 30651
32
+ # error Ice version mismatch: an exact match is required for beta generated code
33
+ # endif
34
+ #endif
35
+
36
+ namespace
37
+ {
38
+
39
+ }
40
+
41
+ ICE_DECLSPEC_EXPORT ::Ice::LocalObject* IceSSL::upCast(::IceSSL::EndpointInfo* p) { return p; }
@@ -0,0 +1,38 @@
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 <IceUtil/Config.h>
11
+ #ifdef _WIN32
12
+ # include <winsock2.h>
13
+ #endif
14
+ #include <IceSSL/Instance.h>
15
+ #include <IceSSL/SSLEngine.h>
16
+ #include <Ice/Properties.h>
17
+
18
+ using namespace std;
19
+ using namespace Ice;
20
+ using namespace IceSSL;
21
+
22
+ IceUtil::Shared* IceSSL::upCast(IceSSL::Instance* p) { return p; }
23
+
24
+ IceSSL::Instance::Instance(const SSLEnginePtr& engine, Short type, const string& protocol) :
25
+ ProtocolInstance(engine->communicator(), type, protocol),
26
+ _engine(engine)
27
+ {
28
+ }
29
+
30
+ IceSSL::Instance::~Instance()
31
+ {
32
+ }
33
+
34
+ bool
35
+ IceSSL::Instance::initialized() const
36
+ {
37
+ return _engine->initialized();
38
+ }
@@ -0,0 +1,42 @@
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_INSTANCE_H
11
+ #define ICE_SSL_INSTANCE_H
12
+
13
+ #include <IceSSL/InstanceF.h>
14
+ #include <Ice/ProtocolInstance.h>
15
+ #include <IceSSL/SSLEngineF.h>
16
+
17
+ namespace IceSSL
18
+ {
19
+
20
+ class Instance : public IceInternal::ProtocolInstance
21
+ {
22
+ public:
23
+
24
+ Instance(const SSLEnginePtr&, Ice::Short, const std::string&);
25
+ virtual ~Instance();
26
+
27
+ SSLEnginePtr
28
+ engine() const
29
+ {
30
+ return _engine;
31
+ }
32
+
33
+ bool initialized() const;
34
+
35
+ private:
36
+
37
+ const SSLEnginePtr _engine;
38
+ };
39
+
40
+ }
41
+
42
+ #endif
@@ -0,0 +1,34 @@
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_INSTANCE_F_H
11
+ #define ICE_SSL_INSTANCE_F_H
12
+
13
+ #include <IceUtil/Shared.h>
14
+
15
+ #include <Ice/Handle.h>
16
+
17
+ namespace IceSSL
18
+ {
19
+
20
+ class Instance;
21
+ IceUtil::Shared* upCast(Instance*);
22
+ typedef IceInternal::Handle<Instance> InstancePtr;
23
+
24
+ class EndpointI;
25
+ IceUtil::Shared* upCast(EndpointI*);
26
+ typedef IceInternal::Handle<EndpointI> EndpointIPtr;
27
+
28
+ class AcceptorI;
29
+ IceUtil::Shared* upCast(AcceptorI*);
30
+ typedef IceInternal::Handle<AcceptorI> AcceptorIPtr;
31
+
32
+ }
33
+
34
+ #endif
@@ -0,0 +1,82 @@
1
+
2
+ # **********************************************************************
3
+ #
4
+ # Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved.
5
+ #
6
+ # This copy of Ice is licensed to you under the terms described in the
7
+ # ICE_LICENSE file included in this distribution.
8
+ #
9
+ # **********************************************************************
10
+
11
+ top_srcdir = ../..
12
+
13
+ LIBFILENAME = $(call mklibfilename,IceSSL,$(VERSION))
14
+ SONAME = $(call mksoname,IceSSL,$(SOVERSION))
15
+ LIBNAME = $(call mklibname,IceSSL)
16
+
17
+ TARGETS = $(call mklibtargets,$(libdir)/$(LIBFILENAME),$(libdir)/$(SONAME),$(libdir)$(cpp11libdirsuffix)/$(LIBNAME))
18
+
19
+ SLICE_OBJS = ConnectionInfo.o \
20
+ EndpointInfo.o
21
+
22
+ OBJS = AcceptorI.o \
23
+ Certificate.o \
24
+ ConnectorI.o \
25
+ EndpointI.o \
26
+ Instance.o \
27
+ PluginI.o \
28
+ RFC2253.o \
29
+ SSLEngine.o \
30
+ TrustManager.o \
31
+ Util.o \
32
+ $(SLICE_OBJS)
33
+
34
+ ifneq ($(findstring MINGW,$(shell uname)),)
35
+ OBJS := $(OBJS) \
36
+ SChannelEngine.o \
37
+ SChannelTransceiverI.o
38
+ else
39
+ ifeq ($(shell uname),Darwin)
40
+ OBJS := $(OBJS) \
41
+ SecureTransportEngine.o \
42
+ SecureTransportTransceiverI.o
43
+ else
44
+ OBJS := $(OBJS) \
45
+ OpenSSLEngine.o \
46
+ OpenSSLTransceiverI.o
47
+ endif
48
+ endif
49
+
50
+ HDIR = $(headerdir)/IceSSL
51
+ SDIR = $(slicedir)/IceSSL
52
+
53
+ include $(top_srcdir)/config/Make.rules
54
+
55
+ CPPFLAGS := -I.. $(CPPFLAGS) -DICE_SSL_API_EXPORTS $(OPENSSL_FLAGS)
56
+ SLICE2CPPFLAGS := --ice --include-dir IceSSL --dll-export ICE_SSL_API $(SLICE2CPPFLAGS)
57
+
58
+ LINKWITH := $(BZIP2_RPATH_LINK) -lIce -lIceUtil $(SSL_OS_LIBS) $(CXXLIBS)
59
+
60
+ ifeq ($(STATICLIBS),yes)
61
+ $(libdir)/$(LIBNAME): $(OBJS)
62
+ @mkdir -p $(dir $@)
63
+ rm -f $@
64
+ $(call mklib,$@,$(OBJS))
65
+ else
66
+ $(libdir)/$(LIBFILENAME): $(OBJS)
67
+ @mkdir -p $(dir $@)
68
+ rm -f $@
69
+ $(call mkshlib,$@,$(SONAME),$(OBJS),$(LINKWITH))
70
+
71
+ $(libdir)/$(SONAME): $(libdir)/$(LIBFILENAME)
72
+ rm -f $@
73
+ ln -s $(LIBFILENAME) $@
74
+
75
+ $(libdir)$(cpp11libdirsuffix)/$(LIBNAME): $(libdir)/$(SONAME)
76
+ @mkdir -p $(libdir)$(cpp11libdirsuffix)
77
+ rm -f $@
78
+ ln -s $(cpp11sonamedir)$(SONAME) $@
79
+ endif
80
+
81
+ install:: all
82
+ $(call installlib,$(DESTDIR)$(install_libdir),$(libdir),$(LIBFILENAME),$(SONAME),$(LIBNAME))
@@ -0,0 +1,1001 @@
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/Config.h>
11
+
12
+ #include <IceSSL/SSLEngine.h>
13
+ #include <IceSSL/Util.h>
14
+ #include <IceSSL/TrustManager.h>
15
+
16
+ #include <Ice/Communicator.h>
17
+ #include <Ice/LocalException.h>
18
+ #include <Ice/Logger.h>
19
+ #include <Ice/LoggerUtil.h>
20
+ #include <Ice/Properties.h>
21
+
22
+ #include <IceUtil/StringConverter.h>
23
+ #include <IceUtil/StringUtil.h>
24
+ #include <IceUtil/Mutex.h>
25
+ #include <IceUtil/MutexPtrLock.h>
26
+ #include <IceUtil/FileUtil.h>
27
+
28
+ #ifdef ICE_USE_OPENSSL
29
+
30
+ #include <openssl/rand.h>
31
+ #include <openssl/err.h>
32
+ #include <openssl/ssl.h>
33
+ #include <openssl/pkcs12.h>
34
+
35
+ using namespace std;
36
+ using namespace Ice;
37
+ using namespace IceSSL;
38
+
39
+ namespace
40
+ {
41
+
42
+ IceUtil::Mutex* staticMutex = 0;
43
+ int instanceCount = 0;
44
+ IceUtil::Mutex* locks = 0;
45
+
46
+ class Init
47
+ {
48
+ public:
49
+
50
+ Init()
51
+ {
52
+ staticMutex = new IceUtil::Mutex;
53
+ }
54
+
55
+ ~Init()
56
+ {
57
+ delete staticMutex;
58
+ staticMutex = 0;
59
+
60
+ if(locks)
61
+ {
62
+ delete[] locks;
63
+ locks = 0;
64
+ }
65
+ }
66
+ };
67
+
68
+ Init init;
69
+ }
70
+
71
+ extern "C"
72
+ {
73
+
74
+ //
75
+ // OpenSSL mutex callback.
76
+ //
77
+ void
78
+ IceSSL_opensslLockCallback(int mode, int n, const char* /*file*/, int /*line*/)
79
+ {
80
+ assert(locks);
81
+ if(mode & CRYPTO_LOCK)
82
+ {
83
+ locks[n].lock();
84
+ }
85
+ else
86
+ {
87
+ locks[n].unlock();
88
+ }
89
+ }
90
+
91
+ //
92
+ // OpenSSL thread id callback.
93
+ //
94
+ unsigned long
95
+ IceSSL_opensslThreadIdCallback()
96
+ {
97
+ # if defined(_WIN32)
98
+ return static_cast<unsigned long>(GetCurrentThreadId());
99
+ # elif defined(__FreeBSD__) || defined(__APPLE__) || defined(__osf1__)
100
+ //
101
+ // On some platforms, pthread_t is a pointer to a per-thread structure.
102
+ //
103
+ return reinterpret_cast<unsigned long>(pthread_self());
104
+ # elif (defined(__linux) || defined(__sun) || defined(__hpux)) || defined(_AIX)
105
+ //
106
+ // On Linux, Solaris, HP-UX and AIX, pthread_t is an integer.
107
+ //
108
+ return static_cast<unsigned long>(pthread_self());
109
+ # else
110
+ # error "Unknown platform"
111
+ # endif
112
+ }
113
+
114
+ int
115
+ IceSSL_opensslPasswordCallback(char* buf, int size, int flag, void* userData)
116
+ {
117
+ OpenSSLEngine* p = reinterpret_cast<OpenSSLEngine*>(userData);
118
+ string passwd = p->password(flag == 1);
119
+ int sz = static_cast<int>(passwd.size());
120
+ if(sz > size)
121
+ {
122
+ sz = size - 1;
123
+ }
124
+ # if defined(_WIN32)
125
+ strncpy_s(buf, size, passwd.c_str(), sz);
126
+ # else
127
+ strncpy(buf, passwd.c_str(), sz);
128
+ # endif
129
+ buf[sz] = '\0';
130
+
131
+ for(string::iterator i = passwd.begin(); i != passwd.end(); ++i)
132
+ {
133
+ *i = '\0';
134
+ }
135
+
136
+ return sz;
137
+ }
138
+
139
+ # ifndef OPENSSL_NO_DH
140
+ DH*
141
+ IceSSL_opensslDHCallback(SSL* ssl, int /*isExport*/, int keyLength)
142
+ {
143
+ OpenSSLEngine* p = reinterpret_cast<OpenSSLEngine*>(SSL_CTX_get_ex_data(ssl->ctx, 0));
144
+ return p->dhParams(keyLength);
145
+ }
146
+ # endif
147
+
148
+ int
149
+ IceSSL_opensslVerifyCallback(int ok, X509_STORE_CTX* ctx)
150
+ {
151
+ SSL* ssl = reinterpret_cast<SSL*>(X509_STORE_CTX_get_ex_data(ctx, SSL_get_ex_data_X509_STORE_CTX_idx()));
152
+ OpenSSLEngine* p = reinterpret_cast<OpenSSLEngine*>(SSL_CTX_get_ex_data(ssl->ctx, 0));
153
+ return p->verifyCallback(ok, ssl, ctx);
154
+ }
155
+
156
+ }
157
+
158
+ namespace
159
+ {
160
+ bool
161
+ passwordError()
162
+ {
163
+ int reason = ERR_GET_REASON(ERR_peek_error());
164
+ return (reason == PEM_R_BAD_BASE64_DECODE ||
165
+ reason == PEM_R_BAD_DECRYPT ||
166
+ reason == PEM_R_BAD_PASSWORD_READ ||
167
+ reason == PEM_R_PROBLEMS_GETTING_PASSWORD ||
168
+ reason == PKCS12_R_MAC_VERIFY_FAILURE);
169
+ }
170
+
171
+ }
172
+
173
+ IceUtil::Shared* IceSSL::upCast(IceSSL::OpenSSLEngine* p) { return p; }
174
+
175
+ OpenSSLEngine::OpenSSLEngine(const CommunicatorPtr& communicator) :
176
+ SSLEngine(communicator),
177
+ _initialized(false),
178
+ _ctx(0)
179
+ {
180
+ __setNoDelete(true);
181
+
182
+ //
183
+ // Initialize OpenSSL if necessary.
184
+ //
185
+ IceUtilInternal::MutexPtrLock<IceUtil::Mutex> sync(staticMutex);
186
+ instanceCount++;
187
+
188
+ if(instanceCount == 1)
189
+ {
190
+ PropertiesPtr properties = communicator->getProperties();
191
+
192
+ //
193
+ // The IceSSL.InitOpenSSL property specifies whether we should perform the global
194
+ // startup (and shutdown) tasks for the OpenSSL library.
195
+ //
196
+ // If an application uses multiple components that each depend on OpenSSL, the
197
+ // application should disable OpenSSL initialization in those components and
198
+ // perform the initialization itself.
199
+ //
200
+ _initOpenSSL = properties->getPropertyAsIntWithDefault("IceSSL.InitOpenSSL", 1) > 0;
201
+ if(_initOpenSSL)
202
+ {
203
+ //
204
+ // Create the mutexes and set the callbacks.
205
+ //
206
+ if(!locks)
207
+ {
208
+ locks = new IceUtil::Mutex[CRYPTO_num_locks()];
209
+ CRYPTO_set_locking_callback(IceSSL_opensslLockCallback);
210
+ CRYPTO_set_id_callback(IceSSL_opensslThreadIdCallback);
211
+ }
212
+
213
+ //
214
+ // Load human-readable error messages.
215
+ //
216
+ SSL_load_error_strings();
217
+
218
+ //
219
+ // Initialize the SSL library.
220
+ //
221
+ SSL_library_init();
222
+
223
+ //
224
+ // This is necessary to allow programs that use OpenSSL 0.9.x to
225
+ // load private key files generated by OpenSSL 1.x.
226
+ //
227
+ OpenSSL_add_all_algorithms();
228
+
229
+ //
230
+ // Initialize the PRNG.
231
+ //
232
+ # ifdef WINDOWS
233
+ RAND_screen(); // Uses data from the screen if possible.
234
+ # endif
235
+ char randFile[1024];
236
+ if(RAND_file_name(randFile, sizeof(randFile))) // Gets the name of a default seed file.
237
+ {
238
+ RAND_load_file(randFile, 1024);
239
+ }
240
+
241
+ string randFiles = properties->getProperty("IceSSL.Random");
242
+
243
+ if(!randFiles.empty())
244
+ {
245
+ vector<string> files;
246
+ string defaultDir = properties->getProperty("IceSSL.DefaultDir");
247
+
248
+ if(!IceUtilInternal::splitString(randFiles, IceUtilInternal::pathsep, files))
249
+ {
250
+ throw PluginInitializationException(__FILE__, __LINE__,
251
+ "IceSSL: invalid value for IceSSL.Random:\n" + randFiles);
252
+ }
253
+ for(vector<string>::iterator p = files.begin(); p != files.end(); ++p)
254
+ {
255
+ string file = *p;
256
+ if(!checkPath(file, defaultDir, false))
257
+ {
258
+ throw PluginInitializationException(__FILE__, __LINE__,
259
+ "IceSSL: entropy data file not found:\n" + file);
260
+ }
261
+ if(!RAND_load_file(file.c_str(), 1024))
262
+ {
263
+ throw PluginInitializationException(__FILE__, __LINE__,
264
+ "IceSSL: unable to load entropy data from " + file);
265
+ }
266
+ }
267
+ }
268
+ # ifndef _WIN32
269
+ //
270
+ // The Entropy Gathering Daemon (EGD) is not available on Windows.
271
+ // The file should be a Unix domain socket for the daemon.
272
+ //
273
+ string entropyDaemon = properties->getProperty("IceSSL.EntropyDaemon");
274
+ if(!entropyDaemon.empty())
275
+ {
276
+ if(RAND_egd(entropyDaemon.c_str()) <= 0)
277
+ {
278
+ throw PluginInitializationException(__FILE__, __LINE__,
279
+ "IceSSL: EGD failure using file " + entropyDaemon);
280
+ }
281
+ }
282
+ # endif
283
+ if(!RAND_status())
284
+ {
285
+ getLogger()->warning("IceSSL: insufficient data to initialize PRNG");
286
+ }
287
+ }
288
+ else
289
+ {
290
+ if(!properties->getProperty("IceSSL.Random").empty())
291
+ {
292
+ getLogger()->warning("IceSSL: ignoring IceSSL.Random because OpenSSL initialization is disabled");
293
+ }
294
+ # ifndef _WIN32
295
+ else if(!properties->getProperty("IceSSL.EntropyDaemon").empty())
296
+ {
297
+ getLogger()->warning("IceSSL: ignoring IceSSL.EntropyDaemon because OpenSSL initialization is disabled");
298
+ }
299
+ # endif
300
+ }
301
+ }
302
+ __setNoDelete(false);
303
+ }
304
+
305
+ OpenSSLEngine::~OpenSSLEngine()
306
+ {
307
+ //
308
+ // Clean up OpenSSL resources.
309
+ //
310
+ IceUtilInternal::MutexPtrLock<IceUtil::Mutex> sync(staticMutex);
311
+
312
+ if(--instanceCount == 0 && _initOpenSSL)
313
+ {
314
+ //
315
+ // NOTE: We can't destroy the locks here: threads which might have called openssl methods
316
+ // might access openssl locks upon termination (from DllMain/THREAD_DETACHED). Instead,
317
+ // we release the locks in the ~Init() static destructor. See bug #4156.
318
+ //
319
+ //CRYPTO_set_locking_callback(0);
320
+ //CRYPTO_set_id_callback(0);
321
+ //delete[] locks;
322
+ //locks = 0;
323
+
324
+ CRYPTO_cleanup_all_ex_data();
325
+ RAND_cleanup();
326
+ ERR_free_strings();
327
+ EVP_cleanup();
328
+ }
329
+ }
330
+
331
+ bool
332
+ OpenSSLEngine::initialized() const
333
+ {
334
+ IceUtil::Mutex::Lock lock(_mutex);
335
+ return _initialized;
336
+ }
337
+
338
+ void
339
+ OpenSSLEngine::initialize()
340
+ {
341
+ IceUtil::Mutex::Lock lock(_mutex);
342
+ if(_initialized)
343
+ {
344
+ return;
345
+ }
346
+
347
+ try
348
+ {
349
+ SSLEngine::initialize();
350
+
351
+ const string propPrefix = "IceSSL.";
352
+ PropertiesPtr properties = communicator()->getProperties();
353
+
354
+ //
355
+ // Protocols selects which protocols to enable, by default we only enable TLS1.0
356
+ // TLS1.1 and TLS1.2 to avoid security issues with SSLv3
357
+ //
358
+ vector<string> defaultProtocols;
359
+ defaultProtocols.push_back("tls1_0");
360
+ defaultProtocols.push_back("tls1_1");
361
+ defaultProtocols.push_back("tls1_2");
362
+
363
+ const int protocols =
364
+ parseProtocols(properties->getPropertyAsListWithDefault(propPrefix + "Protocols", defaultProtocols));
365
+
366
+ //
367
+ // Create an SSL context if the application hasn't supplied one.
368
+ //
369
+ if(!_ctx)
370
+ {
371
+ _ctx = SSL_CTX_new(getMethod(protocols));
372
+ if(!_ctx)
373
+ {
374
+ throw PluginInitializationException(__FILE__, __LINE__,
375
+ "IceSSL: unable to create SSL context:\n" + sslErrors());
376
+ }
377
+
378
+ //
379
+ // Check for a default directory. We look in this directory for
380
+ // files mentioned in the configuration.
381
+ //
382
+ string defaultDir = properties->getProperty(propPrefix + "DefaultDir");
383
+
384
+ //
385
+ // If the configuration defines a password, or the application has supplied
386
+ // a password prompt object, then register a password callback. Otherwise,
387
+ // let OpenSSL use its default behavior.
388
+ //
389
+ {
390
+ // TODO: Support quoted value?
391
+ string password = properties->getProperty(propPrefix + "Password");
392
+ if(!password.empty() || getPasswordPrompt())
393
+ {
394
+ SSL_CTX_set_default_passwd_cb(_ctx, IceSSL_opensslPasswordCallback);
395
+ SSL_CTX_set_default_passwd_cb_userdata(_ctx, this);
396
+ setPassword(password);
397
+ }
398
+ }
399
+
400
+ int passwordRetryMax = properties->getPropertyAsIntWithDefault(propPrefix + "PasswordRetryMax", 3);
401
+
402
+ //
403
+ // Establish the location of CA certificates.
404
+ //
405
+ {
406
+ string caFile = properties->getProperty(propPrefix + "CertAuthFile");
407
+ string caDir = properties->getPropertyWithDefault(propPrefix + "CertAuthDir", defaultDir);
408
+ const char* file = 0;
409
+ const char* dir = 0;
410
+ if(!caFile.empty())
411
+ {
412
+ if(!checkPath(caFile, defaultDir, false))
413
+ {
414
+ throw PluginInitializationException(__FILE__, __LINE__,
415
+ "IceSSL: CA certificate file not found:\n" + caFile);
416
+ }
417
+ file = caFile.c_str();
418
+ }
419
+ if(!caDir.empty())
420
+ {
421
+ if(!checkPath(caDir, defaultDir, true))
422
+ {
423
+ throw PluginInitializationException(__FILE__, __LINE__,
424
+ "IceSSL: CA certificate directory not found:\n" + caDir);
425
+ }
426
+ dir = caDir.c_str();
427
+ }
428
+ if(file || dir)
429
+ {
430
+ //
431
+ // The certificate may be stored in an encrypted file, so handle
432
+ // password retries.
433
+ //
434
+ int count = 0;
435
+ int success = 0;
436
+ while(count < passwordRetryMax)
437
+ {
438
+ ERR_clear_error();
439
+ if((success = SSL_CTX_load_verify_locations(_ctx, file, dir))|| !passwordError())
440
+ {
441
+ break;
442
+ }
443
+ ++count;
444
+ }
445
+ if(!success)
446
+ {
447
+ string msg = "IceSSL: unable to establish CA certificates";
448
+ if(passwordError())
449
+ {
450
+ msg += ":\ninvalid password";
451
+ }
452
+ else
453
+ {
454
+ string err = sslErrors();
455
+ if(!err.empty())
456
+ {
457
+ msg += ":\n" + err;
458
+ }
459
+ }
460
+ throw PluginInitializationException(__FILE__, __LINE__, msg);
461
+ }
462
+ }
463
+ }
464
+
465
+ //
466
+ // Establish the certificate chains and private keys. One RSA certificate and
467
+ // one DSA certificate are allowed.
468
+ //
469
+ string certFile = properties->getProperty(propPrefix + "CertFile");
470
+ string keyFile = properties->getProperty(propPrefix + "KeyFile");
471
+ bool keyLoaded = false;
472
+
473
+ vector<string>::size_type numCerts = 0;
474
+ if(!certFile.empty())
475
+ {
476
+ vector<string> files;
477
+ if(!IceUtilInternal::splitString(certFile, IceUtilInternal::pathsep, files) || files.size() > 2)
478
+ {
479
+ PluginInitializationException ex(__FILE__, __LINE__,
480
+ "IceSSL: invalid value for " + propPrefix + "CertFile:\n" + certFile);
481
+ }
482
+ numCerts = files.size();
483
+ for(vector<string>::iterator p = files.begin(); p != files.end(); ++p)
484
+ {
485
+ string file = *p;
486
+ if(!checkPath(file, defaultDir, false))
487
+ {
488
+ PluginInitializationException ex(__FILE__, __LINE__,
489
+ "IceSSL: certificate file not found:\n" + file);
490
+ }
491
+ //
492
+ // First we try to load the certificate using PKCS12 format if that fails
493
+ // we fallback to PEM format.
494
+ //
495
+ FILE* f = fopen(file.c_str(), "rb");
496
+ if(!f)
497
+ {
498
+ throw PluginInitializationException(__FILE__, __LINE__,
499
+ "IceSSL: unable to load certificate chain from file " + file + "\n" +
500
+ IceUtilInternal::lastErrorToString());
501
+ }
502
+
503
+ int success = 0;
504
+
505
+ PKCS12* p12 = d2i_PKCS12_fp(f, 0);
506
+ fclose(f);
507
+ if(p12)
508
+ {
509
+ EVP_PKEY* key = 0;
510
+ X509* cert = 0;
511
+ STACK_OF(X509)* chain = 0;
512
+
513
+ int count = 0;
514
+ try
515
+ {
516
+ while(count < passwordRetryMax)
517
+ {
518
+ ERR_clear_error();
519
+ //
520
+ // chain may have a bogus value from a previous call to PKCS12_parse, so we
521
+ // reset it prior to each call.
522
+ //
523
+ key = 0;
524
+ cert = 0;
525
+ chain = 0;
526
+ if(!(success = PKCS12_parse(p12, password(false).c_str(), &key, &cert, &chain)))
527
+ {
528
+ if(passwordError())
529
+ {
530
+ count++;
531
+ continue;
532
+ }
533
+ break;
534
+ }
535
+
536
+ if(!cert || !SSL_CTX_use_certificate(_ctx, cert))
537
+ {
538
+ throw PluginInitializationException(__FILE__, __LINE__,
539
+ "IceSSL: unable to establish SSL certificate:\n" +
540
+ (cert ? sslErrors() : "certificate not found"));
541
+ }
542
+
543
+ if(!key || !SSL_CTX_use_PrivateKey(_ctx, key))
544
+ {
545
+ throw PluginInitializationException(__FILE__, __LINE__,
546
+ "IceSSL: unable to establish SSL private key:\n" +
547
+ (key ? sslErrors() : "key not found"));
548
+ }
549
+ keyLoaded = true;
550
+
551
+ if(chain && sk_X509_num(chain))
552
+ {
553
+ for(int i = 0; i < sk_X509_num(chain); i++)
554
+ {
555
+ if(!SSL_CTX_add_extra_chain_cert(_ctx, sk_X509_value(chain, i)))
556
+ {
557
+ throw PluginInitializationException(__FILE__, __LINE__,
558
+ "IceSSL: unable to add extra SSL certificate:\n" + sslErrors());
559
+ }
560
+ }
561
+ }
562
+
563
+ if(chain)
564
+ {
565
+ sk_X509_pop_free(chain, X509_free);
566
+ }
567
+ assert(key && cert);
568
+ EVP_PKEY_free(key);
569
+ X509_free(cert);
570
+ break;
571
+ }
572
+ PKCS12_free(p12);
573
+ }
574
+ catch(...)
575
+ {
576
+ PKCS12_free(p12);
577
+ if(chain)
578
+ {
579
+ sk_X509_pop_free(chain, X509_free);
580
+ }
581
+
582
+ if(key)
583
+ {
584
+ EVP_PKEY_free(key);
585
+ }
586
+
587
+ if(cert)
588
+ {
589
+ X509_free(cert);
590
+ }
591
+ throw;
592
+ }
593
+ }
594
+ else
595
+ {
596
+ //
597
+ // The certificate may be stored in an encrypted file, so handle
598
+ // password retries.
599
+ //
600
+ int count = 0;
601
+ while(count < passwordRetryMax)
602
+ {
603
+ ERR_clear_error();
604
+ if(!(success = SSL_CTX_use_certificate_chain_file(_ctx, file.c_str())))
605
+ {
606
+ if(passwordError())
607
+ {
608
+ count++;
609
+ continue;
610
+ }
611
+ }
612
+ count++;
613
+ }
614
+ }
615
+
616
+ if(!success)
617
+ {
618
+ string msg = "IceSSL: unable to load certificate chain from file " + file;
619
+ if(passwordError())
620
+ {
621
+ msg += ":\ninvalid password";
622
+ }
623
+ else
624
+ {
625
+ string err = sslErrors();
626
+ if(!err.empty())
627
+ {
628
+ msg += ":\n" + err;
629
+ }
630
+ }
631
+ throw PluginInitializationException(__FILE__, __LINE__, msg);
632
+ }
633
+ }
634
+ }
635
+
636
+ if(keyFile.empty())
637
+ {
638
+ keyFile = certFile; // Assume the certificate file also contains the private key.
639
+ }
640
+ if(!keyLoaded && !keyFile.empty())
641
+ {
642
+ vector<string> files;
643
+ if(!IceUtilInternal::splitString(keyFile, IceUtilInternal::pathsep, files) || files.size() > 2)
644
+ {
645
+ throw PluginInitializationException(__FILE__, __LINE__,
646
+ "IceSSL: invalid value for " + propPrefix + "KeyFile:\n" + keyFile);
647
+ }
648
+ if(files.size() != numCerts)
649
+ {
650
+ throw PluginInitializationException(__FILE__, __LINE__,
651
+ "IceSSL: " + propPrefix + "KeyFile does not agree with " + propPrefix + "CertFile");
652
+ }
653
+ for(vector<string>::iterator p = files.begin(); p != files.end(); ++p)
654
+ {
655
+ string file = *p;
656
+ if(!checkPath(file, defaultDir, false))
657
+ {
658
+ throw PluginInitializationException(__FILE__, __LINE__,
659
+ "IceSSL: key file not found:\n" + file);
660
+ }
661
+ //
662
+ // The private key may be stored in an encrypted file, so handle
663
+ // password retries.
664
+ //
665
+ int count = 0;
666
+ int err = 0;
667
+ while(count < passwordRetryMax)
668
+ {
669
+ ERR_clear_error();
670
+ err = SSL_CTX_use_PrivateKey_file(_ctx, file.c_str(), SSL_FILETYPE_PEM);
671
+ if(err)
672
+ {
673
+ break;
674
+ }
675
+ ++count;
676
+ }
677
+ if(err == 0)
678
+ {
679
+ string msg = "IceSSL: unable to load private key from file " + file;
680
+ if(passwordError())
681
+ {
682
+ msg += ":\ninvalid password";
683
+ }
684
+ else
685
+ {
686
+ string err = sslErrors();
687
+ if(!err.empty())
688
+ {
689
+ msg += ":\n" + err;
690
+ }
691
+ }
692
+ throw PluginInitializationException(__FILE__, __LINE__, msg);
693
+ }
694
+ }
695
+ keyLoaded = true;
696
+ }
697
+
698
+ if(keyLoaded && !SSL_CTX_check_private_key(_ctx))
699
+ {
700
+ throw PluginInitializationException(__FILE__, __LINE__,
701
+ "IceSSL: unable to validate private key(s):\n" + sslErrors());
702
+ }
703
+
704
+ //
705
+ // Diffie Hellman configuration.
706
+ //
707
+ {
708
+ # ifndef OPENSSL_NO_DH
709
+ _dhParams = new DHParams;
710
+ SSL_CTX_set_options(_ctx, SSL_OP_SINGLE_DH_USE);
711
+ SSL_CTX_set_tmp_dh_callback(_ctx, IceSSL_opensslDHCallback);
712
+ # endif
713
+ //
714
+ // Properties have the following form:
715
+ //
716
+ // ...DH.<keyLength>=file
717
+ //
718
+ const string dhPrefix = propPrefix + "DH.";
719
+ PropertyDict d = properties->getPropertiesForPrefix(dhPrefix);
720
+ if(!d.empty())
721
+ {
722
+ # ifdef OPENSSL_NO_DH
723
+ getLogger()->warning("IceSSL: OpenSSL is not configured for Diffie Hellman");
724
+ # else
725
+ for(PropertyDict::iterator p = d.begin(); p != d.end(); ++p)
726
+ {
727
+ string s = p->first.substr(dhPrefix.size());
728
+ int keyLength = atoi(s.c_str());
729
+ if(keyLength > 0)
730
+ {
731
+ string file = p->second;
732
+ if(!checkPath(file, defaultDir, false))
733
+ {
734
+ throw PluginInitializationException(__FILE__, __LINE__,
735
+ "IceSSL: DH parameter file not found:\n" + file);
736
+ }
737
+ if(!_dhParams->add(keyLength, file))
738
+ {
739
+ throw PluginInitializationException(__FILE__, __LINE__,
740
+ "IceSSL: unable to read DH parameter file " + file);
741
+ }
742
+ }
743
+ }
744
+ # endif
745
+ }
746
+ }
747
+
748
+ SSL_CTX_set_mode(_ctx, SSL_MODE_ENABLE_PARTIAL_WRITE);
749
+ }
750
+
751
+ //
752
+ // Store a pointer to ourself for use in OpenSSL callbacks.
753
+ //
754
+ SSL_CTX_set_ex_data(_ctx, 0, this);
755
+
756
+ //
757
+ // This is necessary for successful interop with Java. Without it, a Java
758
+ // client would fail to reestablish a connection: the server gets the
759
+ // error "session id context uninitialized" and the client receives
760
+ // "SSLHandshakeException: Remote host closed connection during handshake".
761
+ //
762
+ SSL_CTX_set_session_cache_mode(_ctx, SSL_SESS_CACHE_OFF);
763
+
764
+ //
765
+ // Although we disable session caching, we still need to set a session ID
766
+ // context (ICE-5103). The value can be anything; here we just use the
767
+ // pointer to this SharedInstance object.
768
+ //
769
+ SSL_CTX_set_session_id_context(_ctx, reinterpret_cast<unsigned char*>(this),
770
+ static_cast<unsigned int>(sizeof(this)));
771
+
772
+ //
773
+ // Select protocols.
774
+ //
775
+ if(protocols != 0)
776
+ {
777
+ setOptions(protocols);
778
+ }
779
+
780
+ //
781
+ // Establish the cipher list.
782
+ //
783
+ string ciphers = properties->getProperty(propPrefix + "Ciphers");
784
+ if(!ciphers.empty())
785
+ {
786
+ if(!SSL_CTX_set_cipher_list(_ctx, ciphers.c_str()))
787
+ {
788
+ throw PluginInitializationException(__FILE__, __LINE__,
789
+ "IceSSL: unable to set ciphers using `" + ciphers + "':\n" + sslErrors());
790
+ }
791
+ }
792
+
793
+ if(securityTraceLevel() >= 1)
794
+ {
795
+ ostringstream os;
796
+ os << "enabling SSL ciphersuites:";
797
+
798
+ SSL* ssl = SSL_new(_ctx);
799
+ STACK_OF(SSL_CIPHER)* ciphers = SSL_get_ciphers(ssl);
800
+ if(ciphers)
801
+ {
802
+ for(int i = 0, length = sk_SSL_CIPHER_num(ciphers); i < length; ++i)
803
+ {
804
+ os << "\n" << SSL_CIPHER_get_name(sk_SSL_CIPHER_value(ciphers, i));
805
+ }
806
+ }
807
+ SSL_free(ssl);
808
+ getLogger()->trace(securityTraceCategory(), os.str());
809
+ }
810
+
811
+ //
812
+ // Determine whether a certificate is required from the peer.
813
+ //
814
+ {
815
+ int sslVerifyMode = SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT;;
816
+ switch(getVerifyPeer())
817
+ {
818
+ case 0:
819
+ sslVerifyMode = SSL_VERIFY_NONE;
820
+ break;
821
+ case 1:
822
+ sslVerifyMode = SSL_VERIFY_PEER;
823
+ break;
824
+ case 2:
825
+ sslVerifyMode = SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT;
826
+ break;
827
+ default:
828
+ {
829
+ assert(false);
830
+ }
831
+ }
832
+ SSL_CTX_set_verify(_ctx, sslVerifyMode, IceSSL_opensslVerifyCallback);
833
+ }
834
+ }
835
+ catch(...)
836
+ {
837
+ //
838
+ // We free the SSL context regardless of whether the plugin created it
839
+ // or the application supplied it.
840
+ //
841
+ SSL_CTX_free(_ctx);
842
+ _ctx = 0;
843
+ throw;
844
+ }
845
+
846
+ _initialized = true;
847
+ }
848
+
849
+ void
850
+ OpenSSLEngine::context(SSL_CTX* context)
851
+ {
852
+ if(initialized())
853
+ {
854
+ throw PluginInitializationException(__FILE__, __LINE__, "IceSSL: plug-in is already initialized");
855
+ }
856
+
857
+ assert(!_ctx);
858
+ _ctx = context;
859
+ }
860
+
861
+ SSL_CTX*
862
+ OpenSSLEngine::context() const
863
+ {
864
+ return _ctx;
865
+ }
866
+
867
+ string
868
+ OpenSSLEngine::sslErrors() const
869
+ {
870
+ return getSslErrors(securityTraceLevel() >= 1);
871
+ }
872
+
873
+ void
874
+ OpenSSLEngine::destroy()
875
+ {
876
+ if(_ctx)
877
+ {
878
+ SSL_CTX_free(_ctx);
879
+ }
880
+ }
881
+
882
+ int
883
+ OpenSSLEngine::verifyCallback(int ok, SSL* ssl, X509_STORE_CTX* c)
884
+ {
885
+ if(!ok && securityTraceLevel() >= 1)
886
+ {
887
+ X509* cert = X509_STORE_CTX_get_current_cert(c);
888
+ int err = X509_STORE_CTX_get_error(c);
889
+ char buf[256];
890
+
891
+ Trace out(getLogger(), securityTraceCategory());
892
+ out << "certificate verification failure\n";
893
+
894
+ X509_NAME_oneline(X509_get_issuer_name(cert), buf, static_cast<int>(sizeof(buf)));
895
+ out << "issuer = " << buf << '\n';
896
+ X509_NAME_oneline(X509_get_subject_name(cert), buf, static_cast<int>(sizeof(buf)));
897
+ out << "subject = " << buf << '\n';
898
+ out << "depth = " << X509_STORE_CTX_get_error_depth(c) << '\n';
899
+ out << "error = " << X509_verify_cert_error_string(err) << '\n';
900
+ out << IceInternal::fdToString(SSL_get_fd(ssl));
901
+ }
902
+ return ok;
903
+ }
904
+
905
+ # ifndef OPENSSL_NO_DH
906
+ DH*
907
+ OpenSSLEngine::dhParams(int keyLength)
908
+ {
909
+ return _dhParams->get(keyLength);
910
+ }
911
+ # endif
912
+
913
+ int
914
+ OpenSSLEngine::parseProtocols(const StringSeq& protocols) const
915
+ {
916
+ int v = 0;
917
+
918
+ for(Ice::StringSeq::const_iterator p = protocols.begin(); p != protocols.end(); ++p)
919
+ {
920
+ string prot = IceUtilInternal::toUpper(*p);
921
+ if(prot == "SSL3" || prot == "SSLV3")
922
+ {
923
+ v |= SSLv3;
924
+ }
925
+ else if(prot == "TLS" || prot == "TLS1" || prot == "TLSV1" || prot == "TLS1_0" || prot == "TLSV1_0")
926
+ {
927
+ v |= TLSv1_0;
928
+ }
929
+ else if(prot == "TLS1_1" || prot == "TLSV1_1")
930
+ {
931
+ v |= TLSv1_1;
932
+ }
933
+ else if(prot == "TLS1_2" || prot == "TLSV1_2")
934
+ {
935
+ v |= TLSv1_2;
936
+ }
937
+ else
938
+ {
939
+ throw PluginInitializationException(__FILE__, __LINE__, "IceSSL: unrecognized protocol `" + *p + "'");
940
+ }
941
+ }
942
+
943
+ return v;
944
+ }
945
+
946
+ SSL_METHOD*
947
+ OpenSSLEngine::getMethod(int /*protocols*/)
948
+ {
949
+ //
950
+ // Despite its name, the SSLv23 method can negotiate SSL3, TLS1.0, TLS1.1, and TLS1.2.
951
+ // We use the const_cast for backward compatibility with older OpenSSL releases.
952
+ //
953
+ SSL_METHOD* meth = const_cast<SSL_METHOD*>(SSLv23_method());
954
+
955
+ /*
956
+ * Early versions of OpenSSL 1.0.1 would not negotiate a TLS1.2 connection using
957
+ * the SSLv23 method. You can enable the code below to override the method.
958
+ if(protocols & TLSv1_2)
959
+ {
960
+ meth = const_cast<SSL_METHOD*>(TLSv1_2_method());
961
+ }
962
+ */
963
+
964
+ return meth;
965
+ }
966
+
967
+ void
968
+ OpenSSLEngine::setOptions(int protocols)
969
+ {
970
+ long opts = SSL_OP_NO_SSLv2; // SSLv2 is not supported.
971
+ if(!(protocols & SSLv3))
972
+ {
973
+ opts |= SSL_OP_NO_SSLv3;
974
+ }
975
+ if(!(protocols & TLSv1_0))
976
+ {
977
+ opts |= SSL_OP_NO_TLSv1;
978
+ }
979
+ # ifdef SSL_OP_NO_TLSv1_1
980
+ if(!(protocols & TLSv1_1))
981
+ {
982
+ opts |= SSL_OP_NO_TLSv1_1;
983
+ //
984
+ // The value of SSL_OP_NO_TLSv1_1 changed between 1.0.1a and 1.0.1b.
985
+ //
986
+ if(SSL_OP_NO_TLSv1_1 == 0x00000400L)
987
+ {
988
+ opts |= 0x10000000L; // New value of SSL_OP_NO_TLSv1_1.
989
+ }
990
+ }
991
+ # endif
992
+ # ifdef SSL_OP_NO_TLSv1_2
993
+ if(!(protocols & TLSv1_2))
994
+ {
995
+ opts |= SSL_OP_NO_TLSv1_2;
996
+ }
997
+ # endif
998
+ SSL_CTX_set_options(_ctx, opts);
999
+ }
1000
+
1001
+ #endif // ICESSL_USE_OPENSSL