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.
- checksums.yaml +8 -8
- checksums.yaml.gz.asc +7 -7
- data.tar.gz.asc +7 -7
- data/.editorconfig +5 -0
- data/.travis.yml +3 -2
- data/CHANGELOG +31 -53
- data/CONTRIBUTING.md +4 -4
- data/CONTRIBUTORS +0 -1
- data/Gemfile +18 -0
- data/Gemfile.lock +41 -0
- data/Rakefile +16 -0
- data/bin/passenger +2 -2
- data/bin/passenger-install-apache2-module +12 -12
- data/bin/passenger-install-nginx-module +9 -14
- data/bin/passenger-status +125 -87
- data/build/agents.rb +112 -140
- data/build/apache2.rb +4 -9
- data/build/basics.rb +5 -3
- data/build/common_library.rb +1 -0
- data/build/cxx_tests.rb +69 -47
- data/build/debian.rb +4 -2
- data/build/documentation.rb +1 -0
- data/build/integration_tests.rb +28 -43
- data/build/misc.rb +0 -18
- data/build/nginx.rb +2 -6
- data/build/packaging.rb +33 -22
- data/build/preprocessor.rb +2 -4
- data/build/ruby_tests.rb +7 -26
- data/build/test_basics.rb +24 -25
- data/debian.template/control.template +2 -2
- data/debian.template/locations.ini.template +2 -3
- data/debian.template/passenger.install.template +2 -2
- data/debian.template/rules.template +1 -1
- data/dev/ci/run_jenkins.sh +0 -1
- data/dev/ci/run_rpm_tests.sh +3 -0
- data/dev/ci/run_travis.sh +63 -17
- data/dev/copy_boost_headers +22 -6
- data/dev/ruby_server.rb +244 -0
- data/dev/vagrant/provision.sh +3 -1
- data/doc/DebuggingAndStressTesting.md +3 -3
- data/doc/Design and Architecture.txt +5 -6
- data/doc/Packaging.txt.md +35 -6
- data/doc/ServerOptimizationGuide.txt.md +339 -0
- data/doc/Users guide Apache.idmap.txt +177 -187
- data/doc/Users guide Apache.txt +143 -219
- data/doc/Users guide Nginx.idmap.txt +166 -166
- data/doc/Users guide Nginx.txt +265 -223
- data/doc/Users guide Standalone.txt +3 -3
- data/doc/templates/markdown.html.erb +37 -6
- data/doc/users_guide_snippets/environment_variables.txt +1 -1
- data/doc/users_guide_snippets/support_information.txt +1 -1
- data/doc/users_guide_snippets/tips.txt +2 -2
- data/ext/apache2/Configuration.cpp +23 -81
- data/ext/apache2/Configuration.hpp +18 -92
- data/ext/apache2/ConfigurationCommands.cpp +64 -15
- data/ext/apache2/ConfigurationCommands.cpp.erb +8 -4
- data/ext/apache2/ConfigurationFields.hpp +12 -0
- data/ext/apache2/ConfigurationSetters.cpp +73 -1
- data/ext/apache2/ConfigurationSetters.cpp.erb +3 -2
- data/ext/apache2/CreateDirConfig.cpp +6 -0
- data/ext/apache2/DirectoryMapper.h +11 -6
- data/ext/apache2/Hooks.cpp +291 -408
- data/ext/apache2/MergeDirConfig.cpp +42 -0
- data/ext/apache2/SetHeaders.cpp +61 -16
- data/ext/apache2/SetHeaders.cpp.erb +9 -7
- data/ext/boost/container/allocator_traits.hpp +400 -0
- data/ext/boost/container/deque.hpp +2012 -0
- data/ext/boost/container/detail/adaptive_node_pool_impl.hpp +874 -0
- data/ext/boost/container/detail/advanced_insert_int.hpp +369 -0
- data/ext/boost/container/detail/algorithms.hpp +84 -0
- data/ext/boost/container/detail/allocation_type.hpp +54 -0
- data/ext/boost/container/detail/allocator_version_traits.hpp +163 -0
- data/ext/boost/container/detail/config_begin.hpp +49 -0
- data/ext/boost/container/detail/config_end.hpp +17 -0
- data/ext/boost/container/detail/destroyers.hpp +365 -0
- data/ext/boost/container/detail/flat_tree.hpp +1055 -0
- data/ext/boost/container/detail/function_detector.hpp +88 -0
- data/ext/boost/container/detail/iterators.hpp +611 -0
- data/ext/boost/container/detail/math_functions.hpp +113 -0
- data/ext/boost/container/detail/memory_util.hpp +83 -0
- data/ext/boost/container/detail/mpl.hpp +160 -0
- data/ext/boost/container/detail/multiallocation_chain.hpp +286 -0
- data/ext/boost/container/detail/node_alloc_holder.hpp +386 -0
- data/ext/boost/container/detail/node_pool_impl.hpp +365 -0
- data/ext/boost/container/detail/pair.hpp +354 -0
- data/ext/boost/container/detail/pool_common.hpp +52 -0
- data/ext/boost/container/detail/preprocessor.hpp +232 -0
- data/ext/boost/container/detail/transform_iterator.hpp +176 -0
- data/ext/boost/container/detail/tree.hpp +1134 -0
- data/ext/boost/container/detail/type_traits.hpp +210 -0
- data/ext/boost/container/detail/utilities.hpp +1141 -0
- data/ext/boost/container/detail/value_init.hpp +45 -0
- data/ext/boost/container/detail/variadic_templates_tools.hpp +153 -0
- data/ext/boost/container/detail/version_type.hpp +92 -0
- data/ext/boost/container/detail/workaround.hpp +44 -0
- data/ext/boost/container/flat_map.hpp +1674 -0
- data/ext/boost/container/flat_set.hpp +1408 -0
- data/ext/boost/container/list.hpp +1475 -0
- data/ext/boost/container/map.hpp +1508 -0
- data/ext/boost/container/scoped_allocator.hpp +1503 -0
- data/ext/boost/container/scoped_allocator_fwd.hpp +83 -0
- data/ext/boost/container/set.hpp +1280 -0
- data/ext/boost/container/slist.hpp +1706 -0
- data/ext/boost/container/stable_vector.hpp +1869 -0
- data/ext/boost/container/static_vector.hpp +1053 -0
- data/ext/boost/container/string.hpp +2856 -0
- data/ext/boost/container/throw_exception.hpp +110 -0
- data/ext/boost/container/vector.hpp +2671 -0
- data/ext/boost/detail/is_xxx.hpp +61 -0
- data/ext/boost/intrusive/any_hook.hpp +344 -0
- data/ext/boost/intrusive/avl_set.hpp +2528 -0
- data/ext/boost/intrusive/avl_set_hook.hpp +297 -0
- data/ext/boost/intrusive/avltree.hpp +1786 -0
- data/ext/boost/intrusive/avltree_algorithms.hpp +968 -0
- data/ext/boost/intrusive/bs_set_hook.hpp +296 -0
- data/ext/boost/intrusive/circular_list_algorithms.hpp +413 -0
- data/ext/boost/intrusive/circular_slist_algorithms.hpp +404 -0
- data/ext/boost/intrusive/derivation_value_traits.hpp +70 -0
- data/ext/boost/intrusive/detail/any_node_and_algorithms.hpp +297 -0
- data/ext/boost/intrusive/detail/assert.hpp +41 -0
- data/ext/boost/intrusive/detail/avltree_node.hpp +197 -0
- data/ext/boost/intrusive/detail/clear_on_destructor_base.hpp +36 -0
- data/ext/boost/intrusive/detail/common_slist_algorithms.hpp +102 -0
- data/ext/boost/intrusive/detail/config_begin.hpp +52 -0
- data/ext/boost/intrusive/detail/config_end.hpp +15 -0
- data/ext/boost/intrusive/detail/ebo_functor_holder.hpp +95 -0
- data/ext/boost/intrusive/detail/function_detector.hpp +88 -0
- data/ext/boost/intrusive/detail/generic_hook.hpp +209 -0
- data/ext/boost/intrusive/detail/has_member_function_callable_with.hpp +357 -0
- data/ext/boost/intrusive/detail/hashtable_node.hpp +249 -0
- data/ext/boost/intrusive/detail/is_stateful_value_traits.hpp +77 -0
- data/ext/boost/intrusive/detail/list_node.hpp +196 -0
- data/ext/boost/intrusive/detail/memory_util.hpp +288 -0
- data/ext/boost/intrusive/detail/mpl.hpp +383 -0
- data/ext/boost/intrusive/detail/parent_from_member.hpp +97 -0
- data/ext/boost/intrusive/detail/preprocessor.hpp +52 -0
- data/ext/boost/intrusive/detail/rbtree_node.hpp +201 -0
- data/ext/boost/intrusive/detail/slist_node.hpp +166 -0
- data/ext/boost/intrusive/detail/transform_iterator.hpp +173 -0
- data/ext/boost/intrusive/detail/tree_algorithms.hpp +1742 -0
- data/ext/boost/intrusive/detail/tree_node.hpp +199 -0
- data/ext/boost/intrusive/detail/utilities.hpp +858 -0
- data/ext/boost/intrusive/detail/workaround.hpp +22 -0
- data/ext/boost/intrusive/hashtable.hpp +3110 -0
- data/ext/boost/intrusive/intrusive_fwd.hpp +542 -0
- data/ext/boost/intrusive/linear_slist_algorithms.hpp +327 -0
- data/ext/boost/intrusive/link_mode.hpp +46 -0
- data/ext/boost/intrusive/list.hpp +1525 -0
- data/ext/boost/intrusive/list_hook.hpp +290 -0
- data/ext/boost/intrusive/member_value_traits.hpp +70 -0
- data/ext/boost/intrusive/options.hpp +810 -0
- data/ext/boost/intrusive/parent_from_member.hpp +42 -0
- data/ext/boost/intrusive/pointer_plus_bits.hpp +86 -0
- data/ext/boost/intrusive/pointer_traits.hpp +265 -0
- data/ext/boost/intrusive/priority_compare.hpp +39 -0
- data/ext/boost/intrusive/rbtree.hpp +1785 -0
- data/ext/boost/intrusive/rbtree_algorithms.hpp +934 -0
- data/ext/boost/intrusive/set.hpp +2554 -0
- data/ext/boost/intrusive/set_hook.hpp +300 -0
- data/ext/boost/intrusive/sg_set.hpp +2601 -0
- data/ext/boost/intrusive/sgtree.hpp +2009 -0
- data/ext/boost/intrusive/sgtree_algorithms.hpp +807 -0
- data/ext/boost/intrusive/slist.hpp +2219 -0
- data/ext/boost/intrusive/slist_hook.hpp +294 -0
- data/ext/boost/intrusive/splay_set.hpp +2575 -0
- data/ext/boost/intrusive/splay_set_hook.hpp +292 -0
- data/ext/boost/intrusive/splaytree.hpp +1784 -0
- data/ext/boost/intrusive/splaytree_algorithms.hpp +1008 -0
- data/ext/boost/intrusive/treap.hpp +1882 -0
- data/ext/boost/intrusive/treap_algorithms.hpp +919 -0
- data/ext/boost/intrusive/treap_set.hpp +2751 -0
- data/ext/boost/intrusive/trivial_value_traits.hpp +46 -0
- data/ext/boost/intrusive/unordered_set.hpp +2115 -0
- data/ext/boost/intrusive/unordered_set_hook.hpp +434 -0
- data/ext/boost/intrusive_ptr.hpp +18 -0
- data/ext/boost/math/common_factor_ct.hpp +180 -0
- data/ext/boost/math_fwd.hpp +108 -0
- data/ext/boost/move/detail/move_helpers.hpp +175 -0
- data/ext/boost/parameter.hpp +21 -0
- data/ext/boost/parameter/aux_/arg_list.hpp +459 -0
- data/ext/boost/parameter/aux_/cast.hpp +143 -0
- data/ext/boost/parameter/aux_/default.hpp +69 -0
- data/ext/boost/parameter/aux_/is_maybe.hpp +26 -0
- data/ext/boost/parameter/aux_/maybe.hpp +120 -0
- data/ext/boost/parameter/aux_/overloads.hpp +88 -0
- data/ext/boost/parameter/aux_/parameter_requirements.hpp +25 -0
- data/ext/boost/parameter/aux_/parenthesized_type.hpp +119 -0
- data/ext/boost/parameter/aux_/preprocessor/flatten.hpp +115 -0
- data/ext/boost/parameter/aux_/preprocessor/for_each.hpp +103 -0
- data/ext/boost/parameter/aux_/python/invoker.hpp +132 -0
- data/ext/boost/parameter/aux_/python/invoker_iterate.hpp +93 -0
- data/ext/boost/parameter/aux_/result_of0.hpp +36 -0
- data/ext/boost/parameter/aux_/set.hpp +67 -0
- data/ext/boost/parameter/aux_/tag.hpp +38 -0
- data/ext/boost/parameter/aux_/tagged_argument.hpp +188 -0
- data/ext/boost/parameter/aux_/template_keyword.hpp +47 -0
- data/ext/boost/parameter/aux_/unwrap_cv_reference.hpp +97 -0
- data/ext/boost/parameter/aux_/void.hpp +29 -0
- data/ext/boost/parameter/aux_/yesno.hpp +26 -0
- data/ext/boost/parameter/binding.hpp +106 -0
- data/ext/boost/parameter/config.hpp +14 -0
- data/ext/boost/parameter/keyword.hpp +152 -0
- data/ext/boost/parameter/macros.hpp +99 -0
- data/ext/boost/parameter/match.hpp +55 -0
- data/ext/boost/parameter/name.hpp +156 -0
- data/ext/boost/parameter/parameters.hpp +931 -0
- data/ext/boost/parameter/preprocessor.hpp +1178 -0
- data/ext/boost/parameter/python.hpp +735 -0
- data/ext/boost/parameter/value_type.hpp +108 -0
- data/ext/boost/pool/detail/for.m4 +107 -0
- data/ext/boost/pool/detail/guard.hpp +69 -0
- data/ext/boost/pool/detail/mutex.hpp +42 -0
- data/ext/boost/pool/detail/pool_construct.bat +24 -0
- data/ext/boost/pool/detail/pool_construct.ipp +852 -0
- data/ext/boost/pool/detail/pool_construct.m4 +84 -0
- data/ext/boost/pool/detail/pool_construct.sh +12 -0
- data/ext/boost/pool/detail/pool_construct_simple.bat +25 -0
- data/ext/boost/pool/detail/pool_construct_simple.ipp +43 -0
- data/ext/boost/pool/detail/pool_construct_simple.m4 +72 -0
- data/ext/boost/pool/detail/pool_construct_simple.sh +12 -0
- data/ext/boost/pool/object_pool.hpp +287 -0
- data/ext/boost/pool/pool.hpp +1024 -0
- data/ext/boost/pool/pool_alloc.hpp +488 -0
- data/ext/boost/pool/poolfwd.hpp +82 -0
- data/ext/boost/pool/simple_segregated_storage.hpp +377 -0
- data/ext/boost/pool/singleton_pool.hpp +251 -0
- data/ext/boost/preprocessor/arithmetic.hpp +25 -0
- data/ext/boost/preprocessor/arithmetic/detail/div_base.hpp +61 -0
- data/ext/boost/preprocessor/arithmetic/div.hpp +39 -0
- data/ext/boost/preprocessor/arithmetic/mod.hpp +39 -0
- data/ext/boost/preprocessor/arithmetic/mul.hpp +53 -0
- data/ext/boost/preprocessor/array.hpp +32 -0
- data/ext/boost/preprocessor/array/enum.hpp +33 -0
- data/ext/boost/preprocessor/array/insert.hpp +55 -0
- data/ext/boost/preprocessor/array/pop_back.hpp +37 -0
- data/ext/boost/preprocessor/array/pop_front.hpp +38 -0
- data/ext/boost/preprocessor/array/push_back.hpp +33 -0
- data/ext/boost/preprocessor/array/push_front.hpp +33 -0
- data/ext/boost/preprocessor/array/remove.hpp +54 -0
- data/ext/boost/preprocessor/array/replace.hpp +49 -0
- data/ext/boost/preprocessor/array/reverse.hpp +29 -0
- data/ext/boost/preprocessor/array/to_list.hpp +33 -0
- data/ext/boost/preprocessor/array/to_seq.hpp +33 -0
- data/ext/boost/preprocessor/array/to_tuple.hpp +22 -0
- data/ext/boost/preprocessor/assert_msg.hpp +17 -0
- data/ext/boost/preprocessor/comma.hpp +17 -0
- data/ext/boost/preprocessor/comparison.hpp +24 -0
- data/ext/boost/preprocessor/comparison/equal.hpp +34 -0
- data/ext/boost/preprocessor/comparison/greater.hpp +38 -0
- data/ext/boost/preprocessor/comparison/greater_equal.hpp +38 -0
- data/ext/boost/preprocessor/comparison/less.hpp +46 -0
- data/ext/boost/preprocessor/comparison/less_equal.hpp +39 -0
- data/ext/boost/preprocessor/comparison/not_equal.hpp +814 -0
- data/ext/boost/preprocessor/config/limits.hpp +30 -0
- data/ext/boost/preprocessor/control.hpp +22 -0
- data/ext/boost/preprocessor/control/deduce_d.hpp +22 -0
- data/ext/boost/preprocessor/control/detail/dmc/while.hpp +536 -0
- data/ext/boost/preprocessor/control/detail/edg/while.hpp +534 -0
- data/ext/boost/preprocessor/control/detail/msvc/while.hpp +277 -0
- data/ext/boost/preprocessor/control/expr_if.hpp +30 -0
- data/ext/boost/preprocessor/debug.hpp +18 -0
- data/ext/boost/preprocessor/debug/assert.hpp +44 -0
- data/ext/boost/preprocessor/debug/line.hpp +35 -0
- data/ext/boost/preprocessor/detail/dmc/auto_rec.hpp +286 -0
- data/ext/boost/preprocessor/detail/is_nullary.hpp +30 -0
- data/ext/boost/preprocessor/detail/is_unary.hpp +30 -0
- data/ext/boost/preprocessor/detail/null.hpp +17 -0
- data/ext/boost/preprocessor/detail/split.hpp +35 -0
- data/ext/boost/preprocessor/enum_params_with_defaults.hpp +17 -0
- data/ext/boost/preprocessor/enum_shifted.hpp +17 -0
- data/ext/boost/preprocessor/expand.hpp +17 -0
- data/ext/boost/preprocessor/expr_if.hpp +17 -0
- data/ext/boost/preprocessor/facilities.hpp +23 -0
- data/ext/boost/preprocessor/facilities/apply.hpp +34 -0
- data/ext/boost/preprocessor/facilities/expand.hpp +28 -0
- data/ext/boost/preprocessor/facilities/is_1.hpp +23 -0
- data/ext/boost/preprocessor/facilities/is_empty.hpp +43 -0
- data/ext/boost/preprocessor/facilities/is_empty_or_1.hpp +30 -0
- data/ext/boost/preprocessor/for.hpp +17 -0
- data/ext/boost/preprocessor/if.hpp +17 -0
- data/ext/boost/preprocessor/iteration.hpp +19 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/lower3.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/lower4.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/lower5.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/upper3.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/upper4.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/upper5.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/finish.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/iter/forward3.hpp +1338 -0
- data/ext/boost/preprocessor/iteration/detail/iter/forward4.hpp +1338 -0
- data/ext/boost/preprocessor/iteration/detail/iter/forward5.hpp +1338 -0
- data/ext/boost/preprocessor/iteration/detail/iter/reverse2.hpp +1296 -0
- data/ext/boost/preprocessor/iteration/detail/iter/reverse3.hpp +1296 -0
- data/ext/boost/preprocessor/iteration/detail/iter/reverse4.hpp +1296 -0
- data/ext/boost/preprocessor/iteration/detail/iter/reverse5.hpp +1296 -0
- data/ext/boost/preprocessor/iteration/detail/local.hpp +812 -0
- data/ext/boost/preprocessor/iteration/detail/rlocal.hpp +782 -0
- data/ext/boost/preprocessor/iteration/detail/self.hpp +21 -0
- data/ext/boost/preprocessor/iteration/detail/start.hpp +99 -0
- data/ext/boost/preprocessor/iteration/local.hpp +26 -0
- data/ext/boost/preprocessor/iteration/self.hpp +19 -0
- data/ext/boost/preprocessor/library.hpp +36 -0
- data/ext/boost/preprocessor/limits.hpp +17 -0
- data/ext/boost/preprocessor/list.hpp +37 -0
- data/ext/boost/preprocessor/list/at.hpp +39 -0
- data/ext/boost/preprocessor/list/cat.hpp +42 -0
- data/ext/boost/preprocessor/list/detail/dmc/fold_left.hpp +279 -0
- data/ext/boost/preprocessor/list/detail/edg/fold_left.hpp +536 -0
- data/ext/boost/preprocessor/list/detail/edg/fold_right.hpp +794 -0
- data/ext/boost/preprocessor/list/enum.hpp +41 -0
- data/ext/boost/preprocessor/list/filter.hpp +54 -0
- data/ext/boost/preprocessor/list/first_n.hpp +58 -0
- data/ext/boost/preprocessor/list/for_each.hpp +49 -0
- data/ext/boost/preprocessor/list/for_each_product.hpp +141 -0
- data/ext/boost/preprocessor/list/rest_n.hpp +55 -0
- data/ext/boost/preprocessor/list/size.hpp +58 -0
- data/ext/boost/preprocessor/list/to_array.hpp +123 -0
- data/ext/boost/preprocessor/list/to_seq.hpp +32 -0
- data/ext/boost/preprocessor/list/to_tuple.hpp +38 -0
- data/ext/boost/preprocessor/logical.hpp +29 -0
- data/ext/boost/preprocessor/logical/bitnor.hpp +38 -0
- data/ext/boost/preprocessor/logical/bitor.hpp +38 -0
- data/ext/boost/preprocessor/logical/bitxor.hpp +38 -0
- data/ext/boost/preprocessor/logical/nor.hpp +30 -0
- data/ext/boost/preprocessor/logical/not.hpp +30 -0
- data/ext/boost/preprocessor/logical/or.hpp +30 -0
- data/ext/boost/preprocessor/logical/xor.hpp +30 -0
- data/ext/boost/preprocessor/max.hpp +17 -0
- data/ext/boost/preprocessor/min.hpp +17 -0
- data/ext/boost/preprocessor/punctuation.hpp +20 -0
- data/ext/boost/preprocessor/punctuation/paren_if.hpp +38 -0
- data/ext/boost/preprocessor/repeat_3rd.hpp +17 -0
- data/ext/boost/preprocessor/repeat_from_to.hpp +17 -0
- data/ext/boost/preprocessor/repeat_from_to_2nd.hpp +17 -0
- data/ext/boost/preprocessor/repeat_from_to_3rd.hpp +17 -0
- data/ext/boost/preprocessor/repetition.hpp +32 -0
- data/ext/boost/preprocessor/repetition/deduce_r.hpp +22 -0
- data/ext/boost/preprocessor/repetition/deduce_z.hpp +22 -0
- data/ext/boost/preprocessor/repetition/detail/dmc/for.hpp +536 -0
- data/ext/boost/preprocessor/repetition/detail/edg/for.hpp +534 -0
- data/ext/boost/preprocessor/repetition/detail/msvc/for.hpp +277 -0
- data/ext/boost/preprocessor/repetition/enum_params_with_defaults.hpp +24 -0
- data/ext/boost/preprocessor/repetition/enum_shifted.hpp +68 -0
- data/ext/boost/preprocessor/repetition/enum_shifted_binary_params.hpp +51 -0
- data/ext/boost/preprocessor/repetition/enum_trailing.hpp +63 -0
- data/ext/boost/preprocessor/repetition/enum_trailing_binary_params.hpp +53 -0
- data/ext/boost/preprocessor/selection.hpp +18 -0
- data/ext/boost/preprocessor/selection/max.hpp +39 -0
- data/ext/boost/preprocessor/selection/min.hpp +39 -0
- data/ext/boost/preprocessor/seq.hpp +43 -0
- data/ext/boost/preprocessor/seq/cat.hpp +49 -0
- data/ext/boost/preprocessor/seq/detail/binary_transform.hpp +40 -0
- data/ext/boost/preprocessor/seq/detail/split.hpp +284 -0
- data/ext/boost/preprocessor/seq/filter.hpp +54 -0
- data/ext/boost/preprocessor/seq/first_n.hpp +30 -0
- data/ext/boost/preprocessor/seq/fold_left.hpp +1070 -0
- data/ext/boost/preprocessor/seq/fold_right.hpp +288 -0
- data/ext/boost/preprocessor/seq/for_each.hpp +60 -0
- data/ext/boost/preprocessor/seq/for_each_product.hpp +126 -0
- data/ext/boost/preprocessor/seq/insert.hpp +28 -0
- data/ext/boost/preprocessor/seq/pop_back.hpp +29 -0
- data/ext/boost/preprocessor/seq/pop_front.hpp +27 -0
- data/ext/boost/preprocessor/seq/push_back.hpp +19 -0
- data/ext/boost/preprocessor/seq/push_front.hpp +19 -0
- data/ext/boost/preprocessor/seq/remove.hpp +29 -0
- data/ext/boost/preprocessor/seq/replace.hpp +29 -0
- data/ext/boost/preprocessor/seq/rest_n.hpp +30 -0
- data/ext/boost/preprocessor/seq/reverse.hpp +39 -0
- data/ext/boost/preprocessor/seq/subseq.hpp +28 -0
- data/ext/boost/preprocessor/seq/to_array.hpp +28 -0
- data/ext/boost/preprocessor/seq/to_list.hpp +29 -0
- data/ext/boost/preprocessor/seq/to_tuple.hpp +27 -0
- data/ext/boost/preprocessor/seq/transform.hpp +48 -0
- data/ext/boost/preprocessor/slot.hpp +17 -0
- data/ext/boost/preprocessor/slot/counter.hpp +25 -0
- data/ext/boost/preprocessor/slot/detail/counter.hpp +269 -0
- data/ext/boost/preprocessor/slot/detail/slot1.hpp +267 -0
- data/ext/boost/preprocessor/slot/detail/slot2.hpp +267 -0
- data/ext/boost/preprocessor/slot/detail/slot3.hpp +267 -0
- data/ext/boost/preprocessor/slot/detail/slot4.hpp +267 -0
- data/ext/boost/preprocessor/slot/detail/slot5.hpp +267 -0
- data/ext/boost/preprocessor/tuple.hpp +28 -0
- data/ext/boost/preprocessor/tuple/enum.hpp +22 -0
- data/ext/boost/preprocessor/tuple/reverse.hpp +114 -0
- data/ext/boost/preprocessor/tuple/size.hpp +28 -0
- data/ext/boost/preprocessor/tuple/to_array.hpp +37 -0
- data/ext/boost/preprocessor/tuple/to_seq.hpp +114 -0
- data/ext/boost/preprocessor/variadic.hpp +23 -0
- data/ext/boost/preprocessor/variadic/to_array.hpp +32 -0
- data/ext/boost/preprocessor/variadic/to_list.hpp +25 -0
- data/ext/boost/preprocessor/variadic/to_seq.hpp +25 -0
- data/ext/boost/preprocessor/variadic/to_tuple.hpp +24 -0
- data/ext/boost/preprocessor/while.hpp +17 -0
- data/ext/boost/preprocessor/wstringize.hpp +29 -0
- data/ext/boost/smart_ptr/intrusive_ptr.hpp +324 -0
- data/ext/common/AccountsDatabase.h +3 -4
- data/ext/common/AgentsStarter.cpp +12 -15
- data/ext/common/AgentsStarter.h +54 -120
- data/ext/common/ApplicationPool2/AppTypes.cpp +12 -5
- data/ext/common/ApplicationPool2/AppTypes.h +21 -14
- data/ext/common/ApplicationPool2/Common.h +36 -19
- data/ext/common/ApplicationPool2/DirectSpawner.h +15 -16
- data/ext/common/ApplicationPool2/DummySpawner.h +9 -8
- data/ext/common/ApplicationPool2/ErrorRenderer.h +1 -1
- data/ext/common/ApplicationPool2/Group.h +304 -171
- data/ext/common/ApplicationPool2/Implementation.cpp +234 -125
- data/ext/common/ApplicationPool2/Options.h +50 -62
- data/ext/common/ApplicationPool2/Pool.h +285 -189
- data/ext/common/ApplicationPool2/Process.h +126 -115
- data/ext/common/ApplicationPool2/Session.h +70 -30
- data/ext/common/ApplicationPool2/SmartSpawner.h +19 -18
- data/ext/common/ApplicationPool2/Socket.h +57 -43
- data/ext/common/ApplicationPool2/SpawnObject.h +83 -0
- data/ext/common/ApplicationPool2/Spawner.h +59 -38
- data/ext/common/ApplicationPool2/SpawnerFactory.h +8 -14
- data/ext/common/ApplicationPool2/SuperGroup.h +69 -40
- data/ext/common/BackgroundEventLoop.cpp +48 -1
- data/ext/common/BackgroundEventLoop.h +3 -1
- data/ext/common/Constants.h +30 -8
- data/ext/common/DataStructures/HashedStaticString.h +103 -0
- data/ext/common/DataStructures/LString.h +396 -0
- data/ext/common/DataStructures/StringKeyTable.h +588 -0
- data/ext/common/EventedMessageServer.h +1 -0
- data/ext/common/FileDescriptor.h +5 -0
- data/ext/common/InstanceDirectory.h +240 -0
- data/ext/common/Logging.cpp +38 -13
- data/ext/common/Logging.h +53 -22
- data/ext/common/MemoryKit/mbuf.cpp +413 -0
- data/ext/common/MemoryKit/mbuf.h +266 -0
- data/ext/common/MemoryKit/palloc.cpp +337 -0
- data/ext/common/MemoryKit/palloc.h +121 -0
- data/ext/common/ResourceLocator.h +62 -6
- data/ext/common/SafeLibev.h +4 -4
- data/ext/common/ServerKit/AcceptLoadBalancer.h +275 -0
- data/ext/common/ServerKit/Channel.h +747 -0
- data/ext/common/ServerKit/Client.h +166 -0
- data/ext/common/ServerKit/ClientRef.h +130 -0
- data/ext/common/ServerKit/Context.h +129 -0
- data/ext/common/ServerKit/Errors.h +103 -0
- data/ext/common/ServerKit/FdSinkChannel.h +206 -0
- data/ext/common/ServerKit/FdSourceChannel.h +230 -0
- data/ext/common/ServerKit/FileBufferedChannel.h +1399 -0
- data/ext/common/ServerKit/FileBufferedFdSinkChannel.h +228 -0
- data/ext/common/ServerKit/HeaderTable.h +472 -0
- data/ext/common/ServerKit/Hooks.h +79 -0
- data/ext/common/ServerKit/HttpChunkedBodyParser.h +289 -0
- data/ext/common/ServerKit/HttpChunkedBodyParserState.h +70 -0
- data/ext/common/ServerKit/HttpClient.h +94 -0
- data/ext/common/ServerKit/HttpHeaderParser.h +477 -0
- data/ext/common/ServerKit/HttpHeaderParserState.h +60 -0
- data/ext/common/ServerKit/HttpRequest.h +276 -0
- data/ext/common/ServerKit/HttpRequestRef.h +130 -0
- data/ext/common/ServerKit/HttpServer.h +1152 -0
- data/ext/common/ServerKit/Implementation.cpp +47 -0
- data/ext/common/ServerKit/Server.h +1040 -0
- data/ext/common/ServerKit/http_parser.cpp +2259 -0
- data/ext/common/ServerKit/http_parser.h +330 -0
- data/ext/common/StaticString.h +8 -0
- data/ext/common/Utils.cpp +14 -12
- data/ext/common/Utils.h +9 -103
- data/ext/common/Utils/BufferedIO.h +1 -0
- data/ext/common/Utils/CachedFileStat.hpp +1 -7
- data/ext/common/Utils/DateParsing.h +379 -0
- data/ext/common/Utils/FileChangeChecker.h +3 -9
- data/ext/common/Utils/Hasher.cpp +52 -0
- data/ext/common/Utils/Hasher.h +58 -0
- data/ext/common/Utils/IOUtils.cpp +62 -62
- data/ext/common/Utils/JsonUtils.h +21 -0
- data/ext/common/Utils/OptionParsing.h +75 -0
- data/ext/common/Utils/StrIntUtils.cpp +112 -19
- data/ext/common/Utils/StrIntUtils.h +52 -12
- data/ext/common/Utils/StrIntUtilsNoStrictAliasing.cpp +174 -0
- data/ext/common/Utils/VariantMap.h +18 -7
- data/ext/common/Utils/modp_b64.cpp +290 -0
- data/ext/common/Utils/modp_b64.h +241 -0
- data/ext/common/Utils/modp_b64_data.h +479 -0
- data/ext/common/Utils/sysqueue.h +811 -0
- data/ext/common/agents/Base.cpp +71 -98
- data/ext/common/agents/Base.h +11 -3
- data/ext/common/agents/HelperAgent/AdminServer.h +690 -0
- data/ext/common/agents/HelperAgent/Main.cpp +899 -487
- data/ext/common/agents/HelperAgent/OptionParser.h +311 -0
- data/ext/common/agents/HelperAgent/RequestHandler.h +315 -2548
- data/ext/common/agents/HelperAgent/RequestHandler/AppResponse.h +225 -0
- data/ext/common/agents/HelperAgent/RequestHandler/BufferBody.cpp +93 -0
- data/ext/common/agents/HelperAgent/RequestHandler/CheckoutSession.cpp +346 -0
- data/ext/common/agents/HelperAgent/RequestHandler/Client.h +54 -0
- data/ext/common/agents/HelperAgent/RequestHandler/ForwardResponse.cpp +846 -0
- data/ext/common/agents/HelperAgent/RequestHandler/Hooks.cpp +231 -0
- data/ext/common/agents/HelperAgent/RequestHandler/InitRequest.cpp +434 -0
- data/ext/common/agents/HelperAgent/RequestHandler/Request.h +149 -0
- data/ext/common/agents/HelperAgent/RequestHandler/SendRequest.cpp +887 -0
- data/ext/common/agents/HelperAgent/RequestHandler/TurboCaching.h +293 -0
- data/ext/common/agents/HelperAgent/RequestHandler/Utils.cpp +301 -0
- data/ext/common/agents/HelperAgent/ResponseCache.h +624 -0
- data/ext/common/agents/HelperAgent/SystemMetricsTool.cpp +21 -23
- data/ext/common/agents/LoggingAgent/AdminServer.h +369 -0
- data/ext/common/agents/LoggingAgent/LoggingServer.h +1 -0
- data/ext/common/agents/LoggingAgent/Main.cpp +422 -215
- data/ext/common/agents/LoggingAgent/OptionParser.h +167 -0
- data/ext/common/agents/LoggingAgent/RemoteSender.h +3 -3
- data/ext/common/agents/Main.cpp +107 -0
- data/ext/common/agents/SpawnPreparer/Main.cpp +207 -0
- data/ext/common/agents/TempDirToucher/Main.cpp +429 -0
- data/ext/common/agents/Watchdog/AdminServer.h +390 -0
- data/ext/common/agents/Watchdog/AgentWatcher.cpp +7 -5
- data/ext/common/agents/Watchdog/HelperAgentWatcher.cpp +18 -39
- data/ext/common/agents/Watchdog/InstanceDirToucher.cpp +116 -0
- data/ext/common/agents/Watchdog/LoggingAgentWatcher.cpp +13 -17
- data/ext/common/agents/Watchdog/Main.cpp +743 -202
- data/ext/libeio/eio.c +17 -0
- data/ext/libeio/eio.h +2 -0
- data/ext/nginx/CacheLocationConfig.c +177 -198
- data/ext/nginx/CacheLocationConfig.c.erb +35 -22
- data/ext/nginx/Configuration.c +402 -236
- data/ext/nginx/Configuration.h +12 -5
- data/ext/nginx/ConfigurationCommands.c +35 -15
- data/ext/nginx/ConfigurationCommands.c.erb +4 -4
- data/ext/nginx/ConfigurationFields.h +9 -5
- data/ext/nginx/ConfigurationFields.h.erb +3 -1
- data/ext/nginx/ContentHandler.c +393 -362
- data/ext/nginx/CreateLocationConfig.c +8 -4
- data/ext/nginx/CreateLocationConfig.c.erb +8 -3
- data/ext/nginx/MergeLocationConfig.c +36 -6
- data/ext/nginx/MergeLocationConfig.c.erb +42 -1
- data/ext/nginx/ngx_http_passenger_module.c +28 -15
- data/ext/oxt/detail/backtrace_disabled.hpp +2 -1
- data/ext/oxt/detail/backtrace_enabled.hpp +15 -2
- data/ext/oxt/implementation.cpp +92 -20
- data/ext/oxt/thread.hpp +5 -0
- data/ext/ruby/extconf.rb +3 -6
- data/ext/ruby/passenger_native_support.c +13 -40
- data/helper-scripts/download_binaries/extconf.rb +4 -4
- data/helper-scripts/meteor-loader.rb +12 -112
- data/helper-scripts/node-loader.js +3 -91
- data/helper-scripts/rack-loader.rb +13 -14
- data/helper-scripts/rack-preloader.rb +16 -17
- data/helper-scripts/wsgi-loader.py +11 -7
- data/lib/phusion_passenger.rb +100 -79
- data/lib/phusion_passenger/abstract_installer.rb +28 -3
- data/lib/phusion_passenger/admin_tools.rb +3 -3
- data/lib/phusion_passenger/admin_tools/instance.rb +207 -0
- data/lib/phusion_passenger/admin_tools/instance_registry.rb +98 -0
- data/lib/phusion_passenger/apache2/config_options.rb +72 -22
- data/lib/phusion_passenger/common_library.rb +79 -14
- data/lib/phusion_passenger/config/about_command.rb +17 -23
- data/lib/phusion_passenger/config/admin_command_command.rb +175 -0
- data/lib/phusion_passenger/config/agent_compiler.rb +170 -0
- data/lib/phusion_passenger/config/command.rb +1 -4
- data/lib/phusion_passenger/config/compile_agent_command.rb +102 -0
- data/lib/phusion_passenger/config/compile_nginx_engine_command.rb +112 -0
- data/lib/phusion_passenger/config/detach_process_command.rb +32 -10
- data/lib/phusion_passenger/config/download_agent_command.rb +285 -0
- data/lib/phusion_passenger/config/download_nginx_engine_command.rb +281 -0
- data/lib/phusion_passenger/config/install_agent_command.rb +174 -0
- data/lib/phusion_passenger/config/install_standalone_runtime_command.rb +231 -0
- data/lib/phusion_passenger/config/installation_utils.rb +241 -0
- data/lib/phusion_passenger/config/list_instances_command.rb +13 -25
- data/lib/phusion_passenger/config/main.rb +43 -14
- data/lib/phusion_passenger/config/nginx_engine_compiler.rb +337 -0
- data/lib/phusion_passenger/config/reopen_logs_command.rb +110 -0
- data/lib/phusion_passenger/config/restart_app_command.rb +61 -14
- data/lib/phusion_passenger/config/system_metrics_command.rb +2 -1
- data/lib/phusion_passenger/config/utils.rb +64 -39
- data/lib/phusion_passenger/config/validate_install_command.rb +2 -2
- data/lib/phusion_passenger/constants.rb +27 -6
- data/lib/phusion_passenger/debug_logging.rb +32 -15
- data/lib/phusion_passenger/loader_shared_helpers.rb +2 -5
- data/lib/phusion_passenger/message_client.rb +21 -22
- data/lib/phusion_passenger/native_support.rb +26 -31
- data/lib/phusion_passenger/nginx/config_options.rb +32 -19
- data/lib/phusion_passenger/packaging.rb +7 -3
- data/lib/phusion_passenger/platform_info/cxx_portability.rb +1 -2
- data/lib/phusion_passenger/platform_info/depcheck_specs/libs.rb +3 -4
- data/lib/phusion_passenger/platform_info/operating_system.rb +6 -6
- data/lib/phusion_passenger/preloader_shared_helpers.rb +2 -2
- data/lib/phusion_passenger/rack/out_of_band_gc.rb +2 -2
- data/lib/phusion_passenger/rack/thread_handler_extension.rb +168 -65
- data/lib/phusion_passenger/request_handler.rb +47 -82
- data/lib/phusion_passenger/request_handler/thread_handler.rb +46 -10
- data/lib/phusion_passenger/ruby_core_enhancements.rb +25 -77
- data/lib/phusion_passenger/ruby_core_io_enhancements.rb +108 -0
- data/lib/phusion_passenger/standalone/app_finder.rb +39 -59
- data/lib/phusion_passenger/standalone/command.rb +27 -275
- data/lib/phusion_passenger/standalone/command2.rb +292 -0
- data/lib/phusion_passenger/standalone/config_utils.rb +87 -0
- data/lib/phusion_passenger/standalone/control_utils.rb +88 -0
- data/lib/phusion_passenger/standalone/main.rb +69 -71
- data/lib/phusion_passenger/standalone/start2_command.rb +799 -0
- data/lib/phusion_passenger/standalone/start_command.rb +406 -467
- data/lib/phusion_passenger/standalone/start_command/builtin_engine.rb +167 -0
- data/lib/phusion_passenger/standalone/start_command/nginx_engine.rb +165 -0
- data/lib/phusion_passenger/standalone/status_command.rb +64 -23
- data/lib/phusion_passenger/standalone/stop_command.rb +69 -32
- data/lib/phusion_passenger/standalone/version_command.rb +1 -5
- data/lib/phusion_passenger/utils.rb +0 -4
- data/lib/phusion_passenger/utils/json.rb +70 -4
- data/lib/phusion_passenger/utils/progress_bar.rb +56 -0
- data/lib/phusion_passenger/utils/tee_input.rb +3 -3
- data/lib/phusion_passenger/utils/unseekable_socket.rb +30 -0
- data/packaging/rpm/nginx_spec/nginx.spec.template +4 -3
- data/packaging/rpm/passenger_spec/passenger.spec.template +6 -10
- data/packaging/rpm/setup-system +2 -1
- data/resources/oss-binaries.phusionpassenger.com.crt +208 -0
- data/resources/templates/config/agent_compiler/confirm_enable_optimizations.txt.erb +5 -0
- data/resources/templates/config/installation_utils/cannot_create_user_support_binaries_dir.txt.erb +15 -0
- data/resources/templates/config/installation_utils/download_tool_missing.txt.erb +7 -0
- data/resources/templates/config/installation_utils/passenger_not_installed_as_root.txt.erb +12 -0
- data/resources/templates/config/installation_utils/support_binaries_dir_not_writable_despite_running_as_root.txt.erb +13 -0
- data/resources/templates/config/installation_utils/unexpected_filesystem_problem.txt.erb +16 -0
- data/{packaging/debian/debian_specs/passenger/patches/series → resources/templates/config/installation_utils/user_support_binaries_dir_not_writable.txt.erb} +0 -0
- data/resources/templates/nginx/nginx_module_sources_not_available.txt.erb +2 -2
- data/resources/templates/standalone/config.erb +14 -16
- data/resources/templates/standalone/possible_solutions_for_download_and_extraction_problems.txt.erb +1 -1
- data/test/.rspec +1 -0
- data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +20 -17
- data/test/cxx/ApplicationPool2/OptionsTest.cpp +0 -14
- data/test/cxx/ApplicationPool2/PoolTest.cpp +113 -90
- data/test/cxx/ApplicationPool2/ProcessTest.cpp +18 -27
- data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +51 -53
- data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +55 -57
- data/test/cxx/BufferedIOTest.cpp +40 -40
- data/test/cxx/CxxTestMain.cpp +4 -22
- data/test/cxx/DataStructures/LStringTest.cpp +275 -0
- data/test/cxx/DataStructures/StringKeyTableTest.cpp +199 -0
- data/test/cxx/MemoryKit/MbufTest.cpp +213 -0
- data/test/cxx/MessageServerTest.cpp +62 -55
- data/test/cxx/RequestHandlerTest.cpp +26 -27
- data/test/cxx/ServerKit/ChannelTest.cpp +1467 -0
- data/test/cxx/ServerKit/FileBufferedChannelTest.cpp +817 -0
- data/test/cxx/ServerKit/HeaderTableTest.cpp +171 -0
- data/test/cxx/ServerKit/HttpServerTest.cpp +1503 -0
- data/test/cxx/ServerKit/ServerTest.cpp +408 -0
- data/test/cxx/TestSupport.cpp +51 -15
- data/test/cxx/TestSupport.h +31 -21
- data/test/cxx/UnionStationTest.cpp +121 -122
- data/test/cxx/UtilsTest.cpp +9 -33
- data/test/integration_tests/apache2_tests.rb +65 -27
- data/test/integration_tests/downloaded_binaries_tests.rb +30 -6
- data/test/integration_tests/native_packaging_spec.rb +32 -17
- data/test/integration_tests/nginx_tests.rb +28 -10
- data/test/integration_tests/shared/example_webapp_tests.rb +40 -27
- data/test/integration_tests/standalone_tests.rb +232 -169
- data/test/ruby/debug_logging_spec.rb +44 -40
- data/test/ruby/rails3.0/preloader_spec.rb +1 -1
- data/test/ruby/rails3.1/preloader_spec.rb +1 -1
- data/test/ruby/rails3.2/preloader_spec.rb +1 -1
- data/test/ruby/rails4.0/preloader_spec.rb +1 -1
- data/test/ruby/rails4.1/preloader_spec.rb +1 -1
- data/test/ruby/request_handler_spec.rb +62 -24
- data/test/ruby/shared/loader_sharedspec.rb +10 -9
- data/test/ruby/shared/rails/union_station_extensions_sharedspec.rb +23 -22
- data/test/ruby/spec_helper.rb +2 -11
- data/test/ruby/standalone/runtime_installer_spec.rb +15 -13
- data/test/ruby/union_station_spec.rb +45 -40
- data/test/ruby/utils/tee_input_spec.rb +5 -5
- data/test/ruby/utils_spec.rb +3 -39
- data/test/stub/apache2/httpd.conf.erb +5 -2
- data/test/stub/nginx/nginx.conf.erb +3 -1
- data/test/support/apache2_controller.rb +25 -25
- data/test/support/nginx_controller.rb +14 -14
- data/test/support/test_helper.rb +74 -75
- metadata +439 -643
- metadata.gz.asc +7 -7
- data/ext/common/MultiLibeio.cpp +0 -204
- data/ext/common/MultiLibeio.h +0 -67
- data/ext/common/ServerInstanceDir.h +0 -402
- data/ext/common/Utils/Base64.cpp +0 -143
- data/ext/common/Utils/Base64.h +0 -83
- data/ext/common/Utils/HttpHeaderBufferer.h +0 -184
- data/ext/common/Utils/PriorityQueue.h +0 -54
- data/ext/common/Utils/StreamBoyerMooreHorspool.h +0 -512
- data/ext/common/Utils/fib.c +0 -699
- data/ext/common/Utils/fib.h +0 -101
- data/ext/common/Utils/fibpriv.h +0 -67
- data/ext/common/agents/EnvPrinter.c +0 -16
- data/ext/common/agents/HelperAgent/AgentOptions.h +0 -109
- data/ext/common/agents/HelperAgent/FileBackedPipe.h +0 -732
- data/ext/common/agents/HelperAgent/RequestHandler.cpp +0 -294
- data/ext/common/agents/HelperAgent/ScgiRequestParser.h +0 -457
- data/ext/common/agents/LoggingAgent/AdminController.h +0 -96
- data/ext/common/agents/SpawnPreparer.cpp +0 -206
- data/ext/common/agents/TempDirToucher.c +0 -383
- data/ext/common/agents/Watchdog/ServerInstanceDirToucher.cpp +0 -116
- data/helper-scripts/classic-rails-loader.rb +0 -166
- data/helper-scripts/classic-rails-preloader.rb +0 -193
- data/lib/phusion_passenger/admin_tools/server_instance.rb +0 -339
- data/lib/phusion_passenger/classic_rails/cgi_fixed.rb +0 -68
- data/lib/phusion_passenger/classic_rails/thread_handler_extension.rb +0 -40
- data/lib/phusion_passenger/platform_info/openssl.rb +0 -61
- data/lib/phusion_passenger/standalone/config_file.rb +0 -119
- data/lib/phusion_passenger/standalone/help_command.rb +0 -57
- data/lib/phusion_passenger/standalone/runtime_installer.rb +0 -712
- data/lib/phusion_passenger/standalone/runtime_locator.rb +0 -170
- data/lib/phusion_passenger/standalone/utils.rb +0 -58
- data/lib/phusion_passenger/utils/tmpdir.rb +0 -69
- data/packaging/debian/LICENSE.md +0 -19
- data/packaging/debian/README.md +0 -320
- data/packaging/debian/Vagrantfile +0 -25
- data/packaging/debian/build +0 -210
- data/packaging/debian/debian_specs/nginx/changelog +0 -1989
- data/packaging/debian/debian_specs/nginx/compat.erb +0 -5
- data/packaging/debian/debian_specs/nginx/conf/fastcgi.conf +0 -25
- data/packaging/debian/debian_specs/nginx/conf/fastcgi_params +0 -24
- data/packaging/debian/debian_specs/nginx/conf/koi-utf +0 -109
- data/packaging/debian/debian_specs/nginx/conf/koi-win +0 -103
- data/packaging/debian/debian_specs/nginx/conf/mime.types +0 -89
- data/packaging/debian/debian_specs/nginx/conf/nginx.conf.erb +0 -97
- data/packaging/debian/debian_specs/nginx/conf/proxy_params +0 -4
- data/packaging/debian/debian_specs/nginx/conf/scgi_params +0 -16
- data/packaging/debian/debian_specs/nginx/conf/sites-available/default.erb +0 -93
- data/packaging/debian/debian_specs/nginx/conf/snippets/fastcgi-php.conf +0 -13
- data/packaging/debian/debian_specs/nginx/conf/snippets/snakeoil.conf +0 -5
- data/packaging/debian/debian_specs/nginx/conf/uwsgi_params +0 -16
- data/packaging/debian/debian_specs/nginx/conf/win-utf +0 -125
- data/packaging/debian/debian_specs/nginx/control.erb +0 -226
- data/packaging/debian/debian_specs/nginx/copyright +0 -196
- data/packaging/debian/debian_specs/nginx/debian-full.lintian-overrides +0 -1
- data/packaging/debian/debian_specs/nginx/gbp.conf +0 -2
- data/packaging/debian/debian_specs/nginx/help/docs/fcgiwrap +0 -14
- data/packaging/debian/debian_specs/nginx/help/docs/php +0 -119
- data/packaging/debian/debian_specs/nginx/help/docs/support-irc +0 -28
- data/packaging/debian/debian_specs/nginx/help/docs/upstream +0 -51
- data/packaging/debian/debian_specs/nginx/help/examples/drupal +0 -114
- data/packaging/debian/debian_specs/nginx/help/examples/http +0 -59
- data/packaging/debian/debian_specs/nginx/help/examples/mail +0 -30
- data/packaging/debian/debian_specs/nginx/help/examples/mailman +0 -59
- data/packaging/debian/debian_specs/nginx/help/examples/nginx.conf +0 -34
- data/packaging/debian/debian_specs/nginx/help/examples/nginx_modsite +0 -162
- data/packaging/debian/debian_specs/nginx/help/examples/virtual_hosts +0 -155
- data/packaging/debian/debian_specs/nginx/help/examples/wordpress +0 -74
- data/packaging/debian/debian_specs/nginx/helpers.rb +0 -41
- data/packaging/debian/debian_specs/nginx/index-debian.html.in +0 -32
- data/packaging/debian/debian_specs/nginx/index-ubuntu.html.in +0 -32
- data/packaging/debian/debian_specs/nginx/index.html.erb +0 -10
- data/packaging/debian/debian_specs/nginx/modules/README.Modules-versions +0 -65
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/README.markdown +0 -510
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/config +0 -5
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/doc/HttpHeadersMoreModule.wiki +0 -395
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ddebug.h +0 -119
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_filter_module.c +0 -348
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_filter_module.h +0 -80
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_in.c +0 -826
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_in.h +0 -26
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_out.c +0 -716
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_out.h +0 -26
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_util.c +0 -380
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_util.h +0 -52
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/util/build.sh +0 -32
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/valgrind.suppress +0 -215
- data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/ChangeLog +0 -35
- data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/LICENSE +0 -25
- data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/README.md +0 -93
- data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/config +0 -4
- data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/ngx_http_auth_pam_module.c +0 -462
- data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/CHANGES +0 -66
- data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/LICENSE +0 -26
- data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/README.md +0 -171
- data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/TODO.md +0 -7
- data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/config +0 -21
- data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/ngx_cache_purge_module.c +0 -1803
- data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/README +0 -29
- data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/config +0 -9
- data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/ngx_http_dav_ext_module.c +0 -824
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/README +0 -139
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/README_AUTO_LIB +0 -395
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/TODO +0 -1
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/actions/array +0 -10
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/actions/palloc +0 -8
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/build +0 -597
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/action_replacements +0 -5
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/action_types +0 -12
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_args +0 -22
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_locs +0 -25
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_macros +0 -35
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/contexts +0 -22
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/header_files +0 -3
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/headers +0 -4
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/module_dependencies +0 -5
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/modules_optional +0 -15
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/prefixes +0 -2
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/array.h +0 -7
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/conf_cmd_basic.h +0 -43
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/conf_merge.h +0 -78
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/palloc.h +0 -6
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/text/autogen +0 -12
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/config +0 -49
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/core/action_macros +0 -63
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/core/conf_cmds +0 -62
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/modules/set_var +0 -124
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/patches/more_logging_info +0 -48
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/upstream/list +0 -45
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/README +0 -12
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/http/set_var/config +0 -4
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/http/set_var/ngx_http_set_var_examples_module.c +0 -136
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/ngx_auto_lib_core +0 -797
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/notes/CHANGES +0 -17
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/notes/LICENSE +0 -24
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_array.h +0 -113
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_cmd_basic.h +0 -2203
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_cmd_extra.h +0 -5423
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_merge.h +0 -227
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_config.c +0 -72
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_config.h +0 -98
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_includes.h +0 -66
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_palloc.h +0 -112
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/auto_config +0 -16
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/expose_rewrite_functions +0 -291
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/rewrite_phase_handler +0 -19
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/md5.h +0 -117
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/murmurhash2.c +0 -77
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/sha.h +0 -200
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk.c +0 -155
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk.h +0 -58
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_buf.c +0 -43
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_buf.h +0 -5
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_path.c +0 -129
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_path.h +0 -30
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_value.c +0 -192
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_value.h +0 -21
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_conf_file.c +0 -396
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_conf_file.h +0 -44
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_debug.c +0 -72
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_debug.h +0 -171
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_encoding.c +0 -57
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_encoding.h +0 -12
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_hash.c +0 -82
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_hash.h +0 -45
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http.c +0 -138
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http.h +0 -3
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http_headers.h +0 -35
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_log.c +0 -3
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_log.h +0 -165
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_parse.h +0 -67
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_path.c +0 -583
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_path.h +0 -22
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_process.c +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_process.h +0 -12
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_regex.c +0 -215
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_regex.h +0 -7
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_rewrite.c +0 -103
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_rewrite.h +0 -26
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_set_var.c +0 -602
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_set_var.h +0 -44
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string.c +0 -434
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string.h +0 -37
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string_util.h +0 -14
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_upstream_list.c +0 -205
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_upstream_list.h +0 -27
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_uri.c +0 -45
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_uri.h +0 -6
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/LICENSE +0 -25
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/README.markdown +0 -1850
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/config +0 -5
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/doc/HttpEchoModule.wiki +0 -1558
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ddebug.h +0 -109
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_echo.c +0 -344
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_echo.h +0 -25
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_filter.c +0 -282
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_filter.h +0 -15
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_foreach.c +0 -183
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_foreach.h +0 -16
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_handler.c +0 -429
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_handler.h +0 -18
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_location.c +0 -178
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_location.h +0 -13
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_module.c +0 -667
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_module.h +0 -137
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_request_info.c +0 -452
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_request_info.h +0 -31
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_sleep.c +0 -208
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_sleep.h +0 -16
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_subrequest.c +0 -788
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_subrequest.h +0 -19
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_timer.c +0 -96
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_timer.h +0 -13
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_util.c +0 -298
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_util.h +0 -58
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_var.c +0 -110
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_var.h +0 -9
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/build.sh +0 -45
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/releng +0 -8
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/wiki2pod.pl +0 -131
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/valgrind.suppress +0 -38
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/LICENCE +0 -24
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/README +0 -206
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/changelog.txt +0 -54
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/config +0 -26
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/protocol.txt +0 -191
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_defs.c +0 -59
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_defs.h +0 -73
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module.c +0 -783
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module.h +0 -31
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module_setup.c +0 -361
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_types.h +0 -120
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/memory/store.c +0 -1180
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/memory/store.h +0 -1
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_module_ipc.c +0 -146
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_module_ipc.h +0 -5
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_store.h +0 -51
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_rwlock.c +0 -178
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_rwlock.h +0 -5
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/rbtree_util.c +0 -246
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/rbtree_util.h +0 -9
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/Changes +0 -51
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/README.markdown +0 -6954
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/config +0 -363
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/doc/HttpLuaModule.wiki +0 -5898
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/dtrace/ngx_lua_provider.d +0 -61
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/Makefile +0 -3
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/lib/RecvUntil.pm +0 -138
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/t/sanity.t +0 -140
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/api/ngx_http_lua_api.h +0 -52
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ddebug.h +0 -82
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_accessby.c +0 -377
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_accessby.h +0 -22
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_api.c +0 -77
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_args.c +0 -537
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_args.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_bodyfilterby.c +0 -632
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_bodyfilterby.h +0 -31
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_cache.c +0 -296
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_cache.h +0 -24
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_capturefilter.c +0 -175
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_capturefilter.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_clfactory.c +0 -887
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_clfactory.h +0 -22
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_common.h +0 -478
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_config.c +0 -67
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_config.h +0 -19
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_consts.c +0 -148
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_consts.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_contentby.c +0 -369
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_contentby.h +0 -26
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_control.c +0 -483
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_control.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_coroutine.c +0 -379
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_coroutine.h +0 -23
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ctx.c +0 -216
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ctx.h +0 -23
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_directive.c +0 -1081
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_directive.h +0 -56
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_exception.c +0 -58
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_exception.h +0 -33
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headerfilterby.c +0 -302
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headerfilterby.h +0 -29
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers.c +0 -1370
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers.h +0 -22
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_in.c +0 -782
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_in.h +0 -22
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_out.c +0 -625
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_out.h +0 -23
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initby.c +0 -42
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initby.h +0 -23
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initworkerby.c +0 -320
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initworkerby.h +0 -25
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_log.c +0 -300
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_log.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_logby.c +0 -227
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_logby.h +0 -22
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_misc.c +0 -252
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_misc.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_module.c +0 -924
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ndk.c +0 -184
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ndk.h +0 -21
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_output.c +0 -794
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_output.h +0 -28
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_pcrefix.c +0 -106
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_pcrefix.h +0 -23
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_phase.c +0 -94
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_phase.h +0 -13
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_probe.h +0 -85
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_regex.c +0 -2468
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_regex.h +0 -22
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_body.c +0 -1169
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_body.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_method.c +0 -252
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_method.h +0 -19
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_rewriteby.c +0 -351
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_rewriteby.h +0 -22
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_script.c +0 -538
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_script.h +0 -86
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_setby.c +0 -216
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_setby.h +0 -15
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_shdict.c +0 -1844
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_shdict.h +0 -52
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_sleep.c +0 -191
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_sleep.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_tcp.c +0 -5314
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_tcp.h +0 -156
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_udp.c +0 -1624
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_udp.h +0 -56
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_string.c +0 -704
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_string.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_subrequest.c +0 -1741
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_subrequest.h +0 -46
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_time.c +0 -278
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_time.h +0 -21
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_timer.c +0 -661
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_timer.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uri.c +0 -110
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uri.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uthread.c +0 -283
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uthread.h +0 -36
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_util.c +0 -3972
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_util.h +0 -423
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_variable.c +0 -499
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_variable.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_worker.c +0 -64
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_worker.h +0 -17
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/tapset/ngx_lua.stp +0 -5
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/build.sh +0 -39
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/build2.sh +0 -55
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/fix-comments +0 -27
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/gdbinit +0 -415
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/ngx-links +0 -62
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/reindex +0 -64
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/releng +0 -8
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/retab +0 -8
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/revim +0 -102
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/run_test.sh +0 -10
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/update-readme.sh +0 -4
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/valgrind.suppress +0 -144
- data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/CHANGES +0 -107
- data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/LICENSE +0 -25
- data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/Makefile +0 -8
- data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/README +0 -329
- data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/config +0 -3
- data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/ngx_http_uploadprogress_module.c +0 -1774
- data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/README +0 -53
- data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/config +0 -3
- data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/ngx_http_upstream_fair_module.c +0 -1356
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/CHANGELOG.md +0 -37
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/HACKING.md +0 -24
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/LICENSE +0 -20
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/README.rst +0 -182
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/config +0 -8
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/nginx-0.6-support.patch +0 -23
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/ngx_http_fancyindex_module.c +0 -1305
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.awk +0 -52
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.h +0 -103
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.html +0 -102
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/CHANGES +0 -37
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/README +0 -141
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/config +0 -3
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.google_code_home_page.wiki +0 -120
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.html +0 -199
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.wiki +0 -123
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/ngx_http_subs_filter_module.c +0 -1298
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/README +0 -275
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/AutoInstall.pm +0 -820
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install.pm +0 -470
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/AutoInstall.pm +0 -82
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Base.pm +0 -83
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Can.pm +0 -81
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Fetch.pm +0 -93
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Include.pm +0 -34
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Makefile.pm +0 -415
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Metadata.pm +0 -716
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/TestBase.pm +0 -29
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Win32.pm +0 -64
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/WriteAll.pm +0 -63
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Spiffy.pm +0 -539
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Base.pm +0 -682
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Base/Filter.pm +0 -341
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Builder.pm +0 -1413
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Builder/Module.pm +0 -81
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/More.pm +0 -735
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx.pm +0 -315
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/LWP.pm +0 -524
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/Socket.pm +0 -1749
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/Util.pm +0 -874
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs.t +0 -136
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_capture.t +0 -32
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_fix_string.t +0 -32
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_regex.t +0 -108
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_types.t +0 -59
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/test.sh +0 -5
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/update-readme.sh +0 -7
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/wiki2google_code_homepage.pl +0 -29
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/wiki2pod.pl +0 -129
- data/packaging/debian/debian_specs/nginx/nginx-common.NEWS +0 -135
- data/packaging/debian/debian_specs/nginx/nginx-common.README.Debian +0 -45
- data/packaging/debian/debian_specs/nginx/nginx-common.dirs.erb +0 -32
- data/packaging/debian/debian_specs/nginx/nginx-common.install +0 -3
- data/packaging/debian/debian_specs/nginx/nginx-common.lintian-overrides +0 -2
- data/packaging/debian/debian_specs/nginx/nginx-common.manpages +0 -1
- data/packaging/debian/debian_specs/nginx/nginx-common.nginx.default +0 -10
- data/packaging/debian/debian_specs/nginx/nginx-common.nginx.init.erb +0 -214
- data/packaging/debian/debian_specs/nginx/nginx-common.nginx.logrotate +0 -18
- data/packaging/debian/debian_specs/nginx/nginx-common.nginx.service.erb +0 -37
- data/packaging/debian/debian_specs/nginx/nginx-common.postinst.erb +0 -66
- data/packaging/debian/debian_specs/nginx/nginx-common.postrm.erb +0 -46
- data/packaging/debian/debian_specs/nginx/nginx-common.preinst +0 -47
- data/packaging/debian/debian_specs/nginx/nginx-common.prerm.erb +0 -28
- data/packaging/debian/debian_specs/nginx/nginx-doc.docs +0 -2
- data/packaging/debian/debian_specs/nginx/nginx-doc.examples +0 -1
- data/packaging/debian/debian_specs/nginx/nginx-extras.install.erb +0 -17
- data/packaging/debian/debian_specs/nginx/nginx-extras.lintian-overrides +0 -1
- data/packaging/debian/debian_specs/nginx/nginx-extras.postinst.erb +0 -44
- data/packaging/debian/debian_specs/nginx/nginx-extras.prerm +0 -22
- data/packaging/debian/debian_specs/nginx/nginx.1 +0 -47
- data/packaging/debian/debian_specs/nginx/patches/perl-use-dpkg-buildflags.patch +0 -23
- data/packaging/debian/debian_specs/nginx/patches/series +0 -1
- data/packaging/debian/debian_specs/nginx/rules.erb +0 -185
- data/packaging/debian/debian_specs/nginx/source/format +0 -1
- data/packaging/debian/debian_specs/nginx/tests/control +0 -4
- data/packaging/debian/debian_specs/nginx/ufw/nginx +0 -14
- data/packaging/debian/debian_specs/nginx/upstream/signing-key.asc +0 -34
- data/packaging/debian/debian_specs/nginx/watch +0 -3
- data/packaging/debian/debian_specs/passenger/README.Debian +0 -12
- data/packaging/debian/debian_specs/passenger/changelog +0 -316
- data/packaging/debian/debian_specs/passenger/compat +0 -1
- data/packaging/debian/debian_specs/passenger/control.erb +0 -123
- data/packaging/debian/debian_specs/passenger/copyright +0 -385
- data/packaging/debian/debian_specs/passenger/helpers.rb +0 -24
- data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.install +0 -3
- data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.postinst +0 -36
- data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.prerm +0 -15
- data/packaging/debian/debian_specs/passenger/locations.ini.erb +0 -14
- data/packaging/debian/debian_specs/passenger/passenger-dev.install.erb +0 -3
- data/packaging/debian/debian_specs/passenger/passenger-doc.install.erb +0 -2
- data/packaging/debian/debian_specs/passenger/passenger.conf +0 -6
- data/packaging/debian/debian_specs/passenger/passenger.docs +0 -4
- data/packaging/debian/debian_specs/passenger/passenger.install.erb +0 -16
- data/packaging/debian/debian_specs/passenger/passenger.load +0 -3
- data/packaging/debian/debian_specs/passenger/passenger.manpages +0 -3
- data/packaging/debian/debian_specs/passenger/passenger_free_ruby.c +0 -29
- data/packaging/debian/debian_specs/passenger/passenger_ruby_utils.c +0 -54
- data/packaging/debian/debian_specs/passenger/passenger_system_ruby.c.erb +0 -37
- data/packaging/debian/debian_specs/passenger/rules.erb +0 -84
- data/packaging/debian/debian_specs/passenger/source/format +0 -1
- data/packaging/debian/debian_specs/passenger_enterprise/README.Debian +0 -12
- data/packaging/debian/debian_specs/passenger_enterprise/changelog +0 -316
- data/packaging/debian/debian_specs/passenger_enterprise/compat +0 -1
- data/packaging/debian/debian_specs/passenger_enterprise/control.erb +0 -123
- data/packaging/debian/debian_specs/passenger_enterprise/copyright +0 -385
- data/packaging/debian/debian_specs/passenger_enterprise/helpers.rb +0 -2
- data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.install +0 -3
- data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.postinst +0 -36
- data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.prerm +0 -15
- data/packaging/debian/debian_specs/passenger_enterprise/locations.ini.erb +0 -14
- data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise-dev.install.erb +0 -3
- data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise-doc.install.erb +0 -2
- data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.docs +0 -4
- data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.install.erb +0 -14
- data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.manpages +0 -3
- data/packaging/debian/debian_specs/passenger_enterprise/passenger.conf +0 -6
- data/packaging/debian/debian_specs/passenger_enterprise/passenger.load +0 -3
- data/packaging/debian/debian_specs/passenger_enterprise/passenger_free_ruby.c.erb +0 -1
- data/packaging/debian/debian_specs/passenger_enterprise/passenger_ruby_utils.c.erb +0 -1
- data/packaging/debian/debian_specs/passenger_enterprise/passenger_system_ruby.c.erb +0 -1
- data/packaging/debian/debian_specs/passenger_enterprise/patches/series +0 -0
- data/packaging/debian/debian_specs/passenger_enterprise/rules.erb +0 -84
- data/packaging/debian/debian_specs/passenger_enterprise/source/format +0 -1
- data/packaging/debian/docker_images/Makefile +0 -38
- data/packaging/debian/docker_images/buildbox/CONTAINER_VERSION.txt +0 -0
- data/packaging/debian/docker_images/buildbox/Dockerfile +0 -3
- data/packaging/debian/docker_images/buildbox/Gemfile +0 -9
- data/packaging/debian/docker_images/buildbox/Gemfile.lock +0 -42
- data/packaging/debian/docker_images/buildbox/install.sh +0 -85
- data/packaging/debian/docker_images/buildbox/pbuilderrc +0 -4
- data/packaging/debian/docker_images/buildbox/sudoers.conf +0 -6
- data/packaging/debian/docker_images/setup-buildbox-docker-image +0 -7
- data/packaging/debian/docker_images/setup-testbox-docker-image-debian-6 +0 -7
- data/packaging/debian/docker_images/setup-testbox-docker-image-debian-7 +0 -7
- data/packaging/debian/docker_images/setup-testbox-docker-image-debian-8 +0 -7
- data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-12.04 +0 -7
- data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-14.04 +0 -7
- data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-15.04 +0 -7
- data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-15.10 +0 -7
- data/packaging/debian/docker_images/testbox-debian-6/Dockerfile +0 -3
- data/packaging/debian/docker_images/testbox-debian-6/Gemfile +0 -2
- data/packaging/debian/docker_images/testbox-debian-6/Gemfile.lock +0 -23
- data/packaging/debian/docker_images/testbox-debian-6/argparse.py +0 -2374
- data/packaging/debian/docker_images/testbox-debian-6/install.sh +0 -78
- data/packaging/debian/docker_images/testbox-debian-7/Dockerfile +0 -3
- data/packaging/debian/docker_images/testbox-debian-7/Gemfile +0 -2
- data/packaging/debian/docker_images/testbox-debian-7/Gemfile.lock +0 -23
- data/packaging/debian/docker_images/testbox-debian-7/install.sh +0 -71
- data/packaging/debian/docker_images/testbox-debian-8/Dockerfile +0 -3
- data/packaging/debian/docker_images/testbox-debian-8/Gemfile +0 -2
- data/packaging/debian/docker_images/testbox-debian-8/Gemfile.lock +0 -23
- data/packaging/debian/docker_images/testbox-debian-8/install.sh +0 -70
- data/packaging/debian/docker_images/testbox-ubuntu-12.04/Dockerfile +0 -3
- data/packaging/debian/docker_images/testbox-ubuntu-12.04/Gemfile +0 -2
- data/packaging/debian/docker_images/testbox-ubuntu-12.04/Gemfile.lock +0 -23
- data/packaging/debian/docker_images/testbox-ubuntu-12.04/install.sh +0 -69
- data/packaging/debian/docker_images/testbox-ubuntu-14.04/Dockerfile +0 -3
- data/packaging/debian/docker_images/testbox-ubuntu-14.04/Gemfile +0 -2
- data/packaging/debian/docker_images/testbox-ubuntu-14.04/Gemfile.lock +0 -23
- data/packaging/debian/docker_images/testbox-ubuntu-14.04/install.sh +0 -69
- data/packaging/debian/docker_images/testbox-ubuntu-15.04/Dockerfile +0 -3
- data/packaging/debian/docker_images/testbox-ubuntu-15.04/Gemfile +0 -2
- data/packaging/debian/docker_images/testbox-ubuntu-15.04/Gemfile.lock +0 -23
- data/packaging/debian/docker_images/testbox-ubuntu-15.04/install.sh +0 -69
- data/packaging/debian/docker_images/testbox-ubuntu-15.10/Dockerfile +0 -3
- data/packaging/debian/docker_images/testbox-ubuntu-15.10/Gemfile +0 -2
- data/packaging/debian/docker_images/testbox-ubuntu-15.10/Gemfile.lock +0 -23
- data/packaging/debian/docker_images/testbox-ubuntu-15.10/install.sh +0 -69
- data/packaging/debian/internal/build/Rakefile +0 -235
- data/packaging/debian/internal/build/build-passenger-orig-tarball.sh +0 -76
- data/packaging/debian/internal/build/build-source-package.rb +0 -121
- data/packaging/debian/internal/build/download-nginx-orig-tarball.sh +0 -17
- data/packaging/debian/internal/build/rakefile_support.rb +0 -96
- data/packaging/debian/internal/build/setup-environment-essentials.sh +0 -15
- data/packaging/debian/internal/build/setup-environment.sh +0 -29
- data/packaging/debian/internal/lib/distro_info.rb +0 -82
- data/packaging/debian/internal/lib/distro_info.sh +0 -303
- data/packaging/debian/internal/lib/distro_info.sh.erb +0 -65
- data/packaging/debian/internal/lib/library.sh +0 -83
- data/packaging/debian/internal/lib/preprocessor.rb +0 -173
- data/packaging/debian/internal/lib/tracking.rb +0 -95
- data/packaging/debian/internal/lib/tracking_category.rb +0 -45
- data/packaging/debian/internal/lib/tracking_database.rb +0 -132
- data/packaging/debian/internal/lib/tracking_task.rb +0 -148
- data/packaging/debian/internal/lib/utils.rb +0 -78
- data/packaging/debian/internal/publish/Rakefile +0 -97
- data/packaging/debian/internal/publish/oss-binaries.phusionpassenger.com-fingerprint.txt +0 -1
- data/packaging/debian/internal/publish/packagecloud_fingerprint.txt +0 -1
- data/packaging/debian/internal/publish/passenger_website_fingerprint.txt +0 -1
- data/packaging/debian/internal/publish/preinit.sh +0 -7
- data/packaging/debian/internal/publish/rakefile_support.rb +0 -183
- data/packaging/debian/internal/scripts/gpg_noninteractive/gpg +0 -11
- data/packaging/debian/internal/scripts/initccache.sh +0 -35
- data/packaging/debian/internal/scripts/inituidgid.sh +0 -19
- data/packaging/debian/internal/scripts/my_init +0 -340
- data/packaging/debian/internal/scripts/pin_certificates +0 -34
- data/packaging/debian/internal/scripts/regen_distro_info_script.sh +0 -3
- data/packaging/debian/internal/scripts/setup-vagrant.sh +0 -12
- data/packaging/debian/internal/scripts/setuser +0 -31
- data/packaging/debian/internal/shell/initpbuilder.sh +0 -3
- data/packaging/debian/internal/shell/preinit.sh +0 -28
- data/packaging/debian/internal/shell/sudoers.conf +0 -1
- data/packaging/debian/internal/test/apache/apache-24.conf +0 -5
- data/packaging/debian/internal/test/apache/apache-pre-24.conf +0 -4
- data/packaging/debian/internal/test/apache/vhost.conf +0 -17
- data/packaging/debian/internal/test/misc/config.json +0 -15
- data/packaging/debian/internal/test/misc/hosts.conf +0 -4
- data/packaging/debian/internal/test/misc/init.sh +0 -25
- data/packaging/debian/internal/test/misc/nodejs_test_app.js +0 -6
- data/packaging/debian/internal/test/misc/python_test_app.py +0 -3
- data/packaging/debian/internal/test/misc/ruby_test_app.rb +0 -5
- data/packaging/debian/internal/test/misc/test_support.rb +0 -61
- data/packaging/debian/internal/test/nginx/vhost.conf +0 -23
- data/packaging/debian/internal/test/system_web_server_test.rb +0 -126
- data/packaging/debian/internal/test/test.sh +0 -141
- data/packaging/debian/jenkins/publish/clear_caches.rb +0 -48
- data/packaging/debian/jenkins/publish/publish.sh +0 -69
- data/packaging/debian/jenkins/test/test.sh +0 -63
- data/packaging/debian/passenger_apt_automation.sublime-project +0 -14
- data/packaging/debian/publish +0 -172
- data/packaging/debian/shell +0 -116
- data/packaging/debian/test +0 -142
- data/packaging/rpm/passenger_spec/rubygem-passenger-4.0.18-gcc47-include-sys_types.patch +0 -45
- data/test/cxx/Base64Test.cpp +0 -50
- data/test/cxx/FileBackedPipeTest.cpp +0 -626
- data/test/cxx/HttpHeaderBuffererTest.cpp +0 -257
- data/test/cxx/ScgiRequestParserTest.cpp +0 -423
- data/test/cxx/ServerInstanceDirTest.cpp +0 -175
- data/test/ruby/admin_tools_spec.rb +0 -360
- data/test/ruby/classic_rails/loader_spec.rb +0 -46
- data/test/ruby/classic_rails/preloader_spec.rb +0 -52
- data/test/ruby/standalone/runtime_locator_spec.rb +0 -214
- data/test/stub/rails2.3/Rakefile +0 -10
- data/test/stub/rails2.3/app/controllers/application_controller.rb +0 -10
- data/test/stub/rails2.3/app/controllers/bar_controller_1.rb +0 -5
- data/test/stub/rails2.3/app/controllers/bar_controller_2.rb +0 -5
- data/test/stub/rails2.3/app/controllers/foo_controller.rb +0 -21
- data/test/stub/rails2.3/app/helpers/application_helper.rb +0 -3
- data/test/stub/rails2.3/app/helpers/bar_helper.rb +0 -2
- data/test/stub/rails2.3/app/helpers/foo_helper.rb +0 -2
- data/test/stub/rails2.3/config/boot.rb +0 -110
- data/test/stub/rails2.3/config/database.yml +0 -19
- data/test/stub/rails2.3/config/environment.rb +0 -62
- data/test/stub/rails2.3/config/environments/development.rb +0 -17
- data/test/stub/rails2.3/config/environments/production.rb +0 -18
- data/test/stub/rails2.3/config/environments/staging.rb +0 -18
- data/test/stub/rails2.3/config/initializers/inflections.rb +0 -10
- data/test/stub/rails2.3/config/initializers/mime_types.rb +0 -5
- data/test/stub/rails2.3/config/routes.rb +0 -35
- data/test/stub/rails2.3/log/.gitignore +0 -1
- data/test/stub/rails2.3/public/.gitignore +0 -1
- data/test/stub/rails2.3/script/about +0 -3
- data/test/stub/rails2.3/script/console +0 -3
- data/test/stub/rails2.3/script/dbconsole +0 -3
- data/test/stub/rails2.3/script/destroy +0 -3
- data/test/stub/rails2.3/script/generate +0 -3
- data/test/stub/rails2.3/script/performance/benchmarker +0 -3
- data/test/stub/rails2.3/script/performance/profiler +0 -3
- data/test/stub/rails2.3/script/performance/request +0 -3
- data/test/stub/rails2.3/script/plugin +0 -3
- data/test/stub/rails2.3/script/process/inspector +0 -3
- data/test/stub/rails2.3/script/process/reaper +0 -3
- data/test/stub/rails2.3/script/process/spawner +0 -3
- data/test/stub/rails2.3/script/runner +0 -3
- data/test/stub/rails2.3/script/server +0 -3
- data/test/stub/rails2.3/tmp/cache/.gitignore +0 -1
- data/test/stub/rails2.3/tmp/pids/.gitignore +0 -1
- data/test/stub/rails2.3/tmp/sessions/.gitignore +0 -1
- data/test/stub/rails2.3/tmp/sockets/.gitignore +0 -1
@@ -1,54 +0,0 @@
|
|
1
|
-
0.73 (Sep. 2 2014)
|
2
|
-
fix: turning on gzip cleared Etag subscriber response header
|
3
|
-
fix: channels incorrectly deleted when overwhelmed with connections
|
4
|
-
feature: CORS support via OPTIONS request method response
|
5
|
-
fix: file descriptor leak when restarting nginx via SIGHUP
|
6
|
-
improve: concurrency for interprocess notifications
|
7
|
-
refactor: completely encapsulated message store
|
8
|
-
fix: slow memory leak introduced in 0.7
|
9
|
-
fix: memory leak when not using message buffer
|
10
|
-
0.712 (Mar. 21 2014)
|
11
|
-
fix: intermittently dropped long-polling connections on internal redirects
|
12
|
-
fix: unable to proxy long-polling subscribers. (thanks wandenberg and sanmai)
|
13
|
-
0.711 (Mar. 13 2014)
|
14
|
-
fix: incompatibility with cache manager (proxy_cache and fastcgi_cache directives)
|
15
|
-
0.71 (Mar. 1 2014)
|
16
|
-
fix: removed unused variables and functions to quiet down GCC
|
17
|
-
0.7: (Feb. 20 2014)
|
18
|
-
fix: last-in concurrency setting wasn't working reliably
|
19
|
-
refactor: partially separated message storage. add a test harness.
|
20
|
-
fix: segfault from concurrency bug while garbage-collecting channels
|
21
|
-
fix: some large messages got lost
|
22
|
-
0.692 (Feb. 3 2010)
|
23
|
-
fix: error log reported failed close() for some publisher requests with large messages
|
24
|
-
fix: occasional memory leak during message deletion
|
25
|
-
fix: worker messages intended for dead worker processes were not deleted
|
26
|
-
0.691 (Feb. 2 2010)
|
27
|
-
fix: server reload (via SIGHUP signal) was failing
|
28
|
-
fix: segfault on messages longer than client_body_buffer_size (thanks wfelipe)
|
29
|
-
change: removed push_min_message_recipients, added push_delete_oldest_received_message
|
30
|
-
0.69 (Nov. 17 2009)
|
31
|
-
fix: publisher got a 201 Created response even if the channel had no subscribers at the time (should be 202 Accepted)
|
32
|
-
fix: small memory leak after each message broadcast to a channel
|
33
|
-
feature: optional push_max_channel_subscribers setting added
|
34
|
-
fix: first-in concurrency setting wasn't responding to subscribers with a correct status code on conflict
|
35
|
-
fix: reused subscriber connections sometimes failed to receive messages
|
36
|
-
unfeature: no more nginx 0.6 support. not worth the hassle.
|
37
|
-
0.683 (Nov. 10 2009)
|
38
|
-
change: default max. reserved memory size changed form 16MB to 32 MB
|
39
|
-
change: unused node garbage collection made a little more aggressive (max. 3 unused channels per channel search instead of 1)
|
40
|
-
fix: unused nodes were deleted only on channel id hash collision (very rare)
|
41
|
-
fix: segmentation fault from allocating insufficient memory for interprocess messaging
|
42
|
-
0.681 (Nov. 6 2009)
|
43
|
-
feature: added push_message_buffer_length setting, which sets push_message_max_buffer_length and push_message_min_buffer_length at once.
|
44
|
-
fix: publisher channel info text/json response now uses double quotes instead of single.
|
45
|
-
fix: interprocess messages were not removed from shared memory correctly, causing weird errors
|
46
|
-
0.68 (Nov. 5 2009)
|
47
|
-
change: default push_subscriber_concurrency value is now "broadcast"
|
48
|
-
fix: incorrect error messages for invalid push_pubscriber and push_subscriber_concurrency settings
|
49
|
-
change: removed deprecated push_buffer_size and push_queue_messages settings
|
50
|
-
feature: rudimentary content-type negotiation for publisher channel info response.
|
51
|
-
support text/plain, text/json, text/yaml and application/xml (and mimetype equivalents)
|
52
|
-
fix: publisher GET response has HTTP status 0
|
53
|
-
0.67beta (Nov. 4 2009) and older
|
54
|
-
see git repository
|
@@ -1,26 +0,0 @@
|
|
1
|
-
ngx_feature="http_push_module"
|
2
|
-
ngx_feature_name=
|
3
|
-
ngx_feature_run=no
|
4
|
-
ngx_feature_incs=
|
5
|
-
ngx_feature_path=
|
6
|
-
ngx_feature_libs=
|
7
|
-
ngx_feature_test=
|
8
|
-
|
9
|
-
ngx_addon_name=ngx_http_push_module
|
10
|
-
HTTP_MODULES="$HTTP_MODULES ngx_http_push_module"
|
11
|
-
CORE_INCS="$CORE_INCS \
|
12
|
-
$ngx_addon_dir/src"
|
13
|
-
NGX_ADDON_SRCS="$NGX_ADDON_SRCS \
|
14
|
-
${ngx_addon_dir}/src/ngx_http_push_defs.c \
|
15
|
-
${ngx_addon_dir}/src/store/rbtree_util.c \
|
16
|
-
${ngx_addon_dir}/src/store/ngx_http_push_module_ipc.c \
|
17
|
-
${ngx_addon_dir}/src/store/memory/store.c \
|
18
|
-
${ngx_addon_dir}/src/store/ngx_rwlock.c \
|
19
|
-
${ngx_addon_dir}/src/ngx_http_push_module.c \
|
20
|
-
"
|
21
|
-
|
22
|
-
have=NGX_HTTP_HEADERS . auto/have
|
23
|
-
. auto/feature
|
24
|
-
|
25
|
-
CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
|
26
|
-
CORE_INCS="$CORE_INCS $ngx_feature_incs"
|
@@ -1,191 +0,0 @@
|
|
1
|
-
Basic HTTP Push Relay Protocol
|
2
|
-
|
3
|
-
Rev. 2.23
|
4
|
-
|
5
|
-
1. Introduction
|
6
|
-
|
7
|
-
1.1. Purpose
|
8
|
-
|
9
|
-
The primary purpose of this protocol is to enable a method of
|
10
|
-
long-polling, transparent to the web client, where client connections
|
11
|
-
idle only on the HTTP server and need not be forwarded.
|
12
|
-
|
13
|
-
1.2. Requirements
|
14
|
-
|
15
|
-
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
|
16
|
-
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
|
17
|
-
document are to be interpreted as described in RFC2119. An
|
18
|
-
implementation is not compliant if it fails to satisfy one or more of
|
19
|
-
the MUST or REQUIRED level requirements for the protocols it
|
20
|
-
implements.
|
21
|
-
|
22
|
-
An implementation that satisfies all the MUST or REQUIRED level and all
|
23
|
-
the SHOULD level requirements for its protocols is said to be
|
24
|
-
"unconditionally compliant"; one that satisfies all the MUST level
|
25
|
-
requirements but not all the SHOULD level requirements for its
|
26
|
-
protocols is said to be "conditionally compliant."
|
27
|
-
|
28
|
-
1.3. Terminology
|
29
|
-
|
30
|
-
This specification uses a number of terms to refer to the roles played
|
31
|
-
by participants in, and objects of, this protocol:
|
32
|
-
|
33
|
-
server
|
34
|
-
The HTTP server implementing this protocol.
|
35
|
-
|
36
|
-
client
|
37
|
-
A program that initiates TCP/IP connections with the HTTP server
|
38
|
-
for the purpose of sending HTTP requests.
|
39
|
-
|
40
|
-
message
|
41
|
-
Application specific data, usually enclosed in a request or
|
42
|
-
response body.
|
43
|
-
|
44
|
-
channel
|
45
|
-
A resource representing an isolated pathway for message
|
46
|
-
transmission. Each channel has a single unique message queue.
|
47
|
-
|
48
|
-
subscriber
|
49
|
-
A client that sends HTTP requests to the server for the purposes
|
50
|
-
of receiving messages via some channel.
|
51
|
-
|
52
|
-
publisher
|
53
|
-
A client that sends HTTP requests to the server in order to
|
54
|
-
transmit messages to subscribers via a channel.
|
55
|
-
|
56
|
-
channel id
|
57
|
-
A unique identifier for a channel.
|
58
|
-
|
59
|
-
location
|
60
|
-
A url (or set of urls) on the server.
|
61
|
-
|
62
|
-
2. Requirements
|
63
|
-
|
64
|
-
2.1. Server Requirements
|
65
|
-
|
66
|
-
The HTTP server MUST have a mechanism of specifying a url, or a set of
|
67
|
-
urls as publisher and subscriber locations. All requests to the
|
68
|
-
publisher location MUST be treated as publisher requests, all to the
|
69
|
-
subscriber location as subscriber requests.
|
70
|
-
|
71
|
-
The server MUST implement a mechanism for identifying channels with
|
72
|
-
unique ids. This MAY, for example, be a url parameter (/foo/?id=123) or
|
73
|
-
a cookie. Methods of channel identification other than those using the
|
74
|
-
url MAY be used, but are strongly discouraged.
|
75
|
-
|
76
|
-
The server MUST accept requests on publisher locations and respond to
|
77
|
-
them immediately. It MUST also accept requests on subscriber locations,
|
78
|
-
but need not respond immediately.
|
79
|
-
|
80
|
-
2.2. Client Requirements
|
81
|
-
|
82
|
-
All clients must prodice valid HTTP requests. Subscriber clients must
|
83
|
-
have a caching mechanism that appropriately reacts to Last-Modified and
|
84
|
-
Etag response headers (web browsers, for example).
|
85
|
-
|
86
|
-
2.3. The Channel ID
|
87
|
-
|
88
|
-
It is not the responsibility of the server to generate IDs.
|
89
|
-
|
90
|
-
3. Server Operation
|
91
|
-
|
92
|
-
A publisher request functions as notification to the server of a
|
93
|
-
message to send to some subscribers over some channel. A subscriber
|
94
|
-
request notifies the server of the subscriber's intent to receive a
|
95
|
-
message.
|
96
|
-
|
97
|
-
3.1. The Subscriber
|
98
|
-
|
99
|
-
The server MUST accept all valid HTTP GET requests to the subscriber
|
100
|
-
location. All other request methods SHOULD be responded to with a 405
|
101
|
-
Method Not Allowed status code.
|
102
|
-
|
103
|
-
Subscriber requests are considered notifications of intent to receive
|
104
|
-
some message. Subscribers may request existing messages, messages that
|
105
|
-
are not yet available, and messages that are no longer available. The
|
106
|
-
requested message is identified using the If-Modified-Since and
|
107
|
-
If-None-Match request headers. A request with no If-Modified-Since
|
108
|
-
header MUST be assumed to be requesting the oldest available message in
|
109
|
-
a channel. Each 200 OK response containing a message MUST have its
|
110
|
-
Last-Modified and Etag headers set so that a request using those
|
111
|
-
headers will be interpreted as a request for the next available
|
112
|
-
message. Additionally, said 200 OK MUST contain the Content-Type header
|
113
|
-
of the message publisher request, unless no Content-Type header had
|
114
|
-
been provided or it is explicitly overridden by server configuration.
|
115
|
-
|
116
|
-
There are several common mechanisms for performing an HTTP server push.
|
117
|
-
The rest of the behavior of the server in response to a subscriber
|
118
|
-
request SHOULD be configurable and MUST be selected from the following
|
119
|
-
list of mechanisms:
|
120
|
-
|
121
|
-
Long-Polling
|
122
|
-
Requests for existing messages will be responded to immediately;
|
123
|
-
responses to requests for messages not yet available MUST be
|
124
|
-
delayed until the message becomes available. Delayed responses
|
125
|
-
MUST satisfy all of the following conditions:
|
126
|
-
|
127
|
-
+ A 200 OK response containing the message (and its
|
128
|
-
Content-Type) MUST be sent immediately after the message
|
129
|
-
becomes available. The entire response must be
|
130
|
-
indistinguishable from a response to a request for an existing
|
131
|
-
message.
|
132
|
-
+ If the channel the subscriber is waiting on is deleted or for
|
133
|
-
some reason becomes unavailable, the server MUST immediately
|
134
|
-
send a 410 Gone response.
|
135
|
-
+ If another subscriber has conflicted with this request, the
|
136
|
-
server MUST immediately send a 409 Conflict response.
|
137
|
-
|
138
|
-
Interval-Polling
|
139
|
-
All requests will be responded to immediately. Requests for
|
140
|
-
messages not yet available MUST produce a 304 Not Modified
|
141
|
-
response code.
|
142
|
-
|
143
|
-
In addition, when the server receives more than one concurrent
|
144
|
-
subscriber request on the same channel, it MUST do one of the
|
145
|
-
following:
|
146
|
-
|
147
|
-
Broadcast
|
148
|
-
No additional actions are performed
|
149
|
-
|
150
|
-
Last-in, first-out
|
151
|
-
All but the most recent long-held subscriber request on the
|
152
|
-
channel are sent a 409 Conflict response.
|
153
|
-
|
154
|
-
First-in, last-out
|
155
|
-
All but the oldest request will be sent a 409 Conflict
|
156
|
-
|
157
|
-
The server SHOULD make this selection configurable, and MUST default to
|
158
|
-
broadcast behavior.
|
159
|
-
|
160
|
-
3.2. The Publisher
|
161
|
-
|
162
|
-
The server MUST accept all valid HTTP requests to the publisher
|
163
|
-
location. The server, when sent a publisher request, MUST satisfy all
|
164
|
-
of the following conditions:
|
165
|
-
* GET requests receive a 200 OK response for existing channels and a
|
166
|
-
404 Not Found otherwise.
|
167
|
-
* PUT requests receive a 200 OK response. The request creates a
|
168
|
-
channel if no channel with the given channel id exists.
|
169
|
-
* DELETE requests receive a 200 OK if the channel identified by the
|
170
|
-
channel id exists and has been completely deleted. All subscribers
|
171
|
-
MUST have been sent a 410 Gone response. Requests for nonexistent
|
172
|
-
channels MUST be responded to with a 404 Not Found.
|
173
|
-
* POST requests are used to send messages. The request MAY contain a
|
174
|
-
body in any encoding representing a message to be sent over the
|
175
|
-
channel. The message MUST be immediately delivered to all currently
|
176
|
-
long-held subscriber requests. Additionally, the message MAY be
|
177
|
-
stored for future retrieval and the oldest message stored for the
|
178
|
-
channel MAY be deleted.
|
179
|
-
A POST request MUST be replied to with a 201 Created if there were
|
180
|
-
any long-held subscribers that have been sent this message, and
|
181
|
-
with a 202 Accepted otherwise.
|
182
|
-
The Content-Type header of the request MUST be forwarded with the
|
183
|
-
message.
|
184
|
-
|
185
|
-
Message storage limits SHOULD be configurable. publisher locations
|
186
|
-
SHOULD be configurable to allow foregoing message storage on POST
|
187
|
-
requests. All 200-level responses MUST, in the response body, contain
|
188
|
-
information about the applicable channel. This information MAY contain
|
189
|
-
the number of stored messages and the number of subscribers' requests
|
190
|
-
being long-held prior to this request. The server MAY implement a
|
191
|
-
content-negotiation scheme for this information.
|
@@ -1,59 +0,0 @@
|
|
1
|
-
#include <ngx_http.h>
|
2
|
-
#include "ngx_http_push_defs.h"
|
3
|
-
|
4
|
-
//string constants
|
5
|
-
//headers
|
6
|
-
const ngx_str_t NGX_HTTP_PUSH_HEADER_ETAG = ngx_string("Etag");
|
7
|
-
const ngx_str_t NGX_HTTP_PUSH_HEADER_IF_NONE_MATCH = ngx_string("If-None-Match");
|
8
|
-
const ngx_str_t NGX_HTTP_PUSH_HEADER_VARY = ngx_string("Vary");
|
9
|
-
const ngx_str_t NGX_HTTP_PUSH_HEADER_ALLOW = ngx_string("Allow");
|
10
|
-
const ngx_str_t NGX_HTTP_PUSH_HEADER_CACHE_CONTROL = ngx_string("Cache-Control");
|
11
|
-
const ngx_str_t NGX_HTTP_PUSH_HEADER_PRAGMA = ngx_string("Pragma");
|
12
|
-
const ngx_str_t NGX_HTTP_PUSH_HEADER_ACCESS_CONTROL_ALLOW_HEADERS = ngx_string("Access-Control-Allow-Headers");
|
13
|
-
const ngx_str_t NGX_HTTP_PUSH_HEADER_ACCESS_CONTROL_ALLOW_METHODS = ngx_string("Access-Control-Allow-Methods");
|
14
|
-
const ngx_str_t NGX_HTTP_PUSH_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN = ngx_string("Access-Control-Allow-Origin");
|
15
|
-
|
16
|
-
//header values
|
17
|
-
const ngx_str_t NGX_HTTP_PUSH_CACHE_CONTROL_VALUE = ngx_string("no-cache");
|
18
|
-
|
19
|
-
//status strings
|
20
|
-
const ngx_str_t NGX_HTTP_PUSH_HTTP_STATUS_409 = ngx_string("409 Conflict");
|
21
|
-
const ngx_str_t NGX_HTTP_PUSH_HTTP_STATUS_410 = ngx_string("410 Gone");
|
22
|
-
|
23
|
-
//other stuff
|
24
|
-
const ngx_str_t NGX_HTTP_PUSH_ANYSTRING= ngx_string("*");
|
25
|
-
const ngx_str_t NGX_HTTP_PUSH_ACCESS_CONTROL_ALLOWED_PUBLISHER_HEADERS = ngx_string("Content-Type, Origin");
|
26
|
-
const ngx_str_t NGX_HTTP_PUSH_ACCESS_CONTROL_ALLOWED_SUBSCRIBER_HEADERS = ngx_string("If-None-Match, If-Modified-Since, Origin");
|
27
|
-
const ngx_str_t NGX_HTTP_PUSH_ALLOW_GET_POST_PUT_DELETE_OPTIONS= ngx_string("GET, POST, PUT, DELETE, OPTIONS");
|
28
|
-
const ngx_str_t NGX_HTTP_PUSH_ALLOW_GET_OPTIONS= ngx_string("GET, OPTIONS");
|
29
|
-
const ngx_str_t NGX_HTTP_PUSH_VARY_HEADER_VALUE = ngx_string("If-None-Match, If-Modified-Since");
|
30
|
-
|
31
|
-
|
32
|
-
const ngx_str_t NGX_HTTP_PUSH_CHANNEL_INFO_PLAIN = ngx_string(
|
33
|
-
"queued messages: %ui" CRLF
|
34
|
-
"last requested: %d sec. ago (-1=never)" CRLF
|
35
|
-
"active subscribers: %ui"
|
36
|
-
"\0");
|
37
|
-
|
38
|
-
const ngx_str_t NGX_HTTP_PUSH_CHANNEL_INFO_JSON = ngx_string(
|
39
|
-
"{\"messages\": %ui, "
|
40
|
-
"\"requested\": %d, "
|
41
|
-
"\"subscribers\": %ui }"
|
42
|
-
"\0");
|
43
|
-
|
44
|
-
const ngx_str_t NGX_HTTP_PUSH_CHANNEL_INFO_XML = ngx_string(
|
45
|
-
"<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" CRLF
|
46
|
-
"<channel>" CRLF
|
47
|
-
" <messages>%ui</messages>" CRLF
|
48
|
-
" <requested>%d</requested>" CRLF
|
49
|
-
" <subscribers>%ui</subscribers>" CRLF
|
50
|
-
"</channel>"
|
51
|
-
"\0");
|
52
|
-
|
53
|
-
const ngx_str_t NGX_HTTP_PUSH_CHANNEL_INFO_YAML = ngx_string(
|
54
|
-
"---" CRLF
|
55
|
-
"messages: %ui" CRLF
|
56
|
-
"requested: %d" CRLF
|
57
|
-
"subscribers: %ui" CRLF
|
58
|
-
CRLF
|
59
|
-
"\0");
|
@@ -1,73 +0,0 @@
|
|
1
|
-
|
2
|
-
#define NGX_HTTP_PUSH_DEFAULT_SHM_SIZE 33554432 //32 megs
|
3
|
-
#define NGX_HTTP_PUSH_DEFAULT_BUFFER_TIMEOUT 3600
|
4
|
-
#define NGX_HTTP_PUSH_DEFAULT_SUBSCRIBER_TIMEOUT 0 //default: never timeout
|
5
|
-
//(liucougar: this is a bit confusing, but it is what's the default behavior before this option is introducecd)
|
6
|
-
#define NGX_HTTP_PUSH_DEFAULT_CHANNEL_TIMEOUT 5 //default: timeout in 5 seconds
|
7
|
-
|
8
|
-
#define NGX_HTTP_PUSH_DEFAULT_MIN_MESSAGES 1
|
9
|
-
#define NGX_HTTP_PUSH_DEFAULT_MAX_MESSAGES 10
|
10
|
-
|
11
|
-
#define NGX_HTTP_PUSH_SUBSCRIBER_CONCURRENCY_LASTIN 0
|
12
|
-
#define NGX_HTTP_PUSH_SUBSCRIBER_CONCURRENCY_FIRSTIN 1
|
13
|
-
#define NGX_HTTP_PUSH_SUBSCRIBER_CONCURRENCY_BROADCAST 2
|
14
|
-
|
15
|
-
#define NGX_HTTP_PUSH_MECHANISM_LONGPOLL 0
|
16
|
-
#define NGX_HTTP_PUSH_MECHANISM_INTERVALPOLL 1
|
17
|
-
|
18
|
-
#define NGX_HTTP_PUSH_MIN_MESSAGE_RECIPIENTS 0
|
19
|
-
|
20
|
-
#define NGX_HTTP_PUSH_MAX_CHANNEL_ID_LENGTH 1024 //bytes
|
21
|
-
|
22
|
-
#ifndef NGX_HTTP_CONFLICT
|
23
|
-
#define NGX_HTTP_CONFLICT 409
|
24
|
-
#endif
|
25
|
-
|
26
|
-
#ifndef NGX_HTTP_GONE
|
27
|
-
#define NGX_HTTP_GONE 410
|
28
|
-
#endif
|
29
|
-
|
30
|
-
#ifndef NGX_HTTP_CREATED
|
31
|
-
#define NGX_HTTP_CREATED 201
|
32
|
-
#endif
|
33
|
-
|
34
|
-
#ifndef NGX_HTTP_ACCEPTED
|
35
|
-
#define NGX_HTTP_ACCEPTED 202
|
36
|
-
#endif
|
37
|
-
|
38
|
-
|
39
|
-
#define NGX_HTTP_PUSH_MESSAGE_RECEIVED 9000
|
40
|
-
#define NGX_HTTP_PUSH_MESSAGE_QUEUED 9001
|
41
|
-
|
42
|
-
#define NGX_HTTP_PUSH_MESSAGE_FOUND 1000
|
43
|
-
#define NGX_HTTP_PUSH_MESSAGE_EXPECTED 1001
|
44
|
-
#define NGX_HTTP_PUSH_MESSAGE_EXPIRED 1002
|
45
|
-
|
46
|
-
extern const ngx_str_t NGX_HTTP_PUSH_HEADER_ETAG;
|
47
|
-
extern const ngx_str_t NGX_HTTP_PUSH_HEADER_IF_NONE_MATCH;
|
48
|
-
extern const ngx_str_t NGX_HTTP_PUSH_HEADER_VARY;
|
49
|
-
extern const ngx_str_t NGX_HTTP_PUSH_HEADER_ALLOW;
|
50
|
-
extern const ngx_str_t NGX_HTTP_PUSH_HEADER_CACHE_CONTROL;
|
51
|
-
extern const ngx_str_t NGX_HTTP_PUSH_HEADER_PRAGMA;
|
52
|
-
extern const ngx_str_t NGX_HTTP_PUSH_HEADER_ACCESS_CONTROL_ALLOW_METHODS;
|
53
|
-
extern const ngx_str_t NGX_HTTP_PUSH_HEADER_ACCESS_CONTROL_ALLOW_HEADERS;
|
54
|
-
extern const ngx_str_t NGX_HTTP_PUSH_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN;
|
55
|
-
|
56
|
-
//header values
|
57
|
-
extern const ngx_str_t NGX_HTTP_PUSH_CACHE_CONTROL_VALUE;
|
58
|
-
|
59
|
-
//status strings
|
60
|
-
extern const ngx_str_t NGX_HTTP_PUSH_HTTP_STATUS_409;
|
61
|
-
extern const ngx_str_t NGX_HTTP_PUSH_HTTP_STATUS_410;
|
62
|
-
|
63
|
-
//other stuff
|
64
|
-
extern const ngx_str_t NGX_HTTP_PUSH_ANYSTRING;
|
65
|
-
extern const ngx_str_t NGX_HTTP_PUSH_ACCESS_CONTROL_ALLOWED_PUBLISHER_HEADERS;
|
66
|
-
extern const ngx_str_t NGX_HTTP_PUSH_ACCESS_CONTROL_ALLOWED_SUBSCRIBER_HEADERS;
|
67
|
-
extern const ngx_str_t NGX_HTTP_PUSH_ALLOW_GET_POST_PUT_DELETE_OPTIONS;
|
68
|
-
extern const ngx_str_t NGX_HTTP_PUSH_ALLOW_GET_OPTIONS;
|
69
|
-
extern const ngx_str_t NGX_HTTP_PUSH_VARY_HEADER_VALUE;
|
70
|
-
extern const ngx_str_t NGX_HTTP_PUSH_CHANNEL_INFO_PLAIN;
|
71
|
-
extern const ngx_str_t NGX_HTTP_PUSH_CHANNEL_INFO_JSON;
|
72
|
-
extern const ngx_str_t NGX_HTTP_PUSH_CHANNEL_INFO_XML;
|
73
|
-
extern const ngx_str_t NGX_HTTP_PUSH_CHANNEL_INFO_YAML;
|
@@ -1,783 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* Copyright 2009 Leo Ponomarev.
|
3
|
-
*/
|
4
|
-
|
5
|
-
#include <ngx_http_push_module.h>
|
6
|
-
|
7
|
-
#include <store/memory/store.h>
|
8
|
-
#include <ngx_http_push_module_setup.c>
|
9
|
-
|
10
|
-
ngx_int_t ngx_http_push_worker_processes;
|
11
|
-
ngx_pool_t *ngx_http_push_pool;
|
12
|
-
ngx_module_t ngx_http_push_module;
|
13
|
-
|
14
|
-
ngx_http_push_store_t *ngx_http_push_store = &ngx_http_push_store_memory;
|
15
|
-
|
16
|
-
|
17
|
-
ngx_int_t ngx_http_push_respond_status_only(ngx_http_request_t *r, ngx_int_t status_code, const ngx_str_t *statusline) {
|
18
|
-
r->headers_out.status=status_code;
|
19
|
-
if(statusline!=NULL) {
|
20
|
-
r->headers_out.status_line.len =statusline->len;
|
21
|
-
r->headers_out.status_line.data=statusline->data;
|
22
|
-
}
|
23
|
-
r->headers_out.content_length_n = 0;
|
24
|
-
r->header_only = 1;
|
25
|
-
return ngx_http_send_header(r);
|
26
|
-
}
|
27
|
-
|
28
|
-
void ngx_http_push_clean_timeouted_subscriber(ngx_event_t *ev)
|
29
|
-
{
|
30
|
-
ngx_http_push_subscriber_t *subscriber = NULL;
|
31
|
-
ngx_http_request_t *r = NULL;
|
32
|
-
|
33
|
-
subscriber = ev->data;
|
34
|
-
r = subscriber->request;
|
35
|
-
|
36
|
-
if (r->connection->destroyed) {
|
37
|
-
return;
|
38
|
-
}
|
39
|
-
|
40
|
-
ngx_int_t rc = ngx_http_push_respond_status_only(r, NGX_HTTP_NOT_MODIFIED, NULL);
|
41
|
-
ngx_http_finalize_request(r, rc);
|
42
|
-
//the subscriber and channel counter will be freed by the pool cleanup callback
|
43
|
-
}
|
44
|
-
|
45
|
-
void ngx_http_push_subscriber_del_timer(ngx_http_push_subscriber_t *sb) {
|
46
|
-
if (sb->event.timer_set) {
|
47
|
-
ngx_del_timer(&sb->event);
|
48
|
-
}
|
49
|
-
}
|
50
|
-
|
51
|
-
void ngx_http_push_subscriber_clear_ctx(ngx_http_push_subscriber_t *sb) {
|
52
|
-
ngx_http_push_subscriber_del_timer(sb);
|
53
|
-
sb->clndata->subscriber = NULL;
|
54
|
-
sb->clndata->channel = NULL;
|
55
|
-
}
|
56
|
-
|
57
|
-
|
58
|
-
#define NGX_HTTP_BUF_ALLOC_SIZE(buf) \
|
59
|
-
(sizeof(*buf) + \
|
60
|
-
(((buf)->temporary || (buf)->memory) ? ngx_buf_size(buf) : 0) + \
|
61
|
-
(((buf)->file!=NULL) ? (sizeof(*(buf)->file) + (buf)->file->name.len + 1) : 0))
|
62
|
-
|
63
|
-
//buffer is _copied_
|
64
|
-
ngx_chain_t * ngx_http_push_create_output_chain(ngx_buf_t *buf, ngx_pool_t *pool, ngx_log_t *log) {
|
65
|
-
ngx_chain_t *out;
|
66
|
-
ngx_file_t *file;
|
67
|
-
|
68
|
-
if((out = ngx_pcalloc(pool, sizeof(*out)))==NULL) {
|
69
|
-
return NULL;
|
70
|
-
}
|
71
|
-
ngx_buf_t *buf_copy;
|
72
|
-
|
73
|
-
if((buf_copy = ngx_pcalloc(pool, NGX_HTTP_BUF_ALLOC_SIZE(buf)))==NULL) {
|
74
|
-
return NULL;
|
75
|
-
}
|
76
|
-
ngx_http_push_copy_preallocated_buffer(buf, buf_copy);
|
77
|
-
|
78
|
-
if (buf->file!=NULL) {
|
79
|
-
file = buf_copy->file;
|
80
|
-
file->log=log;
|
81
|
-
if(file->fd==NGX_INVALID_FILE) {
|
82
|
-
file->fd=ngx_open_file(file->name.data, NGX_FILE_RDONLY, NGX_FILE_OPEN, NGX_FILE_OWNER_ACCESS);
|
83
|
-
}
|
84
|
-
if(file->fd==NGX_INVALID_FILE) {
|
85
|
-
return NULL;
|
86
|
-
}
|
87
|
-
}
|
88
|
-
buf_copy->last_buf = 1;
|
89
|
-
out->buf = buf_copy;
|
90
|
-
out->next = NULL;
|
91
|
-
return out;
|
92
|
-
}
|
93
|
-
|
94
|
-
#define NGX_HTTP_PUSH_NO_CHANNEL_ID_MESSAGE "No channel id provided."
|
95
|
-
static ngx_str_t * ngx_http_push_get_channel_id(ngx_http_request_t *r, ngx_http_push_loc_conf_t *cf) {
|
96
|
-
ngx_http_variable_value_t *vv = ngx_http_get_indexed_variable(r, cf->index);
|
97
|
-
ngx_str_t *group = &cf->channel_group;
|
98
|
-
size_t group_len = group->len;
|
99
|
-
size_t var_len;
|
100
|
-
size_t len;
|
101
|
-
ngx_str_t *id;
|
102
|
-
if (vv == NULL || vv->not_found || vv->len == 0) {
|
103
|
-
ngx_buf_t *buf = ngx_create_temp_buf(r->pool, sizeof(NGX_HTTP_PUSH_NO_CHANNEL_ID_MESSAGE));
|
104
|
-
ngx_chain_t *chain;
|
105
|
-
if(buf==NULL) {
|
106
|
-
return NULL;
|
107
|
-
}
|
108
|
-
buf->pos=(u_char *)NGX_HTTP_PUSH_NO_CHANNEL_ID_MESSAGE;
|
109
|
-
buf->last=buf->pos + sizeof(NGX_HTTP_PUSH_NO_CHANNEL_ID_MESSAGE)-1;
|
110
|
-
chain = ngx_http_push_create_output_chain(buf, r->pool, r->connection->log);
|
111
|
-
buf->last_buf=1;
|
112
|
-
r->headers_out.content_length_n=ngx_buf_size(buf);
|
113
|
-
r->headers_out.status=NGX_HTTP_NOT_FOUND;
|
114
|
-
r->headers_out.content_type.len = sizeof("text/plain") - 1;
|
115
|
-
r->headers_out.content_type.data = (u_char *) "text/plain";
|
116
|
-
r->headers_out.content_type_len = r->headers_out.content_type.len;
|
117
|
-
ngx_http_send_header(r);
|
118
|
-
ngx_http_output_filter(r, chain);
|
119
|
-
ngx_log_error(NGX_LOG_WARN, r->connection->log, 0,
|
120
|
-
"push module: the $push_channel_id variable is required but is not set");
|
121
|
-
return NULL;
|
122
|
-
}
|
123
|
-
//maximum length limiter for channel id
|
124
|
-
var_len = vv->len <= cf->max_channel_id_length ? vv->len : cf->max_channel_id_length;
|
125
|
-
len = group_len + 1 + var_len;
|
126
|
-
if((id = ngx_palloc(r->pool, sizeof(*id) + len))==NULL) {
|
127
|
-
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
|
128
|
-
"push module: unable to allocate memory for $push_channel_id string");
|
129
|
-
return NULL;
|
130
|
-
}
|
131
|
-
id->len=len;
|
132
|
-
id->data=(u_char *)(id+1);
|
133
|
-
ngx_memcpy(id->data, group->data, group_len);
|
134
|
-
id->data[group_len]='/';
|
135
|
-
ngx_memcpy(id->data + group_len + 1, vv->data, var_len);
|
136
|
-
return id;
|
137
|
-
}
|
138
|
-
|
139
|
-
ngx_table_elt_t * ngx_http_push_add_response_header(ngx_http_request_t *r, const ngx_str_t *header_name, const ngx_str_t *header_value) {
|
140
|
-
ngx_table_elt_t *h = ngx_list_push(&r->headers_out.headers);
|
141
|
-
if (h == NULL) {
|
142
|
-
return NULL;
|
143
|
-
}
|
144
|
-
h->hash = 1;
|
145
|
-
h->key.len = header_name->len;
|
146
|
-
h->key.data = header_name->data;
|
147
|
-
h->value.len = header_value->len;
|
148
|
-
h->value.data = header_value->data;
|
149
|
-
return h;
|
150
|
-
}
|
151
|
-
|
152
|
-
static ngx_str_t * ngx_http_push_find_in_header_value(ngx_http_request_t * r, ngx_str_t header_name) {
|
153
|
-
ngx_uint_t i;
|
154
|
-
ngx_list_part_t *part = &r->headers_in.headers.part;
|
155
|
-
ngx_table_elt_t *header= part->elts;
|
156
|
-
|
157
|
-
for (i = 0; /* void */ ; i++) {
|
158
|
-
if (i >= part->nelts) {
|
159
|
-
if (part->next == NULL) {
|
160
|
-
break;
|
161
|
-
}
|
162
|
-
part = part->next;
|
163
|
-
header = part->elts;
|
164
|
-
i = 0;
|
165
|
-
}
|
166
|
-
if (header[i].key.len == header_name.len
|
167
|
-
&& ngx_strncasecmp(header[i].key.data, header_name.data, header[i].key.len) == 0) {
|
168
|
-
return &header[i].value;
|
169
|
-
}
|
170
|
-
}
|
171
|
-
return NULL;
|
172
|
-
}
|
173
|
-
|
174
|
-
ngx_int_t ngx_http_push_allow_caching(ngx_http_request_t * r) {
|
175
|
-
ngx_str_t *tmp_header;
|
176
|
-
ngx_str_t header_checks[2] = { NGX_HTTP_PUSH_HEADER_CACHE_CONTROL, NGX_HTTP_PUSH_HEADER_PRAGMA };
|
177
|
-
ngx_int_t i = 0;
|
178
|
-
|
179
|
-
for(; i < 2; i++) {
|
180
|
-
tmp_header = ngx_http_push_find_in_header_value(r, header_checks[i]);
|
181
|
-
|
182
|
-
if (tmp_header != NULL) {
|
183
|
-
return !!ngx_strncasecmp(tmp_header->data, NGX_HTTP_PUSH_CACHE_CONTROL_VALUE.data, tmp_header->len);
|
184
|
-
}
|
185
|
-
}
|
186
|
-
|
187
|
-
return 1;
|
188
|
-
}
|
189
|
-
|
190
|
-
void ngx_http_push_subscriber_cleanup(ngx_http_push_subscriber_cleanup_t *data) {
|
191
|
-
if(data->subscriber!=NULL) { //still queued up
|
192
|
-
ngx_http_push_subscriber_t* sb = data->subscriber;
|
193
|
-
ngx_http_push_subscriber_del_timer(sb);
|
194
|
-
ngx_queue_remove(&data->subscriber->queue);
|
195
|
-
ngx_pfree(ngx_http_push_pool, data->subscriber); //was there an error? oh whatever.
|
196
|
-
}
|
197
|
-
if (data->rchain != NULL) {
|
198
|
-
ngx_pfree(data->rpool, data->rchain->buf);
|
199
|
-
ngx_pfree(data->rpool, data->rchain);
|
200
|
-
data->rchain=NULL;
|
201
|
-
}
|
202
|
-
if(data->buf_use_count != NULL && --(*data->buf_use_count) <= 0) {
|
203
|
-
ngx_buf_t *buf;
|
204
|
-
ngx_pfree(ngx_http_push_pool, data->buf_use_count);
|
205
|
-
buf=data->buf;
|
206
|
-
if(buf->file) {
|
207
|
-
ngx_close_file(buf->file->fd);
|
208
|
-
}
|
209
|
-
ngx_pfree(ngx_http_push_pool, buf);
|
210
|
-
}
|
211
|
-
|
212
|
-
if(data->channel!=NULL) { //we're expected to decrement the subscriber count
|
213
|
-
ngx_http_push_store->lock();
|
214
|
-
data->channel->subscribers--;
|
215
|
-
ngx_http_push_store->unlock();
|
216
|
-
}
|
217
|
-
}
|
218
|
-
|
219
|
-
ngx_str_t * ngx_http_push_subscriber_get_etag(ngx_http_request_t * r) {
|
220
|
-
ngx_uint_t i;
|
221
|
-
ngx_list_part_t *part = &r->headers_in.headers.part;
|
222
|
-
ngx_table_elt_t *header= part->elts;
|
223
|
-
|
224
|
-
for (i = 0; /* void */ ; i++) {
|
225
|
-
if (i >= part->nelts) {
|
226
|
-
if (part->next == NULL) {
|
227
|
-
break;
|
228
|
-
}
|
229
|
-
part = part->next;
|
230
|
-
header = part->elts;
|
231
|
-
i = 0;
|
232
|
-
}
|
233
|
-
if (header[i].key.len == NGX_HTTP_PUSH_HEADER_IF_NONE_MATCH.len
|
234
|
-
&& ngx_strncasecmp(header[i].key.data, NGX_HTTP_PUSH_HEADER_IF_NONE_MATCH.data, header[i].key.len) == 0) {
|
235
|
-
return &header[i].value;
|
236
|
-
}
|
237
|
-
}
|
238
|
-
return NULL;
|
239
|
-
}
|
240
|
-
|
241
|
-
ngx_int_t ngx_http_push_subscriber_get_msg_id(ngx_http_request_t *r, ngx_http_push_msg_id_t *id) {
|
242
|
-
ngx_str_t *if_none_match = ngx_http_push_subscriber_get_etag(r);
|
243
|
-
ngx_int_t tag=0;
|
244
|
-
id->time=(r->headers_in.if_modified_since == NULL) ? 0 : ngx_http_parse_time(r->headers_in.if_modified_since->value.data, r->headers_in.if_modified_since->value.len);
|
245
|
-
if(if_none_match==NULL || (if_none_match!=NULL && (tag = ngx_atoi(if_none_match->data, if_none_match->len))==NGX_ERROR)) {
|
246
|
-
tag=0;
|
247
|
-
}
|
248
|
-
id->tag=ngx_abs(tag);
|
249
|
-
return NGX_OK;
|
250
|
-
}
|
251
|
-
|
252
|
-
//allocates nothing
|
253
|
-
ngx_int_t ngx_http_push_prepare_response_to_subscriber_request(ngx_http_request_t *r, ngx_chain_t *chain, ngx_str_t *content_type, ngx_str_t *etag, time_t last_modified) {
|
254
|
-
ngx_int_t res;
|
255
|
-
if (content_type!=NULL) {
|
256
|
-
r->headers_out.content_type.len=content_type->len;
|
257
|
-
r->headers_out.content_type.data = content_type->data;
|
258
|
-
r->headers_out.content_type_len = r->headers_out.content_type.len;
|
259
|
-
}
|
260
|
-
if(last_modified) {
|
261
|
-
//if-modified-since header
|
262
|
-
r->headers_out.last_modified_time=last_modified;
|
263
|
-
}
|
264
|
-
if(etag!=NULL) {
|
265
|
-
//etag, if we need one
|
266
|
-
if ((ngx_http_push_add_response_header(r, &NGX_HTTP_PUSH_HEADER_ETAG, etag))==NULL) {
|
267
|
-
return NGX_HTTP_INTERNAL_SERVER_ERROR;
|
268
|
-
}
|
269
|
-
}
|
270
|
-
//Vary header needed for proper HTTP caching.
|
271
|
-
ngx_http_push_add_response_header(r, &NGX_HTTP_PUSH_HEADER_VARY, &NGX_HTTP_PUSH_VARY_HEADER_VALUE);
|
272
|
-
|
273
|
-
r->headers_out.status=NGX_HTTP_OK;
|
274
|
-
//we know the entity length, and we're using just one buffer. so no chunking please.
|
275
|
-
r->headers_out.content_length_n=ngx_buf_size(chain->buf);
|
276
|
-
if((res = ngx_http_send_header(r)) >= NGX_HTTP_SPECIAL_RESPONSE) {
|
277
|
-
return res;
|
278
|
-
}
|
279
|
-
|
280
|
-
return ngx_http_output_filter(r, chain);
|
281
|
-
}
|
282
|
-
|
283
|
-
//allocates message and responds to subscriber
|
284
|
-
ngx_int_t ngx_http_push_alloc_for_subscriber_response(ngx_pool_t *pool, ngx_int_t shared, ngx_http_push_msg_t *msg, ngx_chain_t **chain, ngx_str_t **content_type, ngx_str_t **etag, time_t *last_modified) {
|
285
|
-
if(etag != NULL && (*etag = ngx_http_push_store->message_etag(msg, pool))==NULL) {
|
286
|
-
//oh, nevermind...
|
287
|
-
ngx_log_error(NGX_LOG_ERR, ngx_cycle->log, 0, "push module: unable to allocate memory for Etag header");
|
288
|
-
return NGX_ERROR;
|
289
|
-
}
|
290
|
-
if(content_type != NULL && (*content_type= ngx_http_push_store->message_content_type(msg, pool))==NULL) {
|
291
|
-
//oh, nevermind...
|
292
|
-
ngx_log_error(NGX_LOG_ERR, ngx_cycle->log, 0, "push module: unable to allocate memory for Content Type header");
|
293
|
-
if(pool == NULL) {
|
294
|
-
ngx_free(*etag);
|
295
|
-
}
|
296
|
-
else {
|
297
|
-
ngx_pfree(pool, *etag);
|
298
|
-
}
|
299
|
-
return NGX_ERROR;
|
300
|
-
}
|
301
|
-
|
302
|
-
//preallocate output chain. yes, same one for every waiting subscriber
|
303
|
-
if(chain != NULL && (*chain = ngx_http_push_create_output_chain(msg->buf, pool, ngx_cycle->log))==NULL) {
|
304
|
-
ngx_log_error(NGX_LOG_ERR, ngx_cycle->log, 0, "push module: unable to allocate buffer chain while responding to subscriber request");
|
305
|
-
if(pool == NULL) {
|
306
|
-
ngx_free(*etag);
|
307
|
-
ngx_free(*content_type);
|
308
|
-
}
|
309
|
-
else {
|
310
|
-
ngx_pfree(pool, *etag);
|
311
|
-
ngx_pfree(pool, *content_type);
|
312
|
-
}
|
313
|
-
return NGX_ERROR;
|
314
|
-
}
|
315
|
-
|
316
|
-
if(last_modified != NULL) {
|
317
|
-
*last_modified = msg->message_time;
|
318
|
-
}
|
319
|
-
ngx_http_push_store->unlock();
|
320
|
-
|
321
|
-
|
322
|
-
if(pool!=NULL && shared == 0 && ((*chain)->buf->file!=NULL)) {
|
323
|
-
//close file when we're done with it
|
324
|
-
ngx_pool_cleanup_t *cln;
|
325
|
-
ngx_pool_cleanup_file_t *clnf;
|
326
|
-
|
327
|
-
if((cln = ngx_pool_cleanup_add(pool, sizeof(ngx_pool_cleanup_file_t)))==NULL) {
|
328
|
-
ngx_log_error(NGX_LOG_ERR, ngx_cycle->log, 0, "push module: unable to allocate buffer chain pool cleanup while responding to subscriber request");
|
329
|
-
ngx_pfree(pool, *etag);
|
330
|
-
ngx_pfree(pool, *content_type);
|
331
|
-
ngx_pfree(pool, *chain);
|
332
|
-
return NGX_ERROR;
|
333
|
-
}
|
334
|
-
cln->handler = ngx_pool_cleanup_file;
|
335
|
-
clnf = cln->data;
|
336
|
-
clnf->fd = (*chain)->buf->file->fd;
|
337
|
-
clnf->name = (*chain)->buf->file->name.data;
|
338
|
-
clnf->log = ngx_cycle->log;
|
339
|
-
}
|
340
|
-
return NGX_OK;
|
341
|
-
}
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
static void ngx_http_push_match_channel_info_subtype(size_t off, u_char *cur, size_t rem, u_char **priority, const ngx_str_t **format, ngx_str_t *content_type) {
|
346
|
-
static ngx_http_push_content_subtype_t subtypes[] = {
|
347
|
-
{ "json" , 4, &NGX_HTTP_PUSH_CHANNEL_INFO_JSON },
|
348
|
-
{ "yaml" , 4, &NGX_HTTP_PUSH_CHANNEL_INFO_YAML },
|
349
|
-
{ "xml" , 3, &NGX_HTTP_PUSH_CHANNEL_INFO_XML },
|
350
|
-
{ "x-json", 6, &NGX_HTTP_PUSH_CHANNEL_INFO_JSON },
|
351
|
-
{ "x-yaml", 6, &NGX_HTTP_PUSH_CHANNEL_INFO_YAML }
|
352
|
-
};
|
353
|
-
u_char *start = cur + off;
|
354
|
-
ngx_uint_t i;
|
355
|
-
|
356
|
-
for(i=0; i<(sizeof(subtypes)/sizeof(ngx_http_push_content_subtype_t)); i++) {
|
357
|
-
if(ngx_strncmp(start, subtypes[i].subtype, rem<subtypes[i].len ? rem : subtypes[i].len)==0) {
|
358
|
-
if(*priority>start) {
|
359
|
-
*format = subtypes[i].format;
|
360
|
-
*priority = start;
|
361
|
-
content_type->data=cur;
|
362
|
-
content_type->len= off + 1 + subtypes[i].len;
|
363
|
-
}
|
364
|
-
}
|
365
|
-
}
|
366
|
-
}
|
367
|
-
|
368
|
-
//print information about a channel
|
369
|
-
static ngx_int_t ngx_http_push_channel_info(ngx_http_request_t *r, ngx_uint_t messages, ngx_uint_t subscribers, time_t last_seen) {
|
370
|
-
ngx_buf_t *b;
|
371
|
-
ngx_uint_t len;
|
372
|
-
ngx_str_t content_type = ngx_string("text/plain");
|
373
|
-
const ngx_str_t *format = &NGX_HTTP_PUSH_CHANNEL_INFO_PLAIN;
|
374
|
-
time_t time_elapsed = ngx_time() - last_seen;
|
375
|
-
|
376
|
-
if(r->headers_in.accept) {
|
377
|
-
//lame content-negotiation (without regard for qvalues)
|
378
|
-
u_char *accept = r->headers_in.accept->value.data;
|
379
|
-
size_t len = r->headers_in.accept->value.len;
|
380
|
-
size_t rem;
|
381
|
-
u_char *cur = accept;
|
382
|
-
u_char *priority=&accept[len-1];
|
383
|
-
for(rem=len; (cur = ngx_strnstr(cur, "text/", rem))!=NULL; cur += sizeof("text/")-1) {
|
384
|
-
rem=len - ((size_t)(cur-accept)+sizeof("text/")-1);
|
385
|
-
if(ngx_strncmp(cur+sizeof("text/")-1, "plain", rem<5 ? rem : 5)==0) {
|
386
|
-
if(priority) {
|
387
|
-
format = &NGX_HTTP_PUSH_CHANNEL_INFO_PLAIN;
|
388
|
-
priority = cur+sizeof("text/")-1;
|
389
|
-
//content-type is already set by default
|
390
|
-
}
|
391
|
-
}
|
392
|
-
ngx_http_push_match_channel_info_subtype(sizeof("text/")-1, cur, rem, &priority, &format, &content_type);
|
393
|
-
}
|
394
|
-
cur = accept;
|
395
|
-
for(rem=len; (cur = ngx_strnstr(cur, "application/", rem))!=NULL; cur += sizeof("application/")-1) {
|
396
|
-
rem=len - ((size_t)(cur-accept)+sizeof("application/")-1);
|
397
|
-
ngx_http_push_match_channel_info_subtype(sizeof("application/")-1, cur, rem, &priority, &format, &content_type);
|
398
|
-
}
|
399
|
-
}
|
400
|
-
|
401
|
-
r->headers_out.content_type.len = content_type.len;
|
402
|
-
r->headers_out.content_type.data = content_type.data;
|
403
|
-
r->headers_out.content_type_len = r->headers_out.content_type.len;
|
404
|
-
|
405
|
-
len = format->len - 8 - 1 + 3*NGX_INT_T_LEN; //minus 8 sprintf
|
406
|
-
|
407
|
-
if ((b = ngx_create_temp_buf(r->pool, len)) == NULL) {
|
408
|
-
return NGX_HTTP_INTERNAL_SERVER_ERROR;
|
409
|
-
}
|
410
|
-
b->last = ngx_sprintf(b->last, (char *)format->data, messages, last_seen==0 ? -1 : (ngx_int_t) time_elapsed ,subscribers);
|
411
|
-
|
412
|
-
//lastly, set the content-length, because if the status code isn't 200, nginx may not do so automatically
|
413
|
-
r->headers_out.content_length_n = ngx_buf_size(b);
|
414
|
-
|
415
|
-
if (ngx_http_send_header(r) > NGX_HTTP_SPECIAL_RESPONSE) {
|
416
|
-
return NGX_HTTP_INTERNAL_SERVER_ERROR;
|
417
|
-
}
|
418
|
-
|
419
|
-
return ngx_http_output_filter(r, ngx_http_push_create_output_chain(b, r->pool, r->connection->log));
|
420
|
-
}
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
#define NGX_HTTP_PUSH_MAKE_CONTENT_TYPE(content_type, content_type_len, msg, pool) \
|
425
|
-
if(((content_type) = ngx_palloc(pool, sizeof(*content_type)+content_type_len))!=NULL) { \
|
426
|
-
(content_type)->len=content_type_len; \
|
427
|
-
(content_type)->data=(u_char *)((content_type)+1); \
|
428
|
-
ngx_memcpy(content_type->data, (msg)->content_type.data, content_type_len); \
|
429
|
-
}
|
430
|
-
|
431
|
-
#define NGX_HTTP_PUSH_OPTIONS_OK_MESSAGE "Go ahead"
|
432
|
-
|
433
|
-
|
434
|
-
ngx_int_t ngx_push_longpoll_subscriber_enqueue(ngx_http_push_channel_t *channel, ngx_http_push_subscriber_t *subscriber, ngx_int_t subscriber_timeout) {
|
435
|
-
ngx_http_cleanup_t *cln;
|
436
|
-
ngx_http_push_subscriber_cleanup_t *clndata;
|
437
|
-
ngx_http_request_t *r = subscriber->request;
|
438
|
-
//attach a cleaner to remove the request from the channel and handle shared buffer deallocation.
|
439
|
-
if ((cln=ngx_http_cleanup_add(r, sizeof(*clndata))) == NULL) { //make sure we can.
|
440
|
-
return NGX_ERROR;
|
441
|
-
}
|
442
|
-
cln->handler = (ngx_http_cleanup_pt) ngx_http_push_subscriber_cleanup;
|
443
|
-
clndata = (ngx_http_push_subscriber_cleanup_t *) cln->data;
|
444
|
-
clndata->channel=channel;
|
445
|
-
clndata->subscriber=subscriber;
|
446
|
-
clndata->buf_use_count=0;
|
447
|
-
clndata->buf=NULL;
|
448
|
-
clndata->rchain=NULL;
|
449
|
-
clndata->rpool=NULL;
|
450
|
-
subscriber->clndata=clndata;
|
451
|
-
|
452
|
-
//set up subscriber timeout event
|
453
|
-
ngx_memzero(&subscriber->event, sizeof(subscriber->event));
|
454
|
-
if (subscriber_timeout > 0) {
|
455
|
-
subscriber->event.handler = ngx_http_push_clean_timeouted_subscriber;
|
456
|
-
subscriber->event.data = subscriber;
|
457
|
-
subscriber->event.log = r->connection->log;
|
458
|
-
ngx_add_timer(&subscriber->event, subscriber_timeout * 1000);
|
459
|
-
}
|
460
|
-
|
461
|
-
r->read_event_handler = ngx_http_test_reading;
|
462
|
-
r->write_event_handler = ngx_http_request_empty_handler;
|
463
|
-
r->main->count++; //this is the right way to hold and finalize the request... maybe
|
464
|
-
//r->keepalive = 1; //stayin' alive!!
|
465
|
-
return NGX_OK;
|
466
|
-
}
|
467
|
-
|
468
|
-
/*
|
469
|
-
ngx_int_t ngx_push_longpoll_subscriber_dequeue(ngx_http_push_subscriber_t *subscriber) {
|
470
|
-
return NGX_OK;
|
471
|
-
}
|
472
|
-
*/
|
473
|
-
|
474
|
-
static ngx_int_t ngx_http_push_response_channel_ptr_info(ngx_http_push_channel_t *channel, ngx_http_request_t *r, ngx_int_t status_code) {
|
475
|
-
time_t last_seen = 0;
|
476
|
-
ngx_uint_t subscribers = 0;
|
477
|
-
ngx_uint_t messages = 0;
|
478
|
-
if(channel!=NULL) {
|
479
|
-
ngx_http_push_store->lock();
|
480
|
-
subscribers = channel->subscribers;
|
481
|
-
last_seen = channel->last_seen;
|
482
|
-
messages = channel->messages;
|
483
|
-
ngx_http_push_store->unlock();
|
484
|
-
r->headers_out.status = status_code == (ngx_int_t) NULL ? NGX_HTTP_OK : status_code;
|
485
|
-
if (status_code == NGX_HTTP_CREATED) {
|
486
|
-
r->headers_out.status_line.len =sizeof("201 Created")- 1;
|
487
|
-
r->headers_out.status_line.data=(u_char *) "201 Created";
|
488
|
-
}
|
489
|
-
else if (status_code == NGX_HTTP_ACCEPTED) {
|
490
|
-
r->headers_out.status_line.len =sizeof("202 Accepted")- 1;
|
491
|
-
r->headers_out.status_line.data=(u_char *) "202 Accepted";
|
492
|
-
}
|
493
|
-
ngx_http_push_channel_info(r, messages, subscribers, last_seen);
|
494
|
-
}
|
495
|
-
else {
|
496
|
-
//404!
|
497
|
-
r->headers_out.status=NGX_HTTP_NOT_FOUND;
|
498
|
-
//just the headers, please. we don't care to describe the situation or
|
499
|
-
//respond with an html page
|
500
|
-
r->headers_out.content_length_n=0;
|
501
|
-
r->header_only = 1;
|
502
|
-
ngx_http_send_header(r);
|
503
|
-
}
|
504
|
-
return NGX_OK;
|
505
|
-
}
|
506
|
-
|
507
|
-
static ngx_int_t ngx_http_push_response_channel_info(ngx_str_t *channel_id, ngx_http_request_t *r, ngx_int_t status_code) {
|
508
|
-
ngx_http_push_channel_t *channel;
|
509
|
-
ngx_http_push_loc_conf_t *cf = ngx_http_get_module_loc_conf(r, ngx_http_push_module);
|
510
|
-
channel = channel_id == NULL ? NULL : ngx_http_push_store->find_channel(channel_id, cf->channel_timeout, NULL);
|
511
|
-
return ngx_http_push_response_channel_ptr_info(channel, r, status_code);
|
512
|
-
}
|
513
|
-
|
514
|
-
static ngx_int_t subscribe_longpoll_callback(ngx_int_t status, ngx_http_request_t *r) {
|
515
|
-
ngx_http_finalize_request(r, status);
|
516
|
-
return NGX_OK;
|
517
|
-
}
|
518
|
-
|
519
|
-
static ngx_int_t subscribe_intervalpoll_callback(ngx_http_push_msg_t *msg, ngx_int_t msg_search_outcome, ngx_http_request_t *r) {
|
520
|
-
ngx_chain_t *chain;
|
521
|
-
ngx_str_t *content_type, *etag;
|
522
|
-
time_t last_modified;
|
523
|
-
switch(msg_search_outcome) {
|
524
|
-
case NGX_HTTP_PUSH_MESSAGE_EXPECTED:
|
525
|
-
//interval-polling subscriber requests get a 304 with their entity tags preserved.
|
526
|
-
if (r->headers_in.if_modified_since != NULL) {
|
527
|
-
r->headers_out.last_modified_time=ngx_http_parse_time(r->headers_in.if_modified_since->value.data, r->headers_in.if_modified_since->value.len);
|
528
|
-
}
|
529
|
-
if ((etag=ngx_http_push_subscriber_get_etag(r)) != NULL) {
|
530
|
-
ngx_http_push_add_response_header(r, &NGX_HTTP_PUSH_HEADER_ETAG, etag);
|
531
|
-
}
|
532
|
-
ngx_http_finalize_request(r, NGX_HTTP_NOT_MODIFIED);
|
533
|
-
return NGX_OK;
|
534
|
-
|
535
|
-
case NGX_HTTP_PUSH_MESSAGE_FOUND:
|
536
|
-
ngx_http_push_alloc_for_subscriber_response(r->pool, 0, msg, &chain, &content_type, &etag, &last_modified);
|
537
|
-
ngx_http_push_prepare_response_to_subscriber_request(r, chain, content_type, etag, last_modified);
|
538
|
-
ngx_http_push_store->release_message(NULL, msg);
|
539
|
-
ngx_http_finalize_request(r, NGX_OK);
|
540
|
-
return NGX_OK;
|
541
|
-
|
542
|
-
default:
|
543
|
-
ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
|
544
|
-
return NGX_ERROR;
|
545
|
-
}
|
546
|
-
}
|
547
|
-
|
548
|
-
ngx_int_t ngx_http_push_subscriber_handler(ngx_http_request_t *r) {
|
549
|
-
ngx_http_push_loc_conf_t *cf = ngx_http_get_module_loc_conf(r, ngx_http_push_module);
|
550
|
-
ngx_str_t *channel_id;
|
551
|
-
ngx_http_push_msg_id_t msg_id;
|
552
|
-
|
553
|
-
if((channel_id=ngx_http_push_get_channel_id(r, cf)) == NULL) {
|
554
|
-
return r->headers_out.status ? NGX_OK : NGX_HTTP_INTERNAL_SERVER_ERROR;
|
555
|
-
}
|
556
|
-
|
557
|
-
switch(r->method) {
|
558
|
-
case NGX_HTTP_GET:
|
559
|
-
ngx_http_push_subscriber_get_msg_id(r, &msg_id);
|
560
|
-
|
561
|
-
r->main->count++; //let it linger until callback
|
562
|
-
switch(cf->subscriber_poll_mechanism) {
|
563
|
-
ngx_int_t msg_search_outcome;
|
564
|
-
|
565
|
-
//for NGX_HTTP_PUSH_MECHANISM_LONGPOLL
|
566
|
-
case NGX_HTTP_PUSH_MECHANISM_INTERVALPOLL:
|
567
|
-
ngx_http_push_store->get_message(channel_id, &msg_id, &msg_search_outcome, r, &subscribe_intervalpoll_callback);
|
568
|
-
break;
|
569
|
-
|
570
|
-
case NGX_HTTP_PUSH_MECHANISM_LONGPOLL:
|
571
|
-
ngx_http_push_store->subscribe(channel_id, &msg_id, r, &subscribe_longpoll_callback);
|
572
|
-
break;
|
573
|
-
}
|
574
|
-
return NGX_DONE;
|
575
|
-
|
576
|
-
case NGX_HTTP_OPTIONS:
|
577
|
-
ngx_http_push_add_response_header(r, &NGX_HTTP_PUSH_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN, &NGX_HTTP_PUSH_ANYSTRING);
|
578
|
-
ngx_http_push_add_response_header(r, &NGX_HTTP_PUSH_HEADER_ACCESS_CONTROL_ALLOW_HEADERS, &NGX_HTTP_PUSH_ACCESS_CONTROL_ALLOWED_SUBSCRIBER_HEADERS);
|
579
|
-
ngx_http_push_add_response_header(r, &NGX_HTTP_PUSH_HEADER_ACCESS_CONTROL_ALLOW_METHODS, &NGX_HTTP_PUSH_ALLOW_GET_OPTIONS);
|
580
|
-
r->headers_out.content_length_n = 0;
|
581
|
-
r->header_only = 1;
|
582
|
-
r->headers_out.status=NGX_HTTP_OK;
|
583
|
-
ngx_http_send_header(r);
|
584
|
-
return NGX_OK;
|
585
|
-
|
586
|
-
default:
|
587
|
-
ngx_http_push_add_response_header(r, &NGX_HTTP_PUSH_HEADER_ALLOW, &NGX_HTTP_PUSH_ALLOW_GET_OPTIONS); //valid HTTP for the win
|
588
|
-
return NGX_HTTP_NOT_ALLOWED;
|
589
|
-
}
|
590
|
-
}
|
591
|
-
|
592
|
-
static ngx_int_t publish_callback(ngx_int_t status, ngx_http_push_channel_t *ch, ngx_http_request_t *r) {
|
593
|
-
switch(status) {
|
594
|
-
case NGX_HTTP_PUSH_MESSAGE_QUEUED:
|
595
|
-
//message was queued successfully, but there were no subscribers to receive it.
|
596
|
-
ngx_http_finalize_request(r, ngx_http_push_response_channel_ptr_info(ch, r, NGX_HTTP_ACCEPTED));
|
597
|
-
return NGX_OK;
|
598
|
-
|
599
|
-
case NGX_HTTP_PUSH_MESSAGE_RECEIVED:
|
600
|
-
//message was queued successfully, and it was already sent to at least one subscriber
|
601
|
-
ngx_http_finalize_request(r, ngx_http_push_response_channel_ptr_info(ch, r, NGX_HTTP_CREATED));
|
602
|
-
return NGX_OK;
|
603
|
-
|
604
|
-
case NGX_ERROR:
|
605
|
-
//WTF?
|
606
|
-
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "push module: error broadcasting message to workers");
|
607
|
-
ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
|
608
|
-
return NGX_ERROR;
|
609
|
-
|
610
|
-
default:
|
611
|
-
//for debugging, mostly. I don't expect this branch to behit during regular operation
|
612
|
-
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "push module: TOTALLY UNEXPECTED error broadcasting message to workers");
|
613
|
-
ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
|
614
|
-
return NGX_ERROR;
|
615
|
-
}
|
616
|
-
}
|
617
|
-
|
618
|
-
static void ngx_http_push_publisher_body_handler(ngx_http_request_t * r) {
|
619
|
-
ngx_str_t *channel_id;
|
620
|
-
ngx_http_push_loc_conf_t *cf = ngx_http_get_module_loc_conf(r, ngx_http_push_module);
|
621
|
-
ngx_uint_t method = r->method;
|
622
|
-
|
623
|
-
if((channel_id = ngx_http_push_get_channel_id(r, cf))==NULL) {
|
624
|
-
ngx_http_finalize_request(r, r->headers_out.status ? NGX_OK : NGX_HTTP_INTERNAL_SERVER_ERROR);
|
625
|
-
return;
|
626
|
-
}
|
627
|
-
|
628
|
-
switch(method) {
|
629
|
-
case NGX_HTTP_POST:
|
630
|
-
case NGX_HTTP_PUT:
|
631
|
-
ngx_http_push_store->publish(channel_id, r, &publish_callback);
|
632
|
-
break;
|
633
|
-
|
634
|
-
case NGX_HTTP_DELETE:
|
635
|
-
ngx_http_finalize_request(r, ngx_http_push_response_channel_info(channel_id, r, NGX_HTTP_OK));
|
636
|
-
ngx_http_push_store->delete_channel(channel_id);
|
637
|
-
break;
|
638
|
-
|
639
|
-
case NGX_HTTP_GET:
|
640
|
-
ngx_http_finalize_request(r, ngx_http_push_response_channel_info(channel_id, r, NGX_HTTP_OK));
|
641
|
-
break;
|
642
|
-
|
643
|
-
case NGX_HTTP_OPTIONS:
|
644
|
-
ngx_http_push_add_response_header(r, &NGX_HTTP_PUSH_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN, &NGX_HTTP_PUSH_ANYSTRING);
|
645
|
-
ngx_http_push_add_response_header(r, &NGX_HTTP_PUSH_HEADER_ACCESS_CONTROL_ALLOW_HEADERS, &NGX_HTTP_PUSH_ACCESS_CONTROL_ALLOWED_PUBLISHER_HEADERS);
|
646
|
-
ngx_http_push_add_response_header(r, &NGX_HTTP_PUSH_HEADER_ACCESS_CONTROL_ALLOW_METHODS, &NGX_HTTP_PUSH_ALLOW_GET_POST_PUT_DELETE_OPTIONS);
|
647
|
-
r->header_only = 1;
|
648
|
-
r->headers_out.content_length_n = 0;
|
649
|
-
r->headers_out.status=NGX_HTTP_OK;
|
650
|
-
ngx_http_send_header(r);
|
651
|
-
ngx_http_finalize_request(r, NGX_HTTP_OK);
|
652
|
-
break;
|
653
|
-
|
654
|
-
default:
|
655
|
-
//some other weird request method
|
656
|
-
ngx_http_push_add_response_header(r, &NGX_HTTP_PUSH_HEADER_ALLOW, &NGX_HTTP_PUSH_ALLOW_GET_POST_PUT_DELETE_OPTIONS);
|
657
|
-
ngx_http_finalize_request(r, NGX_HTTP_NOT_ALLOWED);
|
658
|
-
break;
|
659
|
-
}
|
660
|
-
}
|
661
|
-
|
662
|
-
ngx_int_t ngx_http_push_respond_to_subscribers(ngx_http_push_channel_t *channel, ngx_http_push_subscriber_t *sentinel, ngx_http_push_msg_t *msg, ngx_int_t status_code, const ngx_str_t *status_line) {
|
663
|
-
|
664
|
-
//copy everything we need first
|
665
|
-
ngx_str_t *content_type=NULL;
|
666
|
-
ngx_str_t *etag=NULL;
|
667
|
-
time_t last_modified = 0;
|
668
|
-
ngx_chain_t *chain=NULL;
|
669
|
-
ngx_http_request_t *r;
|
670
|
-
ngx_buf_t *buffer = NULL;
|
671
|
-
ngx_chain_t *rchain;
|
672
|
-
ngx_buf_t *rbuffer;
|
673
|
-
ngx_int_t *buf_use_count = NULL;
|
674
|
-
ngx_http_push_subscriber_cleanup_t *clndata;
|
675
|
-
ngx_http_push_subscriber_t *cur=NULL;
|
676
|
-
ngx_int_t responded_subscribers=0;
|
677
|
-
|
678
|
-
if(sentinel==NULL) {
|
679
|
-
//ngx_log_error(NGX_LOG_WARN, ngx_cycle->log, 0, "respond_to_subscribers with sentinel==NULL");
|
680
|
-
return NGX_OK;
|
681
|
-
}
|
682
|
-
|
683
|
-
if(msg!=NULL) {
|
684
|
-
if(ngx_http_push_alloc_for_subscriber_response(ngx_http_push_pool, 1, msg, &chain, &content_type, &etag, &last_modified)==NGX_ERROR) {
|
685
|
-
ngx_http_push_store->release_message(channel, msg);
|
686
|
-
return NGX_ERROR;
|
687
|
-
}
|
688
|
-
|
689
|
-
buffer = chain->buf;
|
690
|
-
buffer->recycled = 1;
|
691
|
-
|
692
|
-
buf_use_count = ngx_pcalloc(ngx_http_push_pool, sizeof(*buf_use_count));
|
693
|
-
*buf_use_count = ngx_http_push_store->channel_worker_subscribers(sentinel);
|
694
|
-
}
|
695
|
-
|
696
|
-
while((cur=ngx_http_push_store->next_subscriber(channel, sentinel, cur, 1))!=NULL) {
|
697
|
-
//in this block, nothing in shared memory should be dereferenced.
|
698
|
-
r=cur->request;
|
699
|
-
|
700
|
-
if(msg!=NULL) {
|
701
|
-
//chain and buffer for this request
|
702
|
-
rchain = ngx_pcalloc(r->pool, sizeof(*rchain));
|
703
|
-
rchain->next = NULL;
|
704
|
-
rbuffer = ngx_pcalloc(r->pool, sizeof(*rbuffer));
|
705
|
-
rchain->buf = rbuffer;
|
706
|
-
ngx_memcpy(rbuffer, buffer, sizeof(*buffer));
|
707
|
-
|
708
|
-
//request buffer cleanup
|
709
|
-
clndata = cur->clndata;
|
710
|
-
clndata->buf = buffer;
|
711
|
-
clndata->buf_use_count = buf_use_count;
|
712
|
-
clndata->rchain = rchain;
|
713
|
-
clndata->rpool = r->pool;
|
714
|
-
|
715
|
-
if (rbuffer->in_file && (fcntl(rbuffer->file->fd, F_GETFD) == -1)) {
|
716
|
-
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "push module: buffer in invalid file descriptor");
|
717
|
-
}
|
718
|
-
//cleanup oughtn't dequeue anything. or decrement the subscriber count, for that matter
|
719
|
-
ngx_http_push_subscriber_clear_ctx(cur);
|
720
|
-
ngx_http_finalize_request(r, ngx_http_push_prepare_response_to_subscriber_request(r, rchain, content_type, etag, last_modified)); //BAM!
|
721
|
-
}
|
722
|
-
else {
|
723
|
-
ngx_http_push_subscriber_clear_ctx(cur);
|
724
|
-
ngx_http_finalize_request(r, ngx_http_push_respond_status_only(r, status_code, status_line));
|
725
|
-
}
|
726
|
-
responded_subscribers++;
|
727
|
-
}
|
728
|
-
if(msg!=NULL) {
|
729
|
-
ngx_http_push_store->release_message(channel, msg);
|
730
|
-
ngx_pfree(ngx_http_push_pool, etag);
|
731
|
-
ngx_pfree(ngx_http_push_pool, content_type);
|
732
|
-
ngx_pfree(ngx_http_push_pool, chain);
|
733
|
-
}
|
734
|
-
|
735
|
-
//ngx_log_error(NGX_LOG_WARN, ngx_cycle->log, 0, "respond_to_subscribers with msg %p finished", msg);
|
736
|
-
ngx_http_push_store->lock();
|
737
|
-
channel->subscribers-=responded_subscribers;
|
738
|
-
//is the message still needed?
|
739
|
-
ngx_http_push_store->unlock();
|
740
|
-
ngx_http_push_store->release_subscriber_sentinel(channel, sentinel);
|
741
|
-
return NGX_OK;
|
742
|
-
}
|
743
|
-
|
744
|
-
ngx_int_t ngx_http_push_publisher_handler(ngx_http_request_t * r) {
|
745
|
-
ngx_int_t rc;
|
746
|
-
|
747
|
-
/* Instruct ngx_http_read_subscriber_request_body to store the request
|
748
|
-
body entirely in a memory buffer or in a file */
|
749
|
-
r->request_body_in_single_buf = 1;
|
750
|
-
r->request_body_in_persistent_file = 1;
|
751
|
-
r->request_body_in_clean_file = 0;
|
752
|
-
r->request_body_file_log_level = 0;
|
753
|
-
|
754
|
-
rc = ngx_http_read_client_request_body(r, ngx_http_push_publisher_body_handler);
|
755
|
-
if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
|
756
|
-
return rc;
|
757
|
-
}
|
758
|
-
return NGX_DONE;
|
759
|
-
}
|
760
|
-
|
761
|
-
void ngx_http_push_copy_preallocated_buffer(ngx_buf_t *buf, ngx_buf_t *cbuf) {
|
762
|
-
if (cbuf!=NULL) {
|
763
|
-
ngx_memcpy(cbuf, buf, sizeof(*buf)); //overkill?
|
764
|
-
if(buf->temporary || buf->memory) { //we don't want to copy mmpapped memory, so no ngx_buf_in_momory(buf)
|
765
|
-
cbuf->pos = (u_char *) (cbuf+1);
|
766
|
-
cbuf->last = cbuf->pos + ngx_buf_size(buf);
|
767
|
-
cbuf->start=cbuf->pos;
|
768
|
-
cbuf->end = cbuf->start + ngx_buf_size(buf);
|
769
|
-
ngx_memcpy(cbuf->pos, buf->pos, ngx_buf_size(buf));
|
770
|
-
cbuf->memory=ngx_buf_in_memory_only(buf) ? 1 : 0;
|
771
|
-
}
|
772
|
-
if (buf->file!=NULL) {
|
773
|
-
cbuf->file = (ngx_file_t *) (cbuf+1) + ((buf->temporary || buf->memory) ? ngx_buf_size(buf) : 0);
|
774
|
-
cbuf->file->fd=NGX_INVALID_FILE;
|
775
|
-
cbuf->file->log=NULL;
|
776
|
-
cbuf->file->offset=buf->file->offset;
|
777
|
-
cbuf->file->sys_offset=buf->file->sys_offset;
|
778
|
-
cbuf->file->name.len=buf->file->name.len;
|
779
|
-
cbuf->file->name.data=(u_char *) (cbuf->file+1);
|
780
|
-
ngx_memcpy(cbuf->file->name.data, buf->file->name.data, buf->file->name.len);
|
781
|
-
}
|
782
|
-
}
|
783
|
-
}
|