zeroc-ice 3.6b1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (675) hide show
  1. checksums.yaml +7 -0
  2. data/ICE_LICENSE +54 -0
  3. data/LICENSE +339 -0
  4. data/bin/slice2rb +17 -0
  5. data/ext/Communicator.cpp +596 -0
  6. data/ext/Communicator.h +25 -0
  7. data/ext/Config.h +111 -0
  8. data/ext/Connection.cpp +381 -0
  9. data/ext/Connection.h +26 -0
  10. data/ext/Endpoint.cpp +311 -0
  11. data/ext/Endpoint.h +27 -0
  12. data/ext/ImplicitContext.cpp +152 -0
  13. data/ext/ImplicitContext.h +25 -0
  14. data/ext/Init.cpp +52 -0
  15. data/ext/Logger.cpp +151 -0
  16. data/ext/Logger.h +28 -0
  17. data/ext/ObjectFactory.cpp +140 -0
  18. data/ext/ObjectFactory.h +50 -0
  19. data/ext/Operation.cpp +676 -0
  20. data/ext/Operation.h +36 -0
  21. data/ext/Properties.cpp +369 -0
  22. data/ext/Properties.h +25 -0
  23. data/ext/Proxy.cpp +1354 -0
  24. data/ext/Proxy.h +27 -0
  25. data/ext/Slice.cpp +223 -0
  26. data/ext/Slice.h +22 -0
  27. data/ext/Types.cpp +3160 -0
  28. data/ext/Types.h +545 -0
  29. data/ext/Util.cpp +792 -0
  30. data/ext/Util.h +511 -0
  31. data/ext/extconf.rb +118 -0
  32. data/ext/ice/BZIP_LICENSE +42 -0
  33. data/ext/ice/MCPP_LICENSE +36 -0
  34. data/ext/ice/bzip2/blocksort.c +1094 -0
  35. data/ext/ice/bzip2/bzlib.c +1572 -0
  36. data/ext/ice/bzip2/bzlib.h +282 -0
  37. data/ext/ice/bzip2/bzlib_private.h +509 -0
  38. data/ext/ice/bzip2/compress.c +672 -0
  39. data/ext/ice/bzip2/crctable.c +104 -0
  40. data/ext/ice/bzip2/decompress.c +646 -0
  41. data/ext/ice/bzip2/huffman.c +205 -0
  42. data/ext/ice/bzip2/randtable.c +84 -0
  43. data/ext/ice/cpp/include/Ice/ACMF.h +30 -0
  44. data/ext/ice/cpp/include/Ice/Application.h +156 -0
  45. data/ext/ice/cpp/include/Ice/AsyncResult.h +363 -0
  46. data/ext/ice/cpp/include/Ice/AsyncResultF.h +26 -0
  47. data/ext/ice/cpp/include/Ice/BasicStream.h +1315 -0
  48. data/ext/ice/cpp/include/Ice/Buffer.h +159 -0
  49. data/ext/ice/cpp/include/Ice/BuiltinSequences.h +74 -0
  50. data/ext/ice/cpp/include/Ice/Communicator.h +194 -0
  51. data/ext/ice/cpp/include/Ice/CommunicatorAsync.h +115 -0
  52. data/ext/ice/cpp/include/Ice/CommunicatorF.h +60 -0
  53. data/ext/ice/cpp/include/Ice/Config.h +97 -0
  54. data/ext/ice/cpp/include/Ice/Connection.h +495 -0
  55. data/ext/ice/cpp/include/Ice/ConnectionAsync.h +115 -0
  56. data/ext/ice/cpp/include/Ice/ConnectionF.h +72 -0
  57. data/ext/ice/cpp/include/Ice/ConnectionFactoryF.h +30 -0
  58. data/ext/ice/cpp/include/Ice/ConnectionIF.h +37 -0
  59. data/ext/ice/cpp/include/Ice/Current.h +94 -0
  60. data/ext/ice/cpp/include/Ice/DefaultObjectFactory.h +48 -0
  61. data/ext/ice/cpp/include/Ice/DeprecatedStringConverter.h +62 -0
  62. data/ext/ice/cpp/include/Ice/DispatchInterceptor.h +33 -0
  63. data/ext/ice/cpp/include/Ice/Dispatcher.h +51 -0
  64. data/ext/ice/cpp/include/Ice/DynamicLibrary.h +105 -0
  65. data/ext/ice/cpp/include/Ice/DynamicLibraryF.h +29 -0
  66. data/ext/ice/cpp/include/Ice/Endpoint.h +350 -0
  67. data/ext/ice/cpp/include/Ice/EndpointF.h +97 -0
  68. data/ext/ice/cpp/include/Ice/EndpointTypes.h +74 -0
  69. data/ext/ice/cpp/include/Ice/Exception.h +114 -0
  70. data/ext/ice/cpp/include/Ice/FacetMap.h +56 -0
  71. data/ext/ice/cpp/include/Ice/FactoryTable.h +69 -0
  72. data/ext/ice/cpp/include/Ice/FactoryTableInit.h +87 -0
  73. data/ext/ice/cpp/include/Ice/Format.h +39 -0
  74. data/ext/ice/cpp/include/Ice/Functional.h +138 -0
  75. data/ext/ice/cpp/include/Ice/GCObject.h +73 -0
  76. data/ext/ice/cpp/include/Ice/Handle.h +192 -0
  77. data/ext/ice/cpp/include/Ice/Ice.h +54 -0
  78. data/ext/ice/cpp/include/Ice/Identity.h +160 -0
  79. data/ext/ice/cpp/include/Ice/ImplicitContext.h +96 -0
  80. data/ext/ice/cpp/include/Ice/ImplicitContextF.h +60 -0
  81. data/ext/ice/cpp/include/Ice/Incoming.h +131 -0
  82. data/ext/ice/cpp/include/Ice/IncomingAsync.h +108 -0
  83. data/ext/ice/cpp/include/Ice/IncomingAsyncF.h +35 -0
  84. data/ext/ice/cpp/include/Ice/Initialize.h +141 -0
  85. data/ext/ice/cpp/include/Ice/InstanceF.h +26 -0
  86. data/ext/ice/cpp/include/Ice/Instrumentation.h +377 -0
  87. data/ext/ice/cpp/include/Ice/InstrumentationF.h +71 -0
  88. data/ext/ice/cpp/include/Ice/LocalException.h +1022 -0
  89. data/ext/ice/cpp/include/Ice/LocalObject.h +36 -0
  90. data/ext/ice/cpp/include/Ice/LocalObjectF.h +26 -0
  91. data/ext/ice/cpp/include/Ice/Locator.h +2191 -0
  92. data/ext/ice/cpp/include/Ice/LocatorF.h +89 -0
  93. data/ext/ice/cpp/include/Ice/Logger.h +94 -0
  94. data/ext/ice/cpp/include/Ice/LoggerF.h +60 -0
  95. data/ext/ice/cpp/include/Ice/LoggerUtil.h +153 -0
  96. data/ext/ice/cpp/include/Ice/Makefile +26 -0
  97. data/ext/ice/cpp/include/Ice/Metrics.h +2989 -0
  98. data/ext/ice/cpp/include/Ice/MetricsAdminI.h +662 -0
  99. data/ext/ice/cpp/include/Ice/MetricsFunctional.h +144 -0
  100. data/ext/ice/cpp/include/Ice/MetricsObserverI.h +576 -0
  101. data/ext/ice/cpp/include/Ice/NativePropertiesAdmin.h +55 -0
  102. data/ext/ice/cpp/include/Ice/Object.h +165 -0
  103. data/ext/ice/cpp/include/Ice/ObjectAdapter.h +162 -0
  104. data/ext/ice/cpp/include/Ice/ObjectAdapterF.h +60 -0
  105. data/ext/ice/cpp/include/Ice/ObjectAdapterFactoryF.h +26 -0
  106. data/ext/ice/cpp/include/Ice/ObjectF.h +26 -0
  107. data/ext/ice/cpp/include/Ice/ObjectFactory.h +86 -0
  108. data/ext/ice/cpp/include/Ice/ObjectFactoryF.h +60 -0
  109. data/ext/ice/cpp/include/Ice/ObjectFactoryManagerF.h +26 -0
  110. data/ext/ice/cpp/include/Ice/ObserverHelper.h +177 -0
  111. data/ext/ice/cpp/include/Ice/Outgoing.h +197 -0
  112. data/ext/ice/cpp/include/Ice/OutgoingAsync.h +264 -0
  113. data/ext/ice/cpp/include/Ice/OutgoingAsyncF.h +38 -0
  114. data/ext/ice/cpp/include/Ice/Plugin.h +121 -0
  115. data/ext/ice/cpp/include/Ice/PluginF.h +66 -0
  116. data/ext/ice/cpp/include/Ice/Process.h +568 -0
  117. data/ext/ice/cpp/include/Ice/ProcessF.h +77 -0
  118. data/ext/ice/cpp/include/Ice/Properties.h +130 -0
  119. data/ext/ice/cpp/include/Ice/PropertiesAdmin.h +824 -0
  120. data/ext/ice/cpp/include/Ice/PropertiesF.h +83 -0
  121. data/ext/ice/cpp/include/Ice/Protocol.h +242 -0
  122. data/ext/ice/cpp/include/Ice/Proxy.h +2448 -0
  123. data/ext/ice/cpp/include/Ice/ProxyF.h +78 -0
  124. data/ext/ice/cpp/include/Ice/ProxyFactoryF.h +26 -0
  125. data/ext/ice/cpp/include/Ice/ProxyHandle.h +330 -0
  126. data/ext/ice/cpp/include/Ice/ReferenceF.h +34 -0
  127. data/ext/ice/cpp/include/Ice/RemoteLogger.h +1496 -0
  128. data/ext/ice/cpp/include/Ice/RequestHandlerF.h +29 -0
  129. data/ext/ice/cpp/include/Ice/ResponseHandlerF.h +25 -0
  130. data/ext/ice/cpp/include/Ice/Router.h +1155 -0
  131. data/ext/ice/cpp/include/Ice/RouterF.h +77 -0
  132. data/ext/ice/cpp/include/Ice/ServantLocator.h +90 -0
  133. data/ext/ice/cpp/include/Ice/ServantLocatorF.h +60 -0
  134. data/ext/ice/cpp/include/Ice/ServantManagerF.h +26 -0
  135. data/ext/ice/cpp/include/Ice/Service.h +260 -0
  136. data/ext/ice/cpp/include/Ice/SliceChecksumDict.h +56 -0
  137. data/ext/ice/cpp/include/Ice/SliceChecksums.h +34 -0
  138. data/ext/ice/cpp/include/Ice/SlicedData.h +103 -0
  139. data/ext/ice/cpp/include/Ice/SlicedDataF.h +34 -0
  140. data/ext/ice/cpp/include/Ice/Stream.h +449 -0
  141. data/ext/ice/cpp/include/Ice/StreamF.h +30 -0
  142. data/ext/ice/cpp/include/Ice/StreamHelpers.h +877 -0
  143. data/ext/ice/cpp/include/Ice/ThreadPoolF.h +28 -0
  144. data/ext/ice/cpp/include/Ice/UserExceptionFactory.h +56 -0
  145. data/ext/ice/cpp/include/Ice/Version.h +254 -0
  146. data/ext/ice/cpp/include/IceSSL/Config.h +23 -0
  147. data/ext/ice/cpp/include/IceSSL/ConnectionInfo.h +119 -0
  148. data/ext/ice/cpp/include/IceSSL/EndpointInfo.h +101 -0
  149. data/ext/ice/cpp/include/IceSSL/IceSSL.h +22 -0
  150. data/ext/ice/cpp/include/IceSSL/Makefile +26 -0
  151. data/ext/ice/cpp/include/IceSSL/Plugin.h +558 -0
  152. data/ext/ice/cpp/include/IceUtil/AbstractMutex.h +119 -0
  153. data/ext/ice/cpp/include/IceUtil/Cache.h +362 -0
  154. data/ext/ice/cpp/include/IceUtil/Cond.h +323 -0
  155. data/ext/ice/cpp/include/IceUtil/Config.h +234 -0
  156. data/ext/ice/cpp/include/IceUtil/CountDownLatch.h +50 -0
  157. data/ext/ice/cpp/include/IceUtil/CtrlCHandler.h +70 -0
  158. data/ext/ice/cpp/include/IceUtil/DisableWarnings.h +45 -0
  159. data/ext/ice/cpp/include/IceUtil/Exception.h +184 -0
  160. data/ext/ice/cpp/include/IceUtil/Functional.h +389 -0
  161. data/ext/ice/cpp/include/IceUtil/Handle.h +266 -0
  162. data/ext/ice/cpp/include/IceUtil/IceUtil.h +51 -0
  163. data/ext/ice/cpp/include/IceUtil/IconvStringConverter.h +302 -0
  164. data/ext/ice/cpp/include/IceUtil/InputUtil.h +47 -0
  165. data/ext/ice/cpp/include/IceUtil/Iterator.h +36 -0
  166. data/ext/ice/cpp/include/IceUtil/Lock.h +135 -0
  167. data/ext/ice/cpp/include/IceUtil/Makefile +26 -0
  168. data/ext/ice/cpp/include/IceUtil/Monitor.h +249 -0
  169. data/ext/ice/cpp/include/IceUtil/Mutex.h +357 -0
  170. data/ext/ice/cpp/include/IceUtil/MutexProtocol.h +28 -0
  171. data/ext/ice/cpp/include/IceUtil/MutexPtrLock.h +83 -0
  172. data/ext/ice/cpp/include/IceUtil/MutexPtrTryLock.h +82 -0
  173. data/ext/ice/cpp/include/IceUtil/Optional.h +322 -0
  174. data/ext/ice/cpp/include/IceUtil/Options.h +141 -0
  175. data/ext/ice/cpp/include/IceUtil/OutputUtil.h +362 -0
  176. data/ext/ice/cpp/include/IceUtil/PopDisableWarnings.h +19 -0
  177. data/ext/ice/cpp/include/IceUtil/PushDisableWarnings.h +26 -0
  178. data/ext/ice/cpp/include/IceUtil/Random.h +24 -0
  179. data/ext/ice/cpp/include/IceUtil/RecMutex.h +113 -0
  180. data/ext/ice/cpp/include/IceUtil/SHA1.h +65 -0
  181. data/ext/ice/cpp/include/IceUtil/ScannerConfig.h +44 -0
  182. data/ext/ice/cpp/include/IceUtil/ScopedArray.h +97 -0
  183. data/ext/ice/cpp/include/IceUtil/Shared.h +168 -0
  184. data/ext/ice/cpp/include/IceUtil/StringConverter.h +175 -0
  185. data/ext/ice/cpp/include/IceUtil/StringUtil.h +91 -0
  186. data/ext/ice/cpp/include/IceUtil/Thread.h +181 -0
  187. data/ext/ice/cpp/include/IceUtil/ThreadException.h +108 -0
  188. data/ext/ice/cpp/include/IceUtil/Time.h +209 -0
  189. data/ext/ice/cpp/include/IceUtil/Timer.h +143 -0
  190. data/ext/ice/cpp/include/IceUtil/UUID.h +22 -0
  191. data/ext/ice/cpp/include/IceUtil/UndefSysMacros.h +42 -0
  192. data/ext/ice/cpp/include/IceUtil/UniquePtr.h +101 -0
  193. data/ext/ice/cpp/include/Slice/CPlusPlusUtil.h +64 -0
  194. data/ext/ice/cpp/include/Slice/Checksum.h +26 -0
  195. data/ext/ice/cpp/include/Slice/CsUtil.h +92 -0
  196. data/ext/ice/cpp/include/Slice/DotNetNames.h +34 -0
  197. data/ext/ice/cpp/include/Slice/FileTracker.h +71 -0
  198. data/ext/ice/cpp/include/Slice/JavaUtil.h +277 -0
  199. data/ext/ice/cpp/include/Slice/Makefile +26 -0
  200. data/ext/ice/cpp/include/Slice/PHPUtil.h +50 -0
  201. data/ext/ice/cpp/include/Slice/Parser.h +1116 -0
  202. data/ext/ice/cpp/include/Slice/Preprocessor.h +68 -0
  203. data/ext/ice/cpp/include/Slice/PythonUtil.h +64 -0
  204. data/ext/ice/cpp/include/Slice/RubyUtil.h +54 -0
  205. data/ext/ice/cpp/include/Slice/Util.h +33 -0
  206. data/ext/ice/cpp/src/Ice/ACM.cpp +343 -0
  207. data/ext/ice/cpp/src/Ice/ACM.h +117 -0
  208. data/ext/ice/cpp/src/Ice/Acceptor.cpp +16 -0
  209. data/ext/ice/cpp/src/Ice/Acceptor.h +41 -0
  210. data/ext/ice/cpp/src/Ice/AcceptorF.h +30 -0
  211. data/ext/ice/cpp/src/Ice/Application.cpp +760 -0
  212. data/ext/ice/cpp/src/Ice/AsyncResult.cpp +599 -0
  213. data/ext/ice/cpp/src/Ice/Base64.cpp +269 -0
  214. data/ext/ice/cpp/src/Ice/Base64.h +36 -0
  215. data/ext/ice/cpp/src/Ice/BasicStream.cpp +3393 -0
  216. data/ext/ice/cpp/src/Ice/Buffer.cpp +98 -0
  217. data/ext/ice/cpp/src/Ice/BuiltinSequences.cpp +34 -0
  218. data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.cpp +718 -0
  219. data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.h +106 -0
  220. data/ext/ice/cpp/src/Ice/Communicator.cpp +45 -0
  221. data/ext/ice/cpp/src/Ice/CommunicatorF.cpp +38 -0
  222. data/ext/ice/cpp/src/Ice/CommunicatorI.cpp +386 -0
  223. data/ext/ice/cpp/src/Ice/CommunicatorI.h +112 -0
  224. data/ext/ice/cpp/src/Ice/ConnectRequestHandler.cpp +546 -0
  225. data/ext/ice/cpp/src/Ice/ConnectRequestHandler.h +97 -0
  226. data/ext/ice/cpp/src/Ice/Connection.cpp +58 -0
  227. data/ext/ice/cpp/src/Ice/ConnectionF.cpp +38 -0
  228. data/ext/ice/cpp/src/Ice/ConnectionFactory.cpp +1639 -0
  229. data/ext/ice/cpp/src/Ice/ConnectionFactory.h +236 -0
  230. data/ext/ice/cpp/src/Ice/ConnectionI.cpp +3876 -0
  231. data/ext/ice/cpp/src/Ice/ConnectionI.h +364 -0
  232. data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.cpp +115 -0
  233. data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.h +50 -0
  234. data/ext/ice/cpp/src/Ice/Connector.cpp +16 -0
  235. data/ext/ice/cpp/src/Ice/Connector.h +36 -0
  236. data/ext/ice/cpp/src/Ice/ConnectorF.h +26 -0
  237. data/ext/ice/cpp/src/Ice/Current.cpp +38 -0
  238. data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.cpp +168 -0
  239. data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.h +57 -0
  240. data/ext/ice/cpp/src/Ice/DefaultsAndOverridesF.h +26 -0
  241. data/ext/ice/cpp/src/Ice/DeprecatedStringConverter.cpp +60 -0
  242. data/ext/ice/cpp/src/Ice/DispatchInterceptor.cpp +49 -0
  243. data/ext/ice/cpp/src/Ice/DynamicLibrary.cpp +281 -0
  244. data/ext/ice/cpp/src/Ice/Endpoint.cpp +53 -0
  245. data/ext/ice/cpp/src/Ice/EndpointF.cpp +38 -0
  246. data/ext/ice/cpp/src/Ice/EndpointFactory.cpp +25 -0
  247. data/ext/ice/cpp/src/Ice/EndpointFactory.h +44 -0
  248. data/ext/ice/cpp/src/Ice/EndpointFactoryF.h +26 -0
  249. data/ext/ice/cpp/src/Ice/EndpointFactoryManager.cpp +208 -0
  250. data/ext/ice/cpp/src/Ice/EndpointFactoryManager.h +46 -0
  251. data/ext/ice/cpp/src/Ice/EndpointFactoryManagerF.h +26 -0
  252. data/ext/ice/cpp/src/Ice/EndpointI.cpp +87 -0
  253. data/ext/ice/cpp/src/Ice/EndpointI.h +165 -0
  254. data/ext/ice/cpp/src/Ice/EndpointIF.h +41 -0
  255. data/ext/ice/cpp/src/Ice/EndpointTypes.cpp +38 -0
  256. data/ext/ice/cpp/src/Ice/EventHandler.cpp +35 -0
  257. data/ext/ice/cpp/src/Ice/EventHandler.h +78 -0
  258. data/ext/ice/cpp/src/Ice/EventHandlerF.h +26 -0
  259. data/ext/ice/cpp/src/Ice/EventLoggerMsg.h +53 -0
  260. data/ext/ice/cpp/src/Ice/Exception.cpp +832 -0
  261. data/ext/ice/cpp/src/Ice/FacetMap.cpp +34 -0
  262. data/ext/ice/cpp/src/Ice/FactoryTable.cpp +158 -0
  263. data/ext/ice/cpp/src/Ice/FactoryTableInit.cpp +95 -0
  264. data/ext/ice/cpp/src/Ice/GCObject.cpp +444 -0
  265. data/ext/ice/cpp/src/Ice/HashUtil.h +59 -0
  266. data/ext/ice/cpp/src/Ice/HttpParser.cpp +680 -0
  267. data/ext/ice/cpp/src/Ice/HttpParser.h +124 -0
  268. data/ext/ice/cpp/src/Ice/IPEndpointI.cpp +733 -0
  269. data/ext/ice/cpp/src/Ice/IPEndpointI.h +157 -0
  270. data/ext/ice/cpp/src/Ice/IPEndpointIF.h +29 -0
  271. data/ext/ice/cpp/src/Ice/Identity.cpp +42 -0
  272. data/ext/ice/cpp/src/Ice/ImplicitContext.cpp +41 -0
  273. data/ext/ice/cpp/src/Ice/ImplicitContextF.cpp +38 -0
  274. data/ext/ice/cpp/src/Ice/ImplicitContextI.cpp +639 -0
  275. data/ext/ice/cpp/src/Ice/ImplicitContextI.h +51 -0
  276. data/ext/ice/cpp/src/Ice/Incoming.cpp +757 -0
  277. data/ext/ice/cpp/src/Ice/IncomingAsync.cpp +340 -0
  278. data/ext/ice/cpp/src/Ice/IncomingRequest.h +37 -0
  279. data/ext/ice/cpp/src/Ice/Initialize.cpp +401 -0
  280. data/ext/ice/cpp/src/Ice/Instance.cpp +1928 -0
  281. data/ext/ice/cpp/src/Ice/Instance.h +198 -0
  282. data/ext/ice/cpp/src/Ice/Instrumentation.cpp +68 -0
  283. data/ext/ice/cpp/src/Ice/InstrumentationF.cpp +43 -0
  284. data/ext/ice/cpp/src/Ice/InstrumentationI.cpp +1083 -0
  285. data/ext/ice/cpp/src/Ice/InstrumentationI.h +262 -0
  286. data/ext/ice/cpp/src/Ice/LocalException.cpp +2091 -0
  287. data/ext/ice/cpp/src/Ice/LocalObject.cpp +29 -0
  288. data/ext/ice/cpp/src/Ice/Locator.cpp +1946 -0
  289. data/ext/ice/cpp/src/Ice/LocatorF.cpp +39 -0
  290. data/ext/ice/cpp/src/Ice/LocatorInfo.cpp +917 -0
  291. data/ext/ice/cpp/src/Ice/LocatorInfo.h +193 -0
  292. data/ext/ice/cpp/src/Ice/LocatorInfoF.h +34 -0
  293. data/ext/ice/cpp/src/Ice/Logger.cpp +40 -0
  294. data/ext/ice/cpp/src/Ice/LoggerAdminI.cpp +862 -0
  295. data/ext/ice/cpp/src/Ice/LoggerAdminI.h +46 -0
  296. data/ext/ice/cpp/src/Ice/LoggerF.cpp +38 -0
  297. data/ext/ice/cpp/src/Ice/LoggerI.cpp +199 -0
  298. data/ext/ice/cpp/src/Ice/LoggerI.h +57 -0
  299. data/ext/ice/cpp/src/Ice/LoggerUtil.cpp +107 -0
  300. data/ext/ice/cpp/src/Ice/Makefile +190 -0
  301. data/ext/ice/cpp/src/Ice/Metrics.cpp +2159 -0
  302. data/ext/ice/cpp/src/Ice/MetricsAdminI.cpp +669 -0
  303. data/ext/ice/cpp/src/Ice/MetricsObserverI.cpp +14 -0
  304. data/ext/ice/cpp/src/Ice/Network.cpp +2694 -0
  305. data/ext/ice/cpp/src/Ice/Network.h +291 -0
  306. data/ext/ice/cpp/src/Ice/NetworkF.h +28 -0
  307. data/ext/ice/cpp/src/Ice/NetworkProxy.cpp +325 -0
  308. data/ext/ice/cpp/src/Ice/NetworkProxy.h +74 -0
  309. data/ext/ice/cpp/src/Ice/NetworkProxyF.h +26 -0
  310. data/ext/ice/cpp/src/Ice/Object.cpp +440 -0
  311. data/ext/ice/cpp/src/Ice/ObjectAdapter.cpp +41 -0
  312. data/ext/ice/cpp/src/Ice/ObjectAdapterF.cpp +38 -0
  313. data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.cpp +241 -0
  314. data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.h +52 -0
  315. data/ext/ice/cpp/src/Ice/ObjectAdapterI.cpp +1498 -0
  316. data/ext/ice/cpp/src/Ice/ObjectAdapterI.h +155 -0
  317. data/ext/ice/cpp/src/Ice/ObjectFactory.cpp +41 -0
  318. data/ext/ice/cpp/src/Ice/ObjectFactoryF.cpp +38 -0
  319. data/ext/ice/cpp/src/Ice/ObjectFactoryManager.cpp +140 -0
  320. data/ext/ice/cpp/src/Ice/ObjectFactoryManager.h +43 -0
  321. data/ext/ice/cpp/src/Ice/ObserverHelper.cpp +84 -0
  322. data/ext/ice/cpp/src/Ice/OpaqueEndpointI.cpp +407 -0
  323. data/ext/ice/cpp/src/Ice/OpaqueEndpointI.h +70 -0
  324. data/ext/ice/cpp/src/Ice/Outgoing.cpp +737 -0
  325. data/ext/ice/cpp/src/Ice/OutgoingAsync.cpp +874 -0
  326. data/ext/ice/cpp/src/Ice/Plugin.cpp +43 -0
  327. data/ext/ice/cpp/src/Ice/PluginF.cpp +38 -0
  328. data/ext/ice/cpp/src/Ice/PluginManagerI.cpp +503 -0
  329. data/ext/ice/cpp/src/Ice/PluginManagerI.h +67 -0
  330. data/ext/ice/cpp/src/Ice/Process.cpp +299 -0
  331. data/ext/ice/cpp/src/Ice/ProcessF.cpp +39 -0
  332. data/ext/ice/cpp/src/Ice/Properties.cpp +45 -0
  333. data/ext/ice/cpp/src/Ice/PropertiesAdmin.cpp +555 -0
  334. data/ext/ice/cpp/src/Ice/PropertiesAdminI.cpp +207 -0
  335. data/ext/ice/cpp/src/Ice/PropertiesAdminI.h +45 -0
  336. data/ext/ice/cpp/src/Ice/PropertiesF.cpp +39 -0
  337. data/ext/ice/cpp/src/Ice/PropertiesI.cpp +759 -0
  338. data/ext/ice/cpp/src/Ice/PropertiesI.h +78 -0
  339. data/ext/ice/cpp/src/Ice/PropertyNames.cpp +1293 -0
  340. data/ext/ice/cpp/src/Ice/PropertyNames.h +81 -0
  341. data/ext/ice/cpp/src/Ice/Protocol.cpp +137 -0
  342. data/ext/ice/cpp/src/Ice/ProtocolInstance.cpp +98 -0
  343. data/ext/ice/cpp/src/Ice/ProtocolInstance.h +91 -0
  344. data/ext/ice/cpp/src/Ice/ProtocolInstanceF.h +26 -0
  345. data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.cpp +51 -0
  346. data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.h +67 -0
  347. data/ext/ice/cpp/src/Ice/ProtocolPluginFacadeF.h +26 -0
  348. data/ext/ice/cpp/src/Ice/Proxy.cpp +1810 -0
  349. data/ext/ice/cpp/src/Ice/ProxyFactory.cpp +305 -0
  350. data/ext/ice/cpp/src/Ice/ProxyFactory.h +57 -0
  351. data/ext/ice/cpp/src/Ice/Reference.cpp +1947 -0
  352. data/ext/ice/cpp/src/Ice/Reference.h +305 -0
  353. data/ext/ice/cpp/src/Ice/ReferenceFactory.cpp +937 -0
  354. data/ext/ice/cpp/src/Ice/ReferenceFactory.h +81 -0
  355. data/ext/ice/cpp/src/Ice/ReferenceFactoryF.h +24 -0
  356. data/ext/ice/cpp/src/Ice/RemoteLogger.cpp +958 -0
  357. data/ext/ice/cpp/src/Ice/ReplyStatus.h +29 -0
  358. data/ext/ice/cpp/src/Ice/RequestHandler.cpp +40 -0
  359. data/ext/ice/cpp/src/Ice/RequestHandler.h +90 -0
  360. data/ext/ice/cpp/src/Ice/RequestHandlerFactory.cpp +70 -0
  361. data/ext/ice/cpp/src/Ice/RequestHandlerFactory.h +41 -0
  362. data/ext/ice/cpp/src/Ice/ResponseHandler.cpp +20 -0
  363. data/ext/ice/cpp/src/Ice/ResponseHandler.h +39 -0
  364. data/ext/ice/cpp/src/Ice/RetryQueue.cpp +154 -0
  365. data/ext/ice/cpp/src/Ice/RetryQueue.h +69 -0
  366. data/ext/ice/cpp/src/Ice/RetryQueueF.h +24 -0
  367. data/ext/ice/cpp/src/Ice/Router.cpp +849 -0
  368. data/ext/ice/cpp/src/Ice/RouterF.cpp +39 -0
  369. data/ext/ice/cpp/src/Ice/RouterInfo.cpp +381 -0
  370. data/ext/ice/cpp/src/Ice/RouterInfo.h +148 -0
  371. data/ext/ice/cpp/src/Ice/RouterInfoF.h +30 -0
  372. data/ext/ice/cpp/src/Ice/Selector.cpp +926 -0
  373. data/ext/ice/cpp/src/Ice/Selector.h +231 -0
  374. data/ext/ice/cpp/src/Ice/ServantLocator.cpp +41 -0
  375. data/ext/ice/cpp/src/Ice/ServantLocatorF.cpp +38 -0
  376. data/ext/ice/cpp/src/Ice/ServantManager.cpp +495 -0
  377. data/ext/ice/cpp/src/Ice/ServantManager.h +74 -0
  378. data/ext/ice/cpp/src/Ice/Service.cpp +1897 -0
  379. data/ext/ice/cpp/src/Ice/SharedContext.h +51 -0
  380. data/ext/ice/cpp/src/Ice/SliceChecksumDict.cpp +34 -0
  381. data/ext/ice/cpp/src/Ice/SliceChecksums.cpp +80 -0
  382. data/ext/ice/cpp/src/Ice/SlicedData.cpp +80 -0
  383. data/ext/ice/cpp/src/Ice/Stream.cpp +53 -0
  384. data/ext/ice/cpp/src/Ice/StreamI.cpp +832 -0
  385. data/ext/ice/cpp/src/Ice/StreamI.h +198 -0
  386. data/ext/ice/cpp/src/Ice/StreamSocket.cpp +521 -0
  387. data/ext/ice/cpp/src/Ice/StreamSocket.h +85 -0
  388. data/ext/ice/cpp/src/Ice/StringConverterPlugin.cpp +145 -0
  389. data/ext/ice/cpp/src/Ice/SysLoggerI.cpp +167 -0
  390. data/ext/ice/cpp/src/Ice/SysLoggerI.h +43 -0
  391. data/ext/ice/cpp/src/Ice/TcpAcceptor.cpp +235 -0
  392. data/ext/ice/cpp/src/Ice/TcpAcceptor.h +67 -0
  393. data/ext/ice/cpp/src/Ice/TcpConnector.cpp +133 -0
  394. data/ext/ice/cpp/src/Ice/TcpConnector.h +51 -0
  395. data/ext/ice/cpp/src/Ice/TcpEndpointI.cpp +397 -0
  396. data/ext/ice/cpp/src/Ice/TcpEndpointI.h +93 -0
  397. data/ext/ice/cpp/src/Ice/TcpTransceiver.cpp +127 -0
  398. data/ext/ice/cpp/src/Ice/TcpTransceiver.h +61 -0
  399. data/ext/ice/cpp/src/Ice/ThreadPool.cpp +1357 -0
  400. data/ext/ice/cpp/src/Ice/ThreadPool.h +399 -0
  401. data/ext/ice/cpp/src/Ice/TraceLevels.cpp +43 -0
  402. data/ext/ice/cpp/src/Ice/TraceLevels.h +50 -0
  403. data/ext/ice/cpp/src/Ice/TraceLevelsF.h +26 -0
  404. data/ext/ice/cpp/src/Ice/TraceUtil.cpp +452 -0
  405. data/ext/ice/cpp/src/Ice/TraceUtil.h +28 -0
  406. data/ext/ice/cpp/src/Ice/Transceiver.cpp +24 -0
  407. data/ext/ice/cpp/src/Ice/Transceiver.h +52 -0
  408. data/ext/ice/cpp/src/Ice/TransceiverF.h +38 -0
  409. data/ext/ice/cpp/src/Ice/UdpConnector.cpp +144 -0
  410. data/ext/ice/cpp/src/Ice/UdpConnector.h +51 -0
  411. data/ext/ice/cpp/src/Ice/UdpEndpointI.cpp +483 -0
  412. data/ext/ice/cpp/src/Ice/UdpEndpointI.h +95 -0
  413. data/ext/ice/cpp/src/Ice/UdpTransceiver.cpp +1156 -0
  414. data/ext/ice/cpp/src/Ice/UdpTransceiver.h +123 -0
  415. data/ext/ice/cpp/src/Ice/Version.cpp +46 -0
  416. data/ext/ice/cpp/src/Ice/WSAcceptor.cpp +103 -0
  417. data/ext/ice/cpp/src/Ice/WSAcceptor.h +61 -0
  418. data/ext/ice/cpp/src/Ice/WSConnector.cpp +113 -0
  419. data/ext/ice/cpp/src/Ice/WSConnector.h +51 -0
  420. data/ext/ice/cpp/src/Ice/WSEndpoint.cpp +441 -0
  421. data/ext/ice/cpp/src/Ice/WSEndpoint.h +97 -0
  422. data/ext/ice/cpp/src/Ice/WSTransceiver.cpp +1728 -0
  423. data/ext/ice/cpp/src/Ice/WSTransceiver.h +149 -0
  424. data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.cpp +594 -0
  425. data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.h +1035 -0
  426. data/ext/ice/cpp/src/IceDiscovery/LocatorI.cpp +208 -0
  427. data/ext/ice/cpp/src/IceDiscovery/LocatorI.h +78 -0
  428. data/ext/ice/cpp/src/IceDiscovery/LookupI.cpp +308 -0
  429. data/ext/ice/cpp/src/IceDiscovery/LookupI.h +183 -0
  430. data/ext/ice/cpp/src/IceDiscovery/Makefile +61 -0
  431. data/ext/ice/cpp/src/IceDiscovery/PluginI.cpp +148 -0
  432. data/ext/ice/cpp/src/IceDiscovery/PluginI.h +39 -0
  433. data/ext/ice/cpp/src/IceSSL/AcceptorI.cpp +258 -0
  434. data/ext/ice/cpp/src/IceSSL/AcceptorI.h +66 -0
  435. data/ext/ice/cpp/src/IceSSL/Certificate.cpp +1334 -0
  436. data/ext/ice/cpp/src/IceSSL/ConnectionInfo.cpp +42 -0
  437. data/ext/ice/cpp/src/IceSSL/ConnectorI.cpp +151 -0
  438. data/ext/ice/cpp/src/IceSSL/ConnectorI.h +56 -0
  439. data/ext/ice/cpp/src/IceSSL/EndpointI.cpp +397 -0
  440. data/ext/ice/cpp/src/IceSSL/EndpointI.h +96 -0
  441. data/ext/ice/cpp/src/IceSSL/EndpointInfo.cpp +41 -0
  442. data/ext/ice/cpp/src/IceSSL/Instance.cpp +38 -0
  443. data/ext/ice/cpp/src/IceSSL/Instance.h +42 -0
  444. data/ext/ice/cpp/src/IceSSL/InstanceF.h +34 -0
  445. data/ext/ice/cpp/src/IceSSL/Makefile +82 -0
  446. data/ext/ice/cpp/src/IceSSL/OpenSSLEngine.cpp +1001 -0
  447. data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.cpp +607 -0
  448. data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.h +75 -0
  449. data/ext/ice/cpp/src/IceSSL/PluginI.cpp +102 -0
  450. data/ext/ice/cpp/src/IceSSL/PluginI.h +56 -0
  451. data/ext/ice/cpp/src/IceSSL/RFC2253.cpp +541 -0
  452. data/ext/ice/cpp/src/IceSSL/RFC2253.h +67 -0
  453. data/ext/ice/cpp/src/IceSSL/SChannelEngine.cpp +729 -0
  454. data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.cpp +1062 -0
  455. data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.h +130 -0
  456. data/ext/ice/cpp/src/IceSSL/SSLEngine.cpp +291 -0
  457. data/ext/ice/cpp/src/IceSSL/SSLEngine.h +264 -0
  458. data/ext/ice/cpp/src/IceSSL/SSLEngineF.h +41 -0
  459. data/ext/ice/cpp/src/IceSSL/SecureTransportEngine.cpp +1514 -0
  460. data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.cpp +609 -0
  461. data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.h +91 -0
  462. data/ext/ice/cpp/src/IceSSL/TrustManager.cpp +246 -0
  463. data/ext/ice/cpp/src/IceSSL/TrustManager.h +51 -0
  464. data/ext/ice/cpp/src/IceSSL/TrustManagerF.h +26 -0
  465. data/ext/ice/cpp/src/IceSSL/Util.cpp +1423 -0
  466. data/ext/ice/cpp/src/IceSSL/Util.h +136 -0
  467. data/ext/ice/cpp/src/IceUtil/ArgVector.cpp +65 -0
  468. data/ext/ice/cpp/src/IceUtil/ArgVector.h +41 -0
  469. data/ext/ice/cpp/src/IceUtil/Cond.cpp +386 -0
  470. data/ext/ice/cpp/src/IceUtil/ConvertUTF.cpp +477 -0
  471. data/ext/ice/cpp/src/IceUtil/ConvertUTF.h +144 -0
  472. data/ext/ice/cpp/src/IceUtil/CountDownLatch.cpp +184 -0
  473. data/ext/ice/cpp/src/IceUtil/CtrlCHandler.cpp +273 -0
  474. data/ext/ice/cpp/src/IceUtil/Exception.cpp +782 -0
  475. data/ext/ice/cpp/src/IceUtil/FileUtil.cpp +532 -0
  476. data/ext/ice/cpp/src/IceUtil/FileUtil.h +159 -0
  477. data/ext/ice/cpp/src/IceUtil/InputUtil.cpp +41 -0
  478. data/ext/ice/cpp/src/IceUtil/Makefile +68 -0
  479. data/ext/ice/cpp/src/IceUtil/MutexProtocol.cpp +24 -0
  480. data/ext/ice/cpp/src/IceUtil/Options.cpp +1049 -0
  481. data/ext/ice/cpp/src/IceUtil/OutputUtil.cpp +591 -0
  482. data/ext/ice/cpp/src/IceUtil/Random.cpp +185 -0
  483. data/ext/ice/cpp/src/IceUtil/RecMutex.cpp +257 -0
  484. data/ext/ice/cpp/src/IceUtil/SHA1.cpp +126 -0
  485. data/ext/ice/cpp/src/IceUtil/Shared.cpp +200 -0
  486. data/ext/ice/cpp/src/IceUtil/StopWatch.h +54 -0
  487. data/ext/ice/cpp/src/IceUtil/StringConverter.cpp +450 -0
  488. data/ext/ice/cpp/src/IceUtil/StringUtil.cpp +842 -0
  489. data/ext/ice/cpp/src/IceUtil/Thread.cpp +809 -0
  490. data/ext/ice/cpp/src/IceUtil/ThreadException.cpp +172 -0
  491. data/ext/ice/cpp/src/IceUtil/Time.cpp +306 -0
  492. data/ext/ice/cpp/src/IceUtil/Timer.cpp +251 -0
  493. data/ext/ice/cpp/src/IceUtil/UUID.cpp +174 -0
  494. data/ext/ice/cpp/src/IceUtil/Unicode.cpp +131 -0
  495. data/ext/ice/cpp/src/IceUtil/Unicode.h +49 -0
  496. data/ext/ice/cpp/src/Slice/CPlusPlusUtil.cpp +1139 -0
  497. data/ext/ice/cpp/src/Slice/Checksum.cpp +452 -0
  498. data/ext/ice/cpp/src/Slice/CsUtil.cpp +2650 -0
  499. data/ext/ice/cpp/src/Slice/DotNetNames.cpp +146 -0
  500. data/ext/ice/cpp/src/Slice/FileTracker.cpp +203 -0
  501. data/ext/ice/cpp/src/Slice/Grammar.cpp +4755 -0
  502. data/ext/ice/cpp/src/Slice/Grammar.h +98 -0
  503. data/ext/ice/cpp/src/Slice/GrammarUtil.h +234 -0
  504. data/ext/ice/cpp/src/Slice/JavaUtil.cpp +4376 -0
  505. data/ext/ice/cpp/src/Slice/MD5.cpp +57 -0
  506. data/ext/ice/cpp/src/Slice/MD5.h +44 -0
  507. data/ext/ice/cpp/src/Slice/MD5I.cpp +385 -0
  508. data/ext/ice/cpp/src/Slice/MD5I.h +91 -0
  509. data/ext/ice/cpp/src/Slice/Makefile +65 -0
  510. data/ext/ice/cpp/src/Slice/PHPUtil.cpp +156 -0
  511. data/ext/ice/cpp/src/Slice/Parser.cpp +6386 -0
  512. data/ext/ice/cpp/src/Slice/Preprocessor.cpp +686 -0
  513. data/ext/ice/cpp/src/Slice/Python.cpp +675 -0
  514. data/ext/ice/cpp/src/Slice/PythonUtil.cpp +2614 -0
  515. data/ext/ice/cpp/src/Slice/Ruby.cpp +317 -0
  516. data/ext/ice/cpp/src/Slice/RubyUtil.cpp +1774 -0
  517. data/ext/ice/cpp/src/Slice/Scanner.cpp +2426 -0
  518. data/ext/ice/cpp/src/Slice/Util.cpp +325 -0
  519. data/ext/ice/mcpp/config.h.Darwin +227 -0
  520. data/ext/ice/mcpp/config.h.Linux +227 -0
  521. data/ext/ice/mcpp/config.h.MINGW +7 -0
  522. data/ext/ice/mcpp/configed.H +382 -0
  523. data/ext/ice/mcpp/directive.c +1699 -0
  524. data/ext/ice/mcpp/eval.c +1673 -0
  525. data/ext/ice/mcpp/expand.c +2980 -0
  526. data/ext/ice/mcpp/internal.H +564 -0
  527. data/ext/ice/mcpp/main.c +1131 -0
  528. data/ext/ice/mcpp/mbchar.c +869 -0
  529. data/ext/ice/mcpp/mcpp_lib.h +31 -0
  530. data/ext/ice/mcpp/mcpp_out.h +13 -0
  531. data/ext/ice/mcpp/support.c +2811 -0
  532. data/ext/ice/mcpp/system.H +396 -0
  533. data/ext/ice/mcpp/system.c +4940 -0
  534. data/ice.gemspec +41 -0
  535. data/lib/Glacier2.rb +12 -0
  536. data/lib/Glacier2/Metrics.rb +99 -0
  537. data/lib/Glacier2/PermissionsVerifier.rb +168 -0
  538. data/lib/Glacier2/PermissionsVerifierF.rb +34 -0
  539. data/lib/Glacier2/Router.rb +141 -0
  540. data/lib/Glacier2/RouterF.rb +29 -0
  541. data/lib/Glacier2/SSLInfo.rb +79 -0
  542. data/lib/Glacier2/Session.rb +470 -0
  543. data/lib/Ice.rb +659 -0
  544. data/lib/Ice/BuiltinSequences.rb +64 -0
  545. data/lib/Ice/Communicator.rb +93 -0
  546. data/lib/Ice/CommunicatorF.rb +28 -0
  547. data/lib/Ice/Connection.rb +414 -0
  548. data/lib/Ice/ConnectionF.rb +36 -0
  549. data/lib/Ice/Current.rb +152 -0
  550. data/lib/Ice/Endpoint.rb +265 -0
  551. data/lib/Ice/EndpointF.rb +52 -0
  552. data/lib/Ice/EndpointTypes.rb +77 -0
  553. data/lib/Ice/FacetMap.rb +28 -0
  554. data/lib/Ice/Identity.rb +70 -0
  555. data/lib/Ice/ImplicitContext.rb +59 -0
  556. data/lib/Ice/ImplicitContextF.rb +28 -0
  557. data/lib/Ice/Instrumentation.rb +425 -0
  558. data/lib/Ice/InstrumentationF.rb +35 -0
  559. data/lib/Ice/LocalException.rb +1081 -0
  560. data/lib/Ice/Locator.rb +314 -0
  561. data/lib/Ice/LocatorF.rb +34 -0
  562. data/lib/Ice/Logger.rb +57 -0
  563. data/lib/Ice/LoggerF.rb +28 -0
  564. data/lib/Ice/Metrics.rb +696 -0
  565. data/lib/Ice/ObjectAdapterF.rb +28 -0
  566. data/lib/Ice/ObjectFactory.rb +53 -0
  567. data/lib/Ice/ObjectFactoryF.rb +28 -0
  568. data/lib/Ice/Plugin.rb +87 -0
  569. data/lib/Ice/PluginF.rb +32 -0
  570. data/lib/Ice/Process.rb +93 -0
  571. data/lib/Ice/ProcessF.rb +29 -0
  572. data/lib/Ice/Properties.rb +65 -0
  573. data/lib/Ice/PropertiesAdmin.rb +104 -0
  574. data/lib/Ice/PropertiesF.rb +33 -0
  575. data/lib/Ice/Router.rb +163 -0
  576. data/lib/Ice/RouterF.rb +29 -0
  577. data/lib/Ice/SliceChecksumDict.rb +28 -0
  578. data/lib/Ice/Version.rb +100 -0
  579. data/lib/IceBox.rb +10 -0
  580. data/lib/IceBox/IceBox.rb +272 -0
  581. data/lib/IceGrid.rb +17 -0
  582. data/lib/IceGrid/Admin.rb +1076 -0
  583. data/lib/IceGrid/Descriptor.rb +1505 -0
  584. data/lib/IceGrid/Exception.rb +401 -0
  585. data/lib/IceGrid/FileParser.rb +105 -0
  586. data/lib/IceGrid/Locator.rb +105 -0
  587. data/lib/IceGrid/Observer.rb +571 -0
  588. data/lib/IceGrid/Query.rb +168 -0
  589. data/lib/IceGrid/Registry.rb +120 -0
  590. data/lib/IceGrid/Session.rb +114 -0
  591. data/lib/IceGrid/UserAccountMapper.rb +101 -0
  592. data/lib/IcePatch2.rb +10 -0
  593. data/lib/IcePatch2/FileInfo.rb +75 -0
  594. data/lib/IcePatch2/FileServer.rb +141 -0
  595. data/lib/IceStorm.rb +11 -0
  596. data/lib/IceStorm/IceStorm.rb +463 -0
  597. data/lib/IceStorm/Metrics.rb +155 -0
  598. data/slice/Freeze/BackgroundSaveEvictor.ice +111 -0
  599. data/slice/Freeze/CatalogData.ice +49 -0
  600. data/slice/Freeze/Connection.ice +111 -0
  601. data/slice/Freeze/ConnectionF.ice +20 -0
  602. data/slice/Freeze/DB.ice +37 -0
  603. data/slice/Freeze/Evictor.ice +339 -0
  604. data/slice/Freeze/EvictorF.ice +22 -0
  605. data/slice/Freeze/EvictorStorage.ice +72 -0
  606. data/slice/Freeze/Exception.ice +100 -0
  607. data/slice/Freeze/Transaction.ice +57 -0
  608. data/slice/Freeze/TransactionalEvictor.ice +50 -0
  609. data/slice/Glacier2/Metrics.ice +77 -0
  610. data/slice/Glacier2/PermissionsVerifier.ice +105 -0
  611. data/slice/Glacier2/PermissionsVerifierF.ice +21 -0
  612. data/slice/Glacier2/Router.ice +178 -0
  613. data/slice/Glacier2/RouterF.ice +20 -0
  614. data/slice/Glacier2/SSLInfo.ice +50 -0
  615. data/slice/Glacier2/Session.ice +273 -0
  616. data/slice/Ice/BuiltinSequences.ice +48 -0
  617. data/slice/Ice/Communicator.ice +567 -0
  618. data/slice/Ice/CommunicatorF.ice +20 -0
  619. data/slice/Ice/Connection.ice +323 -0
  620. data/slice/Ice/ConnectionF.ice +22 -0
  621. data/slice/Ice/Current.ice +160 -0
  622. data/slice/Ice/Endpoint.ice +227 -0
  623. data/slice/Ice/EndpointF.ice +32 -0
  624. data/slice/Ice/EndpointTypes.ice +38 -0
  625. data/slice/Ice/FacetMap.ice +25 -0
  626. data/slice/Ice/Identity.ice +59 -0
  627. data/slice/Ice/ImplicitContext.ice +109 -0
  628. data/slice/Ice/ImplicitContextF.ice +20 -0
  629. data/slice/Ice/Instrumentation.ice +499 -0
  630. data/slice/Ice/InstrumentationF.ice +26 -0
  631. data/slice/Ice/LocalException.ice +1015 -0
  632. data/slice/Ice/Locator.ice +227 -0
  633. data/slice/Ice/LocatorF.ice +21 -0
  634. data/slice/Ice/Logger.ice +86 -0
  635. data/slice/Ice/LoggerF.ice +20 -0
  636. data/slice/Ice/Metrics.ice +422 -0
  637. data/slice/Ice/ObjectAdapter.ice +673 -0
  638. data/slice/Ice/ObjectAdapterF.ice +20 -0
  639. data/slice/Ice/ObjectFactory.ice +60 -0
  640. data/slice/Ice/ObjectFactoryF.ice +20 -0
  641. data/slice/Ice/Plugin.ice +117 -0
  642. data/slice/Ice/PluginF.ice +21 -0
  643. data/slice/Ice/Process.ice +54 -0
  644. data/slice/Ice/ProcessF.ice +20 -0
  645. data/slice/Ice/Properties.ice +228 -0
  646. data/slice/Ice/PropertiesAdmin.ice +75 -0
  647. data/slice/Ice/PropertiesF.ice +21 -0
  648. data/slice/Ice/RemoteLogger.ice +232 -0
  649. data/slice/Ice/Router.ice +83 -0
  650. data/slice/Ice/RouterF.ice +20 -0
  651. data/slice/Ice/ServantLocator.ice +117 -0
  652. data/slice/Ice/ServantLocatorF.ice +20 -0
  653. data/slice/Ice/SliceChecksumDict.ice +25 -0
  654. data/slice/Ice/Version.ice +39 -0
  655. data/slice/IceBox/IceBox.ice +194 -0
  656. data/slice/IceDiscovery/IceDiscovery.ice +32 -0
  657. data/slice/IceGrid/Admin.ice +1578 -0
  658. data/slice/IceGrid/Descriptor.ice +1079 -0
  659. data/slice/IceGrid/Discovery.ice +73 -0
  660. data/slice/IceGrid/Exception.ice +383 -0
  661. data/slice/IceGrid/FileParser.ice +61 -0
  662. data/slice/IceGrid/Locator.ice +56 -0
  663. data/slice/IceGrid/Observer.ice +394 -0
  664. data/slice/IceGrid/PluginFacade.ice +316 -0
  665. data/slice/IceGrid/Query.ice +130 -0
  666. data/slice/IceGrid/Registry.ice +138 -0
  667. data/slice/IceGrid/Session.ice +124 -0
  668. data/slice/IceGrid/UserAccountMapper.ice +58 -0
  669. data/slice/IcePatch2/FileInfo.ice +49 -0
  670. data/slice/IcePatch2/FileServer.ice +129 -0
  671. data/slice/IceSSL/ConnectionInfo.ice +34 -0
  672. data/slice/IceSSL/EndpointInfo.ice +41 -0
  673. data/slice/IceStorm/IceStorm.ice +405 -0
  674. data/slice/IceStorm/Metrics.ice +71 -0
  675. metadata +737 -0
@@ -0,0 +1,1928 @@
1
+ // **********************************************************************
2
+ //
3
+ // Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved.
4
+ //
5
+ // This copy of Ice is licensed to you under the terms described in the
6
+ // ICE_LICENSE file included in this distribution.
7
+ //
8
+ // **********************************************************************
9
+
10
+ #include <IceUtil/DisableWarnings.h>
11
+ #include <Ice/Instance.h>
12
+ #include <Ice/TraceLevels.h>
13
+ #include <Ice/DefaultsAndOverrides.h>
14
+ #include <Ice/RouterInfo.h>
15
+ #include <Ice/Router.h>
16
+ #include <Ice/LocatorInfo.h>
17
+ #include <Ice/Locator.h>
18
+ #include <Ice/ReferenceFactory.h>
19
+ #include <Ice/ProxyFactory.h>
20
+ #include <Ice/ThreadPool.h>
21
+ #include <Ice/ConnectionFactory.h>
22
+ #include <Ice/ObjectFactoryManager.h>
23
+ #include <Ice/LocalException.h>
24
+ #include <Ice/ObjectAdapterFactory.h>
25
+ #include <Ice/Exception.h>
26
+ #include <Ice/PropertiesI.h>
27
+ #include <Ice/PropertiesAdminI.h>
28
+ #include <Ice/LoggerI.h>
29
+ #include <Ice/Network.h>
30
+ #include <Ice/NetworkProxy.h>
31
+ #include <Ice/EndpointFactoryManager.h>
32
+ #include <Ice/RequestHandlerFactory.h>
33
+ #include <Ice/RetryQueue.h>
34
+ #include <Ice/DynamicLibrary.h>
35
+ #include <Ice/PluginManagerI.h>
36
+ #include <Ice/Initialize.h>
37
+ #include <Ice/LoggerUtil.h>
38
+ #include <IceUtil/StringUtil.h>
39
+ #include <Ice/PropertiesI.h>
40
+ #include <Ice/Communicator.h>
41
+ #include <Ice/InstrumentationI.h>
42
+ #include <Ice/ProtocolInstance.h>
43
+ #include <Ice/LoggerAdminI.h>
44
+ #include <IceUtil/UUID.h>
45
+ #include <IceUtil/Mutex.h>
46
+ #include <IceUtil/MutexPtrLock.h>
47
+ #include <Ice/ObserverHelper.h>
48
+
49
+ #include <stdio.h>
50
+ #include <list>
51
+
52
+ #ifndef _WIN32
53
+ # include <Ice/SysLoggerI.h>
54
+
55
+ # include <signal.h>
56
+ # include <syslog.h>
57
+ # include <pwd.h>
58
+ # include <sys/types.h>
59
+ #endif
60
+
61
+ #if defined(__linux) || defined(__sun)
62
+ # include <grp.h> // for initgroups
63
+ #endif
64
+
65
+ #include <Ice/UdpEndpointI.h>
66
+
67
+ #ifndef ICE_OS_WINRT
68
+ # include <Ice/TcpEndpointI.h>
69
+ #else
70
+ # include <IceSSL/EndpointInfo.h> // For IceSSL::EndpointType
71
+ # include <Ice/winrt/StreamEndpointI.h>
72
+ #endif
73
+
74
+ #include <Ice/WSEndpoint.h>
75
+
76
+ using namespace std;
77
+ using namespace Ice;
78
+ using namespace IceInternal;
79
+
80
+ namespace IceUtilInternal
81
+ {
82
+
83
+ extern bool ICE_DECLSPEC_IMPORT nullHandleAbort;
84
+ extern bool ICE_DECLSPEC_IMPORT printStackTraces;
85
+
86
+ };
87
+
88
+ namespace
89
+ {
90
+
91
+ IceUtil::Mutex* staticMutex = 0;
92
+ bool oneOfDone = false;
93
+ std::list<IceInternal::Instance*>* instanceList = 0;
94
+
95
+ #ifndef _WIN32
96
+ struct sigaction oldAction;
97
+ #endif
98
+ bool printProcessIdDone = false;
99
+ string identForOpenlog;
100
+
101
+ //
102
+ // Should be called with staticMutex locked
103
+ //
104
+ size_t instanceCount()
105
+ {
106
+ if(instanceList == 0)
107
+ {
108
+ return 0;
109
+ }
110
+ else
111
+ {
112
+ return instanceList->size();
113
+ }
114
+ }
115
+
116
+ class Init
117
+ {
118
+ public:
119
+
120
+ Init()
121
+ {
122
+ staticMutex = new IceUtil::Mutex;
123
+
124
+ //
125
+ // Although probably not necessary here, we consistently lock
126
+ // staticMutex before accessing instanceList
127
+ //
128
+ IceUtilInternal::MutexPtrLock<IceUtil::Mutex> sync(staticMutex);
129
+ instanceList = new std::list<IceInternal::Instance*>;
130
+ }
131
+
132
+ ~Init()
133
+ {
134
+ {
135
+ IceUtilInternal::MutexPtrLock<IceUtil::Mutex> sync(staticMutex);
136
+ int notDestroyedCount = 0;
137
+
138
+ for(std::list<IceInternal::Instance*>::const_iterator p = instanceList->begin();
139
+ p != instanceList->end(); ++p)
140
+ {
141
+ if(!(*p)->destroyed())
142
+ {
143
+ notDestroyedCount++;
144
+ }
145
+ }
146
+
147
+ if(notDestroyedCount > 0)
148
+ {
149
+ cerr << "!! " << IceUtil::Time::now().toDateTime() << " error: ";
150
+ if(notDestroyedCount == 1)
151
+ {
152
+ cerr << "communicator ";
153
+ }
154
+ else
155
+ {
156
+ cerr << notDestroyedCount << " communicators ";
157
+ }
158
+ cerr << "not destroyed during global destruction.";
159
+ }
160
+
161
+ delete instanceList;
162
+ instanceList = 0;
163
+ }
164
+ delete staticMutex;
165
+ staticMutex = 0;
166
+ }
167
+ };
168
+
169
+ Init init;
170
+
171
+ }
172
+
173
+ namespace IceInternal // Required because ObserverUpdaterI is a friend of Instance
174
+ {
175
+
176
+ class ObserverUpdaterI : public Ice::Instrumentation::ObserverUpdater
177
+ {
178
+ public:
179
+
180
+ ObserverUpdaterI(const InstancePtr&);
181
+
182
+ virtual void updateConnectionObservers();
183
+ virtual void updateThreadObservers();
184
+
185
+ private:
186
+
187
+ const InstancePtr _instance;
188
+ };
189
+
190
+
191
+ //
192
+ // Timer specialization which supports the thread observer
193
+ //
194
+ class Timer : public IceUtil::Timer
195
+ {
196
+ public:
197
+
198
+ Timer(int priority) :
199
+ IceUtil::Timer(priority),
200
+ _hasObserver(false)
201
+ {
202
+ }
203
+
204
+ Timer() :
205
+ _hasObserver(false)
206
+ {
207
+ }
208
+
209
+ void updateObserver(const Ice::Instrumentation::CommunicatorObserverPtr&);
210
+
211
+ private:
212
+
213
+ virtual void runTimerTask(const IceUtil::TimerTaskPtr&);
214
+
215
+ IceUtil::Mutex _mutex;
216
+ volatile bool _hasObserver;
217
+ ObserverHelperT<Ice::Instrumentation::ThreadObserver> _observer;
218
+ };
219
+
220
+ }
221
+
222
+ void
223
+ Timer::updateObserver(const Ice::Instrumentation::CommunicatorObserverPtr& obsv)
224
+ {
225
+ IceUtil::Mutex::Lock sync(_mutex);
226
+ assert(obsv);
227
+ _observer.attach(obsv->getThreadObserver("Communicator",
228
+ "Ice.Timer",
229
+ Ice::Instrumentation::ThreadStateIdle,
230
+ _observer.get()));
231
+ _hasObserver = _observer.get();
232
+ }
233
+
234
+ void
235
+ Timer::runTimerTask(const IceUtil::TimerTaskPtr& task)
236
+ {
237
+ if(_hasObserver)
238
+ {
239
+ Ice::Instrumentation::ThreadObserverPtr threadObserver;
240
+ {
241
+ IceUtil::Mutex::Lock sync(_mutex);
242
+ threadObserver = _observer.get();
243
+ }
244
+ if(threadObserver)
245
+ {
246
+ threadObserver->stateChanged(Ice::Instrumentation::ThreadStateIdle,
247
+ Ice::Instrumentation::ThreadStateInUseForOther);
248
+ }
249
+ try
250
+ {
251
+ task->runTimerTask();
252
+ }
253
+ catch(...)
254
+ {
255
+ if(threadObserver)
256
+ {
257
+ threadObserver->stateChanged(Ice::Instrumentation::ThreadStateInUseForOther,
258
+ Ice::Instrumentation::ThreadStateIdle);
259
+ }
260
+ }
261
+ if(threadObserver)
262
+ {
263
+ threadObserver->stateChanged(Ice::Instrumentation::ThreadStateInUseForOther,
264
+ Ice::Instrumentation::ThreadStateIdle);
265
+ }
266
+ }
267
+ else
268
+ {
269
+ task->runTimerTask();
270
+ }
271
+ }
272
+
273
+ IceUtil::Shared* IceInternal::upCast(Instance* p) { return p; }
274
+
275
+ IceInternal::ObserverUpdaterI::ObserverUpdaterI(const InstancePtr& instance) : _instance(instance)
276
+ {
277
+ }
278
+
279
+ void
280
+ IceInternal::ObserverUpdaterI::updateConnectionObservers()
281
+ {
282
+ _instance->updateConnectionObservers();
283
+ }
284
+
285
+ void
286
+ IceInternal::ObserverUpdaterI::updateThreadObservers()
287
+ {
288
+ _instance->updateThreadObservers();
289
+ }
290
+
291
+ bool
292
+ IceInternal::Instance::destroyed() const
293
+ {
294
+ Lock sync(*this);
295
+ return _state == StateDestroyed;
296
+ }
297
+
298
+ TraceLevelsPtr
299
+ IceInternal::Instance::traceLevels() const
300
+ {
301
+ // No mutex lock, immutable.
302
+ assert(_traceLevels);
303
+ return _traceLevels;
304
+ }
305
+
306
+ DefaultsAndOverridesPtr
307
+ IceInternal::Instance::defaultsAndOverrides() const
308
+ {
309
+ // No mutex lock, immutable.
310
+ assert(_defaultsAndOverrides);
311
+ return _defaultsAndOverrides;
312
+ }
313
+
314
+ RouterManagerPtr
315
+ IceInternal::Instance::routerManager() const
316
+ {
317
+ Lock sync(*this);
318
+
319
+ if(_state == StateDestroyed)
320
+ {
321
+ throw CommunicatorDestroyedException(__FILE__, __LINE__);
322
+ }
323
+
324
+ assert(_routerManager);
325
+ return _routerManager;
326
+ }
327
+
328
+ LocatorManagerPtr
329
+ IceInternal::Instance::locatorManager() const
330
+ {
331
+ Lock sync(*this);
332
+
333
+ if(_state == StateDestroyed)
334
+ {
335
+ throw CommunicatorDestroyedException(__FILE__, __LINE__);
336
+ }
337
+
338
+ assert(_locatorManager);
339
+ return _locatorManager;
340
+ }
341
+
342
+ ReferenceFactoryPtr
343
+ IceInternal::Instance::referenceFactory() const
344
+ {
345
+ Lock sync(*this);
346
+
347
+ if(_state == StateDestroyed)
348
+ {
349
+ throw CommunicatorDestroyedException(__FILE__, __LINE__);
350
+ }
351
+
352
+ assert(_referenceFactory);
353
+ return _referenceFactory;
354
+ }
355
+
356
+ RequestHandlerFactoryPtr
357
+ IceInternal::Instance::requestHandlerFactory() const
358
+ {
359
+ Lock sync(*this);
360
+
361
+ if(_state == StateDestroyed)
362
+ {
363
+ throw CommunicatorDestroyedException(__FILE__, __LINE__);
364
+ }
365
+
366
+ assert(_requestHandlerFactory);
367
+ return _requestHandlerFactory;
368
+ }
369
+
370
+ ProxyFactoryPtr
371
+ IceInternal::Instance::proxyFactory() const
372
+ {
373
+ Lock sync(*this);
374
+
375
+ if(_state == StateDestroyed)
376
+ {
377
+ throw CommunicatorDestroyedException(__FILE__, __LINE__);
378
+ }
379
+
380
+ assert(_proxyFactory);
381
+ return _proxyFactory;
382
+ }
383
+
384
+ OutgoingConnectionFactoryPtr
385
+ IceInternal::Instance::outgoingConnectionFactory() const
386
+ {
387
+ Lock sync(*this);
388
+
389
+ if(_state == StateDestroyed)
390
+ {
391
+ throw CommunicatorDestroyedException(__FILE__, __LINE__);
392
+ }
393
+
394
+ assert(_outgoingConnectionFactory);
395
+ return _outgoingConnectionFactory;
396
+ }
397
+
398
+ ObjectFactoryManagerPtr
399
+ IceInternal::Instance::servantFactoryManager() const
400
+ {
401
+ Lock sync(*this);
402
+
403
+ if(_state == StateDestroyed)
404
+ {
405
+ throw CommunicatorDestroyedException(__FILE__, __LINE__);
406
+ }
407
+
408
+ assert(_servantFactoryManager);
409
+ return _servantFactoryManager;
410
+ }
411
+
412
+ ObjectAdapterFactoryPtr
413
+ IceInternal::Instance::objectAdapterFactory() const
414
+ {
415
+ Lock sync(*this);
416
+
417
+ if(_state == StateDestroyed)
418
+ {
419
+ throw CommunicatorDestroyedException(__FILE__, __LINE__);
420
+ }
421
+
422
+ assert(_objectAdapterFactory);
423
+ return _objectAdapterFactory;
424
+ }
425
+
426
+ ProtocolSupport
427
+ IceInternal::Instance::protocolSupport() const
428
+ {
429
+ return _protocolSupport;
430
+ }
431
+
432
+ bool
433
+ IceInternal::Instance::preferIPv6() const
434
+ {
435
+ return _preferIPv6;
436
+ }
437
+
438
+ NetworkProxyPtr
439
+ IceInternal::Instance::networkProxy() const
440
+ {
441
+ return _networkProxy;
442
+ }
443
+
444
+ ThreadPoolPtr
445
+ IceInternal::Instance::clientThreadPool()
446
+ {
447
+ Lock sync(*this);
448
+
449
+ if(_state == StateDestroyed)
450
+ {
451
+ throw CommunicatorDestroyedException(__FILE__, __LINE__);
452
+ }
453
+
454
+ assert(_clientThreadPool);
455
+ return _clientThreadPool;
456
+ }
457
+
458
+ ThreadPoolPtr
459
+ IceInternal::Instance::serverThreadPool()
460
+ {
461
+ Lock sync(*this);
462
+
463
+ if(_state == StateDestroyed)
464
+ {
465
+ throw CommunicatorDestroyedException(__FILE__, __LINE__);
466
+ }
467
+
468
+ if(!_serverThreadPool) // Lazy initialization.
469
+ {
470
+ if(_state == StateDestroyInProgress)
471
+ {
472
+ throw CommunicatorDestroyedException(__FILE__, __LINE__);
473
+ }
474
+ int timeout = _initData.properties->getPropertyAsInt("Ice.ServerIdleTime");
475
+ _serverThreadPool = new ThreadPool(this, "Ice.ThreadPool.Server", timeout);
476
+ }
477
+
478
+ return _serverThreadPool;
479
+ }
480
+
481
+ EndpointHostResolverPtr
482
+ IceInternal::Instance::endpointHostResolver()
483
+ {
484
+ Lock sync(*this);
485
+
486
+ if(_state == StateDestroyed)
487
+ {
488
+ throw CommunicatorDestroyedException(__FILE__, __LINE__);
489
+ }
490
+
491
+ assert(_endpointHostResolver);
492
+ return _endpointHostResolver;
493
+ }
494
+
495
+ RetryQueuePtr
496
+ IceInternal::Instance::retryQueue()
497
+ {
498
+ Lock sync(*this);
499
+
500
+ if(_state == StateDestroyed)
501
+ {
502
+ throw CommunicatorDestroyedException(__FILE__, __LINE__);
503
+ }
504
+
505
+ assert(_retryQueue);
506
+ return _retryQueue;
507
+ }
508
+
509
+ IceUtil::TimerPtr
510
+ IceInternal::Instance::timer()
511
+ {
512
+ Lock sync(*this);
513
+
514
+ if(_state == StateDestroyed)
515
+ {
516
+ throw CommunicatorDestroyedException(__FILE__, __LINE__);
517
+ }
518
+ assert(_timer);
519
+ return _timer;
520
+ }
521
+
522
+ EndpointFactoryManagerPtr
523
+ IceInternal::Instance::endpointFactoryManager() const
524
+ {
525
+ Lock sync(*this);
526
+
527
+ if(_state == StateDestroyed)
528
+ {
529
+ throw CommunicatorDestroyedException(__FILE__, __LINE__);
530
+ }
531
+
532
+ assert(_endpointFactoryManager);
533
+ return _endpointFactoryManager;
534
+ }
535
+
536
+ DynamicLibraryListPtr
537
+ IceInternal::Instance::dynamicLibraryList() const
538
+ {
539
+ Lock sync(*this);
540
+
541
+ if(_state == StateDestroyed)
542
+ {
543
+ throw CommunicatorDestroyedException(__FILE__, __LINE__);
544
+ }
545
+
546
+ assert(_dynamicLibraryList);
547
+ return _dynamicLibraryList;
548
+ }
549
+
550
+ PluginManagerPtr
551
+ IceInternal::Instance::pluginManager() const
552
+ {
553
+ Lock sync(*this);
554
+
555
+ if(_state == StateDestroyed)
556
+ {
557
+ throw CommunicatorDestroyedException(__FILE__, __LINE__);
558
+ }
559
+
560
+ assert(_pluginManager);
561
+ return _pluginManager;
562
+ }
563
+
564
+ const ACMConfig&
565
+ IceInternal::Instance::clientACM() const
566
+ {
567
+ // No mutex lock, immutable.
568
+ return _clientACM;
569
+ }
570
+
571
+ const ACMConfig&
572
+ IceInternal::Instance::serverACM() const
573
+ {
574
+ // No mutex lock, immutable.
575
+ return _serverACM;
576
+ }
577
+
578
+ Identity
579
+ IceInternal::Instance::stringToIdentity(const string& s) const
580
+ {
581
+ //
582
+ // This method only accepts printable ascii. Since printable ascii is a subset
583
+ // of all narrow string encodings, it is not necessary to convert the string
584
+ // from the native string encoding. Any characters other than printable-ASCII
585
+ // will cause an IllegalArgumentException. Note that it can contain Unicode
586
+ // encoded in the escaped form which is the reason why we call fromUTF8 after
587
+ // unespcaping the printable ASCII string.
588
+ //
589
+
590
+ Identity ident;
591
+
592
+ //
593
+ // Find unescaped separator; note that the string may contain an escaped
594
+ // backslash before the separator.
595
+ //
596
+ string::size_type slash = string::npos, pos = 0;
597
+ while((pos = s.find('/', pos)) != string::npos)
598
+ {
599
+ int escapes = 0;
600
+ while(static_cast<int>(pos)- escapes > 0 && s[pos - escapes - 1] == '\\')
601
+ {
602
+ escapes++;
603
+ }
604
+
605
+ //
606
+ // We ignore escaped escapes
607
+ //
608
+ if(escapes % 2 == 0)
609
+ {
610
+ if(slash == string::npos)
611
+ {
612
+ slash = pos;
613
+ }
614
+ else
615
+ {
616
+ //
617
+ // Extra unescaped slash found.
618
+ //
619
+ IdentityParseException ex(__FILE__, __LINE__);
620
+ ex.str = "unescaped backslash in identity `" + s + "'";
621
+ throw ex;
622
+ }
623
+ }
624
+ pos++;
625
+ }
626
+
627
+ if(slash == string::npos)
628
+ {
629
+ try
630
+ {
631
+ ident.name = IceUtilInternal::unescapeString(s, 0, s.size());
632
+ }
633
+ catch(const IceUtil::IllegalArgumentException& e)
634
+ {
635
+ IdentityParseException ex(__FILE__, __LINE__);
636
+ ex.str = "invalid identity name `" + s + "': " + e.reason();
637
+ throw ex;
638
+ }
639
+ }
640
+ else
641
+ {
642
+ try
643
+ {
644
+ ident.category = IceUtilInternal::unescapeString(s, 0, slash);
645
+ }
646
+ catch(const IceUtil::IllegalArgumentException& e)
647
+ {
648
+ IdentityParseException ex(__FILE__, __LINE__);
649
+ ex.str = "invalid category in identity `" + s + "': " + e.reason();
650
+ throw ex;
651
+ }
652
+ if(slash + 1 < s.size())
653
+ {
654
+ try
655
+ {
656
+ ident.name = IceUtilInternal::unescapeString(s, slash + 1, s.size());
657
+ }
658
+ catch(const IceUtil::IllegalArgumentException& e)
659
+ {
660
+ IdentityParseException ex(__FILE__, __LINE__);
661
+ ex.str = "invalid name in identity `" + s + "': " + e.reason();
662
+ throw ex;
663
+ }
664
+ }
665
+ }
666
+
667
+ ident.name = UTF8ToNative(ident.name, _stringConverter);
668
+ ident.category = UTF8ToNative(ident.category, _stringConverter);
669
+
670
+ return ident;
671
+ }
672
+
673
+ string
674
+ IceInternal::Instance::identityToString(const Identity& ident) const
675
+ {
676
+ //
677
+ // This method returns the stringified identity. The returned string only
678
+ // contains printable ascii. It can contain UTF8 in the escaped form.
679
+ //
680
+ string name = nativeToUTF8(ident.name, _stringConverter);
681
+ string category = nativeToUTF8(ident.category, _stringConverter);
682
+
683
+ if(category.empty())
684
+ {
685
+ return IceUtilInternal::escapeString(name, "/");
686
+ }
687
+ else
688
+ {
689
+ return IceUtilInternal::escapeString(category, "/") + '/' + IceUtilInternal::escapeString(name, "/");
690
+ }
691
+ }
692
+
693
+ Ice::ObjectPrx
694
+ IceInternal::Instance::createAdmin(const ObjectAdapterPtr& adminAdapter, const Identity& adminIdentity)
695
+ {
696
+ ObjectAdapterPtr adapter = adminAdapter;
697
+ bool createAdapter = !adminAdapter;
698
+
699
+ Lock sync(*this);
700
+
701
+ if(_state == StateDestroyed)
702
+ {
703
+ throw CommunicatorDestroyedException(__FILE__, __LINE__);
704
+ }
705
+
706
+ if(adminIdentity.name.empty())
707
+ {
708
+ throw Ice::IllegalIdentityException(__FILE__, __LINE__, adminIdentity);
709
+ }
710
+
711
+ if(_adminAdapter)
712
+ {
713
+ throw InitializationException(__FILE__, __LINE__, "Admin already created");
714
+ }
715
+
716
+ if(!_adminEnabled)
717
+ {
718
+ throw InitializationException(__FILE__, __LINE__, "Admin is disabled");
719
+ }
720
+
721
+ if(createAdapter)
722
+ {
723
+ if(_initData.properties->getProperty("Ice.Admin.Endpoints") != "")
724
+ {
725
+ adapter = _objectAdapterFactory->createObjectAdapter("Ice.Admin", 0);
726
+ }
727
+ else
728
+ {
729
+ throw InitializationException(__FILE__, __LINE__, "Ice.Admin.Endpoints is not set");
730
+ }
731
+ }
732
+
733
+ _adminIdentity = adminIdentity;
734
+ _adminAdapter = adapter;
735
+ addAllAdminFacets();
736
+ sync.release();
737
+
738
+ if(createAdapter)
739
+ {
740
+ try
741
+ {
742
+ adapter->activate();
743
+ }
744
+ catch(...)
745
+ {
746
+ //
747
+ // We clean it up, even through this error is not recoverable
748
+ // (can't call again createAdmin after fixing the problem since all the facets
749
+ // in the adapter are lost)
750
+ //
751
+ adapter->destroy();
752
+ sync.acquire();
753
+ _adminAdapter = 0;
754
+ throw;
755
+ }
756
+ }
757
+ setServerProcessProxy(adapter, adminIdentity);
758
+ return adapter->createProxy(adminIdentity);
759
+ }
760
+
761
+ Ice::ObjectPrx
762
+ IceInternal::Instance::getAdmin()
763
+ {
764
+ Lock sync(*this);
765
+
766
+ if(_state == StateDestroyed)
767
+ {
768
+ throw CommunicatorDestroyedException(__FILE__, __LINE__);
769
+ }
770
+
771
+ if(_adminAdapter)
772
+ {
773
+ return _adminAdapter->createProxy(_adminIdentity);
774
+ }
775
+ else if(_adminEnabled)
776
+ {
777
+ ObjectAdapterPtr adapter;
778
+ if(_initData.properties->getProperty("Ice.Admin.Endpoints") != "")
779
+ {
780
+ adapter = _objectAdapterFactory->createObjectAdapter("Ice.Admin", 0);
781
+ }
782
+ else
783
+ {
784
+ return 0;
785
+ }
786
+
787
+ Identity adminIdentity;
788
+ adminIdentity.name = "admin";
789
+ adminIdentity.category = _initData.properties->getProperty("Ice.Admin.InstanceName");
790
+ if(adminIdentity.category.empty())
791
+ {
792
+ adminIdentity.category = IceUtil::generateUUID();
793
+ }
794
+
795
+ _adminIdentity = adminIdentity;
796
+ _adminAdapter = adapter;
797
+ addAllAdminFacets();
798
+ sync.release();
799
+ try
800
+ {
801
+ adapter->activate();
802
+ }
803
+ catch(...)
804
+ {
805
+ //
806
+ // We clean it up, even through this error is not recoverable
807
+ // (can't call again createAdmin after fixing the problem since all the facets
808
+ // in the adapter are lost)
809
+ //
810
+ adapter->destroy();
811
+ sync.acquire();
812
+ _adminAdapter = 0;
813
+ throw;
814
+ }
815
+
816
+ setServerProcessProxy(adapter, adminIdentity);
817
+ return adapter->createProxy(adminIdentity);
818
+ }
819
+ else
820
+ {
821
+ return 0;
822
+ }
823
+ }
824
+
825
+ void
826
+ IceInternal::Instance::addAllAdminFacets()
827
+ {
828
+ // must be called with this locked
829
+
830
+ //
831
+ // Add all facets to OA
832
+ //
833
+ FacetMap filteredFacets;
834
+
835
+ for(FacetMap::iterator p = _adminFacets.begin(); p != _adminFacets.end(); ++p)
836
+ {
837
+ if(_adminFacetFilter.empty() || _adminFacetFilter.find(p->first) != _adminFacetFilter.end())
838
+ {
839
+ _adminAdapter->addFacet(p->second, _adminIdentity, p->first);
840
+ }
841
+ else
842
+ {
843
+ filteredFacets[p->first] = p->second;
844
+ }
845
+ }
846
+ _adminFacets.swap(filteredFacets);
847
+ }
848
+
849
+ void
850
+ IceInternal::Instance::setServerProcessProxy(const ObjectAdapterPtr& adminAdapter, const Identity& adminIdentity)
851
+ {
852
+ ObjectPrx admin = adminAdapter->createProxy(adminIdentity);
853
+ LocatorPrx locator = adminAdapter->getLocator();
854
+ const string serverId = _initData.properties->getProperty("Ice.Admin.ServerId");
855
+ if(locator && serverId != "")
856
+ {
857
+ ProcessPrx process = ProcessPrx::uncheckedCast(admin->ice_facet("Process"));
858
+ try
859
+ {
860
+ //
861
+ // Note that as soon as the process proxy is registered, the communicator might be
862
+ // shutdown by a remote client and admin facets might start receiving calls.
863
+ //
864
+ locator->getRegistry()->setServerProcessProxy(serverId, process);
865
+ }
866
+ catch(const ServerNotFoundException&)
867
+ {
868
+ if(_traceLevels->location >= 1)
869
+ {
870
+ Trace out(_initData.logger, _traceLevels->locationCat);
871
+ out << "couldn't register server `" + serverId + "' with the locator registry:\n";
872
+ out << "the server is not known to the locator registry";
873
+ }
874
+
875
+ throw InitializationException(__FILE__, __LINE__, "Locator `" + _proxyFactory->proxyToString(locator) +
876
+ "' knows nothing about server `" + serverId + "'");
877
+ }
878
+ catch(const LocalException& ex)
879
+ {
880
+ if(_traceLevels->location >= 1)
881
+ {
882
+ Trace out(_initData.logger, _traceLevels->locationCat);
883
+ out << "couldn't register server `" + serverId + "' with the locator registry:\n" << ex;
884
+ }
885
+ throw;
886
+ }
887
+
888
+ if(_traceLevels->location >= 1)
889
+ {
890
+ Trace out(_initData.logger, _traceLevels->locationCat);
891
+ out << "registered server `" + serverId + "' with the locator registry";
892
+ }
893
+ }
894
+ }
895
+
896
+ void
897
+ IceInternal::Instance::addAdminFacet(const Ice::ObjectPtr& servant, const string& facet)
898
+ {
899
+ Lock sync(*this);
900
+
901
+ if(_state == StateDestroyed)
902
+ {
903
+ throw CommunicatorDestroyedException(__FILE__, __LINE__);
904
+ }
905
+
906
+ if(_adminAdapter == 0 || (!_adminFacetFilter.empty() && _adminFacetFilter.find(facet) == _adminFacetFilter.end()))
907
+ {
908
+ if(_adminFacets.insert(FacetMap::value_type(facet, servant)).second == false)
909
+ {
910
+ throw AlreadyRegisteredException(__FILE__, __LINE__, "facet", facet);
911
+ }
912
+ }
913
+ else
914
+ {
915
+ _adminAdapter->addFacet(servant, _adminIdentity, facet);
916
+ }
917
+ }
918
+
919
+ Ice::ObjectPtr
920
+ IceInternal::Instance::removeAdminFacet(const string& facet)
921
+ {
922
+ Lock sync(*this);
923
+
924
+ if(_state == StateDestroyed)
925
+ {
926
+ throw CommunicatorDestroyedException(__FILE__, __LINE__);
927
+ }
928
+
929
+ ObjectPtr result;
930
+
931
+ if(_adminAdapter == 0 || (!_adminFacetFilter.empty() && _adminFacetFilter.find(facet) == _adminFacetFilter.end()))
932
+ {
933
+ FacetMap::iterator p = _adminFacets.find(facet);
934
+ if(p == _adminFacets.end())
935
+ {
936
+ throw NotRegisteredException(__FILE__, __LINE__, "facet", facet);
937
+ }
938
+ else
939
+ {
940
+ result = p->second;
941
+ _adminFacets.erase(p);
942
+ }
943
+ }
944
+ else
945
+ {
946
+ result = _adminAdapter->removeFacet(_adminIdentity, facet);
947
+ }
948
+
949
+ return result;
950
+ }
951
+
952
+ Ice::ObjectPtr
953
+ IceInternal::Instance::findAdminFacet(const string& facet)
954
+ {
955
+ Lock sync(*this);
956
+
957
+ if(_state == StateDestroyed)
958
+ {
959
+ throw CommunicatorDestroyedException(__FILE__, __LINE__);
960
+ }
961
+
962
+ ObjectPtr result;
963
+
964
+ //
965
+ // If the _adminAdapter was not yet created, or this facet is filtered out, we check _adminFacets
966
+ //
967
+ if(!_adminAdapter || (!_adminFacetFilter.empty() && _adminFacetFilter.find(facet) == _adminFacetFilter.end()))
968
+ {
969
+ FacetMap::iterator p = _adminFacets.find(facet);
970
+ if(p != _adminFacets.end())
971
+ {
972
+ result = p->second;
973
+ }
974
+ }
975
+ else
976
+ {
977
+ // Otherwise, just check the _adminAdapter
978
+ result = _adminAdapter->findFacet(_adminIdentity, facet);
979
+ }
980
+
981
+ return result;
982
+ }
983
+
984
+ FacetMap
985
+ IceInternal::Instance::findAllAdminFacets()
986
+ {
987
+ Lock sync(*this);
988
+
989
+ if(_state == StateDestroyed)
990
+ {
991
+ throw CommunicatorDestroyedException(__FILE__, __LINE__);
992
+ }
993
+
994
+ if(!_adminAdapter)
995
+ {
996
+ return _adminFacets;
997
+ }
998
+ else
999
+ {
1000
+ FacetMap result = _adminAdapter->findAllFacets(_adminIdentity);
1001
+ if(!_adminFacets.empty())
1002
+ {
1003
+ // Also returns filtered facets
1004
+ result.insert(_adminFacets.begin(), _adminFacets.end());
1005
+ }
1006
+ return result;
1007
+ }
1008
+ }
1009
+
1010
+ void
1011
+ IceInternal::Instance::setDefaultLocator(const Ice::LocatorPrx& defaultLocator)
1012
+ {
1013
+ Lock sync(*this);
1014
+
1015
+ if(_state == StateDestroyed)
1016
+ {
1017
+ throw CommunicatorDestroyedException(__FILE__, __LINE__);
1018
+ }
1019
+
1020
+ _referenceFactory = _referenceFactory->setDefaultLocator(defaultLocator);
1021
+ }
1022
+
1023
+ void
1024
+ IceInternal::Instance::setDefaultRouter(const Ice::RouterPrx& defaultRouter)
1025
+ {
1026
+ Lock sync(*this);
1027
+
1028
+ if(_state == StateDestroyed)
1029
+ {
1030
+ throw CommunicatorDestroyedException(__FILE__, __LINE__);
1031
+ }
1032
+
1033
+ _referenceFactory = _referenceFactory->setDefaultRouter(defaultRouter);
1034
+ }
1035
+
1036
+ void
1037
+ IceInternal::Instance::setLogger(const Ice::LoggerPtr& logger)
1038
+ {
1039
+ //
1040
+ // No locking, as it can only be called during plug-in loading
1041
+ //
1042
+ _initData.logger = logger;
1043
+ }
1044
+
1045
+ void
1046
+ IceInternal::Instance::setThreadHook(const Ice::ThreadNotificationPtr& threadHook)
1047
+ {
1048
+ //
1049
+ // No locking, as it can only be called during plug-in loading
1050
+ //
1051
+ _initData.threadHook = threadHook;
1052
+ }
1053
+
1054
+ namespace
1055
+ {
1056
+
1057
+ bool logStdErrConvert = true;
1058
+
1059
+ }
1060
+
1061
+ IceInternal::Instance::Instance(const CommunicatorPtr& communicator, const InitializationData& initData) :
1062
+ _state(StateActive),
1063
+ _initData(initData),
1064
+ _messageSizeMax(0),
1065
+ _batchAutoFlushSize(0),
1066
+ _collectObjects(false),
1067
+ _implicitContext(0),
1068
+ _stringConverter(IceUtil::getProcessStringConverter()),
1069
+ _wstringConverter(IceUtil::getProcessWstringConverter()),
1070
+ _adminEnabled(false)
1071
+ {
1072
+ try
1073
+ {
1074
+ __setNoDelete(true);
1075
+ {
1076
+ IceUtilInternal::MutexPtrLock<IceUtil::Mutex> sync(staticMutex);
1077
+ instanceList->push_back(this);
1078
+
1079
+ if(!_initData.properties)
1080
+ {
1081
+ _initData.properties = createProperties();
1082
+ }
1083
+
1084
+ if(!oneOfDone)
1085
+ {
1086
+ //
1087
+ // StdOut and StdErr redirection
1088
+ //
1089
+ string stdOutFilename = _initData.properties->getProperty("Ice.StdOut");
1090
+ string stdErrFilename = _initData.properties->getProperty("Ice.StdErr");
1091
+
1092
+ if(stdOutFilename != "")
1093
+ {
1094
+ FILE* file = IceUtilInternal::freopen(stdOutFilename, "a", stdout);
1095
+ if(file == 0)
1096
+ {
1097
+ FileException ex(__FILE__, __LINE__);
1098
+ ex.path = stdOutFilename;
1099
+ ex.error = getSystemErrno();
1100
+ throw ex;
1101
+ }
1102
+ }
1103
+
1104
+ if(stdErrFilename != "")
1105
+ {
1106
+ FILE* file = IceUtilInternal::freopen(stdErrFilename, "a", stderr);
1107
+ if(file == 0)
1108
+ {
1109
+ FileException ex(__FILE__, __LINE__);
1110
+ ex.path = stdErrFilename;
1111
+ ex.error = getSystemErrno();
1112
+ throw ex;
1113
+ }
1114
+ }
1115
+
1116
+ if(_initData.properties->getPropertyAsInt("Ice.NullHandleAbort") > 0)
1117
+ {
1118
+ IceUtilInternal::nullHandleAbort = true;
1119
+ }
1120
+
1121
+ #ifdef NDEBUG
1122
+ if(_initData.properties->getPropertyAsIntWithDefault("Ice.PrintStackTraces", 0) > 0)
1123
+ #else
1124
+ if(_initData.properties->getPropertyAsIntWithDefault("Ice.PrintStackTraces", 1) > 0)
1125
+ #endif
1126
+ {
1127
+ IceUtilInternal::printStackTraces = true;
1128
+ }
1129
+
1130
+ #ifndef _WIN32
1131
+ string newUser = _initData.properties->getProperty("Ice.ChangeUser");
1132
+ if(!newUser.empty())
1133
+ {
1134
+ errno = 0;
1135
+ struct passwd* pw = getpwnam(newUser.c_str());
1136
+ if(!pw)
1137
+ {
1138
+ if(errno)
1139
+ {
1140
+ SyscallException ex(__FILE__, __LINE__);
1141
+ ex.error = getSystemErrno();
1142
+ throw ex;
1143
+ }
1144
+ else
1145
+ {
1146
+ InitializationException ex(__FILE__, __LINE__, "Unknown user account `" + newUser + "'");
1147
+ throw ex;
1148
+ }
1149
+ }
1150
+
1151
+ if(setgid(pw->pw_gid) == -1)
1152
+ {
1153
+ SyscallException ex(__FILE__, __LINE__);
1154
+ ex.error = getSystemErrno();
1155
+ throw ex;
1156
+ }
1157
+
1158
+ if(initgroups(pw->pw_name, pw->pw_gid) == -1)
1159
+ {
1160
+ SyscallException ex(__FILE__, __LINE__);
1161
+ ex.error = getSystemErrno();
1162
+ throw ex;
1163
+ }
1164
+
1165
+ if(setuid(pw->pw_uid) == -1)
1166
+ {
1167
+ SyscallException ex(__FILE__, __LINE__);
1168
+ ex.error = getSystemErrno();
1169
+ throw ex;
1170
+ }
1171
+ }
1172
+ #endif
1173
+ oneOfDone = true;
1174
+ }
1175
+
1176
+ if(instanceCount() == 1)
1177
+ {
1178
+ #if defined(_WIN32) && !defined(ICE_OS_WINRT)
1179
+ WORD version = MAKEWORD(1, 1);
1180
+ WSADATA data;
1181
+ if(WSAStartup(version, &data) != 0)
1182
+ {
1183
+ SocketException ex(__FILE__, __LINE__);
1184
+ ex.error = getSocketErrno();
1185
+ throw ex;
1186
+ }
1187
+ #endif
1188
+
1189
+ #ifndef _WIN32
1190
+ struct sigaction action;
1191
+ action.sa_handler = SIG_IGN;
1192
+ sigemptyset(&action.sa_mask);
1193
+ action.sa_flags = 0;
1194
+ sigaction(SIGPIPE, &action, &oldAction);
1195
+ if(_initData.properties->getPropertyAsInt("Ice.UseSyslog") > 0)
1196
+ {
1197
+ identForOpenlog = _initData.properties->getProperty("Ice.ProgramName");
1198
+ if(identForOpenlog.empty())
1199
+ {
1200
+ identForOpenlog = "<Unknown Ice Program>";
1201
+ }
1202
+ openlog(identForOpenlog.c_str(), LOG_PID, LOG_USER);
1203
+ }
1204
+ #else
1205
+ logStdErrConvert =
1206
+ _initData.properties->getPropertyAsIntWithDefault("Ice.LogStdErr.Convert", 1) > 0 &&
1207
+ _initData.properties->getProperty("Ice.StdErr").empty();
1208
+ #endif
1209
+ }
1210
+ }
1211
+
1212
+
1213
+ if(!_initData.logger)
1214
+ {
1215
+ string logfile = _initData.properties->getProperty("Ice.LogFile");
1216
+ #ifndef _WIN32
1217
+ if(_initData.properties->getPropertyAsInt("Ice.UseSyslog") > 0)
1218
+ {
1219
+ if(!logfile.empty())
1220
+ {
1221
+ throw InitializationException(__FILE__, __LINE__, "Both syslog and file logger cannot be enabled.");
1222
+ }
1223
+
1224
+ _initData.logger =
1225
+ new SysLoggerI(_initData.properties->getProperty("Ice.ProgramName"),
1226
+ _initData.properties->getPropertyWithDefault("Ice.SyslogFacility", "LOG_USER"));
1227
+ }
1228
+ else
1229
+ #endif
1230
+ if(!logfile.empty())
1231
+ {
1232
+ _initData.logger = new LoggerI(_initData.properties->getProperty("Ice.ProgramName"), logfile);
1233
+ }
1234
+ else
1235
+ {
1236
+ _initData.logger = getProcessLogger();
1237
+ if(LoggerIPtr::dynamicCast(_initData.logger))
1238
+ {
1239
+ _initData.logger = new LoggerI(_initData.properties->getProperty("Ice.ProgramName"), "",
1240
+ logStdErrConvert, _stringConverter);
1241
+ }
1242
+ }
1243
+ }
1244
+
1245
+ const_cast<TraceLevelsPtr&>(_traceLevels) = new TraceLevels(_initData.properties);
1246
+
1247
+ const_cast<DefaultsAndOverridesPtr&>(_defaultsAndOverrides) =
1248
+ new DefaultsAndOverrides(_initData.properties, _initData.logger);
1249
+
1250
+ const ACMConfig defaultClientACM(_initData.properties, _initData.logger, "Ice.ACM", ACMConfig(false));
1251
+ const ACMConfig defaultServerACM(_initData.properties, _initData.logger, "Ice.ACM", ACMConfig(true));
1252
+
1253
+ const_cast<ACMConfig&>(_clientACM) = ACMConfig(_initData.properties,
1254
+ _initData.logger,
1255
+ "Ice.ACM.Client",
1256
+ defaultClientACM);
1257
+
1258
+ const_cast<ACMConfig&>(_serverACM) = ACMConfig(_initData.properties,
1259
+ _initData.logger,
1260
+ "Ice.ACM.Server",
1261
+ defaultServerACM);
1262
+
1263
+ {
1264
+ static const int defaultMessageSizeMax = 1024;
1265
+ Int num = _initData.properties->getPropertyAsIntWithDefault("Ice.MessageSizeMax", defaultMessageSizeMax);
1266
+ if(num < 1 || static_cast<size_t>(num) > static_cast<size_t>(0x7fffffff / 1024))
1267
+ {
1268
+ const_cast<size_t&>(_messageSizeMax) = static_cast<size_t>(0x7fffffff);
1269
+ }
1270
+ else
1271
+ {
1272
+ // Property is in kilobytes, _messageSizeMax in bytes.
1273
+ const_cast<size_t&>(_messageSizeMax) = static_cast<size_t>(num) * 1024;
1274
+ }
1275
+ }
1276
+
1277
+ if(_initData.properties->getProperty("Ice.BatchAutoFlushSize").empty() &&
1278
+ !_initData.properties->getProperty("Ice.BatchAutoFlush").empty())
1279
+ {
1280
+ if(_initData.properties->getPropertyAsInt("Ice.BatchAutoFlush") > 0)
1281
+ {
1282
+ const_cast<size_t&>(_batchAutoFlushSize) = _messageSizeMax;
1283
+ }
1284
+ }
1285
+ else
1286
+ {
1287
+ Int num = _initData.properties->getPropertyAsIntWithDefault("Ice.BatchAutoFlushSize", 1024); // 1MB default
1288
+ if(num < 1)
1289
+ {
1290
+ const_cast<size_t&>(_batchAutoFlushSize) = num;
1291
+ }
1292
+ else if(static_cast<size_t>(num) > static_cast<size_t>(0x7fffffff / 1024))
1293
+ {
1294
+ const_cast<size_t&>(_batchAutoFlushSize) = static_cast<size_t>(0x7fffffff);
1295
+ }
1296
+ else
1297
+ {
1298
+ // Property is in kilobytes, convert in bytes.
1299
+ const_cast<size_t&>(_batchAutoFlushSize) = static_cast<size_t>(num) * 1024;
1300
+ }
1301
+ }
1302
+
1303
+ const_cast<bool&>(_collectObjects) = _initData.properties->getPropertyAsInt("Ice.CollectObjects") > 0;
1304
+
1305
+ //
1306
+ // Client ACM enabled by default. Server ACM disabled by default.
1307
+ //
1308
+ #ifndef ICE_OS_WINRT
1309
+ const_cast<ImplicitContextIPtr&>(_implicitContext) =
1310
+ ImplicitContextI::create(_initData.properties->getProperty("Ice.ImplicitContext"));
1311
+ #endif
1312
+ _routerManager = new RouterManager;
1313
+
1314
+ _locatorManager = new LocatorManager(_initData.properties);
1315
+
1316
+ _referenceFactory = new ReferenceFactory(this, communicator);
1317
+
1318
+ _requestHandlerFactory = new RequestHandlerFactory(this);
1319
+
1320
+ _proxyFactory = new ProxyFactory(this);
1321
+
1322
+ const bool isIPv6Supported = IceInternal::isIPv6Supported();
1323
+ const bool ipv4 = _initData.properties->getPropertyAsIntWithDefault("Ice.IPv4", 1) > 0;
1324
+ const bool ipv6 = _initData.properties->getPropertyAsIntWithDefault("Ice.IPv6", isIPv6Supported ? 1 : 0) > 0;
1325
+ if(!ipv4 && !ipv6)
1326
+ {
1327
+ throw InitializationException(__FILE__, __LINE__, "Both IPV4 and IPv6 support cannot be disabled.");
1328
+ }
1329
+ else if(ipv4 && ipv6)
1330
+ {
1331
+ _protocolSupport = EnableBoth;
1332
+ }
1333
+ else if(ipv4)
1334
+ {
1335
+ _protocolSupport = EnableIPv4;
1336
+ }
1337
+ else
1338
+ {
1339
+ _protocolSupport = EnableIPv6;
1340
+ }
1341
+ _preferIPv6 = _initData.properties->getPropertyAsInt("Ice.PreferIPv6Address") > 0;
1342
+
1343
+ _networkProxy = IceInternal::createNetworkProxy(_initData.properties, _protocolSupport);
1344
+
1345
+ _endpointFactoryManager = new EndpointFactoryManager(this);
1346
+ #ifndef ICE_OS_WINRT
1347
+ ProtocolInstancePtr tcpProtocolInstance = new ProtocolInstance(this, TCPEndpointType, "tcp");
1348
+ EndpointFactoryPtr tcpEndpointFactory = new TcpEndpointFactory(tcpProtocolInstance);
1349
+ _endpointFactoryManager->add(tcpEndpointFactory);
1350
+ #else
1351
+ ProtocolInstancePtr tcpProtocolInstance = new ProtocolInstance(this, TCPEndpointType, "tcp");
1352
+ EndpointFactoryPtr tcpEndpointFactory = new StreamEndpointFactory(tcpProtocolInstance);
1353
+ _endpointFactoryManager->add(tcpEndpointFactory);
1354
+
1355
+ ProtocolInstancePtr sslProtocolInstance = new ProtocolInstance(this, IceSSL::EndpointType, "ssl");
1356
+ EndpointFactoryPtr sslEndpointFactory = new StreamEndpointFactory(sslProtocolInstance);
1357
+ _endpointFactoryManager->add(sslEndpointFactory);
1358
+
1359
+ ProtocolInstancePtr wssProtocolInstance = new ProtocolInstance(this, WSSEndpointType, "wss");
1360
+ EndpointFactoryPtr wssEndpointFactory = new WSEndpointFactory(wssProtocolInstance,
1361
+ sslEndpointFactory->clone(wssProtocolInstance));
1362
+ _endpointFactoryManager->add(wssEndpointFactory);
1363
+ #endif
1364
+ ProtocolInstancePtr udpProtocolInstance = new ProtocolInstance(this, UDPEndpointType, "udp");
1365
+ EndpointFactoryPtr udpEndpointFactory = new UdpEndpointFactory(udpProtocolInstance);
1366
+ _endpointFactoryManager->add(udpEndpointFactory);
1367
+
1368
+ ProtocolInstancePtr wsProtocolInstance = new ProtocolInstance(this, WSEndpointType, "ws");
1369
+ EndpointFactoryPtr wsEndpointFactory = new WSEndpointFactory(wsProtocolInstance,
1370
+ tcpEndpointFactory->clone(wsProtocolInstance));
1371
+
1372
+ _endpointFactoryManager->add(wsEndpointFactory);
1373
+
1374
+ _dynamicLibraryList = new DynamicLibraryList;
1375
+
1376
+ _pluginManager = new PluginManagerI(communicator, _dynamicLibraryList);
1377
+
1378
+ _outgoingConnectionFactory = new OutgoingConnectionFactory(communicator, this);
1379
+
1380
+ _servantFactoryManager = new ObjectFactoryManager();
1381
+
1382
+ _objectAdapterFactory = new ObjectAdapterFactory(this, communicator);
1383
+
1384
+ _retryQueue = new RetryQueue(this);
1385
+
1386
+ //
1387
+ // When _wstringConverter isn't set, use the default Unicode wstring converter
1388
+ //
1389
+ if(!_wstringConverter)
1390
+ {
1391
+ _wstringConverter = new IceUtil::UnicodeWstringConverter;
1392
+ }
1393
+
1394
+ __setNoDelete(false);
1395
+ }
1396
+ catch(...)
1397
+ {
1398
+ {
1399
+ IceUtilInternal::MutexPtrLock<IceUtil::Mutex> sync(staticMutex);
1400
+ instanceList->remove(this);
1401
+ }
1402
+ destroy();
1403
+ __setNoDelete(false);
1404
+ throw;
1405
+ }
1406
+ }
1407
+
1408
+ IceInternal::Instance::~Instance()
1409
+ {
1410
+ assert(_state == StateDestroyed);
1411
+ assert(!_referenceFactory);
1412
+ assert(!_proxyFactory);
1413
+ assert(!_outgoingConnectionFactory);
1414
+
1415
+ assert(!_servantFactoryManager);
1416
+ assert(!_objectAdapterFactory);
1417
+ assert(!_clientThreadPool);
1418
+ assert(!_serverThreadPool);
1419
+ assert(!_endpointHostResolver);
1420
+ assert(!_retryQueue);
1421
+ assert(!_timer);
1422
+ assert(!_routerManager);
1423
+ assert(!_locatorManager);
1424
+ assert(!_endpointFactoryManager);
1425
+ assert(!_dynamicLibraryList);
1426
+ assert(!_pluginManager);
1427
+
1428
+ IceUtilInternal::MutexPtrLock<IceUtil::Mutex> sync(staticMutex);
1429
+ if(instanceList != 0)
1430
+ {
1431
+ instanceList->remove(this);
1432
+ }
1433
+ if(instanceCount() == 0)
1434
+ {
1435
+ #if defined(_WIN32) && !defined(ICE_OS_WINRT)
1436
+ WSACleanup();
1437
+ #endif
1438
+
1439
+ #ifndef _WIN32
1440
+ sigaction(SIGPIPE, &oldAction, 0);
1441
+
1442
+ if(!identForOpenlog.empty())
1443
+ {
1444
+ closelog();
1445
+ identForOpenlog.clear();
1446
+ }
1447
+ #endif
1448
+ }
1449
+ }
1450
+
1451
+ void
1452
+ IceInternal::Instance::finishSetup(int& argc, char* argv[], const Ice::CommunicatorPtr& communicator)
1453
+ {
1454
+ //
1455
+ // Load plug-ins.
1456
+ //
1457
+ assert(!_serverThreadPool);
1458
+ PluginManagerI* pluginManagerImpl = dynamic_cast<PluginManagerI*>(_pluginManager.get());
1459
+ assert(pluginManagerImpl);
1460
+ pluginManagerImpl->loadPlugins(argc, argv);
1461
+
1462
+ //
1463
+ // Reset _stringConverter and _wstringConverter, in case a plugin changed them
1464
+ //
1465
+ _stringConverter = IceUtil::getProcessStringConverter();
1466
+
1467
+ IceUtil::WstringConverterPtr newWstringConverter = IceUtil::getProcessWstringConverter();
1468
+ if(newWstringConverter)
1469
+ {
1470
+ _wstringConverter = newWstringConverter;
1471
+ }
1472
+ else if(!dynamic_cast<IceUtil::UnicodeWstringConverter*>(_wstringConverter.get()))
1473
+ {
1474
+ _wstringConverter = new IceUtil::UnicodeWstringConverter;
1475
+ }
1476
+
1477
+ //
1478
+ // Create Admin facets, if enabled.
1479
+ //
1480
+ // Note that any logger-dependent admin facet must be created after we load all plugins,
1481
+ // since one of these plugins can be a Logger plugin that sets a new logger during loading
1482
+ //
1483
+
1484
+ if(_initData.properties->getProperty("Ice.Admin.Enabled") == "")
1485
+ {
1486
+ _adminEnabled = _initData.properties->getProperty("Ice.Admin.Endpoints") != "";
1487
+ }
1488
+ else
1489
+ {
1490
+ _adminEnabled = _initData.properties->getPropertyAsInt("Ice.Admin.Enabled") > 0;
1491
+ }
1492
+
1493
+ StringSeq facetSeq = _initData.properties->getPropertyAsList("Ice.Admin.Facets");
1494
+ if(!facetSeq.empty())
1495
+ {
1496
+ _adminFacetFilter.insert(facetSeq.begin(), facetSeq.end());
1497
+ }
1498
+
1499
+ if(_adminEnabled)
1500
+ {
1501
+ //
1502
+ // Process facet
1503
+ //
1504
+ const string processFacetName = "Process";
1505
+ if(_adminFacetFilter.empty() || _adminFacetFilter.find(processFacetName) != _adminFacetFilter.end())
1506
+ {
1507
+ _adminFacets.insert(make_pair(processFacetName, new ProcessI(communicator)));
1508
+ }
1509
+
1510
+ //
1511
+ // Logger facet
1512
+ //
1513
+ const string loggerFacetName = "Logger";
1514
+ if(_adminFacetFilter.empty() || _adminFacetFilter.find(loggerFacetName) != _adminFacetFilter.end())
1515
+ {
1516
+ LoggerAdminLoggerPtr logger = createLoggerAdminLogger(_initData.properties, _initData.logger);
1517
+ setLogger(logger);
1518
+ _adminFacets.insert(make_pair(loggerFacetName, logger->getFacet()));
1519
+ }
1520
+
1521
+ //
1522
+ // Properties facet
1523
+ //
1524
+ const string propertiesFacetName = "Properties";
1525
+ PropertiesAdminIPtr propsAdmin;
1526
+ if(_adminFacetFilter.empty() || _adminFacetFilter.find(propertiesFacetName) != _adminFacetFilter.end())
1527
+ {
1528
+ propsAdmin = new PropertiesAdminI(_initData.properties, _initData.logger);
1529
+ _adminFacets.insert(make_pair(propertiesFacetName, propsAdmin));
1530
+ }
1531
+
1532
+ //
1533
+ // Metrics facet
1534
+ //
1535
+ const string metricsFacetName = "Metrics";
1536
+ if(_adminFacetFilter.empty() || _adminFacetFilter.find(metricsFacetName) != _adminFacetFilter.end())
1537
+ {
1538
+ CommunicatorObserverIPtr observer = new CommunicatorObserverI(_initData);
1539
+ _initData.observer = observer;
1540
+ _adminFacets.insert(make_pair(metricsFacetName, observer->getFacet()));
1541
+
1542
+ //
1543
+ // Make sure the metrics admin facet receives property updates.
1544
+ //
1545
+ if(propsAdmin)
1546
+ {
1547
+ propsAdmin->addUpdateCallback(observer->getFacet());
1548
+ }
1549
+ }
1550
+ }
1551
+
1552
+ //
1553
+ // Set observer updater
1554
+ //
1555
+ if(_initData.observer)
1556
+ {
1557
+ _initData.observer->setObserverUpdater(new ObserverUpdaterI(this));
1558
+ }
1559
+
1560
+ //
1561
+ // Create threads.
1562
+ //
1563
+ try
1564
+ {
1565
+ bool hasPriority = _initData.properties->getProperty("Ice.ThreadPriority") != "";
1566
+ int priority = _initData.properties->getPropertyAsInt("Ice.ThreadPriority");
1567
+ if(hasPriority)
1568
+ {
1569
+ _timer = new Timer(priority);
1570
+ }
1571
+ else
1572
+ {
1573
+ _timer = new Timer;
1574
+ }
1575
+ }
1576
+ catch(const IceUtil::Exception& ex)
1577
+ {
1578
+ Error out(_initData.logger);
1579
+ out << "cannot create thread for timer:\n" << ex;
1580
+ throw;
1581
+ }
1582
+
1583
+ try
1584
+ {
1585
+ _endpointHostResolver = new EndpointHostResolver(this);
1586
+ }
1587
+ catch(const IceUtil::Exception& ex)
1588
+ {
1589
+ Error out(_initData.logger);
1590
+ out << "cannot create thread for endpoint host resolver:\n" << ex;
1591
+ throw;
1592
+ }
1593
+
1594
+ _clientThreadPool = new ThreadPool(this, "Ice.ThreadPool.Client", 0);
1595
+
1596
+ //
1597
+ // The default router/locator may have been set during the loading of plugins.
1598
+ // Therefore we make sure it is not already set before checking the property.
1599
+ //
1600
+ if(!_referenceFactory->getDefaultRouter())
1601
+ {
1602
+ RouterPrx router = RouterPrx::uncheckedCast(_proxyFactory->propertyToProxy("Ice.Default.Router"));
1603
+ if(router)
1604
+ {
1605
+ _referenceFactory = _referenceFactory->setDefaultRouter(router);
1606
+ }
1607
+ }
1608
+
1609
+ if(!_referenceFactory->getDefaultLocator())
1610
+ {
1611
+ LocatorPrx locator = LocatorPrx::uncheckedCast(_proxyFactory->propertyToProxy("Ice.Default.Locator"));
1612
+ if(locator)
1613
+ {
1614
+ _referenceFactory = _referenceFactory->setDefaultLocator(locator);
1615
+ }
1616
+ }
1617
+
1618
+ //
1619
+ // Show process id if requested (but only once).
1620
+ //
1621
+ bool printProcessId = false;
1622
+ if(!printProcessIdDone && _initData.properties->getPropertyAsInt("Ice.PrintProcessId") > 0)
1623
+ {
1624
+ //
1625
+ // Safe double-check locking (no dependent variable!)
1626
+ //
1627
+ IceUtilInternal::MutexPtrLock<IceUtil::Mutex> sync(staticMutex);
1628
+ printProcessId = !printProcessIdDone;
1629
+
1630
+ //
1631
+ // We anticipate: we want to print it once, and we don't care when.
1632
+ //
1633
+ printProcessIdDone = true;
1634
+ }
1635
+
1636
+ if(printProcessId)
1637
+ {
1638
+ #ifdef _MSC_VER
1639
+ cout << GetCurrentProcessId() << endl;
1640
+ #else
1641
+ cout << getpid() << endl;
1642
+ #endif
1643
+ }
1644
+
1645
+ //
1646
+ // Server thread pool initialization is lazy in serverThreadPool().
1647
+ //
1648
+
1649
+ //
1650
+ // An application can set Ice.InitPlugins=0 if it wants to postpone
1651
+ // initialization until after it has interacted directly with the
1652
+ // plug-ins.
1653
+ //
1654
+ if(_initData.properties->getPropertyAsIntWithDefault("Ice.InitPlugins", 1) > 0)
1655
+ {
1656
+ pluginManagerImpl->initializePlugins();
1657
+ }
1658
+
1659
+ //
1660
+ // This must be done last as this call creates the Ice.Admin object adapter
1661
+ // and eventually register a process proxy with the Ice locator (allowing
1662
+ // remote clients to invoke Admin facets as soon as it's registered).
1663
+ //
1664
+ // Note: getAdmin here can return 0 and do nothing in the event the
1665
+ // application set Ice.Admin.Enabled but did not set Ice.Admin.Enpoints
1666
+ // and one or more of the properties required to create the Admin object.
1667
+ //
1668
+ if(_adminEnabled && _initData.properties->getPropertyAsIntWithDefault("Ice.Admin.DelayCreation", 0) <= 0)
1669
+ {
1670
+ getAdmin();
1671
+ }
1672
+ }
1673
+
1674
+ void
1675
+ IceInternal::Instance::destroy()
1676
+ {
1677
+ {
1678
+ Lock sync(*this);
1679
+
1680
+ //
1681
+ // If destroy is in progress, wait for it to be done. This is
1682
+ // necessary in case destroy() is called concurrently by
1683
+ // multiple threads.
1684
+ //
1685
+ while(_state == StateDestroyInProgress)
1686
+ {
1687
+ wait();
1688
+ }
1689
+
1690
+ if(_state == StateDestroyed)
1691
+ {
1692
+ return;
1693
+ }
1694
+ _state = StateDestroyInProgress;
1695
+ }
1696
+
1697
+ //
1698
+ // Shutdown and destroy all the incoming and outgoing Ice
1699
+ // connections and wait for the connections to be finished.
1700
+ //
1701
+ if(_objectAdapterFactory)
1702
+ {
1703
+ _objectAdapterFactory->shutdown();
1704
+ }
1705
+
1706
+ if(_outgoingConnectionFactory)
1707
+ {
1708
+ _outgoingConnectionFactory->destroy();
1709
+ }
1710
+
1711
+ if(_objectAdapterFactory)
1712
+ {
1713
+ _objectAdapterFactory->destroy();
1714
+ }
1715
+
1716
+ if(_outgoingConnectionFactory)
1717
+ {
1718
+ _outgoingConnectionFactory->waitUntilFinished();
1719
+ }
1720
+
1721
+ if(_retryQueue)
1722
+ {
1723
+ _retryQueue->destroy(); // Must be called before destroying thread pools.
1724
+ }
1725
+
1726
+ if(_initData.observer)
1727
+ {
1728
+ CommunicatorObserverIPtr observer = CommunicatorObserverIPtr::dynamicCast(_initData.observer);
1729
+ if(observer)
1730
+ {
1731
+ observer->destroy(); // Break cyclic reference counts. Don't clear _observer, it's immutable.
1732
+ }
1733
+ _initData.observer->setObserverUpdater(0); // Break cyclic reference count.
1734
+ }
1735
+
1736
+ LoggerAdminLoggerPtr logger = LoggerAdminLoggerPtr::dynamicCast(_initData.logger);
1737
+ if(logger)
1738
+ {
1739
+ //
1740
+ // This only disables the remote logging; we don't set or reset _initData.logger
1741
+ //
1742
+ logger->destroy();
1743
+ }
1744
+
1745
+ //
1746
+ // Now, destroy the thread pools. This must be done *only* after
1747
+ // all the connections are finished (the connections destruction
1748
+ // can require invoking callbacks with the thread pools).
1749
+ //
1750
+ if(_serverThreadPool)
1751
+ {
1752
+ _serverThreadPool->destroy();
1753
+ }
1754
+ if(_clientThreadPool)
1755
+ {
1756
+ _clientThreadPool->destroy();
1757
+ }
1758
+ if(_endpointHostResolver)
1759
+ {
1760
+ _endpointHostResolver->destroy();
1761
+ }
1762
+ if(_timer)
1763
+ {
1764
+ _timer->destroy();
1765
+ }
1766
+
1767
+ //
1768
+ // Wait for all the threads to be finished.
1769
+ //
1770
+ if(_clientThreadPool)
1771
+ {
1772
+ _clientThreadPool->joinWithAllThreads();
1773
+ }
1774
+ if(_serverThreadPool)
1775
+ {
1776
+ _serverThreadPool->joinWithAllThreads();
1777
+ }
1778
+ #ifndef ICE_OS_WINRT
1779
+ if(_endpointHostResolver)
1780
+ {
1781
+ _endpointHostResolver->getThreadControl().join();
1782
+ }
1783
+ #endif
1784
+
1785
+ if(_servantFactoryManager)
1786
+ {
1787
+ _servantFactoryManager->destroy();
1788
+ }
1789
+
1790
+ if(_routerManager)
1791
+ {
1792
+ _routerManager->destroy();
1793
+ }
1794
+
1795
+ if(_locatorManager)
1796
+ {
1797
+ _locatorManager->destroy();
1798
+ }
1799
+
1800
+ if(_endpointFactoryManager)
1801
+ {
1802
+ _endpointFactoryManager->destroy();
1803
+ }
1804
+
1805
+ if(_initData.properties->getPropertyAsInt("Ice.Warn.UnusedProperties") > 0)
1806
+ {
1807
+ set<string> unusedProperties = static_cast<PropertiesI*>(_initData.properties.get())->getUnusedProperties();
1808
+ if(unusedProperties.size() != 0)
1809
+ {
1810
+ Warning out(_initData.logger);
1811
+ out << "The following properties were set but never read:";
1812
+ for(set<string>::const_iterator p = unusedProperties.begin(); p != unusedProperties.end(); ++p)
1813
+ {
1814
+ out << "\n " << *p;
1815
+ }
1816
+ }
1817
+ }
1818
+
1819
+ //
1820
+ // Destroy last so that a Logger plugin can receive all log/traces before its destruction.
1821
+ //
1822
+ if(_pluginManager)
1823
+ {
1824
+ _pluginManager->destroy();
1825
+ }
1826
+
1827
+ {
1828
+ Lock sync(*this);
1829
+
1830
+ _objectAdapterFactory = 0;
1831
+ _outgoingConnectionFactory = 0;
1832
+ _retryQueue = 0;
1833
+
1834
+ _serverThreadPool = 0;
1835
+ _clientThreadPool = 0;
1836
+ _endpointHostResolver = 0;
1837
+ _timer = 0;
1838
+
1839
+ _servantFactoryManager = 0;
1840
+ _referenceFactory = 0;
1841
+ _requestHandlerFactory = 0;
1842
+ _proxyFactory = 0;
1843
+ _routerManager = 0;
1844
+ _locatorManager = 0;
1845
+ _endpointFactoryManager = 0;
1846
+ _pluginManager = 0;
1847
+ _dynamicLibraryList = 0;
1848
+
1849
+ _adminAdapter = 0;
1850
+ _adminFacets.clear();
1851
+
1852
+ _state = StateDestroyed;
1853
+ notifyAll();
1854
+ }
1855
+ }
1856
+
1857
+ void
1858
+ IceInternal::Instance::updateConnectionObservers()
1859
+ {
1860
+ try
1861
+ {
1862
+ assert(_outgoingConnectionFactory);
1863
+ _outgoingConnectionFactory->updateConnectionObservers();
1864
+ assert(_objectAdapterFactory);
1865
+ _objectAdapterFactory->updateObservers(&ObjectAdapterI::updateConnectionObservers);
1866
+ }
1867
+ catch(const Ice::CommunicatorDestroyedException&)
1868
+ {
1869
+ }
1870
+ }
1871
+
1872
+ void
1873
+ IceInternal::Instance::updateThreadObservers()
1874
+ {
1875
+ try
1876
+ {
1877
+ if(_clientThreadPool)
1878
+ {
1879
+ _clientThreadPool->updateObservers();
1880
+ }
1881
+ if(_serverThreadPool)
1882
+ {
1883
+ _serverThreadPool->updateObservers();
1884
+ }
1885
+ assert(_objectAdapterFactory);
1886
+ _objectAdapterFactory->updateObservers(&ObjectAdapterI::updateThreadObservers);
1887
+ if(_endpointHostResolver)
1888
+ {
1889
+ _endpointHostResolver->updateObserver();
1890
+ }
1891
+ if(_timer)
1892
+ {
1893
+ _timer->updateObserver(_initData.observer);
1894
+ }
1895
+ }
1896
+ catch(const Ice::CommunicatorDestroyedException&)
1897
+ {
1898
+ }
1899
+ }
1900
+
1901
+ IceInternal::ProcessI::ProcessI(const CommunicatorPtr& communicator) :
1902
+ _communicator(communicator)
1903
+ {
1904
+ }
1905
+
1906
+ void
1907
+ IceInternal::ProcessI::shutdown(const Current&)
1908
+ {
1909
+ _communicator->shutdown();
1910
+ }
1911
+
1912
+ void
1913
+ IceInternal::ProcessI::writeMessage(const string& message, Int fd, const Current&)
1914
+ {
1915
+ switch(fd)
1916
+ {
1917
+ case 1:
1918
+ {
1919
+ cout << message << endl;
1920
+ break;
1921
+ }
1922
+ case 2:
1923
+ {
1924
+ cerr << message << endl;
1925
+ break;
1926
+ }
1927
+ }
1928
+ }