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
@@ -1,41 +1,26 @@
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.
7
7
  //
8
8
  // **********************************************************************
9
9
 
10
- #ifndef ICE_SSL_ENGINE_F_H
11
- #define ICE_SSL_ENGINE_F_H
10
+ #ifndef ICESSL_ENGINE_F_H
11
+ #define ICESSL_ENGINE_F_H
12
12
 
13
13
  #include <IceUtil/Shared.h>
14
14
  #include <Ice/Handle.h>
15
-
16
15
  #include <IceSSL/Plugin.h>
17
16
 
18
17
  namespace IceSSL
19
18
  {
20
19
 
21
20
  class SSLEngine;
22
- ICE_SSL_API IceUtil::Shared* upCast(IceSSL::SSLEngine*);
21
+ ICESSL_API IceUtil::Shared* upCast(SSLEngine*);
23
22
  typedef IceInternal::Handle<SSLEngine> SSLEnginePtr;
24
23
 
25
- #if defined(ICE_USE_SECURE_TRANSPORT)
26
- class SecureTransportEngine;
27
- ICE_SSL_API IceUtil::Shared* upCast(IceSSL::SecureTransportEngine*);
28
- typedef IceInternal::Handle<SecureTransportEngine> SecureTransportEnginePtr;
29
- #elif defined(ICE_USE_SCHANNEL)
30
- class SChannelEngine;
31
- ICE_SSL_API IceUtil::Shared* upCast(IceSSL::SChannelEngine*);
32
- typedef IceInternal::Handle<SChannelEngine> SChannelEnginePtr;
33
- #else // OpenSSL
34
- class OpenSSLEngine;
35
- ICE_SSL_API IceUtil::Shared* upCast(IceSSL::OpenSSLEngine*);
36
- typedef IceInternal::Handle<OpenSSLEngine> OpenSSLEnginePtr;
37
- #endif
38
-
39
24
  }
40
25
 
41
26
  #endif
@@ -0,0 +1,862 @@
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
+ #include <IceSSL/Plugin.h>
11
+ #include <IceSSL/SecureTransport.h>
12
+ #include <IceSSL/CertificateI.h>
13
+ #include <IceSSL/SecureTransportUtil.h>
14
+ #include <IceSSL/RFC2253.h>
15
+
16
+ #include <Ice/LocalException.h>
17
+ #include <Ice/UniqueRef.h>
18
+ #include <Ice/Base64.h>
19
+
20
+ #include <IceUtil/MutexPtrLock.h>
21
+
22
+ #include <Security/Security.h>
23
+
24
+ using namespace Ice;
25
+ using namespace IceInternal;
26
+ using namespace IceSSL;
27
+ using namespace IceSSL::SecureTransport;
28
+
29
+ using namespace std;
30
+
31
+ namespace
32
+ {
33
+
34
+ string
35
+ certificateOIDAlias(const string& name)
36
+ {
37
+ for(int i = 0; i < certificateOIDSSize; ++i)
38
+ {
39
+ const CertificateOID* certificateOID = &certificateOIDS[i];
40
+ assert(certificateOID);
41
+ if(name == certificateOID->name)
42
+ {
43
+ return certificateOID->alias;
44
+ }
45
+ }
46
+ return name;
47
+ }
48
+
49
+ string
50
+ escapeX509Name(const string& name)
51
+ {
52
+ ostringstream os;
53
+ for(string::const_iterator i = name.begin(); i != name.end(); ++i)
54
+ {
55
+ switch(*i)
56
+ {
57
+ case ',':
58
+ case '=':
59
+ case '+':
60
+ case '<':
61
+ case '>':
62
+ case '#':
63
+ case ';':
64
+ {
65
+ os << '\\';
66
+ }
67
+ default:
68
+ {
69
+ break;
70
+ }
71
+ }
72
+ os << *i;
73
+ }
74
+ return os.str();
75
+ }
76
+
77
+ #ifdef ICE_USE_SECURE_TRANSPORT_IOS
78
+ //
79
+ // ASN1Parser to pase the subject/issuer ASN.1 DER encoded attributes on iOS.
80
+ //
81
+ class ASN1Parser
82
+ {
83
+ public:
84
+
85
+ ASN1Parser(CFDataRef data) : _data(CFDataGetBytePtr(data)), _length(CFDataGetLength(data)), _p(_data), _next(0)
86
+ {
87
+ }
88
+
89
+ list<pair<string, string> >
90
+ parse()
91
+ {
92
+ list<pair<string, string> > rdns;
93
+ while(_p < _data + _length)
94
+ {
95
+ switch(parseByte())
96
+ {
97
+ case 0x06: // OID
98
+ {
99
+ _rdn.first = parseOID();
100
+ break;
101
+ }
102
+ case 0x12: // NumericString
103
+ case 0x13: // PrintableString
104
+ case 0x0C: // UTF8String
105
+ case 0x16: // IA5String
106
+ {
107
+ _rdn.second = escapeX509Name(parseUTF8String());
108
+ break;
109
+ }
110
+ case 0x30: // SEQUENCE
111
+ case 0x31: // SET
112
+ {
113
+ int length = parseLength(0);
114
+ _next = _p + length;
115
+ if(_next > _data + _length)
116
+ {
117
+ throw CertificateEncodingException(__FILE__, __LINE__, "invalid length");
118
+ }
119
+ break;
120
+ }
121
+ default:
122
+ {
123
+ // Unsupported tag, skip the SET.
124
+ if(!_next)
125
+ {
126
+ return rdns;
127
+ }
128
+ _p = _next;
129
+ _next = 0;
130
+ break;
131
+ }
132
+ }
133
+ if(_p == _next)
134
+ {
135
+ rdns.push_back(_rdn);
136
+ }
137
+ }
138
+ return rdns;
139
+ }
140
+
141
+ string
142
+ parseOID()
143
+ {
144
+ int length = parseLength(1);
145
+ ostringstream oid;
146
+ unsigned char c = parseByte();
147
+ oid << c / 40 << "." << c % 40;
148
+ while(--length > 0)
149
+ {
150
+ if((*_p & 0x80) == 0)
151
+ {
152
+ oid << "." << static_cast<int>(parseByte());
153
+ }
154
+ else
155
+ {
156
+ uint64_t result = (uint64_t)(*_p & 127);
157
+ while(parseByte() & 128)
158
+ {
159
+ result = (result << 7) | (uint64_t)(*_p & 127);
160
+ --length;
161
+ }
162
+ oid << "." << result;
163
+ }
164
+ }
165
+ return certificateOIDAlias(oid.str());
166
+ }
167
+
168
+ string
169
+ parseUTF8String()
170
+ {
171
+ int length = parseLength(0);
172
+ string v(reinterpret_cast<const char*>(_p), length);
173
+ _p += length;
174
+ return v;
175
+ }
176
+
177
+ int
178
+ parseLength(int required)
179
+ {
180
+ int length = 0;
181
+ if((*_p & 0x80) == 0)
182
+ {
183
+ length = static_cast<int>(parseByte());
184
+ }
185
+ else
186
+ {
187
+ int nbytes = static_cast<int>(parseByte());
188
+ for(int i = 0; i < nbytes; ++i)
189
+ {
190
+ length = length * 256 + parseByte();
191
+ }
192
+ }
193
+ if((required > 0 && length < required) || (_p + length > _data + _length))
194
+ {
195
+ throw CertificateEncodingException(__FILE__, __LINE__, "invalid length");
196
+ }
197
+ return length;
198
+ }
199
+
200
+ unsigned char
201
+ parseByte()
202
+ {
203
+ if(_p >= _data + _length)
204
+ {
205
+ throw CertificateEncodingException(__FILE__, __LINE__, "invalid length");
206
+ }
207
+ unsigned char b = *_p++;
208
+ return b;
209
+ }
210
+
211
+ private:
212
+
213
+ const unsigned char* _data;
214
+ const size_t _length;
215
+ const unsigned char* _p;
216
+ const unsigned char* _next;
217
+ pair<string, string> _rdn;
218
+ list<pair<string, string> > _rdns;
219
+ };
220
+
221
+ #endif
222
+
223
+ class SecureTransportCertificateI : public IceSSL::SecureTransport::Certificate,
224
+ public IceSSL::CertificateI
225
+ {
226
+ public:
227
+
228
+ SecureTransportCertificateI(SecCertificateRef);
229
+
230
+ virtual bool operator==(const IceSSL::Certificate&) const;
231
+
232
+ virtual vector<Ice::Byte> getAuthorityKeyIdentifier() const;
233
+ virtual vector<Ice::Byte> getSubjectKeyIdentifier() const;
234
+ virtual bool verify(const IceSSL::CertificatePtr&) const;
235
+ virtual string encode() const;
236
+
237
+ #ifdef ICE_CPP11_MAPPING
238
+ virtual chrono::system_clock::time_point getNotAfter() const;
239
+ virtual chrono::system_clock::time_point getNotBefore() const;
240
+ #else
241
+ virtual IceUtil::Time getNotAfter() const;
242
+ virtual IceUtil::Time getNotBefore() const;
243
+ #endif
244
+
245
+ virtual string getSerialNumber() const;
246
+ virtual DistinguishedName getIssuerDN() const;
247
+ virtual vector<pair<int, string> > getIssuerAlternativeNames() const;
248
+ virtual DistinguishedName getSubjectDN() const;
249
+ virtual vector<pair<int, string> > getSubjectAlternativeNames() const;
250
+ virtual int getVersion() const;
251
+ virtual SecCertificateRef getCert() const;
252
+
253
+ private:
254
+
255
+ IceInternal::UniqueRef<SecCertificateRef> _cert;
256
+
257
+ #ifdef ICE_USE_SECURE_TRANSPORT_IOS
258
+ void initializeAttributes() const;
259
+
260
+ mutable IceInternal::UniqueRef<CFDataRef> _subject;
261
+ mutable IceInternal::UniqueRef<CFDataRef> _issuer;
262
+ mutable std::string _serial;
263
+ mutable int _version;
264
+ #endif
265
+ };
266
+
267
+ #ifndef ICE_USE_SECURE_TRANSPORT_IOS
268
+
269
+ //
270
+ // Map alternative name alias to its types.
271
+ //
272
+ const char* certificateAlternativeNameTypes[] = {"", "Email Address", "DNS Name", "", "Directory Name", "", "URI",
273
+ "IP Address"};
274
+ const int certificateAlternativeNameTypesSize = sizeof(certificateAlternativeNameTypes) / sizeof(char*);
275
+
276
+ int
277
+ certificateAlternativeNameType(const string& alias)
278
+ {
279
+ if(!alias.empty())
280
+ {
281
+ for(int i = 0; i < certificateAlternativeNameTypesSize; ++i)
282
+ {
283
+ if(alias == certificateAlternativeNameTypes[i])
284
+ {
285
+ return i;
286
+ }
287
+ }
288
+ }
289
+ return -1; // Not supported
290
+ }
291
+
292
+ DistinguishedName
293
+ getX509Name(SecCertificateRef cert, CFTypeRef key)
294
+ {
295
+ assert(key == kSecOIDX509V1IssuerName || key == kSecOIDX509V1SubjectName);
296
+ list<pair<string, string> > rdnPairs;
297
+ UniqueRef<CFDictionaryRef> property(getCertificateProperty(cert, key));
298
+ if(property)
299
+ {
300
+ CFArrayRef dn = static_cast<CFArrayRef>(CFDictionaryGetValue(property.get(), kSecPropertyKeyValue));
301
+ int size = CFArrayGetCount(dn);
302
+ for(int i = 0; i < size; ++i)
303
+ {
304
+ CFDictionaryRef dict = static_cast<CFDictionaryRef>(CFArrayGetValueAtIndex(dn, i));
305
+ rdnPairs.push_front(make_pair(
306
+ certificateOIDAlias(
307
+ fromCFString((static_cast<CFStringRef>(CFDictionaryGetValue(dict, kSecPropertyKeyLabel))))),
308
+ escapeX509Name(
309
+ fromCFString(static_cast<CFStringRef>(CFDictionaryGetValue(dict, kSecPropertyKeyValue))))));
310
+ }
311
+ }
312
+ return DistinguishedName(rdnPairs);
313
+ }
314
+
315
+ vector<pair<int, string> >
316
+ getX509AltName(SecCertificateRef cert, CFTypeRef key)
317
+ {
318
+ assert(key == kSecOIDIssuerAltName || key == kSecOIDSubjectAltName);
319
+ UniqueRef<CFDictionaryRef> property(getCertificateProperty(cert, key));
320
+
321
+ vector<pair<int, string> > pairs;
322
+ if(property)
323
+ {
324
+ CFArrayRef names = static_cast<CFArrayRef>(CFDictionaryGetValue(property.get(), kSecPropertyKeyValue));
325
+ int size = CFArrayGetCount(names);
326
+
327
+ for(int i = 0; i < size; ++i)
328
+ {
329
+ CFDictionaryRef dict = static_cast<CFDictionaryRef>(CFArrayGetValueAtIndex(names, i));
330
+
331
+ int type = certificateAlternativeNameType(
332
+ fromCFString(static_cast<CFStringRef>(CFDictionaryGetValue(dict, kSecPropertyKeyLabel))));
333
+ if(type != -1)
334
+ {
335
+ CFStringRef v = static_cast<CFStringRef>(CFDictionaryGetValue(dict, kSecPropertyKeyValue));
336
+ CFStringRef t = static_cast<CFStringRef>(CFDictionaryGetValue(dict, kSecPropertyKeyType));
337
+ if(CFEqual(t, kSecPropertyTypeString) || CFEqual(t, kSecPropertyTypeTitle))
338
+ {
339
+ pairs.push_back(make_pair(type, fromCFString(v)));
340
+ }
341
+ else if(CFEqual(t, kSecPropertyTypeURL))
342
+ {
343
+ pairs.push_back(make_pair(type, fromCFString(CFURLGetString((CFURLRef)v))));
344
+ }
345
+ else if(CFEqual(t, kSecPropertyTypeSection))
346
+ {
347
+ CFArrayRef section = (CFArrayRef)v;
348
+ ostringstream os;
349
+ for(int i = 0, count = CFArrayGetCount(section); i < count;)
350
+ {
351
+ CFDictionaryRef d = (CFDictionaryRef)CFArrayGetValueAtIndex(section, i);
352
+
353
+ CFStringRef sectionLabel = static_cast<CFStringRef>(CFDictionaryGetValue(d, kSecPropertyKeyLabel));
354
+ CFStringRef sectionValue = static_cast<CFStringRef>(CFDictionaryGetValue(d, kSecPropertyKeyValue));
355
+
356
+ os << certificateOIDAlias(fromCFString(sectionLabel)) << "=" << fromCFString(sectionValue);
357
+ if(++i < count)
358
+ {
359
+ os << ",";
360
+ }
361
+ }
362
+ pairs.push_back(make_pair(type, os.str()));
363
+ }
364
+ }
365
+ }
366
+ }
367
+ return pairs;
368
+ }
369
+
370
+ #ifdef ICE_CPP11_MAPPING
371
+ chrono::system_clock::time_point
372
+ #else
373
+ IceUtil::Time
374
+ #endif
375
+ getX509Date(SecCertificateRef cert, CFTypeRef key)
376
+ {
377
+ assert(key == kSecOIDX509V1ValidityNotAfter || key == kSecOIDX509V1ValidityNotBefore);
378
+ UniqueRef<CFDictionaryRef> property(getCertificateProperty(cert, key));
379
+ CFAbsoluteTime seconds = 0;
380
+ if(property)
381
+ {
382
+ CFNumberRef date = static_cast<CFNumberRef>(CFDictionaryGetValue(property.get(), kSecPropertyKeyValue));
383
+ CFNumberGetValue(date, kCFNumberDoubleType, &seconds);
384
+ }
385
+
386
+ IceUtil::Time time = IceUtil::Time::secondsDouble(kCFAbsoluteTimeIntervalSince1970 + seconds);
387
+
388
+ #ifdef ICE_CPP11_MAPPING
389
+ return chrono::system_clock::time_point(chrono::microseconds(time.toMicroSeconds()));
390
+ #else
391
+ return time;
392
+ #endif
393
+ }
394
+
395
+ string
396
+ getX509String(SecCertificateRef cert, CFTypeRef key)
397
+ {
398
+ assert(key == kSecOIDX509V1SerialNumber || key == kSecOIDX509V1Version);
399
+ UniqueRef<CFDictionaryRef> property(getCertificateProperty(cert, key));
400
+ return property ?
401
+ fromCFString(static_cast<CFStringRef>(CFDictionaryGetValue(property.get(), kSecPropertyKeyValue))) : "";
402
+ }
403
+ #endif
404
+
405
+ } // end anonymous namespace
406
+
407
+ SecureTransportCertificateI::SecureTransportCertificateI(SecCertificateRef cert) : _cert(cert)
408
+ {
409
+ if(!_cert)
410
+ {
411
+ #ifdef ICE_CPP11_MAPPING
412
+ throw invalid_argument("Invalid certificate reference");
413
+ #else
414
+ throw IceUtil::IllegalArgumentException(__FILE__, __LINE__, "Invalid certificate reference");
415
+ #endif
416
+ }
417
+ }
418
+
419
+ bool
420
+ SecureTransportCertificateI::operator==(const IceSSL::Certificate& r) const
421
+ {
422
+ const SecureTransportCertificateI* p = dynamic_cast<const SecureTransportCertificateI*>(&r);
423
+ if(!p)
424
+ {
425
+ return false;
426
+ }
427
+ return CFEqual(_cert.get(), p->_cert.get());
428
+ }
429
+
430
+ vector<Ice::Byte>
431
+ SecureTransportCertificateI::getAuthorityKeyIdentifier() const
432
+ {
433
+ #ifdef ICE_USE_SECURE_TRANSPORT_IOS
434
+ throw Ice::FeatureNotSupportedException(__FILE__, __LINE__);
435
+ #else // macOS
436
+ vector<Ice::Byte> keyid;
437
+
438
+ UniqueRef<CFDictionaryRef> property(getCertificateProperty(_cert.get(), kSecOIDAuthorityKeyIdentifier));
439
+ if(property)
440
+ {
441
+ CFTypeRef type = 0;
442
+ CFTypeRef value;
443
+ if(CFDictionaryGetValueIfPresent(property.get(), kSecPropertyKeyType, &type))
444
+ {
445
+ if(CFEqual(type, kSecPropertyTypeSection))
446
+ {
447
+ if(CFDictionaryGetValueIfPresent(property.get(), kSecPropertyKeyValue, &value))
448
+ {
449
+ if(CFArrayGetCount(static_cast<CFArrayRef>(value)) >= 0)
450
+ {
451
+ value = CFArrayGetValueAtIndex(static_cast<CFArrayRef>(value), 1);
452
+ type = CFDictionaryGetValue(static_cast<CFDictionaryRef>(value), kSecPropertyKeyType);
453
+ }
454
+ }
455
+ }
456
+
457
+ if(CFEqual(type, kSecPropertyTypeData))
458
+ {
459
+ CFDataRef data = static_cast<CFDataRef>(
460
+ CFDictionaryGetValue(static_cast<CFDictionaryRef>(value), kSecPropertyKeyValue));
461
+ keyid.resize(CFDataGetLength(data));
462
+ memcpy(&keyid[0], CFDataGetBytePtr(data), CFDataGetLength(data));
463
+ }
464
+ }
465
+ }
466
+ return keyid;
467
+ #endif
468
+ }
469
+
470
+ vector<Ice::Byte>
471
+ SecureTransportCertificateI::getSubjectKeyIdentifier() const
472
+ {
473
+ #ifdef ICE_USE_SECURE_TRANSPORT_IOS
474
+ throw Ice::FeatureNotSupportedException(__FILE__, __LINE__);
475
+ #else // macOS
476
+ vector<Ice::Byte> keyid;
477
+ UniqueRef<CFDictionaryRef> property(getCertificateProperty(_cert.get(), kSecOIDSubjectKeyIdentifier));
478
+ if(property)
479
+ {
480
+ CFTypeRef type = 0;
481
+ CFTypeRef value;
482
+ if(CFDictionaryGetValueIfPresent(property.get(), kSecPropertyKeyType, &type))
483
+ {
484
+ if(CFEqual(type, kSecPropertyTypeSection))
485
+ {
486
+ if(CFDictionaryGetValueIfPresent(property.get(), kSecPropertyKeyValue, &value))
487
+ {
488
+ if(CFArrayGetCount(static_cast<CFArrayRef>(value)) >= 0)
489
+ {
490
+ value = CFArrayGetValueAtIndex(static_cast<CFArrayRef>(value), 1);
491
+ type = CFDictionaryGetValue(static_cast<CFDictionaryRef>(value), kSecPropertyKeyType);
492
+ }
493
+ }
494
+ }
495
+
496
+ if(CFEqual(type, kSecPropertyTypeData))
497
+ {
498
+ CFDataRef data = static_cast<CFDataRef>(
499
+ CFDictionaryGetValue(static_cast<CFDictionaryRef>(value), kSecPropertyKeyValue));
500
+ keyid.resize(CFDataGetLength(data));
501
+ memcpy(&keyid[0], CFDataGetBytePtr(data), CFDataGetLength(data));
502
+ }
503
+ }
504
+ }
505
+ return keyid;
506
+ #endif
507
+ }
508
+
509
+ bool
510
+ SecureTransportCertificateI::verify(const IceSSL::CertificatePtr& cert) const
511
+ {
512
+ bool valid = false;
513
+ SecureTransportCertificateI* c = dynamic_cast<SecureTransportCertificateI*>(cert.get());
514
+ if(c)
515
+ {
516
+ //
517
+ // We first check if the given certificate subject match our certificate
518
+ // issuer. Otherwhise when checking a certificate against itself
519
+ // SecTrustEvaluate always returns it is valid.
520
+ //
521
+ #ifdef ICE_USE_SECURE_TRANSPORT_IOS
522
+ initializeAttributes();
523
+ c->initializeAttributes();
524
+ valid = CFEqual(_issuer.get(), c->_subject.get());
525
+ #else // macOS
526
+ UniqueRef<CFErrorRef> error;
527
+ UniqueRef<CFDataRef> issuer(SecCertificateCopyNormalizedIssuerContent(_cert.get(), &error.get()));
528
+ if(error)
529
+ {
530
+ throw CertificateEncodingException(__FILE__, __LINE__, "certificate error:\n" + sslErrorToString(error.get()));
531
+ }
532
+ UniqueRef<CFDataRef> subject(SecCertificateCopyNormalizedSubjectContent(c->getCert(), &error.get()));
533
+ if(error)
534
+ {
535
+ throw CertificateEncodingException(__FILE__, __LINE__, "certificate error:\n" + sslErrorToString(error.get()));
536
+ }
537
+
538
+ //
539
+ // The certificate issuer must match the CA subject.
540
+ //
541
+ valid = CFEqual(issuer.get(), subject.get());
542
+ #endif
543
+ if(valid)
544
+ {
545
+ UniqueRef<SecPolicyRef> policy(SecPolicyCreateBasicX509());
546
+ UniqueRef<SecTrustRef> trust;
547
+ OSStatus err = 0;;
548
+ if((err = SecTrustCreateWithCertificates(_cert.get(), policy.get(), &trust.get())))
549
+ {
550
+ throw CertificateEncodingException(__FILE__, __LINE__, sslErrorToString(err));
551
+ }
552
+
553
+ SecCertificateRef certs[1] = { c->getCert() };
554
+ UniqueRef<CFArrayRef> anchorCertificates(
555
+ CFArrayCreate(kCFAllocatorDefault, (const void**)&certs, 1, &kCFTypeArrayCallBacks));
556
+ if((err = SecTrustSetAnchorCertificates(trust.get(), anchorCertificates.get())))
557
+ {
558
+ throw CertificateEncodingException(__FILE__, __LINE__, sslErrorToString(err));
559
+ }
560
+
561
+ SecTrustResultType trustResult = kSecTrustResultInvalid;
562
+ if((err = SecTrustEvaluate(trust.get(), &trustResult)))
563
+ {
564
+ throw CertificateEncodingException(__FILE__, __LINE__, sslErrorToString(err));
565
+ }
566
+
567
+ valid = trustResult == kSecTrustResultUnspecified;
568
+ }
569
+ }
570
+ return valid;
571
+ }
572
+
573
+ string
574
+ SecureTransportCertificateI::encode() const
575
+ {
576
+ #ifdef ICE_USE_SECURE_TRANSPORT_IOS
577
+ UniqueRef<CFDataRef> cert(SecCertificateCopyData(_cert.get()));
578
+ vector<unsigned char> data(CFDataGetBytePtr(cert.get()), CFDataGetBytePtr(cert.get()) + CFDataGetLength(cert.get()));
579
+ ostringstream os;
580
+ os << "-----BEGIN CERTIFICATE-----\n";
581
+ os << IceInternal::Base64::encode(data);
582
+ os << "-----END CERTIFICATE-----\n";
583
+ return os.str();
584
+ #else // macOS
585
+ UniqueRef<CFDataRef> exported;
586
+ OSStatus err = SecItemExport(_cert.get(), kSecFormatPEMSequence, kSecItemPemArmour, 0, &exported.get());
587
+ if(err != noErr)
588
+ {
589
+ throw CertificateEncodingException(__FILE__, __LINE__, sslErrorToString(err));
590
+ }
591
+ return string(reinterpret_cast<const char*>(CFDataGetBytePtr(exported.get())), CFDataGetLength(exported.get()));
592
+ #endif
593
+ }
594
+
595
+ #ifdef ICE_CPP11_MAPPING
596
+ chrono::system_clock::time_point
597
+ #else
598
+ IceUtil::Time
599
+ #endif
600
+ SecureTransportCertificateI::getNotAfter() const
601
+ {
602
+ #ifdef ICE_USE_SECURE_TRANSPORT_IOS
603
+ throw Ice::FeatureNotSupportedException(__FILE__, __LINE__);
604
+ #else // macOS
605
+ return getX509Date(_cert.get(), kSecOIDX509V1ValidityNotAfter);
606
+ #endif
607
+ }
608
+
609
+ #ifdef ICE_CPP11_MAPPING
610
+ chrono::system_clock::time_point
611
+ #else
612
+ IceUtil::Time
613
+ #endif
614
+ SecureTransportCertificateI::getNotBefore() const
615
+ {
616
+ #ifdef ICE_USE_SECURE_TRANSPORT_IOS
617
+ throw Ice::FeatureNotSupportedException(__FILE__, __LINE__);
618
+ #else // macOS
619
+ return getX509Date(_cert.get(), kSecOIDX509V1ValidityNotBefore);
620
+ #endif
621
+ }
622
+
623
+ string
624
+ SecureTransportCertificateI::getSerialNumber() const
625
+ {
626
+ #ifdef ICE_USE_SECURE_TRANSPORT_IOS
627
+ initializeAttributes();
628
+ return _serial;
629
+ #else // macOS
630
+ return getX509String(_cert.get(), kSecOIDX509V1SerialNumber);
631
+ #endif
632
+ }
633
+
634
+ DistinguishedName
635
+ SecureTransportCertificateI::getIssuerDN() const
636
+ {
637
+ #ifdef ICE_USE_SECURE_TRANSPORT_IOS
638
+ initializeAttributes();
639
+ return _issuer ? DistinguishedName(ASN1Parser(_issuer.get()).parse()) : DistinguishedName("");
640
+ #else // macOS
641
+ return getX509Name(_cert.get(), kSecOIDX509V1IssuerName);
642
+ #endif
643
+ }
644
+
645
+ vector<pair<int, string> >
646
+ SecureTransportCertificateI::getIssuerAlternativeNames() const
647
+ {
648
+ #if defined(ICE_USE_SECURE_TRANSPORT_IOS)
649
+ throw FeatureNotSupportedException(__FILE__, __LINE__);
650
+ #else // macOS
651
+ return getX509AltName(_cert.get(), kSecOIDIssuerAltName);
652
+ #endif
653
+ }
654
+
655
+ DistinguishedName
656
+ SecureTransportCertificateI::getSubjectDN() const
657
+ {
658
+ #ifdef ICE_USE_SECURE_TRANSPORT_IOS
659
+ initializeAttributes();
660
+ if(_subject)
661
+ {
662
+ return DistinguishedName(ASN1Parser(_subject.get()).parse());
663
+ }
664
+ else
665
+ {
666
+ UniqueRef<CFStringRef> subjectSummary(SecCertificateCopySubjectSummary(_cert.get()));
667
+ return DistinguishedName("CN=" + fromCFString(subjectSummary.get()));
668
+ }
669
+ #else // macOS
670
+ return getX509Name(_cert.get(), kSecOIDX509V1SubjectName);
671
+ #endif
672
+ }
673
+
674
+ vector<pair<int, string> >
675
+ SecureTransportCertificateI::getSubjectAlternativeNames() const
676
+ {
677
+ #ifdef ICE_USE_SECURE_TRANSPORT_IOS
678
+ throw FeatureNotSupportedException(__FILE__, __LINE__);
679
+ #else // macOS
680
+ return getX509AltName(_cert.get(), kSecOIDSubjectAltName);
681
+ #endif
682
+ }
683
+
684
+ int
685
+ SecureTransportCertificateI::getVersion() const
686
+ {
687
+ #ifdef ICE_USE_SECURE_TRANSPORT_IOS
688
+ initializeAttributes();
689
+ return _version;
690
+ #else // macOS
691
+ return atoi(getX509String(_cert.get(), kSecOIDX509V1Version).c_str()) - 1;
692
+ #endif
693
+ }
694
+
695
+ SecCertificateRef
696
+ SecureTransportCertificateI::getCert() const
697
+ {
698
+ return _cert.get();
699
+ }
700
+
701
+ #ifdef ICE_USE_SECURE_TRANSPORT_IOS
702
+
703
+ IceUtil::Mutex* globalMutex = 0;
704
+
705
+ class Init
706
+ {
707
+ public:
708
+
709
+ Init()
710
+ {
711
+ globalMutex = new IceUtil::Mutex;
712
+ }
713
+
714
+ ~Init()
715
+ {
716
+ delete globalMutex;
717
+ globalMutex = 0;
718
+ }
719
+ };
720
+
721
+ Init init;
722
+
723
+ void
724
+ SecureTransportCertificateI::initializeAttributes() const
725
+ {
726
+ //
727
+ // We need to temporarily add the certificate to the keychain in order to
728
+ // retrieve its attributes. Unfortunately kSecMatchItemList doesn't work
729
+ // on iOS. We make sure only one thread adds/removes a cert at a time here.
730
+ //
731
+ IceUtilInternal::MutexPtrLock<IceUtil::Mutex> lock(globalMutex);
732
+
733
+ if(_subject)
734
+ {
735
+ return;
736
+ }
737
+
738
+ UniqueRef<CFMutableDictionaryRef> query(
739
+ CFDictionaryCreateMutable(0, 1, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks));
740
+ CFDictionarySetValue(query.get(), kSecValueRef, _cert.get());
741
+ CFDictionarySetValue(query.get(), kSecReturnAttributes, kCFBooleanTrue);
742
+
743
+ UniqueRef<CFDictionaryRef> attributes(0);
744
+ OSStatus err;
745
+ if((err = SecItemAdd(query.get(), reinterpret_cast<CFTypeRef*>(&attributes.get()))) == errSecDuplicateItem)
746
+ {
747
+ CFDictionarySetValue(query.get(), kSecClass, kSecClassCertificate);
748
+ err = SecItemCopyMatching(query.get(), reinterpret_cast<CFTypeRef*>(&attributes.get()));
749
+ }
750
+ else
751
+ {
752
+ query.reset(CFDictionaryCreateMutable(0, 1, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks));
753
+ CFDictionarySetValue(query.get(), kSecClass, kSecClassCertificate);
754
+ CFDictionarySetValue(query.get(), kSecValueRef, _cert.get());
755
+ err = SecItemDelete(query.get());
756
+ }
757
+
758
+ if(err != noErr)
759
+ {
760
+ _subject.reset(0);
761
+ _issuer.reset(0);
762
+ throw CertificateEncodingException(__FILE__, __LINE__, sslErrorToString(err));
763
+ }
764
+
765
+ _subject.retain(static_cast<CFDataRef>(CFDictionaryGetValue(attributes.get(), kSecAttrSubject)));
766
+ _issuer.retain(static_cast<CFDataRef>(CFDictionaryGetValue(attributes.get(), kSecAttrIssuer)));
767
+ CFDataRef serial = static_cast<CFDataRef>(CFDictionaryGetValue(attributes.get(), kSecAttrSerialNumber));
768
+ ostringstream os;
769
+ for(int i = 0; i < CFDataGetLength(serial); ++i)
770
+ {
771
+ int c = static_cast<int>(CFDataGetBytePtr(serial)[i]);
772
+ if(i)
773
+ {
774
+ os << ' ';
775
+ }
776
+ os.fill('0');
777
+ os.width(2);
778
+ os << hex << c;
779
+ }
780
+ _serial = os.str();
781
+ CFNumberRef version = static_cast<CFNumberRef>(CFDictionaryGetValue(attributes.get(), kSecAttrCertificateType));
782
+ if(!CFNumberGetValue(version, kCFNumberIntType, &_version))
783
+ {
784
+ _version = -1;
785
+ }
786
+ }
787
+ #endif
788
+
789
+ IceSSL::SecureTransport::CertificatePtr
790
+ IceSSL::SecureTransport::Certificate::create(SecCertificateRef cert)
791
+ {
792
+ return ICE_MAKE_SHARED(SecureTransportCertificateI, cert);
793
+ }
794
+
795
+ IceSSL::SecureTransport::CertificatePtr
796
+ IceSSL::SecureTransport::Certificate::load(const std::string& file)
797
+ {
798
+ string resolved;
799
+ if(checkPath(file, "", false, resolved))
800
+ {
801
+ return ICE_MAKE_SHARED(SecureTransportCertificateI, loadCertificate(resolved));
802
+ }
803
+ else
804
+ {
805
+ throw CertificateReadException(__FILE__, __LINE__, "error opening file " + file);
806
+ }
807
+ }
808
+
809
+ IceSSL::SecureTransport::CertificatePtr
810
+ IceSSL::SecureTransport::Certificate::decode(const std::string& encoding)
811
+ {
812
+ #ifdef ICE_USE_SECURE_TRANSPORT_IOS
813
+ string::size_type size, startpos, endpos = 0;
814
+ startpos = encoding.find("-----BEGIN CERTIFICATE-----", endpos);
815
+ if(startpos != string::npos)
816
+ {
817
+ startpos += sizeof("-----BEGIN CERTIFICATE-----");
818
+ endpos = encoding.find("-----END CERTIFICATE-----", startpos);
819
+ size = endpos - startpos;
820
+ }
821
+ else
822
+ {
823
+ startpos = 0;
824
+ endpos = string::npos;
825
+ size = encoding.size();
826
+ }
827
+
828
+ vector<unsigned char> data(IceInternal::Base64::decode(string(&encoding[startpos], size)));
829
+ UniqueRef<CFDataRef> certdata(CFDataCreate(kCFAllocatorDefault, &data[0], data.size()));
830
+ SecCertificateRef cert = SecCertificateCreateWithData(0, certdata.get());
831
+ if(!cert)
832
+ {
833
+ assert(false);
834
+ throw CertificateEncodingException(__FILE__, __LINE__, "certificate is not a valid PEM-encoded certificate");
835
+ }
836
+ return ICE_MAKE_SHARED(SecureTransportCertificateI, cert);
837
+ #else // macOS
838
+ UniqueRef<CFDataRef> data(
839
+ CFDataCreateWithBytesNoCopy(kCFAllocatorDefault,
840
+ reinterpret_cast<const UInt8*>(encoding.c_str()),
841
+ encoding.size(), kCFAllocatorNull));
842
+
843
+ SecExternalFormat format = kSecFormatUnknown;
844
+ SecExternalItemType type = kSecItemTypeCertificate;
845
+
846
+ SecItemImportExportKeyParameters params;
847
+ memset(&params, 0, sizeof(params));
848
+ params.version = SEC_KEY_IMPORT_EXPORT_PARAMS_VERSION;
849
+
850
+ UniqueRef<CFArrayRef> items;
851
+ OSStatus err = SecItemImport(data.get(), 0, &format, &type, 0, &params, 0, &items.get());
852
+ if(err)
853
+ {
854
+ throw CertificateEncodingException(__FILE__, __LINE__, sslErrorToString(err));
855
+ }
856
+
857
+ UniqueRef<SecKeychainItemRef> item;
858
+ item.retain(static_cast<SecKeychainItemRef>(const_cast<void*>(CFArrayGetValueAtIndex(items.get(), 0))));
859
+ assert(SecCertificateGetTypeID() == CFGetTypeID(item.get()));
860
+ return ICE_MAKE_SHARED(SecureTransportCertificateI, reinterpret_cast<SecCertificateRef>(item.release()));
861
+ #endif
862
+ }