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
@@ -29,12 +29,15 @@
29
29
  #include <boost/thread.hpp>
30
30
  #include <cstdio>
31
31
  #include <cstdlib>
32
+ #include <cstring>
32
33
  #include <Constants.h>
34
+ #include <JsonTools/Autocast.h>
33
35
  #include <Utils.h>
34
- #include <Utils/VariantMap.h>
35
36
  #include <Utils/OptionParsing.h>
36
37
  #include <Utils/StrIntUtils.h>
37
38
 
39
+ #include <jsoncpp/json.h>
40
+
38
41
  namespace Passenger {
39
42
 
40
43
  using namespace std;
@@ -197,6 +200,10 @@ coreUsage() {
197
200
  printf(" --cpu-affine Enable per-thread CPU affinity (Linux only)\n");
198
201
  printf(" --core-file-descriptor-ulimit NUMBER\n");
199
202
  printf(" Set custom file descriptor ulimit for the core\n");
203
+ printf(" --admin-panel-url URL\n");
204
+ printf(" Connect to an admin panel through this service\n");
205
+ printf(" connector URL\n");
206
+ printf(" --ctl NAME=VALUE Set low-level config option directly\n");
200
207
  printf(" -h, --help Show this help\n");
201
208
  printf("\n");
202
209
  printf("API account privilege levels (ordered from most to least privileges):\n");
@@ -205,22 +212,21 @@ coreUsage() {
205
212
  }
206
213
 
207
214
  inline bool
208
- parseCoreOption(int argc, const char *argv[], int &i, VariantMap &options) {
215
+ parseCoreOption(int argc, const char *argv[], int &i, Json::Value &updates) {
209
216
  OptionParser p(coreUsage);
210
217
 
211
218
  if (p.isValueFlag(argc, i, argv[i], '\0', "--passenger-root")) {
212
- options.set("passenger_root", argv[i + 1]);
219
+ updates["passenger_root"] = argv[i + 1];
213
220
  i += 2;
214
221
  } else if (p.isValueFlag(argc, i, argv[i], 'l', "--listen")) {
215
222
  if (getSocketAddressType(argv[i + 1]) != SAT_UNKNOWN) {
216
- vector<string> addresses = options.getStrSet("core_addresses", false);
223
+ Json::Value &addresses = updates["controller_addresses"];
217
224
  if (addresses.size() == SERVER_KIT_MAX_SERVER_ENDPOINTS) {
218
225
  fprintf(stderr, "ERROR: you may specify up to %u --listen addresses.\n",
219
226
  SERVER_KIT_MAX_SERVER_ENDPOINTS);
220
227
  exit(1);
221
228
  }
222
- addresses.push_back(argv[i + 1]);
223
- options.setStrSet("core_addresses", addresses);
229
+ addresses.append(argv[i + 1]);
224
230
  i += 2;
225
231
  } else {
226
232
  fprintf(stderr, "ERROR: invalid address format for --listen. The address "
@@ -230,15 +236,13 @@ parseCoreOption(int argc, const char *argv[], int &i, VariantMap &options) {
230
236
  }
231
237
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--api-listen")) {
232
238
  if (getSocketAddressType(argv[i + 1]) != SAT_UNKNOWN) {
233
- vector<string> addresses = options.getStrSet("core_api_addresses",
234
- false);
239
+ Json::Value &addresses = updates["api_server_addresses"];
235
240
  if (addresses.size() == SERVER_KIT_MAX_SERVER_ENDPOINTS) {
236
241
  fprintf(stderr, "ERROR: you may specify up to %u --api-listen addresses.\n",
237
242
  SERVER_KIT_MAX_SERVER_ENDPOINTS);
238
243
  exit(1);
239
244
  }
240
- addresses.push_back(argv[i + 1]);
241
- options.setStrSet("core_api_addresses", addresses);
245
+ addresses.append(argv[i + 1]);
242
246
  i += 2;
243
247
  } else {
244
248
  fprintf(stderr, "ERROR: invalid address format for --api-listen. The address "
@@ -247,13 +251,10 @@ parseCoreOption(int argc, const char *argv[], int &i, VariantMap &options) {
247
251
  exit(1);
248
252
  }
249
253
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--pid-file")) {
250
- options.set("core_pid_file", argv[i + 1]);
254
+ updates["pid_file"] = argv[i + 1];
251
255
  i += 2;
252
256
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--authorize")) {
253
257
  vector<string> args;
254
- vector<string> authorizations = options.getStrSet("core_authorizations",
255
- false);
256
-
257
258
  split(argv[i + 1], ':', args);
258
259
  if (args.size() < 2 || args.size() > 3) {
259
260
  fprintf(stderr, "ERROR: invalid format for --authorize. The syntax "
@@ -261,168 +262,153 @@ parseCoreOption(int argc, const char *argv[], int &i, VariantMap &options) {
261
262
  exit(1);
262
263
  }
263
264
 
264
- authorizations.push_back(argv[i + 1]);
265
- options.setStrSet("core_authorizations", authorizations);
265
+ updates["api_server_authorizations"].append(argv[i + 1]);
266
266
  i += 2;
267
267
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--socket-backlog")) {
268
- options.setInt("socket_backlog", atoi(argv[i + 1]));
268
+ updates["controller_socket_backlog"] = argv[i + 1];
269
269
  i += 2;
270
270
  } else if (p.isFlag(argv[i], '\0', "--no-user-switching")) {
271
- options.setBool("user_switching", false);
271
+ updates["user_switching"] = false;
272
272
  i++;
273
273
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--default-user")) {
274
- options.set("default_user", argv[i + 1]);
274
+ updates["default_user"] = argv[i + 1];
275
275
  i += 2;
276
276
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--default-group")) {
277
- options.set("default_group", argv[i + 1]);
277
+ updates["default_group"] = argv[i + 1];
278
278
  i += 2;
279
279
  } else if (p.isFlag(argv[i], '\0', "--disable-security-update-check")) {
280
- options.setBool("disable_security_update_check", true);
281
- i += 2;
280
+ updates["security_update_checker_disabled"] = true;
281
+ i++;
282
282
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--security-update-check-proxy")) {
283
- options.set("security_update_check_proxy", argv[i + 1]);
283
+ updates["security_update_checker_proxy_url"] = argv[i + 1];
284
284
  i += 2;
285
285
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--max-pool-size")) {
286
- options.setInt("max_pool_size", atoi(argv[i + 1]));
286
+ updates["max_pool_size"] = atoi(argv[i + 1]);
287
287
  i += 2;
288
288
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--pool-idle-time")) {
289
- options.setInt("pool_idle_time", atoi(argv[i + 1]));
289
+ updates["pool_idle_time"] = atoi(argv[i + 1]);
290
290
  i += 2;
291
291
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--max-preloader-idle-time")) {
292
- options.setInt("max_preloader_idle_time", atoi(argv[i + 1]));
292
+ updates["default_max_preloader_idle_time"] = atoi(argv[i + 1]);
293
293
  i += 2;
294
294
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--force-max-concurrent-requests-per-process")) {
295
- options.setInt("force_max_concurrent_requests_per_process", atoi(argv[i + 1]));
295
+ updates["default_force_max_concurrent_requests_per_process"] = atoi(argv[i + 1]);
296
296
  i += 2;
297
297
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--min-instances")) {
298
- options.setInt("min_instances", atoi(argv[i + 1]));
299
- i += 2;
300
- } else if (p.isValueFlag(argc, i, argv[i], '\0', "--memory-limit")) {
301
- options.setInt("memory_limit", atoi(argv[i + 1]));
298
+ updates["default_min_instances"] = atoi(argv[i + 1]);
302
299
  i += 2;
303
300
  } else if (p.isValueFlag(argc, i, argv[i], 'e', "--environment")) {
304
- options.set("environment", argv[i + 1]);
301
+ updates["default_environment"] = argv[i + 1];
305
302
  i += 2;
306
303
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--app-type")) {
307
- options.set("app_type", argv[i + 1]);
304
+ updates["single_app_mode_app_type"] = argv[i + 1];
308
305
  i += 2;
309
306
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--startup-file")) {
310
- options.set("startup_file", argv[i + 1]);
307
+ updates["single_app_mode_startup_file"] = argv[i + 1];
311
308
  i += 2;
312
309
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--spawn-method")) {
313
- options.set("spawn_method", argv[i + 1]);
310
+ updates["default_spawn_method"] = argv[i + 1];
314
311
  i += 2;
315
312
  } else if (p.isFlag(argv[i], '\0', "--load-shell-envvars")) {
316
- options.setBool("load_shell_envvars", true);
313
+ updates["default_load_shell_envvars"] = true;
317
314
  i++;
318
- } else if (p.isValueFlag(argc, i, argv[i], '\0', "--concurrency-model")) {
319
- options.set("concurrency_model", argv[i + 1]);
320
- i += 2;
321
- } else if (p.isValueFlag(argc, i, argv[i], '\0', "--app-thread-count")) {
322
- options.setInt("app_thread_count", atoi(argv[i + 1]));
323
- i += 2;
324
315
  } else if (p.isFlag(argv[i], '\0', "--multi-app")) {
325
- options.setBool("multi_app", true);
316
+ updates["multi_app"] = true;
326
317
  i++;
327
318
  } else if (p.isFlag(argv[i], '\0', "--force-friendly-error-pages")) {
328
- options.setBool("friendly_error_pages", true);
319
+ updates["default_friendly_error_pages"] = true;
329
320
  i++;
330
321
  } else if (p.isFlag(argv[i], '\0', "--disable-friendly-error-pages")) {
331
- options.setBool("friendly_error_pages", false);
322
+ updates["default_friendly_error_pages"] = false;
332
323
  i++;
333
324
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--max-requests")) {
334
- options.setInt("max_requests", atoi(argv[i + 1]));
335
- i += 2;
336
- } else if (p.isValueFlag(argc, i, argv[i], '\0', "--max-request-time")) {
337
- options.setInt("max_request_time", atoi(argv[i + 1]));
325
+ updates["default_max_requests"] = atoi(argv[i + 1]);
338
326
  i += 2;
339
327
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--max-request-queue-size")) {
340
- options.setInt("max_request_queue_size", atoi(argv[i + 1]));
328
+ updates["default_max_request_queue_size"] = atoi(argv[i + 1]);
341
329
  i += 2;
342
330
  } else if (p.isFlag(argv[i], '\0', "--sticky-sessions")) {
343
- options.setBool("sticky_sessions", true);
331
+ updates["default_sticky_sessions"] = true;
344
332
  i++;
345
333
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--sticky-sessions-cookie-name")) {
346
- options.set("sticky_sessions_cookie_name", argv[i + 1]);
334
+ updates["default_sticky_sessions_cookie_name"] = argv[i + 1];
347
335
  i += 2;
348
336
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--vary-turbocache-by-cookie")) {
349
- options.set("vary_turbocache_by_cookie", argv[i + 1]);
337
+ updates["vary_turbocache_by_cookie"] = argv[i + 1];
350
338
  i += 2;
351
339
  } else if (p.isFlag(argv[i], '\0', "--disable-turbocaching")) {
352
- options.setBool("turbocaching", false);
340
+ updates["turbocaching"] = false;
353
341
  i++;
354
342
  } else if (p.isFlag(argv[i], '\0', "--no-abort-websockets-on-process-shutdown")) {
355
- options.setBool("abort_websockets_on_process_shutdown", false);
343
+ updates["default_abort_websockets_on_process_shutdown"] = false;
356
344
  i++;
357
345
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--ruby")) {
358
- options.set("default_ruby", argv[i + 1]);
346
+ updates["default_ruby"] = argv[i + 1];
359
347
  i += 2;
360
348
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--nodejs")) {
361
- options.set("default_nodejs", argv[i + 1]);
349
+ updates["default_nodejs"] = argv[i + 1];
362
350
  i += 2;
363
351
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--python")) {
364
- options.set("default_python", argv[i + 1]);
352
+ updates["default_python"] = argv[i + 1];
365
353
  i += 2;
366
354
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--meteor-app-settings")) {
367
- options.set("meteor_app_settings", argv[i + 1]);
355
+ updates["default_meteor_app_settings"] = argv[i + 1];
368
356
  i += 2;
369
357
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--app-file-descriptor-ulimit")) {
370
- options.setUint("app_file_descriptor_ulimit", atoi(argv[i + 1]));
358
+ updates["default_app_file_descriptor_ulimit"] = atoi(argv[i + 1]);
371
359
  i += 2;
372
- } else if (p.isFlag(argv[i], '\0', "--debugger")) {
373
- options.setBool("debugger", true);
374
- i++;
375
- } else if (p.isFlag(argv[i], '\0', "--rolling-restarts")) {
376
- options.setBool("rolling_restarts", true);
377
- i++;
378
- } else if (p.isFlag(argv[i], '\0', "--resist-deployment-errors")) {
379
- options.setBool("resist_deployment_errors", true);
380
- i++;
381
360
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--log-level")) {
382
- // We do not set log_level because, when this function is called from
383
- // the Watchdog, we don't want to affect the Watchdog's own log level.
384
- options.setInt("core_log_level", atoi(argv[i + 1]));
361
+ updates["log_level"] = atoi(argv[i + 1]);
385
362
  i += 2;
386
363
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--log-file")) {
387
- // We do not set log_file because, when this function is called from
388
- // the Watchdog, we don't want to affect the Watchdog's own log file.
389
- options.set("core_log_file", argv[i + 1]);
364
+ updates["log_target"] = argv[i + 1];
390
365
  i += 2;
391
366
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--fd-log-file")) {
392
- // We do not set file_descriptor_log_file because, when this function is called from
393
- // the Watchdog, we don't want to affect the Watchdog's own log file.
394
- options.set("core_file_descriptor_log_file", argv[i + 1]);
367
+ updates["file_descriptor_log_target"] = argv[i + 1];
395
368
  i += 2;
396
369
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--stat-throttle-rate")) {
397
- options.setInt("stat_throttle_rate", atoi(argv[i + 1]));
370
+ updates["stat_throttle_rate"] = atoi(argv[i + 1]);
398
371
  i += 2;
399
372
  } else if (p.isFlag(argv[i], '\0', "--no-show-version-in-header")) {
400
- options.setBool("show_version_in_header", false);
373
+ updates["show_version_in_header"] = false;
401
374
  i++;
402
375
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--data-buffer-dir")) {
403
- options.setInt("data_buffer_dir", atoi(argv[i + 1]));
376
+ updates["controller_file_buffered_channel_buffer_dir"] = atoi(argv[i + 1]);
404
377
  i += 2;
405
378
  } else if (p.isFlag(argv[i], '\0', "--no-graceful-exit")) {
406
- options.setBool("core_graceful_exit", false);
379
+ updates["graceful_exit"] = false;
407
380
  i++;
408
381
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--benchmark")) {
409
- options.set("benchmark_mode", argv[i + 1]);
382
+ updates["benchmark_mode"] = argv[i + 1];
410
383
  i += 2;
411
384
  } else if (p.isFlag(argv[i], '\0', "--disable-selfchecks")) {
412
- options.setBool("selfchecks", false);
385
+ updates["pool_selfchecks"] = false;
413
386
  i++;
414
387
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--threads")) {
415
- options.setInt("core_threads", atoi(argv[i + 1]));
388
+ updates["controller_threads"] = atoi(argv[i + 1]);
416
389
  i += 2;
417
390
  } else if (p.isFlag(argv[i], '\0', "--cpu-affine")) {
418
- options.setBool("core_cpu_affine", true);
391
+ updates["controller_cpu_affine"] = true;
419
392
  i++;
420
393
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--core-file-descriptor-ulimit")) {
421
- options.setUint("core_file_descriptor_ulimit", atoi(argv[i + 1]));
394
+ updates["file_descriptor_ulimit"] = atoi(argv[i + 1]);
395
+ i += 2;
396
+ } else if (p.isValueFlag(argc, i, argv[i], '\0', "--admin-panel-url")) {
397
+ updates["admin_panel_url"] = argv[i + 1];
398
+ i += 2;
399
+ } else if (p.isValueFlag(argc, i, argv[i], '\0', "--ctl")) {
400
+ const char *sep = strchr(argv[i + 1], '=');
401
+ if (sep == NULL) {
402
+ fprintf(stderr, "ERROR: invalid --ctl format: %s\n", argv[i + 1]);
403
+ exit(1);
404
+ }
405
+ string name(argv[i + 1], sep - argv[i + 1]);
406
+ string value(sep + 1);
407
+ updates[name] = autocastValueToJson(value);
422
408
  i += 2;
423
409
  } else if (!startsWith(argv[i], "-")) {
424
- if (!options.has("app_root")) {
425
- options.set("app_root", argv[i]);
410
+ if (!updates.isMember("single_app_mode_app_root")) {
411
+ updates["single_app_mode_app_root"] = argv[i];
426
412
  i++;
427
413
  } else {
428
414
  fprintf(stderr, "ERROR: you may not pass multiple application directories. "
@@ -27,10 +27,17 @@
27
27
  #define _PASSENGER_SECURITY_UPDATE_CHECKER_H_
28
28
 
29
29
  #include <string>
30
+ #include <cassert>
31
+ #include <boost/config.hpp>
32
+ #include <boost/scoped_ptr.hpp>
30
33
  #include <oxt/thread.hpp>
31
34
  #include <oxt/backtrace.hpp>
32
35
 
33
36
  #include <Crypto.h>
37
+ #include <ResourceLocator.h>
38
+ #include <Exceptions.h>
39
+ #include <StaticString.h>
40
+ #include <ConfigKit/ConfigKit.h>
34
41
  #include <Utils/Curl.h>
35
42
  #include <modp_b64.h>
36
43
 
@@ -45,9 +52,6 @@ using namespace std;
45
52
  using namespace oxt;
46
53
 
47
54
 
48
- #define CHECK_HOST_DEFAULT "securitycheck.phusionpassenger.com"
49
-
50
- #define CHECK_URL_DEFAULT "https://" CHECK_HOST_DEFAULT ":443/v1/check.json"
51
55
  #define MIN_CHECK_BACKOFF_SEC (12 * 60 * 60)
52
56
  #define MAX_CHECK_BACKOFF_SEC (7 * 24 * 60 * 60)
53
57
 
@@ -66,21 +70,126 @@ using namespace oxt;
66
70
  * no auto-update mechanism).
67
71
  */
68
72
  class SecurityUpdateChecker {
73
+ public:
74
+ /*
75
+ * BEGIN ConfigKit schema: Passenger::SecurityUpdateChecker::Schema
76
+ * (do not edit: following text is automatically generated
77
+ * by 'rake configkit_schemas_inline_comments')
78
+ *
79
+ * certificate_path string - -
80
+ * disabled boolean - default(false)
81
+ * interval unsigned integer - default(86400)
82
+ * proxy_url string - -
83
+ * server_identifier string required -
84
+ * url string - default("https://securitycheck.phusionpassenger.com/v1/check.json")
85
+ * web_server_version string - -
86
+ *
87
+ * END
88
+ */
89
+ class Schema: public ConfigKit::Schema {
90
+ private:
91
+ static void validateInterval(const ConfigKit::Store &config, vector<ConfigKit::Error> &errors) {
92
+ unsigned int interval = config["interval"].asUInt();
93
+ if (interval < MIN_CHECK_BACKOFF_SEC || interval > MAX_CHECK_BACKOFF_SEC) {
94
+ errors.push_back(ConfigKit::Error("'{{interval}}' must be between " +
95
+ toString(MIN_CHECK_BACKOFF_SEC) + " and " + toString(MAX_CHECK_BACKOFF_SEC)));
96
+ }
97
+ }
98
+
99
+ static void validateProxyUrl(const ConfigKit::Store &config, vector<ConfigKit::Error> &errors) {
100
+ if (config["proxy_url"].isNull()) {
101
+ return;
102
+ }
103
+ if (config["proxy_url"].asString().empty()) {
104
+ errors.push_back(ConfigKit::Error("'{{proxy_url}}', if specified, may not be empty"));
105
+ return;
106
+ }
107
+
108
+ try {
109
+ prepareCurlProxy(config["proxy_url"].asString());
110
+ } catch (const ArgumentException &e) {
111
+ errors.push_back(ConfigKit::Error(
112
+ P_STATIC_STRING("'{{proxy_url}}': ")
113
+ + e.what()));
114
+ }
115
+ }
116
+
117
+ public:
118
+ Schema() {
119
+ using namespace ConfigKit;
120
+
121
+ add("disabled", BOOL_TYPE, OPTIONAL, false);
122
+ add("url", STRING_TYPE, OPTIONAL, "https://securitycheck.phusionpassenger.com/v1/check.json");
123
+ // Should be in the form: scheme://user:password@proxy_host:proxy_port
124
+ add("proxy_url", STRING_TYPE, OPTIONAL);
125
+ add("certificate_path", STRING_TYPE, OPTIONAL);
126
+ add("interval", UINT_TYPE, OPTIONAL, 24 * 60 * 60);
127
+ // Should be one of { nginx, apache, standalone nginx, standalone builtin }
128
+ add("server_identifier", STRING_TYPE, REQUIRED);
129
+ // The version of Nginx or Apache, if relevant (otherwise empty)
130
+ add("web_server_version", STRING_TYPE, OPTIONAL);
131
+
132
+ addValidator(validateInterval);
133
+ addValidator(validateProxyUrl);
134
+
135
+ finalize();
136
+ }
137
+ };
138
+
139
+ struct ConfigRealization {
140
+ CurlProxyInfo proxyInfo;
141
+ string url;
142
+ string certificatePath;
143
+
144
+ ConfigRealization(const ConfigKit::Store &config)
145
+ : proxyInfo(prepareCurlProxy(config["proxy_url"].asString())),
146
+ url(config["url"].asString()),
147
+ certificatePath(config["certificate_path"].asString())
148
+ { }
149
+
150
+ void swap(ConfigRealization &other) BOOST_NOEXCEPT_OR_NOTHROW {
151
+ proxyInfo.swap(other.proxyInfo);
152
+ url.swap(other.url);
153
+ certificatePath.swap(other.certificatePath);
154
+ }
155
+ };
156
+
157
+ struct ConfigChangeRequest {
158
+ boost::scoped_ptr<ConfigKit::Store> config;
159
+ boost::scoped_ptr<ConfigRealization> configRlz;
160
+ };
69
161
 
70
162
  private:
163
+ /*
164
+ * Since the security update checker runs in a separate thread,
165
+ * and the configuration can change while the checker is active,
166
+ * we make a copy of the current configuration at the beginning
167
+ * of each check.
168
+ */
169
+ struct SessionState {
170
+ ConfigKit::Store config;
171
+ ConfigRealization configRlz;
172
+
173
+ SessionState(const ConfigKit::Store &currentConfig,
174
+ const ConfigRealization &currentConfigRlz)
175
+ : config(currentConfig),
176
+ configRlz(currentConfigRlz)
177
+ { }
178
+ };
179
+
180
+ mutable boost::mutex configSyncher;
181
+ ConfigKit::Store config;
182
+ ConfigRealization configRlz;
183
+
71
184
  oxt::thread *updateCheckThread;
72
- long checkIntervalSec;
73
185
  string clientCertPath; // client cert (PKCS#12), checked by server
74
186
  string serverPubKeyPath; // for checking signature
75
- string proxyAddress;
76
- string serverIntegration;
77
- string serverVersion;
78
- CurlProxyInfo proxyInfo;
79
- Crypto *crypto;
187
+ Crypto crypto;
80
188
 
81
189
  void threadMain() {
82
190
  TRACE_POINT();
83
- // Sleep for a short while to allow interruption during the Apache integration double startup procedure, this prevents running the update check twice
191
+ // Sleep for a short while to allow interruption during the Apache integration
192
+ // double startup procedure, this prevents running the update check twice
84
193
  boost::this_thread::sleep_for(boost::chrono::seconds(2));
85
194
  while (!boost::this_thread::interruption_requested()) {
86
195
  UPDATE_TRACE_POINT();
@@ -90,7 +199,13 @@ private:
90
199
  } catch (const tracable_exception &e) {
91
200
  P_ERROR(e.what() << "\n" << e.backtrace());
92
201
  }
202
+
93
203
  UPDATE_TRACE_POINT();
204
+ unsigned int checkIntervalSec;
205
+ {
206
+ boost::lock_guard<boost::mutex> l(configSyncher);
207
+ checkIntervalSec = config["interval"].asUInt();
208
+ }
94
209
  long backoffSec = checkIntervalSec + (backoffMin * 60);
95
210
  if (backoffSec < MIN_CHECK_BACKOFF_SEC) {
96
211
  backoffSec = MIN_CHECK_BACKOFF_SEC;
@@ -103,7 +218,7 @@ private:
103
218
  }
104
219
 
105
220
 
106
- void logUpdateFailCurl(CURLcode code) {
221
+ void logUpdateFailCurl(const SessionState &sessionState, CURLcode code) {
107
222
  // At this point anything could be wrong, from unloadable certificates to server not found, etc.
108
223
  // Let's try to enrich the log message in case there are known solutions or workarounds (e.g. "use proxy").
109
224
  string error = curl_easy_strerror(code);
@@ -114,20 +229,21 @@ private:
114
229
  break;
115
230
 
116
231
  case CURLE_COULDNT_RESOLVE_HOST:
117
- error.append(" while connecting to " CHECK_HOST_DEFAULT " (check your DNS)");
232
+ error.append(" while connecting to " + sessionState.configRlz.url + " (check your DNS)");
118
233
  break;
119
234
 
120
235
  case CURLE_COULDNT_CONNECT:
121
- if (proxyAddress.empty()) {
122
- error.append(" for " CHECK_URL_DEFAULT " " POSSIBLE_MITM_RESOLUTION);
236
+ if (sessionState.config["proxy_url"].isNull()) {
237
+ error.append(" for " + sessionState.configRlz.url + " " POSSIBLE_MITM_RESOLUTION);
123
238
  } else {
124
- error.append(" for " CHECK_URL_DEFAULT " using proxy " + proxyAddress +
239
+ error.append(" for " + sessionState.configRlz.url + " using proxy "
240
+ + sessionState.config["proxy_url"].asString() +
125
241
  " (if this error persists check your firewall and/or proxy settings)");
126
242
  }
127
243
  break;
128
244
 
129
245
  case CURLE_COULDNT_RESOLVE_PROXY:
130
- error.append(" for proxy address " + proxyAddress);
246
+ error.append(" for proxy address " + sessionState.config["proxy_url"].asString());
131
247
  break;
132
248
 
133
249
  case CURLE_SSL_CACERT:
@@ -135,15 +251,22 @@ private:
135
251
  // for MITM but could also be a truststore issue.
136
252
  case CURLE_PEER_FAILED_VERIFICATION:
137
253
  // The remote server's SSL certificate or SSH md5 fingerprint was deemed not OK.
138
- error.append(" while connecting to " CHECK_HOST_DEFAULT "; check that your connection is secure and that the "
139
- "truststore is valid. If the problem persists, you can also try upgrading or reinstalling " SHORT_PROGRAM_NAME);
254
+ error.append(" while connecting to " + sessionState.configRlz.url
255
+ + "; check that your connection is secure and that the"
256
+ " truststore is valid. If the problem persists, you can also try upgrading"
257
+ " or reinstalling " PROGRAM_NAME);
140
258
  break;
141
259
 
142
260
  case CURLE_SSL_CACERT_BADFILE:
143
- error.append(" while connecting to " CHECK_URL_DEFAULT " " +
144
- (proxyAddress.empty() ? "" : "using proxy " + proxyAddress) + "; this might happen if the nss backend "
145
- "is installed for libcurl instead of GnuTLS or OpenSSL. If the problem persists, you can also try upgrading "
146
- "or reinstalling " SHORT_PROGRAM_NAME);
261
+ error.append(" while connecting to " + sessionState.configRlz.url + " ");
262
+ if (!sessionState.config["proxy_url"].isNull()) {
263
+ error.append("using proxy ");
264
+ error.append(sessionState.config["proxy_url"].asString());
265
+ error.append(" ");
266
+ }
267
+ error.append("; this might happen if the nss backend is installed for"
268
+ " libcurl instead of GnuTLS or OpenSSL. If the problem persists, you can also try upgrading"
269
+ " or reinstalling " PROGRAM_NAME);
147
270
  break;
148
271
 
149
272
  // Fallthroughs to default:
@@ -154,8 +277,13 @@ private:
154
277
  // This is not a normal connect timeout, there are some refs to it occurring while downloading large
155
278
  // files, but we don't do that so fall through to default.
156
279
  default:
157
- error.append(" while connecting to " CHECK_URL_DEFAULT " " +
158
- (proxyAddress.empty() ? "" : "using proxy " + proxyAddress) + " " POSSIBLE_MITM_RESOLUTION);
280
+ error.append(" while connecting to " + sessionState.configRlz.url + " ");
281
+ if (!sessionState.config["proxy_url"].isNull()) {
282
+ error.append("using proxy ");
283
+ error.append(sessionState.config["proxy_url"].asString());
284
+ error.append(" ");
285
+ }
286
+ error.append(POSSIBLE_MITM_RESOLUTION);
159
287
  break;
160
288
  }
161
289
 
@@ -164,21 +292,22 @@ private:
164
292
  #if !BOOST_OS_MACOS
165
293
  unsigned long cryptoErrorCode = ERR_get_error();
166
294
  if (cryptoErrorCode == 0) {
167
- logUpdateFailAdditional("CURLcode" + to_string(code));
295
+ logUpdateFailAdditional("CURLcode" + toString(code));
168
296
  } else {
169
297
  char buf[500];
170
298
  ERR_error_string(cryptoErrorCode, buf);
171
- logUpdateFailAdditional("CURLcode: " + to_string(code) + ", Crypto: " + to_string(cryptoErrorCode) + " " + buf);
299
+ logUpdateFailAdditional("CURLcode: " + toString(code) + ", Crypto: " + toString(cryptoErrorCode)
300
+ + " " + buf);
172
301
  }
173
302
  #endif
174
303
  }
175
304
 
176
- void logUpdateFailHttp(int httpCode) {
305
+ void logUpdateFailHttp(const SessionState &sessionState, int httpCode) {
177
306
  string error;
178
307
 
179
308
  switch (httpCode) {
180
309
  case 404:
181
- error.append("url not found: " CHECK_URL_DEFAULT " " POSSIBLE_MITM_RESOLUTION);
310
+ error.append("url not found: " + sessionState.configRlz.url + " " POSSIBLE_MITM_RESOLUTION);
182
311
  break;
183
312
  case 403:
184
313
  error.append("connection denied by server " POSSIBLE_MITM_RESOLUTION);
@@ -196,7 +325,8 @@ private:
196
325
  error.append("request content was corrupted or not understood " POSSIBLE_MITM_RESOLUTION);
197
326
  break;
198
327
  default:
199
- error = "HTTP " + to_string(httpCode) + " while connecting to " CHECK_URL_DEFAULT " " POSSIBLE_MITM_RESOLUTION;
328
+ error = "HTTP " + toString(httpCode) + " while connecting to " + sessionState.configRlz.url
329
+ + " " POSSIBLE_MITM_RESOLUTION;
200
330
  break;
201
331
  }
202
332
  logUpdateFail(error);
@@ -214,7 +344,9 @@ private:
214
344
  *
215
345
  * May allocate chunk data for setting Content-Type, receiver should deallocate with curl_slist_free_all().
216
346
  */
217
- CURLcode prepareCurlPOST(CURL *curl, string &bodyJsonString, string *responseData, struct curl_slist **chunk) {
347
+ CURLcode prepareCurlPOST(CURL *curl, SessionState &sessionState, const string &bodyJsonString,
348
+ string *responseData, struct curl_slist **chunk)
349
+ {
218
350
  CURLcode code;
219
351
 
220
352
  // Hint for advanced debugging: curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
@@ -222,7 +354,7 @@ private:
222
354
  if (CURLE_OK != (code = curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1))) {
223
355
  return code;
224
356
  }
225
- if (CURLE_OK != (code = curl_easy_setopt(curl, CURLOPT_URL, CHECK_URL_DEFAULT))) {
357
+ if (CURLE_OK != (code = curl_easy_setopt(curl, CURLOPT_URL, sessionState.configRlz.url.c_str()))) {
226
358
  return code;
227
359
  }
228
360
  if (CURLE_OK != (code = curl_easy_setopt(curl, CURLOPT_HTTPGET, 0))) {
@@ -241,7 +373,7 @@ private:
241
373
 
242
374
  #if BOOST_OS_MACOS
243
375
  // preauth the security update check key in the user's keychain (this is for libcurl's benefit because they don't bother to authorize themselves to use the keys they import)
244
- if (!crypto->preAuthKey(clientCertPath.c_str(), CLIENT_CERT_PWD, CLIENT_CERT_LABEL)) {
376
+ if (!crypto.preAuthKey(clientCertPath.c_str(), CLIENT_CERT_PWD, CLIENT_CERT_LABEL)) {
245
377
  return CURLE_SSL_CERTPROBLEM;
246
378
  }
247
379
  if (CURLE_OK != (code = curl_easy_setopt(curl, CURLOPT_SSLCERTTYPE, "P12"))) {
@@ -278,7 +410,7 @@ private:
278
410
  if (CURLE_OK != (code = curl_easy_setopt(curl, CURLOPT_WRITEDATA, responseData))) {
279
411
  return code;
280
412
  }
281
- if (CURLE_OK != (code = setCurlProxy(curl, proxyInfo))) {
413
+ if (CURLE_OK != (code = setCurlProxy(curl, sessionState.configRlz.proxyInfo))) {
282
414
  return code;
283
415
  }
284
416
 
@@ -297,69 +429,70 @@ private:
297
429
  return true;
298
430
  }
299
431
 
432
+ static size_t receiveResponseBytes(void *buffer, size_t size, size_t nmemb, void *userData) {
433
+ string *responseData = (string *) userData;
434
+ responseData->append((const char *) buffer, size * nmemb);
435
+ return size * nmemb;
436
+ }
437
+
300
438
  public:
439
+ // Dependencies
440
+ ResourceLocator *resourceLocator;
301
441
 
302
- /**
303
- * proxy is optional and should be in the form: scheme://user:password@proxy_host:proxy_port
304
- *
305
- * serverIntegration should be one of { nginx, apache, standalone nginx, standalone builtin }, whereby
306
- * serverVersion is the version of Nginx or Apache, if relevant (otherwise empty)
307
- */
308
- SecurityUpdateChecker(const ResourceLocator &locator, const string &proxy, const string &serverIntegration, const string &serverVersion, const string &instancePath) {
309
- crypto = new Crypto();
310
- updateCheckThread = NULL;
311
- checkIntervalSec = 0;
312
- #if BOOST_OS_MACOS
313
- clientCertPath = locator.getResourcesDir() + "/update_check_client_cert.p12";
314
- #else
315
- clientCertPath = locator.getResourcesDir() + "/update_check_client_cert.pem";
316
- #endif
317
- serverPubKeyPath = locator.getResourcesDir() + "/update_check_server_pubkey.pem";
318
- proxyAddress = proxy;
319
- this->serverIntegration = serverIntegration;
320
- this->serverVersion = serverVersion;
321
- try {
322
- proxyInfo = prepareCurlProxy(proxyAddress);
323
- } catch (const ArgumentException &e) {
324
- assert(!proxyInfo.valid);
325
- proxyAddress = "Invalid proxy address for security update check: \"" +
326
- proxyAddress + "\": " + e.what();
327
- }
328
- }
442
+ SecurityUpdateChecker(const Schema &schema, const Json::Value &initialConfig,
443
+ const ConfigKit::Translator &translator = ConfigKit::DummyTranslator())
444
+ : config(schema, initialConfig, translator),
445
+ configRlz(config),
446
+ updateCheckThread(NULL),
447
+ resourceLocator(NULL)
448
+ { }
329
449
 
330
450
  virtual ~SecurityUpdateChecker() {
331
451
  if (updateCheckThread != NULL) {
332
452
  updateCheckThread->interrupt_and_join();
333
453
  delete updateCheckThread;
334
- updateCheckThread = NULL;
335
454
  }
336
- if (crypto) {
337
- delete crypto;
455
+ }
456
+
457
+ void initialize() {
458
+ if (resourceLocator == NULL) {
459
+ throw RuntimeException("resourceLocator must be non-NULL");
338
460
  }
461
+
462
+ #if BOOST_OS_MACOS
463
+ clientCertPath = resourceLocator->getResourcesDir() + "/update_check_client_cert.p12";
464
+ #else
465
+ clientCertPath = resourceLocator->getResourcesDir() + "/update_check_client_cert.pem";
466
+ #endif
467
+ serverPubKeyPath = resourceLocator->getResourcesDir() + "/update_check_server_pubkey.pem";
339
468
  }
340
469
 
341
470
  /**
342
- * Starts a periodic check at every checkIntervalSec. For each check, the server may increase/decrease
343
- * (within limits) the period until the next check (using the backoff parameter in the response).
471
+ * Starts a periodic check, as dictated by the "interval" config option. For each check, the
472
+ * server may increase/decrease (within limits) the period until the next check (using the
473
+ * backoff parameter in the response).
344
474
  *
345
475
  * Assumes curl_global_init() was already performed.
346
476
  */
347
- void start(long checkIntervalSec) {
348
- this->checkIntervalSec = checkIntervalSec;
349
-
350
- assert(checkIntervalSec >= MIN_CHECK_BACKOFF_SEC && checkIntervalSec <= MAX_CHECK_BACKOFF_SEC);
477
+ void start() {
351
478
  updateCheckThread = new oxt::thread(
352
- boost::bind(&SecurityUpdateChecker::threadMain, this),
353
- "Security update checker",
354
- 1024 * 512
355
- );
479
+ boost::bind(&SecurityUpdateChecker::threadMain, this),
480
+ "Security update checker",
481
+ 1024 * 512
482
+ );
356
483
  }
357
484
 
358
485
  /**
359
486
  * All error log methods eventually lead here, except for the additional below.
360
487
  */
361
488
  virtual void logUpdateFail(string error) {
362
- P_ERROR("Security update check failed: " << error << " (next check in " << (checkIntervalSec / (60*60)) << " hours)");
489
+ unsigned int checkIntervalSec;
490
+ {
491
+ boost::lock_guard<boost::mutex> l(configSyncher);
492
+ checkIntervalSec = config["interval"].asUInt();
493
+ }
494
+ P_ERROR("Security update check failed: " << error << " (next check in "
495
+ << (checkIntervalSec / (60*60)) << " hours)");
363
496
  }
364
497
 
365
498
  /**
@@ -390,11 +523,11 @@ public:
390
523
  }
391
524
 
392
525
  virtual bool fillNonce(string &nonce) {
393
- return crypto->generateAndAppendNonce(nonce);
526
+ return crypto.generateAndAppendNonce(nonce);
394
527
  }
395
528
 
396
529
  /**
397
- * Sends POST to CHECK_URL_DEFAULT (via SSL, with client cert) containing:
530
+ * Sends POST to the configured URL (via SSL, with client cert) containing:
398
531
  * {"version":"<passenger version>", "nonce":"<random nonce>"}
399
532
  * The response will be:
400
533
  * {"data":base64(data), "signature":base64(signature)}, where:
@@ -408,13 +541,23 @@ public:
408
541
  int checkAndLogSecurityUpdate() {
409
542
  int backoffMin = 0;
410
543
 
544
+ // 0. Copy current configuration
545
+ boost::unique_lock<boost::mutex> l(configSyncher);
546
+ SessionState sessionState(config, configRlz);
547
+ l.unlock();
548
+
549
+ if (sessionState.config["disabled"].asBool()) {
550
+ P_INFO("Security update checking disabled; skipping check");
551
+ return backoffMin;
552
+ }
553
+
411
554
  // 1. Assemble data to send
412
555
  Json::Value bodyJson;
413
556
 
414
557
  bodyJson["passenger_version"] = PASSENGER_VERSION;
415
558
 
416
- bodyJson["server_integration"] = serverIntegration;
417
- bodyJson["server_version"] = serverVersion;
559
+ bodyJson["server_integration"] = sessionState.config["server_identifier"];
560
+ bodyJson["server_version"] = sessionState.config["web_server_version"];
418
561
  bodyJson["curl_static"] = isCurlStaticallyLinked();
419
562
 
420
563
  string nonce;
@@ -445,34 +588,31 @@ public:
445
588
  }
446
589
 
447
590
  if (CURLE_OK != (code = setCurlDefaultCaInfo(curl))) {
448
- logUpdateFailCurl(code);
591
+ logUpdateFailCurl(sessionState, code);
449
592
  break;
450
593
  }
451
594
 
452
- // string localApprovedCert = "/your/ca.crt"; // for testing against a local server
453
- // curl_easy_setopt(curl, CURLOPT_CAINFO, localApprovedCert.c_str());
454
-
455
- if (!proxyInfo.valid) {
456
- // special case: delayed error in proxyAddress
457
- logUpdateFail(proxyAddress);
458
- break;
595
+ if (!sessionState.configRlz.certificatePath.empty()) {
596
+ curl_easy_setopt(curl, CURLOPT_CAINFO, sessionState.configRlz.certificatePath.c_str());
459
597
  }
460
598
 
461
599
  string bodyJsonString = bodyJson.toStyledString();
462
- if (CURLE_OK != (code = prepareCurlPOST(curl, bodyJsonString, &responseData, &chunk))) {
463
- logUpdateFailCurl(code);
600
+ if (CURLE_OK != (code = prepareCurlPOST(curl, sessionState, bodyJsonString,
601
+ &responseData, &chunk)))
602
+ {
603
+ logUpdateFailCurl(sessionState, code);
464
604
  break;
465
605
  }
466
606
 
467
607
  P_DEBUG("sending: " << bodyJsonString);
468
608
  if (CURLE_OK != (code = sendAndReceive(curl, &responseData, &responseCode))) {
469
- logUpdateFailCurl(code);
609
+ logUpdateFailCurl(sessionState, code);
470
610
  break;
471
611
  }
472
612
 
473
613
  // 3a. Verify response: HTTP code
474
614
  if (responseCode != 200) {
475
- logUpdateFailHttp((int) responseCode);
615
+ logUpdateFailHttp(sessionState, (int) responseCode);
476
616
  break;
477
617
  }
478
618
 
@@ -506,7 +646,7 @@ public:
506
646
  break;
507
647
  }
508
648
 
509
- if (!crypto->verifySignature(serverPubKeyPath, signatureChars, signatureLen, data64)) {
649
+ if (!crypto.verifySignature(serverPubKeyPath, signatureChars, signatureLen, data64)) {
510
650
  logUpdateFailResponse("untrusted or forged signature", responseData);
511
651
  break;
512
652
  }
@@ -550,10 +690,16 @@ public:
550
690
  }
551
691
 
552
692
  if (update == 0) {
553
- logUpdateSuccess(update, "Security update check: no update found (next check in " + toString(checkIntervalSec / (60*60)) + " hours)");
693
+ unsigned int checkIntervalSec;
694
+ {
695
+ boost::lock_guard<boost::mutex> l(configSyncher);
696
+ checkIntervalSec = config["interval"].asUInt();
697
+ }
698
+ logUpdateSuccess(update, "Security update check: no update found (next check in "
699
+ + toString(checkIntervalSec / (60*60)) + " hours)");
554
700
  } else {
555
701
  logUpdateSuccess(update, "A security update is available for your version (" PASSENGER_VERSION
556
- ") of Passenger, we strongly recommend upgrading to version " +
702
+ ") of " PROGRAM_NAME ". We strongly recommend upgrading to version " +
557
703
  responseDataJson["version"].asString() + ".");
558
704
  }
559
705
 
@@ -562,14 +708,14 @@ public:
562
708
  if (responseDataJson["log"].isString()) {
563
709
  string additional = responseDataJson["log"].asString();
564
710
  if (additional.length() > 0) {
565
- logUpdateSuccessAdditional(" Additional information: " + additional);
711
+ logUpdateSuccessAdditional("Additional security update check information: " + additional);
566
712
  }
567
713
  }
568
- } while (0);
714
+ } while (false);
569
715
 
570
716
  #if BOOST_OS_MACOS
571
717
  // remove the security update check key from the user's keychain so that if we are stopped/crash and are upgraded or reinstalled before restarting we don't have permission problems
572
- crypto->killKey(CLIENT_CERT_LABEL);
718
+ crypto.killKey(CLIENT_CERT_LABEL);
573
719
  #endif
574
720
 
575
721
  if (signatureChars) {
@@ -584,12 +730,29 @@ public:
584
730
  return backoffMin;
585
731
  }
586
732
 
587
- static size_t receiveResponseBytes(void *buffer, size_t size, size_t nmemb, void *userData) {
588
- string *responseData = (string *) userData;
589
- responseData->append((const char *) buffer, size * nmemb);
590
- return size * nmemb;
733
+ bool prepareConfigChange(const Json::Value &updates,
734
+ vector<ConfigKit::Error> &errors, ConfigChangeRequest &req)
735
+ {
736
+ {
737
+ boost::lock_guard<boost::mutex> l(configSyncher);
738
+ req.config.reset(new ConfigKit::Store(config, updates, errors));
739
+ }
740
+ if (errors.empty()) {
741
+ req.configRlz.reset(new ConfigRealization(*req.config));
742
+ }
743
+ return errors.empty();
591
744
  }
592
745
 
746
+ void commitConfigChange(ConfigChangeRequest &req) BOOST_NOEXCEPT_OR_NOTHROW {
747
+ boost::lock_guard<boost::mutex> l(configSyncher);
748
+ config.swap(*req.config);
749
+ configRlz.swap(*req.configRlz);
750
+ }
751
+
752
+ Json::Value inspectConfig() const {
753
+ boost::lock_guard<boost::mutex> l(configSyncher);
754
+ return config.inspect();
755
+ }
593
756
  };
594
757
 
595
758
  } // namespace Passenger