passenger 5.1.12 → 5.2.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of passenger might be problematic. Click here for more details.

Files changed (824) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +18 -1
  3. data/Rakefile +4 -1
  4. data/build/agent.rb +2 -2
  5. data/build/apache2.rb +17 -10
  6. data/build/basics.rb +18 -4
  7. data/build/common_library.rb +7 -3
  8. data/build/cxx_tests.rb +2 -7
  9. data/build/misc.rb +3 -1
  10. data/build/nginx.rb +11 -5
  11. data/build/oxt_tests.rb +0 -3
  12. data/build/packaging.rb +3 -2
  13. data/build/schema_printer.rb +103 -0
  14. data/build/support/cplusplus.rb +2 -2
  15. data/build/support/cxx_dependency_map.rb +2575 -868
  16. data/dev/ci/lib/functions.sh +1 -1
  17. data/dev/ci/lib/set-container-envvars.sh +1 -1
  18. data/dev/ci/lib/setup-container.sh +1 -1
  19. data/dev/ci/run-tests-natively +1 -1
  20. data/dev/ci/run-tests-with-docker +1 -1
  21. data/dev/ci/scripts/debug-console-wrapper.sh +1 -1
  22. data/dev/ci/scripts/docker-entrypoint-stage2.sh +1 -1
  23. data/dev/ci/scripts/docker-entrypoint.sh +1 -1
  24. data/dev/ci/scripts/inituidgid +1 -1
  25. data/dev/ci/scripts/run-tests-natively-stage2.sh +1 -1
  26. data/dev/ci/scripts/setup-host-natively.sh +1 -1
  27. data/dev/ci/setup-host +1 -1
  28. data/dev/ci/tests/apache2/run +1 -1
  29. data/dev/ci/tests/apache2/setup +1 -1
  30. data/dev/ci/tests/cxx/run +1 -1
  31. data/dev/ci/tests/cxx/setup +1 -1
  32. data/dev/ci/tests/debian/Jenkinsfile +0 -1
  33. data/dev/ci/tests/debian/run +1 -1
  34. data/dev/ci/tests/nginx-dynamic/run +1 -1
  35. data/dev/ci/tests/nginx-dynamic/setup +1 -1
  36. data/dev/ci/tests/nginx/run +1 -1
  37. data/dev/ci/tests/nginx/setup +1 -1
  38. data/dev/ci/tests/nodejs/run +1 -1
  39. data/dev/ci/tests/nodejs/setup +1 -1
  40. data/dev/ci/tests/rpm/run +1 -1
  41. data/dev/ci/tests/ruby/run +1 -1
  42. data/dev/ci/tests/ruby/setup +1 -1
  43. data/dev/ci/tests/source-packaging/run +1 -1
  44. data/dev/ci/tests/source-packaging/setup +1 -1
  45. data/dev/ci/tests/standalone/run +1 -1
  46. data/dev/ci/tests/standalone/setup +1 -1
  47. data/dev/configkit-schemas/index.json +1708 -0
  48. data/dev/configkit-schemas/update_schema_inline_comments.rb +118 -0
  49. data/dev/copy_boost_headers +13 -1
  50. data/dev/index_cxx_dependencies.rb +20 -7
  51. data/dev/vagrant/provision.sh +1 -1
  52. data/resources/mime.types +1 -0
  53. data/resources/templates/standalone/http.erb +1 -6
  54. data/src/agent/Core/AdminPanelConnector.h +550 -0
  55. data/src/agent/Core/ApiServer.h +159 -97
  56. data/src/agent/Core/ApplicationPool/Group.h +2 -0
  57. data/src/agent/Core/ApplicationPool/Group/InternalUtils.cpp +3 -2
  58. data/src/agent/Core/ApplicationPool/Group/StateInspection.cpp +109 -0
  59. data/src/agent/Core/ApplicationPool/Implementation.cpp +5 -3
  60. data/src/agent/Core/ApplicationPool/Options.h +5 -6
  61. data/src/agent/Core/ApplicationPool/Pool.h +59 -2
  62. data/src/agent/Core/ApplicationPool/Pool/GeneralUtils.cpp +3 -3
  63. data/src/agent/Core/ApplicationPool/Pool/InitializationAndShutdown.cpp +2 -2
  64. data/src/agent/Core/ApplicationPool/Pool/Miscellaneous.cpp +6 -0
  65. data/src/agent/Core/ApplicationPool/Pool/StateInspection.cpp +129 -0
  66. data/src/agent/Core/Config.h +475 -0
  67. data/src/agent/Core/ConfigChange.cpp +349 -0
  68. data/src/agent/Core/ConfigChange.h +54 -0
  69. data/src/agent/Core/Controller.h +35 -3
  70. data/src/agent/Core/Controller/CheckoutSession.cpp +1 -1
  71. data/src/agent/Core/Controller/Config.cpp +0 -2
  72. data/src/agent/Core/Controller/Config.h +168 -104
  73. data/src/agent/Core/Controller/ForwardResponse.cpp +1 -1
  74. data/src/agent/Core/Controller/InitRequest.cpp +14 -15
  75. data/src/agent/Core/Controller/InitializationAndShutdown.cpp +34 -44
  76. data/src/agent/Core/Controller/Request.h +0 -1
  77. data/src/agent/Core/CoreMain.cpp +236 -349
  78. data/src/agent/Core/OptionParser.h +75 -89
  79. data/src/agent/Core/SecurityUpdateChecker.h +263 -100
  80. data/src/agent/Core/SpawningKit/Config.h +6 -2
  81. data/src/agent/Core/SpawningKit/Spawner.h +0 -45
  82. data/src/agent/Core/SpawningKit/UserSwitchingRules.h +1 -0
  83. data/src/agent/Shared/ApiAccountUtils.h +318 -0
  84. data/src/agent/Shared/ApiServerUtils.h +3 -104
  85. data/src/agent/Shared/Fundamentals/Initialization.cpp +81 -44
  86. data/src/agent/Shared/Fundamentals/Initialization.h +12 -7
  87. data/src/agent/TempDirToucher/TempDirToucherMain.cpp +21 -0
  88. data/src/agent/Watchdog/AgentWatcher.cpp +1 -1
  89. data/src/agent/Watchdog/ApiServer.h +100 -14
  90. data/src/agent/Watchdog/Config.h +340 -0
  91. data/src/agent/Watchdog/CoreWatcher.cpp +27 -13
  92. data/src/agent/Watchdog/InstanceDirToucher.cpp +1 -1
  93. data/src/agent/Watchdog/WatchdogMain.cpp +190 -206
  94. data/src/apache2_module/Bucket.cpp +4 -0
  95. data/src/apache2_module/Bucket.h +7 -3
  96. data/src/apache2_module/CBindings.cpp +49 -0
  97. data/src/apache2_module/Config.cpp +242 -0
  98. data/src/apache2_module/Config.h +109 -0
  99. data/src/apache2_module/ConfigGeneral/AutoGeneratedDefinitions.cpp +485 -0
  100. data/src/apache2_module/{ConfigurationCommands.cpp.cxxcodebuilder → ConfigGeneral/AutoGeneratedDefinitions.cpp.cxxcodebuilder} +29 -15
  101. data/src/apache2_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.cpp +298 -0
  102. data/src/apache2_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.cpp.cxxcodebuilder +171 -0
  103. data/src/apache2_module/ConfigGeneral/AutoGeneratedSetterFuncs.cpp +854 -0
  104. data/src/apache2_module/ConfigGeneral/AutoGeneratedSetterFuncs.cpp.cxxcodebuilder +188 -0
  105. data/src/apache2_module/ConfigGeneral/ManifestGeneration.h +610 -0
  106. data/src/apache2_module/ConfigGeneral/SetterFuncs.h +65 -0
  107. data/src/apache2_module/DirConfig/AutoGeneratedCreateFunction.cpp +174 -0
  108. data/src/apache2_module/{MergeDirConfig.cpp.cxxcodebuilder → DirConfig/AutoGeneratedCreateFunction.cpp.cxxcodebuilder} +54 -32
  109. data/src/apache2_module/DirConfig/AutoGeneratedHeaderSerialization.cpp +113 -0
  110. data/src/apache2_module/{SetHeaders.cpp.cxxcodebuilder → DirConfig/AutoGeneratedHeaderSerialization.cpp.cxxcodebuilder} +34 -23
  111. data/src/apache2_module/DirConfig/AutoGeneratedManifestGeneration.cpp +426 -0
  112. data/src/apache2_module/DirConfig/AutoGeneratedManifestGeneration.cpp.cxxcodebuilder +165 -0
  113. data/src/apache2_module/DirConfig/AutoGeneratedMergeFunction.cpp +269 -0
  114. data/src/apache2_module/DirConfig/AutoGeneratedMergeFunction.cpp.cxxcodebuilder +148 -0
  115. data/src/apache2_module/DirConfig/AutoGeneratedStruct.h +534 -0
  116. data/src/apache2_module/DirConfig/AutoGeneratedStruct.h.cxxcodebuilder +230 -0
  117. data/src/apache2_module/DirectoryMapper.h +19 -16
  118. data/src/apache2_module/Hooks.cpp +124 -138
  119. data/src/apache2_module/Hooks.h +9 -14
  120. data/src/apache2_module/ServerConfig/AutoGeneratedManifestGeneration.cpp +263 -0
  121. data/src/apache2_module/ServerConfig/AutoGeneratedManifestGeneration.cpp.cxxcodebuilder +152 -0
  122. data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h +299 -0
  123. data/src/apache2_module/{ConfigurationFields.hpp.cxxcodebuilder → ServerConfig/AutoGeneratedStruct.h.cxxcodebuilder} +105 -18
  124. data/src/apache2_module/Utils.h +215 -0
  125. data/src/apache2_module/mod_passenger.c +16 -8
  126. data/src/cxx_supportlib/AppTypes.h +2 -0
  127. data/src/cxx_supportlib/ConfigKit/ConfigKit.h +1 -1
  128. data/src/cxx_supportlib/ConfigKit/DummyTranslator.h +8 -8
  129. data/src/cxx_supportlib/ConfigKit/IN_PRACTICE.md +7 -41
  130. data/src/cxx_supportlib/ConfigKit/PrefixTranslator.h +12 -66
  131. data/src/cxx_supportlib/ConfigKit/Schema.h +62 -11
  132. data/src/cxx_supportlib/ConfigKit/{ValidationUtils.h → SchemaUtils.h} +12 -3
  133. data/src/cxx_supportlib/ConfigKit/Store.h +17 -9
  134. data/src/cxx_supportlib/ConfigKit/SubComponentUtils.h +2 -1
  135. data/src/cxx_supportlib/ConfigKit/TableTranslator.h +13 -70
  136. data/src/cxx_supportlib/ConfigKit/Translator.h +125 -0
  137. data/src/cxx_supportlib/Constants.h +1 -3
  138. data/src/cxx_supportlib/FileTools/FileManip.cpp +297 -0
  139. data/src/cxx_supportlib/FileTools/FileManip.h +162 -0
  140. data/src/cxx_supportlib/{Utils → FileTools}/LargeFiles.cpp +6 -3
  141. data/src/cxx_supportlib/{Utils → FileTools}/LargeFiles.h +7 -5
  142. data/src/cxx_supportlib/FileTools/PathManip.cpp +240 -0
  143. data/src/cxx_supportlib/FileTools/PathManip.h +91 -0
  144. data/src/cxx_supportlib/FileTools/PathManipCBindings.cpp +62 -0
  145. data/src/{apache2_module/Configuration.h → cxx_supportlib/FileTools/PathManipCBindings.h} +12 -19
  146. data/src/cxx_supportlib/Hooks.h +19 -16
  147. data/src/cxx_supportlib/InstanceDirectory.h +11 -0
  148. data/src/cxx_supportlib/JsonTools/Autocast.h +79 -0
  149. data/src/cxx_supportlib/JsonTools/CBindings.cpp +364 -0
  150. data/src/cxx_supportlib/JsonTools/CBindings.h +101 -0
  151. data/src/cxx_supportlib/LoggingKit/Config.h +13 -0
  152. data/src/cxx_supportlib/LoggingKit/Context.h +5 -2
  153. data/src/cxx_supportlib/LoggingKit/Forward.h +0 -1
  154. data/src/cxx_supportlib/LoggingKit/Implementation.cpp +12 -4
  155. data/src/cxx_supportlib/ResourceLocator.h +15 -0
  156. data/src/cxx_supportlib/ServerKit/Config.h +156 -0
  157. data/src/cxx_supportlib/ServerKit/Context.h +59 -38
  158. data/src/cxx_supportlib/ServerKit/FileBufferedChannel.h +3 -2
  159. data/src/cxx_supportlib/ServerKit/HttpHeaderParser.h +2 -2
  160. data/src/cxx_supportlib/ServerKit/HttpServer.h +16 -2
  161. data/src/cxx_supportlib/ServerKit/Server.h +32 -15
  162. data/src/cxx_supportlib/Utils.cpp +0 -441
  163. data/src/cxx_supportlib/Utils.h +0 -158
  164. data/src/cxx_supportlib/Utils/Curl.h +1 -0
  165. data/src/cxx_supportlib/Utils/ProcessMetricsCollector.h +1 -0
  166. data/src/cxx_supportlib/Utils/StrIntUtilsNoStrictAliasing.cpp +2 -0
  167. data/src/cxx_supportlib/Utils/VariantMap.h +31 -0
  168. data/src/cxx_supportlib/WatchdogLauncher.cpp +7 -79
  169. data/src/cxx_supportlib/WatchdogLauncher.h +50 -53
  170. data/src/cxx_supportlib/WebSocketCommandReverseServer.h +981 -0
  171. data/src/cxx_supportlib/oxt/macros.hpp +9 -0
  172. data/src/cxx_supportlib/vendor-copy/websocketpp/COPYING +145 -0
  173. data/src/cxx_supportlib/vendor-copy/websocketpp/changelog.md +342 -0
  174. data/src/cxx_supportlib/vendor-copy/websocketpp/readme.md +49 -0
  175. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/base64/base64.hpp +178 -0
  176. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/client.hpp +33 -0
  177. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/close.hpp +342 -0
  178. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/asio.hpp +131 -0
  179. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/asio_ssl.hpp +39 -0
  180. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/chrono.hpp +68 -0
  181. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/connection_hdl.hpp +52 -0
  182. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/cpp11.hpp +162 -0
  183. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/functional.hpp +105 -0
  184. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/md5.hpp +448 -0
  185. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/memory.hpp +89 -0
  186. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/network.hpp +106 -0
  187. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/platforms.hpp +46 -0
  188. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/random.hpp +82 -0
  189. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/regex.hpp +59 -0
  190. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/stdint.hpp +73 -0
  191. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/system_error.hpp +84 -0
  192. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/thread.hpp +84 -0
  193. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/time.hpp +56 -0
  194. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/type_traits.hpp +65 -0
  195. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/concurrency/basic.hpp +46 -0
  196. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/concurrency/none.hpp +80 -0
  197. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/config/asio.hpp +77 -0
  198. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/config/asio_client.hpp +77 -0
  199. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/config/asio_no_tls.hpp +73 -0
  200. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/config/asio_no_tls_client.hpp +73 -0
  201. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/config/boost_config.hpp +72 -0
  202. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/config/core.hpp +285 -0
  203. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/config/core_client.hpp +294 -0
  204. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/config/debug.hpp +286 -0
  205. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/config/debug_asio.hpp +77 -0
  206. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/config/debug_asio_no_tls.hpp +73 -0
  207. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/config/minimal_client.hpp +72 -0
  208. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/config/minimal_server.hpp +312 -0
  209. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/connection.hpp +1651 -0
  210. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/connection_base.hpp +38 -0
  211. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/endpoint.hpp +700 -0
  212. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/endpoint_base.hpp +38 -0
  213. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/error.hpp +277 -0
  214. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/extensions/extension.hpp +102 -0
  215. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/extensions/permessage_deflate/disabled.hpp +128 -0
  216. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/extensions/permessage_deflate/enabled.hpp +752 -0
  217. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/frame.hpp +861 -0
  218. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/http/constants.hpp +308 -0
  219. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/http/impl/parser.hpp +196 -0
  220. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/http/impl/request.hpp +191 -0
  221. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/http/impl/response.hpp +266 -0
  222. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/http/parser.hpp +619 -0
  223. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/http/request.hpp +124 -0
  224. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/http/response.hpp +188 -0
  225. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/impl/connection_impl.hpp +2372 -0
  226. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/impl/endpoint_impl.hpp +269 -0
  227. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/impl/utilities_impl.hpp +87 -0
  228. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/logger/basic.hpp +199 -0
  229. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/logger/levels.hpp +203 -0
  230. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/logger/stub.hpp +119 -0
  231. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/logger/syslog.hpp +146 -0
  232. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/message_buffer/alloc.hpp +105 -0
  233. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/message_buffer/message.hpp +340 -0
  234. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/message_buffer/pool.hpp +229 -0
  235. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/processors/base.hpp +299 -0
  236. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/processors/hybi00.hpp +462 -0
  237. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/processors/hybi07.hpp +78 -0
  238. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/processors/hybi08.hpp +83 -0
  239. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/processors/hybi13.hpp +1056 -0
  240. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/processors/processor.hpp +407 -0
  241. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/random/none.hpp +60 -0
  242. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/random/random_device.hpp +80 -0
  243. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/roles/client_endpoint.hpp +173 -0
  244. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/roles/server_endpoint.hpp +190 -0
  245. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/server.hpp +33 -0
  246. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/sha1/sha1.hpp +189 -0
  247. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/asio/base.hpp +232 -0
  248. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/asio/connection.hpp +1204 -0
  249. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/asio/endpoint.hpp +1147 -0
  250. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/asio/security/base.hpp +159 -0
  251. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/asio/security/none.hpp +370 -0
  252. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/asio/security/tls.hpp +484 -0
  253. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/base/connection.hpp +238 -0
  254. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/base/endpoint.hpp +77 -0
  255. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/debug/base.hpp +104 -0
  256. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/debug/connection.hpp +412 -0
  257. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/debug/endpoint.hpp +140 -0
  258. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/iostream/base.hpp +133 -0
  259. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/iostream/connection.hpp +714 -0
  260. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/iostream/endpoint.hpp +222 -0
  261. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/stub/base.hpp +95 -0
  262. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/stub/connection.hpp +286 -0
  263. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/stub/endpoint.hpp +140 -0
  264. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/uri.hpp +355 -0
  265. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/utf8_validator.hpp +154 -0
  266. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/utilities.hpp +182 -0
  267. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/version.hpp +61 -0
  268. data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +121 -0
  269. data/src/cxx_supportlib/vendor-modified/boost/asio/async_result.hpp +96 -0
  270. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +951 -0
  271. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +520 -0
  272. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_io_object.hpp +258 -0
  273. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +942 -0
  274. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +567 -0
  275. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +697 -0
  276. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +386 -0
  277. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +1519 -0
  278. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +1137 -0
  279. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_iostream.hpp +288 -0
  280. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_streambuf.hpp +569 -0
  281. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +854 -0
  282. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_streambuf.hpp +371 -0
  283. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_streambuf_fwd.hpp +35 -0
  284. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +521 -0
  285. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +2241 -0
  286. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_read_stream.hpp +246 -0
  287. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_read_stream_fwd.hpp +27 -0
  288. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_stream.hpp +260 -0
  289. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_stream_fwd.hpp +27 -0
  290. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_write_stream.hpp +238 -0
  291. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_write_stream_fwd.hpp +27 -0
  292. data/src/cxx_supportlib/vendor-modified/boost/asio/buffers_iterator.hpp +483 -0
  293. data/src/cxx_supportlib/vendor-modified/boost/asio/completion_condition.hpp +220 -0
  294. data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +825 -0
  295. data/src/cxx_supportlib/vendor-modified/boost/asio/coroutine.hpp +330 -0
  296. data/src/cxx_supportlib/vendor-modified/boost/asio/datagram_socket_service.hpp +438 -0
  297. data/src/cxx_supportlib/vendor-modified/boost/asio/deadline_timer.hpp +40 -0
  298. data/src/cxx_supportlib/vendor-modified/boost/asio/deadline_timer_service.hpp +173 -0
  299. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/addressof.hpp +40 -0
  300. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/array.hpp +40 -0
  301. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/array_fwd.hpp +34 -0
  302. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/assert.hpp +32 -0
  303. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/atomic_count.hpp +47 -0
  304. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/base_from_completion_cond.hpp +70 -0
  305. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/bind_handler.hpp +491 -0
  306. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffer_resize_guard.hpp +68 -0
  307. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffer_sequence_adapter.hpp +385 -0
  308. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffered_stream_storage.hpp +128 -0
  309. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/call_stack.hpp +127 -0
  310. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/chrono_time_traits.hpp +192 -0
  311. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/completion_handler.hpp +83 -0
  312. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +1050 -0
  313. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/consuming_buffers.hpp +294 -0
  314. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/cstdint.hpp +48 -0
  315. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/date_time_fwd.hpp +34 -0
  316. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/deadline_timer_service.hpp +229 -0
  317. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/dependent_type.hpp +38 -0
  318. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_ops.hpp +119 -0
  319. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_read_op.hpp +121 -0
  320. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_write_op.hpp +121 -0
  321. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/dev_poll_reactor.hpp +208 -0
  322. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/epoll_reactor.hpp +244 -0
  323. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/event.hpp +50 -0
  324. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/eventfd_select_interrupter.hpp +85 -0
  325. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/fd_set_adapter.hpp +41 -0
  326. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/fenced_block.hpp +82 -0
  327. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/function.hpp +40 -0
  328. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_arm_fenced_block.hpp +91 -0
  329. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_hppa_fenced_block.hpp +68 -0
  330. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_sync_fenced_block.hpp +65 -0
  331. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_x86_fenced_block.hpp +99 -0
  332. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +82 -0
  333. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_cont_helpers.hpp +45 -0
  334. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_invoke_helpers.hpp +57 -0
  335. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_tracking.hpp +161 -0
  336. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_type_requirements.hpp +480 -0
  337. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/hash_map.hpp +333 -0
  338. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/buffer_sequence_adapter.ipp +120 -0
  339. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +453 -0
  340. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.hpp +80 -0
  341. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.ipp +432 -0
  342. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.hpp +78 -0
  343. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.ipp +688 -0
  344. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/eventfd_select_interrupter.ipp +167 -0
  345. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/handler_tracking.ipp +307 -0
  346. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.hpp +82 -0
  347. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.ipp +498 -0
  348. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/pipe_select_interrupter.ipp +126 -0
  349. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_event.ipp +49 -0
  350. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_mutex.ipp +48 -0
  351. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_thread.ipp +76 -0
  352. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_tss_ptr.ipp +48 -0
  353. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_descriptor_service.ipp +210 -0
  354. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_serial_port_service.ipp +153 -0
  355. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_socket_service_base.ipp +269 -0
  356. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/resolver_service_base.ipp +132 -0
  357. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.hpp +89 -0
  358. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.ipp +315 -0
  359. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/service_registry.hpp +90 -0
  360. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/service_registry.ipp +190 -0
  361. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/signal_set_service.ipp +649 -0
  362. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +3470 -0
  363. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_select_interrupter.ipp +178 -0
  364. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_service.hpp +120 -0
  365. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_service.ipp +178 -0
  366. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/task_io_service.hpp +80 -0
  367. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/task_io_service.ipp +476 -0
  368. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/throw_error.ipp +47 -0
  369. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/timer_queue_ptime.ipp +86 -0
  370. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/timer_queue_set.ipp +103 -0
  371. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_control.hpp +136 -0
  372. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/keyword_tss_ptr.hpp +72 -0
  373. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/kqueue_reactor.hpp +222 -0
  374. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/limits.hpp +26 -0
  375. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/local_free_on_block_exit.hpp +61 -0
  376. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/macos_fenced_block.hpp +63 -0
  377. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +31 -0
  378. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/mutex.hpp +50 -0
  379. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/noncopyable.hpp +45 -0
  380. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_event.hpp +90 -0
  381. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_fenced_block.hpp +47 -0
  382. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_mutex.hpp +66 -0
  383. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_reactor.hpp +69 -0
  384. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_signal_blocker.hpp +71 -0
  385. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_socket_service.hpp +500 -0
  386. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_static_mutex.hpp +62 -0
  387. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_thread.hpp +63 -0
  388. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_tss_ptr.hpp +70 -0
  389. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/object_pool.hpp +148 -0
  390. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/old_win_sdk_compat.hpp +216 -0
  391. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/op_queue.hpp +158 -0
  392. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/operation.hpp +40 -0
  393. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/pipe_select_interrupter.hpp +91 -0
  394. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/pop_options.hpp +131 -0
  395. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_event.hpp +128 -0
  396. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_fd_set_adapter.hpp +120 -0
  397. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_mutex.hpp +78 -0
  398. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_signal_blocker.hpp +87 -0
  399. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_static_mutex.hpp +66 -0
  400. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_thread.hpp +107 -0
  401. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_tss_ptr.hpp +81 -0
  402. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/push_options.hpp +166 -0
  403. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_descriptor_service.hpp +324 -0
  404. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_null_buffers_op.hpp +90 -0
  405. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_serial_port_service.hpp +236 -0
  406. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_accept_op.hpp +138 -0
  407. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_connect_op.hpp +108 -0
  408. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recv_op.hpp +125 -0
  409. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recvfrom_op.hpp +135 -0
  410. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recvmsg_op.hpp +127 -0
  411. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_send_op.hpp +122 -0
  412. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_sendto_op.hpp +125 -0
  413. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service.hpp +460 -0
  414. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service_base.hpp +452 -0
  415. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor.hpp +32 -0
  416. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_fwd.hpp +42 -0
  417. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op.hpp +63 -0
  418. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op_queue.hpp +170 -0
  419. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/regex_fwd.hpp +35 -0
  420. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_endpoint_op.hpp +123 -0
  421. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_op.hpp +133 -0
  422. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolver_service.hpp +131 -0
  423. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolver_service_base.hpp +131 -0
  424. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scoped_lock.hpp +103 -0
  425. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scoped_ptr.hpp +81 -0
  426. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/select_interrupter.hpp +48 -0
  427. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/select_reactor.hpp +221 -0
  428. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/service_registry.hpp +146 -0
  429. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/shared_ptr.hpp +40 -0
  430. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_blocker.hpp +46 -0
  431. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_handler.hpp +84 -0
  432. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_init.hpp +49 -0
  433. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_op.hpp +51 -0
  434. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_set_service.hpp +218 -0
  435. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_holder.hpp +100 -0
  436. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_ops.hpp +336 -0
  437. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_option.hpp +318 -0
  438. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_select_interrupter.hpp +93 -0
  439. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_types.hpp +410 -0
  440. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/solaris_fenced_block.hpp +63 -0
  441. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/static_mutex.hpp +54 -0
  442. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_event.hpp +178 -0
  443. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_fenced_block.hpp +64 -0
  444. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_mutex.hpp +75 -0
  445. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_static_mutex.hpp +83 -0
  446. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_thread.hpp +67 -0
  447. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/strand_service.hpp +144 -0
  448. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/task_io_service.hpp +203 -0
  449. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/task_io_service_operation.hpp +78 -0
  450. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/task_io_service_thread_info.hpp +42 -0
  451. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread.hpp +58 -0
  452. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_info_base.hpp +93 -0
  453. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/throw_error.hpp +55 -0
  454. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/throw_exception.hpp +53 -0
  455. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue.hpp +333 -0
  456. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_base.hpp +70 -0
  457. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_ptime.hpp +95 -0
  458. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_set.hpp +68 -0
  459. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_scheduler.hpp +35 -0
  460. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_scheduler_fwd.hpp +42 -0
  461. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/tss_ptr.hpp +71 -0
  462. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/type_traits.hpp +60 -0
  463. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/variadic_templates.hpp +63 -0
  464. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wait_handler.hpp +85 -0
  465. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wait_op.hpp +47 -0
  466. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/weak_ptr.hpp +40 -0
  467. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/win_iocp_serial_port_service.hpp +230 -0
  468. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/winsock_init.hpp +130 -0
  469. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wrapped_handler.hpp +293 -0
  470. data/src/cxx_supportlib/vendor-modified/boost/asio/error.hpp +345 -0
  471. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/basic_endpoint.hpp +195 -0
  472. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/datagram_protocol.hpp +125 -0
  473. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/detail/endpoint.hpp +135 -0
  474. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/detail/impl/endpoint.ipp +111 -0
  475. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/raw_protocol.hpp +123 -0
  476. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/seq_packet_protocol.hpp +124 -0
  477. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/stream_protocol.hpp +129 -0
  478. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_alloc_hook.hpp +83 -0
  479. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_continuation_hook.hpp +56 -0
  480. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_invoke_hook.hpp +87 -0
  481. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_type.hpp +114 -0
  482. data/src/cxx_supportlib/vendor-modified/boost/asio/high_resolution_timer.hpp +65 -0
  483. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_read_stream.hpp +360 -0
  484. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_write_stream.hpp +340 -0
  485. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +432 -0
  486. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/error.ipp +130 -0
  487. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/handler_alloc_hook.ipp +79 -0
  488. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_service.hpp +156 -0
  489. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_service.ipp +157 -0
  490. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +755 -0
  491. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +812 -0
  492. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +1149 -0
  493. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/serial_port_base.hpp +61 -0
  494. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/serial_port_base.ipp +556 -0
  495. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +355 -0
  496. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/src.cpp +25 -0
  497. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/src.hpp +73 -0
  498. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_future.hpp +179 -0
  499. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +767 -0
  500. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +827 -0
  501. data/src/cxx_supportlib/vendor-modified/boost/asio/io_service.hpp +772 -0
  502. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address.hpp +202 -0
  503. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4.hpp +243 -0
  504. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6.hpp +248 -0
  505. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_endpoint.hpp +265 -0
  506. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +270 -0
  507. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_entry.hpp +96 -0
  508. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_iterator.hpp +262 -0
  509. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_query.hpp +246 -0
  510. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/endpoint.hpp +141 -0
  511. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/impl/endpoint.ipp +206 -0
  512. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/socket_option.hpp +571 -0
  513. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/host_name.hpp +44 -0
  514. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/icmp.hpp +117 -0
  515. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address.hpp +55 -0
  516. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address.ipp +228 -0
  517. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v4.hpp +55 -0
  518. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v4.ipp +180 -0
  519. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.hpp +55 -0
  520. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.ipp +300 -0
  521. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/basic_endpoint.hpp +57 -0
  522. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/host_name.ipp +56 -0
  523. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/multicast.hpp +193 -0
  524. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_query_base.hpp +132 -0
  525. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_service.hpp +178 -0
  526. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/tcp.hpp +157 -0
  527. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/udp.hpp +113 -0
  528. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/unicast.hpp +72 -0
  529. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/v6_only.hpp +71 -0
  530. data/src/cxx_supportlib/vendor-modified/boost/asio/is_read_buffered.hpp +61 -0
  531. data/src/cxx_supportlib/vendor-modified/boost/asio/is_write_buffered.hpp +61 -0
  532. data/src/cxx_supportlib/vendor-modified/boost/asio/local/basic_endpoint.hpp +241 -0
  533. data/src/cxx_supportlib/vendor-modified/boost/asio/local/connect_pair.hpp +106 -0
  534. data/src/cxx_supportlib/vendor-modified/boost/asio/local/datagram_protocol.hpp +82 -0
  535. data/src/cxx_supportlib/vendor-modified/boost/asio/local/detail/endpoint.hpp +135 -0
  536. data/src/cxx_supportlib/vendor-modified/boost/asio/local/detail/impl/endpoint.ipp +130 -0
  537. data/src/cxx_supportlib/vendor-modified/boost/asio/local/stream_protocol.hpp +92 -0
  538. data/src/cxx_supportlib/vendor-modified/boost/asio/placeholders.hpp +125 -0
  539. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +492 -0
  540. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +364 -0
  541. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/descriptor_base.hpp +99 -0
  542. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/stream_descriptor.hpp +39 -0
  543. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/stream_descriptor_service.hpp +262 -0
  544. data/src/cxx_supportlib/vendor-modified/boost/asio/raw_socket_service.hpp +438 -0
  545. data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +633 -0
  546. data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +666 -0
  547. data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +925 -0
  548. data/src/cxx_supportlib/vendor-modified/boost/asio/seq_packet_socket_service.hpp +386 -0
  549. data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port.hpp +38 -0
  550. data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port_base.hpp +169 -0
  551. data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port_service.hpp +255 -0
  552. data/src/cxx_supportlib/vendor-modified/boost/asio/signal_set.hpp +30 -0
  553. data/src/cxx_supportlib/vendor-modified/boost/asio/signal_set_service.hpp +136 -0
  554. data/src/cxx_supportlib/vendor-modified/boost/asio/socket_acceptor_service.hpp +308 -0
  555. data/src/cxx_supportlib/vendor-modified/boost/asio/socket_base.hpp +522 -0
  556. data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +267 -0
  557. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl.hpp +30 -0
  558. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/basic_context.hpp +42 -0
  559. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context.hpp +789 -0
  560. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context_base.hpp +194 -0
  561. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context_service.hpp +42 -0
  562. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/buffered_handshake_op.hpp +112 -0
  563. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/engine.hpp +166 -0
  564. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/handshake_op.hpp +70 -0
  565. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/engine.ipp +327 -0
  566. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/openssl_init.ipp +166 -0
  567. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/io.hpp +351 -0
  568. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/openssl_init.hpp +103 -0
  569. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/openssl_types.hpp +30 -0
  570. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/password_callback.hpp +74 -0
  571. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/read_op.hpp +75 -0
  572. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/shutdown_op.hpp +62 -0
  573. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/stream_core.hpp +128 -0
  574. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/verify_callback.hpp +70 -0
  575. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/write_op.hpp +75 -0
  576. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/error.hpp +115 -0
  577. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.hpp +73 -0
  578. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +1177 -0
  579. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/error.ipp +102 -0
  580. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/rfc2818_verification.ipp +168 -0
  581. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/src.hpp +28 -0
  582. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/basic_context.hpp +436 -0
  583. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/context_service.hpp +176 -0
  584. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/detail/openssl_context_service.hpp +396 -0
  585. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/detail/openssl_operation.hpp +526 -0
  586. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/detail/openssl_stream_service.hpp +573 -0
  587. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/stream.hpp +503 -0
  588. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/stream_service.hpp +186 -0
  589. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/rfc2818_verification.hpp +102 -0
  590. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +758 -0
  591. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream_base.hpp +54 -0
  592. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream_service.hpp +42 -0
  593. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/verify_context.hpp +75 -0
  594. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/verify_mode.hpp +65 -0
  595. data/src/cxx_supportlib/vendor-modified/boost/asio/steady_timer.hpp +63 -0
  596. data/src/cxx_supportlib/vendor-modified/boost/asio/strand.hpp +254 -0
  597. data/src/cxx_supportlib/vendor-modified/boost/asio/stream_socket_service.hpp +382 -0
  598. data/src/cxx_supportlib/vendor-modified/boost/asio/streambuf.hpp +35 -0
  599. data/src/cxx_supportlib/vendor-modified/boost/asio/system_timer.hpp +59 -0
  600. data/src/cxx_supportlib/vendor-modified/boost/asio/time_traits.hpp +88 -0
  601. data/src/cxx_supportlib/vendor-modified/boost/asio/unyield.hpp +21 -0
  602. data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +94 -0
  603. data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +23 -0
  604. data/src/cxx_supportlib/vendor-modified/boost/asio/wait_traits.hpp +43 -0
  605. data/src/cxx_supportlib/vendor-modified/boost/asio/waitable_timer_service.hpp +170 -0
  606. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_handle.hpp +283 -0
  607. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_object_handle.hpp +180 -0
  608. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_random_access_handle.hpp +378 -0
  609. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_stream_handle.hpp +361 -0
  610. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/object_handle.hpp +40 -0
  611. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/object_handle_service.hpp +179 -0
  612. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/overlapped_ptr.hpp +118 -0
  613. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/random_access_handle.hpp +39 -0
  614. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/random_access_handle_service.hpp +222 -0
  615. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/stream_handle.hpp +39 -0
  616. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/stream_handle_service.hpp +220 -0
  617. data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +620 -0
  618. data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +672 -0
  619. data/src/cxx_supportlib/vendor-modified/boost/asio/yield.hpp +23 -0
  620. data/src/cxx_supportlib/vendor-modified/boost/chrono.hpp +20 -0
  621. data/src/cxx_supportlib/vendor-modified/boost/chrono/chrono.hpp +15 -0
  622. data/src/cxx_supportlib/vendor-modified/boost/chrono/chrono_io.hpp +34 -0
  623. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/chrono.hpp +46 -0
  624. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/chrono.hpp +242 -0
  625. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/process_cpu_clocks.hpp +356 -0
  626. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/thread_clock.hpp +92 -0
  627. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/posix/chrono.hpp +121 -0
  628. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/posix/process_cpu_clocks.hpp +354 -0
  629. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/posix/thread_clock.hpp +92 -0
  630. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/process_cpu_clocks.hpp +46 -0
  631. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/thread_clock.hpp +46 -0
  632. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/no_warning/signed_unsigned_cmp.hpp +54 -0
  633. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/scan_keyword.hpp +163 -0
  634. data/src/cxx_supportlib/vendor-modified/boost/chrono/floor.hpp +36 -0
  635. data/src/cxx_supportlib/vendor-modified/boost/chrono/include.hpp +23 -0
  636. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_get.hpp +593 -0
  637. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_io.hpp +295 -0
  638. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_put.hpp +317 -0
  639. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_style.hpp +35 -0
  640. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_units.hpp +1003 -0
  641. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/ios_base_state.hpp +152 -0
  642. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/time_point_get.hpp +330 -0
  643. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/time_point_io.hpp +1243 -0
  644. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/time_point_put.hpp +261 -0
  645. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/time_point_units.hpp +260 -0
  646. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/timezone.hpp +30 -0
  647. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/utility/ios_base_state_ptr.hpp +437 -0
  648. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/utility/manip_base.hpp +101 -0
  649. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/utility/to_string.hpp +50 -0
  650. data/src/cxx_supportlib/vendor-modified/boost/chrono/io_v1/chrono_io.hpp +637 -0
  651. data/src/cxx_supportlib/vendor-modified/boost/chrono/process_cpu_clocks.hpp +525 -0
  652. data/src/cxx_supportlib/vendor-modified/boost/chrono/round.hpp +59 -0
  653. data/src/cxx_supportlib/vendor-modified/boost/chrono/thread_clock.hpp +75 -0
  654. data/src/cxx_supportlib/vendor-modified/boost/chrono/typeof/boost/chrono/chrono.hpp +32 -0
  655. data/src/cxx_supportlib/vendor-modified/boost/chrono/typeof/boost/ratio.hpp +24 -0
  656. data/src/cxx_supportlib/vendor-modified/boost/detail/atomic_count.hpp +21 -0
  657. data/src/cxx_supportlib/vendor-modified/boost/integer/common_factor.hpp +16 -0
  658. data/src/cxx_supportlib/vendor-modified/boost/integer/common_factor_rt.hpp +460 -0
  659. data/src/cxx_supportlib/vendor-modified/boost/integer/integer_log2.hpp +112 -0
  660. data/src/cxx_supportlib/vendor-modified/boost/integer/integer_mask.hpp +126 -0
  661. data/src/cxx_supportlib/vendor-modified/boost/integer/static_min_max.hpp +51 -0
  662. data/src/cxx_supportlib/vendor-modified/boost/libs/chrono/src/chrono.cpp +15 -0
  663. data/src/cxx_supportlib/vendor-modified/boost/libs/chrono/src/process_cpu_clocks.cpp +18 -0
  664. data/src/cxx_supportlib/vendor-modified/boost/libs/chrono/src/thread_clock.cpp +19 -0
  665. data/src/cxx_supportlib/vendor-modified/boost/libs/random/src/random_device.cpp +250 -0
  666. data/src/cxx_supportlib/vendor-modified/boost/pointer_cast.hpp +121 -0
  667. data/src/cxx_supportlib/vendor-modified/boost/random.hpp +91 -0
  668. data/src/cxx_supportlib/vendor-modified/boost/random/additive_combine.hpp +283 -0
  669. data/src/cxx_supportlib/vendor-modified/boost/random/bernoulli_distribution.hpp +197 -0
  670. data/src/cxx_supportlib/vendor-modified/boost/random/beta_distribution.hpp +184 -0
  671. data/src/cxx_supportlib/vendor-modified/boost/random/binomial_distribution.hpp +434 -0
  672. data/src/cxx_supportlib/vendor-modified/boost/random/cauchy_distribution.hpp +214 -0
  673. data/src/cxx_supportlib/vendor-modified/boost/random/chi_squared_distribution.hpp +209 -0
  674. data/src/cxx_supportlib/vendor-modified/boost/random/detail/auto_link.hpp +40 -0
  675. data/src/cxx_supportlib/vendor-modified/boost/random/detail/config.hpp +18 -0
  676. data/src/cxx_supportlib/vendor-modified/boost/random/detail/const_mod.hpp +216 -0
  677. data/src/cxx_supportlib/vendor-modified/boost/random/detail/disable_warnings.hpp +29 -0
  678. data/src/cxx_supportlib/vendor-modified/boost/random/detail/enable_warnings.hpp +22 -0
  679. data/src/cxx_supportlib/vendor-modified/boost/random/detail/generator_bits.hpp +36 -0
  680. data/src/cxx_supportlib/vendor-modified/boost/random/detail/generator_seed_seq.hpp +40 -0
  681. data/src/cxx_supportlib/vendor-modified/boost/random/detail/int_float_pair.hpp +121 -0
  682. data/src/cxx_supportlib/vendor-modified/boost/random/detail/integer_log2.hpp +84 -0
  683. data/src/cxx_supportlib/vendor-modified/boost/random/detail/iterator_mixin.hpp +45 -0
  684. data/src/cxx_supportlib/vendor-modified/boost/random/detail/large_arithmetic.hpp +122 -0
  685. data/src/cxx_supportlib/vendor-modified/boost/random/detail/operators.hpp +84 -0
  686. data/src/cxx_supportlib/vendor-modified/boost/random/detail/polynomial.hpp +384 -0
  687. data/src/cxx_supportlib/vendor-modified/boost/random/detail/ptr_helper.hpp +67 -0
  688. data/src/cxx_supportlib/vendor-modified/boost/random/detail/seed.hpp +115 -0
  689. data/src/cxx_supportlib/vendor-modified/boost/random/detail/seed_impl.hpp +398 -0
  690. data/src/cxx_supportlib/vendor-modified/boost/random/detail/signed_unsigned_tools.hpp +89 -0
  691. data/src/cxx_supportlib/vendor-modified/boost/random/detail/uniform_int_float.hpp +76 -0
  692. data/src/cxx_supportlib/vendor-modified/boost/random/detail/vector_io.hpp +75 -0
  693. data/src/cxx_supportlib/vendor-modified/boost/random/discard_block.hpp +241 -0
  694. data/src/cxx_supportlib/vendor-modified/boost/random/discrete_distribution.hpp +636 -0
  695. data/src/cxx_supportlib/vendor-modified/boost/random/exponential_distribution.hpp +386 -0
  696. data/src/cxx_supportlib/vendor-modified/boost/random/extreme_value_distribution.hpp +177 -0
  697. data/src/cxx_supportlib/vendor-modified/boost/random/fisher_f_distribution.hpp +183 -0
  698. data/src/cxx_supportlib/vendor-modified/boost/random/gamma_distribution.hpp +292 -0
  699. data/src/cxx_supportlib/vendor-modified/boost/random/generate_canonical.hpp +96 -0
  700. data/src/cxx_supportlib/vendor-modified/boost/random/geometric_distribution.hpp +267 -0
  701. data/src/cxx_supportlib/vendor-modified/boost/random/hyperexponential_distribution.hpp +883 -0
  702. data/src/cxx_supportlib/vendor-modified/boost/random/independent_bits.hpp +271 -0
  703. data/src/cxx_supportlib/vendor-modified/boost/random/inversive_congruential.hpp +267 -0
  704. data/src/cxx_supportlib/vendor-modified/boost/random/lagged_fibonacci.hpp +537 -0
  705. data/src/cxx_supportlib/vendor-modified/boost/random/laplace_distribution.hpp +175 -0
  706. data/src/cxx_supportlib/vendor-modified/boost/random/linear_congruential.hpp +466 -0
  707. data/src/cxx_supportlib/vendor-modified/boost/random/linear_feedback_shift.hpp +217 -0
  708. data/src/cxx_supportlib/vendor-modified/boost/random/lognormal_distribution.hpp +254 -0
  709. data/src/cxx_supportlib/vendor-modified/boost/random/mersenne_twister.hpp +682 -0
  710. data/src/cxx_supportlib/vendor-modified/boost/random/negative_binomial_distribution.hpp +220 -0
  711. data/src/cxx_supportlib/vendor-modified/boost/random/non_central_chi_squared_distribution.hpp +221 -0
  712. data/src/cxx_supportlib/vendor-modified/boost/random/normal_distribution.hpp +374 -0
  713. data/src/cxx_supportlib/vendor-modified/boost/random/piecewise_constant_distribution.hpp +466 -0
  714. data/src/cxx_supportlib/vendor-modified/boost/random/piecewise_linear_distribution.hpp +531 -0
  715. data/src/cxx_supportlib/vendor-modified/boost/random/poisson_distribution.hpp +360 -0
  716. data/src/cxx_supportlib/vendor-modified/boost/random/random_device.hpp +143 -0
  717. data/src/cxx_supportlib/vendor-modified/boost/random/random_number_generator.hpp +73 -0
  718. data/src/cxx_supportlib/vendor-modified/boost/random/ranlux.hpp +99 -0
  719. data/src/cxx_supportlib/vendor-modified/boost/random/seed_seq.hpp +118 -0
  720. data/src/cxx_supportlib/vendor-modified/boost/random/shuffle_order.hpp +269 -0
  721. data/src/cxx_supportlib/vendor-modified/boost/random/shuffle_output.hpp +51 -0
  722. data/src/cxx_supportlib/vendor-modified/boost/random/student_t_distribution.hpp +180 -0
  723. data/src/cxx_supportlib/vendor-modified/boost/random/subtract_with_carry.hpp +613 -0
  724. data/src/cxx_supportlib/vendor-modified/boost/random/taus88.hpp +45 -0
  725. data/src/cxx_supportlib/vendor-modified/boost/random/traits.hpp +107 -0
  726. data/src/cxx_supportlib/vendor-modified/boost/random/triangle_distribution.hpp +232 -0
  727. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_01.hpp +257 -0
  728. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_int.hpp +99 -0
  729. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_int_distribution.hpp +419 -0
  730. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_on_sphere.hpp +284 -0
  731. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_real.hpp +82 -0
  732. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_real_distribution.hpp +241 -0
  733. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_smallint.hpp +307 -0
  734. data/src/cxx_supportlib/vendor-modified/boost/random/variate_generator.hpp +122 -0
  735. data/src/cxx_supportlib/vendor-modified/boost/random/weibull_distribution.hpp +177 -0
  736. data/src/cxx_supportlib/vendor-modified/boost/random/xor_combine.hpp +208 -0
  737. data/src/cxx_supportlib/vendor-modified/boost/ratio.hpp +14 -0
  738. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/ratio_io.hpp +1342 -0
  739. data/src/cxx_supportlib/vendor-modified/boost/ratio/include.hpp +16 -0
  740. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/abs.hpp +30 -0
  741. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/arithmetic.hpp +22 -0
  742. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/comparison.hpp +19 -0
  743. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/divides.hpp +30 -0
  744. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/equal_to.hpp +30 -0
  745. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/gcd.hpp +30 -0
  746. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/greater.hpp +30 -0
  747. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/greater_equal.hpp +30 -0
  748. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/lcm.hpp +30 -0
  749. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/less.hpp +30 -0
  750. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/less_equal.hpp +30 -0
  751. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/minus.hpp +30 -0
  752. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/negate.hpp +30 -0
  753. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/not_equal_to.hpp +30 -0
  754. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/numeric_cast.hpp +31 -0
  755. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/plus.hpp +30 -0
  756. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/rational_c_tag.hpp +25 -0
  757. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/rational_constant.hpp +15 -0
  758. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/sign.hpp +30 -0
  759. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/times.hpp +30 -0
  760. data/src/cxx_supportlib/vendor-modified/boost/ratio/ratio_io.hpp +1076 -0
  761. data/src/cxx_supportlib/vendor-modified/boost/rational.hpp +1002 -0
  762. data/src/cxx_supportlib/vendor-modified/modp_b64.cpp +11 -0
  763. data/src/helper-scripts/rack-preloader.rb +1 -1
  764. data/src/nginx_module/{ConfigurationCommands.c → ConfigGeneral/AutoGeneratedDefinitions.c} +351 -134
  765. data/src/nginx_module/{ConfigurationCommands.c.cxxcodebuilder → ConfigGeneral/AutoGeneratedDefinitions.c.cxxcodebuilder} +14 -25
  766. data/src/nginx_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.c +396 -0
  767. data/src/nginx_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.c.cxxcodebuilder +160 -0
  768. data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c +831 -0
  769. data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c.cxxcodebuilder +168 -0
  770. data/src/nginx_module/ConfigGeneral/ManifestGeneration.c +887 -0
  771. data/src/nginx_module/ConfigGeneral/ManifestGeneration.h +100 -0
  772. data/src/nginx_module/Configuration.c +165 -621
  773. data/src/nginx_module/Configuration.h +43 -33
  774. data/src/nginx_module/ContentHandler.c +46 -40
  775. data/src/nginx_module/LocationConfig/AutoGeneratedCreateFunction.c +282 -0
  776. data/src/nginx_module/{CreateLocationConfig.c.cxxcodebuilder → LocationConfig/AutoGeneratedCreateFunction.c.cxxcodebuilder} +43 -17
  777. data/src/nginx_module/{CacheLocationConfig.c → LocationConfig/AutoGeneratedHeaderSerialization.c} +148 -180
  778. data/src/nginx_module/{CacheLocationConfig.c.cxxcodebuilder → LocationConfig/AutoGeneratedHeaderSerialization.c.cxxcodebuilder} +13 -11
  779. data/src/nginx_module/LocationConfig/AutoGeneratedManifestGeneration.c +595 -0
  780. data/src/nginx_module/LocationConfig/AutoGeneratedManifestGeneration.c.cxxcodebuilder +190 -0
  781. data/src/nginx_module/{MergeLocationConfig.c → LocationConfig/AutoGeneratedMergeFunction.c} +32 -42
  782. data/src/nginx_module/{MergeLocationConfig.c.cxxcodebuilder → LocationConfig/AutoGeneratedMergeFunction.c.cxxcodebuilder} +18 -11
  783. data/src/nginx_module/LocationConfig/AutoGeneratedStruct.h +220 -0
  784. data/src/nginx_module/{LocationConfig.h.cxxcodebuilder → LocationConfig/AutoGeneratedStruct.h.cxxcodebuilder} +70 -48
  785. data/src/nginx_module/MainConfig/AutoGeneratedCreateFunction.c +163 -0
  786. data/src/nginx_module/MainConfig/AutoGeneratedCreateFunction.c.cxxcodebuilder +125 -0
  787. data/src/nginx_module/MainConfig/AutoGeneratedManifestGeneration.c +303 -0
  788. data/src/nginx_module/MainConfig/AutoGeneratedManifestGeneration.c.cxxcodebuilder +173 -0
  789. data/src/nginx_module/MainConfig/AutoGeneratedStruct.h +133 -0
  790. data/src/nginx_module/MainConfig/AutoGeneratedStruct.h.cxxcodebuilder +154 -0
  791. data/src/nginx_module/config +13 -4
  792. data/src/nginx_module/ngx_http_passenger_module.c +154 -84
  793. data/src/ruby_supportlib/phusion_passenger.rb +2 -2
  794. data/src/ruby_supportlib/phusion_passenger/apache2/config_options.rb +613 -131
  795. data/src/ruby_supportlib/phusion_passenger/apache2/config_utils.rb +52 -0
  796. data/src/ruby_supportlib/phusion_passenger/common_library.rb +18 -4
  797. data/src/ruby_supportlib/phusion_passenger/config/main.rb +2 -0
  798. data/src/ruby_supportlib/phusion_passenger/config/system_properties_command.rb +104 -0
  799. data/src/ruby_supportlib/phusion_passenger/constants.rb +0 -2
  800. data/src/ruby_supportlib/phusion_passenger/nginx/config_options.rb +470 -138
  801. data/src/ruby_supportlib/phusion_passenger/packaging.rb +1 -0
  802. data/src/ruby_supportlib/phusion_passenger/platform_info.rb +17 -0
  803. data/src/ruby_supportlib/phusion_passenger/platform_info/apache.rb +11 -1
  804. data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +7 -7
  805. data/src/ruby_supportlib/phusion_passenger/platform_info/networking.rb +293 -0
  806. data/src/ruby_supportlib/phusion_passenger/standalone/config_options_list.rb +8 -54
  807. data/src/ruby_supportlib/phusion_passenger/standalone/start_command.rb +1 -5
  808. data/src/ruby_supportlib/phusion_passenger/standalone/start_command/builtin_engine.rb +4 -7
  809. data/src/ruby_supportlib/phusion_passenger/vendor/daemon_controller.rb +1 -1
  810. data/src/schema_printer/SchemaPrinterMain.cpp +78 -0
  811. data/src/schema_printer/SchemaPrinterMain.cpp.cxxcodebuilder +116 -0
  812. metadata +671 -30
  813. data/src/apache2_module/Configuration.cpp +0 -737
  814. data/src/apache2_module/Configuration.hpp +0 -274
  815. data/src/apache2_module/ConfigurationCommands.cpp +0 -199
  816. data/src/apache2_module/ConfigurationFields.hpp +0 -187
  817. data/src/apache2_module/ConfigurationSetters.cpp +0 -436
  818. data/src/apache2_module/ConfigurationSetters.cpp.cxxcodebuilder +0 -144
  819. data/src/apache2_module/CreateDirConfig.cpp +0 -68
  820. data/src/apache2_module/CreateDirConfig.cpp.cxxcodebuilder +0 -81
  821. data/src/apache2_module/MergeDirConfig.cpp +0 -155
  822. data/src/apache2_module/SetHeaders.cpp +0 -111
  823. data/src/nginx_module/CreateLocationConfig.c +0 -100
  824. data/src/nginx_module/LocationConfig.h +0 -95
@@ -44,41 +44,13 @@ using namespace boost;
44
44
  *
45
45
  ****************************/
46
46
 
47
+ Controller::~Controller() {
48
+ ev_check_stop(getLoop(), &checkWatcher);
49
+ delete singleAppModeConfig;
50
+ }
47
51
 
48
- Controller::Controller(ServerKit::Context *context, const ControllerSchema &schema,
49
- const Json::Value &initialConfig)
50
- : ParentClass(context, schema, initialConfig),
51
-
52
- mainConfig(config),
53
- requestConfig(new ControllerRequestConfig(config)),
54
- poolOptionsCache(4),
55
-
56
- PASSENGER_APP_GROUP_NAME("!~PASSENGER_APP_GROUP_NAME"),
57
- PASSENGER_ENV_VARS("!~PASSENGER_ENV_VARS"),
58
- PASSENGER_MAX_REQUESTS("!~PASSENGER_MAX_REQUESTS"),
59
- PASSENGER_SHOW_VERSION_IN_HEADER("!~PASSENGER_SHOW_VERSION_IN_HEADER"),
60
- PASSENGER_STICKY_SESSIONS("!~PASSENGER_STICKY_SESSIONS"),
61
- PASSENGER_STICKY_SESSIONS_COOKIE_NAME("!~PASSENGER_STICKY_SESSIONS_COOKIE_NAME"),
62
- PASSENGER_REQUEST_OOB_WORK("!~Request-OOB-Work"),
63
- UNION_STATION_SUPPORT("!~UNION_STATION_SUPPORT"),
64
- REMOTE_ADDR("!~REMOTE_ADDR"),
65
- REMOTE_PORT("!~REMOTE_PORT"),
66
- REMOTE_USER("!~REMOTE_USER"),
67
- FLAGS("!~FLAGS"),
68
- HTTP_COOKIE("cookie"),
69
- HTTP_DATE("date"),
70
- HTTP_HOST("host"),
71
- HTTP_CONTENT_LENGTH("content-length"),
72
- HTTP_CONTENT_TYPE("content-type"),
73
- HTTP_EXPECT("expect"),
74
- HTTP_CONNECTION("connection"),
75
- HTTP_STATUS("status"),
76
- HTTP_TRANSFER_ENCODING("transfer-encoding"),
77
-
78
- turboCaching(),
79
- resourceLocator(NULL)
80
- /**************************/
81
- {
52
+ void
53
+ Controller::preinitialize() {
82
54
  ev_check_init(&checkWatcher, onEventLoopCheck);
83
55
  ev_set_priority(&checkWatcher, EV_MAXPRI);
84
56
  ev_check_start(getLoop(), &checkWatcher);
@@ -91,10 +63,30 @@ Controller::Controller(ServerKit::Context *context, const ControllerSchema &sche
91
63
 
92
64
  timeBeforeBlocking = 0;
93
65
  #endif
94
- }
95
66
 
96
- Controller::~Controller() {
97
- ev_check_stop(getLoop(), &checkWatcher);
67
+ PASSENGER_APP_GROUP_NAME = "!~PASSENGER_APP_GROUP_NAME";
68
+ PASSENGER_ENV_VARS = "!~PASSENGER_ENV_VARS";
69
+ PASSENGER_MAX_REQUESTS = "!~PASSENGER_MAX_REQUESTS";
70
+ PASSENGER_SHOW_VERSION_IN_HEADER = "!~PASSENGER_SHOW_VERSION_IN_HEADER";
71
+ PASSENGER_STICKY_SESSIONS = "!~PASSENGER_STICKY_SESSIONS";
72
+ PASSENGER_STICKY_SESSIONS_COOKIE_NAME = "!~PASSENGER_STICKY_SESSIONS_COOKIE_NAME";
73
+ PASSENGER_REQUEST_OOB_WORK = "!~Request-OOB-Work";
74
+ UNION_STATION_SUPPORT = "!~UNION_STATION_SUPPORT";
75
+ REMOTE_ADDR = "!~REMOTE_ADDR";
76
+ REMOTE_PORT = "!~REMOTE_PORT";
77
+ REMOTE_USER = "!~REMOTE_USER";
78
+ FLAGS = "!~FLAGS";
79
+ HTTP_COOKIE = "cookie";
80
+ HTTP_DATE = "date";
81
+ HTTP_HOST = "host";
82
+ HTTP_CONTENT_LENGTH = "content-length";
83
+ HTTP_CONTENT_TYPE = "content-type";
84
+ HTTP_EXPECT = "expect";
85
+ HTTP_CONNECTION = "connection";
86
+ HTTP_STATUS = "status";
87
+ HTTP_TRANSFER_ENCODING = "transfer-encoding";
88
+
89
+ /**************************/
98
90
  }
99
91
 
100
92
  void
@@ -112,17 +104,15 @@ Controller::initialize() {
112
104
 
113
105
  ParentClass::initialize();
114
106
  turboCaching.initialize(config["turbocaching"].asBool());
115
- getContext()->defaultFileBufferedChannelConfig.bufferDir =
116
- config["data_buffer_dir"].asString();
117
107
 
118
- if (requestConfig->singleAppMode) {
108
+ if (mainConfig.singleAppMode) {
119
109
  boost::shared_ptr<Options> options = boost::make_shared<Options>();
120
110
  fillPoolOptionsFromConfigCaches(*options, mainConfig.pool, requestConfig);
121
111
 
122
- string appRoot = config["app_root"].asString();
123
- string environment = config["environment"].asString();
124
- string appType = config["app_type"].asString();
125
- string startupFile = config["startup_file"].asString();
112
+ string appRoot = singleAppModeConfig->get("app_root").asString();
113
+ string environment = config["default_environment"].asString();
114
+ string appType = singleAppModeConfig->get("app_type").asString();
115
+ string startupFile = singleAppModeConfig->get("startup_file").asString();
126
116
 
127
117
  options->appRoot = appRoot;
128
118
  options->environment = environment;
@@ -73,7 +73,6 @@ public:
73
73
  bool dechunkResponse: 1;
74
74
  bool requestBodyBuffering: 1;
75
75
  bool https: 1;
76
- bool showVersionInHeader: 1;
77
76
  bool stickySession: 1;
78
77
 
79
78
  // Range: 0..MAX_SESSION_CHECKOUT_TRY
@@ -36,6 +36,8 @@
36
36
  #include <selinux/selinux.h>
37
37
  #endif
38
38
 
39
+ #include <boost/config.hpp>
40
+ #include <boost/scoped_ptr.hpp>
39
41
  #include <sys/types.h>
40
42
  #include <sys/socket.h>
41
43
  #include <sys/stat.h>
@@ -74,6 +76,8 @@
74
76
  #include <Shared/Fundamentals/Initialization.h>
75
77
  #include <Shared/ApiServerUtils.h>
76
78
  #include <Constants.h>
79
+ #include <LoggingKit/Context.h>
80
+ #include <ConfigKit/SubComponentUtils.h>
77
81
  #include <ServerKit/Server.h>
78
82
  #include <ServerKit/AcceptLoadBalancer.h>
79
83
  #include <ConfigKit/VariantMapUtils.h>
@@ -81,6 +85,7 @@
81
85
  #include <FileDescriptor.h>
82
86
  #include <ResourceLocator.h>
83
87
  #include <BackgroundEventLoop.cpp>
88
+ #include <FileTools/FileManip.h>
84
89
  #include <Exceptions.h>
85
90
  #include <Utils.h>
86
91
  #include <Utils/Timer.h>
@@ -90,9 +95,12 @@
90
95
  #include <Core/OptionParser.h>
91
96
  #include <Core/Controller.h>
92
97
  #include <Core/ApiServer.h>
98
+ #include <Core/Config.h>
99
+ #include <Core/ConfigChange.h>
93
100
  #include <Core/ApplicationPool/Pool.h>
94
101
  #include <Core/UnionStation/Context.h>
95
102
  #include <Core/SecurityUpdateChecker.h>
103
+ #include <Core/AdminPanelConnector.h>
96
104
 
97
105
  using namespace boost;
98
106
  using namespace oxt;
@@ -120,7 +128,6 @@ namespace Core {
120
128
  struct ApiWorkingObjects {
121
129
  BackgroundEventLoop *bgloop;
122
130
  ServerKit::Context *serverKitContext;
123
- ServerKit::HttpServerSchema apiServerSchema;
124
131
  ApiServer::ApiServer *apiServer;
125
132
 
126
133
  ApiWorkingObjects()
@@ -133,8 +140,9 @@ namespace Core {
133
140
  struct WorkingObjects {
134
141
  int serverFds[SERVER_KIT_MAX_SERVER_ENDPOINTS];
135
142
  int apiServerFds[SERVER_KIT_MAX_SERVER_ENDPOINTS];
136
- string password;
137
- ApiAccountDatabase apiAccountDatabase;
143
+ string controllerSecureHeadersPassword;
144
+
145
+ boost::mutex configSyncher;
138
146
 
139
147
  ResourceLocator resourceLocator;
140
148
  RandomGeneratorPtr randomGenerator;
@@ -142,9 +150,9 @@ namespace Core {
142
150
  SpawningKit::ConfigPtr spawningKitConfig;
143
151
  SpawningKit::FactoryPtr spawningKitFactory;
144
152
  PoolPtr appPool;
153
+ Json::Value singleAppModeConfig;
145
154
 
146
155
  ServerKit::AcceptLoadBalancer<Controller> loadBalancer;
147
- ControllerSchema controllerSchema;
148
156
  vector<ThreadWorkingObjects> threadWorkingObjects;
149
157
  struct ev_signal sigintWatcher;
150
158
  struct ev_signal sigtermWatcher;
@@ -159,6 +167,8 @@ namespace Core {
159
167
  oxt::thread *prestarterThread;
160
168
 
161
169
  SecurityUpdateChecker *securityUpdateChecker;
170
+ AdminPanelConnector *adminPanelConnector;
171
+ oxt::thread *adminPanelConnectorThread;
162
172
 
163
173
  WorkingObjects()
164
174
  : exitEvent(__FILE__, __LINE__, "WorkingObjects: exitEvent"),
@@ -166,7 +176,10 @@ namespace Core {
166
176
  terminationCount(0),
167
177
  shutdownCounter(0),
168
178
  prestarterThread(NULL),
169
- securityUpdateChecker(NULL)
179
+ securityUpdateChecker(NULL),
180
+ adminPanelConnector(NULL),
181
+ adminPanelConnectorThread(NULL)
182
+ /*******************/
170
183
  {
171
184
  for (unsigned int i = 0; i < SERVER_KIT_MAX_SERVER_ENDPOINTS; i++) {
172
185
  serverFds[i] = -1;
@@ -176,9 +189,12 @@ namespace Core {
176
189
 
177
190
  ~WorkingObjects() {
178
191
  delete prestarterThread;
179
- if (securityUpdateChecker) {
180
- delete securityUpdateChecker;
181
- }
192
+ delete adminPanelConnectorThread;
193
+ delete adminPanelConnector;
194
+ delete securityUpdateChecker;
195
+
196
+ /*******************/
197
+ /*******************/
182
198
 
183
199
  vector<ThreadWorkingObjects>::iterator it, end = threadWorkingObjects.end();
184
200
  for (it = threadWorkingObjects.begin(); it != end; it++) {
@@ -197,9 +213,12 @@ namespace Core {
197
213
 
198
214
  using namespace Passenger::Core;
199
215
 
200
- static VariantMap *agentsOptions;
216
+ static Schema *coreSchema;
217
+ static ConfigKit::Store *coreConfig;
201
218
  static WorkingObjects *workingObjects;
202
219
 
220
+ #include <Core/ConfigChange.cpp>
221
+
203
222
 
204
223
  /***** Core stuff *****/
205
224
 
@@ -207,6 +226,7 @@ static void waitForExitEvent();
207
226
  static void cleanup();
208
227
  static void deletePidFile();
209
228
  static void abortLongRunningConnections(const ApplicationPool2::ProcessPtr &process);
229
+ static void serverShutdownFinished();
210
230
  static void controllerShutdownFinished(Controller *controller);
211
231
  static void apiServerShutdownFinished(Core::ApiServer::ApiServer *server);
212
232
  static void printInfoInThread();
@@ -214,73 +234,75 @@ static void printInfoInThread();
214
234
  static void
215
235
  initializePrivilegedWorkingObjects() {
216
236
  TRACE_POINT();
217
- const VariantMap &options = *agentsOptions;
218
237
  WorkingObjects *wo = workingObjects = new WorkingObjects();
219
238
 
220
- wo->prestarterThread = NULL;
221
-
222
- wo->password = options.get("core_password", false);
223
- if (wo->password == "-") {
224
- wo->password.clear();
225
- } else if (wo->password.empty() && options.has("core_password_file")) {
226
- wo->password = strip(readAll(options.get("core_password_file")));
227
- }
228
-
229
- vector<string> authorizations = options.getStrSet("core_authorizations",
230
- false);
231
- string description;
232
-
233
- UPDATE_TRACE_POINT();
234
- foreach (description, authorizations) {
235
- try {
236
- wo->apiAccountDatabase.add(description);
237
- } catch (const ArgumentException &e) {
238
- throw std::runtime_error(e.what());
239
- }
239
+ Json::Value password = coreConfig->get("controller_secure_headers_password");
240
+ if (password.isString()) {
241
+ wo->controllerSecureHeadersPassword = password.asString();
242
+ } else if (password.isObject()) {
243
+ wo->controllerSecureHeadersPassword = strip(readAll(password["path"].asString()));
240
244
  }
241
245
  }
242
246
 
243
247
  static void
244
248
  initializeSingleAppMode() {
245
249
  TRACE_POINT();
246
- VariantMap &options = *agentsOptions;
247
250
 
248
- if (options.getBool("multi_app")) {
251
+ if (coreConfig->get("multi_app").asBool()) {
249
252
  P_NOTICE(SHORT_PROGRAM_NAME " core running in multi-application mode.");
250
253
  return;
251
254
  }
252
255
 
253
- if (!options.has("app_type")) {
256
+ WorkingObjects *wo = workingObjects;
257
+ string appType, startupFile;
258
+ string appRoot = coreConfig->get("single_app_mode_app_root").asString();
259
+
260
+ if (coreConfig->get("single_app_mode_app_type").isNull()) {
254
261
  P_DEBUG("Autodetecting application type...");
255
262
  AppTypeDetector detector(NULL, 0);
256
- PassengerAppType appType = detector.checkAppRoot(options.get("app_root"));
257
- if (appType == PAT_NONE || appType == PAT_ERROR) {
263
+ PassengerAppType appTypeEnum = detector.checkAppRoot(appRoot);
264
+ if (appTypeEnum == PAT_NONE || appTypeEnum == PAT_ERROR) {
258
265
  fprintf(stderr, "ERROR: unable to autodetect what kind of application "
259
266
  "lives in %s. Please specify information about the app using "
260
267
  "--app-type and --startup-file, or specify a correct location to "
261
268
  "the application you want to serve.\n"
262
269
  "Type '" SHORT_PROGRAM_NAME " core --help' for more information.\n",
263
- options.get("app_root").c_str());
270
+ appRoot.c_str());
264
271
  exit(1);
265
272
  }
266
273
 
267
- options.set("app_type", getAppTypeName(appType));
268
- options.set("startup_file", options.get("app_root") + "/" + getAppTypeStartupFile(appType));
274
+ appType = getAppTypeName(appTypeEnum);
275
+ } else {
276
+ appType = coreConfig->get("single_app_mode_app_type").asString();
277
+ }
278
+
279
+ if (coreConfig->get("single_app_mode_startup_file").isNull()) {
280
+ startupFile = appRoot + "/" + getAppTypeStartupFile(getAppType(appType));
281
+ } else {
282
+ startupFile = coreConfig->get("single_app_mode_startup_file").asString();
269
283
  }
284
+ if (!fileExists(startupFile)) {
285
+ fprintf(stderr, "ERROR: unable to find expected startup file %s."
286
+ " Please specify its correct path with --startup-file.\n",
287
+ startupFile.c_str());
288
+ exit(1);
289
+ }
290
+
291
+ wo->singleAppModeConfig["app_root"] = appRoot;
292
+ wo->singleAppModeConfig["app_type"] = appType;
293
+ wo->singleAppModeConfig["startup_file"] = startupFile;
270
294
 
271
295
  P_NOTICE(SHORT_PROGRAM_NAME " core running in single-application mode.");
272
- P_NOTICE("Serving app : " << options.get("app_root"));
273
- P_NOTICE("App type : " << options.get("app_type"));
274
- P_NOTICE("App startup file: " << options.get("startup_file"));
296
+ P_NOTICE("Serving app : " << appRoot);
297
+ P_NOTICE("App type : " << appType);
298
+ P_NOTICE("App startup file: " << startupFile);
275
299
  }
276
300
 
277
301
  static void
278
302
  setUlimits() {
279
303
  TRACE_POINT();
280
- VariantMap &options = *agentsOptions;
281
-
282
- if (options.has("core_file_descriptor_ulimit")) {
283
- unsigned int number = options.getUint("core_file_descriptor_ulimit");
304
+ unsigned int number = coreConfig->get("file_descriptor_ulimit").asUInt();
305
+ if (number != 0) {
284
306
  struct rlimit limit;
285
307
  int ret;
286
308
 
@@ -388,8 +410,10 @@ static void
388
410
  startListening() {
389
411
  TRACE_POINT();
390
412
  WorkingObjects *wo = workingObjects;
391
- vector<string> addresses = agentsOptions->getStrSet("core_addresses");
392
- vector<string> apiAddresses = agentsOptions->getStrSet("core_api_addresses", false);
413
+ const Json::Value addresses = coreConfig->get("controller_addresses");
414
+ const Json::Value apiAddresses = coreConfig->get("api_server_addresses");
415
+ Json::Value::const_iterator it;
416
+ unsigned int i;
393
417
 
394
418
  #ifdef USE_SELINUX
395
419
  // Set SELinux context on the first socket that we create
@@ -397,32 +421,33 @@ startListening() {
397
421
  setSelinuxSocketContext();
398
422
  #endif
399
423
 
400
- for (unsigned int i = 0; i < addresses.size(); i++) {
401
- wo->serverFds[i] = createServer(addresses[i], agentsOptions->getInt("socket_backlog"), true,
424
+ for (it = addresses.begin(), i = 0; it != addresses.end(); it++, i++) {
425
+ wo->serverFds[i] = createServer(it->asString(),
426
+ coreConfig->get("controller_socket_backlog").asUInt(), true,
402
427
  __FILE__, __LINE__);
403
428
  #ifdef USE_SELINUX
404
429
  resetSelinuxSocketContext();
405
- if (i == 0 && getSocketAddressType(addresses[0]) == SAT_UNIX) {
430
+ if (i == 0 && getSocketAddressType(it->asString()) == SAT_UNIX) {
406
431
  // setSelinuxSocketContext() sets the context of the
407
432
  // socket file descriptor but not the file on the filesystem.
408
433
  // So we relabel the socket file here.
409
- selinuxRelabelFile(parseUnixSocketAddress(addresses[0]),
434
+ selinuxRelabelFile(parseUnixSocketAddress(it->asString()),
410
435
  "passenger_instance_httpd_socket_t");
411
436
  }
412
437
  #endif
413
438
  P_LOG_FILE_DESCRIPTOR_PURPOSE(wo->serverFds[i],
414
- "Server address: " << addresses[i]);
415
- if (getSocketAddressType(addresses[i]) == SAT_UNIX) {
416
- makeFileWorldReadableAndWritable(parseUnixSocketAddress(addresses[i]));
439
+ "Server address: " << it->asString());
440
+ if (getSocketAddressType(it->asString()) == SAT_UNIX) {
441
+ makeFileWorldReadableAndWritable(parseUnixSocketAddress(it->asString()));
417
442
  }
418
443
  }
419
- for (unsigned int i = 0; i < apiAddresses.size(); i++) {
420
- wo->apiServerFds[i] = createServer(apiAddresses[i], 0, true,
444
+ for (it = apiAddresses.begin(), i = 0; it != apiAddresses.end(); it++, i++) {
445
+ wo->apiServerFds[i] = createServer(it->asString(), 0, true,
421
446
  __FILE__, __LINE__);
422
447
  P_LOG_FILE_DESCRIPTOR_PURPOSE(wo->apiServerFds[i],
423
- "ApiServer address: " << apiAddresses[i]);
424
- if (getSocketAddressType(apiAddresses[i]) == SAT_UNIX) {
425
- makeFileWorldReadableAndWritable(parseUnixSocketAddress(apiAddresses[i]));
448
+ "ApiServer address: " << it->asString());
449
+ if (getSocketAddressType(it->asString()) == SAT_UNIX) {
450
+ makeFileWorldReadableAndWritable(parseUnixSocketAddress(it->asString()));
426
451
  }
427
452
  }
428
453
  }
@@ -430,16 +455,18 @@ startListening() {
430
455
  static void
431
456
  createPidFile() {
432
457
  TRACE_POINT();
433
- string pidFile = agentsOptions->get("core_pid_file", false);
434
- if (!pidFile.empty()) {
458
+ Json::Value pidFile = coreConfig->get("pid_file");
459
+ if (!pidFile.isNull()) {
435
460
  char pidStr[32];
436
461
 
437
462
  snprintf(pidStr, sizeof(pidStr), "%lld", (long long) getpid());
438
463
 
439
- int fd = syscalls::open(pidFile.c_str(), O_WRONLY | O_CREAT | O_TRUNC, 0644);
464
+ int fd = syscalls::open(pidFile.asCString(),
465
+ O_WRONLY | O_CREAT | O_TRUNC, 0644);
440
466
  if (fd == -1) {
441
467
  int e = errno;
442
- throw FileSystemException("Cannot create PID file " + pidFile, e, pidFile);
468
+ throw FileSystemException("Cannot create PID file "
469
+ + pidFile.asString(), e, pidFile.asString());
443
470
  }
444
471
 
445
472
  UPDATE_TRACE_POINT();
@@ -599,6 +626,7 @@ spawningKitErrorHandler(const SpawningKit::ConfigPtr &config, SpawnException &e,
599
626
  ApplicationPool2::processAndLogNewSpawnException(e, options, config);
600
627
  }
601
628
 
629
+
602
630
  static void
603
631
  initializeCurl() {
604
632
  TRACE_POINT();
@@ -612,22 +640,14 @@ initializeCurl() {
612
640
  static void
613
641
  initializeNonPrivilegedWorkingObjects() {
614
642
  TRACE_POINT();
615
- VariantMap &options = *agentsOptions;
616
643
  WorkingObjects *wo = workingObjects;
617
644
 
618
- if (options.get("server_software").find(SERVER_TOKEN_NAME) == string::npos
619
- && options.get("server_software").find(FLYING_PASSENGER_NAME) == string::npos)
620
- {
621
- options.set("server_software", options.get("server_software") +
622
- (" " SERVER_TOKEN_NAME "/" PASSENGER_VERSION));
623
- }
624
- setenv("SERVER_SOFTWARE", options.get("server_software").c_str(), 1);
625
- options.set("data_buffer_dir", absolutizePath(options.get("data_buffer_dir")));
645
+ const Json::Value addresses = coreConfig->get("controller_addresses");
646
+ const Json::Value apiAddresses = coreConfig->get("api_server_addresses");
626
647
 
627
- vector<string> addresses = options.getStrSet("core_addresses");
628
- vector<string> apiAddresses = options.getStrSet("core_api_addresses", false);
648
+ setenv("SERVER_SOFTWARE", coreConfig->get("server_software").asCString(), 1);
629
649
 
630
- wo->resourceLocator = ResourceLocator(options.get("passenger_root"));
650
+ wo->resourceLocator = ResourceLocator(coreConfig->get("passenger_root").asString());
631
651
 
632
652
  wo->randomGenerator = boost::make_shared<RandomGenerator>();
633
653
  // Check whether /dev/urandom is actually random.
@@ -638,21 +658,21 @@ initializeNonPrivilegedWorkingObjects() {
638
658
  }
639
659
 
640
660
  UPDATE_TRACE_POINT();
641
- if (options.has("ust_router_address")) {
661
+ if (!coreConfig->get("ust_router_address").isNull()) {
642
662
  wo->unionStationContext = boost::make_shared<UnionStation::Context>(
643
- options.get("ust_router_address"),
663
+ coreConfig->get("ust_router_address").asString(),
644
664
  "logging",
645
- options.get("ust_router_password"));
665
+ coreConfig->get("ust_router_password").asString());
646
666
  }
647
667
 
648
668
  UPDATE_TRACE_POINT();
649
669
  wo->spawningKitConfig = boost::make_shared<SpawningKit::Config>();
650
670
  wo->spawningKitConfig->resourceLocator = &wo->resourceLocator;
651
- wo->spawningKitConfig->agentsOptions = agentsOptions;
671
+ wo->spawningKitConfig->agentConfig = coreConfig->inspectEffectiveValues();
652
672
  wo->spawningKitConfig->errorHandler = spawningKitErrorHandler;
653
673
  wo->spawningKitConfig->unionStationContext = wo->unionStationContext;
654
674
  wo->spawningKitConfig->randomGenerator = wo->randomGenerator;
655
- wo->spawningKitConfig->instanceDir = options.get("instance_dir", false);
675
+ wo->spawningKitConfig->instanceDir = coreConfig->get("instance_dir").asString();
656
676
  if (!wo->spawningKitConfig->instanceDir.empty()) {
657
677
  wo->spawningKitConfig->instanceDir = absolutizePath(
658
678
  wo->spawningKitConfig->instanceDir);
@@ -661,26 +681,26 @@ initializeNonPrivilegedWorkingObjects() {
661
681
 
662
682
  UPDATE_TRACE_POINT();
663
683
  wo->spawningKitFactory = boost::make_shared<SpawningKit::Factory>(wo->spawningKitConfig);
664
- wo->appPool = boost::make_shared<Pool>(wo->spawningKitFactory, agentsOptions);
684
+ wo->appPool = boost::make_shared<Pool>(wo->spawningKitFactory, coreConfig->inspectEffectiveValues());
665
685
  wo->appPool->initialize();
666
- wo->appPool->setMax(options.getInt("max_pool_size"));
667
- wo->appPool->setMaxIdleTime(options.getInt("pool_idle_time") * 1000000ULL);
668
- wo->appPool->enableSelfChecking(options.getBool("selfchecks"));
686
+ wo->appPool->setMax(coreConfig->get("max_pool_size").asInt());
687
+ wo->appPool->setMaxIdleTime(coreConfig->get("pool_idle_time").asInt() * 1000000ULL);
688
+ wo->appPool->enableSelfChecking(coreConfig->get("pool_selfchecks").asBool());
669
689
  wo->appPool->abortLongRunningConnectionsCallback = abortLongRunningConnections;
670
690
 
671
691
  UPDATE_TRACE_POINT();
672
- unsigned int nthreads = options.getInt("core_threads");
692
+ unsigned int nthreads = coreConfig->get("controller_threads").asUInt();
673
693
  BackgroundEventLoop *firstLoop = NULL; // Avoid compiler warning
674
694
  wo->threadWorkingObjects.reserve(nthreads);
675
695
  for (unsigned int i = 0; i < nthreads; i++) {
676
696
  UPDATE_TRACE_POINT();
677
697
  ThreadWorkingObjects two;
678
698
 
679
- Json::Value config = ConfigKit::variantMapToJson(wo->controllerSchema,
680
- *agentsOptions);
681
- config["thread_number"] = i + 1;
682
- config["min_spare_clients"] = 128;
683
- config["client_freelist_limit"] = 1024;
699
+ Json::Value contextConfig = coreConfig->inspectEffectiveValues();
700
+ contextConfig["secure_mode_password"] = wo->controllerSecureHeadersPassword;
701
+
702
+ Json::Value controllerConfig = coreConfig->inspectEffectiveValues();
703
+ controllerConfig["thread_number"] = i + 1;
684
704
 
685
705
  if (i == 0) {
686
706
  two.bgloop = firstLoop = new BackgroundEventLoop(true, true);
@@ -689,17 +709,22 @@ initializeNonPrivilegedWorkingObjects() {
689
709
  }
690
710
 
691
711
  UPDATE_TRACE_POINT();
692
- two.serverKitContext = new ServerKit::Context(two.bgloop->safe,
693
- two.bgloop->libuv_loop);
694
- two.serverKitContext->secureModePassword = wo->password;
695
- two.serverKitContext->defaultFileBufferedChannelConfig.bufferDir =
696
- options.get("data_buffer_dir");
697
- two.serverKitContext->defaultFileBufferedChannelConfig.threshold =
698
- options.getUint("file_buffer_threshold");
712
+ two.serverKitContext = new ServerKit::Context(
713
+ coreSchema->controllerServerKit.schema,
714
+ contextConfig,
715
+ coreSchema->controllerServerKit.translator);
716
+ two.serverKitContext->libev = two.bgloop->safe;
717
+ two.serverKitContext->libuv = two.bgloop->libuv_loop;
718
+ two.serverKitContext->initialize();
699
719
 
700
720
  UPDATE_TRACE_POINT();
701
721
  two.controller = new Core::Controller(two.serverKitContext,
702
- wo->controllerSchema, config);
722
+ coreSchema->controller.schema,
723
+ controllerConfig,
724
+ coreSchema->controller.translator,
725
+ &coreSchema->controllerSingleAppMode.schema,
726
+ &wo->singleAppModeConfig,
727
+ coreSchema->controllerSingleAppMode.translator);
703
728
  two.controller->resourceLocator = &wo->resourceLocator;
704
729
  two.controller->appPool = wo->appPool;
705
730
  two.controller->unionStationContext = wo->unionStationContext;
@@ -723,27 +748,27 @@ initializeNonPrivilegedWorkingObjects() {
723
748
  UPDATE_TRACE_POINT();
724
749
  ApiWorkingObjects *awo = &wo->apiWorkingObjects;
725
750
 
751
+ Json::Value contextConfig = coreConfig->inspectEffectiveValues();
752
+
726
753
  awo->bgloop = new BackgroundEventLoop(true, true);
727
- awo->serverKitContext = new ServerKit::Context(awo->bgloop->safe,
728
- awo->bgloop->libuv_loop);
729
- awo->serverKitContext->secureModePassword = wo->password;
730
- awo->serverKitContext->defaultFileBufferedChannelConfig.bufferDir =
731
- options.get("data_buffer_dir");
732
- awo->serverKitContext->defaultFileBufferedChannelConfig.threshold =
733
- options.getUint("file_buffer_threshold");
754
+ awo->serverKitContext = new ServerKit::Context(
755
+ coreSchema->apiServerKit.schema,
756
+ contextConfig,
757
+ coreSchema->apiServerKit.translator);
758
+ awo->serverKitContext->libev = awo->bgloop->safe;
759
+ awo->serverKitContext->libuv = awo->bgloop->libuv_loop;
760
+ awo->serverKitContext->initialize();
734
761
 
735
762
  UPDATE_TRACE_POINT();
736
763
  awo->apiServer = new Core::ApiServer::ApiServer(awo->serverKitContext,
737
- awo->apiServerSchema);
764
+ coreSchema->apiServer.schema, coreConfig->inspectEffectiveValues(),
765
+ coreSchema->apiServer.translator);
738
766
  awo->apiServer->controllers.reserve(wo->threadWorkingObjects.size());
739
767
  for (unsigned int i = 0; i < wo->threadWorkingObjects.size(); i++) {
740
768
  awo->apiServer->controllers.push_back(
741
769
  wo->threadWorkingObjects[i].controller);
742
770
  }
743
- awo->apiServer->apiAccountDatabase = &wo->apiAccountDatabase;
744
771
  awo->apiServer->appPool = wo->appPool;
745
- awo->apiServer->instanceDir = options.get("instance_dir", false);
746
- awo->apiServer->fdPassingPassword = options.get("watchdog_fd_passing_password", false);
747
772
  awo->apiServer->exitEvent = &wo->exitEvent;
748
773
  awo->apiServer->shutdownFinishCallback = apiServerShutdownFinished;
749
774
  awo->apiServer->initialize();
@@ -786,38 +811,83 @@ initializeNonPrivilegedWorkingObjects() {
786
811
  static void
787
812
  initializeSecurityUpdateChecker() {
788
813
  TRACE_POINT();
814
+ Json::Value config = coreConfig->inspectEffectiveValues();
815
+
816
+ // nginx / apache / standalone
817
+ string serverIdentifier = coreConfig->get("integration_mode").asString();
818
+ // nginx / builtin
819
+ if (!coreConfig->get("standalone_engine").isNull()) {
820
+ serverIdentifier.append(" ");
821
+ serverIdentifier.append(coreConfig->get("standalone_engine").asString());
822
+ }
823
+ if (coreConfig->get("server_software").asString().find(FLYING_PASSENGER_NAME) != string::npos) {
824
+ serverIdentifier.append(" flying");
825
+ }
826
+ config["server_identifier"] = serverIdentifier;
827
+
828
+ SecurityUpdateChecker *checker = new SecurityUpdateChecker(
829
+ coreSchema->securityUpdateChecker.schema,
830
+ config,
831
+ coreSchema->securityUpdateChecker.translator);
832
+ workingObjects->securityUpdateChecker = checker;
833
+ checker->resourceLocator = &workingObjects->resourceLocator;
834
+ checker->initialize();
835
+ checker->start();
836
+ }
789
837
 
790
- VariantMap &options = *agentsOptions;
791
- if (options.getBool("disable_security_update_check", false, false)) {
792
- P_NOTICE("Security update check disabled.");
793
- } else {
794
- string proxy = options.get("security_update_check_proxy", false);
838
+ static void
839
+ runAdminPanelConnector(AdminPanelConnector *connector) {
840
+ connector->run();
841
+ P_DEBUG("Admin panel connector shutdown finished");
842
+ serverShutdownFinished();
843
+ }
795
844
 
796
- string serverIntegration = options.get("integration_mode"); // nginx / apache / standalone
797
- string standaloneEngine = options.get("standalone_engine", false); // nginx / builtin
798
- if (!standaloneEngine.empty()) {
799
- serverIntegration.append(" " + standaloneEngine);
800
- }
801
- if (options.get("server_software").find(FLYING_PASSENGER_NAME) != string::npos) {
802
- serverIntegration.append(" flying");
803
- }
804
- string serverVersion = options.get("server_version", false); // not set in case of standalone / builtin
845
+ static void
846
+ initializeAdminPanelConnector() {
847
+ TRACE_POINT();
848
+ WorkingObjects &wo = *workingObjects;
805
849
 
806
- workingObjects->securityUpdateChecker = new SecurityUpdateChecker(workingObjects->resourceLocator, proxy, serverIntegration, serverVersion, options.get("instance_dir",false));
807
- workingObjects->securityUpdateChecker->start(24 * 60 * 60);
850
+ if (coreConfig->get("admin_panel_url").isNull()) {
851
+ return;
808
852
  }
853
+
854
+ Json::Value config = coreConfig->inspectEffectiveValues();
855
+ config["log_prefix"] = "AdminPanelConnector: ";
856
+ config["ruby"] = config["default_ruby"];
857
+
858
+ P_NOTICE("Initialize connection with " << PROGRAM_NAME " admin panel at "
859
+ << config["admin_panel_url"].asString());
860
+ AdminPanelConnector *connector = new Core::AdminPanelConnector(
861
+ coreSchema->adminPanelConnector.schema, config,
862
+ coreSchema->adminPanelConnector.translator);
863
+ connector->resourceLocator = &wo.resourceLocator;
864
+ connector->appPool = wo.appPool;
865
+ connector->configGetter = inspectConfig;
866
+ connector->initialize();
867
+ wo.shutdownCounter.fetch_add(1, boost::memory_order_relaxed);
868
+ wo.adminPanelConnector = connector;
869
+ wo.adminPanelConnectorThread = new oxt::thread(
870
+ boost::bind(runAdminPanelConnector, connector),
871
+ "Admin panel connector main loop", 128 * 1024);
809
872
  }
810
873
 
811
874
  static void
812
875
  prestartWebApps() {
813
876
  TRACE_POINT();
814
- VariantMap &options = *agentsOptions;
815
877
  WorkingObjects *wo = workingObjects;
878
+ vector<string> prestartURLs;
879
+ const Json::Value jPrestartURLs = coreConfig->get("prestart_urls");
880
+ Json::Value::const_iterator it, end = jPrestartURLs.end();
881
+
882
+ prestartURLs.reserve(jPrestartURLs.size());
883
+ for (it = jPrestartURLs.begin(); it != end; it++) {
884
+ prestartURLs.push_back(it->asString());
885
+ }
816
886
 
817
887
  boost::function<void ()> func = boost::bind(prestartWebApps,
818
888
  wo->resourceLocator,
819
- options.get("default_ruby"),
820
- options.getStrSet("prestart_urls", false)
889
+ coreConfig->get("default_ruby").asString(),
890
+ prestartURLs
821
891
  );
822
892
  wo->prestarterThread = new oxt::thread(
823
893
  boost::bind(runAndPrintExceptions, func, true)
@@ -877,14 +947,15 @@ warnIfPathVulnerable(const char *path, string &warnings) {
877
947
  * changed owner or access rights.
878
948
  */
879
949
  static void
880
- warnIfPassengerRootVulnerable(const string &passengerRoot) {
950
+ warnIfPassengerRootVulnerable() {
881
951
  TRACE_POINT();
882
952
 
883
953
  if (geteuid() != 0) {
884
954
  return; // Passenger is not root, so no escalation.
885
955
  }
886
956
 
887
- string checkPath = absolutizePath(passengerRoot);
957
+ string root = workingObjects->resourceLocator.getInstallSpec();
958
+ string checkPath = absolutizePath(root);
888
959
  // Check the Passenger root and all dirs above it for ownership and world-writeability
889
960
  string warnings;
890
961
  while (!checkPath.empty() && checkPath != "/") {
@@ -893,8 +964,9 @@ warnIfPassengerRootVulnerable(const string &passengerRoot) {
893
964
  checkPath = extractDirName(checkPath);
894
965
  }
895
966
  if (!warnings.empty()) {
896
- P_WARN("WARNING: potential privilege escalation vulnerability. Passenger is running as root, and part(s) of the passenger root path (" <<
897
- passengerRoot << ") can be changed by non-root user(s):" << warnings);
967
+ P_WARN("WARNING: potential privilege escalation vulnerability. "
968
+ PROGRAM_NAME " is running as root, and part(s) of the passenger root path ("
969
+ << root << ") can be changed by non-root user(s):" << warnings);
898
970
  }
899
971
  }
900
972
 
@@ -907,13 +979,14 @@ reportInitializationInfo() {
907
979
  "initialized",
908
980
  NULL);
909
981
  } else {
910
- vector<string> addresses = agentsOptions->getStrSet("core_addresses");
911
- vector<string> apiAddresses = agentsOptions->getStrSet("core_api_addresses", false);
912
- string address;
982
+ const Json::Value addresses = coreConfig->get("controller_addresses");
983
+ const Json::Value apiAddresses = coreConfig->get("api_server_addresses");
984
+ Json::Value::const_iterator it;
913
985
 
914
986
  P_NOTICE(SHORT_PROGRAM_NAME " core online, PID " << getpid() <<
915
987
  ", listening on " << addresses.size() << " socket(s):");
916
- foreach (address, addresses) {
988
+ for (it = addresses.begin(); it != addresses.end(); it++) {
989
+ string address = it->asString();
917
990
  if (startsWith(address, "tcp://")) {
918
991
  address.erase(0, sizeof("tcp://") - 1);
919
992
  address.insert(0, "http://");
@@ -924,7 +997,8 @@ reportInitializationInfo() {
924
997
 
925
998
  if (!apiAddresses.empty()) {
926
999
  P_NOTICE("API server listening on " << apiAddresses.size() << " socket(s):");
927
- foreach (address, apiAddresses) {
1000
+ for (it = apiAddresses.begin(); it != apiAddresses.end(); it++) {
1001
+ string address = it->asString();
928
1002
  if (startsWith(address, "tcp://")) {
929
1003
  address.erase(0, sizeof("tcp://") - 1);
930
1004
  address.insert(0, "http://");
@@ -942,7 +1016,7 @@ mainLoop() {
942
1016
  WorkingObjects *wo = workingObjects;
943
1017
  #ifdef SUPPORTS_PER_THREAD_CPU_AFFINITY
944
1018
  unsigned int maxCpus = boost::thread::hardware_concurrency();
945
- bool cpuAffine = agentsOptions->getBool("core_cpu_affine")
1019
+ bool cpuAffine = coreConfig->get("controller_cpu_affine").asBool()
946
1020
  && maxCpus <= CPU_SETSIZE;
947
1021
  #endif
948
1022
 
@@ -1090,6 +1164,9 @@ waitForExitEvent() {
1090
1164
  if (wo->apiWorkingObjects.apiServer != NULL) {
1091
1165
  wo->apiWorkingObjects.bgloop->safe->runLater(shutdownApiServer);
1092
1166
  }
1167
+ if (wo->adminPanelConnector != NULL) {
1168
+ wo->adminPanelConnector->asyncShutdown();
1169
+ }
1093
1170
 
1094
1171
  UPDATE_TRACE_POINT();
1095
1172
  FD_ZERO(&fds);
@@ -1153,9 +1230,9 @@ cleanup() {
1153
1230
  static void
1154
1231
  deletePidFile() {
1155
1232
  TRACE_POINT();
1156
- string pidFile = agentsOptions->get("core_pid_file", false);
1157
- if (!pidFile.empty()) {
1158
- syscalls::unlink(pidFile.c_str());
1233
+ Json::Value pidFile = coreConfig->get("pid_file");
1234
+ if (!pidFile.isNull()) {
1235
+ syscalls::unlink(pidFile.asCString());
1159
1236
  }
1160
1237
  }
1161
1238
 
@@ -1175,10 +1252,11 @@ runCore() {
1175
1252
  initializeCurl();
1176
1253
  initializeNonPrivilegedWorkingObjects();
1177
1254
  initializeSecurityUpdateChecker();
1255
+ initializeAdminPanelConnector();
1178
1256
  prestartWebApps();
1179
1257
 
1180
1258
  UPDATE_TRACE_POINT();
1181
- warnIfPassengerRootVulnerable(agentsOptions->get("passenger_root"));
1259
+ warnIfPassengerRootVulnerable();
1182
1260
  reportInitializationInfo();
1183
1261
  mainLoop();
1184
1262
 
@@ -1203,12 +1281,13 @@ runCore() {
1203
1281
  /***** Entry point and command line argument parsing *****/
1204
1282
 
1205
1283
  static void
1206
- parseOptions(int argc, const char *argv[], VariantMap &options) {
1284
+ parseOptions(int argc, const char *argv[], ConfigKit::Store &config) {
1207
1285
  OptionParser p(coreUsage);
1286
+ Json::Value updates(Json::objectValue);
1208
1287
  int i = 2;
1209
1288
 
1210
1289
  while (i < argc) {
1211
- if (parseCoreOption(argc, argv, i, options)) {
1290
+ if (parseCoreOption(argc, argv, i, updates)) {
1212
1291
  continue;
1213
1292
  } else if (p.isFlag(argv[i], 'h', "--help")) {
1214
1293
  coreUsage();
@@ -1219,222 +1298,30 @@ parseOptions(int argc, const char *argv[], VariantMap &options) {
1219
1298
  exit(1);
1220
1299
  }
1221
1300
  }
1222
- }
1223
-
1224
- static void
1225
- preinitialize(VariantMap &options) {
1226
- // Set log_level here so that initializeAgent() calls setLogLevel()
1227
- // and setLogFile() with the right value.
1228
- if (options.has("core_log_level")) {
1229
- options.setInt("log_level", options.getInt("core_log_level"));
1230
- }
1231
- if (options.has("core_log_file")) {
1232
- options.set("log_file", options.get("core_log_file"));
1233
- }
1234
- if (options.has("core_file_descriptor_log_file")) {
1235
- options.set("file_descriptor_log_file", options.get("core_file_descriptor_log_file"));
1236
- }
1237
- }
1238
-
1239
- static string
1240
- inferDefaultGroup(const string &defaultUser) {
1241
- struct passwd *userEntry = getpwnam(defaultUser.c_str());
1242
- if (userEntry == NULL) {
1243
- throw ConfigurationException(
1244
- string("The user that PassengerDefaultUser refers to, '") +
1245
- defaultUser + "', does not exist.");
1246
- }
1247
- return getGroupName(userEntry->pw_gid);
1248
- }
1249
-
1250
- static void
1251
- setAgentsOptionsDefaults() {
1252
- VariantMap &options = *agentsOptions;
1253
- set<string> defaultAddress;
1254
- defaultAddress.insert(DEFAULT_HTTP_SERVER_LISTEN_ADDRESS);
1255
-
1256
- options.setDefaultBool("user_switching", true);
1257
- options.setDefault("default_user", DEFAULT_WEB_APP_USER);
1258
- if (!options.has("default_group")) {
1259
- options.set("default_group",
1260
- inferDefaultGroup(options.get("default_user")));
1261
- }
1262
- options.setDefault("integration_mode", "standalone");
1263
- if (options.get("integration_mode") == "standalone" && !options.has("standalone_engine")) {
1264
- options.set("standalone_engine", "builtin");
1265
- }
1266
- options.setDefaultStrSet("core_addresses", defaultAddress);
1267
- options.setDefaultInt("socket_backlog", DEFAULT_SOCKET_BACKLOG);
1268
- options.setDefaultBool("multi_app", false);
1269
- options.setDefault("environment", DEFAULT_APP_ENV);
1270
- options.setDefault("spawn_method", DEFAULT_SPAWN_METHOD);
1271
- options.setDefaultBool("load_shell_envvars", false);
1272
- options.setDefaultBool("abort_websockets_on_process_shutdown", true);
1273
- options.setDefaultInt("force_max_concurrent_requests_per_process", -1);
1274
- options.setDefault("concurrency_model", DEFAULT_CONCURRENCY_MODEL);
1275
- options.setDefaultInt("app_thread_count", DEFAULT_APP_THREAD_COUNT);
1276
- options.setDefaultInt("max_pool_size", DEFAULT_MAX_POOL_SIZE);
1277
- options.setDefaultInt("pool_idle_time", DEFAULT_POOL_IDLE_TIME);
1278
- options.setDefaultInt("min_instances", 1);
1279
- options.setDefaultInt("max_preloader_idle_time", DEFAULT_MAX_PRELOADER_IDLE_TIME);
1280
- options.setDefaultUint("max_request_queue_size", DEFAULT_MAX_REQUEST_QUEUE_SIZE);
1281
- options.setDefaultUint("stat_throttle_rate", DEFAULT_STAT_THROTTLE_RATE);
1282
- options.setDefault("server_software", SERVER_TOKEN_NAME "/" PASSENGER_VERSION);
1283
- options.setDefaultBool("show_version_in_header", true);
1284
- options.setDefaultBool("sticky_sessions", false);
1285
- options.setDefault("sticky_sessions_cookie_name", DEFAULT_STICKY_SESSIONS_COOKIE_NAME);
1286
- options.setDefaultBool("turbocaching", true);
1287
- options.setDefault("data_buffer_dir", getSystemTempDir());
1288
- options.setDefaultUint("file_buffer_threshold", DEFAULT_FILE_BUFFERED_CHANNEL_THRESHOLD);
1289
- options.setDefaultInt("response_buffer_high_watermark", DEFAULT_RESPONSE_BUFFER_HIGH_WATERMARK);
1290
- options.setDefaultBool("selfchecks", false);
1291
- options.setDefaultBool("core_graceful_exit", true);
1292
- options.setDefaultInt("core_threads", boost::thread::hardware_concurrency());
1293
- options.setDefaultBool("core_cpu_affine", false);
1294
- options.setDefault("friendly_error_pages", "auto");
1295
- options.setDefaultBool("rolling_restarts", false);
1296
- options.setDefaultBool("resist_deployment_errors", false);
1297
-
1298
- string firstAddress = options.getStrSet("core_addresses")[0];
1299
- if (getSocketAddressType(firstAddress) == SAT_TCP) {
1300
- string host;
1301
- unsigned short port;
1302
-
1303
- parseTcpSocketAddress(firstAddress, host, port);
1304
- options.setDefault("default_server_name", host);
1305
- options.setDefaultInt("default_server_port", port);
1306
- } else {
1307
- options.setDefault("default_server_name", "localhost");
1308
- options.setDefaultInt("default_server_port", 80);
1309
- }
1310
-
1311
- options.setDefault("default_ruby", DEFAULT_RUBY);
1312
- options.setDefaultBool("debugger", false);
1313
- if (!options.getBool("multi_app") && !options.has("app_root")) {
1314
- char *pwd = getcwd(NULL, 0);
1315
- options.set("app_root", pwd);
1316
- free(pwd);
1317
- }
1318
- }
1319
-
1320
- static void
1321
- sanityCheckOptions() {
1322
- VariantMap &options = *agentsOptions;
1323
- bool ok = true;
1324
-
1325
- if (!options.has("passenger_root")) {
1326
- fprintf(stderr, "ERROR: please set the --passenger-root argument.\n");
1327
- ok = false;
1328
- }
1329
- if (options.getBool("multi_app") && options.has("app_root")) {
1330
- fprintf(stderr, "ERROR: you may not specify an application directory "
1331
- "when in multi-app mode.\n");
1332
- ok = false;
1333
- }
1334
- if (!options.getBool("multi_app") && options.has("app_type")) {
1335
- PassengerAppType appType = getAppType(options.get("app_type"));
1336
- if (appType == PAT_NONE || appType == PAT_ERROR) {
1337
- fprintf(stderr, "ERROR: '%s' is not a valid application type. Supported app types are:",
1338
- options.get("app_type").c_str());
1339
- const AppTypeDefinition *definition = &appTypeDefinitions[0];
1340
- while (definition->type != PAT_NONE) {
1341
- fprintf(stderr, " %s", definition->name);
1342
- definition++;
1343
- }
1344
- fprintf(stderr, "\n");
1345
- ok = false;
1346
- }
1347
1301
 
1348
- if (!options.has("startup_file")) {
1349
- fprintf(stderr, "ERROR: if you've passed --app-type, then you must also pass --startup-file.\n");
1350
- ok = false;
1302
+ if (!updates.empty()) {
1303
+ vector<ConfigKit::Error> errors;
1304
+ if (!config.update(updates, errors)) {
1305
+ P_BUG("Unable to set initial configuration: " <<
1306
+ ConfigKit::toString(errors) << "\n"
1307
+ "Raw initial configuration: " << updates.toStyledString());
1351
1308
  }
1352
1309
  }
1353
- if (options.get("concurrency_model") != "process" && options.get("concurrency_model") != "thread") {
1354
- fprintf(stderr, "ERROR: '%s' is not a valid concurrency model. Supported concurrency "
1355
- "models are: process, thread.\n",
1356
- options.get("concurrency_model").c_str());
1357
- ok = false;
1358
- } else if (options.get("concurrency_model") != "process") {
1359
- #ifndef PASSENGER_IS_ENTERPRISE
1360
- fprintf(stderr, "ERROR: the '%s' concurrency model is only supported in "
1361
- PROGRAM_NAME " Enterprise.\nYou are currently using the open source "
1362
- PROGRAM_NAME ". Buy " PROGRAM_NAME " Enterprise here: https://www.phusionpassenger.com/enterprise\n",
1363
- options.get("concurrency_model").c_str());
1364
- ok = false;
1365
- #endif
1366
- }
1367
- if (options.getInt("app_thread_count") < 1) {
1368
- fprintf(stderr, "ERROR: the value passed to --app-thread-count must be at least 1.\n");
1369
- ok = false;
1370
- } else if (options.getInt("app_thread_count") > 1) {
1371
- #ifndef PASSENGER_IS_ENTERPRISE
1372
- fprintf(stderr, "ERROR: the --app-thread-count option is only supported in "
1373
- PROGRAM_NAME " Enterprise.\nYou are currently using the open source "
1374
- PROGRAM_NAME ". Buy " PROGRAM_NAME " Enterprise here: https://www.phusionpassenger.com/enterprise\n");
1375
- ok = false;
1376
- #endif
1377
- }
1378
- if (options.has("memory_limit")) {
1379
- #ifndef PASSENGER_IS_ENTERPRISE
1380
- fprintf(stderr, "ERROR: the --memory-limit option is only supported in "
1381
- PROGRAM_NAME " Enterprise.\nYou are currently using the open source "
1382
- PROGRAM_NAME ". Buy " PROGRAM_NAME " Enterprise here: https://www.phusionpassenger.com/enterprise\n");
1383
- ok = false;
1384
- #endif
1385
- }
1386
- if (options.has("max_requests")) {
1387
- if (options.getInt("max_requests", false, 0) < 0) {
1388
- fprintf(stderr, "ERROR: the value passed to --max-requests must be at least 0.\n");
1389
- ok = false;
1390
- }
1391
- }
1392
- if (options.has("max_request_time")) {
1393
- if (options.getInt("max_request_time", false, 0) < 1) {
1394
- fprintf(stderr, "ERROR: the value passed to --max-request-time must be at least 1.\n");
1395
- ok = false;
1396
- }
1397
- #ifndef PASSENGER_IS_ENTERPRISE
1398
- fprintf(stderr, "ERROR: the --max-request-time option is only supported in "
1399
- PROGRAM_NAME " Enterprise.\nYou are currently using the open source "
1400
- PROGRAM_NAME ". Buy " PROGRAM_NAME " Enterprise here: https://www.phusionpassenger.com/enterprise\n");
1401
- ok = false;
1402
- #endif
1403
- }
1404
- if (Core::parseControllerBenchmarkMode(options.get("benchmark_mode", false))
1405
- == Core::BM_UNKNOWN)
1406
- {
1407
- fprintf(stderr, "ERROR: '%s' is not a valid mode for --benchmark.\n",
1408
- options.get("benchmark_mode", false).c_str());
1409
- ok = false;
1410
- }
1411
- if (options.getInt("core_threads") < 1) {
1412
- fprintf(stderr, "ERROR: you may only specify for --threads a number greater than or equal to 1.\n");
1413
- ok = false;
1414
- }
1415
- if (options.getInt("max_pool_size") < 1) {
1416
- fprintf(stderr, "ERROR: you may only specify for --max-pool-size a number greater than or equal to 1.\n");
1417
- ok = false;
1418
- }
1419
-
1420
- if (!ok) {
1421
- exit(1);
1422
- }
1423
1310
  }
1424
1311
 
1425
1312
  int
1426
1313
  coreMain(int argc, char *argv[]) {
1427
1314
  int ret;
1428
1315
 
1429
- agentsOptions = new VariantMap();
1430
- *agentsOptions = initializeAgent(argc, &argv, SHORT_PROGRAM_NAME " core", parseOptions,
1431
- preinitialize, 2);
1432
- setAgentsOptionsDefaults();
1433
- sanityCheckOptions();
1316
+ coreSchema = new Schema();
1317
+ coreConfig = new ConfigKit::Store(*coreSchema);
1318
+ initializeAgent(argc, &argv, SHORT_PROGRAM_NAME " core",
1319
+ *coreConfig, coreSchema->loggingKit.translator,
1320
+ parseOptions, NULL, 2);
1434
1321
 
1435
- restoreOomScore(agentsOptions);
1322
+ restoreOomScore(coreConfig->get("oom_score").asString());
1436
1323
 
1437
1324
  ret = runCore();
1438
- shutdownAgent(agentsOptions);
1325
+ shutdownAgent(coreSchema, coreConfig);
1439
1326
  return ret;
1440
1327
  }