zeroc-ice 3.7.9.1 → 3.7.11

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 (994) hide show
  1. checksums.yaml +4 -4
  2. data/dist/IceRuby/Connection.cpp +536 -0
  3. data/dist/IceRuby/Endpoint.cpp +344 -0
  4. data/dist/IceRuby/ImplicitContext.cpp +148 -0
  5. data/dist/IceRuby/Logger.cpp +151 -0
  6. data/dist/IceRuby/Operation.cpp +665 -0
  7. data/dist/IceRuby/Properties.cpp +369 -0
  8. data/dist/IceRuby/Types.cpp +3336 -0
  9. data/dist/IceRuby/Types.h +604 -0
  10. data/dist/IceRuby/ValueFactoryManager.cpp +445 -0
  11. data/dist/ice/cpp/include/Ice/Config.h +76 -0
  12. data/dist/ice/cpp/include/Ice/ConsoleUtil.h +23 -0
  13. data/dist/ice/cpp/include/Ice/ExceptionHelpers.h +74 -0
  14. data/dist/ice/cpp/include/Ice/Ice.h +55 -0
  15. data/dist/ice/cpp/include/Ice/Initialize.h +957 -0
  16. data/dist/ice/cpp/include/Ice/MetricsObserverI.h +669 -0
  17. data/dist/ice/cpp/include/Ice/OutgoingAsync.h +868 -0
  18. data/dist/ice/cpp/include/Ice/Proxy.h +5171 -0
  19. data/dist/ice/cpp/include/Ice/SHA1.h +40 -0
  20. data/dist/ice/cpp/include/Ice/UserExceptionFactory.h +90 -0
  21. data/dist/ice/cpp/include/IceDiscovery/IceDiscovery.h +1889 -0
  22. data/dist/ice/cpp/include/IceLocatorDiscovery/IceLocatorDiscovery.h +1197 -0
  23. data/dist/ice/cpp/include/IceSSL/IceSSL.h +24 -0
  24. data/dist/ice/cpp/include/IceUtil/Cond.h +317 -0
  25. data/dist/ice/cpp/include/IceUtil/Config.h +392 -0
  26. data/dist/ice/cpp/include/IceUtil/ConsoleUtil.h +92 -0
  27. data/dist/ice/cpp/include/IceUtil/CtrlCHandler.h +96 -0
  28. data/dist/ice/cpp/include/IceUtil/FileUtil.h +140 -0
  29. data/dist/ice/cpp/include/IceUtil/IceUtil.h +40 -0
  30. data/dist/ice/cpp/include/IceUtil/InputUtil.h +42 -0
  31. data/dist/ice/cpp/include/IceUtil/Mutex.h +349 -0
  32. data/dist/ice/cpp/include/IceUtil/ResourceConfig.h +37 -0
  33. data/dist/ice/cpp/include/IceUtil/Thread.h +160 -0
  34. data/dist/ice/cpp/include/IceUtil/Timer.h +153 -0
  35. data/dist/ice/cpp/include/generated/Glacier2/Metrics.h +475 -0
  36. data/dist/ice/cpp/include/generated/Glacier2/PermissionsVerifier.h +1430 -0
  37. data/dist/ice/cpp/include/generated/Glacier2/PermissionsVerifierF.h +147 -0
  38. data/dist/ice/cpp/include/generated/Glacier2/Router.h +3260 -0
  39. data/dist/ice/cpp/include/generated/Glacier2/RouterF.h +125 -0
  40. data/dist/ice/cpp/include/generated/Glacier2/SSLInfo.h +223 -0
  41. data/dist/ice/cpp/include/generated/Glacier2/Session.h +5894 -0
  42. data/dist/ice/cpp/include/generated/Ice/BuiltinSequences.h +170 -0
  43. data/dist/ice/cpp/include/generated/Ice/Communicator.h +1162 -0
  44. data/dist/ice/cpp/include/generated/Ice/CommunicatorF.h +101 -0
  45. data/dist/ice/cpp/include/generated/Ice/Connection.h +1703 -0
  46. data/dist/ice/cpp/include/generated/Ice/ConnectionF.h +119 -0
  47. data/dist/ice/cpp/include/generated/Ice/Current.h +322 -0
  48. data/dist/ice/cpp/include/generated/Ice/Endpoint.h +979 -0
  49. data/dist/ice/cpp/include/generated/Ice/EndpointF.h +166 -0
  50. data/dist/ice/cpp/include/generated/Ice/EndpointTypes.h +118 -0
  51. data/dist/ice/cpp/include/generated/Ice/FacetMap.h +80 -0
  52. data/dist/ice/cpp/include/generated/Ice/Identity.h +264 -0
  53. data/dist/ice/cpp/include/generated/Ice/ImplicitContext.h +284 -0
  54. data/dist/ice/cpp/include/generated/Ice/ImplicitContextF.h +101 -0
  55. data/dist/ice/cpp/include/generated/Ice/Instrumentation.h +1203 -0
  56. data/dist/ice/cpp/include/generated/Ice/InstrumentationF.h +128 -0
  57. data/dist/ice/cpp/include/generated/Ice/LocalException.h +7437 -0
  58. data/dist/ice/cpp/include/generated/Ice/Locator.h +3898 -0
  59. data/dist/ice/cpp/include/generated/Ice/LocatorF.h +147 -0
  60. data/dist/ice/cpp/include/generated/Ice/Logger.h +237 -0
  61. data/dist/ice/cpp/include/generated/Ice/LoggerF.h +101 -0
  62. data/dist/ice/cpp/include/generated/Ice/Metrics.h +4769 -0
  63. data/dist/ice/cpp/include/generated/Ice/ObjectAdapter.h +1181 -0
  64. data/dist/ice/cpp/include/generated/Ice/ObjectAdapterF.h +101 -0
  65. data/dist/ice/cpp/include/generated/Ice/ObjectFactory.h +203 -0
  66. data/dist/ice/cpp/include/generated/Ice/Plugin.h +318 -0
  67. data/dist/ice/cpp/include/generated/Ice/PluginF.h +110 -0
  68. data/dist/ice/cpp/include/generated/Ice/Process.h +977 -0
  69. data/dist/ice/cpp/include/generated/Ice/ProcessF.h +125 -0
  70. data/dist/ice/cpp/include/generated/Ice/Properties.h +452 -0
  71. data/dist/ice/cpp/include/generated/Ice/PropertiesAdmin.h +1366 -0
  72. data/dist/ice/cpp/include/generated/Ice/PropertiesF.h +134 -0
  73. data/dist/ice/cpp/include/generated/Ice/RemoteLogger.h +2707 -0
  74. data/dist/ice/cpp/include/generated/Ice/Router.h +1850 -0
  75. data/dist/ice/cpp/include/generated/Ice/RouterF.h +125 -0
  76. data/dist/ice/cpp/include/generated/Ice/ServantLocator.h +305 -0
  77. data/dist/ice/cpp/include/generated/Ice/ServantLocatorF.h +101 -0
  78. data/dist/ice/cpp/include/generated/Ice/SliceChecksumDict.h +84 -0
  79. data/dist/ice/cpp/include/generated/Ice/ValueFactory.h +330 -0
  80. data/dist/ice/cpp/include/generated/Ice/Version.h +357 -0
  81. data/dist/ice/cpp/include/generated/IceBox/IceBox.h +3269 -0
  82. data/dist/ice/cpp/include/generated/IceGrid/Admin.h +33773 -0
  83. data/dist/ice/cpp/include/generated/IceGrid/Descriptor.h +5254 -0
  84. data/dist/ice/cpp/include/generated/IceGrid/Exception.h +2834 -0
  85. data/dist/ice/cpp/include/generated/IceGrid/FileParser.h +824 -0
  86. data/dist/ice/cpp/include/generated/IceGrid/PluginFacade.h +635 -0
  87. data/dist/ice/cpp/include/generated/IceGrid/Registry.h +5089 -0
  88. data/dist/ice/cpp/include/generated/IceGrid/Session.h +2240 -0
  89. data/dist/ice/cpp/include/generated/IceGrid/UserAccountMapper.h +800 -0
  90. data/dist/ice/cpp/include/generated/IcePatch2/FileInfo.h +325 -0
  91. data/dist/ice/cpp/include/generated/IcePatch2/FileServer.h +2891 -0
  92. data/dist/ice/cpp/include/generated/IceSSL/ConnectionInfo.h +228 -0
  93. data/dist/ice/cpp/include/generated/IceSSL/ConnectionInfoF.h +101 -0
  94. data/dist/ice/cpp/include/generated/IceSSL/EndpointInfo.h +186 -0
  95. data/dist/ice/cpp/include/generated/IceStorm/IceStorm.h +6627 -0
  96. data/dist/ice/cpp/include/generated/IceStorm/Metrics.h +665 -0
  97. data/dist/ice/cpp/src/Ice/Acceptor.h +37 -0
  98. data/dist/ice/cpp/src/Ice/Application.cpp +661 -0
  99. data/dist/ice/cpp/src/Ice/ConnectionFactory.cpp +1972 -0
  100. data/dist/ice/cpp/src/Ice/ConnectionFactory.h +264 -0
  101. data/dist/ice/cpp/src/Ice/ConnectionI.cpp +3670 -0
  102. data/dist/ice/cpp/src/Ice/ConnectionI.h +389 -0
  103. data/dist/ice/cpp/src/Ice/CountDownLatch.cpp +171 -0
  104. data/dist/ice/cpp/src/Ice/DLLMain.cpp +50 -0
  105. data/dist/ice/cpp/src/Ice/DefaultsAndOverrides.cpp +159 -0
  106. data/dist/ice/cpp/src/Ice/DynamicLibrary.cpp +284 -0
  107. data/dist/ice/cpp/src/Ice/EndpointFactory.cpp +189 -0
  108. data/dist/ice/cpp/src/Ice/EndpointI.cpp +98 -0
  109. data/dist/ice/cpp/src/Ice/EventHandler.cpp +32 -0
  110. data/dist/ice/cpp/src/Ice/EventHandler.h +81 -0
  111. data/dist/ice/cpp/src/Ice/Exception.cpp +818 -0
  112. data/dist/ice/cpp/src/Ice/IPEndpointI.cpp +710 -0
  113. data/dist/ice/cpp/src/Ice/IPEndpointI.h +152 -0
  114. data/dist/ice/cpp/src/Ice/InputStream.cpp +2741 -0
  115. data/dist/ice/cpp/src/Ice/Instance.cpp +1967 -0
  116. data/dist/ice/cpp/src/Ice/LoggerI.cpp +259 -0
  117. data/dist/ice/cpp/src/Ice/MetricsAdminI.cpp +694 -0
  118. data/dist/ice/cpp/src/Ice/Network.cpp +2249 -0
  119. data/dist/ice/cpp/src/Ice/Network.h +289 -0
  120. data/dist/ice/cpp/src/Ice/NetworkF.h +19 -0
  121. data/dist/ice/cpp/src/Ice/NetworkProxy.cpp +311 -0
  122. data/dist/ice/cpp/src/Ice/ObjectAdapterI.cpp +1530 -0
  123. data/dist/ice/cpp/src/Ice/OutgoingAsync.cpp +1322 -0
  124. data/dist/ice/cpp/src/Ice/PluginManagerI.cpp +503 -0
  125. data/dist/ice/cpp/src/Ice/PropertiesI.cpp +739 -0
  126. data/dist/ice/cpp/src/Ice/PropertyNames.cpp +1428 -0
  127. data/dist/ice/cpp/src/Ice/PropertyNames.h +78 -0
  128. data/dist/ice/cpp/src/Ice/Proxy.cpp +1604 -0
  129. data/dist/ice/cpp/src/Ice/SHA1.cpp +169 -0
  130. data/dist/ice/cpp/src/Ice/Selector.cpp +1535 -0
  131. data/dist/ice/cpp/src/Ice/Selector.h +292 -0
  132. data/dist/ice/cpp/src/Ice/Service.cpp +1883 -0
  133. data/dist/ice/cpp/src/Ice/StreamSocket.cpp +519 -0
  134. data/dist/ice/cpp/src/Ice/StreamSocket.h +85 -0
  135. data/dist/ice/cpp/src/Ice/TcpAcceptor.cpp +234 -0
  136. data/dist/ice/cpp/src/Ice/TcpAcceptor.h +61 -0
  137. data/dist/ice/cpp/src/Ice/TcpTransceiver.cpp +135 -0
  138. data/dist/ice/cpp/src/Ice/TcpTransceiver.h +58 -0
  139. data/dist/ice/cpp/src/Ice/Thread.cpp +569 -0
  140. data/dist/ice/cpp/src/Ice/ThreadPool.cpp +1292 -0
  141. data/dist/ice/cpp/src/Ice/ThreadPool.h +393 -0
  142. data/dist/ice/cpp/src/Ice/Transceiver.h +49 -0
  143. data/dist/ice/cpp/src/Ice/UdpConnector.cpp +131 -0
  144. data/dist/ice/cpp/src/Ice/UdpTransceiver.cpp +806 -0
  145. data/dist/ice/cpp/src/Ice/UdpTransceiver.h +96 -0
  146. data/dist/ice/cpp/src/Ice/WSAcceptor.cpp +92 -0
  147. data/dist/ice/cpp/src/Ice/WSAcceptor.h +52 -0
  148. data/dist/ice/cpp/src/Ice/WSTransceiver.cpp +1704 -0
  149. data/dist/ice/cpp/src/Ice/WSTransceiver.h +141 -0
  150. data/dist/ice/cpp/src/Ice/generated/BuiltinSequences.cpp +49 -0
  151. data/dist/ice/cpp/src/Ice/generated/Communicator.cpp +79 -0
  152. data/dist/ice/cpp/src/Ice/generated/CommunicatorF.cpp +61 -0
  153. data/dist/ice/cpp/src/Ice/generated/Connection.cpp +155 -0
  154. data/dist/ice/cpp/src/Ice/generated/ConnectionF.cpp +61 -0
  155. data/dist/ice/cpp/src/Ice/generated/Current.cpp +62 -0
  156. data/dist/ice/cpp/src/Ice/generated/Endpoint.cpp +147 -0
  157. data/dist/ice/cpp/src/Ice/generated/EndpointF.cpp +61 -0
  158. data/dist/ice/cpp/src/Ice/generated/EndpointTypes.cpp +51 -0
  159. data/dist/ice/cpp/src/Ice/generated/FacetMap.cpp +49 -0
  160. data/dist/ice/cpp/src/Ice/generated/Identity.cpp +57 -0
  161. data/dist/ice/cpp/src/Ice/generated/ImplicitContext.cpp +75 -0
  162. data/dist/ice/cpp/src/Ice/generated/ImplicitContextF.cpp +61 -0
  163. data/dist/ice/cpp/src/Ice/generated/Instrumentation.cpp +188 -0
  164. data/dist/ice/cpp/src/Ice/generated/InstrumentationF.cpp +66 -0
  165. data/dist/ice/cpp/src/Ice/generated/LocalException.cpp +3262 -0
  166. data/dist/ice/cpp/src/Ice/generated/Locator.cpp +2042 -0
  167. data/dist/ice/cpp/src/Ice/generated/LocatorF.cpp +63 -0
  168. data/dist/ice/cpp/src/Ice/generated/Logger.cpp +73 -0
  169. data/dist/ice/cpp/src/Ice/generated/LoggerF.cpp +61 -0
  170. data/dist/ice/cpp/src/Ice/generated/Metrics.cpp +2352 -0
  171. data/dist/ice/cpp/src/Ice/generated/ObjectAdapter.cpp +79 -0
  172. data/dist/ice/cpp/src/Ice/generated/ObjectAdapterF.cpp +61 -0
  173. data/dist/ice/cpp/src/Ice/generated/ObjectFactory.cpp +75 -0
  174. data/dist/ice/cpp/src/Ice/generated/Plugin.cpp +87 -0
  175. data/dist/ice/cpp/src/Ice/generated/PluginF.cpp +61 -0
  176. data/dist/ice/cpp/src/Ice/generated/Process.cpp +471 -0
  177. data/dist/ice/cpp/src/Ice/generated/ProcessF.cpp +63 -0
  178. data/dist/ice/cpp/src/Ice/generated/Properties.cpp +78 -0
  179. data/dist/ice/cpp/src/Ice/generated/PropertiesAdmin.cpp +603 -0
  180. data/dist/ice/cpp/src/Ice/generated/PropertiesF.cpp +63 -0
  181. data/dist/ice/cpp/src/Ice/generated/RemoteLogger.cpp +1171 -0
  182. data/dist/ice/cpp/src/Ice/generated/Router.cpp +977 -0
  183. data/dist/ice/cpp/src/Ice/generated/RouterF.cpp +63 -0
  184. data/dist/ice/cpp/src/Ice/generated/ServantLocator.cpp +75 -0
  185. data/dist/ice/cpp/src/Ice/generated/ServantLocatorF.cpp +61 -0
  186. data/dist/ice/cpp/src/Ice/generated/SliceChecksumDict.cpp +49 -0
  187. data/dist/ice/cpp/src/Ice/generated/ValueFactory.cpp +83 -0
  188. data/dist/ice/cpp/src/Ice/generated/Version.cpp +57 -0
  189. data/dist/ice/cpp/src/Ice/ios/StreamAcceptor.cpp +154 -0
  190. data/dist/ice/cpp/src/Ice/ios/StreamAcceptor.h +49 -0
  191. data/dist/ice/cpp/src/Ice/ios/StreamConnector.cpp +146 -0
  192. data/dist/ice/cpp/src/Ice/ios/StreamConnector.h +52 -0
  193. data/dist/ice/cpp/src/Ice/ios/StreamEndpointI.cpp +477 -0
  194. data/dist/ice/cpp/src/Ice/ios/StreamEndpointI.h +156 -0
  195. data/dist/ice/cpp/src/Ice/ios/StreamTransceiver.cpp +570 -0
  196. data/dist/ice/cpp/src/Ice/ios/StreamTransceiver.h +93 -0
  197. data/dist/ice/cpp/src/IceDiscovery/generated/IceDiscovery/IceDiscovery.h +1889 -0
  198. data/dist/ice/cpp/src/IceDiscovery/generated/IceDiscovery.cpp +915 -0
  199. data/dist/ice/cpp/src/IceLocatorDiscovery/generated/IceLocatorDiscovery/IceLocatorDiscovery.h +1197 -0
  200. data/dist/ice/cpp/src/IceLocatorDiscovery/generated/IceLocatorDiscovery.cpp +730 -0
  201. data/dist/ice/cpp/src/IceSSL/AcceptorI.cpp +105 -0
  202. data/dist/ice/cpp/src/IceSSL/AcceptorI.h +52 -0
  203. data/dist/ice/cpp/src/IceSSL/OpenSSLTransceiverI.cpp +1092 -0
  204. data/dist/ice/cpp/src/IceSSL/PluginI.cpp +246 -0
  205. data/dist/ice/cpp/src/IceSSL/SecureTransportTransceiverI.cpp +719 -0
  206. data/dist/ice/cpp/src/IceSSL/SecureTransportUtil.cpp +868 -0
  207. data/dist/ice/cpp/src/IceSSL/Util.cpp +192 -0
  208. data/dist/ice/cpp/src/IceSSL/generated/ConnectionInfo.cpp +75 -0
  209. data/dist/ice/cpp/src/IceSSL/generated/ConnectionInfoF.cpp +61 -0
  210. data/dist/ice/cpp/src/IceSSL/generated/EndpointInfo.cpp +75 -0
  211. data/dist/ice/cpp/src/IceUtil/ConsoleUtil.cpp +157 -0
  212. data/dist/ice/cpp/src/IceUtil/FileUtil.cpp +471 -0
  213. data/dist/ice/cpp/src/IceUtil/RecMutex.cpp +238 -0
  214. data/dist/ice/cpp/src/IceUtil/StringConverter.cpp +690 -0
  215. data/dist/ice/cpp/src/IceUtil/StringUtil.cpp +1135 -0
  216. data/dist/ice/cpp/src/IceUtil/UUID.cpp +165 -0
  217. data/dist/ice/cpp/src/IceUtil/UtilException.cpp +839 -0
  218. data/dist/ice/cpp/src/Slice/JavaUtil.cpp +5183 -0
  219. data/dist/ice/cpp/src/Slice/JavaUtil.h +407 -0
  220. data/dist/ice/cpp/src/slice2rb/Main.cpp +35 -0
  221. data/dist/ice/mcpp/directive.c +1407 -0
  222. data/dist/ice/mcpp/internal.H +530 -0
  223. data/dist/ice/mcpp/mcpp_main.c +792 -0
  224. data/dist/ice/mcpp/support.c +1985 -0
  225. data/dist/ice/mcpp/system.c +2741 -0
  226. data/dist/ice/slice/Ice/Connection.ice +516 -0
  227. data/dist/ice/slice/Ice/Current.ice +170 -0
  228. data/dist/ice/slice/Ice/Locator.ice +239 -0
  229. data/dist/ice/slice/Ice/Metrics.ice +436 -0
  230. data/dist/ice/slice/Ice/ObjectAdapter.ice +710 -0
  231. data/dist/ice/slice/Ice/Properties.ice +244 -0
  232. data/dist/ice/slice/Ice/Router.ice +103 -0
  233. data/dist/ice/slice/IceGrid/PluginFacade.ice +329 -0
  234. data/dist/ice/slice/IceStorm/IceStorm.ice +414 -0
  235. data/dist/lib/Glacier2/Metrics.rb +56 -0
  236. data/dist/lib/Glacier2/PermissionsVerifier.rb +93 -0
  237. data/dist/lib/Glacier2/PermissionsVerifierF.rb +30 -0
  238. data/dist/lib/Glacier2/Router.rb +95 -0
  239. data/dist/lib/Glacier2/RouterF.rb +25 -0
  240. data/dist/lib/Glacier2/SSLInfo.rb +72 -0
  241. data/dist/lib/Glacier2/Session.rb +247 -0
  242. data/dist/lib/Ice/BuiltinSequences.rb +60 -0
  243. data/dist/lib/Ice/Communicator.rb +87 -0
  244. data/dist/lib/Ice/CommunicatorF.rb +24 -0
  245. data/dist/lib/Ice/Connection.rb +413 -0
  246. data/dist/lib/Ice/ConnectionF.rb +32 -0
  247. data/dist/lib/Ice/Current.rb +141 -0
  248. data/dist/lib/Ice/Endpoint.rb +187 -0
  249. data/dist/lib/Ice/EndpointF.rb +48 -0
  250. data/dist/lib/Ice/EndpointTypes.rb +69 -0
  251. data/dist/lib/Ice/FacetMap.rb +24 -0
  252. data/dist/lib/Ice/Identity.rb +63 -0
  253. data/dist/lib/Ice/ImplicitContext.rb +26 -0
  254. data/dist/lib/Ice/ImplicitContextF.rb +24 -0
  255. data/dist/lib/Ice/Instrumentation.rb +169 -0
  256. data/dist/lib/Ice/InstrumentationF.rb +31 -0
  257. data/dist/lib/Ice/LocalException.rb +1031 -0
  258. data/dist/lib/Ice/Locator.rb +196 -0
  259. data/dist/lib/Ice/LocatorF.rb +30 -0
  260. data/dist/lib/Ice/Logger.rb +24 -0
  261. data/dist/lib/Ice/LoggerF.rb +24 -0
  262. data/dist/lib/Ice/Metrics.rb +337 -0
  263. data/dist/lib/Ice/ObjectAdapter.rb +29 -0
  264. data/dist/lib/Ice/ObjectAdapterF.rb +24 -0
  265. data/dist/lib/Ice/ObjectFactory.rb +24 -0
  266. data/dist/lib/Ice/Plugin.rb +30 -0
  267. data/dist/lib/Ice/PluginF.rb +28 -0
  268. data/dist/lib/Ice/Process.rb +53 -0
  269. data/dist/lib/Ice/ProcessF.rb +25 -0
  270. data/dist/lib/Ice/Properties.rb +25 -0
  271. data/dist/lib/Ice/PropertiesAdmin.rb +63 -0
  272. data/dist/lib/Ice/PropertiesF.rb +29 -0
  273. data/dist/lib/Ice/RemoteLogger.rb +207 -0
  274. data/dist/lib/Ice/Router.rb +87 -0
  275. data/dist/lib/Ice/RouterF.rb +25 -0
  276. data/dist/lib/Ice/ServantLocator.rb +26 -0
  277. data/dist/lib/Ice/ServantLocatorF.rb +24 -0
  278. data/dist/lib/Ice/SliceChecksumDict.rb +24 -0
  279. data/dist/lib/Ice/ValueFactory.rb +28 -0
  280. data/dist/lib/Ice/Version.rb +90 -0
  281. data/dist/lib/IceBox/IceBox.rb +164 -0
  282. data/dist/lib/IceGrid/Admin.rb +1196 -0
  283. data/dist/lib/IceGrid/Descriptor.rb +1034 -0
  284. data/dist/lib/IceGrid/Exception.rb +376 -0
  285. data/dist/lib/IceGrid/FileParser.rb +65 -0
  286. data/dist/lib/IceGrid/PluginFacade.rb +35 -0
  287. data/dist/lib/IceGrid/Registry.rb +209 -0
  288. data/dist/lib/IceGrid/Session.rb +71 -0
  289. data/dist/lib/IceGrid/UserAccountMapper.rb +61 -0
  290. data/dist/lib/IcePatch2/FileInfo.rb +115 -0
  291. data/dist/lib/IcePatch2/FileServer.rb +123 -0
  292. data/dist/lib/IceStorm/IceStorm.rb +332 -0
  293. data/dist/lib/IceStorm/Metrics.rb +73 -0
  294. data/extconf.rb +91 -0
  295. data/ice.gemspec +21 -16
  296. metadata +715 -711
  297. data/ICE_LICENSE +0 -48
  298. data/LICENSE +0 -340
  299. data/MCPP_LICENSE +0 -29
  300. data/ext/Connection.cpp +0 -532
  301. data/ext/Endpoint.cpp +0 -340
  302. data/ext/ImplicitContext.cpp +0 -144
  303. data/ext/Logger.cpp +0 -147
  304. data/ext/Operation.cpp +0 -661
  305. data/ext/Properties.cpp +0 -365
  306. data/ext/Types.cpp +0 -3325
  307. data/ext/Types.h +0 -595
  308. data/ext/ValueFactoryManager.cpp +0 -441
  309. data/ext/extconf.rb +0 -97
  310. data/ext/ice/cpp/include/Ice/Config.h +0 -78
  311. data/ext/ice/cpp/include/Ice/ConsoleUtil.h +0 -23
  312. data/ext/ice/cpp/include/Ice/ExceptionHelpers.h +0 -74
  313. data/ext/ice/cpp/include/Ice/Ice.h +0 -55
  314. data/ext/ice/cpp/include/Ice/Initialize.h +0 -957
  315. data/ext/ice/cpp/include/Ice/MetricsObserverI.h +0 -669
  316. data/ext/ice/cpp/include/Ice/OutgoingAsync.h +0 -856
  317. data/ext/ice/cpp/include/Ice/Proxy.h +0 -5154
  318. data/ext/ice/cpp/include/Ice/SHA1.h +0 -42
  319. data/ext/ice/cpp/include/Ice/UserExceptionFactory.h +0 -88
  320. data/ext/ice/cpp/include/IceSSL/IceSSL.h +0 -28
  321. data/ext/ice/cpp/include/IceSSL/UWP.h +0 -62
  322. data/ext/ice/cpp/include/IceUtil/Cond.h +0 -317
  323. data/ext/ice/cpp/include/IceUtil/Config.h +0 -424
  324. data/ext/ice/cpp/include/IceUtil/ConsoleUtil.h +0 -92
  325. data/ext/ice/cpp/include/IceUtil/CtrlCHandler.h +0 -92
  326. data/ext/ice/cpp/include/IceUtil/FileUtil.h +0 -143
  327. data/ext/ice/cpp/include/IceUtil/IceUtil.h +0 -40
  328. data/ext/ice/cpp/include/IceUtil/InputUtil.h +0 -42
  329. data/ext/ice/cpp/include/IceUtil/Mutex.h +0 -353
  330. data/ext/ice/cpp/include/IceUtil/ResourceConfig.h +0 -53
  331. data/ext/ice/cpp/include/IceUtil/Thread.h +0 -174
  332. data/ext/ice/cpp/include/IceUtil/Timer.h +0 -143
  333. data/ext/ice/cpp/include/generated/Ice/BuiltinSequences.h +0 -170
  334. data/ext/ice/cpp/include/generated/Ice/Communicator.h +0 -1162
  335. data/ext/ice/cpp/include/generated/Ice/CommunicatorF.h +0 -101
  336. data/ext/ice/cpp/include/generated/Ice/Connection.h +0 -1703
  337. data/ext/ice/cpp/include/generated/Ice/ConnectionF.h +0 -119
  338. data/ext/ice/cpp/include/generated/Ice/Current.h +0 -322
  339. data/ext/ice/cpp/include/generated/Ice/Endpoint.h +0 -979
  340. data/ext/ice/cpp/include/generated/Ice/EndpointF.h +0 -166
  341. data/ext/ice/cpp/include/generated/Ice/EndpointTypes.h +0 -118
  342. data/ext/ice/cpp/include/generated/Ice/FacetMap.h +0 -80
  343. data/ext/ice/cpp/include/generated/Ice/Identity.h +0 -264
  344. data/ext/ice/cpp/include/generated/Ice/ImplicitContext.h +0 -284
  345. data/ext/ice/cpp/include/generated/Ice/ImplicitContextF.h +0 -101
  346. data/ext/ice/cpp/include/generated/Ice/Instrumentation.h +0 -1203
  347. data/ext/ice/cpp/include/generated/Ice/InstrumentationF.h +0 -128
  348. data/ext/ice/cpp/include/generated/Ice/LocalException.h +0 -7437
  349. data/ext/ice/cpp/include/generated/Ice/Locator.h +0 -3898
  350. data/ext/ice/cpp/include/generated/Ice/LocatorF.h +0 -147
  351. data/ext/ice/cpp/include/generated/Ice/Logger.h +0 -237
  352. data/ext/ice/cpp/include/generated/Ice/LoggerF.h +0 -101
  353. data/ext/ice/cpp/include/generated/Ice/Metrics.h +0 -4769
  354. data/ext/ice/cpp/include/generated/Ice/ObjectAdapter.h +0 -1181
  355. data/ext/ice/cpp/include/generated/Ice/ObjectAdapterF.h +0 -101
  356. data/ext/ice/cpp/include/generated/Ice/ObjectFactory.h +0 -203
  357. data/ext/ice/cpp/include/generated/Ice/Plugin.h +0 -318
  358. data/ext/ice/cpp/include/generated/Ice/PluginF.h +0 -110
  359. data/ext/ice/cpp/include/generated/Ice/Process.h +0 -977
  360. data/ext/ice/cpp/include/generated/Ice/ProcessF.h +0 -125
  361. data/ext/ice/cpp/include/generated/Ice/Properties.h +0 -452
  362. data/ext/ice/cpp/include/generated/Ice/PropertiesAdmin.h +0 -1366
  363. data/ext/ice/cpp/include/generated/Ice/PropertiesF.h +0 -134
  364. data/ext/ice/cpp/include/generated/Ice/RemoteLogger.h +0 -2707
  365. data/ext/ice/cpp/include/generated/Ice/Router.h +0 -1850
  366. data/ext/ice/cpp/include/generated/Ice/RouterF.h +0 -125
  367. data/ext/ice/cpp/include/generated/Ice/ServantLocator.h +0 -305
  368. data/ext/ice/cpp/include/generated/Ice/ServantLocatorF.h +0 -101
  369. data/ext/ice/cpp/include/generated/Ice/SliceChecksumDict.h +0 -84
  370. data/ext/ice/cpp/include/generated/Ice/ValueFactory.h +0 -330
  371. data/ext/ice/cpp/include/generated/Ice/Version.h +0 -357
  372. data/ext/ice/cpp/include/generated/IceSSL/ConnectionInfo.h +0 -228
  373. data/ext/ice/cpp/include/generated/IceSSL/ConnectionInfoF.h +0 -101
  374. data/ext/ice/cpp/include/generated/IceSSL/EndpointInfo.h +0 -186
  375. data/ext/ice/cpp/src/Ice/Acceptor.h +0 -37
  376. data/ext/ice/cpp/src/Ice/BuiltinSequences.cpp +0 -49
  377. data/ext/ice/cpp/src/Ice/Communicator.cpp +0 -79
  378. data/ext/ice/cpp/src/Ice/CommunicatorF.cpp +0 -61
  379. data/ext/ice/cpp/src/Ice/Connection.cpp +0 -155
  380. data/ext/ice/cpp/src/Ice/ConnectionF.cpp +0 -61
  381. data/ext/ice/cpp/src/Ice/ConnectionFactory.cpp +0 -1972
  382. data/ext/ice/cpp/src/Ice/ConnectionFactory.h +0 -264
  383. data/ext/ice/cpp/src/Ice/ConnectionI.cpp +0 -3670
  384. data/ext/ice/cpp/src/Ice/ConnectionI.h +0 -391
  385. data/ext/ice/cpp/src/Ice/CountDownLatch.cpp +0 -179
  386. data/ext/ice/cpp/src/Ice/Current.cpp +0 -62
  387. data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.cpp +0 -161
  388. data/ext/ice/cpp/src/Ice/DynamicLibrary.cpp +0 -291
  389. data/ext/ice/cpp/src/Ice/Endpoint.cpp +0 -147
  390. data/ext/ice/cpp/src/Ice/EndpointF.cpp +0 -61
  391. data/ext/ice/cpp/src/Ice/EndpointFactory.cpp +0 -189
  392. data/ext/ice/cpp/src/Ice/EndpointI.cpp +0 -98
  393. data/ext/ice/cpp/src/Ice/EndpointTypes.cpp +0 -51
  394. data/ext/ice/cpp/src/Ice/EventHandler.cpp +0 -32
  395. data/ext/ice/cpp/src/Ice/EventHandler.h +0 -81
  396. data/ext/ice/cpp/src/Ice/Exception.cpp +0 -845
  397. data/ext/ice/cpp/src/Ice/FacetMap.cpp +0 -49
  398. data/ext/ice/cpp/src/Ice/IPEndpointI.cpp +0 -756
  399. data/ext/ice/cpp/src/Ice/IPEndpointI.h +0 -162
  400. data/ext/ice/cpp/src/Ice/Identity.cpp +0 -57
  401. data/ext/ice/cpp/src/Ice/ImplicitContext.cpp +0 -75
  402. data/ext/ice/cpp/src/Ice/ImplicitContextF.cpp +0 -61
  403. data/ext/ice/cpp/src/Ice/InputStream.cpp +0 -2741
  404. data/ext/ice/cpp/src/Ice/Instance.cpp +0 -1971
  405. data/ext/ice/cpp/src/Ice/Instrumentation.cpp +0 -188
  406. data/ext/ice/cpp/src/Ice/InstrumentationF.cpp +0 -66
  407. data/ext/ice/cpp/src/Ice/LocalException.cpp +0 -3262
  408. data/ext/ice/cpp/src/Ice/Locator.cpp +0 -2042
  409. data/ext/ice/cpp/src/Ice/LocatorF.cpp +0 -63
  410. data/ext/ice/cpp/src/Ice/Logger.cpp +0 -73
  411. data/ext/ice/cpp/src/Ice/LoggerF.cpp +0 -61
  412. data/ext/ice/cpp/src/Ice/LoggerI.cpp +0 -261
  413. data/ext/ice/cpp/src/Ice/Metrics.cpp +0 -2352
  414. data/ext/ice/cpp/src/Ice/MetricsAdminI.cpp +0 -694
  415. data/ext/ice/cpp/src/Ice/Network.cpp +0 -3075
  416. data/ext/ice/cpp/src/Ice/Network.h +0 -371
  417. data/ext/ice/cpp/src/Ice/NetworkF.h +0 -23
  418. data/ext/ice/cpp/src/Ice/NetworkProxy.cpp +0 -324
  419. data/ext/ice/cpp/src/Ice/ObjectAdapter.cpp +0 -79
  420. data/ext/ice/cpp/src/Ice/ObjectAdapterF.cpp +0 -61
  421. data/ext/ice/cpp/src/Ice/ObjectAdapterI.cpp +0 -1530
  422. data/ext/ice/cpp/src/Ice/ObjectFactory.cpp +0 -75
  423. data/ext/ice/cpp/src/Ice/OutgoingAsync.cpp +0 -1322
  424. data/ext/ice/cpp/src/Ice/Plugin.cpp +0 -87
  425. data/ext/ice/cpp/src/Ice/PluginF.cpp +0 -61
  426. data/ext/ice/cpp/src/Ice/PluginManagerI.cpp +0 -503
  427. data/ext/ice/cpp/src/Ice/Process.cpp +0 -471
  428. data/ext/ice/cpp/src/Ice/ProcessF.cpp +0 -63
  429. data/ext/ice/cpp/src/Ice/Properties.cpp +0 -78
  430. data/ext/ice/cpp/src/Ice/PropertiesAdmin.cpp +0 -603
  431. data/ext/ice/cpp/src/Ice/PropertiesF.cpp +0 -63
  432. data/ext/ice/cpp/src/Ice/PropertiesI.cpp +0 -747
  433. data/ext/ice/cpp/src/Ice/PropertyNames.cpp +0 -1429
  434. data/ext/ice/cpp/src/Ice/PropertyNames.h +0 -78
  435. data/ext/ice/cpp/src/Ice/Proxy.cpp +0 -1601
  436. data/ext/ice/cpp/src/Ice/RemoteLogger.cpp +0 -1171
  437. data/ext/ice/cpp/src/Ice/Router.cpp +0 -977
  438. data/ext/ice/cpp/src/Ice/RouterF.cpp +0 -63
  439. data/ext/ice/cpp/src/Ice/SHA1.cpp +0 -185
  440. data/ext/ice/cpp/src/Ice/Selector.cpp +0 -1537
  441. data/ext/ice/cpp/src/Ice/Selector.h +0 -308
  442. data/ext/ice/cpp/src/Ice/ServantLocator.cpp +0 -75
  443. data/ext/ice/cpp/src/Ice/ServantLocatorF.cpp +0 -61
  444. data/ext/ice/cpp/src/Ice/SliceChecksumDict.cpp +0 -49
  445. data/ext/ice/cpp/src/Ice/StreamSocket.cpp +0 -682
  446. data/ext/ice/cpp/src/Ice/StreamSocket.h +0 -92
  447. data/ext/ice/cpp/src/Ice/TcpAcceptor.cpp +0 -355
  448. data/ext/ice/cpp/src/Ice/TcpAcceptor.h +0 -69
  449. data/ext/ice/cpp/src/Ice/TcpTransceiver.cpp +0 -135
  450. data/ext/ice/cpp/src/Ice/TcpTransceiver.h +0 -58
  451. data/ext/ice/cpp/src/Ice/Thread.cpp +0 -811
  452. data/ext/ice/cpp/src/Ice/ThreadPool.cpp +0 -1328
  453. data/ext/ice/cpp/src/Ice/ThreadPool.h +0 -393
  454. data/ext/ice/cpp/src/Ice/Transceiver.h +0 -49
  455. data/ext/ice/cpp/src/Ice/UdpConnector.cpp +0 -136
  456. data/ext/ice/cpp/src/Ice/UdpTransceiver.cpp +0 -1153
  457. data/ext/ice/cpp/src/Ice/UdpTransceiver.h +0 -117
  458. data/ext/ice/cpp/src/Ice/ValueFactory.cpp +0 -83
  459. data/ext/ice/cpp/src/Ice/Version.cpp +0 -57
  460. data/ext/ice/cpp/src/Ice/WSAcceptor.cpp +0 -92
  461. data/ext/ice/cpp/src/Ice/WSAcceptor.h +0 -52
  462. data/ext/ice/cpp/src/Ice/WSTransceiver.cpp +0 -1747
  463. data/ext/ice/cpp/src/Ice/WSTransceiver.h +0 -141
  464. data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.cpp +0 -915
  465. data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.h +0 -1889
  466. data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.cpp +0 -730
  467. data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.h +0 -1197
  468. data/ext/ice/cpp/src/IceSSL/AcceptorI.cpp +0 -105
  469. data/ext/ice/cpp/src/IceSSL/AcceptorI.h +0 -52
  470. data/ext/ice/cpp/src/IceSSL/ConnectionInfo.cpp +0 -75
  471. data/ext/ice/cpp/src/IceSSL/ConnectionInfoF.cpp +0 -61
  472. data/ext/ice/cpp/src/IceSSL/EndpointInfo.cpp +0 -75
  473. data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.cpp +0 -1092
  474. data/ext/ice/cpp/src/IceSSL/PluginI.cpp +0 -246
  475. data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.cpp +0 -719
  476. data/ext/ice/cpp/src/IceSSL/SecureTransportUtil.cpp +0 -868
  477. data/ext/ice/cpp/src/IceSSL/UWPCertificateI.cpp +0 -266
  478. data/ext/ice/cpp/src/IceSSL/UWPEngine.cpp +0 -338
  479. data/ext/ice/cpp/src/IceSSL/UWPEngine.h +0 -41
  480. data/ext/ice/cpp/src/IceSSL/UWPEngineF.h +0 -26
  481. data/ext/ice/cpp/src/IceSSL/UWPPluginI.cpp +0 -89
  482. data/ext/ice/cpp/src/IceSSL/UWPTransceiverI.cpp +0 -383
  483. data/ext/ice/cpp/src/IceSSL/UWPTransceiverI.h +0 -71
  484. data/ext/ice/cpp/src/IceSSL/Util.cpp +0 -192
  485. data/ext/ice/cpp/src/IceUtil/ConsoleUtil.cpp +0 -157
  486. data/ext/ice/cpp/src/IceUtil/FileUtil.cpp +0 -484
  487. data/ext/ice/cpp/src/IceUtil/RecMutex.cpp +0 -242
  488. data/ext/ice/cpp/src/IceUtil/StringConverter.cpp +0 -690
  489. data/ext/ice/cpp/src/IceUtil/StringUtil.cpp +0 -1180
  490. data/ext/ice/cpp/src/IceUtil/UUID.cpp +0 -169
  491. data/ext/ice/cpp/src/IceUtil/UtilException.cpp +0 -839
  492. data/ext/ice/cpp/src/Slice/JavaUtil.cpp +0 -5154
  493. data/ext/ice/cpp/src/Slice/JavaUtil.h +0 -398
  494. data/ext/ice/mcpp/CMakeLists.txt +0 -80
  495. data/ext/ice/mcpp/LICENSE +0 -29
  496. data/ext/ice/mcpp/Makefile +0 -63
  497. data/ext/ice/mcpp/README.md +0 -32
  498. data/ext/ice/mcpp/directive.c +0 -1404
  499. data/ext/ice/mcpp/internal.H +0 -530
  500. data/ext/ice/mcpp/main.c +0 -792
  501. data/ext/ice/mcpp/mcpp.gyp +0 -88
  502. data/ext/ice/mcpp/support.c +0 -1985
  503. data/ext/ice/mcpp/system.c +0 -2741
  504. data/lib/Glacier2/Metrics.rb +0 -56
  505. data/lib/Glacier2/PermissionsVerifier.rb +0 -93
  506. data/lib/Glacier2/PermissionsVerifierF.rb +0 -30
  507. data/lib/Glacier2/Router.rb +0 -95
  508. data/lib/Glacier2/RouterF.rb +0 -25
  509. data/lib/Glacier2/SSLInfo.rb +0 -72
  510. data/lib/Glacier2/Session.rb +0 -247
  511. data/lib/Ice/BuiltinSequences.rb +0 -60
  512. data/lib/Ice/Communicator.rb +0 -87
  513. data/lib/Ice/CommunicatorF.rb +0 -24
  514. data/lib/Ice/Connection.rb +0 -413
  515. data/lib/Ice/ConnectionF.rb +0 -32
  516. data/lib/Ice/Current.rb +0 -141
  517. data/lib/Ice/Endpoint.rb +0 -187
  518. data/lib/Ice/EndpointF.rb +0 -48
  519. data/lib/Ice/EndpointTypes.rb +0 -69
  520. data/lib/Ice/FacetMap.rb +0 -24
  521. data/lib/Ice/Identity.rb +0 -63
  522. data/lib/Ice/ImplicitContext.rb +0 -26
  523. data/lib/Ice/ImplicitContextF.rb +0 -24
  524. data/lib/Ice/Instrumentation.rb +0 -169
  525. data/lib/Ice/InstrumentationF.rb +0 -31
  526. data/lib/Ice/LocalException.rb +0 -1031
  527. data/lib/Ice/Locator.rb +0 -196
  528. data/lib/Ice/LocatorF.rb +0 -30
  529. data/lib/Ice/Logger.rb +0 -24
  530. data/lib/Ice/LoggerF.rb +0 -24
  531. data/lib/Ice/Metrics.rb +0 -337
  532. data/lib/Ice/ObjectAdapter.rb +0 -29
  533. data/lib/Ice/ObjectAdapterF.rb +0 -24
  534. data/lib/Ice/ObjectFactory.rb +0 -24
  535. data/lib/Ice/Plugin.rb +0 -30
  536. data/lib/Ice/PluginF.rb +0 -28
  537. data/lib/Ice/Process.rb +0 -53
  538. data/lib/Ice/ProcessF.rb +0 -25
  539. data/lib/Ice/Properties.rb +0 -25
  540. data/lib/Ice/PropertiesAdmin.rb +0 -63
  541. data/lib/Ice/PropertiesF.rb +0 -29
  542. data/lib/Ice/RemoteLogger.rb +0 -207
  543. data/lib/Ice/Router.rb +0 -87
  544. data/lib/Ice/RouterF.rb +0 -25
  545. data/lib/Ice/ServantLocator.rb +0 -26
  546. data/lib/Ice/ServantLocatorF.rb +0 -24
  547. data/lib/Ice/SliceChecksumDict.rb +0 -24
  548. data/lib/Ice/ValueFactory.rb +0 -28
  549. data/lib/Ice/Version.rb +0 -90
  550. data/lib/IceBox/IceBox.rb +0 -164
  551. data/lib/IceGrid/Admin.rb +0 -1196
  552. data/lib/IceGrid/Descriptor.rb +0 -1034
  553. data/lib/IceGrid/Exception.rb +0 -376
  554. data/lib/IceGrid/FileParser.rb +0 -65
  555. data/lib/IceGrid/PluginFacade.rb +0 -35
  556. data/lib/IceGrid/Registry.rb +0 -209
  557. data/lib/IceGrid/Session.rb +0 -71
  558. data/lib/IceGrid/UserAccountMapper.rb +0 -61
  559. data/lib/IcePatch2/FileInfo.rb +0 -115
  560. data/lib/IcePatch2/FileServer.rb +0 -123
  561. data/lib/IceStorm/IceStorm.rb +0 -332
  562. data/lib/IceStorm/Metrics.rb +0 -73
  563. data/slice/Ice/Connection.ice +0 -516
  564. data/slice/Ice/Current.ice +0 -170
  565. data/slice/Ice/Locator.ice +0 -239
  566. data/slice/Ice/Metrics.ice +0 -436
  567. data/slice/Ice/ObjectAdapter.ice +0 -710
  568. data/slice/Ice/Properties.ice +0 -244
  569. data/slice/Ice/Router.ice +0 -103
  570. data/slice/IceBT/ConnectionInfo.ice +0 -59
  571. data/slice/IceBT/EndpointInfo.ice +0 -57
  572. data/slice/IceBT/Types.ice +0 -45
  573. data/slice/IceDiscovery/IceDiscovery.ice +0 -98
  574. data/slice/IceGrid/PluginFacade.ice +0 -329
  575. data/slice/IceIAP/ConnectionInfo.ice +0 -74
  576. data/slice/IceIAP/EndpointInfo.ice +0 -68
  577. data/slice/IceLocatorDiscovery/IceLocatorDiscovery.ice +0 -83
  578. data/slice/IceSSL/ConnectionInfo.ice +0 -54
  579. data/slice/IceSSL/ConnectionInfoF.ice +0 -31
  580. data/slice/IceSSL/EndpointInfo.ice +0 -45
  581. data/slice/IceStorm/IceStorm.ice +0 -414
  582. /data/{ext → dist/IceRuby}/Communicator.cpp +0 -0
  583. /data/{ext → dist/IceRuby}/Communicator.h +0 -0
  584. /data/{ext → dist/IceRuby}/Config.h +0 -0
  585. /data/{ext → dist/IceRuby}/Connection.h +0 -0
  586. /data/{ext → dist/IceRuby}/Endpoint.h +0 -0
  587. /data/{ext → dist/IceRuby}/ImplicitContext.h +0 -0
  588. /data/{ext → dist/IceRuby}/Init.cpp +0 -0
  589. /data/{ext → dist/IceRuby}/Logger.h +0 -0
  590. /data/{ext → dist/IceRuby}/Operation.h +0 -0
  591. /data/{ext → dist/IceRuby}/Properties.h +0 -0
  592. /data/{ext → dist/IceRuby}/Proxy.cpp +0 -0
  593. /data/{ext → dist/IceRuby}/Proxy.h +0 -0
  594. /data/{ext → dist/IceRuby}/Slice.cpp +0 -0
  595. /data/{ext → dist/IceRuby}/Slice.h +0 -0
  596. /data/{ext → dist/IceRuby}/Util.cpp +0 -0
  597. /data/{ext → dist/IceRuby}/Util.h +0 -0
  598. /data/{ext → dist/IceRuby}/ValueFactoryManager.h +0 -0
  599. /data/{ext → dist}/ice/cpp/include/Ice/Application.h +0 -0
  600. /data/{ext → dist}/ice/cpp/include/Ice/AsyncResult.h +0 -0
  601. /data/{ext → dist}/ice/cpp/include/Ice/AsyncResultF.h +0 -0
  602. /data/{ext → dist}/ice/cpp/include/Ice/BatchRequestInterceptor.h +0 -0
  603. /data/{ext → dist}/ice/cpp/include/Ice/BatchRequestQueueF.h +0 -0
  604. /data/{ext → dist}/ice/cpp/include/Ice/Buffer.h +0 -0
  605. /data/{ext → dist}/ice/cpp/include/Ice/CommunicatorAsync.h +0 -0
  606. /data/{ext → dist}/ice/cpp/include/Ice/Comparable.h +0 -0
  607. /data/{ext → dist}/ice/cpp/include/Ice/ConnectionAsync.h +0 -0
  608. /data/{ext → dist}/ice/cpp/include/Ice/ConnectionIF.h +0 -0
  609. /data/{ext → dist}/ice/cpp/include/Ice/DefaultValueFactory.h +0 -0
  610. /data/{ext → dist}/ice/cpp/include/Ice/DispatchInterceptor.h +0 -0
  611. /data/{ext → dist}/ice/cpp/include/Ice/Dispatcher.h +0 -0
  612. /data/{ext → dist}/ice/cpp/include/Ice/DynamicLibrary.h +0 -0
  613. /data/{ext → dist}/ice/cpp/include/Ice/DynamicLibraryF.h +0 -0
  614. /data/{ext → dist}/ice/cpp/include/Ice/Exception.h +0 -0
  615. /data/{ext → dist}/ice/cpp/include/Ice/FactoryTable.h +0 -0
  616. /data/{ext → dist}/ice/cpp/include/Ice/FactoryTableInit.h +0 -0
  617. /data/{ext → dist}/ice/cpp/include/Ice/Format.h +0 -0
  618. /data/{ext → dist}/ice/cpp/include/Ice/Functional.h +0 -0
  619. /data/{ext → dist}/ice/cpp/include/Ice/GCObject.h +0 -0
  620. /data/{ext → dist}/ice/cpp/include/Ice/Handle.h +0 -0
  621. /data/{ext → dist}/ice/cpp/include/Ice/IconvStringConverter.h +0 -0
  622. /data/{ext → dist}/ice/cpp/include/Ice/Incoming.h +0 -0
  623. /data/{ext → dist}/ice/cpp/include/Ice/IncomingAsync.h +0 -0
  624. /data/{ext → dist}/ice/cpp/include/Ice/IncomingAsyncF.h +0 -0
  625. /data/{ext → dist}/ice/cpp/include/Ice/InputStream.h +0 -0
  626. /data/{ext → dist}/ice/cpp/include/Ice/InstanceF.h +0 -0
  627. /data/{ext → dist}/ice/cpp/include/Ice/InterfaceByValue.h +0 -0
  628. /data/{ext → dist}/ice/cpp/include/Ice/LocalObject.h +0 -0
  629. /data/{ext → dist}/ice/cpp/include/Ice/LocalObjectF.h +0 -0
  630. /data/{ext → dist}/ice/cpp/include/Ice/LoggerUtil.h +0 -0
  631. /data/{ext → dist}/ice/cpp/include/Ice/MetricsAdminI.h +0 -0
  632. /data/{ext → dist}/ice/cpp/include/Ice/MetricsFunctional.h +0 -0
  633. /data/{ext → dist}/ice/cpp/include/Ice/NativePropertiesAdmin.h +0 -0
  634. /data/{ext → dist}/ice/cpp/include/Ice/Object.h +0 -0
  635. /data/{ext → dist}/ice/cpp/include/Ice/ObjectF.h +0 -0
  636. /data/{ext → dist}/ice/cpp/include/Ice/ObserverHelper.h +0 -0
  637. /data/{ext → dist}/ice/cpp/include/Ice/Optional.h +0 -0
  638. /data/{ext → dist}/ice/cpp/include/Ice/OutgoingAsyncF.h +0 -0
  639. /data/{ext → dist}/ice/cpp/include/Ice/OutputStream.h +0 -0
  640. /data/{ext → dist}/ice/cpp/include/Ice/Protocol.h +0 -0
  641. /data/{ext → dist}/ice/cpp/include/Ice/ProxyF.h +0 -0
  642. /data/{ext → dist}/ice/cpp/include/Ice/ProxyFactoryF.h +0 -0
  643. /data/{ext → dist}/ice/cpp/include/Ice/ProxyHandle.h +0 -0
  644. /data/{ext → dist}/ice/cpp/include/Ice/ReferenceF.h +0 -0
  645. /data/{ext → dist}/ice/cpp/include/Ice/RegisterPlugins.h +0 -0
  646. /data/{ext → dist}/ice/cpp/include/Ice/RequestHandlerF.h +0 -0
  647. /data/{ext → dist}/ice/cpp/include/Ice/ResponseHandlerF.h +0 -0
  648. /data/{ext → dist}/ice/cpp/include/Ice/ServantManagerF.h +0 -0
  649. /data/{ext → dist}/ice/cpp/include/Ice/Service.h +0 -0
  650. /data/{ext → dist}/ice/cpp/include/Ice/SliceChecksums.h +0 -0
  651. /data/{ext → dist}/ice/cpp/include/Ice/SlicedData.h +0 -0
  652. /data/{ext → dist}/ice/cpp/include/Ice/SlicedDataF.h +0 -0
  653. /data/{ext → dist}/ice/cpp/include/Ice/StreamHelpers.h +0 -0
  654. /data/{ext → dist}/ice/cpp/include/Ice/StringConverter.h +0 -0
  655. /data/{ext → dist}/ice/cpp/include/Ice/ThreadPoolF.h +0 -0
  656. /data/{ext → dist}/ice/cpp/include/Ice/UUID.h +0 -0
  657. /data/{ext → dist}/ice/cpp/include/Ice/UniquePtr.h +0 -0
  658. /data/{ext → dist}/ice/cpp/include/Ice/UniqueRef.h +0 -0
  659. /data/{ext → dist}/ice/cpp/include/Ice/Value.h +0 -0
  660. /data/{ext → dist}/ice/cpp/include/Ice/ValueF.h +0 -0
  661. /data/{ext → dist}/ice/cpp/include/IceSSL/Config.h +0 -0
  662. /data/{ext → dist}/ice/cpp/include/IceSSL/OpenSSL.h +0 -0
  663. /data/{ext → dist}/ice/cpp/include/IceSSL/Plugin.h +0 -0
  664. /data/{ext → dist}/ice/cpp/include/IceSSL/SChannel.h +0 -0
  665. /data/{ext → dist}/ice/cpp/include/IceSSL/SecureTransport.h +0 -0
  666. /data/{ext → dist}/ice/cpp/include/IceUtil/Atomic.h +0 -0
  667. /data/{ext → dist}/ice/cpp/include/IceUtil/CountDownLatch.h +0 -0
  668. /data/{ext → dist}/ice/cpp/include/IceUtil/DisableWarnings.h +0 -0
  669. /data/{ext → dist}/ice/cpp/include/IceUtil/Exception.h +0 -0
  670. /data/{ext → dist}/ice/cpp/include/IceUtil/Functional.h +0 -0
  671. /data/{ext → dist}/ice/cpp/include/IceUtil/Handle.h +0 -0
  672. /data/{ext → dist}/ice/cpp/include/IceUtil/Iterator.h +0 -0
  673. /data/{ext → dist}/ice/cpp/include/IceUtil/Lock.h +0 -0
  674. /data/{ext → dist}/ice/cpp/include/IceUtil/Monitor.h +0 -0
  675. /data/{ext → dist}/ice/cpp/include/IceUtil/MutexProtocol.h +0 -0
  676. /data/{ext → dist}/ice/cpp/include/IceUtil/MutexPtrLock.h +0 -0
  677. /data/{ext → dist}/ice/cpp/include/IceUtil/MutexPtrTryLock.h +0 -0
  678. /data/{ext → dist}/ice/cpp/include/IceUtil/Optional.h +0 -0
  679. /data/{ext → dist}/ice/cpp/include/IceUtil/Options.h +0 -0
  680. /data/{ext → dist}/ice/cpp/include/IceUtil/OutputUtil.h +0 -0
  681. /data/{ext → dist}/ice/cpp/include/IceUtil/PopDisableWarnings.h +0 -0
  682. /data/{ext → dist}/ice/cpp/include/IceUtil/PushDisableWarnings.h +0 -0
  683. /data/{ext → dist}/ice/cpp/include/IceUtil/Random.h +0 -0
  684. /data/{ext → dist}/ice/cpp/include/IceUtil/RecMutex.h +0 -0
  685. /data/{ext → dist}/ice/cpp/include/IceUtil/ScannerConfig.h +0 -0
  686. /data/{ext → dist}/ice/cpp/include/IceUtil/ScopedArray.h +0 -0
  687. /data/{ext → dist}/ice/cpp/include/IceUtil/Shared.h +0 -0
  688. /data/{ext → dist}/ice/cpp/include/IceUtil/StopWatch.h +0 -0
  689. /data/{ext → dist}/ice/cpp/include/IceUtil/StringConverter.h +0 -0
  690. /data/{ext → dist}/ice/cpp/include/IceUtil/StringUtil.h +0 -0
  691. /data/{ext → dist}/ice/cpp/include/IceUtil/ThreadException.h +0 -0
  692. /data/{ext → dist}/ice/cpp/include/IceUtil/Time.h +0 -0
  693. /data/{ext → dist}/ice/cpp/include/IceUtil/UUID.h +0 -0
  694. /data/{ext → dist}/ice/cpp/include/IceUtil/UndefSysMacros.h +0 -0
  695. /data/{ext → dist}/ice/cpp/src/Ice/ACM.cpp +0 -0
  696. /data/{ext → dist}/ice/cpp/src/Ice/ACM.h +0 -0
  697. /data/{ext → dist}/ice/cpp/src/Ice/ACMF.h +0 -0
  698. /data/{ext → dist}/ice/cpp/src/Ice/Acceptor.cpp +0 -0
  699. /data/{ext → dist}/ice/cpp/src/Ice/AcceptorF.h +0 -0
  700. /data/{ext → dist}/ice/cpp/src/Ice/ArgVector.cpp +0 -0
  701. /data/{ext → dist}/ice/cpp/src/Ice/ArgVector.h +0 -0
  702. /data/{ext → dist}/ice/cpp/src/Ice/AsyncResult.cpp +0 -0
  703. /data/{ext → dist}/ice/cpp/src/Ice/Base64.cpp +0 -0
  704. /data/{ext → dist}/ice/cpp/src/Ice/Base64.h +0 -0
  705. /data/{ext → dist}/ice/cpp/src/Ice/BatchRequestQueue.cpp +0 -0
  706. /data/{ext → dist}/ice/cpp/src/Ice/BatchRequestQueue.h +0 -0
  707. /data/{ext → dist}/ice/cpp/src/Ice/Buffer.cpp +0 -0
  708. /data/{ext → dist}/ice/cpp/src/Ice/CollocatedRequestHandler.cpp +0 -0
  709. /data/{ext → dist}/ice/cpp/src/Ice/CollocatedRequestHandler.h +0 -0
  710. /data/{ext → dist}/ice/cpp/src/Ice/CommunicatorI.cpp +0 -0
  711. /data/{ext → dist}/ice/cpp/src/Ice/CommunicatorI.h +0 -0
  712. /data/{ext → dist}/ice/cpp/src/Ice/Cond.cpp +0 -0
  713. /data/{ext → dist}/ice/cpp/src/Ice/ConnectRequestHandler.cpp +0 -0
  714. /data/{ext → dist}/ice/cpp/src/Ice/ConnectRequestHandler.h +0 -0
  715. /data/{ext → dist}/ice/cpp/src/Ice/ConnectRequestHandlerF.h +0 -0
  716. /data/{ext → dist}/ice/cpp/src/Ice/ConnectionFactoryF.h +0 -0
  717. /data/{ext → dist}/ice/cpp/src/Ice/ConnectionRequestHandler.cpp +0 -0
  718. /data/{ext → dist}/ice/cpp/src/Ice/ConnectionRequestHandler.h +0 -0
  719. /data/{ext → dist}/ice/cpp/src/Ice/Connector.cpp +0 -0
  720. /data/{ext → dist}/ice/cpp/src/Ice/Connector.h +0 -0
  721. /data/{ext → dist}/ice/cpp/src/Ice/ConnectorF.h +0 -0
  722. /data/{ext → dist}/ice/cpp/src/Ice/DefaultsAndOverrides.h +0 -0
  723. /data/{ext → dist}/ice/cpp/src/Ice/DefaultsAndOverridesF.h +0 -0
  724. /data/{ext → dist}/ice/cpp/src/Ice/DispatchInterceptor.cpp +0 -0
  725. /data/{ext → dist}/ice/cpp/src/Ice/EndpointFactory.h +0 -0
  726. /data/{ext → dist}/ice/cpp/src/Ice/EndpointFactoryF.h +0 -0
  727. /data/{ext → dist}/ice/cpp/src/Ice/EndpointFactoryManager.cpp +0 -0
  728. /data/{ext → dist}/ice/cpp/src/Ice/EndpointFactoryManager.h +0 -0
  729. /data/{ext → dist}/ice/cpp/src/Ice/EndpointFactoryManagerF.h +0 -0
  730. /data/{ext → dist}/ice/cpp/src/Ice/EndpointI.h +0 -0
  731. /data/{ext → dist}/ice/cpp/src/Ice/EndpointIF.h +0 -0
  732. /data/{ext → dist}/ice/cpp/src/Ice/EventHandlerF.h +0 -0
  733. /data/{ext → dist}/ice/cpp/src/Ice/FactoryTable.cpp +0 -0
  734. /data/{ext → dist}/ice/cpp/src/Ice/FactoryTableInit.cpp +0 -0
  735. /data/{ext → dist}/ice/cpp/src/Ice/GCObject.cpp +0 -0
  736. /data/{ext → dist}/ice/cpp/src/Ice/HashUtil.h +0 -0
  737. /data/{ext → dist}/ice/cpp/src/Ice/HttpParser.cpp +0 -0
  738. /data/{ext → dist}/ice/cpp/src/Ice/HttpParser.h +0 -0
  739. /data/{ext → dist}/ice/cpp/src/Ice/IPEndpointIF.h +0 -0
  740. /data/{ext → dist}/ice/cpp/src/Ice/IconvStringConverter.cpp +0 -0
  741. /data/{ext → dist}/ice/cpp/src/Ice/ImplicitContextI.cpp +0 -0
  742. /data/{ext → dist}/ice/cpp/src/Ice/ImplicitContextI.h +0 -0
  743. /data/{ext → dist}/ice/cpp/src/Ice/Incoming.cpp +0 -0
  744. /data/{ext → dist}/ice/cpp/src/Ice/IncomingAsync.cpp +0 -0
  745. /data/{ext → dist}/ice/cpp/src/Ice/IncomingRequest.h +0 -0
  746. /data/{ext → dist}/ice/cpp/src/Ice/Initialize.cpp +0 -0
  747. /data/{ext → dist}/ice/cpp/src/Ice/Instance.h +0 -0
  748. /data/{ext → dist}/ice/cpp/src/Ice/InstrumentationI.cpp +0 -0
  749. /data/{ext → dist}/ice/cpp/src/Ice/InstrumentationI.h +0 -0
  750. /data/{ext → dist}/ice/cpp/src/Ice/LocalObject.cpp +0 -0
  751. /data/{ext → dist}/ice/cpp/src/Ice/LocatorInfo.cpp +0 -0
  752. /data/{ext → dist}/ice/cpp/src/Ice/LocatorInfo.h +0 -0
  753. /data/{ext → dist}/ice/cpp/src/Ice/LocatorInfoF.h +0 -0
  754. /data/{ext → dist}/ice/cpp/src/Ice/LoggerAdminI.cpp +0 -0
  755. /data/{ext → dist}/ice/cpp/src/Ice/LoggerAdminI.h +0 -0
  756. /data/{ext → dist}/ice/cpp/src/Ice/LoggerI.h +0 -0
  757. /data/{ext → dist}/ice/cpp/src/Ice/LoggerUtil.cpp +0 -0
  758. /data/{ext → dist}/ice/cpp/src/Ice/MetricsObserverI.cpp +0 -0
  759. /data/{ext → dist}/ice/cpp/src/Ice/NetworkProxy.h +0 -0
  760. /data/{ext → dist}/ice/cpp/src/Ice/NetworkProxyF.h +0 -0
  761. /data/{ext → dist}/ice/cpp/src/Ice/OSLogLoggerI.cpp +0 -0
  762. /data/{ext → dist}/ice/cpp/src/Ice/OSLogLoggerI.h +0 -0
  763. /data/{ext → dist}/ice/cpp/src/Ice/Object.cpp +0 -0
  764. /data/{ext → dist}/ice/cpp/src/Ice/ObjectAdapterFactory.cpp +0 -0
  765. /data/{ext → dist}/ice/cpp/src/Ice/ObjectAdapterFactory.h +0 -0
  766. /data/{ext → dist}/ice/cpp/src/Ice/ObjectAdapterFactoryF.h +0 -0
  767. /data/{ext → dist}/ice/cpp/src/Ice/ObjectAdapterI.h +0 -0
  768. /data/{ext → dist}/ice/cpp/src/Ice/ObserverHelper.cpp +0 -0
  769. /data/{ext → dist}/ice/cpp/src/Ice/OpaqueEndpointI.cpp +0 -0
  770. /data/{ext → dist}/ice/cpp/src/Ice/OpaqueEndpointI.h +0 -0
  771. /data/{ext → dist}/ice/cpp/src/Ice/OutputStream.cpp +0 -0
  772. /data/{ext → dist}/ice/cpp/src/Ice/PluginManagerI.h +0 -0
  773. /data/{ext → dist}/ice/cpp/src/Ice/PropertiesAdminI.cpp +0 -0
  774. /data/{ext → dist}/ice/cpp/src/Ice/PropertiesAdminI.h +0 -0
  775. /data/{ext → dist}/ice/cpp/src/Ice/PropertiesI.h +0 -0
  776. /data/{ext → dist}/ice/cpp/src/Ice/Protocol.cpp +0 -0
  777. /data/{ext → dist}/ice/cpp/src/Ice/ProtocolInstance.cpp +0 -0
  778. /data/{ext → dist}/ice/cpp/src/Ice/ProtocolInstance.h +0 -0
  779. /data/{ext → dist}/ice/cpp/src/Ice/ProtocolInstanceF.h +0 -0
  780. /data/{ext → dist}/ice/cpp/src/Ice/ProtocolPluginFacade.cpp +0 -0
  781. /data/{ext → dist}/ice/cpp/src/Ice/ProtocolPluginFacade.h +0 -0
  782. /data/{ext → dist}/ice/cpp/src/Ice/ProtocolPluginFacadeF.h +0 -0
  783. /data/{ext → dist}/ice/cpp/src/Ice/ProxyFactory.cpp +0 -0
  784. /data/{ext → dist}/ice/cpp/src/Ice/ProxyFactory.h +0 -0
  785. /data/{ext → dist}/ice/cpp/src/Ice/Reference.cpp +0 -0
  786. /data/{ext → dist}/ice/cpp/src/Ice/Reference.h +0 -0
  787. /data/{ext → dist}/ice/cpp/src/Ice/ReferenceFactory.cpp +0 -0
  788. /data/{ext → dist}/ice/cpp/src/Ice/ReferenceFactory.h +0 -0
  789. /data/{ext → dist}/ice/cpp/src/Ice/ReferenceFactoryF.h +0 -0
  790. /data/{ext → dist}/ice/cpp/src/Ice/RegisterPluginsInit.cpp +0 -0
  791. /data/{ext → dist}/ice/cpp/src/Ice/RegisterPluginsInit.h +0 -0
  792. /data/{ext → dist}/ice/cpp/src/Ice/ReplyStatus.h +0 -0
  793. /data/{ext → dist}/ice/cpp/src/Ice/RequestHandler.cpp +0 -0
  794. /data/{ext → dist}/ice/cpp/src/Ice/RequestHandler.h +0 -0
  795. /data/{ext → dist}/ice/cpp/src/Ice/RequestHandlerFactory.cpp +0 -0
  796. /data/{ext → dist}/ice/cpp/src/Ice/RequestHandlerFactory.h +0 -0
  797. /data/{ext → dist}/ice/cpp/src/Ice/ResponseHandler.cpp +0 -0
  798. /data/{ext → dist}/ice/cpp/src/Ice/ResponseHandler.h +0 -0
  799. /data/{ext → dist}/ice/cpp/src/Ice/RetryQueue.cpp +0 -0
  800. /data/{ext → dist}/ice/cpp/src/Ice/RetryQueue.h +0 -0
  801. /data/{ext → dist}/ice/cpp/src/Ice/RetryQueueF.h +0 -0
  802. /data/{ext → dist}/ice/cpp/src/Ice/RouterInfo.cpp +0 -0
  803. /data/{ext → dist}/ice/cpp/src/Ice/RouterInfo.h +0 -0
  804. /data/{ext → dist}/ice/cpp/src/Ice/RouterInfoF.h +0 -0
  805. /data/{ext → dist}/ice/cpp/src/Ice/ServantManager.cpp +0 -0
  806. /data/{ext → dist}/ice/cpp/src/Ice/ServantManager.h +0 -0
  807. /data/{ext → dist}/ice/cpp/src/Ice/SharedContext.h +0 -0
  808. /data/{ext → dist}/ice/cpp/src/Ice/SliceChecksums.cpp +0 -0
  809. /data/{ext → dist}/ice/cpp/src/Ice/SlicedData.cpp +0 -0
  810. /data/{ext → dist}/ice/cpp/src/Ice/StringConverterPlugin.cpp +0 -0
  811. /data/{ext → dist}/ice/cpp/src/Ice/StringUtil.h +0 -0
  812. /data/{ext → dist}/ice/cpp/src/Ice/SysLoggerI.cpp +0 -0
  813. /data/{ext → dist}/ice/cpp/src/Ice/SysLoggerI.h +0 -0
  814. /data/{ext → dist}/ice/cpp/src/Ice/SystemdJournalI.cpp +0 -0
  815. /data/{ext → dist}/ice/cpp/src/Ice/SystemdJournalI.h +0 -0
  816. /data/{ext → dist}/ice/cpp/src/Ice/TcpConnector.cpp +0 -0
  817. /data/{ext → dist}/ice/cpp/src/Ice/TcpConnector.h +0 -0
  818. /data/{ext → dist}/ice/cpp/src/Ice/TcpEndpointI.cpp +0 -0
  819. /data/{ext → dist}/ice/cpp/src/Ice/TcpEndpointI.h +0 -0
  820. /data/{ext → dist}/ice/cpp/src/Ice/Timer.cpp +0 -0
  821. /data/{ext → dist}/ice/cpp/src/Ice/TraceLevels.cpp +0 -0
  822. /data/{ext → dist}/ice/cpp/src/Ice/TraceLevels.h +0 -0
  823. /data/{ext → dist}/ice/cpp/src/Ice/TraceLevelsF.h +0 -0
  824. /data/{ext → dist}/ice/cpp/src/Ice/TraceUtil.cpp +0 -0
  825. /data/{ext → dist}/ice/cpp/src/Ice/TraceUtil.h +0 -0
  826. /data/{ext → dist}/ice/cpp/src/Ice/Transceiver.cpp +0 -0
  827. /data/{ext → dist}/ice/cpp/src/Ice/TransceiverF.h +0 -0
  828. /data/{ext → dist}/ice/cpp/src/Ice/UdpConnector.h +0 -0
  829. /data/{ext → dist}/ice/cpp/src/Ice/UdpEndpointI.cpp +0 -0
  830. /data/{ext → dist}/ice/cpp/src/Ice/UdpEndpointI.h +0 -0
  831. /data/{ext → dist}/ice/cpp/src/Ice/Value.cpp +0 -0
  832. /data/{ext → dist}/ice/cpp/src/Ice/ValueFactoryManagerI.cpp +0 -0
  833. /data/{ext → dist}/ice/cpp/src/Ice/ValueFactoryManagerI.h +0 -0
  834. /data/{ext → dist}/ice/cpp/src/Ice/VirtualShared.h +0 -0
  835. /data/{ext → dist}/ice/cpp/src/Ice/WSConnector.cpp +0 -0
  836. /data/{ext → dist}/ice/cpp/src/Ice/WSConnector.h +0 -0
  837. /data/{ext → dist}/ice/cpp/src/Ice/WSEndpoint.cpp +0 -0
  838. /data/{ext → dist}/ice/cpp/src/Ice/WSEndpoint.h +0 -0
  839. /data/{ext → dist}/ice/cpp/src/IceDiscovery/LocatorI.cpp +0 -0
  840. /data/{ext → dist}/ice/cpp/src/IceDiscovery/LocatorI.h +0 -0
  841. /data/{ext → dist}/ice/cpp/src/IceDiscovery/LookupI.cpp +0 -0
  842. /data/{ext → dist}/ice/cpp/src/IceDiscovery/LookupI.h +0 -0
  843. /data/{ext → dist}/ice/cpp/src/IceDiscovery/PluginI.cpp +0 -0
  844. /data/{ext → dist}/ice/cpp/src/IceDiscovery/PluginI.h +0 -0
  845. /data/{ext → dist}/ice/cpp/src/IceLocatorDiscovery/Plugin.h +0 -0
  846. /data/{ext → dist}/ice/cpp/src/IceLocatorDiscovery/PluginI.cpp +0 -0
  847. /data/{ext → dist}/ice/cpp/src/IceSSL/CertificateI.cpp +0 -0
  848. /data/{ext → dist}/ice/cpp/src/IceSSL/CertificateI.h +0 -0
  849. /data/{ext → dist}/ice/cpp/src/IceSSL/ConnectorI.cpp +0 -0
  850. /data/{ext → dist}/ice/cpp/src/IceSSL/ConnectorI.h +0 -0
  851. /data/{ext → dist}/ice/cpp/src/IceSSL/EndpointI.cpp +0 -0
  852. /data/{ext → dist}/ice/cpp/src/IceSSL/EndpointI.h +0 -0
  853. /data/{ext → dist}/ice/cpp/src/IceSSL/Instance.cpp +0 -0
  854. /data/{ext → dist}/ice/cpp/src/IceSSL/Instance.h +0 -0
  855. /data/{ext → dist}/ice/cpp/src/IceSSL/InstanceF.h +0 -0
  856. /data/{ext → dist}/ice/cpp/src/IceSSL/OpenSSLCertificateI.cpp +0 -0
  857. /data/{ext → dist}/ice/cpp/src/IceSSL/OpenSSLEngine.cpp +0 -0
  858. /data/{ext → dist}/ice/cpp/src/IceSSL/OpenSSLEngine.h +0 -0
  859. /data/{ext → dist}/ice/cpp/src/IceSSL/OpenSSLEngineF.h +0 -0
  860. /data/{ext → dist}/ice/cpp/src/IceSSL/OpenSSLPluginI.cpp +0 -0
  861. /data/{ext → dist}/ice/cpp/src/IceSSL/OpenSSLTransceiverI.h +0 -0
  862. /data/{ext → dist}/ice/cpp/src/IceSSL/OpenSSLUtil.cpp +0 -0
  863. /data/{ext → dist}/ice/cpp/src/IceSSL/OpenSSLUtil.h +0 -0
  864. /data/{ext → dist}/ice/cpp/src/IceSSL/PluginI.h +0 -0
  865. /data/{ext → dist}/ice/cpp/src/IceSSL/RFC2253.cpp +0 -0
  866. /data/{ext → dist}/ice/cpp/src/IceSSL/RFC2253.h +0 -0
  867. /data/{ext → dist}/ice/cpp/src/IceSSL/SChannelCertificateI.cpp +0 -0
  868. /data/{ext → dist}/ice/cpp/src/IceSSL/SChannelEngine.cpp +0 -0
  869. /data/{ext → dist}/ice/cpp/src/IceSSL/SChannelEngine.h +0 -0
  870. /data/{ext → dist}/ice/cpp/src/IceSSL/SChannelEngineF.h +0 -0
  871. /data/{ext → dist}/ice/cpp/src/IceSSL/SChannelPluginI.cpp +0 -0
  872. /data/{ext → dist}/ice/cpp/src/IceSSL/SChannelTransceiverI.cpp +0 -0
  873. /data/{ext → dist}/ice/cpp/src/IceSSL/SChannelTransceiverI.h +0 -0
  874. /data/{ext → dist}/ice/cpp/src/IceSSL/SSLEngine.cpp +0 -0
  875. /data/{ext → dist}/ice/cpp/src/IceSSL/SSLEngine.h +0 -0
  876. /data/{ext → dist}/ice/cpp/src/IceSSL/SSLEngineF.h +0 -0
  877. /data/{ext → dist}/ice/cpp/src/IceSSL/SecureTransportCertificateI.cpp +0 -0
  878. /data/{ext → dist}/ice/cpp/src/IceSSL/SecureTransportEngine.cpp +0 -0
  879. /data/{ext → dist}/ice/cpp/src/IceSSL/SecureTransportEngine.h +0 -0
  880. /data/{ext → dist}/ice/cpp/src/IceSSL/SecureTransportEngineF.h +0 -0
  881. /data/{ext → dist}/ice/cpp/src/IceSSL/SecureTransportPluginI.cpp +0 -0
  882. /data/{ext → dist}/ice/cpp/src/IceSSL/SecureTransportTransceiverI.h +0 -0
  883. /data/{ext → dist}/ice/cpp/src/IceSSL/SecureTransportUtil.h +0 -0
  884. /data/{ext → dist}/ice/cpp/src/IceSSL/TrustManager.cpp +0 -0
  885. /data/{ext → dist}/ice/cpp/src/IceSSL/TrustManager.h +0 -0
  886. /data/{ext → dist}/ice/cpp/src/IceSSL/TrustManagerF.h +0 -0
  887. /data/{ext → dist}/ice/cpp/src/IceSSL/Util.h +0 -0
  888. /data/{ext → dist}/ice/cpp/src/IceUtil/ConvertUTF.cpp +0 -0
  889. /data/{ext → dist}/ice/cpp/src/IceUtil/ConvertUTF.h +0 -0
  890. /data/{ext → dist}/ice/cpp/src/IceUtil/CtrlCHandler.cpp +0 -0
  891. /data/{ext → dist}/ice/cpp/src/IceUtil/InputUtil.cpp +0 -0
  892. /data/{ext → dist}/ice/cpp/src/IceUtil/MutexProtocol.cpp +0 -0
  893. /data/{ext → dist}/ice/cpp/src/IceUtil/Options.cpp +0 -0
  894. /data/{ext → dist}/ice/cpp/src/IceUtil/OutputUtil.cpp +0 -0
  895. /data/{ext → dist}/ice/cpp/src/IceUtil/Random.cpp +0 -0
  896. /data/{ext → dist}/ice/cpp/src/IceUtil/Shared.cpp +0 -0
  897. /data/{ext → dist}/ice/cpp/src/IceUtil/ThreadException.cpp +0 -0
  898. /data/{ext → dist}/ice/cpp/src/IceUtil/Time.cpp +0 -0
  899. /data/{ext → dist}/ice/cpp/src/IceUtil/Unicode.cpp +0 -0
  900. /data/{ext → dist}/ice/cpp/src/IceUtil/Unicode.h +0 -0
  901. /data/{ext → dist}/ice/cpp/src/Slice/CPlusPlusUtil.cpp +0 -0
  902. /data/{ext → dist}/ice/cpp/src/Slice/CPlusPlusUtil.h +0 -0
  903. /data/{ext → dist}/ice/cpp/src/Slice/Checksum.cpp +0 -0
  904. /data/{ext → dist}/ice/cpp/src/Slice/Checksum.h +0 -0
  905. /data/{ext → dist}/ice/cpp/src/Slice/FileTracker.cpp +0 -0
  906. /data/{ext → dist}/ice/cpp/src/Slice/FileTracker.h +0 -0
  907. /data/{ext → dist}/ice/cpp/src/Slice/Grammar.cpp +0 -0
  908. /data/{ext → dist}/ice/cpp/src/Slice/Grammar.h +0 -0
  909. /data/{ext → dist}/ice/cpp/src/Slice/GrammarUtil.h +0 -0
  910. /data/{ext → dist}/ice/cpp/src/Slice/MD5.cpp +0 -0
  911. /data/{ext → dist}/ice/cpp/src/Slice/MD5.h +0 -0
  912. /data/{ext → dist}/ice/cpp/src/Slice/MD5I.cpp +0 -0
  913. /data/{ext → dist}/ice/cpp/src/Slice/MD5I.h +0 -0
  914. /data/{ext → dist}/ice/cpp/src/Slice/PHPUtil.cpp +0 -0
  915. /data/{ext → dist}/ice/cpp/src/Slice/PHPUtil.h +0 -0
  916. /data/{ext → dist}/ice/cpp/src/Slice/Parser.cpp +0 -0
  917. /data/{ext → dist}/ice/cpp/src/Slice/Parser.h +0 -0
  918. /data/{ext → dist}/ice/cpp/src/Slice/Preprocessor.cpp +0 -0
  919. /data/{ext → dist}/ice/cpp/src/Slice/Preprocessor.h +0 -0
  920. /data/{ext → dist}/ice/cpp/src/Slice/Python.cpp +0 -0
  921. /data/{ext → dist}/ice/cpp/src/Slice/PythonUtil.cpp +0 -0
  922. /data/{ext → dist}/ice/cpp/src/Slice/PythonUtil.h +0 -0
  923. /data/{ext → dist}/ice/cpp/src/Slice/Ruby.cpp +0 -0
  924. /data/{ext → dist}/ice/cpp/src/Slice/RubyUtil.cpp +0 -0
  925. /data/{ext → dist}/ice/cpp/src/Slice/RubyUtil.h +0 -0
  926. /data/{ext → dist}/ice/cpp/src/Slice/Scanner.cpp +0 -0
  927. /data/{ext → dist}/ice/cpp/src/Slice/SliceUtil.cpp +0 -0
  928. /data/{ext → dist}/ice/cpp/src/Slice/StringLiteralUtil.cpp +0 -0
  929. /data/{ext → dist}/ice/cpp/src/Slice/Util.h +0 -0
  930. /data/{ext → dist}/ice/mcpp/config.h +0 -0
  931. /data/{ext → dist}/ice/mcpp/configed.H +0 -0
  932. /data/{ext → dist}/ice/mcpp/eval.c +0 -0
  933. /data/{ext → dist}/ice/mcpp/expand.c +0 -0
  934. /data/{ext → dist}/ice/mcpp/mbchar.c +0 -0
  935. /data/{ext → dist}/ice/mcpp/mcpp_lib.h +0 -0
  936. /data/{ext → dist}/ice/mcpp/mcpp_out.h +0 -0
  937. /data/{ext → dist}/ice/mcpp/system.H +0 -0
  938. /data/{slice → dist/ice/slice}/Glacier2/Metrics.ice +0 -0
  939. /data/{slice → dist/ice/slice}/Glacier2/PermissionsVerifier.ice +0 -0
  940. /data/{slice → dist/ice/slice}/Glacier2/PermissionsVerifierF.ice +0 -0
  941. /data/{slice → dist/ice/slice}/Glacier2/Router.ice +0 -0
  942. /data/{slice → dist/ice/slice}/Glacier2/RouterF.ice +0 -0
  943. /data/{slice → dist/ice/slice}/Glacier2/SSLInfo.ice +0 -0
  944. /data/{slice → dist/ice/slice}/Glacier2/Session.ice +0 -0
  945. /data/{slice → dist/ice/slice}/Ice/BuiltinSequences.ice +0 -0
  946. /data/{slice → dist/ice/slice}/Ice/Communicator.ice +0 -0
  947. /data/{slice → dist/ice/slice}/Ice/CommunicatorF.ice +0 -0
  948. /data/{slice → dist/ice/slice}/Ice/ConnectionF.ice +0 -0
  949. /data/{slice → dist/ice/slice}/Ice/Endpoint.ice +0 -0
  950. /data/{slice → dist/ice/slice}/Ice/EndpointF.ice +0 -0
  951. /data/{slice → dist/ice/slice}/Ice/EndpointTypes.ice +0 -0
  952. /data/{slice → dist/ice/slice}/Ice/FacetMap.ice +0 -0
  953. /data/{slice → dist/ice/slice}/Ice/Identity.ice +0 -0
  954. /data/{slice → dist/ice/slice}/Ice/ImplicitContext.ice +0 -0
  955. /data/{slice → dist/ice/slice}/Ice/ImplicitContextF.ice +0 -0
  956. /data/{slice → dist/ice/slice}/Ice/Instrumentation.ice +0 -0
  957. /data/{slice → dist/ice/slice}/Ice/InstrumentationF.ice +0 -0
  958. /data/{slice → dist/ice/slice}/Ice/LocalException.ice +0 -0
  959. /data/{slice → dist/ice/slice}/Ice/LocatorF.ice +0 -0
  960. /data/{slice → dist/ice/slice}/Ice/Logger.ice +0 -0
  961. /data/{slice → dist/ice/slice}/Ice/LoggerF.ice +0 -0
  962. /data/{slice → dist/ice/slice}/Ice/ObjectAdapterF.ice +0 -0
  963. /data/{slice → dist/ice/slice}/Ice/ObjectFactory.ice +0 -0
  964. /data/{slice → dist/ice/slice}/Ice/Plugin.ice +0 -0
  965. /data/{slice → dist/ice/slice}/Ice/PluginF.ice +0 -0
  966. /data/{slice → dist/ice/slice}/Ice/Process.ice +0 -0
  967. /data/{slice → dist/ice/slice}/Ice/ProcessF.ice +0 -0
  968. /data/{slice → dist/ice/slice}/Ice/PropertiesAdmin.ice +0 -0
  969. /data/{slice → dist/ice/slice}/Ice/PropertiesF.ice +0 -0
  970. /data/{slice → dist/ice/slice}/Ice/RemoteLogger.ice +0 -0
  971. /data/{slice → dist/ice/slice}/Ice/RouterF.ice +0 -0
  972. /data/{slice → dist/ice/slice}/Ice/ServantLocator.ice +0 -0
  973. /data/{slice → dist/ice/slice}/Ice/ServantLocatorF.ice +0 -0
  974. /data/{slice → dist/ice/slice}/Ice/SliceChecksumDict.ice +0 -0
  975. /data/{slice → dist/ice/slice}/Ice/ValueFactory.ice +0 -0
  976. /data/{slice → dist/ice/slice}/Ice/Version.ice +0 -0
  977. /data/{slice → dist/ice/slice}/IceBox/IceBox.ice +0 -0
  978. /data/{slice → dist/ice/slice}/IceGrid/Admin.ice +0 -0
  979. /data/{slice → dist/ice/slice}/IceGrid/Descriptor.ice +0 -0
  980. /data/{slice → dist/ice/slice}/IceGrid/Exception.ice +0 -0
  981. /data/{slice → dist/ice/slice}/IceGrid/FileParser.ice +0 -0
  982. /data/{slice → dist/ice/slice}/IceGrid/Registry.ice +0 -0
  983. /data/{slice → dist/ice/slice}/IceGrid/Session.ice +0 -0
  984. /data/{slice → dist/ice/slice}/IceGrid/UserAccountMapper.ice +0 -0
  985. /data/{slice → dist/ice/slice}/IcePatch2/FileInfo.ice +0 -0
  986. /data/{slice → dist/ice/slice}/IcePatch2/FileServer.ice +0 -0
  987. /data/{slice → dist/ice/slice}/IceStorm/Metrics.ice +0 -0
  988. /data/{lib → dist/lib}/Glacier2.rb +0 -0
  989. /data/{lib → dist/lib}/Ice.rb +0 -0
  990. /data/{lib → dist/lib}/IceBox.rb +0 -0
  991. /data/{lib → dist/lib}/IceGrid.rb +0 -0
  992. /data/{lib → dist/lib}/IcePatch2.rb +0 -0
  993. /data/{lib → dist/lib}/IceStorm.rb +0 -0
  994. /data/{bin → scripts}/slice2rb +0 -0
@@ -0,0 +1,2249 @@
1
+ //
2
+ // Copyright (c) ZeroC, Inc. All rights reserved.
3
+ //
4
+
5
+ //
6
+ // The following is required on HP-UX in order to bring in
7
+ // the definition for the ip_mreq structure.
8
+ //
9
+ #if defined(__hpux)
10
+ # undef _XOPEN_SOURCE_EXTENDED
11
+ # define _XOPEN_SOURCE
12
+ # include <netinet/in.h>
13
+ #endif
14
+
15
+ #include <IceUtil/DisableWarnings.h>
16
+ #include <Ice/Network.h>
17
+ #include <Ice/NetworkProxy.h>
18
+ #include <IceUtil/StringUtil.h>
19
+ #include <Ice/StringConverter.h>
20
+ #include <Ice/LocalException.h>
21
+ #include <Ice/ProtocolInstance.h> // For setTcpBufSize
22
+ #include <Ice/Properties.h> // For setTcpBufSize
23
+ #include <Ice/LoggerUtil.h> // For setTcpBufSize
24
+ #include <Ice/Buffer.h>
25
+ #include <IceUtil/Random.h>
26
+ #include <functional>
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
+ #if defined(_WIN32)
34
+ # include <winsock2.h>
35
+ # include <ws2tcpip.h>
36
+ # ifdef __MINGW32__
37
+ # include <wincrypt.h>
38
+ # endif
39
+ # include <iphlpapi.h>
40
+ # include <Mswsock.h>
41
+ # include <mstcpip.h>
42
+ #else
43
+ # include <net/if.h>
44
+ # include <sys/ioctl.h>
45
+ #endif
46
+
47
+ #if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__)
48
+ # include <ifaddrs.h>
49
+ #elif defined(__sun)
50
+ # include <sys/sockio.h>
51
+ #endif
52
+
53
+ #if defined(__GNUC__) && (__GNUC__ < 5)
54
+ # pragma GCC diagnostic ignored "-Wmissing-field-initializers"
55
+ #endif
56
+
57
+ #if defined(__MINGW32__)
58
+ //
59
+ // Work-around for missing definitions in MinGW Windows headers
60
+ //
61
+ # ifndef IPV6_V6ONLY
62
+ # define IPV6_V6ONLY 27
63
+ # endif
64
+
65
+ extern "C"
66
+ {
67
+ WINSOCK_API_LINKAGE int WSAAPI inet_pton(INT, PCTSTR, PVOID);
68
+ }
69
+ #endif
70
+
71
+ using namespace std;
72
+ using namespace Ice;
73
+ using namespace IceInternal;
74
+
75
+ #ifdef _WIN32
76
+ int
77
+ IceInternal::getSystemErrno()
78
+ {
79
+ return GetLastError();
80
+ }
81
+ #else
82
+ int
83
+ IceInternal::getSystemErrno()
84
+ {
85
+ return errno;
86
+ }
87
+ #endif
88
+
89
+ namespace
90
+ {
91
+
92
+ struct AddressCompare
93
+ {
94
+ public:
95
+
96
+ bool
97
+ operator()(const Address& lhs, const Address& rhs) const
98
+ {
99
+ return compareAddress(lhs, rhs) < 0;
100
+ }
101
+ };
102
+
103
+ #ifndef ICE_CPP11_COMPILER
104
+
105
+ struct AddressIsIPv6 : public unary_function<Address, bool>
106
+ {
107
+ public:
108
+
109
+ bool
110
+ operator()(const Address& ss) const
111
+ {
112
+ return ss.saStorage.ss_family == AF_INET6;
113
+ }
114
+ };
115
+ #endif
116
+
117
+ void
118
+ sortAddresses(vector<Address>& addrs, ProtocolSupport protocol, Ice::EndpointSelectionType selType, bool preferIPv6)
119
+ {
120
+ if(selType == Ice::ICE_ENUM(EndpointSelectionType, Random))
121
+ {
122
+ IceUtilInternal::shuffle(addrs.begin(), addrs.end());
123
+ }
124
+
125
+ if(protocol == EnableBoth)
126
+ {
127
+ #ifdef ICE_CPP11_COMPILER
128
+ if(preferIPv6)
129
+ {
130
+ stable_partition(addrs.begin(), addrs.end(),
131
+ [](const Address& ss)
132
+ {
133
+ return ss.saStorage.ss_family == AF_INET6;
134
+ });
135
+ }
136
+ else
137
+ {
138
+ stable_partition(addrs.begin(), addrs.end(),
139
+ [](const Address& ss)
140
+ {
141
+ return ss.saStorage.ss_family != AF_INET6;
142
+ });
143
+ }
144
+ #else
145
+ if(preferIPv6)
146
+ {
147
+ stable_partition(addrs.begin(), addrs.end(), AddressIsIPv6());
148
+ }
149
+ else
150
+ {
151
+ stable_partition(addrs.begin(), addrs.end(), not1(AddressIsIPv6()));
152
+ }
153
+ #endif
154
+ }
155
+ }
156
+
157
+ void
158
+ setTcpNoDelay(SOCKET fd)
159
+ {
160
+ int flag = 1;
161
+ if(setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, reinterpret_cast<char*>(&flag), int(sizeof(int))) == SOCKET_ERROR)
162
+ {
163
+ closeSocketNoThrow(fd);
164
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
165
+ }
166
+ }
167
+
168
+ void
169
+ setKeepAlive(SOCKET fd)
170
+ {
171
+ int flag = 1;
172
+ if(setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, reinterpret_cast<char*>(&flag), int(sizeof(int))) == SOCKET_ERROR)
173
+ {
174
+ closeSocketNoThrow(fd);
175
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
176
+ }
177
+ }
178
+
179
+ SOCKET
180
+ createSocketImpl(bool udp, int family)
181
+ {
182
+ SOCKET fd;
183
+ if(udp)
184
+ {
185
+ fd = socket(family, SOCK_DGRAM, IPPROTO_UDP);
186
+ }
187
+ else
188
+ {
189
+ fd = socket(family, SOCK_STREAM, IPPROTO_TCP);
190
+ }
191
+
192
+ if(fd == INVALID_SOCKET)
193
+ {
194
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
195
+ }
196
+
197
+ if(!udp)
198
+ {
199
+ setTcpNoDelay(fd);
200
+ setKeepAlive(fd);
201
+ }
202
+
203
+ return fd;
204
+ }
205
+
206
+ vector<Address>
207
+ getLocalAddresses(ProtocolSupport protocol, bool includeLoopback, bool singleAddressPerInterface)
208
+ {
209
+ vector<Address> result;
210
+
211
+ #if defined(_WIN32)
212
+ DWORD family;
213
+ switch(protocol)
214
+ {
215
+ case EnableIPv4:
216
+ family = AF_INET;
217
+ break;
218
+ case EnableIPv6:
219
+ family = AF_INET6;
220
+ break;
221
+ default:
222
+ family = AF_UNSPEC;
223
+ break;
224
+ }
225
+
226
+ DWORD size = 0;
227
+ DWORD rv = GetAdaptersAddresses(family, 0, ICE_NULLPTR, ICE_NULLPTR, &size);
228
+ if(rv == ERROR_BUFFER_OVERFLOW)
229
+ {
230
+ PIP_ADAPTER_ADDRESSES adapter_addresses = (PIP_ADAPTER_ADDRESSES) malloc(size);
231
+ rv = GetAdaptersAddresses(family, 0, ICE_NULLPTR, adapter_addresses, &size);
232
+ if(rv == ERROR_SUCCESS)
233
+ {
234
+ for(PIP_ADAPTER_ADDRESSES aa = adapter_addresses; aa != ICE_NULLPTR; aa = aa->Next)
235
+ {
236
+ if(aa->OperStatus != IfOperStatusUp)
237
+ {
238
+ continue;
239
+ }
240
+ for(PIP_ADAPTER_UNICAST_ADDRESS ua = aa->FirstUnicastAddress; ua != ICE_NULLPTR; ua = ua->Next)
241
+ {
242
+ Address addr;
243
+ memcpy(&addr.saStorage, ua->Address.lpSockaddr, ua->Address.iSockaddrLength);
244
+ if(addr.saStorage.ss_family == AF_INET && protocol != EnableIPv6)
245
+ {
246
+ if(addr.saIn.sin_addr.s_addr != 0 &&
247
+ (includeLoopback || addr.saIn.sin_addr.s_addr != htonl(INADDR_LOOPBACK)))
248
+ {
249
+ result.push_back(addr);
250
+ if(singleAddressPerInterface)
251
+ {
252
+ break; // One address is enough for each interface.
253
+ }
254
+ }
255
+ }
256
+ else if(addr.saStorage.ss_family == AF_INET6 && protocol != EnableIPv4)
257
+ {
258
+ if(!IN6_IS_ADDR_UNSPECIFIED(&addr.saIn6.sin6_addr) &&
259
+ (includeLoopback || !IN6_IS_ADDR_LOOPBACK(&addr.saIn6.sin6_addr)))
260
+ {
261
+ result.push_back(addr);
262
+ if(singleAddressPerInterface)
263
+ {
264
+ break; // One address is enough for each interface.
265
+ }
266
+ }
267
+ }
268
+ }
269
+ }
270
+ }
271
+
272
+ free(adapter_addresses);
273
+ }
274
+ #elif defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__)
275
+ struct ifaddrs* ifap;
276
+ if(::getifaddrs(&ifap) == SOCKET_ERROR)
277
+ {
278
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
279
+ }
280
+
281
+ struct ifaddrs* curr = ifap;
282
+ set<string> interfaces;
283
+ while(curr != 0)
284
+ {
285
+ if(curr->ifa_addr && (includeLoopback || !(curr->ifa_flags & IFF_LOOPBACK)))
286
+ {
287
+ if(curr->ifa_addr->sa_family == AF_INET && protocol != EnableIPv6)
288
+ {
289
+ Address addr;
290
+ memcpy(&addr.saStorage, curr->ifa_addr, sizeof(sockaddr_in));
291
+ if(addr.saIn.sin_addr.s_addr != 0)
292
+ {
293
+ if(!singleAddressPerInterface || interfaces.find(curr->ifa_name) == interfaces.end())
294
+ {
295
+ result.push_back(addr);
296
+ interfaces.insert(curr->ifa_name);
297
+ }
298
+ }
299
+ }
300
+ else if(curr->ifa_addr->sa_family == AF_INET6 && protocol != EnableIPv4)
301
+ {
302
+ Address addr;
303
+ memcpy(&addr.saStorage, curr->ifa_addr, sizeof(sockaddr_in6));
304
+ if(!IN6_IS_ADDR_UNSPECIFIED(&addr.saIn6.sin6_addr))
305
+ {
306
+ if(!singleAddressPerInterface || interfaces.find(curr->ifa_name) == interfaces.end())
307
+ {
308
+ result.push_back(addr);
309
+ interfaces.insert(curr->ifa_name);
310
+ }
311
+ }
312
+ }
313
+ }
314
+
315
+ curr = curr->ifa_next;
316
+ }
317
+
318
+ ::freeifaddrs(ifap);
319
+ #else
320
+ for(int i = 0; i < 2; i++)
321
+ {
322
+ if((i == 0 && protocol == EnableIPv6) || (i == 1 && protocol == EnableIPv4))
323
+ {
324
+ continue;
325
+ }
326
+ SOCKET fd = createSocketImpl(false, i == 0 ? AF_INET : AF_INET6);
327
+
328
+ #ifdef _AIX
329
+ int cmd = CSIOCGIFCONF;
330
+ #else
331
+ int cmd = SIOCGIFCONF;
332
+ #endif
333
+ struct ifconf ifc;
334
+ int numaddrs = 10;
335
+ int old_ifc_len = 0;
336
+
337
+ //
338
+ // Need to call ioctl multiple times since we do not know up front
339
+ // how many addresses there will be, and thus how large a buffer we need.
340
+ // We keep increasing the buffer size until subsequent calls return
341
+ // the same length, meaning we have all the addresses.
342
+ //
343
+ while(true)
344
+ {
345
+ int bufsize = numaddrs * static_cast<int>(sizeof(struct ifreq));
346
+ ifc.ifc_len = bufsize;
347
+ ifc.ifc_buf = (char*)malloc(bufsize);
348
+
349
+ int rs = ioctl(fd, cmd, &ifc);
350
+ if(rs == SOCKET_ERROR)
351
+ {
352
+ free(ifc.ifc_buf);
353
+ closeSocketNoThrow(fd);
354
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
355
+ }
356
+ else if(ifc.ifc_len == old_ifc_len)
357
+ {
358
+ //
359
+ // Returned same length twice in a row, finished.
360
+ //
361
+ break;
362
+ }
363
+ else
364
+ {
365
+ old_ifc_len = ifc.ifc_len;
366
+ }
367
+
368
+ numaddrs += 10;
369
+ free(ifc.ifc_buf);
370
+ }
371
+ closeSocket(fd);
372
+
373
+ numaddrs = ifc.ifc_len / static_cast<int>(sizeof(struct ifreq));
374
+ struct ifreq* ifr = ifc.ifc_req;
375
+ set<string> interfaces;
376
+ for(int j = 0; j < numaddrs; ++j)
377
+ {
378
+ if(!(ifr[j].ifr_flags & IFF_LOOPBACK)) // Don't include loopback interface addresses
379
+ {
380
+ //
381
+ // On Solaris the above Loopback check does not always work so we double
382
+ // check the address below. Solaris also returns duplicate entries that need
383
+ // to be filtered out.
384
+ //
385
+ if(ifr[j].ifr_addr.sa_family == AF_INET && protocol != EnableIPv6)
386
+ {
387
+ Address addr;
388
+ memcpy(&addr.saStorage, &ifr[j].ifr_addr, sizeof(sockaddr_in));
389
+ if(addr.saIn.sin_addr.s_addr != 0 &&
390
+ (includeLoopback || addr.saIn.sin_addr.s_addr != htonl(INADDR_LOOPBACK)))
391
+ {
392
+ if(!singleAddressPerInterface || interfaces.find(ifr[j].ifr_name) == interfaces.end())
393
+ {
394
+ result.push_back(addr);
395
+ interfaces.insert(ifr[j].ifr_name);
396
+ }
397
+ }
398
+ }
399
+ else if(ifr[j].ifr_addr.sa_family == AF_INET6 && protocol != EnableIPv4)
400
+ {
401
+ Address addr;
402
+ memcpy(&addr.saStorage, &ifr[j].ifr_addr, sizeof(sockaddr_in6));
403
+ if(!IN6_IS_ADDR_UNSPECIFIED(&addr.saIn6.sin6_addr) &&
404
+ (includeLoopback || !IN6_IS_ADDR_LOOPBACK(&addr.saIn6.sin6_addr)))
405
+ {
406
+ if(!singleAddressPerInterface || interfaces.find(ifr[j].ifr_name) == interfaces.end())
407
+ {
408
+ result.push_back(addr);
409
+ interfaces.insert(ifr[j].ifr_name);
410
+ }
411
+ }
412
+ }
413
+ }
414
+ }
415
+ free(ifc.ifc_buf);
416
+ }
417
+ #endif
418
+
419
+ //
420
+ // Remove potential duplicates from the result.
421
+ //
422
+ set<Address, AddressCompare> seen;
423
+ vector<Address> tmp;
424
+ tmp.swap(result);
425
+ for(vector<Address>::const_iterator p = tmp.begin(); p != tmp.end(); ++p)
426
+ {
427
+ if(seen.find(*p) == seen.end())
428
+ {
429
+ result.push_back(*p);
430
+ seen.insert(*p);
431
+ }
432
+ }
433
+ return result;
434
+ }
435
+
436
+ bool
437
+ isLinklocal(const Address& addr)
438
+ {
439
+ if(addr.saStorage.ss_family == AF_INET6)
440
+ {
441
+ return IN6_IS_ADDR_LINKLOCAL(&addr.saIn6.sin6_addr);
442
+ }
443
+ else if(addr.saStorage.ss_family == AF_INET)
444
+ {
445
+ // Check for 169.254.X.X in network order
446
+ return (addr.saIn.sin_addr.s_addr & 0xFF) == 169 && ((addr.saIn.sin_addr.s_addr & 0xFF00)>>8) == 254;
447
+ }
448
+ return false;
449
+ }
450
+
451
+ bool
452
+ isWildcard(const string& host, ProtocolSupport protocol, bool& ipv4)
453
+ {
454
+ Address addr = getAddressForServer(host, 0, protocol, true, false);
455
+ if(addr.saStorage.ss_family == AF_INET)
456
+ {
457
+ if(addr.saIn.sin_addr.s_addr == INADDR_ANY)
458
+ {
459
+ ipv4 = true;
460
+ return true;
461
+ }
462
+ }
463
+ else if(addr.saStorage.ss_family == AF_INET6)
464
+ {
465
+ if(IN6_IS_ADDR_UNSPECIFIED(&addr.saIn6.sin6_addr))
466
+ {
467
+ ipv4 = false;
468
+ return true;
469
+ }
470
+ }
471
+ return false;
472
+ }
473
+
474
+ int
475
+ getInterfaceIndex(const string& intf)
476
+ {
477
+ if(intf.empty())
478
+ {
479
+ return 0;
480
+ }
481
+
482
+ string name;
483
+ bool isAddr;
484
+ in6_addr addr;
485
+ string::size_type pos = intf.find("%");
486
+ if(pos != string::npos)
487
+ {
488
+ //
489
+ // If it's a link-local address, use the zone indice.
490
+ //
491
+ isAddr = false;
492
+ name = intf.substr(pos + 1);
493
+ }
494
+ else
495
+ {
496
+ //
497
+ // Then check if it's an IPv6 address. If it's an address we'll
498
+ // look for the interface index by address.
499
+ //
500
+ isAddr = inet_pton(AF_INET6, intf.c_str(), &addr) > 0;
501
+ name = intf;
502
+ }
503
+
504
+ //
505
+ // Check if index
506
+ //
507
+ int index = -1;
508
+ istringstream p(name);
509
+ if((p >> index) && p.eof())
510
+ {
511
+ return index;
512
+ }
513
+
514
+ #ifdef _WIN32
515
+ IP_ADAPTER_ADDRESSES addrs;
516
+ ULONG buflen = 0;
517
+ if(::GetAdaptersAddresses(AF_INET6, 0, 0, &addrs, &buflen) == ERROR_BUFFER_OVERFLOW)
518
+ {
519
+ PIP_ADAPTER_ADDRESSES paddrs;
520
+ char* buf = new char[buflen];
521
+ paddrs = reinterpret_cast<PIP_ADAPTER_ADDRESSES>(buf);
522
+ if(::GetAdaptersAddresses(AF_INET6, 0, 0, paddrs, &buflen) == NO_ERROR)
523
+ {
524
+ while(paddrs)
525
+ {
526
+ if(isAddr)
527
+ {
528
+ PIP_ADAPTER_UNICAST_ADDRESS ipAddr = paddrs->FirstUnicastAddress;
529
+ while(ipAddr)
530
+ {
531
+ if(ipAddr->Address.lpSockaddr->sa_family == AF_INET6)
532
+ {
533
+ struct sockaddr_in6* ipv6Addr =
534
+ reinterpret_cast<struct sockaddr_in6*>(ipAddr->Address.lpSockaddr);
535
+ if(memcmp(&addr, &ipv6Addr->sin6_addr, sizeof(in6_addr)) == 0)
536
+ {
537
+ break;
538
+ }
539
+ }
540
+ ipAddr = ipAddr->Next;
541
+ }
542
+ if(ipAddr)
543
+ {
544
+ index = paddrs->Ipv6IfIndex;
545
+ break;
546
+ }
547
+ }
548
+ else
549
+ {
550
+ //
551
+ // Don't need to pass a wide string converter as the wide string
552
+ // come from Windows API.
553
+ //
554
+ if(wstringToString(paddrs->FriendlyName, getProcessStringConverter()) == name)
555
+ {
556
+ index = paddrs->Ipv6IfIndex;
557
+ break;
558
+ }
559
+ }
560
+ paddrs = paddrs->Next;
561
+ }
562
+ }
563
+ delete[] buf;
564
+ }
565
+ if(index < 0) // interface not found
566
+ {
567
+ throw Ice::SocketException(__FILE__, __LINE__, WSAEINVAL);
568
+ }
569
+ #elif !defined(__hpux)
570
+
571
+ //
572
+ // Look for an interface with a matching IP address
573
+ //
574
+ if(isAddr)
575
+ {
576
+ # if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__)
577
+ struct ifaddrs* ifap;
578
+ if(::getifaddrs(&ifap) != SOCKET_ERROR)
579
+ {
580
+ struct ifaddrs* curr = ifap;
581
+ while(curr != 0)
582
+ {
583
+ if(curr->ifa_addr && curr->ifa_addr->sa_family == AF_INET6)
584
+ {
585
+ struct sockaddr_in6* ipv6Addr = reinterpret_cast<struct sockaddr_in6*>(curr->ifa_addr);
586
+ if(memcmp(&addr, &ipv6Addr->sin6_addr, sizeof(in6_addr)) == 0)
587
+ {
588
+ index = static_cast<int>(if_nametoindex(curr->ifa_name));
589
+ break;
590
+ }
591
+ }
592
+ curr = curr->ifa_next;
593
+ }
594
+ ::freeifaddrs(ifap);
595
+ }
596
+ # else
597
+ SOCKET fd = createSocketImpl(false, AF_INET6);
598
+ # ifdef _AIX
599
+ int cmd = CSIOCGIFCONF;
600
+ # else
601
+ int cmd = SIOCGIFCONF;
602
+ # endif
603
+ struct ifconf ifc;
604
+ int numaddrs = 10;
605
+ int old_ifc_len = 0;
606
+
607
+ //
608
+ // Need to call ioctl multiple times since we do not know up front
609
+ // how many addresses there will be, and thus how large a buffer we need.
610
+ // We keep increasing the buffer size until subsequent calls return
611
+ // the same length, meaning we have all the addresses.
612
+ //
613
+ while(true)
614
+ {
615
+ int bufsize = numaddrs * static_cast<int>(sizeof(struct ifreq));
616
+ ifc.ifc_len = bufsize;
617
+ ifc.ifc_buf = (char*)malloc(bufsize);
618
+
619
+ int rs = ioctl(fd, cmd, &ifc);
620
+ if(rs == SOCKET_ERROR)
621
+ {
622
+ free(ifc.ifc_buf);
623
+ ifc.ifc_buf = 0;
624
+ break;
625
+ }
626
+ else if(ifc.ifc_len == old_ifc_len)
627
+ {
628
+ //
629
+ // Returned same length twice in a row, finished.
630
+ //
631
+ break;
632
+ }
633
+ else
634
+ {
635
+ old_ifc_len = ifc.ifc_len;
636
+ }
637
+ numaddrs += 10;
638
+ free(ifc.ifc_buf);
639
+ }
640
+ closeSocketNoThrow(fd);
641
+
642
+ if(ifc.ifc_buf)
643
+ {
644
+ numaddrs = ifc.ifc_len / static_cast<int>(sizeof(struct ifreq));
645
+ struct ifreq* ifr = ifc.ifc_req;
646
+ for(int i = 0; i < numaddrs; ++i)
647
+ {
648
+ if(ifr[i].ifr_addr.sa_family == AF_INET6)
649
+ {
650
+ struct sockaddr_in6* ipv6Addr = reinterpret_cast<struct sockaddr_in6*>(&ifr[i].ifr_addr);
651
+ if(memcmp(&addr, &ipv6Addr->sin6_addr, sizeof(in6_addr)) == 0)
652
+ {
653
+ index = static_cast<int>(if_nametoindex(ifr[i].ifr_name));
654
+ break;
655
+ }
656
+ }
657
+ }
658
+ free(ifc.ifc_buf);
659
+ }
660
+ # endif
661
+ }
662
+ else // Look for an interface with the given name.
663
+ {
664
+ index = static_cast<int>(if_nametoindex(name.c_str()));
665
+ }
666
+ if(index <= 0)
667
+ {
668
+ // index == 0 if if_nametoindex returned 0, < 0 if name wasn't found
669
+ throw Ice::SocketException(__FILE__, __LINE__, index == 0 ? getSocketErrno() : ENXIO);
670
+ }
671
+ #endif
672
+
673
+ return index;
674
+ }
675
+
676
+ struct in_addr
677
+ getInterfaceAddress(const string& name)
678
+ {
679
+ struct in_addr addr;
680
+ addr.s_addr = INADDR_ANY;
681
+ if(name.empty())
682
+ {
683
+ return addr;
684
+ }
685
+
686
+ if(inet_pton(AF_INET, name.c_str(), &addr) > 0)
687
+ {
688
+ return addr;
689
+ }
690
+
691
+ #ifdef _WIN32
692
+ IP_ADAPTER_ADDRESSES addrs;
693
+ ULONG buflen = 0;
694
+ if(::GetAdaptersAddresses(AF_INET, 0, 0, &addrs, &buflen) == ERROR_BUFFER_OVERFLOW)
695
+ {
696
+ PIP_ADAPTER_ADDRESSES paddrs;
697
+ char* buf = new char[buflen];
698
+ paddrs = reinterpret_cast<PIP_ADAPTER_ADDRESSES>(buf);
699
+ if(::GetAdaptersAddresses(AF_INET, 0, 0, paddrs, &buflen) == NO_ERROR)
700
+ {
701
+ while(paddrs)
702
+ {
703
+ //
704
+ // Don't need to pass a wide string converter as the wide string come
705
+ // from Windows API.
706
+ //
707
+ if(wstringToString(paddrs->FriendlyName, getProcessStringConverter()) == name)
708
+ {
709
+ struct sockaddr_in addrin;
710
+ memcpy(&addrin, paddrs->FirstUnicastAddress->Address.lpSockaddr,
711
+ paddrs->FirstUnicastAddress->Address.iSockaddrLength);
712
+ delete[] buf;
713
+ return addrin.sin_addr;
714
+ }
715
+ paddrs = paddrs->Next;
716
+ }
717
+ }
718
+ delete[] buf;
719
+ }
720
+ throw Ice::SocketException(__FILE__, __LINE__, WSAEINVAL);
721
+ #else
722
+ ifreq if_address;
723
+ strcpy(if_address.ifr_name, name.c_str());
724
+
725
+ SOCKET fd = createSocketImpl(false, AF_INET);
726
+ int rc = ioctl(fd, SIOCGIFADDR, &if_address);
727
+ closeSocketNoThrow(fd);
728
+ if(rc == SOCKET_ERROR)
729
+ {
730
+ throw Ice::SocketException(__FILE__, __LINE__, getSocketErrno());
731
+ }
732
+ return reinterpret_cast<struct sockaddr_in*>(&if_address.ifr_addr)->sin_addr;
733
+ #endif
734
+ }
735
+
736
+ int
737
+ getAddressStorageSize(const Address& addr)
738
+ {
739
+ int size = 0;
740
+ if(addr.saStorage.ss_family == AF_INET)
741
+ {
742
+ size = sizeof(sockaddr_in);
743
+ }
744
+ else if(addr.saStorage.ss_family == AF_INET6)
745
+ {
746
+ size = sizeof(sockaddr_in6);
747
+ }
748
+ return size;
749
+ }
750
+
751
+ vector<Address>
752
+ getLoopbackAddresses(ProtocolSupport protocol, int port = 0)
753
+ {
754
+ vector<Address> result;
755
+
756
+ Address addr;
757
+ memset(&addr.saStorage, 0, sizeof(sockaddr_storage));
758
+
759
+ //
760
+ // We don't use getaddrinfo when host is empty as it's not portable (some old Linux
761
+ // versions don't support it).
762
+ //
763
+ if(protocol != EnableIPv4)
764
+ {
765
+ addr.saIn6.sin6_family = AF_INET6;
766
+ addr.saIn6.sin6_port = htons(port);
767
+ addr.saIn6.sin6_addr = in6addr_loopback;
768
+ result.push_back(addr);
769
+ }
770
+ if(protocol != EnableIPv6)
771
+ {
772
+ addr.saIn.sin_family = AF_INET;
773
+ addr.saIn.sin_port = htons(port);
774
+ addr.saIn.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
775
+ result.push_back(addr);
776
+ }
777
+ return result;
778
+ }
779
+
780
+ }
781
+
782
+ ReadyCallback::~ReadyCallback()
783
+ {
784
+ // Out of line to avoid weak vtable
785
+ }
786
+
787
+ NativeInfo::~NativeInfo()
788
+ {
789
+ // Out of line to avoid weak vtable
790
+ }
791
+
792
+ void
793
+ NativeInfo::setReadyCallback(const ReadyCallbackPtr& callback)
794
+ {
795
+ _readyCallback = callback;
796
+ }
797
+
798
+ #ifdef ICE_USE_IOCP
799
+
800
+ IceInternal::AsyncInfo::AsyncInfo(SocketOperation s)
801
+ {
802
+ ZeroMemory(this, sizeof(AsyncInfo));
803
+ status = s;
804
+ }
805
+
806
+ void
807
+ IceInternal::NativeInfo::initialize(HANDLE handle, ULONG_PTR key)
808
+ {
809
+ _handle = handle;
810
+ _key = key;
811
+ }
812
+
813
+ void
814
+ IceInternal::NativeInfo::completed(SocketOperation operation)
815
+ {
816
+ if(!PostQueuedCompletionStatus(_handle, 0, _key, getAsyncInfo(operation)))
817
+ {
818
+ throw Ice::SocketException(__FILE__, __LINE__, GetLastError());
819
+ }
820
+ }
821
+
822
+ #else
823
+
824
+ void
825
+ IceInternal::NativeInfo::setNewFd(SOCKET fd)
826
+ {
827
+ assert(_fd == INVALID_SOCKET); // This can only be called once, when the current socket isn't set yet.
828
+ _newFd = fd;
829
+ }
830
+
831
+ bool
832
+ IceInternal::NativeInfo::newFd()
833
+ {
834
+ if(_newFd == INVALID_SOCKET)
835
+ {
836
+ return false;
837
+ }
838
+ assert(_fd == INVALID_SOCKET);
839
+ swap(_fd, _newFd);
840
+ return true;
841
+ }
842
+
843
+ #endif
844
+
845
+ bool
846
+ IceInternal::noMoreFds(int error)
847
+ {
848
+ #if defined(_WIN32)
849
+ return error == WSAEMFILE;
850
+ #else
851
+ return error == EMFILE || error == ENFILE;
852
+ #endif
853
+ }
854
+
855
+ string
856
+ IceInternal::errorToStringDNS(int error)
857
+ {
858
+ #if defined(_WIN32)
859
+ return IceUtilInternal::errorToString(error);
860
+ #else
861
+ return gai_strerror(error);
862
+ #endif
863
+ }
864
+
865
+ vector<Address>
866
+ IceInternal::getAddresses(const string& host, int port, ProtocolSupport protocol, Ice::EndpointSelectionType selType,
867
+ bool preferIPv6, bool canBlock)
868
+ {
869
+ vector<Address> result;
870
+
871
+ //
872
+ // We don't use getaddrinfo when host is empty as it's not portable (some old Linux
873
+ // versions don't support it).
874
+ //
875
+ if(host.empty())
876
+ {
877
+ result = getLoopbackAddresses(protocol, port);
878
+ sortAddresses(result, protocol, selType, preferIPv6);
879
+ return result;
880
+ }
881
+
882
+ Address addr;
883
+ memset(&addr.saStorage, 0, sizeof(sockaddr_storage));
884
+
885
+ struct addrinfo* info = 0;
886
+ int retry = 5;
887
+
888
+ struct addrinfo hints = {};
889
+ if(protocol == EnableIPv4)
890
+ {
891
+ hints.ai_family = PF_INET;
892
+ }
893
+ else if(protocol == EnableIPv6)
894
+ {
895
+ hints.ai_family = PF_INET6;
896
+ }
897
+ else
898
+ {
899
+ hints.ai_family = PF_UNSPEC;
900
+ }
901
+
902
+ if(!canBlock)
903
+ {
904
+ hints.ai_flags = AI_NUMERICHOST;
905
+ }
906
+
907
+ int rs = 0;
908
+ do
909
+ {
910
+ rs = getaddrinfo(host.c_str(), 0, &hints, &info);
911
+ }
912
+ while(info == 0 && rs == EAI_AGAIN && --retry >= 0);
913
+
914
+ // In theory, getaddrinfo should only return EAI_NONAME if
915
+ // AI_NUMERICHOST is specified and the host name is not a IP
916
+ // address. However on some platforms (e.g. macOS 10.4.x)
917
+ // EAI_NODATA is also returned so we also check for it.
918
+ #ifdef EAI_NODATA
919
+ if(!canBlock && (rs == EAI_NONAME || rs == EAI_NODATA))
920
+ #else
921
+ if(!canBlock && rs == EAI_NONAME)
922
+ #endif
923
+ {
924
+ return result; // Empty result indicates that a canBlock lookup is necessary.
925
+ }
926
+ else if(rs != 0)
927
+ {
928
+ throw DNSException(__FILE__, __LINE__, rs, host);
929
+ }
930
+
931
+ for(struct addrinfo* p = info; p != ICE_NULLPTR; p = p->ai_next)
932
+ {
933
+ memcpy(&addr.saStorage, p->ai_addr, p->ai_addrlen);
934
+ if(p->ai_family == PF_INET)
935
+ {
936
+ addr.saIn.sin_port = htons(port);
937
+ }
938
+ else if(p->ai_family == PF_INET6)
939
+ {
940
+ addr.saIn6.sin6_port = htons(port);
941
+ }
942
+
943
+ bool found = false;
944
+ for(unsigned int i = 0; i < result.size(); ++i)
945
+ {
946
+ if(compareAddress(result[i], addr) == 0)
947
+ {
948
+ found = true;
949
+ break;
950
+ }
951
+ }
952
+ if(!found)
953
+ {
954
+ result.push_back(addr);
955
+ }
956
+ }
957
+
958
+ freeaddrinfo(info);
959
+
960
+ if(result.empty())
961
+ {
962
+ throw DNSException(__FILE__, __LINE__, 0, host);
963
+ }
964
+ sortAddresses(result, protocol, selType, preferIPv6);
965
+ return result;
966
+ }
967
+
968
+ ProtocolSupport
969
+ IceInternal::getProtocolSupport(const Address& addr)
970
+ {
971
+ return addr.saStorage.ss_family == AF_INET ? EnableIPv4 : EnableIPv6;
972
+ }
973
+
974
+ Address
975
+ IceInternal::getAddressForServer(const string& host, int port, ProtocolSupport protocol, bool preferIPv6, bool canBlock)
976
+ {
977
+ //
978
+ // We don't use getaddrinfo when host is empty as it's not portable (some old Linux
979
+ // versions don't support it).
980
+ //
981
+ if(host.empty())
982
+ {
983
+ Address addr;
984
+ memset(&addr.saStorage, 0, sizeof(sockaddr_storage));
985
+ if(protocol != EnableIPv4)
986
+ {
987
+ addr.saIn6.sin6_family = AF_INET6;
988
+ addr.saIn6.sin6_port = htons(port);
989
+ addr.saIn6.sin6_addr = in6addr_any;
990
+ }
991
+ else
992
+ {
993
+ addr.saIn.sin_family = AF_INET;
994
+ addr.saIn.sin_port = htons(port);
995
+ addr.saIn.sin_addr.s_addr = htonl(INADDR_ANY);
996
+ }
997
+ return addr;
998
+ }
999
+ vector<Address> addrs = getAddresses(host, port, protocol, Ice::ICE_ENUM(EndpointSelectionType, Ordered),
1000
+ preferIPv6, canBlock);
1001
+ return addrs.empty() ? Address() : addrs[0];
1002
+ }
1003
+
1004
+ int
1005
+ IceInternal::compareAddress(const Address& addr1, const Address& addr2)
1006
+ {
1007
+ if(addr1.saStorage.ss_family < addr2.saStorage.ss_family)
1008
+ {
1009
+ return -1;
1010
+ }
1011
+ else if(addr2.saStorage.ss_family < addr1.saStorage.ss_family)
1012
+ {
1013
+ return 1;
1014
+ }
1015
+
1016
+ if(addr1.saStorage.ss_family == AF_INET)
1017
+ {
1018
+ if(addr1.saIn.sin_port < addr2.saIn.sin_port)
1019
+ {
1020
+ return -1;
1021
+ }
1022
+ else if(addr2.saIn.sin_port < addr1.saIn.sin_port)
1023
+ {
1024
+ return 1;
1025
+ }
1026
+
1027
+ if(addr1.saIn.sin_addr.s_addr < addr2.saIn.sin_addr.s_addr)
1028
+ {
1029
+ return -1;
1030
+ }
1031
+ else if(addr2.saIn.sin_addr.s_addr < addr1.saIn.sin_addr.s_addr)
1032
+ {
1033
+ return 1;
1034
+ }
1035
+ }
1036
+ else
1037
+ {
1038
+ if(addr1.saIn6.sin6_port < addr2.saIn6.sin6_port)
1039
+ {
1040
+ return -1;
1041
+ }
1042
+ else if(addr2.saIn6.sin6_port < addr1.saIn6.sin6_port)
1043
+ {
1044
+ return 1;
1045
+ }
1046
+
1047
+ int res = memcmp(&addr1.saIn6.sin6_addr, &addr2.saIn6.sin6_addr, sizeof(in6_addr));
1048
+ if(res < 0)
1049
+ {
1050
+ return -1;
1051
+ }
1052
+ else if(res > 0)
1053
+ {
1054
+ return 1;
1055
+ }
1056
+ }
1057
+
1058
+ return 0;
1059
+ }
1060
+
1061
+ bool
1062
+ IceInternal::isIPv6Supported()
1063
+ {
1064
+ SOCKET fd = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
1065
+ if(fd == INVALID_SOCKET)
1066
+ {
1067
+ return false;
1068
+ }
1069
+ else
1070
+ {
1071
+ closeSocketNoThrow(fd);
1072
+ return true;
1073
+ }
1074
+ }
1075
+
1076
+ SOCKET
1077
+ IceInternal::createSocket(bool udp, const Address& addr)
1078
+ {
1079
+ return createSocketImpl(udp, addr.saStorage.ss_family);
1080
+ }
1081
+ SOCKET
1082
+ IceInternal::createServerSocket(bool udp, const Address& addr, ProtocolSupport protocol)
1083
+ {
1084
+ SOCKET fd = createSocket(udp, addr);
1085
+ if(addr.saStorage.ss_family == AF_INET6 && protocol != EnableIPv4)
1086
+ {
1087
+ int flag = protocol == EnableIPv6 ? 1 : 0;
1088
+ if(setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, reinterpret_cast<char*>(&flag), int(sizeof(int))) == SOCKET_ERROR)
1089
+ {
1090
+ #ifdef _WIN32
1091
+ if(getSocketErrno() == WSAENOPROTOOPT)
1092
+ {
1093
+ return fd; // Windows XP doesn't support IPV6_V6ONLY
1094
+ }
1095
+ #endif
1096
+ closeSocketNoThrow(fd);
1097
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
1098
+ }
1099
+ }
1100
+ return fd;
1101
+ }
1102
+
1103
+ void
1104
+ IceInternal::closeSocketNoThrow(SOCKET fd)
1105
+ {
1106
+ #if defined(_WIN32)
1107
+ int error = WSAGetLastError();
1108
+ closesocket(fd);
1109
+ WSASetLastError(error);
1110
+ #else
1111
+ int error = errno;
1112
+ close(fd);
1113
+ errno = error;
1114
+ #endif
1115
+ }
1116
+
1117
+ void
1118
+ IceInternal::closeSocket(SOCKET fd)
1119
+ {
1120
+ #if defined(_WIN32)
1121
+ int error = WSAGetLastError();
1122
+ if(closesocket(fd) == SOCKET_ERROR)
1123
+ {
1124
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
1125
+ }
1126
+ WSASetLastError(error);
1127
+ #else
1128
+ int error = errno;
1129
+
1130
+ # if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
1131
+ //
1132
+ // FreeBSD returns ECONNRESET if the underlying object was
1133
+ // a stream socket that was shut down by the peer before all
1134
+ // pending data was delivered.
1135
+ //
1136
+ if(close(fd) == SOCKET_ERROR && getSocketErrno() != ECONNRESET)
1137
+ # else
1138
+ if(close(fd) == SOCKET_ERROR)
1139
+ # endif
1140
+ {
1141
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
1142
+ }
1143
+ errno = error;
1144
+ #endif
1145
+ }
1146
+
1147
+ string
1148
+ IceInternal::addrToString(const Address& addr)
1149
+ {
1150
+ ostringstream s;
1151
+ s << inetAddrToString(addr) << ':' << getPort(addr);
1152
+ return s.str();
1153
+ }
1154
+
1155
+ void
1156
+ IceInternal::fdToLocalAddress(SOCKET fd, Address& addr)
1157
+ {
1158
+ socklen_t len = static_cast<socklen_t>(sizeof(sockaddr_storage));
1159
+ if(getsockname(fd, &addr.sa, &len) == SOCKET_ERROR)
1160
+ {
1161
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
1162
+ }
1163
+ }
1164
+
1165
+ bool
1166
+ IceInternal::fdToRemoteAddress(SOCKET fd, Address& addr)
1167
+ {
1168
+ socklen_t len = static_cast<socklen_t>(sizeof(sockaddr_storage));
1169
+ if(getpeername(fd, &addr.sa, &len) == SOCKET_ERROR)
1170
+ {
1171
+ if(notConnected())
1172
+ {
1173
+ return false;
1174
+ }
1175
+ else
1176
+ {
1177
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
1178
+ }
1179
+ }
1180
+ return true;
1181
+ }
1182
+
1183
+ std::string
1184
+ IceInternal::fdToString(SOCKET fd, const NetworkProxyPtr& proxy, const Address& target)
1185
+ {
1186
+ if(fd == INVALID_SOCKET)
1187
+ {
1188
+ return "<closed>";
1189
+ }
1190
+
1191
+ ostringstream s;
1192
+
1193
+ Address remoteAddr;
1194
+ bool peerConnected = fdToRemoteAddress(fd, remoteAddr);
1195
+
1196
+ #ifdef _WIN32
1197
+ if(!peerConnected)
1198
+ {
1199
+ //
1200
+ // The local address is only accessible with connected sockets on Windows.
1201
+ //
1202
+ s << "local address = <not available>";
1203
+ }
1204
+ else
1205
+ #endif
1206
+ {
1207
+ Address localAddr;
1208
+ fdToLocalAddress(fd, localAddr);
1209
+ s << "local address = " << addrToString(localAddr);
1210
+ }
1211
+
1212
+ if(proxy)
1213
+ {
1214
+ if(!peerConnected)
1215
+ {
1216
+ remoteAddr = proxy->getAddress();
1217
+ }
1218
+ s << "\n" + proxy->getName() + " proxy address = " << addrToString(remoteAddr);
1219
+ s << "\nremote address = " << addrToString(target);
1220
+ }
1221
+ else
1222
+ {
1223
+ if(!peerConnected)
1224
+ {
1225
+ remoteAddr = target;
1226
+ }
1227
+ s << "\nremote address = " << addrToString(remoteAddr);
1228
+ }
1229
+
1230
+ return s.str();
1231
+ }
1232
+
1233
+ std::string
1234
+ IceInternal::fdToString(SOCKET fd)
1235
+ {
1236
+ if(fd == INVALID_SOCKET)
1237
+ {
1238
+ return "<closed>";
1239
+ }
1240
+
1241
+ Address localAddr;
1242
+ fdToLocalAddress(fd, localAddr);
1243
+
1244
+ Address remoteAddr;
1245
+ bool peerConnected = fdToRemoteAddress(fd, remoteAddr);
1246
+
1247
+ return addressesToString(localAddr, remoteAddr, peerConnected);
1248
+ }
1249
+
1250
+ void
1251
+ IceInternal::fdToAddressAndPort(SOCKET fd, string& localAddress, int& localPort, string& remoteAddress, int& remotePort)
1252
+ {
1253
+ if(fd == INVALID_SOCKET)
1254
+ {
1255
+ localAddress.clear();
1256
+ remoteAddress.clear();
1257
+ localPort = -1;
1258
+ remotePort = -1;
1259
+ return;
1260
+ }
1261
+
1262
+ Address localAddr;
1263
+ fdToLocalAddress(fd, localAddr);
1264
+ addrToAddressAndPort(localAddr, localAddress, localPort);
1265
+
1266
+ Address remoteAddr;
1267
+ if(fdToRemoteAddress(fd, remoteAddr))
1268
+ {
1269
+ addrToAddressAndPort(remoteAddr, remoteAddress, remotePort);
1270
+ }
1271
+ else
1272
+ {
1273
+ remoteAddress.clear();
1274
+ remotePort = -1;
1275
+ }
1276
+ }
1277
+
1278
+ void
1279
+ IceInternal::addrToAddressAndPort(const Address& addr, string& address, int& port)
1280
+ {
1281
+ address = inetAddrToString(addr);
1282
+ port = getPort(addr);
1283
+ }
1284
+
1285
+ std::string
1286
+ IceInternal::addressesToString(const Address& localAddr, const Address& remoteAddr, bool peerConnected)
1287
+ {
1288
+ ostringstream s;
1289
+ s << "local address = " << addrToString(localAddr);
1290
+ if(peerConnected)
1291
+ {
1292
+ s << "\nremote address = " << addrToString(remoteAddr);
1293
+ }
1294
+ else
1295
+ {
1296
+ s << "\nremote address = <not connected>";
1297
+ }
1298
+ return s.str();
1299
+ }
1300
+
1301
+ bool
1302
+ IceInternal::isAddressValid(const Address& addr)
1303
+ {
1304
+ return addr.saStorage.ss_family != AF_UNSPEC;
1305
+ }
1306
+
1307
+ vector<string>
1308
+ IceInternal::getHostsForEndpointExpand(const string& host, ProtocolSupport protocolSupport, bool includeLoopback)
1309
+ {
1310
+ vector<string> hosts;
1311
+ bool ipv4Wildcard = false;
1312
+ if(isWildcard(host, protocolSupport, ipv4Wildcard))
1313
+ {
1314
+ vector<Address> addrs = getLocalAddresses(ipv4Wildcard ? EnableIPv4 : protocolSupport, includeLoopback, false);
1315
+ for(vector<Address>::const_iterator p = addrs.begin(); p != addrs.end(); ++p)
1316
+ {
1317
+ //
1318
+ // NOTE: We don't publish link-local addresses as in most cases
1319
+ // these are not desired to be published and in some cases
1320
+ // will not work without extra configuration.
1321
+ //
1322
+ if(!isLinklocal(*p))
1323
+ {
1324
+ hosts.push_back(inetAddrToString(*p));
1325
+ }
1326
+ }
1327
+ if(hosts.empty())
1328
+ {
1329
+ // Return loopback if no other local addresses are available.
1330
+ addrs = getLoopbackAddresses(protocolSupport);
1331
+ for(vector<Address>::const_iterator p = addrs.begin(); p != addrs.end(); ++p)
1332
+ {
1333
+ hosts.push_back(inetAddrToString(*p));
1334
+ }
1335
+ }
1336
+ }
1337
+ return hosts; // An empty host list indicates to just use the given host.
1338
+ }
1339
+
1340
+ vector<string>
1341
+ IceInternal::getInterfacesForMulticast(const string& intf, ProtocolSupport protocolSupport)
1342
+ {
1343
+ vector<string> interfaces;
1344
+ bool ipv4Wildcard = false;
1345
+ if(isWildcard(intf, protocolSupport, ipv4Wildcard))
1346
+ {
1347
+ vector<Address> addrs = getLocalAddresses(ipv4Wildcard ? EnableIPv4 : protocolSupport, true, true);
1348
+ for(vector<Address>::const_iterator p = addrs.begin(); p != addrs.end(); ++p)
1349
+ {
1350
+ interfaces.push_back(inetAddrToString(*p)); // We keep link local addresses for multicast
1351
+ }
1352
+ }
1353
+ if(interfaces.empty())
1354
+ {
1355
+ interfaces.push_back(intf);
1356
+ }
1357
+ return interfaces;
1358
+ }
1359
+
1360
+ string
1361
+ IceInternal::inetAddrToString(const Address& ss)
1362
+ {
1363
+ int size = getAddressStorageSize(ss);
1364
+ if(size == 0)
1365
+ {
1366
+ return "";
1367
+ }
1368
+
1369
+ char namebuf[1024];
1370
+ namebuf[0] = '\0';
1371
+ getnameinfo(&ss.sa, static_cast<socklen_t>(size), namebuf, static_cast<socklen_t>(sizeof(namebuf)), 0, 0,
1372
+ NI_NUMERICHOST);
1373
+ return string(namebuf);
1374
+ }
1375
+
1376
+ int
1377
+ IceInternal::getPort(const Address& addr)
1378
+ {
1379
+ if(addr.saStorage.ss_family == AF_INET)
1380
+ {
1381
+ return ntohs(addr.saIn.sin_port);
1382
+ }
1383
+ else if(addr.saStorage.ss_family == AF_INET6)
1384
+ {
1385
+ return ntohs(addr.saIn6.sin6_port);
1386
+ }
1387
+ else
1388
+ {
1389
+ return -1;
1390
+ }
1391
+ }
1392
+
1393
+ void
1394
+ IceInternal::setPort(Address& addr, int port)
1395
+ {
1396
+ if(addr.saStorage.ss_family == AF_INET)
1397
+ {
1398
+ addr.saIn.sin_port = htons(port);
1399
+ }
1400
+ else
1401
+ {
1402
+ assert(addr.saStorage.ss_family == AF_INET6);
1403
+ addr.saIn6.sin6_port = htons(port);
1404
+ }
1405
+ }
1406
+
1407
+ bool
1408
+ IceInternal::isMulticast(const Address& addr)
1409
+ {
1410
+ if(addr.saStorage.ss_family == AF_INET)
1411
+ {
1412
+ return IN_MULTICAST(ntohl(addr.saIn.sin_addr.s_addr));
1413
+ }
1414
+ else if(addr.saStorage.ss_family == AF_INET6)
1415
+ {
1416
+ return IN6_IS_ADDR_MULTICAST(&addr.saIn6.sin6_addr);
1417
+ }
1418
+ return false;
1419
+ }
1420
+
1421
+ void
1422
+ IceInternal::setTcpBufSize(SOCKET fd, const ProtocolInstancePtr& instance)
1423
+ {
1424
+ assert(fd != INVALID_SOCKET);
1425
+
1426
+ //
1427
+ // By default, on Windows we use a 128KB buffer size. On Unix
1428
+ // platforms, we use the system defaults.
1429
+ //
1430
+ #ifdef _WIN32
1431
+ const int dfltBufSize = 128 * 1024;
1432
+ #else
1433
+ const int dfltBufSize = 0;
1434
+ #endif
1435
+ Int rcvSize = instance->properties()->getPropertyAsIntWithDefault("Ice.TCP.RcvSize", dfltBufSize);
1436
+ Int sndSize = instance->properties()->getPropertyAsIntWithDefault("Ice.TCP.SndSize", dfltBufSize);
1437
+
1438
+ setTcpBufSize(fd, rcvSize, sndSize, instance);
1439
+ }
1440
+
1441
+ void
1442
+ IceInternal::setTcpBufSize(SOCKET fd, int rcvSize, int sndSize, const ProtocolInstancePtr& instance)
1443
+ {
1444
+ assert(fd != INVALID_SOCKET);
1445
+
1446
+ if(rcvSize > 0)
1447
+ {
1448
+ //
1449
+ // Try to set the buffer size. The kernel will silently adjust
1450
+ // the size to an acceptable value. Then read the size back to
1451
+ // get the size that was actually set.
1452
+ //
1453
+ setRecvBufferSize(fd, rcvSize);
1454
+ int size = getRecvBufferSize(fd);
1455
+ if(size > 0 && size < rcvSize)
1456
+ {
1457
+ // Warn if the size that was set is less than the requested size and
1458
+ // we have not already warned.
1459
+ BufSizeWarnInfo winfo = instance->getBufSizeWarn(TCPEndpointType);
1460
+ if(!winfo.rcvWarn || rcvSize != winfo.rcvSize)
1461
+ {
1462
+ Ice::Warning out(instance->logger());
1463
+ out << "TCP receive buffer size: requested size of " << rcvSize << " adjusted to " << size;
1464
+ instance->setRcvBufSizeWarn(TCPEndpointType, rcvSize);
1465
+ }
1466
+ }
1467
+ }
1468
+
1469
+ if(sndSize > 0)
1470
+ {
1471
+ //
1472
+ // Try to set the buffer size. The kernel will silently adjust
1473
+ // the size to an acceptable value. Then read the size back to
1474
+ // get the size that was actually set.
1475
+ //
1476
+ setSendBufferSize(fd, sndSize);
1477
+ int size = getSendBufferSize(fd);
1478
+ if(size > 0 && size < sndSize)
1479
+ {
1480
+ // Warn if the size that was set is less than the requested size and
1481
+ // we have not already warned.
1482
+ BufSizeWarnInfo winfo = instance->getBufSizeWarn(TCPEndpointType);
1483
+ if(!winfo.sndWarn || sndSize != winfo.sndSize)
1484
+ {
1485
+ Ice::Warning out(instance->logger());
1486
+ out << "TCP send buffer size: requested size of " << sndSize << " adjusted to " << size;
1487
+ instance->setSndBufSizeWarn(TCPEndpointType, sndSize);
1488
+ }
1489
+ }
1490
+ }
1491
+ }
1492
+
1493
+ void
1494
+ IceInternal::setBlock(SOCKET fd, bool block)
1495
+ {
1496
+ #ifdef _WIN32
1497
+ if(block)
1498
+ {
1499
+ unsigned long arg = 0;
1500
+ if(ioctlsocket(fd, FIONBIO, &arg) == SOCKET_ERROR)
1501
+ {
1502
+ closeSocketNoThrow(fd);
1503
+ throw SocketException(__FILE__, __LINE__, WSAGetLastError());
1504
+ }
1505
+ }
1506
+ else
1507
+ {
1508
+ unsigned long arg = 1;
1509
+ if(ioctlsocket(fd, FIONBIO, &arg) == SOCKET_ERROR)
1510
+ {
1511
+ closeSocketNoThrow(fd);
1512
+ throw SocketException(__FILE__, __LINE__, WSAGetLastError());
1513
+ }
1514
+ }
1515
+ #else
1516
+ if(block)
1517
+ {
1518
+ int flags = fcntl(fd, F_GETFL);
1519
+ flags &= ~O_NONBLOCK;
1520
+ if(fcntl(fd, F_SETFL, flags) == SOCKET_ERROR)
1521
+ {
1522
+ closeSocketNoThrow(fd);
1523
+ throw SocketException(__FILE__, __LINE__, errno);
1524
+ }
1525
+ }
1526
+ else
1527
+ {
1528
+ int flags = fcntl(fd, F_GETFL);
1529
+ flags |= O_NONBLOCK;
1530
+ if(fcntl(fd, F_SETFL, flags) == SOCKET_ERROR)
1531
+ {
1532
+ closeSocketNoThrow(fd);
1533
+ throw SocketException(__FILE__, __LINE__, errno);
1534
+ }
1535
+ }
1536
+ #endif
1537
+ }
1538
+
1539
+ void
1540
+ IceInternal::setSendBufferSize(SOCKET fd, int sz)
1541
+ {
1542
+ if(setsockopt(fd, SOL_SOCKET, SO_SNDBUF, reinterpret_cast<char*>(&sz), int(sizeof(int))) == SOCKET_ERROR)
1543
+ {
1544
+ closeSocketNoThrow(fd);
1545
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
1546
+ }
1547
+ }
1548
+
1549
+ int
1550
+ IceInternal::getSendBufferSize(SOCKET fd)
1551
+ {
1552
+ int sz;
1553
+ socklen_t len = sizeof(sz);
1554
+ if(getsockopt(fd, SOL_SOCKET, SO_SNDBUF, reinterpret_cast<char*>(&sz), &len) == SOCKET_ERROR ||
1555
+ static_cast<unsigned int>(len) != sizeof(sz))
1556
+ {
1557
+ closeSocketNoThrow(fd);
1558
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
1559
+ }
1560
+ return sz;
1561
+ }
1562
+
1563
+ void
1564
+ IceInternal::setRecvBufferSize(SOCKET fd, int sz)
1565
+ {
1566
+ if(setsockopt(fd, SOL_SOCKET, SO_RCVBUF, reinterpret_cast<char*>(&sz), int(sizeof(int))) == SOCKET_ERROR)
1567
+ {
1568
+ closeSocketNoThrow(fd);
1569
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
1570
+ }
1571
+ }
1572
+
1573
+ int
1574
+ IceInternal::getRecvBufferSize(SOCKET fd)
1575
+ {
1576
+ int sz;
1577
+ socklen_t len = sizeof(sz);
1578
+ if(getsockopt(fd, SOL_SOCKET, SO_RCVBUF, reinterpret_cast<char*>(&sz), &len) == SOCKET_ERROR ||
1579
+ static_cast<unsigned int>(len) != sizeof(sz))
1580
+ {
1581
+ closeSocketNoThrow(fd);
1582
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
1583
+ }
1584
+ return sz;
1585
+ }
1586
+
1587
+ void
1588
+ IceInternal::setMcastGroup(SOCKET fd, const Address& group, const string& intf)
1589
+ {
1590
+ vector<string> interfaces = getInterfacesForMulticast(intf, getProtocolSupport(group));
1591
+ set<int> indexes;
1592
+ for(vector<string>::const_iterator p = interfaces.begin(); p != interfaces.end(); ++p)
1593
+ {
1594
+ int rc = 0;
1595
+ if(group.saStorage.ss_family == AF_INET)
1596
+ {
1597
+ struct ip_mreq mreq;
1598
+ mreq.imr_multiaddr = group.saIn.sin_addr;
1599
+ mreq.imr_interface = getInterfaceAddress(*p);
1600
+ rc = setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, reinterpret_cast<char*>(&mreq), int(sizeof(mreq)));
1601
+ }
1602
+ else
1603
+ {
1604
+ int index = getInterfaceIndex(*p);
1605
+ if(indexes.find(index) == indexes.end()) // Don't join twice the same interface (if it has multiple IPs)
1606
+ {
1607
+ indexes.insert(index);
1608
+ struct ipv6_mreq mreq;
1609
+ mreq.ipv6mr_multiaddr = group.saIn6.sin6_addr;
1610
+ mreq.ipv6mr_interface = static_cast<unsigned int>(index);
1611
+ rc = setsockopt(fd, IPPROTO_IPV6, IPV6_JOIN_GROUP, reinterpret_cast<char*>(&mreq), int(sizeof(mreq)));
1612
+ }
1613
+ }
1614
+ if(rc == SOCKET_ERROR)
1615
+ {
1616
+ closeSocketNoThrow(fd);
1617
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
1618
+ }
1619
+ }
1620
+ }
1621
+
1622
+ void
1623
+ IceInternal::setMcastInterface(SOCKET fd, const string& intf, const Address& addr)
1624
+ {
1625
+ int rc;
1626
+ if(addr.saStorage.ss_family == AF_INET)
1627
+ {
1628
+ struct in_addr iface = getInterfaceAddress(intf);
1629
+ rc = setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF, reinterpret_cast<char*>(&iface), int(sizeof(iface)));
1630
+ }
1631
+ else
1632
+ {
1633
+ int interfaceNum = getInterfaceIndex(intf);
1634
+ rc = setsockopt(fd, IPPROTO_IPV6, IPV6_MULTICAST_IF, reinterpret_cast<char*>(&interfaceNum), int(sizeof(int)));
1635
+ }
1636
+ if(rc == SOCKET_ERROR)
1637
+ {
1638
+ closeSocketNoThrow(fd);
1639
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
1640
+ }
1641
+ }
1642
+
1643
+ void
1644
+ IceInternal::setMcastTtl(SOCKET fd, int ttl, const Address& addr)
1645
+ {
1646
+ int rc;
1647
+ if(addr.saStorage.ss_family == AF_INET)
1648
+ {
1649
+ rc = setsockopt(fd, IPPROTO_IP, IP_MULTICAST_TTL, reinterpret_cast<char*>(&ttl), int(sizeof(int)));
1650
+ }
1651
+ else
1652
+ {
1653
+ rc = setsockopt(fd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, reinterpret_cast<char*>(&ttl), int(sizeof(int)));
1654
+ }
1655
+ if(rc == SOCKET_ERROR)
1656
+ {
1657
+ closeSocketNoThrow(fd);
1658
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
1659
+ }
1660
+ }
1661
+
1662
+ void
1663
+ IceInternal::setReuseAddress(SOCKET fd, bool reuse)
1664
+ {
1665
+ int flag = reuse ? 1 : 0;
1666
+ if(setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, reinterpret_cast<char*>(&flag), int(sizeof(int))) == SOCKET_ERROR)
1667
+ {
1668
+ closeSocketNoThrow(fd);
1669
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
1670
+ }
1671
+ }
1672
+
1673
+ Address
1674
+ IceInternal::doBind(SOCKET fd, const Address& addr, const string&)
1675
+ {
1676
+ int size = getAddressStorageSize(addr);
1677
+ assert(size != 0);
1678
+
1679
+ if(::bind(fd, &addr.sa, static_cast<socklen_t>(size)) == SOCKET_ERROR)
1680
+ {
1681
+ closeSocketNoThrow(fd);
1682
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
1683
+ }
1684
+
1685
+ Address local;
1686
+ socklen_t len = static_cast<socklen_t>(sizeof(sockaddr_storage));
1687
+ #ifdef NDEBUG
1688
+ getsockname(fd, &local.sa, &len);
1689
+ #else
1690
+ int ret = getsockname(fd, &local.sa, &len);
1691
+ assert(ret != SOCKET_ERROR);
1692
+ #endif
1693
+ return local;
1694
+ }
1695
+
1696
+ Address
1697
+ IceInternal::getNumericAddress(const std::string& address)
1698
+ {
1699
+ vector<Address> addrs = getAddresses(address, 0, EnableBoth, Ice::ICE_ENUM(EndpointSelectionType, Ordered), false,
1700
+ false);
1701
+ if(addrs.empty())
1702
+ {
1703
+ return Address();
1704
+ }
1705
+ else
1706
+ {
1707
+ return addrs[0];
1708
+ }
1709
+ }
1710
+
1711
+ int
1712
+ IceInternal::getSocketErrno()
1713
+ {
1714
+ #if defined(_WIN32)
1715
+ return WSAGetLastError();
1716
+ #else
1717
+ return errno;
1718
+ #endif
1719
+ }
1720
+
1721
+ bool
1722
+ IceInternal::interrupted()
1723
+ {
1724
+ #ifdef _WIN32
1725
+ return WSAGetLastError() == WSAEINTR;
1726
+ #else
1727
+ # ifdef EPROTO
1728
+ return errno == EINTR || errno == EPROTO;
1729
+ # else
1730
+ return errno == EINTR;
1731
+ # endif
1732
+ #endif
1733
+ }
1734
+
1735
+ bool
1736
+ IceInternal::acceptInterrupted()
1737
+ {
1738
+ if(interrupted())
1739
+ {
1740
+ return true;
1741
+ }
1742
+
1743
+ #ifdef _WIN32
1744
+ int error = WSAGetLastError();
1745
+ return error == WSAECONNABORTED ||
1746
+ error == WSAECONNRESET ||
1747
+ error == WSAETIMEDOUT;
1748
+ #else
1749
+ return errno == ECONNABORTED ||
1750
+ errno == ECONNRESET ||
1751
+ errno == ETIMEDOUT;
1752
+ #endif
1753
+ }
1754
+
1755
+ bool
1756
+ IceInternal::noBuffers()
1757
+ {
1758
+ #ifdef _WIN32
1759
+ int error = WSAGetLastError();
1760
+ return error == WSAENOBUFS ||
1761
+ error == WSAEFAULT;
1762
+ #else
1763
+ return errno == ENOBUFS;
1764
+ #endif
1765
+ }
1766
+
1767
+ bool
1768
+ IceInternal::wouldBlock()
1769
+ {
1770
+ #ifdef _WIN32
1771
+ int error = WSAGetLastError();
1772
+ return error == WSAEWOULDBLOCK || error == WSA_IO_PENDING || error == ERROR_IO_PENDING;
1773
+ #else
1774
+ return errno == EAGAIN || errno == EWOULDBLOCK;
1775
+ #endif
1776
+ }
1777
+
1778
+ bool
1779
+ IceInternal::connectFailed()
1780
+ {
1781
+ #if defined(_WIN32)
1782
+ int error = WSAGetLastError();
1783
+ return error == WSAECONNREFUSED ||
1784
+ error == WSAETIMEDOUT ||
1785
+ error == WSAENETUNREACH ||
1786
+ error == WSAEHOSTUNREACH ||
1787
+ error == WSAECONNRESET ||
1788
+ error == WSAESHUTDOWN ||
1789
+ error == WSAECONNABORTED ||
1790
+ error == ERROR_SEM_TIMEOUT ||
1791
+ error == ERROR_NETNAME_DELETED;
1792
+ #else
1793
+ return errno == ECONNREFUSED ||
1794
+ errno == ETIMEDOUT ||
1795
+ errno == ENETUNREACH ||
1796
+ errno == EHOSTUNREACH ||
1797
+ errno == ECONNRESET ||
1798
+ errno == ESHUTDOWN ||
1799
+ errno == ECONNABORTED;
1800
+ #endif
1801
+ }
1802
+
1803
+ bool
1804
+ IceInternal::connectionRefused()
1805
+ {
1806
+ #if defined(_WIN32)
1807
+ int error = WSAGetLastError();
1808
+ return error == WSAECONNREFUSED || error == ERROR_CONNECTION_REFUSED;
1809
+ #else
1810
+ return errno == ECONNREFUSED;
1811
+ #endif
1812
+ }
1813
+
1814
+ bool
1815
+ IceInternal::connectionLost()
1816
+ {
1817
+ #ifdef _WIN32
1818
+ int error = WSAGetLastError();
1819
+ return error == WSAECONNRESET ||
1820
+ error == WSAESHUTDOWN ||
1821
+ error == WSAENOTCONN ||
1822
+ # ifdef ICE_USE_IOCP
1823
+ error == ERROR_NETNAME_DELETED ||
1824
+ # endif
1825
+ error == WSAECONNABORTED;
1826
+ #else
1827
+ return errno == ECONNRESET ||
1828
+ errno == ENOTCONN ||
1829
+ errno == ESHUTDOWN ||
1830
+ errno == ECONNABORTED ||
1831
+ errno == EPIPE;
1832
+ #endif
1833
+ }
1834
+
1835
+ bool
1836
+ IceInternal::connectInProgress()
1837
+ {
1838
+ #ifdef _WIN32
1839
+ int error = WSAGetLastError();
1840
+ return error == WSAEWOULDBLOCK || error == WSA_IO_PENDING || error == ERROR_IO_PENDING;
1841
+ #else
1842
+ return errno == EINPROGRESS;
1843
+ #endif
1844
+ }
1845
+
1846
+ bool
1847
+ IceInternal::notConnected()
1848
+ {
1849
+ #ifdef _WIN32
1850
+ return WSAGetLastError() == WSAENOTCONN;
1851
+ #elif defined(__APPLE__) || defined(__FreeBSD__)
1852
+ return errno == ENOTCONN || errno == EINVAL;
1853
+ #else
1854
+ return errno == ENOTCONN;
1855
+ #endif
1856
+ }
1857
+
1858
+ bool
1859
+ IceInternal::recvTruncated()
1860
+ {
1861
+ #ifdef _WIN32
1862
+ int err = WSAGetLastError();
1863
+ return err == WSAEMSGSIZE || err == ERROR_MORE_DATA;
1864
+ #else
1865
+ // We don't get an error under Linux if a datagram is truncated.
1866
+ return false;
1867
+ #endif
1868
+ }
1869
+
1870
+ void
1871
+ IceInternal::doListen(SOCKET fd, int backlog)
1872
+ {
1873
+ repeatListen:
1874
+ if(::listen(fd, backlog) == SOCKET_ERROR)
1875
+ {
1876
+ if(interrupted())
1877
+ {
1878
+ goto repeatListen;
1879
+ }
1880
+
1881
+ closeSocketNoThrow(fd);
1882
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
1883
+ }
1884
+ }
1885
+
1886
+ bool
1887
+ IceInternal::doConnect(SOCKET fd, const Address& addr, const Address& sourceAddr)
1888
+ {
1889
+ if(isAddressValid(sourceAddr))
1890
+ {
1891
+ doBind(fd, sourceAddr);
1892
+ }
1893
+
1894
+ repeatConnect:
1895
+ int size = getAddressStorageSize(addr);
1896
+ assert(size != 0);
1897
+
1898
+ if(::connect(fd, &addr.sa, static_cast<socklen_t>(size)) == SOCKET_ERROR)
1899
+ {
1900
+ if(interrupted())
1901
+ {
1902
+ goto repeatConnect;
1903
+ }
1904
+
1905
+ if(connectInProgress())
1906
+ {
1907
+ return false;
1908
+ }
1909
+
1910
+ closeSocketNoThrow(fd);
1911
+ if(connectionRefused())
1912
+ {
1913
+ throw ConnectionRefusedException(__FILE__, __LINE__, getSocketErrno());
1914
+ }
1915
+ else if(connectFailed())
1916
+ {
1917
+ throw ConnectFailedException(__FILE__, __LINE__, getSocketErrno());
1918
+ }
1919
+ else
1920
+ {
1921
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
1922
+ }
1923
+ }
1924
+
1925
+ #if defined(__linux__)
1926
+ //
1927
+ // Prevent self connect (self connect happens on Linux when a client tries to connect to
1928
+ // a server which was just deactivated if the client socket re-uses the same ephemeral
1929
+ // port as the server).
1930
+ //
1931
+ Address localAddr;
1932
+ try
1933
+ {
1934
+ fdToLocalAddress(fd, localAddr);
1935
+ if(compareAddress(addr, localAddr) == 0)
1936
+ {
1937
+ throw ConnectionRefusedException(__FILE__, __LINE__, 0); // No appropriate errno
1938
+ }
1939
+ }
1940
+ catch(const LocalException&)
1941
+ {
1942
+ closeSocketNoThrow(fd);
1943
+ throw;
1944
+ }
1945
+ #endif
1946
+ return true;
1947
+ }
1948
+
1949
+ void
1950
+ IceInternal::doFinishConnect(SOCKET fd)
1951
+ {
1952
+ //
1953
+ // Note: we don't close the socket if there's an exception. It's the responsability
1954
+ // of the caller to do so.
1955
+ //
1956
+
1957
+ //
1958
+ // Strange windows bug: The following call to Sleep() is
1959
+ // necessary, otherwise no error is reported through
1960
+ // getsockopt.
1961
+ //
1962
+ #if defined(_WIN32)
1963
+ Sleep(0);
1964
+ #endif
1965
+
1966
+ int val;
1967
+ socklen_t len = static_cast<socklen_t>(sizeof(int));
1968
+ if(getsockopt(fd, SOL_SOCKET, SO_ERROR, reinterpret_cast<char*>(&val), &len) == SOCKET_ERROR)
1969
+ {
1970
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
1971
+ }
1972
+
1973
+ if(val > 0)
1974
+ {
1975
+ #if defined(_WIN32)
1976
+ WSASetLastError(val);
1977
+ #else
1978
+ errno = val;
1979
+ #endif
1980
+ if(connectionRefused())
1981
+ {
1982
+ throw ConnectionRefusedException(__FILE__, __LINE__, getSocketErrno());
1983
+ }
1984
+ else if(connectFailed())
1985
+ {
1986
+ throw ConnectFailedException(__FILE__, __LINE__, getSocketErrno());
1987
+ }
1988
+ else
1989
+ {
1990
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
1991
+ }
1992
+ }
1993
+
1994
+ #if defined(__linux__)
1995
+ //
1996
+ // Prevent self connect (self connect happens on Linux when a client tries to connect to
1997
+ // a server which was just deactivated if the client socket re-uses the same ephemeral
1998
+ // port as the server).
1999
+ //
2000
+ Address localAddr;
2001
+ fdToLocalAddress(fd, localAddr);
2002
+ Address remoteAddr;
2003
+ if(fdToRemoteAddress(fd, remoteAddr) && compareAddress(remoteAddr, localAddr) == 0)
2004
+ {
2005
+ throw ConnectionRefusedException(__FILE__, __LINE__, 0); // No appropriate errno
2006
+ }
2007
+ #endif
2008
+ }
2009
+
2010
+ SOCKET
2011
+ IceInternal::doAccept(SOCKET fd)
2012
+ {
2013
+ #ifdef _WIN32
2014
+ SOCKET ret;
2015
+ #else
2016
+ int ret;
2017
+ #endif
2018
+
2019
+ repeatAccept:
2020
+ if((ret = ::accept(fd, 0, 0)) == INVALID_SOCKET)
2021
+ {
2022
+ if(acceptInterrupted())
2023
+ {
2024
+ goto repeatAccept;
2025
+ }
2026
+
2027
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
2028
+ }
2029
+
2030
+ setTcpNoDelay(ret);
2031
+ setKeepAlive(ret);
2032
+ return ret;
2033
+ }
2034
+
2035
+ void
2036
+ IceInternal::createPipe(SOCKET fds[2])
2037
+ {
2038
+ #ifdef _WIN32
2039
+
2040
+ SOCKET fd = createSocketImpl(false, AF_INET);
2041
+ setBlock(fd, true);
2042
+
2043
+ Address addr;
2044
+ memset(&addr.saStorage, 0, sizeof(sockaddr_storage));
2045
+
2046
+ addr.saIn.sin_family = AF_INET;
2047
+ addr.saIn.sin_port = htons(0);
2048
+ addr.saIn.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
2049
+
2050
+ addr = doBind(fd, addr);
2051
+ doListen(fd, 1);
2052
+
2053
+ try
2054
+ {
2055
+ fds[0] = createSocketImpl(false, AF_INET);
2056
+ }
2057
+ catch(...)
2058
+ {
2059
+ ::closesocket(fd);
2060
+ throw;
2061
+ }
2062
+
2063
+ try
2064
+ {
2065
+ setBlock(fds[0], true);
2066
+ # ifndef NDEBUG
2067
+ bool connected = doConnect(fds[0], addr, Address());
2068
+ assert(connected);
2069
+ # else
2070
+ doConnect(fds[0], addr, Address());
2071
+ # endif
2072
+ }
2073
+ catch(...)
2074
+ {
2075
+ // fds[0] is closed by doConnect
2076
+ ::closesocket(fd);
2077
+ throw;
2078
+ }
2079
+
2080
+ try
2081
+ {
2082
+ fds[1] = doAccept(fd);
2083
+ }
2084
+ catch(...)
2085
+ {
2086
+ ::closesocket(fds[0]);
2087
+ ::closesocket(fd);
2088
+ throw;
2089
+ }
2090
+
2091
+ ::closesocket(fd);
2092
+
2093
+ try
2094
+ {
2095
+ setBlock(fds[1], true);
2096
+ }
2097
+ catch(...)
2098
+ {
2099
+ ::closesocket(fds[0]);
2100
+ // fds[1] is closed by setBlock
2101
+ throw;
2102
+ }
2103
+
2104
+ #else
2105
+
2106
+ if(::pipe(fds) != 0)
2107
+ {
2108
+ throw SyscallException(__FILE__, __LINE__, getSocketErrno());
2109
+ }
2110
+
2111
+ try
2112
+ {
2113
+ setBlock(fds[0], true);
2114
+ }
2115
+ catch(...)
2116
+ {
2117
+ // fds[0] is closed by setBlock
2118
+ closeSocketNoThrow(fds[1]);
2119
+ throw;
2120
+ }
2121
+
2122
+ try
2123
+ {
2124
+ setBlock(fds[1], true);
2125
+ }
2126
+ catch(...)
2127
+ {
2128
+ closeSocketNoThrow(fds[0]);
2129
+ // fds[1] is closed by setBlock
2130
+ throw;
2131
+ }
2132
+
2133
+ #endif
2134
+ }
2135
+
2136
+ #if defined(ICE_USE_IOCP)
2137
+ void
2138
+ IceInternal::doConnectAsync(SOCKET fd, const Address& addr, const Address& sourceAddr, AsyncInfo& info)
2139
+ {
2140
+ //
2141
+ // NOTE: It's the caller's responsability to close the socket upon
2142
+ // failure to connect. The socket isn't closed by this method.
2143
+ //
2144
+ Address bindAddr;
2145
+ if(isAddressValid(sourceAddr))
2146
+ {
2147
+ bindAddr = sourceAddr;
2148
+ }
2149
+ else
2150
+ {
2151
+ memset(&bindAddr.saStorage, 0, sizeof(sockaddr_storage));
2152
+ if(addr.saStorage.ss_family == AF_INET)
2153
+ {
2154
+ bindAddr.saIn.sin_family = AF_INET;
2155
+ bindAddr.saIn.sin_port = htons(0);
2156
+ bindAddr.saIn.sin_addr.s_addr = htonl(INADDR_ANY);
2157
+ }
2158
+ else if(addr.saStorage.ss_family == AF_INET6)
2159
+ {
2160
+ bindAddr.saIn6.sin6_family = AF_INET6;
2161
+ bindAddr.saIn6.sin6_port = htons(0);
2162
+ bindAddr.saIn6.sin6_addr = in6addr_any;
2163
+ }
2164
+ }
2165
+
2166
+ int size = getAddressStorageSize(bindAddr);
2167
+ assert(size != 0);
2168
+
2169
+ if(::bind(fd, &bindAddr.sa, size) == SOCKET_ERROR)
2170
+ {
2171
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
2172
+ }
2173
+
2174
+ LPFN_CONNECTEX ConnectEx = ICE_NULLPTR; // a pointer to the 'ConnectEx()' function
2175
+ GUID GuidConnectEx = WSAID_CONNECTEX; // The Guid
2176
+ DWORD dwBytes;
2177
+ if(WSAIoctl(fd,
2178
+ SIO_GET_EXTENSION_FUNCTION_POINTER,
2179
+ &GuidConnectEx,
2180
+ sizeof(GuidConnectEx),
2181
+ &ConnectEx,
2182
+ sizeof(ConnectEx),
2183
+ &dwBytes,
2184
+ ICE_NULLPTR,
2185
+ ICE_NULLPTR) == SOCKET_ERROR)
2186
+ {
2187
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
2188
+ }
2189
+
2190
+ if(!ConnectEx(fd, &addr.sa, size, 0, 0, 0, &info))
2191
+ {
2192
+ if(!connectInProgress())
2193
+ {
2194
+ if(connectionRefused())
2195
+ {
2196
+ throw ConnectionRefusedException(__FILE__, __LINE__, getSocketErrno());
2197
+ }
2198
+ else if(connectFailed())
2199
+ {
2200
+ throw ConnectFailedException(__FILE__, __LINE__, getSocketErrno());
2201
+ }
2202
+ else
2203
+ {
2204
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
2205
+ }
2206
+ }
2207
+ }
2208
+ }
2209
+
2210
+ void
2211
+ IceInternal::doFinishConnectAsync(SOCKET fd, AsyncInfo& info)
2212
+ {
2213
+ //
2214
+ // NOTE: It's the caller's responsability to close the socket upon
2215
+ // failure to connect. The socket isn't closed by this method.
2216
+ //
2217
+
2218
+ if(info.error != ERROR_SUCCESS)
2219
+ {
2220
+ WSASetLastError(info.error);
2221
+ if(connectionRefused())
2222
+ {
2223
+ throw ConnectionRefusedException(__FILE__, __LINE__, getSocketErrno());
2224
+ }
2225
+ else if(connectFailed())
2226
+ {
2227
+ throw ConnectFailedException(__FILE__, __LINE__, getSocketErrno());
2228
+ }
2229
+ else
2230
+ {
2231
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
2232
+ }
2233
+ }
2234
+
2235
+ if(setsockopt(fd, SOL_SOCKET, SO_UPDATE_CONNECT_CONTEXT, ICE_NULLPTR, 0) == SOCKET_ERROR)
2236
+ {
2237
+ throw SocketException(__FILE__, __LINE__, getSocketErrno());
2238
+ }
2239
+ }
2240
+ #endif
2241
+
2242
+ bool
2243
+ IceInternal::isIpAddress(const string& name)
2244
+ {
2245
+ in_addr addr;
2246
+ in6_addr addr6;
2247
+
2248
+ return inet_pton(AF_INET, name.c_str(), &addr) > 0 || inet_pton(AF_INET6, name.c_str(), &addr6) > 0;
2249
+ }