zeroc-ice 3.7.9.1 → 3.7.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (994) hide show
  1. checksums.yaml +4 -4
  2. data/dist/IceRuby/Connection.cpp +536 -0
  3. data/dist/IceRuby/Endpoint.cpp +344 -0
  4. data/dist/IceRuby/ImplicitContext.cpp +148 -0
  5. data/dist/IceRuby/Logger.cpp +151 -0
  6. data/dist/IceRuby/Operation.cpp +665 -0
  7. data/dist/IceRuby/Properties.cpp +369 -0
  8. data/dist/IceRuby/Types.cpp +3336 -0
  9. data/dist/IceRuby/Types.h +604 -0
  10. data/dist/IceRuby/ValueFactoryManager.cpp +445 -0
  11. data/dist/ice/cpp/include/Ice/Config.h +76 -0
  12. data/dist/ice/cpp/include/Ice/ConsoleUtil.h +23 -0
  13. data/dist/ice/cpp/include/Ice/ExceptionHelpers.h +74 -0
  14. data/dist/ice/cpp/include/Ice/Ice.h +55 -0
  15. data/dist/ice/cpp/include/Ice/Initialize.h +957 -0
  16. data/dist/ice/cpp/include/Ice/MetricsObserverI.h +669 -0
  17. data/dist/ice/cpp/include/Ice/OutgoingAsync.h +868 -0
  18. data/dist/ice/cpp/include/Ice/Proxy.h +5171 -0
  19. data/dist/ice/cpp/include/Ice/SHA1.h +40 -0
  20. data/dist/ice/cpp/include/Ice/UserExceptionFactory.h +90 -0
  21. data/dist/ice/cpp/include/IceDiscovery/IceDiscovery.h +1889 -0
  22. data/dist/ice/cpp/include/IceLocatorDiscovery/IceLocatorDiscovery.h +1197 -0
  23. data/dist/ice/cpp/include/IceSSL/IceSSL.h +24 -0
  24. data/dist/ice/cpp/include/IceUtil/Cond.h +317 -0
  25. data/dist/ice/cpp/include/IceUtil/Config.h +392 -0
  26. data/dist/ice/cpp/include/IceUtil/ConsoleUtil.h +92 -0
  27. data/dist/ice/cpp/include/IceUtil/CtrlCHandler.h +96 -0
  28. data/dist/ice/cpp/include/IceUtil/FileUtil.h +140 -0
  29. data/dist/ice/cpp/include/IceUtil/IceUtil.h +40 -0
  30. data/dist/ice/cpp/include/IceUtil/InputUtil.h +42 -0
  31. data/dist/ice/cpp/include/IceUtil/Mutex.h +349 -0
  32. data/dist/ice/cpp/include/IceUtil/ResourceConfig.h +37 -0
  33. data/dist/ice/cpp/include/IceUtil/Thread.h +160 -0
  34. data/dist/ice/cpp/include/IceUtil/Timer.h +153 -0
  35. data/dist/ice/cpp/include/generated/Glacier2/Metrics.h +475 -0
  36. data/dist/ice/cpp/include/generated/Glacier2/PermissionsVerifier.h +1430 -0
  37. data/dist/ice/cpp/include/generated/Glacier2/PermissionsVerifierF.h +147 -0
  38. data/dist/ice/cpp/include/generated/Glacier2/Router.h +3260 -0
  39. data/dist/ice/cpp/include/generated/Glacier2/RouterF.h +125 -0
  40. data/dist/ice/cpp/include/generated/Glacier2/SSLInfo.h +223 -0
  41. data/dist/ice/cpp/include/generated/Glacier2/Session.h +5894 -0
  42. data/dist/ice/cpp/include/generated/Ice/BuiltinSequences.h +170 -0
  43. data/dist/ice/cpp/include/generated/Ice/Communicator.h +1162 -0
  44. data/dist/ice/cpp/include/generated/Ice/CommunicatorF.h +101 -0
  45. data/dist/ice/cpp/include/generated/Ice/Connection.h +1703 -0
  46. data/dist/ice/cpp/include/generated/Ice/ConnectionF.h +119 -0
  47. data/dist/ice/cpp/include/generated/Ice/Current.h +322 -0
  48. data/dist/ice/cpp/include/generated/Ice/Endpoint.h +979 -0
  49. data/dist/ice/cpp/include/generated/Ice/EndpointF.h +166 -0
  50. data/dist/ice/cpp/include/generated/Ice/EndpointTypes.h +118 -0
  51. data/dist/ice/cpp/include/generated/Ice/FacetMap.h +80 -0
  52. data/dist/ice/cpp/include/generated/Ice/Identity.h +264 -0
  53. data/dist/ice/cpp/include/generated/Ice/ImplicitContext.h +284 -0
  54. data/dist/ice/cpp/include/generated/Ice/ImplicitContextF.h +101 -0
  55. data/dist/ice/cpp/include/generated/Ice/Instrumentation.h +1203 -0
  56. data/dist/ice/cpp/include/generated/Ice/InstrumentationF.h +128 -0
  57. data/dist/ice/cpp/include/generated/Ice/LocalException.h +7437 -0
  58. data/dist/ice/cpp/include/generated/Ice/Locator.h +3898 -0
  59. data/dist/ice/cpp/include/generated/Ice/LocatorF.h +147 -0
  60. data/dist/ice/cpp/include/generated/Ice/Logger.h +237 -0
  61. data/dist/ice/cpp/include/generated/Ice/LoggerF.h +101 -0
  62. data/dist/ice/cpp/include/generated/Ice/Metrics.h +4769 -0
  63. data/dist/ice/cpp/include/generated/Ice/ObjectAdapter.h +1181 -0
  64. data/dist/ice/cpp/include/generated/Ice/ObjectAdapterF.h +101 -0
  65. data/dist/ice/cpp/include/generated/Ice/ObjectFactory.h +203 -0
  66. data/dist/ice/cpp/include/generated/Ice/Plugin.h +318 -0
  67. data/dist/ice/cpp/include/generated/Ice/PluginF.h +110 -0
  68. data/dist/ice/cpp/include/generated/Ice/Process.h +977 -0
  69. data/dist/ice/cpp/include/generated/Ice/ProcessF.h +125 -0
  70. data/dist/ice/cpp/include/generated/Ice/Properties.h +452 -0
  71. data/dist/ice/cpp/include/generated/Ice/PropertiesAdmin.h +1366 -0
  72. data/dist/ice/cpp/include/generated/Ice/PropertiesF.h +134 -0
  73. data/dist/ice/cpp/include/generated/Ice/RemoteLogger.h +2707 -0
  74. data/dist/ice/cpp/include/generated/Ice/Router.h +1850 -0
  75. data/dist/ice/cpp/include/generated/Ice/RouterF.h +125 -0
  76. data/dist/ice/cpp/include/generated/Ice/ServantLocator.h +305 -0
  77. data/dist/ice/cpp/include/generated/Ice/ServantLocatorF.h +101 -0
  78. data/dist/ice/cpp/include/generated/Ice/SliceChecksumDict.h +84 -0
  79. data/dist/ice/cpp/include/generated/Ice/ValueFactory.h +330 -0
  80. data/dist/ice/cpp/include/generated/Ice/Version.h +357 -0
  81. data/dist/ice/cpp/include/generated/IceBox/IceBox.h +3269 -0
  82. data/dist/ice/cpp/include/generated/IceGrid/Admin.h +33773 -0
  83. data/dist/ice/cpp/include/generated/IceGrid/Descriptor.h +5254 -0
  84. data/dist/ice/cpp/include/generated/IceGrid/Exception.h +2834 -0
  85. data/dist/ice/cpp/include/generated/IceGrid/FileParser.h +824 -0
  86. data/dist/ice/cpp/include/generated/IceGrid/PluginFacade.h +635 -0
  87. data/dist/ice/cpp/include/generated/IceGrid/Registry.h +5089 -0
  88. data/dist/ice/cpp/include/generated/IceGrid/Session.h +2240 -0
  89. data/dist/ice/cpp/include/generated/IceGrid/UserAccountMapper.h +800 -0
  90. data/dist/ice/cpp/include/generated/IcePatch2/FileInfo.h +325 -0
  91. data/dist/ice/cpp/include/generated/IcePatch2/FileServer.h +2891 -0
  92. data/dist/ice/cpp/include/generated/IceSSL/ConnectionInfo.h +228 -0
  93. data/dist/ice/cpp/include/generated/IceSSL/ConnectionInfoF.h +101 -0
  94. data/dist/ice/cpp/include/generated/IceSSL/EndpointInfo.h +186 -0
  95. data/dist/ice/cpp/include/generated/IceStorm/IceStorm.h +6627 -0
  96. data/dist/ice/cpp/include/generated/IceStorm/Metrics.h +665 -0
  97. data/dist/ice/cpp/src/Ice/Acceptor.h +37 -0
  98. data/dist/ice/cpp/src/Ice/Application.cpp +661 -0
  99. data/dist/ice/cpp/src/Ice/ConnectionFactory.cpp +1972 -0
  100. data/dist/ice/cpp/src/Ice/ConnectionFactory.h +264 -0
  101. data/dist/ice/cpp/src/Ice/ConnectionI.cpp +3670 -0
  102. data/dist/ice/cpp/src/Ice/ConnectionI.h +389 -0
  103. data/dist/ice/cpp/src/Ice/CountDownLatch.cpp +171 -0
  104. data/dist/ice/cpp/src/Ice/DLLMain.cpp +50 -0
  105. data/dist/ice/cpp/src/Ice/DefaultsAndOverrides.cpp +159 -0
  106. data/dist/ice/cpp/src/Ice/DynamicLibrary.cpp +284 -0
  107. data/dist/ice/cpp/src/Ice/EndpointFactory.cpp +189 -0
  108. data/dist/ice/cpp/src/Ice/EndpointI.cpp +98 -0
  109. data/dist/ice/cpp/src/Ice/EventHandler.cpp +32 -0
  110. data/dist/ice/cpp/src/Ice/EventHandler.h +81 -0
  111. data/dist/ice/cpp/src/Ice/Exception.cpp +818 -0
  112. data/dist/ice/cpp/src/Ice/IPEndpointI.cpp +710 -0
  113. data/dist/ice/cpp/src/Ice/IPEndpointI.h +152 -0
  114. data/dist/ice/cpp/src/Ice/InputStream.cpp +2741 -0
  115. data/dist/ice/cpp/src/Ice/Instance.cpp +1967 -0
  116. data/dist/ice/cpp/src/Ice/LoggerI.cpp +259 -0
  117. data/dist/ice/cpp/src/Ice/MetricsAdminI.cpp +694 -0
  118. data/dist/ice/cpp/src/Ice/Network.cpp +2249 -0
  119. data/dist/ice/cpp/src/Ice/Network.h +289 -0
  120. data/dist/ice/cpp/src/Ice/NetworkF.h +19 -0
  121. data/dist/ice/cpp/src/Ice/NetworkProxy.cpp +311 -0
  122. data/dist/ice/cpp/src/Ice/ObjectAdapterI.cpp +1530 -0
  123. data/dist/ice/cpp/src/Ice/OutgoingAsync.cpp +1322 -0
  124. data/dist/ice/cpp/src/Ice/PluginManagerI.cpp +503 -0
  125. data/dist/ice/cpp/src/Ice/PropertiesI.cpp +739 -0
  126. data/dist/ice/cpp/src/Ice/PropertyNames.cpp +1428 -0
  127. data/dist/ice/cpp/src/Ice/PropertyNames.h +78 -0
  128. data/dist/ice/cpp/src/Ice/Proxy.cpp +1604 -0
  129. data/dist/ice/cpp/src/Ice/SHA1.cpp +169 -0
  130. data/dist/ice/cpp/src/Ice/Selector.cpp +1535 -0
  131. data/dist/ice/cpp/src/Ice/Selector.h +292 -0
  132. data/dist/ice/cpp/src/Ice/Service.cpp +1883 -0
  133. data/dist/ice/cpp/src/Ice/StreamSocket.cpp +519 -0
  134. data/dist/ice/cpp/src/Ice/StreamSocket.h +85 -0
  135. data/dist/ice/cpp/src/Ice/TcpAcceptor.cpp +234 -0
  136. data/dist/ice/cpp/src/Ice/TcpAcceptor.h +61 -0
  137. data/dist/ice/cpp/src/Ice/TcpTransceiver.cpp +135 -0
  138. data/dist/ice/cpp/src/Ice/TcpTransceiver.h +58 -0
  139. data/dist/ice/cpp/src/Ice/Thread.cpp +569 -0
  140. data/dist/ice/cpp/src/Ice/ThreadPool.cpp +1292 -0
  141. data/dist/ice/cpp/src/Ice/ThreadPool.h +393 -0
  142. data/dist/ice/cpp/src/Ice/Transceiver.h +49 -0
  143. data/dist/ice/cpp/src/Ice/UdpConnector.cpp +131 -0
  144. data/dist/ice/cpp/src/Ice/UdpTransceiver.cpp +806 -0
  145. data/dist/ice/cpp/src/Ice/UdpTransceiver.h +96 -0
  146. data/dist/ice/cpp/src/Ice/WSAcceptor.cpp +92 -0
  147. data/dist/ice/cpp/src/Ice/WSAcceptor.h +52 -0
  148. data/dist/ice/cpp/src/Ice/WSTransceiver.cpp +1704 -0
  149. data/dist/ice/cpp/src/Ice/WSTransceiver.h +141 -0
  150. data/dist/ice/cpp/src/Ice/generated/BuiltinSequences.cpp +49 -0
  151. data/dist/ice/cpp/src/Ice/generated/Communicator.cpp +79 -0
  152. data/dist/ice/cpp/src/Ice/generated/CommunicatorF.cpp +61 -0
  153. data/dist/ice/cpp/src/Ice/generated/Connection.cpp +155 -0
  154. data/dist/ice/cpp/src/Ice/generated/ConnectionF.cpp +61 -0
  155. data/dist/ice/cpp/src/Ice/generated/Current.cpp +62 -0
  156. data/dist/ice/cpp/src/Ice/generated/Endpoint.cpp +147 -0
  157. data/dist/ice/cpp/src/Ice/generated/EndpointF.cpp +61 -0
  158. data/dist/ice/cpp/src/Ice/generated/EndpointTypes.cpp +51 -0
  159. data/dist/ice/cpp/src/Ice/generated/FacetMap.cpp +49 -0
  160. data/dist/ice/cpp/src/Ice/generated/Identity.cpp +57 -0
  161. data/dist/ice/cpp/src/Ice/generated/ImplicitContext.cpp +75 -0
  162. data/dist/ice/cpp/src/Ice/generated/ImplicitContextF.cpp +61 -0
  163. data/dist/ice/cpp/src/Ice/generated/Instrumentation.cpp +188 -0
  164. data/dist/ice/cpp/src/Ice/generated/InstrumentationF.cpp +66 -0
  165. data/dist/ice/cpp/src/Ice/generated/LocalException.cpp +3262 -0
  166. data/dist/ice/cpp/src/Ice/generated/Locator.cpp +2042 -0
  167. data/dist/ice/cpp/src/Ice/generated/LocatorF.cpp +63 -0
  168. data/dist/ice/cpp/src/Ice/generated/Logger.cpp +73 -0
  169. data/dist/ice/cpp/src/Ice/generated/LoggerF.cpp +61 -0
  170. data/dist/ice/cpp/src/Ice/generated/Metrics.cpp +2352 -0
  171. data/dist/ice/cpp/src/Ice/generated/ObjectAdapter.cpp +79 -0
  172. data/dist/ice/cpp/src/Ice/generated/ObjectAdapterF.cpp +61 -0
  173. data/dist/ice/cpp/src/Ice/generated/ObjectFactory.cpp +75 -0
  174. data/dist/ice/cpp/src/Ice/generated/Plugin.cpp +87 -0
  175. data/dist/ice/cpp/src/Ice/generated/PluginF.cpp +61 -0
  176. data/dist/ice/cpp/src/Ice/generated/Process.cpp +471 -0
  177. data/dist/ice/cpp/src/Ice/generated/ProcessF.cpp +63 -0
  178. data/dist/ice/cpp/src/Ice/generated/Properties.cpp +78 -0
  179. data/dist/ice/cpp/src/Ice/generated/PropertiesAdmin.cpp +603 -0
  180. data/dist/ice/cpp/src/Ice/generated/PropertiesF.cpp +63 -0
  181. data/dist/ice/cpp/src/Ice/generated/RemoteLogger.cpp +1171 -0
  182. data/dist/ice/cpp/src/Ice/generated/Router.cpp +977 -0
  183. data/dist/ice/cpp/src/Ice/generated/RouterF.cpp +63 -0
  184. data/dist/ice/cpp/src/Ice/generated/ServantLocator.cpp +75 -0
  185. data/dist/ice/cpp/src/Ice/generated/ServantLocatorF.cpp +61 -0
  186. data/dist/ice/cpp/src/Ice/generated/SliceChecksumDict.cpp +49 -0
  187. data/dist/ice/cpp/src/Ice/generated/ValueFactory.cpp +83 -0
  188. data/dist/ice/cpp/src/Ice/generated/Version.cpp +57 -0
  189. data/dist/ice/cpp/src/Ice/ios/StreamAcceptor.cpp +154 -0
  190. data/dist/ice/cpp/src/Ice/ios/StreamAcceptor.h +49 -0
  191. data/dist/ice/cpp/src/Ice/ios/StreamConnector.cpp +146 -0
  192. data/dist/ice/cpp/src/Ice/ios/StreamConnector.h +52 -0
  193. data/dist/ice/cpp/src/Ice/ios/StreamEndpointI.cpp +477 -0
  194. data/dist/ice/cpp/src/Ice/ios/StreamEndpointI.h +156 -0
  195. data/dist/ice/cpp/src/Ice/ios/StreamTransceiver.cpp +570 -0
  196. data/dist/ice/cpp/src/Ice/ios/StreamTransceiver.h +93 -0
  197. data/dist/ice/cpp/src/IceDiscovery/generated/IceDiscovery/IceDiscovery.h +1889 -0
  198. data/dist/ice/cpp/src/IceDiscovery/generated/IceDiscovery.cpp +915 -0
  199. data/dist/ice/cpp/src/IceLocatorDiscovery/generated/IceLocatorDiscovery/IceLocatorDiscovery.h +1197 -0
  200. data/dist/ice/cpp/src/IceLocatorDiscovery/generated/IceLocatorDiscovery.cpp +730 -0
  201. data/dist/ice/cpp/src/IceSSL/AcceptorI.cpp +105 -0
  202. data/dist/ice/cpp/src/IceSSL/AcceptorI.h +52 -0
  203. data/dist/ice/cpp/src/IceSSL/OpenSSLTransceiverI.cpp +1092 -0
  204. data/dist/ice/cpp/src/IceSSL/PluginI.cpp +246 -0
  205. data/dist/ice/cpp/src/IceSSL/SecureTransportTransceiverI.cpp +719 -0
  206. data/dist/ice/cpp/src/IceSSL/SecureTransportUtil.cpp +868 -0
  207. data/dist/ice/cpp/src/IceSSL/Util.cpp +192 -0
  208. data/dist/ice/cpp/src/IceSSL/generated/ConnectionInfo.cpp +75 -0
  209. data/dist/ice/cpp/src/IceSSL/generated/ConnectionInfoF.cpp +61 -0
  210. data/dist/ice/cpp/src/IceSSL/generated/EndpointInfo.cpp +75 -0
  211. data/dist/ice/cpp/src/IceUtil/ConsoleUtil.cpp +157 -0
  212. data/dist/ice/cpp/src/IceUtil/FileUtil.cpp +471 -0
  213. data/dist/ice/cpp/src/IceUtil/RecMutex.cpp +238 -0
  214. data/dist/ice/cpp/src/IceUtil/StringConverter.cpp +690 -0
  215. data/dist/ice/cpp/src/IceUtil/StringUtil.cpp +1135 -0
  216. data/dist/ice/cpp/src/IceUtil/UUID.cpp +165 -0
  217. data/dist/ice/cpp/src/IceUtil/UtilException.cpp +839 -0
  218. data/dist/ice/cpp/src/Slice/JavaUtil.cpp +5183 -0
  219. data/dist/ice/cpp/src/Slice/JavaUtil.h +407 -0
  220. data/dist/ice/cpp/src/slice2rb/Main.cpp +35 -0
  221. data/dist/ice/mcpp/directive.c +1407 -0
  222. data/dist/ice/mcpp/internal.H +530 -0
  223. data/dist/ice/mcpp/mcpp_main.c +792 -0
  224. data/dist/ice/mcpp/support.c +1985 -0
  225. data/dist/ice/mcpp/system.c +2741 -0
  226. data/dist/ice/slice/Ice/Connection.ice +516 -0
  227. data/dist/ice/slice/Ice/Current.ice +170 -0
  228. data/dist/ice/slice/Ice/Locator.ice +239 -0
  229. data/dist/ice/slice/Ice/Metrics.ice +436 -0
  230. data/dist/ice/slice/Ice/ObjectAdapter.ice +710 -0
  231. data/dist/ice/slice/Ice/Properties.ice +244 -0
  232. data/dist/ice/slice/Ice/Router.ice +103 -0
  233. data/dist/ice/slice/IceGrid/PluginFacade.ice +329 -0
  234. data/dist/ice/slice/IceStorm/IceStorm.ice +414 -0
  235. data/dist/lib/Glacier2/Metrics.rb +56 -0
  236. data/dist/lib/Glacier2/PermissionsVerifier.rb +93 -0
  237. data/dist/lib/Glacier2/PermissionsVerifierF.rb +30 -0
  238. data/dist/lib/Glacier2/Router.rb +95 -0
  239. data/dist/lib/Glacier2/RouterF.rb +25 -0
  240. data/dist/lib/Glacier2/SSLInfo.rb +72 -0
  241. data/dist/lib/Glacier2/Session.rb +247 -0
  242. data/dist/lib/Ice/BuiltinSequences.rb +60 -0
  243. data/dist/lib/Ice/Communicator.rb +87 -0
  244. data/dist/lib/Ice/CommunicatorF.rb +24 -0
  245. data/dist/lib/Ice/Connection.rb +413 -0
  246. data/dist/lib/Ice/ConnectionF.rb +32 -0
  247. data/dist/lib/Ice/Current.rb +141 -0
  248. data/dist/lib/Ice/Endpoint.rb +187 -0
  249. data/dist/lib/Ice/EndpointF.rb +48 -0
  250. data/dist/lib/Ice/EndpointTypes.rb +69 -0
  251. data/dist/lib/Ice/FacetMap.rb +24 -0
  252. data/dist/lib/Ice/Identity.rb +63 -0
  253. data/dist/lib/Ice/ImplicitContext.rb +26 -0
  254. data/dist/lib/Ice/ImplicitContextF.rb +24 -0
  255. data/dist/lib/Ice/Instrumentation.rb +169 -0
  256. data/dist/lib/Ice/InstrumentationF.rb +31 -0
  257. data/dist/lib/Ice/LocalException.rb +1031 -0
  258. data/dist/lib/Ice/Locator.rb +196 -0
  259. data/dist/lib/Ice/LocatorF.rb +30 -0
  260. data/dist/lib/Ice/Logger.rb +24 -0
  261. data/dist/lib/Ice/LoggerF.rb +24 -0
  262. data/dist/lib/Ice/Metrics.rb +337 -0
  263. data/dist/lib/Ice/ObjectAdapter.rb +29 -0
  264. data/dist/lib/Ice/ObjectAdapterF.rb +24 -0
  265. data/dist/lib/Ice/ObjectFactory.rb +24 -0
  266. data/dist/lib/Ice/Plugin.rb +30 -0
  267. data/dist/lib/Ice/PluginF.rb +28 -0
  268. data/dist/lib/Ice/Process.rb +53 -0
  269. data/dist/lib/Ice/ProcessF.rb +25 -0
  270. data/dist/lib/Ice/Properties.rb +25 -0
  271. data/dist/lib/Ice/PropertiesAdmin.rb +63 -0
  272. data/dist/lib/Ice/PropertiesF.rb +29 -0
  273. data/dist/lib/Ice/RemoteLogger.rb +207 -0
  274. data/dist/lib/Ice/Router.rb +87 -0
  275. data/dist/lib/Ice/RouterF.rb +25 -0
  276. data/dist/lib/Ice/ServantLocator.rb +26 -0
  277. data/dist/lib/Ice/ServantLocatorF.rb +24 -0
  278. data/dist/lib/Ice/SliceChecksumDict.rb +24 -0
  279. data/dist/lib/Ice/ValueFactory.rb +28 -0
  280. data/dist/lib/Ice/Version.rb +90 -0
  281. data/dist/lib/IceBox/IceBox.rb +164 -0
  282. data/dist/lib/IceGrid/Admin.rb +1196 -0
  283. data/dist/lib/IceGrid/Descriptor.rb +1034 -0
  284. data/dist/lib/IceGrid/Exception.rb +376 -0
  285. data/dist/lib/IceGrid/FileParser.rb +65 -0
  286. data/dist/lib/IceGrid/PluginFacade.rb +35 -0
  287. data/dist/lib/IceGrid/Registry.rb +209 -0
  288. data/dist/lib/IceGrid/Session.rb +71 -0
  289. data/dist/lib/IceGrid/UserAccountMapper.rb +61 -0
  290. data/dist/lib/IcePatch2/FileInfo.rb +115 -0
  291. data/dist/lib/IcePatch2/FileServer.rb +123 -0
  292. data/dist/lib/IceStorm/IceStorm.rb +332 -0
  293. data/dist/lib/IceStorm/Metrics.rb +73 -0
  294. data/extconf.rb +91 -0
  295. data/ice.gemspec +21 -16
  296. metadata +715 -711
  297. data/ICE_LICENSE +0 -48
  298. data/LICENSE +0 -340
  299. data/MCPP_LICENSE +0 -29
  300. data/ext/Connection.cpp +0 -532
  301. data/ext/Endpoint.cpp +0 -340
  302. data/ext/ImplicitContext.cpp +0 -144
  303. data/ext/Logger.cpp +0 -147
  304. data/ext/Operation.cpp +0 -661
  305. data/ext/Properties.cpp +0 -365
  306. data/ext/Types.cpp +0 -3325
  307. data/ext/Types.h +0 -595
  308. data/ext/ValueFactoryManager.cpp +0 -441
  309. data/ext/extconf.rb +0 -97
  310. data/ext/ice/cpp/include/Ice/Config.h +0 -78
  311. data/ext/ice/cpp/include/Ice/ConsoleUtil.h +0 -23
  312. data/ext/ice/cpp/include/Ice/ExceptionHelpers.h +0 -74
  313. data/ext/ice/cpp/include/Ice/Ice.h +0 -55
  314. data/ext/ice/cpp/include/Ice/Initialize.h +0 -957
  315. data/ext/ice/cpp/include/Ice/MetricsObserverI.h +0 -669
  316. data/ext/ice/cpp/include/Ice/OutgoingAsync.h +0 -856
  317. data/ext/ice/cpp/include/Ice/Proxy.h +0 -5154
  318. data/ext/ice/cpp/include/Ice/SHA1.h +0 -42
  319. data/ext/ice/cpp/include/Ice/UserExceptionFactory.h +0 -88
  320. data/ext/ice/cpp/include/IceSSL/IceSSL.h +0 -28
  321. data/ext/ice/cpp/include/IceSSL/UWP.h +0 -62
  322. data/ext/ice/cpp/include/IceUtil/Cond.h +0 -317
  323. data/ext/ice/cpp/include/IceUtil/Config.h +0 -424
  324. data/ext/ice/cpp/include/IceUtil/ConsoleUtil.h +0 -92
  325. data/ext/ice/cpp/include/IceUtil/CtrlCHandler.h +0 -92
  326. data/ext/ice/cpp/include/IceUtil/FileUtil.h +0 -143
  327. data/ext/ice/cpp/include/IceUtil/IceUtil.h +0 -40
  328. data/ext/ice/cpp/include/IceUtil/InputUtil.h +0 -42
  329. data/ext/ice/cpp/include/IceUtil/Mutex.h +0 -353
  330. data/ext/ice/cpp/include/IceUtil/ResourceConfig.h +0 -53
  331. data/ext/ice/cpp/include/IceUtil/Thread.h +0 -174
  332. data/ext/ice/cpp/include/IceUtil/Timer.h +0 -143
  333. data/ext/ice/cpp/include/generated/Ice/BuiltinSequences.h +0 -170
  334. data/ext/ice/cpp/include/generated/Ice/Communicator.h +0 -1162
  335. data/ext/ice/cpp/include/generated/Ice/CommunicatorF.h +0 -101
  336. data/ext/ice/cpp/include/generated/Ice/Connection.h +0 -1703
  337. data/ext/ice/cpp/include/generated/Ice/ConnectionF.h +0 -119
  338. data/ext/ice/cpp/include/generated/Ice/Current.h +0 -322
  339. data/ext/ice/cpp/include/generated/Ice/Endpoint.h +0 -979
  340. data/ext/ice/cpp/include/generated/Ice/EndpointF.h +0 -166
  341. data/ext/ice/cpp/include/generated/Ice/EndpointTypes.h +0 -118
  342. data/ext/ice/cpp/include/generated/Ice/FacetMap.h +0 -80
  343. data/ext/ice/cpp/include/generated/Ice/Identity.h +0 -264
  344. data/ext/ice/cpp/include/generated/Ice/ImplicitContext.h +0 -284
  345. data/ext/ice/cpp/include/generated/Ice/ImplicitContextF.h +0 -101
  346. data/ext/ice/cpp/include/generated/Ice/Instrumentation.h +0 -1203
  347. data/ext/ice/cpp/include/generated/Ice/InstrumentationF.h +0 -128
  348. data/ext/ice/cpp/include/generated/Ice/LocalException.h +0 -7437
  349. data/ext/ice/cpp/include/generated/Ice/Locator.h +0 -3898
  350. data/ext/ice/cpp/include/generated/Ice/LocatorF.h +0 -147
  351. data/ext/ice/cpp/include/generated/Ice/Logger.h +0 -237
  352. data/ext/ice/cpp/include/generated/Ice/LoggerF.h +0 -101
  353. data/ext/ice/cpp/include/generated/Ice/Metrics.h +0 -4769
  354. data/ext/ice/cpp/include/generated/Ice/ObjectAdapter.h +0 -1181
  355. data/ext/ice/cpp/include/generated/Ice/ObjectAdapterF.h +0 -101
  356. data/ext/ice/cpp/include/generated/Ice/ObjectFactory.h +0 -203
  357. data/ext/ice/cpp/include/generated/Ice/Plugin.h +0 -318
  358. data/ext/ice/cpp/include/generated/Ice/PluginF.h +0 -110
  359. data/ext/ice/cpp/include/generated/Ice/Process.h +0 -977
  360. data/ext/ice/cpp/include/generated/Ice/ProcessF.h +0 -125
  361. data/ext/ice/cpp/include/generated/Ice/Properties.h +0 -452
  362. data/ext/ice/cpp/include/generated/Ice/PropertiesAdmin.h +0 -1366
  363. data/ext/ice/cpp/include/generated/Ice/PropertiesF.h +0 -134
  364. data/ext/ice/cpp/include/generated/Ice/RemoteLogger.h +0 -2707
  365. data/ext/ice/cpp/include/generated/Ice/Router.h +0 -1850
  366. data/ext/ice/cpp/include/generated/Ice/RouterF.h +0 -125
  367. data/ext/ice/cpp/include/generated/Ice/ServantLocator.h +0 -305
  368. data/ext/ice/cpp/include/generated/Ice/ServantLocatorF.h +0 -101
  369. data/ext/ice/cpp/include/generated/Ice/SliceChecksumDict.h +0 -84
  370. data/ext/ice/cpp/include/generated/Ice/ValueFactory.h +0 -330
  371. data/ext/ice/cpp/include/generated/Ice/Version.h +0 -357
  372. data/ext/ice/cpp/include/generated/IceSSL/ConnectionInfo.h +0 -228
  373. data/ext/ice/cpp/include/generated/IceSSL/ConnectionInfoF.h +0 -101
  374. data/ext/ice/cpp/include/generated/IceSSL/EndpointInfo.h +0 -186
  375. data/ext/ice/cpp/src/Ice/Acceptor.h +0 -37
  376. data/ext/ice/cpp/src/Ice/BuiltinSequences.cpp +0 -49
  377. data/ext/ice/cpp/src/Ice/Communicator.cpp +0 -79
  378. data/ext/ice/cpp/src/Ice/CommunicatorF.cpp +0 -61
  379. data/ext/ice/cpp/src/Ice/Connection.cpp +0 -155
  380. data/ext/ice/cpp/src/Ice/ConnectionF.cpp +0 -61
  381. data/ext/ice/cpp/src/Ice/ConnectionFactory.cpp +0 -1972
  382. data/ext/ice/cpp/src/Ice/ConnectionFactory.h +0 -264
  383. data/ext/ice/cpp/src/Ice/ConnectionI.cpp +0 -3670
  384. data/ext/ice/cpp/src/Ice/ConnectionI.h +0 -391
  385. data/ext/ice/cpp/src/Ice/CountDownLatch.cpp +0 -179
  386. data/ext/ice/cpp/src/Ice/Current.cpp +0 -62
  387. data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.cpp +0 -161
  388. data/ext/ice/cpp/src/Ice/DynamicLibrary.cpp +0 -291
  389. data/ext/ice/cpp/src/Ice/Endpoint.cpp +0 -147
  390. data/ext/ice/cpp/src/Ice/EndpointF.cpp +0 -61
  391. data/ext/ice/cpp/src/Ice/EndpointFactory.cpp +0 -189
  392. data/ext/ice/cpp/src/Ice/EndpointI.cpp +0 -98
  393. data/ext/ice/cpp/src/Ice/EndpointTypes.cpp +0 -51
  394. data/ext/ice/cpp/src/Ice/EventHandler.cpp +0 -32
  395. data/ext/ice/cpp/src/Ice/EventHandler.h +0 -81
  396. data/ext/ice/cpp/src/Ice/Exception.cpp +0 -845
  397. data/ext/ice/cpp/src/Ice/FacetMap.cpp +0 -49
  398. data/ext/ice/cpp/src/Ice/IPEndpointI.cpp +0 -756
  399. data/ext/ice/cpp/src/Ice/IPEndpointI.h +0 -162
  400. data/ext/ice/cpp/src/Ice/Identity.cpp +0 -57
  401. data/ext/ice/cpp/src/Ice/ImplicitContext.cpp +0 -75
  402. data/ext/ice/cpp/src/Ice/ImplicitContextF.cpp +0 -61
  403. data/ext/ice/cpp/src/Ice/InputStream.cpp +0 -2741
  404. data/ext/ice/cpp/src/Ice/Instance.cpp +0 -1971
  405. data/ext/ice/cpp/src/Ice/Instrumentation.cpp +0 -188
  406. data/ext/ice/cpp/src/Ice/InstrumentationF.cpp +0 -66
  407. data/ext/ice/cpp/src/Ice/LocalException.cpp +0 -3262
  408. data/ext/ice/cpp/src/Ice/Locator.cpp +0 -2042
  409. data/ext/ice/cpp/src/Ice/LocatorF.cpp +0 -63
  410. data/ext/ice/cpp/src/Ice/Logger.cpp +0 -73
  411. data/ext/ice/cpp/src/Ice/LoggerF.cpp +0 -61
  412. data/ext/ice/cpp/src/Ice/LoggerI.cpp +0 -261
  413. data/ext/ice/cpp/src/Ice/Metrics.cpp +0 -2352
  414. data/ext/ice/cpp/src/Ice/MetricsAdminI.cpp +0 -694
  415. data/ext/ice/cpp/src/Ice/Network.cpp +0 -3075
  416. data/ext/ice/cpp/src/Ice/Network.h +0 -371
  417. data/ext/ice/cpp/src/Ice/NetworkF.h +0 -23
  418. data/ext/ice/cpp/src/Ice/NetworkProxy.cpp +0 -324
  419. data/ext/ice/cpp/src/Ice/ObjectAdapter.cpp +0 -79
  420. data/ext/ice/cpp/src/Ice/ObjectAdapterF.cpp +0 -61
  421. data/ext/ice/cpp/src/Ice/ObjectAdapterI.cpp +0 -1530
  422. data/ext/ice/cpp/src/Ice/ObjectFactory.cpp +0 -75
  423. data/ext/ice/cpp/src/Ice/OutgoingAsync.cpp +0 -1322
  424. data/ext/ice/cpp/src/Ice/Plugin.cpp +0 -87
  425. data/ext/ice/cpp/src/Ice/PluginF.cpp +0 -61
  426. data/ext/ice/cpp/src/Ice/PluginManagerI.cpp +0 -503
  427. data/ext/ice/cpp/src/Ice/Process.cpp +0 -471
  428. data/ext/ice/cpp/src/Ice/ProcessF.cpp +0 -63
  429. data/ext/ice/cpp/src/Ice/Properties.cpp +0 -78
  430. data/ext/ice/cpp/src/Ice/PropertiesAdmin.cpp +0 -603
  431. data/ext/ice/cpp/src/Ice/PropertiesF.cpp +0 -63
  432. data/ext/ice/cpp/src/Ice/PropertiesI.cpp +0 -747
  433. data/ext/ice/cpp/src/Ice/PropertyNames.cpp +0 -1429
  434. data/ext/ice/cpp/src/Ice/PropertyNames.h +0 -78
  435. data/ext/ice/cpp/src/Ice/Proxy.cpp +0 -1601
  436. data/ext/ice/cpp/src/Ice/RemoteLogger.cpp +0 -1171
  437. data/ext/ice/cpp/src/Ice/Router.cpp +0 -977
  438. data/ext/ice/cpp/src/Ice/RouterF.cpp +0 -63
  439. data/ext/ice/cpp/src/Ice/SHA1.cpp +0 -185
  440. data/ext/ice/cpp/src/Ice/Selector.cpp +0 -1537
  441. data/ext/ice/cpp/src/Ice/Selector.h +0 -308
  442. data/ext/ice/cpp/src/Ice/ServantLocator.cpp +0 -75
  443. data/ext/ice/cpp/src/Ice/ServantLocatorF.cpp +0 -61
  444. data/ext/ice/cpp/src/Ice/SliceChecksumDict.cpp +0 -49
  445. data/ext/ice/cpp/src/Ice/StreamSocket.cpp +0 -682
  446. data/ext/ice/cpp/src/Ice/StreamSocket.h +0 -92
  447. data/ext/ice/cpp/src/Ice/TcpAcceptor.cpp +0 -355
  448. data/ext/ice/cpp/src/Ice/TcpAcceptor.h +0 -69
  449. data/ext/ice/cpp/src/Ice/TcpTransceiver.cpp +0 -135
  450. data/ext/ice/cpp/src/Ice/TcpTransceiver.h +0 -58
  451. data/ext/ice/cpp/src/Ice/Thread.cpp +0 -811
  452. data/ext/ice/cpp/src/Ice/ThreadPool.cpp +0 -1328
  453. data/ext/ice/cpp/src/Ice/ThreadPool.h +0 -393
  454. data/ext/ice/cpp/src/Ice/Transceiver.h +0 -49
  455. data/ext/ice/cpp/src/Ice/UdpConnector.cpp +0 -136
  456. data/ext/ice/cpp/src/Ice/UdpTransceiver.cpp +0 -1153
  457. data/ext/ice/cpp/src/Ice/UdpTransceiver.h +0 -117
  458. data/ext/ice/cpp/src/Ice/ValueFactory.cpp +0 -83
  459. data/ext/ice/cpp/src/Ice/Version.cpp +0 -57
  460. data/ext/ice/cpp/src/Ice/WSAcceptor.cpp +0 -92
  461. data/ext/ice/cpp/src/Ice/WSAcceptor.h +0 -52
  462. data/ext/ice/cpp/src/Ice/WSTransceiver.cpp +0 -1747
  463. data/ext/ice/cpp/src/Ice/WSTransceiver.h +0 -141
  464. data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.cpp +0 -915
  465. data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.h +0 -1889
  466. data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.cpp +0 -730
  467. data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.h +0 -1197
  468. data/ext/ice/cpp/src/IceSSL/AcceptorI.cpp +0 -105
  469. data/ext/ice/cpp/src/IceSSL/AcceptorI.h +0 -52
  470. data/ext/ice/cpp/src/IceSSL/ConnectionInfo.cpp +0 -75
  471. data/ext/ice/cpp/src/IceSSL/ConnectionInfoF.cpp +0 -61
  472. data/ext/ice/cpp/src/IceSSL/EndpointInfo.cpp +0 -75
  473. data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.cpp +0 -1092
  474. data/ext/ice/cpp/src/IceSSL/PluginI.cpp +0 -246
  475. data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.cpp +0 -719
  476. data/ext/ice/cpp/src/IceSSL/SecureTransportUtil.cpp +0 -868
  477. data/ext/ice/cpp/src/IceSSL/UWPCertificateI.cpp +0 -266
  478. data/ext/ice/cpp/src/IceSSL/UWPEngine.cpp +0 -338
  479. data/ext/ice/cpp/src/IceSSL/UWPEngine.h +0 -41
  480. data/ext/ice/cpp/src/IceSSL/UWPEngineF.h +0 -26
  481. data/ext/ice/cpp/src/IceSSL/UWPPluginI.cpp +0 -89
  482. data/ext/ice/cpp/src/IceSSL/UWPTransceiverI.cpp +0 -383
  483. data/ext/ice/cpp/src/IceSSL/UWPTransceiverI.h +0 -71
  484. data/ext/ice/cpp/src/IceSSL/Util.cpp +0 -192
  485. data/ext/ice/cpp/src/IceUtil/ConsoleUtil.cpp +0 -157
  486. data/ext/ice/cpp/src/IceUtil/FileUtil.cpp +0 -484
  487. data/ext/ice/cpp/src/IceUtil/RecMutex.cpp +0 -242
  488. data/ext/ice/cpp/src/IceUtil/StringConverter.cpp +0 -690
  489. data/ext/ice/cpp/src/IceUtil/StringUtil.cpp +0 -1180
  490. data/ext/ice/cpp/src/IceUtil/UUID.cpp +0 -169
  491. data/ext/ice/cpp/src/IceUtil/UtilException.cpp +0 -839
  492. data/ext/ice/cpp/src/Slice/JavaUtil.cpp +0 -5154
  493. data/ext/ice/cpp/src/Slice/JavaUtil.h +0 -398
  494. data/ext/ice/mcpp/CMakeLists.txt +0 -80
  495. data/ext/ice/mcpp/LICENSE +0 -29
  496. data/ext/ice/mcpp/Makefile +0 -63
  497. data/ext/ice/mcpp/README.md +0 -32
  498. data/ext/ice/mcpp/directive.c +0 -1404
  499. data/ext/ice/mcpp/internal.H +0 -530
  500. data/ext/ice/mcpp/main.c +0 -792
  501. data/ext/ice/mcpp/mcpp.gyp +0 -88
  502. data/ext/ice/mcpp/support.c +0 -1985
  503. data/ext/ice/mcpp/system.c +0 -2741
  504. data/lib/Glacier2/Metrics.rb +0 -56
  505. data/lib/Glacier2/PermissionsVerifier.rb +0 -93
  506. data/lib/Glacier2/PermissionsVerifierF.rb +0 -30
  507. data/lib/Glacier2/Router.rb +0 -95
  508. data/lib/Glacier2/RouterF.rb +0 -25
  509. data/lib/Glacier2/SSLInfo.rb +0 -72
  510. data/lib/Glacier2/Session.rb +0 -247
  511. data/lib/Ice/BuiltinSequences.rb +0 -60
  512. data/lib/Ice/Communicator.rb +0 -87
  513. data/lib/Ice/CommunicatorF.rb +0 -24
  514. data/lib/Ice/Connection.rb +0 -413
  515. data/lib/Ice/ConnectionF.rb +0 -32
  516. data/lib/Ice/Current.rb +0 -141
  517. data/lib/Ice/Endpoint.rb +0 -187
  518. data/lib/Ice/EndpointF.rb +0 -48
  519. data/lib/Ice/EndpointTypes.rb +0 -69
  520. data/lib/Ice/FacetMap.rb +0 -24
  521. data/lib/Ice/Identity.rb +0 -63
  522. data/lib/Ice/ImplicitContext.rb +0 -26
  523. data/lib/Ice/ImplicitContextF.rb +0 -24
  524. data/lib/Ice/Instrumentation.rb +0 -169
  525. data/lib/Ice/InstrumentationF.rb +0 -31
  526. data/lib/Ice/LocalException.rb +0 -1031
  527. data/lib/Ice/Locator.rb +0 -196
  528. data/lib/Ice/LocatorF.rb +0 -30
  529. data/lib/Ice/Logger.rb +0 -24
  530. data/lib/Ice/LoggerF.rb +0 -24
  531. data/lib/Ice/Metrics.rb +0 -337
  532. data/lib/Ice/ObjectAdapter.rb +0 -29
  533. data/lib/Ice/ObjectAdapterF.rb +0 -24
  534. data/lib/Ice/ObjectFactory.rb +0 -24
  535. data/lib/Ice/Plugin.rb +0 -30
  536. data/lib/Ice/PluginF.rb +0 -28
  537. data/lib/Ice/Process.rb +0 -53
  538. data/lib/Ice/ProcessF.rb +0 -25
  539. data/lib/Ice/Properties.rb +0 -25
  540. data/lib/Ice/PropertiesAdmin.rb +0 -63
  541. data/lib/Ice/PropertiesF.rb +0 -29
  542. data/lib/Ice/RemoteLogger.rb +0 -207
  543. data/lib/Ice/Router.rb +0 -87
  544. data/lib/Ice/RouterF.rb +0 -25
  545. data/lib/Ice/ServantLocator.rb +0 -26
  546. data/lib/Ice/ServantLocatorF.rb +0 -24
  547. data/lib/Ice/SliceChecksumDict.rb +0 -24
  548. data/lib/Ice/ValueFactory.rb +0 -28
  549. data/lib/Ice/Version.rb +0 -90
  550. data/lib/IceBox/IceBox.rb +0 -164
  551. data/lib/IceGrid/Admin.rb +0 -1196
  552. data/lib/IceGrid/Descriptor.rb +0 -1034
  553. data/lib/IceGrid/Exception.rb +0 -376
  554. data/lib/IceGrid/FileParser.rb +0 -65
  555. data/lib/IceGrid/PluginFacade.rb +0 -35
  556. data/lib/IceGrid/Registry.rb +0 -209
  557. data/lib/IceGrid/Session.rb +0 -71
  558. data/lib/IceGrid/UserAccountMapper.rb +0 -61
  559. data/lib/IcePatch2/FileInfo.rb +0 -115
  560. data/lib/IcePatch2/FileServer.rb +0 -123
  561. data/lib/IceStorm/IceStorm.rb +0 -332
  562. data/lib/IceStorm/Metrics.rb +0 -73
  563. data/slice/Ice/Connection.ice +0 -516
  564. data/slice/Ice/Current.ice +0 -170
  565. data/slice/Ice/Locator.ice +0 -239
  566. data/slice/Ice/Metrics.ice +0 -436
  567. data/slice/Ice/ObjectAdapter.ice +0 -710
  568. data/slice/Ice/Properties.ice +0 -244
  569. data/slice/Ice/Router.ice +0 -103
  570. data/slice/IceBT/ConnectionInfo.ice +0 -59
  571. data/slice/IceBT/EndpointInfo.ice +0 -57
  572. data/slice/IceBT/Types.ice +0 -45
  573. data/slice/IceDiscovery/IceDiscovery.ice +0 -98
  574. data/slice/IceGrid/PluginFacade.ice +0 -329
  575. data/slice/IceIAP/ConnectionInfo.ice +0 -74
  576. data/slice/IceIAP/EndpointInfo.ice +0 -68
  577. data/slice/IceLocatorDiscovery/IceLocatorDiscovery.ice +0 -83
  578. data/slice/IceSSL/ConnectionInfo.ice +0 -54
  579. data/slice/IceSSL/ConnectionInfoF.ice +0 -31
  580. data/slice/IceSSL/EndpointInfo.ice +0 -45
  581. data/slice/IceStorm/IceStorm.ice +0 -414
  582. /data/{ext → dist/IceRuby}/Communicator.cpp +0 -0
  583. /data/{ext → dist/IceRuby}/Communicator.h +0 -0
  584. /data/{ext → dist/IceRuby}/Config.h +0 -0
  585. /data/{ext → dist/IceRuby}/Connection.h +0 -0
  586. /data/{ext → dist/IceRuby}/Endpoint.h +0 -0
  587. /data/{ext → dist/IceRuby}/ImplicitContext.h +0 -0
  588. /data/{ext → dist/IceRuby}/Init.cpp +0 -0
  589. /data/{ext → dist/IceRuby}/Logger.h +0 -0
  590. /data/{ext → dist/IceRuby}/Operation.h +0 -0
  591. /data/{ext → dist/IceRuby}/Properties.h +0 -0
  592. /data/{ext → dist/IceRuby}/Proxy.cpp +0 -0
  593. /data/{ext → dist/IceRuby}/Proxy.h +0 -0
  594. /data/{ext → dist/IceRuby}/Slice.cpp +0 -0
  595. /data/{ext → dist/IceRuby}/Slice.h +0 -0
  596. /data/{ext → dist/IceRuby}/Util.cpp +0 -0
  597. /data/{ext → dist/IceRuby}/Util.h +0 -0
  598. /data/{ext → dist/IceRuby}/ValueFactoryManager.h +0 -0
  599. /data/{ext → dist}/ice/cpp/include/Ice/Application.h +0 -0
  600. /data/{ext → dist}/ice/cpp/include/Ice/AsyncResult.h +0 -0
  601. /data/{ext → dist}/ice/cpp/include/Ice/AsyncResultF.h +0 -0
  602. /data/{ext → dist}/ice/cpp/include/Ice/BatchRequestInterceptor.h +0 -0
  603. /data/{ext → dist}/ice/cpp/include/Ice/BatchRequestQueueF.h +0 -0
  604. /data/{ext → dist}/ice/cpp/include/Ice/Buffer.h +0 -0
  605. /data/{ext → dist}/ice/cpp/include/Ice/CommunicatorAsync.h +0 -0
  606. /data/{ext → dist}/ice/cpp/include/Ice/Comparable.h +0 -0
  607. /data/{ext → dist}/ice/cpp/include/Ice/ConnectionAsync.h +0 -0
  608. /data/{ext → dist}/ice/cpp/include/Ice/ConnectionIF.h +0 -0
  609. /data/{ext → dist}/ice/cpp/include/Ice/DefaultValueFactory.h +0 -0
  610. /data/{ext → dist}/ice/cpp/include/Ice/DispatchInterceptor.h +0 -0
  611. /data/{ext → dist}/ice/cpp/include/Ice/Dispatcher.h +0 -0
  612. /data/{ext → dist}/ice/cpp/include/Ice/DynamicLibrary.h +0 -0
  613. /data/{ext → dist}/ice/cpp/include/Ice/DynamicLibraryF.h +0 -0
  614. /data/{ext → dist}/ice/cpp/include/Ice/Exception.h +0 -0
  615. /data/{ext → dist}/ice/cpp/include/Ice/FactoryTable.h +0 -0
  616. /data/{ext → dist}/ice/cpp/include/Ice/FactoryTableInit.h +0 -0
  617. /data/{ext → dist}/ice/cpp/include/Ice/Format.h +0 -0
  618. /data/{ext → dist}/ice/cpp/include/Ice/Functional.h +0 -0
  619. /data/{ext → dist}/ice/cpp/include/Ice/GCObject.h +0 -0
  620. /data/{ext → dist}/ice/cpp/include/Ice/Handle.h +0 -0
  621. /data/{ext → dist}/ice/cpp/include/Ice/IconvStringConverter.h +0 -0
  622. /data/{ext → dist}/ice/cpp/include/Ice/Incoming.h +0 -0
  623. /data/{ext → dist}/ice/cpp/include/Ice/IncomingAsync.h +0 -0
  624. /data/{ext → dist}/ice/cpp/include/Ice/IncomingAsyncF.h +0 -0
  625. /data/{ext → dist}/ice/cpp/include/Ice/InputStream.h +0 -0
  626. /data/{ext → dist}/ice/cpp/include/Ice/InstanceF.h +0 -0
  627. /data/{ext → dist}/ice/cpp/include/Ice/InterfaceByValue.h +0 -0
  628. /data/{ext → dist}/ice/cpp/include/Ice/LocalObject.h +0 -0
  629. /data/{ext → dist}/ice/cpp/include/Ice/LocalObjectF.h +0 -0
  630. /data/{ext → dist}/ice/cpp/include/Ice/LoggerUtil.h +0 -0
  631. /data/{ext → dist}/ice/cpp/include/Ice/MetricsAdminI.h +0 -0
  632. /data/{ext → dist}/ice/cpp/include/Ice/MetricsFunctional.h +0 -0
  633. /data/{ext → dist}/ice/cpp/include/Ice/NativePropertiesAdmin.h +0 -0
  634. /data/{ext → dist}/ice/cpp/include/Ice/Object.h +0 -0
  635. /data/{ext → dist}/ice/cpp/include/Ice/ObjectF.h +0 -0
  636. /data/{ext → dist}/ice/cpp/include/Ice/ObserverHelper.h +0 -0
  637. /data/{ext → dist}/ice/cpp/include/Ice/Optional.h +0 -0
  638. /data/{ext → dist}/ice/cpp/include/Ice/OutgoingAsyncF.h +0 -0
  639. /data/{ext → dist}/ice/cpp/include/Ice/OutputStream.h +0 -0
  640. /data/{ext → dist}/ice/cpp/include/Ice/Protocol.h +0 -0
  641. /data/{ext → dist}/ice/cpp/include/Ice/ProxyF.h +0 -0
  642. /data/{ext → dist}/ice/cpp/include/Ice/ProxyFactoryF.h +0 -0
  643. /data/{ext → dist}/ice/cpp/include/Ice/ProxyHandle.h +0 -0
  644. /data/{ext → dist}/ice/cpp/include/Ice/ReferenceF.h +0 -0
  645. /data/{ext → dist}/ice/cpp/include/Ice/RegisterPlugins.h +0 -0
  646. /data/{ext → dist}/ice/cpp/include/Ice/RequestHandlerF.h +0 -0
  647. /data/{ext → dist}/ice/cpp/include/Ice/ResponseHandlerF.h +0 -0
  648. /data/{ext → dist}/ice/cpp/include/Ice/ServantManagerF.h +0 -0
  649. /data/{ext → dist}/ice/cpp/include/Ice/Service.h +0 -0
  650. /data/{ext → dist}/ice/cpp/include/Ice/SliceChecksums.h +0 -0
  651. /data/{ext → dist}/ice/cpp/include/Ice/SlicedData.h +0 -0
  652. /data/{ext → dist}/ice/cpp/include/Ice/SlicedDataF.h +0 -0
  653. /data/{ext → dist}/ice/cpp/include/Ice/StreamHelpers.h +0 -0
  654. /data/{ext → dist}/ice/cpp/include/Ice/StringConverter.h +0 -0
  655. /data/{ext → dist}/ice/cpp/include/Ice/ThreadPoolF.h +0 -0
  656. /data/{ext → dist}/ice/cpp/include/Ice/UUID.h +0 -0
  657. /data/{ext → dist}/ice/cpp/include/Ice/UniquePtr.h +0 -0
  658. /data/{ext → dist}/ice/cpp/include/Ice/UniqueRef.h +0 -0
  659. /data/{ext → dist}/ice/cpp/include/Ice/Value.h +0 -0
  660. /data/{ext → dist}/ice/cpp/include/Ice/ValueF.h +0 -0
  661. /data/{ext → dist}/ice/cpp/include/IceSSL/Config.h +0 -0
  662. /data/{ext → dist}/ice/cpp/include/IceSSL/OpenSSL.h +0 -0
  663. /data/{ext → dist}/ice/cpp/include/IceSSL/Plugin.h +0 -0
  664. /data/{ext → dist}/ice/cpp/include/IceSSL/SChannel.h +0 -0
  665. /data/{ext → dist}/ice/cpp/include/IceSSL/SecureTransport.h +0 -0
  666. /data/{ext → dist}/ice/cpp/include/IceUtil/Atomic.h +0 -0
  667. /data/{ext → dist}/ice/cpp/include/IceUtil/CountDownLatch.h +0 -0
  668. /data/{ext → dist}/ice/cpp/include/IceUtil/DisableWarnings.h +0 -0
  669. /data/{ext → dist}/ice/cpp/include/IceUtil/Exception.h +0 -0
  670. /data/{ext → dist}/ice/cpp/include/IceUtil/Functional.h +0 -0
  671. /data/{ext → dist}/ice/cpp/include/IceUtil/Handle.h +0 -0
  672. /data/{ext → dist}/ice/cpp/include/IceUtil/Iterator.h +0 -0
  673. /data/{ext → dist}/ice/cpp/include/IceUtil/Lock.h +0 -0
  674. /data/{ext → dist}/ice/cpp/include/IceUtil/Monitor.h +0 -0
  675. /data/{ext → dist}/ice/cpp/include/IceUtil/MutexProtocol.h +0 -0
  676. /data/{ext → dist}/ice/cpp/include/IceUtil/MutexPtrLock.h +0 -0
  677. /data/{ext → dist}/ice/cpp/include/IceUtil/MutexPtrTryLock.h +0 -0
  678. /data/{ext → dist}/ice/cpp/include/IceUtil/Optional.h +0 -0
  679. /data/{ext → dist}/ice/cpp/include/IceUtil/Options.h +0 -0
  680. /data/{ext → dist}/ice/cpp/include/IceUtil/OutputUtil.h +0 -0
  681. /data/{ext → dist}/ice/cpp/include/IceUtil/PopDisableWarnings.h +0 -0
  682. /data/{ext → dist}/ice/cpp/include/IceUtil/PushDisableWarnings.h +0 -0
  683. /data/{ext → dist}/ice/cpp/include/IceUtil/Random.h +0 -0
  684. /data/{ext → dist}/ice/cpp/include/IceUtil/RecMutex.h +0 -0
  685. /data/{ext → dist}/ice/cpp/include/IceUtil/ScannerConfig.h +0 -0
  686. /data/{ext → dist}/ice/cpp/include/IceUtil/ScopedArray.h +0 -0
  687. /data/{ext → dist}/ice/cpp/include/IceUtil/Shared.h +0 -0
  688. /data/{ext → dist}/ice/cpp/include/IceUtil/StopWatch.h +0 -0
  689. /data/{ext → dist}/ice/cpp/include/IceUtil/StringConverter.h +0 -0
  690. /data/{ext → dist}/ice/cpp/include/IceUtil/StringUtil.h +0 -0
  691. /data/{ext → dist}/ice/cpp/include/IceUtil/ThreadException.h +0 -0
  692. /data/{ext → dist}/ice/cpp/include/IceUtil/Time.h +0 -0
  693. /data/{ext → dist}/ice/cpp/include/IceUtil/UUID.h +0 -0
  694. /data/{ext → dist}/ice/cpp/include/IceUtil/UndefSysMacros.h +0 -0
  695. /data/{ext → dist}/ice/cpp/src/Ice/ACM.cpp +0 -0
  696. /data/{ext → dist}/ice/cpp/src/Ice/ACM.h +0 -0
  697. /data/{ext → dist}/ice/cpp/src/Ice/ACMF.h +0 -0
  698. /data/{ext → dist}/ice/cpp/src/Ice/Acceptor.cpp +0 -0
  699. /data/{ext → dist}/ice/cpp/src/Ice/AcceptorF.h +0 -0
  700. /data/{ext → dist}/ice/cpp/src/Ice/ArgVector.cpp +0 -0
  701. /data/{ext → dist}/ice/cpp/src/Ice/ArgVector.h +0 -0
  702. /data/{ext → dist}/ice/cpp/src/Ice/AsyncResult.cpp +0 -0
  703. /data/{ext → dist}/ice/cpp/src/Ice/Base64.cpp +0 -0
  704. /data/{ext → dist}/ice/cpp/src/Ice/Base64.h +0 -0
  705. /data/{ext → dist}/ice/cpp/src/Ice/BatchRequestQueue.cpp +0 -0
  706. /data/{ext → dist}/ice/cpp/src/Ice/BatchRequestQueue.h +0 -0
  707. /data/{ext → dist}/ice/cpp/src/Ice/Buffer.cpp +0 -0
  708. /data/{ext → dist}/ice/cpp/src/Ice/CollocatedRequestHandler.cpp +0 -0
  709. /data/{ext → dist}/ice/cpp/src/Ice/CollocatedRequestHandler.h +0 -0
  710. /data/{ext → dist}/ice/cpp/src/Ice/CommunicatorI.cpp +0 -0
  711. /data/{ext → dist}/ice/cpp/src/Ice/CommunicatorI.h +0 -0
  712. /data/{ext → dist}/ice/cpp/src/Ice/Cond.cpp +0 -0
  713. /data/{ext → dist}/ice/cpp/src/Ice/ConnectRequestHandler.cpp +0 -0
  714. /data/{ext → dist}/ice/cpp/src/Ice/ConnectRequestHandler.h +0 -0
  715. /data/{ext → dist}/ice/cpp/src/Ice/ConnectRequestHandlerF.h +0 -0
  716. /data/{ext → dist}/ice/cpp/src/Ice/ConnectionFactoryF.h +0 -0
  717. /data/{ext → dist}/ice/cpp/src/Ice/ConnectionRequestHandler.cpp +0 -0
  718. /data/{ext → dist}/ice/cpp/src/Ice/ConnectionRequestHandler.h +0 -0
  719. /data/{ext → dist}/ice/cpp/src/Ice/Connector.cpp +0 -0
  720. /data/{ext → dist}/ice/cpp/src/Ice/Connector.h +0 -0
  721. /data/{ext → dist}/ice/cpp/src/Ice/ConnectorF.h +0 -0
  722. /data/{ext → dist}/ice/cpp/src/Ice/DefaultsAndOverrides.h +0 -0
  723. /data/{ext → dist}/ice/cpp/src/Ice/DefaultsAndOverridesF.h +0 -0
  724. /data/{ext → dist}/ice/cpp/src/Ice/DispatchInterceptor.cpp +0 -0
  725. /data/{ext → dist}/ice/cpp/src/Ice/EndpointFactory.h +0 -0
  726. /data/{ext → dist}/ice/cpp/src/Ice/EndpointFactoryF.h +0 -0
  727. /data/{ext → dist}/ice/cpp/src/Ice/EndpointFactoryManager.cpp +0 -0
  728. /data/{ext → dist}/ice/cpp/src/Ice/EndpointFactoryManager.h +0 -0
  729. /data/{ext → dist}/ice/cpp/src/Ice/EndpointFactoryManagerF.h +0 -0
  730. /data/{ext → dist}/ice/cpp/src/Ice/EndpointI.h +0 -0
  731. /data/{ext → dist}/ice/cpp/src/Ice/EndpointIF.h +0 -0
  732. /data/{ext → dist}/ice/cpp/src/Ice/EventHandlerF.h +0 -0
  733. /data/{ext → dist}/ice/cpp/src/Ice/FactoryTable.cpp +0 -0
  734. /data/{ext → dist}/ice/cpp/src/Ice/FactoryTableInit.cpp +0 -0
  735. /data/{ext → dist}/ice/cpp/src/Ice/GCObject.cpp +0 -0
  736. /data/{ext → dist}/ice/cpp/src/Ice/HashUtil.h +0 -0
  737. /data/{ext → dist}/ice/cpp/src/Ice/HttpParser.cpp +0 -0
  738. /data/{ext → dist}/ice/cpp/src/Ice/HttpParser.h +0 -0
  739. /data/{ext → dist}/ice/cpp/src/Ice/IPEndpointIF.h +0 -0
  740. /data/{ext → dist}/ice/cpp/src/Ice/IconvStringConverter.cpp +0 -0
  741. /data/{ext → dist}/ice/cpp/src/Ice/ImplicitContextI.cpp +0 -0
  742. /data/{ext → dist}/ice/cpp/src/Ice/ImplicitContextI.h +0 -0
  743. /data/{ext → dist}/ice/cpp/src/Ice/Incoming.cpp +0 -0
  744. /data/{ext → dist}/ice/cpp/src/Ice/IncomingAsync.cpp +0 -0
  745. /data/{ext → dist}/ice/cpp/src/Ice/IncomingRequest.h +0 -0
  746. /data/{ext → dist}/ice/cpp/src/Ice/Initialize.cpp +0 -0
  747. /data/{ext → dist}/ice/cpp/src/Ice/Instance.h +0 -0
  748. /data/{ext → dist}/ice/cpp/src/Ice/InstrumentationI.cpp +0 -0
  749. /data/{ext → dist}/ice/cpp/src/Ice/InstrumentationI.h +0 -0
  750. /data/{ext → dist}/ice/cpp/src/Ice/LocalObject.cpp +0 -0
  751. /data/{ext → dist}/ice/cpp/src/Ice/LocatorInfo.cpp +0 -0
  752. /data/{ext → dist}/ice/cpp/src/Ice/LocatorInfo.h +0 -0
  753. /data/{ext → dist}/ice/cpp/src/Ice/LocatorInfoF.h +0 -0
  754. /data/{ext → dist}/ice/cpp/src/Ice/LoggerAdminI.cpp +0 -0
  755. /data/{ext → dist}/ice/cpp/src/Ice/LoggerAdminI.h +0 -0
  756. /data/{ext → dist}/ice/cpp/src/Ice/LoggerI.h +0 -0
  757. /data/{ext → dist}/ice/cpp/src/Ice/LoggerUtil.cpp +0 -0
  758. /data/{ext → dist}/ice/cpp/src/Ice/MetricsObserverI.cpp +0 -0
  759. /data/{ext → dist}/ice/cpp/src/Ice/NetworkProxy.h +0 -0
  760. /data/{ext → dist}/ice/cpp/src/Ice/NetworkProxyF.h +0 -0
  761. /data/{ext → dist}/ice/cpp/src/Ice/OSLogLoggerI.cpp +0 -0
  762. /data/{ext → dist}/ice/cpp/src/Ice/OSLogLoggerI.h +0 -0
  763. /data/{ext → dist}/ice/cpp/src/Ice/Object.cpp +0 -0
  764. /data/{ext → dist}/ice/cpp/src/Ice/ObjectAdapterFactory.cpp +0 -0
  765. /data/{ext → dist}/ice/cpp/src/Ice/ObjectAdapterFactory.h +0 -0
  766. /data/{ext → dist}/ice/cpp/src/Ice/ObjectAdapterFactoryF.h +0 -0
  767. /data/{ext → dist}/ice/cpp/src/Ice/ObjectAdapterI.h +0 -0
  768. /data/{ext → dist}/ice/cpp/src/Ice/ObserverHelper.cpp +0 -0
  769. /data/{ext → dist}/ice/cpp/src/Ice/OpaqueEndpointI.cpp +0 -0
  770. /data/{ext → dist}/ice/cpp/src/Ice/OpaqueEndpointI.h +0 -0
  771. /data/{ext → dist}/ice/cpp/src/Ice/OutputStream.cpp +0 -0
  772. /data/{ext → dist}/ice/cpp/src/Ice/PluginManagerI.h +0 -0
  773. /data/{ext → dist}/ice/cpp/src/Ice/PropertiesAdminI.cpp +0 -0
  774. /data/{ext → dist}/ice/cpp/src/Ice/PropertiesAdminI.h +0 -0
  775. /data/{ext → dist}/ice/cpp/src/Ice/PropertiesI.h +0 -0
  776. /data/{ext → dist}/ice/cpp/src/Ice/Protocol.cpp +0 -0
  777. /data/{ext → dist}/ice/cpp/src/Ice/ProtocolInstance.cpp +0 -0
  778. /data/{ext → dist}/ice/cpp/src/Ice/ProtocolInstance.h +0 -0
  779. /data/{ext → dist}/ice/cpp/src/Ice/ProtocolInstanceF.h +0 -0
  780. /data/{ext → dist}/ice/cpp/src/Ice/ProtocolPluginFacade.cpp +0 -0
  781. /data/{ext → dist}/ice/cpp/src/Ice/ProtocolPluginFacade.h +0 -0
  782. /data/{ext → dist}/ice/cpp/src/Ice/ProtocolPluginFacadeF.h +0 -0
  783. /data/{ext → dist}/ice/cpp/src/Ice/ProxyFactory.cpp +0 -0
  784. /data/{ext → dist}/ice/cpp/src/Ice/ProxyFactory.h +0 -0
  785. /data/{ext → dist}/ice/cpp/src/Ice/Reference.cpp +0 -0
  786. /data/{ext → dist}/ice/cpp/src/Ice/Reference.h +0 -0
  787. /data/{ext → dist}/ice/cpp/src/Ice/ReferenceFactory.cpp +0 -0
  788. /data/{ext → dist}/ice/cpp/src/Ice/ReferenceFactory.h +0 -0
  789. /data/{ext → dist}/ice/cpp/src/Ice/ReferenceFactoryF.h +0 -0
  790. /data/{ext → dist}/ice/cpp/src/Ice/RegisterPluginsInit.cpp +0 -0
  791. /data/{ext → dist}/ice/cpp/src/Ice/RegisterPluginsInit.h +0 -0
  792. /data/{ext → dist}/ice/cpp/src/Ice/ReplyStatus.h +0 -0
  793. /data/{ext → dist}/ice/cpp/src/Ice/RequestHandler.cpp +0 -0
  794. /data/{ext → dist}/ice/cpp/src/Ice/RequestHandler.h +0 -0
  795. /data/{ext → dist}/ice/cpp/src/Ice/RequestHandlerFactory.cpp +0 -0
  796. /data/{ext → dist}/ice/cpp/src/Ice/RequestHandlerFactory.h +0 -0
  797. /data/{ext → dist}/ice/cpp/src/Ice/ResponseHandler.cpp +0 -0
  798. /data/{ext → dist}/ice/cpp/src/Ice/ResponseHandler.h +0 -0
  799. /data/{ext → dist}/ice/cpp/src/Ice/RetryQueue.cpp +0 -0
  800. /data/{ext → dist}/ice/cpp/src/Ice/RetryQueue.h +0 -0
  801. /data/{ext → dist}/ice/cpp/src/Ice/RetryQueueF.h +0 -0
  802. /data/{ext → dist}/ice/cpp/src/Ice/RouterInfo.cpp +0 -0
  803. /data/{ext → dist}/ice/cpp/src/Ice/RouterInfo.h +0 -0
  804. /data/{ext → dist}/ice/cpp/src/Ice/RouterInfoF.h +0 -0
  805. /data/{ext → dist}/ice/cpp/src/Ice/ServantManager.cpp +0 -0
  806. /data/{ext → dist}/ice/cpp/src/Ice/ServantManager.h +0 -0
  807. /data/{ext → dist}/ice/cpp/src/Ice/SharedContext.h +0 -0
  808. /data/{ext → dist}/ice/cpp/src/Ice/SliceChecksums.cpp +0 -0
  809. /data/{ext → dist}/ice/cpp/src/Ice/SlicedData.cpp +0 -0
  810. /data/{ext → dist}/ice/cpp/src/Ice/StringConverterPlugin.cpp +0 -0
  811. /data/{ext → dist}/ice/cpp/src/Ice/StringUtil.h +0 -0
  812. /data/{ext → dist}/ice/cpp/src/Ice/SysLoggerI.cpp +0 -0
  813. /data/{ext → dist}/ice/cpp/src/Ice/SysLoggerI.h +0 -0
  814. /data/{ext → dist}/ice/cpp/src/Ice/SystemdJournalI.cpp +0 -0
  815. /data/{ext → dist}/ice/cpp/src/Ice/SystemdJournalI.h +0 -0
  816. /data/{ext → dist}/ice/cpp/src/Ice/TcpConnector.cpp +0 -0
  817. /data/{ext → dist}/ice/cpp/src/Ice/TcpConnector.h +0 -0
  818. /data/{ext → dist}/ice/cpp/src/Ice/TcpEndpointI.cpp +0 -0
  819. /data/{ext → dist}/ice/cpp/src/Ice/TcpEndpointI.h +0 -0
  820. /data/{ext → dist}/ice/cpp/src/Ice/Timer.cpp +0 -0
  821. /data/{ext → dist}/ice/cpp/src/Ice/TraceLevels.cpp +0 -0
  822. /data/{ext → dist}/ice/cpp/src/Ice/TraceLevels.h +0 -0
  823. /data/{ext → dist}/ice/cpp/src/Ice/TraceLevelsF.h +0 -0
  824. /data/{ext → dist}/ice/cpp/src/Ice/TraceUtil.cpp +0 -0
  825. /data/{ext → dist}/ice/cpp/src/Ice/TraceUtil.h +0 -0
  826. /data/{ext → dist}/ice/cpp/src/Ice/Transceiver.cpp +0 -0
  827. /data/{ext → dist}/ice/cpp/src/Ice/TransceiverF.h +0 -0
  828. /data/{ext → dist}/ice/cpp/src/Ice/UdpConnector.h +0 -0
  829. /data/{ext → dist}/ice/cpp/src/Ice/UdpEndpointI.cpp +0 -0
  830. /data/{ext → dist}/ice/cpp/src/Ice/UdpEndpointI.h +0 -0
  831. /data/{ext → dist}/ice/cpp/src/Ice/Value.cpp +0 -0
  832. /data/{ext → dist}/ice/cpp/src/Ice/ValueFactoryManagerI.cpp +0 -0
  833. /data/{ext → dist}/ice/cpp/src/Ice/ValueFactoryManagerI.h +0 -0
  834. /data/{ext → dist}/ice/cpp/src/Ice/VirtualShared.h +0 -0
  835. /data/{ext → dist}/ice/cpp/src/Ice/WSConnector.cpp +0 -0
  836. /data/{ext → dist}/ice/cpp/src/Ice/WSConnector.h +0 -0
  837. /data/{ext → dist}/ice/cpp/src/Ice/WSEndpoint.cpp +0 -0
  838. /data/{ext → dist}/ice/cpp/src/Ice/WSEndpoint.h +0 -0
  839. /data/{ext → dist}/ice/cpp/src/IceDiscovery/LocatorI.cpp +0 -0
  840. /data/{ext → dist}/ice/cpp/src/IceDiscovery/LocatorI.h +0 -0
  841. /data/{ext → dist}/ice/cpp/src/IceDiscovery/LookupI.cpp +0 -0
  842. /data/{ext → dist}/ice/cpp/src/IceDiscovery/LookupI.h +0 -0
  843. /data/{ext → dist}/ice/cpp/src/IceDiscovery/PluginI.cpp +0 -0
  844. /data/{ext → dist}/ice/cpp/src/IceDiscovery/PluginI.h +0 -0
  845. /data/{ext → dist}/ice/cpp/src/IceLocatorDiscovery/Plugin.h +0 -0
  846. /data/{ext → dist}/ice/cpp/src/IceLocatorDiscovery/PluginI.cpp +0 -0
  847. /data/{ext → dist}/ice/cpp/src/IceSSL/CertificateI.cpp +0 -0
  848. /data/{ext → dist}/ice/cpp/src/IceSSL/CertificateI.h +0 -0
  849. /data/{ext → dist}/ice/cpp/src/IceSSL/ConnectorI.cpp +0 -0
  850. /data/{ext → dist}/ice/cpp/src/IceSSL/ConnectorI.h +0 -0
  851. /data/{ext → dist}/ice/cpp/src/IceSSL/EndpointI.cpp +0 -0
  852. /data/{ext → dist}/ice/cpp/src/IceSSL/EndpointI.h +0 -0
  853. /data/{ext → dist}/ice/cpp/src/IceSSL/Instance.cpp +0 -0
  854. /data/{ext → dist}/ice/cpp/src/IceSSL/Instance.h +0 -0
  855. /data/{ext → dist}/ice/cpp/src/IceSSL/InstanceF.h +0 -0
  856. /data/{ext → dist}/ice/cpp/src/IceSSL/OpenSSLCertificateI.cpp +0 -0
  857. /data/{ext → dist}/ice/cpp/src/IceSSL/OpenSSLEngine.cpp +0 -0
  858. /data/{ext → dist}/ice/cpp/src/IceSSL/OpenSSLEngine.h +0 -0
  859. /data/{ext → dist}/ice/cpp/src/IceSSL/OpenSSLEngineF.h +0 -0
  860. /data/{ext → dist}/ice/cpp/src/IceSSL/OpenSSLPluginI.cpp +0 -0
  861. /data/{ext → dist}/ice/cpp/src/IceSSL/OpenSSLTransceiverI.h +0 -0
  862. /data/{ext → dist}/ice/cpp/src/IceSSL/OpenSSLUtil.cpp +0 -0
  863. /data/{ext → dist}/ice/cpp/src/IceSSL/OpenSSLUtil.h +0 -0
  864. /data/{ext → dist}/ice/cpp/src/IceSSL/PluginI.h +0 -0
  865. /data/{ext → dist}/ice/cpp/src/IceSSL/RFC2253.cpp +0 -0
  866. /data/{ext → dist}/ice/cpp/src/IceSSL/RFC2253.h +0 -0
  867. /data/{ext → dist}/ice/cpp/src/IceSSL/SChannelCertificateI.cpp +0 -0
  868. /data/{ext → dist}/ice/cpp/src/IceSSL/SChannelEngine.cpp +0 -0
  869. /data/{ext → dist}/ice/cpp/src/IceSSL/SChannelEngine.h +0 -0
  870. /data/{ext → dist}/ice/cpp/src/IceSSL/SChannelEngineF.h +0 -0
  871. /data/{ext → dist}/ice/cpp/src/IceSSL/SChannelPluginI.cpp +0 -0
  872. /data/{ext → dist}/ice/cpp/src/IceSSL/SChannelTransceiverI.cpp +0 -0
  873. /data/{ext → dist}/ice/cpp/src/IceSSL/SChannelTransceiverI.h +0 -0
  874. /data/{ext → dist}/ice/cpp/src/IceSSL/SSLEngine.cpp +0 -0
  875. /data/{ext → dist}/ice/cpp/src/IceSSL/SSLEngine.h +0 -0
  876. /data/{ext → dist}/ice/cpp/src/IceSSL/SSLEngineF.h +0 -0
  877. /data/{ext → dist}/ice/cpp/src/IceSSL/SecureTransportCertificateI.cpp +0 -0
  878. /data/{ext → dist}/ice/cpp/src/IceSSL/SecureTransportEngine.cpp +0 -0
  879. /data/{ext → dist}/ice/cpp/src/IceSSL/SecureTransportEngine.h +0 -0
  880. /data/{ext → dist}/ice/cpp/src/IceSSL/SecureTransportEngineF.h +0 -0
  881. /data/{ext → dist}/ice/cpp/src/IceSSL/SecureTransportPluginI.cpp +0 -0
  882. /data/{ext → dist}/ice/cpp/src/IceSSL/SecureTransportTransceiverI.h +0 -0
  883. /data/{ext → dist}/ice/cpp/src/IceSSL/SecureTransportUtil.h +0 -0
  884. /data/{ext → dist}/ice/cpp/src/IceSSL/TrustManager.cpp +0 -0
  885. /data/{ext → dist}/ice/cpp/src/IceSSL/TrustManager.h +0 -0
  886. /data/{ext → dist}/ice/cpp/src/IceSSL/TrustManagerF.h +0 -0
  887. /data/{ext → dist}/ice/cpp/src/IceSSL/Util.h +0 -0
  888. /data/{ext → dist}/ice/cpp/src/IceUtil/ConvertUTF.cpp +0 -0
  889. /data/{ext → dist}/ice/cpp/src/IceUtil/ConvertUTF.h +0 -0
  890. /data/{ext → dist}/ice/cpp/src/IceUtil/CtrlCHandler.cpp +0 -0
  891. /data/{ext → dist}/ice/cpp/src/IceUtil/InputUtil.cpp +0 -0
  892. /data/{ext → dist}/ice/cpp/src/IceUtil/MutexProtocol.cpp +0 -0
  893. /data/{ext → dist}/ice/cpp/src/IceUtil/Options.cpp +0 -0
  894. /data/{ext → dist}/ice/cpp/src/IceUtil/OutputUtil.cpp +0 -0
  895. /data/{ext → dist}/ice/cpp/src/IceUtil/Random.cpp +0 -0
  896. /data/{ext → dist}/ice/cpp/src/IceUtil/Shared.cpp +0 -0
  897. /data/{ext → dist}/ice/cpp/src/IceUtil/ThreadException.cpp +0 -0
  898. /data/{ext → dist}/ice/cpp/src/IceUtil/Time.cpp +0 -0
  899. /data/{ext → dist}/ice/cpp/src/IceUtil/Unicode.cpp +0 -0
  900. /data/{ext → dist}/ice/cpp/src/IceUtil/Unicode.h +0 -0
  901. /data/{ext → dist}/ice/cpp/src/Slice/CPlusPlusUtil.cpp +0 -0
  902. /data/{ext → dist}/ice/cpp/src/Slice/CPlusPlusUtil.h +0 -0
  903. /data/{ext → dist}/ice/cpp/src/Slice/Checksum.cpp +0 -0
  904. /data/{ext → dist}/ice/cpp/src/Slice/Checksum.h +0 -0
  905. /data/{ext → dist}/ice/cpp/src/Slice/FileTracker.cpp +0 -0
  906. /data/{ext → dist}/ice/cpp/src/Slice/FileTracker.h +0 -0
  907. /data/{ext → dist}/ice/cpp/src/Slice/Grammar.cpp +0 -0
  908. /data/{ext → dist}/ice/cpp/src/Slice/Grammar.h +0 -0
  909. /data/{ext → dist}/ice/cpp/src/Slice/GrammarUtil.h +0 -0
  910. /data/{ext → dist}/ice/cpp/src/Slice/MD5.cpp +0 -0
  911. /data/{ext → dist}/ice/cpp/src/Slice/MD5.h +0 -0
  912. /data/{ext → dist}/ice/cpp/src/Slice/MD5I.cpp +0 -0
  913. /data/{ext → dist}/ice/cpp/src/Slice/MD5I.h +0 -0
  914. /data/{ext → dist}/ice/cpp/src/Slice/PHPUtil.cpp +0 -0
  915. /data/{ext → dist}/ice/cpp/src/Slice/PHPUtil.h +0 -0
  916. /data/{ext → dist}/ice/cpp/src/Slice/Parser.cpp +0 -0
  917. /data/{ext → dist}/ice/cpp/src/Slice/Parser.h +0 -0
  918. /data/{ext → dist}/ice/cpp/src/Slice/Preprocessor.cpp +0 -0
  919. /data/{ext → dist}/ice/cpp/src/Slice/Preprocessor.h +0 -0
  920. /data/{ext → dist}/ice/cpp/src/Slice/Python.cpp +0 -0
  921. /data/{ext → dist}/ice/cpp/src/Slice/PythonUtil.cpp +0 -0
  922. /data/{ext → dist}/ice/cpp/src/Slice/PythonUtil.h +0 -0
  923. /data/{ext → dist}/ice/cpp/src/Slice/Ruby.cpp +0 -0
  924. /data/{ext → dist}/ice/cpp/src/Slice/RubyUtil.cpp +0 -0
  925. /data/{ext → dist}/ice/cpp/src/Slice/RubyUtil.h +0 -0
  926. /data/{ext → dist}/ice/cpp/src/Slice/Scanner.cpp +0 -0
  927. /data/{ext → dist}/ice/cpp/src/Slice/SliceUtil.cpp +0 -0
  928. /data/{ext → dist}/ice/cpp/src/Slice/StringLiteralUtil.cpp +0 -0
  929. /data/{ext → dist}/ice/cpp/src/Slice/Util.h +0 -0
  930. /data/{ext → dist}/ice/mcpp/config.h +0 -0
  931. /data/{ext → dist}/ice/mcpp/configed.H +0 -0
  932. /data/{ext → dist}/ice/mcpp/eval.c +0 -0
  933. /data/{ext → dist}/ice/mcpp/expand.c +0 -0
  934. /data/{ext → dist}/ice/mcpp/mbchar.c +0 -0
  935. /data/{ext → dist}/ice/mcpp/mcpp_lib.h +0 -0
  936. /data/{ext → dist}/ice/mcpp/mcpp_out.h +0 -0
  937. /data/{ext → dist}/ice/mcpp/system.H +0 -0
  938. /data/{slice → dist/ice/slice}/Glacier2/Metrics.ice +0 -0
  939. /data/{slice → dist/ice/slice}/Glacier2/PermissionsVerifier.ice +0 -0
  940. /data/{slice → dist/ice/slice}/Glacier2/PermissionsVerifierF.ice +0 -0
  941. /data/{slice → dist/ice/slice}/Glacier2/Router.ice +0 -0
  942. /data/{slice → dist/ice/slice}/Glacier2/RouterF.ice +0 -0
  943. /data/{slice → dist/ice/slice}/Glacier2/SSLInfo.ice +0 -0
  944. /data/{slice → dist/ice/slice}/Glacier2/Session.ice +0 -0
  945. /data/{slice → dist/ice/slice}/Ice/BuiltinSequences.ice +0 -0
  946. /data/{slice → dist/ice/slice}/Ice/Communicator.ice +0 -0
  947. /data/{slice → dist/ice/slice}/Ice/CommunicatorF.ice +0 -0
  948. /data/{slice → dist/ice/slice}/Ice/ConnectionF.ice +0 -0
  949. /data/{slice → dist/ice/slice}/Ice/Endpoint.ice +0 -0
  950. /data/{slice → dist/ice/slice}/Ice/EndpointF.ice +0 -0
  951. /data/{slice → dist/ice/slice}/Ice/EndpointTypes.ice +0 -0
  952. /data/{slice → dist/ice/slice}/Ice/FacetMap.ice +0 -0
  953. /data/{slice → dist/ice/slice}/Ice/Identity.ice +0 -0
  954. /data/{slice → dist/ice/slice}/Ice/ImplicitContext.ice +0 -0
  955. /data/{slice → dist/ice/slice}/Ice/ImplicitContextF.ice +0 -0
  956. /data/{slice → dist/ice/slice}/Ice/Instrumentation.ice +0 -0
  957. /data/{slice → dist/ice/slice}/Ice/InstrumentationF.ice +0 -0
  958. /data/{slice → dist/ice/slice}/Ice/LocalException.ice +0 -0
  959. /data/{slice → dist/ice/slice}/Ice/LocatorF.ice +0 -0
  960. /data/{slice → dist/ice/slice}/Ice/Logger.ice +0 -0
  961. /data/{slice → dist/ice/slice}/Ice/LoggerF.ice +0 -0
  962. /data/{slice → dist/ice/slice}/Ice/ObjectAdapterF.ice +0 -0
  963. /data/{slice → dist/ice/slice}/Ice/ObjectFactory.ice +0 -0
  964. /data/{slice → dist/ice/slice}/Ice/Plugin.ice +0 -0
  965. /data/{slice → dist/ice/slice}/Ice/PluginF.ice +0 -0
  966. /data/{slice → dist/ice/slice}/Ice/Process.ice +0 -0
  967. /data/{slice → dist/ice/slice}/Ice/ProcessF.ice +0 -0
  968. /data/{slice → dist/ice/slice}/Ice/PropertiesAdmin.ice +0 -0
  969. /data/{slice → dist/ice/slice}/Ice/PropertiesF.ice +0 -0
  970. /data/{slice → dist/ice/slice}/Ice/RemoteLogger.ice +0 -0
  971. /data/{slice → dist/ice/slice}/Ice/RouterF.ice +0 -0
  972. /data/{slice → dist/ice/slice}/Ice/ServantLocator.ice +0 -0
  973. /data/{slice → dist/ice/slice}/Ice/ServantLocatorF.ice +0 -0
  974. /data/{slice → dist/ice/slice}/Ice/SliceChecksumDict.ice +0 -0
  975. /data/{slice → dist/ice/slice}/Ice/ValueFactory.ice +0 -0
  976. /data/{slice → dist/ice/slice}/Ice/Version.ice +0 -0
  977. /data/{slice → dist/ice/slice}/IceBox/IceBox.ice +0 -0
  978. /data/{slice → dist/ice/slice}/IceGrid/Admin.ice +0 -0
  979. /data/{slice → dist/ice/slice}/IceGrid/Descriptor.ice +0 -0
  980. /data/{slice → dist/ice/slice}/IceGrid/Exception.ice +0 -0
  981. /data/{slice → dist/ice/slice}/IceGrid/FileParser.ice +0 -0
  982. /data/{slice → dist/ice/slice}/IceGrid/Registry.ice +0 -0
  983. /data/{slice → dist/ice/slice}/IceGrid/Session.ice +0 -0
  984. /data/{slice → dist/ice/slice}/IceGrid/UserAccountMapper.ice +0 -0
  985. /data/{slice → dist/ice/slice}/IcePatch2/FileInfo.ice +0 -0
  986. /data/{slice → dist/ice/slice}/IcePatch2/FileServer.ice +0 -0
  987. /data/{slice → dist/ice/slice}/IceStorm/Metrics.ice +0 -0
  988. /data/{lib → dist/lib}/Glacier2.rb +0 -0
  989. /data/{lib → dist/lib}/Ice.rb +0 -0
  990. /data/{lib → dist/lib}/IceBox.rb +0 -0
  991. /data/{lib → dist/lib}/IceGrid.rb +0 -0
  992. /data/{lib → dist/lib}/IcePatch2.rb +0 -0
  993. /data/{lib → dist/lib}/IceStorm.rb +0 -0
  994. /data/{bin → scripts}/slice2rb +0 -0
@@ -0,0 +1,1883 @@
1
+ //
2
+ // Copyright (c) ZeroC, Inc. All rights reserved.
3
+ //
4
+
5
+ #include <IceUtil/CtrlCHandler.h>
6
+ #include <IceUtil/StringUtil.h>
7
+ #include <IceUtil/Thread.h>
8
+ #include <IceUtil/Monitor.h>
9
+ #include <IceUtil/Mutex.h>
10
+ #include <Ice/ArgVector.h>
11
+ #include <IceUtil/FileUtil.h>
12
+ #include <Ice/ConsoleUtil.h>
13
+ #include <Ice/StringConverter.h>
14
+ #include <Ice/Service.h>
15
+ #include <Ice/LoggerI.h>
16
+ #include <Ice/Initialize.h>
17
+ #include <Ice/Communicator.h>
18
+ #include <Ice/LocalException.h>
19
+ #include <Ice/Properties.h>
20
+ #include <Ice/Instance.h>
21
+ #include <Ice/LoggerUtil.h>
22
+
23
+ #ifdef _WIN32
24
+ # include <winsock2.h>
25
+ # include <Ice/EventLoggerMsg.h>
26
+ #else
27
+ # include <Ice/Logger.h>
28
+ # include <Ice/Network.h>
29
+ # include <sys/types.h>
30
+ # include <sys/stat.h>
31
+ # include <csignal>
32
+ # ifdef ICE_USE_SYSTEMD
33
+ # include <systemd/sd-daemon.h>
34
+ # endif
35
+ #endif
36
+
37
+ using namespace std;
38
+ using namespace Ice;
39
+ using namespace IceInternal;
40
+
41
+ Ice::Service* Ice::Service::_instance = 0;
42
+ static IceUtil::CtrlCHandler* _ctrlCHandler = 0;
43
+
44
+ //
45
+ // Callback for IceUtil::CtrlCHandler.
46
+ //
47
+ static void
48
+ ctrlCHandlerCallback(int sig)
49
+ {
50
+ Ice::Service* service = Ice::Service::instance();
51
+ assert(service != 0);
52
+ service->handleInterrupt(sig);
53
+ }
54
+
55
+ #ifdef _WIN32
56
+
57
+ //
58
+ // Main function for Win32 service.
59
+ //
60
+ void WINAPI
61
+ Ice_Service_ServiceMain(DWORD argc, LPWSTR* argv)
62
+ {
63
+ Ice::Service* service = Ice::Service::instance();
64
+ assert(service != 0);
65
+ service->serviceMain(argc, argv);
66
+ }
67
+
68
+ //
69
+ // Win32 service control handler.
70
+ //
71
+ void WINAPI
72
+ Ice_Service_CtrlHandler(DWORD ctrl)
73
+ {
74
+ Ice::Service* service = Ice::Service::instance();
75
+ assert(service != 0);
76
+ service->control(ctrl);
77
+ }
78
+
79
+ namespace
80
+ {
81
+
82
+ class ServiceStatusManager : public IceUtil::Monitor<IceUtil::Mutex>
83
+ {
84
+ public:
85
+
86
+ ServiceStatusManager(SERVICE_STATUS_HANDLE);
87
+
88
+ //
89
+ // Start a thread to provide regular status updates to the SCM.
90
+ //
91
+ void startUpdate(DWORD);
92
+
93
+ //
94
+ // Stop the update thread.
95
+ //
96
+ void stopUpdate();
97
+
98
+ //
99
+ // Change the service status and report it (once).
100
+ //
101
+ void changeStatus(DWORD, DWORD);
102
+
103
+ //
104
+ // Report the current status.
105
+ //
106
+ void reportStatus();
107
+
108
+ private:
109
+
110
+ void run();
111
+
112
+ class StatusThread : public IceUtil::Thread
113
+ {
114
+ public:
115
+
116
+ StatusThread(ServiceStatusManager* manager) :
117
+ IceUtil::Thread("Ice service status manager thread"),
118
+ _manager(manager)
119
+ {
120
+ }
121
+
122
+ virtual void run()
123
+ {
124
+ _manager->run();
125
+ }
126
+
127
+ private:
128
+
129
+ ServiceStatusManager* _manager;
130
+ };
131
+ friend class StatusThread;
132
+
133
+ SERVICE_STATUS_HANDLE _handle;
134
+ SERVICE_STATUS _status;
135
+ IceUtil::ThreadPtr _thread;
136
+ bool _stopped;
137
+ };
138
+
139
+ static ServiceStatusManager* serviceStatusManager;
140
+
141
+ //
142
+ // Interface implemented by SMEventLoggerI and called from
143
+ // SMEventLoggerIWrapper.
144
+ //
145
+ class SMEventLogger : public IceUtil::Shared
146
+ {
147
+ public:
148
+ virtual void print(const string&, const string&) = 0;
149
+ virtual void trace(const string&, const string&, const string&) = 0;
150
+ virtual void warning(const string&, const string&) = 0;
151
+ virtual void error(const string&, const string&) = 0;
152
+ };
153
+ typedef IceUtil::Handle<SMEventLogger> SMEventLoggerPtr;
154
+
155
+ class SMEventLoggerIWrapper : public Ice::Logger
156
+ {
157
+ public:
158
+
159
+ SMEventLoggerIWrapper(const SMEventLoggerPtr& logger, const string& prefix) :
160
+ _logger(logger),
161
+ _prefix(prefix)
162
+ {
163
+ assert(_logger);
164
+ }
165
+
166
+ virtual void
167
+ print(const string& message)
168
+ {
169
+ _logger->print(_prefix, message);
170
+ }
171
+
172
+ void
173
+ trace(const string& category, const string& message)
174
+ {
175
+ _logger->trace(_prefix, category, message);
176
+ }
177
+
178
+ virtual void
179
+ warning(const string& message)
180
+ {
181
+ _logger->warning(_prefix, message);
182
+ }
183
+
184
+ virtual void
185
+ error(const string& message)
186
+ {
187
+ _logger->error(_prefix, message);
188
+ }
189
+
190
+ virtual string
191
+ getPrefix()
192
+ {
193
+ return _prefix;
194
+ }
195
+
196
+ virtual Ice::LoggerPtr
197
+ cloneWithPrefix(const string& prefix)
198
+ {
199
+ return ICE_MAKE_SHARED(SMEventLoggerIWrapper, _logger, prefix);
200
+ }
201
+
202
+ private:
203
+
204
+ SMEventLoggerPtr _logger;
205
+ const string _prefix;
206
+ };
207
+
208
+ class SMEventLoggerI : public SMEventLogger
209
+ {
210
+ public:
211
+
212
+ SMEventLoggerI(const string& source, const StringConverterPtr& stringConverter) :
213
+ _stringConverter(stringConverter)
214
+ {
215
+ //
216
+ // Don't need to use a wide string converter as the wide string is passed
217
+ // to Windows API.
218
+ //
219
+ _source = RegisterEventSourceW(0, stringToWstring(mangleSource(source), _stringConverter).c_str());
220
+ if(_source == 0)
221
+ {
222
+ throw SyscallException(__FILE__, __LINE__, GetLastError());
223
+ }
224
+ }
225
+
226
+ ~SMEventLoggerI()
227
+ {
228
+ assert(_source != 0);
229
+ DeregisterEventSource(_source);
230
+ }
231
+
232
+ static void
233
+ addKeys(const string& source, const StringConverterPtr& stringConverter)
234
+ {
235
+ HKEY hKey;
236
+ DWORD d;
237
+ //
238
+ // Don't need to use a wide string converter as the wide string is passed
239
+ // to Windows API.
240
+ //
241
+ LONG err = RegCreateKeyExW(HKEY_LOCAL_MACHINE,
242
+ stringToWstring(createKey(source), stringConverter).c_str(),
243
+ 0, const_cast<wchar_t*>(L"REG_SZ"), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0, &hKey, &d);
244
+
245
+ if(err != ERROR_SUCCESS)
246
+ {
247
+ throw SyscallException(__FILE__, __LINE__, err);
248
+ }
249
+
250
+ //
251
+ // Get the filename of this DLL.
252
+ //
253
+ wchar_t path[_MAX_PATH];
254
+ assert(_module != 0);
255
+ if(!GetModuleFileNameW(_module, path, _MAX_PATH))
256
+ {
257
+ RegCloseKey(hKey);
258
+ throw SyscallException(__FILE__, __LINE__, GetLastError());
259
+ }
260
+
261
+ //
262
+ // The event resources are bundled into this DLL, therefore
263
+ // the "EventMessageFile" key should contain the path to this
264
+ // DLL.
265
+ //
266
+ err = RegSetValueExW(hKey, L"EventMessageFile", 0, REG_EXPAND_SZ, reinterpret_cast<unsigned char*>(path),
267
+ static_cast<DWORD>((wcslen(path) * sizeof(wchar_t)) + 1));
268
+
269
+ if(err == ERROR_SUCCESS)
270
+ {
271
+ //
272
+ // The "TypesSupported" key indicates the supported event
273
+ // types.
274
+ //
275
+ DWORD typesSupported = EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE | EVENTLOG_INFORMATION_TYPE;
276
+ err = RegSetValueExW(hKey, L"TypesSupported", 0, REG_DWORD,
277
+ reinterpret_cast<unsigned char*>(&typesSupported), sizeof(typesSupported));
278
+ }
279
+ if(err != ERROR_SUCCESS)
280
+ {
281
+ RegCloseKey(hKey);
282
+ throw SyscallException(__FILE__, __LINE__, err);
283
+ }
284
+
285
+ RegCloseKey(hKey);
286
+ }
287
+
288
+ static void
289
+ removeKeys(const string& source, const StringConverterPtr& stringConverter)
290
+ {
291
+ //
292
+ // Don't need to use a wide string converter as the wide string is passed
293
+ // to Windows API.
294
+ //
295
+ LONG err = RegDeleteKeyW(HKEY_LOCAL_MACHINE,
296
+ stringToWstring(createKey(source), stringConverter).c_str());
297
+ if(err != ERROR_SUCCESS)
298
+ {
299
+ throw SyscallException(__FILE__, __LINE__, err);
300
+ }
301
+ }
302
+
303
+ virtual void
304
+ print(const string& prefix, const string& message)
305
+ {
306
+ string s;
307
+ if(!prefix.empty())
308
+ {
309
+ s = prefix;
310
+ s.append(": ");
311
+ }
312
+ s.append(message);
313
+ print(s);
314
+ }
315
+
316
+ void
317
+ print(const string& message)
318
+ {
319
+ //
320
+ // Don't need to use a wide string converter as the wide string is passed
321
+ // to Windows API.
322
+ //
323
+ const wstring msg = stringToWstring(message, _stringConverter);
324
+ const wchar_t* messages[1];
325
+ messages[0] = msg.c_str();
326
+ //
327
+ // We ignore any failures from ReportEvent since there isn't
328
+ // anything we can do about it.
329
+ //
330
+ ReportEventW(_source, EVENTLOG_INFORMATION_TYPE, 0, EVENT_LOGGER_MSG, 0, 1, 0, messages, 0);
331
+ }
332
+
333
+ virtual void
334
+ trace(const string& prefix, const string& category, const string& message)
335
+ {
336
+ string s;
337
+ if(!category.empty())
338
+ {
339
+ s = category;
340
+ s.append(": ");
341
+ }
342
+ s.append(message);
343
+ trace(prefix, s);
344
+ }
345
+
346
+ void
347
+ trace(const string& category, const string& message)
348
+ {
349
+ string s;
350
+ if(!category.empty())
351
+ {
352
+ s = category;
353
+ s.append(": ");
354
+ }
355
+ s.append(message);
356
+
357
+ //
358
+ // Don't need to use a wide string converter as the wide string is passed
359
+ // to Windows API.
360
+ //
361
+ wstring msg = stringToWstring(s, _stringConverter);
362
+ const wchar_t* messages[1];
363
+ messages[0] = msg.c_str();
364
+ //
365
+ // We ignore any failures from ReportEvent since there isn't
366
+ // anything we can do about it.
367
+ //
368
+ ReportEventW(_source, EVENTLOG_INFORMATION_TYPE, 0, EVENT_LOGGER_MSG, 0, 1, 0, messages, 0);
369
+ }
370
+
371
+ virtual void
372
+ warning(const string& prefix, const string& message)
373
+ {
374
+ string s;
375
+ if(!prefix.empty())
376
+ {
377
+ s = prefix;
378
+ s.append(": ");
379
+ }
380
+ s.append(message);
381
+ warning(s);
382
+ }
383
+
384
+ void
385
+ warning(const string& message)
386
+ {
387
+ //
388
+ // Don't need to use a wide string converter as the wide string is passed
389
+ // to Windows API.
390
+ //
391
+ wstring msg = stringToWstring(message, _stringConverter);
392
+ const wchar_t* messages[1];
393
+ messages[0] = msg.c_str();
394
+ //
395
+ // We ignore any failures from ReportEvent since there isn't
396
+ // anything we can do about it.
397
+ //
398
+ ReportEventW(_source, EVENTLOG_WARNING_TYPE, 0, EVENT_LOGGER_MSG, 0, 1, 0, messages, 0);
399
+ }
400
+
401
+ virtual void
402
+ error(const string& prefix, const string& message)
403
+ {
404
+ string s;
405
+ if(!prefix.empty())
406
+ {
407
+ s = prefix;
408
+ s.append(": ");
409
+ }
410
+ s.append(message);
411
+ error(s);
412
+ }
413
+
414
+ void
415
+ error(const string& message)
416
+ {
417
+ //
418
+ // Don't need to use a wide string converter as the wide string is passed
419
+ // to Windows API.
420
+ //
421
+ wstring msg = stringToWstring(message, _stringConverter);
422
+ const wchar_t* messages[1];
423
+ messages[0] = msg.c_str();
424
+ //
425
+ // We ignore any failures from ReportEvent since there isn't
426
+ // anything we can do about it.
427
+ //
428
+ ReportEventW(_source, EVENTLOG_ERROR_TYPE, 0, EVENT_LOGGER_MSG, 0, 1, 0, messages, 0);
429
+ }
430
+
431
+ static void
432
+ setModuleHandle(HMODULE module)
433
+ {
434
+ _module = module;
435
+ }
436
+
437
+ private:
438
+
439
+ static string
440
+ mangleSource(string name)
441
+ {
442
+ //
443
+ // The source name cannot contain backslashes.
444
+ //
445
+ string::size_type pos = 0;
446
+ while((pos = name.find('\\', pos)) != string::npos)
447
+ {
448
+ name[pos] = '/';
449
+ }
450
+ return name;
451
+ }
452
+
453
+ static string
454
+ createKey(string name)
455
+ {
456
+ //
457
+ // The registry key is:
458
+ //
459
+ // HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application.
460
+ //
461
+ return "SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\" + mangleSource(name);
462
+ }
463
+
464
+ StringConverterPtr _stringConverter;
465
+ HANDLE _source;
466
+ static HMODULE _module;
467
+ };
468
+
469
+ HMODULE SMEventLoggerI::_module = 0;
470
+
471
+ }
472
+
473
+ #endif
474
+
475
+ Ice::Service::Service()
476
+ {
477
+ assert(_instance == 0);
478
+ _nohup = true;
479
+ _service = false;
480
+ _instance = this;
481
+ #ifndef _WIN32
482
+ _changeDirectory = true;
483
+ _closeFiles = true;
484
+ #endif
485
+ }
486
+
487
+ Ice::Service::~Service()
488
+ {
489
+ _instance = 0;
490
+ delete _ctrlCHandler;
491
+ }
492
+
493
+ bool
494
+ Ice::Service::shutdown()
495
+ {
496
+ if(_communicator)
497
+ {
498
+ try
499
+ {
500
+ _communicator->shutdown();
501
+ }
502
+ catch(const CommunicatorDestroyedException&)
503
+ {
504
+ //
505
+ // Expected if the service communicator is being destroyed.
506
+ //
507
+ }
508
+ catch(const Ice::Exception& ex)
509
+ {
510
+ ServiceWarning warn(this);
511
+ warn << "exception during shutdown:\n" << ex;
512
+ }
513
+ catch(const std::exception& ex)
514
+ {
515
+ ServiceWarning warn(this);
516
+ warn << "exception during shutdown:\n" << ex;
517
+ }
518
+ catch(...)
519
+ {
520
+ warning("unknown exception during shutdown");
521
+ }
522
+ }
523
+ return true;
524
+ }
525
+
526
+ void
527
+ Ice::Service::interrupt()
528
+ {
529
+ shutdown();
530
+ }
531
+
532
+ int
533
+ Ice::Service::main(int argc, const char* const argv[], const InitializationData& initializationData, int version)
534
+ {
535
+ _name = "";
536
+ if(argc > 0)
537
+ {
538
+ _name = argv[0];
539
+ }
540
+
541
+ IceInternal::ArgVector av(argc, argv); // copy args
542
+
543
+ //
544
+ // We parse the properties here to extract Ice.ProgramName and
545
+ // Ice.EventLog.Source on Windows.
546
+ //
547
+ InitializationData initData = initializationData;
548
+ try
549
+ {
550
+ initData.properties = createProperties(av.argc, av.argv, initData.properties);
551
+ }
552
+ catch(const Ice::Exception& ex)
553
+ {
554
+ ServiceError err(this);
555
+ err << "createProperties failed: " << ex;
556
+ return EXIT_FAILURE;
557
+ }
558
+
559
+ #ifdef _WIN32
560
+
561
+ //
562
+ // First check for the --service option.
563
+ //
564
+ string name;
565
+ int idx = 1;
566
+ const StringConverterPtr stringConverter = getProcessStringConverter();
567
+ while(idx < av.argc)
568
+ {
569
+ if(strcmp(av.argv[idx], "--service") == 0)
570
+ {
571
+ if(idx + 1 >= av.argc)
572
+ {
573
+ error("service name argument expected for `" + string(av.argv[idx]) + "'");
574
+ return EXIT_FAILURE;
575
+ }
576
+
577
+ name = av.argv[idx + 1];
578
+
579
+ //
580
+ // If the process logger is the default logger then we use
581
+ // our own logger.
582
+ //
583
+ _logger = getProcessLogger();
584
+ if(ICE_DYNAMIC_CAST(LoggerI, _logger))
585
+ {
586
+ string eventLogSource = initData.properties->getPropertyWithDefault("Ice.EventLog.Source", name);
587
+ _logger = ICE_MAKE_SHARED(SMEventLoggerIWrapper, new SMEventLoggerI(eventLogSource, stringConverter), "");
588
+ setProcessLogger(_logger);
589
+ }
590
+
591
+ for(int i = idx; i + 2 < av.argc; ++i)
592
+ {
593
+ av.argv[i] = av.argv[i + 2];
594
+ }
595
+ av.argc -= 2;
596
+ }
597
+ else
598
+ {
599
+ ++idx;
600
+ }
601
+ }
602
+
603
+ if(!name.empty())
604
+ {
605
+ configureService(name);
606
+ }
607
+ #else
608
+ //
609
+ // Check for --daemon, --noclose, --nochdir and --pidfile.
610
+ //
611
+
612
+ bool daemonize = false;
613
+ bool closeFiles = true;
614
+ bool changeDirectory = true;
615
+ string pidFile;
616
+ int idx = 1;
617
+ while(idx < av.argc)
618
+ {
619
+ if(strcmp(av.argv[idx], "--daemon") == 0)
620
+ {
621
+ for(int i = idx; i + 1 < av.argc; ++i)
622
+ {
623
+ av.argv[i] = av.argv[i + 1];
624
+ }
625
+ av.argc -= 1;
626
+
627
+ daemonize = true;
628
+ }
629
+ else if(strcmp(av.argv[idx], "--noclose") == 0)
630
+ {
631
+ for(int i = idx; i + 1 < av.argc; ++i)
632
+ {
633
+ av.argv[i] = av.argv[i + 1];
634
+ }
635
+ av.argc -= 1;
636
+
637
+ closeFiles = false;
638
+ }
639
+ else if(strcmp(av.argv[idx], "--nochdir") == 0)
640
+ {
641
+ for(int i = idx; i + 1 < av.argc; ++i)
642
+ {
643
+ av.argv[i] = av.argv[i + 1];
644
+ }
645
+ av.argc -= 1;
646
+
647
+ changeDirectory = false;
648
+ }
649
+ else if(strcmp(av.argv[idx], "--pidfile") == 0)
650
+ {
651
+ if(idx + 1 < av.argc)
652
+ {
653
+ pidFile = av.argv[idx + 1];
654
+ }
655
+ else
656
+ {
657
+ if(av.argv[0])
658
+ {
659
+ consoleErr << av.argv[0] << ": ";
660
+ }
661
+ consoleErr << "--pidfile must be followed by an argument" << endl;
662
+ return EXIT_FAILURE;
663
+ }
664
+
665
+ for(int i = idx; i + 2 < av.argc; ++i)
666
+ {
667
+ av.argv[i] = av.argv[i + 2];
668
+ }
669
+ av.argc -= 2;
670
+ }
671
+ else
672
+ {
673
+ ++idx;
674
+ }
675
+ }
676
+
677
+ if(!closeFiles && !daemonize)
678
+ {
679
+ if(av.argv[0])
680
+ {
681
+ consoleErr << av.argv[0] << ": ";
682
+ }
683
+ consoleErr << "--noclose must be used with --daemon" << endl;
684
+ return EXIT_FAILURE;
685
+ }
686
+
687
+ if(pidFile.size() > 0 && !daemonize)
688
+ {
689
+ if(av.argv[0])
690
+ {
691
+ consoleErr << av.argv[0] << ": ";
692
+ }
693
+ consoleErr << "--pidfile <file> must be used with --daemon" << endl;
694
+ return EXIT_FAILURE;
695
+ }
696
+
697
+ if(daemonize)
698
+ {
699
+ configureDaemon(changeDirectory, closeFiles, pidFile);
700
+ }
701
+ #endif
702
+
703
+ //
704
+ // If no logger has been set yet, we set it to the process logger. If the
705
+ // process logger is the default logger, we change it to a logger which is
706
+ // using the program name for the prefix.
707
+ //
708
+ if(!_logger)
709
+ {
710
+ _logger = getProcessLogger();
711
+ if(ICE_DYNAMIC_CAST(LoggerI, _logger))
712
+ {
713
+ const bool convert =
714
+ initData.properties->getPropertyAsIntWithDefault("Ice.LogStdErr.Convert", 1) > 0 &&
715
+ initData.properties->getProperty("Ice.StdErr").empty();
716
+
717
+ _logger = ICE_MAKE_SHARED(LoggerI, initData.properties->getProperty("Ice.ProgramName"), "", convert);
718
+ setProcessLogger(_logger);
719
+ }
720
+ }
721
+
722
+ return run(av.argc, av.argv, initData, version);
723
+ }
724
+
725
+ #ifdef _WIN32
726
+ int
727
+ Ice::Service::main(int argc, const wchar_t* const argv[], const InitializationData& initializationData, int version)
728
+ {
729
+ return main(Ice::argsToStringSeq(argc, argv), initializationData, version);
730
+ }
731
+ #endif
732
+
733
+ int
734
+ Ice::Service::main(const StringSeq& args, const InitializationData& initData, int version)
735
+ {
736
+ IceInternal::ArgVector av(args);
737
+ return main(av.argc, av.argv, initData, version);
738
+ }
739
+
740
+ Ice::CommunicatorPtr
741
+ Ice::Service::communicator() const
742
+ {
743
+ return _communicator;
744
+ }
745
+
746
+ Ice::Service*
747
+ Ice::Service::instance()
748
+ {
749
+ return _instance;
750
+ }
751
+
752
+ bool
753
+ Ice::Service::service() const
754
+ {
755
+ return _service;
756
+ }
757
+
758
+ string
759
+ Ice::Service::name() const
760
+ {
761
+ return _name;
762
+ }
763
+
764
+ #ifdef _WIN32
765
+ int
766
+ Ice::Service::run(int argc, const wchar_t* const argv[], const InitializationData& initData, int version)
767
+ {
768
+ StringSeq args = Ice::argsToStringSeq(argc, argv);
769
+ IceInternal::ArgVector av(args);
770
+ return run(av.argc, av.argv, initData, version);
771
+ }
772
+ #endif
773
+
774
+ int
775
+ Ice::Service::run(int argc, const char* const argv[], const InitializationData& initData, int version)
776
+ {
777
+ IceInternal::ArgVector av(argc, argv); // copy args
778
+
779
+ if(_service)
780
+ {
781
+ #ifdef _WIN32
782
+ return runService(av.argc, av.argv, initData);
783
+ #else
784
+ return runDaemon(av.argc, av.argv, initData, version);
785
+ #endif
786
+ }
787
+
788
+ //
789
+ // Run as a foreground process.
790
+ //
791
+ int status = EXIT_FAILURE;
792
+ try
793
+ {
794
+ //
795
+ // Create the CtrlCHandler after any potential forking so that signals
796
+ // are initialized properly. We do this before initializing the
797
+ // communicator because we need to ensure that this is done before any
798
+ // additional threads are created.
799
+ //
800
+ _ctrlCHandler = new IceUtil::CtrlCHandler;
801
+
802
+ //
803
+ // Initialize the communicator.
804
+ //
805
+ _communicator = initializeCommunicator(av.argc, av.argv, initData, version);
806
+
807
+ //
808
+ // Use the configured logger.
809
+ //
810
+ _logger = _communicator->getLogger();
811
+
812
+ //
813
+ // Determines whether we ignore SIGHUP/CTRL_LOGOFF_EVENT.
814
+ //
815
+ _nohup = _communicator->getProperties()->getPropertyAsIntWithDefault("Ice.Nohup", 1) > 0;
816
+
817
+ //
818
+ // Start the service.
819
+ //
820
+ if(start(av.argc, av.argv, status))
821
+ {
822
+ #ifdef ICE_USE_SYSTEMD
823
+ sd_notify(0, "READY=1");
824
+ #endif
825
+ //
826
+ // Wait for service shutdown.
827
+ //
828
+ waitForShutdown();
829
+
830
+ #ifdef ICE_USE_SYSTEMD
831
+ //
832
+ // Inform the service manager that the service is beginning its shutdown.
833
+ //
834
+ sd_notify(0, "STOPPING=1");
835
+ #endif
836
+ //
837
+ // Stop the service.
838
+ //
839
+ if(stop())
840
+ {
841
+ status = EXIT_SUCCESS;
842
+ }
843
+ }
844
+ }
845
+ catch(const Ice::Exception& ex)
846
+ {
847
+ ServiceError err(this);
848
+ err << "service terminating after catching exception:\n" << ex;
849
+ #ifdef ICE_USE_SYSTEMD
850
+ const string msg = err.str();
851
+ sd_notifyf(0, "STATUS=Failed service terminating after catching exception: %s", msg.c_str());
852
+ #endif
853
+ }
854
+ catch(const std::exception& ex)
855
+ {
856
+ ServiceError err(this);
857
+ err << "service terminating after catching exception:\n" << ex;
858
+ #ifdef ICE_USE_SYSTEMD
859
+ const string msg = err.str();
860
+ sd_notifyf(0, "STATUS=Failed service terminating after catching exception: %s", msg.c_str());
861
+ #endif
862
+ }
863
+ catch(const std::string& msg)
864
+ {
865
+ ServiceError err(this);
866
+ err << "service terminating after catching exception:\n" << msg;
867
+ #ifdef ICE_USE_SYSTEMD
868
+ sd_notifyf(0, "STATUS=Failed service terminating after catching exception: %s", msg.c_str());
869
+ #endif
870
+ }
871
+ catch(const char* msg)
872
+ {
873
+ ServiceError err(this);
874
+ err << "service terminating after catching exception:\n" << msg;
875
+ #ifdef ICE_USE_SYSTEMD
876
+ sd_notifyf(0, "STATUS=Failed service terminating after catching exception: %s", msg);
877
+ #endif
878
+ }
879
+ catch(...)
880
+ {
881
+ error("service terminating after catching unknown exception");
882
+ #ifdef ICE_USE_SYSTEMD
883
+ sd_notify(0, "STATUS=Failed service terminating after catching unknown exception");
884
+ #endif
885
+ }
886
+
887
+ if(_communicator)
888
+ {
889
+ _communicator->destroy();
890
+ }
891
+
892
+ return status;
893
+ }
894
+
895
+ #ifdef _WIN32
896
+
897
+ void
898
+ Ice::Service::configureService(const string& name)
899
+ {
900
+ _service = true;
901
+ _name = name;
902
+ }
903
+
904
+ void
905
+ Ice::Service::setModuleHandle(HMODULE module)
906
+ {
907
+ SMEventLoggerI::setModuleHandle(module);
908
+ }
909
+
910
+ #else
911
+
912
+ void
913
+ Ice::Service::configureDaemon(bool changeDirectory, bool closeFiles, const string& pidFile)
914
+ {
915
+ _service = true;
916
+ _changeDirectory = changeDirectory;
917
+ _closeFiles = closeFiles;
918
+ _pidFile = pidFile;
919
+ }
920
+
921
+ #endif
922
+
923
+ void
924
+ Ice::Service::handleInterrupt(int sig)
925
+ {
926
+ #ifdef _WIN32
927
+ if(_nohup && sig == CTRL_LOGOFF_EVENT)
928
+ {
929
+ return;
930
+ }
931
+ #else
932
+ if(_nohup && sig == SIGHUP)
933
+ {
934
+ return;
935
+ }
936
+ #endif
937
+
938
+ interrupt();
939
+ }
940
+
941
+ void
942
+ Ice::Service::waitForShutdown()
943
+ {
944
+ if(_communicator)
945
+ {
946
+ enableInterrupt();
947
+ _communicator->waitForShutdown();
948
+ disableInterrupt();
949
+ }
950
+ }
951
+
952
+ bool
953
+ Ice::Service::stop()
954
+ {
955
+ return true;
956
+ }
957
+
958
+ Ice::CommunicatorPtr
959
+ Ice::Service::initializeCommunicator(int& argc, char* argv[], const InitializationData& initData, int version)
960
+ {
961
+ return Ice::initialize(argc, argv, initData, version);
962
+ }
963
+
964
+ void
965
+ Ice::Service::syserror(const string& msg)
966
+ {
967
+ string errmsg = IceUtilInternal::lastErrorToString();
968
+ if(_logger)
969
+ {
970
+ ostringstream ostr;
971
+ if(!msg.empty())
972
+ {
973
+ ostr << msg << endl;
974
+ }
975
+ if(!errmsg.empty())
976
+ {
977
+ ostr << errmsg;
978
+ }
979
+ _logger->error(ostr.str());
980
+ }
981
+ else
982
+ {
983
+ if(!_name.empty())
984
+ {
985
+ consoleErr << _name << ": ";
986
+ }
987
+ if(!msg.empty())
988
+ {
989
+ consoleErr << msg << endl;
990
+ }
991
+ if(!errmsg.empty())
992
+ {
993
+ consoleErr << errmsg;
994
+ }
995
+ }
996
+ }
997
+
998
+ void
999
+ Ice::Service::error(const string& msg)
1000
+ {
1001
+ if(_logger)
1002
+ {
1003
+ _logger->error(msg);
1004
+ }
1005
+ else
1006
+ {
1007
+ if(!_name.empty())
1008
+ {
1009
+ consoleErr << _name << ": ";
1010
+ }
1011
+ consoleErr << "error: " << msg << endl;
1012
+ }
1013
+ }
1014
+
1015
+ void
1016
+ Ice::Service::warning(const string& msg)
1017
+ {
1018
+ if(_logger)
1019
+ {
1020
+ _logger->warning(msg);
1021
+ }
1022
+ else
1023
+ {
1024
+ if(!_name.empty())
1025
+ {
1026
+ consoleErr << _name << ": ";
1027
+ }
1028
+ consoleErr << "warning: " << msg << endl;
1029
+ }
1030
+ }
1031
+
1032
+ void
1033
+ Ice::Service::trace(const string& msg)
1034
+ {
1035
+ if(_logger)
1036
+ {
1037
+ _logger->trace("", msg);
1038
+ }
1039
+ else
1040
+ {
1041
+ consoleErr << msg << endl;
1042
+ }
1043
+ }
1044
+
1045
+ void
1046
+ Ice::Service::print(const string& msg)
1047
+ {
1048
+ if(_logger)
1049
+ {
1050
+ _logger->print(msg);
1051
+ }
1052
+ else
1053
+ {
1054
+ consoleErr << msg << endl;
1055
+ }
1056
+ }
1057
+
1058
+ void
1059
+ Ice::Service::enableInterrupt()
1060
+ {
1061
+ _ctrlCHandler->setCallback(ctrlCHandlerCallback);
1062
+ }
1063
+
1064
+ void
1065
+ Ice::Service::disableInterrupt()
1066
+ {
1067
+ _ctrlCHandler->setCallback(0);
1068
+ }
1069
+
1070
+ #ifdef _WIN32
1071
+
1072
+ int
1073
+ Ice::Service::runService(int argc, const char* const argv[], const InitializationData& initData)
1074
+ {
1075
+ assert(_service);
1076
+
1077
+ if(_name.empty())
1078
+ {
1079
+ error("invalid name for Win32 service");
1080
+ return EXIT_FAILURE;
1081
+ }
1082
+
1083
+ //
1084
+ // Arguments passed to the executable are not passed to the service's main function,
1085
+ // so save them now and serviceMain will merge them later.
1086
+ //
1087
+ for(int idx = 1; idx < argc; ++idx)
1088
+ {
1089
+ _serviceArgs.push_back(argv[idx]);
1090
+ }
1091
+
1092
+ _initData = initData;
1093
+
1094
+ //
1095
+ // Don't need to use a wide string converter as the wide string is passed
1096
+ // to Windows API.
1097
+ //
1098
+ const wstring serviceName = stringToWstring(_name, getProcessStringConverter());
1099
+ SERVICE_TABLE_ENTRYW ste[] =
1100
+ {
1101
+ { const_cast<wchar_t*>(serviceName.c_str()), Ice_Service_ServiceMain },
1102
+ { 0, 0 },
1103
+ };
1104
+
1105
+ //
1106
+ // Start the service.
1107
+ //
1108
+ if(!StartServiceCtrlDispatcherW(ste))
1109
+ {
1110
+ syserror("unable to start service control dispatcher");
1111
+ return EXIT_FAILURE;
1112
+ }
1113
+
1114
+ return EXIT_SUCCESS;
1115
+ }
1116
+
1117
+ void
1118
+ Ice::Service::terminateService(DWORD exitCode)
1119
+ {
1120
+ serviceStatusManager->stopUpdate();
1121
+ delete serviceStatusManager;
1122
+ serviceStatusManager = 0;
1123
+
1124
+ SERVICE_STATUS status;
1125
+
1126
+ status.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
1127
+ status.dwCurrentState = SERVICE_STOPPED;
1128
+ status.dwControlsAccepted = 0;
1129
+ if(exitCode != 0)
1130
+ {
1131
+ status.dwWin32ExitCode = ERROR_SERVICE_SPECIFIC_ERROR;
1132
+ }
1133
+ else
1134
+ {
1135
+ status.dwWin32ExitCode = 0;
1136
+ }
1137
+ status.dwServiceSpecificExitCode = exitCode;
1138
+ status.dwCheckPoint = 0;
1139
+ status.dwWaitHint = 0;
1140
+
1141
+ SetServiceStatus(_statusHandle, &status);
1142
+ }
1143
+
1144
+ bool
1145
+ Ice::Service::waitForServiceState(SC_HANDLE hService, DWORD pendingState, SERVICE_STATUS& status)
1146
+ {
1147
+ if(!QueryServiceStatus(hService, &status))
1148
+ {
1149
+ return false;
1150
+ }
1151
+
1152
+ //
1153
+ // Save the tick count and initial checkpoint.
1154
+ //
1155
+ DWORD startTickCount = GetTickCount();
1156
+ DWORD oldCheckPoint = status.dwCheckPoint;
1157
+
1158
+ //
1159
+ // Loop while the service is in the pending state.
1160
+ //
1161
+ while(status.dwCurrentState == pendingState)
1162
+ {
1163
+ //
1164
+ // Do not wait longer than the wait hint. A good interval is
1165
+ // one tenth the wait hint, but no less than 1 second and no
1166
+ // more than 10 seconds.
1167
+ //
1168
+
1169
+ DWORD waitTime = status.dwWaitHint / 10;
1170
+
1171
+ if(waitTime < 1000)
1172
+ {
1173
+ waitTime = 1000;
1174
+ }
1175
+ else if(waitTime > 10000)
1176
+ {
1177
+ waitTime = 10000;
1178
+ }
1179
+
1180
+ Sleep(waitTime);
1181
+
1182
+ //
1183
+ // Check the status again.
1184
+ //
1185
+ if(!QueryServiceStatus(hService, &status))
1186
+ {
1187
+ return false;
1188
+ }
1189
+
1190
+ if(status.dwCheckPoint > oldCheckPoint)
1191
+ {
1192
+ //
1193
+ // The service is making progress.
1194
+ //
1195
+ startTickCount = GetTickCount();
1196
+ oldCheckPoint = status.dwCheckPoint;
1197
+ }
1198
+ else
1199
+ {
1200
+ if(GetTickCount() - startTickCount > status.dwWaitHint)
1201
+ {
1202
+ //
1203
+ // No progress made within the wait hint.
1204
+ //
1205
+ break;
1206
+ }
1207
+ }
1208
+ }
1209
+
1210
+ return true;
1211
+ }
1212
+
1213
+ void
1214
+ Ice::Service::showServiceStatus(const string& msg, SERVICE_STATUS& status)
1215
+ {
1216
+ string state;
1217
+ switch(status.dwCurrentState)
1218
+ {
1219
+ case SERVICE_STOPPED:
1220
+ state = "STOPPED";
1221
+ break;
1222
+ case SERVICE_START_PENDING:
1223
+ state = "START PENDING";
1224
+ break;
1225
+ case SERVICE_STOP_PENDING:
1226
+ state = "STOP PENDING";
1227
+ break;
1228
+ case SERVICE_RUNNING:
1229
+ state = "RUNNING";
1230
+ break;
1231
+ case SERVICE_CONTINUE_PENDING:
1232
+ state = "CONTINUE PENDING";
1233
+ break;
1234
+ case SERVICE_PAUSE_PENDING:
1235
+ state = "PAUSE PENDING";
1236
+ break;
1237
+ case SERVICE_PAUSED:
1238
+ state = "PAUSED";
1239
+ break;
1240
+ default:
1241
+ state = "UNKNOWN";
1242
+ break;
1243
+ }
1244
+
1245
+ ServiceTrace tr(this);
1246
+ tr << msg
1247
+ << "\n Current state: " << state
1248
+ << "\n Exit code: " << status.dwWin32ExitCode
1249
+ << "\n Service specific exit code: " << status.dwServiceSpecificExitCode
1250
+ << "\n Check point: " << status.dwCheckPoint
1251
+ << "\n Wait hint: " << status.dwWaitHint;
1252
+ }
1253
+
1254
+ void
1255
+ Ice::Service::serviceMain(int argc, const wchar_t* const argv[])
1256
+ {
1257
+ _ctrlCHandler = new IceUtil::CtrlCHandler;
1258
+
1259
+ //
1260
+ // Register the control handler function.
1261
+ //
1262
+ _statusHandle = RegisterServiceCtrlHandlerW(argv[0], Ice_Service_CtrlHandler);
1263
+ if(_statusHandle == 0)
1264
+ {
1265
+ syserror("unable to register service control handler");
1266
+ return;
1267
+ }
1268
+
1269
+ //
1270
+ // Create the service status manager and start a thread to periodically
1271
+ // update the service's status with the service control manager (SCM).
1272
+ // The SCM must receive periodic updates otherwise it assumes that
1273
+ // initialization failed and terminates the service.
1274
+ //
1275
+ serviceStatusManager = new ServiceStatusManager(_statusHandle);
1276
+ serviceStatusManager->startUpdate(SERVICE_START_PENDING);
1277
+
1278
+ //
1279
+ // Don't need to pass a wide string converter in the argv conversions
1280
+ // as argv come from Windows API.
1281
+ //
1282
+ const IceUtil::StringConverterPtr converter = IceUtil::getProcessStringConverter();
1283
+
1284
+ //
1285
+ // Merge the executable's arguments with the service's arguments.
1286
+ //
1287
+ char** args = new char*[_serviceArgs.size() + argc];
1288
+
1289
+ //
1290
+ // First argument is argv[0] the serviceName
1291
+ //
1292
+ const string serviceName = wstringToString(argv[0], converter);
1293
+ args[0] = const_cast<char*>(serviceName.c_str());
1294
+
1295
+ int i = 1;
1296
+ for(vector<string>::iterator p = _serviceArgs.begin(); p != _serviceArgs.end(); ++p)
1297
+ {
1298
+ args[i++] = const_cast<char*>(p->c_str());
1299
+ }
1300
+
1301
+ //
1302
+ // Convert wide string wchar_t** argv to a sequence of narrow strings and merge
1303
+ // the converted sequence into the args array.
1304
+ //
1305
+ vector<string> executableArgs;
1306
+ for(int j = 1; j < argc; ++j)
1307
+ {
1308
+ executableArgs.push_back(IceUtil::wstringToString(argv[j], converter));
1309
+ }
1310
+ for(vector<string>::iterator p = executableArgs.begin(); p != executableArgs.end(); ++p)
1311
+ {
1312
+ args[i++] = const_cast<char*>(p->c_str());
1313
+ }
1314
+ argc += static_cast<int>(_serviceArgs.size());
1315
+
1316
+ //
1317
+ // If we can't initialize a communicator, then stop immediately.
1318
+ //
1319
+ try
1320
+ {
1321
+ _communicator = initializeCommunicator(argc, args, _initData, ICE_INT_VERSION);
1322
+ }
1323
+ catch(const Ice::Exception& ex)
1324
+ {
1325
+ delete[] args;
1326
+ {
1327
+ ServiceError err(this);
1328
+ err << "exception occurred while initializing a communicator:\n" << ex;
1329
+ }
1330
+ terminateService(EXIT_FAILURE);
1331
+ return;
1332
+ }
1333
+ catch(...)
1334
+ {
1335
+ delete[] args;
1336
+ error("unknown exception occurred while initializing a communicator");
1337
+ terminateService(EXIT_FAILURE);
1338
+ return;
1339
+ }
1340
+
1341
+ //
1342
+ // Use the configured logger.
1343
+ //
1344
+ _logger = _communicator->getLogger();
1345
+
1346
+ //
1347
+ // Determines whether we ignore SIGHUP/CTRL_LOGOFF_EVENT.
1348
+ //
1349
+ _nohup = _communicator->getProperties()->getPropertyAsIntWithDefault("Ice.Nohup", 1) > 0;
1350
+
1351
+ DWORD status = EXIT_FAILURE;
1352
+ try
1353
+ {
1354
+ int tmpStatus = EXIT_FAILURE;
1355
+ if(start(argc, args, tmpStatus))
1356
+ {
1357
+ trace("Service started successfully.");
1358
+
1359
+ //
1360
+ // Change the current status from START_PENDING to RUNNING.
1361
+ //
1362
+ serviceStatusManager->stopUpdate();
1363
+ serviceStatusManager->changeStatus(SERVICE_RUNNING, SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN);
1364
+
1365
+ //
1366
+ // Wait for the service to be shut down.
1367
+ //
1368
+ waitForShutdown();
1369
+
1370
+ //
1371
+ // Give the service a chance to clean up.
1372
+ //
1373
+ if(stop())
1374
+ {
1375
+ status = EXIT_SUCCESS;
1376
+ }
1377
+ }
1378
+ else
1379
+ {
1380
+ status = tmpStatus;
1381
+ }
1382
+ }
1383
+ catch(const Ice::Exception& ex)
1384
+ {
1385
+ ServiceError err(this);
1386
+ err << "service terminating after catching exception:\n" << ex;
1387
+ }
1388
+ catch(const std::exception& ex)
1389
+ {
1390
+ ServiceError err(this);
1391
+ err << "service terminating after catching exception:\n" << ex;
1392
+ }
1393
+ catch(...)
1394
+ {
1395
+ error("service terminating after catching unknown exception");
1396
+ }
1397
+
1398
+ delete[] args;
1399
+
1400
+ assert(_communicator);
1401
+ _communicator->destroy();
1402
+
1403
+ terminateService(status);
1404
+ }
1405
+
1406
+ void
1407
+ Ice::Service::control(int ctrl)
1408
+ {
1409
+ assert(serviceStatusManager);
1410
+
1411
+ switch(ctrl)
1412
+ {
1413
+ case SERVICE_CONTROL_SHUTDOWN:
1414
+ case SERVICE_CONTROL_STOP:
1415
+ {
1416
+ serviceStatusManager->startUpdate(SERVICE_STOP_PENDING);
1417
+ shutdown();
1418
+ break;
1419
+ }
1420
+ default:
1421
+ {
1422
+ if(ctrl != SERVICE_CONTROL_INTERROGATE)
1423
+ {
1424
+ ServiceError err(this);
1425
+ err << "unrecognized service control code " << ctrl;
1426
+ }
1427
+
1428
+ serviceStatusManager->reportStatus();
1429
+ break;
1430
+ }
1431
+ }
1432
+ }
1433
+
1434
+ ServiceStatusManager::ServiceStatusManager(SERVICE_STATUS_HANDLE handle) :
1435
+ _handle(handle), _stopped(false)
1436
+ {
1437
+ _status.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
1438
+ _status.dwControlsAccepted = 0;
1439
+ _status.dwWin32ExitCode = 0;
1440
+ _status.dwServiceSpecificExitCode = 0;
1441
+ _status.dwCheckPoint = 0;
1442
+ _status.dwWaitHint = 0;
1443
+ }
1444
+
1445
+ void
1446
+ ServiceStatusManager::startUpdate(DWORD state)
1447
+ {
1448
+ Lock sync(*this);
1449
+
1450
+ assert(state == SERVICE_START_PENDING || state == SERVICE_STOP_PENDING);
1451
+ assert(!_thread);
1452
+
1453
+ _status.dwCurrentState = state;
1454
+ _status.dwControlsAccepted = 0; // Don't accept any other control messages while pending.
1455
+
1456
+ _stopped = false;
1457
+
1458
+ _thread = new StatusThread(this);
1459
+ _thread->start();
1460
+ }
1461
+
1462
+ void
1463
+ ServiceStatusManager::stopUpdate()
1464
+ {
1465
+ IceUtil::ThreadPtr thread;
1466
+
1467
+ {
1468
+ Lock sync(*this);
1469
+
1470
+ if(_thread)
1471
+ {
1472
+ _stopped = true;
1473
+ notify();
1474
+ thread = _thread;
1475
+ _thread = 0;
1476
+ }
1477
+ }
1478
+
1479
+ if(thread)
1480
+ {
1481
+ thread->getThreadControl().join();
1482
+ }
1483
+ }
1484
+
1485
+ void
1486
+ ServiceStatusManager::changeStatus(DWORD state, DWORD controlsAccepted)
1487
+ {
1488
+ Lock sync(*this);
1489
+
1490
+ _status.dwCurrentState = state;
1491
+ _status.dwControlsAccepted = controlsAccepted;
1492
+
1493
+ SetServiceStatus(_handle, &_status);
1494
+ }
1495
+
1496
+ void
1497
+ ServiceStatusManager::reportStatus()
1498
+ {
1499
+ Lock sync(*this);
1500
+
1501
+ SetServiceStatus(_handle, &_status);
1502
+ }
1503
+
1504
+ void
1505
+ ServiceStatusManager::run()
1506
+ {
1507
+ Lock sync(*this);
1508
+
1509
+ IceUtil::Time delay = IceUtil::Time::milliSeconds(1000);
1510
+ _status.dwWaitHint = 2000;
1511
+ _status.dwCheckPoint = 0;
1512
+
1513
+ while(!_stopped)
1514
+ {
1515
+ _status.dwCheckPoint++;
1516
+ SetServiceStatus(_handle, &_status);
1517
+ timedWait(delay);
1518
+ }
1519
+ }
1520
+
1521
+ #else
1522
+
1523
+ int
1524
+ Ice::Service::runDaemon(int argc, char* argv[], const InitializationData& initData, int version)
1525
+ {
1526
+ assert(_service);
1527
+
1528
+ //
1529
+ // Create a pipe that is used to notify the parent when the child is ready.
1530
+ //
1531
+ SOCKET fds[2];
1532
+ IceInternal::createPipe(fds);
1533
+
1534
+ //
1535
+ // Fork the child.
1536
+ //
1537
+ pid_t pid = fork();
1538
+ if(pid < 0)
1539
+ {
1540
+ if(argv[0])
1541
+ {
1542
+ consoleErr << argv[0] << ": ";
1543
+ }
1544
+ consoleErr << IceUtilInternal::errorToString(errno) << endl;
1545
+ return EXIT_FAILURE;
1546
+ }
1547
+
1548
+ if(pid != 0)
1549
+ {
1550
+ //
1551
+ // Parent process.
1552
+ //
1553
+
1554
+ //
1555
+ // Close an unused end of the pipe.
1556
+ //
1557
+ close(fds[1]);
1558
+
1559
+ //
1560
+ // Wait for the child to write a byte to the pipe to indicate that it
1561
+ // is ready to receive requests, or that an error occurred.
1562
+ //
1563
+ char c = 0;
1564
+ while(true)
1565
+ {
1566
+ if(read(fds[0], &c, 1) == -1)
1567
+ {
1568
+ if(IceInternal::interrupted())
1569
+ {
1570
+ continue;
1571
+ }
1572
+
1573
+ if(argv[0])
1574
+ {
1575
+ consoleErr << argv[0] << ": ";
1576
+ }
1577
+ consoleErr << IceUtilInternal::errorToString(errno) << endl;
1578
+ _exit(EXIT_FAILURE);
1579
+ }
1580
+ break;
1581
+ }
1582
+
1583
+ if(c != 0)
1584
+ {
1585
+ //
1586
+ // Read an error message.
1587
+ //
1588
+ ssize_t rs;
1589
+ char s[16];
1590
+ string message;
1591
+ while((rs = read(fds[0], &s, 16)) > 0)
1592
+ {
1593
+ message.append(s, static_cast<size_t>(rs));
1594
+ }
1595
+
1596
+ if(argv[0])
1597
+ {
1598
+ consoleErr << argv[0] << ": ";
1599
+ }
1600
+
1601
+ if(rs == -1)
1602
+ {
1603
+ consoleErr << "I/O error while reading error message from child:\n" << IceUtilInternal::errorToString(errno);
1604
+ }
1605
+ else
1606
+ {
1607
+ consoleErr << "failure occurred in daemon";
1608
+ if(!message.empty())
1609
+ {
1610
+ consoleErr << ":\n" << message;
1611
+ }
1612
+ }
1613
+ consoleErr << endl;
1614
+ _exit(EXIT_FAILURE);
1615
+ }
1616
+
1617
+ _exit(EXIT_SUCCESS);
1618
+ }
1619
+
1620
+ //
1621
+ // Child process.
1622
+ //
1623
+
1624
+ string errMsg;
1625
+ int status = EXIT_FAILURE;
1626
+ try
1627
+ {
1628
+ //
1629
+ // Become a session and process group leader.
1630
+ //
1631
+ if(setsid() == -1)
1632
+ {
1633
+ throw SyscallException(__FILE__, __LINE__, IceInternal::getSystemErrno());
1634
+ }
1635
+
1636
+ //
1637
+ // Ignore SIGHUP so that the grandchild process is not sent SIGHUP when this
1638
+ // process exits.
1639
+ //
1640
+ signal(SIGHUP, SIG_IGN);
1641
+
1642
+ //
1643
+ // Fork again to eliminate the possibility of acquiring a controlling terminal.
1644
+ //
1645
+ pid = fork();
1646
+ if(pid < 0)
1647
+ {
1648
+ throw SyscallException(__FILE__, __LINE__, IceInternal::getSystemErrno());
1649
+ }
1650
+ if(pid != 0)
1651
+ {
1652
+ exit(0);
1653
+ }
1654
+
1655
+ if(_changeDirectory)
1656
+ {
1657
+ //
1658
+ // Change the working directory.
1659
+ //
1660
+ if(chdir("/") != 0)
1661
+ {
1662
+ throw SyscallException(__FILE__, __LINE__, IceInternal::getSystemErrno());
1663
+ }
1664
+ }
1665
+
1666
+ vector<int> fdsToClose;
1667
+ if(_closeFiles)
1668
+ {
1669
+ //
1670
+ // Take a snapshot of the open file descriptors. We don't actually close these
1671
+ // descriptors until after the communicator is initialized, so that plug-ins
1672
+ // have an opportunity to use stdin/stdout/stderr if necessary. This also
1673
+ // conveniently allows the Ice.PrintProcessId property to work as expected.
1674
+ //
1675
+ int fdMax = static_cast<int>(sysconf(_SC_OPEN_MAX));
1676
+ if(fdMax <= 0)
1677
+ {
1678
+ throw SyscallException(__FILE__, __LINE__, IceInternal::getSystemErrno());
1679
+ }
1680
+
1681
+ for(int i = 0; i < fdMax; ++i)
1682
+ {
1683
+ if(fcntl(i, F_GETFL) != -1)
1684
+ {
1685
+ //
1686
+ // Don't close the write end of the pipe.
1687
+ //
1688
+ if(i != fds[1])
1689
+ {
1690
+ fdsToClose.push_back(i);
1691
+ }
1692
+ }
1693
+ }
1694
+ }
1695
+
1696
+ //
1697
+ // Create the CtrlCHandler after forking the child so that signals are initialized
1698
+ // properly. We do this before initializing the communicator because we need to
1699
+ // ensure that signals are initialized before additional threads are created. The
1700
+ // communicator thread pools currently use lazy initialization, but a thread can
1701
+ // be created to monitor connections.
1702
+ //
1703
+ _ctrlCHandler = new IceUtil::CtrlCHandler;
1704
+
1705
+ //
1706
+ // Initialize the communicator.
1707
+ //
1708
+ _communicator = initializeCommunicator(argc, argv, initData, version);
1709
+
1710
+ if(_closeFiles)
1711
+ {
1712
+ //
1713
+ // Close unnecessary file descriptors.
1714
+ //
1715
+ PropertiesPtr properties = _communicator->getProperties();
1716
+ string stdOut = properties->getProperty("Ice.StdOut");
1717
+ string stdErr = properties->getProperty("Ice.StdErr");
1718
+
1719
+ for(vector<int>::const_iterator p = fdsToClose.begin(); p != fdsToClose.end(); ++p)
1720
+ {
1721
+ //
1722
+ // NOTE: Do not close stdout if Ice.StdOut is defined. Likewise for Ice.StdErr.
1723
+ //
1724
+ if((*p == 1 && !stdOut.empty()) || (*p == 2 && !stdErr.empty()))
1725
+ {
1726
+ continue;
1727
+ }
1728
+ close(*p);
1729
+ }
1730
+
1731
+ //
1732
+ // Associate stdin, stdout and stderr with /dev/null.
1733
+ //
1734
+ int fd = open("/dev/null", O_RDWR);
1735
+ assert(fd == 0);
1736
+ if(fd != 0)
1737
+ {
1738
+ throw SyscallException(__FILE__, __LINE__, IceInternal::getSystemErrno());
1739
+ }
1740
+ if(stdOut.empty())
1741
+ {
1742
+ fd = dup2(0, 1);
1743
+ assert(fd == 1);
1744
+ if(fd != 1)
1745
+ {
1746
+ throw SyscallException(__FILE__, __LINE__, IceInternal::getSystemErrno());
1747
+ }
1748
+ }
1749
+ if(stdErr.empty())
1750
+ {
1751
+ fd = dup2(1, 2);
1752
+ assert(fd == 2);
1753
+ if(fd != 2)
1754
+ {
1755
+ throw SyscallException(__FILE__, __LINE__, IceInternal::getSystemErrno());
1756
+ }
1757
+ }
1758
+ }
1759
+
1760
+ //
1761
+ // Write PID
1762
+ //
1763
+ if(_pidFile.size() > 0)
1764
+ {
1765
+ ofstream of(_pidFile.c_str());
1766
+ of << getpid() << endl;
1767
+
1768
+ if(!of)
1769
+ {
1770
+ warning("Could not write PID file " + _pidFile);
1771
+ }
1772
+ }
1773
+
1774
+ //
1775
+ // Use the configured logger.
1776
+ //
1777
+ _logger = _communicator->getLogger();
1778
+
1779
+ //
1780
+ // Start the service.
1781
+ //
1782
+ if(start(argc, argv, status))
1783
+ {
1784
+ //
1785
+ // Notify the parent that the child is ready.
1786
+ //
1787
+ char c = 0;
1788
+ while(true)
1789
+ {
1790
+ if(write(fds[1], &c, 1) == -1)
1791
+ {
1792
+ if(IceInternal::interrupted())
1793
+ {
1794
+ continue;
1795
+ }
1796
+ }
1797
+ break;
1798
+ }
1799
+ close(fds[1]);
1800
+ fds[1] = -1;
1801
+
1802
+ //
1803
+ // Wait for service shutdown.
1804
+ //
1805
+ waitForShutdown();
1806
+
1807
+ //
1808
+ // Stop the service.
1809
+ //
1810
+ if(stop())
1811
+ {
1812
+ status = EXIT_SUCCESS;
1813
+ }
1814
+ }
1815
+ }
1816
+ catch(const Ice::Exception& ex)
1817
+ {
1818
+ ServiceError err(this);
1819
+ err << "service terminating after catching exception:\n" << ex;
1820
+ errMsg = err.str();
1821
+ }
1822
+ catch(const std::exception& ex)
1823
+ {
1824
+ ServiceError err(this);
1825
+ err << "service terminating after catching exception:\n" << ex;
1826
+ errMsg = err.str();
1827
+ }
1828
+ catch(...)
1829
+ {
1830
+ errMsg = "service terminating after catching unknown exception";
1831
+ error(errMsg);
1832
+ }
1833
+
1834
+ //
1835
+ // If the service failed and the pipe to the parent is still open,
1836
+ // then send an error notification to the parent.
1837
+ //
1838
+ if(status != EXIT_SUCCESS && fds[1] != -1)
1839
+ {
1840
+ char c = 1;
1841
+ while(true)
1842
+ {
1843
+ if(write(fds[1], &c, 1) == -1)
1844
+ {
1845
+ if(IceInternal::interrupted())
1846
+ {
1847
+ continue;
1848
+ }
1849
+ }
1850
+ break;
1851
+ }
1852
+ const char* msg = errMsg.c_str();
1853
+ size_t len = strlen(msg) + 1; // Include null byte
1854
+ size_t pos = 0;
1855
+ while(len > 0)
1856
+ {
1857
+ ssize_t n = write(fds[1], &msg[pos], len);
1858
+ if(n == -1)
1859
+ {
1860
+ if(IceInternal::interrupted())
1861
+ {
1862
+ continue;
1863
+ }
1864
+ else
1865
+ {
1866
+ break;
1867
+ }
1868
+ }
1869
+ len -= static_cast<size_t>(n);
1870
+ pos += static_cast<size_t>(n);
1871
+ }
1872
+ close(fds[1]);
1873
+ }
1874
+
1875
+ if(_communicator)
1876
+ {
1877
+ _communicator->destroy();
1878
+ }
1879
+
1880
+ return status;
1881
+ }
1882
+
1883
+ #endif