zeroc-ice 3.7.0 → 3.7.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (691) hide show
  1. checksums.yaml +5 -5
  2. data/ICE_LICENSE +1 -1
  3. data/bin/slice2rb +1 -6
  4. data/ext/Communicator.cpp +78 -10
  5. data/ext/Communicator.h +1 -6
  6. data/ext/Config.h +35 -6
  7. data/ext/Connection.cpp +22 -11
  8. data/ext/Connection.h +4 -6
  9. data/ext/Endpoint.cpp +1 -10
  10. data/ext/Endpoint.h +1 -6
  11. data/ext/ImplicitContext.cpp +1 -6
  12. data/ext/ImplicitContext.h +1 -6
  13. data/ext/Init.cpp +1 -6
  14. data/ext/Logger.cpp +1 -6
  15. data/ext/Logger.h +1 -6
  16. data/ext/Operation.cpp +6 -11
  17. data/ext/Operation.h +1 -6
  18. data/ext/Properties.cpp +3 -8
  19. data/ext/Properties.h +1 -6
  20. data/ext/Proxy.cpp +90 -14
  21. data/ext/Proxy.h +1 -6
  22. data/ext/Slice.cpp +3 -18
  23. data/ext/Slice.h +1 -6
  24. data/ext/Types.cpp +92 -60
  25. data/ext/Types.h +1 -6
  26. data/ext/Util.cpp +61 -32
  27. data/ext/Util.h +108 -33
  28. data/ext/ValueFactoryManager.cpp +2 -7
  29. data/ext/ValueFactoryManager.h +2 -7
  30. data/ext/extconf.rb +5 -3
  31. data/ext/ice/cpp/include/Ice/Application.h +234 -81
  32. data/ext/ice/cpp/include/Ice/AsyncResult.h +77 -6
  33. data/ext/ice/cpp/include/Ice/AsyncResultF.h +1 -6
  34. data/ext/ice/cpp/include/Ice/BatchRequestInterceptor.h +35 -7
  35. data/ext/ice/cpp/include/Ice/BatchRequestQueueF.h +1 -6
  36. data/ext/ice/cpp/include/Ice/Buffer.h +1 -6
  37. data/ext/ice/cpp/include/Ice/CommunicatorAsync.h +43 -6
  38. data/ext/ice/cpp/include/Ice/Comparable.h +81 -6
  39. data/ext/ice/cpp/include/Ice/Config.h +12 -6
  40. data/ext/ice/cpp/include/Ice/ConnectionAsync.h +97 -6
  41. data/ext/ice/cpp/include/Ice/ConnectionIF.h +3 -6
  42. data/ext/ice/cpp/include/Ice/ConsoleUtil.h +1 -6
  43. data/ext/ice/cpp/include/Ice/DefaultValueFactory.h +1 -6
  44. data/ext/ice/cpp/include/Ice/DispatchInterceptor.h +17 -7
  45. data/ext/ice/cpp/include/Ice/Dispatcher.h +22 -7
  46. data/ext/ice/cpp/include/Ice/DynamicLibrary.h +1 -6
  47. data/ext/ice/cpp/include/Ice/DynamicLibraryF.h +1 -6
  48. data/ext/ice/cpp/include/Ice/Exception.h +57 -20
  49. data/ext/ice/cpp/include/Ice/ExceptionHelpers.h +11 -6
  50. data/ext/ice/cpp/include/Ice/FactoryTable.h +12 -7
  51. data/ext/ice/cpp/include/Ice/FactoryTableInit.h +2 -7
  52. data/ext/ice/cpp/include/Ice/Format.h +13 -19
  53. data/ext/ice/cpp/include/Ice/Functional.h +6 -6
  54. data/ext/ice/cpp/include/Ice/GCObject.h +1 -6
  55. data/ext/ice/cpp/include/Ice/Handle.h +1 -6
  56. data/ext/ice/cpp/include/Ice/Ice.h +1 -6
  57. data/ext/ice/cpp/include/Ice/IconvStringConverter.h +47 -18
  58. data/ext/ice/cpp/include/Ice/Incoming.h +27 -9
  59. data/ext/ice/cpp/include/Ice/IncomingAsync.h +47 -9
  60. data/ext/ice/cpp/include/Ice/IncomingAsyncF.h +1 -6
  61. data/ext/ice/cpp/include/Ice/Initialize.h +775 -103
  62. data/ext/ice/cpp/include/Ice/InputStream.h +642 -122
  63. data/ext/ice/cpp/include/Ice/InstanceF.h +1 -6
  64. data/ext/ice/cpp/include/Ice/InterfaceByValue.h +17 -6
  65. data/ext/ice/cpp/include/Ice/LocalObject.h +5 -6
  66. data/ext/ice/cpp/include/Ice/LocalObjectF.h +1 -6
  67. data/ext/ice/cpp/include/Ice/LoggerUtil.h +37 -11
  68. data/ext/ice/cpp/include/Ice/MetricsAdminI.h +11 -7
  69. data/ext/ice/cpp/include/Ice/MetricsFunctional.h +3 -6
  70. data/ext/ice/cpp/include/Ice/MetricsObserverI.h +18 -7
  71. data/ext/ice/cpp/include/Ice/NativePropertiesAdmin.h +46 -28
  72. data/ext/ice/cpp/include/Ice/Object.h +338 -52
  73. data/ext/ice/cpp/include/Ice/ObjectF.h +5 -6
  74. data/ext/ice/cpp/include/Ice/ObserverHelper.h +1 -6
  75. data/ext/ice/cpp/include/Ice/Optional.h +42 -12
  76. data/ext/ice/cpp/include/Ice/OutgoingAsync.h +32 -8
  77. data/ext/ice/cpp/include/Ice/OutgoingAsyncF.h +1 -6
  78. data/ext/ice/cpp/include/Ice/OutputStream.h +441 -102
  79. data/ext/ice/cpp/include/Ice/Protocol.h +31 -6
  80. data/ext/ice/cpp/include/Ice/Proxy.h +2288 -207
  81. data/ext/ice/cpp/include/Ice/ProxyF.h +3 -6
  82. data/ext/ice/cpp/include/Ice/ProxyFactoryF.h +1 -6
  83. data/ext/ice/cpp/include/Ice/ProxyHandle.h +10 -6
  84. data/ext/ice/cpp/include/Ice/ReferenceF.h +1 -6
  85. data/ext/ice/cpp/include/Ice/RegisterPlugins.h +67 -14
  86. data/ext/ice/cpp/include/Ice/RequestHandlerF.h +1 -6
  87. data/ext/ice/cpp/include/Ice/ResponseHandlerF.h +1 -6
  88. data/ext/ice/cpp/include/Ice/SHA1.h +1 -6
  89. data/ext/ice/cpp/include/Ice/ServantManagerF.h +1 -6
  90. data/ext/ice/cpp/include/Ice/Service.h +267 -143
  91. data/ext/ice/cpp/include/Ice/SliceChecksums.h +5 -6
  92. data/ext/ice/cpp/include/Ice/SlicedData.h +80 -38
  93. data/ext/ice/cpp/include/Ice/SlicedDataF.h +4 -6
  94. data/ext/ice/cpp/include/Ice/StreamHelpers.h +325 -122
  95. data/ext/ice/cpp/include/Ice/StringConverter.h +32 -6
  96. data/ext/ice/cpp/include/Ice/ThreadPoolF.h +1 -6
  97. data/ext/ice/cpp/include/Ice/UUID.h +2 -6
  98. data/ext/ice/cpp/include/Ice/UniquePtr.h +2 -7
  99. data/ext/ice/cpp/include/Ice/UniqueRef.h +6 -7
  100. data/ext/ice/cpp/include/Ice/UserExceptionFactory.h +6 -6
  101. data/ext/ice/cpp/include/Ice/Value.h +41 -6
  102. data/ext/ice/cpp/include/Ice/ValueF.h +3 -6
  103. data/ext/ice/cpp/include/IceSSL/Config.h +1 -6
  104. data/ext/ice/cpp/include/IceSSL/IceSSL.h +1 -6
  105. data/ext/ice/cpp/include/IceSSL/OpenSSL.h +75 -58
  106. data/ext/ice/cpp/include/IceSSL/Plugin.h +323 -223
  107. data/ext/ice/cpp/include/IceSSL/SChannel.h +41 -35
  108. data/ext/ice/cpp/include/IceSSL/SecureTransport.h +39 -33
  109. data/ext/ice/cpp/include/IceSSL/UWP.h +33 -29
  110. data/ext/ice/cpp/include/IceUtil/Atomic.h +2 -7
  111. data/ext/ice/cpp/include/IceUtil/Cond.h +1 -6
  112. data/ext/ice/cpp/include/IceUtil/Config.h +35 -14
  113. data/ext/ice/cpp/include/IceUtil/ConsoleUtil.h +5 -10
  114. data/ext/ice/cpp/include/IceUtil/CountDownLatch.h +1 -6
  115. data/ext/ice/cpp/include/IceUtil/CtrlCHandler.h +52 -36
  116. data/ext/ice/cpp/include/IceUtil/DisableWarnings.h +5 -11
  117. data/ext/ice/cpp/include/IceUtil/Exception.h +130 -11
  118. data/ext/ice/cpp/include/IceUtil/FileUtil.h +1 -6
  119. data/ext/ice/cpp/include/IceUtil/Functional.h +5 -6
  120. data/ext/ice/cpp/include/IceUtil/Handle.h +1 -6
  121. data/ext/ice/cpp/include/IceUtil/IceUtil.h +1 -6
  122. data/ext/ice/cpp/include/IceUtil/InputUtil.h +1 -6
  123. data/ext/ice/cpp/include/IceUtil/Iterator.h +1 -6
  124. data/ext/ice/cpp/include/IceUtil/Lock.h +1 -6
  125. data/ext/ice/cpp/include/IceUtil/Monitor.h +1 -6
  126. data/ext/ice/cpp/include/IceUtil/Mutex.h +3 -13
  127. data/ext/ice/cpp/include/IceUtil/MutexProtocol.h +1 -6
  128. data/ext/ice/cpp/include/IceUtil/MutexPtrLock.h +1 -6
  129. data/ext/ice/cpp/include/IceUtil/MutexPtrTryLock.h +1 -6
  130. data/ext/ice/cpp/include/IceUtil/Optional.h +103 -6
  131. data/ext/ice/cpp/include/IceUtil/Options.h +1 -6
  132. data/ext/ice/cpp/include/IceUtil/OutputUtil.h +18 -20
  133. data/ext/ice/cpp/include/IceUtil/PopDisableWarnings.h +1 -6
  134. data/ext/ice/cpp/include/IceUtil/PushDisableWarnings.h +8 -6
  135. data/ext/ice/cpp/include/IceUtil/Random.h +37 -6
  136. data/ext/ice/cpp/include/IceUtil/RecMutex.h +1 -6
  137. data/ext/ice/cpp/include/IceUtil/ResourceConfig.h +4 -9
  138. data/ext/ice/cpp/include/IceUtil/ScannerConfig.h +12 -9
  139. data/ext/ice/cpp/include/IceUtil/ScopedArray.h +1 -6
  140. data/ext/ice/cpp/include/IceUtil/Shared.h +1 -6
  141. data/ext/ice/cpp/include/IceUtil/StopWatch.h +1 -6
  142. data/ext/ice/cpp/include/IceUtil/StringConverter.h +107 -92
  143. data/ext/ice/cpp/include/IceUtil/StringUtil.h +1 -6
  144. data/ext/ice/cpp/include/IceUtil/Thread.h +1 -6
  145. data/ext/ice/cpp/include/IceUtil/ThreadException.h +1 -6
  146. data/ext/ice/cpp/include/IceUtil/Time.h +1 -6
  147. data/ext/ice/cpp/include/IceUtil/Timer.h +5 -6
  148. data/ext/ice/cpp/include/IceUtil/UUID.h +5 -6
  149. data/ext/ice/cpp/include/IceUtil/UndefSysMacros.h +1 -6
  150. data/ext/ice/cpp/include/generated/Ice/BuiltinSequences.h +81 -26
  151. data/ext/ice/cpp/include/generated/Ice/Communicator.h +928 -136
  152. data/ext/ice/cpp/include/generated/Ice/CommunicatorF.h +14 -11
  153. data/ext/ice/cpp/include/generated/Ice/Connection.h +968 -180
  154. data/ext/ice/cpp/include/generated/Ice/ConnectionF.h +22 -15
  155. data/ext/ice/cpp/include/generated/Ice/Current.h +166 -9
  156. data/ext/ice/cpp/include/generated/Ice/Endpoint.h +476 -115
  157. data/ext/ice/cpp/include/generated/Ice/EndpointF.h +42 -23
  158. data/ext/ice/cpp/include/generated/Ice/EndpointTypes.h +30 -9
  159. data/ext/ice/cpp/include/generated/Ice/FacetMap.h +12 -11
  160. data/ext/ice/cpp/include/generated/Ice/Identity.h +56 -13
  161. data/ext/ice/cpp/include/generated/Ice/ImplicitContext.h +151 -34
  162. data/ext/ice/cpp/include/generated/Ice/ImplicitContextF.h +14 -11
  163. data/ext/ice/cpp/include/generated/Ice/Instrumentation.h +630 -89
  164. data/ext/ice/cpp/include/generated/Ice/InstrumentationF.h +20 -13
  165. data/ext/ice/cpp/include/generated/Ice/LocalException.h +5009 -770
  166. data/ext/ice/cpp/include/generated/Ice/Locator.h +2255 -441
  167. data/ext/ice/cpp/include/generated/Ice/LocatorF.h +32 -19
  168. data/ext/ice/cpp/include/generated/Ice/Logger.h +105 -32
  169. data/ext/ice/cpp/include/generated/Ice/LoggerF.h +14 -11
  170. data/ext/ice/cpp/include/generated/Ice/Metrics.h +2539 -471
  171. data/ext/ice/cpp/include/generated/Ice/ObjectAdapter.h +1005 -132
  172. data/ext/ice/cpp/include/generated/Ice/ObjectAdapterF.h +14 -11
  173. data/ext/ice/cpp/include/generated/Ice/ObjectFactory.h +73 -18
  174. data/ext/ice/cpp/include/generated/Ice/Plugin.h +143 -34
  175. data/ext/ice/cpp/include/generated/Ice/PluginF.h +18 -13
  176. data/ext/ice/cpp/include/generated/Ice/Process.h +514 -79
  177. data/ext/ice/cpp/include/generated/Ice/ProcessF.h +21 -14
  178. data/ext/ice/cpp/include/generated/Ice/Properties.h +307 -64
  179. data/ext/ice/cpp/include/generated/Ice/PropertiesAdmin.h +738 -127
  180. data/ext/ice/cpp/include/generated/Ice/PropertiesF.h +25 -16
  181. data/ext/ice/cpp/include/generated/Ice/RemoteLogger.h +1524 -284
  182. data/ext/ice/cpp/include/generated/Ice/Router.h +1007 -201
  183. data/ext/ice/cpp/include/generated/Ice/RouterF.h +21 -14
  184. data/ext/ice/cpp/include/generated/Ice/ServantLocator.h +175 -24
  185. data/ext/ice/cpp/include/generated/Ice/ServantLocatorF.h +14 -11
  186. data/ext/ice/cpp/include/generated/Ice/SliceChecksumDict.h +14 -9
  187. data/ext/ice/cpp/include/generated/Ice/ValueFactory.h +178 -29
  188. data/ext/ice/cpp/include/generated/Ice/Version.h +32 -9
  189. data/ext/ice/cpp/include/generated/IceSSL/ConnectionInfo.h +72 -21
  190. data/ext/ice/cpp/include/generated/IceSSL/ConnectionInfoF.h +14 -11
  191. data/ext/ice/cpp/include/generated/IceSSL/EndpointInfo.h +40 -15
  192. data/ext/ice/cpp/src/Ice/ACM.cpp +21 -14
  193. data/ext/ice/cpp/src/Ice/ACM.h +1 -6
  194. data/ext/ice/cpp/src/Ice/ACMF.h +1 -6
  195. data/ext/ice/cpp/src/Ice/Acceptor.cpp +1 -6
  196. data/ext/ice/cpp/src/Ice/Acceptor.h +1 -6
  197. data/ext/ice/cpp/src/Ice/AcceptorF.h +1 -6
  198. data/ext/ice/cpp/src/Ice/ArgVector.cpp +8 -13
  199. data/ext/ice/cpp/src/Ice/ArgVector.h +1 -6
  200. data/ext/ice/cpp/src/Ice/AsyncResult.cpp +1 -7
  201. data/ext/ice/cpp/src/Ice/Base64.cpp +12 -18
  202. data/ext/ice/cpp/src/Ice/Base64.h +1 -6
  203. data/ext/ice/cpp/src/Ice/BatchRequestQueue.cpp +2 -7
  204. data/ext/ice/cpp/src/Ice/BatchRequestQueue.h +1 -6
  205. data/ext/ice/cpp/src/Ice/Buffer.cpp +3 -8
  206. data/ext/ice/cpp/src/Ice/BuiltinSequences.cpp +4 -9
  207. data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.cpp +2 -8
  208. data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.h +1 -6
  209. data/ext/ice/cpp/src/Ice/Communicator.cpp +7 -10
  210. data/ext/ice/cpp/src/Ice/CommunicatorF.cpp +4 -9
  211. data/ext/ice/cpp/src/Ice/CommunicatorI.cpp +56 -22
  212. data/ext/ice/cpp/src/Ice/CommunicatorI.h +15 -16
  213. data/ext/ice/cpp/src/Ice/Cond.cpp +1 -6
  214. data/ext/ice/cpp/src/Ice/ConnectRequestHandler.cpp +11 -11
  215. data/ext/ice/cpp/src/Ice/ConnectRequestHandler.h +5 -10
  216. data/ext/ice/cpp/src/Ice/ConnectRequestHandlerF.h +1 -6
  217. data/ext/ice/cpp/src/Ice/Connection.cpp +28 -17
  218. data/ext/ice/cpp/src/Ice/ConnectionF.cpp +4 -9
  219. data/ext/ice/cpp/src/Ice/ConnectionFactory.cpp +167 -52
  220. data/ext/ice/cpp/src/Ice/ConnectionFactory.h +4 -6
  221. data/ext/ice/cpp/src/Ice/ConnectionFactoryF.h +1 -6
  222. data/ext/ice/cpp/src/Ice/ConnectionI.cpp +78 -60
  223. data/ext/ice/cpp/src/Ice/ConnectionI.h +10 -13
  224. data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.cpp +1 -6
  225. data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.h +2 -7
  226. data/ext/ice/cpp/src/Ice/Connector.cpp +1 -6
  227. data/ext/ice/cpp/src/Ice/Connector.h +1 -6
  228. data/ext/ice/cpp/src/Ice/ConnectorF.h +1 -6
  229. data/ext/ice/cpp/src/Ice/CountDownLatch.cpp +1 -6
  230. data/ext/ice/cpp/src/Ice/Current.cpp +4 -9
  231. data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.cpp +5 -12
  232. data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.h +1 -6
  233. data/ext/ice/cpp/src/Ice/DefaultsAndOverridesF.h +1 -6
  234. data/ext/ice/cpp/src/Ice/DispatchInterceptor.cpp +14 -6
  235. data/ext/ice/cpp/src/Ice/DynamicLibrary.cpp +7 -11
  236. data/ext/ice/cpp/src/Ice/Endpoint.cpp +25 -16
  237. data/ext/ice/cpp/src/Ice/EndpointF.cpp +4 -9
  238. data/ext/ice/cpp/src/Ice/EndpointFactory.cpp +1 -6
  239. data/ext/ice/cpp/src/Ice/EndpointFactory.h +1 -6
  240. data/ext/ice/cpp/src/Ice/EndpointFactoryF.h +1 -6
  241. data/ext/ice/cpp/src/Ice/EndpointFactoryManager.cpp +7 -18
  242. data/ext/ice/cpp/src/Ice/EndpointFactoryManager.h +1 -6
  243. data/ext/ice/cpp/src/Ice/EndpointFactoryManagerF.h +1 -6
  244. data/ext/ice/cpp/src/Ice/EndpointI.cpp +2 -7
  245. data/ext/ice/cpp/src/Ice/EndpointI.h +5 -10
  246. data/ext/ice/cpp/src/Ice/EndpointIF.h +1 -6
  247. data/ext/ice/cpp/src/Ice/EndpointTypes.cpp +4 -9
  248. data/ext/ice/cpp/src/Ice/EventHandler.cpp +1 -6
  249. data/ext/ice/cpp/src/Ice/EventHandler.h +1 -6
  250. data/ext/ice/cpp/src/Ice/EventHandlerF.h +1 -6
  251. data/ext/ice/cpp/src/Ice/Exception.cpp +8 -13
  252. data/ext/ice/cpp/src/Ice/FacetMap.cpp +4 -9
  253. data/ext/ice/cpp/src/Ice/FactoryTable.cpp +1 -6
  254. data/ext/ice/cpp/src/Ice/FactoryTableInit.cpp +1 -6
  255. data/ext/ice/cpp/src/Ice/GCObject.cpp +2 -7
  256. data/ext/ice/cpp/src/Ice/HashUtil.h +2 -7
  257. data/ext/ice/cpp/src/Ice/HttpParser.cpp +1 -6
  258. data/ext/ice/cpp/src/Ice/HttpParser.h +1 -6
  259. data/ext/ice/cpp/src/Ice/IPEndpointI.cpp +37 -59
  260. data/ext/ice/cpp/src/Ice/IPEndpointI.h +5 -10
  261. data/ext/ice/cpp/src/Ice/IPEndpointIF.h +1 -6
  262. data/ext/ice/cpp/src/Ice/IconvStringConverter.cpp +1 -6
  263. data/ext/ice/cpp/src/Ice/Identity.cpp +4 -9
  264. data/ext/ice/cpp/src/Ice/ImplicitContext.cpp +7 -10
  265. data/ext/ice/cpp/src/Ice/ImplicitContextF.cpp +4 -9
  266. data/ext/ice/cpp/src/Ice/ImplicitContextI.cpp +3 -20
  267. data/ext/ice/cpp/src/Ice/ImplicitContextI.h +1 -6
  268. data/ext/ice/cpp/src/Ice/Incoming.cpp +11 -13
  269. data/ext/ice/cpp/src/Ice/IncomingAsync.cpp +1 -6
  270. data/ext/ice/cpp/src/Ice/IncomingRequest.h +1 -6
  271. data/ext/ice/cpp/src/Ice/Initialize.cpp +15 -26
  272. data/ext/ice/cpp/src/Ice/InputStream.cpp +45 -77
  273. data/ext/ice/cpp/src/Ice/Instance.cpp +70 -46
  274. data/ext/ice/cpp/src/Ice/Instance.h +3 -6
  275. data/ext/ice/cpp/src/Ice/Instrumentation.cpp +34 -19
  276. data/ext/ice/cpp/src/Ice/InstrumentationF.cpp +4 -9
  277. data/ext/ice/cpp/src/Ice/InstrumentationI.cpp +2 -7
  278. data/ext/ice/cpp/src/Ice/InstrumentationI.h +1 -6
  279. data/ext/ice/cpp/src/Ice/LocalException.cpp +280 -285
  280. data/ext/ice/cpp/src/Ice/LocalObject.cpp +1 -6
  281. data/ext/ice/cpp/src/Ice/Locator.cpp +274 -166
  282. data/ext/ice/cpp/src/Ice/LocatorF.cpp +4 -9
  283. data/ext/ice/cpp/src/Ice/LocatorInfo.cpp +28 -30
  284. data/ext/ice/cpp/src/Ice/LocatorInfo.h +3 -8
  285. data/ext/ice/cpp/src/Ice/LocatorInfoF.h +1 -6
  286. data/ext/ice/cpp/src/Ice/Logger.cpp +7 -10
  287. data/ext/ice/cpp/src/Ice/LoggerAdminI.cpp +8 -19
  288. data/ext/ice/cpp/src/Ice/LoggerAdminI.h +1 -6
  289. data/ext/ice/cpp/src/Ice/LoggerF.cpp +4 -9
  290. data/ext/ice/cpp/src/Ice/LoggerI.cpp +13 -12
  291. data/ext/ice/cpp/src/Ice/LoggerI.h +1 -6
  292. data/ext/ice/cpp/src/Ice/LoggerUtil.cpp +1 -6
  293. data/ext/ice/cpp/src/Ice/Metrics.cpp +296 -113
  294. data/ext/ice/cpp/src/Ice/MetricsAdminI.cpp +10 -15
  295. data/ext/ice/cpp/src/Ice/MetricsObserverI.cpp +1 -6
  296. data/ext/ice/cpp/src/Ice/Network.cpp +252 -271
  297. data/ext/ice/cpp/src/Ice/Network.h +6 -20
  298. data/ext/ice/cpp/src/Ice/NetworkF.h +1 -6
  299. data/ext/ice/cpp/src/Ice/NetworkProxy.cpp +2 -8
  300. data/ext/ice/cpp/src/Ice/NetworkProxy.h +1 -6
  301. data/ext/ice/cpp/src/Ice/NetworkProxyF.h +1 -6
  302. data/ext/ice/cpp/src/Ice/OSLogLoggerI.cpp +57 -0
  303. data/ext/ice/cpp/src/Ice/OSLogLoggerI.h +40 -0
  304. data/ext/ice/cpp/src/Ice/Object.cpp +16 -17
  305. data/ext/ice/cpp/src/Ice/ObjectAdapter.cpp +7 -10
  306. data/ext/ice/cpp/src/Ice/ObjectAdapterF.cpp +4 -9
  307. data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.cpp +53 -24
  308. data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.h +1 -6
  309. data/ext/ice/cpp/src/Ice/ObjectAdapterFactoryF.h +1 -6
  310. data/ext/ice/cpp/src/Ice/ObjectAdapterI.cpp +137 -156
  311. data/ext/ice/cpp/src/Ice/ObjectAdapterI.h +15 -16
  312. data/ext/ice/cpp/src/Ice/ObjectFactory.cpp +7 -10
  313. data/ext/ice/cpp/src/Ice/ObserverHelper.cpp +1 -6
  314. data/ext/ice/cpp/src/Ice/OpaqueEndpointI.cpp +29 -51
  315. data/ext/ice/cpp/src/Ice/OpaqueEndpointI.h +2 -7
  316. data/ext/ice/cpp/src/Ice/OutgoingAsync.cpp +6 -9
  317. data/ext/ice/cpp/src/Ice/OutputStream.cpp +29 -61
  318. data/ext/ice/cpp/src/Ice/Plugin.cpp +10 -11
  319. data/ext/ice/cpp/src/Ice/PluginF.cpp +4 -9
  320. data/ext/ice/cpp/src/Ice/PluginManagerI.cpp +15 -39
  321. data/ext/ice/cpp/src/Ice/PluginManagerI.h +3 -8
  322. data/ext/ice/cpp/src/Ice/Process.cpp +66 -42
  323. data/ext/ice/cpp/src/Ice/ProcessF.cpp +4 -9
  324. data/ext/ice/cpp/src/Ice/Properties.cpp +7 -10
  325. data/ext/ice/cpp/src/Ice/PropertiesAdmin.cpp +84 -54
  326. data/ext/ice/cpp/src/Ice/PropertiesAdminI.cpp +3 -8
  327. data/ext/ice/cpp/src/Ice/PropertiesAdminI.h +1 -6
  328. data/ext/ice/cpp/src/Ice/PropertiesF.cpp +4 -9
  329. data/ext/ice/cpp/src/Ice/PropertiesI.cpp +25 -35
  330. data/ext/ice/cpp/src/Ice/PropertiesI.h +10 -15
  331. data/ext/ice/cpp/src/Ice/PropertyNames.cpp +45 -8
  332. data/ext/ice/cpp/src/Ice/PropertyNames.h +2 -7
  333. data/ext/ice/cpp/src/Ice/Protocol.cpp +5 -18
  334. data/ext/ice/cpp/src/Ice/ProtocolInstance.cpp +1 -6
  335. data/ext/ice/cpp/src/Ice/ProtocolInstance.h +1 -6
  336. data/ext/ice/cpp/src/Ice/ProtocolInstanceF.h +1 -6
  337. data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.cpp +1 -6
  338. data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.h +1 -6
  339. data/ext/ice/cpp/src/Ice/ProtocolPluginFacadeF.h +1 -6
  340. data/ext/ice/cpp/src/Ice/Proxy.cpp +54 -8
  341. data/ext/ice/cpp/src/Ice/ProxyFactory.cpp +11 -7
  342. data/ext/ice/cpp/src/Ice/ProxyFactory.h +1 -6
  343. data/ext/ice/cpp/src/Ice/Reference.cpp +116 -38
  344. data/ext/ice/cpp/src/Ice/Reference.h +13 -7
  345. data/ext/ice/cpp/src/Ice/ReferenceFactory.cpp +52 -98
  346. data/ext/ice/cpp/src/Ice/ReferenceFactory.h +1 -6
  347. data/ext/ice/cpp/src/Ice/ReferenceFactoryF.h +1 -6
  348. data/ext/ice/cpp/src/Ice/RegisterPluginsInit.cpp +4 -8
  349. data/ext/ice/cpp/src/Ice/RegisterPluginsInit.h +1 -6
  350. data/ext/ice/cpp/src/Ice/RemoteLogger.cpp +194 -113
  351. data/ext/ice/cpp/src/Ice/ReplyStatus.h +1 -6
  352. data/ext/ice/cpp/src/Ice/RequestHandler.cpp +1 -6
  353. data/ext/ice/cpp/src/Ice/RequestHandler.h +1 -6
  354. data/ext/ice/cpp/src/Ice/RequestHandlerFactory.cpp +1 -6
  355. data/ext/ice/cpp/src/Ice/RequestHandlerFactory.h +1 -6
  356. data/ext/ice/cpp/src/Ice/ResponseHandler.cpp +1 -6
  357. data/ext/ice/cpp/src/Ice/ResponseHandler.h +1 -6
  358. data/ext/ice/cpp/src/Ice/RetryQueue.cpp +7 -9
  359. data/ext/ice/cpp/src/Ice/RetryQueue.h +1 -6
  360. data/ext/ice/cpp/src/Ice/RetryQueueF.h +1 -6
  361. data/ext/ice/cpp/src/Ice/Router.cpp +160 -87
  362. data/ext/ice/cpp/src/Ice/RouterF.cpp +4 -9
  363. data/ext/ice/cpp/src/Ice/RouterInfo.cpp +8 -35
  364. data/ext/ice/cpp/src/Ice/RouterInfo.h +1 -8
  365. data/ext/ice/cpp/src/Ice/RouterInfoF.h +1 -6
  366. data/ext/ice/cpp/src/Ice/SHA1.cpp +3 -8
  367. data/ext/ice/cpp/src/Ice/Selector.cpp +76 -49
  368. data/ext/ice/cpp/src/Ice/Selector.h +1 -6
  369. data/ext/ice/cpp/src/Ice/ServantLocator.cpp +7 -10
  370. data/ext/ice/cpp/src/Ice/ServantLocatorF.cpp +4 -9
  371. data/ext/ice/cpp/src/Ice/ServantManager.cpp +21 -42
  372. data/ext/ice/cpp/src/Ice/ServantManager.h +1 -6
  373. data/ext/ice/cpp/src/Ice/SharedContext.h +1 -6
  374. data/ext/ice/cpp/src/Ice/SliceChecksumDict.cpp +4 -9
  375. data/ext/ice/cpp/src/Ice/SliceChecksums.cpp +1 -6
  376. data/ext/ice/cpp/src/Ice/SlicedData.cpp +1 -6
  377. data/ext/ice/cpp/src/Ice/StreamSocket.cpp +46 -69
  378. data/ext/ice/cpp/src/Ice/StreamSocket.h +1 -6
  379. data/ext/ice/cpp/src/Ice/StringConverterPlugin.cpp +10 -6
  380. data/ext/ice/cpp/src/Ice/StringUtil.h +1 -6
  381. data/ext/ice/cpp/src/Ice/SysLoggerI.cpp +3 -8
  382. data/ext/ice/cpp/src/Ice/SysLoggerI.h +1 -6
  383. data/ext/ice/cpp/src/Ice/SystemdJournalI.cpp +66 -0
  384. data/ext/ice/cpp/src/Ice/SystemdJournalI.h +39 -0
  385. data/ext/ice/cpp/src/Ice/TcpAcceptor.cpp +13 -19
  386. data/ext/ice/cpp/src/Ice/TcpAcceptor.h +1 -6
  387. data/ext/ice/cpp/src/Ice/TcpConnector.cpp +6 -6
  388. data/ext/ice/cpp/src/Ice/TcpConnector.h +1 -6
  389. data/ext/ice/cpp/src/Ice/TcpEndpointI.cpp +13 -16
  390. data/ext/ice/cpp/src/Ice/TcpEndpointI.h +2 -7
  391. data/ext/ice/cpp/src/Ice/TcpTransceiver.cpp +6 -6
  392. data/ext/ice/cpp/src/Ice/TcpTransceiver.h +1 -6
  393. data/ext/ice/cpp/src/Ice/Thread.cpp +18 -14
  394. data/ext/ice/cpp/src/Ice/ThreadPool.cpp +79 -19
  395. data/ext/ice/cpp/src/Ice/ThreadPool.h +11 -12
  396. data/ext/ice/cpp/src/Ice/Timer.cpp +11 -6
  397. data/ext/ice/cpp/src/Ice/TraceLevels.cpp +1 -6
  398. data/ext/ice/cpp/src/Ice/TraceLevels.h +1 -6
  399. data/ext/ice/cpp/src/Ice/TraceLevelsF.h +1 -6
  400. data/ext/ice/cpp/src/Ice/TraceUtil.cpp +1 -6
  401. data/ext/ice/cpp/src/Ice/TraceUtil.h +1 -6
  402. data/ext/ice/cpp/src/Ice/Transceiver.cpp +1 -6
  403. data/ext/ice/cpp/src/Ice/Transceiver.h +1 -6
  404. data/ext/ice/cpp/src/Ice/TransceiverF.h +3 -8
  405. data/ext/ice/cpp/src/Ice/UdpConnector.cpp +4 -6
  406. data/ext/ice/cpp/src/Ice/UdpConnector.h +1 -6
  407. data/ext/ice/cpp/src/Ice/UdpEndpointI.cpp +30 -33
  408. data/ext/ice/cpp/src/Ice/UdpEndpointI.h +2 -7
  409. data/ext/ice/cpp/src/Ice/UdpTransceiver.cpp +49 -79
  410. data/ext/ice/cpp/src/Ice/UdpTransceiver.h +1 -6
  411. data/ext/ice/cpp/src/Ice/Value.cpp +1 -6
  412. data/ext/ice/cpp/src/Ice/ValueFactory.cpp +10 -11
  413. data/ext/ice/cpp/src/Ice/ValueFactoryManagerI.cpp +3 -12
  414. data/ext/ice/cpp/src/Ice/ValueFactoryManagerI.h +2 -7
  415. data/ext/ice/cpp/src/Ice/Version.cpp +4 -9
  416. data/ext/ice/cpp/src/Ice/VirtualShared.h +1 -6
  417. data/ext/ice/cpp/src/Ice/WSAcceptor.cpp +1 -6
  418. data/ext/ice/cpp/src/Ice/WSAcceptor.h +1 -6
  419. data/ext/ice/cpp/src/Ice/WSConnector.cpp +1 -6
  420. data/ext/ice/cpp/src/Ice/WSConnector.h +1 -6
  421. data/ext/ice/cpp/src/Ice/WSEndpoint.cpp +4 -10
  422. data/ext/ice/cpp/src/Ice/WSEndpoint.h +2 -7
  423. data/ext/ice/cpp/src/Ice/WSTransceiver.cpp +25 -30
  424. data/ext/ice/cpp/src/Ice/WSTransceiver.h +1 -7
  425. data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.cpp +86 -33
  426. data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.h +1083 -129
  427. data/ext/ice/cpp/src/IceDiscovery/LocatorI.cpp +4 -7
  428. data/ext/ice/cpp/src/IceDiscovery/LocatorI.h +1 -6
  429. data/ext/ice/cpp/src/IceDiscovery/LookupI.cpp +5 -10
  430. data/ext/ice/cpp/src/IceDiscovery/LookupI.h +1 -6
  431. data/ext/ice/cpp/src/IceDiscovery/PluginI.cpp +1 -6
  432. data/ext/ice/cpp/src/IceDiscovery/PluginI.h +1 -6
  433. data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.cpp +71 -30
  434. data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.h +640 -79
  435. data/ext/ice/cpp/src/IceLocatorDiscovery/Plugin.h +1 -6
  436. data/ext/ice/cpp/src/IceLocatorDiscovery/PluginI.cpp +122 -25
  437. data/ext/ice/cpp/src/IceSSL/AcceptorI.cpp +2 -9
  438. data/ext/ice/cpp/src/IceSSL/AcceptorI.h +1 -6
  439. data/ext/ice/cpp/src/IceSSL/CertificateI.cpp +4 -9
  440. data/ext/ice/cpp/src/IceSSL/CertificateI.h +1 -6
  441. data/ext/ice/cpp/src/IceSSL/ConnectionInfo.cpp +7 -10
  442. data/ext/ice/cpp/src/IceSSL/ConnectionInfoF.cpp +4 -9
  443. data/ext/ice/cpp/src/IceSSL/ConnectorI.cpp +2 -9
  444. data/ext/ice/cpp/src/IceSSL/ConnectorI.h +1 -6
  445. data/ext/ice/cpp/src/IceSSL/EndpointI.cpp +9 -14
  446. data/ext/ice/cpp/src/IceSSL/EndpointI.h +3 -8
  447. data/ext/ice/cpp/src/IceSSL/EndpointInfo.cpp +7 -10
  448. data/ext/ice/cpp/src/IceSSL/Instance.cpp +1 -6
  449. data/ext/ice/cpp/src/IceSSL/Instance.h +1 -6
  450. data/ext/ice/cpp/src/IceSSL/InstanceF.h +1 -6
  451. data/ext/ice/cpp/src/IceSSL/OpenSSLCertificateI.cpp +11 -19
  452. data/ext/ice/cpp/src/IceSSL/OpenSSLEngine.cpp +100 -46
  453. data/ext/ice/cpp/src/IceSSL/OpenSSLEngine.h +3 -8
  454. data/ext/ice/cpp/src/IceSSL/OpenSSLEngineF.h +1 -6
  455. data/ext/ice/cpp/src/IceSSL/OpenSSLPluginI.cpp +1 -6
  456. data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.cpp +190 -206
  457. data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.h +2 -11
  458. data/ext/ice/cpp/src/IceSSL/OpenSSLUtil.cpp +1 -6
  459. data/ext/ice/cpp/src/IceSSL/OpenSSLUtil.h +1 -6
  460. data/ext/ice/cpp/src/IceSSL/PluginI.cpp +1 -6
  461. data/ext/ice/cpp/src/IceSSL/PluginI.h +1 -6
  462. data/ext/ice/cpp/src/IceSSL/RFC2253.cpp +1 -7
  463. data/ext/ice/cpp/src/IceSSL/RFC2253.h +1 -6
  464. data/ext/ice/cpp/src/IceSSL/SChannelCertificateI.cpp +5 -10
  465. data/ext/ice/cpp/src/IceSSL/SChannelEngine.cpp +69 -36
  466. data/ext/ice/cpp/src/IceSSL/SChannelEngine.h +5 -8
  467. data/ext/ice/cpp/src/IceSSL/SChannelEngineF.h +5 -6
  468. data/ext/ice/cpp/src/IceSSL/SChannelPluginI.cpp +1 -6
  469. data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.cpp +71 -62
  470. data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.h +7 -6
  471. data/ext/ice/cpp/src/IceSSL/SSLEngine.cpp +26 -28
  472. data/ext/ice/cpp/src/IceSSL/SSLEngine.h +3 -6
  473. data/ext/ice/cpp/src/IceSSL/SSLEngineF.h +1 -6
  474. data/ext/ice/cpp/src/IceSSL/SecureTransportCertificateI.cpp +37 -31
  475. data/ext/ice/cpp/src/IceSSL/SecureTransportEngine.cpp +44 -18
  476. data/ext/ice/cpp/src/IceSSL/SecureTransportEngine.h +5 -6
  477. data/ext/ice/cpp/src/IceSSL/SecureTransportEngineF.h +4 -6
  478. data/ext/ice/cpp/src/IceSSL/SecureTransportPluginI.cpp +1 -6
  479. data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.cpp +47 -27
  480. data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.h +6 -7
  481. data/ext/ice/cpp/src/IceSSL/SecureTransportUtil.cpp +41 -34
  482. data/ext/ice/cpp/src/IceSSL/SecureTransportUtil.h +5 -6
  483. data/ext/ice/cpp/src/IceSSL/TrustManager.cpp +4 -10
  484. data/ext/ice/cpp/src/IceSSL/TrustManager.h +1 -6
  485. data/ext/ice/cpp/src/IceSSL/TrustManagerF.h +1 -6
  486. data/ext/ice/cpp/src/IceSSL/UWPCertificateI.cpp +4 -9
  487. data/ext/ice/cpp/src/IceSSL/UWPEngine.cpp +4 -9
  488. data/ext/ice/cpp/src/IceSSL/UWPEngine.h +1 -6
  489. data/ext/ice/cpp/src/IceSSL/UWPEngineF.h +1 -6
  490. data/ext/ice/cpp/src/IceSSL/UWPPluginI.cpp +1 -6
  491. data/ext/ice/cpp/src/IceSSL/UWPTransceiverI.cpp +5 -10
  492. data/ext/ice/cpp/src/IceSSL/UWPTransceiverI.h +1 -6
  493. data/ext/ice/cpp/src/IceSSL/Util.cpp +12 -11
  494. data/ext/ice/cpp/src/IceSSL/Util.h +1 -6
  495. data/ext/ice/cpp/src/IceUtil/ConsoleUtil.cpp +1 -6
  496. data/ext/ice/cpp/src/IceUtil/ConvertUTF.cpp +1 -6
  497. data/ext/ice/cpp/src/IceUtil/ConvertUTF.h +1 -6
  498. data/ext/ice/cpp/src/IceUtil/CtrlCHandler.cpp +3 -6
  499. data/ext/ice/cpp/src/IceUtil/FileUtil.cpp +6 -11
  500. data/ext/ice/cpp/src/IceUtil/InputUtil.cpp +1 -6
  501. data/ext/ice/cpp/src/IceUtil/MutexProtocol.cpp +1 -6
  502. data/ext/ice/cpp/src/IceUtil/Options.cpp +25 -15
  503. data/ext/ice/cpp/src/IceUtil/OutputUtil.cpp +41 -16
  504. data/ext/ice/cpp/src/IceUtil/Random.cpp +3 -8
  505. data/ext/ice/cpp/src/IceUtil/RecMutex.cpp +2 -11
  506. data/ext/ice/cpp/src/IceUtil/Shared.cpp +1 -6
  507. data/ext/ice/cpp/src/IceUtil/StringConverter.cpp +6 -11
  508. data/ext/ice/cpp/src/IceUtil/StringUtil.cpp +45 -12
  509. data/ext/ice/cpp/src/IceUtil/ThreadException.cpp +1 -6
  510. data/ext/ice/cpp/src/IceUtil/Time.cpp +10 -17
  511. data/ext/ice/cpp/src/IceUtil/UUID.cpp +8 -13
  512. data/ext/ice/cpp/src/IceUtil/Unicode.cpp +1 -6
  513. data/ext/ice/cpp/src/IceUtil/Unicode.h +1 -6
  514. data/ext/ice/cpp/src/IceUtil/UtilException.cpp +17 -16
  515. data/ext/ice/cpp/src/Slice/CPlusPlusUtil.cpp +178 -170
  516. data/ext/ice/cpp/src/Slice/CPlusPlusUtil.h +8 -12
  517. data/ext/ice/cpp/src/Slice/Checksum.cpp +1 -6
  518. data/ext/ice/cpp/src/Slice/Checksum.h +1 -6
  519. data/ext/ice/cpp/src/Slice/FileTracker.cpp +1 -6
  520. data/ext/ice/cpp/src/Slice/FileTracker.h +1 -6
  521. data/ext/ice/cpp/src/Slice/Grammar.cpp +424 -438
  522. data/ext/ice/cpp/src/Slice/Grammar.h +7 -7
  523. data/ext/ice/cpp/src/Slice/GrammarUtil.h +1 -7
  524. data/ext/ice/cpp/src/Slice/JavaUtil.cpp +195 -122
  525. data/ext/ice/cpp/src/Slice/JavaUtil.h +12 -12
  526. data/ext/ice/cpp/src/Slice/MD5.cpp +1 -6
  527. data/ext/ice/cpp/src/Slice/MD5.h +1 -6
  528. data/ext/ice/cpp/src/Slice/MD5I.cpp +8 -0
  529. data/ext/ice/cpp/src/Slice/PHPUtil.cpp +6 -6
  530. data/ext/ice/cpp/src/Slice/PHPUtil.h +1 -6
  531. data/ext/ice/cpp/src/Slice/Parser.cpp +535 -266
  532. data/ext/ice/cpp/src/Slice/Parser.h +72 -12
  533. data/ext/ice/cpp/src/Slice/Preprocessor.cpp +26 -17
  534. data/ext/ice/cpp/src/Slice/Preprocessor.h +2 -7
  535. data/ext/ice/cpp/src/Slice/Python.cpp +28 -42
  536. data/ext/ice/cpp/src/Slice/PythonUtil.cpp +137 -53
  537. data/ext/ice/cpp/src/Slice/PythonUtil.h +2 -7
  538. data/ext/ice/cpp/src/Slice/Ruby.cpp +5 -10
  539. data/ext/ice/cpp/src/Slice/RubyUtil.cpp +13 -15
  540. data/ext/ice/cpp/src/Slice/RubyUtil.h +1 -6
  541. data/ext/ice/cpp/src/Slice/Scanner.cpp +296 -217
  542. data/ext/ice/cpp/src/Slice/SliceUtil.cpp +2 -8
  543. data/ext/ice/cpp/src/Slice/StringLiteralUtil.cpp +109 -27
  544. data/ext/ice/cpp/src/Slice/Util.h +5 -9
  545. data/ext/ice/mcpp/Makefile +2 -5
  546. data/ice.gemspec +3 -5
  547. data/lib/Glacier2.rb +1 -6
  548. data/lib/Glacier2/Metrics.rb +3 -8
  549. data/lib/Glacier2/PermissionsVerifier.rb +3 -8
  550. data/lib/Glacier2/PermissionsVerifierF.rb +3 -8
  551. data/lib/Glacier2/Router.rb +3 -8
  552. data/lib/Glacier2/RouterF.rb +3 -8
  553. data/lib/Glacier2/SSLInfo.rb +3 -8
  554. data/lib/Glacier2/Session.rb +3 -8
  555. data/lib/Ice.rb +2 -7
  556. data/lib/Ice/BuiltinSequences.rb +3 -8
  557. data/lib/Ice/Communicator.rb +3 -8
  558. data/lib/Ice/CommunicatorF.rb +3 -8
  559. data/lib/Ice/Connection.rb +3 -8
  560. data/lib/Ice/ConnectionF.rb +3 -8
  561. data/lib/Ice/Current.rb +3 -8
  562. data/lib/Ice/Endpoint.rb +3 -8
  563. data/lib/Ice/EndpointF.rb +3 -8
  564. data/lib/Ice/EndpointTypes.rb +3 -8
  565. data/lib/Ice/FacetMap.rb +3 -8
  566. data/lib/Ice/Identity.rb +3 -8
  567. data/lib/Ice/ImplicitContext.rb +3 -8
  568. data/lib/Ice/ImplicitContextF.rb +3 -8
  569. data/lib/Ice/Instrumentation.rb +3 -8
  570. data/lib/Ice/InstrumentationF.rb +3 -8
  571. data/lib/Ice/LocalException.rb +3 -8
  572. data/lib/Ice/Locator.rb +3 -8
  573. data/lib/Ice/LocatorF.rb +3 -8
  574. data/lib/Ice/Logger.rb +3 -8
  575. data/lib/Ice/LoggerF.rb +3 -8
  576. data/lib/Ice/Metrics.rb +3 -8
  577. data/lib/Ice/ObjectAdapter.rb +3 -8
  578. data/lib/Ice/ObjectAdapterF.rb +3 -8
  579. data/lib/Ice/ObjectFactory.rb +3 -8
  580. data/lib/Ice/Plugin.rb +3 -8
  581. data/lib/Ice/PluginF.rb +3 -8
  582. data/lib/Ice/Process.rb +3 -8
  583. data/lib/Ice/ProcessF.rb +3 -8
  584. data/lib/Ice/Properties.rb +3 -8
  585. data/lib/Ice/PropertiesAdmin.rb +3 -8
  586. data/lib/Ice/PropertiesF.rb +3 -8
  587. data/lib/Ice/RemoteLogger.rb +3 -8
  588. data/lib/Ice/Router.rb +3 -8
  589. data/lib/Ice/RouterF.rb +3 -8
  590. data/lib/Ice/ServantLocator.rb +3 -8
  591. data/lib/Ice/ServantLocatorF.rb +3 -8
  592. data/lib/Ice/SliceChecksumDict.rb +3 -8
  593. data/lib/Ice/ValueFactory.rb +3 -8
  594. data/lib/Ice/Version.rb +3 -8
  595. data/lib/IceBox.rb +1 -6
  596. data/lib/IceBox/IceBox.rb +3 -8
  597. data/lib/IceGrid.rb +1 -6
  598. data/lib/IceGrid/Admin.rb +3 -8
  599. data/lib/IceGrid/Descriptor.rb +3 -8
  600. data/lib/IceGrid/Exception.rb +3 -8
  601. data/lib/IceGrid/FileParser.rb +3 -8
  602. data/lib/IceGrid/PluginFacade.rb +3 -8
  603. data/lib/IceGrid/Registry.rb +3 -8
  604. data/lib/IceGrid/Session.rb +3 -8
  605. data/lib/IceGrid/UserAccountMapper.rb +3 -8
  606. data/lib/IcePatch2.rb +1 -6
  607. data/lib/IcePatch2/FileInfo.rb +3 -8
  608. data/lib/IcePatch2/FileServer.rb +3 -8
  609. data/lib/IceStorm.rb +1 -6
  610. data/lib/IceStorm/IceStorm.rb +3 -8
  611. data/lib/IceStorm/Metrics.rb +3 -8
  612. data/slice/Glacier2/Metrics.ice +14 -8
  613. data/slice/Glacier2/PermissionsVerifier.ice +11 -7
  614. data/slice/Glacier2/PermissionsVerifierF.ice +11 -7
  615. data/slice/Glacier2/Router.ice +12 -8
  616. data/slice/Glacier2/RouterF.ice +11 -7
  617. data/slice/Glacier2/SSLInfo.ice +11 -7
  618. data/slice/Glacier2/Session.ice +11 -7
  619. data/slice/Ice/BuiltinSequences.ice +13 -7
  620. data/slice/Ice/Communicator.ice +143 -102
  621. data/slice/Ice/CommunicatorF.ice +13 -7
  622. data/slice/Ice/Connection.ice +65 -29
  623. data/slice/Ice/ConnectionF.ice +13 -7
  624. data/slice/Ice/Current.ice +31 -26
  625. data/slice/Ice/Endpoint.ice +24 -21
  626. data/slice/Ice/EndpointF.ice +14 -8
  627. data/slice/Ice/EndpointTypes.ice +15 -9
  628. data/slice/Ice/FacetMap.ice +14 -8
  629. data/slice/Ice/Identity.ice +13 -7
  630. data/slice/Ice/ImplicitContext.ice +31 -25
  631. data/slice/Ice/ImplicitContextF.ice +12 -7
  632. data/slice/Ice/Instrumentation.ice +19 -13
  633. data/slice/Ice/InstrumentationF.ice +13 -7
  634. data/slice/Ice/LocalException.ice +35 -29
  635. data/slice/Ice/Locator.ice +14 -8
  636. data/slice/Ice/LocatorF.ice +13 -7
  637. data/slice/Ice/Logger.ice +19 -13
  638. data/slice/Ice/LoggerF.ice +13 -7
  639. data/slice/Ice/Metrics.ice +26 -18
  640. data/slice/Ice/ObjectAdapter.ice +63 -45
  641. data/slice/Ice/ObjectAdapterF.ice +13 -7
  642. data/slice/Ice/ObjectFactory.ice +20 -12
  643. data/slice/Ice/Plugin.ice +19 -10
  644. data/slice/Ice/PluginF.ice +17 -7
  645. data/slice/Ice/Process.ice +13 -7
  646. data/slice/Ice/ProcessF.ice +13 -7
  647. data/slice/Ice/Properties.ice +35 -24
  648. data/slice/Ice/PropertiesAdmin.ice +13 -7
  649. data/slice/Ice/PropertiesF.ice +13 -7
  650. data/slice/Ice/RemoteLogger.ice +23 -28
  651. data/slice/Ice/Router.ice +14 -8
  652. data/slice/Ice/RouterF.ice +13 -7
  653. data/slice/Ice/ServantLocator.ice +31 -23
  654. data/slice/Ice/ServantLocatorF.ice +13 -7
  655. data/slice/Ice/SliceChecksumDict.ice +13 -7
  656. data/slice/Ice/ValueFactory.ice +31 -26
  657. data/slice/Ice/Version.ice +13 -7
  658. data/slice/IceBT/ConnectionInfo.ice +12 -7
  659. data/slice/IceBT/EndpointInfo.ice +13 -8
  660. data/slice/IceBT/Types.ice +12 -7
  661. data/slice/IceBox/IceBox.ice +30 -11
  662. data/slice/IceDiscovery/IceDiscovery.ice +68 -7
  663. data/slice/IceGrid/Admin.ice +41 -35
  664. data/slice/IceGrid/Descriptor.ice +15 -10
  665. data/slice/IceGrid/Exception.ice +15 -10
  666. data/slice/IceGrid/FileParser.ice +14 -8
  667. data/slice/IceGrid/PluginFacade.ice +17 -11
  668. data/slice/IceGrid/Registry.ice +13 -7
  669. data/slice/IceGrid/Session.ice +18 -12
  670. data/slice/IceGrid/UserAccountMapper.ice +16 -10
  671. data/slice/IceIAP/ConnectionInfo.ice +11 -8
  672. data/slice/IceIAP/EndpointInfo.ice +11 -8
  673. data/slice/IceLocatorDiscovery/IceLocatorDiscovery.ice +12 -7
  674. data/slice/IcePatch2/FileInfo.ice +12 -7
  675. data/slice/IcePatch2/FileServer.ice +13 -8
  676. data/slice/IceSSL/ConnectionInfo.ice +16 -9
  677. data/slice/IceSSL/ConnectionInfoF.ice +14 -8
  678. data/slice/IceSSL/EndpointInfo.ice +14 -8
  679. data/slice/IceStorm/IceStorm.ice +20 -15
  680. data/slice/IceStorm/Metrics.ice +12 -8
  681. metadata +7 -13
  682. data/BZIP2_LICENSE +0 -42
  683. data/ext/ice/bzip2/blocksort.c +0 -1094
  684. data/ext/ice/bzip2/bzlib.c +0 -1572
  685. data/ext/ice/bzip2/bzlib.h +0 -282
  686. data/ext/ice/bzip2/bzlib_private.h +0 -509
  687. data/ext/ice/bzip2/compress.c +0 -672
  688. data/ext/ice/bzip2/crctable.c +0 -104
  689. data/ext/ice/bzip2/decompress.c +0 -646
  690. data/ext/ice/bzip2/huffman.c +0 -205
  691. data/ext/ice/bzip2/randtable.c +0 -84
@@ -1,11 +1,6 @@
1
- // **********************************************************************
2
1
  //
3
- // Copyright (c) 2003-2017 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 <Ice/MetricsAdminI.h>
11
6
 
@@ -84,7 +79,7 @@ parseRule(const PropertiesPtr& properties, const string& name)
84
79
  }
85
80
  catch(const std::exception&)
86
81
  {
87
- throw "invalid regular expression `" + p->second + "' for `" + p->first + "'";
82
+ throw invalid_argument("invalid regular expression `" + p->second + "' for `" + p->first + "'");
88
83
  }
89
84
  }
90
85
  return regexps;
@@ -203,6 +198,11 @@ MetricsMapI::MetricsMapI(const std::string& mapPrefix, const PropertiesPtr& prop
203
198
  }
204
199
 
205
200
  MetricsMapI::MetricsMapI(const MetricsMapI& map) :
201
+ #if defined(ICE_CPP11_MAPPING)
202
+ std::enable_shared_from_this<MetricsMapI>(),
203
+ #elif defined(__GNUC__)
204
+ IceUtil::Shared(),
205
+ #endif
206
206
  _properties(map._properties),
207
207
  _groupByAttributes(map._groupByAttributes),
208
208
  _groupBySeparators(map._groupBySeparators),
@@ -315,11 +315,6 @@ MetricsViewI::addOrUpdateMap(const PropertiesPtr& properties, const string& mapN
315
315
  ::Ice::Warning warn(logger);
316
316
  warn << "unexpected exception while creating metrics map:\n" << ex;
317
317
  }
318
- catch(const string& msg)
319
- {
320
- ::Ice::Warning warn(logger);
321
- warn << msg;
322
- }
323
318
  return true;
324
319
  }
325
320
 
@@ -456,11 +451,11 @@ MetricsAdminI::updateViews()
456
451
  q = views.insert(make_pair(viewName, q->second)).first;
457
452
  }
458
453
 
459
- for(map<string, MetricsMapFactoryPtr>::const_iterator p = _factories.begin(); p != _factories.end(); ++p)
454
+ for(map<string, MetricsMapFactoryPtr>::const_iterator r = _factories.begin(); r != _factories.end(); ++r)
460
455
  {
461
- if(q->second->addOrUpdateMap(_properties, p->first, p->second, _logger))
456
+ if(q->second->addOrUpdateMap(_properties, r->first, r->second, _logger))
462
457
  {
463
- updatedMaps.insert(p->second);
458
+ updatedMaps.insert(r->second);
464
459
  }
465
460
  }
466
461
  }
@@ -1,11 +1,6 @@
1
- // **********************************************************************
2
1
  //
3
- // Copyright (c) 2003-2017 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 <Ice/MetricsObserverI.h>
11
6
 
@@ -1,11 +1,6 @@
1
- // **********************************************************************
2
1
  //
3
- // Copyright (c) 2003-2017 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
  //
11
6
  // The following is required on HP-UX in order to bring in
@@ -30,6 +25,11 @@
30
25
  #include <IceUtil/Random.h>
31
26
  #include <functional>
32
27
 
28
+ // TODO: fix this warning
29
+ #if defined(_MSC_VER)
30
+ # pragma warning(disable:4244) // 'argument': conversion from 'int' to 'u_short', possible loss of data
31
+ #endif
32
+
33
33
  #if defined(ICE_OS_UWP)
34
34
  # include <IceUtil/InputUtil.h>
35
35
  #elif defined(_WIN32)
@@ -46,12 +46,16 @@
46
46
  # include <sys/ioctl.h>
47
47
  #endif
48
48
 
49
- #if defined(__linux) || defined(__APPLE__) || defined(__FreeBSD__)
49
+ #if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__)
50
50
  # include <ifaddrs.h>
51
51
  #elif defined(__sun)
52
52
  # include <sys/sockio.h>
53
53
  #endif
54
54
 
55
+ #if defined(__GNUC__) && (__GNUC__ < 5)
56
+ # pragma GCC diagnostic ignored "-Wmissing-field-initializers"
57
+ #endif
58
+
55
59
  #if defined(_WIN32)
56
60
  # ifndef SIO_LOOPBACK_FAST_PATH
57
61
  # define SIO_LOOPBACK_FAST_PATH _WSAIOW(IOC_VENDOR,16)
@@ -104,37 +108,61 @@ IceInternal::getSystemErrno()
104
108
  namespace
105
109
  {
106
110
 
107
- #ifndef ICE_OS_UWP
108
- struct AddressIsIPv6 : public unary_function<Address, bool>
111
+ struct AddressCompare
109
112
  {
110
113
  public:
111
114
 
112
115
  bool
113
- operator()(const Address& ss) const
116
+ operator()(const Address& lhs, const Address& rhs) const
114
117
  {
115
- return ss.saStorage.ss_family == AF_INET6;
118
+ return compareAddress(lhs, rhs) < 0;
116
119
  }
117
120
  };
118
121
 
119
- struct RandomNumberGenerator : public std::unary_function<ptrdiff_t, ptrdiff_t>
122
+ #ifndef ICE_OS_UWP
123
+
124
+ # ifndef ICE_CPP11_COMPILER
125
+
126
+ struct AddressIsIPv6 : public unary_function<Address, bool>
120
127
  {
121
- ptrdiff_t operator()(ptrdiff_t d)
128
+ public:
129
+
130
+ bool
131
+ operator()(const Address& ss) const
122
132
  {
123
- return IceUtilInternal::random(static_cast<int>(d));
133
+ return ss.saStorage.ss_family == AF_INET6;
124
134
  }
125
135
  };
136
+ # endif
126
137
 
127
138
  void
128
139
  sortAddresses(vector<Address>& addrs, ProtocolSupport protocol, Ice::EndpointSelectionType selType, bool preferIPv6)
129
140
  {
130
141
  if(selType == Ice::ICE_ENUM(EndpointSelectionType, Random))
131
142
  {
132
- RandomNumberGenerator rng;
133
- random_shuffle(addrs.begin(), addrs.end(), rng);
143
+ IceUtilInternal::shuffle(addrs.begin(), addrs.end());
134
144
  }
135
145
 
136
146
  if(protocol == EnableBoth)
137
147
  {
148
+ #ifdef ICE_CPP11_COMPILER
149
+ if(preferIPv6)
150
+ {
151
+ stable_partition(addrs.begin(), addrs.end(),
152
+ [](const Address& ss)
153
+ {
154
+ return ss.saStorage.ss_family == AF_INET6;
155
+ });
156
+ }
157
+ else
158
+ {
159
+ stable_partition(addrs.begin(), addrs.end(),
160
+ [](const Address& ss)
161
+ {
162
+ return ss.saStorage.ss_family != AF_INET6;
163
+ });
164
+ }
165
+ #else
138
166
  if(preferIPv6)
139
167
  {
140
168
  stable_partition(addrs.begin(), addrs.end(), AddressIsIPv6());
@@ -143,6 +171,7 @@ sortAddresses(vector<Address>& addrs, ProtocolSupport protocol, Ice::EndpointSel
143
171
  {
144
172
  stable_partition(addrs.begin(), addrs.end(), not1(AddressIsIPv6()));
145
173
  }
174
+ #endif
146
175
  }
147
176
  }
148
177
 
@@ -153,9 +182,7 @@ setTcpNoDelay(SOCKET fd)
153
182
  if(setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, reinterpret_cast<char*>(&flag), int(sizeof(int))) == SOCKET_ERROR)
154
183
  {
155
184
  closeSocketNoThrow(fd);
156
- SocketException ex(__FILE__, __LINE__);
157
- ex.error = getSocketErrno();
158
- throw ex;
185
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
159
186
  }
160
187
  }
161
188
 
@@ -166,9 +193,7 @@ setKeepAlive(SOCKET fd)
166
193
  if(setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, reinterpret_cast<char*>(&flag), int(sizeof(int))) == SOCKET_ERROR)
167
194
  {
168
195
  closeSocketNoThrow(fd);
169
- SocketException ex(__FILE__, __LINE__);
170
- ex.error = getSocketErrno();
171
- throw ex;
196
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
172
197
  }
173
198
  }
174
199
  #endif
@@ -189,9 +214,7 @@ setTcpLoopbackFastPath(SOCKET fd)
189
214
  if(LastError != WSAEOPNOTSUPP)
190
215
  {
191
216
  closeSocketNoThrow(fd);
192
- SocketException ex(__FILE__, __LINE__);
193
- ex.error = getSocketErrno();
194
- throw ex;
217
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
195
218
  }
196
219
  }
197
220
  }
@@ -201,8 +224,6 @@ setTcpLoopbackFastPath(SOCKET fd)
201
224
  SOCKET
202
225
  createSocketImpl(bool udp, int)
203
226
  {
204
- SOCKET fd;
205
-
206
227
  if(udp)
207
228
  {
208
229
  return ref new DatagramSocket();
@@ -214,8 +235,6 @@ createSocketImpl(bool udp, int)
214
235
  socket->Control->NoDelay = true;
215
236
  return socket;
216
237
  }
217
-
218
- return fd;
219
238
  }
220
239
  #else
221
240
  SOCKET
@@ -233,9 +252,7 @@ createSocketImpl(bool udp, int family)
233
252
 
234
253
  if(fd == INVALID_SOCKET)
235
254
  {
236
- SocketException ex(__FILE__, __LINE__);
237
- ex.error = getSocketErrno();
238
- throw ex;
255
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
239
256
  }
240
257
 
241
258
  if(!udp)
@@ -262,7 +279,7 @@ createSocketImpl(bool udp, int family)
262
279
 
263
280
  #ifndef ICE_OS_UWP
264
281
  vector<Address>
265
- getLocalAddresses(ProtocolSupport protocol, bool includeLoopback)
282
+ getLocalAddresses(ProtocolSupport protocol, bool includeLoopback, bool singleAddressPerInterface)
266
283
  {
267
284
  vector<Address> result;
268
285
 
@@ -281,7 +298,7 @@ getLocalAddresses(ProtocolSupport protocol, bool includeLoopback)
281
298
  break;
282
299
  }
283
300
 
284
- DWORD size;
301
+ DWORD size = 0;
285
302
  DWORD rv = GetAdaptersAddresses(family, 0, ICE_NULLPTR, ICE_NULLPTR, &size);
286
303
  if(rv == ERROR_BUFFER_OVERFLOW)
287
304
  {
@@ -305,6 +322,10 @@ getLocalAddresses(ProtocolSupport protocol, bool includeLoopback)
305
322
  (includeLoopback || addr.saIn.sin_addr.s_addr != htonl(INADDR_LOOPBACK)))
306
323
  {
307
324
  result.push_back(addr);
325
+ if(singleAddressPerInterface)
326
+ {
327
+ break; // One address is enough for each interface.
328
+ }
308
329
  }
309
330
  }
310
331
  else if(addr.saStorage.ss_family == AF_INET6 && protocol != EnableIPv4)
@@ -313,6 +334,10 @@ getLocalAddresses(ProtocolSupport protocol, bool includeLoopback)
313
334
  (includeLoopback || !IN6_IS_ADDR_LOOPBACK(&addr.saIn6.sin6_addr)))
314
335
  {
315
336
  result.push_back(addr);
337
+ if(singleAddressPerInterface)
338
+ {
339
+ break; // One address is enough for each interface.
340
+ }
316
341
  }
317
342
  }
318
343
  }
@@ -321,16 +346,15 @@ getLocalAddresses(ProtocolSupport protocol, bool includeLoopback)
321
346
 
322
347
  free(adapter_addresses);
323
348
  }
324
- #elif defined(__linux) || defined(__APPLE__) || defined(__FreeBSD__)
349
+ #elif defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__)
325
350
  struct ifaddrs* ifap;
326
351
  if(::getifaddrs(&ifap) == SOCKET_ERROR)
327
352
  {
328
- SocketException ex(__FILE__, __LINE__);
329
- ex.error = getSocketErrno();
330
- throw ex;
353
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
331
354
  }
332
355
 
333
356
  struct ifaddrs* curr = ifap;
357
+ set<string> interfaces;
334
358
  while(curr != 0)
335
359
  {
336
360
  if(curr->ifa_addr && (includeLoopback || !(curr->ifa_flags & IFF_LOOPBACK)))
@@ -341,7 +365,11 @@ getLocalAddresses(ProtocolSupport protocol, bool includeLoopback)
341
365
  memcpy(&addr.saStorage, curr->ifa_addr, sizeof(sockaddr_in));
342
366
  if(addr.saIn.sin_addr.s_addr != 0)
343
367
  {
344
- result.push_back(addr);
368
+ if(!singleAddressPerInterface || interfaces.find(curr->ifa_name) == interfaces.end())
369
+ {
370
+ result.push_back(addr);
371
+ interfaces.insert(curr->ifa_name);
372
+ }
345
373
  }
346
374
  }
347
375
  else if(curr->ifa_addr->sa_family == AF_INET6 && protocol != EnableIPv4)
@@ -350,7 +378,11 @@ getLocalAddresses(ProtocolSupport protocol, bool includeLoopback)
350
378
  memcpy(&addr.saStorage, curr->ifa_addr, sizeof(sockaddr_in6));
351
379
  if(!IN6_IS_ADDR_UNSPECIFIED(&addr.saIn6.sin6_addr))
352
380
  {
353
- result.push_back(addr);
381
+ if(!singleAddressPerInterface || interfaces.find(curr->ifa_name) == interfaces.end())
382
+ {
383
+ result.push_back(addr);
384
+ interfaces.insert(curr->ifa_name);
385
+ }
354
386
  }
355
387
  }
356
388
  }
@@ -394,9 +426,7 @@ getLocalAddresses(ProtocolSupport protocol, bool includeLoopback)
394
426
  {
395
427
  free(ifc.ifc_buf);
396
428
  closeSocketNoThrow(fd);
397
- SocketException ex(__FILE__, __LINE__);
398
- ex.error = getSocketErrno();
399
- throw ex;
429
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
400
430
  }
401
431
  else if(ifc.ifc_len == old_ifc_len)
402
432
  {
@@ -417,54 +447,41 @@ getLocalAddresses(ProtocolSupport protocol, bool includeLoopback)
417
447
 
418
448
  numaddrs = ifc.ifc_len / static_cast<int>(sizeof(struct ifreq));
419
449
  struct ifreq* ifr = ifc.ifc_req;
420
- for(int i = 0; i < numaddrs; ++i)
450
+ set<string> interfaces;
451
+ for(int j = 0; j < numaddrs; ++j)
421
452
  {
422
- if(!(ifr[i].ifr_flags & IFF_LOOPBACK)) // Don't include loopback interface addresses
453
+ if(!(ifr[j].ifr_flags & IFF_LOOPBACK)) // Don't include loopback interface addresses
423
454
  {
424
455
  //
425
456
  // On Solaris the above Loopback check does not always work so we double
426
457
  // check the address below. Solaris also returns duplicate entries that need
427
458
  // to be filtered out.
428
459
  //
429
- if(ifr[i].ifr_addr.sa_family == AF_INET && protocol != EnableIPv6)
460
+ if(ifr[j].ifr_addr.sa_family == AF_INET && protocol != EnableIPv6)
430
461
  {
431
462
  Address addr;
432
- memcpy(&addr.saStorage, &ifr[i].ifr_addr, sizeof(sockaddr_in));
463
+ memcpy(&addr.saStorage, &ifr[j].ifr_addr, sizeof(sockaddr_in));
433
464
  if(addr.saIn.sin_addr.s_addr != 0 &&
434
465
  (includeLoopback || addr.saIn.sin_addr.s_addr != htonl(INADDR_LOOPBACK)))
435
466
  {
436
- unsigned int j;
437
- for(j = 0; j < result.size(); ++j)
438
- {
439
- if(compareAddress(addr, result[j]) == 0)
440
- {
441
- break;
442
- }
443
- }
444
- if(j == result.size())
467
+ if(!singleAddressPerInterface || interfaces.find(ifr[j].ifr_name) == interfaces.end())
445
468
  {
446
469
  result.push_back(addr);
470
+ interfaces.insert(ifr[j].ifr_name);
447
471
  }
448
472
  }
449
473
  }
450
- else if(ifr[i].ifr_addr.sa_family == AF_INET6 && protocol != EnableIPv4)
474
+ else if(ifr[j].ifr_addr.sa_family == AF_INET6 && protocol != EnableIPv4)
451
475
  {
452
476
  Address addr;
453
- memcpy(&addr.saStorage, &ifr[i].ifr_addr, sizeof(sockaddr_in6));
477
+ memcpy(&addr.saStorage, &ifr[j].ifr_addr, sizeof(sockaddr_in6));
454
478
  if(!IN6_IS_ADDR_UNSPECIFIED(&addr.saIn6.sin6_addr) &&
455
479
  (includeLoopback || !IN6_IS_ADDR_LOOPBACK(&addr.saIn6.sin6_addr)))
456
480
  {
457
- unsigned int j;
458
- for(j = 0; j < result.size(); ++j)
459
- {
460
- if(compareAddress(addr, result[j]) == 0)
461
- {
462
- break;
463
- }
464
- }
465
- if(j == result.size())
481
+ if(!singleAddressPerInterface || interfaces.find(ifr[j].ifr_name) == interfaces.end())
466
482
  {
467
483
  result.push_back(addr);
484
+ interfaces.insert(ifr[j].ifr_name);
468
485
  }
469
486
  }
470
487
  }
@@ -474,6 +491,20 @@ getLocalAddresses(ProtocolSupport protocol, bool includeLoopback)
474
491
  }
475
492
  #endif
476
493
 
494
+ //
495
+ // Remove potential duplicates from the result.
496
+ //
497
+ set<Address, AddressCompare> seen;
498
+ vector<Address> tmp;
499
+ tmp.swap(result);
500
+ for(vector<Address>::const_iterator p = tmp.begin(); p != tmp.end(); ++p)
501
+ {
502
+ if(seen.find(*p) == seen.end())
503
+ {
504
+ result.push_back(*p);
505
+ seen.insert(*p);
506
+ }
507
+ }
477
508
  return result;
478
509
  }
479
510
 
@@ -617,7 +648,7 @@ getInterfaceIndex(const string& intf)
617
648
  //
618
649
  if(isAddr)
619
650
  {
620
- # if defined(__linux) || defined(__APPLE__) || defined(__FreeBSD__)
651
+ # if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__)
621
652
  struct ifaddrs* ifap;
622
653
  if(::getifaddrs(&ifap) != SOCKET_ERROR)
623
654
  {
@@ -629,7 +660,7 @@ getInterfaceIndex(const string& intf)
629
660
  struct sockaddr_in6* ipv6Addr = reinterpret_cast<struct sockaddr_in6*>(curr->ifa_addr);
630
661
  if(memcmp(&addr, &ipv6Addr->sin6_addr, sizeof(in6_addr)) == 0)
631
662
  {
632
- index = if_nametoindex(curr->ifa_name);
663
+ index = static_cast<int>(if_nametoindex(curr->ifa_name));
633
664
  break;
634
665
  }
635
666
  }
@@ -694,7 +725,7 @@ getInterfaceIndex(const string& intf)
694
725
  struct sockaddr_in6* ipv6Addr = reinterpret_cast<struct sockaddr_in6*>(&ifr[i].ifr_addr);
695
726
  if(memcmp(&addr, &ipv6Addr->sin6_addr, sizeof(in6_addr)) == 0)
696
727
  {
697
- index = if_nametoindex(ifr[i].ifr_name);
728
+ index = static_cast<int>(if_nametoindex(ifr[i].ifr_name));
698
729
  break;
699
730
  }
700
731
  }
@@ -705,7 +736,7 @@ getInterfaceIndex(const string& intf)
705
736
  }
706
737
  else // Look for an interface with the given name.
707
738
  {
708
- index = if_nametoindex(name.c_str());
739
+ index = static_cast<int>(if_nametoindex(name.c_str()));
709
740
  }
710
741
  if(index <= 0)
711
742
  {
@@ -792,6 +823,35 @@ getAddressStorageSize(const Address& addr)
792
823
  return size;
793
824
  }
794
825
 
826
+ vector<Address>
827
+ getLoopbackAddresses(ProtocolSupport protocol, int port = 0)
828
+ {
829
+ vector<Address> result;
830
+
831
+ Address addr;
832
+ memset(&addr.saStorage, 0, sizeof(sockaddr_storage));
833
+
834
+ //
835
+ // We don't use getaddrinfo when host is empty as it's not portable (some old Linux
836
+ // versions don't support it).
837
+ //
838
+ if(protocol != EnableIPv4)
839
+ {
840
+ addr.saIn6.sin6_family = AF_INET6;
841
+ addr.saIn6.sin6_port = htons(port);
842
+ addr.saIn6.sin6_addr = in6addr_loopback;
843
+ result.push_back(addr);
844
+ }
845
+ if(protocol != EnableIPv6)
846
+ {
847
+ addr.saIn.sin_family = AF_INET;
848
+ addr.saIn.sin_port = htons(port);
849
+ addr.saIn.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
850
+ result.push_back(addr);
851
+ }
852
+ return result;
853
+ }
854
+
795
855
  #endif // #ifndef ICE_OS_UWP
796
856
 
797
857
  }
@@ -832,9 +892,7 @@ IceInternal::NativeInfo::completed(SocketOperation operation)
832
892
  {
833
893
  if(!PostQueuedCompletionStatus(_handle, 0, _key, getAsyncInfo(operation)))
834
894
  {
835
- Ice::SocketException ex(__FILE__, __LINE__);
836
- ex.error = GetLastError();
837
- throw ex;
895
+ throw Ice::SocketException(__FILE__, __LINE__, GetLastError());
838
896
  }
839
897
  }
840
898
 
@@ -844,9 +902,10 @@ void
844
902
  IceInternal::NativeInfo::queueAction(SocketOperation op, IAsyncAction^ action, bool connect)
845
903
  {
846
904
  AsyncInfo* asyncInfo = getAsyncInfo(op);
847
- if(checkIfErrorOrCompleted(op, action, connect))
905
+ if(checkIfErrorOrCompleted(op, action, action->Status, connect))
848
906
  {
849
907
  asyncInfo->count = 0;
908
+ asyncInfo->error = ERROR_SUCCESS;
850
909
  }
851
910
  else
852
911
  {
@@ -854,12 +913,13 @@ IceInternal::NativeInfo::queueAction(SocketOperation op, IAsyncAction^ action, b
854
913
  [=] (IAsyncAction^ info, Windows::Foundation::AsyncStatus status)
855
914
  {
856
915
  //
857
- // COMPILERFIX with VC141 using operator!= and operator== inside
916
+ // COMPILERFIX with v141 using operator!= and operator== inside
858
917
  // a lambda callback triggers a compiler bug, we move the code to
859
918
  // a seperate private method to workaround the issue.
860
919
  //
861
920
  this->queueActionCompleted(op, asyncInfo, info, status);
862
921
  });
922
+ asyncInfo->operation = action;
863
923
  }
864
924
  }
865
925
 
@@ -869,13 +929,13 @@ IceInternal::NativeInfo::queueActionCompleted(SocketOperation op, AsyncInfo* asy
869
929
  {
870
930
  if(status != Windows::Foundation::AsyncStatus::Completed)
871
931
  {
872
- asyncInfo->count = SOCKET_ERROR;
873
932
  asyncInfo->error = info->ErrorCode.Value;
874
933
  }
875
934
  else
876
935
  {
877
- asyncInfo->count = 0;
936
+ asyncInfo->error = ERROR_SUCCESS;
878
937
  }
938
+ asyncInfo->count = 0;
879
939
  completed(op);
880
940
  }
881
941
 
@@ -883,11 +943,22 @@ void
883
943
  IceInternal::NativeInfo::queueOperation(SocketOperation op, IAsyncOperation<unsigned int>^ operation)
884
944
  {
885
945
  AsyncInfo* info = getAsyncInfo(op);
886
- if(checkIfErrorOrCompleted(op, operation))
946
+ Windows::Foundation::AsyncStatus status = operation->Status;
947
+ if(status == Windows::Foundation::AsyncStatus::Completed)
887
948
  {
949
+ //
950
+ // NOTE: it's important to modify the count _before_ calling the completion handler
951
+ // since this might not always be called with the connection mutex but from a Windows
952
+ // thread pool thread if we chained multiple Async calls (GetGetOutputStreamAsync and
953
+ // StoreAsync for example, see the UDPTransceiver implementation). So we can't modify
954
+ // the AsyncInfo structure after calling the completed callback.
955
+ //
888
956
  info->count = static_cast<int>(operation->GetResults());
957
+ info->error = ERROR_SUCCESS;
958
+ _completedHandler(op);
959
+ return;
889
960
  }
890
- else
961
+ else if(!checkIfErrorOrCompleted(op, operation, status))
891
962
  {
892
963
  if(!info->completedHandler)
893
964
  {
@@ -895,7 +966,7 @@ IceInternal::NativeInfo::queueOperation(SocketOperation op, IAsyncOperation<unsi
895
966
  [=] (IAsyncOperation<unsigned int>^ operation, Windows::Foundation::AsyncStatus status)
896
967
  {
897
968
  //
898
- // COMPILERFIX with VC141 using operator!= and operator== inside
969
+ // COMPILERFIX with v141 using operator!= and operator== inside
899
970
  // a lambda callback triggers a compiler bug, we move the code to
900
971
  // a seperate private method to workaround the issue.
901
972
  //
@@ -903,6 +974,7 @@ IceInternal::NativeInfo::queueOperation(SocketOperation op, IAsyncOperation<unsi
903
974
  });
904
975
  }
905
976
  operation->Completed = info->completedHandler;
977
+ info->operation = operation;
906
978
  }
907
979
  }
908
980
 
@@ -913,12 +985,13 @@ IceInternal::NativeInfo::queueOperationCompleted(SocketOperation op, AsyncInfo*
913
985
  {
914
986
  if(status != Windows::Foundation::AsyncStatus::Completed)
915
987
  {
916
- info->count = SOCKET_ERROR;
988
+ info->count = 0;
917
989
  info->error = operation->ErrorCode.Value;
918
990
  }
919
991
  else
920
992
  {
921
993
  info->count = static_cast<int>(operation->GetResults());
994
+ info->error = ERROR_SUCCESS;
922
995
  }
923
996
  completed(op);
924
997
  }
@@ -937,7 +1010,7 @@ IceInternal::NativeInfo::completed(SocketOperation operation)
937
1010
  }
938
1011
 
939
1012
  bool
940
- IceInternal::NativeInfo::checkIfErrorOrCompleted(SocketOperation op, IAsyncInfo^ info, bool connect)
1013
+ IceInternal::NativeInfo::checkIfErrorOrCompleted(SocketOperation op, IAsyncInfo^ info, Windows::Foundation::AsyncStatus status, bool connect)
941
1014
  {
942
1015
  //
943
1016
  // NOTE: It's important to only check for info->Status once as it
@@ -948,7 +1021,6 @@ IceInternal::NativeInfo::checkIfErrorOrCompleted(SocketOperation op, IAsyncInfo^
948
1021
  // error. A canceled async status can occur if there's a timeout
949
1022
  // and the socket is closed.
950
1023
  //
951
- Windows::Foundation::AsyncStatus status = info->Status;
952
1024
  if(status == Windows::Foundation::AsyncStatus::Completed)
953
1025
  {
954
1026
  _completedHandler(op);
@@ -1059,10 +1131,7 @@ IceInternal::getAddresses(const string& host, int port, ProtocolSupport, Ice::En
1059
1131
  }
1060
1132
  catch(Platform::Exception^ pex)
1061
1133
  {
1062
- DNSException ex(__FILE__, __LINE__);
1063
- ex.error = (int)SocketError::GetStatus(pex->HResult);
1064
- ex.host = host;
1065
- throw ex;
1134
+ throw DNSException(__FILE__, __LINE__, (int)SocketError::GetStatus(pex->HResult), host);
1066
1135
  }
1067
1136
 
1068
1137
  }
@@ -1072,9 +1141,6 @@ IceInternal::getAddresses(const string& host, int port, ProtocolSupport protocol
1072
1141
  bool preferIPv6, bool canBlock)
1073
1142
  {
1074
1143
  vector<Address> result;
1075
- Address addr;
1076
-
1077
- memset(&addr.saStorage, 0, sizeof(sockaddr_storage));
1078
1144
 
1079
1145
  //
1080
1146
  // We don't use getaddrinfo when host is empty as it's not portable (some old Linux
@@ -1082,28 +1148,18 @@ IceInternal::getAddresses(const string& host, int port, ProtocolSupport protocol
1082
1148
  //
1083
1149
  if(host.empty())
1084
1150
  {
1085
- if(protocol != EnableIPv4)
1086
- {
1087
- addr.saIn6.sin6_family = AF_INET6;
1088
- addr.saIn6.sin6_port = htons(port);
1089
- addr.saIn6.sin6_addr = in6addr_loopback;
1090
- result.push_back(addr);
1091
- }
1092
- if(protocol != EnableIPv6)
1093
- {
1094
- addr.saIn.sin_family = AF_INET;
1095
- addr.saIn.sin_port = htons(port);
1096
- addr.saIn.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
1097
- result.push_back(addr);
1098
- }
1151
+ result = getLoopbackAddresses(protocol, port);
1099
1152
  sortAddresses(result, protocol, selType, preferIPv6);
1100
1153
  return result;
1101
1154
  }
1102
1155
 
1156
+ Address addr;
1157
+ memset(&addr.saStorage, 0, sizeof(sockaddr_storage));
1158
+
1103
1159
  struct addrinfo* info = 0;
1104
1160
  int retry = 5;
1105
1161
 
1106
- struct addrinfo hints = { 0 };
1162
+ struct addrinfo hints = {};
1107
1163
  if(protocol == EnableIPv4)
1108
1164
  {
1109
1165
  hints.ai_family = PF_INET;
@@ -1143,10 +1199,7 @@ IceInternal::getAddresses(const string& host, int port, ProtocolSupport protocol
1143
1199
  }
1144
1200
  else if(rs != 0)
1145
1201
  {
1146
- DNSException ex(__FILE__, __LINE__);
1147
- ex.error = rs;
1148
- ex.host = host;
1149
- throw ex;
1202
+ throw DNSException(__FILE__, __LINE__, rs, host);
1150
1203
  }
1151
1204
 
1152
1205
  for(struct addrinfo* p = info; p != ICE_NULLPTR; p = p->ai_next)
@@ -1180,9 +1233,7 @@ IceInternal::getAddresses(const string& host, int port, ProtocolSupport protocol
1180
1233
 
1181
1234
  if(result.empty())
1182
1235
  {
1183
- DNSException ex(__FILE__, __LINE__);
1184
- ex.host = host;
1185
- throw ex;
1236
+ throw DNSException(__FILE__, __LINE__, 0, host);
1186
1237
  }
1187
1238
  sortAddresses(result, protocol, selType, preferIPv6);
1188
1239
  return result;
@@ -1240,7 +1291,8 @@ IceInternal::getAddressForServer(const string& host, int port, ProtocolSupport p
1240
1291
  #endif
1241
1292
  return addr;
1242
1293
  }
1243
- vector<Address> addrs = getAddresses(host, port, protocol, Ice::ICE_ENUM(EndpointSelectionType, Ordered), preferIPv6, canBlock);
1294
+ vector<Address> addrs = getAddresses(host, port, protocol, Ice::ICE_ENUM(EndpointSelectionType, Ordered),
1295
+ preferIPv6, canBlock);
1244
1296
  return addrs.empty() ? Address() : addrs[0];
1245
1297
  }
1246
1298
 
@@ -1376,9 +1428,7 @@ IceInternal::createServerSocket(bool udp, const Address& addr, ProtocolSupport p
1376
1428
  }
1377
1429
  #endif
1378
1430
  closeSocketNoThrow(fd);
1379
- SocketException ex(__FILE__, __LINE__);
1380
- ex.error = getSocketErrno();
1381
- throw ex;
1431
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
1382
1432
  }
1383
1433
  }
1384
1434
  return fd;
@@ -1430,9 +1480,7 @@ IceInternal::closeSocket(SOCKET fd)
1430
1480
  int error = WSAGetLastError();
1431
1481
  if(closesocket(fd) == SOCKET_ERROR)
1432
1482
  {
1433
- SocketException ex(__FILE__, __LINE__);
1434
- ex.error = getSocketErrno();
1435
- throw ex;
1483
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
1436
1484
  }
1437
1485
  WSASetLastError(error);
1438
1486
  #else
@@ -1449,9 +1497,7 @@ IceInternal::closeSocket(SOCKET fd)
1449
1497
  if(close(fd) == SOCKET_ERROR)
1450
1498
  # endif
1451
1499
  {
1452
- SocketException ex(__FILE__, __LINE__);
1453
- ex.error = getSocketErrno();
1454
- throw ex;
1500
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
1455
1501
  }
1456
1502
  errno = error;
1457
1503
  #endif
@@ -1472,9 +1518,7 @@ IceInternal::fdToLocalAddress(SOCKET fd, Address& addr)
1472
1518
  socklen_t len = static_cast<socklen_t>(sizeof(sockaddr_storage));
1473
1519
  if(getsockname(fd, &addr.sa, &len) == SOCKET_ERROR)
1474
1520
  {
1475
- SocketException ex(__FILE__, __LINE__);
1476
- ex.error = getSocketErrno();
1477
- throw ex;
1521
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
1478
1522
  }
1479
1523
  #else
1480
1524
  StreamSocket^ stream = dynamic_cast<StreamSocket^>(fd);
@@ -1505,9 +1549,7 @@ IceInternal::fdToRemoteAddress(SOCKET fd, Address& addr)
1505
1549
  }
1506
1550
  else
1507
1551
  {
1508
- SocketException ex(__FILE__, __LINE__);
1509
- ex.error = getSocketErrno();
1510
- throw ex;
1552
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
1511
1553
  }
1512
1554
  }
1513
1555
 
@@ -1672,7 +1714,7 @@ IceInternal::getHostsForEndpointExpand(const string& host, ProtocolSupport proto
1672
1714
  hosts.push_back(wstringToString(h->CanonicalName->Data(), getProcessStringConverter()));
1673
1715
  }
1674
1716
  }
1675
- if(includeLoopback)
1717
+ if(hosts.empty() || includeLoopback)
1676
1718
  {
1677
1719
  if(protocolSupport != EnableIPv6)
1678
1720
  {
@@ -1688,9 +1730,24 @@ IceInternal::getHostsForEndpointExpand(const string& host, ProtocolSupport proto
1688
1730
  }
1689
1731
 
1690
1732
  vector<string>
1691
- IceInternal::getInterfacesForMulticast(const string& intf, ProtocolSupport protocolSupport)
1733
+ IceInternal::getInterfacesForMulticast(const string& intf, ProtocolSupport)
1692
1734
  {
1693
- vector<string> interfaces = getHostsForEndpointExpand(intf, protocolSupport, true);
1735
+ vector<string> interfaces;
1736
+ if(intf.empty() || intf == "0.0.0.0" || intf == "::" || intf == "0:0:0:0:0:0:0:0")
1737
+ {
1738
+ for(IIterator<HostName^>^ it = NetworkInformation::GetHostNames()->First(); it->HasCurrent; it->MoveNext())
1739
+ {
1740
+ HostName^ h = it->Current;
1741
+ if(h->IPInformation != nullptr && h->IPInformation->NetworkAdapter != nullptr)
1742
+ {
1743
+ string s = wstringToString(h->CanonicalName->Data(), getProcessStringConverter());
1744
+ if(find(interfaces.begin(), interfaces.end(), s) == interfaces.end())
1745
+ {
1746
+ interfaces.push_back(s);
1747
+ }
1748
+ }
1749
+ }
1750
+ }
1694
1751
  if(interfaces.empty())
1695
1752
  {
1696
1753
  interfaces.push_back(intf);
@@ -1705,7 +1762,7 @@ IceInternal::getHostsForEndpointExpand(const string& host, ProtocolSupport proto
1705
1762
  bool ipv4Wildcard = false;
1706
1763
  if(isWildcard(host, protocolSupport, ipv4Wildcard))
1707
1764
  {
1708
- vector<Address> addrs = getLocalAddresses(ipv4Wildcard ? EnableIPv4 : protocolSupport, includeLoopback);
1765
+ vector<Address> addrs = getLocalAddresses(ipv4Wildcard ? EnableIPv4 : protocolSupport, includeLoopback, false);
1709
1766
  for(vector<Address>::const_iterator p = addrs.begin(); p != addrs.end(); ++p)
1710
1767
  {
1711
1768
  //
@@ -1718,6 +1775,15 @@ IceInternal::getHostsForEndpointExpand(const string& host, ProtocolSupport proto
1718
1775
  hosts.push_back(inetAddrToString(*p));
1719
1776
  }
1720
1777
  }
1778
+ if(hosts.empty())
1779
+ {
1780
+ // Return loopback if no other local addresses are available.
1781
+ addrs = getLoopbackAddresses(protocolSupport);
1782
+ for(vector<Address>::const_iterator p = addrs.begin(); p != addrs.end(); ++p)
1783
+ {
1784
+ hosts.push_back(inetAddrToString(*p));
1785
+ }
1786
+ }
1721
1787
  }
1722
1788
  return hosts; // An empty host list indicates to just use the given host.
1723
1789
  }
@@ -1729,7 +1795,7 @@ IceInternal::getInterfacesForMulticast(const string& intf, ProtocolSupport proto
1729
1795
  bool ipv4Wildcard = false;
1730
1796
  if(isWildcard(intf, protocolSupport, ipv4Wildcard))
1731
1797
  {
1732
- vector<Address> addrs = getLocalAddresses(ipv4Wildcard ? EnableIPv4 : protocolSupport, true);
1798
+ vector<Address> addrs = getLocalAddresses(ipv4Wildcard ? EnableIPv4 : protocolSupport, true, true);
1733
1799
  for(vector<Address>::const_iterator p = addrs.begin(); p != addrs.end(); ++p)
1734
1800
  {
1735
1801
  interfaces.push_back(inetAddrToString(*p)); // We keep link local addresses for multicast
@@ -1755,7 +1821,8 @@ IceInternal::inetAddrToString(const Address& ss)
1755
1821
 
1756
1822
  char namebuf[1024];
1757
1823
  namebuf[0] = '\0';
1758
- getnameinfo(&ss.sa, size, namebuf, static_cast<socklen_t>(sizeof(namebuf)), 0, 0, NI_NUMERICHOST);
1824
+ getnameinfo(&ss.sa, static_cast<socklen_t>(size), namebuf, static_cast<socklen_t>(sizeof(namebuf)), 0, 0,
1825
+ NI_NUMERICHOST);
1759
1826
  return string(namebuf);
1760
1827
  #else
1761
1828
  if(ss.host == nullptr)
@@ -1790,7 +1857,7 @@ IceInternal::getPort(const Address& addr)
1790
1857
  return -1;
1791
1858
  }
1792
1859
  #else
1793
- IceUtil::Int64 port;
1860
+ IceUtil::Int64 port = 0;
1794
1861
  //
1795
1862
  // Don't need to use any string converter here as the port number use just ASCII characters.
1796
1863
  //
@@ -1958,9 +2025,7 @@ IceInternal::setBlock(SOCKET fd, bool block)
1958
2025
  if(ioctlsocket(fd, FIONBIO, &arg) == SOCKET_ERROR)
1959
2026
  {
1960
2027
  closeSocketNoThrow(fd);
1961
- SocketException ex(__FILE__, __LINE__);
1962
- ex.error = WSAGetLastError();
1963
- throw ex;
2028
+ throw SocketException(__FILE__, __LINE__, WSAGetLastError());
1964
2029
  }
1965
2030
  }
1966
2031
  else
@@ -1969,9 +2034,7 @@ IceInternal::setBlock(SOCKET fd, bool block)
1969
2034
  if(ioctlsocket(fd, FIONBIO, &arg) == SOCKET_ERROR)
1970
2035
  {
1971
2036
  closeSocketNoThrow(fd);
1972
- SocketException ex(__FILE__, __LINE__);
1973
- ex.error = WSAGetLastError();
1974
- throw ex;
2037
+ throw SocketException(__FILE__, __LINE__, WSAGetLastError());
1975
2038
  }
1976
2039
  }
1977
2040
  #else
@@ -1982,9 +2045,7 @@ IceInternal::setBlock(SOCKET fd, bool block)
1982
2045
  if(fcntl(fd, F_SETFL, flags) == SOCKET_ERROR)
1983
2046
  {
1984
2047
  closeSocketNoThrow(fd);
1985
- SocketException ex(__FILE__, __LINE__);
1986
- ex.error = errno;
1987
- throw ex;
2048
+ throw SocketException(__FILE__, __LINE__, errno);
1988
2049
  }
1989
2050
  }
1990
2051
  else
@@ -1994,9 +2055,7 @@ IceInternal::setBlock(SOCKET fd, bool block)
1994
2055
  if(fcntl(fd, F_SETFL, flags) == SOCKET_ERROR)
1995
2056
  {
1996
2057
  closeSocketNoThrow(fd);
1997
- SocketException ex(__FILE__, __LINE__);
1998
- ex.error = errno;
1999
- throw ex;
2058
+ throw SocketException(__FILE__, __LINE__, errno);
2000
2059
  }
2001
2060
  }
2002
2061
  #endif
@@ -2010,9 +2069,7 @@ IceInternal::setSendBufferSize(SOCKET fd, int sz)
2010
2069
  if(setsockopt(fd, SOL_SOCKET, SO_SNDBUF, reinterpret_cast<char*>(&sz), int(sizeof(int))) == SOCKET_ERROR)
2011
2070
  {
2012
2071
  closeSocketNoThrow(fd);
2013
- SocketException ex(__FILE__, __LINE__);
2014
- ex.error = getSocketErrno();
2015
- throw ex;
2072
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
2016
2073
  }
2017
2074
  #else
2018
2075
  StreamSocket^ stream = dynamic_cast<StreamSocket^>(fd);
@@ -2033,9 +2090,7 @@ IceInternal::getSendBufferSize(SOCKET fd)
2033
2090
  static_cast<unsigned int>(len) != sizeof(sz))
2034
2091
  {
2035
2092
  closeSocketNoThrow(fd);
2036
- SocketException ex(__FILE__, __LINE__);
2037
- ex.error = getSocketErrno();
2038
- throw ex;
2093
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
2039
2094
  }
2040
2095
  return sz;
2041
2096
  #else
@@ -2060,9 +2115,7 @@ IceInternal::setRecvBufferSize(SOCKET fd, int sz)
2060
2115
  if(setsockopt(fd, SOL_SOCKET, SO_RCVBUF, reinterpret_cast<char*>(&sz), int(sizeof(int))) == SOCKET_ERROR)
2061
2116
  {
2062
2117
  closeSocketNoThrow(fd);
2063
- SocketException ex(__FILE__, __LINE__);
2064
- ex.error = getSocketErrno();
2065
- throw ex;
2118
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
2066
2119
  }
2067
2120
  }
2068
2121
  #endif
@@ -2077,9 +2130,7 @@ IceInternal::getRecvBufferSize(SOCKET fd)
2077
2130
  static_cast<unsigned int>(len) != sizeof(sz))
2078
2131
  {
2079
2132
  closeSocketNoThrow(fd);
2080
- SocketException ex(__FILE__, __LINE__);
2081
- ex.error = getSocketErrno();
2082
- throw ex;
2133
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
2083
2134
  }
2084
2135
  return sz;
2085
2136
  #else
@@ -2111,16 +2162,14 @@ IceInternal::setMcastGroup(SOCKET fd, const Address& group, const string& intf)
2111
2162
  indexes.insert(index);
2112
2163
  struct ipv6_mreq mreq;
2113
2164
  mreq.ipv6mr_multiaddr = group.saIn6.sin6_addr;
2114
- mreq.ipv6mr_interface = index;
2165
+ mreq.ipv6mr_interface = static_cast<unsigned int>(index);
2115
2166
  rc = setsockopt(fd, IPPROTO_IPV6, IPV6_JOIN_GROUP, reinterpret_cast<char*>(&mreq), int(sizeof(mreq)));
2116
2167
  }
2117
2168
  }
2118
2169
  if(rc == SOCKET_ERROR)
2119
2170
  {
2120
2171
  closeSocketNoThrow(fd);
2121
- SocketException ex(__FILE__, __LINE__);
2122
- ex.error = getSocketErrno();
2123
- throw ex;
2172
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
2124
2173
  }
2125
2174
  }
2126
2175
  }
@@ -2190,9 +2239,7 @@ IceInternal::setMcastInterface(SOCKET fd, const string& intf, const Address& add
2190
2239
  if(rc == SOCKET_ERROR)
2191
2240
  {
2192
2241
  closeSocketNoThrow(fd);
2193
- SocketException ex(__FILE__, __LINE__);
2194
- ex.error = getSocketErrno();
2195
- throw ex;
2242
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
2196
2243
  }
2197
2244
  }
2198
2245
  #endif
@@ -2218,9 +2265,7 @@ IceInternal::setMcastTtl(SOCKET fd, int ttl, const Address& addr)
2218
2265
  if(rc == SOCKET_ERROR)
2219
2266
  {
2220
2267
  closeSocketNoThrow(fd);
2221
- SocketException ex(__FILE__, __LINE__);
2222
- ex.error = getSocketErrno();
2223
- throw ex;
2268
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
2224
2269
  }
2225
2270
  }
2226
2271
  #endif
@@ -2238,9 +2283,7 @@ IceInternal::setReuseAddress(SOCKET fd, bool reuse)
2238
2283
  if(setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, reinterpret_cast<char*>(&flag), int(sizeof(int))) == SOCKET_ERROR)
2239
2284
  {
2240
2285
  closeSocketNoThrow(fd);
2241
- SocketException ex(__FILE__, __LINE__);
2242
- ex.error = getSocketErrno();
2243
- throw ex;
2286
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
2244
2287
  }
2245
2288
  }
2246
2289
  #endif
@@ -2362,12 +2405,10 @@ IceInternal::doBind(SOCKET fd, const Address& addr, const string&)
2362
2405
  int size = getAddressStorageSize(addr);
2363
2406
  assert(size != 0);
2364
2407
 
2365
- if(::bind(fd, &addr.sa, size) == SOCKET_ERROR)
2408
+ if(::bind(fd, &addr.sa, static_cast<socklen_t>(size)) == SOCKET_ERROR)
2366
2409
  {
2367
2410
  closeSocketNoThrow(fd);
2368
- SocketException ex(__FILE__, __LINE__);
2369
- ex.error = getSocketErrno();
2370
- throw ex;
2411
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
2371
2412
  }
2372
2413
 
2373
2414
  Address local;
@@ -2570,9 +2611,7 @@ repeatListen:
2570
2611
  }
2571
2612
 
2572
2613
  closeSocketNoThrow(fd);
2573
- SocketException ex(__FILE__, __LINE__);
2574
- ex.error = getSocketErrno();
2575
- throw ex;
2614
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
2576
2615
  }
2577
2616
  }
2578
2617
 
@@ -2588,7 +2627,7 @@ repeatConnect:
2588
2627
  int size = getAddressStorageSize(addr);
2589
2628
  assert(size != 0);
2590
2629
 
2591
- if(::connect(fd, &addr.sa, size) == SOCKET_ERROR)
2630
+ if(::connect(fd, &addr.sa, static_cast<socklen_t>(size)) == SOCKET_ERROR)
2592
2631
  {
2593
2632
  if(interrupted())
2594
2633
  {
@@ -2603,25 +2642,19 @@ repeatConnect:
2603
2642
  closeSocketNoThrow(fd);
2604
2643
  if(connectionRefused())
2605
2644
  {
2606
- ConnectionRefusedException ex(__FILE__, __LINE__);
2607
- ex.error = getSocketErrno();
2608
- throw ex;
2645
+ throw ConnectionRefusedException(__FILE__, __LINE__, getSocketErrno());
2609
2646
  }
2610
2647
  else if(connectFailed())
2611
2648
  {
2612
- ConnectFailedException ex(__FILE__, __LINE__);
2613
- ex.error = getSocketErrno();
2614
- throw ex;
2649
+ throw ConnectFailedException(__FILE__, __LINE__, getSocketErrno());
2615
2650
  }
2616
2651
  else
2617
2652
  {
2618
- SocketException ex(__FILE__, __LINE__);
2619
- ex.error = getSocketErrno();
2620
- throw ex;
2653
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
2621
2654
  }
2622
2655
  }
2623
2656
 
2624
- #if defined(__linux)
2657
+ #if defined(__linux__)
2625
2658
  //
2626
2659
  // Prevent self connect (self connect happens on Linux when a client tries to connect to
2627
2660
  // a server which was just deactivated if the client socket re-uses the same ephemeral
@@ -2633,9 +2666,7 @@ repeatConnect:
2633
2666
  fdToLocalAddress(fd, localAddr);
2634
2667
  if(compareAddress(addr, localAddr) == 0)
2635
2668
  {
2636
- ConnectionRefusedException ex(__FILE__, __LINE__);
2637
- ex.error = 0; // No appropriate errno
2638
- throw ex;
2669
+ throw ConnectionRefusedException(__FILE__, __LINE__, 0); // No appropriate errno
2639
2670
  }
2640
2671
  }
2641
2672
  catch(const LocalException&)
@@ -2668,9 +2699,7 @@ IceInternal::doFinishConnect(SOCKET fd)
2668
2699
  socklen_t len = static_cast<socklen_t>(sizeof(int));
2669
2700
  if(getsockopt(fd, SOL_SOCKET, SO_ERROR, reinterpret_cast<char*>(&val), &len) == SOCKET_ERROR)
2670
2701
  {
2671
- SocketException ex(__FILE__, __LINE__);
2672
- ex.error = getSocketErrno();
2673
- throw ex;
2702
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
2674
2703
  }
2675
2704
 
2676
2705
  if(val > 0)
@@ -2682,25 +2711,19 @@ IceInternal::doFinishConnect(SOCKET fd)
2682
2711
  #endif
2683
2712
  if(connectionRefused())
2684
2713
  {
2685
- ConnectionRefusedException ex(__FILE__, __LINE__);
2686
- ex.error = getSocketErrno();
2687
- throw ex;
2714
+ throw ConnectionRefusedException(__FILE__, __LINE__, getSocketErrno());
2688
2715
  }
2689
2716
  else if(connectFailed())
2690
2717
  {
2691
- ConnectFailedException ex(__FILE__, __LINE__);
2692
- ex.error = getSocketErrno();
2693
- throw ex;
2718
+ throw ConnectFailedException(__FILE__, __LINE__, getSocketErrno());
2694
2719
  }
2695
2720
  else
2696
2721
  {
2697
- SocketException ex(__FILE__, __LINE__);
2698
- ex.error = getSocketErrno();
2699
- throw ex;
2722
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
2700
2723
  }
2701
2724
  }
2702
2725
 
2703
- #if defined(__linux)
2726
+ #if defined(__linux__)
2704
2727
  //
2705
2728
  // Prevent self connect (self connect happens on Linux when a client tries to connect to
2706
2729
  // a server which was just deactivated if the client socket re-uses the same ephemeral
@@ -2711,9 +2734,7 @@ IceInternal::doFinishConnect(SOCKET fd)
2711
2734
  Address remoteAddr;
2712
2735
  if(fdToRemoteAddress(fd, remoteAddr) && compareAddress(remoteAddr, localAddr) == 0)
2713
2736
  {
2714
- ConnectionRefusedException ex(__FILE__, __LINE__);
2715
- ex.error = 0; // No appropriate errno
2716
- throw ex;
2737
+ throw ConnectionRefusedException(__FILE__, __LINE__, 0); // No appropriate errno
2717
2738
  }
2718
2739
  #endif
2719
2740
  }
@@ -2735,9 +2756,7 @@ repeatAccept:
2735
2756
  goto repeatAccept;
2736
2757
  }
2737
2758
 
2738
- SocketException ex(__FILE__, __LINE__);
2739
- ex.error = getSocketErrno();
2740
- throw ex;
2759
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
2741
2760
  }
2742
2761
 
2743
2762
  setTcpNoDelay(ret);
@@ -2818,9 +2837,7 @@ IceInternal::createPipe(SOCKET fds[2])
2818
2837
 
2819
2838
  if(::pipe(fds) != 0)
2820
2839
  {
2821
- SyscallException ex(__FILE__, __LINE__);
2822
- ex.error = getSystemErrno();
2823
- throw ex;
2840
+ throw SyscallException(__FILE__, __LINE__, getSocketErrno());
2824
2841
  }
2825
2842
 
2826
2843
  try
@@ -2855,16 +2872,12 @@ IceInternal::checkConnectErrorCode(const char* file, int line, HRESULT herr)
2855
2872
  {
2856
2873
  if(herr == E_ACCESSDENIED)
2857
2874
  {
2858
- SocketException ex(file, line);
2859
- ex.error = static_cast<int>(herr);
2860
- throw ex;
2875
+ throw SocketException(file, line, static_cast<int>(herr));
2861
2876
  }
2862
2877
  SocketErrorStatus error = SocketError::GetStatus(herr);
2863
2878
  if(error == SocketErrorStatus::ConnectionRefused)
2864
2879
  {
2865
- ConnectionRefusedException ex(file, line);
2866
- ex.error = static_cast<int>(error);
2867
- throw ex;
2880
+ throw ConnectionRefusedException(file, line, static_cast<int>(error));
2868
2881
  }
2869
2882
  else if(error == SocketErrorStatus::NetworkDroppedConnectionOnReset ||
2870
2883
  error == SocketErrorStatus::ConnectionTimedOut ||
@@ -2873,21 +2886,15 @@ IceInternal::checkConnectErrorCode(const char* file, int line, HRESULT herr)
2873
2886
  error == SocketErrorStatus::ConnectionResetByPeer ||
2874
2887
  error == SocketErrorStatus::SoftwareCausedConnectionAbort)
2875
2888
  {
2876
- ConnectFailedException ex(file, line);
2877
- ex.error = static_cast<int>(error);
2878
- throw ex;
2889
+ throw ConnectFailedException(file, line, static_cast<int>(error));
2879
2890
  }
2880
2891
  else if(error == SocketErrorStatus::HostNotFound)
2881
2892
  {
2882
- DNSException ex(file, line);
2883
- ex.error = static_cast<int>(error);
2884
- throw ex;
2893
+ throw DNSException(file, line, static_cast<int>(error), "");
2885
2894
  }
2886
2895
  else
2887
2896
  {
2888
- SocketException ex(file, line);
2889
- ex.error = static_cast<int>(error);
2890
- throw ex;
2897
+ throw SocketException(file, line, static_cast<int>(error));
2891
2898
  }
2892
2899
  }
2893
2900
 
@@ -2896,30 +2903,22 @@ IceInternal::checkErrorCode(const char* file, int line, HRESULT herr)
2896
2903
  {
2897
2904
  if(herr == E_ACCESSDENIED)
2898
2905
  {
2899
- SocketException ex(file, line);
2900
- ex.error = static_cast<int>(herr);
2901
- throw ex;
2906
+ throw SocketException(file, line, static_cast<int>(herr));
2902
2907
  }
2903
2908
  SocketErrorStatus error = SocketError::GetStatus(herr);
2904
2909
  if(error == SocketErrorStatus::NetworkDroppedConnectionOnReset ||
2905
2910
  error == SocketErrorStatus::SoftwareCausedConnectionAbort ||
2906
2911
  error == SocketErrorStatus::ConnectionResetByPeer)
2907
2912
  {
2908
- ConnectionLostException ex(file, line);
2909
- ex.error = static_cast<int>(error);
2910
- throw ex;
2913
+ throw ConnectionLostException(file, line, static_cast<int>(error));
2911
2914
  }
2912
2915
  else if(error == SocketErrorStatus::HostNotFound)
2913
2916
  {
2914
- DNSException ex(file, line);
2915
- ex.error = static_cast<int>(error);
2916
- throw ex;
2917
+ throw DNSException(file, line, static_cast<int>(error), "");
2917
2918
  }
2918
2919
  else
2919
2920
  {
2920
- SocketException ex(file, line);
2921
- ex.error = static_cast<int>(error);
2922
- throw ex;
2921
+ throw SocketException(file, line, static_cast<int>(error));
2923
2922
  }
2924
2923
  }
2925
2924
 
@@ -2989,9 +2988,7 @@ IceInternal::doConnectAsync(SOCKET fd, const Address& addr, const Address& sourc
2989
2988
 
2990
2989
  if(::bind(fd, &bindAddr.sa, size) == SOCKET_ERROR)
2991
2990
  {
2992
- SocketException ex(__FILE__, __LINE__);
2993
- ex.error = getSocketErrno();
2994
- throw ex;
2991
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
2995
2992
  }
2996
2993
 
2997
2994
  LPFN_CONNECTEX ConnectEx = ICE_NULLPTR; // a pointer to the 'ConnectEx()' function
@@ -3007,9 +3004,7 @@ IceInternal::doConnectAsync(SOCKET fd, const Address& addr, const Address& sourc
3007
3004
  ICE_NULLPTR,
3008
3005
  ICE_NULLPTR) == SOCKET_ERROR)
3009
3006
  {
3010
- SocketException ex(__FILE__, __LINE__);
3011
- ex.error = getSocketErrno();
3012
- throw ex;
3007
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
3013
3008
  }
3014
3009
 
3015
3010
  if(!ConnectEx(fd, &addr.sa, size, 0, 0, 0, &info))
@@ -3018,21 +3013,15 @@ IceInternal::doConnectAsync(SOCKET fd, const Address& addr, const Address& sourc
3018
3013
  {
3019
3014
  if(connectionRefused())
3020
3015
  {
3021
- ConnectionRefusedException ex(__FILE__, __LINE__);
3022
- ex.error = getSocketErrno();
3023
- throw ex;
3016
+ throw ConnectionRefusedException(__FILE__, __LINE__, getSocketErrno());
3024
3017
  }
3025
3018
  else if(connectFailed())
3026
3019
  {
3027
- ConnectFailedException ex(__FILE__, __LINE__);
3028
- ex.error = getSocketErrno();
3029
- throw ex;
3020
+ throw ConnectFailedException(__FILE__, __LINE__, getSocketErrno());
3030
3021
  }
3031
3022
  else
3032
3023
  {
3033
- SocketException ex(__FILE__, __LINE__);
3034
- ex.error = getSocketErrno();
3035
- throw ex;
3024
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
3036
3025
  }
3037
3026
  }
3038
3027
  }
@@ -3046,34 +3035,26 @@ IceInternal::doFinishConnectAsync(SOCKET fd, AsyncInfo& info)
3046
3035
  // failure to connect. The socket isn't closed by this method.
3047
3036
  //
3048
3037
 
3049
- if(static_cast<int>(info.count) == SOCKET_ERROR)
3038
+ if(info.error != ERROR_SUCCESS)
3050
3039
  {
3051
3040
  WSASetLastError(info.error);
3052
3041
  if(connectionRefused())
3053
3042
  {
3054
- ConnectionRefusedException ex(__FILE__, __LINE__);
3055
- ex.error = getSocketErrno();
3056
- throw ex;
3043
+ throw ConnectionRefusedException(__FILE__, __LINE__, getSocketErrno());
3057
3044
  }
3058
3045
  else if(connectFailed())
3059
3046
  {
3060
- ConnectFailedException ex(__FILE__, __LINE__);
3061
- ex.error = getSocketErrno();
3062
- throw ex;
3047
+ throw ConnectFailedException(__FILE__, __LINE__, getSocketErrno());
3063
3048
  }
3064
3049
  else
3065
3050
  {
3066
- SocketException ex(__FILE__, __LINE__);
3067
- ex.error = getSocketErrno();
3068
- throw ex;
3051
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
3069
3052
  }
3070
3053
  }
3071
3054
 
3072
3055
  if(setsockopt(fd, SOL_SOCKET, SO_UPDATE_CONNECT_CONTEXT, ICE_NULLPTR, 0) == SOCKET_ERROR)
3073
3056
  {
3074
- SocketException ex(__FILE__, __LINE__);
3075
- ex.error = getSocketErrno();
3076
- throw ex;
3057
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
3077
3058
  }
3078
3059
  }
3079
3060
  #endif