zeroc-ice 3.6.5 → 3.7.0

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