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,86 +0,0 @@
1
-
2
- /*
3
- * Copyright (C) Yichun Zhang (agentzh)
4
- */
5
-
6
-
7
- #ifndef _NGX_HTTP_LUA_SCRIPT_H_INCLUDED_
8
- #define _NGX_HTTP_LUA_SCRIPT_H_INCLUDED_
9
-
10
-
11
- #include "ngx_http_lua_common.h"
12
-
13
-
14
- typedef struct {
15
- ngx_log_t *log;
16
- ngx_pool_t *pool;
17
- ngx_str_t *source;
18
-
19
- ngx_array_t **lengths;
20
- ngx_array_t **values;
21
-
22
- ngx_uint_t variables;
23
-
24
- unsigned complete_lengths:1;
25
- unsigned complete_values:1;
26
- } ngx_http_lua_script_compile_t;
27
-
28
-
29
- typedef struct {
30
- ngx_str_t value;
31
- void *lengths;
32
- void *values;
33
- } ngx_http_lua_complex_value_t;
34
-
35
-
36
- typedef struct {
37
- ngx_log_t *log;
38
- ngx_pool_t *pool;
39
- ngx_str_t *value;
40
- ngx_http_lua_complex_value_t *complex_value;
41
- } ngx_http_lua_compile_complex_value_t;
42
-
43
-
44
- typedef struct {
45
- u_char *ip;
46
- u_char *pos;
47
-
48
- ngx_str_t buf;
49
-
50
- int *captures;
51
- ngx_uint_t ncaptures;
52
- u_char *captures_data;
53
-
54
- unsigned skip:1;
55
-
56
- ngx_log_t *log;
57
- } ngx_http_lua_script_engine_t;
58
-
59
-
60
- typedef void (*ngx_http_lua_script_code_pt) (ngx_http_lua_script_engine_t *e);
61
- typedef size_t (*ngx_http_lua_script_len_code_pt)
62
- (ngx_http_lua_script_engine_t *e);
63
-
64
-
65
- typedef struct {
66
- ngx_http_lua_script_code_pt code;
67
- uintptr_t len;
68
- } ngx_http_lua_script_copy_code_t;
69
-
70
-
71
- typedef struct {
72
- ngx_http_lua_script_code_pt code;
73
- uintptr_t n;
74
- } ngx_http_lua_script_capture_code_t;
75
-
76
-
77
- ngx_int_t ngx_http_lua_compile_complex_value(
78
- ngx_http_lua_compile_complex_value_t *ccv);
79
- ngx_int_t ngx_http_lua_complex_value(ngx_http_request_t *r, ngx_str_t *subj,
80
- size_t offset, ngx_int_t count, int *cap,
81
- ngx_http_lua_complex_value_t *val, luaL_Buffer *luabuf);
82
-
83
-
84
- #endif /* _NGX_HTTP_LUA_SCRIPT_H_INCLUDED_ */
85
-
86
- /* vi:set ft=c ts=4 sw=4 et fdm=marker: */
@@ -1,216 +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_setby.h"
15
- #include "ngx_http_lua_exception.h"
16
- #include "ngx_http_lua_util.h"
17
- #include "ngx_http_lua_pcrefix.h"
18
- #include "ngx_http_lua_time.h"
19
- #include "ngx_http_lua_log.h"
20
- #include "ngx_http_lua_regex.h"
21
- #include "ngx_http_lua_variable.h"
22
- #include "ngx_http_lua_string.h"
23
- #include "ngx_http_lua_misc.h"
24
- #include "ngx_http_lua_consts.h"
25
- #include "ngx_http_lua_shdict.h"
26
- #include "ngx_http_lua_util.h"
27
-
28
-
29
- static void ngx_http_lua_set_by_lua_env(lua_State *L, ngx_http_request_t *r,
30
- size_t nargs, ngx_http_variable_value_t *args);
31
-
32
-
33
- /* keys in Lua thread for fetching args and nargs in set_by_lua* */
34
-
35
- #define ngx_http_lua_nargs_key "__ngx_nargs"
36
-
37
- #define ngx_http_lua_args_key "__ngx_args"
38
-
39
-
40
- ngx_int_t
41
- ngx_http_lua_set_by_chunk(lua_State *L, ngx_http_request_t *r, ngx_str_t *val,
42
- ngx_http_variable_value_t *args, size_t nargs, ngx_str_t *script)
43
- {
44
- size_t i;
45
- ngx_int_t rc;
46
- u_char *err_msg;
47
- size_t len;
48
- u_char *data;
49
- #if (NGX_PCRE)
50
- ngx_pool_t *old_pool;
51
- #endif
52
-
53
- dd("nargs: %d", (int) nargs);
54
-
55
- dd("set Lua VM panic handler");
56
-
57
- lua_atpanic(L, ngx_http_lua_atpanic);
58
-
59
- NGX_LUA_EXCEPTION_TRY {
60
- dd("initialize nginx context in Lua VM, code chunk at "
61
- "stack top sp = 1");
62
- ngx_http_lua_set_by_lua_env(L, r, nargs, args);
63
-
64
- /* passing directive arguments to the user code */
65
- for (i = 0; i < nargs; i++) {
66
- lua_pushlstring(L, (const char *) args[i].data, args[i].len);
67
- }
68
-
69
- #if (NGX_PCRE)
70
- /* XXX: work-around to nginx regex subsystem */
71
- old_pool = ngx_http_lua_pcre_malloc_init(r->pool);
72
- #endif
73
-
74
- lua_pushcfunction(L, ngx_http_lua_traceback);
75
- lua_insert(L, 1); /* put it under chunk and args */
76
-
77
- dd("protected call user code");
78
-
79
- rc = lua_pcall(L, nargs, 1, 1);
80
-
81
- dd("after protected call user code");
82
-
83
- lua_remove(L, 1); /* remove traceback function */
84
-
85
- #if (NGX_PCRE)
86
- /* XXX: work-around to nginx regex subsystem */
87
- ngx_http_lua_pcre_malloc_done(old_pool);
88
- #endif
89
-
90
- if (rc != 0) {
91
- /* error occured when running loaded code */
92
- err_msg = (u_char *) lua_tolstring(L, -1, &len);
93
-
94
- if (err_msg == NULL) {
95
- err_msg = (u_char *) "unknown reason";
96
- len = sizeof("unknown reason") - 1;
97
- }
98
-
99
- ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
100
- "failed to run set_by_lua*: %*s", len, err_msg);
101
-
102
- lua_settop(L, 0); /* clear remaining elems on stack */
103
-
104
- return NGX_ERROR;
105
- }
106
-
107
- data = (u_char *) lua_tolstring(L, -1, &len);
108
-
109
- if (data) {
110
- val->data = ngx_palloc(r->pool, len);
111
- if (val->data == NULL) {
112
- return NGX_ERROR;
113
- }
114
-
115
- ngx_memcpy(val->data, data, len);
116
- val->len = len;
117
-
118
- } else {
119
- val->data = NULL;
120
- val->len = 0;
121
- }
122
-
123
- } NGX_LUA_EXCEPTION_CATCH {
124
-
125
- dd("nginx execution restored");
126
- return NGX_ERROR;
127
- }
128
-
129
- /* clear Lua stack */
130
- lua_settop(L, 0);
131
-
132
- return NGX_OK;
133
- }
134
-
135
-
136
- int
137
- ngx_http_lua_setby_param_get(lua_State *L)
138
- {
139
- int idx;
140
- int n;
141
-
142
- ngx_http_variable_value_t *v;
143
-
144
- idx = luaL_checkint(L, 2);
145
- idx--;
146
-
147
- /* get number of args from globals */
148
- lua_getglobal(L, ngx_http_lua_nargs_key);
149
- n = (int) lua_tointeger(L, -1);
150
-
151
- /* get args from globals */
152
- lua_getglobal(L, ngx_http_lua_args_key);
153
- v = lua_touserdata(L, -1);
154
-
155
- if (idx < 0 || idx > n - 1) {
156
- lua_pushnil(L);
157
-
158
- } else {
159
- lua_pushlstring(L, (const char *) (v[idx].data), v[idx].len);
160
- }
161
-
162
- return 1;
163
- }
164
-
165
-
166
- /**
167
- * Set environment table for the given code closure.
168
- *
169
- * Before:
170
- * | code closure | <- top
171
- * | ... |
172
- *
173
- * After:
174
- * | code closure | <- top
175
- * | ... |
176
- * */
177
- static void
178
- ngx_http_lua_set_by_lua_env(lua_State *L, ngx_http_request_t *r, size_t nargs,
179
- ngx_http_variable_value_t *args)
180
- {
181
- /* set nginx request pointer to current lua thread's globals table */
182
- ngx_http_lua_set_req(L, r);
183
-
184
- lua_pushinteger(L, nargs);
185
- lua_setglobal(L, ngx_http_lua_nargs_key);
186
-
187
- lua_pushlightuserdata(L, args);
188
- lua_setglobal(L, ngx_http_lua_args_key);
189
-
190
- /**
191
- * we want to create empty environment for current script
192
- *
193
- * newt = {}
194
- * newt["_G"] = newt
195
- * setmetatable(newt, {__index = _G})
196
- *
197
- * if a function or symbol is not defined in our env, __index will lookup
198
- * in the global env.
199
- *
200
- * all variables created in the script-env will be thrown away at the end
201
- * of the script run.
202
- * */
203
- ngx_http_lua_create_new_globals_table(L, 0 /* narr */, 1 /* nrec */);
204
-
205
- /* {{{ make new env inheriting main thread's globals table */
206
- /* the metatable for the new env */
207
- lua_createtable(L, 0 /* narr */, 1 /* nrec */);
208
- ngx_http_lua_get_globals_table(L);
209
- lua_setfield(L, -2, "__index");
210
- lua_setmetatable(L, -2); /* setmetatable(newt, {__index = _G}) */
211
- /* }}} */
212
-
213
- lua_setfenv(L, -2); /* set new running env for the code closure */
214
- }
215
-
216
- /* vi:set ft=c ts=4 sw=4 et fdm=marker: */
@@ -1,15 +0,0 @@
1
- #ifndef _NGX_HTTP_LUA_SET_BY_H_INCLUDED_
2
- #define _NGX_HTTP_LUA_SET_BY_H_INCLUDED_
3
-
4
- #include "ngx_http_lua_common.h"
5
-
6
-
7
- ngx_int_t ngx_http_lua_set_by_chunk(lua_State *L, ngx_http_request_t *r,
8
- ngx_str_t *val, ngx_http_variable_value_t *args, size_t nargs,
9
- ngx_str_t *script);
10
- int ngx_http_lua_setby_param_get(lua_State *L);
11
-
12
-
13
- #endif /* _NGX_HTTP_LUA_SET_BY_H_INCLUDED_ */
14
-
15
- /* vi:set ft=c ts=4 sw=4 et fdm=marker: */
@@ -1,1844 +0,0 @@
1
-
2
- /*
3
- * Copyright (C) Yichun Zhang (agentzh)
4
- */
5
-
6
-
7
- #ifndef DDEBUG
8
- #define DDEBUG 0
9
- #endif
10
- #include "ddebug.h"
11
-
12
-
13
- #include "ngx_http_lua_shdict.h"
14
- #include "ngx_http_lua_util.h"
15
- #include "ngx_http_lua_api.h"
16
-
17
-
18
- static int ngx_http_lua_shdict_set(lua_State *L);
19
- static int ngx_http_lua_shdict_safe_set(lua_State *L);
20
- static int ngx_http_lua_shdict_get(lua_State *L);
21
- static int ngx_http_lua_shdict_get_stale(lua_State *L);
22
- static int ngx_http_lua_shdict_get_helper(lua_State *L, int get_stale);
23
- static int ngx_http_lua_shdict_expire(ngx_http_lua_shdict_ctx_t *ctx,
24
- ngx_uint_t n);
25
- static ngx_int_t ngx_http_lua_shdict_lookup(ngx_shm_zone_t *shm_zone,
26
- ngx_uint_t hash, u_char *kdata, size_t klen,
27
- ngx_http_lua_shdict_node_t **sdp);
28
- static int ngx_http_lua_shdict_set_helper(lua_State *L, int flags);
29
- static int ngx_http_lua_shdict_add(lua_State *L);
30
- static int ngx_http_lua_shdict_safe_add(lua_State *L);
31
- static int ngx_http_lua_shdict_replace(lua_State *L);
32
- static int ngx_http_lua_shdict_incr(lua_State *L);
33
- static int ngx_http_lua_shdict_delete(lua_State *L);
34
- static int ngx_http_lua_shdict_flush_all(lua_State *L);
35
- static int ngx_http_lua_shdict_flush_expired(lua_State *L);
36
- static int ngx_http_lua_shdict_get_keys(lua_State *L);
37
-
38
-
39
- #define NGX_HTTP_LUA_SHDICT_ADD 0x0001
40
- #define NGX_HTTP_LUA_SHDICT_REPLACE 0x0002
41
- #define NGX_HTTP_LUA_SHDICT_SAFE_STORE 0x0004
42
-
43
-
44
- ngx_int_t
45
- ngx_http_lua_shdict_init_zone(ngx_shm_zone_t *shm_zone, void *data)
46
- {
47
- ngx_http_lua_shdict_ctx_t *octx = data;
48
-
49
- size_t len;
50
- ngx_http_lua_shdict_ctx_t *ctx;
51
- ngx_http_lua_main_conf_t *lmcf;
52
-
53
- dd("init zone");
54
-
55
- ctx = shm_zone->data;
56
-
57
- if (octx) {
58
- ctx->sh = octx->sh;
59
- ctx->shpool = octx->shpool;
60
-
61
- goto done;
62
- }
63
-
64
- ctx->shpool = (ngx_slab_pool_t *) shm_zone->shm.addr;
65
-
66
- if (shm_zone->shm.exists) {
67
- ctx->sh = ctx->shpool->data;
68
-
69
- goto done;
70
- }
71
-
72
- ctx->sh = ngx_slab_alloc(ctx->shpool, sizeof(ngx_http_lua_shdict_shctx_t));
73
- if (ctx->sh == NULL) {
74
- return NGX_ERROR;
75
- }
76
-
77
- ctx->shpool->data = ctx->sh;
78
-
79
- ngx_rbtree_init(&ctx->sh->rbtree, &ctx->sh->sentinel,
80
- ngx_http_lua_shdict_rbtree_insert_value);
81
-
82
- ngx_queue_init(&ctx->sh->queue);
83
-
84
- len = sizeof(" in lua_shared_dict zone \"\"") + shm_zone->shm.name.len;
85
-
86
- ctx->shpool->log_ctx = ngx_slab_alloc(ctx->shpool, len);
87
- if (ctx->shpool->log_ctx == NULL) {
88
- return NGX_ERROR;
89
- }
90
-
91
- ngx_sprintf(ctx->shpool->log_ctx, " in lua_shared_dict zone \"%V\"%Z",
92
- &shm_zone->shm.name);
93
-
94
- #if defined(nginx_version) && nginx_version >= 1005013
95
- ctx->shpool->log_nomem = 0;
96
- #endif
97
-
98
- done:
99
-
100
- dd("get lmcf");
101
-
102
- lmcf = ctx->main_conf;
103
-
104
- dd("lmcf->lua: %p", lmcf->lua);
105
-
106
- lmcf->shm_zones_inited++;
107
-
108
- if (lmcf->shm_zones_inited == lmcf->shm_zones->nelts
109
- && lmcf->init_handler)
110
- {
111
- if (lmcf->init_handler(ctx->log, lmcf, lmcf->lua) != NGX_OK) {
112
- /* an error happened */
113
- return NGX_ERROR;
114
- }
115
- }
116
-
117
- return NGX_OK;
118
- }
119
-
120
-
121
- void
122
- ngx_http_lua_shdict_rbtree_insert_value(ngx_rbtree_node_t *temp,
123
- ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel)
124
- {
125
- ngx_rbtree_node_t **p;
126
- ngx_http_lua_shdict_node_t *sdn, *sdnt;
127
-
128
- for ( ;; ) {
129
-
130
- if (node->key < temp->key) {
131
-
132
- p = &temp->left;
133
-
134
- } else if (node->key > temp->key) {
135
-
136
- p = &temp->right;
137
-
138
- } else { /* node->key == temp->key */
139
-
140
- sdn = (ngx_http_lua_shdict_node_t *) &node->color;
141
- sdnt = (ngx_http_lua_shdict_node_t *) &temp->color;
142
-
143
- p = ngx_memn2cmp(sdn->data, sdnt->data, sdn->key_len,
144
- sdnt->key_len) < 0 ? &temp->left : &temp->right;
145
- }
146
-
147
- if (*p == sentinel) {
148
- break;
149
- }
150
-
151
- temp = *p;
152
- }
153
-
154
- *p = node;
155
- node->parent = temp;
156
- node->left = sentinel;
157
- node->right = sentinel;
158
- ngx_rbt_red(node);
159
- }
160
-
161
-
162
- static ngx_int_t
163
- ngx_http_lua_shdict_lookup(ngx_shm_zone_t *shm_zone, ngx_uint_t hash,
164
- u_char *kdata, size_t klen, ngx_http_lua_shdict_node_t **sdp)
165
- {
166
- ngx_int_t rc;
167
- ngx_time_t *tp;
168
- uint64_t now;
169
- int64_t ms;
170
- ngx_rbtree_node_t *node, *sentinel;
171
- ngx_http_lua_shdict_ctx_t *ctx;
172
- ngx_http_lua_shdict_node_t *sd;
173
-
174
- ctx = shm_zone->data;
175
-
176
- node = ctx->sh->rbtree.root;
177
- sentinel = ctx->sh->rbtree.sentinel;
178
-
179
- while (node != sentinel) {
180
-
181
- if (hash < node->key) {
182
- node = node->left;
183
- continue;
184
- }
185
-
186
- if (hash > node->key) {
187
- node = node->right;
188
- continue;
189
- }
190
-
191
- /* hash == node->key */
192
-
193
- sd = (ngx_http_lua_shdict_node_t *) &node->color;
194
-
195
- rc = ngx_memn2cmp(kdata, sd->data, klen, (size_t) sd->key_len);
196
-
197
- if (rc == 0) {
198
- ngx_queue_remove(&sd->queue);
199
- ngx_queue_insert_head(&ctx->sh->queue, &sd->queue);
200
-
201
- *sdp = sd;
202
-
203
- dd("node expires: %lld", (long long) sd->expires);
204
-
205
- if (sd->expires != 0) {
206
- tp = ngx_timeofday();
207
-
208
- now = (uint64_t) tp->sec * 1000 + tp->msec;
209
- ms = sd->expires - now;
210
-
211
- dd("time to live: %lld", (long long) ms);
212
-
213
- if (ms < 0) {
214
- dd("node already expired");
215
- return NGX_DONE;
216
- }
217
- }
218
-
219
- return NGX_OK;
220
- }
221
-
222
- node = (rc < 0) ? node->left : node->right;
223
- }
224
-
225
- *sdp = NULL;
226
-
227
- return NGX_DECLINED;
228
- }
229
-
230
-
231
- static int
232
- ngx_http_lua_shdict_expire(ngx_http_lua_shdict_ctx_t *ctx, ngx_uint_t n)
233
- {
234
- ngx_time_t *tp;
235
- uint64_t now;
236
- ngx_queue_t *q;
237
- int64_t ms;
238
- ngx_rbtree_node_t *node;
239
- ngx_http_lua_shdict_node_t *sd;
240
- int freed = 0;
241
-
242
- tp = ngx_timeofday();
243
-
244
- now = (uint64_t) tp->sec * 1000 + tp->msec;
245
-
246
- /*
247
- * n == 1 deletes one or two expired entries
248
- * n == 0 deletes oldest entry by force
249
- * and one or two zero rate entries
250
- */
251
-
252
- while (n < 3) {
253
-
254
- if (ngx_queue_empty(&ctx->sh->queue)) {
255
- return freed;
256
- }
257
-
258
- q = ngx_queue_last(&ctx->sh->queue);
259
-
260
- sd = ngx_queue_data(q, ngx_http_lua_shdict_node_t, queue);
261
-
262
- if (n++ != 0) {
263
-
264
- if (sd->expires == 0) {
265
- return freed;
266
- }
267
-
268
- ms = sd->expires - now;
269
- if (ms > 0) {
270
- return freed;
271
- }
272
- }
273
-
274
- ngx_queue_remove(q);
275
-
276
- node = (ngx_rbtree_node_t *)
277
- ((u_char *) sd - offsetof(ngx_rbtree_node_t, color));
278
-
279
- ngx_rbtree_delete(&ctx->sh->rbtree, node);
280
-
281
- ngx_slab_free_locked(ctx->shpool, node);
282
-
283
- freed++;
284
- }
285
-
286
- return freed;
287
- }
288
-
289
-
290
- void
291
- ngx_http_lua_inject_shdict_api(ngx_http_lua_main_conf_t *lmcf, lua_State *L)
292
- {
293
- ngx_http_lua_shdict_ctx_t *ctx;
294
- ngx_uint_t i;
295
- ngx_shm_zone_t **zone;
296
-
297
- if (lmcf->shm_zones != NULL) {
298
- lua_createtable(L, 0, lmcf->shm_zones->nelts /* nrec */);
299
- /* ngx.shared */
300
-
301
- lua_createtable(L, 0 /* narr */, 13 /* nrec */); /* shared mt */
302
-
303
- lua_pushcfunction(L, ngx_http_lua_shdict_get);
304
- lua_setfield(L, -2, "get");
305
-
306
- lua_pushcfunction(L, ngx_http_lua_shdict_get_stale);
307
- lua_setfield(L, -2, "get_stale");
308
-
309
- lua_pushcfunction(L, ngx_http_lua_shdict_set);
310
- lua_setfield(L, -2, "set");
311
-
312
- lua_pushcfunction(L, ngx_http_lua_shdict_safe_set);
313
- lua_setfield(L, -2, "safe_set");
314
-
315
- lua_pushcfunction(L, ngx_http_lua_shdict_add);
316
- lua_setfield(L, -2, "add");
317
-
318
- lua_pushcfunction(L, ngx_http_lua_shdict_safe_add);
319
- lua_setfield(L, -2, "safe_add");
320
-
321
- lua_pushcfunction(L, ngx_http_lua_shdict_replace);
322
- lua_setfield(L, -2, "replace");
323
-
324
- lua_pushcfunction(L, ngx_http_lua_shdict_incr);
325
- lua_setfield(L, -2, "incr");
326
-
327
- lua_pushcfunction(L, ngx_http_lua_shdict_delete);
328
- lua_setfield(L, -2, "delete");
329
-
330
- lua_pushcfunction(L, ngx_http_lua_shdict_flush_all);
331
- lua_setfield(L, -2, "flush_all");
332
-
333
- lua_pushcfunction(L, ngx_http_lua_shdict_flush_expired);
334
- lua_setfield(L, -2, "flush_expired");
335
-
336
- lua_pushcfunction(L, ngx_http_lua_shdict_get_keys);
337
- lua_setfield(L, -2, "get_keys");
338
-
339
- lua_pushvalue(L, -1); /* shared mt mt */
340
- lua_setfield(L, -2, "__index"); /* shared mt */
341
-
342
- zone = lmcf->shm_zones->elts;
343
-
344
- for (i = 0; i < lmcf->shm_zones->nelts; i++) {
345
- ctx = zone[i]->data;
346
-
347
- lua_pushlstring(L, (char *) ctx->name.data, ctx->name.len);
348
- /* shared mt key */
349
-
350
- lua_pushlightuserdata(L, zone[i]); /* shared mt key ud */
351
- lua_pushvalue(L, -3); /* shared mt key ud mt */
352
- lua_setmetatable(L, -2); /* shared mt key ud */
353
- lua_rawset(L, -4); /* shared mt */
354
- }
355
-
356
- lua_pop(L, 1); /* shared */
357
-
358
- } else {
359
- lua_newtable(L); /* ngx.shared */
360
- }
361
-
362
- lua_setfield(L, -2, "shared");
363
- }
364
-
365
-
366
- static int
367
- ngx_http_lua_shdict_get(lua_State *L)
368
- {
369
- return ngx_http_lua_shdict_get_helper(L, 0 /* stale */);
370
- }
371
-
372
-
373
- static int
374
- ngx_http_lua_shdict_get_stale(lua_State *L)
375
- {
376
- return ngx_http_lua_shdict_get_helper(L, 1 /* stale */);
377
- }
378
-
379
-
380
- static int
381
- ngx_http_lua_shdict_get_helper(lua_State *L, int get_stale)
382
- {
383
- int n;
384
- ngx_str_t name;
385
- ngx_str_t key;
386
- uint32_t hash;
387
- ngx_int_t rc;
388
- ngx_http_lua_shdict_ctx_t *ctx;
389
- ngx_http_lua_shdict_node_t *sd;
390
- ngx_str_t value;
391
- int value_type;
392
- double num;
393
- u_char c;
394
- ngx_shm_zone_t *zone;
395
- uint32_t user_flags = 0;
396
-
397
- n = lua_gettop(L);
398
-
399
- if (n != 2) {
400
- return luaL_error(L, "expecting exactly two arguments, "
401
- "but only seen %d", n);
402
- }
403
-
404
- zone = lua_touserdata(L, 1);
405
- if (zone == NULL) {
406
- return luaL_error(L, "bad \"zone\" argument");
407
- }
408
-
409
- ctx = zone->data;
410
- name = ctx->name;
411
-
412
- if (lua_isnil(L, 2)) {
413
- lua_pushnil(L);
414
- lua_pushliteral(L, "nil key");
415
- return 2;
416
- }
417
-
418
- key.data = (u_char *) luaL_checklstring(L, 2, &key.len);
419
-
420
- if (key.len == 0) {
421
- lua_pushnil(L);
422
- lua_pushliteral(L, "empty key");
423
- return 2;
424
- }
425
-
426
- if (key.len > 65535) {
427
- lua_pushnil(L);
428
- lua_pushliteral(L, "key too long");
429
- return 2;
430
- }
431
-
432
- hash = ngx_crc32_short(key.data, key.len);
433
-
434
- #if (NGX_DEBUG)
435
- ngx_log_debug2(NGX_LOG_DEBUG_HTTP, ctx->log, 0,
436
- "fetching key \"%V\" in shared dict \"%V\"", &key, &name);
437
- #endif /* NGX_DEBUG */
438
-
439
- ngx_shmtx_lock(&ctx->shpool->mutex);
440
-
441
- #if 1
442
- if (!get_stale) {
443
- ngx_http_lua_shdict_expire(ctx, 1);
444
- }
445
- #endif
446
-
447
- rc = ngx_http_lua_shdict_lookup(zone, hash, key.data, key.len, &sd);
448
-
449
- dd("shdict lookup returns %d", (int) rc);
450
-
451
- if (rc == NGX_DECLINED || (rc == NGX_DONE && !get_stale)) {
452
- ngx_shmtx_unlock(&ctx->shpool->mutex);
453
- lua_pushnil(L);
454
- return 1;
455
- }
456
-
457
- /* rc == NGX_OK || (rc == NGX_DONE && get_stale) */
458
-
459
- value_type = sd->value_type;
460
-
461
- dd("data: %p", sd->data);
462
- dd("key len: %d", (int) sd->key_len);
463
-
464
- value.data = sd->data + sd->key_len;
465
- value.len = (size_t) sd->value_len;
466
-
467
- switch (value_type) {
468
- case LUA_TSTRING:
469
-
470
- lua_pushlstring(L, (char *) value.data, value.len);
471
- break;
472
-
473
- case LUA_TNUMBER:
474
-
475
- if (value.len != sizeof(double)) {
476
-
477
- ngx_shmtx_unlock(&ctx->shpool->mutex);
478
-
479
- return luaL_error(L, "bad lua number value size found for key %s "
480
- "in shared_dict %s: %lu", key.data, name.data,
481
- (unsigned long) value.len);
482
- }
483
-
484
- ngx_memcpy(&num, value.data, sizeof(double));
485
-
486
- lua_pushnumber(L, num);
487
- break;
488
-
489
- case LUA_TBOOLEAN:
490
-
491
- if (value.len != sizeof(u_char)) {
492
-
493
- ngx_shmtx_unlock(&ctx->shpool->mutex);
494
-
495
- return luaL_error(L, "bad lua boolean value size found for key %s "
496
- "in shared_dict %s: %lu", key.data, name.data,
497
- (unsigned long) value.len);
498
- }
499
-
500
- c = *value.data;
501
-
502
- lua_pushboolean(L, c ? 1 : 0);
503
- break;
504
-
505
- default:
506
-
507
- ngx_shmtx_unlock(&ctx->shpool->mutex);
508
-
509
- return luaL_error(L, "bad value type found for key %s in "
510
- "shared_dict %s: %d", key.data, name.data,
511
- value_type);
512
- }
513
-
514
- user_flags = sd->user_flags;
515
-
516
- ngx_shmtx_unlock(&ctx->shpool->mutex);
517
-
518
- if (get_stale) {
519
-
520
- /* always return value, flags, stale */
521
-
522
- if (user_flags) {
523
- lua_pushinteger(L, (lua_Integer) user_flags);
524
-
525
- } else {
526
- lua_pushnil(L);
527
- }
528
-
529
- lua_pushboolean(L, rc == NGX_DONE);
530
- return 3;
531
- }
532
-
533
- if (user_flags) {
534
- lua_pushinteger(L, (lua_Integer) user_flags);
535
- return 2;
536
- }
537
-
538
- return 1;
539
- }
540
-
541
-
542
- static int
543
- ngx_http_lua_shdict_delete(lua_State *L)
544
- {
545
- int n;
546
-
547
- n = lua_gettop(L);
548
-
549
- if (n != 2) {
550
- return luaL_error(L, "expecting 2 arguments, "
551
- "but only seen %d", n);
552
- }
553
-
554
- lua_pushnil(L);
555
-
556
- return ngx_http_lua_shdict_set_helper(L, 0);
557
- }
558
-
559
-
560
- static int
561
- ngx_http_lua_shdict_flush_all(lua_State *L)
562
- {
563
- ngx_queue_t *q;
564
- ngx_http_lua_shdict_node_t *sd;
565
- int n;
566
- ngx_http_lua_shdict_ctx_t *ctx;
567
- ngx_shm_zone_t *zone;
568
-
569
- n = lua_gettop(L);
570
-
571
- if (n != 1) {
572
- return luaL_error(L, "expecting 1 argument, but seen %d", n);
573
- }
574
-
575
- luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
576
-
577
- zone = lua_touserdata(L, 1);
578
- if (zone == NULL) {
579
- return luaL_error(L, "bad user data for the ngx_shm_zone_t pointer");
580
- }
581
-
582
- ctx = zone->data;
583
-
584
- ngx_shmtx_lock(&ctx->shpool->mutex);
585
-
586
- for (q = ngx_queue_head(&ctx->sh->queue);
587
- q != ngx_queue_sentinel(&ctx->sh->queue);
588
- q = ngx_queue_next(q))
589
- {
590
- sd = ngx_queue_data(q, ngx_http_lua_shdict_node_t, queue);
591
- sd->expires = 1;
592
- }
593
-
594
- ngx_http_lua_shdict_expire(ctx, 0);
595
-
596
- ngx_shmtx_unlock(&ctx->shpool->mutex);
597
-
598
- return 0;
599
- }
600
-
601
-
602
- static int
603
- ngx_http_lua_shdict_flush_expired(lua_State *L)
604
- {
605
- ngx_queue_t *q, *prev;
606
- ngx_http_lua_shdict_node_t *sd;
607
- ngx_http_lua_shdict_ctx_t *ctx;
608
- ngx_shm_zone_t *zone;
609
- ngx_time_t *tp;
610
- int freed = 0;
611
- int attempts = 0;
612
- ngx_rbtree_node_t *node;
613
- uint64_t now;
614
- int n;
615
-
616
- n = lua_gettop(L);
617
-
618
- if (n != 1 && n != 2) {
619
- return luaL_error(L, "expecting 1 or 2 argument(s), but saw %d", n);
620
- }
621
-
622
- luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
623
-
624
- zone = lua_touserdata(L, 1);
625
- if (zone == NULL) {
626
- return luaL_error(L, "bad user data for the ngx_shm_zone_t pointer");
627
- }
628
-
629
- if (n == 2) {
630
- attempts = luaL_checkint(L, 2);
631
- }
632
-
633
- ctx = zone->data;
634
-
635
- ngx_shmtx_lock(&ctx->shpool->mutex);
636
-
637
- if (ngx_queue_empty(&ctx->sh->queue)) {
638
- ngx_shmtx_unlock(&ctx->shpool->mutex);
639
- lua_pushnumber(L, 0);
640
- return 1;
641
- }
642
-
643
- tp = ngx_timeofday();
644
-
645
- now = (uint64_t) tp->sec * 1000 + tp->msec;
646
-
647
- q = ngx_queue_last(&ctx->sh->queue);
648
-
649
- while (q != ngx_queue_sentinel(&ctx->sh->queue)) {
650
- prev = ngx_queue_prev(q);
651
-
652
- sd = ngx_queue_data(q, ngx_http_lua_shdict_node_t, queue);
653
-
654
- if (sd->expires != 0 && sd->expires <= now) {
655
- ngx_queue_remove(q);
656
-
657
- node = (ngx_rbtree_node_t *)
658
- ((u_char *) sd - offsetof(ngx_rbtree_node_t, color));
659
-
660
- ngx_rbtree_delete(&ctx->sh->rbtree, node);
661
- ngx_slab_free_locked(ctx->shpool, node);
662
- freed++;
663
-
664
- if (attempts && freed == attempts) {
665
- break;
666
- }
667
- }
668
-
669
- q = prev;
670
- }
671
-
672
- ngx_shmtx_unlock(&ctx->shpool->mutex);
673
-
674
- lua_pushnumber(L, freed);
675
- return 1;
676
- }
677
-
678
-
679
- /*
680
- * This trades CPU for memory. This is potentially slow. O(2n)
681
- */
682
-
683
- static int
684
- ngx_http_lua_shdict_get_keys(lua_State *L)
685
- {
686
- ngx_queue_t *q, *prev;
687
- ngx_http_lua_shdict_node_t *sd;
688
- ngx_http_lua_shdict_ctx_t *ctx;
689
- ngx_shm_zone_t *zone;
690
- ngx_time_t *tp;
691
- int total = 0;
692
- int attempts = 1024;
693
- uint64_t now;
694
- int n;
695
-
696
- n = lua_gettop(L);
697
-
698
- if (n != 1 && n != 2) {
699
- return luaL_error(L, "expecting 1 or 2 argument(s), "
700
- "but saw %d", n);
701
- }
702
-
703
- luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
704
-
705
- zone = lua_touserdata(L, 1);
706
- if (zone == NULL) {
707
- return luaL_error(L, "bad user data for the ngx_shm_zone_t pointer");
708
- }
709
-
710
- if (n == 2) {
711
- attempts = luaL_checkint(L, 2);
712
- }
713
-
714
- ctx = zone->data;
715
-
716
- ngx_shmtx_lock(&ctx->shpool->mutex);
717
-
718
- if (ngx_queue_empty(&ctx->sh->queue)) {
719
- ngx_shmtx_unlock(&ctx->shpool->mutex);
720
- lua_createtable(L, 0, 0);
721
- return 1;
722
- }
723
-
724
- tp = ngx_timeofday();
725
-
726
- now = (uint64_t) tp->sec * 1000 + tp->msec;
727
-
728
- /* first run through: get total number of elements we need to allocate */
729
-
730
- q = ngx_queue_last(&ctx->sh->queue);
731
-
732
- while (q != ngx_queue_sentinel(&ctx->sh->queue)) {
733
- prev = ngx_queue_prev(q);
734
-
735
- sd = ngx_queue_data(q, ngx_http_lua_shdict_node_t, queue);
736
-
737
- if (sd->expires == 0 || sd->expires > now) {
738
- total++;
739
- if (attempts && total == attempts) {
740
- break;
741
- }
742
- }
743
-
744
- q = prev;
745
- }
746
-
747
- lua_createtable(L, total, 0);
748
-
749
- /* second run through: add keys to table */
750
-
751
- total = 0;
752
- q = ngx_queue_last(&ctx->sh->queue);
753
-
754
- while (q != ngx_queue_sentinel(&ctx->sh->queue)) {
755
- prev = ngx_queue_prev(q);
756
-
757
- sd = ngx_queue_data(q, ngx_http_lua_shdict_node_t, queue);
758
-
759
- if (sd->expires == 0 || sd->expires > now) {
760
- lua_pushlstring(L, (char *) sd->data, sd->key_len);
761
- lua_rawseti(L, -2, ++total);
762
- if (attempts && total == attempts) {
763
- break;
764
- }
765
- }
766
-
767
- q = prev;
768
- }
769
-
770
- ngx_shmtx_unlock(&ctx->shpool->mutex);
771
-
772
- /* table is at top of stack */
773
- return 1;
774
- }
775
-
776
-
777
- static int
778
- ngx_http_lua_shdict_add(lua_State *L)
779
- {
780
- return ngx_http_lua_shdict_set_helper(L, NGX_HTTP_LUA_SHDICT_ADD);
781
- }
782
-
783
-
784
- static int
785
- ngx_http_lua_shdict_safe_add(lua_State *L)
786
- {
787
- return ngx_http_lua_shdict_set_helper(L, NGX_HTTP_LUA_SHDICT_ADD
788
- |NGX_HTTP_LUA_SHDICT_SAFE_STORE);
789
- }
790
-
791
-
792
- static int
793
- ngx_http_lua_shdict_replace(lua_State *L)
794
- {
795
- return ngx_http_lua_shdict_set_helper(L, NGX_HTTP_LUA_SHDICT_REPLACE);
796
- }
797
-
798
-
799
- static int
800
- ngx_http_lua_shdict_set(lua_State *L)
801
- {
802
- return ngx_http_lua_shdict_set_helper(L, 0);
803
- }
804
-
805
-
806
- static int
807
- ngx_http_lua_shdict_safe_set(lua_State *L)
808
- {
809
- return ngx_http_lua_shdict_set_helper(L, NGX_HTTP_LUA_SHDICT_SAFE_STORE);
810
- }
811
-
812
-
813
- static int
814
- ngx_http_lua_shdict_set_helper(lua_State *L, int flags)
815
- {
816
- int i, n;
817
- ngx_str_t key;
818
- uint32_t hash;
819
- ngx_int_t rc;
820
- ngx_http_lua_shdict_ctx_t *ctx;
821
- ngx_http_lua_shdict_node_t *sd;
822
- ngx_str_t value;
823
- int value_type;
824
- double num;
825
- u_char c;
826
- lua_Number exptime = 0;
827
- u_char *p;
828
- ngx_rbtree_node_t *node;
829
- ngx_time_t *tp;
830
- ngx_shm_zone_t *zone;
831
- int forcible = 0;
832
- /* indicates whether to foricibly override other
833
- * valid entries */
834
- int32_t user_flags = 0;
835
-
836
- n = lua_gettop(L);
837
-
838
- if (n != 3 && n != 4 && n != 5) {
839
- return luaL_error(L, "expecting 3, 4 or 5 arguments, "
840
- "but only seen %d", n);
841
- }
842
-
843
- zone = lua_touserdata(L, 1);
844
- if (zone == NULL) {
845
- return luaL_error(L, "bad \"zone\" argument");
846
- }
847
-
848
- ctx = zone->data;
849
-
850
- if (lua_isnil(L, 2)) {
851
- lua_pushnil(L);
852
- lua_pushliteral(L, "nil key");
853
- return 2;
854
- }
855
-
856
- key.data = (u_char *) luaL_checklstring(L, 2, &key.len);
857
-
858
- if (key.len == 0) {
859
- lua_pushnil(L);
860
- lua_pushliteral(L, "empty key");
861
- return 2;
862
- }
863
-
864
- if (key.len > 65535) {
865
- lua_pushnil(L);
866
- lua_pushliteral(L, "key too long");
867
- return 2;
868
- }
869
-
870
- hash = ngx_crc32_short(key.data, key.len);
871
-
872
- value_type = lua_type(L, 3);
873
-
874
- switch (value_type) {
875
- case LUA_TSTRING:
876
- value.data = (u_char *) lua_tolstring(L, 3, &value.len);
877
- break;
878
-
879
- case LUA_TNUMBER:
880
- value.len = sizeof(double);
881
- num = lua_tonumber(L, 3);
882
- value.data = (u_char *) &num;
883
- break;
884
-
885
- case LUA_TBOOLEAN:
886
- value.len = sizeof(u_char);
887
- c = lua_toboolean(L, 3) ? 1 : 0;
888
- value.data = &c;
889
- break;
890
-
891
- case LUA_TNIL:
892
- if (flags & (NGX_HTTP_LUA_SHDICT_ADD|NGX_HTTP_LUA_SHDICT_REPLACE)) {
893
- lua_pushnil(L);
894
- lua_pushliteral(L, "attempt to add or replace nil values");
895
- return 2;
896
- }
897
-
898
- ngx_str_null(&value);
899
- break;
900
-
901
- default:
902
- lua_pushnil(L);
903
- lua_pushliteral(L, "bad value type");
904
- return 2;
905
- }
906
-
907
- if (n >= 4) {
908
- exptime = luaL_checknumber(L, 4);
909
- if (exptime < 0) {
910
- exptime = 0;
911
- }
912
- }
913
-
914
- if (n == 5) {
915
- user_flags = (uint32_t) luaL_checkinteger(L, 5);
916
- }
917
-
918
- ngx_shmtx_lock(&ctx->shpool->mutex);
919
-
920
- #if 1
921
- ngx_http_lua_shdict_expire(ctx, 1);
922
- #endif
923
-
924
- rc = ngx_http_lua_shdict_lookup(zone, hash, key.data, key.len, &sd);
925
-
926
- dd("shdict lookup returned %d", (int) rc);
927
-
928
- if (flags & NGX_HTTP_LUA_SHDICT_REPLACE) {
929
-
930
- if (rc == NGX_DECLINED || rc == NGX_DONE) {
931
- ngx_shmtx_unlock(&ctx->shpool->mutex);
932
-
933
- lua_pushboolean(L, 0);
934
- lua_pushliteral(L, "not found");
935
- lua_pushboolean(L, forcible);
936
- return 3;
937
- }
938
-
939
- /* rc == NGX_OK */
940
-
941
- goto replace;
942
- }
943
-
944
- if (flags & NGX_HTTP_LUA_SHDICT_ADD) {
945
-
946
- if (rc == NGX_OK) {
947
- ngx_shmtx_unlock(&ctx->shpool->mutex);
948
-
949
- lua_pushboolean(L, 0);
950
- lua_pushliteral(L, "exists");
951
- lua_pushboolean(L, forcible);
952
- return 3;
953
- }
954
-
955
- if (rc == NGX_DONE) {
956
- /* exists but expired */
957
-
958
- dd("go to replace");
959
- goto replace;
960
- }
961
-
962
- /* rc == NGX_DECLINED */
963
-
964
- dd("go to insert");
965
- goto insert;
966
- }
967
-
968
- if (rc == NGX_OK || rc == NGX_DONE) {
969
-
970
- if (value_type == LUA_TNIL) {
971
- goto remove;
972
- }
973
-
974
- replace:
975
-
976
- if (value.data && value.len == (size_t) sd->value_len) {
977
-
978
- ngx_log_debug0(NGX_LOG_DEBUG_HTTP, ctx->log, 0,
979
- "lua shared dict set: found old entry and value "
980
- "size matched, reusing it");
981
-
982
- ngx_queue_remove(&sd->queue);
983
- ngx_queue_insert_head(&ctx->sh->queue, &sd->queue);
984
-
985
- sd->key_len = (u_short) key.len;
986
-
987
- if (exptime > 0) {
988
- tp = ngx_timeofday();
989
- sd->expires = (uint64_t) tp->sec * 1000 + tp->msec
990
- + (uint64_t) (exptime * 1000);
991
-
992
- } else {
993
- sd->expires = 0;
994
- }
995
-
996
- sd->user_flags = user_flags;
997
-
998
- sd->value_len = (uint32_t) value.len;
999
-
1000
- dd("setting value type to %d", value_type);
1001
-
1002
- sd->value_type = (uint8_t) value_type;
1003
-
1004
- p = ngx_copy(sd->data, key.data, key.len);
1005
- ngx_memcpy(p, value.data, value.len);
1006
-
1007
- ngx_shmtx_unlock(&ctx->shpool->mutex);
1008
-
1009
- lua_pushboolean(L, 1);
1010
- lua_pushnil(L);
1011
- lua_pushboolean(L, forcible);
1012
- return 3;
1013
- }
1014
-
1015
- ngx_log_debug0(NGX_LOG_DEBUG_HTTP, ctx->log, 0,
1016
- "lua shared dict set: found old entry bug value size "
1017
- "NOT matched, removing it first");
1018
-
1019
- remove:
1020
-
1021
- ngx_queue_remove(&sd->queue);
1022
-
1023
- node = (ngx_rbtree_node_t *)
1024
- ((u_char *) sd - offsetof(ngx_rbtree_node_t, color));
1025
-
1026
- ngx_rbtree_delete(&ctx->sh->rbtree, node);
1027
-
1028
- ngx_slab_free_locked(ctx->shpool, node);
1029
-
1030
- }
1031
-
1032
- insert:
1033
-
1034
- /* rc == NGX_DECLINED or value size unmatch */
1035
-
1036
- if (value.data == NULL) {
1037
- ngx_shmtx_unlock(&ctx->shpool->mutex);
1038
-
1039
- lua_pushboolean(L, 1);
1040
- lua_pushnil(L);
1041
- lua_pushboolean(L, 0);
1042
- return 3;
1043
- }
1044
-
1045
- ngx_log_debug0(NGX_LOG_DEBUG_HTTP, ctx->log, 0,
1046
- "lua shared dict set: creating a new entry");
1047
-
1048
- n = offsetof(ngx_rbtree_node_t, color)
1049
- + offsetof(ngx_http_lua_shdict_node_t, data)
1050
- + key.len
1051
- + value.len;
1052
-
1053
- node = ngx_slab_alloc_locked(ctx->shpool, n);
1054
-
1055
- if (node == NULL) {
1056
-
1057
- if (flags & NGX_HTTP_LUA_SHDICT_SAFE_STORE) {
1058
- ngx_shmtx_unlock(&ctx->shpool->mutex);
1059
-
1060
- lua_pushboolean(L, 0);
1061
- lua_pushliteral(L, "no memory");
1062
- return 2;
1063
- }
1064
-
1065
- ngx_log_debug1(NGX_LOG_DEBUG_HTTP, ctx->log, 0,
1066
- "lua shared dict set: overriding non-expired items "
1067
- "due to memory shortage for entry \"%V\"", &key);
1068
-
1069
- for (i = 0; i < 30; i++) {
1070
- if (ngx_http_lua_shdict_expire(ctx, 0) == 0) {
1071
- break;
1072
- }
1073
-
1074
- forcible = 1;
1075
-
1076
- node = ngx_slab_alloc_locked(ctx->shpool, n);
1077
- if (node != NULL) {
1078
- goto allocated;
1079
- }
1080
- }
1081
-
1082
- ngx_shmtx_unlock(&ctx->shpool->mutex);
1083
-
1084
- lua_pushboolean(L, 0);
1085
- lua_pushliteral(L, "no memory");
1086
- lua_pushboolean(L, forcible);
1087
- return 3;
1088
- }
1089
-
1090
- allocated:
1091
-
1092
- sd = (ngx_http_lua_shdict_node_t *) &node->color;
1093
-
1094
- node->key = hash;
1095
- sd->key_len = (u_short) key.len;
1096
-
1097
- if (exptime > 0) {
1098
- tp = ngx_timeofday();
1099
- sd->expires = (uint64_t) tp->sec * 1000 + tp->msec
1100
- + (uint64_t) (exptime * 1000);
1101
-
1102
- } else {
1103
- sd->expires = 0;
1104
- }
1105
-
1106
- sd->user_flags = user_flags;
1107
-
1108
- sd->value_len = (uint32_t) value.len;
1109
-
1110
- dd("setting value type to %d", value_type);
1111
-
1112
- sd->value_type = (uint8_t) value_type;
1113
-
1114
- p = ngx_copy(sd->data, key.data, key.len);
1115
- ngx_memcpy(p, value.data, value.len);
1116
-
1117
- ngx_rbtree_insert(&ctx->sh->rbtree, node);
1118
-
1119
- ngx_queue_insert_head(&ctx->sh->queue, &sd->queue);
1120
-
1121
- ngx_shmtx_unlock(&ctx->shpool->mutex);
1122
-
1123
- lua_pushboolean(L, 1);
1124
- lua_pushnil(L);
1125
- lua_pushboolean(L, forcible);
1126
- return 3;
1127
- }
1128
-
1129
-
1130
- static int
1131
- ngx_http_lua_shdict_incr(lua_State *L)
1132
- {
1133
- int n;
1134
- ngx_str_t key;
1135
- uint32_t hash;
1136
- ngx_int_t rc;
1137
- ngx_http_lua_shdict_ctx_t *ctx;
1138
- ngx_http_lua_shdict_node_t *sd;
1139
- double num;
1140
- u_char *p;
1141
- ngx_shm_zone_t *zone;
1142
- double value;
1143
-
1144
- n = lua_gettop(L);
1145
-
1146
- if (n != 3) {
1147
- return luaL_error(L, "expecting 3 arguments, but only seen %d", n);
1148
- }
1149
-
1150
- if (lua_type(L, 1) != LUA_TLIGHTUSERDATA) {
1151
- return luaL_error(L, "bad \"zone\" argument");
1152
- }
1153
-
1154
- zone = lua_touserdata(L, 1);
1155
- if (zone == NULL) {
1156
- return luaL_error(L, "bad user data for the ngx_shm_zone_t pointer");
1157
- }
1158
-
1159
- ctx = zone->data;
1160
-
1161
- if (lua_isnil(L, 2)) {
1162
- lua_pushnil(L);
1163
- lua_pushliteral(L, "nil key");
1164
- return 2;
1165
- }
1166
-
1167
- key.data = (u_char *) luaL_checklstring(L, 2, &key.len);
1168
-
1169
- if (key.len == 0) {
1170
- lua_pushnil(L);
1171
- lua_pushliteral(L, "empty key");
1172
- return 2;
1173
- }
1174
-
1175
- if (key.len > 65535) {
1176
- lua_pushnil(L);
1177
- lua_pushliteral(L, "key too long");
1178
- return 2;
1179
- }
1180
-
1181
- hash = ngx_crc32_short(key.data, key.len);
1182
-
1183
- value = luaL_checknumber(L, 3);
1184
-
1185
- dd("looking up key %.*s in shared dict %.*s", (int) key.len, key.data,
1186
- (int) ctx->name.len, ctx->name.data);
1187
-
1188
- ngx_shmtx_lock(&ctx->shpool->mutex);
1189
-
1190
- #if 1
1191
- ngx_http_lua_shdict_expire(ctx, 1);
1192
- #endif
1193
-
1194
- rc = ngx_http_lua_shdict_lookup(zone, hash, key.data, key.len, &sd);
1195
-
1196
- dd("shdict lookup returned %d", (int) rc);
1197
-
1198
- if (rc == NGX_DECLINED || rc == NGX_DONE) {
1199
- ngx_shmtx_unlock(&ctx->shpool->mutex);
1200
-
1201
- lua_pushnil(L);
1202
- lua_pushliteral(L, "not found");
1203
- return 2;
1204
- }
1205
-
1206
- /* rc == NGX_OK */
1207
-
1208
- if (sd->value_type != LUA_TNUMBER || sd->value_len != sizeof(double)) {
1209
- ngx_shmtx_unlock(&ctx->shpool->mutex);
1210
-
1211
- lua_pushnil(L);
1212
- lua_pushliteral(L, "not a number");
1213
- return 2;
1214
- }
1215
-
1216
- ngx_queue_remove(&sd->queue);
1217
- ngx_queue_insert_head(&ctx->sh->queue, &sd->queue);
1218
-
1219
- dd("setting value type to %d", (int) sd->value_type);
1220
-
1221
- p = sd->data + key.len;
1222
-
1223
- ngx_memcpy(&num, p, sizeof(double));
1224
- num += value;
1225
-
1226
- ngx_memcpy(p, (double *) &num, sizeof(double));
1227
-
1228
- ngx_shmtx_unlock(&ctx->shpool->mutex);
1229
-
1230
- lua_pushnumber(L, num);
1231
- lua_pushnil(L);
1232
- return 2;
1233
- }
1234
-
1235
-
1236
- ngx_int_t
1237
- ngx_http_lua_shared_dict_get(ngx_shm_zone_t *zone, u_char *key_data,
1238
- size_t key_len, ngx_http_lua_value_t *value)
1239
- {
1240
- u_char *data;
1241
- size_t len;
1242
- uint32_t hash;
1243
- ngx_int_t rc;
1244
- ngx_http_lua_shdict_ctx_t *ctx;
1245
- ngx_http_lua_shdict_node_t *sd;
1246
-
1247
- if (zone == NULL) {
1248
- return NGX_ERROR;
1249
- }
1250
-
1251
- hash = ngx_crc32_short(key_data, key_len);
1252
-
1253
- ctx = zone->data;
1254
-
1255
- ngx_shmtx_lock(&ctx->shpool->mutex);
1256
-
1257
- rc = ngx_http_lua_shdict_lookup(zone, hash, key_data, key_len, &sd);
1258
-
1259
- dd("shdict lookup returned %d", (int) rc);
1260
-
1261
- if (rc == NGX_DECLINED || rc == NGX_DONE) {
1262
- ngx_shmtx_unlock(&ctx->shpool->mutex);
1263
-
1264
- return rc;
1265
- }
1266
-
1267
- /* rc == NGX_OK */
1268
-
1269
- value->type = sd->value_type;
1270
-
1271
- dd("type: %d", (int) value->type);
1272
-
1273
- data = sd->data + sd->key_len;
1274
- len = (size_t) sd->value_len;
1275
-
1276
- switch (value->type) {
1277
- case LUA_TSTRING:
1278
-
1279
- if (value->value.s.data == NULL || value->value.s.len == 0) {
1280
- ngx_log_error(NGX_LOG_ERR, ngx_cycle->log, 0, "no string buffer "
1281
- "initialized");
1282
- ngx_shmtx_unlock(&ctx->shpool->mutex);
1283
- return NGX_ERROR;
1284
- }
1285
-
1286
- if (len > value->value.s.len) {
1287
- len = value->value.s.len;
1288
-
1289
- } else {
1290
- value->value.s.len = len;
1291
- }
1292
-
1293
- ngx_memcpy(value->value.s.data, data, len);
1294
- break;
1295
-
1296
- case LUA_TNUMBER:
1297
-
1298
- if (len != sizeof(double)) {
1299
- ngx_log_error(NGX_LOG_ERR, ngx_cycle->log, 0, "bad lua number "
1300
- "value size found for key %*s: %lu", key_len,
1301
- key_data, (unsigned long) len);
1302
-
1303
- ngx_shmtx_unlock(&ctx->shpool->mutex);
1304
- return NGX_ERROR;
1305
- }
1306
-
1307
- ngx_memcpy(&value->value.b, data, len);
1308
- break;
1309
-
1310
- case LUA_TBOOLEAN:
1311
-
1312
- if (len != sizeof(u_char)) {
1313
- ngx_log_error(NGX_LOG_ERR, ngx_cycle->log, 0, "bad lua boolean "
1314
- "value size found for key %*s: %lu", key_len,
1315
- key_data, (unsigned long) len);
1316
-
1317
- ngx_shmtx_unlock(&ctx->shpool->mutex);
1318
- return NGX_ERROR;
1319
- }
1320
-
1321
- value->value.b = *data;
1322
- break;
1323
-
1324
- default:
1325
- ngx_log_error(NGX_LOG_ERR, ngx_cycle->log, 0, "bad lua value type "
1326
- "found for key %*s: %d", key_len, key_data,
1327
- (int) value->type);
1328
-
1329
- ngx_shmtx_unlock(&ctx->shpool->mutex);
1330
- return NGX_ERROR;
1331
- }
1332
-
1333
- ngx_shmtx_unlock(&ctx->shpool->mutex);
1334
- return NGX_OK;
1335
- }
1336
-
1337
-
1338
- ngx_shm_zone_t *
1339
- ngx_http_lua_find_zone(u_char *name_data, size_t name_len)
1340
- {
1341
- ngx_str_t *name;
1342
- ngx_uint_t i;
1343
- ngx_shm_zone_t *zone;
1344
- volatile ngx_list_part_t *part;
1345
-
1346
- part = &ngx_cycle->shared_memory.part;
1347
- zone = part->elts;
1348
-
1349
- for (i = 0; /* void */ ; i++) {
1350
-
1351
- if (i >= part->nelts) {
1352
- if (part->next == NULL) {
1353
- break;
1354
- }
1355
-
1356
- part = part->next;
1357
- zone = part->elts;
1358
- i = 0;
1359
- }
1360
-
1361
- name = &zone[i].shm.name;
1362
-
1363
- dd("name: [%.*s] %d", (int) name->len, name->data, (int) name->len);
1364
- dd("name2: [%.*s] %d", (int) name_len, name_data, (int) name_len);
1365
-
1366
- if (name->len == name_len
1367
- && ngx_strncmp(name->data, name_data, name_len) == 0)
1368
- {
1369
- return zone;
1370
- }
1371
- }
1372
-
1373
- return NULL;
1374
- }
1375
-
1376
-
1377
- #ifndef NGX_LUA_NO_FFI_API
1378
- int
1379
- ngx_http_lua_ffi_shdict_store(ngx_shm_zone_t *zone, int op, u_char *key,
1380
- size_t key_len, int value_type, u_char *str_value_buf,
1381
- size_t str_value_len, double num_value, int exptime, int user_flags,
1382
- char **errmsg, int *forcible)
1383
- {
1384
- int i, n;
1385
- u_char c, *p;
1386
- uint32_t hash;
1387
- ngx_int_t rc;
1388
- ngx_time_t *tp;
1389
- ngx_rbtree_node_t *node;
1390
- ngx_http_lua_shdict_ctx_t *ctx;
1391
- ngx_http_lua_shdict_node_t *sd;
1392
-
1393
- if (zone == NULL) {
1394
- return NGX_ERROR;
1395
- }
1396
-
1397
- dd("exptime: %d", exptime);
1398
-
1399
- ctx = zone->data;
1400
-
1401
- *forcible = 0;
1402
-
1403
- hash = ngx_crc32_short(key, key_len);
1404
-
1405
- switch (value_type) {
1406
- case LUA_TSTRING:
1407
- /* do nothing */
1408
- break;
1409
-
1410
- case LUA_TNUMBER:
1411
- dd("num value: %lf", num_value);
1412
- str_value_buf = (u_char *) &num_value;
1413
- str_value_len = sizeof(double);
1414
- break;
1415
-
1416
- case LUA_TBOOLEAN:
1417
- c = num_value ? 1 : 0;
1418
- str_value_buf = &c;
1419
- str_value_len = sizeof(u_char);
1420
- break;
1421
-
1422
- case LUA_TNIL:
1423
- if (op & (NGX_HTTP_LUA_SHDICT_ADD|NGX_HTTP_LUA_SHDICT_REPLACE)) {
1424
- *errmsg = "attempt to add or replace nil values";
1425
- return NGX_ERROR;
1426
- }
1427
-
1428
- str_value_buf = NULL;
1429
- str_value_len = 0;
1430
- break;
1431
-
1432
- default:
1433
- *errmsg = "unsupported value type";
1434
- return NGX_ERROR;
1435
- }
1436
-
1437
- ngx_shmtx_lock(&ctx->shpool->mutex);
1438
-
1439
- #if 1
1440
- ngx_http_lua_shdict_expire(ctx, 1);
1441
- #endif
1442
-
1443
- rc = ngx_http_lua_shdict_lookup(zone, hash, key, key_len, &sd);
1444
-
1445
- dd("lookup returns %d", (int) rc);
1446
-
1447
- if (op & NGX_HTTP_LUA_SHDICT_REPLACE) {
1448
-
1449
- if (rc == NGX_DECLINED || rc == NGX_DONE) {
1450
- ngx_shmtx_unlock(&ctx->shpool->mutex);
1451
- *errmsg = "not found";
1452
- return NGX_DECLINED;
1453
- }
1454
- /* rc == NGX_OK */
1455
-
1456
- goto replace;
1457
- }
1458
-
1459
- if (op & NGX_HTTP_LUA_SHDICT_ADD) {
1460
-
1461
- if (rc == NGX_OK) {
1462
- ngx_shmtx_unlock(&ctx->shpool->mutex);
1463
- *errmsg = "exists";
1464
- return NGX_DECLINED;
1465
- }
1466
-
1467
- if (rc == NGX_DONE) {
1468
- /* exists but expired */
1469
-
1470
- dd("go to replace");
1471
- goto replace;
1472
- }
1473
-
1474
- /* rc == NGX_DECLINED */
1475
-
1476
- dd("go to insert");
1477
- goto insert;
1478
- }
1479
-
1480
- if (rc == NGX_OK || rc == NGX_DONE) {
1481
-
1482
- if (value_type == LUA_TNIL) {
1483
- goto remove;
1484
- }
1485
-
1486
- replace:
1487
-
1488
- if (str_value_buf && str_value_len == (size_t) sd->value_len) {
1489
-
1490
- ngx_log_debug0(NGX_LOG_DEBUG_HTTP, ctx->log, 0,
1491
- "lua shared dict set: found old entry and value "
1492
- "size matched, reusing it");
1493
-
1494
- ngx_queue_remove(&sd->queue);
1495
- ngx_queue_insert_head(&ctx->sh->queue, &sd->queue);
1496
-
1497
- sd->key_len = (u_short) key_len;
1498
-
1499
- if (exptime > 0) {
1500
- tp = ngx_timeofday();
1501
- sd->expires = (uint64_t) tp->sec * 1000 + tp->msec
1502
- + (uint64_t) exptime;
1503
-
1504
- } else {
1505
- sd->expires = 0;
1506
- }
1507
-
1508
- sd->user_flags = user_flags;
1509
-
1510
- sd->value_len = (uint32_t) str_value_len;
1511
-
1512
- dd("setting value type to %d", value_type);
1513
-
1514
- sd->value_type = (uint8_t) value_type;
1515
-
1516
- p = ngx_copy(sd->data, key, key_len);
1517
- ngx_memcpy(p, str_value_buf, str_value_len);
1518
-
1519
- ngx_shmtx_unlock(&ctx->shpool->mutex);
1520
-
1521
- return NGX_OK;
1522
- }
1523
-
1524
- ngx_log_debug0(NGX_LOG_DEBUG_HTTP, ctx->log, 0,
1525
- "lua shared dict set: found old entry bug value size "
1526
- "NOT matched, removing it first");
1527
-
1528
- remove:
1529
-
1530
- ngx_queue_remove(&sd->queue);
1531
-
1532
- node = (ngx_rbtree_node_t *)
1533
- ((u_char *) sd - offsetof(ngx_rbtree_node_t, color));
1534
-
1535
- ngx_rbtree_delete(&ctx->sh->rbtree, node);
1536
-
1537
- ngx_slab_free_locked(ctx->shpool, node);
1538
-
1539
- }
1540
-
1541
- insert:
1542
-
1543
- /* rc == NGX_DECLINED or value size unmatch */
1544
-
1545
- if (str_value_buf == NULL) {
1546
- ngx_shmtx_unlock(&ctx->shpool->mutex);
1547
- return NGX_OK;
1548
- }
1549
-
1550
- ngx_log_debug0(NGX_LOG_DEBUG_HTTP, ctx->log, 0,
1551
- "lua shared dict set: creating a new entry");
1552
-
1553
- n = offsetof(ngx_rbtree_node_t, color)
1554
- + offsetof(ngx_http_lua_shdict_node_t, data)
1555
- + key_len
1556
- + str_value_len;
1557
-
1558
- node = ngx_slab_alloc_locked(ctx->shpool, n);
1559
-
1560
- if (node == NULL) {
1561
-
1562
- if (op & NGX_HTTP_LUA_SHDICT_SAFE_STORE) {
1563
- ngx_shmtx_unlock(&ctx->shpool->mutex);
1564
-
1565
- *errmsg = "no memory";
1566
- return NGX_ERROR;
1567
- }
1568
-
1569
- ngx_log_debug2(NGX_LOG_DEBUG_HTTP, ctx->log, 0,
1570
- "lua shared dict set: overriding non-expired items "
1571
- "due to memory shortage for entry \"%*s\"", key_len,
1572
- key);
1573
-
1574
- for (i = 0; i < 30; i++) {
1575
- if (ngx_http_lua_shdict_expire(ctx, 0) == 0) {
1576
- break;
1577
- }
1578
-
1579
- *forcible = 1;
1580
-
1581
- node = ngx_slab_alloc_locked(ctx->shpool, n);
1582
- if (node != NULL) {
1583
- goto allocated;
1584
- }
1585
- }
1586
-
1587
- ngx_shmtx_unlock(&ctx->shpool->mutex);
1588
-
1589
- *errmsg = "no memory";
1590
- return NGX_ERROR;
1591
- }
1592
-
1593
- allocated:
1594
-
1595
- sd = (ngx_http_lua_shdict_node_t *) &node->color;
1596
-
1597
- node->key = hash;
1598
- sd->key_len = (u_short) key_len;
1599
-
1600
- if (exptime > 0) {
1601
- tp = ngx_timeofday();
1602
- sd->expires = (uint64_t) tp->sec * 1000 + tp->msec
1603
- + (uint64_t) exptime;
1604
-
1605
- } else {
1606
- sd->expires = 0;
1607
- }
1608
-
1609
- sd->user_flags = user_flags;
1610
- sd->value_len = (uint32_t) str_value_len;
1611
- dd("setting value type to %d", value_type);
1612
- sd->value_type = (uint8_t) value_type;
1613
-
1614
- p = ngx_copy(sd->data, key, key_len);
1615
- ngx_memcpy(p, str_value_buf, str_value_len);
1616
-
1617
- ngx_rbtree_insert(&ctx->sh->rbtree, node);
1618
- ngx_queue_insert_head(&ctx->sh->queue, &sd->queue);
1619
- ngx_shmtx_unlock(&ctx->shpool->mutex);
1620
-
1621
- return NGX_OK;
1622
- }
1623
-
1624
-
1625
- int
1626
- ngx_http_lua_ffi_shdict_get(ngx_shm_zone_t *zone, u_char *key,
1627
- size_t key_len, int *value_type, u_char **str_value_buf,
1628
- size_t *str_value_len, double *num_value, int *user_flags,
1629
- int get_stale, int *is_stale)
1630
- {
1631
- ngx_str_t name;
1632
- uint32_t hash;
1633
- ngx_int_t rc;
1634
- ngx_http_lua_shdict_ctx_t *ctx;
1635
- ngx_http_lua_shdict_node_t *sd;
1636
- ngx_str_t value;
1637
-
1638
- if (zone == NULL) {
1639
- return NGX_ERROR;
1640
- }
1641
-
1642
- ctx = zone->data;
1643
- name = ctx->name;
1644
-
1645
- hash = ngx_crc32_short(key, key_len);
1646
-
1647
- #if (NGX_DEBUG)
1648
- ngx_log_debug3(NGX_LOG_DEBUG_HTTP, ctx->log, 0,
1649
- "fetching key \"%*s\" in shared dict \"%V\"", key_len,
1650
- key, &name);
1651
- #endif /* NGX_DEBUG */
1652
-
1653
- ngx_shmtx_lock(&ctx->shpool->mutex);
1654
-
1655
- #if 1
1656
- if (!get_stale) {
1657
- ngx_http_lua_shdict_expire(ctx, 1);
1658
- }
1659
- #endif
1660
-
1661
- rc = ngx_http_lua_shdict_lookup(zone, hash, key, key_len, &sd);
1662
-
1663
- dd("shdict lookup returns %d", (int) rc);
1664
-
1665
- if (rc == NGX_DECLINED || (rc == NGX_DONE && !get_stale)) {
1666
- ngx_shmtx_unlock(&ctx->shpool->mutex);
1667
- *value_type = LUA_TNIL;
1668
- return NGX_OK;
1669
- }
1670
-
1671
- /* rc == NGX_OK || (rc == NGX_DONE && get_stale) */
1672
-
1673
- *value_type = sd->value_type;
1674
-
1675
- dd("data: %p", sd->data);
1676
- dd("key len: %d", (int) sd->key_len);
1677
-
1678
- value.data = sd->data + sd->key_len;
1679
- value.len = (size_t) sd->value_len;
1680
-
1681
- if (*str_value_len < (size_t) value.len) {
1682
- if (*value_type == LUA_TBOOLEAN) {
1683
- ngx_shmtx_unlock(&ctx->shpool->mutex);
1684
- return NGX_ERROR;
1685
- }
1686
-
1687
- if (*value_type == LUA_TSTRING) {
1688
- *str_value_buf = malloc(value.len);
1689
- if (*str_value_buf == NULL) {
1690
- ngx_shmtx_unlock(&ctx->shpool->mutex);
1691
- return NGX_ERROR;
1692
- }
1693
- }
1694
- }
1695
-
1696
- switch (*value_type) {
1697
- case LUA_TSTRING:
1698
- *str_value_len = value.len;
1699
- ngx_memcpy(*str_value_buf, value.data, value.len);
1700
- break;
1701
-
1702
- case LUA_TNUMBER:
1703
-
1704
- if (value.len != sizeof(double)) {
1705
- ngx_shmtx_unlock(&ctx->shpool->mutex);
1706
- ngx_log_error(NGX_LOG_ERR, ngx_cycle->log, 0,
1707
- "bad lua number value size found for key %*s "
1708
- "in shared_dict %V: %z", key_len, key,
1709
- &name, value.len);
1710
- return NGX_ERROR;
1711
- }
1712
-
1713
- *str_value_len = value.len;
1714
- ngx_memcpy(num_value, value.data, sizeof(double));
1715
- break;
1716
-
1717
- case LUA_TBOOLEAN:
1718
-
1719
- if (value.len != sizeof(u_char)) {
1720
- ngx_shmtx_unlock(&ctx->shpool->mutex);
1721
- ngx_log_error(NGX_LOG_ERR, ngx_cycle->log, 0,
1722
- "bad lua boolean value size found for key %*s "
1723
- "in shared_dict %V: %z", key_len, key, &name,
1724
- value.len);
1725
- return NGX_ERROR;
1726
- }
1727
-
1728
- ngx_memcpy(*str_value_buf, value.data, value.len);
1729
- break;
1730
-
1731
- default:
1732
-
1733
- ngx_shmtx_unlock(&ctx->shpool->mutex);
1734
- ngx_log_error(NGX_LOG_ERR, ngx_cycle->log, 0,
1735
- "bad value type found for key %*s in "
1736
- "shared_dict %V: %d", key_len, key, &name,
1737
- *value_type);
1738
- return NGX_ERROR;
1739
- }
1740
-
1741
- *user_flags = sd->user_flags;
1742
- dd("user flags: %d", *user_flags);
1743
-
1744
- ngx_shmtx_unlock(&ctx->shpool->mutex);
1745
-
1746
- if (get_stale) {
1747
-
1748
- /* always return value, flags, stale */
1749
-
1750
- *is_stale = (rc == NGX_DONE);
1751
- return NGX_OK;
1752
- }
1753
-
1754
- return NGX_OK;
1755
- }
1756
-
1757
-
1758
- int
1759
- ngx_http_lua_ffi_shdict_incr(ngx_shm_zone_t *zone, u_char *key,
1760
- size_t key_len, double *value, char **err)
1761
- {
1762
- uint32_t hash;
1763
- ngx_int_t rc;
1764
- ngx_http_lua_shdict_ctx_t *ctx;
1765
- ngx_http_lua_shdict_node_t *sd;
1766
- double num;
1767
- u_char *p;
1768
-
1769
- ctx = zone->data;
1770
- hash = ngx_crc32_short(key, key_len);
1771
-
1772
- dd("looking up key %.*s in shared dict %.*s", (int) key_len, key,
1773
- (int) ctx->name.len, ctx->name.data);
1774
-
1775
- ngx_shmtx_lock(&ctx->shpool->mutex);
1776
- #if 1
1777
- ngx_http_lua_shdict_expire(ctx, 1);
1778
- #endif
1779
- rc = ngx_http_lua_shdict_lookup(zone, hash, key, key_len, &sd);
1780
-
1781
- dd("shdict lookup returned %d", (int) rc);
1782
-
1783
- if (rc == NGX_DECLINED || rc == NGX_DONE) {
1784
- ngx_shmtx_unlock(&ctx->shpool->mutex);
1785
- *err = "not found";
1786
- return NGX_ERROR;
1787
- }
1788
-
1789
- /* rc == NGX_OK */
1790
-
1791
- if (sd->value_type != LUA_TNUMBER || sd->value_len != sizeof(double)) {
1792
- ngx_shmtx_unlock(&ctx->shpool->mutex);
1793
- *err = "not a number";
1794
- return NGX_ERROR;
1795
- }
1796
-
1797
- ngx_queue_remove(&sd->queue);
1798
- ngx_queue_insert_head(&ctx->sh->queue, &sd->queue);
1799
-
1800
- dd("setting value type to %d", (int) sd->value_type);
1801
-
1802
- p = sd->data + key_len;
1803
-
1804
- ngx_memcpy(&num, p, sizeof(double));
1805
- num += *value;
1806
-
1807
- ngx_memcpy(p, (double *) &num, sizeof(double));
1808
-
1809
- ngx_shmtx_unlock(&ctx->shpool->mutex);
1810
-
1811
- *value = num;
1812
- return NGX_OK;
1813
- }
1814
-
1815
-
1816
- int
1817
- ngx_http_lua_ffi_shdict_flush_all(ngx_shm_zone_t *zone)
1818
- {
1819
- ngx_queue_t *q;
1820
- ngx_http_lua_shdict_node_t *sd;
1821
- ngx_http_lua_shdict_ctx_t *ctx;
1822
-
1823
- ctx = zone->data;
1824
-
1825
- ngx_shmtx_lock(&ctx->shpool->mutex);
1826
-
1827
- for (q = ngx_queue_head(&ctx->sh->queue);
1828
- q != ngx_queue_sentinel(&ctx->sh->queue);
1829
- q = ngx_queue_next(q))
1830
- {
1831
- sd = ngx_queue_data(q, ngx_http_lua_shdict_node_t, queue);
1832
- sd->expires = 1;
1833
- }
1834
-
1835
- ngx_http_lua_shdict_expire(ctx, 0);
1836
-
1837
- ngx_shmtx_unlock(&ctx->shpool->mutex);
1838
-
1839
- return NGX_OK;
1840
- }
1841
- #endif /* NGX_LUA_NO_FFI_API */
1842
-
1843
-
1844
- /* vi:set ft=c ts=4 sw=4 et fdm=marker: */