zeroc-ice 3.6b1 → 3.6.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 (679) hide show
  1. checksums.yaml +4 -4
  2. data/{ext/ice/BZIP_LICENSE → BZIP2_LICENSE} +0 -0
  3. data/ICE_LICENSE +8 -14
  4. data/LICENSE +2 -1
  5. data/{ext/ice/MCPP_LICENSE → MCPP_LICENSE} +2 -9
  6. data/bin/slice2rb +1 -1
  7. data/ext/Communicator.cpp +1 -1
  8. data/ext/Communicator.h +1 -1
  9. data/ext/Config.h +1 -22
  10. data/ext/Connection.cpp +125 -13
  11. data/ext/Connection.h +1 -1
  12. data/ext/Endpoint.cpp +62 -3
  13. data/ext/Endpoint.h +1 -1
  14. data/ext/ImplicitContext.cpp +1 -1
  15. data/ext/ImplicitContext.h +1 -1
  16. data/ext/Init.cpp +8 -1
  17. data/ext/Logger.cpp +1 -1
  18. data/ext/Logger.h +1 -1
  19. data/ext/ObjectFactory.cpp +1 -1
  20. data/ext/ObjectFactory.h +1 -1
  21. data/ext/Operation.cpp +1 -1
  22. data/ext/Operation.h +1 -1
  23. data/ext/Properties.cpp +1 -1
  24. data/ext/Properties.h +1 -1
  25. data/ext/Proxy.cpp +1 -1
  26. data/ext/Proxy.h +1 -1
  27. data/ext/Slice.cpp +1 -1
  28. data/ext/Slice.h +1 -1
  29. data/ext/Types.cpp +65 -17
  30. data/ext/Types.h +4 -1
  31. data/ext/Util.cpp +49 -58
  32. data/ext/Util.h +1 -1
  33. data/ext/extconf.rb +17 -15
  34. data/ext/ice/cpp/include/Ice/ACMF.h +1 -1
  35. data/ext/ice/cpp/include/Ice/Application.h +1 -1
  36. data/ext/ice/cpp/include/Ice/AsyncResult.h +1 -1
  37. data/ext/ice/cpp/include/Ice/AsyncResultF.h +1 -1
  38. data/ext/ice/cpp/include/Ice/BasicStream.h +1 -1
  39. data/ext/ice/cpp/include/Ice/BatchRequestInterceptor.h +52 -0
  40. data/ext/ice/cpp/include/Ice/BatchRequestQueueF.h +25 -0
  41. data/ext/ice/cpp/include/Ice/Buffer.h +1 -1
  42. data/ext/ice/cpp/include/Ice/BuiltinSequences.h +12 -4
  43. data/ext/ice/cpp/include/Ice/Communicator.h +12 -4
  44. data/ext/ice/cpp/include/Ice/CommunicatorAsync.h +1 -1
  45. data/ext/ice/cpp/include/Ice/CommunicatorF.h +12 -4
  46. data/ext/ice/cpp/include/Ice/Config.h +13 -8
  47. data/ext/ice/cpp/include/Ice/Connection.h +41 -16
  48. data/ext/ice/cpp/include/Ice/ConnectionAsync.h +1 -1
  49. data/ext/ice/cpp/include/Ice/ConnectionF.h +12 -4
  50. data/ext/ice/cpp/include/Ice/ConnectionFactoryF.h +1 -1
  51. data/ext/ice/cpp/include/Ice/ConnectionIF.h +1 -1
  52. data/ext/ice/cpp/include/Ice/Current.h +12 -4
  53. data/ext/ice/cpp/include/Ice/DefaultObjectFactory.h +1 -1
  54. data/ext/ice/cpp/include/Ice/DeprecatedStringConverter.h +1 -1
  55. data/ext/ice/cpp/include/Ice/DispatchInterceptor.h +1 -1
  56. data/ext/ice/cpp/include/Ice/Dispatcher.h +1 -1
  57. data/ext/ice/cpp/include/Ice/DynamicLibrary.h +1 -1
  58. data/ext/ice/cpp/include/Ice/DynamicLibraryF.h +1 -1
  59. data/ext/ice/cpp/include/Ice/Endpoint.h +16 -6
  60. data/ext/ice/cpp/include/Ice/EndpointF.h +12 -4
  61. data/ext/ice/cpp/include/Ice/EndpointTypes.h +12 -4
  62. data/ext/ice/cpp/include/Ice/Exception.h +3 -3
  63. data/ext/ice/cpp/include/Ice/FacetMap.h +12 -4
  64. data/ext/ice/cpp/include/Ice/FactoryTable.h +1 -1
  65. data/ext/ice/cpp/include/Ice/FactoryTableInit.h +1 -1
  66. data/ext/ice/cpp/include/Ice/Format.h +1 -1
  67. data/ext/ice/cpp/include/Ice/Functional.h +1 -1
  68. data/ext/ice/cpp/include/Ice/GCObject.h +5 -1
  69. data/ext/ice/cpp/include/Ice/Handle.h +1 -1
  70. data/ext/ice/cpp/include/Ice/Ice.h +4 -3
  71. data/ext/ice/cpp/include/Ice/Identity.h +13 -5
  72. data/ext/ice/cpp/include/Ice/ImplicitContext.h +12 -4
  73. data/ext/ice/cpp/include/Ice/ImplicitContextF.h +12 -4
  74. data/ext/ice/cpp/include/Ice/Incoming.h +1 -1
  75. data/ext/ice/cpp/include/Ice/IncomingAsync.h +1 -1
  76. data/ext/ice/cpp/include/Ice/IncomingAsyncF.h +1 -1
  77. data/ext/ice/cpp/include/Ice/Initialize.h +4 -2
  78. data/ext/ice/cpp/include/Ice/InstanceF.h +1 -1
  79. data/ext/ice/cpp/include/Ice/Instrumentation.h +12 -4
  80. data/ext/ice/cpp/include/Ice/InstrumentationF.h +12 -4
  81. data/ext/ice/cpp/include/Ice/LocalException.h +12 -4
  82. data/ext/ice/cpp/include/Ice/LocalObject.h +1 -1
  83. data/ext/ice/cpp/include/Ice/LocalObjectF.h +1 -1
  84. data/ext/ice/cpp/include/Ice/Locator.h +137 -129
  85. data/ext/ice/cpp/include/Ice/LocatorF.h +12 -4
  86. data/ext/ice/cpp/include/Ice/Logger.h +12 -4
  87. data/ext/ice/cpp/include/Ice/LoggerF.h +12 -4
  88. data/ext/ice/cpp/include/Ice/LoggerUtil.h +1 -1
  89. data/ext/ice/cpp/include/Ice/Metrics.h +144 -136
  90. data/ext/ice/cpp/include/Ice/MetricsAdminI.h +1 -1
  91. data/ext/ice/cpp/include/Ice/MetricsFunctional.h +1 -1
  92. data/ext/ice/cpp/include/Ice/MetricsObserverI.h +35 -26
  93. data/ext/ice/cpp/include/Ice/NativePropertiesAdmin.h +1 -1
  94. data/ext/ice/cpp/include/Ice/Object.h +1 -1
  95. data/ext/ice/cpp/include/Ice/ObjectAdapter.h +12 -4
  96. data/ext/ice/cpp/include/Ice/ObjectAdapterF.h +12 -4
  97. data/ext/ice/cpp/include/Ice/ObjectAdapterFactoryF.h +1 -1
  98. data/ext/ice/cpp/include/Ice/ObjectF.h +1 -1
  99. data/ext/ice/cpp/include/Ice/ObjectFactory.h +12 -4
  100. data/ext/ice/cpp/include/Ice/ObjectFactoryF.h +12 -4
  101. data/ext/ice/cpp/include/Ice/ObjectFactoryManagerF.h +1 -1
  102. data/ext/ice/cpp/include/Ice/ObserverHelper.h +1 -1
  103. data/ext/ice/cpp/include/Ice/Outgoing.h +67 -39
  104. data/ext/ice/cpp/include/Ice/OutgoingAsync.h +31 -34
  105. data/ext/ice/cpp/include/Ice/OutgoingAsyncF.h +4 -4
  106. data/ext/ice/cpp/include/Ice/Plugin.h +12 -4
  107. data/ext/ice/cpp/include/Ice/PluginF.h +12 -4
  108. data/ext/ice/cpp/include/Ice/Process.h +36 -28
  109. data/ext/ice/cpp/include/Ice/ProcessF.h +12 -4
  110. data/ext/ice/cpp/include/Ice/Properties.h +12 -4
  111. data/ext/ice/cpp/include/Ice/PropertiesAdmin.h +86 -78
  112. data/ext/ice/cpp/include/Ice/PropertiesF.h +12 -4
  113. data/ext/ice/cpp/include/Ice/Protocol.h +1 -1
  114. data/ext/ice/cpp/include/Ice/Proxy.h +6 -2
  115. data/ext/ice/cpp/include/Ice/ProxyF.h +1 -1
  116. data/ext/ice/cpp/include/Ice/ProxyFactoryF.h +1 -1
  117. data/ext/ice/cpp/include/Ice/ProxyHandle.h +1 -1
  118. data/ext/ice/cpp/include/Ice/ReferenceF.h +1 -1
  119. data/ext/ice/cpp/include/Ice/RemoteLogger.h +137 -129
  120. data/ext/ice/cpp/include/Ice/RequestHandlerF.h +1 -1
  121. data/ext/ice/cpp/include/Ice/ResponseHandlerF.h +1 -1
  122. data/ext/ice/cpp/include/Ice/Router.h +37 -29
  123. data/ext/ice/cpp/include/Ice/RouterF.h +12 -4
  124. data/ext/ice/cpp/include/Ice/ServantLocator.h +12 -4
  125. data/ext/ice/cpp/include/Ice/ServantLocatorF.h +12 -4
  126. data/ext/ice/cpp/include/Ice/ServantManagerF.h +1 -1
  127. data/ext/ice/cpp/include/Ice/Service.h +1 -1
  128. data/ext/ice/cpp/include/Ice/SliceChecksumDict.h +12 -4
  129. data/ext/ice/cpp/include/Ice/SliceChecksums.h +1 -1
  130. data/ext/ice/cpp/include/Ice/SlicedData.h +1 -6
  131. data/ext/ice/cpp/include/Ice/SlicedDataF.h +1 -1
  132. data/ext/ice/cpp/include/Ice/Stream.h +3 -5
  133. data/ext/ice/cpp/include/Ice/StreamF.h +1 -1
  134. data/ext/ice/cpp/include/Ice/StreamHelpers.h +1 -1
  135. data/ext/ice/cpp/include/Ice/ThreadPoolF.h +1 -1
  136. data/ext/ice/cpp/include/Ice/UserExceptionFactory.h +1 -1
  137. data/ext/ice/cpp/include/Ice/Version.h +14 -6
  138. data/ext/ice/cpp/include/IceSSL/Config.h +19 -1
  139. data/ext/ice/cpp/include/IceSSL/ConnectionInfo.h +61 -7
  140. data/ext/ice/cpp/include/IceSSL/EndpointInfo.h +52 -5
  141. data/ext/ice/cpp/include/IceSSL/IceSSL.h +2 -2
  142. data/ext/ice/cpp/include/IceSSL/Plugin.h +32 -26
  143. data/ext/ice/cpp/include/IceUtil/AbstractMutex.h +1 -1
  144. data/ext/ice/cpp/include/IceUtil/Atomic.h +186 -0
  145. data/ext/ice/cpp/include/IceUtil/Cache.h +1 -1
  146. data/ext/ice/cpp/include/IceUtil/Cond.h +1 -1
  147. data/ext/ice/cpp/include/IceUtil/Config.h +31 -20
  148. data/ext/ice/cpp/include/IceUtil/CountDownLatch.h +1 -1
  149. data/ext/ice/cpp/include/IceUtil/CtrlCHandler.h +1 -1
  150. data/ext/ice/cpp/include/IceUtil/DisableWarnings.h +9 -2
  151. data/ext/ice/cpp/include/IceUtil/Exception.h +4 -3
  152. data/ext/ice/cpp/include/IceUtil/Functional.h +1 -1
  153. data/ext/ice/cpp/include/IceUtil/Handle.h +1 -1
  154. data/ext/ice/cpp/include/IceUtil/IceUtil.h +2 -2
  155. data/ext/ice/cpp/include/IceUtil/IconvStringConverter.h +1 -1
  156. data/ext/ice/cpp/include/IceUtil/InputUtil.h +1 -1
  157. data/ext/ice/cpp/include/IceUtil/Iterator.h +1 -1
  158. data/ext/ice/cpp/include/IceUtil/Lock.h +1 -1
  159. data/ext/ice/cpp/include/IceUtil/Monitor.h +1 -1
  160. data/ext/ice/cpp/include/IceUtil/Mutex.h +1 -1
  161. data/ext/ice/cpp/include/IceUtil/MutexProtocol.h +1 -1
  162. data/ext/ice/cpp/include/IceUtil/MutexPtrLock.h +1 -1
  163. data/ext/ice/cpp/include/IceUtil/MutexPtrTryLock.h +1 -1
  164. data/ext/ice/cpp/include/IceUtil/Optional.h +1 -1
  165. data/ext/ice/cpp/include/IceUtil/Options.h +1 -1
  166. data/ext/ice/cpp/include/IceUtil/OutputUtil.h +8 -11
  167. data/ext/ice/cpp/include/IceUtil/PopDisableWarnings.h +1 -1
  168. data/ext/ice/cpp/include/IceUtil/PushDisableWarnings.h +5 -1
  169. data/ext/ice/cpp/include/IceUtil/Random.h +1 -1
  170. data/ext/ice/cpp/include/IceUtil/RecMutex.h +1 -1
  171. data/ext/ice/cpp/include/IceUtil/SHA1.h +8 -26
  172. data/ext/ice/cpp/include/IceUtil/ScannerConfig.h +5 -5
  173. data/ext/ice/cpp/include/IceUtil/ScopedArray.h +1 -1
  174. data/ext/ice/cpp/include/IceUtil/Shared.h +3 -37
  175. data/ext/ice/cpp/include/IceUtil/StringUtil.h +1 -1
  176. data/ext/ice/cpp/include/IceUtil/Thread.h +1 -1
  177. data/ext/ice/cpp/include/IceUtil/ThreadException.h +1 -1
  178. data/ext/ice/cpp/include/IceUtil/Time.h +1 -1
  179. data/ext/ice/cpp/include/IceUtil/Timer.h +1 -1
  180. data/ext/ice/cpp/include/IceUtil/UUID.h +1 -1
  181. data/ext/ice/cpp/include/IceUtil/UndefSysMacros.h +1 -1
  182. data/ext/ice/cpp/include/IceUtil/UniquePtr.h +1 -1
  183. data/ext/ice/cpp/include/Slice/CPlusPlusUtil.h +7 -6
  184. data/ext/ice/cpp/include/Slice/Checksum.h +1 -1
  185. data/ext/ice/cpp/include/Slice/CsUtil.h +1 -1
  186. data/ext/ice/cpp/include/Slice/DotNetNames.h +1 -1
  187. data/ext/ice/cpp/include/Slice/FileTracker.h +1 -1
  188. data/ext/ice/cpp/include/Slice/JavaUtil.h +3 -1
  189. data/ext/ice/cpp/include/Slice/ObjCUtil.h +127 -0
  190. data/ext/ice/cpp/include/Slice/PHPUtil.h +1 -1
  191. data/ext/ice/cpp/include/Slice/Parser.h +18 -12
  192. data/ext/ice/cpp/include/Slice/Preprocessor.h +6 -4
  193. data/ext/ice/cpp/include/Slice/PythonUtil.h +1 -1
  194. data/ext/ice/cpp/include/Slice/RubyUtil.h +1 -1
  195. data/ext/ice/cpp/include/Slice/Util.h +20 -2
  196. data/ext/ice/cpp/src/Ice/ACM.cpp +1 -1
  197. data/ext/ice/cpp/src/Ice/ACM.h +1 -1
  198. data/ext/ice/cpp/src/Ice/Acceptor.cpp +1 -1
  199. data/ext/ice/cpp/src/Ice/Acceptor.h +1 -1
  200. data/ext/ice/cpp/src/Ice/AcceptorF.h +1 -1
  201. data/ext/ice/cpp/src/Ice/AsyncResult.cpp +1 -1
  202. data/ext/ice/cpp/src/Ice/Base64.cpp +1 -1
  203. data/ext/ice/cpp/src/Ice/Base64.h +1 -1
  204. data/ext/ice/cpp/src/Ice/BasicStream.cpp +7 -5
  205. data/ext/ice/cpp/src/Ice/BatchRequestQueue.cpp +227 -0
  206. data/ext/ice/cpp/src/Ice/BatchRequestQueue.h +59 -0
  207. data/ext/ice/cpp/src/Ice/Buffer.cpp +3 -3
  208. data/ext/ice/cpp/src/Ice/BuiltinSequences.cpp +10 -4
  209. data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.cpp +82 -282
  210. data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.h +8 -21
  211. data/ext/ice/cpp/src/Ice/Communicator.cpp +11 -5
  212. data/ext/ice/cpp/src/Ice/CommunicatorF.cpp +10 -4
  213. data/ext/ice/cpp/src/Ice/CommunicatorI.cpp +6 -6
  214. data/ext/ice/cpp/src/Ice/CommunicatorI.h +1 -1
  215. data/ext/ice/cpp/src/Ice/ConnectRequestHandler.cpp +42 -180
  216. data/ext/ice/cpp/src/Ice/ConnectRequestHandler.h +10 -19
  217. data/ext/ice/cpp/src/Ice/ConnectRequestHandlerF.h +25 -0
  218. data/ext/ice/cpp/src/Ice/Connection.cpp +17 -11
  219. data/ext/ice/cpp/src/Ice/ConnectionF.cpp +10 -4
  220. data/ext/ice/cpp/src/Ice/ConnectionFactory.cpp +137 -51
  221. data/ext/ice/cpp/src/Ice/ConnectionFactory.h +18 -8
  222. data/ext/ice/cpp/src/Ice/ConnectionI.cpp +105 -391
  223. data/ext/ice/cpp/src/Ice/ConnectionI.h +25 -23
  224. data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.cpp +5 -29
  225. data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.h +3 -8
  226. data/ext/ice/cpp/src/Ice/Connector.cpp +1 -1
  227. data/ext/ice/cpp/src/Ice/Connector.h +1 -1
  228. data/ext/ice/cpp/src/Ice/ConnectorF.h +1 -1
  229. data/ext/ice/cpp/src/Ice/Current.cpp +10 -4
  230. data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.cpp +1 -1
  231. data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.h +1 -1
  232. data/ext/ice/cpp/src/Ice/DefaultsAndOverridesF.h +1 -1
  233. data/ext/ice/cpp/src/Ice/DeprecatedStringConverter.cpp +1 -1
  234. data/ext/ice/cpp/src/Ice/DispatchInterceptor.cpp +1 -1
  235. data/ext/ice/cpp/src/Ice/DynamicLibrary.cpp +1 -1
  236. data/ext/ice/cpp/src/Ice/Endpoint.cpp +17 -11
  237. data/ext/ice/cpp/src/Ice/EndpointF.cpp +10 -4
  238. data/ext/ice/cpp/src/Ice/EndpointFactory.cpp +19 -1
  239. data/ext/ice/cpp/src/Ice/EndpointFactory.h +13 -1
  240. data/ext/ice/cpp/src/Ice/EndpointFactoryF.h +1 -1
  241. data/ext/ice/cpp/src/Ice/EndpointFactoryManager.cpp +1 -1
  242. data/ext/ice/cpp/src/Ice/EndpointFactoryManager.h +1 -1
  243. data/ext/ice/cpp/src/Ice/EndpointFactoryManagerF.h +1 -1
  244. data/ext/ice/cpp/src/Ice/EndpointI.cpp +1 -1
  245. data/ext/ice/cpp/src/Ice/EndpointI.h +33 -1
  246. data/ext/ice/cpp/src/Ice/EndpointIF.h +1 -1
  247. data/ext/ice/cpp/src/Ice/EndpointTypes.cpp +10 -4
  248. data/ext/ice/cpp/src/Ice/EventHandler.cpp +1 -1
  249. data/ext/ice/cpp/src/Ice/EventHandler.h +4 -1
  250. data/ext/ice/cpp/src/Ice/EventHandlerF.h +1 -1
  251. data/ext/ice/cpp/src/Ice/Exception.cpp +20 -11
  252. data/ext/ice/cpp/src/Ice/FacetMap.cpp +10 -4
  253. data/ext/ice/cpp/src/Ice/FactoryTable.cpp +1 -1
  254. data/ext/ice/cpp/src/Ice/FactoryTableInit.cpp +2 -2
  255. data/ext/ice/cpp/src/Ice/GCObject.cpp +1 -1
  256. data/ext/ice/cpp/src/Ice/HashUtil.h +1 -1
  257. data/ext/ice/cpp/src/Ice/HttpParser.cpp +27 -15
  258. data/ext/ice/cpp/src/Ice/HttpParser.h +4 -6
  259. data/ext/ice/cpp/src/Ice/IPEndpointI.cpp +7 -1
  260. data/ext/ice/cpp/src/Ice/IPEndpointI.h +2 -1
  261. data/ext/ice/cpp/src/Ice/IPEndpointIF.h +1 -1
  262. data/ext/ice/cpp/src/Ice/Identity.cpp +11 -5
  263. data/ext/ice/cpp/src/Ice/ImplicitContext.cpp +11 -5
  264. data/ext/ice/cpp/src/Ice/ImplicitContextF.cpp +10 -4
  265. data/ext/ice/cpp/src/Ice/ImplicitContextI.cpp +1 -1
  266. data/ext/ice/cpp/src/Ice/ImplicitContextI.h +1 -1
  267. data/ext/ice/cpp/src/Ice/Incoming.cpp +22 -20
  268. data/ext/ice/cpp/src/Ice/IncomingAsync.cpp +1 -1
  269. data/ext/ice/cpp/src/Ice/IncomingRequest.h +1 -1
  270. data/ext/ice/cpp/src/Ice/Initialize.cpp +31 -5
  271. data/ext/ice/cpp/src/Ice/Instance.cpp +102 -59
  272. data/ext/ice/cpp/src/Ice/Instance.h +28 -2
  273. data/ext/ice/cpp/src/Ice/Instrumentation.cpp +20 -14
  274. data/ext/ice/cpp/src/Ice/InstrumentationF.cpp +10 -4
  275. data/ext/ice/cpp/src/Ice/InstrumentationI.cpp +1 -1
  276. data/ext/ice/cpp/src/Ice/InstrumentationI.h +1 -1
  277. data/ext/ice/cpp/src/Ice/LocalException.cpp +10 -4
  278. data/ext/ice/cpp/src/Ice/LocalObject.cpp +1 -1
  279. data/ext/ice/cpp/src/Ice/Locator.cpp +83 -77
  280. data/ext/ice/cpp/src/Ice/LocatorF.cpp +10 -4
  281. data/ext/ice/cpp/src/Ice/LocatorInfo.cpp +77 -69
  282. data/ext/ice/cpp/src/Ice/LocatorInfo.h +1 -1
  283. data/ext/ice/cpp/src/Ice/LocatorInfoF.h +1 -1
  284. data/ext/ice/cpp/src/Ice/Logger.cpp +11 -5
  285. data/ext/ice/cpp/src/Ice/LoggerAdminI.cpp +1 -1
  286. data/ext/ice/cpp/src/Ice/LoggerAdminI.h +1 -1
  287. data/ext/ice/cpp/src/Ice/LoggerF.cpp +10 -4
  288. data/ext/ice/cpp/src/Ice/LoggerI.cpp +10 -8
  289. data/ext/ice/cpp/src/Ice/LoggerI.h +1 -1
  290. data/ext/ice/cpp/src/Ice/LoggerUtil.cpp +2 -2
  291. data/ext/ice/cpp/src/Ice/Metrics.cpp +122 -116
  292. data/ext/ice/cpp/src/Ice/MetricsAdminI.cpp +1 -1
  293. data/ext/ice/cpp/src/Ice/MetricsObserverI.cpp +1 -1
  294. data/ext/ice/cpp/src/Ice/Network.cpp +63 -19
  295. data/ext/ice/cpp/src/Ice/Network.h +10 -3
  296. data/ext/ice/cpp/src/Ice/NetworkF.h +1 -1
  297. data/ext/ice/cpp/src/Ice/NetworkProxy.cpp +1 -1
  298. data/ext/ice/cpp/src/Ice/NetworkProxy.h +1 -1
  299. data/ext/ice/cpp/src/Ice/NetworkProxyF.h +1 -1
  300. data/ext/ice/cpp/src/Ice/Object.cpp +1 -1
  301. data/ext/ice/cpp/src/Ice/ObjectAdapter.cpp +11 -5
  302. data/ext/ice/cpp/src/Ice/ObjectAdapterF.cpp +10 -4
  303. data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.cpp +9 -9
  304. data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.h +2 -2
  305. data/ext/ice/cpp/src/Ice/ObjectAdapterI.cpp +3 -3
  306. data/ext/ice/cpp/src/Ice/ObjectAdapterI.h +5 -5
  307. data/ext/ice/cpp/src/Ice/ObjectFactory.cpp +11 -5
  308. data/ext/ice/cpp/src/Ice/ObjectFactoryF.cpp +10 -4
  309. data/ext/ice/cpp/src/Ice/ObjectFactoryManager.cpp +9 -10
  310. data/ext/ice/cpp/src/Ice/ObjectFactoryManager.h +1 -1
  311. data/ext/ice/cpp/src/Ice/ObserverHelper.cpp +1 -1
  312. data/ext/ice/cpp/src/Ice/OpaqueEndpointI.cpp +6 -5
  313. data/ext/ice/cpp/src/Ice/OpaqueEndpointI.h +1 -1
  314. data/ext/ice/cpp/src/Ice/Outgoing.cpp +209 -254
  315. data/ext/ice/cpp/src/Ice/OutgoingAsync.cpp +120 -106
  316. data/ext/ice/cpp/src/Ice/Plugin.cpp +12 -6
  317. data/ext/ice/cpp/src/Ice/PluginF.cpp +10 -4
  318. data/ext/ice/cpp/src/Ice/PluginManagerI.cpp +21 -2
  319. data/ext/ice/cpp/src/Ice/Process.cpp +25 -19
  320. data/ext/ice/cpp/src/Ice/ProcessF.cpp +10 -4
  321. data/ext/ice/cpp/src/Ice/Properties.cpp +11 -5
  322. data/ext/ice/cpp/src/Ice/PropertiesAdmin.cpp +39 -33
  323. data/ext/ice/cpp/src/Ice/PropertiesAdminI.cpp +1 -1
  324. data/ext/ice/cpp/src/Ice/PropertiesAdminI.h +1 -1
  325. data/ext/ice/cpp/src/Ice/PropertiesF.cpp +10 -4
  326. data/ext/ice/cpp/src/Ice/PropertiesI.cpp +1 -1
  327. data/ext/ice/cpp/src/Ice/PropertiesI.h +1 -1
  328. data/ext/ice/cpp/src/Ice/PropertyNames.cpp +12 -8
  329. data/ext/ice/cpp/src/Ice/PropertyNames.h +2 -2
  330. data/ext/ice/cpp/src/Ice/Protocol.cpp +7 -7
  331. data/ext/ice/cpp/src/Ice/ProtocolInstance.cpp +9 -6
  332. data/ext/ice/cpp/src/Ice/ProtocolInstance.h +25 -7
  333. data/ext/ice/cpp/src/Ice/ProtocolInstanceF.h +1 -1
  334. data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.cpp +1 -1
  335. data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.h +1 -1
  336. data/ext/ice/cpp/src/Ice/ProtocolPluginFacadeF.h +1 -1
  337. data/ext/ice/cpp/src/Ice/Proxy.cpp +32 -13
  338. data/ext/ice/cpp/src/Ice/ProxyFactory.cpp +1 -1
  339. data/ext/ice/cpp/src/Ice/ProxyFactory.h +1 -1
  340. data/ext/ice/cpp/src/Ice/Reference.cpp +101 -86
  341. data/ext/ice/cpp/src/Ice/Reference.h +16 -9
  342. data/ext/ice/cpp/src/Ice/ReferenceFactory.cpp +1 -1
  343. data/ext/ice/cpp/src/Ice/ReferenceFactory.h +1 -1
  344. data/ext/ice/cpp/src/Ice/ReferenceFactoryF.h +1 -1
  345. data/ext/ice/cpp/src/Ice/RegisterPlugins.cpp +28 -0
  346. data/ext/ice/cpp/src/Ice/RegisterPlugins.h +25 -0
  347. data/ext/ice/cpp/src/Ice/RemoteLogger.cpp +92 -86
  348. data/ext/ice/cpp/src/Ice/ReplyStatus.h +1 -1
  349. data/ext/ice/cpp/src/Ice/RequestHandler.cpp +1 -1
  350. data/ext/ice/cpp/src/Ice/RequestHandler.h +4 -8
  351. data/ext/ice/cpp/src/Ice/RequestHandlerFactory.cpp +24 -16
  352. data/ext/ice/cpp/src/Ice/RequestHandlerFactory.h +5 -4
  353. data/ext/ice/cpp/src/Ice/ResponseHandler.cpp +1 -1
  354. data/ext/ice/cpp/src/Ice/ResponseHandler.h +3 -3
  355. data/ext/ice/cpp/src/Ice/RetryQueue.cpp +16 -5
  356. data/ext/ice/cpp/src/Ice/RetryQueue.h +3 -2
  357. data/ext/ice/cpp/src/Ice/RetryQueueF.h +1 -1
  358. data/ext/ice/cpp/src/Ice/Router.cpp +27 -21
  359. data/ext/ice/cpp/src/Ice/RouterF.cpp +10 -4
  360. data/ext/ice/cpp/src/Ice/RouterInfo.cpp +1 -1
  361. data/ext/ice/cpp/src/Ice/RouterInfo.h +1 -1
  362. data/ext/ice/cpp/src/Ice/RouterInfoF.h +1 -1
  363. data/ext/ice/cpp/src/Ice/Selector.cpp +480 -1
  364. data/ext/ice/cpp/src/Ice/Selector.h +130 -1
  365. data/ext/ice/cpp/src/Ice/ServantLocator.cpp +11 -5
  366. data/ext/ice/cpp/src/Ice/ServantLocatorF.cpp +10 -4
  367. data/ext/ice/cpp/src/Ice/ServantManager.cpp +29 -23
  368. data/ext/ice/cpp/src/Ice/ServantManager.h +1 -1
  369. data/ext/ice/cpp/src/Ice/SharedContext.h +1 -1
  370. data/ext/ice/cpp/src/Ice/SliceChecksumDict.cpp +10 -4
  371. data/ext/ice/cpp/src/Ice/SliceChecksums.cpp +1 -1
  372. data/ext/ice/cpp/src/Ice/SlicedData.cpp +1 -1
  373. data/ext/ice/cpp/src/Ice/Stream.cpp +1 -1
  374. data/ext/ice/cpp/src/Ice/StreamI.cpp +1 -1
  375. data/ext/ice/cpp/src/Ice/StreamI.h +1 -1
  376. data/ext/ice/cpp/src/Ice/StreamSocket.cpp +30 -22
  377. data/ext/ice/cpp/src/Ice/StreamSocket.h +7 -4
  378. data/ext/ice/cpp/src/Ice/StringConverterPlugin.cpp +1 -1
  379. data/ext/ice/cpp/src/Ice/SysLoggerI.cpp +1 -1
  380. data/ext/ice/cpp/src/Ice/SysLoggerI.h +1 -1
  381. data/ext/ice/cpp/src/Ice/TcpAcceptor.cpp +8 -8
  382. data/ext/ice/cpp/src/Ice/TcpAcceptor.h +1 -1
  383. data/ext/ice/cpp/src/Ice/TcpConnector.cpp +1 -1
  384. data/ext/ice/cpp/src/Ice/TcpConnector.h +1 -1
  385. data/ext/ice/cpp/src/Ice/TcpEndpointI.cpp +21 -38
  386. data/ext/ice/cpp/src/Ice/TcpEndpointI.h +5 -6
  387. data/ext/ice/cpp/src/Ice/TcpTransceiver.cpp +29 -4
  388. data/ext/ice/cpp/src/Ice/TcpTransceiver.h +7 -2
  389. data/ext/ice/cpp/src/Ice/ThreadPool.cpp +2 -2
  390. data/ext/ice/cpp/src/Ice/ThreadPool.h +1 -1
  391. data/ext/ice/cpp/src/Ice/TraceLevels.cpp +2 -2
  392. data/ext/ice/cpp/src/Ice/TraceLevels.h +1 -1
  393. data/ext/ice/cpp/src/Ice/TraceLevelsF.h +1 -1
  394. data/ext/ice/cpp/src/Ice/TraceUtil.cpp +16 -7
  395. data/ext/ice/cpp/src/Ice/TraceUtil.h +1 -1
  396. data/ext/ice/cpp/src/Ice/Transceiver.cpp +1 -1
  397. data/ext/ice/cpp/src/Ice/Transceiver.h +2 -1
  398. data/ext/ice/cpp/src/Ice/TransceiverF.h +1 -1
  399. data/ext/ice/cpp/src/Ice/UdpConnector.cpp +1 -1
  400. data/ext/ice/cpp/src/Ice/UdpConnector.h +1 -1
  401. data/ext/ice/cpp/src/Ice/UdpEndpointI.cpp +13 -39
  402. data/ext/ice/cpp/src/Ice/UdpEndpointI.h +2 -5
  403. data/ext/ice/cpp/src/Ice/UdpTransceiver.cpp +46 -10
  404. data/ext/ice/cpp/src/Ice/UdpTransceiver.h +3 -2
  405. data/ext/ice/cpp/src/Ice/Version.cpp +12 -6
  406. data/ext/ice/cpp/src/Ice/WSAcceptor.cpp +1 -1
  407. data/ext/ice/cpp/src/Ice/WSAcceptor.h +1 -1
  408. data/ext/ice/cpp/src/Ice/WSConnector.cpp +1 -1
  409. data/ext/ice/cpp/src/Ice/WSConnector.h +1 -1
  410. data/ext/ice/cpp/src/Ice/WSEndpoint.cpp +6 -38
  411. data/ext/ice/cpp/src/Ice/WSEndpoint.h +12 -1
  412. data/ext/ice/cpp/src/Ice/WSTransceiver.cpp +31 -35
  413. data/ext/ice/cpp/src/Ice/WSTransceiver.h +13 -1
  414. data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.cpp +66 -60
  415. data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.h +106 -100
  416. data/ext/ice/cpp/src/IceDiscovery/LocatorI.cpp +1 -1
  417. data/ext/ice/cpp/src/IceDiscovery/LocatorI.h +1 -1
  418. data/ext/ice/cpp/src/IceDiscovery/LookupI.cpp +76 -36
  419. data/ext/ice/cpp/src/IceDiscovery/LookupI.h +1 -1
  420. data/ext/ice/cpp/src/IceDiscovery/PluginI.cpp +19 -6
  421. data/ext/ice/cpp/src/IceDiscovery/PluginI.h +1 -1
  422. data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.cpp +452 -0
  423. data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.h +732 -0
  424. data/ext/ice/cpp/src/IceLocatorDiscovery/PluginI.cpp +520 -0
  425. data/ext/ice/cpp/src/IceLocatorDiscovery/PluginI.h +36 -0
  426. data/ext/ice/cpp/src/IceSSL/AcceptorI.cpp +8 -8
  427. data/ext/ice/cpp/src/IceSSL/AcceptorI.h +1 -1
  428. data/ext/ice/cpp/src/IceSSL/Certificate.cpp +49 -47
  429. data/ext/ice/cpp/src/IceSSL/ConnectionInfo.cpp +13 -5
  430. data/ext/ice/cpp/src/IceSSL/ConnectorI.cpp +1 -1
  431. data/ext/ice/cpp/src/IceSSL/ConnectorI.h +1 -1
  432. data/ext/ice/cpp/src/IceSSL/EndpointI.cpp +10 -38
  433. data/ext/ice/cpp/src/IceSSL/EndpointI.h +4 -3
  434. data/ext/ice/cpp/src/IceSSL/EndpointInfo.cpp +13 -5
  435. data/ext/ice/cpp/src/IceSSL/Instance.cpp +2 -2
  436. data/ext/ice/cpp/src/IceSSL/Instance.h +1 -1
  437. data/ext/ice/cpp/src/IceSSL/InstanceF.h +1 -1
  438. data/ext/ice/cpp/src/IceSSL/OpenSSLEngine.cpp +107 -111
  439. data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.cpp +130 -47
  440. data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.h +11 -3
  441. data/ext/ice/cpp/src/IceSSL/PluginI.cpp +8 -14
  442. data/ext/ice/cpp/src/IceSSL/PluginI.h +1 -1
  443. data/ext/ice/cpp/src/IceSSL/RFC2253.cpp +1 -1
  444. data/ext/ice/cpp/src/IceSSL/RFC2253.h +1 -1
  445. data/ext/ice/cpp/src/IceSSL/SChannelEngine.cpp +238 -156
  446. data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.cpp +93 -66
  447. data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.h +7 -3
  448. data/ext/ice/cpp/src/IceSSL/SSLEngine.cpp +2 -2
  449. data/ext/ice/cpp/src/IceSSL/SSLEngine.h +32 -35
  450. data/ext/ice/cpp/src/IceSSL/SSLEngineF.h +1 -1
  451. data/ext/ice/cpp/src/IceSSL/SecureTransportEngine.cpp +244 -360
  452. data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.cpp +59 -29
  453. data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.h +8 -4
  454. data/ext/ice/cpp/src/IceSSL/TrustManager.cpp +1 -1
  455. data/ext/ice/cpp/src/IceSSL/TrustManager.h +1 -1
  456. data/ext/ice/cpp/src/IceSSL/TrustManagerF.h +1 -1
  457. data/ext/ice/cpp/src/IceSSL/Util.cpp +427 -620
  458. data/ext/ice/cpp/src/IceSSL/Util.h +72 -15
  459. data/ext/ice/cpp/src/IceUtil/ArgVector.cpp +1 -1
  460. data/ext/ice/cpp/src/IceUtil/ArgVector.h +1 -1
  461. data/ext/ice/cpp/src/IceUtil/Cond.cpp +1 -1
  462. data/ext/ice/cpp/src/IceUtil/ConvertUTF.cpp +1 -1
  463. data/ext/ice/cpp/src/IceUtil/ConvertUTF.h +1 -1
  464. data/ext/ice/cpp/src/IceUtil/CountDownLatch.cpp +1 -1
  465. data/ext/ice/cpp/src/IceUtil/CtrlCHandler.cpp +1 -1
  466. data/ext/ice/cpp/src/IceUtil/Exception.cpp +105 -96
  467. data/ext/ice/cpp/src/IceUtil/FileUtil.cpp +2 -1
  468. data/ext/ice/cpp/src/IceUtil/FileUtil.h +9 -1
  469. data/ext/ice/cpp/src/IceUtil/InputUtil.cpp +1 -1
  470. data/ext/ice/cpp/src/IceUtil/MutexProtocol.cpp +1 -1
  471. data/ext/ice/cpp/src/IceUtil/Options.cpp +1 -1
  472. data/ext/ice/cpp/src/IceUtil/OutputUtil.cpp +12 -25
  473. data/ext/ice/cpp/src/IceUtil/Random.cpp +1 -1
  474. data/ext/ice/cpp/src/IceUtil/RecMutex.cpp +1 -1
  475. data/ext/ice/cpp/src/IceUtil/SHA1.cpp +72 -10
  476. data/ext/ice/cpp/src/IceUtil/Shared.cpp +3 -132
  477. data/ext/ice/cpp/src/IceUtil/StopWatch.h +1 -1
  478. data/ext/ice/cpp/src/IceUtil/StringConverter.cpp +1 -1
  479. data/ext/ice/cpp/src/IceUtil/StringUtil.cpp +1 -1
  480. data/ext/ice/cpp/src/IceUtil/Thread.cpp +16 -1
  481. data/ext/ice/cpp/src/IceUtil/ThreadException.cpp +1 -1
  482. data/ext/ice/cpp/src/IceUtil/Time.cpp +1 -1
  483. data/ext/ice/cpp/src/IceUtil/Timer.cpp +1 -1
  484. data/ext/ice/cpp/src/IceUtil/UUID.cpp +1 -1
  485. data/ext/ice/cpp/src/IceUtil/Unicode.cpp +1 -1
  486. data/ext/ice/cpp/src/IceUtil/Unicode.h +1 -1
  487. data/ext/ice/cpp/src/Slice/CPlusPlusUtil.cpp +62 -55
  488. data/ext/ice/cpp/src/Slice/Checksum.cpp +1 -1
  489. data/ext/ice/cpp/src/Slice/CsUtil.cpp +8 -29
  490. data/ext/ice/cpp/src/Slice/DotNetNames.cpp +1 -1
  491. data/ext/ice/cpp/src/Slice/FileTracker.cpp +1 -1
  492. data/ext/ice/cpp/src/Slice/Grammar.cpp +1 -1
  493. data/ext/ice/cpp/src/Slice/GrammarUtil.h +1 -1
  494. data/ext/ice/cpp/src/Slice/JavaUtil.cpp +145 -172
  495. data/ext/ice/cpp/src/Slice/MD5.cpp +1 -1
  496. data/ext/ice/cpp/src/Slice/MD5.h +1 -1
  497. data/ext/ice/cpp/src/Slice/ObjCUtil.cpp +1310 -0
  498. data/ext/ice/cpp/src/Slice/PHPUtil.cpp +1 -1
  499. data/ext/ice/cpp/src/Slice/Parser.cpp +65 -187
  500. data/ext/ice/cpp/src/Slice/Preprocessor.cpp +61 -9
  501. data/ext/ice/cpp/src/Slice/Python.cpp +36 -3
  502. data/ext/ice/cpp/src/Slice/PythonUtil.cpp +10 -10
  503. data/ext/ice/cpp/src/Slice/Ruby.cpp +34 -3
  504. data/ext/ice/cpp/src/Slice/RubyUtil.cpp +8 -7
  505. data/ext/ice/cpp/src/Slice/Scanner.cpp +1 -1
  506. data/ext/ice/cpp/src/Slice/Util.cpp +137 -30
  507. data/ext/ice/mcpp/LICENSE +29 -0
  508. data/ext/ice/mcpp/Makefile +60 -0
  509. data/ext/ice/mcpp/Makefile.mak +46 -0
  510. data/ext/ice/mcpp/README.md +30 -0
  511. data/ext/ice/mcpp/config.h +89 -0
  512. data/ext/ice/mcpp/configed.H +1 -146
  513. data/ext/ice/mcpp/directive.c +115 -410
  514. data/ext/ice/mcpp/eval.c +38 -377
  515. data/ext/ice/mcpp/expand.c +155 -852
  516. data/ext/ice/mcpp/internal.H +10 -44
  517. data/ext/ice/mcpp/main.c +6 -345
  518. data/ext/ice/mcpp/mbchar.c +17 -654
  519. data/ext/ice/mcpp/mcpp.gyp +62 -0
  520. data/ext/ice/mcpp/support.c +116 -943
  521. data/ext/ice/mcpp/system.H +0 -23
  522. data/ext/ice/mcpp/system.c +81 -2321
  523. data/ice.gemspec +3 -4
  524. data/lib/Glacier2.rb +1 -1
  525. data/lib/Glacier2/Metrics.rb +2 -2
  526. data/lib/Glacier2/PermissionsVerifier.rb +2 -2
  527. data/lib/Glacier2/PermissionsVerifierF.rb +2 -2
  528. data/lib/Glacier2/Router.rb +2 -2
  529. data/lib/Glacier2/RouterF.rb +2 -2
  530. data/lib/Glacier2/SSLInfo.rb +2 -2
  531. data/lib/Glacier2/Session.rb +2 -2
  532. data/lib/Ice.rb +1 -1
  533. data/lib/Ice/BuiltinSequences.rb +2 -2
  534. data/lib/Ice/Communicator.rb +2 -2
  535. data/lib/Ice/CommunicatorF.rb +2 -2
  536. data/lib/Ice/Connection.rb +26 -14
  537. data/lib/Ice/ConnectionF.rb +2 -2
  538. data/lib/Ice/Current.rb +2 -2
  539. data/lib/Ice/Endpoint.rb +4 -2
  540. data/lib/Ice/EndpointF.rb +2 -2
  541. data/lib/Ice/EndpointTypes.rb +2 -2
  542. data/lib/Ice/FacetMap.rb +2 -2
  543. data/lib/Ice/Identity.rb +2 -2
  544. data/lib/Ice/ImplicitContext.rb +2 -2
  545. data/lib/Ice/ImplicitContextF.rb +2 -2
  546. data/lib/Ice/Instrumentation.rb +2 -2
  547. data/lib/Ice/InstrumentationF.rb +2 -2
  548. data/lib/Ice/LocalException.rb +2 -2
  549. data/lib/Ice/Locator.rb +2 -2
  550. data/lib/Ice/LocatorF.rb +2 -2
  551. data/lib/Ice/Logger.rb +2 -2
  552. data/lib/Ice/LoggerF.rb +2 -2
  553. data/lib/Ice/Metrics.rb +2 -2
  554. data/lib/Ice/ObjectAdapterF.rb +2 -2
  555. data/lib/Ice/ObjectFactory.rb +2 -2
  556. data/lib/Ice/ObjectFactoryF.rb +2 -2
  557. data/lib/Ice/Plugin.rb +2 -2
  558. data/lib/Ice/PluginF.rb +2 -2
  559. data/lib/Ice/Process.rb +2 -2
  560. data/lib/Ice/ProcessF.rb +2 -2
  561. data/lib/Ice/Properties.rb +2 -2
  562. data/lib/Ice/PropertiesAdmin.rb +2 -2
  563. data/lib/Ice/PropertiesF.rb +2 -2
  564. data/lib/Ice/Router.rb +2 -2
  565. data/lib/Ice/RouterF.rb +2 -2
  566. data/lib/Ice/SliceChecksumDict.rb +2 -2
  567. data/lib/Ice/Version.rb +2 -2
  568. data/lib/IceBox.rb +1 -1
  569. data/lib/IceBox/IceBox.rb +2 -2
  570. data/lib/IceGrid.rb +1 -1
  571. data/lib/IceGrid/Admin.rb +2 -2
  572. data/lib/IceGrid/Descriptor.rb +2 -2
  573. data/lib/IceGrid/Exception.rb +2 -2
  574. data/lib/IceGrid/FileParser.rb +2 -2
  575. data/lib/IceGrid/Locator.rb +2 -2
  576. data/lib/IceGrid/Observer.rb +2 -2
  577. data/lib/IceGrid/Query.rb +2 -2
  578. data/lib/IceGrid/Registry.rb +2 -2
  579. data/lib/IceGrid/Session.rb +2 -2
  580. data/lib/IceGrid/UserAccountMapper.rb +2 -2
  581. data/lib/IcePatch2.rb +1 -1
  582. data/lib/IcePatch2/FileInfo.rb +52 -2
  583. data/lib/IcePatch2/FileServer.rb +33 -4
  584. data/lib/IceStorm.rb +1 -1
  585. data/lib/IceStorm/IceStorm.rb +2 -2
  586. data/lib/IceStorm/Metrics.rb +2 -2
  587. data/slice/Freeze/BackgroundSaveEvictor.ice +2 -2
  588. data/slice/Freeze/CatalogData.ice +2 -2
  589. data/slice/Freeze/Connection.ice +2 -2
  590. data/slice/Freeze/ConnectionF.ice +2 -2
  591. data/slice/Freeze/DB.ice +2 -2
  592. data/slice/Freeze/Evictor.ice +2 -2
  593. data/slice/Freeze/EvictorF.ice +2 -2
  594. data/slice/Freeze/EvictorStorage.ice +2 -2
  595. data/slice/Freeze/Exception.ice +2 -2
  596. data/slice/Freeze/Transaction.ice +2 -2
  597. data/slice/Freeze/TransactionalEvictor.ice +2 -2
  598. data/slice/Glacier2/Metrics.ice +7 -6
  599. data/slice/Glacier2/PermissionsVerifier.ice +4 -3
  600. data/slice/Glacier2/PermissionsVerifierF.ice +3 -2
  601. data/slice/Glacier2/Router.ice +4 -3
  602. data/slice/Glacier2/RouterF.ice +3 -2
  603. data/slice/Glacier2/SSLInfo.ice +3 -2
  604. data/slice/Glacier2/Session.ice +12 -11
  605. data/slice/Ice/BuiltinSequences.ice +4 -3
  606. data/slice/Ice/Communicator.ice +22 -25
  607. data/slice/Ice/CommunicatorF.ice +3 -2
  608. data/slice/Ice/Connection.ice +39 -11
  609. data/slice/Ice/ConnectionF.ice +3 -2
  610. data/slice/Ice/Current.ice +4 -3
  611. data/slice/Ice/Endpoint.ice +11 -3
  612. data/slice/Ice/EndpointF.ice +3 -2
  613. data/slice/Ice/EndpointTypes.ice +3 -2
  614. data/slice/Ice/FacetMap.ice +3 -2
  615. data/slice/Ice/Identity.ice +3 -2
  616. data/slice/Ice/ImplicitContext.ice +3 -2
  617. data/slice/Ice/ImplicitContextF.ice +3 -2
  618. data/slice/Ice/Instrumentation.ice +4 -2
  619. data/slice/Ice/InstrumentationF.ice +4 -2
  620. data/slice/Ice/LocalException.ice +29 -10
  621. data/slice/Ice/Locator.ice +5 -3
  622. data/slice/Ice/LocatorF.ice +3 -2
  623. data/slice/Ice/Logger.ice +3 -2
  624. data/slice/Ice/LoggerF.ice +3 -2
  625. data/slice/Ice/Metrics.ice +15 -14
  626. data/slice/Ice/ObjectAdapter.ice +5 -4
  627. data/slice/Ice/ObjectAdapterF.ice +3 -2
  628. data/slice/Ice/ObjectFactory.ice +3 -2
  629. data/slice/Ice/ObjectFactoryF.ice +3 -2
  630. data/slice/Ice/Plugin.ice +3 -2
  631. data/slice/Ice/PluginF.ice +3 -2
  632. data/slice/Ice/Process.ice +3 -2
  633. data/slice/Ice/ProcessF.ice +3 -2
  634. data/slice/Ice/Properties.ice +3 -2
  635. data/slice/Ice/PropertiesAdmin.ice +3 -2
  636. data/slice/Ice/PropertiesF.ice +3 -2
  637. data/slice/Ice/RemoteLogger.ice +3 -2
  638. data/slice/Ice/Router.ice +3 -2
  639. data/slice/Ice/RouterF.ice +3 -2
  640. data/slice/Ice/ServantLocator.ice +3 -2
  641. data/slice/Ice/ServantLocatorF.ice +3 -2
  642. data/slice/Ice/SliceChecksumDict.ice +3 -2
  643. data/slice/Ice/Version.ice +3 -2
  644. data/slice/IceBox/IceBox.ice +2 -2
  645. data/slice/IceDiscovery/IceDiscovery.ice +2 -2
  646. data/slice/IceGrid/Admin.ice +49 -48
  647. data/slice/IceGrid/Descriptor.ice +3 -2
  648. data/slice/IceGrid/Exception.ice +6 -5
  649. data/slice/IceGrid/FileParser.ice +4 -3
  650. data/slice/IceGrid/Locator.ice +4 -3
  651. data/slice/IceGrid/Observer.ice +28 -27
  652. data/slice/IceGrid/PluginFacade.ice +3 -2
  653. data/slice/IceGrid/Query.ice +3 -2
  654. data/slice/IceGrid/Registry.ice +4 -3
  655. data/slice/IceGrid/Session.ice +9 -8
  656. data/slice/IceGrid/UserAccountMapper.ice +4 -3
  657. data/slice/{IceGrid/Discovery.ice → IceLocatorDiscovery/IceLocatorDiscovery.ice} +12 -14
  658. data/slice/IcePatch2/FileInfo.ice +31 -2
  659. data/slice/IcePatch2/FileServer.ice +63 -5
  660. data/slice/IceSSL/ConnectionInfo.ice +17 -2
  661. data/slice/IceSSL/EndpointInfo.ice +21 -3
  662. data/slice/IceStorm/IceStorm.ice +3 -2
  663. data/slice/IceStorm/Metrics.ice +4 -3
  664. metadata +27 -23
  665. data/ext/ice/cpp/include/Ice/Makefile +0 -26
  666. data/ext/ice/cpp/include/IceSSL/Makefile +0 -26
  667. data/ext/ice/cpp/include/IceUtil/Makefile +0 -26
  668. data/ext/ice/cpp/include/Slice/Makefile +0 -26
  669. data/ext/ice/cpp/src/Ice/Application.cpp +0 -760
  670. data/ext/ice/cpp/src/Ice/EventLoggerMsg.h +0 -53
  671. data/ext/ice/cpp/src/Ice/Makefile +0 -190
  672. data/ext/ice/cpp/src/Ice/Service.cpp +0 -1897
  673. data/ext/ice/cpp/src/IceDiscovery/Makefile +0 -61
  674. data/ext/ice/cpp/src/IceSSL/Makefile +0 -82
  675. data/ext/ice/cpp/src/IceUtil/Makefile +0 -68
  676. data/ext/ice/cpp/src/Slice/Makefile +0 -65
  677. data/ext/ice/mcpp/config.h.Darwin +0 -227
  678. data/ext/ice/mcpp/config.h.Linux +0 -227
  679. data/ext/ice/mcpp/config.h.MINGW +0 -7
@@ -1,6 +1,6 @@
1
1
  // **********************************************************************
2
2
  //
3
- // Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved.
3
+ // Copyright (c) 2003-2015 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.
@@ -1,6 +1,6 @@
1
1
  // **********************************************************************
2
2
  //
3
- // Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved.
3
+ // Copyright (c) 2003-2015 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.
@@ -58,13 +58,13 @@ Init init;
58
58
  class RegExp : public IceUtil::Shared
59
59
  {
60
60
  public:
61
-
61
+
62
62
  RegExp(const string&);
63
63
  ~RegExp();
64
64
  bool match(const string&);
65
-
65
+
66
66
  private:
67
-
67
+
68
68
  regex_t _preg;
69
69
  };
70
70
  typedef IceUtil::Handle<RegExp> RegExpPtr;
@@ -99,14 +99,14 @@ struct CipherExpression
99
99
  class CiphersHelper
100
100
  {
101
101
  public:
102
-
102
+
103
103
  static void initialize();
104
104
  static SSLCipherSuite cipherForName(const string& name);
105
105
  static string cipherName(SSLCipherSuite cipher);
106
106
  static map<string, SSLCipherSuite> ciphers();
107
107
 
108
108
  private:
109
-
109
+
110
110
  static map<string, SSLCipherSuite> _ciphers;
111
111
  };
112
112
 
@@ -237,7 +237,7 @@ CiphersHelper::initialize()
237
237
  //_ciphers["DH_anon_WITH_3DES_EDE_CBC_SHA"] = TLS_DH_anon_WITH_3DES_EDE_CBC_SHA;
238
238
  _ciphers["DH_anon_WITH_AES_128_CBC_SHA256"] = TLS_DH_anon_WITH_AES_128_CBC_SHA256;
239
239
  _ciphers["DH_anon_WITH_AES_256_CBC_SHA256"] = TLS_DH_anon_WITH_AES_256_CBC_SHA256;
240
-
240
+
241
241
  //
242
242
  // Addendum from RFC 4279, TLS PSK
243
243
  //
@@ -286,17 +286,17 @@ CiphersHelper::initialize()
286
286
  _ciphers["DHE_PSK_WITH_AES_256_GCM_SHA384"] = TLS_DHE_PSK_WITH_AES_256_GCM_SHA384;
287
287
  _ciphers["RSA_PSK_WITH_AES_128_GCM_SHA256"] = TLS_RSA_PSK_WITH_AES_128_GCM_SHA256;
288
288
  _ciphers["RSA_PSK_WITH_AES_256_GCM_SHA384"] = TLS_RSA_PSK_WITH_AES_256_GCM_SHA384;
289
-
289
+
290
290
  _ciphers["PSK_WITH_AES_128_CBC_SHA256"] = TLS_PSK_WITH_AES_128_CBC_SHA256;
291
291
  _ciphers["PSK_WITH_AES_256_CBC_SHA384"] = TLS_PSK_WITH_AES_256_CBC_SHA384;
292
292
  _ciphers["PSK_WITH_NULL_SHA256"] = TLS_PSK_WITH_NULL_SHA256;
293
293
  _ciphers["PSK_WITH_NULL_SHA384"] = TLS_PSK_WITH_NULL_SHA384;
294
-
294
+
295
295
  _ciphers["DHE_PSK_WITH_AES_128_CBC_SHA256"] = TLS_DHE_PSK_WITH_AES_128_CBC_SHA256;
296
296
  _ciphers["DHE_PSK_WITH_AES_256_CBC_SHA384"] = TLS_DHE_PSK_WITH_AES_256_CBC_SHA384;
297
297
  _ciphers["DHE_PSK_WITH_NULL_SHA256"] = TLS_DHE_PSK_WITH_NULL_SHA256;
298
298
  _ciphers["DHE_PSK_WITH_NULL_SHA384"] = TLS_DHE_PSK_WITH_NULL_SHA384;
299
-
299
+
300
300
  _ciphers["RSA_PSK_WITH_AES_128_CBC_SHA256"] = TLS_RSA_PSK_WITH_AES_128_CBC_SHA256;
301
301
  _ciphers["RSA_PSK_WITH_AES_256_CBC_SHA384"] = TLS_RSA_PSK_WITH_AES_256_CBC_SHA384;
302
302
  _ciphers["RSA_PSK_WITH_NULL_SHA256"] = TLS_RSA_PSK_WITH_NULL_SHA256;
@@ -358,23 +358,23 @@ CiphersHelper::cipherForName(const string& name)
358
358
  // protocol ciphers, for example SSL_RSA_WITH_RC4_128_MD5/TLS_RSA_WITH_RC4_128_MD5
359
359
  // are represeted by the same SSLCipherSuite value, the names return by this method
360
360
  // doesn't include a protocol prefix.
361
- //
361
+ //
362
362
  string
363
363
  CiphersHelper::cipherName(SSLCipherSuite cipher)
364
364
  {
365
365
  switch(cipher)
366
366
  {
367
- case SSL_NULL_WITH_NULL_NULL:
367
+ case SSL_NULL_WITH_NULL_NULL:
368
368
  return "NULL_WITH_NULL_NULL";
369
369
  case SSL_RSA_WITH_NULL_MD5:
370
370
  return "RSA_WITH_NULL_MD5";
371
371
  case SSL_RSA_WITH_NULL_SHA:
372
372
  return "RSA_WITH_NULL_SHA";
373
- case SSL_RSA_EXPORT_WITH_RC4_40_MD5:
373
+ case SSL_RSA_EXPORT_WITH_RC4_40_MD5:
374
374
  return "RSA_EXPORT_WITH_RC4_40_MD5";
375
- case SSL_RSA_WITH_RC4_128_MD5:
375
+ case SSL_RSA_WITH_RC4_128_MD5:
376
376
  return "RSA_WITH_RC4_128_MD5";
377
- case SSL_RSA_WITH_RC4_128_SHA:
377
+ case SSL_RSA_WITH_RC4_128_SHA:
378
378
  return "RSA_WITH_RC4_128_SHA";
379
379
  case SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5:
380
380
  return "RSA_EXPORT_WITH_RC2_CBC_40_MD5";
@@ -382,7 +382,7 @@ CiphersHelper::cipherName(SSLCipherSuite cipher)
382
382
  return "RSA_WITH_IDEA_CBC_SHA";
383
383
  case SSL_RSA_EXPORT_WITH_DES40_CBC_SHA:
384
384
  return "RSA_EXPORT_WITH_DES40_CBC_SHA";
385
- case SSL_RSA_WITH_DES_CBC_SHA:
385
+ case SSL_RSA_WITH_DES_CBC_SHA:
386
386
  return "RSA_WITH_DES_CBC_SHA";
387
387
  case SSL_RSA_WITH_3DES_EDE_CBC_SHA:
388
388
  return "RSA_WITH_3DES_EDE_CBC_SHA";
@@ -796,6 +796,7 @@ IceSSL::SecureTransportEngine::initialized() const
796
796
  IceUtil::Mutex::Lock lock(_mutex);
797
797
  return _initialized;
798
798
  }
799
+
799
800
  //
800
801
  // Setup the engine.
801
802
  //
@@ -807,385 +808,279 @@ IceSSL::SecureTransportEngine::initialize()
807
808
  {
808
809
  return;
809
810
  }
810
-
811
+
811
812
  SSLEngine::initialize();
812
-
813
- const string propPrefix = "IceSSL.";
813
+
814
814
  const PropertiesPtr properties = communicator()->getProperties();
815
-
815
+
816
816
  //
817
817
  // Check for a default directory. We look in this directory for
818
818
  // files mentioned in the configuration.
819
819
  //
820
- string defaultDir = properties->getProperty(propPrefix + "DefaultDir");
821
-
820
+ const string defaultDir = properties->getProperty("IceSSL.DefaultDir");
821
+
822
822
  //
823
823
  // Open the application KeyChain or create it if the keychain doesn't exists
824
824
  //
825
825
  string keychainPath = properties->getProperty("IceSSL.Keychain");
826
826
  string keychainPassword = properties->getProperty("IceSSL.KeychainPassword");
827
-
828
- bool usePassword = !keychainPassword.empty();
829
- size_t size = keychainPassword.size();
830
- const char* password = usePassword ? keychainPassword.c_str() : 0;
831
-
832
- CFDataRef hash = 0;
827
+
833
828
  SecKeychainRef keychain = 0;
834
- SecCertificateRef cert = 0;
835
- SecKeyRef key = 0;
836
- SecIdentityRef identity = 0;
837
-
838
- try
829
+ OSStatus err = 0;
830
+ if(keychainPath.empty())
839
831
  {
840
- OSStatus err = 0;
841
- if(keychainPath.empty())
832
+ if((err = SecKeychainCopyDefault(&keychain)))
842
833
  {
843
- if((err = SecKeychainCopyDefault(&keychain)))
844
- {
845
- throw PluginInitializationException(__FILE__, __LINE__,
846
- "IceSSL: unable to retrieve default keychain:\n" + errorToString(err));
847
- }
834
+ throw PluginInitializationException(__FILE__, __LINE__,
835
+ "IceSSL: unable to retrieve default keychain:\n" + errorToString(err));
848
836
  }
849
- else
837
+ }
838
+ else
839
+ {
840
+ //
841
+ // KeyChain path is relative to the current working directory.
842
+ //
843
+ if(!IceUtilInternal::isAbsolutePath(keychainPath))
850
844
  {
851
- //
852
- // KeyChain path is relative to the current working directory.
853
- //
854
- if(!IceUtilInternal::isAbsolutePath(keychainPath))
855
- {
856
- string cwd;
857
- if(IceUtilInternal::getcwd(cwd) == 0)
858
- {
859
- keychainPath = string(cwd) + '/' + keychainPath;
860
- }
861
- }
862
-
863
- if((err = SecKeychainOpen(keychainPath.c_str(), &keychain)))
845
+ string cwd;
846
+ if(IceUtilInternal::getcwd(cwd) == 0)
864
847
  {
865
- throw PluginInitializationException(__FILE__, __LINE__, "IceSSL: unable to open keychain: `" +
866
- keychainPath + "'\n" + errorToString(err));
848
+ keychainPath = string(cwd) + '/' + keychainPath;
867
849
  }
868
850
  }
869
-
870
- SecKeychainStatus status;
871
- err = SecKeychainGetStatus(keychain, &status);
872
851
 
873
- if(err == noErr)
852
+ if((err = SecKeychainOpen(keychainPath.c_str(), &keychain)))
874
853
  {
875
- if((err = SecKeychainUnlock(keychain, size, password, usePassword)))
876
- {
877
- throw PluginInitializationException(__FILE__, __LINE__,
878
- "IceSSL: unable to unlock keychain:\n" + errorToString(err));
879
- }
854
+ throw PluginInitializationException(__FILE__, __LINE__, "IceSSL: unable to open keychain: `" +
855
+ keychainPath + "'\n" + errorToString(err));
880
856
  }
881
- else if(err == errSecNoSuchKeychain)
857
+ }
858
+
859
+ UniqueRef<SecKeychainRef> k(keychain);
860
+
861
+ SecKeychainStatus status;
862
+ err = SecKeychainGetStatus(keychain, &status);
863
+ if(err == noErr)
864
+ {
865
+ const char* pass = keychainPassword.empty() ? 0 : keychainPassword.c_str();
866
+ if((err = SecKeychainUnlock(keychain, keychainPassword.size(), pass, pass != 0)))
882
867
  {
883
- if((err = SecKeychainCreate(keychainPath.c_str(), size, password, keychainPassword.empty(), 0, &keychain)))
884
- {
885
- throw PluginInitializationException(__FILE__, __LINE__,
886
- "IceSSL: unable to create keychain:\n" + errorToString(err));
887
- }
868
+ throw PluginInitializationException(__FILE__, __LINE__,
869
+ "IceSSL: unable to unlock keychain:\n" + errorToString(err));
888
870
  }
889
- else
871
+ }
872
+ else if(err == errSecNoSuchKeychain)
873
+ {
874
+ const char* pass = keychainPassword.empty() ? 0 : keychainPassword.c_str();
875
+ if((err = SecKeychainCreate(keychainPath.c_str(), keychainPassword.size(), pass, pass == 0, 0, &keychain)))
890
876
  {
891
- throw PluginInitializationException(__FILE__, __LINE__,
892
- "IceSSL: unable to open keychain:\n" + errorToString(err));
877
+ throw PluginInitializationException(__FILE__, __LINE__,
878
+ "IceSSL: unable to create keychain:\n" + errorToString(err));
893
879
  }
894
-
895
- //
896
- // Set keychain settings to avoid keychain lock.
897
- //
898
- SecKeychainSettings settings;
899
- settings.version = SEC_KEYCHAIN_SETTINGS_VERS1;
900
- settings.lockOnSleep = FALSE;
901
- settings.useLockInterval = FALSE;
902
- settings.lockInterval = INT_MAX;
903
-
904
- if((err = SecKeychainSetSettings(keychain, &settings)))
880
+ k.reset(keychain);
881
+ }
882
+ else
883
+ {
884
+ throw PluginInitializationException(__FILE__, __LINE__,
885
+ "IceSSL: unable to open keychain:\n" + errorToString(err));
886
+ }
887
+
888
+ //
889
+ // Set keychain settings to avoid keychain lock.
890
+ //
891
+ SecKeychainSettings settings;
892
+ settings.version = SEC_KEYCHAIN_SETTINGS_VERS1;
893
+ settings.lockOnSleep = FALSE;
894
+ settings.useLockInterval = FALSE;
895
+ settings.lockInterval = INT_MAX;
896
+ if((err = SecKeychainSetSettings(keychain, &settings)))
897
+ {
898
+ throw PluginInitializationException(__FILE__, __LINE__,
899
+ "IceSSL: error setting keychain settings:\n" + errorToString(err));
900
+ }
901
+
902
+ //
903
+ // Load the CA certificates used to authenticate peers into
904
+ // _certificateAuthorities array.
905
+ //
906
+ try
907
+ {
908
+ string caFile = properties->getProperty("IceSSL.CAs");
909
+ if(caFile.empty())
905
910
  {
906
- throw PluginInitializationException(__FILE__, __LINE__,
907
- "IceSSL: error setting keychain settings:\n" + errorToString(err));
911
+ caFile = properties->getProperty("IceSSL.CertAuthFile");
908
912
  }
909
-
910
- int passwordRetryMax = properties->getPropertyAsIntWithDefault(propPrefix + "PasswordRetryMax", 3);
911
- PasswordPromptPtr passwordPrompt = getPasswordPrompt();
912
-
913
- //
914
- // Load the CA certificates used to authenticate peers into
915
- // _certificateAuthorities array.
916
- //
913
+ if(!caFile.empty())
917
914
  {
918
- try
915
+ string resolved;
916
+ if(!checkPath(caFile, defaultDir, false, resolved))
919
917
  {
920
- string caFile = properties->getProperty(propPrefix + "CertAuthFile");
921
- if(!caFile.empty())
922
- {
923
- if(!checkPath(caFile, defaultDir, false))
924
- {
925
- throw PluginInitializationException(__FILE__, __LINE__,
926
- "IceSSL: CA certificate file not found:\n" + caFile);
927
- }
928
- _certificateAuthorities = loadCACertificates(caFile);
929
- }
918
+ throw PluginInitializationException(__FILE__, __LINE__,
919
+ "IceSSL: CA certificate file not found:\n" + caFile);
930
920
  }
931
- catch(const CertificateReadException& ce)
921
+ _certificateAuthorities.reset(loadCACertificates(resolved));
922
+ }
923
+ else if(properties->getPropertyAsInt("IceSSL.UsePlatformCAs") <= 0)
924
+ {
925
+ // Setup an empty list of Root CAs to not use the system root CAs.
926
+ _certificateAuthorities.reset(CFArrayCreate(0, 0, 0, 0));
927
+ }
928
+ }
929
+ catch(const CertificateReadException& ce)
930
+ {
931
+ throw PluginInitializationException(__FILE__, __LINE__, ce.reason);
932
+ }
933
+
934
+ const string password = properties->getProperty("IceSSL.Password");
935
+ const int passwordRetryMax = properties->getPropertyAsIntWithDefault("IceSSL.PasswordRetryMax", 3);
936
+ PasswordPromptPtr passwordPrompt = getPasswordPrompt();
937
+
938
+ string certFile = properties->getProperty("IceSSL.CertFile");
939
+ string keyFile = properties->getProperty("IceSSL.KeyFile");
940
+ string findCert = properties->getProperty("IceSSL.FindCert");
941
+ if(!certFile.empty())
942
+ {
943
+ vector<string> files;
944
+ if(!IceUtilInternal::splitString(certFile, IceUtilInternal::pathsep, files) || files.size() > 2)
945
+ {
946
+ throw PluginInitializationException(__FILE__, __LINE__,
947
+ "IceSSL: invalid value for IceSSL.CertFile:\n" + certFile);
948
+ }
949
+ vector<string> keyFiles;
950
+ if(!keyFile.empty())
951
+ {
952
+ if(!IceUtilInternal::splitString(keyFile, IceUtilInternal::pathsep, keyFiles) || keyFiles.size() > 2)
932
953
  {
933
- throw PluginInitializationException(__FILE__, __LINE__, ce.reason);
954
+ throw PluginInitializationException(__FILE__, __LINE__,
955
+ "IceSSL: invalid value for IceSSL.KeyFile:\n" + keyFile);
934
956
  }
935
- catch(const CertificateEncodingException& ce)
957
+ if(files.size() != keyFiles.size())
936
958
  {
937
- throw PluginInitializationException(__FILE__, __LINE__, ce.reason);
959
+ throw PluginInitializationException(__FILE__, __LINE__,
960
+ "IceSSL: IceSSL.KeyFile does not agree with IceSSL.CertFile");
938
961
  }
939
962
  }
940
-
941
- //
942
- // Import the application certificate and private keys into the application
943
- // keychain.
944
- //
963
+
964
+ for(int i = 0; i < files.size(); ++i)
945
965
  {
946
- string certFile = properties->getProperty(propPrefix + "CertFile");
947
- string keyFile = properties->getPropertyWithDefault(propPrefix + "KeyFile", certFile);
948
- vector<string>::size_type numCerts = 0;
966
+ string file = files[i];
967
+ string keyFile = keyFiles.empty() ? "" : keyFiles[i];
968
+ string resolved;
949
969
 
950
- if(!certFile.empty())
970
+ if(!checkPath(file, defaultDir, false, resolved))
951
971
  {
952
- vector<string> files;
953
- if(!IceUtilInternal::splitString(certFile, IceUtilInternal::pathsep, files) || files.size() > 2)
954
- {
955
- throw PluginInitializationException(__FILE__, __LINE__, "IceSSL: invalid value for " + propPrefix +
956
- "CertFile:\n" + certFile);
957
- }
958
- numCerts = files.size();
959
- for(vector<string>::iterator p = files.begin(); p != files.end();)
960
- {
961
- string file = *p;
962
- if(!checkPath(file, defaultDir, false))
963
- {
964
- throw PluginInitializationException(__FILE__, __LINE__,
965
- "IceSSL: certificate file not found:\n" + file);
966
- }
967
-
968
- try
969
- {
970
- loadCertificate(&cert, &hash, &key, keychain, file,
971
- properties->getProperty(propPrefix + "Password"), passwordPrompt,
972
- passwordRetryMax);
973
- break;
974
- }
975
- catch(const CertificateReadException& ce)
976
- {
977
- //
978
- // If this is the last certificate rethrow the exception as PluginInitializationException,
979
- // otherwise try the next certificate.
980
- //
981
- if(++p == files.end())
982
- {
983
- throw PluginInitializationException(__FILE__, __LINE__, ce.reason);
984
- }
985
- }
986
- }
987
- }
988
-
989
- if(!key && !keyFile.empty())
990
- {
991
- vector<string> files;
992
- if(!IceUtilInternal::splitString(keyFile, IceUtilInternal::pathsep, files) || files.size() > 2)
993
- {
994
- throw PluginInitializationException(__FILE__, __LINE__,
995
- "IceSSL: invalid value for " + propPrefix + "KeyFile:\n" + keyFile);
996
- }
997
- if(files.size() != numCerts)
998
- {
999
- throw PluginInitializationException(__FILE__, __LINE__,
1000
- "IceSSL: IceSSL.KeyFile does not agree with IceSSL.CertFile");
1001
- }
1002
- for(vector<string>::iterator p = files.begin(); p != files.end();)
1003
- {
1004
- string file = *p;
1005
- if(!checkPath(file, defaultDir, false))
1006
- {
1007
- throw PluginInitializationException(__FILE__, __LINE__,
1008
- "IceSSL: key file not found:\n" + file);
1009
- }
1010
-
1011
- try
1012
- {
1013
- loadPrivateKey(&key, keyLabel(cert), hash, keychain, file,
1014
- properties->getProperty(propPrefix + "Password"),
1015
- passwordPrompt, passwordRetryMax);
1016
- break;
1017
- }
1018
- catch(const CertificateReadException& ce)
1019
- {
1020
- //
1021
- // If this is the last key rethrow the exception as PluginInitializationException,
1022
- // otherwise try the next certificate.
1023
- //
1024
- if(++p == files.end())
1025
- {
1026
- PluginInitializationException ex(__FILE__, __LINE__, ce.reason);
1027
- throw ex;
1028
- }
1029
- }
1030
- }
972
+ throw PluginInitializationException(__FILE__, __LINE__,
973
+ "IceSSL: certificate file not found:\n" + file);
1031
974
  }
975
+ file = resolved;
1032
976
 
1033
- if(!cert)
977
+ if(!keyFile.empty())
1034
978
  {
1035
- const string prop = propPrefix + "FindCert";
1036
- string val = properties->getProperty(prop);
1037
- if(!val.empty())
979
+ if(!checkPath(keyFile, defaultDir, false, resolved))
1038
980
  {
1039
- if(!(cert = findCertificates(keychain, prop, val)))
1040
- {
1041
- throw PluginInitializationException(__FILE__, __LINE__, "IceSSL: no certificates found");
1042
- }
981
+ throw PluginInitializationException(__FILE__, __LINE__, "IceSSL: key file not found:\n" + keyFile);
1043
982
  }
983
+ keyFile = resolved;
1044
984
  }
1045
-
1046
- if(cert)
985
+
986
+ try
1047
987
  {
1048
- if((err = SecIdentityCreateWithCertificate(keychain, cert, &identity)) != noErr)
1049
- {
1050
- throw PluginInitializationException(__FILE__, __LINE__,
1051
- "IceSSL: error creating certificate identity:\n" + errorToString(err));
1052
- }
988
+ _chain.reset(loadCertificateChain(file, keyFile, keychain, password, passwordPrompt, passwordRetryMax));
989
+ break;
1053
990
  }
1054
-
1055
- if(identity)
991
+ catch(const CertificateReadException& ce)
1056
992
  {
1057
- SecTrustRef trust = 0;
1058
- try
993
+ //
994
+ // If this is the last certificate rethrow the exception as PluginInitializationException,
995
+ // otherwise try the next certificate.
996
+ //
997
+ if(i == files.size() - 1)
1059
998
  {
1060
- //
1061
- // Retrieve the certificate chain
1062
- //
1063
- SecPolicyRef policy = SecPolicyCreateSSL(true, 0);
1064
- err = SecTrustCreateWithCertificates((CFArrayRef)cert, policy, &trust);
1065
- CFRelease(policy);
1066
- if(err || !trust)
1067
- {
1068
- throw PluginInitializationException(__FILE__, __LINE__,
1069
- "IceSSL: error creating trust object" + (err ? ":\n" + errorToString(err) : ""));
1070
- }
1071
-
1072
- if((err = SecTrustSetAnchorCertificates(trust, _certificateAuthorities)))
1073
- {
1074
- throw PluginInitializationException(__FILE__, __LINE__,
1075
- "IceSSL: error while establish the anchor certificates:\n" + errorToString(err));
1076
- }
1077
-
1078
- SecTrustResultType trustResult;
1079
- if((err = SecTrustEvaluate(trust, &trustResult)))
1080
- {
1081
- throw PluginInitializationException(__FILE__, __LINE__,
1082
- "IceSSL: error evaluating trust:\n" + errorToString(err));
1083
- }
1084
-
1085
- int chainLength = SecTrustGetCertificateCount(trust);
1086
- _chain = CFArrayCreateMutable(kCFAllocatorDefault, chainLength, &kCFTypeArrayCallBacks);
1087
- CFArrayAppendValue(_chain, identity);
1088
- for(int i = 1; i < chainLength; ++i)
1089
- {
1090
- CFArrayAppendValue(_chain, SecTrustGetCertificateAtIndex(trust, i));
1091
- }
1092
- CFRelease(trust);
999
+ throw PluginInitializationException(__FILE__, __LINE__, ce.reason);
1093
1000
  }
1094
- catch(...)
1095
- {
1096
- if(trust)
1097
- {
1098
- CFRelease(trust);
1099
- }
1100
- throw;
1101
- }
1102
- }
1103
-
1104
- if(hash)
1105
- {
1106
- CFRelease(hash);
1107
- }
1108
-
1109
- if(keychain)
1110
- {
1111
- CFRelease(keychain);
1112
- }
1113
-
1114
- if(cert)
1115
- {
1116
- CFRelease(cert);
1117
- }
1118
-
1119
- if(key)
1120
- {
1121
- CFRelease(key);
1122
- }
1123
-
1124
- if(identity)
1125
- {
1126
- CFRelease(identity);
1127
1001
  }
1128
1002
  }
1129
1003
  }
1130
- catch(...)
1131
- {
1132
- if(hash)
1133
- {
1134
- CFRelease(hash);
1135
- }
1136
-
1137
- if(keychain)
1004
+ else if(!findCert.empty())
1005
+ {
1006
+ UniqueRef<SecCertificateRef> cert(findCertificate(keychain, findCert));
1007
+
1008
+ //
1009
+ // Retrieve the certificate chain
1010
+ //
1011
+ UniqueRef<SecPolicyRef> policy(SecPolicyCreateSSL(true, 0));
1012
+ SecTrustRef trust = 0;
1013
+ err = SecTrustCreateWithCertificates((CFArrayRef)cert.get(), policy.get(), &trust);
1014
+ if(err || !trust)
1138
1015
  {
1139
- CFRelease(keychain);
1016
+ throw PluginInitializationException(__FILE__, __LINE__,
1017
+ "IceSSL: error creating trust object" +
1018
+ (err ? ":\n" + errorToString(err) : ""));
1140
1019
  }
1141
-
1142
- if(cert)
1020
+ UniqueRef<SecTrustRef> v(trust);
1021
+
1022
+ SecTrustResultType trustResult;
1023
+ if((err = SecTrustEvaluate(trust, &trustResult)))
1143
1024
  {
1144
- CFRelease(cert);
1025
+ throw PluginInitializationException(__FILE__, __LINE__,
1026
+ "IceSSL: error evaluating trust:\n" + errorToString(err));
1145
1027
  }
1146
-
1147
- if(key)
1028
+
1029
+ int chainLength = SecTrustGetCertificateCount(trust);
1030
+ CFMutableArrayRef items = CFArrayCreateMutable(kCFAllocatorDefault, chainLength, &kCFTypeArrayCallBacks);
1031
+ for(int i = 0; i < chainLength; ++i)
1148
1032
  {
1149
- CFRelease(key);
1033
+ CFArrayAppendValue(items, SecTrustGetCertificateAtIndex(trust, i));
1150
1034
  }
1151
-
1152
- if(identity)
1035
+
1036
+ //
1037
+ // Replace the first certificate in the chain with the
1038
+ // identity.
1039
+ //
1040
+ SecIdentityRef identity;
1041
+ err = SecIdentityCreateWithCertificate(keychain, cert.get(), &identity);
1042
+ if(err != noErr)
1153
1043
  {
1154
- CFRelease(identity);
1044
+ ostringstream os;
1045
+ os << "IceSSL: couldn't create identity for certificate found in the keychain:\n" << errorToString(err);
1046
+ throw PluginInitializationException(__FILE__, __LINE__, os.str());
1155
1047
  }
1156
-
1157
- throw;
1048
+ CFArraySetValueAtIndex(items, 0, identity);
1049
+ CFRelease(identity);
1050
+ _chain.reset(items);
1158
1051
  }
1052
+
1159
1053
  //
1160
1054
  // DiffieHellmanParams in DER format.
1161
1055
  //
1162
- string dhFile = properties->getProperty(propPrefix + "DHParams");
1056
+ string dhFile = properties->getProperty("IceSSL.DHParams");
1163
1057
  if(!dhFile.empty())
1164
1058
  {
1165
- if(!checkPath(dhFile, defaultDir, false))
1059
+ string resolved;
1060
+ if(!checkPath(dhFile, defaultDir, false, resolved))
1166
1061
  {
1167
1062
  throw PluginInitializationException(__FILE__, __LINE__, "IceSSL: DH params file not found:\n" + dhFile);
1168
1063
  }
1169
-
1170
- readFile(dhFile, _dhParams);
1064
+
1065
+ readFile(resolved, _dhParams);
1171
1066
  }
1172
-
1067
+
1173
1068
  //
1174
1069
  // Establish the cipher list.
1175
1070
  //
1176
- string ciphers = properties->getProperty(propPrefix + "Ciphers");
1071
+ const string ciphers = properties->getProperty("IceSSL.Ciphers");
1177
1072
  CiphersHelper::initialize();
1178
-
1073
+
1179
1074
  if(!ciphers.empty())
1180
1075
  {
1181
1076
  parseCiphers(ciphers);
1182
1077
  }
1183
-
1078
+
1184
1079
  if(securityTraceLevel() >= 1)
1185
1080
  {
1186
1081
  ostringstream os;
1187
1082
  os << "enabling SSL ciphersuites:";
1188
-
1083
+
1189
1084
  if(_ciphers.empty())
1190
1085
  {
1191
1086
  map<string, SSLCipherSuite> enabled = CiphersHelper::ciphers();
@@ -1203,20 +1098,20 @@ IceSSL::SecureTransportEngine::initialize()
1203
1098
  }
1204
1099
  getLogger()->trace(securityTraceCategory(), os.str());
1205
1100
  }
1206
-
1101
+
1207
1102
  //
1208
1103
  // Parse protocols
1209
1104
  //
1210
- const string protocolVersionMax = properties->getProperty(propPrefix + "ProtocolVersionMax");
1105
+ const string protocolVersionMax = properties->getProperty("IceSSL.ProtocolVersionMax");
1211
1106
  if(!protocolVersionMax.empty())
1212
1107
  {
1213
1108
  _protocolVersionMax = parseProtocol(protocolVersionMax);
1214
1109
  }
1215
-
1110
+
1216
1111
  //
1217
1112
  // The default min protocol version is set to TLS1.0 to avoid security issues with SSLv3
1218
- //
1219
- const string protocolVersionMin = properties->getPropertyWithDefault(propPrefix + "ProtocolVersionMin", "tls1_0");
1113
+ //
1114
+ const string protocolVersionMin = properties->getPropertyWithDefault("IceSSL.ProtocolVersionMin", "tls1_0");
1220
1115
  if(!protocolVersionMin.empty())
1221
1116
  {
1222
1117
  _protocolVersionMin = parseProtocol(protocolVersionMin);
@@ -1230,29 +1125,18 @@ IceSSL::SecureTransportEngine::initialize()
1230
1125
  void
1231
1126
  IceSSL::SecureTransportEngine::destroy()
1232
1127
  {
1233
- if(_certificateAuthorities)
1234
- {
1235
- CFRelease(_certificateAuthorities);
1236
- _certificateAuthorities = 0;
1237
- }
1238
-
1239
- if(_chain)
1240
- {
1241
- CFRelease(_chain);
1242
- _chain = 0;
1243
- }
1244
1128
  }
1245
1129
 
1246
1130
  SSLContextRef
1247
1131
  IceSSL::SecureTransportEngine::newContext(bool incoming)
1248
1132
  {
1249
- SSLContextRef ssl = SSLCreateContext(kCFAllocatorDefault, incoming ? kSSLServerSide : kSSLClientSide,
1133
+ SSLContextRef ssl = SSLCreateContext(kCFAllocatorDefault, incoming ? kSSLServerSide : kSSLClientSide,
1250
1134
  kSSLStreamType);
1251
1135
  if(!ssl)
1252
1136
  {
1253
1137
  throw SecurityException(__FILE__, __LINE__, "IceSSL: unable to create SSL context");
1254
1138
  }
1255
-
1139
+
1256
1140
  OSStatus err = noErr;
1257
1141
  if(incoming)
1258
1142
  {
@@ -1279,23 +1163,22 @@ IceSSL::SecureTransportEngine::newContext(bool incoming)
1279
1163
  break;
1280
1164
  }
1281
1165
  }
1282
-
1166
+
1283
1167
  if(!_dhParams.empty())
1284
1168
  {
1285
1169
  if((err = SSLSetDiffieHellmanParams(ssl, &_dhParams[0], _dhParams.size())))
1286
1170
  {
1287
- throw SecurityException(__FILE__, __LINE__,
1171
+ throw SecurityException(__FILE__, __LINE__,
1288
1172
  "IceSSL: unable to create the trust object:\n" + errorToString(err));
1289
1173
  }
1290
1174
  }
1291
1175
  }
1292
-
1293
- if(_chain && (err = SSLSetCertificate(ssl, _chain)))
1294
- {
1295
- throw SecurityException(__FILE__, __LINE__,
1176
+
1177
+ if(_chain && (err = SSLSetCertificate(ssl, _chain.get())))
1178
+ {
1179
+ throw SecurityException(__FILE__, __LINE__,
1296
1180
  "IceSSL: error while setting the SSL context certificate:\n" + errorToString(err));
1297
1181
  }
1298
-
1299
1182
 
1300
1183
  if(!_ciphers.empty())
1301
1184
  {
@@ -1304,39 +1187,39 @@ IceSSL::SecureTransportEngine::newContext(bool incoming)
1304
1187
  throw SecurityException(__FILE__, __LINE__, "IceSSL: error while setting ciphers:\n" + errorToString(err));
1305
1188
  }
1306
1189
  }
1307
-
1308
- if((err = SSLSetSessionOption(ssl, incoming ? kSSLSessionOptionBreakOnClientAuth :
1190
+
1191
+ if((err = SSLSetSessionOption(ssl, incoming ? kSSLSessionOptionBreakOnClientAuth :
1309
1192
  kSSLSessionOptionBreakOnServerAuth,
1310
1193
  true)))
1311
1194
  {
1312
1195
  throw SecurityException(__FILE__, __LINE__, "IceSSL: error while setting SSL option:\n" + errorToString(err));
1313
1196
  }
1314
-
1197
+
1315
1198
  if(_protocolVersionMax != kSSLProtocolUnknown)
1316
1199
  {
1317
1200
  if((err = SSLSetProtocolVersionMax(ssl, _protocolVersionMax)))
1318
1201
  {
1319
- throw SecurityException(__FILE__, __LINE__,
1202
+ throw SecurityException(__FILE__, __LINE__,
1320
1203
  "IceSSL: error while setting SSL protocol version max:\n" + errorToString(err));
1321
1204
  }
1322
1205
  }
1323
-
1206
+
1324
1207
  if(_protocolVersionMin != kSSLProtocolUnknown)
1325
1208
  {
1326
1209
  if((err = SSLSetProtocolVersionMin(ssl, _protocolVersionMin)))
1327
1210
  {
1328
- throw SecurityException(__FILE__, __LINE__,
1211
+ throw SecurityException(__FILE__, __LINE__,
1329
1212
  "IceSSL: error while setting SSL protocol version min:\n" + errorToString(err));
1330
1213
  }
1331
1214
  }
1332
-
1215
+
1333
1216
  return ssl;
1334
1217
  }
1335
1218
 
1336
1219
  CFArrayRef
1337
1220
  IceSSL::SecureTransportEngine::getCertificateAuthorities() const
1338
1221
  {
1339
- return _certificateAuthorities;
1222
+ return _certificateAuthorities.get();
1340
1223
  }
1341
1224
 
1342
1225
  string
@@ -1350,7 +1233,7 @@ IceSSL::SecureTransportEngine::parseCiphers(const string& ciphers)
1350
1233
  {
1351
1234
  vector<string> tokens;
1352
1235
  vector<CipherExpression> cipherExpressions;
1353
-
1236
+
1354
1237
  bool allCiphers = false;
1355
1238
  IceUtilInternal::splitString(ciphers, " \t", tokens);
1356
1239
  for(vector<string>::const_iterator i = tokens.begin(); i != tokens.end(); ++i)
@@ -1360,7 +1243,7 @@ IceSSL::SecureTransportEngine::parseCiphers(const string& ciphers)
1360
1243
  {
1361
1244
  if(i != tokens.begin())
1362
1245
  {
1363
- throw PluginInitializationException(__FILE__, __LINE__,
1246
+ throw PluginInitializationException(__FILE__, __LINE__,
1364
1247
  "IceSSL: `ALL' must be first in cipher list `" + ciphers + "'");
1365
1248
  }
1366
1249
  allCiphers = true;
@@ -1369,7 +1252,7 @@ IceSSL::SecureTransportEngine::parseCiphers(const string& ciphers)
1369
1252
  {
1370
1253
  if(i != tokens.begin())
1371
1254
  {
1372
- throw PluginInitializationException(__FILE__, __LINE__,
1255
+ throw PluginInitializationException(__FILE__, __LINE__,
1373
1256
  "IceSSL: `NONE' must be first in cipher list `" + ciphers + "'");
1374
1257
  }
1375
1258
  }
@@ -1385,7 +1268,7 @@ IceSSL::SecureTransportEngine::parseCiphers(const string& ciphers)
1385
1268
  }
1386
1269
  else
1387
1270
  {
1388
- throw PluginInitializationException(__FILE__, __LINE__,
1271
+ throw PluginInitializationException(__FILE__, __LINE__,
1389
1272
  "IceSSL: invalid cipher expression `" + token + "'");
1390
1273
  }
1391
1274
  }
@@ -1393,12 +1276,12 @@ IceSSL::SecureTransportEngine::parseCiphers(const string& ciphers)
1393
1276
  {
1394
1277
  ce.negation = false;
1395
1278
  }
1396
-
1279
+
1397
1280
  if(token.find('(') == 0)
1398
1281
  {
1399
1282
  if(token.rfind(')') != token.size() - 1)
1400
1283
  {
1401
- throw PluginInitializationException(__FILE__, __LINE__,
1284
+ throw PluginInitializationException(__FILE__, __LINE__,
1402
1285
  "IceSSL: invalid cipher expression `" + token + "'");
1403
1286
  }
1404
1287
 
@@ -1408,7 +1291,7 @@ IceSSL::SecureTransportEngine::parseCiphers(const string& ciphers)
1408
1291
  }
1409
1292
  catch(const Ice::SyscallException&)
1410
1293
  {
1411
- throw PluginInitializationException(__FILE__, __LINE__,
1294
+ throw PluginInitializationException(__FILE__, __LINE__,
1412
1295
  "IceSSL: invalid cipher expression `" + token + "'");
1413
1296
  }
1414
1297
  }
@@ -1416,34 +1299,35 @@ IceSSL::SecureTransportEngine::parseCiphers(const string& ciphers)
1416
1299
  {
1417
1300
  ce.cipher = token;
1418
1301
  }
1419
-
1302
+
1420
1303
  cipherExpressions.push_back(ce);
1421
1304
  }
1422
1305
  }
1423
-
1306
+
1424
1307
  //
1425
1308
  // Context used to get the cipher list
1426
1309
  //
1427
1310
  SSLContextRef ctx = SSLCreateContext(kCFAllocatorDefault, kSSLServerSide, kSSLStreamType);
1428
1311
  size_t numSupportedCiphers = 0;
1429
1312
  SSLGetNumberSupportedCiphers(ctx, &numSupportedCiphers);
1430
-
1313
+
1431
1314
  vector<SSLCipherSuite> supported;
1432
1315
  supported.resize(numSupportedCiphers);
1433
-
1316
+
1434
1317
  OSStatus err = SSLGetSupportedCiphers(ctx, &supported[0], &numSupportedCiphers);
1318
+ CFRelease(ctx);
1435
1319
  if(err)
1436
1320
  {
1437
- throw PluginInitializationException(__FILE__, __LINE__,
1321
+ throw PluginInitializationException(__FILE__, __LINE__,
1438
1322
  "IceSSL: unable to get supported ciphers list:\n" + errorToString(err));
1439
1323
  }
1440
-
1324
+
1441
1325
  vector<SSLCipherSuite> enabled;
1442
1326
  if(allCiphers)
1443
1327
  {
1444
1328
  enabled = supported;
1445
1329
  }
1446
-
1330
+
1447
1331
  for(vector<CipherExpression>::const_iterator i = cipherExpressions.begin(); i != cipherExpressions.end(); ++i)
1448
1332
  {
1449
1333
  CipherExpression ce = *i;
@@ -1453,7 +1337,7 @@ IceSSL::SecureTransportEngine::parseCiphers(const string& ciphers)
1453
1337
  {
1454
1338
  SSLCipherSuite cipher = *j;
1455
1339
  string name = CiphersHelper::cipherName(cipher);
1456
-
1340
+
1457
1341
  if(ce.cipher.empty())
1458
1342
  {
1459
1343
  if(ce.re->match(name))