passenger 5.0.21 → 5.0.22

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 (203) hide show
  1. checksums.yaml +8 -8
  2. checksums.yaml.gz.asc +7 -7
  3. data.tar.gz.asc +7 -7
  4. data/CHANGELOG +38 -2
  5. data/CONTRIBUTORS +3 -0
  6. data/README.md +5 -1
  7. data/bin/passenger-status +2 -7
  8. data/build/agent.rb +2 -0
  9. data/build/cxx_dependency_map.rb +1464 -162
  10. data/build/node_tests.rb +1 -1
  11. data/build/packaging.rb +1 -1
  12. data/dev/ci/run_travis.sh +1 -1
  13. data/dev/vagrant/provision.sh +1 -1
  14. data/npm-shrinkwrap.json +635 -125
  15. data/package.json +1 -1
  16. data/resources/templates/standalone/config.erb +33 -161
  17. data/resources/templates/standalone/global.erb +15 -0
  18. data/resources/templates/standalone/http.erb +40 -0
  19. data/resources/templates/standalone/mass_deployment_default_server.erb +11 -0
  20. data/resources/templates/standalone/rails_asset_pipeline.erb +22 -0
  21. data/resources/templates/standalone/server.erb +58 -0
  22. data/src/agent/Core/ApiServer.h +37 -32
  23. data/src/agent/Core/ApplicationPool/BasicGroupInfo.h +1 -1
  24. data/src/agent/Core/ApplicationPool/BasicProcessInfo.h +6 -0
  25. data/src/agent/Core/ApplicationPool/Common.h +1 -1
  26. data/src/agent/Core/ApplicationPool/Group/OutOfBandWork.cpp +1 -1
  27. data/src/agent/Core/ApplicationPool/Group/ProcessListManagement.cpp +4 -0
  28. data/src/agent/Core/ApplicationPool/Implementation.cpp +2 -2
  29. data/src/agent/Core/ApplicationPool/Options.h +18 -1
  30. data/src/agent/Core/ApplicationPool/Pool.h +1 -1
  31. data/src/agent/Core/ApplicationPool/Pool/AnalyticsCollection.cpp +6 -6
  32. data/src/agent/Core/ApplicationPool/Pool/GeneralUtils.cpp +3 -3
  33. data/src/agent/Core/ApplicationPool/Pool/InitializationAndShutdown.cpp +1 -1
  34. data/src/agent/Core/ApplicationPool/Pool/Miscellaneous.cpp +6 -0
  35. data/src/agent/Core/ApplicationPool/Process.h +6 -1
  36. data/src/agent/Core/ApplicationPool/Socket.h +9 -12
  37. data/src/agent/Core/Controller.h +422 -0
  38. data/src/agent/Core/{RequestHandler → Controller}/AppResponse.h +2 -0
  39. data/src/agent/Core/{RequestHandler → Controller}/BufferBody.cpp +27 -5
  40. data/src/agent/Core/{RequestHandler → Controller}/CheckoutSession.cpp +61 -31
  41. data/src/agent/Core/{RequestHandler → Controller}/Client.h +5 -2
  42. data/src/agent/Core/{RequestHandler → Controller}/ForwardResponse.cpp +93 -42
  43. data/src/agent/Core/{RequestHandler → Controller}/Hooks.cpp +107 -60
  44. data/src/agent/Core/Controller/Implementation.cpp +38 -0
  45. data/src/agent/Core/{RequestHandler → Controller}/InitRequest.cpp +134 -80
  46. data/src/agent/Core/Controller/InitializationAndShutdown.cpp +165 -0
  47. data/src/agent/Core/{RequestHandler/Utils.cpp → Controller/InternalUtils.cpp} +49 -32
  48. data/src/agent/Core/Controller/Miscellaneous.cpp +116 -0
  49. data/src/agent/Core/{RequestHandler → Controller}/Request.h +6 -4
  50. data/src/agent/Core/{RequestHandler → Controller}/SendRequest.cpp +205 -130
  51. data/src/agent/Core/Controller/StateInspectionAndConfiguration.cpp +161 -0
  52. data/src/agent/Core/{RequestHandler → Controller}/TurboCaching.h +3 -0
  53. data/src/agent/Core/CoreMain.cpp +62 -51
  54. data/src/agent/Core/OptionParser.h +24 -0
  55. data/src/agent/Core/ResponseCache.h +5 -5
  56. data/src/agent/Core/SpawningKit/Config.h +2 -2
  57. data/src/agent/Core/SpawningKit/SmartSpawner.h +1 -1
  58. data/src/agent/Core/UnionStation/{Core.h → Context.h} +14 -18
  59. data/src/agent/Core/UnionStation/StopwatchLog.h +3 -2
  60. data/src/agent/Core/UnionStation/Transaction.h +7 -7
  61. data/src/agent/Shared/ApiServerUtils.h +9 -1
  62. data/src/agent/UstRouter/ApiServer.h +5 -2
  63. data/src/agent/UstRouter/Controller.h +27 -9
  64. data/src/agent/UstRouter/UstRouterMain.cpp +1 -0
  65. data/src/agent/Watchdog/ApiServer.h +5 -2
  66. data/src/apache2_module/ConfigurationCommands.cpp +7 -0
  67. data/src/apache2_module/ConfigurationFields.hpp +2 -0
  68. data/src/apache2_module/ConfigurationSetters.cpp +24 -0
  69. data/src/apache2_module/CreateDirConfig.cpp +1 -0
  70. data/src/apache2_module/Hooks.cpp +6 -5
  71. data/src/apache2_module/MergeDirConfig.cpp +7 -0
  72. data/src/apache2_module/SetHeaders.cpp +5 -0
  73. data/src/cxx_supportlib/Constants.h +5 -3
  74. data/src/cxx_supportlib/SafeLibev.h +2 -1
  75. data/src/cxx_supportlib/UnionStationFilterSupport.h +2 -1
  76. data/src/cxx_supportlib/Utils/ReleaseableScopedPointer.h +70 -0
  77. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/regex_raw_buffer.cpp +6 -6
  78. data/src/helper-scripts/node-loader.js +59 -0
  79. data/src/nginx_module/CacheLocationConfig.c +48 -0
  80. data/src/nginx_module/ConfigurationCommands.c +20 -0
  81. data/src/nginx_module/ConfigurationFields.h +4 -0
  82. data/src/nginx_module/CreateLocationConfig.c +8 -0
  83. data/src/nginx_module/MergeLocationConfig.c +12 -0
  84. data/src/nodejs_supportlib/phusion_passenger/log_express.js +106 -0
  85. data/src/nodejs_supportlib/phusion_passenger/log_mongodb.js +203 -0
  86. data/src/nodejs_supportlib/phusion_passenger/ustreporter.js +227 -0
  87. data/src/nodejs_supportlib/phusion_passenger/ustrouter_connector.js +446 -0
  88. data/src/nodejs_supportlib/vendor-copy/codify/codify.js +44 -0
  89. data/src/nodejs_supportlib/vendor-copy/codify/package.json +29 -0
  90. data/src/nodejs_supportlib/vendor-copy/continuation-local-storage/context.js +200 -0
  91. data/src/nodejs_supportlib/vendor-copy/continuation-local-storage/node_modules/async-listener/glue.js +488 -0
  92. data/src/nodejs_supportlib/vendor-copy/continuation-local-storage/node_modules/async-listener/index.js +407 -0
  93. data/src/nodejs_supportlib/vendor-copy/continuation-local-storage/node_modules/async-listener/node_modules/shimmer/index.js +90 -0
  94. data/src/nodejs_supportlib/vendor-copy/continuation-local-storage/node_modules/async-listener/node_modules/shimmer/package.json +40 -0
  95. data/src/nodejs_supportlib/vendor-copy/continuation-local-storage/node_modules/async-listener/package.json +54 -0
  96. data/src/nodejs_supportlib/vendor-copy/continuation-local-storage/node_modules/emitter-listener/listener.js +160 -0
  97. data/src/nodejs_supportlib/vendor-copy/continuation-local-storage/node_modules/emitter-listener/node_modules/shimmer/index.js +90 -0
  98. data/src/nodejs_supportlib/vendor-copy/continuation-local-storage/node_modules/emitter-listener/node_modules/shimmer/package.json +40 -0
  99. data/src/nodejs_supportlib/vendor-copy/continuation-local-storage/node_modules/emitter-listener/package.json +46 -0
  100. data/src/nodejs_supportlib/vendor-copy/continuation-local-storage/package.json +56 -0
  101. data/src/nodejs_supportlib/vendor-copy/network-byte-order/lib/index.js +102 -0
  102. data/src/nodejs_supportlib/vendor-copy/network-byte-order/package.json +51 -0
  103. data/src/nodejs_supportlib/vendor-copy/winston/LICENSE +19 -0
  104. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston.js +165 -0
  105. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/common.js +483 -0
  106. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/config.js +62 -0
  107. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/config/cli-config.js +35 -0
  108. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/config/npm-config.js +27 -0
  109. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/config/syslog-config.js +31 -0
  110. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/container.js +127 -0
  111. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/exception.js +56 -0
  112. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/logger.js +701 -0
  113. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/transports.js +34 -0
  114. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/transports/console.js +128 -0
  115. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/transports/daily-rotate-file.js +601 -0
  116. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/transports/file.js +675 -0
  117. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/transports/http.js +232 -0
  118. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/transports/memory.js +89 -0
  119. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/transports/transport.js +135 -0
  120. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/transports/webhook.js +146 -0
  121. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/async/LICENSE +19 -0
  122. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/async/lib/async.js +1283 -0
  123. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/async/package.json +66 -0
  124. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/async/support/sync-package-managers.js +53 -0
  125. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/colors/MIT-LICENSE.txt +23 -0
  126. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/colors/lib/colors.js +176 -0
  127. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/colors/lib/custom/trap.js +45 -0
  128. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/colors/lib/custom/zalgo.js +104 -0
  129. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/colors/lib/extendStringPrototype.js +118 -0
  130. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/colors/lib/index.js +12 -0
  131. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/colors/lib/maps/america.js +12 -0
  132. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/colors/lib/maps/rainbow.js +13 -0
  133. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/colors/lib/maps/random.js +8 -0
  134. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/colors/lib/maps/zebra.js +5 -0
  135. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/colors/lib/styles.js +77 -0
  136. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/colors/lib/system/supports-colors.js +61 -0
  137. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/colors/package.json +35 -0
  138. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/colors/safe.js +9 -0
  139. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/colors/themes/generic-logging.js +12 -0
  140. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/cycle/cycle.js +170 -0
  141. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/cycle/package.json +30 -0
  142. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/eyes/LICENSE +20 -0
  143. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/eyes/lib/eyes.js +236 -0
  144. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/eyes/package.json +42 -0
  145. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/isstream/LICENSE.md +11 -0
  146. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/isstream/isstream.js +27 -0
  147. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/isstream/package.json +42 -0
  148. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/pkginfo/LICENSE +19 -0
  149. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/pkginfo/lib/pkginfo.js +136 -0
  150. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/pkginfo/package.json +56 -0
  151. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/stack-trace/License +19 -0
  152. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/stack-trace/lib/stack-trace.js +111 -0
  153. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/stack-trace/package.json +33 -0
  154. data/src/nodejs_supportlib/vendor-copy/winston/package.json +87 -0
  155. data/src/ruby_supportlib/phusion_passenger.rb +3 -4
  156. data/src/ruby_supportlib/phusion_passenger/admin_tools/instance.rb +19 -2
  157. data/src/ruby_supportlib/phusion_passenger/apache2/config_options.rb +8 -0
  158. data/src/ruby_supportlib/phusion_passenger/config/list_instances_command.rb +2 -6
  159. data/src/ruby_supportlib/phusion_passenger/config/reopen_logs_command.rb +13 -0
  160. data/src/ruby_supportlib/phusion_passenger/config/restart_app_command.rb +3 -0
  161. data/src/ruby_supportlib/phusion_passenger/config/utils.rb +9 -7
  162. data/src/ruby_supportlib/phusion_passenger/config/validate_install_command.rb +8 -1
  163. data/src/ruby_supportlib/phusion_passenger/constants.rb +3 -1
  164. data/src/ruby_supportlib/phusion_passenger/native_support.rb +20 -4
  165. data/src/ruby_supportlib/phusion_passenger/nginx/config_options.rb +8 -0
  166. data/src/ruby_supportlib/phusion_passenger/packaging.rb +1 -0
  167. data/src/ruby_supportlib/phusion_passenger/platform_info/apache_detector.rb +1 -1
  168. data/src/ruby_supportlib/phusion_passenger/platform_info/operating_system.rb +11 -4
  169. data/src/ruby_supportlib/phusion_passenger/rack/thread_handler_extension.rb +1 -1
  170. data/src/ruby_supportlib/phusion_passenger/standalone/config_options_list.rb +647 -0
  171. data/src/ruby_supportlib/phusion_passenger/standalone/config_utils.rb +229 -15
  172. data/src/ruby_supportlib/phusion_passenger/standalone/start_command.rb +35 -323
  173. data/src/ruby_supportlib/phusion_passenger/standalone/start_command/builtin_engine.rb +36 -12
  174. data/src/ruby_supportlib/phusion_passenger/standalone/start_command/nginx_engine.rb +123 -14
  175. data/src/ruby_supportlib/phusion_passenger/standalone/status_command.rb +32 -17
  176. data/src/ruby_supportlib/phusion_passenger/standalone/stop_command.rb +32 -21
  177. data/src/ruby_supportlib/phusion_passenger/standalone/version_command.rb +5 -5
  178. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/README.md +2 -2
  179. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/Rakefile +5 -1
  180. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core.rb +68 -24
  181. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/api.rb +9 -1
  182. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/context.rb +9 -7
  183. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/request_reporter.rb +3 -2
  184. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/request_reporter/basics.rb +8 -5
  185. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/simple_json.rb +395 -0
  186. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/transaction.rb +10 -7
  187. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/utils.rb +14 -0
  188. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/version_data.rb +2 -2
  189. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/ruby_versions.yml +4 -2
  190. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/ruby_versions.yml.example +2 -2
  191. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/ruby_versions.yml.travis +2 -2
  192. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/ruby_versions.yml.travis-with-sudo +16 -0
  193. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_rails/Gemfile +1 -1
  194. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_rails/Gemfile.lock +2 -2
  195. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_rails/README.md +1 -1
  196. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_rails/lib/union_station_hooks_rails.rb +44 -17
  197. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_rails/lib/union_station_hooks_rails/active_support_cache_subscriber.rb +16 -7
  198. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_rails/lib/union_station_hooks_rails/version_data.rb +2 -2
  199. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_rails/union_station_hooks_rails.gemspec +1 -1
  200. metadata +99 -16
  201. metadata.gz.asc +7 -7
  202. data/resources/oss-binaries.phusionpassenger.com.crt +0 -248
  203. data/src/agent/Core/RequestHandler.h +0 -471
metadata.gz.asc CHANGED
@@ -2,11 +2,11 @@
2
2
  Version: GnuPG/MacGPG2 v2.0.17 (Darwin)
3
3
  Comment: GPGTools - http://gpgtools.org
4
4
 
5
- iQEcBAABAgAGBQJWKKTiAAoJECrHRaUKISqMekQH/1osYVyAJQ13IA9saa0qd7zw
6
- ebgUPfao2rL4HQIvguxxO1m03wlzeOj1Thwyayl3/3cAqT8+7hyuqzTXuE5Haw5C
7
- CnIZxaaFQDINNCWnR72jAsFzMgAMPw/E5i1dqj+qQg800EIw3A/ahEMWA12c0TSm
8
- cfYOcAffDUiwTqOIEjYvoP2bpMi5onyGBR4zvS8DmekPhPr6McvEQi7BhFDgPPnA
9
- ozkFns1HIhjizqMM9cG1BmpRxodc+iLhGriTpgfu508ETl5ZKJYJOhMomEawtJ8A
10
- k5sX2UEqsOIcw0tyibJ/XgF8Yd1ncPurZHrzYzO+jih105zOhCLKImawxxWmQhs=
11
- =wsRl
5
+ iQEcBAABAgAGBQJWZcnSAAoJECrHRaUKISqM4U0H/AmwSUzb6U577R1Ek4iR+d+Q
6
+ KbG8ejH4y2kuMfNsn9EVwq3OTkzNiTKBM47Vo8covtplEmg1HFmGMUwhpJyUanZD
7
+ 5uquGtl+2kDfvGp3TQRsmqk8nSYDUJq7k6IC8q2fmCCen7VRa6gNnZ7QYdhhePXp
8
+ 84mJsk4zqrHSafOHX0kHYd1dZQlufG+pM3ufX330M9a1FDUhH4VzVWcNmlIqiV/w
9
+ Z3Lr+Vni74pDYIOKX+xJkXtbLz2Tza4fEyVndeORPdJrpoRNtThGwp7CSvfZgXTw
10
+ 5IeODjXtZIsxNCDjb4c+mFhpUKI9m357A8bCwlgSuBFEXf8XmTYQkGIaFskwZqE=
11
+ =CWuL
12
12
  -----END PGP SIGNATURE-----
@@ -1,248 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIFiTCCBHGgAwIBAgIRAL9IMkS19yW5MiZ4wGzQT2wwDQYJKoZIhvcNAQELBQAw
3
- gZAxCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
4
- BgNVBAcTB1NhbGZvcmQxGjAYBgNVBAoTEUNPTU9ETyBDQSBMaW1pdGVkMTYwNAYD
5
- VQQDEy1DT01PRE8gUlNBIERvbWFpbiBWYWxpZGF0aW9uIFNlY3VyZSBTZXJ2ZXIg
6
- Q0EwHhcNMTMwODA3MDAwMDAwWhcNMTgwODA2MjM1OTU5WjBlMSEwHwYDVQQLExhE
7
- b21haW4gQ29udHJvbCBWYWxpZGF0ZWQxFDASBgNVBAsTC1Bvc2l0aXZlU1NMMSow
8
- KAYDVQQDEyFvc3MtYmluYXJpZXMucGh1c2lvbnBhc3Nlbmdlci5jb20wggEiMA0G
9
- CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCotJA5DmU1gX2aSXfLFPNPiRTIF3dx
10
- R9LADPSm86VSdkdQuYKP4SfttKi59939ZwiX1e+n3vOQ3oca3NTCKTfs9ZLond3k
11
- u+N5xF6LAR8H9l6vwKLfb/BU4Ct3jS1hoYJ424QQIUG9ZocHYk1CnA+l7vodfQDm
12
- HR+7VUfuLdCsG/FrlJJtoNODHLJSPq95CxK27GspAFE1s/NqilAgOjB/YYPeDMbJ
13
- 0qgHaid7Lhi7U4Hl1FE2xEI3fhCJ+XoC8mo/MaRaZHSutWDWZJtbYTvLdhV1vT28
14
- vaobQoOV40Pg7T/J89Hj55IiOhADueimVFYbac3lRfyBfLnryfywU3q/AgMBAAGj
15
- ggIGMIICAjAfBgNVHSMEGDAWgBSQr2o6lFoL2JDqElZz30O0Oija5zAdBgNVHQ4E
16
- FgQUqB8zrscqx9dRl2cEL40fKGwK79AwDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB
17
- /wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMFAGA1UdIARJMEcw
18
- OwYMKwYBBAGyMQECAQMEMCswKQYIKwYBBQUHAgEWHWh0dHBzOi8vc2VjdXJlLmNv
19
- bW9kby5uZXQvQ1BTMAgGBmeBDAECATBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8v
20
- Y3JsLmNvbW9kb2NhLmNvbS9DT01PRE9SU0FEb21haW5WYWxpZGF0aW9uU2VjdXJl
21
- U2VydmVyQ0EuY3JsMIGFBggrBgEFBQcBAQR5MHcwTwYIKwYBBQUHMAKGQ2h0dHA6
22
- Ly9jcnQuY29tb2RvY2EuY29tL0NPTU9ET1JTQURvbWFpblZhbGlkYXRpb25TZWN1
23
- cmVTZXJ2ZXJDQS5jcnQwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmNvbW9kb2Nh
24
- LmNvbTBTBgNVHREETDBKgiFvc3MtYmluYXJpZXMucGh1c2lvbnBhc3Nlbmdlci5j
25
- b22CJXd3dy5vc3MtYmluYXJpZXMucGh1c2lvbnBhc3Nlbmdlci5jb20wDQYJKoZI
26
- hvcNAQELBQADggEBABx5Q+/JG7p7KGGM29reQQWYllY2r/qhkQYYZTpClehECckN
27
- DZyweY7JN9yYK5OZK7kEbZnuW0VQm0pRfC0+k1bg9dM0uVrW5BOgAk10qj9y1N3y
28
- x6dOtsJ+OGrFu5vK03QDQsYpUwtPMioM4d2Us+2YlfxHqmjRkFuMZvfcS4HHM6v/
29
- qrrceb9+tOGi6DPoXV6XixChKZ95h0PJDogc+SFoev4WJOfQSi2VbZywSZVF/brR
30
- /4QtWantedDESQAnmWZegEQTNupLIT/HseNR+5s3c7YrDDxHZdAKefOd6cbBomqb
31
- uvzhX9c6lX5CZKsl7bq+JBV6fBtzhrqhUspdDXY=
32
- -----END CERTIFICATE-----
33
- -----BEGIN CERTIFICATE-----
34
- MIIGCDCCA/CgAwIBAgIQKy5u6tl1NmwUim7bo3yMBzANBgkqhkiG9w0BAQwFADCB
35
- hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
36
- A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV
37
- BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTQwMjEy
38
- MDAwMDAwWhcNMjkwMjExMjM1OTU5WjCBkDELMAkGA1UEBhMCR0IxGzAZBgNVBAgT
39
- EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
40
- Q09NT0RPIENBIExpbWl0ZWQxNjA0BgNVBAMTLUNPTU9ETyBSU0EgRG9tYWluIFZh
41
- bGlkYXRpb24gU2VjdXJlIFNlcnZlciBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
42
- ADCCAQoCggEBAI7CAhnhoFmk6zg1jSz9AdDTScBkxwtiBUUWOqigwAwCfx3M28Sh
43
- bXcDow+G+eMGnD4LgYqbSRutA776S9uMIO3Vzl5ljj4Nr0zCsLdFXlIvNN5IJGS0
44
- Qa4Al/e+Z96e0HqnU4A7fK31llVvl0cKfIWLIpeNs4TgllfQcBhglo/uLQeTnaG6
45
- ytHNe+nEKpooIZFNb5JPJaXyejXdJtxGpdCsWTWM/06RQ1A/WZMebFEh7lgUq/51
46
- UHg+TLAchhP6a5i84DuUHoVS3AOTJBhuyydRReZw3iVDpA3hSqXttn7IzW3uLh0n
47
- c13cRTCAquOyQQuvvUSH2rnlG51/ruWFgqUCAwEAAaOCAWUwggFhMB8GA1UdIwQY
48
- MBaAFLuvfgI9+qbxPISOre44mOzZMjLUMB0GA1UdDgQWBBSQr2o6lFoL2JDqElZz
49
- 30O0Oija5zAOBgNVHQ8BAf8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNV
50
- HSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwGwYDVR0gBBQwEjAGBgRVHSAAMAgG
51
- BmeBDAECATBMBgNVHR8ERTBDMEGgP6A9hjtodHRwOi8vY3JsLmNvbW9kb2NhLmNv
52
- bS9DT01PRE9SU0FDZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDBxBggrBgEFBQcB
53
- AQRlMGMwOwYIKwYBBQUHMAKGL2h0dHA6Ly9jcnQuY29tb2RvY2EuY29tL0NPTU9E
54
- T1JTQUFkZFRydXN0Q0EuY3J0MCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5jb21v
55
- ZG9jYS5jb20wDQYJKoZIhvcNAQEMBQADggIBAE4rdk+SHGI2ibp3wScF9BzWRJ2p
56
- mj6q1WZmAT7qSeaiNbz69t2Vjpk1mA42GHWx3d1Qcnyu3HeIzg/3kCDKo2cuH1Z/
57
- e+FE6kKVxF0NAVBGFfKBiVlsit2M8RKhjTpCipj4SzR7JzsItG8kO3KdY3RYPBps
58
- P0/HEZrIqPW1N+8QRcZs2eBelSaz662jue5/DJpmNXMyYE7l3YphLG5SEXdoltMY
59
- dVEVABt0iN3hxzgEQyjpFv3ZBdRdRydg1vs4O2xyopT4Qhrf7W8GjEXCBgCq5Ojc
60
- 2bXhc3js9iPc0d1sjhqPpepUfJa3w/5Vjo1JXvxku88+vZbrac2/4EjxYoIQ5QxG
61
- V/Iz2tDIY+3GH5QFlkoakdH368+PUq4NCNk+qKBR6cGHdNXJ93SrLlP7u3r7l+L4
62
- HyaPs9Kg4DdbKDsx5Q5XLVq4rXmsXiBmGqW5prU5wfWYQ//u+aen/e7KJD2AFsQX
63
- j4rBYKEMrltDR5FL1ZoXX/nUh8HCjLfn4g8wGTeGrODcQgPmlKidrv0PJFGUzpII
64
- 0fxQ8ANAe4hZ7Q7drNJ3gjTcBpUC2JD5Leo31Rpg0Gcg19hCC0Wvgmje3WYkN5Ap
65
- lBlGGSW4gNfL1IYoakRwJiNiqZ+Gb7+6kHDSVneFeO/qJakXzlByjAA6quPbYzSf
66
- +AZxAeKCINT+b72x
67
- -----END CERTIFICATE-----
68
- -----BEGIN CERTIFICATE-----
69
- MIIFdDCCBFygAwIBAgIQJ2buVutJ846r13Ci/ITeIjANBgkqhkiG9w0BAQwFADBv
70
- MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFk
71
- ZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBF
72
- eHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFow
73
- gYUxCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
74
- BgNVBAcTB1NhbGZvcmQxGjAYBgNVBAoTEUNPTU9ETyBDQSBMaW1pdGVkMSswKQYD
75
- VQQDEyJDT01PRE8gUlNBIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkq
76
- hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAkehUktIKVrGsDSTdxc9EZ3SZKzejfSNw
77
- AHG8U9/E+ioSj0t/EFa9n3Byt2F/yUsPF6c947AEYe7/EZfH9IY+Cvo+XPmT5jR6
78
- 2RRr55yzhaCCenavcZDX7P0N+pxs+t+wgvQUfvm+xKYvT3+Zf7X8Z0NyvQwA1onr
79
- ayzT7Y+YHBSrfuXjbvzYqOSSJNpDa2K4Vf3qwbxstovzDo2a5JtsaZn4eEgwRdWt
80
- 4Q08RWD8MpZRJ7xnw8outmvqRsfHIKCxH2XeSAi6pE6p8oNGN4Tr6MyBSENnTnIq
81
- m1y9TBsoilwie7SrmNnu4FGDwwlGTm0+mfqVF9p8M1dBPI1R7Qu2XK8sYxrfV8g/
82
- vOldxJuvRZnio1oktLqpVj3Pb6r/SVi+8Kj/9Lit6Tf7urj0Czr56ENCHonYhMsT
83
- 8dm74YlguIwoVqwUHZwK53Hrzw7dPamWoUi9PPevtQ0iTMARgexWO/bTouJbt7IE
84
- IlKVgJNp6I5MZfGRAy1wdALqi2cVKWlSArvX31BqVUa/oKMoYX9w0MOiqiwhqkfO
85
- KJwGRXa/ghgntNWutMtQ5mv0TIZxMOmm3xaG4Nj/QN370EKIf6MzOi5cHkERgWPO
86
- GHFrK+ymircxXDpqR+DDeVnWIBqv8mqYqnK8V0rSS527EPywTEHl7R09XiidnMy/
87
- s1Hap0flhFMCAwEAAaOB9DCB8TAfBgNVHSMEGDAWgBStvZh6NLQm9/rEJlTvA73g
88
- JMtUGjAdBgNVHQ4EFgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQD
89
- AgGGMA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0gBAowCDAGBgRVHSAAMEQGA1UdHwQ9
90
- MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9BZGRUcnVzdEV4dGVy
91
- bmFsQ0FSb290LmNybDA1BggrBgEFBQcBAQQpMCcwJQYIKwYBBQUHMAGGGWh0dHA6
92
- Ly9vY3NwLnVzZXJ0cnVzdC5jb20wDQYJKoZIhvcNAQEMBQADggEBAGS/g/FfmoXQ
93
- zbihKVcN6Fr30ek+8nYEbvFScLsePP9NDXRqzIGCJdPDoCpdTPW6i6FtxFQJdcfj
94
- Jw5dhHk3QBN39bSsHNA7qxcS1u80GH4r6XnTq1dFDK8o+tDb5VCViLvfhVdpfZLY
95
- Uspzgb8c8+a4bmYRBbMelC1/kZWSWfFMzqORcUx8Rww7Cxn2obFshj5cqsQugsv5
96
- B5a6SE2Q8pTIqXOi6wZ7I53eovNNVZ96YUWYGGjHXkBrI/V5eu+MtWuLt29G9Hvx
97
- PUsE2JOAWVrgQSQdso8VYFhH2+9uRv0V9dlfmrPb2LjkQLPNlzmuhbsdjrzch5vR
98
- pu/xO28QOG8=
99
- -----END CERTIFICATE-----
100
- -----BEGIN CERTIFICATE-----
101
- MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
102
- MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
103
- IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
104
- MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
105
- FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
106
- bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
107
- dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
108
- H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
109
- uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
110
- mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
111
- a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
112
- E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
113
- WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
114
- VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
115
- Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
116
- cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
117
- IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
118
- AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
119
- YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
120
- 6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
121
- Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
122
- c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
123
- mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
124
- -----END CERTIFICATE-----
125
- -----BEGIN CERTIFICATE-----
126
- MIIFiDCCBHCgAwIBAgIRAKKbTg2s/HrxiepdR5rZv4QwDQYJKoZIhvcNAQELBQAw
127
- gZAxCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
128
- BgNVBAcTB1NhbGZvcmQxGjAYBgNVBAoTEUNPTU9ETyBDQSBMaW1pdGVkMTYwNAYD
129
- VQQDEy1DT01PRE8gUlNBIERvbWFpbiBWYWxpZGF0aW9uIFNlY3VyZSBTZXJ2ZXIg
130
- Q0EwHhcNMTUwNzI4MDAwMDAwWhcNMTgwODA2MjM1OTU5WjBlMSEwHwYDVQQLExhE
131
- b21haW4gQ29udHJvbCBWYWxpZGF0ZWQxFDASBgNVBAsTC1Bvc2l0aXZlU1NMMSow
132
- KAYDVQQDEyFvc3MtYmluYXJpZXMucGh1c2lvbnBhc3Nlbmdlci5jb20wggEiMA0G
133
- CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCxYQhjyYbSmZbksniq40HF2qg7qK7E
134
- yDQ2gFJ9FPLWde2fqJSZctVRkAcXSV4nT6nyQt0c+VYWH739fZjUkswCkBCt/Hdp
135
- i1qtHK9bd8300HZtejOn5CVR9NluQAIEl3YAPfIKUCkiv/objKlirckS2GTlwuYs
136
- tJG05/8Iy8a3zh2yjrvH3OndIwGlLQ5Nq7bvSVt/etaaS94Xzz9vmUDb1YACmrAX
137
- j+wYY8Dq5cs/1iBZTbgZmoDSn4kW3eCTbdS/o6nJXZ5GP2WihDTdilZo+KuTAO0G
138
- 49wqXuYZx7LzGNPGDqdKE15sax/pPk6OtmeUrjr7ldvk76mfEOGV2PgZAgMBAAGj
139
- ggIFMIICATAfBgNVHSMEGDAWgBSQr2o6lFoL2JDqElZz30O0Oija5zAdBgNVHQ4E
140
- FgQUXjRYhHKq+0A0QsE/8+WznCY2d5QwDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB
141
- /wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCME8GA1UdIARIMEYw
142
- OgYLKwYBBAGyMQECAgcwKzApBggrBgEFBQcCARYdaHR0cHM6Ly9zZWN1cmUuY29t
143
- b2RvLmNvbS9DUFMwCAYGZ4EMAQIBMFQGA1UdHwRNMEswSaBHoEWGQ2h0dHA6Ly9j
144
- cmwuY29tb2RvY2EuY29tL0NPTU9ET1JTQURvbWFpblZhbGlkYXRpb25TZWN1cmVT
145
- ZXJ2ZXJDQS5jcmwwgYUGCCsGAQUFBwEBBHkwdzBPBggrBgEFBQcwAoZDaHR0cDov
146
- L2NydC5jb21vZG9jYS5jb20vQ09NT0RPUlNBRG9tYWluVmFsaWRhdGlvblNlY3Vy
147
- ZVNlcnZlckNBLmNydDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuY29tb2RvY2Eu
148
- Y29tMFMGA1UdEQRMMEqCIW9zcy1iaW5hcmllcy5waHVzaW9ucGFzc2VuZ2VyLmNv
149
- bYIld3d3Lm9zcy1iaW5hcmllcy5waHVzaW9ucGFzc2VuZ2VyLmNvbTANBgkqhkiG
150
- 9w0BAQsFAAOCAQEAN5jHMCPEdkPx1EucWb5+N0iL8PqPUfeQB9i8fkuJSj8IceAF
151
- Qr2xmJ6QSlX3x+vmc4qGKXIFULTiIZqmG2MpkrF5sjbnOWhIW93mtlaaiH5W5fII
152
- dKZtOShvb0UAe4hZHqL2dPG3gxJxR1Q385cRJOcu0aiKsUrEjIPn9sI84CcDdQEw
153
- zq/fztS84yAUdPzpLimUA7HGrTIqvg1WtzNbGQBPNGx9vS3VE2CAhMthY6aJrYz7
154
- 5XsZBPGchSixoy6KN/gaSDG1GL7inihl0RKByWjGrco8ns5JWFIIuU9zMYhzHKi7
155
- vs1Ik9trJfi3nx3E0AsIsCmgkcx5ziAVbb2qJA==
156
- -----END CERTIFICATE-----
157
- -----BEGIN CERTIFICATE-----
158
- MIIGCDCCA/CgAwIBAgIQKy5u6tl1NmwUim7bo3yMBzANBgkqhkiG9w0BAQwFADCB
159
- hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
160
- A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV
161
- BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTQwMjEy
162
- MDAwMDAwWhcNMjkwMjExMjM1OTU5WjCBkDELMAkGA1UEBhMCR0IxGzAZBgNVBAgT
163
- EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
164
- Q09NT0RPIENBIExpbWl0ZWQxNjA0BgNVBAMTLUNPTU9ETyBSU0EgRG9tYWluIFZh
165
- bGlkYXRpb24gU2VjdXJlIFNlcnZlciBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
166
- ADCCAQoCggEBAI7CAhnhoFmk6zg1jSz9AdDTScBkxwtiBUUWOqigwAwCfx3M28Sh
167
- bXcDow+G+eMGnD4LgYqbSRutA776S9uMIO3Vzl5ljj4Nr0zCsLdFXlIvNN5IJGS0
168
- Qa4Al/e+Z96e0HqnU4A7fK31llVvl0cKfIWLIpeNs4TgllfQcBhglo/uLQeTnaG6
169
- ytHNe+nEKpooIZFNb5JPJaXyejXdJtxGpdCsWTWM/06RQ1A/WZMebFEh7lgUq/51
170
- UHg+TLAchhP6a5i84DuUHoVS3AOTJBhuyydRReZw3iVDpA3hSqXttn7IzW3uLh0n
171
- c13cRTCAquOyQQuvvUSH2rnlG51/ruWFgqUCAwEAAaOCAWUwggFhMB8GA1UdIwQY
172
- MBaAFLuvfgI9+qbxPISOre44mOzZMjLUMB0GA1UdDgQWBBSQr2o6lFoL2JDqElZz
173
- 30O0Oija5zAOBgNVHQ8BAf8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNV
174
- HSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwGwYDVR0gBBQwEjAGBgRVHSAAMAgG
175
- BmeBDAECATBMBgNVHR8ERTBDMEGgP6A9hjtodHRwOi8vY3JsLmNvbW9kb2NhLmNv
176
- bS9DT01PRE9SU0FDZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDBxBggrBgEFBQcB
177
- AQRlMGMwOwYIKwYBBQUHMAKGL2h0dHA6Ly9jcnQuY29tb2RvY2EuY29tL0NPTU9E
178
- T1JTQUFkZFRydXN0Q0EuY3J0MCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5jb21v
179
- ZG9jYS5jb20wDQYJKoZIhvcNAQEMBQADggIBAE4rdk+SHGI2ibp3wScF9BzWRJ2p
180
- mj6q1WZmAT7qSeaiNbz69t2Vjpk1mA42GHWx3d1Qcnyu3HeIzg/3kCDKo2cuH1Z/
181
- e+FE6kKVxF0NAVBGFfKBiVlsit2M8RKhjTpCipj4SzR7JzsItG8kO3KdY3RYPBps
182
- P0/HEZrIqPW1N+8QRcZs2eBelSaz662jue5/DJpmNXMyYE7l3YphLG5SEXdoltMY
183
- dVEVABt0iN3hxzgEQyjpFv3ZBdRdRydg1vs4O2xyopT4Qhrf7W8GjEXCBgCq5Ojc
184
- 2bXhc3js9iPc0d1sjhqPpepUfJa3w/5Vjo1JXvxku88+vZbrac2/4EjxYoIQ5QxG
185
- V/Iz2tDIY+3GH5QFlkoakdH368+PUq4NCNk+qKBR6cGHdNXJ93SrLlP7u3r7l+L4
186
- HyaPs9Kg4DdbKDsx5Q5XLVq4rXmsXiBmGqW5prU5wfWYQ//u+aen/e7KJD2AFsQX
187
- j4rBYKEMrltDR5FL1ZoXX/nUh8HCjLfn4g8wGTeGrODcQgPmlKidrv0PJFGUzpII
188
- 0fxQ8ANAe4hZ7Q7drNJ3gjTcBpUC2JD5Leo31Rpg0Gcg19hCC0Wvgmje3WYkN5Ap
189
- lBlGGSW4gNfL1IYoakRwJiNiqZ+Gb7+6kHDSVneFeO/qJakXzlByjAA6quPbYzSf
190
- +AZxAeKCINT+b72x
191
- -----END CERTIFICATE-----
192
- -----BEGIN CERTIFICATE-----
193
- MIIFdDCCBFygAwIBAgIQJ2buVutJ846r13Ci/ITeIjANBgkqhkiG9w0BAQwFADBv
194
- MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFk
195
- ZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBF
196
- eHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFow
197
- gYUxCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
198
- BgNVBAcTB1NhbGZvcmQxGjAYBgNVBAoTEUNPTU9ETyBDQSBMaW1pdGVkMSswKQYD
199
- VQQDEyJDT01PRE8gUlNBIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkq
200
- hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAkehUktIKVrGsDSTdxc9EZ3SZKzejfSNw
201
- AHG8U9/E+ioSj0t/EFa9n3Byt2F/yUsPF6c947AEYe7/EZfH9IY+Cvo+XPmT5jR6
202
- 2RRr55yzhaCCenavcZDX7P0N+pxs+t+wgvQUfvm+xKYvT3+Zf7X8Z0NyvQwA1onr
203
- ayzT7Y+YHBSrfuXjbvzYqOSSJNpDa2K4Vf3qwbxstovzDo2a5JtsaZn4eEgwRdWt
204
- 4Q08RWD8MpZRJ7xnw8outmvqRsfHIKCxH2XeSAi6pE6p8oNGN4Tr6MyBSENnTnIq
205
- m1y9TBsoilwie7SrmNnu4FGDwwlGTm0+mfqVF9p8M1dBPI1R7Qu2XK8sYxrfV8g/
206
- vOldxJuvRZnio1oktLqpVj3Pb6r/SVi+8Kj/9Lit6Tf7urj0Czr56ENCHonYhMsT
207
- 8dm74YlguIwoVqwUHZwK53Hrzw7dPamWoUi9PPevtQ0iTMARgexWO/bTouJbt7IE
208
- IlKVgJNp6I5MZfGRAy1wdALqi2cVKWlSArvX31BqVUa/oKMoYX9w0MOiqiwhqkfO
209
- KJwGRXa/ghgntNWutMtQ5mv0TIZxMOmm3xaG4Nj/QN370EKIf6MzOi5cHkERgWPO
210
- GHFrK+ymircxXDpqR+DDeVnWIBqv8mqYqnK8V0rSS527EPywTEHl7R09XiidnMy/
211
- s1Hap0flhFMCAwEAAaOB9DCB8TAfBgNVHSMEGDAWgBStvZh6NLQm9/rEJlTvA73g
212
- JMtUGjAdBgNVHQ4EFgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQD
213
- AgGGMA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0gBAowCDAGBgRVHSAAMEQGA1UdHwQ9
214
- MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9BZGRUcnVzdEV4dGVy
215
- bmFsQ0FSb290LmNybDA1BggrBgEFBQcBAQQpMCcwJQYIKwYBBQUHMAGGGWh0dHA6
216
- Ly9vY3NwLnVzZXJ0cnVzdC5jb20wDQYJKoZIhvcNAQEMBQADggEBAGS/g/FfmoXQ
217
- zbihKVcN6Fr30ek+8nYEbvFScLsePP9NDXRqzIGCJdPDoCpdTPW6i6FtxFQJdcfj
218
- Jw5dhHk3QBN39bSsHNA7qxcS1u80GH4r6XnTq1dFDK8o+tDb5VCViLvfhVdpfZLY
219
- Uspzgb8c8+a4bmYRBbMelC1/kZWSWfFMzqORcUx8Rww7Cxn2obFshj5cqsQugsv5
220
- B5a6SE2Q8pTIqXOi6wZ7I53eovNNVZ96YUWYGGjHXkBrI/V5eu+MtWuLt29G9Hvx
221
- PUsE2JOAWVrgQSQdso8VYFhH2+9uRv0V9dlfmrPb2LjkQLPNlzmuhbsdjrzch5vR
222
- pu/xO28QOG8=
223
- -----END CERTIFICATE-----
224
- -----BEGIN CERTIFICATE-----
225
- MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
226
- MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
227
- IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
228
- MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
229
- FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
230
- bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
231
- dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
232
- H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
233
- uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
234
- mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
235
- a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
236
- E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
237
- WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
238
- VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
239
- Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
240
- cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
241
- IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
242
- AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
243
- YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
244
- 6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
245
- Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
246
- c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
247
- mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
248
- -----END CERTIFICATE-----
@@ -1,471 +0,0 @@
1
- /*
2
- * Phusion Passenger - https://www.phusionpassenger.com/
3
- * Copyright (c) 2011-2015 Phusion Holding B.V.
4
- *
5
- * "Passenger", "Phusion Passenger" and "Union Station" are registered
6
- * trademarks of Phusion Holding B.V.
7
- *
8
- * Permission is hereby granted, free of charge, to any person obtaining a copy
9
- * of this software and associated documentation files (the "Software"), to deal
10
- * in the Software without restriction, including without limitation the rights
11
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12
- * copies of the Software, and to permit persons to whom the Software is
13
- * furnished to do so, subject to the following conditions:
14
- *
15
- * The above copyright notice and this permission notice shall be included in
16
- * all copies or substantial portions of the Software.
17
- *
18
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24
- * THE SOFTWARE.
25
- */
26
-
27
- #ifndef _PASSENGER_REQUEST_HANDLER_H_
28
- #define _PASSENGER_REQUEST_HANDLER_H_
29
-
30
- //#define DEBUG_RH_EVENT_LOOP_BLOCKING
31
-
32
- #include <boost/shared_ptr.hpp>
33
- #include <boost/make_shared.hpp>
34
- #include <boost/cstdint.hpp>
35
- #include <oxt/macros.hpp>
36
- #include <ev++.h>
37
- #include <ostream>
38
-
39
- #if defined(__GLIBCXX__) || defined(__APPLE__)
40
- #include <cxxabi.h>
41
- #define CXX_ABI_API_AVAILABLE
42
- #endif
43
-
44
- #include <sys/types.h>
45
- #include <sys/uio.h>
46
- #include <utility>
47
- #include <typeinfo>
48
- #include <cstdio>
49
- #include <cstdlib>
50
- #include <cstddef>
51
- #include <cassert>
52
- #include <cctype>
53
-
54
- #include <Logging.h>
55
- #include <MessageReadersWriters.h>
56
- #include <Constants.h>
57
- #include <ServerKit/Errors.h>
58
- #include <ServerKit/HttpServer.h>
59
- #include <ServerKit/HttpHeaderParser.h>
60
- #include <MemoryKit/palloc.h>
61
- #include <DataStructures/LString.h>
62
- #include <DataStructures/StringKeyTable.h>
63
- #include <StaticString.h>
64
- #include <Utils.h>
65
- #include <Utils/StrIntUtils.h>
66
- #include <Utils/IOUtils.h>
67
- #include <Utils/JsonUtils.h>
68
- #include <Utils/HttpConstants.h>
69
- #include <Utils/VariantMap.h>
70
- #include <Utils/Timer.h>
71
- #include <Core/ApplicationPool/ErrorRenderer.h>
72
- #include <Core/RequestHandler/Client.h>
73
- #include <Core/RequestHandler/AppResponse.h>
74
- #include <Core/RequestHandler/TurboCaching.h>
75
- #include <Core/UnionStation/Core.h>
76
-
77
- namespace Passenger {
78
-
79
- using namespace std;
80
- using namespace boost;
81
- using namespace oxt;
82
- using namespace ApplicationPool2;
83
-
84
-
85
- namespace ServerKit {
86
- extern const HashedStaticString HTTP_COOKIE;
87
- extern const HashedStaticString HTTP_SET_COOKIE;
88
- }
89
-
90
-
91
- class RequestHandler: public ServerKit::HttpServer<RequestHandler, Client> {
92
- public:
93
- enum BenchmarkMode {
94
- BM_NONE,
95
- BM_AFTER_ACCEPT,
96
- BM_BEFORE_CHECKOUT,
97
- BM_AFTER_CHECKOUT,
98
- BM_RESPONSE_BEGIN,
99
- BM_UNKNOWN
100
- };
101
-
102
- private:
103
- typedef ServerKit::HttpServer<RequestHandler, Client> ParentClass;
104
- typedef ServerKit::Channel Channel;
105
- typedef ServerKit::FdSinkChannel FdSinkChannel;
106
- typedef ServerKit::FdSourceChannel FdSourceChannel;
107
- typedef ServerKit::FileBufferedChannel FileBufferedChannel;
108
- typedef ServerKit::FileBufferedFdSinkChannel FileBufferedFdSinkChannel;
109
-
110
- static const unsigned int MAX_SESSION_CHECKOUT_TRY = 10;
111
-
112
- unsigned int statThrottleRate;
113
- unsigned int responseBufferHighWatermark;
114
- BenchmarkMode benchmarkMode: 3;
115
- bool singleAppMode: 1;
116
- bool showVersionInHeader: 1;
117
- bool stickySessions: 1;
118
- bool gracefulExit: 1;
119
-
120
- const VariantMap *agentsOptions;
121
- psg_pool_t *stringPool;
122
- StringKeyTable< boost::shared_ptr<Options> > poolOptionsCache;
123
-
124
- StaticString defaultRuby;
125
- StaticString ustRouterAddress;
126
- StaticString ustRouterPassword;
127
- StaticString defaultUser;
128
- StaticString defaultGroup;
129
- StaticString defaultServerName;
130
- StaticString defaultServerPort;
131
- StaticString serverSoftware;
132
- StaticString defaultStickySessionsCookieName;
133
- StaticString defaultVaryTurbocacheByCookie;
134
-
135
- HashedStaticString PASSENGER_APP_GROUP_NAME;
136
- HashedStaticString PASSENGER_ENV_VARS;
137
- HashedStaticString PASSENGER_MAX_REQUESTS;
138
- HashedStaticString PASSENGER_STICKY_SESSIONS;
139
- HashedStaticString PASSENGER_STICKY_SESSIONS_COOKIE_NAME;
140
- HashedStaticString PASSENGER_REQUEST_OOB_WORK;
141
- HashedStaticString UNION_STATION_SUPPORT;
142
- HashedStaticString REMOTE_ADDR;
143
- HashedStaticString REMOTE_PORT;
144
- HashedStaticString REMOTE_USER;
145
- HashedStaticString FLAGS;
146
- HashedStaticString HTTP_COOKIE;
147
- HashedStaticString HTTP_DATE;
148
- HashedStaticString HTTP_HOST;
149
- HashedStaticString HTTP_CONTENT_LENGTH;
150
- HashedStaticString HTTP_CONTENT_TYPE;
151
- HashedStaticString HTTP_EXPECT;
152
- HashedStaticString HTTP_CONNECTION;
153
- HashedStaticString HTTP_STATUS;
154
- HashedStaticString HTTP_TRANSFER_ENCODING;
155
-
156
- unsigned int threadNumber;
157
- StaticString serverLogName;
158
-
159
- friend class TurboCaching<Request>;
160
- friend class ResponseCache<Request>;
161
- struct ev_check checkWatcher;
162
- TurboCaching<Request> turboCaching;
163
-
164
- #ifdef DEBUG_RH_EVENT_LOOP_BLOCKING
165
- struct ev_prepare prepareWatcher;
166
- ev_tstamp timeBeforeBlocking;
167
- #endif
168
-
169
- public:
170
- ResourceLocator *resourceLocator;
171
- PoolPtr appPool;
172
- UnionStation::CorePtr unionStationCore;
173
-
174
- protected:
175
- #include <Core/RequestHandler/Utils.cpp>
176
- #include <Core/RequestHandler/Hooks.cpp>
177
- #include <Core/RequestHandler/InitRequest.cpp>
178
- #include <Core/RequestHandler/BufferBody.cpp>
179
- #include <Core/RequestHandler/CheckoutSession.cpp>
180
- #include <Core/RequestHandler/SendRequest.cpp>
181
- #include <Core/RequestHandler/ForwardResponse.cpp>
182
-
183
- public:
184
- RequestHandler(ServerKit::Context *context, const VariantMap *_agentsOptions,
185
- unsigned int _threadNumber = 1)
186
- : ParentClass(context),
187
-
188
- statThrottleRate(_agentsOptions->getInt("stat_throttle_rate")),
189
- responseBufferHighWatermark(_agentsOptions->getInt("response_buffer_high_watermark")),
190
- benchmarkMode(parseBenchmarkMode(_agentsOptions->get("benchmark_mode", false))),
191
- singleAppMode(false),
192
- showVersionInHeader(_agentsOptions->getBool("show_version_in_header")),
193
- stickySessions(_agentsOptions->getBool("sticky_sessions")),
194
- gracefulExit(_agentsOptions->getBool("core_graceful_exit")),
195
-
196
- agentsOptions(_agentsOptions),
197
- stringPool(psg_create_pool(1024 * 4)),
198
- poolOptionsCache(4),
199
-
200
- PASSENGER_APP_GROUP_NAME("!~PASSENGER_APP_GROUP_NAME"),
201
- PASSENGER_ENV_VARS("!~PASSENGER_ENV_VARS"),
202
- PASSENGER_MAX_REQUESTS("!~PASSENGER_MAX_REQUESTS"),
203
- PASSENGER_STICKY_SESSIONS("!~PASSENGER_STICKY_SESSIONS"),
204
- PASSENGER_STICKY_SESSIONS_COOKIE_NAME("!~PASSENGER_STICKY_SESSIONS_COOKIE_NAME"),
205
- PASSENGER_REQUEST_OOB_WORK("!~Request-OOB-Work"),
206
- UNION_STATION_SUPPORT("!~UNION_STATION_SUPPORT"),
207
- REMOTE_ADDR("!~REMOTE_ADDR"),
208
- REMOTE_PORT("!~REMOTE_PORT"),
209
- REMOTE_USER("!~REMOTE_USER"),
210
- FLAGS("!~FLAGS"),
211
- HTTP_COOKIE("cookie"),
212
- HTTP_DATE("date"),
213
- HTTP_HOST("host"),
214
- HTTP_CONTENT_LENGTH("content-length"),
215
- HTTP_CONTENT_TYPE("content-type"),
216
- HTTP_EXPECT("expect"),
217
- HTTP_CONNECTION("connection"),
218
- HTTP_STATUS("status"),
219
- HTTP_TRANSFER_ENCODING("transfer-encoding"),
220
-
221
- threadNumber(_threadNumber),
222
- turboCaching(getTurboCachingInitialState(_agentsOptions))
223
- {
224
- defaultRuby = psg_pstrdup(stringPool,
225
- agentsOptions->get("default_ruby"));
226
- ustRouterAddress = psg_pstrdup(stringPool,
227
- agentsOptions->get("ust_router_address", false));
228
- ustRouterPassword = psg_pstrdup(stringPool,
229
- agentsOptions->get("ust_router_password", false));
230
- defaultUser = psg_pstrdup(stringPool,
231
- agentsOptions->get("default_user", false));
232
- defaultGroup = psg_pstrdup(stringPool,
233
- agentsOptions->get("default_group", false));
234
- defaultServerName = psg_pstrdup(stringPool,
235
- agentsOptions->get("default_server_name"));
236
- defaultServerPort = psg_pstrdup(stringPool,
237
- agentsOptions->get("default_server_port"));
238
- serverSoftware = psg_pstrdup(stringPool,
239
- agentsOptions->get("server_software"));
240
- defaultStickySessionsCookieName = psg_pstrdup(stringPool,
241
- agentsOptions->get("sticky_sessions_cookie_name"));
242
-
243
- if (agentsOptions->has("vary_turbocache_by_cookie")) {
244
- defaultVaryTurbocacheByCookie = psg_pstrdup(stringPool,
245
- agentsOptions->get("vary_turbocache_by_cookie"));
246
- }
247
-
248
- generateServerLogName(_threadNumber);
249
-
250
- if (!agentsOptions->getBool("multi_app")) {
251
- boost::shared_ptr<Options> options = boost::make_shared<Options>();
252
-
253
- singleAppMode = true;
254
- fillPoolOptionsFromAgentsOptions(*options);
255
-
256
- options->appRoot = psg_pstrdup(stringPool,
257
- agentsOptions->get("app_root"));
258
- options->environment = psg_pstrdup(stringPool,
259
- agentsOptions->get("environment"));
260
- options->appType = psg_pstrdup(stringPool,
261
- agentsOptions->get("app_type"));
262
- options->startupFile = psg_pstrdup(stringPool,
263
- agentsOptions->get("startup_file"));
264
- poolOptionsCache.insert(options->getAppGroupName(), options);
265
- }
266
-
267
- ev_check_init(&checkWatcher, onEventLoopCheck);
268
- ev_set_priority(&checkWatcher, EV_MAXPRI);
269
- ev_check_start(getLoop(), &checkWatcher);
270
- checkWatcher.data = this;
271
-
272
- #ifdef DEBUG_RH_EVENT_LOOP_BLOCKING
273
- ev_prepare_init(&prepareWatcher, onEventLoopPrepare);
274
- ev_prepare_start(getLoop(), &prepareWatcher);
275
- prepareWatcher.data = this;
276
-
277
- timeBeforeBlocking = 0;
278
- #endif
279
- }
280
-
281
- ~RequestHandler() {
282
- psg_destroy_pool(stringPool);
283
- }
284
-
285
- static BenchmarkMode parseBenchmarkMode(const StaticString mode) {
286
- if (mode.empty()) {
287
- return BM_NONE;
288
- } else if (mode == "after_accept") {
289
- return BM_AFTER_ACCEPT;
290
- } else if (mode == "before_checkout") {
291
- return BM_BEFORE_CHECKOUT;
292
- } else if (mode == "after_checkout") {
293
- return BM_AFTER_CHECKOUT;
294
- } else if (mode == "response_begin") {
295
- return BM_RESPONSE_BEGIN;
296
- } else {
297
- return BM_UNKNOWN;
298
- }
299
- }
300
-
301
- void initialize() {
302
- TRACE_POINT();
303
- if (resourceLocator == NULL) {
304
- throw RuntimeException("ResourceLocator not initialized");
305
- }
306
- if (appPool == NULL) {
307
- throw RuntimeException("AppPool not initialized");
308
- }
309
- if (unionStationCore == NULL) {
310
- unionStationCore = appPool->getUnionStationCore();
311
- }
312
- }
313
-
314
- void disconnectLongRunningConnections(const StaticString &gupid) {
315
- vector<Client *> clients;
316
- vector<Client *>::iterator v_it, v_end;
317
- Client *client;
318
-
319
- // We collect all clients in a vector so that we don't have to worry about
320
- // `activeClients` being mutated while we work.
321
- TAILQ_FOREACH (client, &activeClients, nextClient.activeOrDisconnectedClient) {
322
- P_ASSERT_EQ(client->getConnState(), Client::ACTIVE);
323
- if (client->currentRequest != NULL) {
324
- Request *req = client->currentRequest;
325
- if (req->httpState >= Request::COMPLETE
326
- && req->upgraded()
327
- && req->session != NULL
328
- && req->session->getGupid() == gupid)
329
- {
330
- if (getLogLevel() >= LVL_INFO) {
331
- char clientName[32];
332
- unsigned int size;
333
- const LString *host;
334
- StaticString hostStr;
335
-
336
- size = getClientName(client, clientName, sizeof(clientName));
337
- if (req->host != NULL && req->host->size > 0) {
338
- host = psg_lstr_make_contiguous(req->host, req->pool);
339
- hostStr = StaticString(host->start->data, host->size);
340
- }
341
- P_INFO("[" << getServerName() << "] Disconnecting client " <<
342
- StaticString(clientName, size) << ": " <<
343
- hostStr << StaticString(req->path.start->data, req->path.size));
344
- }
345
- refClient(client, __FILE__, __LINE__);
346
- clients.push_back(client);
347
- }
348
- }
349
- }
350
-
351
- // Disconnect each eligible client.
352
- v_end = clients.end();
353
- for (v_it = clients.begin(); v_it != v_end; v_it++) {
354
- client = *v_it;
355
- Client *c = client;
356
- disconnect(&client);
357
- unrefClient(c, __FILE__, __LINE__);
358
- }
359
- }
360
-
361
- virtual Json::Value getConfigAsJson() const {
362
- Json::Value doc = ParentClass::getConfigAsJson();
363
- doc["single_app_mode"] = singleAppMode;
364
- doc["stat_throttle_rate"] = statThrottleRate;
365
- doc["show_version_in_header"] = showVersionInHeader;
366
- doc["data_buffer_dir"] = getContext()->defaultFileBufferedChannelConfig.bufferDir;
367
- return doc;
368
- }
369
-
370
- virtual void configure(const Json::Value &doc) {
371
- ParentClass::configure(doc);
372
- if (doc.isMember("show_version_in_header")) {
373
- showVersionInHeader = doc["show_version_in_header"].asBool();
374
- }
375
- if (doc.isMember("data_buffer_dir")) {
376
- getContext()->defaultFileBufferedChannelConfig.bufferDir =
377
- doc["data_buffer_dir"].asString();
378
- }
379
- }
380
-
381
- virtual Json::Value inspectStateAsJson() const {
382
- Json::Value doc = ParentClass::inspectStateAsJson();
383
- if (turboCaching.isEnabled()) {
384
- Json::Value subdoc;
385
- subdoc["fetches"] = turboCaching.responseCache.getFetches();
386
- subdoc["hits"] = turboCaching.responseCache.getHits();
387
- subdoc["hit_ratio"] = turboCaching.responseCache.getHitRatio();
388
- subdoc["stores"] = turboCaching.responseCache.getStores();
389
- subdoc["store_successes"] = turboCaching.responseCache.getStoreSuccesses();
390
- subdoc["store_success_ratio"] = turboCaching.responseCache.getStoreSuccessRatio();
391
- doc["turbocaching"] = subdoc;
392
- }
393
- return doc;
394
- }
395
-
396
- virtual Json::Value inspectClientStateAsJson(const Client *client) const {
397
- Json::Value doc = ParentClass::inspectClientStateAsJson(client);
398
- doc["connected_at"] = timeToJson(client->connectedAt * 1000000.0);
399
- return doc;
400
- }
401
-
402
- virtual Json::Value inspectRequestStateAsJson(const Request *req) const {
403
- Json::Value doc = ParentClass::inspectRequestStateAsJson(req);
404
- Json::Value flags;
405
- const AppResponse *resp = &req->appResponse;
406
-
407
- if (req->startedAt != 0) {
408
- doc["started_at"] = timeToJson(req->startedAt * 1000000.0);
409
- }
410
- doc["state"] = req->getStateString();
411
- if (req->stickySession) {
412
- doc["sticky_session_id"] = req->options.stickySessionId;
413
- }
414
- doc["sticky_session"] = req->stickySession;
415
- doc["session_checkout_try"] = req->sessionCheckoutTry;
416
-
417
- flags["dechunk_response"] = req->dechunkResponse;
418
- flags["request_body_buffering"] = req->requestBodyBuffering;
419
- flags["https"] = req->https;
420
- doc["flags"] = flags;
421
-
422
- if (req->requestBodyBuffering) {
423
- doc["body_bytes_buffered"] = byteSizeToJson(req->bodyBytesBuffered);
424
- }
425
-
426
- if (req->session != NULL) {
427
- Json::Value &sessionDoc = doc["session"] = Json::Value(Json::objectValue);
428
- const Session *session = req->session.get();
429
-
430
- if (req->session->isClosed()) {
431
- sessionDoc["closed"] = true;
432
- } else {
433
- sessionDoc["pid"] = (Json::Int64) session->getPid();
434
- sessionDoc["gupid"] = session->getGupid().toString();
435
- }
436
- }
437
-
438
- if (req->appResponseInitialized) {
439
- doc["app_response_http_state"] = resp->getHttpStateString();
440
- if (resp->begun()) {
441
- doc["app_response_http_major"] = resp->httpMajor;
442
- doc["app_response_http_minor"] = resp->httpMinor;
443
- doc["app_response_want_keep_alive"] = resp->wantKeepAlive;
444
- doc["app_response_body_type"] = resp->getBodyTypeString();
445
- doc["app_response_body_fully_read"] = resp->bodyFullyRead();
446
- doc["app_response_body_already_read"] = byteSizeToJson(
447
- resp->bodyAlreadyRead);
448
- if (resp->httpState != AppResponse::ERROR) {
449
- if (resp->bodyType == AppResponse::RBT_CONTENT_LENGTH) {
450
- doc["app_response_content_length"] = byteSizeToJson(
451
- resp->aux.bodyInfo.contentLength);
452
- } else if (resp->bodyType == AppResponse::RBT_CHUNKED) {
453
- doc["app_response_end_chunk_reached"] = resp->aux.bodyInfo.endChunkReached;
454
- }
455
- } else {
456
- doc["app_response_parse_error"] = ServerKit::getErrorDesc(resp->aux.parseError);
457
- }
458
- }
459
- }
460
-
461
- doc["app_source_state"] = req->appSource.inspectAsJson();
462
- doc["app_sink_state"] = req->appSink.inspectAsJson();
463
-
464
- return doc;
465
- }
466
- };
467
-
468
-
469
- } // namespace Passenger
470
-
471
- #endif /* _PASSENGER_REQUEST_HANDLER_H_ */