zeroc-ice 3.6.5 → 3.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (752) hide show
  1. checksums.yaml +4 -4
  2. data/BZIP2_LICENSE +42 -0
  3. data/ICE_LICENSE +17 -17
  4. data/LICENSE +12 -12
  5. data/bin/slice2rb +1 -1
  6. data/ext/Communicator.cpp +150 -53
  7. data/ext/Communicator.h +1 -1
  8. data/ext/Config.h +2 -12
  9. data/ext/Connection.cpp +89 -68
  10. data/ext/Connection.h +1 -1
  11. data/ext/Endpoint.cpp +16 -45
  12. data/ext/Endpoint.h +1 -1
  13. data/ext/ImplicitContext.cpp +1 -5
  14. data/ext/ImplicitContext.h +1 -1
  15. data/ext/Init.cpp +4 -1
  16. data/ext/Logger.cpp +1 -1
  17. data/ext/Logger.h +1 -1
  18. data/ext/Operation.cpp +33 -44
  19. data/ext/Operation.h +1 -1
  20. data/ext/Properties.cpp +1 -1
  21. data/ext/Properties.h +1 -1
  22. data/ext/Proxy.cpp +22 -57
  23. data/ext/Proxy.h +1 -1
  24. data/ext/Slice.cpp +5 -5
  25. data/ext/Slice.h +1 -1
  26. data/ext/Types.cpp +244 -171
  27. data/ext/Types.h +118 -66
  28. data/ext/Util.cpp +13 -9
  29. data/ext/Util.h +10 -10
  30. data/ext/ValueFactoryManager.cpp +445 -0
  31. data/ext/ValueFactoryManager.h +100 -0
  32. data/ext/extconf.rb +47 -45
  33. data/ext/ice/bzip2/blocksort.c +1094 -0
  34. data/ext/ice/bzip2/bzlib.c +1572 -0
  35. data/ext/ice/bzip2/bzlib.h +282 -0
  36. data/ext/ice/bzip2/bzlib_private.h +509 -0
  37. data/ext/ice/bzip2/compress.c +672 -0
  38. data/ext/ice/bzip2/crctable.c +104 -0
  39. data/ext/ice/bzip2/decompress.c +646 -0
  40. data/ext/ice/bzip2/huffman.c +205 -0
  41. data/ext/ice/bzip2/randtable.c +84 -0
  42. data/ext/ice/cpp/include/Ice/Application.h +77 -60
  43. data/ext/ice/cpp/include/Ice/AsyncResult.h +34 -318
  44. data/ext/ice/cpp/include/Ice/AsyncResultF.h +4 -2
  45. data/ext/ice/cpp/include/Ice/BatchRequestInterceptor.h +5 -10
  46. data/ext/ice/cpp/include/Ice/BatchRequestQueueF.h +1 -1
  47. data/ext/ice/cpp/include/Ice/Buffer.h +10 -10
  48. data/ext/ice/cpp/include/Ice/CommunicatorAsync.h +14 -12
  49. data/ext/ice/cpp/include/Ice/Comparable.h +130 -0
  50. data/ext/ice/cpp/include/Ice/Config.h +7 -36
  51. data/ext/ice/cpp/include/Ice/ConnectionAsync.h +107 -11
  52. data/ext/ice/cpp/include/Ice/ConnectionIF.h +5 -1
  53. data/ext/ice/cpp/include/Ice/ConsoleUtil.h +28 -0
  54. data/ext/ice/cpp/include/Ice/{DefaultObjectFactory.h → DefaultValueFactory.h} +28 -14
  55. data/ext/ice/cpp/include/Ice/DispatchInterceptor.h +4 -6
  56. data/ext/ice/cpp/include/Ice/Dispatcher.h +14 -13
  57. data/ext/ice/cpp/include/Ice/DynamicLibrary.h +7 -5
  58. data/ext/ice/cpp/include/Ice/DynamicLibraryF.h +1 -1
  59. data/ext/ice/cpp/include/Ice/Exception.h +66 -56
  60. data/ext/ice/cpp/include/Ice/ExceptionHelpers.h +69 -0
  61. data/ext/ice/cpp/include/Ice/FactoryTable.h +11 -12
  62. data/ext/ice/cpp/include/Ice/FactoryTableInit.h +27 -25
  63. data/ext/ice/cpp/include/Ice/Format.h +6 -1
  64. data/ext/ice/cpp/include/Ice/Functional.h +33 -33
  65. data/ext/ice/cpp/include/Ice/GCObject.h +9 -5
  66. data/ext/ice/cpp/include/Ice/Handle.h +6 -11
  67. data/ext/ice/cpp/include/Ice/Ice.h +9 -5
  68. data/ext/ice/cpp/include/{IceUtil → Ice}/IconvStringConverter.h +108 -62
  69. data/ext/ice/cpp/include/Ice/Incoming.h +109 -33
  70. data/ext/ice/cpp/include/Ice/IncomingAsync.h +63 -23
  71. data/ext/ice/cpp/include/Ice/IncomingAsyncF.h +7 -1
  72. data/ext/ice/cpp/include/Ice/Initialize.h +178 -38
  73. data/ext/ice/cpp/include/Ice/InputStream.h +994 -0
  74. data/ext/ice/cpp/include/Ice/InstanceF.h +1 -2
  75. data/ext/ice/cpp/include/Ice/InterfaceByValue.h +46 -0
  76. data/ext/ice/cpp/include/Ice/LocalObject.h +9 -9
  77. data/ext/ice/cpp/include/Ice/LocalObjectF.h +1 -1
  78. data/ext/ice/cpp/include/Ice/LoggerUtil.h +20 -14
  79. data/ext/ice/cpp/include/Ice/MetricsAdminI.h +114 -65
  80. data/ext/ice/cpp/include/Ice/MetricsFunctional.h +23 -5
  81. data/ext/ice/cpp/include/Ice/MetricsObserverI.h +99 -26
  82. data/ext/ice/cpp/include/Ice/NativePropertiesAdmin.h +17 -4
  83. data/ext/ice/cpp/include/Ice/Object.h +105 -56
  84. data/ext/ice/cpp/include/Ice/ObjectF.h +8 -3
  85. data/ext/ice/cpp/include/Ice/ObserverHelper.h +18 -8
  86. data/ext/ice/cpp/include/Ice/Optional.h +1084 -0
  87. data/ext/ice/cpp/include/Ice/OutgoingAsync.h +655 -84
  88. data/ext/ice/cpp/include/Ice/OutgoingAsyncF.h +12 -6
  89. data/ext/ice/cpp/include/Ice/OutputStream.h +753 -0
  90. data/ext/ice/cpp/include/Ice/Protocol.h +19 -12
  91. data/ext/ice/cpp/include/Ice/Proxy.h +1329 -717
  92. data/ext/ice/cpp/include/Ice/ProxyF.h +11 -33
  93. data/ext/ice/cpp/include/Ice/ProxyFactoryF.h +1 -1
  94. data/ext/ice/cpp/include/Ice/ProxyHandle.h +34 -50
  95. data/ext/ice/cpp/include/Ice/ReferenceF.h +1 -1
  96. data/ext/ice/cpp/include/Ice/RegisterPlugins.h +22 -3
  97. data/ext/ice/cpp/include/Ice/RequestHandlerF.h +10 -4
  98. data/ext/ice/cpp/include/Ice/ResponseHandlerF.h +6 -1
  99. data/ext/ice/cpp/include/{IceUtil → Ice}/SHA1.h +16 -16
  100. data/ext/ice/cpp/include/Ice/ServantManagerF.h +1 -1
  101. data/ext/ice/cpp/include/Ice/Service.h +13 -18
  102. data/ext/ice/cpp/include/Ice/SliceChecksums.h +1 -1
  103. data/ext/ice/cpp/include/Ice/SlicedData.h +46 -20
  104. data/ext/ice/cpp/include/Ice/SlicedDataF.h +14 -6
  105. data/ext/ice/cpp/include/Ice/StreamHelpers.h +159 -49
  106. data/ext/ice/cpp/include/Ice/StringConverter.h +52 -0
  107. data/ext/ice/cpp/include/Ice/ThreadPoolF.h +1 -1
  108. data/{slice/Ice/ObjectFactoryF.ice → ext/ice/cpp/include/Ice/UUID.h} +9 -7
  109. data/ext/ice/cpp/include/{IceUtil → Ice}/UniquePtr.h +21 -22
  110. data/ext/ice/cpp/include/Ice/UniqueRef.h +98 -0
  111. data/ext/ice/cpp/include/Ice/UserExceptionFactory.h +40 -8
  112. data/ext/ice/cpp/include/Ice/Value.h +104 -0
  113. data/{slice/Freeze/ConnectionF.ice → ext/ice/cpp/include/Ice/ValueF.h} +11 -7
  114. data/ext/ice/cpp/include/IceSSL/Config.h +8 -23
  115. data/ext/ice/cpp/include/IceSSL/IceSSL.h +17 -6
  116. data/ext/ice/cpp/include/IceSSL/OpenSSL.h +130 -0
  117. data/ext/ice/cpp/include/IceSSL/Plugin.h +172 -259
  118. data/ext/ice/cpp/include/IceSSL/SChannel.h +66 -0
  119. data/ext/ice/cpp/include/IceSSL/SecureTransport.h +66 -0
  120. data/ext/ice/cpp/include/IceSSL/UWP.h +58 -0
  121. data/ext/ice/cpp/include/IceUtil/Atomic.h +8 -10
  122. data/ext/ice/cpp/include/IceUtil/Cond.h +17 -18
  123. data/ext/ice/cpp/include/IceUtil/Config.h +138 -39
  124. data/ext/ice/cpp/include/IceUtil/ConsoleUtil.h +97 -0
  125. data/ext/ice/cpp/include/IceUtil/CountDownLatch.h +5 -5
  126. data/ext/ice/cpp/include/IceUtil/CtrlCHandler.h +23 -17
  127. data/ext/ice/cpp/include/IceUtil/DisableWarnings.h +1 -3
  128. data/ext/ice/cpp/include/IceUtil/Exception.h +157 -67
  129. data/ext/ice/cpp/include/IceUtil/FileUtil.h +148 -0
  130. data/ext/ice/cpp/include/IceUtil/Functional.h +1 -2
  131. data/ext/ice/cpp/include/IceUtil/Handle.h +11 -11
  132. data/ext/ice/cpp/include/IceUtil/IceUtil.h +4 -10
  133. data/ext/ice/cpp/include/IceUtil/InputUtil.h +3 -3
  134. data/ext/ice/cpp/include/IceUtil/Iterator.h +2 -2
  135. data/ext/ice/cpp/include/IceUtil/Lock.h +8 -10
  136. data/ext/ice/cpp/include/IceUtil/Monitor.h +1 -2
  137. data/ext/ice/cpp/include/IceUtil/Mutex.h +17 -11
  138. data/ext/ice/cpp/include/IceUtil/MutexProtocol.h +2 -2
  139. data/ext/ice/cpp/include/IceUtil/MutexPtrLock.h +4 -4
  140. data/ext/ice/cpp/include/IceUtil/MutexPtrTryLock.h +4 -4
  141. data/ext/ice/cpp/include/IceUtil/Optional.h +32 -18
  142. data/ext/ice/cpp/include/IceUtil/Options.h +17 -18
  143. data/ext/ice/cpp/include/IceUtil/OutputUtil.h +55 -29
  144. data/ext/ice/cpp/include/IceUtil/PopDisableWarnings.h +6 -6
  145. data/ext/ice/cpp/include/IceUtil/PushDisableWarnings.h +11 -10
  146. data/ext/ice/cpp/include/IceUtil/Random.h +3 -3
  147. data/ext/ice/cpp/include/IceUtil/RecMutex.h +7 -8
  148. data/ext/ice/cpp/include/IceUtil/ResourceConfig.h +58 -0
  149. data/ext/ice/cpp/include/IceUtil/ScannerConfig.h +1 -9
  150. data/ext/ice/cpp/include/IceUtil/ScopedArray.h +8 -2
  151. data/ext/ice/cpp/include/IceUtil/Shared.h +5 -7
  152. data/ext/ice/cpp/{src → include}/IceUtil/StopWatch.h +2 -2
  153. data/ext/ice/cpp/include/IceUtil/StringConverter.h +77 -72
  154. data/ext/ice/cpp/include/IceUtil/StringUtil.h +32 -21
  155. data/ext/ice/cpp/include/IceUtil/Thread.h +10 -12
  156. data/ext/ice/cpp/include/IceUtil/ThreadException.h +33 -42
  157. data/ext/ice/cpp/include/IceUtil/Time.h +3 -3
  158. data/ext/ice/cpp/include/IceUtil/Timer.h +14 -13
  159. data/ext/ice/cpp/include/IceUtil/UUID.h +2 -2
  160. data/ext/ice/cpp/include/IceUtil/UndefSysMacros.h +1 -1
  161. data/ext/ice/cpp/include/{Ice → generated/Ice}/BuiltinSequences.h +41 -8
  162. data/ext/ice/cpp/include/generated/Ice/Communicator.h +364 -0
  163. data/ext/ice/cpp/include/{Ice → generated/Ice}/CommunicatorF.h +40 -8
  164. data/ext/ice/cpp/include/generated/Ice/Connection.h +872 -0
  165. data/ext/ice/cpp/include/{Ice → generated/Ice}/ConnectionF.h +46 -8
  166. data/ext/ice/cpp/include/{Ice → generated/Ice}/Current.h +71 -8
  167. data/ext/ice/cpp/include/generated/Ice/Endpoint.h +582 -0
  168. data/ext/ice/cpp/include/{Ice → generated/Ice}/EndpointF.h +62 -8
  169. data/ext/ice/cpp/include/{Ice → generated/Ice}/EndpointTypes.h +31 -16
  170. data/ext/ice/cpp/include/{Ice → generated/Ice}/FacetMap.h +23 -8
  171. data/ext/ice/cpp/include/generated/Ice/Identity.h +221 -0
  172. data/ext/ice/cpp/include/{Ice → generated/Ice}/ImplicitContext.h +72 -13
  173. data/ext/ice/cpp/include/{Ice → generated/Ice}/ImplicitContextF.h +40 -8
  174. data/ext/ice/cpp/include/generated/Ice/Instrumentation.h +602 -0
  175. data/ext/ice/cpp/include/{Ice → generated/Ice}/InstrumentationF.h +54 -8
  176. data/ext/ice/cpp/include/generated/Ice/LocalException.h +2802 -0
  177. data/ext/ice/cpp/include/generated/Ice/Locator.h +2036 -0
  178. data/ext/ice/cpp/include/{Ice → generated/Ice}/LocatorF.h +53 -12
  179. data/ext/ice/cpp/include/{Ice → generated/Ice}/Logger.h +71 -13
  180. data/ext/ice/cpp/include/{Ice → generated/Ice}/LoggerF.h +40 -8
  181. data/ext/ice/cpp/include/generated/Ice/Metrics.h +2649 -0
  182. data/ext/ice/cpp/include/generated/Ice/ObjectAdapter.h +302 -0
  183. data/ext/ice/cpp/include/{Ice → generated/Ice}/ObjectAdapterF.h +40 -8
  184. data/ext/ice/cpp/include/generated/Ice/ObjectFactory.h +142 -0
  185. data/ext/ice/cpp/include/generated/Ice/Plugin.h +197 -0
  186. data/ext/ice/cpp/include/{Ice → generated/Ice}/PluginF.h +43 -8
  187. data/ext/ice/cpp/include/generated/Ice/Process.h +536 -0
  188. data/ext/ice/cpp/include/{Ice → generated/Ice}/ProcessF.h +45 -10
  189. data/ext/ice/cpp/include/{Ice → generated/Ice}/Properties.h +88 -21
  190. data/ext/ice/cpp/include/generated/Ice/PropertiesAdmin.h +749 -0
  191. data/ext/ice/cpp/include/{Ice → generated/Ice}/PropertiesF.h +48 -10
  192. data/ext/ice/cpp/include/generated/Ice/RemoteLogger.h +1449 -0
  193. data/ext/ice/cpp/include/generated/Ice/Router.h +1032 -0
  194. data/ext/ice/cpp/include/{Ice → generated/Ice}/RouterF.h +45 -10
  195. data/ext/ice/cpp/include/{Ice → generated/Ice}/ServantLocator.h +65 -13
  196. data/ext/ice/cpp/include/{Ice → generated/Ice}/ServantLocatorF.h +40 -8
  197. data/ext/ice/cpp/include/{Ice → generated/Ice}/SliceChecksumDict.h +23 -8
  198. data/ext/ice/cpp/include/generated/Ice/ValueFactory.h +169 -0
  199. data/ext/ice/cpp/include/generated/Ice/Version.h +334 -0
  200. data/ext/ice/cpp/include/generated/IceSSL/ConnectionInfo.h +172 -0
  201. data/ext/ice/cpp/include/generated/IceSSL/ConnectionInfoF.h +98 -0
  202. data/ext/ice/cpp/include/generated/IceSSL/EndpointInfo.h +156 -0
  203. data/ext/ice/cpp/src/Ice/ACM.cpp +18 -14
  204. data/ext/ice/cpp/src/Ice/ACM.h +9 -2
  205. data/ext/ice/cpp/{include → src}/Ice/ACMF.h +10 -5
  206. data/ext/ice/cpp/src/Ice/Acceptor.cpp +6 -1
  207. data/ext/ice/cpp/src/Ice/Acceptor.h +4 -3
  208. data/ext/ice/cpp/src/Ice/AcceptorF.h +1 -1
  209. data/ext/ice/cpp/src/{IceUtil → Ice}/ArgVector.cpp +9 -9
  210. data/ext/ice/cpp/src/{IceUtil → Ice}/ArgVector.h +7 -7
  211. data/ext/ice/cpp/src/Ice/AsyncResult.cpp +15 -538
  212. data/ext/ice/cpp/src/Ice/Base64.cpp +11 -11
  213. data/ext/ice/cpp/src/Ice/Base64.h +1 -1
  214. data/ext/ice/cpp/src/Ice/BatchRequestQueue.cpp +40 -12
  215. data/ext/ice/cpp/src/Ice/BatchRequestQueue.h +15 -10
  216. data/ext/ice/cpp/src/Ice/Buffer.cpp +74 -12
  217. data/ext/ice/cpp/src/Ice/BuiltinSequences.cpp +20 -6
  218. data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.cpp +85 -190
  219. data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.h +17 -18
  220. data/ext/ice/cpp/src/Ice/Communicator.cpp +39 -8
  221. data/ext/ice/cpp/src/Ice/CommunicatorF.cpp +27 -5
  222. data/ext/ice/cpp/src/Ice/CommunicatorI.cpp +271 -104
  223. data/ext/ice/cpp/src/Ice/CommunicatorI.h +84 -28
  224. data/ext/ice/cpp/src/{IceUtil → Ice}/Cond.cpp +3 -3
  225. data/ext/ice/cpp/src/Ice/ConnectRequestHandler.cpp +58 -125
  226. data/ext/ice/cpp/src/Ice/ConnectRequestHandler.h +11 -22
  227. data/ext/ice/cpp/src/Ice/ConnectRequestHandlerF.h +6 -2
  228. data/ext/ice/cpp/src/Ice/Connection.cpp +88 -8
  229. data/ext/ice/cpp/src/Ice/ConnectionF.cpp +27 -5
  230. data/ext/ice/cpp/src/Ice/ConnectionFactory.cpp +158 -80
  231. data/ext/ice/cpp/src/Ice/ConnectionFactory.h +41 -23
  232. data/ext/ice/cpp/{include → src}/Ice/ConnectionFactoryF.h +8 -3
  233. data/ext/ice/cpp/src/Ice/ConnectionI.cpp +707 -653
  234. data/ext/ice/cpp/src/Ice/ConnectionI.h +97 -69
  235. data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.cpp +2 -15
  236. data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.h +4 -3
  237. data/ext/ice/cpp/src/Ice/Connector.cpp +6 -1
  238. data/ext/ice/cpp/src/Ice/Connector.h +4 -3
  239. data/ext/ice/cpp/src/Ice/ConnectorF.h +1 -1
  240. data/ext/ice/cpp/src/{IceUtil → Ice}/CountDownLatch.cpp +4 -4
  241. data/ext/ice/cpp/src/Ice/Current.cpp +29 -6
  242. data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.cpp +6 -5
  243. data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.h +1 -1
  244. data/ext/ice/cpp/src/Ice/DefaultsAndOverridesF.h +1 -1
  245. data/ext/ice/cpp/src/Ice/DispatchInterceptor.cpp +5 -25
  246. data/ext/ice/cpp/src/Ice/DynamicLibrary.cpp +29 -19
  247. data/ext/ice/cpp/src/Ice/Endpoint.cpp +85 -6
  248. data/ext/ice/cpp/src/Ice/EndpointF.cpp +27 -5
  249. data/ext/ice/cpp/src/Ice/EndpointFactory.cpp +152 -1
  250. data/ext/ice/cpp/src/Ice/EndpointFactory.h +72 -6
  251. data/ext/ice/cpp/src/Ice/EndpointFactoryF.h +1 -1
  252. data/ext/ice/cpp/src/Ice/EndpointFactoryManager.cpp +35 -19
  253. data/ext/ice/cpp/src/Ice/EndpointFactoryManager.h +10 -4
  254. data/ext/ice/cpp/src/Ice/EndpointFactoryManagerF.h +1 -1
  255. data/ext/ice/cpp/src/Ice/EndpointI.cpp +17 -1
  256. data/ext/ice/cpp/src/Ice/EndpointI.h +35 -9
  257. data/ext/ice/cpp/src/Ice/EndpointIF.h +18 -5
  258. data/ext/ice/cpp/src/Ice/EndpointTypes.cpp +18 -6
  259. data/ext/ice/cpp/src/Ice/EventHandler.cpp +6 -4
  260. data/ext/ice/cpp/src/Ice/EventHandler.h +13 -8
  261. data/ext/ice/cpp/src/Ice/EventHandlerF.h +5 -2
  262. data/ext/ice/cpp/src/Ice/Exception.cpp +95 -86
  263. data/ext/ice/cpp/src/Ice/FacetMap.cpp +20 -6
  264. data/ext/ice/cpp/src/Ice/FactoryTable.cpp +37 -28
  265. data/ext/ice/cpp/src/Ice/FactoryTableInit.cpp +2 -4
  266. data/ext/ice/cpp/src/Ice/GCObject.cpp +28 -25
  267. data/ext/ice/cpp/src/Ice/HashUtil.h +2 -3
  268. data/ext/ice/cpp/src/Ice/HttpParser.cpp +1 -2
  269. data/ext/ice/cpp/src/Ice/HttpParser.h +1 -1
  270. data/ext/ice/cpp/src/Ice/IPEndpointI.cpp +92 -53
  271. data/ext/ice/cpp/src/Ice/IPEndpointI.h +19 -10
  272. data/ext/ice/cpp/src/Ice/IPEndpointIF.h +6 -2
  273. data/ext/ice/cpp/src/Ice/IconvStringConverter.cpp +56 -0
  274. data/ext/ice/cpp/src/Ice/Identity.cpp +24 -10
  275. data/ext/ice/cpp/src/Ice/ImplicitContext.cpp +37 -6
  276. data/ext/ice/cpp/src/Ice/ImplicitContextF.cpp +27 -5
  277. data/ext/ice/cpp/src/Ice/ImplicitContextI.cpp +14 -14
  278. data/ext/ice/cpp/src/Ice/ImplicitContextI.h +7 -5
  279. data/ext/ice/cpp/src/Ice/Incoming.cpp +276 -245
  280. data/ext/ice/cpp/src/Ice/IncomingAsync.cpp +104 -209
  281. data/ext/ice/cpp/src/Ice/IncomingRequest.h +5 -4
  282. data/ext/ice/cpp/src/Ice/Initialize.cpp +299 -172
  283. data/ext/ice/cpp/src/Ice/InputStream.cpp +2773 -0
  284. data/ext/ice/cpp/src/Ice/Instance.cpp +191 -231
  285. data/ext/ice/cpp/src/Ice/Instance.h +30 -18
  286. data/ext/ice/cpp/src/Ice/Instrumentation.cpp +106 -7
  287. data/ext/ice/cpp/src/Ice/InstrumentationF.cpp +27 -5
  288. data/ext/ice/cpp/src/Ice/InstrumentationI.cpp +117 -99
  289. data/ext/ice/cpp/src/Ice/InstrumentationI.h +30 -31
  290. data/ext/ice/cpp/src/Ice/LocalException.cpp +1190 -416
  291. data/ext/ice/cpp/src/Ice/LocalObject.cpp +1 -2
  292. data/ext/ice/cpp/src/Ice/Locator.cpp +1167 -1215
  293. data/ext/ice/cpp/src/Ice/LocatorF.cpp +29 -6
  294. data/ext/ice/cpp/src/Ice/LocatorInfo.cpp +129 -163
  295. data/ext/ice/cpp/src/Ice/LocatorInfo.h +29 -29
  296. data/ext/ice/cpp/src/Ice/LocatorInfoF.h +1 -1
  297. data/ext/ice/cpp/src/Ice/Logger.cpp +35 -5
  298. data/ext/ice/cpp/src/Ice/LoggerAdminI.cpp +178 -73
  299. data/ext/ice/cpp/src/Ice/LoggerAdminI.h +4 -4
  300. data/ext/ice/cpp/src/Ice/LoggerF.cpp +27 -5
  301. data/ext/ice/cpp/src/Ice/LoggerI.cpp +14 -44
  302. data/ext/ice/cpp/src/Ice/LoggerI.h +7 -13
  303. data/ext/ice/cpp/src/Ice/LoggerUtil.cpp +10 -12
  304. data/ext/ice/cpp/src/Ice/Metrics.cpp +1059 -1069
  305. data/ext/ice/cpp/src/Ice/MetricsAdminI.cpp +49 -19
  306. data/ext/ice/cpp/src/Ice/MetricsObserverI.cpp +1 -2
  307. data/ext/ice/cpp/src/Ice/Network.cpp +534 -170
  308. data/ext/ice/cpp/src/Ice/Network.h +100 -23
  309. data/ext/ice/cpp/src/Ice/NetworkF.h +2 -2
  310. data/ext/ice/cpp/src/Ice/NetworkProxy.cpp +21 -14
  311. data/ext/ice/cpp/src/Ice/NetworkProxy.h +5 -2
  312. data/ext/ice/cpp/src/Ice/NetworkProxyF.h +1 -1
  313. data/ext/ice/cpp/src/Ice/Object.cpp +217 -221
  314. data/ext/ice/cpp/src/Ice/ObjectAdapter.cpp +41 -6
  315. data/ext/ice/cpp/src/Ice/ObjectAdapterF.cpp +27 -5
  316. data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.cpp +35 -14
  317. data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.h +13 -7
  318. data/ext/ice/cpp/{include → src}/Ice/ObjectAdapterFactoryF.h +5 -1
  319. data/ext/ice/cpp/src/Ice/ObjectAdapterI.cpp +184 -58
  320. data/ext/ice/cpp/src/Ice/ObjectAdapterI.h +32 -26
  321. data/ext/ice/cpp/src/Ice/ObjectFactory.cpp +37 -6
  322. data/ext/ice/cpp/src/Ice/ObserverHelper.cpp +9 -32
  323. data/ext/ice/cpp/src/Ice/OpaqueEndpointI.cpp +40 -18
  324. data/ext/ice/cpp/src/Ice/OpaqueEndpointI.h +14 -5
  325. data/ext/ice/cpp/src/Ice/OutgoingAsync.cpp +803 -365
  326. data/ext/ice/cpp/src/Ice/OutputStream.cpp +1399 -0
  327. data/ext/ice/cpp/src/Ice/Plugin.cpp +45 -6
  328. data/ext/ice/cpp/src/Ice/PluginF.cpp +27 -5
  329. data/ext/ice/cpp/src/Ice/PluginManagerI.cpp +13 -13
  330. data/ext/ice/cpp/src/Ice/PluginManagerI.h +5 -6
  331. data/ext/ice/cpp/src/Ice/Process.cpp +256 -114
  332. data/ext/ice/cpp/src/Ice/ProcessF.cpp +29 -6
  333. data/ext/ice/cpp/src/Ice/Properties.cpp +38 -8
  334. data/ext/ice/cpp/src/Ice/PropertiesAdmin.cpp +340 -328
  335. data/ext/ice/cpp/src/Ice/PropertiesAdminI.cpp +81 -17
  336. data/ext/ice/cpp/src/Ice/PropertiesAdminI.h +29 -5
  337. data/ext/ice/cpp/src/Ice/PropertiesF.cpp +29 -6
  338. data/ext/ice/cpp/src/Ice/PropertiesI.cpp +25 -26
  339. data/ext/ice/cpp/src/Ice/PropertiesI.h +8 -11
  340. data/ext/ice/cpp/src/Ice/PropertyNames.cpp +107 -50
  341. data/ext/ice/cpp/src/Ice/PropertyNames.h +4 -2
  342. data/ext/ice/cpp/src/Ice/Protocol.cpp +2 -2
  343. data/ext/ice/cpp/src/Ice/ProtocolInstance.cpp +37 -2
  344. data/ext/ice/cpp/src/Ice/ProtocolInstance.h +9 -20
  345. data/ext/ice/cpp/src/Ice/ProtocolInstanceF.h +1 -1
  346. data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.cpp +6 -1
  347. data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.h +3 -1
  348. data/ext/ice/cpp/src/Ice/ProtocolPluginFacadeF.h +1 -1
  349. data/ext/ice/cpp/src/Ice/Proxy.cpp +690 -964
  350. data/ext/ice/cpp/src/Ice/ProxyFactory.cpp +23 -32
  351. data/ext/ice/cpp/src/Ice/ProxyFactory.h +16 -11
  352. data/ext/ice/cpp/src/Ice/Reference.cpp +75 -69
  353. data/ext/ice/cpp/src/Ice/Reference.h +27 -22
  354. data/ext/ice/cpp/src/Ice/ReferenceFactory.cpp +18 -21
  355. data/ext/ice/cpp/src/Ice/ReferenceFactory.h +12 -12
  356. data/ext/ice/cpp/src/Ice/ReferenceFactoryF.h +1 -1
  357. data/ext/ice/cpp/src/Ice/RegisterPluginsInit.cpp +18 -4
  358. data/ext/ice/cpp/src/Ice/RegisterPluginsInit.h +1 -1
  359. data/ext/ice/cpp/src/Ice/RemoteLogger.cpp +672 -552
  360. data/ext/ice/cpp/src/Ice/ReplyStatus.h +1 -1
  361. data/ext/ice/cpp/src/Ice/RequestHandler.cpp +5 -3
  362. data/ext/ice/cpp/src/Ice/RequestHandler.h +10 -13
  363. data/ext/ice/cpp/src/Ice/RequestHandlerFactory.cpp +10 -6
  364. data/ext/ice/cpp/src/Ice/RequestHandlerFactory.h +2 -2
  365. data/ext/ice/cpp/src/Ice/ResponseHandler.cpp +3 -6
  366. data/ext/ice/cpp/src/Ice/ResponseHandler.h +16 -7
  367. data/ext/ice/cpp/src/Ice/RetryQueue.cpp +6 -12
  368. data/ext/ice/cpp/src/Ice/RetryQueue.h +7 -6
  369. data/ext/ice/cpp/src/Ice/RetryQueueF.h +1 -1
  370. data/ext/ice/cpp/src/Ice/Router.cpp +523 -474
  371. data/ext/ice/cpp/src/Ice/RouterF.cpp +29 -6
  372. data/ext/ice/cpp/src/Ice/RouterInfo.cpp +91 -70
  373. data/ext/ice/cpp/src/Ice/RouterInfo.h +43 -32
  374. data/ext/ice/cpp/src/Ice/RouterInfoF.h +1 -1
  375. data/ext/ice/cpp/src/{IceUtil → Ice}/SHA1.cpp +21 -21
  376. data/ext/ice/cpp/src/Ice/Selector.cpp +989 -923
  377. data/ext/ice/cpp/src/Ice/Selector.h +100 -147
  378. data/ext/ice/cpp/src/Ice/ServantLocator.cpp +37 -6
  379. data/ext/ice/cpp/src/Ice/ServantLocatorF.cpp +27 -5
  380. data/ext/ice/cpp/src/Ice/ServantManager.cpp +9 -9
  381. data/ext/ice/cpp/src/Ice/ServantManager.h +1 -1
  382. data/ext/ice/cpp/src/Ice/SharedContext.h +2 -2
  383. data/ext/ice/cpp/src/Ice/SliceChecksumDict.cpp +20 -6
  384. data/ext/ice/cpp/src/Ice/SliceChecksums.cpp +2 -2
  385. data/ext/ice/cpp/src/Ice/SlicedData.cpp +72 -20
  386. data/ext/ice/cpp/src/Ice/StreamSocket.cpp +173 -18
  387. data/ext/ice/cpp/src/Ice/StreamSocket.h +13 -4
  388. data/ext/ice/cpp/src/Ice/StringConverterPlugin.cpp +48 -17
  389. data/ext/ice/cpp/src/Ice/StringUtil.h +35 -0
  390. data/ext/ice/cpp/src/Ice/SysLoggerI.cpp +8 -4
  391. data/ext/ice/cpp/src/Ice/SysLoggerI.h +2 -3
  392. data/ext/ice/cpp/src/Ice/TcpAcceptor.cpp +158 -32
  393. data/ext/ice/cpp/src/Ice/TcpAcceptor.h +12 -5
  394. data/ext/ice/cpp/src/Ice/TcpConnector.cpp +1 -7
  395. data/ext/ice/cpp/src/Ice/TcpConnector.h +1 -2
  396. data/ext/ice/cpp/src/Ice/TcpEndpointI.cpp +40 -32
  397. data/ext/ice/cpp/src/Ice/TcpEndpointI.h +11 -8
  398. data/ext/ice/cpp/src/Ice/TcpTransceiver.cpp +12 -27
  399. data/ext/ice/cpp/src/Ice/TcpTransceiver.h +7 -10
  400. data/ext/ice/cpp/src/{IceUtil → Ice}/Thread.cpp +24 -41
  401. data/ext/ice/cpp/src/Ice/ThreadPool.cpp +175 -267
  402. data/ext/ice/cpp/src/Ice/ThreadPool.h +38 -43
  403. data/ext/ice/cpp/src/{IceUtil → Ice}/Timer.cpp +28 -21
  404. data/ext/ice/cpp/src/Ice/TraceLevels.cpp +2 -2
  405. data/ext/ice/cpp/src/Ice/TraceLevels.h +1 -1
  406. data/ext/ice/cpp/src/Ice/TraceLevelsF.h +2 -2
  407. data/ext/ice/cpp/src/Ice/TraceUtil.cpp +53 -31
  408. data/ext/ice/cpp/src/Ice/TraceUtil.h +13 -6
  409. data/ext/ice/cpp/src/Ice/Transceiver.cpp +1 -2
  410. data/ext/ice/cpp/src/Ice/Transceiver.h +8 -7
  411. data/ext/ice/cpp/src/Ice/TransceiverF.h +1 -1
  412. data/ext/ice/cpp/src/Ice/UdpConnector.cpp +2 -8
  413. data/ext/ice/cpp/src/Ice/UdpConnector.h +1 -2
  414. data/ext/ice/cpp/src/Ice/UdpEndpointI.cpp +92 -31
  415. data/ext/ice/cpp/src/Ice/UdpEndpointI.h +12 -4
  416. data/ext/ice/cpp/src/Ice/UdpTransceiver.cpp +150 -179
  417. data/ext/ice/cpp/src/Ice/UdpTransceiver.h +15 -17
  418. data/ext/ice/cpp/src/Ice/Value.cpp +81 -0
  419. data/ext/ice/cpp/src/Ice/ValueFactory.cpp +84 -0
  420. data/ext/ice/cpp/src/Ice/ValueFactoryManagerI.cpp +70 -0
  421. data/ext/ice/cpp/src/Ice/ValueFactoryManagerI.h +42 -0
  422. data/ext/ice/cpp/src/Ice/Version.cpp +24 -14
  423. data/ext/ice/cpp/src/Ice/VirtualShared.h +43 -0
  424. data/ext/ice/cpp/src/Ice/WSAcceptor.cpp +3 -9
  425. data/ext/ice/cpp/src/Ice/WSAcceptor.h +3 -7
  426. data/ext/ice/cpp/src/Ice/WSConnector.cpp +5 -11
  427. data/ext/ice/cpp/src/Ice/WSConnector.h +3 -6
  428. data/ext/ice/cpp/src/Ice/WSEndpoint.cpp +185 -80
  429. data/ext/ice/cpp/src/Ice/WSEndpoint.h +21 -31
  430. data/ext/ice/cpp/src/Ice/WSTransceiver.cpp +41 -37
  431. data/ext/ice/cpp/src/Ice/WSTransceiver.h +7 -21
  432. data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.cpp +526 -264
  433. data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.h +341 -455
  434. data/ext/ice/cpp/src/IceDiscovery/LocatorI.cpp +86 -26
  435. data/ext/ice/cpp/src/IceDiscovery/LocatorI.h +59 -23
  436. data/ext/ice/cpp/src/IceDiscovery/LookupI.cpp +315 -61
  437. data/ext/ice/cpp/src/IceDiscovery/LookupI.h +83 -36
  438. data/ext/ice/cpp/src/IceDiscovery/PluginI.cpp +57 -59
  439. data/ext/ice/cpp/src/IceDiscovery/PluginI.h +3 -3
  440. data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.cpp +396 -159
  441. data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.h +251 -355
  442. data/ext/ice/cpp/src/IceLocatorDiscovery/Plugin.h +52 -0
  443. data/ext/ice/cpp/src/IceLocatorDiscovery/PluginI.cpp +526 -131
  444. data/ext/ice/cpp/src/IceSSL/AcceptorI.cpp +19 -165
  445. data/ext/ice/cpp/src/IceSSL/AcceptorI.h +8 -17
  446. data/ext/ice/cpp/src/IceSSL/CertificateI.cpp +284 -0
  447. data/ext/ice/cpp/src/IceSSL/CertificateI.h +69 -0
  448. data/ext/ice/cpp/src/IceSSL/ConnectionInfo.cpp +39 -11
  449. data/ext/ice/cpp/src/{Ice/ObjectFactoryF.cpp → IceSSL/ConnectionInfoF.cpp} +31 -9
  450. data/ext/ice/cpp/src/IceSSL/ConnectorI.cpp +14 -56
  451. data/ext/ice/cpp/src/IceSSL/ConnectorI.h +6 -13
  452. data/ext/ice/cpp/src/IceSSL/EndpointI.cpp +205 -197
  453. data/ext/ice/cpp/src/IceSSL/EndpointI.h +41 -33
  454. data/ext/ice/cpp/src/IceSSL/EndpointInfo.cpp +39 -10
  455. data/ext/ice/cpp/src/IceSSL/Instance.cpp +1 -6
  456. data/ext/ice/cpp/src/IceSSL/Instance.h +7 -7
  457. data/ext/ice/cpp/src/IceSSL/InstanceF.h +11 -7
  458. data/ext/ice/cpp/src/IceSSL/OpenSSLCertificateI.cpp +588 -0
  459. data/ext/ice/cpp/src/IceSSL/OpenSSLEngine.cpp +117 -152
  460. data/ext/ice/cpp/src/IceSSL/OpenSSLEngine.h +64 -0
  461. data/ext/ice/cpp/src/IceSSL/OpenSSLEngineF.h +32 -0
  462. data/ext/ice/cpp/src/IceSSL/OpenSSLPluginI.cpp +132 -0
  463. data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.cpp +400 -89
  464. data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.h +36 -21
  465. data/ext/ice/cpp/src/IceSSL/OpenSSLUtil.cpp +291 -0
  466. data/ext/ice/cpp/src/IceSSL/OpenSSLUtil.h +63 -0
  467. data/ext/ice/cpp/src/IceSSL/PluginI.cpp +71 -41
  468. data/ext/ice/cpp/src/IceSSL/PluginI.h +13 -18
  469. data/ext/ice/cpp/src/IceSSL/RFC2253.cpp +9 -54
  470. data/ext/ice/cpp/src/IceSSL/RFC2253.h +7 -7
  471. data/ext/ice/cpp/src/IceSSL/SChannelCertificateI.cpp +585 -0
  472. data/ext/ice/cpp/src/IceSSL/SChannelEngine.cpp +491 -75
  473. data/ext/ice/cpp/src/IceSSL/SChannelEngine.h +126 -0
  474. data/ext/ice/cpp/src/IceSSL/SChannelEngineF.h +32 -0
  475. data/ext/ice/cpp/src/IceSSL/SChannelPluginI.cpp +78 -0
  476. data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.cpp +126 -169
  477. data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.h +19 -22
  478. data/ext/ice/cpp/src/IceSSL/SSLEngine.cpp +79 -74
  479. data/ext/ice/cpp/src/IceSSL/SSLEngine.h +24 -187
  480. data/ext/ice/cpp/src/IceSSL/SSLEngineF.h +4 -19
  481. data/ext/ice/cpp/src/IceSSL/SecureTransportCertificateI.cpp +862 -0
  482. data/ext/ice/cpp/src/IceSSL/SecureTransportEngine.cpp +56 -214
  483. data/ext/ice/cpp/src/IceSSL/SecureTransportEngine.h +60 -0
  484. data/ext/ice/cpp/src/IceSSL/SecureTransportEngineF.h +31 -0
  485. data/ext/ice/cpp/src/IceSSL/SecureTransportPluginI.cpp +80 -0
  486. data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.cpp +137 -144
  487. data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.h +25 -28
  488. data/ext/ice/cpp/src/IceSSL/SecureTransportUtil.cpp +857 -0
  489. data/ext/ice/cpp/src/IceSSL/SecureTransportUtil.h +46 -0
  490. data/ext/ice/cpp/src/IceSSL/TrustManager.cpp +9 -13
  491. data/ext/ice/cpp/src/IceSSL/TrustManager.h +4 -4
  492. data/ext/ice/cpp/src/IceSSL/TrustManagerF.h +3 -3
  493. data/ext/ice/cpp/src/IceSSL/UWPCertificateI.cpp +271 -0
  494. data/ext/ice/cpp/src/IceSSL/UWPEngine.cpp +343 -0
  495. data/ext/ice/cpp/src/IceSSL/UWPEngine.h +46 -0
  496. data/ext/ice/cpp/{include/Ice/ObjectFactoryManagerF.h → src/IceSSL/UWPEngineF.h} +13 -8
  497. data/ext/ice/cpp/src/IceSSL/UWPPluginI.cpp +94 -0
  498. data/ext/ice/cpp/src/IceSSL/UWPTransceiverI.cpp +388 -0
  499. data/ext/ice/cpp/src/IceSSL/UWPTransceiverI.h +76 -0
  500. data/ext/ice/cpp/src/IceSSL/Util.cpp +66 -1256
  501. data/ext/ice/cpp/src/IceSSL/Util.h +48 -137
  502. data/ext/ice/cpp/src/IceUtil/ConsoleUtil.cpp +162 -0
  503. data/ext/ice/cpp/src/IceUtil/ConvertUTF.cpp +22 -22
  504. data/ext/ice/cpp/src/IceUtil/ConvertUTF.h +34 -26
  505. data/ext/ice/cpp/src/IceUtil/CtrlCHandler.cpp +20 -31
  506. data/ext/ice/cpp/src/IceUtil/FileUtil.cpp +25 -116
  507. data/ext/ice/cpp/src/IceUtil/InputUtil.cpp +1 -1
  508. data/ext/ice/cpp/src/IceUtil/MutexProtocol.cpp +1 -1
  509. data/ext/ice/cpp/src/IceUtil/Options.cpp +23 -46
  510. data/ext/ice/cpp/src/IceUtil/OutputUtil.cpp +7 -6
  511. data/ext/ice/cpp/src/IceUtil/Random.cpp +13 -13
  512. data/ext/ice/cpp/src/IceUtil/RecMutex.cpp +3 -9
  513. data/ext/ice/cpp/src/IceUtil/Shared.cpp +8 -3
  514. data/ext/ice/cpp/src/IceUtil/StringConverter.cpp +501 -264
  515. data/ext/ice/cpp/src/IceUtil/StringUtil.cpp +540 -235
  516. data/ext/ice/cpp/src/IceUtil/ThreadException.cpp +37 -74
  517. data/ext/ice/cpp/src/IceUtil/Time.cpp +1 -1
  518. data/ext/ice/cpp/src/IceUtil/UUID.cpp +10 -10
  519. data/ext/ice/cpp/src/IceUtil/Unicode.cpp +98 -97
  520. data/ext/ice/cpp/src/IceUtil/Unicode.h +21 -35
  521. data/ext/ice/cpp/src/IceUtil/UtilException.cpp +838 -0
  522. data/ext/ice/cpp/src/Slice/CPlusPlusUtil.cpp +815 -163
  523. data/ext/ice/cpp/src/Slice/CPlusPlusUtil.h +76 -0
  524. data/ext/ice/cpp/src/Slice/Checksum.cpp +2 -2
  525. data/ext/ice/cpp/{include → src}/Slice/Checksum.h +2 -2
  526. data/ext/ice/cpp/src/Slice/FileTracker.cpp +25 -78
  527. data/ext/ice/cpp/{include → src}/Slice/FileTracker.h +9 -9
  528. data/ext/ice/cpp/src/Slice/Grammar.cpp +1994 -1943
  529. data/ext/ice/cpp/src/Slice/Grammar.h +44 -24
  530. data/ext/ice/cpp/src/Slice/GrammarUtil.h +14 -14
  531. data/ext/ice/cpp/src/Slice/JavaUtil.cpp +2658 -1927
  532. data/ext/ice/cpp/{include → src}/Slice/JavaUtil.h +178 -59
  533. data/ext/ice/cpp/src/Slice/MD5.cpp +1 -1
  534. data/ext/ice/cpp/src/Slice/MD5.h +1 -1
  535. data/ext/ice/cpp/src/Slice/MD5I.cpp +0 -1
  536. data/ext/ice/cpp/src/Slice/MD5I.h +1 -1
  537. data/ext/ice/cpp/src/Slice/PHPUtil.cpp +12 -15
  538. data/ext/ice/cpp/{include → src}/Slice/PHPUtil.h +6 -15
  539. data/ext/ice/cpp/src/Slice/Parser.cpp +802 -307
  540. data/ext/ice/cpp/{include → src}/Slice/Parser.h +76 -84
  541. data/ext/ice/cpp/src/Slice/Preprocessor.cpp +43 -21
  542. data/ext/ice/cpp/{include → src}/Slice/Preprocessor.h +7 -12
  543. data/ext/ice/cpp/src/Slice/Python.cpp +207 -86
  544. data/ext/ice/cpp/src/Slice/PythonUtil.cpp +683 -679
  545. data/ext/ice/cpp/{include → src}/Slice/PythonUtil.h +19 -8
  546. data/ext/ice/cpp/src/Slice/Ruby.cpp +38 -34
  547. data/ext/ice/cpp/src/Slice/RubyUtil.cpp +177 -445
  548. data/ext/ice/cpp/{include → src}/Slice/RubyUtil.h +6 -6
  549. data/ext/ice/cpp/src/Slice/Scanner.cpp +218 -306
  550. data/ext/ice/cpp/src/Slice/{Util.cpp → SliceUtil.cpp} +37 -64
  551. data/ext/ice/cpp/src/Slice/StringLiteralUtil.cpp +374 -0
  552. data/ext/ice/cpp/src/Slice/Util.h +54 -0
  553. data/ext/ice/mcpp/Makefile +5 -2
  554. data/ice.gemspec +2 -7
  555. data/lib/Glacier2.rb +1 -1
  556. data/lib/Glacier2/Metrics.rb +7 -46
  557. data/lib/Glacier2/PermissionsVerifier.rb +24 -95
  558. data/lib/Glacier2/PermissionsVerifierF.rb +3 -3
  559. data/lib/Glacier2/Router.rb +32 -74
  560. data/lib/Glacier2/RouterF.rb +3 -3
  561. data/lib/Glacier2/SSLInfo.rb +4 -7
  562. data/lib/Glacier2/Session.rb +88 -307
  563. data/lib/Ice.rb +83 -52
  564. data/lib/Ice/BuiltinSequences.rb +4 -4
  565. data/lib/Ice/Communicator.rb +56 -58
  566. data/lib/Ice/CommunicatorF.rb +3 -3
  567. data/lib/Ice/Connection.rb +153 -162
  568. data/lib/Ice/ConnectionF.rb +3 -3
  569. data/lib/Ice/Current.rb +4 -11
  570. data/lib/Ice/Endpoint.rb +57 -133
  571. data/lib/Ice/EndpointF.rb +3 -3
  572. data/lib/Ice/EndpointTypes.rb +3 -7
  573. data/lib/Ice/FacetMap.rb +4 -4
  574. data/lib/Ice/Identity.rb +5 -8
  575. data/lib/Ice/ImplicitContext.rb +5 -34
  576. data/lib/Ice/ImplicitContextF.rb +3 -3
  577. data/lib/Ice/Instrumentation.rb +23 -275
  578. data/lib/Ice/InstrumentationF.rb +3 -3
  579. data/lib/Ice/LocalException.rb +95 -141
  580. data/lib/Ice/Locator.rb +51 -165
  581. data/lib/Ice/LocatorF.rb +3 -3
  582. data/lib/Ice/Logger.rb +5 -34
  583. data/lib/Ice/LoggerF.rb +3 -3
  584. data/lib/Ice/Metrics.rb +61 -416
  585. data/lib/Ice/ObjectAdapter.rb +34 -0
  586. data/lib/Ice/ObjectAdapterF.rb +3 -3
  587. data/lib/Ice/ObjectFactory.rb +5 -30
  588. data/lib/Ice/Plugin.rb +7 -60
  589. data/lib/Ice/PluginF.rb +3 -3
  590. data/lib/Ice/Process.rb +16 -52
  591. data/lib/Ice/ProcessF.rb +3 -3
  592. data/lib/Ice/Properties.rb +5 -41
  593. data/lib/Ice/PropertiesAdmin.rb +19 -56
  594. data/lib/Ice/PropertiesF.rb +3 -3
  595. data/lib/Ice/RemoteLogger.rb +34 -115
  596. data/lib/Ice/Router.rb +29 -101
  597. data/lib/Ice/RouterF.rb +3 -3
  598. data/lib/Ice/ServantLocator.rb +31 -0
  599. data/lib/Ice/{ObjectFactoryF.rb → ServantLocatorF.rb} +6 -6
  600. data/lib/Ice/SliceChecksumDict.rb +3 -3
  601. data/lib/Ice/ValueFactory.rb +33 -0
  602. data/lib/Ice/Version.rb +5 -11
  603. data/lib/IceBox.rb +1 -1
  604. data/lib/IceBox/IceBox.rb +44 -148
  605. data/lib/IceGrid.rb +1 -4
  606. data/lib/IceGrid/Admin.rb +551 -427
  607. data/lib/IceGrid/Descriptor.rb +62 -529
  608. data/lib/IceGrid/Exception.rb +24 -45
  609. data/lib/IceGrid/FileParser.rb +14 -50
  610. data/lib/IceGrid/PluginFacade.rb +40 -0
  611. data/lib/IceGrid/Registry.rb +151 -58
  612. data/lib/IceGrid/Session.rb +25 -64
  613. data/lib/IceGrid/UserAccountMapper.rb +14 -50
  614. data/lib/IcePatch2.rb +1 -1
  615. data/lib/IcePatch2/FileInfo.rb +5 -11
  616. data/lib/IcePatch2/FileServer.rb +33 -76
  617. data/lib/IceStorm.rb +1 -1
  618. data/lib/IceStorm/IceStorm.rb +79 -206
  619. data/lib/IceStorm/Metrics.rb +11 -89
  620. data/slice/Glacier2/Metrics.ice +8 -4
  621. data/slice/Glacier2/PermissionsVerifier.ice +10 -7
  622. data/slice/Glacier2/PermissionsVerifierF.ice +7 -4
  623. data/slice/Glacier2/Router.ice +10 -8
  624. data/slice/Glacier2/RouterF.ice +7 -4
  625. data/slice/Glacier2/SSLInfo.ice +8 -5
  626. data/slice/Glacier2/Session.ice +15 -13
  627. data/slice/Ice/BuiltinSequences.ice +7 -4
  628. data/slice/Ice/Communicator.ice +141 -66
  629. data/slice/Ice/CommunicatorF.ice +7 -4
  630. data/slice/Ice/Connection.ice +183 -86
  631. data/slice/Ice/ConnectionF.ice +7 -4
  632. data/slice/Ice/Current.ice +13 -9
  633. data/slice/Ice/Endpoint.ice +63 -14
  634. data/slice/Ice/EndpointF.ice +7 -4
  635. data/slice/Ice/EndpointTypes.ice +8 -6
  636. data/slice/Ice/FacetMap.ice +7 -4
  637. data/slice/Ice/Identity.ice +13 -5
  638. data/slice/Ice/ImplicitContext.ice +20 -18
  639. data/slice/Ice/ImplicitContextF.ice +7 -4
  640. data/slice/Ice/Instrumentation.ice +20 -19
  641. data/slice/Ice/InstrumentationF.ice +8 -5
  642. data/slice/Ice/LocalException.ice +87 -87
  643. data/slice/Ice/Locator.ice +19 -18
  644. data/slice/Ice/LocatorF.ice +7 -4
  645. data/slice/Ice/Logger.ice +9 -7
  646. data/slice/Ice/LoggerF.ice +7 -4
  647. data/slice/Ice/Metrics.ice +18 -14
  648. data/slice/Ice/ObjectAdapter.ice +30 -13
  649. data/slice/Ice/ObjectAdapterF.ice +7 -4
  650. data/slice/Ice/ObjectFactory.ice +15 -12
  651. data/slice/Ice/Plugin.ice +9 -6
  652. data/slice/Ice/PluginF.ice +8 -5
  653. data/slice/Ice/Process.ice +9 -6
  654. data/slice/Ice/ProcessF.ice +7 -4
  655. data/slice/Ice/Properties.ice +15 -12
  656. data/slice/Ice/PropertiesAdmin.ice +9 -5
  657. data/slice/Ice/PropertiesF.ice +7 -4
  658. data/slice/Ice/RemoteLogger.ice +33 -24
  659. data/slice/Ice/Router.ice +16 -7
  660. data/slice/Ice/RouterF.ice +7 -4
  661. data/slice/Ice/ServantLocator.ice +13 -10
  662. data/slice/Ice/ServantLocatorF.ice +7 -4
  663. data/slice/Ice/SliceChecksumDict.ice +7 -4
  664. data/slice/Ice/ValueFactory.ice +127 -0
  665. data/slice/Ice/Version.ice +9 -5
  666. data/slice/IceBT/ConnectionInfo.ice +53 -0
  667. data/slice/IceBT/EndpointInfo.ice +51 -0
  668. data/slice/IceBT/Types.ice +39 -0
  669. data/slice/IceBox/IceBox.ice +20 -21
  670. data/slice/IceDiscovery/IceDiscovery.ice +9 -5
  671. data/slice/IceGrid/Admin.ice +390 -30
  672. data/slice/IceGrid/Descriptor.ice +37 -29
  673. data/slice/IceGrid/Exception.ice +33 -27
  674. data/slice/IceGrid/FileParser.ice +9 -6
  675. data/slice/IceGrid/PluginFacade.ice +11 -9
  676. data/slice/IceGrid/Registry.ice +139 -16
  677. data/slice/IceGrid/Session.ice +10 -8
  678. data/slice/IceGrid/UserAccountMapper.ice +9 -6
  679. data/slice/IceIAP/ConnectionInfo.ice +70 -0
  680. data/slice/IceIAP/EndpointInfo.ice +64 -0
  681. data/slice/IceLocatorDiscovery/IceLocatorDiscovery.ice +9 -7
  682. data/slice/IcePatch2/FileInfo.ice +9 -8
  683. data/slice/IcePatch2/FileServer.ice +17 -13
  684. data/slice/IceSSL/ConnectionInfo.ice +14 -17
  685. data/slice/IceSSL/ConnectionInfoF.ice +24 -0
  686. data/slice/IceSSL/EndpointInfo.ice +9 -30
  687. data/slice/IceStorm/IceStorm.ice +22 -18
  688. data/slice/IceStorm/Metrics.ice +9 -5
  689. metadata +154 -120
  690. data/ext/ObjectFactory.cpp +0 -140
  691. data/ext/ObjectFactory.h +0 -50
  692. data/ext/ice/cpp/include/Ice/BasicStream.h +0 -1335
  693. data/ext/ice/cpp/include/Ice/Communicator.h +0 -200
  694. data/ext/ice/cpp/include/Ice/Connection.h +0 -497
  695. data/ext/ice/cpp/include/Ice/DeprecatedStringConverter.h +0 -62
  696. data/ext/ice/cpp/include/Ice/Endpoint.h +0 -341
  697. data/ext/ice/cpp/include/Ice/Identity.h +0 -168
  698. data/ext/ice/cpp/include/Ice/Instrumentation.h +0 -365
  699. data/ext/ice/cpp/include/Ice/LocalException.h +0 -1030
  700. data/ext/ice/cpp/include/Ice/Locator.h +0 -2193
  701. data/ext/ice/cpp/include/Ice/Metrics.h +0 -2974
  702. data/ext/ice/cpp/include/Ice/ObjectAdapter.h +0 -168
  703. data/ext/ice/cpp/include/Ice/ObjectFactory.h +0 -92
  704. data/ext/ice/cpp/include/Ice/ObjectFactoryF.h +0 -66
  705. data/ext/ice/cpp/include/Ice/Outgoing.h +0 -225
  706. data/ext/ice/cpp/include/Ice/Plugin.h +0 -125
  707. data/ext/ice/cpp/include/Ice/Process.h +0 -574
  708. data/ext/ice/cpp/include/Ice/PropertiesAdmin.h +0 -830
  709. data/ext/ice/cpp/include/Ice/RemoteLogger.h +0 -1500
  710. data/ext/ice/cpp/include/Ice/Router.h +0 -1159
  711. data/ext/ice/cpp/include/Ice/Stream.h +0 -447
  712. data/ext/ice/cpp/include/Ice/StreamF.h +0 -30
  713. data/ext/ice/cpp/include/Ice/Version.h +0 -262
  714. data/ext/ice/cpp/include/IceSSL/ConnectionInfo.h +0 -158
  715. data/ext/ice/cpp/include/IceSSL/EndpointInfo.h +0 -142
  716. data/ext/ice/cpp/include/IceUtil/AbstractMutex.h +0 -119
  717. data/ext/ice/cpp/include/IceUtil/Cache.h +0 -362
  718. data/ext/ice/cpp/include/Slice/CPlusPlusUtil.h +0 -65
  719. data/ext/ice/cpp/include/Slice/CsUtil.h +0 -92
  720. data/ext/ice/cpp/include/Slice/DotNetNames.h +0 -34
  721. data/ext/ice/cpp/include/Slice/ObjCUtil.h +0 -127
  722. data/ext/ice/cpp/include/Slice/Util.h +0 -56
  723. data/ext/ice/cpp/src/Ice/BasicStream.cpp +0 -3428
  724. data/ext/ice/cpp/src/Ice/DeprecatedStringConverter.cpp +0 -62
  725. data/ext/ice/cpp/src/Ice/ObjectFactoryManager.cpp +0 -139
  726. data/ext/ice/cpp/src/Ice/ObjectFactoryManager.h +0 -43
  727. data/ext/ice/cpp/src/Ice/Outgoing.cpp +0 -694
  728. data/ext/ice/cpp/src/Ice/Stream.cpp +0 -53
  729. data/ext/ice/cpp/src/Ice/StreamI.cpp +0 -832
  730. data/ext/ice/cpp/src/Ice/StreamI.h +0 -198
  731. data/ext/ice/cpp/src/IceSSL/Certificate.cpp +0 -1336
  732. data/ext/ice/cpp/src/IceUtil/Exception.cpp +0 -792
  733. data/ext/ice/cpp/src/IceUtil/FileUtil.h +0 -185
  734. data/ext/ice/cpp/src/Slice/CsUtil.cpp +0 -2660
  735. data/ext/ice/cpp/src/Slice/DotNetNames.cpp +0 -146
  736. data/ext/ice/cpp/src/Slice/ObjCUtil.cpp +0 -1310
  737. data/lib/IceGrid/Locator.rb +0 -106
  738. data/lib/IceGrid/Observer.rb +0 -572
  739. data/lib/IceGrid/Query.rb +0 -169
  740. data/slice/Freeze/BackgroundSaveEvictor.ice +0 -111
  741. data/slice/Freeze/CatalogData.ice +0 -49
  742. data/slice/Freeze/Connection.ice +0 -121
  743. data/slice/Freeze/DB.ice +0 -37
  744. data/slice/Freeze/Evictor.ice +0 -346
  745. data/slice/Freeze/EvictorF.ice +0 -22
  746. data/slice/Freeze/EvictorStorage.ice +0 -72
  747. data/slice/Freeze/Exception.ice +0 -100
  748. data/slice/Freeze/Transaction.ice +0 -58
  749. data/slice/Freeze/TransactionalEvictor.ice +0 -50
  750. data/slice/IceGrid/Locator.ice +0 -57
  751. data/slice/IceGrid/Observer.ice +0 -395
  752. data/slice/IceGrid/Query.ice +0 -131
@@ -0,0 +1,76 @@
1
+ // **********************************************************************
2
+ //
3
+ // Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
4
+ //
5
+ // This copy of Ice is licensed to you under the terms described in the
6
+ // ICE_LICENSE file included in this distribution.
7
+ //
8
+ // **********************************************************************
9
+
10
+ #ifndef ICESSL_UWP_TRANSCEIVER_I_H
11
+ #define ICESSL_UWP_TRANSCEIVER_I_H
12
+
13
+ #include <IceSSL/Config.h>
14
+ #include <IceSSL/InstanceF.h>
15
+ #include <IceSSL/UWPEngineF.h>
16
+ #include <IceSSL/Plugin.h>
17
+
18
+ #include <Ice/Transceiver.h>
19
+ #include <Ice/Network.h>
20
+
21
+ namespace IceSSL
22
+ {
23
+
24
+ namespace UWP
25
+ {
26
+
27
+ class TransceiverI : public IceInternal::Transceiver
28
+ {
29
+ public:
30
+
31
+ virtual IceInternal::NativeInfoPtr getNativeInfo();
32
+
33
+ virtual IceInternal::SocketOperation initialize(IceInternal::Buffer&, IceInternal::Buffer&);
34
+ virtual IceInternal::SocketOperation closing(bool, const Ice::LocalException&);
35
+ virtual void close();
36
+ virtual IceInternal::SocketOperation write(IceInternal::Buffer&);
37
+ virtual IceInternal::SocketOperation read(IceInternal::Buffer&);
38
+ virtual bool startWrite(IceInternal::Buffer&);
39
+ virtual void finishWrite(IceInternal::Buffer&);
40
+ virtual void startRead(IceInternal::Buffer&);
41
+ virtual void finishRead(IceInternal::Buffer&);
42
+
43
+ virtual std::string protocol() const;
44
+ virtual std::string toString() const;
45
+ virtual std::string toDetailedString() const;
46
+ virtual Ice::ConnectionInfoPtr getInfo() const;
47
+ virtual void checkSendSize(const IceInternal::Buffer&);
48
+ virtual void setBufferSize(int rcvSize, int sndSize);
49
+
50
+ private:
51
+
52
+ TransceiverI(const InstancePtr&, const IceInternal::TransceiverPtr&, const std::string&, bool);
53
+ virtual ~TransceiverI();
54
+
55
+ friend class SSLEngine;
56
+
57
+ const InstancePtr _instance;
58
+ const SSLEnginePtr _engine;
59
+ const std::string _host;
60
+ const std::string _adapterName;
61
+ const bool _incoming;
62
+ const IceInternal::TransceiverPtr _delegate;
63
+
64
+ bool _connected;
65
+ bool _upgraded;
66
+ std::vector<IceSSL::CertificatePtr> _certs;
67
+ bool _verified;
68
+ Windows::Security::Cryptography::Certificates::CertificateChain^ _chain;
69
+ };
70
+ typedef IceUtil::Handle<TransceiverI> TransceiverIPtr;
71
+
72
+ } // UWP namespace end
73
+
74
+ } // IceSSL namespace end
75
+
76
+ #endif
@@ -1,6 +1,6 @@
1
1
  // **********************************************************************
2
2
  //
3
- // Copyright (c) 2003-2018 ZeroC, Inc. All rights reserved.
3
+ // Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
4
4
  //
5
5
  // This copy of Ice is licensed to you under the terms described in the
6
6
  // ICE_LICENSE file included in this distribution.
@@ -8,7 +8,7 @@
8
8
  // **********************************************************************
9
9
 
10
10
  #include <IceUtil/Config.h>
11
- #ifdef _WIN32
11
+ #if defined(_WIN32) && !defined(ICE_OS_UWP)
12
12
  # include <winsock2.h>
13
13
  #endif
14
14
 
@@ -16,53 +16,66 @@
16
16
  #include <IceUtil/FileUtil.h>
17
17
  #include <IceUtil/StringUtil.h>
18
18
 
19
+ #include <Ice/Base64.h>
19
20
  #include <Ice/LocalException.h>
20
21
  #include <Ice/Network.h>
21
22
  #include <Ice/Object.h>
23
+ #include <Ice/StringConverter.h>
24
+ #include <Ice/UniqueRef.h>
22
25
 
23
- #ifdef ICE_USE_OPENSSL
24
- # include <openssl/err.h>
25
- //
26
- // Avoid old style cast warnings from OpenSSL macros
27
- //
28
- # pragma GCC diagnostic ignored "-Wold-style-cast"
29
- #endif
26
+ #include <fstream>
30
27
 
31
28
  using namespace std;
32
29
  using namespace Ice;
30
+ using namespace IceInternal;
33
31
  using namespace IceUtil;
34
32
  using namespace IceSSL;
35
33
 
36
- void
37
- IceSSL::readFile(const string& file, vector<char>& buffer)
34
+ #if defined(__APPLE__)
35
+
36
+ std::string
37
+ IceSSL::fromCFString(CFStringRef v)
38
38
  {
39
- IceUtilInternal::ifstream is(file, ios::in | ios::binary);
40
- if(!is.good())
39
+ string s;
40
+ if(v)
41
41
  {
42
- throw CertificateReadException(__FILE__, __LINE__, "error opening file " + file);
42
+ CFIndex size = CFStringGetMaximumSizeForEncoding(CFStringGetLength(v), kCFStringEncodingUTF8);
43
+ vector<char> buffer;
44
+ buffer.resize(size + 1);
45
+ CFStringGetCString(v, &buffer[0], buffer.size(), kCFStringEncodingUTF8);
46
+ s.assign(&buffer[0]);
43
47
  }
48
+ return s;
49
+ }
44
50
 
45
- is.seekg(0, is.end);
46
- buffer.resize(static_cast<int>(is.tellg()));
47
- is.seekg(0, is.beg);
51
+ #endif
48
52
 
49
- if(!buffer.empty())
50
- {
51
- is.read(&buffer[0], buffer.size());
52
- if(!is.good())
53
- {
54
- throw CertificateReadException(__FILE__, __LINE__, "error reading file " + file);
55
- }
56
- }
53
+ #ifdef ICE_CPP11_MAPPING
54
+ IceSSL::CertificateVerifier::CertificateVerifier(std::function<bool(const std::shared_ptr<ConnectionInfo>&)> v) :
55
+ _verify(std::move(v))
56
+ {
57
+ }
58
+
59
+ bool
60
+ IceSSL::CertificateVerifier::verify(const ConnectionInfoPtr& info)
61
+ {
62
+ return _verify(info);
57
63
  }
58
64
 
59
- #ifndef ICE_USE_OPENSSL
65
+ IceSSL::PasswordPrompt::PasswordPrompt(std::function<std::string()> p) :
66
+ _prompt(std::move(p))
67
+ {
68
+ }
60
69
 
61
- namespace
70
+ std::string
71
+ IceSSL::PasswordPrompt::getPassword()
62
72
  {
73
+ return _prompt();
74
+ }
75
+ #endif
63
76
 
64
77
  bool
65
- parseBytes(const string& arg, vector<unsigned char>& buffer)
78
+ IceSSL::parseBytes(const string& arg, vector<unsigned char>& buffer)
66
79
  {
67
80
  string v = IceUtilInternal::toUpper(arg);
68
81
 
@@ -100,1255 +113,52 @@ parseBytes(const string& arg, vector<unsigned char>& buffer)
100
113
  return true;
101
114
  }
102
115
 
103
- }
104
-
105
- #endif
106
-
107
- #if defined(ICE_USE_OPENSSL)
108
-
109
- namespace
110
- {
111
-
112
- # ifndef OPENSSL_NO_DH
113
- # if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
114
-
115
- // The following arrays are predefined Diffie Hellman group parameters.
116
- // These are known strong primes, distributed with the OpenSSL library
117
- // in the files dh512.pem, dh1024.pem, dh2048.pem and dh4096.pem.
118
- // They are not keys themselves, but the basis for generating DH keys
119
- // on the fly.
120
-
121
- unsigned char dh512_p[] =
122
- {
123
- 0xF5,0x2A,0xFF,0x3C,0xE1,0xB1,0x29,0x40,0x18,0x11,0x8D,0x7C,
124
- 0x84,0xA7,0x0A,0x72,0xD6,0x86,0xC4,0x03,0x19,0xC8,0x07,0x29,
125
- 0x7A,0xCA,0x95,0x0C,0xD9,0x96,0x9F,0xAB,0xD0,0x0A,0x50,0x9B,
126
- 0x02,0x46,0xD3,0x08,0x3D,0x66,0xA4,0x5D,0x41,0x9F,0x9C,0x7C,
127
- 0xBD,0x89,0x4B,0x22,0x19,0x26,0xBA,0xAB,0xA2,0x5E,0xC3,0x55,
128
- 0xE9,0x2A,0x05,0x5F,
129
- };
130
-
131
- unsigned char dh512_g[] = { 0x02 };
132
-
133
- unsigned char dh1024_p[] =
134
- {
135
- 0xF4,0x88,0xFD,0x58,0x4E,0x49,0xDB,0xCD,0x20,0xB4,0x9D,0xE4,
136
- 0x91,0x07,0x36,0x6B,0x33,0x6C,0x38,0x0D,0x45,0x1D,0x0F,0x7C,
137
- 0x88,0xB3,0x1C,0x7C,0x5B,0x2D,0x8E,0xF6,0xF3,0xC9,0x23,0xC0,
138
- 0x43,0xF0,0xA5,0x5B,0x18,0x8D,0x8E,0xBB,0x55,0x8C,0xB8,0x5D,
139
- 0x38,0xD3,0x34,0xFD,0x7C,0x17,0x57,0x43,0xA3,0x1D,0x18,0x6C,
140
- 0xDE,0x33,0x21,0x2C,0xB5,0x2A,0xFF,0x3C,0xE1,0xB1,0x29,0x40,
141
- 0x18,0x11,0x8D,0x7C,0x84,0xA7,0x0A,0x72,0xD6,0x86,0xC4,0x03,
142
- 0x19,0xC8,0x07,0x29,0x7A,0xCA,0x95,0x0C,0xD9,0x96,0x9F,0xAB,
143
- 0xD0,0x0A,0x50,0x9B,0x02,0x46,0xD3,0x08,0x3D,0x66,0xA4,0x5D,
144
- 0x41,0x9F,0x9C,0x7C,0xBD,0x89,0x4B,0x22,0x19,0x26,0xBA,0xAB,
145
- 0xA2,0x5E,0xC3,0x55,0xE9,0x2F,0x78,0xC7,
146
- };
147
-
148
- unsigned char dh1024_g[] = { 0x02 };
149
-
150
- unsigned char dh2048_p[] =
151
- {
152
- 0xF6,0x42,0x57,0xB7,0x08,0x7F,0x08,0x17,0x72,0xA2,0xBA,0xD6,
153
- 0xA9,0x42,0xF3,0x05,0xE8,0xF9,0x53,0x11,0x39,0x4F,0xB6,0xF1,
154
- 0x6E,0xB9,0x4B,0x38,0x20,0xDA,0x01,0xA7,0x56,0xA3,0x14,0xE9,
155
- 0x8F,0x40,0x55,0xF3,0xD0,0x07,0xC6,0xCB,0x43,0xA9,0x94,0xAD,
156
- 0xF7,0x4C,0x64,0x86,0x49,0xF8,0x0C,0x83,0xBD,0x65,0xE9,0x17,
157
- 0xD4,0xA1,0xD3,0x50,0xF8,0xF5,0x59,0x5F,0xDC,0x76,0x52,0x4F,
158
- 0x3D,0x3D,0x8D,0xDB,0xCE,0x99,0xE1,0x57,0x92,0x59,0xCD,0xFD,
159
- 0xB8,0xAE,0x74,0x4F,0xC5,0xFC,0x76,0xBC,0x83,0xC5,0x47,0x30,
160
- 0x61,0xCE,0x7C,0xC9,0x66,0xFF,0x15,0xF9,0xBB,0xFD,0x91,0x5E,
161
- 0xC7,0x01,0xAA,0xD3,0x5B,0x9E,0x8D,0xA0,0xA5,0x72,0x3A,0xD4,
162
- 0x1A,0xF0,0xBF,0x46,0x00,0x58,0x2B,0xE5,0xF4,0x88,0xFD,0x58,
163
- 0x4E,0x49,0xDB,0xCD,0x20,0xB4,0x9D,0xE4,0x91,0x07,0x36,0x6B,
164
- 0x33,0x6C,0x38,0x0D,0x45,0x1D,0x0F,0x7C,0x88,0xB3,0x1C,0x7C,
165
- 0x5B,0x2D,0x8E,0xF6,0xF3,0xC9,0x23,0xC0,0x43,0xF0,0xA5,0x5B,
166
- 0x18,0x8D,0x8E,0xBB,0x55,0x8C,0xB8,0x5D,0x38,0xD3,0x34,0xFD,
167
- 0x7C,0x17,0x57,0x43,0xA3,0x1D,0x18,0x6C,0xDE,0x33,0x21,0x2C,
168
- 0xB5,0x2A,0xFF,0x3C,0xE1,0xB1,0x29,0x40,0x18,0x11,0x8D,0x7C,
169
- 0x84,0xA7,0x0A,0x72,0xD6,0x86,0xC4,0x03,0x19,0xC8,0x07,0x29,
170
- 0x7A,0xCA,0x95,0x0C,0xD9,0x96,0x9F,0xAB,0xD0,0x0A,0x50,0x9B,
171
- 0x02,0x46,0xD3,0x08,0x3D,0x66,0xA4,0x5D,0x41,0x9F,0x9C,0x7C,
172
- 0xBD,0x89,0x4B,0x22,0x19,0x26,0xBA,0xAB,0xA2,0x5E,0xC3,0x55,
173
- 0xE9,0x32,0x0B,0x3B,
174
- };
175
-
176
- unsigned char dh2048_g[] = { 0x02 };
177
-
178
- unsigned char dh4096_p[] =
179
- {
180
- 0xFA,0x14,0x72,0x52,0xC1,0x4D,0xE1,0x5A,0x49,0xD4,0xEF,0x09,
181
- 0x2D,0xC0,0xA8,0xFD,0x55,0xAB,0xD7,0xD9,0x37,0x04,0x28,0x09,
182
- 0xE2,0xE9,0x3E,0x77,0xE2,0xA1,0x7A,0x18,0xDD,0x46,0xA3,0x43,
183
- 0x37,0x23,0x90,0x97,0xF3,0x0E,0xC9,0x03,0x50,0x7D,0x65,0xCF,
184
- 0x78,0x62,0xA6,0x3A,0x62,0x22,0x83,0xA1,0x2F,0xFE,0x79,0xBA,
185
- 0x35,0xFF,0x59,0xD8,0x1D,0x61,0xDD,0x1E,0x21,0x13,0x17,0xFE,
186
- 0xCD,0x38,0x87,0x9E,0xF5,0x4F,0x79,0x10,0x61,0x8D,0xD4,0x22,
187
- 0xF3,0x5A,0xED,0x5D,0xEA,0x21,0xE9,0x33,0x6B,0x48,0x12,0x0A,
188
- 0x20,0x77,0xD4,0x25,0x60,0x61,0xDE,0xF6,0xB4,0x4F,0x1C,0x63,
189
- 0x40,0x8B,0x3A,0x21,0x93,0x8B,0x79,0x53,0x51,0x2C,0xCA,0xB3,
190
- 0x7B,0x29,0x56,0xA8,0xC7,0xF8,0xF4,0x7B,0x08,0x5E,0xA6,0xDC,
191
- 0xA2,0x45,0x12,0x56,0xDD,0x41,0x92,0xF2,0xDD,0x5B,0x8F,0x23,
192
- 0xF0,0xF3,0xEF,0xE4,0x3B,0x0A,0x44,0xDD,0xED,0x96,0x84,0xF1,
193
- 0xA8,0x32,0x46,0xA3,0xDB,0x4A,0xBE,0x3D,0x45,0xBA,0x4E,0xF8,
194
- 0x03,0xE5,0xDD,0x6B,0x59,0x0D,0x84,0x1E,0xCA,0x16,0x5A,0x8C,
195
- 0xC8,0xDF,0x7C,0x54,0x44,0xC4,0x27,0xA7,0x3B,0x2A,0x97,0xCE,
196
- 0xA3,0x7D,0x26,0x9C,0xAD,0xF4,0xC2,0xAC,0x37,0x4B,0xC3,0xAD,
197
- 0x68,0x84,0x7F,0x99,0xA6,0x17,0xEF,0x6B,0x46,0x3A,0x7A,0x36,
198
- 0x7A,0x11,0x43,0x92,0xAD,0xE9,0x9C,0xFB,0x44,0x6C,0x3D,0x82,
199
- 0x49,0xCC,0x5C,0x6A,0x52,0x42,0xF8,0x42,0xFB,0x44,0xF9,0x39,
200
- 0x73,0xFB,0x60,0x79,0x3B,0xC2,0x9E,0x0B,0xDC,0xD4,0xA6,0x67,
201
- 0xF7,0x66,0x3F,0xFC,0x42,0x3B,0x1B,0xDB,0x4F,0x66,0xDC,0xA5,
202
- 0x8F,0x66,0xF9,0xEA,0xC1,0xED,0x31,0xFB,0x48,0xA1,0x82,0x7D,
203
- 0xF8,0xE0,0xCC,0xB1,0xC7,0x03,0xE4,0xF8,0xB3,0xFE,0xB7,0xA3,
204
- 0x13,0x73,0xA6,0x7B,0xC1,0x0E,0x39,0xC7,0x94,0x48,0x26,0x00,
205
- 0x85,0x79,0xFC,0x6F,0x7A,0xAF,0xC5,0x52,0x35,0x75,0xD7,0x75,
206
- 0xA4,0x40,0xFA,0x14,0x74,0x61,0x16,0xF2,0xEB,0x67,0x11,0x6F,
207
- 0x04,0x43,0x3D,0x11,0x14,0x4C,0xA7,0x94,0x2A,0x39,0xA1,0xC9,
208
- 0x90,0xCF,0x83,0xC6,0xFF,0x02,0x8F,0xA3,0x2A,0xAC,0x26,0xDF,
209
- 0x0B,0x8B,0xBE,0x64,0x4A,0xF1,0xA1,0xDC,0xEE,0xBA,0xC8,0x03,
210
- 0x82,0xF6,0x62,0x2C,0x5D,0xB6,0xBB,0x13,0x19,0x6E,0x86,0xC5,
211
- 0x5B,0x2B,0x5E,0x3A,0xF3,0xB3,0x28,0x6B,0x70,0x71,0x3A,0x8E,
212
- 0xFF,0x5C,0x15,0xE6,0x02,0xA4,0xCE,0xED,0x59,0x56,0xCC,0x15,
213
- 0x51,0x07,0x79,0x1A,0x0F,0x25,0x26,0x27,0x30,0xA9,0x15,0xB2,
214
- 0xC8,0xD4,0x5C,0xCC,0x30,0xE8,0x1B,0xD8,0xD5,0x0F,0x19,0xA8,
215
- 0x80,0xA4,0xC7,0x01,0xAA,0x8B,0xBA,0x53,0xBB,0x47,0xC2,0x1F,
216
- 0x6B,0x54,0xB0,0x17,0x60,0xED,0x79,0x21,0x95,0xB6,0x05,0x84,
217
- 0x37,0xC8,0x03,0xA4,0xDD,0xD1,0x06,0x69,0x8F,0x4C,0x39,0xE0,
218
- 0xC8,0x5D,0x83,0x1D,0xBE,0x6A,0x9A,0x99,0xF3,0x9F,0x0B,0x45,
219
- 0x29,0xD4,0xCB,0x29,0x66,0xEE,0x1E,0x7E,0x3D,0xD7,0x13,0x4E,
220
- 0xDB,0x90,0x90,0x58,0xCB,0x5E,0x9B,0xCD,0x2E,0x2B,0x0F,0xA9,
221
- 0x4E,0x78,0xAC,0x05,0x11,0x7F,0xE3,0x9E,0x27,0xD4,0x99,0xE1,
222
- 0xB9,0xBD,0x78,0xE1,0x84,0x41,0xA0,0xDF,
223
- };
224
-
225
- unsigned char dh4096_g[] = { 0x02 };
226
-
227
- # else
228
- //
229
- // With OpenSSL 1.1.0 is no longer possible to acess the DH p and g
230
- // data members to set the DH params. We still use the same default
231
- // parameters but they were converted to DER format using
232
- // i2d_DHparams and can be restored using d2i_DHparams
233
-
234
- unsigned char dh512[] =
235
- {
236
- 0x30,0x46,0x02,0x41,0x00,0xF5,0x2A,0xFF,0x3C,0xE1,0xB1,0x29,
237
- 0x40,0x18,0x11,0x8D,0x7C,0x84,0xA7,0x0A,0x72,0xD6,0x86,0xC4,
238
- 0x03,0x19,0xC8,0x07,0x29,0x7A,0xCA,0x95,0x0C,0xD9,0x96,0x9F,
239
- 0xAB,0xD0,0x0A,0x50,0x9B,0x02,0x46,0xD3,0x08,0x3D,0x66,0xA4,
240
- 0x5D,0x41,0x9F,0x9C,0x7C,0xBD,0x89,0x4B,0x22,0x19,0x26,0xBA,
241
- 0xAB,0xA2,0x5E,0xC3,0x55,0xE9,0x2A,0x05,0x5F,0x02,0x01,0x02,
242
- };
243
-
244
- unsigned char dh1024[] =
245
- {
246
- 0x30,0x81,0x87,0x02,0x81,0x81,0x00,0xF4,0x88,0xFD,0x58,0x4E,
247
- 0x49,0xDB,0xCD,0x20,0xB4,0x9D,0xE4,0x91,0x07,0x36,0x6B,0x33,
248
- 0x6C,0x38,0x0D,0x45,0x1D,0x0F,0x7C,0x88,0xB3,0x1C,0x7C,0x5B,
249
- 0x2D,0x8E,0xF6,0xF3,0xC9,0x23,0xC0,0x43,0xF0,0xA5,0x5B,0x18,
250
- 0x8D,0x8E,0xBB,0x55,0x8C,0xB8,0x5D,0x38,0xD3,0x34,0xFD,0x7C,
251
- 0x17,0x57,0x43,0xA3,0x1D,0x18,0x6C,0xDE,0x33,0x21,0x2C,0xB5,
252
- 0x2A,0xFF,0x3C,0xE1,0xB1,0x29,0x40,0x18,0x11,0x8D,0x7C,0x84,
253
- 0xA7,0x0A,0x72,0xD6,0x86,0xC4,0x03,0x19,0xC8,0x07,0x29,0x7A,
254
- 0xCA,0x95,0x0C,0xD9,0x96,0x9F,0xAB,0xD0,0x0A,0x50,0x9B,0x02,
255
- 0x46,0xD3,0x08,0x3D,0x66,0xA4,0x5D,0x41,0x9F,0x9C,0x7C,0xBD,
256
- 0x89,0x4B,0x22,0x19,0x26,0xBA,0xAB,0xA2,0x5E,0xC3,0x55,0xE9,
257
- 0x2F,0x78,0xC7,0x02,0x01,0x02,
258
- };
259
-
260
- unsigned char dh2048[] =
261
- {
262
- 0x30,0x82,0x01,0x08,0x02,0x82,0x01,0x01,0x00,0xF6,0x42,0x57,
263
- 0xB7,0x08,0x7F,0x08,0x17,0x72,0xA2,0xBA,0xD6,0xA9,0x42,0xF3,
264
- 0x05,0xE8,0xF9,0x53,0x11,0x39,0x4F,0xB6,0xF1,0x6E,0xB9,0x4B,
265
- 0x38,0x20,0xDA,0x01,0xA7,0x56,0xA3,0x14,0xE9,0x8F,0x40,0x55,
266
- 0xF3,0xD0,0x07,0xC6,0xCB,0x43,0xA9,0x94,0xAD,0xF7,0x4C,0x64,
267
- 0x86,0x49,0xF8,0x0C,0x83,0xBD,0x65,0xE9,0x17,0xD4,0xA1,0xD3,
268
- 0x50,0xF8,0xF5,0x59,0x5F,0xDC,0x76,0x52,0x4F,0x3D,0x3D,0x8D,
269
- 0xDB,0xCE,0x99,0xE1,0x57,0x92,0x59,0xCD,0xFD,0xB8,0xAE,0x74,
270
- 0x4F,0xC5,0xFC,0x76,0xBC,0x83,0xC5,0x47,0x30,0x61,0xCE,0x7C,
271
- 0xC9,0x66,0xFF,0x15,0xF9,0xBB,0xFD,0x91,0x5E,0xC7,0x01,0xAA,
272
- 0xD3,0x5B,0x9E,0x8D,0xA0,0xA5,0x72,0x3A,0xD4,0x1A,0xF0,0xBF,
273
- 0x46,0x00,0x58,0x2B,0xE5,0xF4,0x88,0xFD,0x58,0x4E,0x49,0xDB,
274
- 0xCD,0x20,0xB4,0x9D,0xE4,0x91,0x07,0x36,0x6B,0x33,0x6C,0x38,
275
- 0x0D,0x45,0x1D,0x0F,0x7C,0x88,0xB3,0x1C,0x7C,0x5B,0x2D,0x8E,
276
- 0xF6,0xF3,0xC9,0x23,0xC0,0x43,0xF0,0xA5,0x5B,0x18,0x8D,0x8E,
277
- 0xBB,0x55,0x8C,0xB8,0x5D,0x38,0xD3,0x34,0xFD,0x7C,0x17,0x57,
278
- 0x43,0xA3,0x1D,0x18,0x6C,0xDE,0x33,0x21,0x2C,0xB5,0x2A,0xFF,
279
- 0x3C,0xE1,0xB1,0x29,0x40,0x18,0x11,0x8D,0x7C,0x84,0xA7,0x0A,
280
- 0x72,0xD6,0x86,0xC4,0x03,0x19,0xC8,0x07,0x29,0x7A,0xCA,0x95,
281
- 0x0C,0xD9,0x96,0x9F,0xAB,0xD0,0x0A,0x50,0x9B,0x02,0x46,0xD3,
282
- 0x08,0x3D,0x66,0xA4,0x5D,0x41,0x9F,0x9C,0x7C,0xBD,0x89,0x4B,
283
- 0x22,0x19,0x26,0xBA,0xAB,0xA2,0x5E,0xC3,0x55,0xE9,0x32,0x0B,
284
- 0x3B,0x02,0x01,0x02,
285
- };
286
-
287
- unsigned char dh4096[] =
288
- {
289
- 0x30,0x82,0x02,0x08,0x02,0x82,0x02,0x01,0x00,0xFA,0x14,0x72,
290
- 0x52,0xC1,0x4D,0xE1,0x5A,0x49,0xD4,0xEF,0x09,0x2D,0xC0,0xA8,
291
- 0xFD,0x55,0xAB,0xD7,0xD9,0x37,0x04,0x28,0x09,0xE2,0xE9,0x3E,
292
- 0x77,0xE2,0xA1,0x7A,0x18,0xDD,0x46,0xA3,0x43,0x37,0x23,0x90,
293
- 0x97,0xF3,0x0E,0xC9,0x03,0x50,0x7D,0x65,0xCF,0x78,0x62,0xA6,
294
- 0x3A,0x62,0x22,0x83,0xA1,0x2F,0xFE,0x79,0xBA,0x35,0xFF,0x59,
295
- 0xD8,0x1D,0x61,0xDD,0x1E,0x21,0x13,0x17,0xFE,0xCD,0x38,0x87,
296
- 0x9E,0xF5,0x4F,0x79,0x10,0x61,0x8D,0xD4,0x22,0xF3,0x5A,0xED,
297
- 0x5D,0xEA,0x21,0xE9,0x33,0x6B,0x48,0x12,0x0A,0x20,0x77,0xD4,
298
- 0x25,0x60,0x61,0xDE,0xF6,0xB4,0x4F,0x1C,0x63,0x40,0x8B,0x3A,
299
- 0x21,0x93,0x8B,0x79,0x53,0x51,0x2C,0xCA,0xB3,0x7B,0x29,0x56,
300
- 0xA8,0xC7,0xF8,0xF4,0x7B,0x08,0x5E,0xA6,0xDC,0xA2,0x45,0x12,
301
- 0x56,0xDD,0x41,0x92,0xF2,0xDD,0x5B,0x8F,0x23,0xF0,0xF3,0xEF,
302
- 0xE4,0x3B,0x0A,0x44,0xDD,0xED,0x96,0x84,0xF1,0xA8,0x32,0x46,
303
- 0xA3,0xDB,0x4A,0xBE,0x3D,0x45,0xBA,0x4E,0xF8,0x03,0xE5,0xDD,
304
- 0x6B,0x59,0x0D,0x84,0x1E,0xCA,0x16,0x5A,0x8C,0xC8,0xDF,0x7C,
305
- 0x54,0x44,0xC4,0x27,0xA7,0x3B,0x2A,0x97,0xCE,0xA3,0x7D,0x26,
306
- 0x9C,0xAD,0xF4,0xC2,0xAC,0x37,0x4B,0xC3,0xAD,0x68,0x84,0x7F,
307
- 0x99,0xA6,0x17,0xEF,0x6B,0x46,0x3A,0x7A,0x36,0x7A,0x11,0x43,
308
- 0x92,0xAD,0xE9,0x9C,0xFB,0x44,0x6C,0x3D,0x82,0x49,0xCC,0x5C,
309
- 0x6A,0x52,0x42,0xF8,0x42,0xFB,0x44,0xF9,0x39,0x73,0xFB,0x60,
310
- 0x79,0x3B,0xC2,0x9E,0x0B,0xDC,0xD4,0xA6,0x67,0xF7,0x66,0x3F,
311
- 0xFC,0x42,0x3B,0x1B,0xDB,0x4F,0x66,0xDC,0xA5,0x8F,0x66,0xF9,
312
- 0xEA,0xC1,0xED,0x31,0xFB,0x48,0xA1,0x82,0x7D,0xF8,0xE0,0xCC,
313
- 0xB1,0xC7,0x03,0xE4,0xF8,0xB3,0xFE,0xB7,0xA3,0x13,0x73,0xA6,
314
- 0x7B,0xC1,0x0E,0x39,0xC7,0x94,0x48,0x26,0x00,0x85,0x79,0xFC,
315
- 0x6F,0x7A,0xAF,0xC5,0x52,0x35,0x75,0xD7,0x75,0xA4,0x40,0xFA,
316
- 0x14,0x74,0x61,0x16,0xF2,0xEB,0x67,0x11,0x6F,0x04,0x43,0x3D,
317
- 0x11,0x14,0x4C,0xA7,0x94,0x2A,0x39,0xA1,0xC9,0x90,0xCF,0x83,
318
- 0xC6,0xFF,0x02,0x8F,0xA3,0x2A,0xAC,0x26,0xDF,0x0B,0x8B,0xBE,
319
- 0x64,0x4A,0xF1,0xA1,0xDC,0xEE,0xBA,0xC8,0x03,0x82,0xF6,0x62,
320
- 0x2C,0x5D,0xB6,0xBB,0x13,0x19,0x6E,0x86,0xC5,0x5B,0x2B,0x5E,
321
- 0x3A,0xF3,0xB3,0x28,0x6B,0x70,0x71,0x3A,0x8E,0xFF,0x5C,0x15,
322
- 0xE6,0x02,0xA4,0xCE,0xED,0x59,0x56,0xCC,0x15,0x51,0x07,0x79,
323
- 0x1A,0x0F,0x25,0x26,0x27,0x30,0xA9,0x15,0xB2,0xC8,0xD4,0x5C,
324
- 0xCC,0x30,0xE8,0x1B,0xD8,0xD5,0x0F,0x19,0xA8,0x80,0xA4,0xC7,
325
- 0x01,0xAA,0x8B,0xBA,0x53,0xBB,0x47,0xC2,0x1F,0x6B,0x54,0xB0,
326
- 0x17,0x60,0xED,0x79,0x21,0x95,0xB6,0x05,0x84,0x37,0xC8,0x03,
327
- 0xA4,0xDD,0xD1,0x06,0x69,0x8F,0x4C,0x39,0xE0,0xC8,0x5D,0x83,
328
- 0x1D,0xBE,0x6A,0x9A,0x99,0xF3,0x9F,0x0B,0x45,0x29,0xD4,0xCB,
329
- 0x29,0x66,0xEE,0x1E,0x7E,0x3D,0xD7,0x13,0x4E,0xDB,0x90,0x90,
330
- 0x58,0xCB,0x5E,0x9B,0xCD,0x2E,0x2B,0x0F,0xA9,0x4E,0x78,0xAC,
331
- 0x05,0x11,0x7F,0xE3,0x9E,0x27,0xD4,0x99,0xE1,0xB9,0xBD,0x78,
332
- 0xE1,0x84,0x41,0xA0,0xDF,0x02,0x01,0x02,
333
- };
334
- # endif
335
-
336
- }
337
-
338
- //
339
- // Convert a predefined parameter set into a DH value.
340
- //
341
- # if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
342
- static DH*
343
- convertDH(const unsigned char* buf, int len)
344
- {
345
- return d2i_DHparams(0, &buf, len);
346
- }
347
- # else
348
- static DH*
349
- convertDH(unsigned char* p, int plen, unsigned char* g, int glen)
350
- {
351
- assert(p != 0);
352
- assert(g != 0);
353
-
354
- DH* dh = DH_new();
355
-
356
- if(dh != 0)
357
- {
358
- dh->p = BN_bin2bn(p, plen, 0);
359
- dh->g = BN_bin2bn(g, glen, 0);
360
-
361
- if((dh->p == 0) || (dh->g == 0))
362
- {
363
- DH_free(dh);
364
- dh = 0;
365
- }
366
- }
367
- return dh;
368
- }
369
- # endif
370
-
371
- IceSSL::DHParams::DHParams() :
372
- _dh512(0), _dh1024(0), _dh2048(0), _dh4096(0)
373
- {
374
- }
375
-
376
- IceSSL::DHParams::~DHParams()
377
- {
378
- for(ParamList::iterator p = _params.begin(); p != _params.end(); ++p)
379
- {
380
- DH_free(p->second);
381
- }
382
- DH_free(_dh512);
383
- DH_free(_dh1024);
384
- DH_free(_dh2048);
385
- DH_free(_dh4096);
386
- }
387
-
388
- bool
389
- IceSSL::DHParams::add(int keyLength, const string& file)
390
- {
391
- BIO* bio = BIO_new(BIO_s_file());
392
- if(BIO_read_filename(bio, file.c_str()) <= 0)
393
- {
394
- BIO_free(bio);
395
- return false;
396
- }
397
- DH* dh = PEM_read_bio_DHparams(bio, 0, 0, 0);
398
- BIO_free(bio);
399
- if(!dh)
400
- {
401
- return false;
402
- }
403
- ParamList::iterator p = _params.begin();
404
- while(p != _params.end() && keyLength > p->first)
405
- {
406
- ++p;
407
- }
408
- _params.insert(p, KeyParamPair(keyLength, dh));
409
- return true;
410
- }
411
-
412
- DH*
413
- IceSSL::DHParams::get(int keyLength)
116
+ void
117
+ IceSSL::readFile(const string& file, vector<char>& buffer)
414
118
  {
415
- //
416
- // First check the set of parameters specified by the user.
417
- // Return the first set whose key length is at least keyLength.
418
- //
419
- for(ParamList::iterator p = _params.begin(); p != _params.end(); ++p)
420
- {
421
- if(p->first >= keyLength)
422
- {
423
- return p->second;
424
- }
425
- }
426
-
427
- //
428
- // No match found. Use one of the predefined parameter sets instead.
429
- //
430
- IceUtil::Mutex::Lock sync(*this);
431
- # if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
432
- if(keyLength >= 4096)
433
- {
434
- if(!_dh4096)
435
- {
436
- _dh4096 = convertDH(dh4096, (int) sizeof(dh4096));
437
- }
438
- return _dh4096;
439
- }
440
- else if(keyLength >= 2048)
441
- {
442
- if(!_dh2048)
443
- {
444
- _dh2048 = convertDH(dh2048, (int) sizeof(dh2048));
445
- }
446
- return _dh2048;
447
- }
448
- else if(keyLength >= 1024)
449
- {
450
- if(!_dh1024)
451
- {
452
- _dh1024 = convertDH(dh1024, (int) sizeof(dh1024));
453
- }
454
- return _dh1024;
455
- }
456
- else
457
- {
458
- if(!_dh512)
459
- {
460
- _dh512 = convertDH(dh512, (int) sizeof(dh512));
461
- }
462
- return _dh512;
463
- }
464
- # else
465
- if(keyLength >= 4096)
466
- {
467
- if(!_dh4096)
468
- {
469
- _dh4096 = convertDH(dh4096_p, (int) sizeof(dh4096_p), dh4096_g, (int) sizeof(dh4096_g));
470
- }
471
- return _dh4096;
472
- }
473
- else if(keyLength >= 2048)
474
- {
475
- if(!_dh2048)
476
- {
477
- _dh2048 = convertDH(dh2048_p, (int) sizeof(dh2048_p), dh2048_g, (int) sizeof(dh2048_g));
478
- }
479
- return _dh2048;
480
- }
481
- else if(keyLength >= 1024)
482
- {
483
- if(!_dh1024)
484
- {
485
- _dh1024 = convertDH(dh1024_p, (int) sizeof(dh1024_p), dh1024_g, (int) sizeof(dh1024_g));
486
- }
487
- return _dh1024;
488
- }
489
- else
119
+ ifstream is(IceUtilInternal::streamFilename(file).c_str(), ios::in | ios::binary);
120
+ if(!is.good())
490
121
  {
491
- if(!_dh512)
492
- {
493
- _dh512 = convertDH(dh512_p, (int) sizeof(dh512_p), dh512_g, (int) sizeof(dh512_g));
494
- }
495
- return _dh512;
122
+ throw CertificateReadException(__FILE__, __LINE__, "error opening file " + file);
496
123
  }
497
- # endif
498
- }
499
-
500
- # endif
501
124
 
502
- string
503
- IceSSL::getSslErrors(bool verbose)
504
- {
505
- ostringstream ostr;
125
+ is.seekg(0, is.end);
126
+ buffer.resize(static_cast<int>(is.tellg()));
127
+ is.seekg(0, is.beg);
506
128
 
507
- const char* file;
508
- const char* data;
509
- int line;
510
- int flags;
511
- unsigned long err;
512
- int count = 0;
513
- while((err = ERR_get_error_line_data(&file, &line, &data, &flags)) != 0)
129
+ if(!buffer.empty())
514
130
  {
515
- if(count > 0)
516
- {
517
- ostr << endl;
518
- }
519
-
520
- if(verbose)
521
- {
522
- if(count > 0)
523
- {
524
- ostr << endl;
525
- }
526
-
527
- char buf[200];
528
- ERR_error_string_n(err, buf, sizeof(buf));
529
-
530
- ostr << "error # = " << err << endl;
531
- ostr << "message = " << buf << endl;
532
- ostr << "location = " << file << ", " << line;
533
- if(flags & ERR_TXT_STRING)
534
- {
535
- ostr << endl;
536
- ostr << "data = " << data;
537
- }
538
- }
539
- else
131
+ is.read(&buffer[0], buffer.size());
132
+ if(!is.good())
540
133
  {
541
- const char* reason = ERR_reason_error_string(err);
542
- ostr << (reason == NULL ? "unknown reason" : reason);
543
- if(flags & ERR_TXT_STRING)
544
- {
545
- ostr << ": " << data;
546
- }
134
+ throw CertificateReadException(__FILE__, __LINE__, "error reading file " + file);
547
135
  }
548
-
549
- ++count;
550
- }
551
-
552
- ERR_clear_error();
553
-
554
- return ostr.str();
555
- }
556
-
557
- #elif defined(ICE_USE_SECURE_TRANSPORT)
558
-
559
- string
560
- IceSSL::errorToString(CFErrorRef err)
561
- {
562
- ostringstream os;
563
- if(err)
564
- {
565
- CFStringRef s = CFErrorCopyDescription(err);
566
- os << "(error: " << CFErrorGetCode(err) << " description: " << fromCFString(s) << ")";
567
- CFRelease(s);
568
- }
569
- return os.str();
570
- }
571
-
572
- string
573
- IceSSL::errorToString(OSStatus status)
574
- {
575
- ostringstream os;
576
- os << "(error: " << status;
577
- CFStringRef s = SecCopyErrorMessageString(status, 0);
578
- if(s)
579
- {
580
- os << " description: " << fromCFString(s);
581
- CFRelease(s);
582
- }
583
- os << ")";
584
- return os.str();
585
- }
586
-
587
- std::string
588
- IceSSL::fromCFString(CFStringRef v)
589
- {
590
- string s;
591
- if(v)
592
- {
593
- CFIndex size = CFStringGetMaximumSizeForEncoding(CFStringGetLength(v), kCFStringEncodingUTF8);
594
- vector<char> buffer;
595
- buffer.resize(size + 1);
596
- CFStringGetCString(v, &buffer[0], buffer.size(), kCFStringEncodingUTF8);
597
- s.assign(&buffer[0]);
598
- }
599
- return s;
600
- }
601
-
602
- CFDictionaryRef
603
- IceSSL::getCertificateProperty(SecCertificateRef cert, CFTypeRef key)
604
- {
605
- CFArrayRef keys = CFArrayCreate(NULL, &key , 1, &kCFTypeArrayCallBacks);
606
- CFErrorRef err = 0;
607
- CFDictionaryRef values = SecCertificateCopyValues(cert, keys, &err);
608
- CFRelease(keys);
609
- if(err)
610
- {
611
- ostringstream os;
612
- os << "IceSSL: error getting property for certificate:\n" << errorToString(err);
613
- throw CertificateReadException(__FILE__, __LINE__, os.str());
614
- }
615
-
616
- assert(values);
617
- CFDictionaryRef property = (CFDictionaryRef)CFDictionaryGetValue(values, key);
618
- if(property)
619
- {
620
- CFRetain(property);
621
136
  }
622
- CFRelease(values);
623
- return property;
624
137
  }
625
138
 
626
- namespace
627
- {
628
-
629
- //
630
- // Check the certificate basic constraints to check if the certificate is marked as a CA.
631
- //
632
139
  bool
633
- isCA(SecCertificateRef cert)
634
- {
635
- UniqueRef<CFDictionaryRef> property(getCertificateProperty(cert, kSecOIDBasicConstraints));
636
- if(property)
637
- {
638
- CFArrayRef propertyValues = (CFArrayRef)CFDictionaryGetValue(property.get(), kSecPropertyKeyValue);
639
- for(int i = 0, size = CFArrayGetCount(propertyValues); i < size; ++i)
640
- {
641
- CFDictionaryRef dict = (CFDictionaryRef)CFArrayGetValueAtIndex(propertyValues, i);
642
- CFStringRef label = (CFStringRef)CFDictionaryGetValue(dict, kSecPropertyKeyLabel);
643
- if(CFEqual(label, CFSTR("Certificate Authority")))
644
- {
645
- return CFEqual((CFStringRef)CFDictionaryGetValue(dict, kSecPropertyKeyValue), CFSTR("Yes"));
646
- }
647
- }
648
- }
649
- return false;
650
- }
651
-
652
- //
653
- // Load keychain items (Certificates or Private Keys) from a file. On return items param contain
654
- // the list of items, the caller must release it.
655
- //
656
- CFArrayRef
657
- loadKeychainItems(const string& file, SecExternalItemType type, SecKeychainRef keychain, const string& passphrase,
658
- const PasswordPromptPtr& prompt, int retryMax)
659
- {
660
- vector<char> buffer;
661
- readFile(file, buffer);
662
- UniqueRef<CFDataRef> data(CFDataCreateWithBytesNoCopy(kCFAllocatorDefault,
663
- reinterpret_cast<const UInt8*>(&buffer[0]),
664
- buffer.size(),
665
- kCFAllocatorNull));
666
-
667
- SecItemImportExportKeyParameters params;
668
- memset(&params, 0, sizeof(params));
669
- params.version = SEC_KEY_IMPORT_EXPORT_PARAMS_VERSION;
670
- params.flags |= kSecKeyNoAccessControl;
671
- if(!passphrase.empty())
672
- {
673
- params.passphrase = toCFString(passphrase);
674
- }
675
-
676
- CFArrayRef items;
677
- SecExternalItemType importType = type;
678
- SecExternalFormat format = type == kSecItemTypeUnknown ? kSecFormatPKCS12 : kSecFormatUnknown;
679
- UniqueRef<CFStringRef> path(toCFString(file));
680
- OSStatus err = SecItemImport(data.get(), path.get(), &format, &importType, 0, &params, keychain, &items);
681
-
682
- //
683
- // If passphrase failure and no password was configured, we obtain
684
- // the password from the given prompt or configure the import to
685
- // prompt the user with an alert dialog.
686
- //
687
- if(passphrase.empty() &&
688
- (err == errSecPassphraseRequired || err == errSecInvalidData || err == errSecPkcs12VerifyFailure))
689
- {
690
- if(!prompt)
691
- {
692
- params.flags |= kSecKeySecurePassphrase;
693
- ostringstream os;
694
- os << "Enter the password for\n" << file;
695
- params.alertPrompt = toCFString(os.str());
696
- }
697
-
698
- int count = 0;
699
- while((err == errSecPassphraseRequired || err == errSecInvalidData || err == errSecPkcs12VerifyFailure) &&
700
- count < retryMax)
701
- {
702
- if(prompt)
703
- {
704
- if(params.passphrase)
705
- {
706
- CFRelease(params.passphrase);
707
- }
708
- params.passphrase = toCFString(prompt->getPassword());
709
- }
710
- err = SecItemImport(data.get(), path.get(), &format, &importType, 0, &params, keychain, &items);
711
- ++count;
712
- }
713
-
714
- if(params.alertPrompt)
715
- {
716
- CFRelease(params.alertPrompt);
717
- }
718
- }
719
-
720
- if(params.passphrase)
721
- {
722
- CFRelease(params.passphrase);
723
- }
724
-
725
- if(err != noErr)
726
- {
727
- ostringstream os;
728
- os << "IceSSL: error reading " << (type == kSecItemTypePrivateKey ? "private key" : "certificate");
729
- os << " `" << file << "':\n" << errorToString(err);
730
- throw CertificateReadException(__FILE__, __LINE__, os.str());
731
- }
732
-
733
- if(type != kSecItemTypeUnknown && importType != kSecItemTypeAggregate && importType != type)
734
- {
735
- CFRelease(items);
736
- ostringstream os;
737
- os << "IceSSL: error reading " << (type == kSecItemTypePrivateKey ? "private key" : "certificate");
738
- os << " `" << file << "' doesn't contain the expected item";
739
- throw CertificateReadException(__FILE__, __LINE__, os.str());
740
- }
741
-
742
- return items;
743
- }
744
-
745
- }
746
-
747
- //
748
- // Imports a certificate private key and optionally add it to a keychain.
749
- //
750
- SecIdentityRef
751
- IceSSL::loadPrivateKey(const string& file, SecCertificateRef cert, SecKeychainRef keychain, const string& password,
752
- const PasswordPromptPtr& prompt, int retryMax)
753
- {
754
- //
755
- // Check if we already imported the certificate
756
- //
757
- UniqueRef<CFDataRef> hash;
758
- UniqueRef<CFDictionaryRef> subjectKeyProperty(getCertificateProperty(cert, kSecOIDSubjectKeyIdentifier));
759
- if(subjectKeyProperty)
760
- {
761
- CFArrayRef values = (CFArrayRef)CFDictionaryGetValue(subjectKeyProperty.get(), kSecPropertyKeyValue);
762
- for(int i = 0; i < CFArrayGetCount(values); ++i)
763
- {
764
- CFDictionaryRef dict = (CFDictionaryRef)CFArrayGetValueAtIndex(values, i);
765
- if(CFEqual(CFDictionaryGetValue(dict, kSecPropertyKeyLabel), CFSTR("Key Identifier")))
766
- {
767
- hash.retain(CFDictionaryGetValue(dict, kSecPropertyKeyValue));
768
- break;
769
- }
770
- }
771
- }
772
-
773
- const void* values[] = { keychain };
774
- UniqueRef<CFArrayRef> searchList(CFArrayCreate(kCFAllocatorDefault, values, 1, &kCFTypeArrayCallBacks));
775
-
776
- UniqueRef<CFMutableDictionaryRef> query(CFDictionaryCreateMutable(0,
777
- 0,
778
- &kCFTypeDictionaryKeyCallBacks,
779
- &kCFTypeDictionaryValueCallBacks));
780
-
781
- CFDictionarySetValue(query.get(), kSecClass, kSecClassCertificate);
782
- CFDictionarySetValue(query.get(), kSecMatchLimit, kSecMatchLimitOne);
783
- CFDictionarySetValue(query.get(), kSecMatchSearchList, searchList.get());
784
- CFDictionarySetValue(query.get(), kSecAttrSubjectKeyID, hash.get());
785
- CFDictionarySetValue(query.get(), kSecReturnRef, kCFBooleanTrue);
786
-
787
- CFTypeRef value = 0;
788
- OSStatus err = SecItemCopyMatching(query.get(), &value);
789
- UniqueRef<SecCertificateRef> item(value);
790
- if(err == noErr)
791
- {
792
- //
793
- // If the certificate has already been imported, create the
794
- // identity. The key should also have been imported.
795
- //
796
- SecIdentityRef identity;
797
- err = SecIdentityCreateWithCertificate(keychain, item.get(), &identity);
798
- if(err != noErr)
799
- {
800
- ostringstream os;
801
- os << "IceSSL: error creating certificate identity:\n" << errorToString(err);
802
- throw CertificateReadException(__FILE__, __LINE__, os.str());
803
- }
804
- return identity;
805
- }
806
- else if(err != errSecItemNotFound)
807
- {
808
- ostringstream os;
809
- os << "IceSSL: error searching for keychain items:\n" << errorToString(err);
810
- throw CertificateReadException(__FILE__, __LINE__, os.str());
811
- }
812
-
813
- //
814
- // If the certificate isn't already in the keychain, load the
815
- // private key into the keychain and add the certificate.
816
- //
817
- UniqueRef<CFArrayRef> items(loadKeychainItems(file, kSecItemTypePrivateKey, keychain, password, prompt, retryMax));
818
- int count = CFArrayGetCount(items.get());
819
- UniqueRef<SecKeyRef> key;
820
- for(int i = 0; i < count; ++i)
821
- {
822
- SecKeychainItemRef item = (SecKeychainItemRef)CFArrayGetValueAtIndex(items.get(), 0);
823
- if(SecKeyGetTypeID() == CFGetTypeID(item))
824
- {
825
- key.retain(item);
826
- break;
827
- }
828
- }
829
- if(!key)
830
- {
831
- throw CertificateReadException(__FILE__, __LINE__, "IceSSL: no key in file `" + file + "'");
832
- }
833
-
834
- //
835
- // Add the certificate to the keychain
836
- //
837
- query.reset(CFDictionaryCreateMutable(kCFAllocatorDefault,
838
- 0,
839
- &kCFTypeDictionaryKeyCallBacks,
840
- &kCFTypeDictionaryValueCallBacks));
841
-
842
- CFDictionarySetValue(query.get(), kSecUseKeychain, keychain);
843
- CFDictionarySetValue(query.get(), kSecClass, kSecClassCertificate);
844
- CFDictionarySetValue(query.get(), kSecValueRef, cert);
845
- CFDictionarySetValue(query.get(), kSecReturnRef, kCFBooleanTrue);
846
-
847
- value = 0;
848
- err = SecItemAdd(query.get(), (CFTypeRef*)&value);
849
- UniqueRef<CFArrayRef> added(value);
850
- if(err != noErr)
851
- {
852
- ostringstream os;
853
- os << "IceSSL: failure adding certificate to keychain\n" << errorToString(err);
854
- throw CertificateReadException(__FILE__, __LINE__, os.str());
855
- }
856
- item.retain(CFArrayGetValueAtIndex(added.get(), 0));
857
-
858
- //
859
- // Create the association between the private key and the certificate,
860
- // kSecKeyLabel attribute should match the subject key identifier.
861
- //
862
- vector<SecKeychainAttribute> attributes;
863
- if(hash)
864
- {
865
- SecKeychainAttribute attr;
866
- attr.tag = kSecKeyLabel;
867
- attr.data = (void*)CFDataGetBytePtr(hash.get());
868
- attr.length = CFDataGetLength(hash.get());
869
- attributes.push_back(attr);
870
- }
871
-
872
- //
873
- // kSecKeyPrintName attribute correspond to the keychain display
874
- // name.
875
- //
876
- string label;
877
- CFStringRef commonName = 0;
878
- if(SecCertificateCopyCommonName(item.get(), &commonName) == noErr)
879
- {
880
- label = fromCFString(commonName);
881
- CFRelease(commonName);
882
-
883
- SecKeychainAttribute attr;
884
- attr.tag = kSecKeyPrintName;
885
- attr.data = (void*)label.c_str();
886
- attr.length = label.size();
887
- attributes.push_back(attr);
888
- }
889
-
890
- SecKeychainAttributeList attrs;
891
- attrs.attr = &attributes[0];
892
- attrs.count = attributes.size();
893
- SecKeychainItemModifyAttributesAndData((SecKeychainItemRef)key.get(), &attrs, 0, 0);
894
-
895
- SecIdentityRef identity;
896
- err = SecIdentityCreateWithCertificate(keychain, item.get(), &identity);
897
- if(err != noErr)
898
- {
899
- ostringstream os;
900
- os << "IceSSL: error creating certificate identity:\n" << errorToString(err);
901
- throw CertificateReadException(__FILE__, __LINE__, os.str());
902
- }
903
- return identity;
904
- }
905
-
906
- //
907
- // Imports a certificate (it might contain an identity or certificate depending on the format).
908
- //
909
- CFArrayRef
910
- IceSSL::loadCertificateChain(const string& file, const string& keyFile, SecKeychainRef keychain,
911
- const string& password, const PasswordPromptPtr& prompt, int retryMax)
912
- {
913
- if(keyFile.empty())
914
- {
915
- return loadKeychainItems(file, kSecItemTypeUnknown, keychain, password, prompt, retryMax);
916
- }
917
- else
918
- {
919
- //
920
- // Load the certificate, don't load into the keychain as it
921
- // might already have been imported.
922
- //
923
- UniqueRef<CFArrayRef> items(loadKeychainItems(file, kSecItemTypeCertificate, 0, password, prompt, retryMax));
924
- SecCertificateRef cert = (SecCertificateRef)CFArrayGetValueAtIndex(items.get(), 0);
925
- if(SecCertificateGetTypeID() != CFGetTypeID(cert))
926
- {
927
- ostringstream os;
928
- os << "IceSSL: couldn't find certificate in `" << file << "'";
929
- throw CertificateReadException(__FILE__, __LINE__, os.str());
930
- }
931
-
932
- //
933
- // Load the private key for the given certificate. This will
934
- // add the certificate/key to the keychain if they aren't
935
- // already present in the keychain.
936
- //
937
- UniqueRef<SecIdentityRef> identity(loadPrivateKey(keyFile, cert, keychain, password, prompt, retryMax));
938
- CFMutableArrayRef a = CFArrayCreateMutableCopy(kCFAllocatorDefault, 0, items.get());
939
- CFArraySetValueAtIndex(a, 0, identity.get());
940
- return a;
941
- }
942
- }
943
-
944
- SecCertificateRef
945
- IceSSL::loadCertificate(const string& file)
946
- {
947
- CFArrayRef items = loadKeychainItems(file, kSecItemTypeCertificate, 0, "", 0, 0);
948
- SecCertificateRef cert = (SecCertificateRef)CFArrayGetValueAtIndex(items, 0);
949
- CFRetain(cert);
950
- CFRelease(items);
951
- return cert;
952
- }
953
-
954
- CFArrayRef
955
- IceSSL::loadCACertificates(const string& file)
956
- {
957
- UniqueRef<CFArrayRef> items(loadKeychainItems(file, kSecItemTypeCertificate, 0, "", 0, 0));
958
- CFMutableArrayRef certificateAuthorities = CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks);
959
- int count = CFArrayGetCount(items.get());
960
- for(CFIndex i = 0; i < count; ++i)
961
- {
962
- SecCertificateRef cert = (SecCertificateRef)CFArrayGetValueAtIndex(items.get(), i);
963
- assert(SecCertificateGetTypeID() == CFGetTypeID(cert));
964
- if(isCA(cert))
965
- {
966
- CFArrayAppendValue(certificateAuthorities, cert);
967
- }
968
- }
969
- return certificateAuthorities;
970
- }
971
-
972
- SecCertificateRef
973
- IceSSL::findCertificate(SecKeychainRef keychain, const string& value)
974
- {
975
- //
976
- // Search the keychain using key:value pairs. The following keys are supported:
977
- //
978
- // Label
979
- // Serial
980
- // Subject
981
- // SubjectKeyId
982
- //
983
- // A value must be enclosed in single or double quotes if it contains whitespace.
984
- //
985
- UniqueRef<CFMutableDictionaryRef> query(CFDictionaryCreateMutable(0,
986
- 0,
987
- &kCFTypeDictionaryKeyCallBacks,
988
- &kCFTypeDictionaryValueCallBacks));
989
-
990
- const void* values[] = { keychain };
991
- UniqueRef<CFArrayRef> searchList(CFArrayCreate(kCFAllocatorDefault, values, 1, &kCFTypeArrayCallBacks));
992
-
993
- CFDictionarySetValue(query.get(), kSecMatchLimit, kSecMatchLimitOne);
994
- CFDictionarySetValue(query.get(), kSecMatchSearchList, searchList.get());
995
- CFDictionarySetValue(query.get(), kSecClass, kSecClassCertificate);
996
- CFDictionarySetValue(query.get(), kSecReturnRef, kCFBooleanTrue);
997
- CFDictionarySetValue(query.get(), kSecMatchCaseInsensitive, kCFBooleanTrue);
998
-
999
- size_t start = 0;
1000
- size_t pos;
1001
- while((pos = value.find(':', start)) != string::npos)
1002
- {
1003
- string field = IceUtilInternal::toUpper(IceUtilInternal::trim(value.substr(start, pos - start)));
1004
- string arg;
1005
- if(field != "LABEL" && field != "SERIAL" && field != "SUBJECT" && field != "SUBJECTKEYID")
1006
- {
1007
- throw PluginInitializationException(__FILE__, __LINE__, "IceSSL: unknown key in `" + value + "'");
1008
- }
1009
-
1010
- start = pos + 1;
1011
- while(start < value.size() && (value[start] == ' ' || value[start] == '\t'))
1012
- {
1013
- ++start;
1014
- }
1015
-
1016
- if(start == value.size())
1017
- {
1018
- throw PluginInitializationException(__FILE__, __LINE__, "IceSSL: missing argument in `" + value + "'");
1019
- }
1020
-
1021
- if(value[start] == '"' || value[start] == '\'')
1022
- {
1023
- size_t end = start;
1024
- ++end;
1025
- while(end < value.size())
1026
- {
1027
- if(value[end] == value[start] && value[end - 1] != '\\')
1028
- {
1029
- break;
1030
- }
1031
- ++end;
1032
- }
1033
- if(end == value.size() || value[end] != value[start])
1034
- {
1035
- throw PluginInitializationException(__FILE__, __LINE__, "IceSSL: unmatched quote in `" + value + "'");
1036
- }
1037
- ++start;
1038
- arg = value.substr(start, end - start);
1039
- start = end + 1;
1040
- }
1041
- else
1042
- {
1043
- size_t end = value.find_first_of(" \t", start);
1044
- if(end == string::npos)
1045
- {
1046
- arg = value.substr(start);
1047
- start = value.size();
1048
- }
1049
- else
1050
- {
1051
- arg = value.substr(start, end - start);
1052
- start = end + 1;
1053
- }
1054
- }
1055
-
1056
- if(field == "SUBJECT" || field == "LABEL")
1057
- {
1058
- UniqueRef<CFStringRef> v(toCFString(arg));
1059
- CFDictionarySetValue(query.get(), field == "LABEL" ? kSecAttrLabel : kSecMatchSubjectContains, v.get());
1060
- }
1061
- else if(field == "SUBJECTKEYID" || field == "SERIAL")
1062
- {
1063
- vector<unsigned char> buffer;
1064
- if(!parseBytes(arg, buffer))
1065
- {
1066
- throw PluginInitializationException(__FILE__, __LINE__, "IceSSL: invalid value `" + value + "'");
1067
- }
1068
- UniqueRef<CFDataRef> v(CFDataCreate(kCFAllocatorDefault, &buffer[0], buffer.size()));
1069
- CFDictionarySetValue(query.get(), field == "SUBJECTKEYID" ? kSecAttrSubjectKeyID : kSecAttrSerialNumber,
1070
- v.get());
1071
- }
1072
- }
1073
-
1074
- if(CFDictionaryGetCount(query.get()) == 5)
1075
- {
1076
- throw PluginInitializationException(__FILE__, __LINE__, "IceSSL: invalid value `" + value + "'");
1077
- }
1078
-
1079
- SecCertificateRef cert = 0;
1080
- OSStatus err = SecItemCopyMatching(query.get(), (CFTypeRef*)&cert);
1081
- if(err != noErr)
1082
- {
1083
- throw PluginInitializationException(__FILE__, __LINE__,
1084
- "IceSSL: find certificate `" + value + "' failed:\n" + errorToString(err));
1085
- }
1086
- return cert;
1087
- }
1088
-
1089
- #elif defined(ICE_USE_SCHANNEL)
1090
-
1091
- namespace
1092
- {
1093
-
1094
- void
1095
- addMatchingCertificates(HCERTSTORE source, HCERTSTORE target, DWORD findType, const void* findParam)
1096
- {
1097
- PCCERT_CONTEXT next = 0;
1098
- do
1099
- {
1100
- if((next = CertFindCertificateInStore(source, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, 0,
1101
- findType, findParam, next)))
1102
- {
1103
- if(!CertAddCertificateContextToStore(target, next, CERT_STORE_ADD_ALWAYS, 0))
1104
- {
1105
- throw PluginInitializationException(__FILE__, __LINE__,
1106
- "IceSSL: error adding certificate to store:\n" + IceUtilInternal::lastErrorToString());
1107
- }
1108
- }
1109
- }
1110
- while(next);
1111
- }
1112
-
1113
- }
1114
-
1115
- vector<PCCERT_CONTEXT>
1116
- IceSSL::findCertificates(const string& location, const string& name, const string& value, vector<HCERTSTORE>& stores)
140
+ IceSSL::checkPath(const string& path, const string& defaultDir, bool dir, string& resolved)
1117
141
  {
1118
- DWORD storeLoc;
1119
- if(location == "CurrentUser")
1120
- {
1121
- storeLoc = CERT_SYSTEM_STORE_CURRENT_USER;
1122
- }
1123
- else
142
+ #if defined(ICE_USE_SECURE_TRANSPORT_IOS)
143
+ CFBundleRef bundle = CFBundleGetMainBundle();
144
+ if(bundle)
1124
145
  {
1125
- storeLoc = CERT_SYSTEM_STORE_LOCAL_MACHINE;
1126
- }
1127
-
1128
- HCERTSTORE store = CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, 0, storeLoc, stringToWstring(name).c_str());
1129
- if(!store)
1130
- {
1131
- throw PluginInitializationException(__FILE__, __LINE__, "IceSSL: failed to open certificate store `" + name +
1132
- "':\n" + IceUtilInternal::lastErrorToString());
1133
- }
146
+ UniqueRef<CFStringRef> resourceName(toCFString(path));
147
+ UniqueRef<CFStringRef> subDirName(toCFString(defaultDir));
148
+ UniqueRef<CFURLRef> url(CFBundleCopyResourceURL(bundle, resourceName.get(), 0, subDirName.get()));
1134
149
 
1135
- //
1136
- // Start with all of the certificates in the collection and filter as necessary.
1137
- //
1138
- // - If the value is "*", return all certificates.
1139
- // - Otherwise, search using key:value pairs. The following keys are supported:
1140
- //
1141
- // Issuer
1142
- // IssuerDN
1143
- // Serial
1144
- // Subject
1145
- // SubjectDN
1146
- // SubjectKeyId
1147
- // Thumbprint
1148
- //
1149
- // A value must be enclosed in single or double quotes if it contains whitespace.
1150
- //
1151
- HCERTSTORE tmpStore = 0;
1152
- try
1153
- {
1154
- if(value != "*")
150
+ UInt8 filePath[PATH_MAX];
151
+ if(CFURLGetFileSystemRepresentation(url.get(), true, filePath, sizeof(filePath)))
1155
152
  {
1156
- if(value.find(':', 0) == string::npos)
153
+ string tmp = string(reinterpret_cast<char*>(filePath));
154
+ if((dir && IceUtilInternal::directoryExists(tmp)) || (!dir && IceUtilInternal::fileExists(tmp)))
1157
155
  {
1158
- throw PluginInitializationException(__FILE__, __LINE__, "IceSSL: no key in `" + value + "'");
1159
- }
1160
- size_t start = 0;
1161
- size_t pos;
1162
- while((pos = value.find(':', start)) != string::npos)
1163
- {
1164
- string field = IceUtilInternal::toUpper(IceUtilInternal::trim(value.substr(start, pos - start)));
1165
- if(field != "SUBJECT" && field != "SUBJECTDN" && field != "ISSUER" && field != "ISSUERDN" &&
1166
- field != "THUMBPRINT" && field != "SUBJECTKEYID" && field != "SERIAL")
1167
- {
1168
- throw PluginInitializationException(__FILE__, __LINE__, "IceSSL: unknown key in `" + value + "'");
1169
- }
1170
-
1171
- start = pos + 1;
1172
- while(start < value.size() && (value[start] == ' ' || value[start] == '\t'))
1173
- {
1174
- ++start;
1175
- }
1176
-
1177
- if(start == value.size())
1178
- {
1179
- throw PluginInitializationException(__FILE__, __LINE__,
1180
- "IceSSL: missing argument in `" + value + "'");
1181
- }
1182
-
1183
- string arg;
1184
- if(value[start] == '"' || value[start] == '\'')
1185
- {
1186
- size_t end = start;
1187
- ++end;
1188
- while(end < value.size())
1189
- {
1190
- if(value[end] == value[start] && value[end - 1] != '\\')
1191
- {
1192
- break;
1193
- }
1194
- ++end;
1195
- }
1196
- if(end == value.size() || value[end] != value[start])
1197
- {
1198
- throw PluginInitializationException(__FILE__, __LINE__,
1199
- "IceSSL: unmatched quote in `" + value + "'");
1200
- }
1201
- ++start;
1202
- arg = value.substr(start, end - start);
1203
- start = end + 1;
1204
- }
1205
- else
1206
- {
1207
- size_t end = value.find_first_of(" \t", start);
1208
- if(end == string::npos)
1209
- {
1210
- arg = value.substr(start);
1211
- start = value.size();
1212
- }
1213
- else
1214
- {
1215
- arg = value.substr(start, end - start);
1216
- start = end + 1;
1217
- }
1218
- }
1219
-
1220
- tmpStore = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, 0, 0, 0);
1221
- if(!tmpStore)
1222
- {
1223
- throw PluginInitializationException(__FILE__, __LINE__,
1224
- "IceSSL: error adding certificate to store:\n" + IceUtilInternal::lastErrorToString());
1225
- }
1226
-
1227
- if(field == "SUBJECT" || field == "ISSUER")
1228
- {
1229
- const wstring argW = stringToWstring(arg);
1230
- DWORD findType = field == "SUBJECT" ? CERT_FIND_SUBJECT_STR : CERT_FIND_ISSUER_STR;
1231
- addMatchingCertificates(store, tmpStore, findType, argW.c_str());
1232
- }
1233
- else if(field == "SUBJECTDN" || field == "ISSUERDN")
1234
- {
1235
- const wstring argW = stringToWstring(arg);
1236
- DWORD flags[] = {
1237
- CERT_OID_NAME_STR,
1238
- CERT_OID_NAME_STR | CERT_NAME_STR_REVERSE_FLAG,
1239
- CERT_OID_NAME_STR | CERT_NAME_STR_FORCE_UTF8_DIR_STR_FLAG,
1240
- CERT_OID_NAME_STR | CERT_NAME_STR_FORCE_UTF8_DIR_STR_FLAG | CERT_NAME_STR_REVERSE_FLAG
1241
- };
1242
- for(size_t i = 0; i < sizeof(flags) / sizeof(DWORD); ++i)
1243
- {
1244
- DWORD length = 0;
1245
- if(!CertStrToNameW(X509_ASN_ENCODING, argW.c_str(), flags[i], 0, 0, &length, 0))
1246
- {
1247
- throw PluginInitializationException(
1248
- __FILE__, __LINE__,
1249
- "IceSSL: invalid value `" + value + "' for `IceSSL.FindCert' property:\n" +
1250
- IceUtilInternal::lastErrorToString());
1251
- }
1252
-
1253
- vector<BYTE> buffer(length);
1254
- if(!CertStrToNameW(X509_ASN_ENCODING, argW.c_str(), flags[i], 0, &buffer[0], &length, 0))
1255
- {
1256
- throw PluginInitializationException(
1257
- __FILE__, __LINE__,
1258
- "IceSSL: invalid value `" + value + "' for `IceSSL.FindCert' property:\n" +
1259
- IceUtilInternal::lastErrorToString());
1260
- }
1261
-
1262
- CERT_NAME_BLOB name = { length, &buffer[0] };
1263
-
1264
- DWORD findType = field == "SUBJECTDN" ? CERT_FIND_SUBJECT_NAME : CERT_FIND_ISSUER_NAME;
1265
- addMatchingCertificates(store, tmpStore, findType, &name);
1266
- }
1267
- }
1268
- else if(field == "THUMBPRINT" || field == "SUBJECTKEYID")
1269
- {
1270
- vector<BYTE> buffer;
1271
- if(!parseBytes(arg, buffer))
1272
- {
1273
- throw PluginInitializationException(__FILE__, __LINE__,
1274
- "IceSSL: invalid `IceSSL.FindCert' property: can't decode the value");
1275
- }
1276
-
1277
- CRYPT_HASH_BLOB hash = { static_cast<DWORD>(buffer.size()), &buffer[0] };
1278
- DWORD findType = field == "THUMBPRINT" ? CERT_FIND_HASH : CERT_FIND_KEY_IDENTIFIER;
1279
- addMatchingCertificates(store, tmpStore, findType, &hash);
1280
- }
1281
- else if(field == "SERIAL")
1282
- {
1283
- vector<BYTE> buffer;
1284
- if(!parseBytes(arg, buffer))
1285
- {
1286
- throw PluginInitializationException(__FILE__, __LINE__,
1287
- "IceSSL: invalid value `" + value + "' for `IceSSL.FindCert' property");
1288
- }
1289
-
1290
- CRYPT_INTEGER_BLOB serial = { static_cast<DWORD>(buffer.size()), &buffer[0] };
1291
- PCCERT_CONTEXT next = 0;
1292
- do
1293
- {
1294
- if((next = CertFindCertificateInStore(store, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, 0,
1295
- CERT_FIND_ANY, 0, next)))
1296
- {
1297
- if(CertCompareIntegerBlob(&serial, &next->pCertInfo->SerialNumber))
1298
- {
1299
- if(!CertAddCertificateContextToStore(tmpStore, next, CERT_STORE_ADD_ALWAYS, 0))
1300
- {
1301
- throw PluginInitializationException(__FILE__, __LINE__,
1302
- "IceSSL: error adding certificate to store:\n" +
1303
- IceUtilInternal::lastErrorToString());
1304
- }
1305
- }
1306
- }
1307
- }
1308
- while(next);
1309
- }
1310
- CertCloseStore(store, 0);
1311
- store = tmpStore;
156
+ resolved = tmp;
157
+ return true;
1312
158
  }
1313
159
  }
1314
160
  }
1315
- catch(...)
1316
- {
1317
- if(store && store != tmpStore)
1318
- {
1319
- CertCloseStore(store, 0);
1320
- }
1321
-
1322
- if(tmpStore)
1323
- {
1324
- CertCloseStore(tmpStore, 0);
1325
- tmpStore = 0;
1326
- }
1327
- throw;
1328
- }
1329
-
1330
- vector<PCCERT_CONTEXT> certs;
1331
- if(store)
1332
- {
1333
- PCCERT_CONTEXT next = 0;
1334
- do
1335
- {
1336
- if((next = CertFindCertificateInStore(store, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, 0, CERT_FIND_ANY, 0,
1337
- next)))
1338
- {
1339
- certs.push_back(next);
1340
- }
1341
- }
1342
- while(next);
1343
- stores.push_back(store);
1344
- }
1345
- return certs;
1346
- }
1347
161
  #endif
1348
-
1349
- bool
1350
- IceSSL::checkPath(const string& path, const string& defaultDir, bool dir, string& resolved)
1351
- {
1352
162
  if(IceUtilInternal::isAbsolutePath(path))
1353
163
  {
1354
164
  if((dir && IceUtilInternal::directoryExists(path)) || (!dir && IceUtilInternal::fileExists(path)))