passenger 4.0.60 → 5.0.0.beta1

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 (1301) hide show
  1. checksums.yaml +8 -8
  2. checksums.yaml.gz.asc +7 -7
  3. data.tar.gz.asc +7 -7
  4. data/.editorconfig +5 -0
  5. data/.travis.yml +3 -2
  6. data/CHANGELOG +31 -53
  7. data/CONTRIBUTING.md +4 -4
  8. data/CONTRIBUTORS +0 -1
  9. data/Gemfile +18 -0
  10. data/Gemfile.lock +41 -0
  11. data/Rakefile +16 -0
  12. data/bin/passenger +2 -2
  13. data/bin/passenger-install-apache2-module +12 -12
  14. data/bin/passenger-install-nginx-module +9 -14
  15. data/bin/passenger-status +125 -87
  16. data/build/agents.rb +112 -140
  17. data/build/apache2.rb +4 -9
  18. data/build/basics.rb +5 -3
  19. data/build/common_library.rb +1 -0
  20. data/build/cxx_tests.rb +69 -47
  21. data/build/debian.rb +4 -2
  22. data/build/documentation.rb +1 -0
  23. data/build/integration_tests.rb +28 -43
  24. data/build/misc.rb +0 -18
  25. data/build/nginx.rb +2 -6
  26. data/build/packaging.rb +33 -22
  27. data/build/preprocessor.rb +2 -4
  28. data/build/ruby_tests.rb +7 -26
  29. data/build/test_basics.rb +24 -25
  30. data/debian.template/control.template +2 -2
  31. data/debian.template/locations.ini.template +2 -3
  32. data/debian.template/passenger.install.template +2 -2
  33. data/debian.template/rules.template +1 -1
  34. data/dev/ci/run_jenkins.sh +0 -1
  35. data/dev/ci/run_rpm_tests.sh +3 -0
  36. data/dev/ci/run_travis.sh +63 -17
  37. data/dev/copy_boost_headers +22 -6
  38. data/dev/ruby_server.rb +244 -0
  39. data/dev/vagrant/provision.sh +3 -1
  40. data/doc/DebuggingAndStressTesting.md +3 -3
  41. data/doc/Design and Architecture.txt +5 -6
  42. data/doc/Packaging.txt.md +35 -6
  43. data/doc/ServerOptimizationGuide.txt.md +339 -0
  44. data/doc/Users guide Apache.idmap.txt +177 -187
  45. data/doc/Users guide Apache.txt +143 -219
  46. data/doc/Users guide Nginx.idmap.txt +166 -166
  47. data/doc/Users guide Nginx.txt +265 -223
  48. data/doc/Users guide Standalone.txt +3 -3
  49. data/doc/templates/markdown.html.erb +37 -6
  50. data/doc/users_guide_snippets/environment_variables.txt +1 -1
  51. data/doc/users_guide_snippets/support_information.txt +1 -1
  52. data/doc/users_guide_snippets/tips.txt +2 -2
  53. data/ext/apache2/Configuration.cpp +23 -81
  54. data/ext/apache2/Configuration.hpp +18 -92
  55. data/ext/apache2/ConfigurationCommands.cpp +64 -15
  56. data/ext/apache2/ConfigurationCommands.cpp.erb +8 -4
  57. data/ext/apache2/ConfigurationFields.hpp +12 -0
  58. data/ext/apache2/ConfigurationSetters.cpp +73 -1
  59. data/ext/apache2/ConfigurationSetters.cpp.erb +3 -2
  60. data/ext/apache2/CreateDirConfig.cpp +6 -0
  61. data/ext/apache2/DirectoryMapper.h +11 -6
  62. data/ext/apache2/Hooks.cpp +291 -408
  63. data/ext/apache2/MergeDirConfig.cpp +42 -0
  64. data/ext/apache2/SetHeaders.cpp +61 -16
  65. data/ext/apache2/SetHeaders.cpp.erb +9 -7
  66. data/ext/boost/container/allocator_traits.hpp +400 -0
  67. data/ext/boost/container/deque.hpp +2012 -0
  68. data/ext/boost/container/detail/adaptive_node_pool_impl.hpp +874 -0
  69. data/ext/boost/container/detail/advanced_insert_int.hpp +369 -0
  70. data/ext/boost/container/detail/algorithms.hpp +84 -0
  71. data/ext/boost/container/detail/allocation_type.hpp +54 -0
  72. data/ext/boost/container/detail/allocator_version_traits.hpp +163 -0
  73. data/ext/boost/container/detail/config_begin.hpp +49 -0
  74. data/ext/boost/container/detail/config_end.hpp +17 -0
  75. data/ext/boost/container/detail/destroyers.hpp +365 -0
  76. data/ext/boost/container/detail/flat_tree.hpp +1055 -0
  77. data/ext/boost/container/detail/function_detector.hpp +88 -0
  78. data/ext/boost/container/detail/iterators.hpp +611 -0
  79. data/ext/boost/container/detail/math_functions.hpp +113 -0
  80. data/ext/boost/container/detail/memory_util.hpp +83 -0
  81. data/ext/boost/container/detail/mpl.hpp +160 -0
  82. data/ext/boost/container/detail/multiallocation_chain.hpp +286 -0
  83. data/ext/boost/container/detail/node_alloc_holder.hpp +386 -0
  84. data/ext/boost/container/detail/node_pool_impl.hpp +365 -0
  85. data/ext/boost/container/detail/pair.hpp +354 -0
  86. data/ext/boost/container/detail/pool_common.hpp +52 -0
  87. data/ext/boost/container/detail/preprocessor.hpp +232 -0
  88. data/ext/boost/container/detail/transform_iterator.hpp +176 -0
  89. data/ext/boost/container/detail/tree.hpp +1134 -0
  90. data/ext/boost/container/detail/type_traits.hpp +210 -0
  91. data/ext/boost/container/detail/utilities.hpp +1141 -0
  92. data/ext/boost/container/detail/value_init.hpp +45 -0
  93. data/ext/boost/container/detail/variadic_templates_tools.hpp +153 -0
  94. data/ext/boost/container/detail/version_type.hpp +92 -0
  95. data/ext/boost/container/detail/workaround.hpp +44 -0
  96. data/ext/boost/container/flat_map.hpp +1674 -0
  97. data/ext/boost/container/flat_set.hpp +1408 -0
  98. data/ext/boost/container/list.hpp +1475 -0
  99. data/ext/boost/container/map.hpp +1508 -0
  100. data/ext/boost/container/scoped_allocator.hpp +1503 -0
  101. data/ext/boost/container/scoped_allocator_fwd.hpp +83 -0
  102. data/ext/boost/container/set.hpp +1280 -0
  103. data/ext/boost/container/slist.hpp +1706 -0
  104. data/ext/boost/container/stable_vector.hpp +1869 -0
  105. data/ext/boost/container/static_vector.hpp +1053 -0
  106. data/ext/boost/container/string.hpp +2856 -0
  107. data/ext/boost/container/throw_exception.hpp +110 -0
  108. data/ext/boost/container/vector.hpp +2671 -0
  109. data/ext/boost/detail/is_xxx.hpp +61 -0
  110. data/ext/boost/intrusive/any_hook.hpp +344 -0
  111. data/ext/boost/intrusive/avl_set.hpp +2528 -0
  112. data/ext/boost/intrusive/avl_set_hook.hpp +297 -0
  113. data/ext/boost/intrusive/avltree.hpp +1786 -0
  114. data/ext/boost/intrusive/avltree_algorithms.hpp +968 -0
  115. data/ext/boost/intrusive/bs_set_hook.hpp +296 -0
  116. data/ext/boost/intrusive/circular_list_algorithms.hpp +413 -0
  117. data/ext/boost/intrusive/circular_slist_algorithms.hpp +404 -0
  118. data/ext/boost/intrusive/derivation_value_traits.hpp +70 -0
  119. data/ext/boost/intrusive/detail/any_node_and_algorithms.hpp +297 -0
  120. data/ext/boost/intrusive/detail/assert.hpp +41 -0
  121. data/ext/boost/intrusive/detail/avltree_node.hpp +197 -0
  122. data/ext/boost/intrusive/detail/clear_on_destructor_base.hpp +36 -0
  123. data/ext/boost/intrusive/detail/common_slist_algorithms.hpp +102 -0
  124. data/ext/boost/intrusive/detail/config_begin.hpp +52 -0
  125. data/ext/boost/intrusive/detail/config_end.hpp +15 -0
  126. data/ext/boost/intrusive/detail/ebo_functor_holder.hpp +95 -0
  127. data/ext/boost/intrusive/detail/function_detector.hpp +88 -0
  128. data/ext/boost/intrusive/detail/generic_hook.hpp +209 -0
  129. data/ext/boost/intrusive/detail/has_member_function_callable_with.hpp +357 -0
  130. data/ext/boost/intrusive/detail/hashtable_node.hpp +249 -0
  131. data/ext/boost/intrusive/detail/is_stateful_value_traits.hpp +77 -0
  132. data/ext/boost/intrusive/detail/list_node.hpp +196 -0
  133. data/ext/boost/intrusive/detail/memory_util.hpp +288 -0
  134. data/ext/boost/intrusive/detail/mpl.hpp +383 -0
  135. data/ext/boost/intrusive/detail/parent_from_member.hpp +97 -0
  136. data/ext/boost/intrusive/detail/preprocessor.hpp +52 -0
  137. data/ext/boost/intrusive/detail/rbtree_node.hpp +201 -0
  138. data/ext/boost/intrusive/detail/slist_node.hpp +166 -0
  139. data/ext/boost/intrusive/detail/transform_iterator.hpp +173 -0
  140. data/ext/boost/intrusive/detail/tree_algorithms.hpp +1742 -0
  141. data/ext/boost/intrusive/detail/tree_node.hpp +199 -0
  142. data/ext/boost/intrusive/detail/utilities.hpp +858 -0
  143. data/ext/boost/intrusive/detail/workaround.hpp +22 -0
  144. data/ext/boost/intrusive/hashtable.hpp +3110 -0
  145. data/ext/boost/intrusive/intrusive_fwd.hpp +542 -0
  146. data/ext/boost/intrusive/linear_slist_algorithms.hpp +327 -0
  147. data/ext/boost/intrusive/link_mode.hpp +46 -0
  148. data/ext/boost/intrusive/list.hpp +1525 -0
  149. data/ext/boost/intrusive/list_hook.hpp +290 -0
  150. data/ext/boost/intrusive/member_value_traits.hpp +70 -0
  151. data/ext/boost/intrusive/options.hpp +810 -0
  152. data/ext/boost/intrusive/parent_from_member.hpp +42 -0
  153. data/ext/boost/intrusive/pointer_plus_bits.hpp +86 -0
  154. data/ext/boost/intrusive/pointer_traits.hpp +265 -0
  155. data/ext/boost/intrusive/priority_compare.hpp +39 -0
  156. data/ext/boost/intrusive/rbtree.hpp +1785 -0
  157. data/ext/boost/intrusive/rbtree_algorithms.hpp +934 -0
  158. data/ext/boost/intrusive/set.hpp +2554 -0
  159. data/ext/boost/intrusive/set_hook.hpp +300 -0
  160. data/ext/boost/intrusive/sg_set.hpp +2601 -0
  161. data/ext/boost/intrusive/sgtree.hpp +2009 -0
  162. data/ext/boost/intrusive/sgtree_algorithms.hpp +807 -0
  163. data/ext/boost/intrusive/slist.hpp +2219 -0
  164. data/ext/boost/intrusive/slist_hook.hpp +294 -0
  165. data/ext/boost/intrusive/splay_set.hpp +2575 -0
  166. data/ext/boost/intrusive/splay_set_hook.hpp +292 -0
  167. data/ext/boost/intrusive/splaytree.hpp +1784 -0
  168. data/ext/boost/intrusive/splaytree_algorithms.hpp +1008 -0
  169. data/ext/boost/intrusive/treap.hpp +1882 -0
  170. data/ext/boost/intrusive/treap_algorithms.hpp +919 -0
  171. data/ext/boost/intrusive/treap_set.hpp +2751 -0
  172. data/ext/boost/intrusive/trivial_value_traits.hpp +46 -0
  173. data/ext/boost/intrusive/unordered_set.hpp +2115 -0
  174. data/ext/boost/intrusive/unordered_set_hook.hpp +434 -0
  175. data/ext/boost/intrusive_ptr.hpp +18 -0
  176. data/ext/boost/math/common_factor_ct.hpp +180 -0
  177. data/ext/boost/math_fwd.hpp +108 -0
  178. data/ext/boost/move/detail/move_helpers.hpp +175 -0
  179. data/ext/boost/parameter.hpp +21 -0
  180. data/ext/boost/parameter/aux_/arg_list.hpp +459 -0
  181. data/ext/boost/parameter/aux_/cast.hpp +143 -0
  182. data/ext/boost/parameter/aux_/default.hpp +69 -0
  183. data/ext/boost/parameter/aux_/is_maybe.hpp +26 -0
  184. data/ext/boost/parameter/aux_/maybe.hpp +120 -0
  185. data/ext/boost/parameter/aux_/overloads.hpp +88 -0
  186. data/ext/boost/parameter/aux_/parameter_requirements.hpp +25 -0
  187. data/ext/boost/parameter/aux_/parenthesized_type.hpp +119 -0
  188. data/ext/boost/parameter/aux_/preprocessor/flatten.hpp +115 -0
  189. data/ext/boost/parameter/aux_/preprocessor/for_each.hpp +103 -0
  190. data/ext/boost/parameter/aux_/python/invoker.hpp +132 -0
  191. data/ext/boost/parameter/aux_/python/invoker_iterate.hpp +93 -0
  192. data/ext/boost/parameter/aux_/result_of0.hpp +36 -0
  193. data/ext/boost/parameter/aux_/set.hpp +67 -0
  194. data/ext/boost/parameter/aux_/tag.hpp +38 -0
  195. data/ext/boost/parameter/aux_/tagged_argument.hpp +188 -0
  196. data/ext/boost/parameter/aux_/template_keyword.hpp +47 -0
  197. data/ext/boost/parameter/aux_/unwrap_cv_reference.hpp +97 -0
  198. data/ext/boost/parameter/aux_/void.hpp +29 -0
  199. data/ext/boost/parameter/aux_/yesno.hpp +26 -0
  200. data/ext/boost/parameter/binding.hpp +106 -0
  201. data/ext/boost/parameter/config.hpp +14 -0
  202. data/ext/boost/parameter/keyword.hpp +152 -0
  203. data/ext/boost/parameter/macros.hpp +99 -0
  204. data/ext/boost/parameter/match.hpp +55 -0
  205. data/ext/boost/parameter/name.hpp +156 -0
  206. data/ext/boost/parameter/parameters.hpp +931 -0
  207. data/ext/boost/parameter/preprocessor.hpp +1178 -0
  208. data/ext/boost/parameter/python.hpp +735 -0
  209. data/ext/boost/parameter/value_type.hpp +108 -0
  210. data/ext/boost/pool/detail/for.m4 +107 -0
  211. data/ext/boost/pool/detail/guard.hpp +69 -0
  212. data/ext/boost/pool/detail/mutex.hpp +42 -0
  213. data/ext/boost/pool/detail/pool_construct.bat +24 -0
  214. data/ext/boost/pool/detail/pool_construct.ipp +852 -0
  215. data/ext/boost/pool/detail/pool_construct.m4 +84 -0
  216. data/ext/boost/pool/detail/pool_construct.sh +12 -0
  217. data/ext/boost/pool/detail/pool_construct_simple.bat +25 -0
  218. data/ext/boost/pool/detail/pool_construct_simple.ipp +43 -0
  219. data/ext/boost/pool/detail/pool_construct_simple.m4 +72 -0
  220. data/ext/boost/pool/detail/pool_construct_simple.sh +12 -0
  221. data/ext/boost/pool/object_pool.hpp +287 -0
  222. data/ext/boost/pool/pool.hpp +1024 -0
  223. data/ext/boost/pool/pool_alloc.hpp +488 -0
  224. data/ext/boost/pool/poolfwd.hpp +82 -0
  225. data/ext/boost/pool/simple_segregated_storage.hpp +377 -0
  226. data/ext/boost/pool/singleton_pool.hpp +251 -0
  227. data/ext/boost/preprocessor/arithmetic.hpp +25 -0
  228. data/ext/boost/preprocessor/arithmetic/detail/div_base.hpp +61 -0
  229. data/ext/boost/preprocessor/arithmetic/div.hpp +39 -0
  230. data/ext/boost/preprocessor/arithmetic/mod.hpp +39 -0
  231. data/ext/boost/preprocessor/arithmetic/mul.hpp +53 -0
  232. data/ext/boost/preprocessor/array.hpp +32 -0
  233. data/ext/boost/preprocessor/array/enum.hpp +33 -0
  234. data/ext/boost/preprocessor/array/insert.hpp +55 -0
  235. data/ext/boost/preprocessor/array/pop_back.hpp +37 -0
  236. data/ext/boost/preprocessor/array/pop_front.hpp +38 -0
  237. data/ext/boost/preprocessor/array/push_back.hpp +33 -0
  238. data/ext/boost/preprocessor/array/push_front.hpp +33 -0
  239. data/ext/boost/preprocessor/array/remove.hpp +54 -0
  240. data/ext/boost/preprocessor/array/replace.hpp +49 -0
  241. data/ext/boost/preprocessor/array/reverse.hpp +29 -0
  242. data/ext/boost/preprocessor/array/to_list.hpp +33 -0
  243. data/ext/boost/preprocessor/array/to_seq.hpp +33 -0
  244. data/ext/boost/preprocessor/array/to_tuple.hpp +22 -0
  245. data/ext/boost/preprocessor/assert_msg.hpp +17 -0
  246. data/ext/boost/preprocessor/comma.hpp +17 -0
  247. data/ext/boost/preprocessor/comparison.hpp +24 -0
  248. data/ext/boost/preprocessor/comparison/equal.hpp +34 -0
  249. data/ext/boost/preprocessor/comparison/greater.hpp +38 -0
  250. data/ext/boost/preprocessor/comparison/greater_equal.hpp +38 -0
  251. data/ext/boost/preprocessor/comparison/less.hpp +46 -0
  252. data/ext/boost/preprocessor/comparison/less_equal.hpp +39 -0
  253. data/ext/boost/preprocessor/comparison/not_equal.hpp +814 -0
  254. data/ext/boost/preprocessor/config/limits.hpp +30 -0
  255. data/ext/boost/preprocessor/control.hpp +22 -0
  256. data/ext/boost/preprocessor/control/deduce_d.hpp +22 -0
  257. data/ext/boost/preprocessor/control/detail/dmc/while.hpp +536 -0
  258. data/ext/boost/preprocessor/control/detail/edg/while.hpp +534 -0
  259. data/ext/boost/preprocessor/control/detail/msvc/while.hpp +277 -0
  260. data/ext/boost/preprocessor/control/expr_if.hpp +30 -0
  261. data/ext/boost/preprocessor/debug.hpp +18 -0
  262. data/ext/boost/preprocessor/debug/assert.hpp +44 -0
  263. data/ext/boost/preprocessor/debug/line.hpp +35 -0
  264. data/ext/boost/preprocessor/detail/dmc/auto_rec.hpp +286 -0
  265. data/ext/boost/preprocessor/detail/is_nullary.hpp +30 -0
  266. data/ext/boost/preprocessor/detail/is_unary.hpp +30 -0
  267. data/ext/boost/preprocessor/detail/null.hpp +17 -0
  268. data/ext/boost/preprocessor/detail/split.hpp +35 -0
  269. data/ext/boost/preprocessor/enum_params_with_defaults.hpp +17 -0
  270. data/ext/boost/preprocessor/enum_shifted.hpp +17 -0
  271. data/ext/boost/preprocessor/expand.hpp +17 -0
  272. data/ext/boost/preprocessor/expr_if.hpp +17 -0
  273. data/ext/boost/preprocessor/facilities.hpp +23 -0
  274. data/ext/boost/preprocessor/facilities/apply.hpp +34 -0
  275. data/ext/boost/preprocessor/facilities/expand.hpp +28 -0
  276. data/ext/boost/preprocessor/facilities/is_1.hpp +23 -0
  277. data/ext/boost/preprocessor/facilities/is_empty.hpp +43 -0
  278. data/ext/boost/preprocessor/facilities/is_empty_or_1.hpp +30 -0
  279. data/ext/boost/preprocessor/for.hpp +17 -0
  280. data/ext/boost/preprocessor/if.hpp +17 -0
  281. data/ext/boost/preprocessor/iteration.hpp +19 -0
  282. data/ext/boost/preprocessor/iteration/detail/bounds/lower3.hpp +99 -0
  283. data/ext/boost/preprocessor/iteration/detail/bounds/lower4.hpp +99 -0
  284. data/ext/boost/preprocessor/iteration/detail/bounds/lower5.hpp +99 -0
  285. data/ext/boost/preprocessor/iteration/detail/bounds/upper3.hpp +99 -0
  286. data/ext/boost/preprocessor/iteration/detail/bounds/upper4.hpp +99 -0
  287. data/ext/boost/preprocessor/iteration/detail/bounds/upper5.hpp +99 -0
  288. data/ext/boost/preprocessor/iteration/detail/finish.hpp +99 -0
  289. data/ext/boost/preprocessor/iteration/detail/iter/forward3.hpp +1338 -0
  290. data/ext/boost/preprocessor/iteration/detail/iter/forward4.hpp +1338 -0
  291. data/ext/boost/preprocessor/iteration/detail/iter/forward5.hpp +1338 -0
  292. data/ext/boost/preprocessor/iteration/detail/iter/reverse2.hpp +1296 -0
  293. data/ext/boost/preprocessor/iteration/detail/iter/reverse3.hpp +1296 -0
  294. data/ext/boost/preprocessor/iteration/detail/iter/reverse4.hpp +1296 -0
  295. data/ext/boost/preprocessor/iteration/detail/iter/reverse5.hpp +1296 -0
  296. data/ext/boost/preprocessor/iteration/detail/local.hpp +812 -0
  297. data/ext/boost/preprocessor/iteration/detail/rlocal.hpp +782 -0
  298. data/ext/boost/preprocessor/iteration/detail/self.hpp +21 -0
  299. data/ext/boost/preprocessor/iteration/detail/start.hpp +99 -0
  300. data/ext/boost/preprocessor/iteration/local.hpp +26 -0
  301. data/ext/boost/preprocessor/iteration/self.hpp +19 -0
  302. data/ext/boost/preprocessor/library.hpp +36 -0
  303. data/ext/boost/preprocessor/limits.hpp +17 -0
  304. data/ext/boost/preprocessor/list.hpp +37 -0
  305. data/ext/boost/preprocessor/list/at.hpp +39 -0
  306. data/ext/boost/preprocessor/list/cat.hpp +42 -0
  307. data/ext/boost/preprocessor/list/detail/dmc/fold_left.hpp +279 -0
  308. data/ext/boost/preprocessor/list/detail/edg/fold_left.hpp +536 -0
  309. data/ext/boost/preprocessor/list/detail/edg/fold_right.hpp +794 -0
  310. data/ext/boost/preprocessor/list/enum.hpp +41 -0
  311. data/ext/boost/preprocessor/list/filter.hpp +54 -0
  312. data/ext/boost/preprocessor/list/first_n.hpp +58 -0
  313. data/ext/boost/preprocessor/list/for_each.hpp +49 -0
  314. data/ext/boost/preprocessor/list/for_each_product.hpp +141 -0
  315. data/ext/boost/preprocessor/list/rest_n.hpp +55 -0
  316. data/ext/boost/preprocessor/list/size.hpp +58 -0
  317. data/ext/boost/preprocessor/list/to_array.hpp +123 -0
  318. data/ext/boost/preprocessor/list/to_seq.hpp +32 -0
  319. data/ext/boost/preprocessor/list/to_tuple.hpp +38 -0
  320. data/ext/boost/preprocessor/logical.hpp +29 -0
  321. data/ext/boost/preprocessor/logical/bitnor.hpp +38 -0
  322. data/ext/boost/preprocessor/logical/bitor.hpp +38 -0
  323. data/ext/boost/preprocessor/logical/bitxor.hpp +38 -0
  324. data/ext/boost/preprocessor/logical/nor.hpp +30 -0
  325. data/ext/boost/preprocessor/logical/not.hpp +30 -0
  326. data/ext/boost/preprocessor/logical/or.hpp +30 -0
  327. data/ext/boost/preprocessor/logical/xor.hpp +30 -0
  328. data/ext/boost/preprocessor/max.hpp +17 -0
  329. data/ext/boost/preprocessor/min.hpp +17 -0
  330. data/ext/boost/preprocessor/punctuation.hpp +20 -0
  331. data/ext/boost/preprocessor/punctuation/paren_if.hpp +38 -0
  332. data/ext/boost/preprocessor/repeat_3rd.hpp +17 -0
  333. data/ext/boost/preprocessor/repeat_from_to.hpp +17 -0
  334. data/ext/boost/preprocessor/repeat_from_to_2nd.hpp +17 -0
  335. data/ext/boost/preprocessor/repeat_from_to_3rd.hpp +17 -0
  336. data/ext/boost/preprocessor/repetition.hpp +32 -0
  337. data/ext/boost/preprocessor/repetition/deduce_r.hpp +22 -0
  338. data/ext/boost/preprocessor/repetition/deduce_z.hpp +22 -0
  339. data/ext/boost/preprocessor/repetition/detail/dmc/for.hpp +536 -0
  340. data/ext/boost/preprocessor/repetition/detail/edg/for.hpp +534 -0
  341. data/ext/boost/preprocessor/repetition/detail/msvc/for.hpp +277 -0
  342. data/ext/boost/preprocessor/repetition/enum_params_with_defaults.hpp +24 -0
  343. data/ext/boost/preprocessor/repetition/enum_shifted.hpp +68 -0
  344. data/ext/boost/preprocessor/repetition/enum_shifted_binary_params.hpp +51 -0
  345. data/ext/boost/preprocessor/repetition/enum_trailing.hpp +63 -0
  346. data/ext/boost/preprocessor/repetition/enum_trailing_binary_params.hpp +53 -0
  347. data/ext/boost/preprocessor/selection.hpp +18 -0
  348. data/ext/boost/preprocessor/selection/max.hpp +39 -0
  349. data/ext/boost/preprocessor/selection/min.hpp +39 -0
  350. data/ext/boost/preprocessor/seq.hpp +43 -0
  351. data/ext/boost/preprocessor/seq/cat.hpp +49 -0
  352. data/ext/boost/preprocessor/seq/detail/binary_transform.hpp +40 -0
  353. data/ext/boost/preprocessor/seq/detail/split.hpp +284 -0
  354. data/ext/boost/preprocessor/seq/filter.hpp +54 -0
  355. data/ext/boost/preprocessor/seq/first_n.hpp +30 -0
  356. data/ext/boost/preprocessor/seq/fold_left.hpp +1070 -0
  357. data/ext/boost/preprocessor/seq/fold_right.hpp +288 -0
  358. data/ext/boost/preprocessor/seq/for_each.hpp +60 -0
  359. data/ext/boost/preprocessor/seq/for_each_product.hpp +126 -0
  360. data/ext/boost/preprocessor/seq/insert.hpp +28 -0
  361. data/ext/boost/preprocessor/seq/pop_back.hpp +29 -0
  362. data/ext/boost/preprocessor/seq/pop_front.hpp +27 -0
  363. data/ext/boost/preprocessor/seq/push_back.hpp +19 -0
  364. data/ext/boost/preprocessor/seq/push_front.hpp +19 -0
  365. data/ext/boost/preprocessor/seq/remove.hpp +29 -0
  366. data/ext/boost/preprocessor/seq/replace.hpp +29 -0
  367. data/ext/boost/preprocessor/seq/rest_n.hpp +30 -0
  368. data/ext/boost/preprocessor/seq/reverse.hpp +39 -0
  369. data/ext/boost/preprocessor/seq/subseq.hpp +28 -0
  370. data/ext/boost/preprocessor/seq/to_array.hpp +28 -0
  371. data/ext/boost/preprocessor/seq/to_list.hpp +29 -0
  372. data/ext/boost/preprocessor/seq/to_tuple.hpp +27 -0
  373. data/ext/boost/preprocessor/seq/transform.hpp +48 -0
  374. data/ext/boost/preprocessor/slot.hpp +17 -0
  375. data/ext/boost/preprocessor/slot/counter.hpp +25 -0
  376. data/ext/boost/preprocessor/slot/detail/counter.hpp +269 -0
  377. data/ext/boost/preprocessor/slot/detail/slot1.hpp +267 -0
  378. data/ext/boost/preprocessor/slot/detail/slot2.hpp +267 -0
  379. data/ext/boost/preprocessor/slot/detail/slot3.hpp +267 -0
  380. data/ext/boost/preprocessor/slot/detail/slot4.hpp +267 -0
  381. data/ext/boost/preprocessor/slot/detail/slot5.hpp +267 -0
  382. data/ext/boost/preprocessor/tuple.hpp +28 -0
  383. data/ext/boost/preprocessor/tuple/enum.hpp +22 -0
  384. data/ext/boost/preprocessor/tuple/reverse.hpp +114 -0
  385. data/ext/boost/preprocessor/tuple/size.hpp +28 -0
  386. data/ext/boost/preprocessor/tuple/to_array.hpp +37 -0
  387. data/ext/boost/preprocessor/tuple/to_seq.hpp +114 -0
  388. data/ext/boost/preprocessor/variadic.hpp +23 -0
  389. data/ext/boost/preprocessor/variadic/to_array.hpp +32 -0
  390. data/ext/boost/preprocessor/variadic/to_list.hpp +25 -0
  391. data/ext/boost/preprocessor/variadic/to_seq.hpp +25 -0
  392. data/ext/boost/preprocessor/variadic/to_tuple.hpp +24 -0
  393. data/ext/boost/preprocessor/while.hpp +17 -0
  394. data/ext/boost/preprocessor/wstringize.hpp +29 -0
  395. data/ext/boost/smart_ptr/intrusive_ptr.hpp +324 -0
  396. data/ext/common/AccountsDatabase.h +3 -4
  397. data/ext/common/AgentsStarter.cpp +12 -15
  398. data/ext/common/AgentsStarter.h +54 -120
  399. data/ext/common/ApplicationPool2/AppTypes.cpp +12 -5
  400. data/ext/common/ApplicationPool2/AppTypes.h +21 -14
  401. data/ext/common/ApplicationPool2/Common.h +36 -19
  402. data/ext/common/ApplicationPool2/DirectSpawner.h +15 -16
  403. data/ext/common/ApplicationPool2/DummySpawner.h +9 -8
  404. data/ext/common/ApplicationPool2/ErrorRenderer.h +1 -1
  405. data/ext/common/ApplicationPool2/Group.h +304 -171
  406. data/ext/common/ApplicationPool2/Implementation.cpp +234 -125
  407. data/ext/common/ApplicationPool2/Options.h +50 -62
  408. data/ext/common/ApplicationPool2/Pool.h +285 -189
  409. data/ext/common/ApplicationPool2/Process.h +126 -115
  410. data/ext/common/ApplicationPool2/Session.h +70 -30
  411. data/ext/common/ApplicationPool2/SmartSpawner.h +19 -18
  412. data/ext/common/ApplicationPool2/Socket.h +57 -43
  413. data/ext/common/ApplicationPool2/SpawnObject.h +83 -0
  414. data/ext/common/ApplicationPool2/Spawner.h +59 -38
  415. data/ext/common/ApplicationPool2/SpawnerFactory.h +8 -14
  416. data/ext/common/ApplicationPool2/SuperGroup.h +69 -40
  417. data/ext/common/BackgroundEventLoop.cpp +48 -1
  418. data/ext/common/BackgroundEventLoop.h +3 -1
  419. data/ext/common/Constants.h +30 -8
  420. data/ext/common/DataStructures/HashedStaticString.h +103 -0
  421. data/ext/common/DataStructures/LString.h +396 -0
  422. data/ext/common/DataStructures/StringKeyTable.h +588 -0
  423. data/ext/common/EventedMessageServer.h +1 -0
  424. data/ext/common/FileDescriptor.h +5 -0
  425. data/ext/common/InstanceDirectory.h +240 -0
  426. data/ext/common/Logging.cpp +38 -13
  427. data/ext/common/Logging.h +53 -22
  428. data/ext/common/MemoryKit/mbuf.cpp +413 -0
  429. data/ext/common/MemoryKit/mbuf.h +266 -0
  430. data/ext/common/MemoryKit/palloc.cpp +337 -0
  431. data/ext/common/MemoryKit/palloc.h +121 -0
  432. data/ext/common/ResourceLocator.h +62 -6
  433. data/ext/common/SafeLibev.h +4 -4
  434. data/ext/common/ServerKit/AcceptLoadBalancer.h +275 -0
  435. data/ext/common/ServerKit/Channel.h +747 -0
  436. data/ext/common/ServerKit/Client.h +166 -0
  437. data/ext/common/ServerKit/ClientRef.h +130 -0
  438. data/ext/common/ServerKit/Context.h +129 -0
  439. data/ext/common/ServerKit/Errors.h +103 -0
  440. data/ext/common/ServerKit/FdSinkChannel.h +206 -0
  441. data/ext/common/ServerKit/FdSourceChannel.h +230 -0
  442. data/ext/common/ServerKit/FileBufferedChannel.h +1399 -0
  443. data/ext/common/ServerKit/FileBufferedFdSinkChannel.h +228 -0
  444. data/ext/common/ServerKit/HeaderTable.h +472 -0
  445. data/ext/common/ServerKit/Hooks.h +79 -0
  446. data/ext/common/ServerKit/HttpChunkedBodyParser.h +289 -0
  447. data/ext/common/ServerKit/HttpChunkedBodyParserState.h +70 -0
  448. data/ext/common/ServerKit/HttpClient.h +94 -0
  449. data/ext/common/ServerKit/HttpHeaderParser.h +477 -0
  450. data/ext/common/ServerKit/HttpHeaderParserState.h +60 -0
  451. data/ext/common/ServerKit/HttpRequest.h +276 -0
  452. data/ext/common/ServerKit/HttpRequestRef.h +130 -0
  453. data/ext/common/ServerKit/HttpServer.h +1152 -0
  454. data/ext/common/ServerKit/Implementation.cpp +47 -0
  455. data/ext/common/ServerKit/Server.h +1040 -0
  456. data/ext/common/ServerKit/http_parser.cpp +2259 -0
  457. data/ext/common/ServerKit/http_parser.h +330 -0
  458. data/ext/common/StaticString.h +8 -0
  459. data/ext/common/Utils.cpp +14 -12
  460. data/ext/common/Utils.h +9 -103
  461. data/ext/common/Utils/BufferedIO.h +1 -0
  462. data/ext/common/Utils/CachedFileStat.hpp +1 -7
  463. data/ext/common/Utils/DateParsing.h +379 -0
  464. data/ext/common/Utils/FileChangeChecker.h +3 -9
  465. data/ext/common/Utils/Hasher.cpp +52 -0
  466. data/ext/common/Utils/Hasher.h +58 -0
  467. data/ext/common/Utils/IOUtils.cpp +62 -62
  468. data/ext/common/Utils/JsonUtils.h +21 -0
  469. data/ext/common/Utils/OptionParsing.h +75 -0
  470. data/ext/common/Utils/StrIntUtils.cpp +112 -19
  471. data/ext/common/Utils/StrIntUtils.h +52 -12
  472. data/ext/common/Utils/StrIntUtilsNoStrictAliasing.cpp +174 -0
  473. data/ext/common/Utils/VariantMap.h +18 -7
  474. data/ext/common/Utils/modp_b64.cpp +290 -0
  475. data/ext/common/Utils/modp_b64.h +241 -0
  476. data/ext/common/Utils/modp_b64_data.h +479 -0
  477. data/ext/common/Utils/sysqueue.h +811 -0
  478. data/ext/common/agents/Base.cpp +71 -98
  479. data/ext/common/agents/Base.h +11 -3
  480. data/ext/common/agents/HelperAgent/AdminServer.h +690 -0
  481. data/ext/common/agents/HelperAgent/Main.cpp +899 -487
  482. data/ext/common/agents/HelperAgent/OptionParser.h +311 -0
  483. data/ext/common/agents/HelperAgent/RequestHandler.h +315 -2548
  484. data/ext/common/agents/HelperAgent/RequestHandler/AppResponse.h +225 -0
  485. data/ext/common/agents/HelperAgent/RequestHandler/BufferBody.cpp +93 -0
  486. data/ext/common/agents/HelperAgent/RequestHandler/CheckoutSession.cpp +346 -0
  487. data/ext/common/agents/HelperAgent/RequestHandler/Client.h +54 -0
  488. data/ext/common/agents/HelperAgent/RequestHandler/ForwardResponse.cpp +846 -0
  489. data/ext/common/agents/HelperAgent/RequestHandler/Hooks.cpp +231 -0
  490. data/ext/common/agents/HelperAgent/RequestHandler/InitRequest.cpp +434 -0
  491. data/ext/common/agents/HelperAgent/RequestHandler/Request.h +149 -0
  492. data/ext/common/agents/HelperAgent/RequestHandler/SendRequest.cpp +887 -0
  493. data/ext/common/agents/HelperAgent/RequestHandler/TurboCaching.h +293 -0
  494. data/ext/common/agents/HelperAgent/RequestHandler/Utils.cpp +301 -0
  495. data/ext/common/agents/HelperAgent/ResponseCache.h +624 -0
  496. data/ext/common/agents/HelperAgent/SystemMetricsTool.cpp +21 -23
  497. data/ext/common/agents/LoggingAgent/AdminServer.h +369 -0
  498. data/ext/common/agents/LoggingAgent/LoggingServer.h +1 -0
  499. data/ext/common/agents/LoggingAgent/Main.cpp +422 -215
  500. data/ext/common/agents/LoggingAgent/OptionParser.h +167 -0
  501. data/ext/common/agents/LoggingAgent/RemoteSender.h +3 -3
  502. data/ext/common/agents/Main.cpp +107 -0
  503. data/ext/common/agents/SpawnPreparer/Main.cpp +207 -0
  504. data/ext/common/agents/TempDirToucher/Main.cpp +429 -0
  505. data/ext/common/agents/Watchdog/AdminServer.h +390 -0
  506. data/ext/common/agents/Watchdog/AgentWatcher.cpp +7 -5
  507. data/ext/common/agents/Watchdog/HelperAgentWatcher.cpp +18 -39
  508. data/ext/common/agents/Watchdog/InstanceDirToucher.cpp +116 -0
  509. data/ext/common/agents/Watchdog/LoggingAgentWatcher.cpp +13 -17
  510. data/ext/common/agents/Watchdog/Main.cpp +743 -202
  511. data/ext/libeio/eio.c +17 -0
  512. data/ext/libeio/eio.h +2 -0
  513. data/ext/nginx/CacheLocationConfig.c +177 -198
  514. data/ext/nginx/CacheLocationConfig.c.erb +35 -22
  515. data/ext/nginx/Configuration.c +402 -236
  516. data/ext/nginx/Configuration.h +12 -5
  517. data/ext/nginx/ConfigurationCommands.c +35 -15
  518. data/ext/nginx/ConfigurationCommands.c.erb +4 -4
  519. data/ext/nginx/ConfigurationFields.h +9 -5
  520. data/ext/nginx/ConfigurationFields.h.erb +3 -1
  521. data/ext/nginx/ContentHandler.c +393 -362
  522. data/ext/nginx/CreateLocationConfig.c +8 -4
  523. data/ext/nginx/CreateLocationConfig.c.erb +8 -3
  524. data/ext/nginx/MergeLocationConfig.c +36 -6
  525. data/ext/nginx/MergeLocationConfig.c.erb +42 -1
  526. data/ext/nginx/ngx_http_passenger_module.c +28 -15
  527. data/ext/oxt/detail/backtrace_disabled.hpp +2 -1
  528. data/ext/oxt/detail/backtrace_enabled.hpp +15 -2
  529. data/ext/oxt/implementation.cpp +92 -20
  530. data/ext/oxt/thread.hpp +5 -0
  531. data/ext/ruby/extconf.rb +3 -6
  532. data/ext/ruby/passenger_native_support.c +13 -40
  533. data/helper-scripts/download_binaries/extconf.rb +4 -4
  534. data/helper-scripts/meteor-loader.rb +12 -112
  535. data/helper-scripts/node-loader.js +3 -91
  536. data/helper-scripts/rack-loader.rb +13 -14
  537. data/helper-scripts/rack-preloader.rb +16 -17
  538. data/helper-scripts/wsgi-loader.py +11 -7
  539. data/lib/phusion_passenger.rb +100 -79
  540. data/lib/phusion_passenger/abstract_installer.rb +28 -3
  541. data/lib/phusion_passenger/admin_tools.rb +3 -3
  542. data/lib/phusion_passenger/admin_tools/instance.rb +207 -0
  543. data/lib/phusion_passenger/admin_tools/instance_registry.rb +98 -0
  544. data/lib/phusion_passenger/apache2/config_options.rb +72 -22
  545. data/lib/phusion_passenger/common_library.rb +79 -14
  546. data/lib/phusion_passenger/config/about_command.rb +17 -23
  547. data/lib/phusion_passenger/config/admin_command_command.rb +175 -0
  548. data/lib/phusion_passenger/config/agent_compiler.rb +170 -0
  549. data/lib/phusion_passenger/config/command.rb +1 -4
  550. data/lib/phusion_passenger/config/compile_agent_command.rb +102 -0
  551. data/lib/phusion_passenger/config/compile_nginx_engine_command.rb +112 -0
  552. data/lib/phusion_passenger/config/detach_process_command.rb +32 -10
  553. data/lib/phusion_passenger/config/download_agent_command.rb +285 -0
  554. data/lib/phusion_passenger/config/download_nginx_engine_command.rb +281 -0
  555. data/lib/phusion_passenger/config/install_agent_command.rb +174 -0
  556. data/lib/phusion_passenger/config/install_standalone_runtime_command.rb +231 -0
  557. data/lib/phusion_passenger/config/installation_utils.rb +241 -0
  558. data/lib/phusion_passenger/config/list_instances_command.rb +13 -25
  559. data/lib/phusion_passenger/config/main.rb +43 -14
  560. data/lib/phusion_passenger/config/nginx_engine_compiler.rb +337 -0
  561. data/lib/phusion_passenger/config/reopen_logs_command.rb +110 -0
  562. data/lib/phusion_passenger/config/restart_app_command.rb +61 -14
  563. data/lib/phusion_passenger/config/system_metrics_command.rb +2 -1
  564. data/lib/phusion_passenger/config/utils.rb +64 -39
  565. data/lib/phusion_passenger/config/validate_install_command.rb +2 -2
  566. data/lib/phusion_passenger/constants.rb +27 -6
  567. data/lib/phusion_passenger/debug_logging.rb +32 -15
  568. data/lib/phusion_passenger/loader_shared_helpers.rb +2 -5
  569. data/lib/phusion_passenger/message_client.rb +21 -22
  570. data/lib/phusion_passenger/native_support.rb +26 -31
  571. data/lib/phusion_passenger/nginx/config_options.rb +32 -19
  572. data/lib/phusion_passenger/packaging.rb +7 -3
  573. data/lib/phusion_passenger/platform_info/cxx_portability.rb +1 -2
  574. data/lib/phusion_passenger/platform_info/depcheck_specs/libs.rb +3 -4
  575. data/lib/phusion_passenger/platform_info/operating_system.rb +6 -6
  576. data/lib/phusion_passenger/preloader_shared_helpers.rb +2 -2
  577. data/lib/phusion_passenger/rack/out_of_band_gc.rb +2 -2
  578. data/lib/phusion_passenger/rack/thread_handler_extension.rb +168 -65
  579. data/lib/phusion_passenger/request_handler.rb +47 -82
  580. data/lib/phusion_passenger/request_handler/thread_handler.rb +46 -10
  581. data/lib/phusion_passenger/ruby_core_enhancements.rb +25 -77
  582. data/lib/phusion_passenger/ruby_core_io_enhancements.rb +108 -0
  583. data/lib/phusion_passenger/standalone/app_finder.rb +39 -59
  584. data/lib/phusion_passenger/standalone/command.rb +27 -275
  585. data/lib/phusion_passenger/standalone/command2.rb +292 -0
  586. data/lib/phusion_passenger/standalone/config_utils.rb +87 -0
  587. data/lib/phusion_passenger/standalone/control_utils.rb +88 -0
  588. data/lib/phusion_passenger/standalone/main.rb +69 -71
  589. data/lib/phusion_passenger/standalone/start2_command.rb +799 -0
  590. data/lib/phusion_passenger/standalone/start_command.rb +406 -467
  591. data/lib/phusion_passenger/standalone/start_command/builtin_engine.rb +167 -0
  592. data/lib/phusion_passenger/standalone/start_command/nginx_engine.rb +165 -0
  593. data/lib/phusion_passenger/standalone/status_command.rb +64 -23
  594. data/lib/phusion_passenger/standalone/stop_command.rb +69 -32
  595. data/lib/phusion_passenger/standalone/version_command.rb +1 -5
  596. data/lib/phusion_passenger/utils.rb +0 -4
  597. data/lib/phusion_passenger/utils/json.rb +70 -4
  598. data/lib/phusion_passenger/utils/progress_bar.rb +56 -0
  599. data/lib/phusion_passenger/utils/tee_input.rb +3 -3
  600. data/lib/phusion_passenger/utils/unseekable_socket.rb +30 -0
  601. data/packaging/rpm/nginx_spec/nginx.spec.template +4 -3
  602. data/packaging/rpm/passenger_spec/passenger.spec.template +6 -10
  603. data/packaging/rpm/setup-system +2 -1
  604. data/resources/oss-binaries.phusionpassenger.com.crt +208 -0
  605. data/resources/templates/config/agent_compiler/confirm_enable_optimizations.txt.erb +5 -0
  606. data/resources/templates/config/installation_utils/cannot_create_user_support_binaries_dir.txt.erb +15 -0
  607. data/resources/templates/config/installation_utils/download_tool_missing.txt.erb +7 -0
  608. data/resources/templates/config/installation_utils/passenger_not_installed_as_root.txt.erb +12 -0
  609. data/resources/templates/config/installation_utils/support_binaries_dir_not_writable_despite_running_as_root.txt.erb +13 -0
  610. data/resources/templates/config/installation_utils/unexpected_filesystem_problem.txt.erb +16 -0
  611. data/{packaging/debian/debian_specs/passenger/patches/series → resources/templates/config/installation_utils/user_support_binaries_dir_not_writable.txt.erb} +0 -0
  612. data/resources/templates/nginx/nginx_module_sources_not_available.txt.erb +2 -2
  613. data/resources/templates/standalone/config.erb +14 -16
  614. data/resources/templates/standalone/possible_solutions_for_download_and_extraction_problems.txt.erb +1 -1
  615. data/test/.rspec +1 -0
  616. data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +20 -17
  617. data/test/cxx/ApplicationPool2/OptionsTest.cpp +0 -14
  618. data/test/cxx/ApplicationPool2/PoolTest.cpp +113 -90
  619. data/test/cxx/ApplicationPool2/ProcessTest.cpp +18 -27
  620. data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +51 -53
  621. data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +55 -57
  622. data/test/cxx/BufferedIOTest.cpp +40 -40
  623. data/test/cxx/CxxTestMain.cpp +4 -22
  624. data/test/cxx/DataStructures/LStringTest.cpp +275 -0
  625. data/test/cxx/DataStructures/StringKeyTableTest.cpp +199 -0
  626. data/test/cxx/MemoryKit/MbufTest.cpp +213 -0
  627. data/test/cxx/MessageServerTest.cpp +62 -55
  628. data/test/cxx/RequestHandlerTest.cpp +26 -27
  629. data/test/cxx/ServerKit/ChannelTest.cpp +1467 -0
  630. data/test/cxx/ServerKit/FileBufferedChannelTest.cpp +817 -0
  631. data/test/cxx/ServerKit/HeaderTableTest.cpp +171 -0
  632. data/test/cxx/ServerKit/HttpServerTest.cpp +1503 -0
  633. data/test/cxx/ServerKit/ServerTest.cpp +408 -0
  634. data/test/cxx/TestSupport.cpp +51 -15
  635. data/test/cxx/TestSupport.h +31 -21
  636. data/test/cxx/UnionStationTest.cpp +121 -122
  637. data/test/cxx/UtilsTest.cpp +9 -33
  638. data/test/integration_tests/apache2_tests.rb +65 -27
  639. data/test/integration_tests/downloaded_binaries_tests.rb +30 -6
  640. data/test/integration_tests/native_packaging_spec.rb +32 -17
  641. data/test/integration_tests/nginx_tests.rb +28 -10
  642. data/test/integration_tests/shared/example_webapp_tests.rb +40 -27
  643. data/test/integration_tests/standalone_tests.rb +232 -169
  644. data/test/ruby/debug_logging_spec.rb +44 -40
  645. data/test/ruby/rails3.0/preloader_spec.rb +1 -1
  646. data/test/ruby/rails3.1/preloader_spec.rb +1 -1
  647. data/test/ruby/rails3.2/preloader_spec.rb +1 -1
  648. data/test/ruby/rails4.0/preloader_spec.rb +1 -1
  649. data/test/ruby/rails4.1/preloader_spec.rb +1 -1
  650. data/test/ruby/request_handler_spec.rb +62 -24
  651. data/test/ruby/shared/loader_sharedspec.rb +10 -9
  652. data/test/ruby/shared/rails/union_station_extensions_sharedspec.rb +23 -22
  653. data/test/ruby/spec_helper.rb +2 -11
  654. data/test/ruby/standalone/runtime_installer_spec.rb +15 -13
  655. data/test/ruby/union_station_spec.rb +45 -40
  656. data/test/ruby/utils/tee_input_spec.rb +5 -5
  657. data/test/ruby/utils_spec.rb +3 -39
  658. data/test/stub/apache2/httpd.conf.erb +5 -2
  659. data/test/stub/nginx/nginx.conf.erb +3 -1
  660. data/test/support/apache2_controller.rb +25 -25
  661. data/test/support/nginx_controller.rb +14 -14
  662. data/test/support/test_helper.rb +74 -75
  663. metadata +439 -643
  664. metadata.gz.asc +7 -7
  665. data/ext/common/MultiLibeio.cpp +0 -204
  666. data/ext/common/MultiLibeio.h +0 -67
  667. data/ext/common/ServerInstanceDir.h +0 -402
  668. data/ext/common/Utils/Base64.cpp +0 -143
  669. data/ext/common/Utils/Base64.h +0 -83
  670. data/ext/common/Utils/HttpHeaderBufferer.h +0 -184
  671. data/ext/common/Utils/PriorityQueue.h +0 -54
  672. data/ext/common/Utils/StreamBoyerMooreHorspool.h +0 -512
  673. data/ext/common/Utils/fib.c +0 -699
  674. data/ext/common/Utils/fib.h +0 -101
  675. data/ext/common/Utils/fibpriv.h +0 -67
  676. data/ext/common/agents/EnvPrinter.c +0 -16
  677. data/ext/common/agents/HelperAgent/AgentOptions.h +0 -109
  678. data/ext/common/agents/HelperAgent/FileBackedPipe.h +0 -732
  679. data/ext/common/agents/HelperAgent/RequestHandler.cpp +0 -294
  680. data/ext/common/agents/HelperAgent/ScgiRequestParser.h +0 -457
  681. data/ext/common/agents/LoggingAgent/AdminController.h +0 -96
  682. data/ext/common/agents/SpawnPreparer.cpp +0 -206
  683. data/ext/common/agents/TempDirToucher.c +0 -383
  684. data/ext/common/agents/Watchdog/ServerInstanceDirToucher.cpp +0 -116
  685. data/helper-scripts/classic-rails-loader.rb +0 -166
  686. data/helper-scripts/classic-rails-preloader.rb +0 -193
  687. data/lib/phusion_passenger/admin_tools/server_instance.rb +0 -339
  688. data/lib/phusion_passenger/classic_rails/cgi_fixed.rb +0 -68
  689. data/lib/phusion_passenger/classic_rails/thread_handler_extension.rb +0 -40
  690. data/lib/phusion_passenger/platform_info/openssl.rb +0 -61
  691. data/lib/phusion_passenger/standalone/config_file.rb +0 -119
  692. data/lib/phusion_passenger/standalone/help_command.rb +0 -57
  693. data/lib/phusion_passenger/standalone/runtime_installer.rb +0 -712
  694. data/lib/phusion_passenger/standalone/runtime_locator.rb +0 -170
  695. data/lib/phusion_passenger/standalone/utils.rb +0 -58
  696. data/lib/phusion_passenger/utils/tmpdir.rb +0 -69
  697. data/packaging/debian/LICENSE.md +0 -19
  698. data/packaging/debian/README.md +0 -320
  699. data/packaging/debian/Vagrantfile +0 -25
  700. data/packaging/debian/build +0 -210
  701. data/packaging/debian/debian_specs/nginx/changelog +0 -1989
  702. data/packaging/debian/debian_specs/nginx/compat.erb +0 -5
  703. data/packaging/debian/debian_specs/nginx/conf/fastcgi.conf +0 -25
  704. data/packaging/debian/debian_specs/nginx/conf/fastcgi_params +0 -24
  705. data/packaging/debian/debian_specs/nginx/conf/koi-utf +0 -109
  706. data/packaging/debian/debian_specs/nginx/conf/koi-win +0 -103
  707. data/packaging/debian/debian_specs/nginx/conf/mime.types +0 -89
  708. data/packaging/debian/debian_specs/nginx/conf/nginx.conf.erb +0 -97
  709. data/packaging/debian/debian_specs/nginx/conf/proxy_params +0 -4
  710. data/packaging/debian/debian_specs/nginx/conf/scgi_params +0 -16
  711. data/packaging/debian/debian_specs/nginx/conf/sites-available/default.erb +0 -93
  712. data/packaging/debian/debian_specs/nginx/conf/snippets/fastcgi-php.conf +0 -13
  713. data/packaging/debian/debian_specs/nginx/conf/snippets/snakeoil.conf +0 -5
  714. data/packaging/debian/debian_specs/nginx/conf/uwsgi_params +0 -16
  715. data/packaging/debian/debian_specs/nginx/conf/win-utf +0 -125
  716. data/packaging/debian/debian_specs/nginx/control.erb +0 -226
  717. data/packaging/debian/debian_specs/nginx/copyright +0 -196
  718. data/packaging/debian/debian_specs/nginx/debian-full.lintian-overrides +0 -1
  719. data/packaging/debian/debian_specs/nginx/gbp.conf +0 -2
  720. data/packaging/debian/debian_specs/nginx/help/docs/fcgiwrap +0 -14
  721. data/packaging/debian/debian_specs/nginx/help/docs/php +0 -119
  722. data/packaging/debian/debian_specs/nginx/help/docs/support-irc +0 -28
  723. data/packaging/debian/debian_specs/nginx/help/docs/upstream +0 -51
  724. data/packaging/debian/debian_specs/nginx/help/examples/drupal +0 -114
  725. data/packaging/debian/debian_specs/nginx/help/examples/http +0 -59
  726. data/packaging/debian/debian_specs/nginx/help/examples/mail +0 -30
  727. data/packaging/debian/debian_specs/nginx/help/examples/mailman +0 -59
  728. data/packaging/debian/debian_specs/nginx/help/examples/nginx.conf +0 -34
  729. data/packaging/debian/debian_specs/nginx/help/examples/nginx_modsite +0 -162
  730. data/packaging/debian/debian_specs/nginx/help/examples/virtual_hosts +0 -155
  731. data/packaging/debian/debian_specs/nginx/help/examples/wordpress +0 -74
  732. data/packaging/debian/debian_specs/nginx/helpers.rb +0 -41
  733. data/packaging/debian/debian_specs/nginx/index-debian.html.in +0 -32
  734. data/packaging/debian/debian_specs/nginx/index-ubuntu.html.in +0 -32
  735. data/packaging/debian/debian_specs/nginx/index.html.erb +0 -10
  736. data/packaging/debian/debian_specs/nginx/modules/README.Modules-versions +0 -65
  737. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/README.markdown +0 -510
  738. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/config +0 -5
  739. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/doc/HttpHeadersMoreModule.wiki +0 -395
  740. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ddebug.h +0 -119
  741. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_filter_module.c +0 -348
  742. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_filter_module.h +0 -80
  743. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_in.c +0 -826
  744. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_in.h +0 -26
  745. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_out.c +0 -716
  746. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_out.h +0 -26
  747. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_util.c +0 -380
  748. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_util.h +0 -52
  749. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/util/build.sh +0 -32
  750. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/valgrind.suppress +0 -215
  751. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/ChangeLog +0 -35
  752. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/LICENSE +0 -25
  753. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/README.md +0 -93
  754. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/config +0 -4
  755. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/ngx_http_auth_pam_module.c +0 -462
  756. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/CHANGES +0 -66
  757. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/LICENSE +0 -26
  758. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/README.md +0 -171
  759. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/TODO.md +0 -7
  760. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/config +0 -21
  761. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/ngx_cache_purge_module.c +0 -1803
  762. data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/README +0 -29
  763. data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/config +0 -9
  764. data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/ngx_http_dav_ext_module.c +0 -824
  765. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/README +0 -139
  766. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/README_AUTO_LIB +0 -395
  767. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/TODO +0 -1
  768. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/actions/array +0 -10
  769. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/actions/palloc +0 -8
  770. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/build +0 -597
  771. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/action_replacements +0 -5
  772. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/action_types +0 -12
  773. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_args +0 -22
  774. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_locs +0 -25
  775. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_macros +0 -35
  776. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/contexts +0 -22
  777. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/header_files +0 -3
  778. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/headers +0 -4
  779. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/module_dependencies +0 -5
  780. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/modules_optional +0 -15
  781. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/prefixes +0 -2
  782. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/array.h +0 -7
  783. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/conf_cmd_basic.h +0 -43
  784. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/conf_merge.h +0 -78
  785. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/palloc.h +0 -6
  786. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/text/autogen +0 -12
  787. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/config +0 -49
  788. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/core/action_macros +0 -63
  789. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/core/conf_cmds +0 -62
  790. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/modules/set_var +0 -124
  791. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/patches/more_logging_info +0 -48
  792. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/upstream/list +0 -45
  793. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/README +0 -12
  794. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/http/set_var/config +0 -4
  795. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/http/set_var/ngx_http_set_var_examples_module.c +0 -136
  796. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/ngx_auto_lib_core +0 -797
  797. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/notes/CHANGES +0 -17
  798. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/notes/LICENSE +0 -24
  799. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_array.h +0 -113
  800. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_cmd_basic.h +0 -2203
  801. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_cmd_extra.h +0 -5423
  802. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_merge.h +0 -227
  803. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_config.c +0 -72
  804. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_config.h +0 -98
  805. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_includes.h +0 -66
  806. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_palloc.h +0 -112
  807. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/auto_config +0 -16
  808. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/expose_rewrite_functions +0 -291
  809. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/rewrite_phase_handler +0 -19
  810. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/md5.h +0 -117
  811. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/murmurhash2.c +0 -77
  812. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/sha.h +0 -200
  813. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk.c +0 -155
  814. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk.h +0 -58
  815. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_buf.c +0 -43
  816. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_buf.h +0 -5
  817. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_path.c +0 -129
  818. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_path.h +0 -30
  819. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_value.c +0 -192
  820. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_value.h +0 -21
  821. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_conf_file.c +0 -396
  822. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_conf_file.h +0 -44
  823. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_debug.c +0 -72
  824. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_debug.h +0 -171
  825. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_encoding.c +0 -57
  826. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_encoding.h +0 -12
  827. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_hash.c +0 -82
  828. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_hash.h +0 -45
  829. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http.c +0 -138
  830. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http.h +0 -3
  831. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http_headers.h +0 -35
  832. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_log.c +0 -3
  833. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_log.h +0 -165
  834. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_parse.h +0 -67
  835. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_path.c +0 -583
  836. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_path.h +0 -22
  837. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_process.c +0 -20
  838. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_process.h +0 -12
  839. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_regex.c +0 -215
  840. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_regex.h +0 -7
  841. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_rewrite.c +0 -103
  842. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_rewrite.h +0 -26
  843. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_set_var.c +0 -602
  844. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_set_var.h +0 -44
  845. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string.c +0 -434
  846. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string.h +0 -37
  847. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string_util.h +0 -14
  848. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_upstream_list.c +0 -205
  849. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_upstream_list.h +0 -27
  850. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_uri.c +0 -45
  851. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_uri.h +0 -6
  852. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/LICENSE +0 -25
  853. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/README.markdown +0 -1850
  854. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/config +0 -5
  855. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/doc/HttpEchoModule.wiki +0 -1558
  856. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ddebug.h +0 -109
  857. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_echo.c +0 -344
  858. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_echo.h +0 -25
  859. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_filter.c +0 -282
  860. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_filter.h +0 -15
  861. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_foreach.c +0 -183
  862. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_foreach.h +0 -16
  863. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_handler.c +0 -429
  864. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_handler.h +0 -18
  865. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_location.c +0 -178
  866. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_location.h +0 -13
  867. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_module.c +0 -667
  868. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_module.h +0 -137
  869. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_request_info.c +0 -452
  870. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_request_info.h +0 -31
  871. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_sleep.c +0 -208
  872. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_sleep.h +0 -16
  873. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_subrequest.c +0 -788
  874. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_subrequest.h +0 -19
  875. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_timer.c +0 -96
  876. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_timer.h +0 -13
  877. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_util.c +0 -298
  878. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_util.h +0 -58
  879. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_var.c +0 -110
  880. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_var.h +0 -9
  881. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/build.sh +0 -45
  882. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/releng +0 -8
  883. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/wiki2pod.pl +0 -131
  884. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/valgrind.suppress +0 -38
  885. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/LICENCE +0 -24
  886. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/README +0 -206
  887. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/changelog.txt +0 -54
  888. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/config +0 -26
  889. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/protocol.txt +0 -191
  890. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_defs.c +0 -59
  891. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_defs.h +0 -73
  892. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module.c +0 -783
  893. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module.h +0 -31
  894. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module_setup.c +0 -361
  895. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_types.h +0 -120
  896. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/memory/store.c +0 -1180
  897. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/memory/store.h +0 -1
  898. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_module_ipc.c +0 -146
  899. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_module_ipc.h +0 -5
  900. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_store.h +0 -51
  901. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_rwlock.c +0 -178
  902. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_rwlock.h +0 -5
  903. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/rbtree_util.c +0 -246
  904. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/rbtree_util.h +0 -9
  905. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/Changes +0 -51
  906. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/README.markdown +0 -6954
  907. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/config +0 -363
  908. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/doc/HttpLuaModule.wiki +0 -5898
  909. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/dtrace/ngx_lua_provider.d +0 -61
  910. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/Makefile +0 -3
  911. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/lib/RecvUntil.pm +0 -138
  912. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/t/sanity.t +0 -140
  913. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/api/ngx_http_lua_api.h +0 -52
  914. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ddebug.h +0 -82
  915. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_accessby.c +0 -377
  916. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_accessby.h +0 -22
  917. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_api.c +0 -77
  918. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_args.c +0 -537
  919. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_args.h +0 -20
  920. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_bodyfilterby.c +0 -632
  921. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_bodyfilterby.h +0 -31
  922. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_cache.c +0 -296
  923. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_cache.h +0 -24
  924. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_capturefilter.c +0 -175
  925. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_capturefilter.h +0 -20
  926. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_clfactory.c +0 -887
  927. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_clfactory.h +0 -22
  928. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_common.h +0 -478
  929. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_config.c +0 -67
  930. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_config.h +0 -19
  931. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_consts.c +0 -148
  932. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_consts.h +0 -20
  933. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_contentby.c +0 -369
  934. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_contentby.h +0 -26
  935. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_control.c +0 -483
  936. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_control.h +0 -20
  937. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_coroutine.c +0 -379
  938. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_coroutine.h +0 -23
  939. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ctx.c +0 -216
  940. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ctx.h +0 -23
  941. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_directive.c +0 -1081
  942. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_directive.h +0 -56
  943. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_exception.c +0 -58
  944. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_exception.h +0 -33
  945. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headerfilterby.c +0 -302
  946. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headerfilterby.h +0 -29
  947. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers.c +0 -1370
  948. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers.h +0 -22
  949. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_in.c +0 -782
  950. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_in.h +0 -22
  951. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_out.c +0 -625
  952. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_out.h +0 -23
  953. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initby.c +0 -42
  954. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initby.h +0 -23
  955. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initworkerby.c +0 -320
  956. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initworkerby.h +0 -25
  957. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_log.c +0 -300
  958. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_log.h +0 -20
  959. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_logby.c +0 -227
  960. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_logby.h +0 -22
  961. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_misc.c +0 -252
  962. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_misc.h +0 -20
  963. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_module.c +0 -924
  964. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ndk.c +0 -184
  965. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ndk.h +0 -21
  966. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_output.c +0 -794
  967. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_output.h +0 -28
  968. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_pcrefix.c +0 -106
  969. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_pcrefix.h +0 -23
  970. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_phase.c +0 -94
  971. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_phase.h +0 -13
  972. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_probe.h +0 -85
  973. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_regex.c +0 -2468
  974. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_regex.h +0 -22
  975. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_body.c +0 -1169
  976. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_body.h +0 -20
  977. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_method.c +0 -252
  978. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_method.h +0 -19
  979. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_rewriteby.c +0 -351
  980. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_rewriteby.h +0 -22
  981. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_script.c +0 -538
  982. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_script.h +0 -86
  983. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_setby.c +0 -216
  984. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_setby.h +0 -15
  985. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_shdict.c +0 -1844
  986. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_shdict.h +0 -52
  987. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_sleep.c +0 -191
  988. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_sleep.h +0 -20
  989. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_tcp.c +0 -5314
  990. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_tcp.h +0 -156
  991. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_udp.c +0 -1624
  992. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_udp.h +0 -56
  993. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_string.c +0 -704
  994. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_string.h +0 -20
  995. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_subrequest.c +0 -1741
  996. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_subrequest.h +0 -46
  997. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_time.c +0 -278
  998. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_time.h +0 -21
  999. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_timer.c +0 -661
  1000. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_timer.h +0 -20
  1001. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uri.c +0 -110
  1002. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uri.h +0 -20
  1003. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uthread.c +0 -283
  1004. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uthread.h +0 -36
  1005. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_util.c +0 -3972
  1006. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_util.h +0 -423
  1007. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_variable.c +0 -499
  1008. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_variable.h +0 -20
  1009. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_worker.c +0 -64
  1010. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_worker.h +0 -17
  1011. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/tapset/ngx_lua.stp +0 -5
  1012. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/build.sh +0 -39
  1013. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/build2.sh +0 -55
  1014. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/fix-comments +0 -27
  1015. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/gdbinit +0 -415
  1016. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/ngx-links +0 -62
  1017. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/reindex +0 -64
  1018. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/releng +0 -8
  1019. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/retab +0 -8
  1020. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/revim +0 -102
  1021. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/run_test.sh +0 -10
  1022. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/update-readme.sh +0 -4
  1023. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/valgrind.suppress +0 -144
  1024. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/CHANGES +0 -107
  1025. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/LICENSE +0 -25
  1026. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/Makefile +0 -8
  1027. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/README +0 -329
  1028. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/config +0 -3
  1029. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/ngx_http_uploadprogress_module.c +0 -1774
  1030. data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/README +0 -53
  1031. data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/config +0 -3
  1032. data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/ngx_http_upstream_fair_module.c +0 -1356
  1033. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/CHANGELOG.md +0 -37
  1034. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/HACKING.md +0 -24
  1035. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/LICENSE +0 -20
  1036. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/README.rst +0 -182
  1037. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/config +0 -8
  1038. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/nginx-0.6-support.patch +0 -23
  1039. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/ngx_http_fancyindex_module.c +0 -1305
  1040. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.awk +0 -52
  1041. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.h +0 -103
  1042. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.html +0 -102
  1043. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/CHANGES +0 -37
  1044. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/README +0 -141
  1045. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/config +0 -3
  1046. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.google_code_home_page.wiki +0 -120
  1047. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.html +0 -199
  1048. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.wiki +0 -123
  1049. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/ngx_http_subs_filter_module.c +0 -1298
  1050. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/README +0 -275
  1051. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/AutoInstall.pm +0 -820
  1052. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install.pm +0 -470
  1053. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/AutoInstall.pm +0 -82
  1054. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Base.pm +0 -83
  1055. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Can.pm +0 -81
  1056. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Fetch.pm +0 -93
  1057. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Include.pm +0 -34
  1058. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Makefile.pm +0 -415
  1059. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Metadata.pm +0 -716
  1060. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/TestBase.pm +0 -29
  1061. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Win32.pm +0 -64
  1062. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/WriteAll.pm +0 -63
  1063. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Spiffy.pm +0 -539
  1064. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Base.pm +0 -682
  1065. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Base/Filter.pm +0 -341
  1066. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Builder.pm +0 -1413
  1067. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Builder/Module.pm +0 -81
  1068. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/More.pm +0 -735
  1069. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx.pm +0 -315
  1070. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/LWP.pm +0 -524
  1071. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/Socket.pm +0 -1749
  1072. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/Util.pm +0 -874
  1073. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs.t +0 -136
  1074. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_capture.t +0 -32
  1075. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_fix_string.t +0 -32
  1076. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_regex.t +0 -108
  1077. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_types.t +0 -59
  1078. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/test.sh +0 -5
  1079. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/update-readme.sh +0 -7
  1080. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/wiki2google_code_homepage.pl +0 -29
  1081. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/wiki2pod.pl +0 -129
  1082. data/packaging/debian/debian_specs/nginx/nginx-common.NEWS +0 -135
  1083. data/packaging/debian/debian_specs/nginx/nginx-common.README.Debian +0 -45
  1084. data/packaging/debian/debian_specs/nginx/nginx-common.dirs.erb +0 -32
  1085. data/packaging/debian/debian_specs/nginx/nginx-common.install +0 -3
  1086. data/packaging/debian/debian_specs/nginx/nginx-common.lintian-overrides +0 -2
  1087. data/packaging/debian/debian_specs/nginx/nginx-common.manpages +0 -1
  1088. data/packaging/debian/debian_specs/nginx/nginx-common.nginx.default +0 -10
  1089. data/packaging/debian/debian_specs/nginx/nginx-common.nginx.init.erb +0 -214
  1090. data/packaging/debian/debian_specs/nginx/nginx-common.nginx.logrotate +0 -18
  1091. data/packaging/debian/debian_specs/nginx/nginx-common.nginx.service.erb +0 -37
  1092. data/packaging/debian/debian_specs/nginx/nginx-common.postinst.erb +0 -66
  1093. data/packaging/debian/debian_specs/nginx/nginx-common.postrm.erb +0 -46
  1094. data/packaging/debian/debian_specs/nginx/nginx-common.preinst +0 -47
  1095. data/packaging/debian/debian_specs/nginx/nginx-common.prerm.erb +0 -28
  1096. data/packaging/debian/debian_specs/nginx/nginx-doc.docs +0 -2
  1097. data/packaging/debian/debian_specs/nginx/nginx-doc.examples +0 -1
  1098. data/packaging/debian/debian_specs/nginx/nginx-extras.install.erb +0 -17
  1099. data/packaging/debian/debian_specs/nginx/nginx-extras.lintian-overrides +0 -1
  1100. data/packaging/debian/debian_specs/nginx/nginx-extras.postinst.erb +0 -44
  1101. data/packaging/debian/debian_specs/nginx/nginx-extras.prerm +0 -22
  1102. data/packaging/debian/debian_specs/nginx/nginx.1 +0 -47
  1103. data/packaging/debian/debian_specs/nginx/patches/perl-use-dpkg-buildflags.patch +0 -23
  1104. data/packaging/debian/debian_specs/nginx/patches/series +0 -1
  1105. data/packaging/debian/debian_specs/nginx/rules.erb +0 -185
  1106. data/packaging/debian/debian_specs/nginx/source/format +0 -1
  1107. data/packaging/debian/debian_specs/nginx/tests/control +0 -4
  1108. data/packaging/debian/debian_specs/nginx/ufw/nginx +0 -14
  1109. data/packaging/debian/debian_specs/nginx/upstream/signing-key.asc +0 -34
  1110. data/packaging/debian/debian_specs/nginx/watch +0 -3
  1111. data/packaging/debian/debian_specs/passenger/README.Debian +0 -12
  1112. data/packaging/debian/debian_specs/passenger/changelog +0 -316
  1113. data/packaging/debian/debian_specs/passenger/compat +0 -1
  1114. data/packaging/debian/debian_specs/passenger/control.erb +0 -123
  1115. data/packaging/debian/debian_specs/passenger/copyright +0 -385
  1116. data/packaging/debian/debian_specs/passenger/helpers.rb +0 -24
  1117. data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.install +0 -3
  1118. data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.postinst +0 -36
  1119. data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.prerm +0 -15
  1120. data/packaging/debian/debian_specs/passenger/locations.ini.erb +0 -14
  1121. data/packaging/debian/debian_specs/passenger/passenger-dev.install.erb +0 -3
  1122. data/packaging/debian/debian_specs/passenger/passenger-doc.install.erb +0 -2
  1123. data/packaging/debian/debian_specs/passenger/passenger.conf +0 -6
  1124. data/packaging/debian/debian_specs/passenger/passenger.docs +0 -4
  1125. data/packaging/debian/debian_specs/passenger/passenger.install.erb +0 -16
  1126. data/packaging/debian/debian_specs/passenger/passenger.load +0 -3
  1127. data/packaging/debian/debian_specs/passenger/passenger.manpages +0 -3
  1128. data/packaging/debian/debian_specs/passenger/passenger_free_ruby.c +0 -29
  1129. data/packaging/debian/debian_specs/passenger/passenger_ruby_utils.c +0 -54
  1130. data/packaging/debian/debian_specs/passenger/passenger_system_ruby.c.erb +0 -37
  1131. data/packaging/debian/debian_specs/passenger/rules.erb +0 -84
  1132. data/packaging/debian/debian_specs/passenger/source/format +0 -1
  1133. data/packaging/debian/debian_specs/passenger_enterprise/README.Debian +0 -12
  1134. data/packaging/debian/debian_specs/passenger_enterprise/changelog +0 -316
  1135. data/packaging/debian/debian_specs/passenger_enterprise/compat +0 -1
  1136. data/packaging/debian/debian_specs/passenger_enterprise/control.erb +0 -123
  1137. data/packaging/debian/debian_specs/passenger_enterprise/copyright +0 -385
  1138. data/packaging/debian/debian_specs/passenger_enterprise/helpers.rb +0 -2
  1139. data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.install +0 -3
  1140. data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.postinst +0 -36
  1141. data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.prerm +0 -15
  1142. data/packaging/debian/debian_specs/passenger_enterprise/locations.ini.erb +0 -14
  1143. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise-dev.install.erb +0 -3
  1144. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise-doc.install.erb +0 -2
  1145. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.docs +0 -4
  1146. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.install.erb +0 -14
  1147. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.manpages +0 -3
  1148. data/packaging/debian/debian_specs/passenger_enterprise/passenger.conf +0 -6
  1149. data/packaging/debian/debian_specs/passenger_enterprise/passenger.load +0 -3
  1150. data/packaging/debian/debian_specs/passenger_enterprise/passenger_free_ruby.c.erb +0 -1
  1151. data/packaging/debian/debian_specs/passenger_enterprise/passenger_ruby_utils.c.erb +0 -1
  1152. data/packaging/debian/debian_specs/passenger_enterprise/passenger_system_ruby.c.erb +0 -1
  1153. data/packaging/debian/debian_specs/passenger_enterprise/patches/series +0 -0
  1154. data/packaging/debian/debian_specs/passenger_enterprise/rules.erb +0 -84
  1155. data/packaging/debian/debian_specs/passenger_enterprise/source/format +0 -1
  1156. data/packaging/debian/docker_images/Makefile +0 -38
  1157. data/packaging/debian/docker_images/buildbox/CONTAINER_VERSION.txt +0 -0
  1158. data/packaging/debian/docker_images/buildbox/Dockerfile +0 -3
  1159. data/packaging/debian/docker_images/buildbox/Gemfile +0 -9
  1160. data/packaging/debian/docker_images/buildbox/Gemfile.lock +0 -42
  1161. data/packaging/debian/docker_images/buildbox/install.sh +0 -85
  1162. data/packaging/debian/docker_images/buildbox/pbuilderrc +0 -4
  1163. data/packaging/debian/docker_images/buildbox/sudoers.conf +0 -6
  1164. data/packaging/debian/docker_images/setup-buildbox-docker-image +0 -7
  1165. data/packaging/debian/docker_images/setup-testbox-docker-image-debian-6 +0 -7
  1166. data/packaging/debian/docker_images/setup-testbox-docker-image-debian-7 +0 -7
  1167. data/packaging/debian/docker_images/setup-testbox-docker-image-debian-8 +0 -7
  1168. data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-12.04 +0 -7
  1169. data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-14.04 +0 -7
  1170. data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-15.04 +0 -7
  1171. data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-15.10 +0 -7
  1172. data/packaging/debian/docker_images/testbox-debian-6/Dockerfile +0 -3
  1173. data/packaging/debian/docker_images/testbox-debian-6/Gemfile +0 -2
  1174. data/packaging/debian/docker_images/testbox-debian-6/Gemfile.lock +0 -23
  1175. data/packaging/debian/docker_images/testbox-debian-6/argparse.py +0 -2374
  1176. data/packaging/debian/docker_images/testbox-debian-6/install.sh +0 -78
  1177. data/packaging/debian/docker_images/testbox-debian-7/Dockerfile +0 -3
  1178. data/packaging/debian/docker_images/testbox-debian-7/Gemfile +0 -2
  1179. data/packaging/debian/docker_images/testbox-debian-7/Gemfile.lock +0 -23
  1180. data/packaging/debian/docker_images/testbox-debian-7/install.sh +0 -71
  1181. data/packaging/debian/docker_images/testbox-debian-8/Dockerfile +0 -3
  1182. data/packaging/debian/docker_images/testbox-debian-8/Gemfile +0 -2
  1183. data/packaging/debian/docker_images/testbox-debian-8/Gemfile.lock +0 -23
  1184. data/packaging/debian/docker_images/testbox-debian-8/install.sh +0 -70
  1185. data/packaging/debian/docker_images/testbox-ubuntu-12.04/Dockerfile +0 -3
  1186. data/packaging/debian/docker_images/testbox-ubuntu-12.04/Gemfile +0 -2
  1187. data/packaging/debian/docker_images/testbox-ubuntu-12.04/Gemfile.lock +0 -23
  1188. data/packaging/debian/docker_images/testbox-ubuntu-12.04/install.sh +0 -69
  1189. data/packaging/debian/docker_images/testbox-ubuntu-14.04/Dockerfile +0 -3
  1190. data/packaging/debian/docker_images/testbox-ubuntu-14.04/Gemfile +0 -2
  1191. data/packaging/debian/docker_images/testbox-ubuntu-14.04/Gemfile.lock +0 -23
  1192. data/packaging/debian/docker_images/testbox-ubuntu-14.04/install.sh +0 -69
  1193. data/packaging/debian/docker_images/testbox-ubuntu-15.04/Dockerfile +0 -3
  1194. data/packaging/debian/docker_images/testbox-ubuntu-15.04/Gemfile +0 -2
  1195. data/packaging/debian/docker_images/testbox-ubuntu-15.04/Gemfile.lock +0 -23
  1196. data/packaging/debian/docker_images/testbox-ubuntu-15.04/install.sh +0 -69
  1197. data/packaging/debian/docker_images/testbox-ubuntu-15.10/Dockerfile +0 -3
  1198. data/packaging/debian/docker_images/testbox-ubuntu-15.10/Gemfile +0 -2
  1199. data/packaging/debian/docker_images/testbox-ubuntu-15.10/Gemfile.lock +0 -23
  1200. data/packaging/debian/docker_images/testbox-ubuntu-15.10/install.sh +0 -69
  1201. data/packaging/debian/internal/build/Rakefile +0 -235
  1202. data/packaging/debian/internal/build/build-passenger-orig-tarball.sh +0 -76
  1203. data/packaging/debian/internal/build/build-source-package.rb +0 -121
  1204. data/packaging/debian/internal/build/download-nginx-orig-tarball.sh +0 -17
  1205. data/packaging/debian/internal/build/rakefile_support.rb +0 -96
  1206. data/packaging/debian/internal/build/setup-environment-essentials.sh +0 -15
  1207. data/packaging/debian/internal/build/setup-environment.sh +0 -29
  1208. data/packaging/debian/internal/lib/distro_info.rb +0 -82
  1209. data/packaging/debian/internal/lib/distro_info.sh +0 -303
  1210. data/packaging/debian/internal/lib/distro_info.sh.erb +0 -65
  1211. data/packaging/debian/internal/lib/library.sh +0 -83
  1212. data/packaging/debian/internal/lib/preprocessor.rb +0 -173
  1213. data/packaging/debian/internal/lib/tracking.rb +0 -95
  1214. data/packaging/debian/internal/lib/tracking_category.rb +0 -45
  1215. data/packaging/debian/internal/lib/tracking_database.rb +0 -132
  1216. data/packaging/debian/internal/lib/tracking_task.rb +0 -148
  1217. data/packaging/debian/internal/lib/utils.rb +0 -78
  1218. data/packaging/debian/internal/publish/Rakefile +0 -97
  1219. data/packaging/debian/internal/publish/oss-binaries.phusionpassenger.com-fingerprint.txt +0 -1
  1220. data/packaging/debian/internal/publish/packagecloud_fingerprint.txt +0 -1
  1221. data/packaging/debian/internal/publish/passenger_website_fingerprint.txt +0 -1
  1222. data/packaging/debian/internal/publish/preinit.sh +0 -7
  1223. data/packaging/debian/internal/publish/rakefile_support.rb +0 -183
  1224. data/packaging/debian/internal/scripts/gpg_noninteractive/gpg +0 -11
  1225. data/packaging/debian/internal/scripts/initccache.sh +0 -35
  1226. data/packaging/debian/internal/scripts/inituidgid.sh +0 -19
  1227. data/packaging/debian/internal/scripts/my_init +0 -340
  1228. data/packaging/debian/internal/scripts/pin_certificates +0 -34
  1229. data/packaging/debian/internal/scripts/regen_distro_info_script.sh +0 -3
  1230. data/packaging/debian/internal/scripts/setup-vagrant.sh +0 -12
  1231. data/packaging/debian/internal/scripts/setuser +0 -31
  1232. data/packaging/debian/internal/shell/initpbuilder.sh +0 -3
  1233. data/packaging/debian/internal/shell/preinit.sh +0 -28
  1234. data/packaging/debian/internal/shell/sudoers.conf +0 -1
  1235. data/packaging/debian/internal/test/apache/apache-24.conf +0 -5
  1236. data/packaging/debian/internal/test/apache/apache-pre-24.conf +0 -4
  1237. data/packaging/debian/internal/test/apache/vhost.conf +0 -17
  1238. data/packaging/debian/internal/test/misc/config.json +0 -15
  1239. data/packaging/debian/internal/test/misc/hosts.conf +0 -4
  1240. data/packaging/debian/internal/test/misc/init.sh +0 -25
  1241. data/packaging/debian/internal/test/misc/nodejs_test_app.js +0 -6
  1242. data/packaging/debian/internal/test/misc/python_test_app.py +0 -3
  1243. data/packaging/debian/internal/test/misc/ruby_test_app.rb +0 -5
  1244. data/packaging/debian/internal/test/misc/test_support.rb +0 -61
  1245. data/packaging/debian/internal/test/nginx/vhost.conf +0 -23
  1246. data/packaging/debian/internal/test/system_web_server_test.rb +0 -126
  1247. data/packaging/debian/internal/test/test.sh +0 -141
  1248. data/packaging/debian/jenkins/publish/clear_caches.rb +0 -48
  1249. data/packaging/debian/jenkins/publish/publish.sh +0 -69
  1250. data/packaging/debian/jenkins/test/test.sh +0 -63
  1251. data/packaging/debian/passenger_apt_automation.sublime-project +0 -14
  1252. data/packaging/debian/publish +0 -172
  1253. data/packaging/debian/shell +0 -116
  1254. data/packaging/debian/test +0 -142
  1255. data/packaging/rpm/passenger_spec/rubygem-passenger-4.0.18-gcc47-include-sys_types.patch +0 -45
  1256. data/test/cxx/Base64Test.cpp +0 -50
  1257. data/test/cxx/FileBackedPipeTest.cpp +0 -626
  1258. data/test/cxx/HttpHeaderBuffererTest.cpp +0 -257
  1259. data/test/cxx/ScgiRequestParserTest.cpp +0 -423
  1260. data/test/cxx/ServerInstanceDirTest.cpp +0 -175
  1261. data/test/ruby/admin_tools_spec.rb +0 -360
  1262. data/test/ruby/classic_rails/loader_spec.rb +0 -46
  1263. data/test/ruby/classic_rails/preloader_spec.rb +0 -52
  1264. data/test/ruby/standalone/runtime_locator_spec.rb +0 -214
  1265. data/test/stub/rails2.3/Rakefile +0 -10
  1266. data/test/stub/rails2.3/app/controllers/application_controller.rb +0 -10
  1267. data/test/stub/rails2.3/app/controllers/bar_controller_1.rb +0 -5
  1268. data/test/stub/rails2.3/app/controllers/bar_controller_2.rb +0 -5
  1269. data/test/stub/rails2.3/app/controllers/foo_controller.rb +0 -21
  1270. data/test/stub/rails2.3/app/helpers/application_helper.rb +0 -3
  1271. data/test/stub/rails2.3/app/helpers/bar_helper.rb +0 -2
  1272. data/test/stub/rails2.3/app/helpers/foo_helper.rb +0 -2
  1273. data/test/stub/rails2.3/config/boot.rb +0 -110
  1274. data/test/stub/rails2.3/config/database.yml +0 -19
  1275. data/test/stub/rails2.3/config/environment.rb +0 -62
  1276. data/test/stub/rails2.3/config/environments/development.rb +0 -17
  1277. data/test/stub/rails2.3/config/environments/production.rb +0 -18
  1278. data/test/stub/rails2.3/config/environments/staging.rb +0 -18
  1279. data/test/stub/rails2.3/config/initializers/inflections.rb +0 -10
  1280. data/test/stub/rails2.3/config/initializers/mime_types.rb +0 -5
  1281. data/test/stub/rails2.3/config/routes.rb +0 -35
  1282. data/test/stub/rails2.3/log/.gitignore +0 -1
  1283. data/test/stub/rails2.3/public/.gitignore +0 -1
  1284. data/test/stub/rails2.3/script/about +0 -3
  1285. data/test/stub/rails2.3/script/console +0 -3
  1286. data/test/stub/rails2.3/script/dbconsole +0 -3
  1287. data/test/stub/rails2.3/script/destroy +0 -3
  1288. data/test/stub/rails2.3/script/generate +0 -3
  1289. data/test/stub/rails2.3/script/performance/benchmarker +0 -3
  1290. data/test/stub/rails2.3/script/performance/profiler +0 -3
  1291. data/test/stub/rails2.3/script/performance/request +0 -3
  1292. data/test/stub/rails2.3/script/plugin +0 -3
  1293. data/test/stub/rails2.3/script/process/inspector +0 -3
  1294. data/test/stub/rails2.3/script/process/reaper +0 -3
  1295. data/test/stub/rails2.3/script/process/spawner +0 -3
  1296. data/test/stub/rails2.3/script/runner +0 -3
  1297. data/test/stub/rails2.3/script/server +0 -3
  1298. data/test/stub/rails2.3/tmp/cache/.gitignore +0 -1
  1299. data/test/stub/rails2.3/tmp/pids/.gitignore +0 -1
  1300. data/test/stub/rails2.3/tmp/sessions/.gitignore +0 -1
  1301. data/test/stub/rails2.3/tmp/sockets/.gitignore +0 -1
@@ -1,20 +0,0 @@
1
-
2
- /*
3
- * Copyright (C) Xiaozhe Wang (chaoslawful)
4
- * Copyright (C) Yichun Zhang (agentzh)
5
- */
6
-
7
-
8
- #ifndef _NGX_HTTP_LUA_STRING_H_INCLUDED_
9
- #define _NGX_HTTP_LUA_STRING_H_INCLUDED_
10
-
11
-
12
- #include "ngx_http_lua_common.h"
13
-
14
-
15
- void ngx_http_lua_inject_string_api(lua_State *L);
16
-
17
-
18
- #endif /* _NGX_HTTP_LUA_STRING_H_INCLUDED_ */
19
-
20
- /* vi:set ft=c ts=4 sw=4 et fdm=marker: */
@@ -1,1741 +0,0 @@
1
-
2
- /*
3
- * Copyright (C) Xiaozhe Wang (chaoslawful)
4
- * Copyright (C) Yichun Zhang (agentzh)
5
- */
6
-
7
-
8
- #ifndef DDEBUG
9
- #define DDEBUG 0
10
- #endif
11
- #include "ddebug.h"
12
-
13
-
14
- #include "ngx_http_lua_subrequest.h"
15
- #include "ngx_http_lua_util.h"
16
- #include "ngx_http_lua_ctx.h"
17
- #include "ngx_http_lua_contentby.h"
18
- #include "ngx_http_lua_headers_in.h"
19
- #if defined(NGX_DTRACE) && NGX_DTRACE
20
- #include "ngx_http_probe.h"
21
- #endif
22
-
23
-
24
- #define NGX_HTTP_LUA_SHARE_ALL_VARS 0x01
25
- #define NGX_HTTP_LUA_COPY_ALL_VARS 0x02
26
-
27
-
28
- #define ngx_http_lua_method_name(m) { sizeof(m) - 1, (u_char *) m " " }
29
-
30
- ngx_str_t ngx_http_lua_get_method = ngx_http_lua_method_name("GET");
31
- ngx_str_t ngx_http_lua_put_method = ngx_http_lua_method_name("PUT");
32
- ngx_str_t ngx_http_lua_post_method = ngx_http_lua_method_name("POST");
33
- ngx_str_t ngx_http_lua_head_method = ngx_http_lua_method_name("HEAD");
34
- ngx_str_t ngx_http_lua_delete_method =
35
- ngx_http_lua_method_name("DELETE");
36
- ngx_str_t ngx_http_lua_options_method =
37
- ngx_http_lua_method_name("OPTIONS");
38
- ngx_str_t ngx_http_lua_copy_method = ngx_http_lua_method_name("COPY");
39
- ngx_str_t ngx_http_lua_move_method = ngx_http_lua_method_name("MOVE");
40
- ngx_str_t ngx_http_lua_lock_method = ngx_http_lua_method_name("LOCK");
41
- ngx_str_t ngx_http_lua_mkcol_method =
42
- ngx_http_lua_method_name("MKCOL");
43
- ngx_str_t ngx_http_lua_propfind_method =
44
- ngx_http_lua_method_name("PROPFIND");
45
- ngx_str_t ngx_http_lua_proppatch_method =
46
- ngx_http_lua_method_name("PROPPATCH");
47
- ngx_str_t ngx_http_lua_unlock_method =
48
- ngx_http_lua_method_name("UNLOCK");
49
- ngx_str_t ngx_http_lua_patch_method =
50
- ngx_http_lua_method_name("PATCH");
51
- ngx_str_t ngx_http_lua_trace_method =
52
- ngx_http_lua_method_name("TRACE");
53
-
54
-
55
- static ngx_str_t ngx_http_lua_content_length_header_key =
56
- ngx_string("Content-Length");
57
-
58
-
59
- static ngx_int_t ngx_http_lua_set_content_length_header(ngx_http_request_t *r,
60
- off_t len);
61
- static ngx_int_t ngx_http_lua_adjust_subrequest(ngx_http_request_t *sr,
62
- ngx_uint_t method, int forward_body,
63
- ngx_http_request_body_t *body, unsigned vars_action,
64
- ngx_array_t *extra_vars);
65
- static int ngx_http_lua_ngx_location_capture(lua_State *L);
66
- static int ngx_http_lua_ngx_location_capture_multi(lua_State *L);
67
- static void ngx_http_lua_process_vars_option(ngx_http_request_t *r,
68
- lua_State *L, int table, ngx_array_t **varsp);
69
- static ngx_int_t ngx_http_lua_subrequest_add_extra_vars(ngx_http_request_t *r,
70
- ngx_array_t *extra_vars);
71
- static ngx_int_t ngx_http_lua_subrequest(ngx_http_request_t *r,
72
- ngx_str_t *uri, ngx_str_t *args, ngx_http_request_t **psr,
73
- ngx_http_post_subrequest_t *ps, ngx_uint_t flags);
74
- static ngx_int_t ngx_http_lua_subrequest_resume(ngx_http_request_t *r);
75
- static void ngx_http_lua_handle_subreq_responses(ngx_http_request_t *r,
76
- ngx_http_lua_ctx_t *ctx);
77
- static void ngx_http_lua_cancel_subreq(ngx_http_request_t *r);
78
- static ngx_int_t ngx_http_post_request_to_head(ngx_http_request_t *r);
79
- static ngx_int_t ngx_http_lua_copy_in_file_request_body(ngx_http_request_t *r);
80
- static ngx_int_t ngx_http_lua_copy_request_headers(ngx_http_request_t *sr,
81
- ngx_http_request_t *r);
82
-
83
-
84
- /* ngx.location.capture is just a thin wrapper around
85
- * ngx.location.capture_multi */
86
- static int
87
- ngx_http_lua_ngx_location_capture(lua_State *L)
88
- {
89
- int n;
90
-
91
- n = lua_gettop(L);
92
-
93
- if (n != 1 && n != 2) {
94
- return luaL_error(L, "expecting one or two arguments");
95
- }
96
-
97
- lua_createtable(L, n, 0); /* uri opts? table */
98
- lua_insert(L, 1); /* table uri opts? */
99
- if (n == 1) { /* table uri */
100
- lua_rawseti(L, 1, 1); /* table */
101
-
102
- } else { /* table uri opts */
103
- lua_rawseti(L, 1, 2); /* table uri */
104
- lua_rawseti(L, 1, 1); /* table */
105
- }
106
-
107
- lua_createtable(L, 1, 0); /* table table' */
108
- lua_insert(L, 1); /* table' table */
109
- lua_rawseti(L, 1, 1); /* table' */
110
-
111
- return ngx_http_lua_ngx_location_capture_multi(L);
112
- }
113
-
114
-
115
- static int
116
- ngx_http_lua_ngx_location_capture_multi(lua_State *L)
117
- {
118
- ngx_http_request_t *r;
119
- ngx_http_request_t *sr; /* subrequest object */
120
- ngx_http_post_subrequest_t *psr;
121
- ngx_http_lua_ctx_t *sr_ctx;
122
- ngx_http_lua_ctx_t *ctx;
123
- ngx_array_t *extra_vars;
124
- ngx_str_t uri;
125
- ngx_str_t args;
126
- ngx_str_t extra_args;
127
- ngx_uint_t flags;
128
- u_char *p;
129
- u_char *q;
130
- size_t len;
131
- size_t nargs;
132
- int rc;
133
- int n;
134
- int always_forward_body = 0;
135
- ngx_uint_t method;
136
- ngx_http_request_body_t *body;
137
- int type;
138
- ngx_buf_t *b;
139
- unsigned vars_action;
140
- ngx_uint_t nsubreqs;
141
- ngx_uint_t index;
142
- size_t sr_statuses_len;
143
- size_t sr_headers_len;
144
- size_t sr_bodies_len;
145
- size_t sr_flags_len;
146
- unsigned custom_ctx;
147
- ngx_http_lua_co_ctx_t *coctx;
148
-
149
- ngx_http_lua_post_subrequest_data_t *psr_data;
150
-
151
- n = lua_gettop(L);
152
- if (n != 1) {
153
- return luaL_error(L, "only one argument is expected, but got %d", n);
154
- }
155
-
156
- luaL_checktype(L, 1, LUA_TTABLE);
157
-
158
- nsubreqs = lua_objlen(L, 1);
159
- if (nsubreqs == 0) {
160
- return luaL_error(L, "at least one subrequest should be specified");
161
- }
162
-
163
- r = ngx_http_lua_get_req(L);
164
- if (r == NULL) {
165
- return luaL_error(L, "no request object found");
166
- }
167
-
168
- ctx = ngx_http_get_module_ctx(r, ngx_http_lua_module);
169
- if (ctx == NULL) {
170
- return luaL_error(L, "no ctx found");
171
- }
172
-
173
- ngx_http_lua_check_context(L, ctx, NGX_HTTP_LUA_CONTEXT_REWRITE
174
- | NGX_HTTP_LUA_CONTEXT_ACCESS
175
- | NGX_HTTP_LUA_CONTEXT_CONTENT);
176
-
177
- coctx = ctx->cur_co_ctx;
178
- if (coctx == NULL) {
179
- return luaL_error(L, "no co ctx found");
180
- }
181
-
182
- ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
183
- "lua location capture, uri:\"%V\" c:%ud", &r->uri,
184
- r->main->count);
185
-
186
- sr_statuses_len = nsubreqs * sizeof(ngx_int_t);
187
- sr_headers_len = nsubreqs * sizeof(ngx_http_headers_out_t *);
188
- sr_bodies_len = nsubreqs * sizeof(ngx_str_t);
189
- sr_flags_len = nsubreqs * sizeof(uint8_t);
190
-
191
- p = ngx_pcalloc(r->pool, sr_statuses_len + sr_headers_len +
192
- sr_bodies_len + sr_flags_len);
193
-
194
- if (p == NULL) {
195
- return luaL_error(L, "no memory");
196
- }
197
-
198
- coctx->sr_statuses = (void *) p;
199
- p += sr_statuses_len;
200
-
201
- coctx->sr_headers = (void *) p;
202
- p += sr_headers_len;
203
-
204
- coctx->sr_bodies = (void *) p;
205
- p += sr_bodies_len;
206
-
207
- coctx->sr_flags = (void *) p;
208
-
209
- coctx->nsubreqs = nsubreqs;
210
-
211
- coctx->pending_subreqs = 0;
212
-
213
- extra_vars = NULL;
214
-
215
- for (index = 0; index < nsubreqs; index++) {
216
- coctx->pending_subreqs++;
217
-
218
- lua_rawgeti(L, 1, index + 1);
219
- if (lua_isnil(L, -1)) {
220
- return luaL_error(L, "only array-like tables are allowed");
221
- }
222
-
223
- dd("queries query: top %d", lua_gettop(L));
224
-
225
- if (lua_type(L, -1) != LUA_TTABLE) {
226
- return luaL_error(L, "the query argument %d is not a table, "
227
- "but a %s",
228
- index, lua_typename(L, lua_type(L, -1)));
229
- }
230
-
231
- nargs = lua_objlen(L, -1);
232
-
233
- if (nargs != 1 && nargs != 2) {
234
- return luaL_error(L, "query argument %d expecting one or "
235
- "two arguments", index);
236
- }
237
-
238
- lua_rawgeti(L, 2, 1); /* queries query uri */
239
-
240
- dd("queries query uri: %d", lua_gettop(L));
241
-
242
- dd("first arg in first query: %s", lua_typename(L, lua_type(L, -1)));
243
-
244
- body = NULL;
245
-
246
- ngx_str_null(&extra_args);
247
-
248
- if (extra_vars != NULL) {
249
- /* flush out existing elements in the array */
250
- extra_vars->nelts = 0;
251
- }
252
-
253
- vars_action = 0;
254
-
255
- custom_ctx = 0;
256
-
257
- if (nargs == 2) {
258
- /* check out the options table */
259
-
260
- lua_rawgeti(L, 2, 2); /* queries query uri opts */
261
-
262
- dd("queries query uri opts: %d", lua_gettop(L));
263
-
264
- if (lua_type(L, 4) != LUA_TTABLE) {
265
- return luaL_error(L, "expecting table as the 2nd argument for "
266
- "subrequest %d, but got %s", index,
267
- luaL_typename(L, 4));
268
- }
269
-
270
- dd("queries query uri opts: %d", lua_gettop(L));
271
-
272
- /* check the args option */
273
-
274
- lua_getfield(L, 4, "args");
275
-
276
- type = lua_type(L, -1);
277
-
278
- switch (type) {
279
- case LUA_TTABLE:
280
- ngx_http_lua_process_args_option(r, L, -1, &extra_args);
281
- break;
282
-
283
- case LUA_TNIL:
284
- /* do nothing */
285
- break;
286
-
287
- case LUA_TNUMBER:
288
- case LUA_TSTRING:
289
- extra_args.data = (u_char *) lua_tolstring(L, -1, &len);
290
- extra_args.len = len;
291
-
292
- break;
293
-
294
- default:
295
- return luaL_error(L, "Bad args option value");
296
- }
297
-
298
- lua_pop(L, 1);
299
-
300
- dd("queries query uri opts: %d", lua_gettop(L));
301
-
302
- /* check the vars option */
303
-
304
- lua_getfield(L, 4, "vars");
305
-
306
- switch (lua_type(L, -1)) {
307
- case LUA_TTABLE:
308
- ngx_http_lua_process_vars_option(r, L, -1, &extra_vars);
309
-
310
- dd("post process vars top: %d", lua_gettop(L));
311
- break;
312
-
313
- case LUA_TNIL:
314
- /* do nothing */
315
- break;
316
-
317
- default:
318
- return luaL_error(L, "Bad vars option value");
319
- }
320
-
321
- lua_pop(L, 1);
322
-
323
- dd("queries query uri opts: %d", lua_gettop(L));
324
-
325
- /* check the share_all_vars option */
326
-
327
- lua_getfield(L, 4, "share_all_vars");
328
-
329
- switch (lua_type(L, -1)) {
330
- case LUA_TNIL:
331
- /* do nothing */
332
- break;
333
-
334
- case LUA_TBOOLEAN:
335
- if (lua_toboolean(L, -1)) {
336
- vars_action |= NGX_HTTP_LUA_SHARE_ALL_VARS;
337
- }
338
- break;
339
-
340
- default:
341
- return luaL_error(L, "Bad share_all_vars option value");
342
- }
343
-
344
- lua_pop(L, 1);
345
-
346
- dd("queries query uri opts: %d", lua_gettop(L));
347
-
348
- /* check the copy_all_vars option */
349
-
350
- lua_getfield(L, 4, "copy_all_vars");
351
-
352
- switch (lua_type(L, -1)) {
353
- case LUA_TNIL:
354
- /* do nothing */
355
- break;
356
-
357
- case LUA_TBOOLEAN:
358
- if (lua_toboolean(L, -1)) {
359
- vars_action |= NGX_HTTP_LUA_COPY_ALL_VARS;
360
- }
361
- break;
362
-
363
- default:
364
- return luaL_error(L, "Bad copy_all_vars option value");
365
- }
366
-
367
- lua_pop(L, 1);
368
-
369
- dd("queries query uri opts: %d", lua_gettop(L));
370
-
371
- /* check the "forward_body" option */
372
-
373
- lua_getfield(L, 4, "always_forward_body");
374
- always_forward_body = lua_toboolean(L, -1);
375
- lua_pop(L, 1);
376
-
377
- dd("always foward body: %d", always_forward_body);
378
-
379
- /* check the "method" option */
380
-
381
- lua_getfield(L, 4, "method");
382
-
383
- type = lua_type(L, -1);
384
-
385
- if (type == LUA_TNIL) {
386
- method = NGX_HTTP_GET;
387
-
388
- } else {
389
- if (type != LUA_TNUMBER) {
390
- return luaL_error(L, "Bad http request method");
391
- }
392
-
393
- method = (ngx_uint_t) lua_tonumber(L, -1);
394
- }
395
-
396
- lua_pop(L, 1);
397
-
398
- dd("queries query uri opts: %d", lua_gettop(L));
399
-
400
- /* check the "ctx" option */
401
-
402
- lua_getfield(L, 4, "ctx");
403
-
404
- type = lua_type(L, -1);
405
-
406
- if (type != LUA_TNIL) {
407
- if (type != LUA_TTABLE) {
408
- return luaL_error(L, "Bad ctx option value type %s, "
409
- "expected a Lua table",
410
- lua_typename(L, type));
411
- }
412
-
413
- custom_ctx = 1;
414
-
415
- } else {
416
- lua_pop(L, 1);
417
- }
418
-
419
- dd("queries query uri opts ctx?: %d", lua_gettop(L));
420
-
421
- /* check the "body" option */
422
-
423
- lua_getfield(L, 4, "body");
424
-
425
- type = lua_type(L, -1);
426
-
427
- if (type != LUA_TNIL) {
428
- if (type != LUA_TSTRING && type != LUA_TNUMBER) {
429
- return luaL_error(L, "Bad http request body");
430
- }
431
-
432
- body = ngx_pcalloc(r->pool, sizeof(ngx_http_request_body_t));
433
-
434
- if (body == NULL) {
435
- return luaL_error(L, "no memory");
436
- }
437
-
438
- q = (u_char *) lua_tolstring(L, -1, &len);
439
-
440
- dd("request body: [%.*s]", (int) len, q);
441
-
442
- if (len) {
443
- b = ngx_create_temp_buf(r->pool, len);
444
- if (b == NULL) {
445
- return luaL_error(L, "no memory");
446
- }
447
-
448
- b->last = ngx_copy(b->last, q, len);
449
-
450
- body->bufs = ngx_alloc_chain_link(r->pool);
451
- if (body->bufs == NULL) {
452
- return luaL_error(L, "no memory");
453
- }
454
-
455
- body->bufs->buf = b;
456
- body->bufs->next = NULL;
457
-
458
- body->buf = b;
459
- }
460
- }
461
-
462
- lua_pop(L, 1); /* pop the body */
463
-
464
- /* stack: queries query uri opts ctx? */
465
-
466
- lua_remove(L, 4);
467
-
468
- /* stack: queries query uri ctx? */
469
-
470
- dd("queries query uri ctx?: %d", lua_gettop(L));
471
-
472
- } else {
473
- method = NGX_HTTP_GET;
474
- }
475
-
476
- /* stack: queries query uri ctx? */
477
-
478
- p = (u_char *) luaL_checklstring(L, 3, &len);
479
-
480
- uri.data = ngx_palloc(r->pool, len);
481
- if (uri.data == NULL) {
482
- return luaL_error(L, "memory allocation error");
483
- }
484
-
485
- ngx_memcpy(uri.data, p, len);
486
-
487
- uri.len = len;
488
-
489
- ngx_str_null(&args);
490
-
491
- flags = 0;
492
-
493
- rc = ngx_http_parse_unsafe_uri(r, &uri, &args, &flags);
494
- if (rc != NGX_OK) {
495
- dd("rc = %d", (int) rc);
496
-
497
- return luaL_error(L, "unsafe uri in argument #1: %s", p);
498
- }
499
-
500
- if (args.len == 0) {
501
- if (extra_args.len) {
502
- p = ngx_palloc(r->pool, extra_args.len);
503
- if (p == NULL) {
504
- return luaL_error(L, "no memory");
505
- }
506
-
507
- ngx_memcpy(p, extra_args.data, extra_args.len);
508
-
509
- args.data = p;
510
- args.len = extra_args.len;
511
- }
512
-
513
- } else if (extra_args.len) {
514
- /* concatenate the two parts of args together */
515
- len = args.len + (sizeof("&") - 1) + extra_args.len;
516
-
517
- p = ngx_palloc(r->pool, len);
518
- if (p == NULL) {
519
- return luaL_error(L, "no memory");
520
- }
521
-
522
- q = ngx_copy(p, args.data, args.len);
523
- *q++ = '&';
524
- ngx_memcpy(q, extra_args.data, extra_args.len);
525
-
526
- args.data = p;
527
- args.len = len;
528
- }
529
-
530
- p = ngx_pnalloc(r->pool, sizeof(ngx_http_post_subrequest_t)
531
- + sizeof(ngx_http_lua_ctx_t)
532
- + sizeof(ngx_http_lua_post_subrequest_data_t));
533
- if (p == NULL) {
534
- return luaL_error(L, "no memory");
535
- }
536
-
537
- psr = (ngx_http_post_subrequest_t *) p;
538
-
539
- p += sizeof(ngx_http_post_subrequest_t);
540
-
541
- sr_ctx = (ngx_http_lua_ctx_t *) p;
542
-
543
- p += sizeof(ngx_http_lua_ctx_t);
544
-
545
- psr_data = (ngx_http_lua_post_subrequest_data_t *) p;
546
-
547
- ngx_memzero(sr_ctx, sizeof(ngx_http_lua_ctx_t));
548
-
549
- /* set by ngx_memzero:
550
- * sr_ctx->run_post_subrequest = 0
551
- * sr_ctx->free = NULL
552
- * sr_ctx->body = NULL
553
- */
554
-
555
- psr_data->ctx = sr_ctx;
556
- psr_data->pr_co_ctx = coctx;
557
-
558
- psr->handler = ngx_http_lua_post_subrequest;
559
- psr->data = psr_data;
560
-
561
- rc = ngx_http_lua_subrequest(r, &uri, &args, &sr, psr, 0);
562
-
563
- if (rc != NGX_OK) {
564
- return luaL_error(L, "failed to issue subrequest: %d", (int) rc);
565
- }
566
-
567
- ngx_http_lua_init_ctx(sr, sr_ctx);
568
-
569
- sr_ctx->capture = 1;
570
- sr_ctx->index = index;
571
- sr_ctx->last_body = &sr_ctx->body;
572
- sr_ctx->vm_state = ctx->vm_state;
573
-
574
- ngx_http_set_ctx(sr, sr_ctx, ngx_http_lua_module);
575
-
576
- rc = ngx_http_lua_adjust_subrequest(sr, method, always_forward_body,
577
- body, vars_action, extra_vars);
578
-
579
- if (rc != NGX_OK) {
580
- ngx_http_lua_cancel_subreq(sr);
581
- return luaL_error(L, "failed to adjust the subrequest: %d",
582
- (int) rc);
583
- }
584
-
585
- dd("queries query uri opts ctx? %d", lua_gettop(L));
586
-
587
- /* stack: queries query uri ctx? */
588
-
589
- if (custom_ctx) {
590
- ngx_http_lua_ngx_set_ctx_helper(L, sr, sr_ctx, -1);
591
- lua_pop(L, 3);
592
-
593
- } else {
594
- lua_pop(L, 2);
595
- }
596
-
597
- /* stack: queries */
598
- }
599
-
600
- if (extra_vars) {
601
- ngx_array_destroy(extra_vars);
602
- }
603
-
604
- ctx->no_abort = 1;
605
-
606
- return lua_yield(L, 0);
607
- }
608
-
609
-
610
- static ngx_int_t
611
- ngx_http_lua_adjust_subrequest(ngx_http_request_t *sr, ngx_uint_t method,
612
- int always_forward_body, ngx_http_request_body_t *body,
613
- unsigned vars_action, ngx_array_t *extra_vars)
614
- {
615
- ngx_http_request_t *r;
616
- ngx_int_t rc;
617
- ngx_http_core_main_conf_t *cmcf;
618
- size_t size;
619
-
620
- r = sr->parent;
621
-
622
- sr->header_in = r->header_in;
623
-
624
- if (body) {
625
- sr->request_body = body;
626
-
627
- rc = ngx_http_lua_set_content_length_header(sr,
628
- body->buf
629
- ? ngx_buf_size(body->buf)
630
- : 0);
631
-
632
- if (rc != NGX_OK) {
633
- return NGX_ERROR;
634
- }
635
-
636
- } else if (!always_forward_body
637
- && method != NGX_HTTP_PUT
638
- && method != NGX_HTTP_POST
639
- && r->headers_in.content_length_n > 0)
640
- {
641
- rc = ngx_http_lua_set_content_length_header(sr, 0);
642
- if (rc != NGX_OK) {
643
- return NGX_ERROR;
644
- }
645
-
646
- #if 1
647
- sr->request_body = NULL;
648
- #endif
649
-
650
- } else {
651
- if (ngx_http_lua_copy_request_headers(sr, r) != NGX_OK) {
652
- return NGX_ERROR;
653
- }
654
-
655
- if (sr->request_body) {
656
-
657
- /* deep-copy the request body */
658
-
659
- if (sr->request_body->temp_file) {
660
- if (ngx_http_lua_copy_in_file_request_body(sr) != NGX_OK) {
661
- return NGX_ERROR;
662
- }
663
- }
664
- }
665
- }
666
-
667
- sr->method = method;
668
-
669
- switch (method) {
670
- case NGX_HTTP_GET:
671
- sr->method_name = ngx_http_lua_get_method;
672
- break;
673
-
674
- case NGX_HTTP_POST:
675
- sr->method_name = ngx_http_lua_post_method;
676
- break;
677
-
678
- case NGX_HTTP_PUT:
679
- sr->method_name = ngx_http_lua_put_method;
680
- break;
681
-
682
- case NGX_HTTP_HEAD:
683
- sr->method_name = ngx_http_lua_head_method;
684
- break;
685
-
686
- case NGX_HTTP_DELETE:
687
- sr->method_name = ngx_http_lua_delete_method;
688
- break;
689
-
690
- case NGX_HTTP_OPTIONS:
691
- sr->method_name = ngx_http_lua_options_method;
692
- break;
693
-
694
- case NGX_HTTP_MKCOL:
695
- sr->method_name = ngx_http_lua_mkcol_method;
696
- break;
697
-
698
- case NGX_HTTP_COPY:
699
- sr->method_name = ngx_http_lua_copy_method;
700
- break;
701
-
702
- case NGX_HTTP_MOVE:
703
- sr->method_name = ngx_http_lua_move_method;
704
- break;
705
-
706
- case NGX_HTTP_PROPFIND:
707
- sr->method_name = ngx_http_lua_propfind_method;
708
- break;
709
-
710
- case NGX_HTTP_PROPPATCH:
711
- sr->method_name = ngx_http_lua_proppatch_method;
712
- break;
713
-
714
- case NGX_HTTP_LOCK:
715
- sr->method_name = ngx_http_lua_lock_method;
716
- break;
717
-
718
- case NGX_HTTP_UNLOCK:
719
- sr->method_name = ngx_http_lua_unlock_method;
720
- break;
721
-
722
- case NGX_HTTP_PATCH:
723
- sr->method_name = ngx_http_lua_patch_method;
724
- break;
725
-
726
- case NGX_HTTP_TRACE:
727
- sr->method_name = ngx_http_lua_trace_method;
728
- break;
729
-
730
- default:
731
- ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
732
- "unsupported HTTP method: %u", (unsigned) method);
733
-
734
- return NGX_ERROR;
735
- }
736
-
737
- if (!(vars_action & NGX_HTTP_LUA_SHARE_ALL_VARS)) {
738
- /* we do not inherit the parent request's variables */
739
- cmcf = ngx_http_get_module_main_conf(sr, ngx_http_core_module);
740
-
741
- size = cmcf->variables.nelts * sizeof(ngx_http_variable_value_t);
742
-
743
- if (vars_action & NGX_HTTP_LUA_COPY_ALL_VARS) {
744
-
745
- sr->variables = ngx_palloc(sr->pool, size);
746
- if (sr->variables == NULL) {
747
- return NGX_ERROR;
748
- }
749
-
750
- ngx_memcpy(sr->variables, r->variables, size);
751
-
752
- } else {
753
-
754
- /* we do not inherit the parent request's variables */
755
-
756
- sr->variables = ngx_pcalloc(sr->pool, size);
757
- if (sr->variables == NULL) {
758
- return NGX_ERROR;
759
- }
760
- }
761
- }
762
-
763
- return ngx_http_lua_subrequest_add_extra_vars(sr, extra_vars);
764
- }
765
-
766
-
767
- static ngx_int_t
768
- ngx_http_lua_subrequest_add_extra_vars(ngx_http_request_t *sr,
769
- ngx_array_t *extra_vars)
770
- {
771
- ngx_http_core_main_conf_t *cmcf;
772
- ngx_http_variable_t *v;
773
- ngx_http_variable_value_t *vv;
774
- u_char *val;
775
- u_char *p;
776
- ngx_uint_t i, hash;
777
- ngx_str_t name;
778
- size_t len;
779
- ngx_hash_t *variables_hash;
780
- ngx_keyval_t *var;
781
-
782
- /* set any extra variables that were passed to the subrequest */
783
-
784
- if (extra_vars == NULL || extra_vars->nelts == 0) {
785
- return NGX_OK;
786
- }
787
-
788
- cmcf = ngx_http_get_module_main_conf(sr, ngx_http_core_module);
789
-
790
- variables_hash = &cmcf->variables_hash;
791
-
792
- var = extra_vars->elts;
793
-
794
- for (i = 0; i < extra_vars->nelts; i++, var++) {
795
- /* copy the variable's name and value because they are allocated
796
- * by the lua VM */
797
-
798
- len = var->key.len + var->value.len;
799
-
800
- p = ngx_pnalloc(sr->pool, len);
801
- if (p == NULL) {
802
- return NGX_ERROR;
803
- }
804
-
805
- name.data = p;
806
- name.len = var->key.len;
807
-
808
- p = ngx_copy(p, var->key.data, var->key.len);
809
-
810
- hash = ngx_hash_strlow(name.data, name.data, name.len);
811
-
812
- val = p;
813
- len = var->value.len;
814
-
815
- ngx_memcpy(p, var->value.data, len);
816
-
817
- v = ngx_hash_find(variables_hash, hash, name.data, name.len);
818
-
819
- if (v) {
820
- if (!(v->flags & NGX_HTTP_VAR_CHANGEABLE)) {
821
- ngx_log_error(NGX_LOG_ERR, sr->connection->log, 0,
822
- "variable \"%V\" not changeable", &name);
823
- return NGX_HTTP_INTERNAL_SERVER_ERROR;
824
- }
825
-
826
- if (v->set_handler) {
827
- vv = ngx_palloc(sr->pool, sizeof(ngx_http_variable_value_t));
828
- if (vv == NULL) {
829
- return NGX_ERROR;
830
- }
831
-
832
- vv->valid = 1;
833
- vv->not_found = 0;
834
- vv->no_cacheable = 0;
835
-
836
- vv->data = val;
837
- vv->len = len;
838
-
839
- v->set_handler(sr, vv, v->data);
840
-
841
- ngx_log_debug2(NGX_LOG_DEBUG_HTTP, sr->connection->log, 0,
842
- "variable \"%V\" set to value \"%v\"", &name,
843
- vv);
844
-
845
- continue;
846
- }
847
-
848
- if (v->flags & NGX_HTTP_VAR_INDEXED) {
849
- vv = &sr->variables[v->index];
850
-
851
- vv->valid = 1;
852
- vv->not_found = 0;
853
- vv->no_cacheable = 0;
854
-
855
- vv->data = val;
856
- vv->len = len;
857
-
858
- ngx_log_debug2(NGX_LOG_DEBUG_HTTP, sr->connection->log, 0,
859
- "variable \"%V\" set to value \"%v\"",
860
- &name, vv);
861
-
862
- continue;
863
- }
864
- }
865
-
866
- ngx_log_error(NGX_LOG_ERR, sr->connection->log, 0,
867
- "variable \"%V\" cannot be assigned a value (maybe you "
868
- "forgot to define it first?) ", &name);
869
-
870
- return NGX_ERROR;
871
- }
872
-
873
- return NGX_OK;
874
- }
875
-
876
-
877
- static void
878
- ngx_http_lua_process_vars_option(ngx_http_request_t *r, lua_State *L,
879
- int table, ngx_array_t **varsp)
880
- {
881
- ngx_array_t *vars;
882
- ngx_keyval_t *var;
883
-
884
- if (table < 0) {
885
- table = lua_gettop(L) + table + 1;
886
- }
887
-
888
- vars = *varsp;
889
-
890
- if (vars == NULL) {
891
-
892
- vars = ngx_array_create(r->pool, 4, sizeof(ngx_keyval_t));
893
- if (vars == NULL) {
894
- dd("here");
895
- luaL_error(L, "no memory");
896
- return;
897
- }
898
-
899
- *varsp = vars;
900
- }
901
-
902
- lua_pushnil(L);
903
- while (lua_next(L, table) != 0) {
904
-
905
- if (lua_type(L, -2) != LUA_TSTRING) {
906
- luaL_error(L, "attempt to use a non-string key in the "
907
- "\"vars\" option table");
908
- return;
909
- }
910
-
911
- if (!lua_isstring(L, -1)) {
912
- luaL_error(L, "attempt to use bad variable value type %s",
913
- luaL_typename(L, -1));
914
- return;
915
- }
916
-
917
- var = ngx_array_push(vars);
918
- if (var == NULL) {
919
- dd("here");
920
- luaL_error(L, "no memory");
921
- return;
922
- }
923
-
924
- var->key.data = (u_char *) lua_tolstring(L, -2, &var->key.len);
925
- var->value.data = (u_char *) lua_tolstring(L, -1, &var->value.len);
926
-
927
- lua_pop(L, 1);
928
- }
929
- }
930
-
931
-
932
- ngx_int_t
933
- ngx_http_lua_post_subrequest(ngx_http_request_t *r, void *data, ngx_int_t rc)
934
- {
935
- ngx_http_request_t *pr;
936
- ngx_http_lua_ctx_t *pr_ctx;
937
- ngx_http_lua_ctx_t *ctx; /* subrequest ctx */
938
- ngx_http_lua_co_ctx_t *pr_coctx;
939
- size_t len;
940
- ngx_str_t *body_str;
941
- u_char *p;
942
- ngx_chain_t *cl;
943
-
944
- ngx_http_lua_post_subrequest_data_t *psr_data = data;
945
-
946
- ctx = psr_data->ctx;
947
-
948
- if (ctx->run_post_subrequest) {
949
- if (r != r->connection->data) {
950
- r->connection->data = r;
951
- }
952
-
953
- return NGX_OK;
954
- }
955
-
956
- ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
957
- "lua run post subrequest handler, rc:%i c:%ud", rc,
958
- r->main->count);
959
-
960
- ctx->run_post_subrequest = 1;
961
-
962
- pr = r->parent;
963
-
964
- pr_ctx = ngx_http_get_module_ctx(pr, ngx_http_lua_module);
965
- if (pr_ctx == NULL) {
966
- return NGX_ERROR;
967
- }
968
-
969
- pr_coctx = psr_data->pr_co_ctx;
970
- pr_coctx->pending_subreqs--;
971
-
972
- if (pr_coctx->pending_subreqs == 0) {
973
- dd("all subrequests are done");
974
-
975
- pr_ctx->no_abort = 0;
976
- pr_ctx->resume_handler = ngx_http_lua_subrequest_resume;
977
- pr_ctx->cur_co_ctx = pr_coctx;
978
- }
979
-
980
- if (pr_ctx->entered_content_phase) {
981
- ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
982
- "lua restoring write event handler");
983
-
984
- pr->write_event_handler = ngx_http_lua_content_wev_handler;
985
-
986
- } else {
987
- pr->write_event_handler = ngx_http_core_run_phases;
988
- }
989
-
990
- dd("status rc = %d", (int) rc);
991
- dd("status headers_out.status = %d", (int) r->headers_out.status);
992
- dd("uri: %.*s", (int) r->uri.len, r->uri.data);
993
-
994
- /* capture subrequest response status */
995
-
996
- pr_coctx->sr_statuses[ctx->index] = r->headers_out.status;
997
-
998
- if (pr_coctx->sr_statuses[ctx->index] == 0) {
999
- if (rc == NGX_OK) {
1000
- rc = NGX_HTTP_OK;
1001
- }
1002
-
1003
- if (rc == NGX_ERROR) {
1004
- rc = NGX_HTTP_INTERNAL_SERVER_ERROR;
1005
- }
1006
-
1007
- if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
1008
- pr_coctx->sr_statuses[ctx->index] = rc;
1009
- }
1010
- }
1011
-
1012
- if (!ctx->seen_last_for_subreq) {
1013
- pr_coctx->sr_flags[ctx->index] |= NGX_HTTP_LUA_SUBREQ_TRUNCATED;
1014
- }
1015
-
1016
- dd("pr_coctx status: %d", (int) pr_coctx->sr_statuses[ctx->index]);
1017
-
1018
- /* copy subrequest response headers */
1019
-
1020
- pr_coctx->sr_headers[ctx->index] = &r->headers_out;
1021
-
1022
- /* copy subrequest response body */
1023
-
1024
- body_str = &pr_coctx->sr_bodies[ctx->index];
1025
-
1026
- len = 0;
1027
- for (cl = ctx->body; cl; cl = cl->next) {
1028
- /* ignore all non-memory buffers */
1029
- len += cl->buf->last - cl->buf->pos;
1030
- }
1031
-
1032
- body_str->len = len;
1033
-
1034
- if (len == 0) {
1035
- body_str->data = NULL;
1036
-
1037
- } else {
1038
- p = ngx_palloc(r->pool, len);
1039
- if (p == NULL) {
1040
- return NGX_ERROR;
1041
- }
1042
-
1043
- body_str->data = p;
1044
-
1045
- /* copy from and then free the data buffers */
1046
-
1047
- for (cl = ctx->body; cl; cl = cl->next) {
1048
- p = ngx_copy(p, cl->buf->pos, cl->buf->last - cl->buf->pos);
1049
-
1050
- cl->buf->last = cl->buf->pos;
1051
-
1052
- #if 0
1053
- dd("free body chain link buf ASAP");
1054
- ngx_pfree(r->pool, cl->buf->start);
1055
- #endif
1056
- }
1057
- }
1058
-
1059
- if (ctx->body) {
1060
-
1061
- #if defined(nginx_version) && nginx_version >= 1001004
1062
- ngx_chain_update_chains(r->pool,
1063
- #else
1064
- ngx_chain_update_chains(
1065
- #endif
1066
- &pr_ctx->free_bufs, &pr_ctx->busy_bufs,
1067
- &ctx->body,
1068
- (ngx_buf_tag_t) &ngx_http_lua_module);
1069
-
1070
- dd("free bufs: %p", pr_ctx->free_bufs);
1071
- }
1072
-
1073
- ngx_http_post_request_to_head(pr);
1074
-
1075
- if (r != r->connection->data) {
1076
- r->connection->data = r;
1077
- }
1078
-
1079
- if (rc == NGX_ERROR
1080
- || rc == NGX_HTTP_CREATED
1081
- || rc == NGX_HTTP_NO_CONTENT
1082
- || (rc >= NGX_HTTP_SPECIAL_RESPONSE
1083
- && rc != NGX_HTTP_CLOSE
1084
- && rc != NGX_HTTP_REQUEST_TIME_OUT
1085
- && rc != NGX_HTTP_CLIENT_CLOSED_REQUEST))
1086
- {
1087
- /* emulate ngx_http_special_response_handler */
1088
-
1089
- if (rc > NGX_OK) {
1090
- r->err_status = rc;
1091
-
1092
- r->expect_tested = 1;
1093
- r->headers_out.content_type.len = 0;
1094
- r->headers_out.content_length_n = 0;
1095
-
1096
- ngx_http_clear_accept_ranges(r);
1097
- ngx_http_clear_last_modified(r);
1098
-
1099
- rc = ngx_http_lua_send_header_if_needed(r, ctx);
1100
- if (rc == NGX_ERROR) {
1101
- return NGX_ERROR;
1102
- }
1103
- }
1104
-
1105
- return NGX_OK;
1106
- }
1107
-
1108
- return rc;
1109
- }
1110
-
1111
-
1112
- static ngx_int_t
1113
- ngx_http_lua_set_content_length_header(ngx_http_request_t *r, off_t len)
1114
- {
1115
- ngx_table_elt_t *h, *header;
1116
- u_char *p;
1117
- ngx_list_part_t *part;
1118
- ngx_http_request_t *pr;
1119
- ngx_uint_t i;
1120
-
1121
- r->headers_in.content_length_n = len;
1122
-
1123
- if (ngx_list_init(&r->headers_in.headers, r->pool, 20,
1124
- sizeof(ngx_table_elt_t)) != NGX_OK)
1125
- {
1126
- return NGX_ERROR;
1127
- }
1128
-
1129
- h = ngx_list_push(&r->headers_in.headers);
1130
- if (h == NULL) {
1131
- return NGX_ERROR;
1132
- }
1133
-
1134
- h->key = ngx_http_lua_content_length_header_key;
1135
- h->lowcase_key = ngx_pnalloc(r->pool, h->key.len);
1136
- if (h->lowcase_key == NULL) {
1137
- return NGX_ERROR;
1138
- }
1139
-
1140
- ngx_strlow(h->lowcase_key, h->key.data, h->key.len);
1141
-
1142
- r->headers_in.content_length = h;
1143
-
1144
- p = ngx_palloc(r->pool, NGX_OFF_T_LEN);
1145
- if (p == NULL) {
1146
- return NGX_ERROR;
1147
- }
1148
-
1149
- h->value.data = p;
1150
-
1151
- h->value.len = ngx_sprintf(h->value.data, "%O", len) - h->value.data;
1152
-
1153
- h->hash = ngx_http_lua_content_length_hash;
1154
-
1155
- #if 0
1156
- dd("content length hash: %lu == %lu", (unsigned long) h->hash,
1157
- ngx_hash_key_lc((u_char *) "Content-Length",
1158
- sizeof("Content-Length") - 1));
1159
- #endif
1160
-
1161
- dd("r content length: %.*s",
1162
- (int)r->headers_in.content_length->value.len,
1163
- r->headers_in.content_length->value.data);
1164
-
1165
- pr = r->parent;
1166
-
1167
- if (pr == NULL) {
1168
- return NGX_OK;
1169
- }
1170
-
1171
- /* forward the parent request's all other request headers */
1172
-
1173
- part = &pr->headers_in.headers.part;
1174
- header = part->elts;
1175
-
1176
- for (i = 0; /* void */; i++) {
1177
-
1178
- if (i >= part->nelts) {
1179
- if (part->next == NULL) {
1180
- break;
1181
- }
1182
-
1183
- part = part->next;
1184
- header = part->elts;
1185
- i = 0;
1186
- }
1187
-
1188
- if (header[i].key.len == sizeof("Content-Length") - 1
1189
- && ngx_strncasecmp(header[i].key.data, (u_char *) "Content-Length",
1190
- sizeof("Content-Length") - 1) == 0)
1191
- {
1192
- continue;
1193
- }
1194
-
1195
- if (ngx_http_lua_set_input_header(r, header[i].key,
1196
- header[i].value, 0) == NGX_ERROR)
1197
- {
1198
- return NGX_ERROR;
1199
- }
1200
- }
1201
-
1202
- return NGX_OK;
1203
- }
1204
-
1205
-
1206
- static void
1207
- ngx_http_lua_handle_subreq_responses(ngx_http_request_t *r,
1208
- ngx_http_lua_ctx_t *ctx)
1209
- {
1210
- ngx_uint_t i, count;
1211
- ngx_uint_t index;
1212
- lua_State *co;
1213
- ngx_str_t *body_str;
1214
- ngx_table_elt_t *header;
1215
- ngx_list_part_t *part;
1216
- ngx_http_headers_out_t *sr_headers;
1217
- ngx_http_lua_co_ctx_t *coctx;
1218
-
1219
- u_char buf[sizeof("Mon, 28 Sep 1970 06:00:00 GMT") - 1];
1220
-
1221
- ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
1222
- "lua handle subrequest responses");
1223
-
1224
- coctx = ctx->cur_co_ctx;
1225
- co = coctx->co;
1226
-
1227
- for (index = 0; index < coctx->nsubreqs; index++) {
1228
- dd("summary: reqs %d, subquery %d, pending %d, req %.*s",
1229
- (int) coctx->nsubreqs,
1230
- (int) index,
1231
- (int) coctx->pending_subreqs,
1232
- (int) r->uri.len, r->uri.data);
1233
-
1234
- /* {{{ construct ret value */
1235
- lua_createtable(co, 0 /* narr */, 4 /* nrec */);
1236
-
1237
- /* copy captured status */
1238
- lua_pushinteger(co, coctx->sr_statuses[index]);
1239
- lua_setfield(co, -2, "status");
1240
-
1241
- dd("captured subrequest flags: %d", (int) coctx->sr_flags[index]);
1242
-
1243
- /* set truncated flag if truncation happens */
1244
- if (coctx->sr_flags[index] & NGX_HTTP_LUA_SUBREQ_TRUNCATED) {
1245
- lua_pushboolean(co, 1);
1246
- lua_setfield(co, -2, "truncated");
1247
-
1248
- } else {
1249
- lua_pushboolean(co, 0);
1250
- lua_setfield(co, -2, "truncated");
1251
- }
1252
-
1253
- /* copy captured body */
1254
-
1255
- body_str = &coctx->sr_bodies[index];
1256
-
1257
- lua_pushlstring(co, (char *) body_str->data, body_str->len);
1258
- lua_setfield(co, -2, "body");
1259
-
1260
- if (body_str->data) {
1261
- dd("free body buffer ASAP");
1262
- ngx_pfree(r->pool, body_str->data);
1263
- }
1264
-
1265
- /* copy captured headers */
1266
-
1267
- sr_headers = coctx->sr_headers[index];
1268
-
1269
- part = &sr_headers->headers.part;
1270
- count = part->nelts;
1271
- while (part->next) {
1272
- part = part->next;
1273
- count += part->nelts;
1274
- }
1275
-
1276
- lua_createtable(co, 0, count + 5); /* res.header */
1277
-
1278
- dd("saving subrequest response headers");
1279
-
1280
- part = &sr_headers->headers.part;
1281
- header = part->elts;
1282
-
1283
- for (i = 0; /* void */; i++) {
1284
-
1285
- if (i >= part->nelts) {
1286
- if (part->next == NULL) {
1287
- break;
1288
- }
1289
-
1290
- part = part->next;
1291
- header = part->elts;
1292
- i = 0;
1293
- }
1294
-
1295
- dd("checking sr header %.*s", (int) header[i].key.len,
1296
- header[i].key.data);
1297
-
1298
- #if 1
1299
- if (header[i].hash == 0) {
1300
- continue;
1301
- }
1302
- #endif
1303
-
1304
- header[i].hash = 0;
1305
-
1306
- dd("pushing sr header %.*s", (int) header[i].key.len,
1307
- header[i].key.data);
1308
-
1309
- lua_pushlstring(co, (char *) header[i].key.data,
1310
- header[i].key.len); /* header key */
1311
- lua_pushvalue(co, -1); /* stack: table key key */
1312
-
1313
- /* check if header already exists */
1314
- lua_rawget(co, -3); /* stack: table key value */
1315
-
1316
- if (lua_isnil(co, -1)) {
1317
- lua_pop(co, 1); /* stack: table key */
1318
-
1319
- lua_pushlstring(co, (char *) header[i].value.data,
1320
- header[i].value.len);
1321
- /* stack: table key value */
1322
-
1323
- lua_rawset(co, -3); /* stack: table */
1324
-
1325
- } else {
1326
-
1327
- if (!lua_istable(co, -1)) { /* already inserted one value */
1328
- lua_createtable(co, 4, 0);
1329
- /* stack: table key value table */
1330
-
1331
- lua_insert(co, -2); /* stack: table key table value */
1332
- lua_rawseti(co, -2, 1); /* stack: table key table */
1333
-
1334
- lua_pushlstring(co, (char *) header[i].value.data,
1335
- header[i].value.len);
1336
- /* stack: table key table value */
1337
-
1338
- lua_rawseti(co, -2, lua_objlen(co, -2) + 1);
1339
- /* stack: table key table */
1340
-
1341
- lua_rawset(co, -3); /* stack: table */
1342
-
1343
- } else {
1344
- lua_pushlstring(co, (char *) header[i].value.data,
1345
- header[i].value.len);
1346
- /* stack: table key table value */
1347
-
1348
- lua_rawseti(co, -2, lua_objlen(co, -2) + 1);
1349
- /* stack: table key table */
1350
-
1351
- lua_pop(co, 2); /* stack: table */
1352
- }
1353
- }
1354
- }
1355
-
1356
- if (sr_headers->content_type.len) {
1357
- lua_pushliteral(co, "Content-Type"); /* header key */
1358
- lua_pushlstring(co, (char *) sr_headers->content_type.data,
1359
- sr_headers->content_type.len); /* head key value */
1360
- lua_rawset(co, -3); /* head */
1361
- }
1362
-
1363
- if (sr_headers->content_length == NULL
1364
- && sr_headers->content_length_n >= 0)
1365
- {
1366
- lua_pushliteral(co, "Content-Length"); /* header key */
1367
-
1368
- lua_pushnumber(co, (lua_Number) sr_headers->content_length_n);
1369
- /* head key value */
1370
-
1371
- lua_rawset(co, -3); /* head */
1372
- }
1373
-
1374
- /* to work-around an issue in ngx_http_static_module
1375
- * (github issue #41) */
1376
- if (sr_headers->location && sr_headers->location->value.len) {
1377
- lua_pushliteral(co, "Location"); /* header key */
1378
- lua_pushlstring(co, (char *) sr_headers->location->value.data,
1379
- sr_headers->location->value.len);
1380
- /* head key value */
1381
- lua_rawset(co, -3); /* head */
1382
- }
1383
-
1384
- if (sr_headers->last_modified_time != -1) {
1385
- if (sr_headers->status != NGX_HTTP_OK
1386
- && sr_headers->status != NGX_HTTP_PARTIAL_CONTENT
1387
- && sr_headers->status != NGX_HTTP_NOT_MODIFIED
1388
- && sr_headers->status != NGX_HTTP_NO_CONTENT)
1389
- {
1390
- sr_headers->last_modified_time = -1;
1391
- sr_headers->last_modified = NULL;
1392
- }
1393
- }
1394
-
1395
- if (sr_headers->last_modified == NULL
1396
- && sr_headers->last_modified_time != -1)
1397
- {
1398
- (void) ngx_http_time(buf, sr_headers->last_modified_time);
1399
-
1400
- lua_pushliteral(co, "Last-Modified"); /* header key */
1401
- lua_pushlstring(co, (char *) buf, sizeof(buf)); /* head key value */
1402
- lua_rawset(co, -3); /* head */
1403
- }
1404
-
1405
- lua_setfield(co, -2, "header");
1406
-
1407
- /* }}} */
1408
- }
1409
- }
1410
-
1411
-
1412
- void
1413
- ngx_http_lua_inject_subrequest_api(lua_State *L)
1414
- {
1415
- lua_createtable(L, 0 /* narr */, 2 /* nrec */); /* .location */
1416
-
1417
- lua_pushcfunction(L, ngx_http_lua_ngx_location_capture);
1418
- lua_setfield(L, -2, "capture");
1419
-
1420
- lua_pushcfunction(L, ngx_http_lua_ngx_location_capture_multi);
1421
- lua_setfield(L, -2, "capture_multi");
1422
-
1423
- lua_setfield(L, -2, "location");
1424
- }
1425
-
1426
-
1427
- static ngx_int_t
1428
- ngx_http_lua_subrequest(ngx_http_request_t *r,
1429
- ngx_str_t *uri, ngx_str_t *args, ngx_http_request_t **psr,
1430
- ngx_http_post_subrequest_t *ps, ngx_uint_t flags)
1431
- {
1432
- ngx_time_t *tp;
1433
- ngx_connection_t *c;
1434
- ngx_http_request_t *sr;
1435
- ngx_http_core_srv_conf_t *cscf;
1436
-
1437
- r->main->subrequests--;
1438
-
1439
- if (r->main->subrequests == 0) {
1440
- #if defined(NGX_DTRACE) && NGX_DTRACE
1441
- ngx_http_probe_subrequest_cycle(r, uri, args);
1442
- #endif
1443
-
1444
- ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
1445
- "subrequests cycle while processing \"%V\"", uri);
1446
- r->main->subrequests = 1;
1447
- return NGX_ERROR;
1448
- }
1449
-
1450
- sr = ngx_pcalloc(r->pool, sizeof(ngx_http_request_t));
1451
- if (sr == NULL) {
1452
- return NGX_ERROR;
1453
- }
1454
-
1455
- sr->signature = NGX_HTTP_MODULE;
1456
-
1457
- c = r->connection;
1458
- sr->connection = c;
1459
-
1460
- sr->ctx = ngx_pcalloc(r->pool, sizeof(void *) * ngx_http_max_module);
1461
- if (sr->ctx == NULL) {
1462
- return NGX_ERROR;
1463
- }
1464
-
1465
- if (ngx_list_init(&sr->headers_out.headers, r->pool, 20,
1466
- sizeof(ngx_table_elt_t))
1467
- != NGX_OK)
1468
- {
1469
- return NGX_ERROR;
1470
- }
1471
-
1472
- cscf = ngx_http_get_module_srv_conf(r, ngx_http_core_module);
1473
- sr->main_conf = cscf->ctx->main_conf;
1474
- sr->srv_conf = cscf->ctx->srv_conf;
1475
- sr->loc_conf = cscf->ctx->loc_conf;
1476
-
1477
- sr->pool = r->pool;
1478
-
1479
- sr->headers_in.content_length_n = -1;
1480
- sr->headers_in.keep_alive_n = -1;
1481
-
1482
- ngx_http_clear_content_length(sr);
1483
- ngx_http_clear_accept_ranges(sr);
1484
- ngx_http_clear_last_modified(sr);
1485
-
1486
- sr->request_body = r->request_body;
1487
-
1488
- #if (NGX_HTTP_SPDY)
1489
- sr->spdy_stream = r->spdy_stream;
1490
- #endif
1491
-
1492
- #ifdef HAVE_ALLOW_REQUEST_BODY_UPDATING_PATCH
1493
- sr->content_length_n = -1;
1494
- #endif
1495
-
1496
- sr->method = NGX_HTTP_GET;
1497
- sr->http_version = r->http_version;
1498
-
1499
- sr->request_line = r->request_line;
1500
- sr->uri = *uri;
1501
-
1502
- if (args) {
1503
- sr->args = *args;
1504
- }
1505
-
1506
- ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0,
1507
- "http subrequest \"%V?%V\"", uri, &sr->args);
1508
-
1509
- sr->subrequest_in_memory = (flags & NGX_HTTP_SUBREQUEST_IN_MEMORY) != 0;
1510
- sr->waited = (flags & NGX_HTTP_SUBREQUEST_WAITED) != 0;
1511
-
1512
- sr->unparsed_uri = r->unparsed_uri;
1513
- sr->method_name = ngx_http_core_get_method;
1514
- sr->http_protocol = r->http_protocol;
1515
-
1516
- ngx_http_set_exten(sr);
1517
-
1518
- sr->main = r->main;
1519
- sr->parent = r;
1520
- sr->post_subrequest = ps;
1521
- sr->read_event_handler = ngx_http_request_empty_handler;
1522
- sr->write_event_handler = ngx_http_handler;
1523
-
1524
- sr->variables = r->variables;
1525
-
1526
- sr->log_handler = r->log_handler;
1527
-
1528
- sr->internal = 1;
1529
-
1530
- sr->discard_body = r->discard_body;
1531
- sr->expect_tested = 1;
1532
- sr->main_filter_need_in_memory = r->main_filter_need_in_memory;
1533
-
1534
- sr->uri_changes = NGX_HTTP_MAX_URI_CHANGES + 1;
1535
-
1536
- tp = ngx_timeofday();
1537
- sr->start_sec = tp->sec;
1538
- sr->start_msec = tp->msec;
1539
-
1540
- r->main->count++;
1541
-
1542
- *psr = sr;
1543
-
1544
- #if defined(NGX_DTRACE) && NGX_DTRACE
1545
- ngx_http_probe_subrequest_start(sr);
1546
- #endif
1547
-
1548
- return ngx_http_post_request(sr, NULL);
1549
- }
1550
-
1551
-
1552
- static ngx_int_t
1553
- ngx_http_lua_subrequest_resume(ngx_http_request_t *r)
1554
- {
1555
- lua_State *vm;
1556
- ngx_int_t rc;
1557
- ngx_connection_t *c;
1558
- ngx_http_lua_ctx_t *ctx;
1559
- ngx_http_lua_co_ctx_t *coctx;
1560
-
1561
- ctx = ngx_http_get_module_ctx(r, ngx_http_lua_module);
1562
- if (ctx == NULL) {
1563
- return NGX_ERROR;
1564
- }
1565
-
1566
- ctx->resume_handler = ngx_http_lua_wev_handler;
1567
-
1568
- ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
1569
- "lua run subrequests done, resuming lua thread");
1570
-
1571
- coctx = ctx->cur_co_ctx;
1572
-
1573
- dd("nsubreqs: %d", (int) coctx->nsubreqs);
1574
-
1575
- ngx_http_lua_handle_subreq_responses(r, ctx);
1576
-
1577
- dd("free sr_statues/headers/bodies memory ASAP");
1578
-
1579
- #if 1
1580
- ngx_pfree(r->pool, coctx->sr_statuses);
1581
-
1582
- coctx->sr_statuses = NULL;
1583
- coctx->sr_headers = NULL;
1584
- coctx->sr_bodies = NULL;
1585
- coctx->sr_flags = NULL;
1586
- #endif
1587
-
1588
- c = r->connection;
1589
- vm = ngx_http_lua_get_lua_vm(r, ctx);
1590
-
1591
- rc = ngx_http_lua_run_thread(vm, r, ctx, coctx->nsubreqs);
1592
-
1593
- ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
1594
- "lua run thread returned %d", rc);
1595
-
1596
- if (rc == NGX_AGAIN) {
1597
- return ngx_http_lua_run_posted_threads(c, vm, r, ctx);
1598
- }
1599
-
1600
- if (rc == NGX_DONE) {
1601
- ngx_http_lua_finalize_request(r, NGX_DONE);
1602
- return ngx_http_lua_run_posted_threads(c, vm, r, ctx);
1603
- }
1604
-
1605
- /* rc == NGX_ERROR || rc >= NGX_OK */
1606
-
1607
- if (ctx->entered_content_phase) {
1608
- ngx_http_lua_finalize_request(r, rc);
1609
- return NGX_DONE;
1610
- }
1611
-
1612
- return rc;
1613
- }
1614
-
1615
-
1616
- static void
1617
- ngx_http_lua_cancel_subreq(ngx_http_request_t *r)
1618
- {
1619
- ngx_http_posted_request_t *pr;
1620
- ngx_http_posted_request_t **p;
1621
-
1622
- #if 1
1623
- r->main->count--;
1624
- r->main->subrequests++;
1625
- #endif
1626
-
1627
- p = &r->main->posted_requests;
1628
- for (pr = r->main->posted_requests; pr->next; pr = pr->next) {
1629
- p = &pr->next;
1630
- }
1631
-
1632
- *p = NULL;
1633
-
1634
- r->connection->data = r->parent;
1635
- }
1636
-
1637
-
1638
- static ngx_int_t
1639
- ngx_http_post_request_to_head(ngx_http_request_t *r)
1640
- {
1641
- ngx_http_posted_request_t *pr;
1642
-
1643
- pr = ngx_palloc(r->pool, sizeof(ngx_http_posted_request_t));
1644
- if (pr == NULL) {
1645
- return NGX_ERROR;
1646
- }
1647
-
1648
- pr->request = r;
1649
- pr->next = r->main->posted_requests;
1650
- r->main->posted_requests = pr;
1651
-
1652
- return NGX_OK;
1653
- }
1654
-
1655
-
1656
- static ngx_int_t
1657
- ngx_http_lua_copy_in_file_request_body(ngx_http_request_t *r)
1658
- {
1659
- ngx_temp_file_t *tf;
1660
-
1661
- ngx_http_request_body_t *body;
1662
-
1663
- tf = r->request_body->temp_file;
1664
-
1665
- if (!tf->persistent || !tf->clean) {
1666
- ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
1667
- "the request body was not read by ngx_lua");
1668
-
1669
- return NGX_ERROR;
1670
- }
1671
-
1672
- body = ngx_palloc(r->pool, sizeof(ngx_http_request_body_t));
1673
- if (body == NULL) {
1674
- return NGX_ERROR;
1675
- }
1676
-
1677
- ngx_memcpy(body, r->request_body, sizeof(ngx_http_request_body_t));
1678
-
1679
- body->temp_file = ngx_palloc(r->pool, sizeof(ngx_temp_file_t));
1680
- if (body->temp_file == NULL) {
1681
- return NGX_ERROR;
1682
- }
1683
-
1684
- ngx_memcpy(body->temp_file, tf, sizeof(ngx_temp_file_t));
1685
- dd("file fd: %d", body->temp_file->file.fd);
1686
-
1687
- r->request_body = body;
1688
-
1689
- return NGX_OK;
1690
- }
1691
-
1692
-
1693
- static ngx_int_t
1694
- ngx_http_lua_copy_request_headers(ngx_http_request_t *sr, ngx_http_request_t *r)
1695
- {
1696
- ngx_table_elt_t *header;
1697
- ngx_list_part_t *part;
1698
- ngx_uint_t i;
1699
-
1700
- if (ngx_list_init(&sr->headers_in.headers, sr->pool, 20,
1701
- sizeof(ngx_table_elt_t)) != NGX_OK)
1702
- {
1703
- return NGX_ERROR;
1704
- }
1705
-
1706
- dd("before: parent req headers count: %d",
1707
- (int) r->headers_in.headers.part.nelts);
1708
-
1709
- part = &r->headers_in.headers.part;
1710
- header = part->elts;
1711
-
1712
- for (i = 0; /* void */; i++) {
1713
-
1714
- if (i >= part->nelts) {
1715
- if (part->next == NULL) {
1716
- break;
1717
- }
1718
-
1719
- part = part->next;
1720
- header = part->elts;
1721
- i = 0;
1722
- }
1723
-
1724
- dd("setting request header %.*s: %.*s", (int) header[i].key.len,
1725
- header[i].key.data, (int) header[i].value.len,
1726
- header[i].value.data);
1727
-
1728
- if (ngx_http_lua_set_input_header(sr, header[i].key,
1729
- header[i].value, 0) == NGX_ERROR)
1730
- {
1731
- return NGX_ERROR;
1732
- }
1733
- }
1734
-
1735
- dd("after: parent req headers count: %d",
1736
- (int) r->headers_in.headers.part.nelts);
1737
-
1738
- return NGX_OK;
1739
- }
1740
-
1741
- /* vi:set ft=c ts=4 sw=4 et fdm=marker: */