zeroc-ice 3.6b1

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 (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
+ }