zeroc-ice 3.6.5 → 3.7.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (777) hide show
  1. checksums.yaml +5 -5
  2. data/ICE_LICENSE +17 -17
  3. data/LICENSE +12 -12
  4. data/bin/slice2rb +1 -6
  5. data/ext/Communicator.cpp +223 -61
  6. data/ext/Communicator.h +1 -6
  7. data/ext/Config.h +23 -7
  8. data/ext/Connection.cpp +108 -76
  9. data/ext/Connection.h +4 -6
  10. data/ext/Endpoint.cpp +16 -54
  11. data/ext/Endpoint.h +1 -6
  12. data/ext/ImplicitContext.cpp +1 -10
  13. data/ext/ImplicitContext.h +1 -6
  14. data/ext/Init.cpp +4 -6
  15. data/ext/Logger.cpp +1 -6
  16. data/ext/Logger.h +1 -6
  17. data/ext/Operation.cpp +38 -54
  18. data/ext/Operation.h +1 -6
  19. data/ext/Properties.cpp +3 -8
  20. data/ext/Properties.h +1 -6
  21. data/ext/Proxy.cpp +111 -70
  22. data/ext/Proxy.h +1 -6
  23. data/ext/Slice.cpp +5 -20
  24. data/ext/Slice.h +1 -6
  25. data/ext/Types.cpp +313 -224
  26. data/ext/Types.h +118 -71
  27. data/ext/Util.cpp +69 -36
  28. data/ext/Util.h +117 -42
  29. data/ext/ValueFactoryManager.cpp +440 -0
  30. data/ext/ValueFactoryManager.h +95 -0
  31. data/ext/extconf.rb +52 -48
  32. data/ext/ice/cpp/include/Ice/Application.h +275 -105
  33. data/ext/ice/cpp/include/Ice/AsyncResult.h +124 -337
  34. data/ext/ice/cpp/include/Ice/AsyncResultF.h +4 -7
  35. data/ext/ice/cpp/include/Ice/BatchRequestInterceptor.h +39 -16
  36. data/ext/ice/cpp/include/Ice/BatchRequestQueueF.h +1 -6
  37. data/ext/ice/cpp/include/Ice/Buffer.h +10 -15
  38. data/ext/ice/cpp/include/Ice/CommunicatorAsync.h +56 -17
  39. data/ext/ice/cpp/include/Ice/Comparable.h +205 -0
  40. data/ext/ice/cpp/include/Ice/Config.h +16 -39
  41. data/ext/ice/cpp/include/Ice/ConnectionAsync.h +203 -16
  42. data/ext/ice/cpp/include/Ice/ConnectionIF.h +7 -6
  43. data/ext/ice/cpp/include/Ice/ConsoleUtil.h +23 -0
  44. data/ext/ice/cpp/include/Ice/DefaultValueFactory.h +57 -0
  45. data/ext/ice/cpp/include/Ice/DispatchInterceptor.h +20 -12
  46. data/ext/ice/cpp/include/Ice/Dispatcher.h +35 -19
  47. data/ext/ice/cpp/include/Ice/DynamicLibrary.h +7 -10
  48. data/ext/ice/cpp/include/Ice/DynamicLibraryF.h +1 -6
  49. data/ext/ice/cpp/include/Ice/Exception.h +110 -63
  50. data/ext/ice/cpp/include/Ice/ExceptionHelpers.h +74 -0
  51. data/ext/ice/cpp/include/Ice/FactoryTable.h +22 -18
  52. data/ext/ice/cpp/include/Ice/FactoryTableInit.h +28 -31
  53. data/ext/ice/cpp/include/Ice/Format.h +17 -18
  54. data/ext/ice/cpp/include/Ice/Functional.h +38 -38
  55. data/ext/ice/cpp/include/Ice/GCObject.h +9 -10
  56. data/ext/ice/cpp/include/Ice/Handle.h +6 -16
  57. data/ext/ice/cpp/include/Ice/Ice.h +9 -10
  58. data/ext/ice/cpp/include/Ice/IconvStringConverter.h +377 -0
  59. data/ext/ice/cpp/include/Ice/Incoming.h +132 -38
  60. data/ext/ice/cpp/include/Ice/IncomingAsync.h +109 -31
  61. data/ext/ice/cpp/include/Ice/IncomingAsyncF.h +7 -6
  62. data/ext/ice/cpp/include/Ice/Initialize.h +872 -60
  63. data/ext/ice/cpp/include/Ice/InputStream.h +1514 -0
  64. data/ext/ice/cpp/include/Ice/InstanceF.h +1 -7
  65. data/ext/ice/cpp/include/Ice/InterfaceByValue.h +57 -0
  66. data/ext/ice/cpp/include/Ice/LocalObject.h +13 -14
  67. data/ext/ice/cpp/include/Ice/LocalObjectF.h +1 -6
  68. data/ext/ice/cpp/include/Ice/LoggerUtil.h +56 -24
  69. data/ext/ice/cpp/include/Ice/MetricsAdminI.h +124 -71
  70. data/ext/ice/cpp/include/Ice/MetricsFunctional.h +25 -10
  71. data/ext/ice/cpp/include/Ice/MetricsObserverI.h +116 -32
  72. data/ext/ice/cpp/include/Ice/NativePropertiesAdmin.h +61 -30
  73. data/ext/ice/cpp/include/Ice/Object.h +413 -78
  74. data/ext/ice/cpp/include/Ice/ObjectF.h +12 -8
  75. data/ext/ice/cpp/include/Ice/ObserverHelper.h +18 -13
  76. data/ext/ice/cpp/include/Ice/Optional.h +1114 -0
  77. data/ext/ice/cpp/include/Ice/OutgoingAsync.h +684 -89
  78. data/ext/ice/cpp/include/Ice/OutgoingAsyncF.h +12 -11
  79. data/ext/ice/cpp/include/Ice/OutputStream.h +1092 -0
  80. data/ext/ice/cpp/include/Ice/Protocol.h +49 -17
  81. data/ext/ice/cpp/include/Ice/Proxy.h +3438 -745
  82. data/ext/ice/cpp/include/Ice/ProxyF.h +13 -38
  83. data/ext/ice/cpp/include/Ice/ProxyFactoryF.h +1 -6
  84. data/ext/ice/cpp/include/Ice/ProxyHandle.h +43 -55
  85. data/ext/ice/cpp/include/Ice/ReferenceF.h +1 -6
  86. data/ext/ice/cpp/include/Ice/RegisterPlugins.h +84 -12
  87. data/ext/ice/cpp/include/Ice/RequestHandlerF.h +10 -9
  88. data/ext/ice/cpp/include/Ice/ResponseHandlerF.h +6 -6
  89. data/ext/ice/cpp/include/Ice/SHA1.h +42 -0
  90. data/ext/ice/cpp/include/Ice/ServantManagerF.h +1 -6
  91. data/ext/ice/cpp/include/Ice/Service.h +273 -154
  92. data/ext/ice/cpp/include/Ice/SliceChecksums.h +5 -6
  93. data/ext/ice/cpp/include/Ice/SlicedData.h +121 -53
  94. data/ext/ice/cpp/include/Ice/SlicedDataF.h +17 -11
  95. data/ext/ice/cpp/include/Ice/StreamHelpers.h +453 -140
  96. data/ext/ice/cpp/include/Ice/StringConverter.h +78 -0
  97. data/ext/ice/cpp/include/Ice/ThreadPoolF.h +1 -6
  98. data/ext/ice/cpp/include/Ice/UUID.h +19 -0
  99. data/ext/ice/cpp/include/{IceUtil → Ice}/UniquePtr.h +22 -28
  100. data/ext/ice/cpp/include/Ice/UniqueRef.h +97 -0
  101. data/ext/ice/cpp/include/Ice/UserExceptionFactory.h +45 -13
  102. data/ext/ice/cpp/include/Ice/Value.h +139 -0
  103. data/ext/ice/cpp/include/Ice/ValueF.h +21 -0
  104. data/ext/ice/cpp/include/IceSSL/Config.h +8 -28
  105. data/ext/ice/cpp/include/IceSSL/IceSSL.h +17 -11
  106. data/ext/ice/cpp/include/IceSSL/OpenSSL.h +147 -0
  107. data/ext/ice/cpp/include/IceSSL/Plugin.h +461 -448
  108. data/ext/ice/cpp/include/IceSSL/SChannel.h +72 -0
  109. data/ext/ice/cpp/include/IceSSL/SecureTransport.h +72 -0
  110. data/ext/ice/cpp/include/IceSSL/UWP.h +62 -0
  111. data/ext/ice/cpp/include/IceUtil/Atomic.h +7 -14
  112. data/ext/ice/cpp/include/IceUtil/Cond.h +17 -23
  113. data/ext/ice/cpp/include/IceUtil/Config.h +166 -46
  114. data/ext/ice/cpp/include/IceUtil/ConsoleUtil.h +92 -0
  115. data/ext/ice/cpp/include/IceUtil/CountDownLatch.h +5 -10
  116. data/ext/ice/cpp/include/IceUtil/CtrlCHandler.h +63 -41
  117. data/ext/ice/cpp/include/IceUtil/DisableWarnings.h +5 -13
  118. data/ext/ice/cpp/include/IceUtil/Exception.h +284 -75
  119. data/ext/ice/cpp/include/IceUtil/FileUtil.h +143 -0
  120. data/ext/ice/cpp/include/IceUtil/Functional.h +4 -6
  121. data/ext/ice/cpp/include/IceUtil/Handle.h +11 -16
  122. data/ext/ice/cpp/include/IceUtil/IceUtil.h +4 -15
  123. data/ext/ice/cpp/include/IceUtil/InputUtil.h +3 -8
  124. data/ext/ice/cpp/include/IceUtil/Iterator.h +2 -7
  125. data/ext/ice/cpp/include/IceUtil/Lock.h +8 -15
  126. data/ext/ice/cpp/include/IceUtil/Monitor.h +1 -7
  127. data/ext/ice/cpp/include/IceUtil/Mutex.h +19 -23
  128. data/ext/ice/cpp/include/IceUtil/MutexProtocol.h +2 -7
  129. data/ext/ice/cpp/include/IceUtil/MutexPtrLock.h +4 -9
  130. data/ext/ice/cpp/include/IceUtil/MutexPtrTryLock.h +4 -9
  131. data/ext/ice/cpp/include/IceUtil/Optional.h +134 -23
  132. data/ext/ice/cpp/include/IceUtil/Options.h +17 -23
  133. data/ext/ice/cpp/include/IceUtil/OutputUtil.h +61 -37
  134. data/ext/ice/cpp/include/IceUtil/PopDisableWarnings.h +6 -11
  135. data/ext/ice/cpp/include/IceUtil/PushDisableWarnings.h +18 -15
  136. data/ext/ice/cpp/include/IceUtil/Random.h +39 -8
  137. data/ext/ice/cpp/include/IceUtil/RecMutex.h +7 -13
  138. data/ext/ice/cpp/include/IceUtil/ResourceConfig.h +53 -0
  139. data/ext/ice/cpp/include/IceUtil/ScannerConfig.h +10 -15
  140. data/ext/ice/cpp/include/IceUtil/ScopedArray.h +8 -7
  141. data/ext/ice/cpp/include/IceUtil/Shared.h +5 -12
  142. data/ext/ice/cpp/{src → include}/IceUtil/StopWatch.h +2 -7
  143. data/ext/ice/cpp/include/IceUtil/StringConverter.h +146 -126
  144. data/ext/ice/cpp/include/IceUtil/StringUtil.h +32 -26
  145. data/ext/ice/cpp/include/IceUtil/Thread.h +10 -17
  146. data/ext/ice/cpp/include/IceUtil/ThreadException.h +33 -47
  147. data/ext/ice/cpp/include/IceUtil/Time.h +3 -8
  148. data/ext/ice/cpp/include/IceUtil/Timer.h +18 -18
  149. data/ext/ice/cpp/include/IceUtil/UUID.h +6 -7
  150. data/ext/ice/cpp/include/IceUtil/UndefSysMacros.h +1 -6
  151. data/ext/ice/cpp/include/generated/Ice/BuiltinSequences.h +170 -0
  152. data/ext/ice/cpp/include/generated/Ice/Communicator.h +1156 -0
  153. data/ext/ice/cpp/include/{Ice → generated/Ice}/CommunicatorF.h +51 -16
  154. data/ext/ice/cpp/include/generated/Ice/Connection.h +1660 -0
  155. data/ext/ice/cpp/include/generated/Ice/ConnectionF.h +119 -0
  156. data/ext/ice/cpp/include/generated/Ice/Current.h +322 -0
  157. data/ext/ice/cpp/include/generated/Ice/Endpoint.h +943 -0
  158. data/ext/ice/cpp/include/generated/Ice/EndpointF.h +166 -0
  159. data/ext/ice/cpp/include/generated/Ice/EndpointTypes.h +118 -0
  160. data/ext/ice/cpp/include/{Ice → generated/Ice}/FacetMap.h +31 -15
  161. data/ext/ice/cpp/include/generated/Ice/Identity.h +264 -0
  162. data/ext/ice/cpp/include/generated/Ice/ImplicitContext.h +278 -0
  163. data/ext/ice/cpp/include/{Ice → generated/Ice}/ImplicitContextF.h +51 -16
  164. data/ext/ice/cpp/include/generated/Ice/Instrumentation.h +1143 -0
  165. data/ext/ice/cpp/include/generated/Ice/InstrumentationF.h +128 -0
  166. data/ext/ice/cpp/include/generated/Ice/LocalException.h +7041 -0
  167. data/ext/ice/cpp/include/generated/Ice/Locator.h +3850 -0
  168. data/ext/ice/cpp/include/generated/Ice/LocatorF.h +147 -0
  169. data/ext/ice/cpp/include/generated/Ice/Logger.h +231 -0
  170. data/ext/ice/cpp/include/{Ice → generated/Ice}/LoggerF.h +51 -16
  171. data/ext/ice/cpp/include/generated/Ice/Metrics.h +4717 -0
  172. data/ext/ice/cpp/include/generated/Ice/ObjectAdapter.h +1175 -0
  173. data/ext/ice/cpp/include/{Ice → generated/Ice}/ObjectAdapterF.h +51 -16
  174. data/ext/ice/cpp/include/generated/Ice/ObjectFactory.h +197 -0
  175. data/ext/ice/cpp/include/generated/Ice/Plugin.h +306 -0
  176. data/ext/ice/cpp/include/generated/Ice/PluginF.h +110 -0
  177. data/ext/ice/cpp/include/generated/Ice/Process.h +971 -0
  178. data/ext/ice/cpp/include/generated/Ice/ProcessF.h +125 -0
  179. data/ext/ice/cpp/include/generated/Ice/Properties.h +446 -0
  180. data/ext/ice/cpp/include/generated/Ice/PropertiesAdmin.h +1360 -0
  181. data/ext/ice/cpp/include/generated/Ice/PropertiesF.h +134 -0
  182. data/ext/ice/cpp/include/generated/Ice/RemoteLogger.h +2689 -0
  183. data/ext/ice/cpp/include/generated/Ice/Router.h +1838 -0
  184. data/ext/ice/cpp/include/generated/Ice/RouterF.h +125 -0
  185. data/ext/ice/cpp/include/generated/Ice/ServantLocator.h +299 -0
  186. data/ext/ice/cpp/include/{Ice → generated/Ice}/ServantLocatorF.h +51 -16
  187. data/ext/ice/cpp/include/{Ice → generated/Ice}/SliceChecksumDict.h +34 -14
  188. data/ext/ice/cpp/include/generated/Ice/ValueFactory.h +318 -0
  189. data/ext/ice/cpp/include/generated/Ice/Version.h +357 -0
  190. data/ext/ice/cpp/include/generated/IceSSL/ConnectionInfo.h +223 -0
  191. data/ext/ice/cpp/include/generated/IceSSL/ConnectionInfoF.h +101 -0
  192. data/ext/ice/cpp/include/generated/IceSSL/EndpointInfo.h +181 -0
  193. data/ext/ice/cpp/src/Ice/ACM.cpp +38 -27
  194. data/ext/ice/cpp/src/Ice/ACM.h +9 -7
  195. data/ext/ice/cpp/src/Ice/ACMF.h +30 -0
  196. data/ext/ice/cpp/src/Ice/Acceptor.cpp +6 -6
  197. data/ext/ice/cpp/src/Ice/Acceptor.h +4 -8
  198. data/ext/ice/cpp/src/Ice/AcceptorF.h +1 -6
  199. data/ext/ice/cpp/src/Ice/ArgVector.cpp +59 -0
  200. data/ext/ice/cpp/src/Ice/ArgVector.h +36 -0
  201. data/ext/ice/cpp/src/Ice/AsyncResult.cpp +15 -544
  202. data/ext/ice/cpp/src/Ice/Base64.cpp +22 -28
  203. data/ext/ice/cpp/src/Ice/Base64.h +1 -6
  204. data/ext/ice/cpp/src/Ice/BatchRequestQueue.cpp +41 -18
  205. data/ext/ice/cpp/src/Ice/BatchRequestQueue.h +15 -15
  206. data/ext/ice/cpp/src/Ice/Buffer.cpp +75 -18
  207. data/ext/ice/cpp/src/Ice/BuiltinSequences.cpp +21 -12
  208. data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.cpp +86 -197
  209. data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.h +17 -23
  210. data/ext/ice/cpp/src/Ice/Communicator.cpp +43 -15
  211. data/ext/ice/cpp/src/Ice/CommunicatorF.cpp +28 -11
  212. data/ext/ice/cpp/src/Ice/CommunicatorI.cpp +318 -117
  213. data/ext/ice/cpp/src/Ice/CommunicatorI.h +95 -40
  214. data/ext/ice/cpp/src/{IceUtil → Ice}/Cond.cpp +3 -8
  215. data/ext/ice/cpp/src/Ice/ConnectRequestHandler.cpp +55 -122
  216. data/ext/ice/cpp/src/Ice/ConnectRequestHandler.h +15 -31
  217. data/ext/ice/cpp/src/Ice/ConnectRequestHandlerF.h +6 -7
  218. data/ext/ice/cpp/src/Ice/Connection.cpp +111 -20
  219. data/ext/ice/cpp/src/Ice/ConnectionF.cpp +28 -11
  220. data/ext/ice/cpp/src/Ice/ConnectionFactory.cpp +300 -107
  221. data/ext/ice/cpp/src/Ice/ConnectionFactory.h +44 -28
  222. data/ext/ice/cpp/src/Ice/ConnectionFactoryF.h +30 -0
  223. data/ext/ice/cpp/src/Ice/ConnectionI.cpp +785 -713
  224. data/ext/ice/cpp/src/Ice/ConnectionI.h +105 -80
  225. data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.cpp +2 -20
  226. data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.h +5 -9
  227. data/ext/ice/cpp/src/Ice/Connector.cpp +6 -6
  228. data/ext/ice/cpp/src/Ice/Connector.h +4 -8
  229. data/ext/ice/cpp/src/Ice/ConnectorF.h +1 -6
  230. data/ext/ice/cpp/src/{IceUtil → Ice}/CountDownLatch.cpp +4 -9
  231. data/ext/ice/cpp/src/Ice/Current.cpp +30 -12
  232. data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.cpp +10 -16
  233. data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.h +1 -6
  234. data/ext/ice/cpp/src/Ice/DefaultsAndOverridesF.h +1 -6
  235. data/ext/ice/cpp/src/Ice/DispatchInterceptor.cpp +13 -25
  236. data/ext/ice/cpp/src/Ice/DynamicLibrary.cpp +34 -28
  237. data/ext/ice/cpp/src/Ice/Endpoint.cpp +107 -19
  238. data/ext/ice/cpp/src/Ice/EndpointF.cpp +28 -11
  239. data/ext/ice/cpp/src/Ice/EndpointFactory.cpp +152 -6
  240. data/ext/ice/cpp/src/Ice/EndpointFactory.h +72 -11
  241. data/ext/ice/cpp/src/Ice/EndpointFactoryF.h +1 -6
  242. data/ext/ice/cpp/src/Ice/EndpointFactoryManager.cpp +41 -36
  243. data/ext/ice/cpp/src/Ice/EndpointFactoryManager.h +10 -9
  244. data/ext/ice/cpp/src/Ice/EndpointFactoryManagerF.h +1 -6
  245. data/ext/ice/cpp/src/Ice/EndpointI.cpp +18 -7
  246. data/ext/ice/cpp/src/Ice/EndpointI.h +39 -18
  247. data/ext/ice/cpp/src/Ice/EndpointIF.h +18 -10
  248. data/ext/ice/cpp/src/Ice/EndpointTypes.cpp +19 -12
  249. data/ext/ice/cpp/src/Ice/EventHandler.cpp +6 -9
  250. data/ext/ice/cpp/src/Ice/EventHandler.h +13 -13
  251. data/ext/ice/cpp/src/Ice/EventHandlerF.h +5 -7
  252. data/ext/ice/cpp/src/Ice/Exception.cpp +102 -98
  253. data/ext/ice/cpp/src/Ice/FacetMap.cpp +21 -12
  254. data/ext/ice/cpp/src/Ice/FactoryTable.cpp +37 -33
  255. data/ext/ice/cpp/src/Ice/FactoryTableInit.cpp +2 -9
  256. data/ext/ice/cpp/src/Ice/GCObject.cpp +29 -31
  257. data/ext/ice/cpp/src/Ice/HashUtil.h +3 -9
  258. data/ext/ice/cpp/src/Ice/HttpParser.cpp +1 -7
  259. data/ext/ice/cpp/src/Ice/HttpParser.h +1 -6
  260. data/ext/ice/cpp/src/Ice/IPEndpointI.cpp +128 -111
  261. data/ext/ice/cpp/src/Ice/IPEndpointI.h +23 -19
  262. data/ext/ice/cpp/src/Ice/IPEndpointIF.h +6 -7
  263. data/ext/ice/cpp/src/Ice/IconvStringConverter.cpp +51 -0
  264. data/ext/ice/cpp/src/Ice/Identity.cpp +25 -16
  265. data/ext/ice/cpp/src/Ice/ImplicitContext.cpp +41 -13
  266. data/ext/ice/cpp/src/Ice/ImplicitContextF.cpp +28 -11
  267. data/ext/ice/cpp/src/Ice/ImplicitContextI.cpp +11 -28
  268. data/ext/ice/cpp/src/Ice/ImplicitContextI.h +7 -10
  269. data/ext/ice/cpp/src/Ice/Incoming.cpp +284 -255
  270. data/ext/ice/cpp/src/Ice/IncomingAsync.cpp +104 -214
  271. data/ext/ice/cpp/src/Ice/IncomingRequest.h +5 -9
  272. data/ext/ice/cpp/src/Ice/Initialize.cpp +309 -193
  273. data/ext/ice/cpp/src/Ice/InputStream.cpp +2726 -0
  274. data/ext/ice/cpp/src/Ice/Instance.cpp +243 -262
  275. data/ext/ice/cpp/src/Ice/Instance.h +30 -23
  276. data/ext/ice/cpp/src/Ice/Instrumentation.cpp +137 -23
  277. data/ext/ice/cpp/src/Ice/InstrumentationF.cpp +28 -11
  278. data/ext/ice/cpp/src/Ice/InstrumentationI.cpp +118 -105
  279. data/ext/ice/cpp/src/Ice/InstrumentationI.h +30 -36
  280. data/ext/ice/cpp/src/Ice/LocalException.cpp +1191 -422
  281. data/ext/ice/cpp/src/Ice/LocalObject.cpp +1 -7
  282. data/ext/ice/cpp/src/Ice/Locator.cpp +1282 -1222
  283. data/ext/ice/cpp/src/Ice/LocatorF.cpp +30 -12
  284. data/ext/ice/cpp/src/Ice/LocatorInfo.cpp +150 -186
  285. data/ext/ice/cpp/src/Ice/LocatorInfo.h +31 -36
  286. data/ext/ice/cpp/src/Ice/LocatorInfoF.h +1 -6
  287. data/ext/ice/cpp/src/Ice/Logger.cpp +39 -12
  288. data/ext/ice/cpp/src/Ice/LoggerAdminI.cpp +182 -88
  289. data/ext/ice/cpp/src/Ice/LoggerAdminI.h +4 -9
  290. data/ext/ice/cpp/src/Ice/LoggerF.cpp +28 -11
  291. data/ext/ice/cpp/src/Ice/LoggerI.cpp +26 -55
  292. data/ext/ice/cpp/src/Ice/LoggerI.h +7 -18
  293. data/ext/ice/cpp/src/Ice/LoggerUtil.cpp +10 -17
  294. data/ext/ice/cpp/src/Ice/Metrics.cpp +1280 -1107
  295. data/ext/ice/cpp/src/Ice/MetricsAdminI.cpp +58 -33
  296. data/ext/ice/cpp/src/Ice/MetricsObserverI.cpp +1 -7
  297. data/ext/ice/cpp/src/Ice/Network.cpp +753 -408
  298. data/ext/ice/cpp/src/Ice/Network.h +99 -36
  299. data/ext/ice/cpp/src/Ice/NetworkF.h +2 -7
  300. data/ext/ice/cpp/src/Ice/NetworkProxy.cpp +20 -19
  301. data/ext/ice/cpp/src/Ice/NetworkProxy.h +5 -7
  302. data/ext/ice/cpp/src/Ice/NetworkProxyF.h +1 -6
  303. data/ext/ice/cpp/src/Ice/OSLogLoggerI.cpp +57 -0
  304. data/ext/ice/cpp/src/Ice/OSLogLoggerI.h +40 -0
  305. data/ext/ice/cpp/src/Ice/Object.cpp +227 -232
  306. data/ext/ice/cpp/src/Ice/ObjectAdapter.cpp +45 -13
  307. data/ext/ice/cpp/src/Ice/ObjectAdapterF.cpp +28 -11
  308. data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.cpp +83 -33
  309. data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.h +13 -12
  310. data/ext/ice/cpp/src/Ice/ObjectAdapterFactoryF.h +25 -0
  311. data/ext/ice/cpp/src/Ice/ObjectAdapterI.cpp +298 -191
  312. data/ext/ice/cpp/src/Ice/ObjectAdapterI.h +44 -39
  313. data/ext/ice/cpp/src/Ice/ObjectFactory.cpp +41 -13
  314. data/ext/ice/cpp/src/Ice/ObserverHelper.cpp +9 -37
  315. data/ext/ice/cpp/src/Ice/OpaqueEndpointI.cpp +67 -67
  316. data/ext/ice/cpp/src/Ice/OpaqueEndpointI.h +15 -11
  317. data/ext/ice/cpp/src/Ice/OutgoingAsync.cpp +801 -366
  318. data/ext/ice/cpp/src/Ice/OutputStream.cpp +1367 -0
  319. data/ext/ice/cpp/src/Ice/Plugin.cpp +52 -14
  320. data/ext/ice/cpp/src/Ice/PluginF.cpp +28 -11
  321. data/ext/ice/cpp/src/Ice/PluginManagerI.cpp +27 -51
  322. data/ext/ice/cpp/src/Ice/PluginManagerI.h +7 -13
  323. data/ext/ice/cpp/src/Ice/Process.cpp +294 -128
  324. data/ext/ice/cpp/src/Ice/ProcessF.cpp +30 -12
  325. data/ext/ice/cpp/src/Ice/Properties.cpp +42 -15
  326. data/ext/ice/cpp/src/Ice/PropertiesAdmin.cpp +382 -340
  327. data/ext/ice/cpp/src/Ice/PropertiesAdminI.cpp +83 -24
  328. data/ext/ice/cpp/src/Ice/PropertiesAdminI.h +29 -10
  329. data/ext/ice/cpp/src/Ice/PropertiesF.cpp +30 -12
  330. data/ext/ice/cpp/src/Ice/PropertiesI.cpp +46 -57
  331. data/ext/ice/cpp/src/Ice/PropertiesI.h +18 -26
  332. data/ext/ice/cpp/src/Ice/PropertyNames.cpp +112 -19
  333. data/ext/ice/cpp/src/Ice/PropertyNames.h +4 -7
  334. data/ext/ice/cpp/src/Ice/Protocol.cpp +6 -19
  335. data/ext/ice/cpp/src/Ice/ProtocolInstance.cpp +37 -7
  336. data/ext/ice/cpp/src/Ice/ProtocolInstance.h +9 -25
  337. data/ext/ice/cpp/src/Ice/ProtocolInstanceF.h +1 -6
  338. data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.cpp +6 -6
  339. data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.h +3 -6
  340. data/ext/ice/cpp/src/Ice/ProtocolPluginFacadeF.h +1 -6
  341. data/ext/ice/cpp/src/Ice/Proxy.cpp +729 -957
  342. data/ext/ice/cpp/src/Ice/ProxyFactory.cpp +33 -38
  343. data/ext/ice/cpp/src/Ice/ProxyFactory.h +16 -16
  344. data/ext/ice/cpp/src/Ice/Reference.cpp +190 -106
  345. data/ext/ice/cpp/src/Ice/Reference.h +39 -28
  346. data/ext/ice/cpp/src/Ice/ReferenceFactory.cpp +69 -118
  347. data/ext/ice/cpp/src/Ice/ReferenceFactory.h +12 -17
  348. data/ext/ice/cpp/src/Ice/ReferenceFactoryF.h +1 -6
  349. data/ext/ice/cpp/src/Ice/RegisterPluginsInit.cpp +19 -9
  350. data/ext/ice/cpp/src/Ice/RegisterPluginsInit.h +1 -6
  351. data/ext/ice/cpp/src/Ice/RemoteLogger.cpp +766 -565
  352. data/ext/ice/cpp/src/Ice/ReplyStatus.h +1 -6
  353. data/ext/ice/cpp/src/Ice/RequestHandler.cpp +5 -8
  354. data/ext/ice/cpp/src/Ice/RequestHandler.h +10 -18
  355. data/ext/ice/cpp/src/Ice/RequestHandlerFactory.cpp +10 -11
  356. data/ext/ice/cpp/src/Ice/RequestHandlerFactory.h +2 -7
  357. data/ext/ice/cpp/src/Ice/ResponseHandler.cpp +3 -11
  358. data/ext/ice/cpp/src/Ice/ResponseHandler.h +16 -12
  359. data/ext/ice/cpp/src/Ice/RetryQueue.cpp +12 -20
  360. data/ext/ice/cpp/src/Ice/RetryQueue.h +7 -11
  361. data/ext/ice/cpp/src/Ice/RetryQueueF.h +1 -6
  362. data/ext/ice/cpp/src/Ice/Router.cpp +614 -492
  363. data/ext/ice/cpp/src/Ice/RouterF.cpp +30 -12
  364. data/ext/ice/cpp/src/Ice/RouterInfo.cpp +93 -99
  365. data/ext/ice/cpp/src/Ice/RouterInfo.h +42 -38
  366. data/ext/ice/cpp/src/Ice/RouterInfoF.h +1 -6
  367. data/ext/ice/cpp/src/{IceUtil → Ice}/SHA1.cpp +23 -28
  368. data/ext/ice/cpp/src/Ice/Selector.cpp +948 -855
  369. data/ext/ice/cpp/src/Ice/Selector.h +100 -152
  370. data/ext/ice/cpp/src/Ice/ServantLocator.cpp +41 -13
  371. data/ext/ice/cpp/src/Ice/ServantLocatorF.cpp +28 -11
  372. data/ext/ice/cpp/src/Ice/ServantManager.cpp +24 -45
  373. data/ext/ice/cpp/src/Ice/ServantManager.h +1 -6
  374. data/ext/ice/cpp/src/Ice/SharedContext.h +2 -7
  375. data/ext/ice/cpp/src/Ice/SliceChecksumDict.cpp +21 -12
  376. data/ext/ice/cpp/src/Ice/SliceChecksums.cpp +2 -7
  377. data/ext/ice/cpp/src/Ice/SlicedData.cpp +72 -25
  378. data/ext/ice/cpp/src/Ice/StreamSocket.cpp +208 -76
  379. data/ext/ice/cpp/src/Ice/StreamSocket.h +13 -9
  380. data/ext/ice/cpp/src/Ice/StringConverterPlugin.cpp +57 -22
  381. data/ext/ice/cpp/src/Ice/StringUtil.h +30 -0
  382. data/ext/ice/cpp/src/Ice/SysLoggerI.cpp +6 -7
  383. data/ext/ice/cpp/src/Ice/SysLoggerI.h +2 -8
  384. data/ext/ice/cpp/src/Ice/SystemdJournalI.cpp +66 -0
  385. data/ext/ice/cpp/src/Ice/SystemdJournalI.h +39 -0
  386. data/ext/ice/cpp/src/Ice/TcpAcceptor.cpp +169 -49
  387. data/ext/ice/cpp/src/Ice/TcpAcceptor.h +12 -10
  388. data/ext/ice/cpp/src/Ice/TcpConnector.cpp +6 -12
  389. data/ext/ice/cpp/src/Ice/TcpConnector.h +1 -7
  390. data/ext/ice/cpp/src/Ice/TcpEndpointI.cpp +51 -46
  391. data/ext/ice/cpp/src/Ice/TcpEndpointI.h +12 -14
  392. data/ext/ice/cpp/src/Ice/TcpTransceiver.cpp +17 -32
  393. data/ext/ice/cpp/src/Ice/TcpTransceiver.h +7 -15
  394. data/ext/ice/cpp/src/{IceUtil → Ice}/Thread.cpp +41 -54
  395. data/ext/ice/cpp/src/Ice/ThreadPool.cpp +242 -274
  396. data/ext/ice/cpp/src/Ice/ThreadPool.h +46 -48
  397. data/ext/ice/cpp/src/{IceUtil → Ice}/Timer.cpp +38 -26
  398. data/ext/ice/cpp/src/Ice/TraceLevels.cpp +2 -7
  399. data/ext/ice/cpp/src/Ice/TraceLevels.h +1 -6
  400. data/ext/ice/cpp/src/Ice/TraceLevelsF.h +2 -7
  401. data/ext/ice/cpp/src/Ice/TraceUtil.cpp +53 -36
  402. data/ext/ice/cpp/src/Ice/TraceUtil.h +13 -11
  403. data/ext/ice/cpp/src/Ice/Transceiver.cpp +1 -7
  404. data/ext/ice/cpp/src/Ice/Transceiver.h +8 -12
  405. data/ext/ice/cpp/src/Ice/TransceiverF.h +3 -8
  406. data/ext/ice/cpp/src/Ice/UdpConnector.cpp +5 -13
  407. data/ext/ice/cpp/src/Ice/UdpConnector.h +1 -7
  408. data/ext/ice/cpp/src/Ice/UdpEndpointI.cpp +118 -60
  409. data/ext/ice/cpp/src/Ice/UdpEndpointI.h +13 -10
  410. data/ext/ice/cpp/src/Ice/UdpTransceiver.cpp +177 -236
  411. data/ext/ice/cpp/src/Ice/UdpTransceiver.h +15 -22
  412. data/ext/ice/cpp/src/Ice/Value.cpp +76 -0
  413. data/ext/ice/cpp/src/Ice/ValueFactory.cpp +83 -0
  414. data/ext/ice/cpp/src/Ice/ValueFactoryManagerI.cpp +61 -0
  415. data/ext/ice/cpp/src/Ice/ValueFactoryManagerI.h +37 -0
  416. data/ext/ice/cpp/src/Ice/Version.cpp +25 -20
  417. data/ext/ice/cpp/src/Ice/VirtualShared.h +38 -0
  418. data/ext/ice/cpp/src/Ice/WSAcceptor.cpp +3 -14
  419. data/ext/ice/cpp/src/Ice/WSAcceptor.h +3 -12
  420. data/ext/ice/cpp/src/Ice/WSConnector.cpp +5 -16
  421. data/ext/ice/cpp/src/Ice/WSConnector.h +3 -11
  422. data/ext/ice/cpp/src/Ice/WSEndpoint.cpp +188 -89
  423. data/ext/ice/cpp/src/Ice/WSEndpoint.h +22 -37
  424. data/ext/ice/cpp/src/Ice/WSTransceiver.cpp +65 -66
  425. data/ext/ice/cpp/src/Ice/WSTransceiver.h +7 -27
  426. data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.cpp +596 -281
  427. data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.h +1383 -543
  428. data/ext/ice/cpp/src/IceDiscovery/LocatorI.cpp +89 -32
  429. data/ext/ice/cpp/src/IceDiscovery/LocatorI.h +59 -28
  430. data/ext/ice/cpp/src/IceDiscovery/LookupI.cpp +315 -66
  431. data/ext/ice/cpp/src/IceDiscovery/LookupI.h +83 -41
  432. data/ext/ice/cpp/src/IceDiscovery/PluginI.cpp +57 -64
  433. data/ext/ice/cpp/src/IceDiscovery/PluginI.h +3 -8
  434. data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.cpp +450 -172
  435. data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.h +863 -406
  436. data/ext/ice/cpp/src/IceLocatorDiscovery/Plugin.h +47 -0
  437. data/ext/ice/cpp/src/IceLocatorDiscovery/PluginI.cpp +636 -144
  438. data/ext/ice/cpp/src/IceSSL/AcceptorI.cpp +20 -173
  439. data/ext/ice/cpp/src/IceSSL/AcceptorI.h +8 -22
  440. data/ext/ice/cpp/src/IceSSL/CertificateI.cpp +279 -0
  441. data/ext/ice/cpp/src/IceSSL/CertificateI.h +64 -0
  442. data/ext/ice/cpp/src/IceSSL/ConnectionInfo.cpp +42 -17
  443. data/ext/ice/cpp/src/IceSSL/ConnectionInfoF.cpp +61 -0
  444. data/ext/ice/cpp/src/IceSSL/ConnectorI.cpp +15 -64
  445. data/ext/ice/cpp/src/IceSSL/ConnectorI.h +6 -18
  446. data/ext/ice/cpp/src/IceSSL/EndpointI.cpp +207 -204
  447. data/ext/ice/cpp/src/IceSSL/EndpointI.h +43 -40
  448. data/ext/ice/cpp/src/IceSSL/EndpointInfo.cpp +42 -16
  449. data/ext/ice/cpp/src/IceSSL/Instance.cpp +1 -11
  450. data/ext/ice/cpp/src/IceSSL/Instance.h +7 -12
  451. data/ext/ice/cpp/src/IceSSL/InstanceF.h +11 -12
  452. data/ext/ice/cpp/src/IceSSL/OpenSSLCertificateI.cpp +583 -0
  453. data/ext/ice/cpp/src/IceSSL/OpenSSLEngine.cpp +134 -115
  454. data/ext/ice/cpp/src/IceSSL/OpenSSLEngine.h +59 -0
  455. data/ext/ice/cpp/src/IceSSL/OpenSSLEngineF.h +27 -0
  456. data/ext/ice/cpp/src/IceSSL/OpenSSLPluginI.cpp +127 -0
  457. data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.cpp +477 -182
  458. data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.h +32 -26
  459. data/ext/ice/cpp/src/IceSSL/OpenSSLUtil.cpp +286 -0
  460. data/ext/ice/cpp/src/IceSSL/OpenSSLUtil.h +58 -0
  461. data/ext/ice/cpp/src/IceSSL/PluginI.cpp +71 -46
  462. data/ext/ice/cpp/src/IceSSL/PluginI.h +13 -23
  463. data/ext/ice/cpp/src/IceSSL/RFC2253.cpp +9 -60
  464. data/ext/ice/cpp/src/IceSSL/RFC2253.h +7 -12
  465. data/ext/ice/cpp/src/IceSSL/SChannelCertificateI.cpp +580 -0
  466. data/ext/ice/cpp/src/IceSSL/SChannelEngine.cpp +523 -74
  467. data/ext/ice/cpp/src/IceSSL/SChannelEngine.h +123 -0
  468. data/ext/ice/cpp/src/IceSSL/SChannelEngineF.h +31 -0
  469. data/ext/ice/cpp/src/IceSSL/SChannelPluginI.cpp +73 -0
  470. data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.cpp +187 -221
  471. data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.h +24 -26
  472. data/ext/ice/cpp/src/IceSSL/SSLEngine.cpp +97 -94
  473. data/ext/ice/cpp/src/IceSSL/SSLEngine.h +26 -192
  474. data/ext/ice/cpp/src/IceSSL/SSLEngineF.h +4 -24
  475. data/ext/ice/cpp/src/IceSSL/SecureTransportCertificateI.cpp +868 -0
  476. data/ext/ice/cpp/src/IceSSL/SecureTransportEngine.cpp +69 -201
  477. data/ext/ice/cpp/src/IceSSL/SecureTransportEngine.h +59 -0
  478. data/ext/ice/cpp/src/IceSSL/SecureTransportEngineF.h +29 -0
  479. data/ext/ice/cpp/src/IceSSL/SecureTransportPluginI.cpp +75 -0
  480. data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.cpp +174 -161
  481. data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.h +29 -33
  482. data/ext/ice/cpp/src/IceSSL/SecureTransportUtil.cpp +864 -0
  483. data/ext/ice/cpp/src/IceSSL/SecureTransportUtil.h +45 -0
  484. data/ext/ice/cpp/src/IceSSL/TrustManager.cpp +12 -22
  485. data/ext/ice/cpp/src/IceSSL/TrustManager.h +4 -9
  486. data/ext/ice/cpp/src/IceSSL/TrustManagerF.h +3 -8
  487. data/ext/ice/cpp/src/IceSSL/UWPCertificateI.cpp +266 -0
  488. data/ext/ice/cpp/src/IceSSL/UWPEngine.cpp +338 -0
  489. data/ext/ice/cpp/src/IceSSL/UWPEngine.h +41 -0
  490. data/ext/ice/cpp/src/IceSSL/UWPEngineF.h +26 -0
  491. data/ext/ice/cpp/src/IceSSL/UWPPluginI.cpp +89 -0
  492. data/ext/ice/cpp/src/IceSSL/UWPTransceiverI.cpp +383 -0
  493. data/ext/ice/cpp/src/IceSSL/UWPTransceiverI.h +71 -0
  494. data/ext/ice/cpp/src/IceSSL/Util.cpp +71 -1260
  495. data/ext/ice/cpp/src/IceSSL/Util.h +48 -142
  496. data/ext/ice/cpp/src/IceUtil/ConsoleUtil.cpp +157 -0
  497. data/ext/ice/cpp/src/IceUtil/ConvertUTF.cpp +22 -27
  498. data/ext/ice/cpp/src/IceUtil/ConvertUTF.h +34 -31
  499. data/ext/ice/cpp/src/IceUtil/CtrlCHandler.cpp +22 -36
  500. data/ext/ice/cpp/src/IceUtil/FileUtil.cpp +30 -126
  501. data/ext/ice/cpp/src/IceUtil/InputUtil.cpp +1 -6
  502. data/ext/ice/cpp/src/IceUtil/MutexProtocol.cpp +1 -6
  503. data/ext/ice/cpp/src/IceUtil/Options.cpp +20 -33
  504. data/ext/ice/cpp/src/IceUtil/OutputUtil.cpp +47 -21
  505. data/ext/ice/cpp/src/IceUtil/Random.cpp +15 -20
  506. data/ext/ice/cpp/src/IceUtil/RecMutex.cpp +4 -19
  507. data/ext/ice/cpp/src/IceUtil/Shared.cpp +8 -8
  508. data/ext/ice/cpp/src/IceUtil/StringConverter.cpp +501 -269
  509. data/ext/ice/cpp/src/IceUtil/StringUtil.cpp +582 -244
  510. data/ext/ice/cpp/src/IceUtil/ThreadException.cpp +37 -79
  511. data/ext/ice/cpp/src/IceUtil/Time.cpp +6 -11
  512. data/ext/ice/cpp/src/IceUtil/UUID.cpp +17 -22
  513. data/ext/ice/cpp/src/IceUtil/Unicode.cpp +97 -101
  514. data/ext/ice/cpp/src/IceUtil/Unicode.h +21 -40
  515. data/ext/ice/cpp/src/IceUtil/UtilException.cpp +839 -0
  516. data/ext/ice/cpp/src/Slice/CPlusPlusUtil.cpp +894 -234
  517. data/ext/ice/cpp/src/Slice/CPlusPlusUtil.h +72 -0
  518. data/ext/ice/cpp/src/Slice/Checksum.cpp +2 -7
  519. data/ext/ice/cpp/src/Slice/Checksum.h +21 -0
  520. data/ext/ice/cpp/src/Slice/FileTracker.cpp +25 -83
  521. data/ext/ice/cpp/{include → src}/Slice/FileTracker.h +9 -14
  522. data/ext/ice/cpp/src/Slice/Grammar.cpp +1981 -1944
  523. data/ext/ice/cpp/src/Slice/Grammar.h +39 -19
  524. data/ext/ice/cpp/src/Slice/GrammarUtil.h +14 -20
  525. data/ext/ice/cpp/src/Slice/JavaUtil.cpp +2752 -1948
  526. data/ext/ice/cpp/src/Slice/JavaUtil.h +398 -0
  527. data/ext/ice/cpp/src/Slice/MD5.cpp +1 -6
  528. data/ext/ice/cpp/src/Slice/MD5.h +1 -6
  529. data/ext/ice/cpp/src/Slice/MD5I.cpp +8 -1
  530. data/ext/ice/cpp/src/Slice/MD5I.h +1 -1
  531. data/ext/ice/cpp/src/Slice/PHPUtil.cpp +17 -20
  532. data/ext/ice/cpp/src/Slice/PHPUtil.h +36 -0
  533. data/ext/ice/cpp/src/Slice/Parser.cpp +1190 -426
  534. data/ext/ice/cpp/{include → src}/Slice/Parser.h +143 -91
  535. data/ext/ice/cpp/src/Slice/Preprocessor.cpp +67 -36
  536. data/ext/ice/cpp/{include → src}/Slice/Preprocessor.h +8 -18
  537. data/ext/ice/cpp/src/Slice/Python.cpp +218 -111
  538. data/ext/ice/cpp/src/Slice/PythonUtil.cpp +787 -699
  539. data/ext/ice/cpp/src/Slice/PythonUtil.h +70 -0
  540. data/ext/ice/cpp/src/Slice/Ruby.cpp +42 -43
  541. data/ext/ice/cpp/src/Slice/RubyUtil.cpp +175 -445
  542. data/ext/ice/cpp/{include → src}/Slice/RubyUtil.h +6 -11
  543. data/ext/ice/cpp/src/Slice/Scanner.cpp +390 -399
  544. data/ext/ice/cpp/src/Slice/{Util.cpp → SliceUtil.cpp} +36 -69
  545. data/ext/ice/cpp/src/Slice/StringLiteralUtil.cpp +456 -0
  546. data/ext/ice/cpp/src/Slice/Util.h +50 -0
  547. data/ice.gemspec +2 -9
  548. data/lib/Glacier2.rb +1 -6
  549. data/lib/Glacier2/Metrics.rb +6 -50
  550. data/lib/Glacier2/PermissionsVerifier.rb +23 -99
  551. data/lib/Glacier2/PermissionsVerifierF.rb +2 -7
  552. data/lib/Glacier2/Router.rb +31 -78
  553. data/lib/Glacier2/RouterF.rb +2 -7
  554. data/lib/Glacier2/SSLInfo.rb +3 -11
  555. data/lib/Glacier2/Session.rb +87 -311
  556. data/lib/Ice.rb +84 -58
  557. data/lib/Ice/BuiltinSequences.rb +3 -8
  558. data/lib/Ice/Communicator.rb +54 -61
  559. data/lib/Ice/CommunicatorF.rb +2 -7
  560. data/lib/Ice/Connection.rb +152 -166
  561. data/lib/Ice/ConnectionF.rb +2 -7
  562. data/lib/Ice/Current.rb +3 -15
  563. data/lib/Ice/Endpoint.rb +56 -137
  564. data/lib/Ice/EndpointF.rb +2 -7
  565. data/lib/Ice/EndpointTypes.rb +2 -11
  566. data/lib/Ice/FacetMap.rb +3 -8
  567. data/lib/Ice/Identity.rb +4 -12
  568. data/lib/Ice/ImplicitContext.rb +4 -38
  569. data/lib/Ice/ImplicitContextF.rb +2 -7
  570. data/lib/Ice/Instrumentation.rb +22 -279
  571. data/lib/Ice/InstrumentationF.rb +2 -7
  572. data/lib/Ice/LocalException.rb +94 -145
  573. data/lib/Ice/Locator.rb +50 -169
  574. data/lib/Ice/LocatorF.rb +2 -7
  575. data/lib/Ice/Logger.rb +4 -38
  576. data/lib/Ice/LoggerF.rb +2 -7
  577. data/lib/Ice/Metrics.rb +60 -420
  578. data/lib/Ice/ObjectAdapter.rb +29 -0
  579. data/lib/Ice/ObjectAdapterF.rb +2 -7
  580. data/lib/Ice/ObjectFactory.rb +4 -34
  581. data/lib/Ice/Plugin.rb +6 -64
  582. data/lib/Ice/PluginF.rb +2 -7
  583. data/lib/Ice/Process.rb +15 -56
  584. data/lib/Ice/ProcessF.rb +2 -7
  585. data/lib/Ice/Properties.rb +4 -45
  586. data/lib/Ice/PropertiesAdmin.rb +18 -60
  587. data/lib/Ice/PropertiesF.rb +2 -7
  588. data/lib/Ice/RemoteLogger.rb +33 -119
  589. data/lib/Ice/Router.rb +28 -105
  590. data/lib/Ice/RouterF.rb +2 -7
  591. data/lib/Ice/ServantLocator.rb +26 -0
  592. data/lib/Ice/ServantLocatorF.rb +24 -0
  593. data/lib/Ice/SliceChecksumDict.rb +2 -7
  594. data/lib/Ice/ValueFactory.rb +28 -0
  595. data/lib/Ice/Version.rb +4 -15
  596. data/lib/IceBox.rb +1 -6
  597. data/lib/IceBox/IceBox.rb +43 -152
  598. data/lib/IceGrid.rb +1 -9
  599. data/lib/IceGrid/Admin.rb +550 -431
  600. data/lib/IceGrid/Descriptor.rb +61 -533
  601. data/lib/IceGrid/Exception.rb +23 -49
  602. data/lib/IceGrid/FileParser.rb +13 -54
  603. data/lib/IceGrid/PluginFacade.rb +35 -0
  604. data/lib/IceGrid/Registry.rb +150 -62
  605. data/lib/IceGrid/Session.rb +24 -68
  606. data/lib/IceGrid/UserAccountMapper.rb +13 -54
  607. data/lib/IcePatch2.rb +1 -6
  608. data/lib/IcePatch2/FileInfo.rb +4 -15
  609. data/lib/IcePatch2/FileServer.rb +32 -80
  610. data/lib/IceStorm.rb +1 -6
  611. data/lib/IceStorm/IceStorm.rb +78 -210
  612. data/lib/IceStorm/Metrics.rb +10 -93
  613. data/slice/Glacier2/Metrics.ice +20 -10
  614. data/slice/Glacier2/PermissionsVerifier.ice +19 -12
  615. data/slice/Glacier2/PermissionsVerifierF.ice +16 -9
  616. data/slice/Glacier2/Router.ice +19 -13
  617. data/slice/Glacier2/RouterF.ice +16 -9
  618. data/slice/Glacier2/SSLInfo.ice +17 -10
  619. data/slice/Glacier2/Session.ice +24 -18
  620. data/slice/Ice/BuiltinSequences.ice +18 -9
  621. data/slice/Ice/Communicator.ice +180 -64
  622. data/slice/Ice/CommunicatorF.ice +18 -9
  623. data/slice/Ice/Connection.ice +208 -75
  624. data/slice/Ice/ConnectionF.ice +18 -9
  625. data/slice/Ice/Current.ice +37 -28
  626. data/slice/Ice/Endpoint.ice +73 -21
  627. data/slice/Ice/EndpointF.ice +19 -10
  628. data/slice/Ice/EndpointTypes.ice +21 -13
  629. data/slice/Ice/FacetMap.ice +19 -10
  630. data/slice/Ice/Identity.ice +24 -10
  631. data/slice/Ice/ImplicitContext.ice +41 -33
  632. data/slice/Ice/ImplicitContextF.ice +17 -9
  633. data/slice/Ice/Instrumentation.ice +37 -30
  634. data/slice/Ice/InstrumentationF.ice +19 -10
  635. data/slice/Ice/LocalException.ice +118 -112
  636. data/slice/Ice/Locator.ice +28 -21
  637. data/slice/Ice/LocatorF.ice +18 -9
  638. data/slice/Ice/Logger.ice +26 -18
  639. data/slice/Ice/LoggerF.ice +18 -9
  640. data/slice/Ice/Metrics.ice +42 -30
  641. data/slice/Ice/ObjectAdapter.ice +88 -53
  642. data/slice/Ice/ObjectAdapterF.ice +18 -9
  643. data/slice/Ice/ObjectFactory.ice +28 -17
  644. data/slice/Ice/Plugin.ice +25 -13
  645. data/slice/Ice/PluginF.ice +22 -9
  646. data/slice/Ice/Process.ice +20 -11
  647. data/slice/Ice/ProcessF.ice +18 -9
  648. data/slice/Ice/Properties.ice +42 -28
  649. data/slice/Ice/PropertiesAdmin.ice +20 -10
  650. data/slice/Ice/PropertiesF.ice +18 -9
  651. data/slice/Ice/RemoteLogger.ice +23 -19
  652. data/slice/Ice/Router.ice +28 -13
  653. data/slice/Ice/RouterF.ice +18 -9
  654. data/slice/Ice/ServantLocator.ice +40 -29
  655. data/slice/Ice/ServantLocatorF.ice +18 -9
  656. data/slice/Ice/SliceChecksumDict.ice +18 -9
  657. data/slice/Ice/ValueFactory.ice +132 -0
  658. data/slice/Ice/Version.ice +20 -10
  659. data/slice/IceBT/ConnectionInfo.ice +58 -0
  660. data/slice/IceBT/EndpointInfo.ice +56 -0
  661. data/slice/IceBT/Types.ice +44 -0
  662. data/slice/IceBox/IceBox.ice +45 -27
  663. data/slice/IceDiscovery/IceDiscovery.ice +75 -10
  664. data/slice/IceGrid/Admin.ice +410 -44
  665. data/slice/IceGrid/Descriptor.ice +47 -34
  666. data/slice/IceGrid/Exception.ice +43 -32
  667. data/slice/IceGrid/FileParser.ice +21 -12
  668. data/slice/IceGrid/PluginFacade.ice +26 -18
  669. data/slice/IceGrid/Registry.ice +150 -21
  670. data/slice/IceGrid/Session.ice +25 -17
  671. data/slice/IceGrid/UserAccountMapper.ice +23 -14
  672. data/slice/IceIAP/ConnectionInfo.ice +73 -0
  673. data/slice/IceIAP/EndpointInfo.ice +67 -0
  674. data/slice/IceLocatorDiscovery/IceLocatorDiscovery.ice +19 -12
  675. data/slice/IcePatch2/FileInfo.ice +19 -13
  676. data/slice/IcePatch2/FileServer.ice +27 -18
  677. data/slice/IceSSL/ConnectionInfo.ice +27 -23
  678. data/slice/IceSSL/ConnectionInfoF.ice +30 -0
  679. data/slice/IceSSL/EndpointInfo.ice +21 -36
  680. data/slice/IceStorm/IceStorm.ice +33 -24
  681. data/slice/IceStorm/Metrics.ice +19 -11
  682. metadata +148 -120
  683. data/ext/ObjectFactory.cpp +0 -140
  684. data/ext/ObjectFactory.h +0 -50
  685. data/ext/ice/cpp/include/Ice/ACMF.h +0 -30
  686. data/ext/ice/cpp/include/Ice/BasicStream.h +0 -1335
  687. data/ext/ice/cpp/include/Ice/BuiltinSequences.h +0 -82
  688. data/ext/ice/cpp/include/Ice/Communicator.h +0 -200
  689. data/ext/ice/cpp/include/Ice/Connection.h +0 -497
  690. data/ext/ice/cpp/include/Ice/ConnectionF.h +0 -74
  691. data/ext/ice/cpp/include/Ice/ConnectionFactoryF.h +0 -30
  692. data/ext/ice/cpp/include/Ice/Current.h +0 -102
  693. data/ext/ice/cpp/include/Ice/DefaultObjectFactory.h +0 -48
  694. data/ext/ice/cpp/include/Ice/DeprecatedStringConverter.h +0 -62
  695. data/ext/ice/cpp/include/Ice/Endpoint.h +0 -341
  696. data/ext/ice/cpp/include/Ice/EndpointF.h +0 -93
  697. data/ext/ice/cpp/include/Ice/EndpointTypes.h +0 -82
  698. data/ext/ice/cpp/include/Ice/Identity.h +0 -168
  699. data/ext/ice/cpp/include/Ice/ImplicitContext.h +0 -102
  700. data/ext/ice/cpp/include/Ice/Instrumentation.h +0 -365
  701. data/ext/ice/cpp/include/Ice/InstrumentationF.h +0 -75
  702. data/ext/ice/cpp/include/Ice/LocalException.h +0 -1030
  703. data/ext/ice/cpp/include/Ice/Locator.h +0 -2193
  704. data/ext/ice/cpp/include/Ice/LocatorF.h +0 -93
  705. data/ext/ice/cpp/include/Ice/Logger.h +0 -100
  706. data/ext/ice/cpp/include/Ice/Metrics.h +0 -2974
  707. data/ext/ice/cpp/include/Ice/ObjectAdapter.h +0 -168
  708. data/ext/ice/cpp/include/Ice/ObjectAdapterFactoryF.h +0 -26
  709. data/ext/ice/cpp/include/Ice/ObjectFactory.h +0 -92
  710. data/ext/ice/cpp/include/Ice/ObjectFactoryF.h +0 -66
  711. data/ext/ice/cpp/include/Ice/ObjectFactoryManagerF.h +0 -26
  712. data/ext/ice/cpp/include/Ice/Outgoing.h +0 -225
  713. data/ext/ice/cpp/include/Ice/Plugin.h +0 -125
  714. data/ext/ice/cpp/include/Ice/PluginF.h +0 -70
  715. data/ext/ice/cpp/include/Ice/Process.h +0 -574
  716. data/ext/ice/cpp/include/Ice/ProcessF.h +0 -83
  717. data/ext/ice/cpp/include/Ice/Properties.h +0 -136
  718. data/ext/ice/cpp/include/Ice/PropertiesAdmin.h +0 -830
  719. data/ext/ice/cpp/include/Ice/PropertiesF.h +0 -87
  720. data/ext/ice/cpp/include/Ice/RemoteLogger.h +0 -1500
  721. data/ext/ice/cpp/include/Ice/Router.h +0 -1159
  722. data/ext/ice/cpp/include/Ice/RouterF.h +0 -83
  723. data/ext/ice/cpp/include/Ice/ServantLocator.h +0 -96
  724. data/ext/ice/cpp/include/Ice/Stream.h +0 -447
  725. data/ext/ice/cpp/include/Ice/StreamF.h +0 -30
  726. data/ext/ice/cpp/include/Ice/Version.h +0 -262
  727. data/ext/ice/cpp/include/IceSSL/ConnectionInfo.h +0 -158
  728. data/ext/ice/cpp/include/IceSSL/EndpointInfo.h +0 -142
  729. data/ext/ice/cpp/include/IceUtil/AbstractMutex.h +0 -119
  730. data/ext/ice/cpp/include/IceUtil/Cache.h +0 -362
  731. data/ext/ice/cpp/include/IceUtil/IconvStringConverter.h +0 -302
  732. data/ext/ice/cpp/include/IceUtil/SHA1.h +0 -47
  733. data/ext/ice/cpp/include/Slice/CPlusPlusUtil.h +0 -65
  734. data/ext/ice/cpp/include/Slice/Checksum.h +0 -26
  735. data/ext/ice/cpp/include/Slice/CsUtil.h +0 -92
  736. data/ext/ice/cpp/include/Slice/DotNetNames.h +0 -34
  737. data/ext/ice/cpp/include/Slice/JavaUtil.h +0 -279
  738. data/ext/ice/cpp/include/Slice/ObjCUtil.h +0 -127
  739. data/ext/ice/cpp/include/Slice/PHPUtil.h +0 -50
  740. data/ext/ice/cpp/include/Slice/PythonUtil.h +0 -64
  741. data/ext/ice/cpp/include/Slice/Util.h +0 -56
  742. data/ext/ice/cpp/src/Ice/BasicStream.cpp +0 -3428
  743. data/ext/ice/cpp/src/Ice/DeprecatedStringConverter.cpp +0 -62
  744. data/ext/ice/cpp/src/Ice/ObjectFactoryF.cpp +0 -44
  745. data/ext/ice/cpp/src/Ice/ObjectFactoryManager.cpp +0 -139
  746. data/ext/ice/cpp/src/Ice/ObjectFactoryManager.h +0 -43
  747. data/ext/ice/cpp/src/Ice/Outgoing.cpp +0 -694
  748. data/ext/ice/cpp/src/Ice/Stream.cpp +0 -53
  749. data/ext/ice/cpp/src/Ice/StreamI.cpp +0 -832
  750. data/ext/ice/cpp/src/Ice/StreamI.h +0 -198
  751. data/ext/ice/cpp/src/IceSSL/Certificate.cpp +0 -1336
  752. data/ext/ice/cpp/src/IceUtil/ArgVector.cpp +0 -64
  753. data/ext/ice/cpp/src/IceUtil/ArgVector.h +0 -41
  754. data/ext/ice/cpp/src/IceUtil/Exception.cpp +0 -792
  755. data/ext/ice/cpp/src/IceUtil/FileUtil.h +0 -185
  756. data/ext/ice/cpp/src/Slice/CsUtil.cpp +0 -2660
  757. data/ext/ice/cpp/src/Slice/DotNetNames.cpp +0 -146
  758. data/ext/ice/cpp/src/Slice/ObjCUtil.cpp +0 -1310
  759. data/lib/Ice/ObjectFactoryF.rb +0 -29
  760. data/lib/IceGrid/Locator.rb +0 -106
  761. data/lib/IceGrid/Observer.rb +0 -572
  762. data/lib/IceGrid/Query.rb +0 -169
  763. data/slice/Freeze/BackgroundSaveEvictor.ice +0 -111
  764. data/slice/Freeze/CatalogData.ice +0 -49
  765. data/slice/Freeze/Connection.ice +0 -121
  766. data/slice/Freeze/ConnectionF.ice +0 -20
  767. data/slice/Freeze/DB.ice +0 -37
  768. data/slice/Freeze/Evictor.ice +0 -346
  769. data/slice/Freeze/EvictorF.ice +0 -22
  770. data/slice/Freeze/EvictorStorage.ice +0 -72
  771. data/slice/Freeze/Exception.ice +0 -100
  772. data/slice/Freeze/Transaction.ice +0 -58
  773. data/slice/Freeze/TransactionalEvictor.ice +0 -50
  774. data/slice/Ice/ObjectFactoryF.ice +0 -21
  775. data/slice/IceGrid/Locator.ice +0 -57
  776. data/slice/IceGrid/Observer.ice +0 -395
  777. data/slice/IceGrid/Query.ice +0 -131
@@ -0,0 +1,59 @@
1
+ //
2
+ // Copyright (c) ZeroC, Inc. All rights reserved.
3
+ //
4
+
5
+ #ifndef ICESSL_OPENSSL_ENGINE_H
6
+ #define ICESSL_OPENSSL_ENGINE_H
7
+
8
+ #include <IceSSL/SSLEngine.h>
9
+ #include <IceSSL/InstanceF.h>
10
+ #include <IceSSL/OpenSSLUtil.h>
11
+
12
+ #include <Ice/BuiltinSequences.h>
13
+
14
+ namespace IceSSL
15
+ {
16
+
17
+ namespace OpenSSL
18
+ {
19
+
20
+ class SSLEngine : public IceSSL::SSLEngine
21
+ {
22
+ public:
23
+
24
+ SSLEngine(const Ice::CommunicatorPtr&);
25
+ ~SSLEngine();
26
+
27
+ virtual void initialize();
28
+ virtual void destroy();
29
+ virtual IceInternal::TransceiverPtr
30
+ createTransceiver(const IceSSL::InstancePtr&, const IceInternal::TransceiverPtr&, const std::string&, bool);
31
+
32
+ #ifndef OPENSSL_NO_DH
33
+ DH* dhParams(int);
34
+ #endif
35
+
36
+ SSL_CTX* context() const;
37
+ void context(SSL_CTX*);
38
+ std::string sslErrors() const;
39
+
40
+ private:
41
+
42
+ void cleanup();
43
+ SSL_METHOD* getMethod(int);
44
+ void setOptions(int);
45
+ enum Protocols { SSLv3 = 1, TLSv1_0 = 2, TLSv1_1 = 4, TLSv1_2 = 8, TLSv1_3 = 16 };
46
+ int parseProtocols(const Ice::StringSeq&) const;
47
+
48
+ SSL_CTX* _ctx;
49
+
50
+ #ifndef OPENSSL_NO_DH
51
+ IceSSL::OpenSSL::DHParamsPtr _dhParams;
52
+ #endif
53
+ };
54
+
55
+ } // OpenSSL namespace end
56
+
57
+ } // IceSSL namespace endif
58
+
59
+ #endif
@@ -0,0 +1,27 @@
1
+ //
2
+ // Copyright (c) ZeroC, Inc. All rights reserved.
3
+ //
4
+
5
+ #ifndef ICESSL_OPENSSL_ENGINE_F_H
6
+ #define ICESSL_OPENSSL_ENGINE_F_H
7
+
8
+ #include <IceUtil/Shared.h>
9
+ #include <Ice/Handle.h>
10
+
11
+ #include <IceSSL/OpenSSL.h>
12
+
13
+ namespace IceSSL
14
+ {
15
+
16
+ namespace OpenSSL
17
+ {
18
+
19
+ class SSLEngine;
20
+ ICESSL_OPENSSL_API IceUtil::Shared* upCast(SSLEngine*);
21
+ typedef IceInternal::Handle<SSLEngine> SSLEnginePtr;
22
+
23
+ } // OpenSSL namespace end
24
+
25
+ } // IceSSL namespace end
26
+
27
+ #endif
@@ -0,0 +1,127 @@
1
+ //
2
+ // Copyright (c) ZeroC, Inc. All rights reserved.
3
+ //
4
+
5
+ #include <IceSSL/PluginI.h>
6
+ #include <IceSSL/OpenSSL.h>
7
+ #include <IceSSL/OpenSSLEngine.h>
8
+
9
+ #include <Ice/Initialize.h>
10
+
11
+ using namespace std;
12
+
13
+ namespace
14
+ {
15
+
16
+ class PluginI : public IceSSL::PluginI,
17
+ public IceSSL::OpenSSL::Plugin
18
+ {
19
+ public:
20
+
21
+ PluginI(const Ice::CommunicatorPtr&);
22
+
23
+ virtual Ice::Long getOpenSSLVersion() const;
24
+ virtual IceSSL::CertificatePtr create(x509_st*) const;
25
+ virtual IceSSL::CertificatePtr load(const std::string&) const;
26
+ virtual IceSSL::CertificatePtr decode(const std::string&) const;
27
+ virtual void setContext(SSL_CTX*);
28
+ virtual SSL_CTX* getContext();
29
+ };
30
+
31
+ } // anonymous namespace end
32
+
33
+ //
34
+ // Plugin implementation.
35
+ //
36
+ PluginI::PluginI(const Ice::CommunicatorPtr& com) :
37
+ IceSSL::PluginI(com, new IceSSL::OpenSSL::SSLEngine(com))
38
+ {
39
+ }
40
+
41
+ Ice::Long
42
+ PluginI::getOpenSSLVersion() const
43
+ {
44
+ return SSLeay();
45
+ }
46
+
47
+ IceSSL::CertificatePtr
48
+ PluginI::create(x509_st* cert) const
49
+ {
50
+ return IceSSL::OpenSSL::Certificate::create(cert);
51
+ }
52
+
53
+ IceSSL::CertificatePtr
54
+ PluginI::load(const std::string& file) const
55
+ {
56
+ return IceSSL::OpenSSL::Certificate::load(file);
57
+ }
58
+
59
+ IceSSL::CertificatePtr
60
+ PluginI::decode(const std::string& encoding) const
61
+ {
62
+ return IceSSL::OpenSSL::Certificate::load(encoding);
63
+ }
64
+
65
+ void
66
+ PluginI::setContext(SSL_CTX* context)
67
+ {
68
+ IceSSL::OpenSSL::SSLEngine* engine = dynamic_cast<IceSSL::OpenSSL::SSLEngine*>(_engine.get());
69
+ assert(engine);
70
+ engine->context(context);
71
+ }
72
+
73
+ SSL_CTX*
74
+ PluginI::getContext()
75
+ {
76
+ IceSSL::OpenSSL::SSLEngine* engine = dynamic_cast<IceSSL::OpenSSL::SSLEngine*>(_engine.get());
77
+ assert(engine);
78
+ return engine->context();
79
+ }
80
+
81
+ #ifdef _WIN32
82
+ //
83
+ // Plug-in factory function.
84
+ //
85
+ extern "C" ICESSL_OPENSSL_API Ice::Plugin*
86
+ createIceSSLOpenSSL(const Ice::CommunicatorPtr& communicator, const string& /*name*/, const Ice::StringSeq& /*args*/)
87
+ {
88
+ return new PluginI(communicator);
89
+ }
90
+
91
+ namespace Ice
92
+ {
93
+
94
+ ICESSL_OPENSSL_API void
95
+ registerIceSSLOpenSSL(bool loadOnInitialize)
96
+ {
97
+ Ice::registerPluginFactory("IceSSL", createIceSSLOpenSSL, loadOnInitialize);
98
+ }
99
+
100
+ }
101
+
102
+ #else
103
+
104
+ extern "C" ICESSL_API Ice::Plugin*
105
+ createIceSSL(const Ice::CommunicatorPtr& communicator, const string& /*name*/, const Ice::StringSeq& /*args*/)
106
+ {
107
+ return new PluginI(communicator);
108
+ }
109
+
110
+ //
111
+ // The following functions are defined only when OpenSSL is the default
112
+ // implementation. In Windows the default implementation is always
113
+ // SChannel.
114
+ //
115
+ IceSSL::CertificatePtr
116
+ IceSSL::Certificate::load(const std::string& file)
117
+ {
118
+ return IceSSL::OpenSSL::Certificate::load(file);
119
+ }
120
+
121
+ IceSSL::CertificatePtr
122
+ IceSSL::Certificate::decode(const std::string& encoding)
123
+ {
124
+ return IceSSL::OpenSSL::Certificate::decode(encoding);
125
+ }
126
+
127
+ #endif
@@ -1,13 +1,9 @@
1
- // **********************************************************************
2
1
  //
3
- // Copyright (c) 2003-2018 ZeroC, Inc. All rights reserved.
2
+ // Copyright (c) ZeroC, Inc. All rights reserved.
4
3
  //
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
4
 
10
5
  #include <IceSSL/OpenSSLTransceiverI.h>
6
+ #include <IceSSL/OpenSSLEngine.h>
11
7
 
12
8
  #include <IceUtil/Mutex.h>
13
9
  #include <IceUtil/MutexPtrLock.h>
@@ -20,9 +16,9 @@
20
16
  #include <Ice/LoggerUtil.h>
21
17
  #include <Ice/Buffer.h>
22
18
  #include <Ice/LocalException.h>
19
+ #include <Ice/Network.h>
23
20
 
24
- #ifdef ICE_USE_OPENSSL
25
-
21
+ #include <openssl/ssl.h>
26
22
  #include <openssl/err.h>
27
23
  #include <openssl/bio.h>
28
24
 
@@ -31,7 +27,7 @@ using namespace Ice;
31
27
  using namespace IceSSL;
32
28
 
33
29
  //
34
- // BUGFIX: an openssl bug that affects OpensSSL < 1.0.0k
30
+ // BUGFIX: an openssl bug that affects OpenSSL < 1.0.0k
35
31
  // could cause a deadlock when decoding public keys.
36
32
  //
37
33
  // See: http://cvs.openssl.org/chngview?cn=22569
@@ -70,47 +66,77 @@ int
70
66
  IceSSL_opensslVerifyCallback(int ok, X509_STORE_CTX* ctx)
71
67
  {
72
68
  SSL* ssl = reinterpret_cast<SSL*>(X509_STORE_CTX_get_ex_data(ctx, SSL_get_ex_data_X509_STORE_CTX_idx()));
73
- TransceiverI* p = reinterpret_cast<TransceiverI*>(SSL_get_ex_data(ssl, 0));
69
+ OpenSSL::TransceiverI* p = reinterpret_cast<OpenSSL::TransceiverI*>(SSL_get_ex_data(ssl, 0));
74
70
  return p->verifyCallback(ok, ctx);
75
71
  }
76
72
 
77
73
  }
78
74
 
79
75
  IceInternal::NativeInfoPtr
80
- IceSSL::TransceiverI::getNativeInfo()
76
+ OpenSSL::TransceiverI::getNativeInfo()
81
77
  {
82
- return _stream;
78
+ return _delegate->getNativeInfo();
83
79
  }
84
80
 
85
81
  IceInternal::SocketOperation
86
- IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::Buffer& writeBuffer, bool&)
82
+ OpenSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::Buffer& writeBuffer)
87
83
  {
88
- IceInternal::SocketOperation status = _stream->connect(readBuffer, writeBuffer);
89
- if(status != IceInternal::SocketOperationNone)
84
+ if(!_connected)
90
85
  {
91
- return status;
86
+ IceInternal::SocketOperation status = _delegate->initialize(readBuffer, writeBuffer);
87
+ if(status != IceInternal::SocketOperationNone)
88
+ {
89
+ return status;
90
+ }
91
+ _connected = true;
92
92
  }
93
93
 
94
94
  if(!_ssl)
95
95
  {
96
- //
97
- // This static_cast is necessary due to 64bit windows. There SOCKET is a non-int type.
98
- //
99
- BIO* bio = BIO_new_socket(static_cast<int>(_stream->fd()), 0);
96
+ SOCKET fd = _delegate->getNativeInfo()->fd();
97
+ BIO* bio = 0;
98
+ if(fd == INVALID_SOCKET)
99
+ {
100
+ assert(_sentBytes == 0);
101
+ _maxSendPacketSize = 128 * 1024; // 128KB
102
+ _maxRecvPacketSize = 128 * 1024; // 128KB
103
+ if(!BIO_new_bio_pair(&bio, _maxSendPacketSize, &_memBio, _maxRecvPacketSize))
104
+ {
105
+ bio = 0;
106
+ _memBio = 0;
107
+ }
108
+ }
109
+ else
110
+ {
111
+ #ifdef ICE_USE_IOCP
112
+ assert(_sentBytes == 0);
113
+ _maxSendPacketSize = std::max(512, IceInternal::getSendBufferSize(fd));
114
+ _maxRecvPacketSize = std::max(512, IceInternal::getRecvBufferSize(fd));
115
+ if(!BIO_new_bio_pair(&bio, _maxSendPacketSize, &_memBio, _maxRecvPacketSize))
116
+ {
117
+ bio = 0;
118
+ _memBio = 0;
119
+ }
120
+ #else
121
+ bio = BIO_new_socket(fd, 0);
122
+ #endif
123
+ }
124
+
100
125
  if(!bio)
101
126
  {
102
- SecurityException ex(__FILE__, __LINE__);
103
- ex.reason = "openssl failure";
104
- throw ex;
127
+ throw SecurityException(__FILE__, __LINE__, "openssl failure");
105
128
  }
106
129
 
107
130
  _ssl = SSL_new(_engine->context());
108
131
  if(!_ssl)
109
132
  {
110
133
  BIO_free(bio);
111
- SecurityException ex(__FILE__, __LINE__);
112
- ex.reason = "openssl failure";
113
- throw ex;
134
+ if(_memBio)
135
+ {
136
+ BIO_free(_memBio);
137
+ _memBio = 0;
138
+ }
139
+ throw SecurityException(__FILE__, __LINE__, "openssl failure");
114
140
  }
115
141
  SSL_set_bio(_ssl, bio, bio);
116
142
 
@@ -140,8 +166,46 @@ IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::B
140
166
  assert(false);
141
167
  }
142
168
  }
169
+
170
+ //
171
+ // Hostname verification was included in OpenSSL 1.0.2
172
+ //
173
+ #if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER >= 0x10002000L
174
+ if(_engine->getCheckCertName() && !_host.empty())
175
+ {
176
+ X509_VERIFY_PARAM* param = SSL_get0_param(_ssl);
177
+ if(IceInternal::isIpAddress(_host))
178
+ {
179
+ if(!X509_VERIFY_PARAM_set1_ip_asc(param, _host.c_str()))
180
+ {
181
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: error setting the expected IP address `"
182
+ + _host + "'");
183
+ }
184
+ }
185
+ else
186
+ {
187
+ if(!X509_VERIFY_PARAM_set1_host(param, _host.c_str(), 0))
188
+ {
189
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: error setting the expected host name `"
190
+ + _host + "'");
191
+ }
192
+ }
193
+ }
194
+ #endif
195
+
143
196
  SSL_set_verify(_ssl, sslVerifyMode, IceSSL_opensslVerifyCallback);
144
197
  }
198
+
199
+ //
200
+ // Enable SNI
201
+ //
202
+ if(!_incoming && _engine->getServerNameIndication() && !_host.empty() && !IceInternal::isIpAddress(_host))
203
+ {
204
+ if(!SSL_set_tlsext_host_name(_ssl, _host.c_str()))
205
+ {
206
+ throw SecurityException(__FILE__, __LINE__, "IceSSL: setting SNI host failed `" + _host + "'");
207
+ }
208
+ }
145
209
  }
146
210
 
147
211
  while(!SSL_is_init_finished(_ssl))
@@ -151,7 +215,7 @@ IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::B
151
215
  //
152
216
 
153
217
  //
154
- // BUGFIX: an openssl bug that affects OpensSSL < 1.0.0k
218
+ // BUGFIX: an openssl bug that affects OpenSSL < 1.0.0k
155
219
  // could cause a deadlock when decoding public keys.
156
220
  //
157
221
  // See: http://cvs.openssl.org/chngview?cn=22569
@@ -165,6 +229,16 @@ IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::B
165
229
  #if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER < 0x100000bfL && !defined(LIBRESSL_VERSION_NUMBER)
166
230
  sync.release();
167
231
  #endif
232
+
233
+ if(_memBio && BIO_ctrl_pending(_memBio))
234
+ {
235
+ if(!send())
236
+ {
237
+ return IceInternal::SocketOperationWrite;
238
+ }
239
+ continue;
240
+ }
241
+
168
242
  if(ret <= 0)
169
243
  {
170
244
  switch(SSL_get_error(_ssl, ret))
@@ -176,66 +250,60 @@ IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::B
176
250
  }
177
251
  case SSL_ERROR_ZERO_RETURN:
178
252
  {
179
- ConnectionLostException ex(__FILE__, __LINE__);
180
- ex.error = IceInternal::getSocketErrno();
181
- throw ex;
253
+ throw ConnectionLostException(__FILE__, __LINE__, IceInternal::getSocketErrno());
182
254
  }
183
255
  case SSL_ERROR_WANT_READ:
184
256
  {
257
+ if(_memBio && receive())
258
+ {
259
+ continue;
260
+ }
185
261
  return IceInternal::SocketOperationRead;
186
262
  }
187
263
  case SSL_ERROR_WANT_WRITE:
188
264
  {
265
+ if(_memBio && send())
266
+ {
267
+ continue;
268
+ }
189
269
  return IceInternal::SocketOperationWrite;
190
270
  }
191
271
  case SSL_ERROR_SYSCALL:
192
272
  {
193
- if(IceInternal::interrupted())
273
+ if(!_memBio)
194
274
  {
195
- break;
196
- }
197
-
198
- if(IceInternal::wouldBlock())
199
- {
200
- if(SSL_want_read(_ssl))
275
+ if(IceInternal::interrupted())
201
276
  {
202
- return IceInternal::SocketOperationRead;
277
+ break;
203
278
  }
204
- else if(SSL_want_write(_ssl))
279
+
280
+ if(IceInternal::wouldBlock())
205
281
  {
206
- return IceInternal::SocketOperationWrite;
282
+ if(SSL_want_read(_ssl))
283
+ {
284
+ return IceInternal::SocketOperationRead;
285
+ }
286
+ else if(SSL_want_write(_ssl))
287
+ {
288
+ return IceInternal::SocketOperationWrite;
289
+ }
290
+
291
+ break;
207
292
  }
208
293
 
209
- break;
210
- }
211
-
212
- if(IceInternal::connectionLost() || IceInternal::getSocketErrno() == 0)
213
- {
214
- ConnectionLostException ex(__FILE__, __LINE__);
215
- ex.error = IceInternal::getSocketErrno();
216
- throw ex;
217
- }
218
- else
219
- {
220
- SocketException ex(__FILE__, __LINE__);
221
- ex.error = IceInternal::getSocketErrno();
222
- throw ex;
294
+ if(IceInternal::connectionLost() || IceInternal::getSocketErrno() == 0)
295
+ {
296
+ throw ConnectionLostException(__FILE__, __LINE__, IceInternal::getSocketErrno());
297
+ }
223
298
  }
299
+ throw SocketException(__FILE__, __LINE__, IceInternal::getSocketErrno());
224
300
  }
225
301
  case SSL_ERROR_SSL:
226
302
  {
227
- IceInternal::Address remoteAddr;
228
- string desc = "<not available>";
229
- if(IceInternal::fdToRemoteAddress(_stream->fd(), remoteAddr))
230
- {
231
- desc = IceInternal::addrToString(remoteAddr);
232
- }
233
303
  ostringstream ostr;
234
304
  ostr << "SSL error occurred for new " << (_incoming ? "incoming" : "outgoing")
235
- << " connection:\nremote address = " << desc << "\n" << _engine->sslErrors();
236
- ProtocolException ex(__FILE__, __LINE__);
237
- ex.reason = ostr.str();
238
- throw ex;
305
+ << " connection:\n" << _delegate->toString() << "\n" << _engine->sslErrors();
306
+ throw ProtocolException(__FILE__, __LINE__, ostr.str());
239
307
  }
240
308
  }
241
309
  }
@@ -257,14 +325,12 @@ IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::B
257
325
  {
258
326
  ostringstream ostr;
259
327
  ostr << "IceSSL: certificate verification failed:\n" << X509_verify_cert_error_string(result);
260
- string msg = ostr.str();
328
+ const string msg = ostr.str();
261
329
  if(_engine->securityTraceLevel() >= 1)
262
330
  {
263
331
  _instance->logger()->trace(_instance->traceCategory(), msg);
264
332
  }
265
- SecurityException ex(__FILE__, __LINE__);
266
- ex.reason = msg;
267
- throw ex;
333
+ throw SecurityException(__FILE__, __LINE__, msg);
268
334
  }
269
335
  }
270
336
  else
@@ -272,7 +338,26 @@ IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::B
272
338
  _verified = true;
273
339
  }
274
340
 
275
- _engine->verifyPeer(_stream->fd(), _host, NativeConnectionInfoPtr::dynamicCast(getInfo()));
341
+ _cipher = SSL_get_cipher_name(_ssl); // Nothing needs to be free'd.
342
+ #if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER < 0x10002000L
343
+ try
344
+ {
345
+ //
346
+ // Peer hostname verification is new in OpenSSL 1.0.2 for older versions
347
+ // We use IceSSL built-in hostname verification.
348
+ //
349
+ _engine->verifyPeerCertName(_host, ICE_DYNAMIC_CAST(ConnectionInfo, getInfo()));
350
+ }
351
+ catch(const SecurityException&)
352
+ {
353
+ _verified = false;
354
+ if(_engine->getVerifyPeer() > 0)
355
+ {
356
+ throw;
357
+ }
358
+ }
359
+ #endif
360
+ _engine->verifyPeer(_host, ICE_DYNAMIC_CAST(ConnectionInfo, getInfo()), toString());
276
361
 
277
362
  if(_engine->securityTraceLevel() >= 1)
278
363
  {
@@ -294,14 +379,14 @@ IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::B
294
379
  out << "bits = " << SSL_CIPHER_get_bits(cipher, 0) << "\n";
295
380
  out << "protocol = " << SSL_get_version(_ssl) << "\n";
296
381
  }
297
- out << IceInternal::fdToString(SSL_get_fd(_ssl));
382
+ out << toString();
298
383
  }
299
384
 
300
385
  return IceInternal::SocketOperationNone;
301
386
  }
302
387
 
303
388
  IceInternal::SocketOperation
304
- IceSSL::TransceiverI::closing(bool initiator, const Ice::LocalException&)
389
+ OpenSSL::TransceiverI::closing(bool initiator, const Ice::LocalException&)
305
390
  {
306
391
  // If we are initiating the connection closure, wait for the peer
307
392
  // to close the TCP/IP connection. Otherwise, close immediately.
@@ -309,7 +394,7 @@ IceSSL::TransceiverI::closing(bool initiator, const Ice::LocalException&)
309
394
  }
310
395
 
311
396
  void
312
- IceSSL::TransceiverI::close()
397
+ OpenSSL::TransceiverI::close()
313
398
  {
314
399
  if(_ssl)
315
400
  {
@@ -327,15 +412,29 @@ IceSSL::TransceiverI::close()
327
412
  _ssl = 0;
328
413
  }
329
414
 
330
- _stream->close();
415
+ if(_memBio)
416
+ {
417
+ BIO_free(_memBio);
418
+ _memBio = 0;
419
+ }
420
+
421
+ _delegate->close();
331
422
  }
332
423
 
333
424
  IceInternal::SocketOperation
334
- IceSSL::TransceiverI::write(IceInternal::Buffer& buf)
425
+ OpenSSL::TransceiverI::write(IceInternal::Buffer& buf)
335
426
  {
336
- if(!_stream->isConnected())
427
+ if(!_connected)
337
428
  {
338
- return _stream->write(buf);
429
+ return _delegate->write(buf);
430
+ }
431
+
432
+ if(_memBio && _writeBuffer.i != _writeBuffer.b.end())
433
+ {
434
+ if(!send())
435
+ {
436
+ return IceInternal::SocketOperationWrite;
437
+ }
339
438
  }
340
439
 
341
440
  if(buf.i == buf.b.end())
@@ -346,11 +445,39 @@ IceSSL::TransceiverI::write(IceInternal::Buffer& buf)
346
445
  //
347
446
  // It's impossible for packetSize to be more than an Int.
348
447
  //
349
- int packetSize = static_cast<int>(buf.b.end() - buf.i);
448
+ int packetSize = _memBio ?
449
+ std::min(static_cast<int>(_maxSendPacketSize), static_cast<int>(buf.b.end() - buf.i)) :
450
+ static_cast<int>(buf.b.end() - buf.i);
451
+
350
452
  while(buf.i != buf.b.end())
351
453
  {
352
454
  ERR_clear_error(); // Clear any spurious errors.
353
- int ret = SSL_write(_ssl, reinterpret_cast<const void*>(&*buf.i), packetSize);
455
+ int ret;
456
+ if(_memBio)
457
+ {
458
+ if(_sentBytes)
459
+ {
460
+ ret = _sentBytes;
461
+ _sentBytes = 0;
462
+ }
463
+ else
464
+ {
465
+ ret = SSL_write(_ssl, reinterpret_cast<const void*>(&*buf.i), packetSize);
466
+ if(ret > 0)
467
+ {
468
+ if(!send())
469
+ {
470
+ _sentBytes = ret;
471
+ return IceInternal::SocketOperationWrite;
472
+ }
473
+ }
474
+ }
475
+ }
476
+ else
477
+ {
478
+ ret = SSL_write(_ssl, reinterpret_cast<const void*>(&*buf.i), packetSize);
479
+ }
480
+
354
481
  if(ret <= 0)
355
482
  {
356
483
  switch(SSL_get_error(_ssl, ret))
@@ -360,9 +487,7 @@ IceSSL::TransceiverI::write(IceInternal::Buffer& buf)
360
487
  break;
361
488
  case SSL_ERROR_ZERO_RETURN:
362
489
  {
363
- ConnectionLostException ex(__FILE__, __LINE__);
364
- ex.error = IceInternal::getSocketErrno();
365
- throw ex;
490
+ throw ConnectionLostException(__FILE__, __LINE__, IceInternal::getSocketErrno());
366
491
  }
367
492
  case SSL_ERROR_WANT_READ:
368
493
  {
@@ -371,45 +496,47 @@ IceSSL::TransceiverI::write(IceInternal::Buffer& buf)
371
496
  }
372
497
  case SSL_ERROR_WANT_WRITE:
373
498
  {
499
+ if(_memBio && send())
500
+ {
501
+ continue;
502
+ }
374
503
  return IceInternal::SocketOperationWrite;
375
504
  }
376
505
  case SSL_ERROR_SYSCALL:
377
506
  {
378
- if(IceInternal::interrupted())
507
+ if(!_memBio)
379
508
  {
380
- continue;
381
- }
509
+ if(IceInternal::interrupted())
510
+ {
511
+ continue;
512
+ }
382
513
 
383
- if(IceInternal::noBuffers() && packetSize > 1024)
384
- {
385
- packetSize /= 2;
386
- continue;
387
- }
514
+ if(IceInternal::noBuffers() && packetSize > 1024)
515
+ {
516
+ packetSize /= 2;
517
+ continue;
518
+ }
388
519
 
389
- if(IceInternal::wouldBlock())
390
- {
391
- assert(SSL_want_write(_ssl));
392
- return IceInternal::SocketOperationWrite;
520
+ if(IceInternal::wouldBlock())
521
+ {
522
+ assert(SSL_want_write(_ssl));
523
+ return IceInternal::SocketOperationWrite;
524
+ }
393
525
  }
394
526
 
395
527
  if(IceInternal::connectionLost() || IceInternal::getSocketErrno() == 0)
396
528
  {
397
- ConnectionLostException ex(__FILE__, __LINE__);
398
- ex.error = IceInternal::getSocketErrno();
399
- throw ex;
529
+ throw ConnectionLostException(__FILE__, __LINE__, IceInternal::getSocketErrno());
400
530
  }
401
531
  else
402
532
  {
403
- SocketException ex(__FILE__, __LINE__);
404
- ex.error = IceInternal::getSocketErrno();
405
- throw ex;
533
+ throw SocketException(__FILE__, __LINE__, IceInternal::getSocketErrno());
406
534
  }
407
535
  }
408
536
  case SSL_ERROR_SSL:
409
537
  {
410
- ProtocolException ex(__FILE__, __LINE__);
411
- ex.reason = "SSL protocol error during write:\n" + _engine->sslErrors();
412
- throw ex;
538
+ throw ProtocolException(__FILE__, __LINE__,
539
+ "SSL protocol error during write:\n" + _engine->sslErrors());
413
540
  }
414
541
  }
415
542
  }
@@ -421,21 +548,27 @@ IceSSL::TransceiverI::write(IceInternal::Buffer& buf)
421
548
  packetSize = static_cast<int>(buf.b.end() - buf.i);
422
549
  }
423
550
  }
424
-
425
551
  return IceInternal::SocketOperationNone;
426
552
  }
427
553
 
428
554
  IceInternal::SocketOperation
429
- IceSSL::TransceiverI::read(IceInternal::Buffer& buf, bool& hasMoreData)
555
+ OpenSSL::TransceiverI::read(IceInternal::Buffer& buf)
430
556
  {
431
- if(!_stream->isConnected())
557
+ if(!_connected)
432
558
  {
433
- return _stream->read(buf);
559
+ return _delegate->read(buf);
560
+ }
561
+
562
+ if(_memBio && _readBuffer.i != _readBuffer.b.end())
563
+ {
564
+ if(!receive())
565
+ {
566
+ return IceInternal::SocketOperationRead;
567
+ }
434
568
  }
435
569
 
436
570
  //
437
- // Note: we don't set the hasMoreData flag in this implementation.
438
- // We assume that OpenSSL doesn't read more SSL records than
571
+ // Note: We assume that OpenSSL doesn't read more SSL records than
439
572
  // necessary to fill the requested data and that the sender sends
440
573
  // Ice messages in individual SSL records.
441
574
  //
@@ -445,6 +578,8 @@ IceSSL::TransceiverI::read(IceInternal::Buffer& buf, bool& hasMoreData)
445
578
  return IceInternal::SocketOperationNone;
446
579
  }
447
580
 
581
+ _delegate->getNativeInfo()->ready(IceInternal::SocketOperationRead, false);
582
+
448
583
  //
449
584
  // It's impossible for packetSize to be more than an Int.
450
585
  //
@@ -464,12 +599,14 @@ IceSSL::TransceiverI::read(IceInternal::Buffer& buf, bool& hasMoreData)
464
599
  }
465
600
  case SSL_ERROR_ZERO_RETURN:
466
601
  {
467
- ConnectionLostException ex(__FILE__, __LINE__);
468
- ex.error = 0;
469
- throw ex;
602
+ throw ConnectionLostException(__FILE__, __LINE__, 0);
470
603
  }
471
604
  case SSL_ERROR_WANT_READ:
472
605
  {
606
+ if(_memBio && receive())
607
+ {
608
+ continue;
609
+ }
473
610
  return IceInternal::SocketOperationRead;
474
611
  }
475
612
  case SSL_ERROR_WANT_WRITE:
@@ -479,41 +616,39 @@ IceSSL::TransceiverI::read(IceInternal::Buffer& buf, bool& hasMoreData)
479
616
  }
480
617
  case SSL_ERROR_SYSCALL:
481
618
  {
482
- if(IceInternal::interrupted())
619
+ if(!_memBio)
483
620
  {
484
- continue;
485
- }
621
+ if(IceInternal::interrupted())
622
+ {
623
+ continue;
624
+ }
486
625
 
487
- if(IceInternal::noBuffers() && packetSize > 1024)
488
- {
489
- packetSize /= 2;
490
- continue;
491
- }
626
+ if(IceInternal::noBuffers() && packetSize > 1024)
627
+ {
628
+ packetSize /= 2;
629
+ continue;
630
+ }
492
631
 
493
- if(IceInternal::wouldBlock())
494
- {
495
- assert(SSL_want_read(_ssl));
496
- return IceInternal::SocketOperationRead;
632
+ if(IceInternal::wouldBlock())
633
+ {
634
+ assert(SSL_want_read(_ssl));
635
+ return IceInternal::SocketOperationRead;
636
+ }
497
637
  }
498
638
 
499
639
  if(IceInternal::connectionLost() || IceInternal::getSocketErrno() == 0)
500
640
  {
501
- ConnectionLostException ex(__FILE__, __LINE__);
502
- ex.error = IceInternal::getSocketErrno();
503
- throw ex;
641
+ throw ConnectionLostException(__FILE__, __LINE__, IceInternal::getSocketErrno());
504
642
  }
505
643
  else
506
644
  {
507
- SocketException ex(__FILE__, __LINE__);
508
- ex.error = IceInternal::getSocketErrno();
509
- throw ex;
645
+ throw SocketException(__FILE__, __LINE__, IceInternal::getSocketErrno());
510
646
  }
511
647
  }
512
648
  case SSL_ERROR_SSL:
513
649
  {
514
- ProtocolException ex(__FILE__, __LINE__);
515
- ex.reason = "SSL protocol error during read:\n" + _engine->sslErrors();
516
- throw ex;
650
+ throw ProtocolException(__FILE__, __LINE__,
651
+ "SSL protocol error during read:\n" + _engine->sslErrors());
517
652
  }
518
653
  }
519
654
  }
@@ -527,61 +662,190 @@ IceSSL::TransceiverI::read(IceInternal::Buffer& buf, bool& hasMoreData)
527
662
  }
528
663
 
529
664
  //
530
- // Check if there's still buffered data to read. In this case, set hasMoreData to true.
665
+ // Check if there's still buffered data to read, set the read ready status.
531
666
  //
532
- hasMoreData = SSL_pending(_ssl) > 0;
667
+ _delegate->getNativeInfo()->ready(IceInternal::SocketOperationRead, SSL_pending(_ssl) > 0);
533
668
 
534
669
  return IceInternal::SocketOperationNone;
535
670
  }
536
671
 
537
- string
538
- IceSSL::TransceiverI::protocol() const
672
+ #ifdef ICE_USE_IOCP
673
+
674
+ bool
675
+ OpenSSL::TransceiverI::startWrite(IceInternal::Buffer& buffer)
539
676
  {
540
- return _instance->protocol();
677
+ if(!_connected)
678
+ {
679
+ return _delegate->startWrite(buffer);
680
+ }
681
+
682
+ if(_writeBuffer.i == _writeBuffer.b.end())
683
+ {
684
+ assert(_sentBytes == 0);
685
+ int packetSize = std::min(static_cast<int>(_maxSendPacketSize), static_cast<int>(buffer.b.end() - buffer.i));
686
+ _sentBytes = SSL_write(_ssl, reinterpret_cast<void*>(&*buffer.i), packetSize);
687
+
688
+ assert(BIO_ctrl_pending(_memBio));
689
+ _writeBuffer.b.resize( BIO_ctrl_pending(_memBio));
690
+ _writeBuffer.i = _writeBuffer.b.begin();
691
+ BIO_read(_memBio, _writeBuffer.i, static_cast<int>(_writeBuffer.b.size()));
692
+ }
693
+
694
+ return _delegate->startWrite(_writeBuffer) && buffer.i == buffer.b.end();
695
+ }
696
+
697
+ void
698
+ OpenSSL::TransceiverI::finishWrite(IceInternal::Buffer& buffer)
699
+ {
700
+ if(!_connected)
701
+ {
702
+ _delegate->finishWrite(buffer);
703
+ return;
704
+ }
705
+
706
+ _delegate->finishWrite(_writeBuffer);
707
+ if(_sentBytes)
708
+ {
709
+ buffer.i += _sentBytes;
710
+ _sentBytes = 0;
711
+ }
712
+ }
713
+
714
+ void
715
+ OpenSSL::TransceiverI::startRead(IceInternal::Buffer& buffer)
716
+ {
717
+ if(!_connected)
718
+ {
719
+ _delegate->startRead(buffer);
720
+ return;
721
+ }
722
+
723
+ if(_readBuffer.i == _readBuffer.b.end())
724
+ {
725
+ assert(!buffer.b.empty() && buffer.i != buffer.b.end());
726
+ ERR_clear_error(); // Clear any spurious errors.
727
+ #ifndef NDEBUG
728
+ int ret =
729
+ #endif
730
+ SSL_read(_ssl, reinterpret_cast<void*>(&*buffer.i), static_cast<int>(buffer.b.end() - buffer.i));
731
+ assert(ret <= 0 && SSL_get_error(_ssl, ret) == SSL_ERROR_WANT_READ);
732
+
733
+ assert(BIO_ctrl_get_read_request(_memBio));
734
+ _readBuffer.b.resize(BIO_ctrl_get_read_request(_memBio));
735
+ _readBuffer.i = _readBuffer.b.begin();
736
+ }
737
+
738
+ assert(!_readBuffer.b.empty() && _readBuffer.i != _readBuffer.b.end());
739
+
740
+ _delegate->startRead(_readBuffer);
741
+ }
742
+
743
+ void
744
+ OpenSSL::TransceiverI::finishRead(IceInternal::Buffer& buffer)
745
+ {
746
+ if(!_connected)
747
+ {
748
+ _delegate->finishRead(buffer);
749
+ return;
750
+ }
751
+
752
+ _delegate->finishRead(_readBuffer);
753
+ if(_readBuffer.i == _readBuffer.b.end())
754
+ {
755
+ int n = BIO_write(_memBio, _readBuffer.b.begin(), static_cast<int>(_readBuffer.b.size()));
756
+ if(n < 0) // Expected if the transceiver was closed.
757
+ {
758
+ throw SecurityException(__FILE__, __LINE__, "SSL bio write failed");
759
+ }
760
+
761
+ assert(n == static_cast<int>(_readBuffer.b.size()));
762
+ ERR_clear_error(); // Clear any spurious errors.
763
+ int ret = SSL_read(_ssl, reinterpret_cast<void*>(&*buffer.i), static_cast<int>(buffer.b.end() - buffer.i));
764
+ if(ret <= 0)
765
+ {
766
+ switch(SSL_get_error(_ssl, ret))
767
+ {
768
+ case SSL_ERROR_NONE:
769
+ case SSL_ERROR_WANT_WRITE:
770
+ {
771
+ assert(false);
772
+ return;
773
+ }
774
+ case SSL_ERROR_ZERO_RETURN:
775
+ {
776
+ throw ConnectionLostException(__FILE__, __LINE__, 0);
777
+ }
778
+ case SSL_ERROR_WANT_READ:
779
+ {
780
+ return;
781
+ }
782
+ case SSL_ERROR_SYSCALL:
783
+ {
784
+ if(IceInternal::connectionLost() || IceInternal::getSocketErrno() == 0)
785
+ {
786
+ throw ConnectionLostException(__FILE__, __LINE__, IceInternal::getSocketErrno());
787
+ }
788
+ else
789
+ {
790
+ throw SocketException(__FILE__, __LINE__, IceInternal::getSocketErrno());
791
+ }
792
+ }
793
+ case SSL_ERROR_SSL:
794
+ {
795
+ throw ProtocolException(__FILE__, __LINE__,
796
+ "SSL protocol error during read:\n" + _engine->sslErrors());
797
+ }
798
+ }
799
+ }
800
+ buffer.i += ret;
801
+ }
541
802
  }
803
+ #endif
542
804
 
543
805
  string
544
- IceSSL::TransceiverI::toString() const
806
+ OpenSSL::TransceiverI::protocol() const
545
807
  {
546
- return _stream->toString();
808
+ return _instance->protocol();
547
809
  }
548
810
 
549
811
  string
550
- IceSSL::TransceiverI::toDetailedString() const
812
+ OpenSSL::TransceiverI::toString() const
551
813
  {
552
- return toString();
814
+ return _delegate->toString();
553
815
  }
554
816
 
555
- Ice::ConnectionInfoPtr
556
- IceSSL::TransceiverI::getInfo() const
817
+ string
818
+ OpenSSL::TransceiverI::toDetailedString() const
557
819
  {
558
- NativeConnectionInfoPtr info = new NativeConnectionInfo();
559
- fillConnectionInfo(info, info->nativeCerts);
560
- return info;
820
+ return toString();
561
821
  }
562
822
 
563
823
  Ice::ConnectionInfoPtr
564
- IceSSL::TransceiverI::getWSInfo(const Ice::HeaderDict& headers) const
824
+ OpenSSL::TransceiverI::getInfo() const
565
825
  {
566
- WSSNativeConnectionInfoPtr info = new WSSNativeConnectionInfo();
567
- fillConnectionInfo(info, info->nativeCerts);
568
- info->headers = headers;
826
+ ConnectionInfoPtr info = ICE_MAKE_SHARED(ConnectionInfo);
827
+ info->underlying = _delegate->getInfo();
828
+ info->incoming = _incoming;
829
+ info->adapterName = _adapterName;
830
+ info->cipher = _cipher;
831
+ info->certs = _certs;
832
+ info->verified = _verified;
569
833
  return info;
570
834
  }
571
835
 
572
836
  void
573
- IceSSL::TransceiverI::checkSendSize(const IceInternal::Buffer&)
837
+ OpenSSL::TransceiverI::checkSendSize(const IceInternal::Buffer&)
574
838
  {
575
839
  }
576
840
 
577
841
  void
578
- IceSSL::TransceiverI::setBufferSize(int rcvSize, int sndSize)
842
+ OpenSSL::TransceiverI::setBufferSize(int rcvSize, int sndSize)
579
843
  {
580
- _stream->setBufferSize(rcvSize, sndSize);
844
+ _delegate->setBufferSize(rcvSize, sndSize);
581
845
  }
582
846
 
583
847
  int
584
- IceSSL::TransceiverI::verifyCallback(int ok, X509_STORE_CTX* c)
848
+ OpenSSL::TransceiverI::verifyCallback(int ok, X509_STORE_CTX* c)
585
849
  {
586
850
  if(!ok && _engine->securityTraceLevel() >= 1)
587
851
  {
@@ -598,7 +862,7 @@ IceSSL::TransceiverI::verifyCallback(int ok, X509_STORE_CTX* c)
598
862
  out << "subject = " << buf << '\n';
599
863
  out << "depth = " << X509_STORE_CTX_get_error_depth(c) << '\n';
600
864
  out << "error = " << X509_verify_cert_error_string(err) << '\n';
601
- out << IceInternal::fdToString(SSL_get_fd(_ssl));
865
+ out << toString();
602
866
  }
603
867
 
604
868
  //
@@ -608,10 +872,11 @@ IceSSL::TransceiverI::verifyCallback(int ok, X509_STORE_CTX* c)
608
872
  STACK_OF(X509)* chain = X509_STORE_CTX_get1_chain(c);
609
873
  if(chain != 0)
610
874
  {
611
- _nativeCerts.clear();
875
+ _certs.clear();
612
876
  for(int i = 0; i < sk_X509_num(chain); ++i)
613
877
  {
614
- _nativeCerts.push_back(new Certificate(X509_dup(sk_X509_value(chain, i))));
878
+ CertificatePtr cert = OpenSSL::Certificate::create(X509_dup(sk_X509_value(chain, i)));
879
+ _certs.push_back(cert);
615
880
  }
616
881
  sk_X509_pop_free(chain, X509_free);
617
882
  }
@@ -625,47 +890,77 @@ IceSSL::TransceiverI::verifyCallback(int ok, X509_STORE_CTX* c)
625
890
  return 1;
626
891
  }
627
892
 
628
- IceSSL::TransceiverI::TransceiverI(const InstancePtr& instance, const IceInternal::StreamSocketPtr& stream,
629
- const string& hostOrAdapterName, bool incoming) :
893
+ OpenSSL::TransceiverI::TransceiverI(const InstancePtr& instance,
894
+ const IceInternal::TransceiverPtr& delegate,
895
+ const string& hostOrAdapterName,
896
+ bool incoming) :
630
897
  _instance(instance),
631
- _engine(OpenSSLEnginePtr::dynamicCast(instance->engine())),
898
+ _engine(OpenSSL::SSLEnginePtr::dynamicCast(instance->engine())),
632
899
  _host(incoming ? "" : hostOrAdapterName),
633
900
  _adapterName(incoming ? hostOrAdapterName : ""),
634
901
  _incoming(incoming),
635
- _stream(stream),
902
+ _delegate(delegate),
903
+ _connected(false),
636
904
  _verified(false),
637
- _ssl(0)
905
+ _ssl(0),
906
+ _memBio(0),
907
+ _sentBytes(0),
908
+ _maxSendPacketSize(0),
909
+ _maxRecvPacketSize(0)
638
910
  {
639
911
  }
640
912
 
641
- IceSSL::TransceiverI::~TransceiverI()
913
+ OpenSSL::TransceiverI::~TransceiverI()
642
914
  {
643
915
  }
644
916
 
645
- void
646
- IceSSL::TransceiverI::fillConnectionInfo(const ConnectionInfoPtr& info, std::vector<CertificatePtr>& nativeCerts) const
917
+ bool
918
+ OpenSSL::TransceiverI::receive()
647
919
  {
648
- IceInternal::fdToAddressAndPort(_stream->fd(), info->localAddress, info->localPort, info->remoteAddress,
649
- info->remotePort);
650
- if(_stream->fd() != INVALID_SOCKET)
920
+ if(_readBuffer.i == _readBuffer.b.end())
651
921
  {
652
- info->rcvSize = IceInternal::getRecvBufferSize(_stream->fd());
653
- info->sndSize = IceInternal::getSendBufferSize(_stream->fd());
922
+ assert(BIO_ctrl_get_read_request(_memBio));
923
+ _readBuffer.b.resize(BIO_ctrl_get_read_request(_memBio));
924
+ _readBuffer.i = _readBuffer.b.begin();
654
925
  }
655
- info->adapterName = _adapterName;
656
- info->incoming = _incoming;
657
- info->verified = _verified;
658
- nativeCerts = _nativeCerts;
659
- for(vector<CertificatePtr>::const_iterator p = _nativeCerts.begin(); p != _nativeCerts.end(); ++p)
926
+
927
+ while(_readBuffer.i != _readBuffer.b.end())
928
+ {
929
+ if(_delegate->read(_readBuffer) != IceInternal::SocketOperationNone)
930
+ {
931
+ return false;
932
+ }
933
+ }
934
+
935
+ assert(_readBuffer.i == _readBuffer.b.end());
936
+
937
+ #ifndef NDEBUG
938
+ int n =
939
+ #endif
940
+ BIO_write(_memBio, &_readBuffer.b[0], static_cast<int>(_readBuffer.b.end() - _readBuffer.b.begin()));
941
+
942
+ assert(n == static_cast<int>(_readBuffer.b.end() - _readBuffer.b.begin()));
943
+
944
+ return true;
945
+ }
946
+
947
+ bool
948
+ OpenSSL::TransceiverI::send()
949
+ {
950
+ if(_writeBuffer.i == _writeBuffer.b.end())
660
951
  {
661
- info->certs.push_back((*p)->encode());
952
+ assert(BIO_ctrl_pending(_memBio));
953
+ _writeBuffer.b.resize( BIO_ctrl_pending(_memBio));
954
+ _writeBuffer.i = _writeBuffer.b.begin();
955
+ BIO_read(_memBio, _writeBuffer.i, static_cast<int>(_writeBuffer.b.size()));
662
956
  }
663
- if(_ssl != 0)
957
+
958
+ if(_writeBuffer.i != _writeBuffer.b.end())
664
959
  {
665
- info->cipher = SSL_get_cipher_name(_ssl); // Nothing needs to be free'd.
960
+ if(_delegate->write(_writeBuffer) != IceInternal::SocketOperationNone)
961
+ {
962
+ return false;
963
+ }
666
964
  }
667
- info->adapterName = _adapterName;
668
- info->incoming = _incoming;
965
+ return _writeBuffer.i == _writeBuffer.b.end();
669
966
  }
670
-
671
- #endif