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,6 +1,6 @@
1
1
  // **********************************************************************
2
2
  //
3
- // Copyright (c) 2003-2018 ZeroC, Inc. All rights reserved.
3
+ // Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
4
4
  //
5
5
  // This copy of Ice is licensed to you under the terms described in the
6
6
  // ICE_LICENSE file included in this distribution.
@@ -15,93 +15,123 @@
15
15
  #include <Ice/ProtocolPluginFacade.h>
16
16
  #include <Ice/ProtocolInstance.h>
17
17
  #include <Ice/LocalException.h>
18
+ #include <Ice/RegisterPlugins.h>
18
19
 
19
20
  using namespace std;
20
21
  using namespace Ice;
21
22
  using namespace IceSSL;
22
23
 
23
- //
24
- // Plug-in factory function.
25
- //
26
- extern "C"
24
+ #ifndef ICE_CPP11_MAPPING
25
+ CertificateVerifier::~CertificateVerifier()
27
26
  {
28
-
29
- ICE_SSL_API Ice::Plugin*
30
- createIceSSL(const CommunicatorPtr& communicator, const string& /*name*/, const StringSeq& /*args*/)
31
- {
32
- return new PluginI(communicator);
27
+ // Out of line to avoid weak vtable
33
28
  }
34
29
 
35
- }
36
-
37
- namespace Ice
38
- {
39
-
40
- ICE_SSL_API void
41
- registerIceSSL(bool loadOnInitialize)
30
+ PasswordPrompt::~PasswordPrompt()
42
31
  {
43
- Ice::registerPluginFactory("IceSSL", createIceSSL, loadOnInitialize);
32
+ // Out of line to avoid weak vtable
44
33
  }
34
+ #endif
45
35
 
36
+ IceSSL::Plugin::~Plugin()
37
+ {
38
+ // Out of line to avoid weak vtable
46
39
  }
47
40
 
48
41
  //
49
42
  // Plugin implementation.
50
43
  //
51
- IceSSL::PluginI::PluginI(const Ice::CommunicatorPtr& com)
44
+ PluginI::PluginI(const Ice::CommunicatorPtr& com, const SSLEnginePtr& engine) :
45
+ _engine(engine)
52
46
  {
53
- #if defined(ICE_USE_SECURE_TRANSPORT)
54
- _engine = new SecureTransportEngine(com);
55
- #elif defined(ICE_USE_SCHANNEL)
56
- _engine = new SChannelEngine(com);
57
- #else
58
- _engine = new OpenSSLEngine(com);
59
- #endif
60
-
61
47
  //
62
48
  // Register the endpoint factory. We have to do this now, rather
63
49
  // than in initialize, because the communicator may need to
64
50
  // interpret proxies before the plug-in is fully initialized.
65
51
  //
66
- IceInternal::EndpointFactoryPtr sslFactory = new EndpointFactoryI(new Instance(_engine, EndpointType, "ssl"));
67
- IceInternal::getProtocolPluginFacade(com)->addEndpointFactory(sslFactory);
52
+ InstancePtr instance = new Instance(_engine, SSLEndpointType, "ssl"); // SSL based on TCP
53
+ IceInternal::getProtocolPluginFacade(com)->addEndpointFactory(new EndpointFactoryI(instance, TCPEndpointType));
68
54
  }
69
55
 
70
56
  void
71
- IceSSL::PluginI::initialize()
57
+ PluginI::initialize()
72
58
  {
73
59
  _engine->initialize();
74
60
  }
75
61
 
76
62
  void
77
- IceSSL::PluginI::destroy()
63
+ PluginI::destroy()
78
64
  {
79
65
  _engine->destroy();
80
66
  _engine = 0;
81
67
  }
82
68
 
69
+ #ifdef ICE_CPP11_MAPPING
83
70
  void
84
- IceSSL::PluginI::setCertificateVerifier(const CertificateVerifierPtr& verifier)
71
+ PluginI::setCertificateVerifier(std::function<bool(const std::shared_ptr<IceSSL::ConnectionInfo>&)> verifier)
72
+ {
73
+ if(verifier)
74
+ {
75
+ _engine->setCertificateVerifier(make_shared<CertificateVerifier>(std::move(verifier)));
76
+ }
77
+ else
78
+ {
79
+ _engine->setCertificateVerifier(nullptr);
80
+ }
81
+ }
82
+ #else
83
+ void
84
+ PluginI::setCertificateVerifier(const CertificateVerifierPtr& verifier)
85
85
  {
86
86
  _engine->setCertificateVerifier(verifier);
87
87
  }
88
+ #endif
88
89
 
90
+ #ifdef ICE_CPP11_MAPPING
89
91
  void
90
- IceSSL::PluginI::setPasswordPrompt(const PasswordPromptPtr& prompt)
92
+ PluginI::setPasswordPrompt(std::function<std::string()> prompt)
93
+ {
94
+ if(prompt)
95
+ {
96
+ _engine->setPasswordPrompt(make_shared<PasswordPrompt>(std::move(prompt)));
97
+ }
98
+ else
99
+ {
100
+ _engine->setPasswordPrompt(nullptr);
101
+ }
102
+ }
103
+ #else
104
+ void
105
+ PluginI::setPasswordPrompt(const PasswordPromptPtr& prompt)
91
106
  {
92
107
  _engine->setPasswordPrompt(prompt);
93
108
  }
109
+ #endif
94
110
 
95
- #ifdef ICE_USE_OPENSSL
96
- void
97
- IceSSL::PluginI::setContext(SSL_CTX* context)
111
+ extern "C"
112
+ {
113
+
114
+ ICESSL_API Ice::Plugin*
115
+ createIceSSL(const CommunicatorPtr&, const string&, const StringSeq&);
116
+
117
+ }
118
+
119
+ namespace Ice
120
+ {
121
+
122
+ ICESSL_API void
123
+ registerIceSSL(bool loadOnInitialize)
98
124
  {
99
- _engine->context(context);
125
+ Ice::registerPluginFactory("IceSSL", createIceSSL, loadOnInitialize);
100
126
  }
101
127
 
102
- SSL_CTX*
103
- IceSSL::PluginI::getContext()
128
+ }
129
+
130
+ //
131
+ // Objective-C function to allow Objective-C programs to register plugin.
132
+ //
133
+ extern "C" ICESSL_API void
134
+ ICEregisterIceSSL(bool loadOnInitialize)
104
135
  {
105
- return _engine->context();
136
+ Ice::registerIceSSL(loadOnInitialize);
106
137
  }
107
- #endif
@@ -1,14 +1,14 @@
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_PLUGIN_I_H
11
- #define ICE_SSL_PLUGIN_I_H
10
+ #ifndef ICESSL_PLUGIN_I_H
11
+ #define ICESSL_PLUGIN_I_H
12
12
 
13
13
  #include <IceSSL/Plugin.h>
14
14
  #include <IceSSL/SSLEngineF.h>
@@ -17,12 +17,11 @@
17
17
  namespace IceSSL
18
18
  {
19
19
 
20
- class PluginI : public IceSSL::Plugin
20
+ class ICESSL_API PluginI : public virtual IceSSL::Plugin
21
21
  {
22
22
  public:
23
23
 
24
- PluginI(const Ice::CommunicatorPtr&);
25
-
24
+ PluginI(const Ice::CommunicatorPtr&, const IceSSL::SSLEnginePtr&);
26
25
  //
27
26
  // From Ice::Plugin.
28
27
  //
@@ -32,23 +31,19 @@ public:
32
31
  //
33
32
  // From IceSSL::Plugin.
34
33
  //
34
+ #ifdef ICE_CPP11_MAPPING
35
+ virtual void setCertificateVerifier(std::function<bool(const std::shared_ptr<ConnectionInfo>&)>);
36
+ virtual void setPasswordPrompt(std::function<std::string()>);
37
+ #else
35
38
  virtual void setCertificateVerifier(const CertificateVerifierPtr&);
36
39
  virtual void setPasswordPrompt(const PasswordPromptPtr&);
37
-
38
- #ifdef ICE_USE_OPENSSL
39
- virtual void setContext(SSL_CTX*);
40
- virtual SSL_CTX* getContext();
41
40
  #endif
42
41
 
43
- private:
42
+ virtual CertificatePtr load(const std::string&) const = 0;
43
+ virtual CertificatePtr decode(const std::string&) const = 0;
44
+ protected:
44
45
 
45
- #if defined(ICE_USE_SECURE_TRANSPORT)
46
- SecureTransportEnginePtr _engine;
47
- #elif defined(ICE_USE_SCHANNEL)
48
- SChannelEnginePtr _engine;
49
- #else
50
- OpenSSLEnginePtr _engine;
51
- #endif
46
+ SSLEnginePtr _engine;
52
47
  };
53
48
 
54
49
  }
@@ -1,6 +1,6 @@
1
1
  // **********************************************************************
2
2
  //
3
- // Copyright (c) 2003-2018 ZeroC, Inc. All rights reserved.
3
+ // Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
4
4
  //
5
5
  // This copy of Ice is licensed to you under the terms described in the
6
6
  // ICE_LICENSE file included in this distribution.
@@ -37,8 +37,8 @@ static string parsePair(const string&, size_t&);
37
37
  static string parseHexPair(const string&, size_t&, bool);
38
38
  static void eatWhite(const string&, size_t&);
39
39
 
40
- IceSSL::RFC2253::RDNEntrySeq
41
- IceSSL::RFC2253::parse(const string& data)
40
+ RFC2253::RDNEntrySeq
41
+ RFC2253::parse(const string& data)
42
42
  {
43
43
  RDNEntrySeq results;
44
44
  RDNEntry current;
@@ -82,8 +82,8 @@ IceSSL::RFC2253::parse(const string& data)
82
82
  return results;
83
83
  }
84
84
 
85
- IceSSL::RFC2253::RDNSeq
86
- IceSSL::RFC2253::parseStrict(const string& data)
85
+ RFC2253::RDNSeq
86
+ RFC2253::parseStrict(const string& data)
87
87
  {
88
88
  RDNSeq results;
89
89
  size_t pos = 0;
@@ -104,7 +104,7 @@ IceSSL::RFC2253::parseStrict(const string& data)
104
104
  }
105
105
 
106
106
  string
107
- IceSSL::RFC2253::unescape(const string& data)
107
+ RFC2253::unescape(const string& data)
108
108
  {
109
109
  if(data.size() == 0)
110
110
  {
@@ -271,7 +271,7 @@ parseAttributeType(const string& data, size_t& pos)
271
271
  //
272
272
  // Here we must also check for "oid." and "OID." before parsing
273
273
  // according to the ALPHA KEYCHAR* rule.
274
- //
274
+ //
275
275
  // First the OID case.
276
276
  //
277
277
  if(IceUtilInternal::isDigit(data[pos]) ||
@@ -318,7 +318,7 @@ parseAttributeType(const string& data, size_t& pos)
318
318
  result += data[pos];
319
319
  ++pos;
320
320
  // 1* KEYCHAR
321
- while(pos < data.size() &&
321
+ while(pos < data.size() &&
322
322
  (IceUtilInternal::isAlpha(data[pos]) || IceUtilInternal::isDigit(data[pos]) || data[pos] == '-'))
323
323
  {
324
324
  result += data[pos];
@@ -448,7 +448,7 @@ parsePair(const string& data, size_t& pos)
448
448
  }
449
449
  return parseHexPair(data, pos, false);
450
450
  }
451
-
451
+
452
452
  //
453
453
  // RFC 2253
454
454
  // hexpair = hexchar hexchar
@@ -494,48 +494,3 @@ eatWhite(const string& data, size_t& pos)
494
494
  ++pos;
495
495
  }
496
496
  }
497
-
498
- #ifdef never
499
- void
500
- print(const list< list<pair<string, string> > >& r)
501
- {
502
- if(r.size() > 1)
503
- {
504
- cout << "result: " << r.size() << " DNs" << endl;
505
- }
506
- for(list< list<pair<string, string> > >::const_iterator q = r.begin(); q != r.end(); ++q)
507
- {
508
- list<pair<string, string> > l = *q;
509
- cout << "result: " << l.size() << " RDNs" << endl;
510
- for(list<pair<string, string> >::const_iterator p = l.begin(); p != l.end(); ++p)
511
- {
512
- cout << "\t\"" << p->first << "\"=\"" << p->second << "\"" << endl;
513
- }
514
- }
515
- }
516
-
517
- int
518
- main()
519
- {
520
- string examples[] = {
521
- "CN=Steve Kille,O=Isode Limited,C=GB",
522
- "OU=Sales+CN=J. Smith,O=Widget Inc.,C=US",
523
- "CN=L. Eagle,O=Sue\\, Grabbit and Runn,C=GB",
524
- "CN=Before\\0DAfter,O=Test,C=GB",
525
- "1.3.6.1.4.1.1466.0=#04024869,O=Test,C=GB",
526
- "SN=Lu\\C4\\8Di\\C4\\87",
527
- };
528
- try
529
- {
530
- for(int i = 0; i < sizeof(examples)/sizeof(examples[0]); ++i)
531
- {
532
- cout << "string: " << examples[i] << endl;
533
- print(RFC2253::parse(examples[i]));
534
- }
535
- }
536
- catch(const RFC2253::ParseException& e)
537
- {
538
- cout << "error: " << e.reason << endl;
539
- }
540
- }
541
- #endif
@@ -1,14 +1,14 @@
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_RFC_2253_H
11
- #define ICE_SSL_RFC_2253_H
10
+ #ifndef ICESSL_RFC_2253_H
11
+ #define ICESSL_RFC_2253_H
12
12
 
13
13
  #include <IceUtil/Config.h>
14
14
  #include <list>
@@ -33,7 +33,7 @@ namespace RFC2253
33
33
 
34
34
  typedef std::list< std::pair<std::string, std::string> > RDNSeq;
35
35
 
36
- struct RDNEntry
36
+ struct ICESSL_API RDNEntry
37
37
  {
38
38
  RDNSeq rdn;
39
39
  bool negate;
@@ -46,7 +46,7 @@ typedef std::list<RDNEntry> RDNEntrySeq;
46
46
  // The function returns a list of RDNEntry structures. Any failure in
47
47
  // parsing results in a ParseException being thrown.
48
48
  //
49
- RDNEntrySeq parse(const std::string&);
49
+ ICESSL_API RDNEntrySeq parse(const std::string&);
50
50
 
51
51
  //
52
52
  // RDNs are separated with ',' and ';'.
@@ -54,12 +54,12 @@ RDNEntrySeq parse(const std::string&);
54
54
  // This function returns a list of RDN pairs. Any failure in parsing
55
55
  // results in a ParseException being thrown.
56
56
  //
57
- RDNSeq parseStrict(const std::string&);
57
+ ICESSL_API RDNSeq parseStrict(const std::string&);
58
58
 
59
59
  //
60
60
  // Unescape the string.
61
61
  //
62
- std::string unescape(const std::string&);
62
+ ICESSL_API std::string unescape(const std::string&);
63
63
 
64
64
  }
65
65
  }
@@ -0,0 +1,585 @@
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/SChannel.h>
12
+ #include <IceSSL/CertificateI.h>
13
+ #include <IceSSL/Util.h>
14
+ #include <Ice/StringUtil.h>
15
+ #include <Ice/StringConverter.h>
16
+
17
+ #include <wincrypt.h>
18
+
19
+ #include <string>
20
+ #include <vector>
21
+
22
+ using namespace std;
23
+ using namespace Ice;
24
+ using namespace IceSSL;
25
+
26
+ namespace
27
+ {
28
+
29
+ class CertInfoHolder : public IceUtil::Shared
30
+ {
31
+ public:
32
+
33
+ CertInfoHolder(CERT_INFO* v) : _certInfo(v)
34
+ {
35
+ }
36
+
37
+ virtual ~CertInfoHolder()
38
+ {
39
+ LocalFree(_certInfo);
40
+ }
41
+
42
+ private:
43
+
44
+ CERT_INFO* _certInfo;
45
+ };
46
+ typedef IceUtil::Handle<CertInfoHolder> CertInfoHolderPtr;
47
+
48
+ class SCHannelX509ExtensionI : public X509Extension
49
+ {
50
+
51
+ public:
52
+
53
+ SCHannelX509ExtensionI(CERT_EXTENSION , const string&, const CertInfoHolderPtr&);
54
+ virtual bool isCritical() const;
55
+ virtual string getOID() const;
56
+ virtual vector<Ice::Byte> getData() const;
57
+
58
+ private:
59
+
60
+ CERT_EXTENSION _extension;
61
+ string _oid;
62
+ CertInfoHolderPtr _certInfo; // Keep a reference on the CERT_INFO struct that holds the extension
63
+ };
64
+
65
+ class SChannelCertificateI : public SChannel::Certificate,
66
+ public CertificateI,
67
+ public IceUtil::Mutex
68
+ {
69
+ public:
70
+
71
+ SChannelCertificateI(CERT_SIGNED_CONTENT_INFO*);
72
+ ~SChannelCertificateI();
73
+
74
+ virtual bool operator==(const IceSSL::Certificate&) const;
75
+
76
+ virtual vector<Ice::Byte> getAuthorityKeyIdentifier() const;
77
+ virtual vector<Ice::Byte> getSubjectKeyIdentifier() const;
78
+ virtual bool verify(const CertificatePtr&) const;
79
+ virtual string encode() const;
80
+
81
+ #ifdef ICE_CPP11_MAPPING
82
+ virtual chrono::system_clock::time_point getNotAfter() const;
83
+ virtual chrono::system_clock::time_point getNotBefore() const;
84
+ #else
85
+ virtual IceUtil::Time getNotAfter() const;
86
+ virtual IceUtil::Time getNotBefore() const;
87
+ #endif
88
+ virtual string getSerialNumber() const;
89
+ virtual DistinguishedName getIssuerDN() const;
90
+ virtual vector<pair<int, string> > getIssuerAlternativeNames() const;
91
+ virtual DistinguishedName getSubjectDN() const;
92
+ virtual vector<pair<int, string> > getSubjectAlternativeNames() const;
93
+ virtual int getVersion() const;
94
+ virtual CERT_SIGNED_CONTENT_INFO* getCert() const;
95
+
96
+ protected:
97
+
98
+ virtual void loadX509Extensions() const;
99
+
100
+ private:
101
+
102
+ CERT_SIGNED_CONTENT_INFO* _cert;
103
+ CERT_INFO* _certInfo;
104
+ CertInfoHolderPtr _certInfoHolder;
105
+ };
106
+
107
+ const Ice::Long TICKS_PER_MSECOND = 10000LL;
108
+ const Ice::Long MSECS_TO_EPOCH = 11644473600000LL;
109
+
110
+ void
111
+ loadCertificate(PCERT_SIGNED_CONTENT_INFO* cert, const char* buffer, DWORD length)
112
+ {
113
+ DWORD outLength = length;
114
+ vector<BYTE> outBuffer;
115
+ outBuffer.resize(outLength);
116
+
117
+ if(!CryptStringToBinary(buffer, length, CRYPT_STRING_BASE64HEADER, &outBuffer[0], &outLength, 0, 0))
118
+ {
119
+ //
120
+ // Base64 data should always be bigger than binary
121
+ //
122
+ assert(GetLastError() != ERROR_MORE_DATA);
123
+ throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
124
+ }
125
+
126
+ DWORD decodedLeng = 0;
127
+ if(!CryptDecodeObjectEx(X509_ASN_ENCODING, X509_CERT, &outBuffer[0], outLength, CRYPT_DECODE_ALLOC_FLAG, 0,
128
+ cert, &decodedLeng))
129
+ {
130
+ throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
131
+ }
132
+ }
133
+
134
+ void
135
+ loadCertificate(PCERT_SIGNED_CONTENT_INFO* cert, const string& file)
136
+ {
137
+ vector<char> buffer;
138
+ readFile(file, buffer);
139
+ if(buffer.empty())
140
+ {
141
+ throw CertificateReadException(__FILE__, __LINE__, "certificate file " + file + " is empty");
142
+ }
143
+ loadCertificate(cert, &buffer[0], static_cast<DWORD>(buffer.size()));
144
+ }
145
+
146
+ # ifdef ICE_CPP11_MAPPING
147
+ chrono::system_clock::time_point
148
+ # else
149
+ IceUtil::Time
150
+ # endif
151
+ filetimeToTime(FILETIME ftime)
152
+ {
153
+ Ice::Long value = 0;
154
+ DWORD* dest = reinterpret_cast<DWORD*>(&value);
155
+ *dest++ = ftime.dwLowDateTime;
156
+ *dest = ftime.dwHighDateTime;
157
+
158
+ IceUtil::Time time = IceUtil::Time::milliSeconds((value / TICKS_PER_MSECOND) - MSECS_TO_EPOCH);
159
+
160
+ # ifdef ICE_CPP11_MAPPING
161
+ return chrono::system_clock::time_point(chrono::microseconds(time.toMicroSeconds()));
162
+ # else
163
+ return time;
164
+ # endif
165
+ }
166
+
167
+ string
168
+ certNameToString(CERT_NAME_BLOB* name)
169
+ {
170
+ assert(name);
171
+ DWORD length = 0;
172
+ if(!(length = CertNameToStr(X509_ASN_ENCODING, name, CERT_OID_NAME_STR|CERT_NAME_STR_REVERSE_FLAG, 0, 0)))
173
+ {
174
+ throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
175
+ }
176
+
177
+ vector<char> buffer(length);
178
+ if(!CertNameToStr(X509_ASN_ENCODING, name, CERT_OID_NAME_STR|CERT_NAME_STR_REVERSE_FLAG, &buffer[0], length))
179
+ {
180
+ throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
181
+ }
182
+
183
+ string s(&buffer[0]);
184
+ for(int i = 0; i < certificateOIDSSize; ++i)
185
+ {
186
+ const CertificateOID* certificateOID = &certificateOIDS[i];
187
+ assert(certificateOID);
188
+ const string name = string(certificateOID->name) + "=";
189
+ const string alias = string(certificateOID->alias) + "=";
190
+ size_t pos = 0;
191
+ while((pos = s.find(name, pos)) != string::npos)
192
+ {
193
+ s.replace(pos, name.size(), alias);
194
+ }
195
+ }
196
+ return s;
197
+ }
198
+
199
+ vector<pair<int, string> >
200
+ certificateAltNames(CERT_INFO* certInfo, LPCSTR altNameOID)
201
+ {
202
+ vector<pair<int, string> > altNames;
203
+
204
+ PCERT_EXTENSION extension = CertFindExtension(altNameOID, certInfo->cExtension, certInfo->rgExtension);
205
+ if(extension)
206
+ {
207
+ CERT_ALT_NAME_INFO* altName;
208
+ DWORD length = 0;
209
+ if(!CryptDecodeObjectEx(X509_ASN_ENCODING, X509_ALTERNATE_NAME, extension->Value.pbData,
210
+ extension->Value.cbData, CRYPT_DECODE_ALLOC_FLAG, 0, &altName, &length))
211
+ {
212
+ throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
213
+ }
214
+
215
+ for(DWORD i = 0; i < altName->cAltEntry; ++i)
216
+ {
217
+ CERT_ALT_NAME_ENTRY* entry = &altName->rgAltEntry[i];
218
+
219
+ switch(entry->dwAltNameChoice)
220
+ {
221
+ case CERT_ALT_NAME_RFC822_NAME:
222
+ {
223
+ altNames.push_back(make_pair(AltNameEmail, Ice::wstringToString(entry->pwszRfc822Name)));
224
+ break;
225
+ }
226
+ case CERT_ALT_NAME_DNS_NAME:
227
+ {
228
+ altNames.push_back(make_pair(AltNameDNS, Ice::wstringToString(entry->pwszDNSName)));
229
+ break;
230
+ }
231
+ case CERT_ALT_NAME_DIRECTORY_NAME:
232
+ {
233
+ altNames.push_back(make_pair(AltNameDirectory, certNameToString(&entry->DirectoryName)));
234
+ break;
235
+ }
236
+ case CERT_ALT_NAME_URL:
237
+ {
238
+ altNames.push_back(make_pair(AltNameURL, Ice::wstringToString(entry->pwszURL)));
239
+ break;
240
+ }
241
+ case CERT_ALT_NAME_IP_ADDRESS:
242
+ {
243
+ if(entry->IPAddress.cbData == 4)
244
+ {
245
+ //
246
+ // IPv4 address
247
+ //
248
+ ostringstream os;
249
+ Byte* src = reinterpret_cast<Byte*>(entry->IPAddress.pbData);
250
+ for(int j = 0; j < 4;)
251
+ {
252
+ int value = 0;
253
+ Byte* dest = reinterpret_cast<Byte*>(&value);
254
+ *dest = *src++;
255
+ os << value;
256
+ if(++j < 4)
257
+ {
258
+ os << ".";
259
+ }
260
+ }
261
+ altNames.push_back(make_pair(AltNAmeIP, os.str()));
262
+ }
263
+ //
264
+ // TODO IPv6 Address support.
265
+ //
266
+ break;
267
+ }
268
+ default:
269
+ {
270
+ // Not supported
271
+ break;
272
+ }
273
+ }
274
+ }
275
+ LocalFree(altName);
276
+ }
277
+ return altNames;
278
+ }
279
+
280
+ } // End anonymous namespace
281
+
282
+ SCHannelX509ExtensionI::SCHannelX509ExtensionI(CERT_EXTENSION extension, const string& oid, const CertInfoHolderPtr& ci) :
283
+ _extension(extension),
284
+ _oid(oid),
285
+ _certInfo(ci)
286
+ {
287
+ }
288
+
289
+ bool
290
+ SCHannelX509ExtensionI::isCritical() const
291
+ {
292
+ return _extension.fCritical != 0;
293
+ }
294
+
295
+ string
296
+ SCHannelX509ExtensionI::getOID() const
297
+ {
298
+ return _oid;
299
+ }
300
+
301
+ vector<Ice::Byte>
302
+ SCHannelX509ExtensionI::getData() const
303
+ {
304
+ vector<Ice::Byte> data;
305
+ data.resize(_extension.Value.cbData);
306
+ memcpy(&data[0], _extension.Value.pbData, _extension.Value.cbData);
307
+ return data;
308
+ }
309
+
310
+ SChannelCertificateI::SChannelCertificateI(CERT_SIGNED_CONTENT_INFO* cert) :
311
+ _cert(cert)
312
+ {
313
+ if(!_cert)
314
+ {
315
+ #ifdef ICE_CPP11_MAPPING
316
+ throw invalid_argument("Invalid certificate reference");
317
+ #else
318
+ throw IceUtil::IllegalArgumentException(__FILE__, __LINE__, "Invalid certificate reference");
319
+ #endif
320
+ }
321
+
322
+ try
323
+ {
324
+ //
325
+ // Decode certificate info
326
+ //
327
+ DWORD length = 0;
328
+ if(!CryptDecodeObjectEx(X509_ASN_ENCODING, X509_CERT_TO_BE_SIGNED, _cert->ToBeSigned.pbData,
329
+ _cert->ToBeSigned.cbData, CRYPT_DECODE_ALLOC_FLAG, 0, &_certInfo, &length))
330
+ {
331
+ throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
332
+ }
333
+ _certInfoHolder = new CertInfoHolder(_certInfo);
334
+ }
335
+ catch(...)
336
+ {
337
+ LocalFree(_cert);
338
+ _cert = 0;
339
+ throw;
340
+ }
341
+ }
342
+
343
+ SChannelCertificateI::~SChannelCertificateI()
344
+ {
345
+ if(_cert)
346
+ {
347
+ LocalFree(_cert);
348
+ }
349
+ }
350
+
351
+ bool
352
+ SChannelCertificateI::operator==(const IceSSL::Certificate& r) const
353
+ {
354
+ const SChannelCertificateI* p = dynamic_cast<const SChannelCertificateI*>(&r);
355
+ if(!p)
356
+ {
357
+ return false;
358
+ }
359
+
360
+ return CertCompareCertificate(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, _certInfo, p->_certInfo) != 0;
361
+ }
362
+
363
+ vector<Ice::Byte>
364
+ SChannelCertificateI::getAuthorityKeyIdentifier() const
365
+ {
366
+ vector<Ice::Byte> keyid;
367
+ PCERT_EXTENSION extension = CertFindExtension(szOID_AUTHORITY_KEY_IDENTIFIER2, _certInfo->cExtension,
368
+ _certInfo->rgExtension);
369
+ if(extension)
370
+ {
371
+ CERT_AUTHORITY_KEY_ID2_INFO* decoded;
372
+ DWORD length = 0;
373
+ if(!CryptDecodeObjectEx(X509_ASN_ENCODING, X509_AUTHORITY_KEY_ID2, extension->Value.pbData,
374
+ extension->Value.cbData, CRYPT_DECODE_ALLOC_FLAG, 0, &decoded, &length))
375
+ {
376
+ throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
377
+ }
378
+
379
+ if(decoded->KeyId.pbData && decoded->KeyId.cbData)
380
+ {
381
+ keyid.resize(decoded->KeyId.cbData);
382
+ memcpy(&keyid[0], decoded->KeyId.pbData, decoded->KeyId.cbData);
383
+ LocalFree(decoded);
384
+ }
385
+ }
386
+ return keyid;
387
+ }
388
+
389
+ vector<Ice::Byte>
390
+ SChannelCertificateI::getSubjectKeyIdentifier() const
391
+ {
392
+ vector<Ice::Byte> keyid;
393
+ PCERT_EXTENSION extension = CertFindExtension(szOID_SUBJECT_KEY_IDENTIFIER, _certInfo->cExtension,
394
+ _certInfo->rgExtension);
395
+ if(extension)
396
+ {
397
+ CRYPT_DATA_BLOB* decoded;
398
+ DWORD length = 0;
399
+ if(!CryptDecodeObjectEx(X509_ASN_ENCODING, szOID_SUBJECT_KEY_IDENTIFIER, extension->Value.pbData,
400
+ extension->Value.cbData, CRYPT_DECODE_ALLOC_FLAG, 0, &decoded, &length))
401
+ {
402
+ throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
403
+ }
404
+
405
+ if(decoded->pbData && decoded->cbData)
406
+ {
407
+ keyid.resize(decoded->cbData);
408
+ memcpy(&keyid[0], decoded->pbData, decoded->cbData);
409
+ LocalFree(decoded);
410
+ }
411
+ }
412
+ return keyid;
413
+ }
414
+
415
+ bool
416
+ SChannelCertificateI::verify(const CertificatePtr& cert) const
417
+ {
418
+ bool result = false;
419
+ SChannelCertificateI* c = dynamic_cast<SChannelCertificateI*>(cert.get());
420
+ if(c)
421
+ {
422
+ BYTE* buffer = 0;
423
+ DWORD length = 0;
424
+ if(!CryptEncodeObjectEx(X509_ASN_ENCODING, X509_CERT, _cert, CRYPT_ENCODE_ALLOC_FLAG , 0, &buffer, &length))
425
+ {
426
+ throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
427
+ }
428
+ result = CryptVerifyCertificateSignature(0, X509_ASN_ENCODING, buffer, length, &c->_certInfo->SubjectPublicKeyInfo) != 0;
429
+ LocalFree(buffer);
430
+ }
431
+ return result;
432
+ }
433
+
434
+ string
435
+ SChannelCertificateI::encode() const
436
+ {
437
+ string s;
438
+ DWORD length = 0;
439
+ BYTE* buffer = 0;
440
+ try
441
+ {
442
+ if(!CryptEncodeObjectEx(X509_ASN_ENCODING, X509_CERT, _cert, CRYPT_ENCODE_ALLOC_FLAG , 0, &buffer, &length))
443
+ {
444
+ throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
445
+ }
446
+
447
+ DWORD encodedLength = 0;
448
+ if(!CryptBinaryToString(buffer, length, CRYPT_STRING_BASE64HEADER | CRYPT_STRING_NOCR, 0, &encodedLength))
449
+ {
450
+ throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
451
+ }
452
+
453
+ std::vector<char> encoded;
454
+ encoded.resize(encodedLength);
455
+ if(!CryptBinaryToString(buffer, length, CRYPT_STRING_BASE64HEADER | CRYPT_STRING_NOCR, &encoded[0],
456
+ &encodedLength))
457
+ {
458
+ throw CertificateEncodingException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
459
+ }
460
+ LocalFree(buffer);
461
+ buffer = 0;
462
+ s.assign(&encoded[0]);
463
+ }
464
+ catch(...)
465
+ {
466
+ if(buffer)
467
+ {
468
+ LocalFree(buffer);
469
+ }
470
+ throw;
471
+ }
472
+ return s;
473
+ }
474
+
475
+ # ifdef ICE_CPP11_MAPPING
476
+ chrono::system_clock::time_point
477
+ # else
478
+ IceUtil::Time
479
+ # endif
480
+ SChannelCertificateI::getNotAfter() const
481
+ {
482
+ return filetimeToTime(_certInfo->NotAfter);
483
+ }
484
+
485
+ # ifdef ICE_CPP11_MAPPING
486
+ chrono::system_clock::time_point
487
+ # else
488
+ IceUtil::Time
489
+ # endif
490
+ SChannelCertificateI::getNotBefore() const
491
+ {
492
+ return filetimeToTime(_certInfo->NotBefore);
493
+ }
494
+
495
+ string
496
+ SChannelCertificateI::getSerialNumber() const
497
+ {
498
+ ostringstream os;
499
+ for(int i = _certInfo->SerialNumber.cbData - 1; i >= 0; --i)
500
+ {
501
+ unsigned char c = _certInfo->SerialNumber.pbData[i];
502
+ os.fill('0');
503
+ os.width(2);
504
+ os << hex << static_cast<int>(c);
505
+ if(i)
506
+ {
507
+ os << ' ';
508
+ }
509
+ }
510
+ return IceUtilInternal::toUpper(os.str());
511
+ }
512
+
513
+ DistinguishedName
514
+ SChannelCertificateI::getIssuerDN() const
515
+ {
516
+ return DistinguishedName(certNameToString(&_certInfo->Issuer));
517
+ }
518
+
519
+ vector<pair<int, string> >
520
+ SChannelCertificateI::getIssuerAlternativeNames() const
521
+ {
522
+ return certificateAltNames(_certInfo, szOID_ISSUER_ALT_NAME2);
523
+ }
524
+
525
+ DistinguishedName
526
+ SChannelCertificateI::getSubjectDN() const
527
+ {
528
+ return DistinguishedName(certNameToString(&_certInfo->Subject));
529
+ }
530
+
531
+ vector<pair<int, string> >
532
+ SChannelCertificateI::getSubjectAlternativeNames() const
533
+ {
534
+ return certificateAltNames(_certInfo, szOID_SUBJECT_ALT_NAME2);
535
+ }
536
+
537
+ int
538
+ SChannelCertificateI::getVersion() const
539
+ {
540
+ return _certInfo->dwVersion;
541
+ }
542
+
543
+ CERT_SIGNED_CONTENT_INFO*
544
+ SChannelCertificateI::getCert() const
545
+ {
546
+ return _cert;
547
+ }
548
+
549
+ void
550
+ SChannelCertificateI::loadX509Extensions() const
551
+ {
552
+ IceUtil::Mutex::Lock sync(*this);
553
+ if(_extensions.empty())
554
+ {
555
+ for(size_t i = 0; i < _certInfo->cExtension; ++i)
556
+ {
557
+ CERT_EXTENSION ext = _certInfo->rgExtension[i];
558
+ _extensions.push_back(ICE_DYNAMIC_CAST(X509Extension,
559
+ ICE_MAKE_SHARED(SCHannelX509ExtensionI, ext, ext.pszObjId,
560
+ _certInfoHolder)));
561
+ }
562
+ }
563
+ }
564
+
565
+ SChannel::CertificatePtr
566
+ SChannel::Certificate::create(CERT_SIGNED_CONTENT_INFO* cert)
567
+ {
568
+ return ICE_MAKE_SHARED(SChannelCertificateI, cert);
569
+ }
570
+
571
+ SChannel::CertificatePtr
572
+ SChannel::Certificate::load(const std::string& file)
573
+ {
574
+ CERT_SIGNED_CONTENT_INFO* cert;
575
+ loadCertificate(&cert, file);
576
+ return ICE_MAKE_SHARED(SChannelCertificateI, cert);
577
+ }
578
+
579
+ SChannel::CertificatePtr
580
+ SChannel::Certificate::decode(const std::string& encoding)
581
+ {
582
+ CERT_SIGNED_CONTENT_INFO* cert;
583
+ loadCertificate(&cert, encoding.c_str(), static_cast<DWORD>(encoding.size()));
584
+ return ICE_MAKE_SHARED(SChannelCertificateI, cert);
585
+ }