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,198 +0,0 @@
1
- // **********************************************************************
2
- //
3
- // Copyright (c) 2003-2018 ZeroC, Inc. All rights reserved.
4
- //
5
- // This copy of Ice is licensed to you under the terms described in the
6
- // ICE_LICENSE file included in this distribution.
7
- //
8
- // **********************************************************************
9
-
10
- #ifndef ICE_STREAM_I_H
11
- #define ICE_STREAM_I_H
12
-
13
- #include <Ice/Stream.h>
14
-
15
- namespace IceInternal
16
- {
17
-
18
- // Forward declaration.
19
- class BasicStream;
20
-
21
- };
22
-
23
- namespace Ice
24
- {
25
-
26
- //
27
- // Implement InputStream as a wrapper around BasicStream.
28
- //
29
- class InputStreamI : public InputStream
30
- {
31
- public:
32
-
33
- InputStreamI(const CommunicatorPtr&, const std::pair<const Byte*, const Byte*>&, bool);
34
- InputStreamI(const CommunicatorPtr&, const std::pair<const Byte*, const Byte*>&, const EncodingVersion&, bool);
35
- virtual ~InputStreamI();
36
-
37
- virtual CommunicatorPtr communicator() const;
38
-
39
- virtual void sliceObjects(bool);
40
-
41
- virtual Int readSize();
42
- virtual Int readAndCheckSeqSize(int);
43
-
44
- virtual ObjectPrx readProxy();
45
- virtual void readObject(const ReadObjectCallbackPtr&);
46
-
47
- virtual void throwException();
48
- virtual void throwException(const UserExceptionReaderFactoryPtr&);
49
-
50
- virtual void startObject();
51
- virtual SlicedDataPtr endObject(bool);
52
-
53
- virtual void startException();
54
- virtual SlicedDataPtr endException(bool);
55
-
56
- virtual std::string startSlice();
57
- virtual void endSlice();
58
- virtual void skipSlice();
59
-
60
- virtual EncodingVersion startEncapsulation();
61
- virtual void endEncapsulation();
62
- virtual EncodingVersion skipEncapsulation();
63
-
64
- virtual EncodingVersion getEncoding() const;
65
-
66
- virtual void readPendingObjects();
67
-
68
- virtual size_type pos();
69
- virtual void rewind();
70
-
71
- virtual void skip(Int);
72
- virtual void skipSize();
73
-
74
- virtual void read(bool&);
75
- virtual void read(Byte&);
76
- virtual void read(Short&);
77
- virtual void read(Int&);
78
- virtual void read(Long&);
79
- virtual void read(Float&);
80
- virtual void read(Double&);
81
- virtual void read(std::string&, bool = true);
82
- virtual void read(const char*&, size_t&);
83
- virtual void read(const char*&, size_t&, std::string&);
84
- virtual void read(std::vector<std::string>&, bool);
85
- virtual void read(std::wstring&);
86
- virtual void read(std::vector<bool>&);
87
- virtual void read(std::pair<const bool*, const bool*>&, ::IceUtil::ScopedArray<bool>&);
88
- virtual void read(std::pair<const Byte*, const Byte*>&);
89
- virtual void read(std::pair<const Short*, const Short*>&, ::IceUtil::ScopedArray<Short>&);
90
- virtual void read(std::pair<const Int*, const Int*>&, ::IceUtil::ScopedArray<Int>&);
91
- virtual void read(std::pair<const Long*, const Long*>&, ::IceUtil::ScopedArray<Long>&);
92
- virtual void read(std::pair<const Float*, const Float*>&, ::IceUtil::ScopedArray<Float>&);
93
- virtual void read(std::pair<const Double*, const Double*>&, ::IceUtil::ScopedArray<Double>&);
94
-
95
- #ifdef __SUNPRO_CC
96
- using InputStream::read;
97
- #endif
98
-
99
- virtual bool readOptional(Int, OptionalFormat);
100
-
101
- virtual void closure(void*);
102
- virtual void* closure() const;
103
-
104
- private:
105
-
106
- void initialize(IceInternal::Instance*, const std::pair<const Byte*, const Byte*>&, const EncodingVersion&, bool);
107
-
108
- const CommunicatorPtr _communicator;
109
- IceInternal::BasicStream* _is;
110
- std::vector< ReadObjectCallbackPtr > _callbacks;
111
- void* _closure;
112
- };
113
-
114
- //
115
- // Implement OutputStream as a wrapper around BasicStream.
116
- //
117
- class OutputStreamI : public OutputStream
118
- {
119
- public:
120
-
121
- OutputStreamI(const CommunicatorPtr&);
122
- OutputStreamI(const CommunicatorPtr&, const EncodingVersion&);
123
- OutputStreamI(const CommunicatorPtr&, IceInternal::BasicStream*);
124
- virtual ~OutputStreamI();
125
-
126
- virtual CommunicatorPtr communicator() const;
127
-
128
- virtual void writeObject(const ObjectPtr&);
129
- virtual void writeException(const UserException&);
130
- virtual void writeProxy(const ObjectPrx&);
131
-
132
- virtual void writeSize(Int);
133
-
134
- virtual void write(bool);
135
- virtual void write(Byte);
136
- virtual void write(Short);
137
- virtual void write(Int);
138
- virtual void write(Long);
139
- virtual void write(Float);
140
- virtual void write(Double);
141
- virtual void write(const std::string&, bool = true);
142
- virtual void write(const char*, size_t, bool = true);
143
- virtual void write(const std::vector<std::string>&, bool);
144
- virtual void write(const char*, bool = true);
145
- virtual void write(const std::wstring&);
146
- virtual void write(const std::vector<bool>&);
147
- virtual void write(const bool*, const bool*);
148
- virtual void write(const Byte*, const Byte*);
149
- virtual void write(const Short*, const Short*);
150
- virtual void write(const Int*, const Int*);
151
- virtual void write(const Long*, const Long*);
152
- virtual void write(const Float*, const Float*);
153
- virtual void write(const Double*, const Double*);
154
-
155
- #ifdef __SUNPRO_CC
156
- using OutputStream::write;
157
- #endif
158
-
159
- virtual bool writeOptional(Int, OptionalFormat);
160
-
161
- virtual void startObject(const SlicedDataPtr&);
162
- virtual void endObject();
163
-
164
- virtual void startException(const SlicedDataPtr&);
165
- virtual void endException();
166
-
167
- virtual void startSlice(const std::string&, int, bool);
168
- virtual void endSlice();
169
-
170
- virtual void startEncapsulation(const EncodingVersion&, FormatType);
171
- virtual void startEncapsulation();
172
- virtual void endEncapsulation();
173
-
174
- virtual EncodingVersion getEncoding() const;
175
-
176
- virtual void writePendingObjects();
177
-
178
- virtual void finished(std::vector< Byte >&);
179
- virtual std::pair<const Byte*, const Byte*> finished();
180
-
181
- virtual void reset(bool);
182
-
183
- virtual size_type pos();
184
- virtual void rewrite(Int, size_type);
185
-
186
- virtual size_type startSize();
187
- virtual void endSize(size_type pos);
188
-
189
- private:
190
-
191
- const CommunicatorPtr _communicator;
192
- IceInternal::BasicStream* _os;
193
- const bool _own;
194
- };
195
-
196
- }
197
-
198
- #endif
@@ -1,1336 +0,0 @@
1
- // **********************************************************************
2
- //
3
- // Copyright (c) 2003-2018 ZeroC, Inc. All rights reserved.
4
- //
5
- // This copy of Ice is licensed to you under the terms described in the
6
- // ICE_LICENSE file included in this distribution.
7
- //
8
- // **********************************************************************
9
-
10
- #include <IceUtil/DisableWarnings.h>
11
- #include <IceUtil/Mutex.h>
12
- #include <IceUtil/MutexPtrLock.h>
13
- #include <IceUtil/StringUtil.h>
14
- #include <IceSSL/Plugin.h>
15
- #include <IceSSL/Util.h>
16
- #include <IceSSL/RFC2253.h>
17
- #include <Ice/Object.h>
18
-
19
- #if defined(ICE_USE_OPENSSL)
20
- # include <openssl/x509v3.h>
21
- # include <openssl/pem.h>
22
- //
23
- // Avoid old style cast warnings from OpenSSL macros
24
- //
25
- # pragma GCC diagnostic ignored "-Wold-style-cast"
26
- #elif defined(ICE_USE_SECURE_TRANSPORT)
27
- # include <Security/Security.h>
28
- #endif
29
-
30
- #ifdef __SUNPRO_CC
31
-
32
- //
33
- // The call to sk_GENERAL_NAME_pop_free fails to compile if we don't
34
- // remove the extern "C" vs non extern "C" check with the macro below:
35
- //
36
-
37
- extern "C" typedef void (*FreeFunc)(void*);
38
-
39
- #undef CHECKED_SK_FREE_FUNC
40
- #define CHECKED_SK_FREE_FUNC(type, p) \
41
- (FreeFunc) (p)
42
-
43
- #endif
44
-
45
-
46
- using namespace std;
47
- using namespace Ice;
48
- using namespace IceSSL;
49
-
50
- const char* IceSSL::CertificateReadException::_name = "IceSSL::CertificateReadException";
51
-
52
- #if defined(ICE_USE_SECURE_TRANSPORT) || defined(ICE_USE_SCHANNEL)
53
- //
54
- // Map a certificate OID to its alias
55
- //
56
- struct CertificateOID
57
- {
58
- const char* name;
59
- const char* alias;
60
- };
61
-
62
- const CertificateOID certificateOIDS[] =
63
- {
64
- {"2.5.4.3", "CN"},
65
- {"2.5.4.4", "SN"},
66
- {"2.5.4.5", "DeviceSerialNumber"},
67
- {"2.5.4.6", "C"},
68
- {"2.5.4.7", "L"},
69
- {"2.5.4.8", "ST"},
70
- {"2.5.4.9", "STREET"},
71
- {"2.5.4.10", "O"},
72
- {"2.5.4.11", "OU"},
73
- {"2.5.4.12", "T"},
74
- {"2.5.4.42", "G"},
75
- {"2.5.4.43", "I"},
76
- {"1.2.840.113549.1.9.8", "unstructuredAddress"},
77
- {"1.2.840.113549.1.9.2", "unstructuredName"},
78
- {"1.2.840.113549.1.9.1", "emailAddress"},
79
- {"0.9.2342.19200300.100.1.25", "DC"}
80
- };
81
- const int certificateOIDSSize = sizeof(certificateOIDS) / sizeof(CertificateOID);
82
-
83
- #endif
84
-
85
-
86
- #if defined(ICE_USE_SECURE_TRANSPORT)
87
-
88
- string
89
- certificateOIDAlias(const string& name)
90
- {
91
- for(int i = 0; i < certificateOIDSSize; ++i)
92
- {
93
- const CertificateOID* certificateOID = &certificateOIDS[i];
94
- assert(certificateOID);
95
- if(name == certificateOID->name)
96
- {
97
- return certificateOID->alias;
98
- }
99
- }
100
- return name;
101
- }
102
-
103
- //
104
- // Map alternative name alias to its types.
105
- //
106
- const char* certificateAlternativeNameTypes[] = {"", "Email Address", "DNS Name", "", "Directory Name", "", "URI",
107
- "IP Address"};
108
- const int certificateAlternativeNameTypesSize = sizeof(certificateAlternativeNameTypes) / sizeof(char*);
109
-
110
- int
111
- certificateAlternativeNameType(const string& alias)
112
- {
113
- if(!alias.empty())
114
- {
115
- for(int i = 0; i < certificateAlternativeNameTypesSize; ++i)
116
- {
117
- if(alias == certificateAlternativeNameTypes[i])
118
- {
119
- return i;
120
- }
121
- }
122
- }
123
- return -1; // Not supported
124
- }
125
-
126
- string
127
- escapeX509Name(const string& name)
128
- {
129
- ostringstream os;
130
- for(string::const_iterator i = name.begin(); i != name.end(); ++i)
131
- {
132
- switch(*i)
133
- {
134
- case ',':
135
- case '=':
136
- case '+':
137
- case '<':
138
- case '>':
139
- case '#':
140
- case ';':
141
- {
142
- os << '\\';
143
- }
144
- default:
145
- {
146
- break;
147
- }
148
- }
149
- os << *i;
150
- }
151
- return os.str();
152
- }
153
-
154
- DistinguishedName
155
- getX509Name(SecCertificateRef cert, CFTypeRef key)
156
- {
157
- assert(key == kSecOIDX509V1IssuerName || key == kSecOIDX509V1SubjectName);
158
- list<pair<string, string> > rdnPairs;
159
- CFDictionaryRef property = getCertificateProperty(cert, key);
160
- if(property)
161
- {
162
- CFArrayRef dn = (CFArrayRef)CFDictionaryGetValue(property, kSecPropertyKeyValue);
163
- int size = CFArrayGetCount(dn);
164
- for(int i = 0; i < size; ++i)
165
- {
166
- CFDictionaryRef dict = (CFDictionaryRef)CFArrayGetValueAtIndex(dn, i);
167
- rdnPairs.push_front(make_pair(
168
- certificateOIDAlias(fromCFString((CFStringRef)CFDictionaryGetValue(dict, kSecPropertyKeyLabel))),
169
- escapeX509Name(fromCFString((CFStringRef)CFDictionaryGetValue(dict, kSecPropertyKeyValue)))));
170
- }
171
- CFRelease(property);
172
- }
173
- return DistinguishedName(rdnPairs);
174
- }
175
-
176
- vector<pair<int, string> >
177
- getX509AltName(SecCertificateRef cert, CFTypeRef key)
178
- {
179
- assert(key == kSecOIDIssuerAltName || key == kSecOIDSubjectAltName);
180
- CFDictionaryRef property = getCertificateProperty(cert, key);
181
-
182
- vector<pair<int, string> > pairs;
183
- if(property)
184
- {
185
- CFArrayRef names = (CFArrayRef)CFDictionaryGetValue(property, kSecPropertyKeyValue);
186
- int size = CFArrayGetCount(names);
187
-
188
- for(int i = 0; i < size; ++i)
189
- {
190
- CFDictionaryRef dict = (CFDictionaryRef)CFArrayGetValueAtIndex(names, i);
191
-
192
- int type = certificateAlternativeNameType(fromCFString(
193
- (CFStringRef)CFDictionaryGetValue(dict, kSecPropertyKeyLabel)));
194
- if(type != -1)
195
- {
196
- CFTypeRef v = (CFTypeRef)CFDictionaryGetValue(dict, kSecPropertyKeyValue);
197
- CFStringRef t = (CFStringRef)CFDictionaryGetValue(dict, kSecPropertyKeyType);
198
- if(CFEqual(t, kSecPropertyTypeString) || CFEqual(t, kSecPropertyTypeTitle))
199
- {
200
- pairs.push_back(make_pair(type, fromCFString((CFStringRef)v)));
201
- }
202
- else if(CFEqual(t, kSecPropertyTypeURL))
203
- {
204
- pairs.push_back(make_pair(type, fromCFString(CFURLGetString((CFURLRef)v))));
205
- }
206
- else if(CFEqual(t, kSecPropertyTypeSection))
207
- {
208
- CFArrayRef section = (CFArrayRef)v;
209
- ostringstream os;
210
- for(int i = 0, count = CFArrayGetCount(section); i < count;)
211
- {
212
- CFDictionaryRef d = (CFDictionaryRef)CFArrayGetValueAtIndex(section, i);
213
-
214
- CFStringRef sectionLabel = (CFStringRef)CFDictionaryGetValue(d, kSecPropertyKeyLabel);
215
- CFStringRef sectionValue = (CFStringRef)CFDictionaryGetValue(d, kSecPropertyKeyValue);
216
-
217
- os << certificateOIDAlias(fromCFString(sectionLabel)) << "=" << fromCFString(sectionValue);
218
- if(++i < count)
219
- {
220
- os << ",";
221
- }
222
- }
223
- pairs.push_back(make_pair(type, os.str()));
224
- }
225
- }
226
- }
227
- CFRelease(property);
228
- }
229
- return pairs;
230
- }
231
-
232
- IceUtil::Time
233
- getX509Date(SecCertificateRef cert, CFTypeRef key)
234
- {
235
- assert(key == kSecOIDX509V1ValidityNotAfter || key == kSecOIDX509V1ValidityNotBefore);
236
- CFDictionaryRef property = getCertificateProperty(cert, key);
237
- CFAbsoluteTime seconds = 0;
238
- if(property)
239
- {
240
- CFNumberRef date = (CFNumberRef)CFDictionaryGetValue(property, kSecPropertyKeyValue);
241
- CFNumberGetValue(date, kCFNumberDoubleType, &seconds);
242
- CFRelease(property);
243
- }
244
- return IceUtil::Time::secondsDouble(kCFAbsoluteTimeIntervalSince1970 + seconds);
245
- }
246
-
247
- string
248
- getX509String(SecCertificateRef cert, CFTypeRef key)
249
- {
250
- assert(key == kSecOIDX509V1SerialNumber || key == kSecOIDX509V1Version);
251
- CFDictionaryRef property = getCertificateProperty(cert, key);
252
- string value;
253
- if(property)
254
- {
255
- value = fromCFString((CFStringRef)CFDictionaryGetValue(property, kSecPropertyKeyValue));
256
- CFRelease(property);
257
- }
258
- return value;
259
- }
260
-
261
- #elif defined(ICE_USE_SCHANNEL)
262
-
263
- void
264
- loadCertificate(PCERT_SIGNED_CONTENT_INFO* cert, const char* buffer, DWORD length)
265
- {
266
- DWORD outLength = length;
267
- vector<BYTE> outBuffer;
268
- outBuffer.resize(outLength);
269
-
270
- if(!CryptStringToBinary(buffer, length, CRYPT_STRING_BASE64HEADER, &outBuffer[0], &outLength, 0, 0))
271
- {
272
- //
273
- // Base64 data should always be bigger than binary
274
- //
275
- assert(GetLastError() != ERROR_MORE_DATA);
276
- throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
277
- }
278
-
279
- DWORD decodedLeng = 0;
280
- if(!CryptDecodeObjectEx(X509_ASN_ENCODING, X509_CERT, &outBuffer[0], outLength, CRYPT_DECODE_ALLOC_FLAG, 0,
281
- cert, &decodedLeng))
282
- {
283
- throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
284
- }
285
- }
286
-
287
- void
288
- loadCertificate(PCERT_SIGNED_CONTENT_INFO* cert, const string& file)
289
- {
290
- vector<char> buffer;
291
- readFile(file, buffer);
292
- if(buffer.empty())
293
- {
294
- throw CertificateReadException(__FILE__, __LINE__, "certificate file " + file + " is empty");
295
- }
296
- loadCertificate(cert, &buffer[0], static_cast<DWORD>(buffer.size()));
297
- }
298
-
299
- const Ice::Long TICKS_PER_MSECOND = 10000LL;
300
- const Ice::Long MSECS_TO_EPOCH = 11644473600000LL;
301
-
302
- IceUtil::Time
303
- filetimeToTime(FILETIME ftime)
304
- {
305
- Ice::Long value = 0;
306
- DWORD* dest = reinterpret_cast<DWORD*>(&value);
307
- *dest++ = ftime.dwLowDateTime;
308
- *dest = ftime.dwHighDateTime;
309
- return IceUtil::Time::milliSeconds((value / TICKS_PER_MSECOND) - MSECS_TO_EPOCH);
310
- }
311
-
312
- string
313
- certNameToString(CERT_NAME_BLOB* name)
314
- {
315
- assert(name);
316
- DWORD length = 0;
317
- if(!(length = CertNameToStr(X509_ASN_ENCODING, name, CERT_OID_NAME_STR|CERT_NAME_STR_REVERSE_FLAG, 0, 0)))
318
- {
319
- throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
320
- }
321
-
322
- vector<char> buffer(length);
323
- if(!CertNameToStr(X509_ASN_ENCODING, name, CERT_OID_NAME_STR|CERT_NAME_STR_REVERSE_FLAG, &buffer[0], length))
324
- {
325
- throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
326
- }
327
-
328
- string s(&buffer[0]);
329
- for(int i = 0; i < certificateOIDSSize; ++i)
330
- {
331
- const CertificateOID* certificateOID = &certificateOIDS[i];
332
- assert(certificateOID);
333
- const string name = string(certificateOID->name) + "=";
334
- const string alias = string(certificateOID->alias) + "=";
335
- size_t pos = 0;
336
- while((pos = s.find(name, pos)) != string::npos)
337
- {
338
- s.replace(pos, name.size(), alias);
339
- }
340
- }
341
- return s;
342
- }
343
-
344
- vector<pair<int, string> >
345
- certificateAltNames(CERT_INFO* certInfo, LPCSTR altNameOID)
346
- {
347
- vector<pair<int, string> > altNames;
348
-
349
- PCERT_EXTENSION extension = CertFindExtension(altNameOID, certInfo->cExtension, certInfo->rgExtension);
350
- if(extension)
351
- {
352
- CERT_ALT_NAME_INFO* altName;
353
- DWORD length = 0;
354
- if(!CryptDecodeObjectEx(X509_ASN_ENCODING, X509_ALTERNATE_NAME, extension->Value.pbData,
355
- extension->Value.cbData, CRYPT_DECODE_ALLOC_FLAG, 0, &altName, &length))
356
- {
357
- throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
358
- }
359
-
360
- for(DWORD i = 0; i < altName->cAltEntry; ++i)
361
- {
362
- CERT_ALT_NAME_ENTRY* entry = &altName->rgAltEntry[i];
363
-
364
- switch(entry->dwAltNameChoice)
365
- {
366
- case CERT_ALT_NAME_RFC822_NAME:
367
- {
368
- altNames.push_back(make_pair(AltNameEmail, IceUtil::wstringToString(entry->pwszRfc822Name)));
369
- break;
370
- }
371
- case CERT_ALT_NAME_DNS_NAME:
372
- {
373
- altNames.push_back(make_pair(AltNameDNS, IceUtil::wstringToString(entry->pwszDNSName)));
374
- break;
375
- }
376
- case CERT_ALT_NAME_DIRECTORY_NAME:
377
- {
378
- altNames.push_back(make_pair(AltNameDirectory, certNameToString(&entry->DirectoryName)));
379
- break;
380
- }
381
- case CERT_ALT_NAME_URL:
382
- {
383
- altNames.push_back(make_pair(AltNameURL, IceUtil::wstringToString(entry->pwszURL)));
384
- break;
385
- }
386
- case CERT_ALT_NAME_IP_ADDRESS:
387
- {
388
- if(entry->IPAddress.cbData == 4)
389
- {
390
- //
391
- // IPv4 address
392
- //
393
- ostringstream os;
394
- Byte* src = reinterpret_cast<Byte*>(entry->IPAddress.pbData);
395
- for(int j = 0; j < 4;)
396
- {
397
- int value = 0;
398
- Byte* dest = reinterpret_cast<Byte*>(&value);
399
- *dest = *src++;
400
- os << value;
401
- if(++j < 4)
402
- {
403
- os << ".";
404
- }
405
- }
406
- altNames.push_back(make_pair(AltNAmeIP, os.str()));
407
- }
408
- //
409
- // TODO IPv6 Address support.
410
- //
411
- break;
412
- }
413
- default:
414
- {
415
- // Not supported
416
- break;
417
- }
418
- }
419
- }
420
- LocalFree(altName);
421
- }
422
- return altNames;
423
- }
424
- #endif
425
-
426
- CertificateReadException::CertificateReadException(const char* file, int line, const string& r) :
427
- Exception(file, line),
428
- reason(r)
429
- {
430
- }
431
-
432
- CertificateReadException::~CertificateReadException() throw()
433
- {
434
- }
435
-
436
- string
437
- CertificateReadException::ice_name() const
438
- {
439
- return _name;
440
- }
441
-
442
- CertificateReadException*
443
- CertificateReadException::ice_clone() const
444
- {
445
- return new CertificateReadException(*this);
446
- }
447
-
448
- void
449
- CertificateReadException::ice_throw() const
450
- {
451
- throw *this;
452
- }
453
-
454
- const char* IceSSL::CertificateEncodingException::_name = "IceSSL::CertificateEncodingException";
455
-
456
- #ifdef ICE_USE_SECURE_TRANSPORT
457
- CertificateEncodingException::CertificateEncodingException(const char* file, int line, CFErrorRef err) :
458
- Exception(file, line)
459
- {
460
- assert(err);
461
- reason = "certificate error:\n" + errorToString(err);
462
- CFRelease(err);
463
- }
464
- #endif
465
-
466
- CertificateEncodingException::CertificateEncodingException(const char* file, int line, const string& r) :
467
- Exception(file, line),
468
- reason(r)
469
- {
470
- }
471
-
472
- CertificateEncodingException::~CertificateEncodingException() throw()
473
- {
474
- }
475
-
476
- string
477
- CertificateEncodingException::ice_name() const
478
- {
479
- return _name;
480
- }
481
-
482
- CertificateEncodingException*
483
- CertificateEncodingException::ice_clone() const
484
- {
485
- return new CertificateEncodingException(*this);
486
- }
487
-
488
- void
489
- CertificateEncodingException::ice_throw() const
490
- {
491
- throw *this;
492
- }
493
-
494
- #ifdef ICE_USE_OPENSSL
495
-
496
- namespace
497
- {
498
-
499
- IceUtil::Mutex* mut = 0;
500
-
501
- class Init
502
- {
503
- public:
504
-
505
- Init()
506
- {
507
- mut = new IceUtil::Mutex;
508
- }
509
-
510
- ~Init()
511
- {
512
- delete mut;
513
- mut = 0;
514
- }
515
- };
516
-
517
- Init init;
518
-
519
- }
520
-
521
- static IceUtil::Time
522
- ASMUtcTimeToIceUtilTime(const ASN1_UTCTIME* s)
523
- {
524
- struct tm tm;
525
- int offset;
526
-
527
- memset(&tm, '\0', sizeof tm);
528
-
529
- # define g2(p) (((p)[0]-'0')*10+(p)[1]-'0')
530
- tm.tm_year = g2(s->data);
531
- if(tm.tm_year < 50)
532
- tm.tm_year += 100;
533
- tm.tm_mon = g2(s->data + 2) - 1;
534
- tm.tm_mday = g2(s->data + 4);
535
- tm.tm_hour = g2(s->data + 6);
536
- tm.tm_min = g2(s->data + 8);
537
- tm.tm_sec = g2(s->data + 10);
538
- if(s->data[12] == 'Z')
539
- {
540
- offset = 0;
541
- }
542
- else
543
- {
544
- offset = g2(s->data + 13) * 60 + g2(s->data + 15);
545
- if(s->data[12] == '-')
546
- {
547
- offset = -offset;
548
- }
549
- }
550
- # undef g2
551
-
552
- //
553
- // If timegm was on all systems this code could be
554
- // return IceUtil::Time::seconds(timegm(&tm) - offset*60);
555
- //
556
- // Windows doesn't support the re-entrant _r versions.
557
- //
558
- time_t tzone;
559
- {
560
- IceUtilInternal::MutexPtrLock<IceUtil::Mutex> sync(mut);
561
- time_t now = time(0);
562
- tzone = mktime(localtime(&now)) - mktime(gmtime(&now));
563
- }
564
- return IceUtil::Time::seconds(mktime(&tm) - offset*60 + tzone);
565
- }
566
-
567
- static string
568
- convertX509NameToString(X509_NAME* name)
569
- {
570
- BIO* out = BIO_new(BIO_s_mem());
571
- X509_NAME_print_ex(out, name, 0, XN_FLAG_RFC2253);
572
- BUF_MEM* p;
573
- BIO_get_mem_ptr(out, &p);
574
- string result = string(p->data, p->length);
575
- BIO_free(out);
576
- return result;
577
- }
578
-
579
- static vector<pair<int, string> >
580
- convertGeneralNames(GENERAL_NAMES* gens)
581
- {
582
- vector<pair<int, string> > alt;
583
- if(gens == 0)
584
- {
585
- return alt;
586
- }
587
- for(int i = 0; i < sk_GENERAL_NAME_num(gens); ++i)
588
- {
589
- GENERAL_NAME* gen = sk_GENERAL_NAME_value(gens, i);
590
- pair<int, string> p;
591
- p.first = gen->type;
592
- switch(gen->type)
593
- {
594
- case GEN_EMAIL:
595
- {
596
- ASN1_IA5STRING* str = gen->d.rfc822Name;
597
- if(str && str->type == V_ASN1_IA5STRING && str->data && str->length > 0)
598
- {
599
- p.second = string(reinterpret_cast<const char*>(str->data), str->length);
600
- }
601
- break;
602
- }
603
- case GEN_DNS:
604
- {
605
- ASN1_IA5STRING* str = gen->d.dNSName;
606
- if(str && str->type == V_ASN1_IA5STRING && str->data && str->length > 0)
607
- {
608
- p.second = string(reinterpret_cast<const char*>(str->data), str->length);
609
- }
610
- break;
611
- }
612
- case GEN_DIRNAME:
613
- {
614
- p.second = convertX509NameToString(gen->d.directoryName);
615
- break;
616
- }
617
- case GEN_URI:
618
- {
619
- ASN1_IA5STRING* str = gen->d.uniformResourceIdentifier;
620
- if(str && str->type == V_ASN1_IA5STRING && str->data && str->length > 0)
621
- {
622
- p.second = string(reinterpret_cast<const char*>(str->data), str->length);
623
- }
624
- break;
625
- }
626
- case GEN_IPADD:
627
- {
628
- ASN1_OCTET_STRING* addr = gen->d.iPAddress;
629
- // TODO: Support IPv6 someday.
630
- if(addr && addr->type == V_ASN1_OCTET_STRING && addr->data && addr->length == 4)
631
- {
632
- ostringstream ostr;
633
- for(int j = 0; j < 4; ++j)
634
- {
635
- if(j > 0)
636
- {
637
- ostr << '.';
638
- }
639
- ostr << static_cast<int>(addr->data[j]);
640
- }
641
- p.second = ostr.str();
642
- }
643
- break;
644
- }
645
- case GEN_OTHERNAME:
646
- case GEN_EDIPARTY:
647
- case GEN_X400:
648
- case GEN_RID:
649
- {
650
- //
651
- // TODO: These types are not supported. If the user wants
652
- // them, they have to get at the certificate data. Another
653
- // alternative is to DER encode the data (as the Java
654
- // certificate does).
655
- //
656
- break;
657
- }
658
- }
659
- alt.push_back(p);
660
- }
661
- sk_GENERAL_NAME_pop_free(gens, GENERAL_NAME_free);
662
- return alt;
663
- }
664
- #endif
665
-
666
- const char* ParseException::_name = "IceSSL::ParseException";
667
-
668
- ParseException::ParseException(const char* file, int line, const string& r) :
669
- Exception(file, line),
670
- reason(r)
671
- {
672
- }
673
-
674
- ParseException::~ParseException() throw()
675
- {
676
- }
677
-
678
- string
679
- ParseException::ice_name() const
680
- {
681
- return _name;
682
- }
683
-
684
- ParseException*
685
- ParseException::ice_clone() const
686
- {
687
- return new ParseException(*this);
688
- }
689
-
690
- void
691
- ParseException::ice_throw() const
692
- {
693
- throw *this;
694
- }
695
-
696
- #ifdef ICE_USE_OPENSSL
697
- DistinguishedName::DistinguishedName(X509NAME* name) :
698
- _rdns(RFC2253::parseStrict(convertX509NameToString(name)))
699
- {
700
- unescape();
701
- }
702
- #endif
703
-
704
- DistinguishedName::DistinguishedName(const string& dn) :
705
- _rdns(RFC2253::parseStrict(dn))
706
- {
707
- unescape();
708
- }
709
-
710
- DistinguishedName::DistinguishedName(const list<pair<string, string> >& rdns) :
711
- _rdns(rdns)
712
- {
713
- unescape();
714
- }
715
-
716
- bool
717
- DistinguishedName::operator==(const DistinguishedName& other) const
718
- {
719
- return other._unescaped == _unescaped;
720
- }
721
-
722
- bool
723
- DistinguishedName::operator!=(const DistinguishedName& other) const
724
- {
725
- return other._unescaped != _unescaped;
726
- }
727
-
728
- bool
729
- DistinguishedName::operator<(const DistinguishedName& other) const
730
- {
731
- return other._unescaped < _unescaped;
732
- }
733
-
734
- bool
735
- DistinguishedName::match(const DistinguishedName& other) const
736
- {
737
- for(list< pair<string, string> >::const_iterator p = other._unescaped.begin(); p != other._unescaped.end(); ++p)
738
- {
739
- bool found = false;
740
- for(list< pair<string, string> >::const_iterator q = _unescaped.begin(); q != _unescaped.end(); ++q)
741
- {
742
- if(p->first == q->first)
743
- {
744
- found = true;
745
- if(p->second != q->second)
746
- {
747
- return false;
748
- }
749
- }
750
- }
751
- if(!found)
752
- {
753
- return false;
754
- }
755
- }
756
- return true;
757
- }
758
-
759
- //
760
- // This always produces the same output as the input DN -- the type of
761
- // escaping is not changed.
762
- //
763
- DistinguishedName::operator string() const
764
- {
765
- ostringstream os;
766
- bool first = true;
767
- for(list< pair<string, string> >::const_iterator p = _rdns.begin(); p != _rdns.end(); ++p)
768
- {
769
- if(!first)
770
- {
771
- os << ",";
772
- }
773
- first = false;
774
- os << p->first << "=" << p->second;
775
- }
776
- return os.str();
777
- }
778
-
779
- void
780
- DistinguishedName::unescape()
781
- {
782
- for(list< pair<string, string> >::const_iterator q = _rdns.begin(); q != _rdns.end(); ++q)
783
- {
784
- pair<string, string> rdn = *q;
785
- rdn.second = RFC2253::unescape(rdn.second);
786
- _unescaped.push_back(rdn);
787
- }
788
- }
789
-
790
- PublicKey::PublicKey(const CertificatePtr& cert, KeyRef key) :
791
- _cert(cert),
792
- _key(key)
793
- {
794
- if(!_key)
795
- {
796
- throw IceUtil::IllegalArgumentException(__FILE__, __LINE__, "Invalid key reference");
797
- }
798
- }
799
-
800
- PublicKey::~PublicKey()
801
- {
802
- #ifndef ICE_USE_SCHANNEL
803
- if(_key)
804
- {
805
- # if defined(ICE_USE_SECURE_TRANSPORT)
806
- CFRelease(_key);
807
- # else
808
- EVP_PKEY_free(_key);
809
- # endif
810
- }
811
- #endif
812
- }
813
-
814
- KeyRef
815
- PublicKey::key() const
816
- {
817
- return _key;
818
- }
819
-
820
- //
821
- // The caller is responsible for incrementing the reference count.
822
- //
823
- Certificate::Certificate(X509CertificateRef cert) : _cert(cert)
824
- #ifdef ICE_USE_SCHANNEL
825
- , _certInfo(0)
826
- #endif
827
- {
828
- if(!_cert)
829
- {
830
- throw IceUtil::IllegalArgumentException(__FILE__, __LINE__, "Invalid certificate reference");
831
- }
832
-
833
- #ifdef ICE_USE_SCHANNEL
834
- try
835
- {
836
- //
837
- // Decode certificate info
838
- //
839
- DWORD length = 0;
840
- if(!CryptDecodeObjectEx(X509_ASN_ENCODING, X509_CERT_TO_BE_SIGNED, _cert->ToBeSigned.pbData,
841
- _cert->ToBeSigned.cbData, CRYPT_DECODE_ALLOC_FLAG, 0, &_certInfo, &length))
842
- {
843
- throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
844
- }
845
- }
846
- catch(...)
847
- {
848
- LocalFree(_cert);
849
- _cert = 0;
850
- throw;
851
- }
852
- #endif
853
- }
854
-
855
- Certificate::~Certificate()
856
- {
857
- if(_cert)
858
- {
859
- #if defined(ICE_USE_SECURE_TRANSPORT)
860
- CFRelease(_cert);
861
- #elif defined(ICE_USE_SCHANNEL)
862
- LocalFree(_cert);
863
- if(_certInfo)
864
- {
865
- LocalFree(_certInfo);
866
- }
867
- #else
868
- X509_free(_cert);
869
- #endif
870
- }
871
- }
872
-
873
- CertificatePtr
874
- Certificate::load(const string& file)
875
- {
876
- #if defined(ICE_USE_SECURE_TRANSPORT)
877
- return new Certificate(loadCertificate(file));
878
- #elif defined(ICE_USE_SCHANNEL)
879
- CERT_SIGNED_CONTENT_INFO* cert;
880
- loadCertificate(&cert, file);
881
- return new Certificate(cert);
882
- #else
883
- BIO *cert = BIO_new(BIO_s_file());
884
- if(BIO_read_filename(cert, file.c_str()) <= 0)
885
- {
886
- BIO_free(cert);
887
- throw CertificateReadException(__FILE__, __LINE__, "error opening file");
888
- }
889
-
890
- X509CertificateRef x = PEM_read_bio_X509_AUX(cert, NULL, NULL, NULL);
891
- if(x == NULL)
892
- {
893
- BIO_free(cert);
894
- throw CertificateReadException(__FILE__, __LINE__, "error reading file:\n" + getSslErrors(false));
895
- }
896
- BIO_free(cert);
897
- return new Certificate(x);
898
- #endif
899
- }
900
-
901
- CertificatePtr
902
- Certificate::decode(const string& encoding)
903
- {
904
- #if defined(ICE_USE_SECURE_TRANSPORT)
905
- CFDataRef data = CFDataCreateWithBytesNoCopy(kCFAllocatorDefault, reinterpret_cast<const UInt8*>(encoding.c_str()),
906
- encoding.size(), kCFAllocatorNull);
907
-
908
- SecExternalFormat format = kSecFormatUnknown;
909
- SecExternalItemType type = kSecItemTypeCertificate;
910
-
911
- SecItemImportExportKeyParameters params;
912
- memset(&params, 0, sizeof(params));
913
- params.version = SEC_KEY_IMPORT_EXPORT_PARAMS_VERSION;
914
-
915
- CFArrayRef items = 0;
916
- OSStatus err = SecItemImport(data, 0, &format, &type, 0, &params, 0, &items);
917
- CFRelease(data);
918
- if(err)
919
- {
920
- throw CertificateEncodingException(__FILE__, __LINE__, errorToString(err));
921
- }
922
-
923
- SecKeychainItemRef item = (SecKeychainItemRef)CFArrayGetValueAtIndex(items, 0);
924
- CFRetain(item);
925
- CFRelease(items);
926
-
927
- assert(SecCertificateGetTypeID() == CFGetTypeID(item));
928
- return new Certificate((SecCertificateRef)item);
929
- #elif defined(ICE_USE_SCHANNEL)
930
- CERT_SIGNED_CONTENT_INFO* cert;
931
- loadCertificate(&cert, encoding.c_str(), static_cast<DWORD>(encoding.size()));
932
- return new Certificate(cert);
933
- #else
934
- BIO *cert = BIO_new_mem_buf(static_cast<void*>(const_cast<char*>(&encoding[0])), static_cast<int>(encoding.size()));
935
- X509CertificateRef x = PEM_read_bio_X509_AUX(cert, NULL, NULL, NULL);
936
- if(x == NULL)
937
- {
938
- BIO_free(cert);
939
- throw CertificateEncodingException(__FILE__, __LINE__, getSslErrors(false));
940
- }
941
- BIO_free(cert);
942
- return new Certificate(x);
943
- #endif
944
- }
945
-
946
- bool
947
- Certificate::operator==(const Certificate& other) const
948
- {
949
- #if defined(ICE_USE_SECURE_TRANSPORT)
950
- return CFEqual(_cert, other._cert);
951
- #elif defined(ICE_USE_SCHANNEL)
952
- return CertCompareCertificate(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, _certInfo, other._certInfo);
953
- #else
954
- return X509_cmp(_cert, other._cert) == 0;
955
- #endif
956
- }
957
-
958
- bool
959
- Certificate::operator!=(const Certificate& other) const
960
- {
961
- #if defined(ICE_USE_SECURE_TRANSPORT)
962
- return !CFEqual(_cert, other._cert);
963
- #elif defined(ICE_USE_SCHANNEL)
964
- return !CertCompareCertificate(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, _certInfo, other._certInfo);
965
- #else
966
- return X509_cmp(_cert, other._cert) != 0;
967
- #endif
968
- }
969
-
970
- PublicKeyPtr
971
- Certificate::getPublicKey() const
972
- {
973
- #if defined(ICE_USE_SECURE_TRANSPORT)
974
- SecKeyRef key;
975
- OSStatus err = SecCertificateCopyPublicKey(_cert, &key);
976
- if(err)
977
- {
978
- throw CertificateEncodingException(__FILE__, __LINE__, errorToString(err));
979
- }
980
- return new PublicKey(const_cast<Certificate*>(this), key);
981
- #elif defined(ICE_USE_SCHANNEL)
982
- return new PublicKey(const_cast<Certificate*>(this), &_certInfo->SubjectPublicKeyInfo);
983
- #else
984
- return new PublicKey(const_cast<Certificate*>(this), X509_get_pubkey(_cert));
985
- #endif
986
- }
987
-
988
- bool
989
- Certificate::verify(const CertificatePtr& cert) const
990
- {
991
- #if defined(ICE_USE_SECURE_TRANSPORT)
992
- //
993
- // We first check if the given certificate subject match
994
- // our certificate issuer. Otherwhise when use SecTrustEvaluate
995
- // and check a certificate against itself will always return
996
- // that is valid.
997
- //
998
- bool valid = false;
999
-
1000
- CFErrorRef error = 0;
1001
- CFDataRef issuer = 0;
1002
- CFDataRef subject = 0;
1003
-
1004
- try
1005
- {
1006
- issuer = SecCertificateCopyNormalizedIssuerContent(_cert, &error);
1007
- if(error)
1008
- {
1009
- throw CertificateEncodingException(__FILE__, __LINE__, error);
1010
- }
1011
-
1012
- subject = SecCertificateCopyNormalizedSubjectContent(cert->getCert(), &error);
1013
- if(error)
1014
- {
1015
- throw CertificateEncodingException(__FILE__, __LINE__, error);
1016
- }
1017
- }
1018
- catch(...)
1019
- {
1020
- if(issuer)
1021
- {
1022
- CFRelease(issuer);
1023
- }
1024
-
1025
- if(subject)
1026
- {
1027
- CFRelease(subject);
1028
- }
1029
- throw;
1030
- }
1031
-
1032
- //
1033
- // The certificate issuer must match the CA subject.
1034
- //
1035
- valid = CFEqual(issuer, subject);
1036
-
1037
- CFRelease(issuer);
1038
- CFRelease(subject);
1039
-
1040
- if(valid)
1041
- {
1042
- SecPolicyRef policy = 0;
1043
- SecTrustRef trust = 0;
1044
- try
1045
- {
1046
- SecPolicyRef policy = SecPolicyCreateBasicX509();
1047
- SecTrustResultType trustResult = kSecTrustResultInvalid;
1048
- SecTrustRef trust;
1049
- OSStatus err = 0;
1050
-
1051
- if((err = SecTrustCreateWithCertificates(_cert, policy, &trust)))
1052
- {
1053
- throw CertificateEncodingException(__FILE__, __LINE__, errorToString(err));
1054
- }
1055
-
1056
- SecCertificateRef certs[1] = { cert->getCert() };
1057
-
1058
- CFArrayRef anchorCertificates = CFArrayCreate(kCFAllocatorDefault, (const void**)&certs, 1,
1059
- &kCFTypeArrayCallBacks);
1060
- err = SecTrustSetAnchorCertificates(trust, anchorCertificates);
1061
- CFRelease(anchorCertificates);
1062
-
1063
- if(err)
1064
- {
1065
- throw CertificateEncodingException(__FILE__, __LINE__, errorToString(err));
1066
- }
1067
-
1068
- if((err = SecTrustEvaluate(trust, &trustResult)))
1069
- {
1070
- throw CertificateEncodingException(__FILE__, __LINE__, errorToString(err));
1071
- }
1072
-
1073
- valid = trustResult == kSecTrustResultUnspecified;
1074
-
1075
- CFRelease(policy);
1076
- CFRelease(trust);
1077
- }
1078
- catch(...)
1079
- {
1080
- if(policy)
1081
- {
1082
- CFRelease(policy);
1083
- }
1084
-
1085
- if(trust)
1086
- {
1087
- CFRelease(trust);
1088
- }
1089
- throw;
1090
- }
1091
- }
1092
- return valid;
1093
- #elif defined(ICE_USE_SCHANNEL)
1094
- BYTE* buffer = 0;
1095
- DWORD length = 0;
1096
- if(!CryptEncodeObjectEx(X509_ASN_ENCODING, X509_CERT, _cert, CRYPT_ENCODE_ALLOC_FLAG , 0, &buffer, &length))
1097
- {
1098
- throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
1099
- }
1100
-
1101
- bool result = CryptVerifyCertificateSignature(0, X509_ASN_ENCODING, buffer, length, cert->getPublicKey()->key());
1102
- LocalFree(buffer);
1103
- return result;
1104
- #else
1105
- return X509_verify(_cert, cert->getPublicKey()->key()) > 0;
1106
- #endif
1107
- }
1108
-
1109
- #ifdef ICE_USE_OPENSSL
1110
- bool
1111
- Certificate::verify(const PublicKeyPtr& key) const
1112
- {
1113
- return X509_verify(_cert, key->key()) > 0;
1114
- }
1115
- #endif
1116
-
1117
- string
1118
- Certificate::encode() const
1119
- {
1120
- #if defined(ICE_USE_SECURE_TRANSPORT)
1121
- CFDataRef exported;
1122
- OSStatus err = SecItemExport(_cert, kSecFormatPEMSequence, kSecItemPemArmour, 0, &exported);
1123
- if(err != noErr)
1124
- {
1125
- throw CertificateEncodingException(__FILE__, __LINE__, errorToString(err));
1126
- }
1127
- string data(reinterpret_cast<const char*>(CFDataGetBytePtr(exported)), CFDataGetLength(exported));
1128
- CFRelease(exported);
1129
- return data;
1130
- #elif defined(ICE_USE_SCHANNEL)
1131
- string s;
1132
- DWORD length = 0;
1133
- BYTE* buffer = 0;
1134
- try
1135
- {
1136
- if(!CryptEncodeObjectEx(X509_ASN_ENCODING, X509_CERT, _cert, CRYPT_ENCODE_ALLOC_FLAG , 0, &buffer, &length))
1137
- {
1138
- throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
1139
- }
1140
-
1141
- DWORD encodedLength = 0;
1142
- if(!CryptBinaryToString(buffer, length, CRYPT_STRING_BASE64HEADER | CRYPT_STRING_NOCR, 0, &encodedLength))
1143
- {
1144
- throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
1145
- }
1146
-
1147
- std::vector<char> encoded;
1148
- encoded.resize(encodedLength);
1149
- if(!CryptBinaryToString(buffer, length, CRYPT_STRING_BASE64HEADER | CRYPT_STRING_NOCR, &encoded[0],
1150
- &encodedLength))
1151
- {
1152
- throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
1153
- }
1154
- LocalFree(buffer);
1155
- buffer = 0;
1156
- s.assign(&encoded[0]);
1157
- }
1158
- catch(...)
1159
- {
1160
- if(buffer)
1161
- {
1162
- LocalFree(buffer);
1163
- }
1164
- throw;
1165
- }
1166
- return s;
1167
- #else
1168
- BIO* out = BIO_new(BIO_s_mem());
1169
- int i = PEM_write_bio_X509_AUX(out, _cert);
1170
- if(i <= 0)
1171
- {
1172
- BIO_free(out);
1173
- throw CertificateEncodingException(__FILE__, __LINE__, getSslErrors(false));
1174
- }
1175
- BUF_MEM* p;
1176
- BIO_get_mem_ptr(out, &p);
1177
- string result = string(p->data, p->length);
1178
- BIO_free(out);
1179
- return result;
1180
- #endif
1181
- }
1182
-
1183
- bool
1184
- Certificate::checkValidity() const
1185
- {
1186
- IceUtil::Time now = IceUtil::Time::now();
1187
- return now > getNotBefore() && now <= getNotAfter();
1188
- }
1189
-
1190
- bool
1191
- Certificate::checkValidity(const IceUtil::Time& now) const
1192
- {
1193
- return now > getNotBefore() && now <= getNotAfter();
1194
- }
1195
-
1196
- IceUtil::Time
1197
- Certificate::getNotAfter() const
1198
- {
1199
- #if defined(ICE_USE_SECURE_TRANSPORT)
1200
- return getX509Date(_cert, kSecOIDX509V1ValidityNotAfter);
1201
- #elif defined(ICE_USE_SCHANNEL)
1202
- return filetimeToTime(_certInfo->NotAfter);
1203
- #else
1204
- return ASMUtcTimeToIceUtilTime(X509_get_notAfter(_cert));
1205
- #endif
1206
- }
1207
-
1208
- IceUtil::Time
1209
- Certificate::getNotBefore() const
1210
- {
1211
- #if defined(ICE_USE_SECURE_TRANSPORT)
1212
- return getX509Date(_cert, kSecOIDX509V1ValidityNotBefore);
1213
- #elif defined(ICE_USE_SCHANNEL)
1214
- return filetimeToTime(_certInfo->NotBefore);
1215
- #else
1216
- return ASMUtcTimeToIceUtilTime(X509_get_notBefore(_cert));
1217
- #endif
1218
- }
1219
-
1220
- string
1221
- Certificate::getSerialNumber() const
1222
- {
1223
- #if defined(ICE_USE_SECURE_TRANSPORT)
1224
- return getX509String(_cert, kSecOIDX509V1SerialNumber);
1225
- #elif defined(ICE_USE_SCHANNEL)
1226
- ostringstream os;
1227
- for(int i = _certInfo->SerialNumber.cbData - 1; i >= 0; --i)
1228
- {
1229
- unsigned char c = _certInfo->SerialNumber.pbData[i];
1230
- os.fill('0');
1231
- os.width(2);
1232
- os << hex << (int)c;
1233
- if(i)
1234
- {
1235
- os << ' ';
1236
- }
1237
- }
1238
- return IceUtilInternal::toUpper(os.str());
1239
- #else
1240
- BIGNUM* bn = ASN1_INTEGER_to_BN(X509_get_serialNumber(_cert), 0);
1241
- char* dec = BN_bn2dec(bn);
1242
- string result = dec;
1243
- OPENSSL_free(dec);
1244
- BN_free(bn);
1245
-
1246
- return result;
1247
- #endif
1248
- }
1249
-
1250
- //string
1251
- //Certificate::getSigAlgName() const
1252
- //{
1253
- //}
1254
-
1255
- //string
1256
- //Certificate::getSigAlgOID() const
1257
- //{
1258
- //}
1259
-
1260
- DistinguishedName
1261
- Certificate::getIssuerDN() const
1262
- {
1263
- #if defined(ICE_USE_SECURE_TRANSPORT)
1264
- return getX509Name(_cert, kSecOIDX509V1IssuerName);
1265
- #elif defined(ICE_USE_SCHANNEL)
1266
- return DistinguishedName(certNameToString(&_certInfo->Issuer));
1267
- #else
1268
- return DistinguishedName(RFC2253::parseStrict(convertX509NameToString(X509_get_issuer_name(_cert))));
1269
- #endif
1270
- }
1271
-
1272
- vector<pair<int, string> >
1273
- Certificate::getIssuerAlternativeNames()
1274
- {
1275
- #if defined(ICE_USE_SECURE_TRANSPORT)
1276
- return getX509AltName(_cert, kSecOIDIssuerAltName);
1277
- #elif defined(ICE_USE_SCHANNEL)
1278
- return certificateAltNames(_certInfo, szOID_ISSUER_ALT_NAME2);
1279
- #else
1280
- return convertGeneralNames(reinterpret_cast<GENERAL_NAMES*>(X509_get_ext_d2i(_cert, NID_issuer_alt_name, 0, 0)));
1281
- #endif
1282
- }
1283
-
1284
- DistinguishedName
1285
- Certificate::getSubjectDN() const
1286
- {
1287
- #if defined(ICE_USE_SECURE_TRANSPORT)
1288
- return getX509Name(_cert, kSecOIDX509V1SubjectName);
1289
- #elif defined(ICE_USE_SCHANNEL)
1290
- return DistinguishedName(certNameToString(&_certInfo->Subject));
1291
- #else
1292
- return DistinguishedName(RFC2253::parseStrict(convertX509NameToString(X509_get_subject_name(_cert))));
1293
- #endif
1294
- }
1295
-
1296
- vector<pair<int, string> >
1297
- Certificate::getSubjectAlternativeNames()
1298
- {
1299
- #if defined(ICE_USE_SECURE_TRANSPORT)
1300
- return getX509AltName(_cert, kSecOIDSubjectAltName);
1301
- #elif defined(ICE_USE_SCHANNEL)
1302
- return certificateAltNames(_certInfo, szOID_SUBJECT_ALT_NAME2);
1303
- #else
1304
- return convertGeneralNames(reinterpret_cast<GENERAL_NAMES*>(X509_get_ext_d2i(_cert, NID_subject_alt_name, 0, 0)));
1305
- #endif
1306
- }
1307
-
1308
- int
1309
- Certificate::getVersion() const
1310
- {
1311
- #if defined(ICE_USE_SECURE_TRANSPORT)
1312
- return atoi(getX509String(_cert, kSecOIDX509V1Version).c_str()) - 1;
1313
- #elif defined(ICE_USE_SCHANNEL)
1314
- return _certInfo->dwVersion;
1315
- #else
1316
- return static_cast<int>(X509_get_version(_cert));
1317
- #endif
1318
- }
1319
-
1320
- string
1321
- Certificate::toString() const
1322
- {
1323
- ostringstream os;
1324
- os << "serial: " << getSerialNumber() << "\n";
1325
- os << "issuer: " << string(getIssuerDN()) << "\n";
1326
- os << "subject: " << string(getSubjectDN()) << "\n";
1327
- os << "notBefore: " << getNotBefore().toDateTime() << "\n";
1328
- os << "notAfter: " << getNotAfter().toDateTime();
1329
- return os.str();
1330
- }
1331
-
1332
- X509CertificateRef
1333
- Certificate::getCert() const
1334
- {
1335
- return _cert;
1336
- }