Kentaro Hayashi
null+****@clear*****
Fri Aug 26 17:25:09 JST 2016
Kentaro Hayashi 2016-07-27 13:06:13 +0900 (Wed, 27 Jul 2016) New Revision: 90f11995d31f6c46b98f6bd068a02d427c3bc366 https://github.com/groonga/groonga/commit/90f11995d31f6c46b98f6bd068a02d427c3bc366 Message: nginx: update to latest version % ./update_nginx.sh 1.11.3 Added files: vendor/nginx-1.11.3/src/core/ngx_sha1.c vendor/nginx-1.11.3/src/core/ngx_sha1.h vendor/nginx-1.11.3/src/stream/ngx_stream.h vendor/nginx-1.11.3/src/stream/ngx_stream_return_module.c vendor/nginx-1.11.3/src/stream/ngx_stream_script.c vendor/nginx-1.11.3/src/stream/ngx_stream_script.h vendor/nginx-1.11.3/src/stream/ngx_stream_variables.c vendor/nginx-1.11.3/src/stream/ngx_stream_variables.h Copied files: vendor/nginx-1.11.3/src/http/modules/ngx_http_geo_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_geo_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_geoip_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_geoip_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_map_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_map_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_split_clients_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_split_clients_module.c) Removed files: vendor/nginx-1.11.1/auto/lib/md5/conf vendor/nginx-1.11.1/auto/lib/md5/make vendor/nginx-1.11.1/auto/lib/md5/makefile.bcc vendor/nginx-1.11.1/auto/lib/md5/makefile.msvc vendor/nginx-1.11.1/auto/lib/md5/makefile.owc vendor/nginx-1.11.1/auto/lib/sha1/conf vendor/nginx-1.11.1/auto/lib/sha1/make vendor/nginx-1.11.1/auto/lib/sha1/makefile.bcc vendor/nginx-1.11.1/auto/lib/sha1/makefile.msvc vendor/nginx-1.11.1/auto/lib/sha1/makefile.owc vendor/nginx-1.11.1/auto/lib/test vendor/nginx-1.11.1/src/core/ngx_sha1.h vendor/nginx-1.11.1/src/stream/ngx_stream.h Modified files: nginx_version Renamed files: vendor/nginx-1.11.3/auto/cc/acc (from vendor/nginx-1.11.1/auto/cc/acc) vendor/nginx-1.11.3/auto/cc/bcc (from vendor/nginx-1.11.1/auto/cc/bcc) vendor/nginx-1.11.3/auto/cc/ccc (from vendor/nginx-1.11.1/auto/cc/ccc) vendor/nginx-1.11.3/auto/cc/clang (from vendor/nginx-1.11.1/auto/cc/clang) vendor/nginx-1.11.3/auto/cc/conf (from vendor/nginx-1.11.1/auto/cc/conf) vendor/nginx-1.11.3/auto/cc/gcc (from vendor/nginx-1.11.1/auto/cc/gcc) vendor/nginx-1.11.3/auto/cc/icc (from vendor/nginx-1.11.1/auto/cc/icc) vendor/nginx-1.11.3/auto/cc/msvc (from vendor/nginx-1.11.1/auto/cc/msvc) vendor/nginx-1.11.3/auto/cc/name (from vendor/nginx-1.11.1/auto/cc/name) vendor/nginx-1.11.3/auto/cc/owc (from vendor/nginx-1.11.1/auto/cc/owc) vendor/nginx-1.11.3/auto/cc/sunc (from vendor/nginx-1.11.1/auto/cc/sunc) vendor/nginx-1.11.3/auto/configure (from vendor/nginx-1.11.1/auto/configure) vendor/nginx-1.11.3/auto/define (from vendor/nginx-1.11.1/auto/define) vendor/nginx-1.11.3/auto/endianness (from vendor/nginx-1.11.1/auto/endianness) vendor/nginx-1.11.3/auto/feature (from vendor/nginx-1.11.1/auto/feature) vendor/nginx-1.11.3/auto/have (from vendor/nginx-1.11.1/auto/have) vendor/nginx-1.11.3/auto/have_headers (from vendor/nginx-1.11.1/auto/have_headers) vendor/nginx-1.11.3/auto/headers (from vendor/nginx-1.11.1/auto/headers) vendor/nginx-1.11.3/auto/include (from vendor/nginx-1.11.1/auto/include) vendor/nginx-1.11.3/auto/init (from vendor/nginx-1.11.1/auto/init) vendor/nginx-1.11.3/auto/install (from vendor/nginx-1.11.1/auto/install) vendor/nginx-1.11.3/auto/lib/conf (from vendor/nginx-1.11.1/auto/lib/conf) vendor/nginx-1.11.3/auto/lib/geoip/conf (from vendor/nginx-1.11.1/auto/lib/geoip/conf) vendor/nginx-1.11.3/auto/lib/google-perftools/conf (from vendor/nginx-1.11.1/auto/lib/google-perftools/conf) vendor/nginx-1.11.3/auto/lib/libatomic/conf (from vendor/nginx-1.11.1/auto/lib/libatomic/conf) vendor/nginx-1.11.3/auto/lib/libatomic/make (from vendor/nginx-1.11.1/auto/lib/libatomic/make) vendor/nginx-1.11.3/auto/lib/libgd/conf (from vendor/nginx-1.11.1/auto/lib/libgd/conf) vendor/nginx-1.11.3/auto/lib/libxslt/conf (from vendor/nginx-1.11.1/auto/lib/libxslt/conf) vendor/nginx-1.11.3/auto/lib/make (from vendor/nginx-1.11.1/auto/lib/make) vendor/nginx-1.11.3/auto/lib/openssl/conf (from vendor/nginx-1.11.1/auto/lib/openssl/conf) vendor/nginx-1.11.3/auto/lib/openssl/make (from vendor/nginx-1.11.1/auto/lib/openssl/make) vendor/nginx-1.11.3/auto/lib/openssl/makefile.bcc (from vendor/nginx-1.11.1/auto/lib/openssl/makefile.bcc) vendor/nginx-1.11.3/auto/lib/openssl/makefile.msvc (from vendor/nginx-1.11.1/auto/lib/openssl/makefile.msvc) vendor/nginx-1.11.3/auto/lib/pcre/conf (from vendor/nginx-1.11.1/auto/lib/pcre/conf) vendor/nginx-1.11.3/auto/lib/pcre/make (from vendor/nginx-1.11.1/auto/lib/pcre/make) vendor/nginx-1.11.3/auto/lib/pcre/makefile.bcc (from vendor/nginx-1.11.1/auto/lib/pcre/makefile.bcc) vendor/nginx-1.11.3/auto/lib/pcre/makefile.msvc (from vendor/nginx-1.11.1/auto/lib/pcre/makefile.msvc) vendor/nginx-1.11.3/auto/lib/pcre/makefile.owc (from vendor/nginx-1.11.1/auto/lib/pcre/makefile.owc) vendor/nginx-1.11.3/auto/lib/perl/conf (from vendor/nginx-1.11.1/auto/lib/perl/conf) vendor/nginx-1.11.3/auto/lib/perl/make (from vendor/nginx-1.11.1/auto/lib/perl/make) vendor/nginx-1.11.3/auto/lib/zlib/conf (from vendor/nginx-1.11.1/auto/lib/zlib/conf) vendor/nginx-1.11.3/auto/lib/zlib/make (from vendor/nginx-1.11.1/auto/lib/zlib/make) vendor/nginx-1.11.3/auto/lib/zlib/makefile.bcc (from vendor/nginx-1.11.1/auto/lib/zlib/makefile.bcc) vendor/nginx-1.11.3/auto/lib/zlib/makefile.msvc (from vendor/nginx-1.11.1/auto/lib/zlib/makefile.msvc) vendor/nginx-1.11.3/auto/lib/zlib/makefile.owc (from vendor/nginx-1.11.1/auto/lib/zlib/makefile.owc) vendor/nginx-1.11.3/auto/make (from vendor/nginx-1.11.1/auto/make) vendor/nginx-1.11.3/auto/module (from vendor/nginx-1.11.1/auto/module) vendor/nginx-1.11.3/auto/modules (from vendor/nginx-1.11.1/auto/modules) vendor/nginx-1.11.3/auto/nohave (from vendor/nginx-1.11.1/auto/nohave) vendor/nginx-1.11.3/auto/options (from vendor/nginx-1.11.1/auto/options) vendor/nginx-1.11.3/auto/os/conf (from vendor/nginx-1.11.1/auto/os/conf) vendor/nginx-1.11.3/auto/os/darwin (from vendor/nginx-1.11.1/auto/os/darwin) vendor/nginx-1.11.3/auto/os/freebsd (from vendor/nginx-1.11.1/auto/os/freebsd) vendor/nginx-1.11.3/auto/os/linux (from vendor/nginx-1.11.1/auto/os/linux) vendor/nginx-1.11.3/auto/os/solaris (from vendor/nginx-1.11.1/auto/os/solaris) vendor/nginx-1.11.3/auto/os/win32 (from vendor/nginx-1.11.1/auto/os/win32) vendor/nginx-1.11.3/auto/sources (from vendor/nginx-1.11.1/auto/sources) vendor/nginx-1.11.3/auto/stubs (from vendor/nginx-1.11.1/auto/stubs) vendor/nginx-1.11.3/auto/summary (from vendor/nginx-1.11.1/auto/summary) vendor/nginx-1.11.3/auto/threads (from vendor/nginx-1.11.1/auto/threads) vendor/nginx-1.11.3/auto/types/sizeof (from vendor/nginx-1.11.1/auto/types/sizeof) vendor/nginx-1.11.3/auto/types/typedef (from vendor/nginx-1.11.1/auto/types/typedef) vendor/nginx-1.11.3/auto/types/uintptr_t (from vendor/nginx-1.11.1/auto/types/uintptr_t) vendor/nginx-1.11.3/auto/types/value (from vendor/nginx-1.11.1/auto/types/value) vendor/nginx-1.11.3/auto/unix (from vendor/nginx-1.11.1/auto/unix) vendor/nginx-1.11.3/conf/fastcgi.conf (from vendor/nginx-1.11.1/conf/fastcgi.conf) vendor/nginx-1.11.3/conf/fastcgi_params (from vendor/nginx-1.11.1/conf/fastcgi_params) vendor/nginx-1.11.3/conf/koi-utf (from vendor/nginx-1.11.1/conf/koi-utf) vendor/nginx-1.11.3/conf/koi-win (from vendor/nginx-1.11.1/conf/koi-win) vendor/nginx-1.11.3/conf/mime.types (from vendor/nginx-1.11.1/conf/mime.types) vendor/nginx-1.11.3/conf/nginx.conf (from vendor/nginx-1.11.1/conf/nginx.conf) vendor/nginx-1.11.3/conf/scgi_params (from vendor/nginx-1.11.1/conf/scgi_params) vendor/nginx-1.11.3/conf/uwsgi_params (from vendor/nginx-1.11.1/conf/uwsgi_params) vendor/nginx-1.11.3/conf/win-utf (from vendor/nginx-1.11.1/conf/win-utf) vendor/nginx-1.11.3/contrib/README (from vendor/nginx-1.11.1/contrib/README) vendor/nginx-1.11.3/contrib/geo2nginx.pl (from vendor/nginx-1.11.1/contrib/geo2nginx.pl) vendor/nginx-1.11.3/contrib/unicode2nginx/koi-utf (from vendor/nginx-1.11.1/contrib/unicode2nginx/koi-utf) vendor/nginx-1.11.3/contrib/unicode2nginx/unicode-to-nginx.pl (from vendor/nginx-1.11.1/contrib/unicode2nginx/unicode-to-nginx.pl) vendor/nginx-1.11.3/contrib/unicode2nginx/win-utf (from vendor/nginx-1.11.1/contrib/unicode2nginx/win-utf) vendor/nginx-1.11.3/contrib/vim/ftdetect/nginx.vim (from vendor/nginx-1.11.1/contrib/vim/ftdetect/nginx.vim) vendor/nginx-1.11.3/contrib/vim/indent/nginx.vim (from vendor/nginx-1.11.1/contrib/vim/indent/nginx.vim) vendor/nginx-1.11.3/contrib/vim/syntax/nginx.vim (from vendor/nginx-1.11.1/contrib/vim/syntax/nginx.vim) vendor/nginx-1.11.3/docs/GNUmakefile (from vendor/nginx-1.11.1/docs/GNUmakefile) vendor/nginx-1.11.3/docs/dtd/change_log_conf.dtd (from vendor/nginx-1.11.1/docs/dtd/change_log_conf.dtd) vendor/nginx-1.11.3/docs/dtd/changes.dtd (from vendor/nginx-1.11.1/docs/dtd/changes.dtd) vendor/nginx-1.11.3/docs/html/50x.html (from vendor/nginx-1.11.1/docs/html/50x.html) vendor/nginx-1.11.3/docs/html/index.html (from vendor/nginx-1.11.1/docs/html/index.html) vendor/nginx-1.11.3/docs/man/nginx.8 (from vendor/nginx-1.11.1/docs/man/nginx.8) vendor/nginx-1.11.3/docs/text/LICENSE (from vendor/nginx-1.11.1/docs/text/LICENSE) vendor/nginx-1.11.3/docs/text/README (from vendor/nginx-1.11.1/docs/text/README) vendor/nginx-1.11.3/docs/xml/change_log_conf.xml (from vendor/nginx-1.11.1/docs/xml/change_log_conf.xml) vendor/nginx-1.11.3/docs/xml/nginx/changes.xml (from vendor/nginx-1.11.1/docs/xml/nginx/changes.xml) vendor/nginx-1.11.3/docs/xsls/changes.xsls (from vendor/nginx-1.11.1/docs/xsls/changes.xsls) vendor/nginx-1.11.3/docs/xslt/changes.xslt (from vendor/nginx-1.11.1/docs/xslt/changes.xslt) vendor/nginx-1.11.3/misc/GNUmakefile (from vendor/nginx-1.11.1/misc/GNUmakefile) vendor/nginx-1.11.3/misc/README (from vendor/nginx-1.11.1/misc/README) vendor/nginx-1.11.3/src/core/nginx.c (from vendor/nginx-1.11.1/src/core/nginx.c) vendor/nginx-1.11.3/src/core/nginx.h (from vendor/nginx-1.11.1/src/core/nginx.h) vendor/nginx-1.11.3/src/core/ngx_array.c (from vendor/nginx-1.11.1/src/core/ngx_array.c) vendor/nginx-1.11.3/src/core/ngx_array.h (from vendor/nginx-1.11.1/src/core/ngx_array.h) vendor/nginx-1.11.3/src/core/ngx_buf.c (from vendor/nginx-1.11.1/src/core/ngx_buf.c) vendor/nginx-1.11.3/src/core/ngx_buf.h (from vendor/nginx-1.11.1/src/core/ngx_buf.h) vendor/nginx-1.11.3/src/core/ngx_conf_file.c (from vendor/nginx-1.11.1/src/core/ngx_conf_file.c) vendor/nginx-1.11.3/src/core/ngx_conf_file.h (from vendor/nginx-1.11.1/src/core/ngx_conf_file.h) vendor/nginx-1.11.3/src/core/ngx_config.h (from vendor/nginx-1.11.1/src/core/ngx_config.h) vendor/nginx-1.11.3/src/core/ngx_connection.c (from vendor/nginx-1.11.1/src/core/ngx_connection.c) vendor/nginx-1.11.3/src/core/ngx_connection.h (from vendor/nginx-1.11.1/src/core/ngx_connection.h) vendor/nginx-1.11.3/src/core/ngx_core.h (from vendor/nginx-1.11.1/src/core/ngx_core.h) vendor/nginx-1.11.3/src/core/ngx_cpuinfo.c (from vendor/nginx-1.11.1/src/core/ngx_cpuinfo.c) vendor/nginx-1.11.3/src/core/ngx_crc.h (from vendor/nginx-1.11.1/src/core/ngx_crc.h) vendor/nginx-1.11.3/src/core/ngx_crc32.c (from vendor/nginx-1.11.1/src/core/ngx_crc32.c) vendor/nginx-1.11.3/src/core/ngx_crc32.h (from vendor/nginx-1.11.1/src/core/ngx_crc32.h) vendor/nginx-1.11.3/src/core/ngx_crypt.c (from vendor/nginx-1.11.1/src/core/ngx_crypt.c) vendor/nginx-1.11.3/src/core/ngx_crypt.h (from vendor/nginx-1.11.1/src/core/ngx_crypt.h) vendor/nginx-1.11.3/src/core/ngx_cycle.c (from vendor/nginx-1.11.1/src/core/ngx_cycle.c) vendor/nginx-1.11.3/src/core/ngx_cycle.h (from vendor/nginx-1.11.1/src/core/ngx_cycle.h) vendor/nginx-1.11.3/src/core/ngx_file.c (from vendor/nginx-1.11.1/src/core/ngx_file.c) vendor/nginx-1.11.3/src/core/ngx_file.h (from vendor/nginx-1.11.1/src/core/ngx_file.h) vendor/nginx-1.11.3/src/core/ngx_hash.c (from vendor/nginx-1.11.1/src/core/ngx_hash.c) vendor/nginx-1.11.3/src/core/ngx_hash.h (from vendor/nginx-1.11.1/src/core/ngx_hash.h) vendor/nginx-1.11.3/src/core/ngx_inet.c (from vendor/nginx-1.11.1/src/core/ngx_inet.c) vendor/nginx-1.11.3/src/core/ngx_inet.h (from vendor/nginx-1.11.1/src/core/ngx_inet.h) vendor/nginx-1.11.3/src/core/ngx_list.c (from vendor/nginx-1.11.1/src/core/ngx_list.c) vendor/nginx-1.11.3/src/core/ngx_list.h (from vendor/nginx-1.11.1/src/core/ngx_list.h) vendor/nginx-1.11.3/src/core/ngx_log.c (from vendor/nginx-1.11.1/src/core/ngx_log.c) vendor/nginx-1.11.3/src/core/ngx_log.h (from vendor/nginx-1.11.1/src/core/ngx_log.h) vendor/nginx-1.11.3/src/core/ngx_md5.c (from vendor/nginx-1.11.1/src/core/ngx_md5.c) vendor/nginx-1.11.3/src/core/ngx_md5.h (from vendor/nginx-1.11.1/src/core/ngx_md5.h) vendor/nginx-1.11.3/src/core/ngx_module.c (from vendor/nginx-1.11.1/src/core/ngx_module.c) vendor/nginx-1.11.3/src/core/ngx_module.h (from vendor/nginx-1.11.1/src/core/ngx_module.h) vendor/nginx-1.11.3/src/core/ngx_murmurhash.c (from vendor/nginx-1.11.1/src/core/ngx_murmurhash.c) vendor/nginx-1.11.3/src/core/ngx_murmurhash.h (from vendor/nginx-1.11.1/src/core/ngx_murmurhash.h) vendor/nginx-1.11.3/src/core/ngx_open_file_cache.c (from vendor/nginx-1.11.1/src/core/ngx_open_file_cache.c) vendor/nginx-1.11.3/src/core/ngx_open_file_cache.h (from vendor/nginx-1.11.1/src/core/ngx_open_file_cache.h) vendor/nginx-1.11.3/src/core/ngx_output_chain.c (from vendor/nginx-1.11.1/src/core/ngx_output_chain.c) vendor/nginx-1.11.3/src/core/ngx_palloc.c (from vendor/nginx-1.11.1/src/core/ngx_palloc.c) vendor/nginx-1.11.3/src/core/ngx_palloc.h (from vendor/nginx-1.11.1/src/core/ngx_palloc.h) vendor/nginx-1.11.3/src/core/ngx_parse.c (from vendor/nginx-1.11.1/src/core/ngx_parse.c) vendor/nginx-1.11.3/src/core/ngx_parse.h (from vendor/nginx-1.11.1/src/core/ngx_parse.h) vendor/nginx-1.11.3/src/core/ngx_parse_time.c (from vendor/nginx-1.11.1/src/core/ngx_parse_time.c) vendor/nginx-1.11.3/src/core/ngx_parse_time.h (from vendor/nginx-1.11.1/src/core/ngx_parse_time.h) vendor/nginx-1.11.3/src/core/ngx_proxy_protocol.c (from vendor/nginx-1.11.1/src/core/ngx_proxy_protocol.c) vendor/nginx-1.11.3/src/core/ngx_proxy_protocol.h (from vendor/nginx-1.11.1/src/core/ngx_proxy_protocol.h) vendor/nginx-1.11.3/src/core/ngx_queue.c (from vendor/nginx-1.11.1/src/core/ngx_queue.c) vendor/nginx-1.11.3/src/core/ngx_queue.h (from vendor/nginx-1.11.1/src/core/ngx_queue.h) vendor/nginx-1.11.3/src/core/ngx_radix_tree.c (from vendor/nginx-1.11.1/src/core/ngx_radix_tree.c) vendor/nginx-1.11.3/src/core/ngx_radix_tree.h (from vendor/nginx-1.11.1/src/core/ngx_radix_tree.h) vendor/nginx-1.11.3/src/core/ngx_rbtree.c (from vendor/nginx-1.11.1/src/core/ngx_rbtree.c) vendor/nginx-1.11.3/src/core/ngx_rbtree.h (from vendor/nginx-1.11.1/src/core/ngx_rbtree.h) vendor/nginx-1.11.3/src/core/ngx_regex.c (from vendor/nginx-1.11.1/src/core/ngx_regex.c) vendor/nginx-1.11.3/src/core/ngx_regex.h (from vendor/nginx-1.11.1/src/core/ngx_regex.h) vendor/nginx-1.11.3/src/core/ngx_resolver.c (from vendor/nginx-1.11.1/src/core/ngx_resolver.c) vendor/nginx-1.11.3/src/core/ngx_resolver.h (from vendor/nginx-1.11.1/src/core/ngx_resolver.h) vendor/nginx-1.11.3/src/core/ngx_rwlock.c (from vendor/nginx-1.11.1/src/core/ngx_rwlock.c) vendor/nginx-1.11.3/src/core/ngx_rwlock.h (from vendor/nginx-1.11.1/src/core/ngx_rwlock.h) vendor/nginx-1.11.3/src/core/ngx_shmtx.c (from vendor/nginx-1.11.1/src/core/ngx_shmtx.c) vendor/nginx-1.11.3/src/core/ngx_shmtx.h (from vendor/nginx-1.11.1/src/core/ngx_shmtx.h) vendor/nginx-1.11.3/src/core/ngx_slab.c (from vendor/nginx-1.11.1/src/core/ngx_slab.c) vendor/nginx-1.11.3/src/core/ngx_slab.h (from vendor/nginx-1.11.1/src/core/ngx_slab.h) vendor/nginx-1.11.3/src/core/ngx_spinlock.c (from vendor/nginx-1.11.1/src/core/ngx_spinlock.c) vendor/nginx-1.11.3/src/core/ngx_string.c (from vendor/nginx-1.11.1/src/core/ngx_string.c) vendor/nginx-1.11.3/src/core/ngx_string.h (from vendor/nginx-1.11.1/src/core/ngx_string.h) vendor/nginx-1.11.3/src/core/ngx_syslog.c (from vendor/nginx-1.11.1/src/core/ngx_syslog.c) vendor/nginx-1.11.3/src/core/ngx_syslog.h (from vendor/nginx-1.11.1/src/core/ngx_syslog.h) vendor/nginx-1.11.3/src/core/ngx_thread_pool.c (from vendor/nginx-1.11.1/src/core/ngx_thread_pool.c) vendor/nginx-1.11.3/src/core/ngx_thread_pool.h (from vendor/nginx-1.11.1/src/core/ngx_thread_pool.h) vendor/nginx-1.11.3/src/core/ngx_times.c (from vendor/nginx-1.11.1/src/core/ngx_times.c) vendor/nginx-1.11.3/src/core/ngx_times.h (from vendor/nginx-1.11.1/src/core/ngx_times.h) vendor/nginx-1.11.3/src/event/modules/ngx_devpoll_module.c (from vendor/nginx-1.11.1/src/event/modules/ngx_devpoll_module.c) vendor/nginx-1.11.3/src/event/modules/ngx_epoll_module.c (from vendor/nginx-1.11.1/src/event/modules/ngx_epoll_module.c) vendor/nginx-1.11.3/src/event/modules/ngx_eventport_module.c (from vendor/nginx-1.11.1/src/event/modules/ngx_eventport_module.c) vendor/nginx-1.11.3/src/event/modules/ngx_iocp_module.c (from vendor/nginx-1.11.1/src/event/modules/ngx_iocp_module.c) vendor/nginx-1.11.3/src/event/modules/ngx_iocp_module.h (from vendor/nginx-1.11.1/src/event/modules/ngx_iocp_module.h) vendor/nginx-1.11.3/src/event/modules/ngx_kqueue_module.c (from vendor/nginx-1.11.1/src/event/modules/ngx_kqueue_module.c) vendor/nginx-1.11.3/src/event/modules/ngx_poll_module.c (from vendor/nginx-1.11.1/src/event/modules/ngx_poll_module.c) vendor/nginx-1.11.3/src/event/modules/ngx_select_module.c (from vendor/nginx-1.11.1/src/event/modules/ngx_select_module.c) vendor/nginx-1.11.3/src/event/modules/ngx_win32_select_module.c (from vendor/nginx-1.11.1/src/event/modules/ngx_win32_select_module.c) vendor/nginx-1.11.3/src/event/ngx_event.c (from vendor/nginx-1.11.1/src/event/ngx_event.c) vendor/nginx-1.11.3/src/event/ngx_event.h (from vendor/nginx-1.11.1/src/event/ngx_event.h) vendor/nginx-1.11.3/src/event/ngx_event_accept.c (from vendor/nginx-1.11.1/src/event/ngx_event_accept.c) vendor/nginx-1.11.3/src/event/ngx_event_acceptex.c (from vendor/nginx-1.11.1/src/event/ngx_event_acceptex.c) vendor/nginx-1.11.3/src/event/ngx_event_connect.c (from vendor/nginx-1.11.1/src/event/ngx_event_connect.c) vendor/nginx-1.11.3/src/event/ngx_event_connect.h (from vendor/nginx-1.11.1/src/event/ngx_event_connect.h) vendor/nginx-1.11.3/src/event/ngx_event_connectex.c (from vendor/nginx-1.11.1/src/event/ngx_event_connectex.c) vendor/nginx-1.11.3/src/event/ngx_event_openssl.c (from vendor/nginx-1.11.1/src/event/ngx_event_openssl.c) vendor/nginx-1.11.3/src/event/ngx_event_openssl.h (from vendor/nginx-1.11.1/src/event/ngx_event_openssl.h) vendor/nginx-1.11.3/src/event/ngx_event_openssl_stapling.c (from vendor/nginx-1.11.1/src/event/ngx_event_openssl_stapling.c) vendor/nginx-1.11.3/src/event/ngx_event_pipe.c (from vendor/nginx-1.11.1/src/event/ngx_event_pipe.c) vendor/nginx-1.11.3/src/event/ngx_event_pipe.h (from vendor/nginx-1.11.1/src/event/ngx_event_pipe.h) vendor/nginx-1.11.3/src/event/ngx_event_posted.c (from vendor/nginx-1.11.1/src/event/ngx_event_posted.c) vendor/nginx-1.11.3/src/event/ngx_event_posted.h (from vendor/nginx-1.11.1/src/event/ngx_event_posted.h) vendor/nginx-1.11.3/src/event/ngx_event_timer.c (from vendor/nginx-1.11.1/src/event/ngx_event_timer.c) vendor/nginx-1.11.3/src/event/ngx_event_timer.h (from vendor/nginx-1.11.1/src/event/ngx_event_timer.h) vendor/nginx-1.11.3/src/http/modules/ngx_http_access_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_access_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_addition_filter_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_addition_filter_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_auth_basic_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_auth_basic_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_auth_request_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_auth_request_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_autoindex_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_autoindex_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_browser_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_browser_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_charset_filter_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_charset_filter_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_chunked_filter_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_chunked_filter_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_dav_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_dav_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_degradation_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_degradation_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_empty_gif_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_empty_gif_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_fastcgi_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_fastcgi_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_flv_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_flv_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_gunzip_filter_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_gunzip_filter_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_gzip_filter_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_gzip_filter_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_gzip_static_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_gzip_static_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_headers_filter_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_headers_filter_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_image_filter_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_image_filter_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_index_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_index_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_limit_conn_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_limit_conn_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_limit_req_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_limit_req_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_log_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_log_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_memcached_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_memcached_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_mp4_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_mp4_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_not_modified_filter_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_not_modified_filter_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_proxy_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_proxy_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_random_index_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_random_index_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_range_filter_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_range_filter_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_realip_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_realip_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_referer_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_referer_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_rewrite_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_rewrite_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_scgi_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_scgi_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_secure_link_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_secure_link_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_slice_filter_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_slice_filter_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_ssi_filter_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_ssi_filter_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_ssi_filter_module.h (from vendor/nginx-1.11.1/src/http/modules/ngx_http_ssi_filter_module.h) vendor/nginx-1.11.3/src/http/modules/ngx_http_ssl_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_ssl_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_ssl_module.h (from vendor/nginx-1.11.1/src/http/modules/ngx_http_ssl_module.h) vendor/nginx-1.11.3/src/http/modules/ngx_http_static_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_static_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_stub_status_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_stub_status_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_sub_filter_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_sub_filter_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_upstream_hash_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_upstream_hash_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_upstream_ip_hash_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_upstream_ip_hash_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_upstream_keepalive_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_upstream_keepalive_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_upstream_least_conn_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_upstream_least_conn_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_upstream_zone_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_upstream_zone_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_userid_filter_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_userid_filter_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_uwsgi_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_uwsgi_module.c) vendor/nginx-1.11.3/src/http/modules/ngx_http_xslt_filter_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_xslt_filter_module.c) vendor/nginx-1.11.3/src/http/modules/perl/Makefile.PL (from vendor/nginx-1.11.1/src/http/modules/perl/Makefile.PL) vendor/nginx-1.11.3/src/http/modules/perl/nginx.pm (from vendor/nginx-1.11.1/src/http/modules/perl/nginx.pm) vendor/nginx-1.11.3/src/http/modules/perl/nginx.xs (from vendor/nginx-1.11.1/src/http/modules/perl/nginx.xs) vendor/nginx-1.11.3/src/http/modules/perl/ngx_http_perl_module.c (from vendor/nginx-1.11.1/src/http/modules/perl/ngx_http_perl_module.c) vendor/nginx-1.11.3/src/http/modules/perl/ngx_http_perl_module.h (from vendor/nginx-1.11.1/src/http/modules/perl/ngx_http_perl_module.h) vendor/nginx-1.11.3/src/http/modules/perl/typemap (from vendor/nginx-1.11.1/src/http/modules/perl/typemap) vendor/nginx-1.11.3/src/http/ngx_http.c (from vendor/nginx-1.11.1/src/http/ngx_http.c) vendor/nginx-1.11.3/src/http/ngx_http.h (from vendor/nginx-1.11.1/src/http/ngx_http.h) vendor/nginx-1.11.3/src/http/ngx_http_cache.h (from vendor/nginx-1.11.1/src/http/ngx_http_cache.h) vendor/nginx-1.11.3/src/http/ngx_http_config.h (from vendor/nginx-1.11.1/src/http/ngx_http_config.h) vendor/nginx-1.11.3/src/http/ngx_http_copy_filter_module.c (from vendor/nginx-1.11.1/src/http/ngx_http_copy_filter_module.c) vendor/nginx-1.11.3/src/http/ngx_http_core_module.c (from vendor/nginx-1.11.1/src/http/ngx_http_core_module.c) vendor/nginx-1.11.3/src/http/ngx_http_core_module.h (from vendor/nginx-1.11.1/src/http/ngx_http_core_module.h) vendor/nginx-1.11.3/src/http/ngx_http_file_cache.c (from vendor/nginx-1.11.1/src/http/ngx_http_file_cache.c) vendor/nginx-1.11.3/src/http/ngx_http_header_filter_module.c (from vendor/nginx-1.11.1/src/http/ngx_http_header_filter_module.c) vendor/nginx-1.11.3/src/http/ngx_http_parse.c (from vendor/nginx-1.11.1/src/http/ngx_http_parse.c) vendor/nginx-1.11.3/src/http/ngx_http_postpone_filter_module.c (from vendor/nginx-1.11.1/src/http/ngx_http_postpone_filter_module.c) vendor/nginx-1.11.3/src/http/ngx_http_request.c (from vendor/nginx-1.11.1/src/http/ngx_http_request.c) vendor/nginx-1.11.3/src/http/ngx_http_request.h (from vendor/nginx-1.11.1/src/http/ngx_http_request.h) vendor/nginx-1.11.3/src/http/ngx_http_request_body.c (from vendor/nginx-1.11.1/src/http/ngx_http_request_body.c) vendor/nginx-1.11.3/src/http/ngx_http_script.c (from vendor/nginx-1.11.1/src/http/ngx_http_script.c) vendor/nginx-1.11.3/src/http/ngx_http_script.h (from vendor/nginx-1.11.1/src/http/ngx_http_script.h) vendor/nginx-1.11.3/src/http/ngx_http_special_response.c (from vendor/nginx-1.11.1/src/http/ngx_http_special_response.c) vendor/nginx-1.11.3/src/http/ngx_http_upstream.c (from vendor/nginx-1.11.1/src/http/ngx_http_upstream.c) vendor/nginx-1.11.3/src/http/ngx_http_upstream.h (from vendor/nginx-1.11.1/src/http/ngx_http_upstream.h) vendor/nginx-1.11.3/src/http/ngx_http_upstream_round_robin.c (from vendor/nginx-1.11.1/src/http/ngx_http_upstream_round_robin.c) vendor/nginx-1.11.3/src/http/ngx_http_upstream_round_robin.h (from vendor/nginx-1.11.1/src/http/ngx_http_upstream_round_robin.h) vendor/nginx-1.11.3/src/http/ngx_http_variables.c (from vendor/nginx-1.11.1/src/http/ngx_http_variables.c) vendor/nginx-1.11.3/src/http/ngx_http_variables.h (from vendor/nginx-1.11.1/src/http/ngx_http_variables.h) vendor/nginx-1.11.3/src/http/ngx_http_write_filter_module.c (from vendor/nginx-1.11.1/src/http/ngx_http_write_filter_module.c) vendor/nginx-1.11.3/src/http/v2/ngx_http_v2.c (from vendor/nginx-1.11.1/src/http/v2/ngx_http_v2.c) vendor/nginx-1.11.3/src/http/v2/ngx_http_v2.h (from vendor/nginx-1.11.1/src/http/v2/ngx_http_v2.h) vendor/nginx-1.11.3/src/http/v2/ngx_http_v2_filter_module.c (from vendor/nginx-1.11.1/src/http/v2/ngx_http_v2_filter_module.c) vendor/nginx-1.11.3/src/http/v2/ngx_http_v2_huff_decode.c (from vendor/nginx-1.11.1/src/http/v2/ngx_http_v2_huff_decode.c) vendor/nginx-1.11.3/src/http/v2/ngx_http_v2_huff_encode.c (from vendor/nginx-1.11.1/src/http/v2/ngx_http_v2_huff_encode.c) vendor/nginx-1.11.3/src/http/v2/ngx_http_v2_module.c (from vendor/nginx-1.11.1/src/http/v2/ngx_http_v2_module.c) vendor/nginx-1.11.3/src/http/v2/ngx_http_v2_module.h (from vendor/nginx-1.11.1/src/http/v2/ngx_http_v2_module.h) vendor/nginx-1.11.3/src/http/v2/ngx_http_v2_table.c (from vendor/nginx-1.11.1/src/http/v2/ngx_http_v2_table.c) vendor/nginx-1.11.3/src/mail/ngx_mail.c (from vendor/nginx-1.11.1/src/mail/ngx_mail.c) vendor/nginx-1.11.3/src/mail/ngx_mail.h (from vendor/nginx-1.11.1/src/mail/ngx_mail.h) vendor/nginx-1.11.3/src/mail/ngx_mail_auth_http_module.c (from vendor/nginx-1.11.1/src/mail/ngx_mail_auth_http_module.c) vendor/nginx-1.11.3/src/mail/ngx_mail_core_module.c (from vendor/nginx-1.11.1/src/mail/ngx_mail_core_module.c) vendor/nginx-1.11.3/src/mail/ngx_mail_handler.c (from vendor/nginx-1.11.1/src/mail/ngx_mail_handler.c) vendor/nginx-1.11.3/src/mail/ngx_mail_imap_handler.c (from vendor/nginx-1.11.1/src/mail/ngx_mail_imap_handler.c) vendor/nginx-1.11.3/src/mail/ngx_mail_imap_module.c (from vendor/nginx-1.11.1/src/mail/ngx_mail_imap_module.c) vendor/nginx-1.11.3/src/mail/ngx_mail_imap_module.h (from vendor/nginx-1.11.1/src/mail/ngx_mail_imap_module.h) vendor/nginx-1.11.3/src/mail/ngx_mail_parse.c (from vendor/nginx-1.11.1/src/mail/ngx_mail_parse.c) vendor/nginx-1.11.3/src/mail/ngx_mail_pop3_handler.c (from vendor/nginx-1.11.1/src/mail/ngx_mail_pop3_handler.c) vendor/nginx-1.11.3/src/mail/ngx_mail_pop3_module.c (from vendor/nginx-1.11.1/src/mail/ngx_mail_pop3_module.c) vendor/nginx-1.11.3/src/mail/ngx_mail_pop3_module.h (from vendor/nginx-1.11.1/src/mail/ngx_mail_pop3_module.h) vendor/nginx-1.11.3/src/mail/ngx_mail_proxy_module.c (from vendor/nginx-1.11.1/src/mail/ngx_mail_proxy_module.c) vendor/nginx-1.11.3/src/mail/ngx_mail_smtp_handler.c (from vendor/nginx-1.11.1/src/mail/ngx_mail_smtp_handler.c) vendor/nginx-1.11.3/src/mail/ngx_mail_smtp_module.c (from vendor/nginx-1.11.1/src/mail/ngx_mail_smtp_module.c) vendor/nginx-1.11.3/src/mail/ngx_mail_smtp_module.h (from vendor/nginx-1.11.1/src/mail/ngx_mail_smtp_module.h) vendor/nginx-1.11.3/src/mail/ngx_mail_ssl_module.c (from vendor/nginx-1.11.1/src/mail/ngx_mail_ssl_module.c) vendor/nginx-1.11.3/src/mail/ngx_mail_ssl_module.h (from vendor/nginx-1.11.1/src/mail/ngx_mail_ssl_module.h) vendor/nginx-1.11.3/src/misc/ngx_cpp_test_module.cpp (from vendor/nginx-1.11.1/src/misc/ngx_cpp_test_module.cpp) vendor/nginx-1.11.3/src/misc/ngx_google_perftools_module.c (from vendor/nginx-1.11.1/src/misc/ngx_google_perftools_module.c) vendor/nginx-1.11.3/src/os/unix/ngx_alloc.c (from vendor/nginx-1.11.1/src/os/unix/ngx_alloc.c) vendor/nginx-1.11.3/src/os/unix/ngx_alloc.h (from vendor/nginx-1.11.1/src/os/unix/ngx_alloc.h) vendor/nginx-1.11.3/src/os/unix/ngx_atomic.h (from vendor/nginx-1.11.1/src/os/unix/ngx_atomic.h) vendor/nginx-1.11.3/src/os/unix/ngx_channel.c (from vendor/nginx-1.11.1/src/os/unix/ngx_channel.c) vendor/nginx-1.11.3/src/os/unix/ngx_channel.h (from vendor/nginx-1.11.1/src/os/unix/ngx_channel.h) vendor/nginx-1.11.3/src/os/unix/ngx_daemon.c (from vendor/nginx-1.11.1/src/os/unix/ngx_daemon.c) vendor/nginx-1.11.3/src/os/unix/ngx_darwin.h (from vendor/nginx-1.11.1/src/os/unix/ngx_darwin.h) vendor/nginx-1.11.3/src/os/unix/ngx_darwin_config.h (from vendor/nginx-1.11.1/src/os/unix/ngx_darwin_config.h) vendor/nginx-1.11.3/src/os/unix/ngx_darwin_init.c (from vendor/nginx-1.11.1/src/os/unix/ngx_darwin_init.c) vendor/nginx-1.11.3/src/os/unix/ngx_darwin_sendfile_chain.c (from vendor/nginx-1.11.1/src/os/unix/ngx_darwin_sendfile_chain.c) vendor/nginx-1.11.3/src/os/unix/ngx_dlopen.c (from vendor/nginx-1.11.1/src/os/unix/ngx_dlopen.c) vendor/nginx-1.11.3/src/os/unix/ngx_dlopen.h (from vendor/nginx-1.11.1/src/os/unix/ngx_dlopen.h) vendor/nginx-1.11.3/src/os/unix/ngx_errno.c (from vendor/nginx-1.11.1/src/os/unix/ngx_errno.c) vendor/nginx-1.11.3/src/os/unix/ngx_errno.h (from vendor/nginx-1.11.1/src/os/unix/ngx_errno.h) vendor/nginx-1.11.3/src/os/unix/ngx_file_aio_read.c (from vendor/nginx-1.11.1/src/os/unix/ngx_file_aio_read.c) vendor/nginx-1.11.3/src/os/unix/ngx_files.c (from vendor/nginx-1.11.1/src/os/unix/ngx_files.c) vendor/nginx-1.11.3/src/os/unix/ngx_files.h (from vendor/nginx-1.11.1/src/os/unix/ngx_files.h) vendor/nginx-1.11.3/src/os/unix/ngx_freebsd.h (from vendor/nginx-1.11.1/src/os/unix/ngx_freebsd.h) vendor/nginx-1.11.3/src/os/unix/ngx_freebsd_config.h (from vendor/nginx-1.11.1/src/os/unix/ngx_freebsd_config.h) vendor/nginx-1.11.3/src/os/unix/ngx_freebsd_init.c (from vendor/nginx-1.11.1/src/os/unix/ngx_freebsd_init.c) vendor/nginx-1.11.3/src/os/unix/ngx_freebsd_sendfile_chain.c (from vendor/nginx-1.11.1/src/os/unix/ngx_freebsd_sendfile_chain.c) vendor/nginx-1.11.3/src/os/unix/ngx_gcc_atomic_amd64.h (from vendor/nginx-1.11.1/src/os/unix/ngx_gcc_atomic_amd64.h) vendor/nginx-1.11.3/src/os/unix/ngx_gcc_atomic_ppc.h (from vendor/nginx-1.11.1/src/os/unix/ngx_gcc_atomic_ppc.h) vendor/nginx-1.11.3/src/os/unix/ngx_gcc_atomic_sparc64.h (from vendor/nginx-1.11.1/src/os/unix/ngx_gcc_atomic_sparc64.h) vendor/nginx-1.11.3/src/os/unix/ngx_gcc_atomic_x86.h (from vendor/nginx-1.11.1/src/os/unix/ngx_gcc_atomic_x86.h) vendor/nginx-1.11.3/src/os/unix/ngx_linux.h (from vendor/nginx-1.11.1/src/os/unix/ngx_linux.h) vendor/nginx-1.11.3/src/os/unix/ngx_linux_aio_read.c (from vendor/nginx-1.11.1/src/os/unix/ngx_linux_aio_read.c) vendor/nginx-1.11.3/src/os/unix/ngx_linux_config.h (from vendor/nginx-1.11.1/src/os/unix/ngx_linux_config.h) vendor/nginx-1.11.3/src/os/unix/ngx_linux_init.c (from vendor/nginx-1.11.1/src/os/unix/ngx_linux_init.c) vendor/nginx-1.11.3/src/os/unix/ngx_linux_sendfile_chain.c (from vendor/nginx-1.11.1/src/os/unix/ngx_linux_sendfile_chain.c) vendor/nginx-1.11.3/src/os/unix/ngx_os.h (from vendor/nginx-1.11.1/src/os/unix/ngx_os.h) vendor/nginx-1.11.3/src/os/unix/ngx_posix_config.h (from vendor/nginx-1.11.1/src/os/unix/ngx_posix_config.h) vendor/nginx-1.11.3/src/os/unix/ngx_posix_init.c (from vendor/nginx-1.11.1/src/os/unix/ngx_posix_init.c) vendor/nginx-1.11.3/src/os/unix/ngx_process.c (from vendor/nginx-1.11.1/src/os/unix/ngx_process.c) vendor/nginx-1.11.3/src/os/unix/ngx_process.h (from vendor/nginx-1.11.1/src/os/unix/ngx_process.h) vendor/nginx-1.11.3/src/os/unix/ngx_process_cycle.c (from vendor/nginx-1.11.1/src/os/unix/ngx_process_cycle.c) vendor/nginx-1.11.3/src/os/unix/ngx_process_cycle.h (from vendor/nginx-1.11.1/src/os/unix/ngx_process_cycle.h) vendor/nginx-1.11.3/src/os/unix/ngx_readv_chain.c (from vendor/nginx-1.11.1/src/os/unix/ngx_readv_chain.c) vendor/nginx-1.11.3/src/os/unix/ngx_recv.c (from vendor/nginx-1.11.1/src/os/unix/ngx_recv.c) vendor/nginx-1.11.3/src/os/unix/ngx_send.c (from vendor/nginx-1.11.1/src/os/unix/ngx_send.c) vendor/nginx-1.11.3/src/os/unix/ngx_setaffinity.c (from vendor/nginx-1.11.1/src/os/unix/ngx_setaffinity.c) vendor/nginx-1.11.3/src/os/unix/ngx_setaffinity.h (from vendor/nginx-1.11.1/src/os/unix/ngx_setaffinity.h) vendor/nginx-1.11.3/src/os/unix/ngx_setproctitle.c (from vendor/nginx-1.11.1/src/os/unix/ngx_setproctitle.c) vendor/nginx-1.11.3/src/os/unix/ngx_setproctitle.h (from vendor/nginx-1.11.1/src/os/unix/ngx_setproctitle.h) vendor/nginx-1.11.3/src/os/unix/ngx_shmem.c (from vendor/nginx-1.11.1/src/os/unix/ngx_shmem.c) vendor/nginx-1.11.3/src/os/unix/ngx_shmem.h (from vendor/nginx-1.11.1/src/os/unix/ngx_shmem.h) vendor/nginx-1.11.3/src/os/unix/ngx_socket.c (from vendor/nginx-1.11.1/src/os/unix/ngx_socket.c) vendor/nginx-1.11.3/src/os/unix/ngx_socket.h (from vendor/nginx-1.11.1/src/os/unix/ngx_socket.h) vendor/nginx-1.11.3/src/os/unix/ngx_solaris.h (from vendor/nginx-1.11.1/src/os/unix/ngx_solaris.h) vendor/nginx-1.11.3/src/os/unix/ngx_solaris_config.h (from vendor/nginx-1.11.1/src/os/unix/ngx_solaris_config.h) vendor/nginx-1.11.3/src/os/unix/ngx_solaris_init.c (from vendor/nginx-1.11.1/src/os/unix/ngx_solaris_init.c) vendor/nginx-1.11.3/src/os/unix/ngx_solaris_sendfilev_chain.c (from vendor/nginx-1.11.1/src/os/unix/ngx_solaris_sendfilev_chain.c) vendor/nginx-1.11.3/src/os/unix/ngx_sunpro_amd64.il (from vendor/nginx-1.11.1/src/os/unix/ngx_sunpro_amd64.il) vendor/nginx-1.11.3/src/os/unix/ngx_sunpro_atomic_sparc64.h (from vendor/nginx-1.11.1/src/os/unix/ngx_sunpro_atomic_sparc64.h) vendor/nginx-1.11.3/src/os/unix/ngx_sunpro_sparc64.il (from vendor/nginx-1.11.1/src/os/unix/ngx_sunpro_sparc64.il) vendor/nginx-1.11.3/src/os/unix/ngx_sunpro_x86.il (from vendor/nginx-1.11.1/src/os/unix/ngx_sunpro_x86.il) vendor/nginx-1.11.3/src/os/unix/ngx_thread.h (from vendor/nginx-1.11.1/src/os/unix/ngx_thread.h) vendor/nginx-1.11.3/src/os/unix/ngx_thread_cond.c (from vendor/nginx-1.11.1/src/os/unix/ngx_thread_cond.c) vendor/nginx-1.11.3/src/os/unix/ngx_thread_id.c (from vendor/nginx-1.11.1/src/os/unix/ngx_thread_id.c) vendor/nginx-1.11.3/src/os/unix/ngx_thread_mutex.c (from vendor/nginx-1.11.1/src/os/unix/ngx_thread_mutex.c) vendor/nginx-1.11.3/src/os/unix/ngx_time.c (from vendor/nginx-1.11.1/src/os/unix/ngx_time.c) vendor/nginx-1.11.3/src/os/unix/ngx_time.h (from vendor/nginx-1.11.1/src/os/unix/ngx_time.h) vendor/nginx-1.11.3/src/os/unix/ngx_udp_recv.c (from vendor/nginx-1.11.1/src/os/unix/ngx_udp_recv.c) vendor/nginx-1.11.3/src/os/unix/ngx_udp_send.c (from vendor/nginx-1.11.1/src/os/unix/ngx_udp_send.c) vendor/nginx-1.11.3/src/os/unix/ngx_user.c (from vendor/nginx-1.11.1/src/os/unix/ngx_user.c) vendor/nginx-1.11.3/src/os/unix/ngx_user.h (from vendor/nginx-1.11.1/src/os/unix/ngx_user.h) vendor/nginx-1.11.3/src/os/unix/ngx_writev_chain.c (from vendor/nginx-1.11.1/src/os/unix/ngx_writev_chain.c) vendor/nginx-1.11.3/src/os/win32/nginx.ico (from vendor/nginx-1.11.1/src/os/win32/nginx.ico) vendor/nginx-1.11.3/src/os/win32/nginx.rc (from vendor/nginx-1.11.1/src/os/win32/nginx.rc) vendor/nginx-1.11.3/src/os/win32/nginx_icon16.xpm (from vendor/nginx-1.11.1/src/os/win32/nginx_icon16.xpm) vendor/nginx-1.11.3/src/os/win32/nginx_icon32.xpm (from vendor/nginx-1.11.1/src/os/win32/nginx_icon32.xpm) vendor/nginx-1.11.3/src/os/win32/nginx_icon48.xpm (from vendor/nginx-1.11.1/src/os/win32/nginx_icon48.xpm) vendor/nginx-1.11.3/src/os/win32/ngx_alloc.c (from vendor/nginx-1.11.1/src/os/win32/ngx_alloc.c) vendor/nginx-1.11.3/src/os/win32/ngx_alloc.h (from vendor/nginx-1.11.1/src/os/win32/ngx_alloc.h) vendor/nginx-1.11.3/src/os/win32/ngx_atomic.h (from vendor/nginx-1.11.1/src/os/win32/ngx_atomic.h) vendor/nginx-1.11.3/src/os/win32/ngx_dlopen.c (from vendor/nginx-1.11.1/src/os/win32/ngx_dlopen.c) vendor/nginx-1.11.3/src/os/win32/ngx_dlopen.h (from vendor/nginx-1.11.1/src/os/win32/ngx_dlopen.h) vendor/nginx-1.11.3/src/os/win32/ngx_errno.c (from vendor/nginx-1.11.1/src/os/win32/ngx_errno.c) vendor/nginx-1.11.3/src/os/win32/ngx_errno.h (from vendor/nginx-1.11.1/src/os/win32/ngx_errno.h) vendor/nginx-1.11.3/src/os/win32/ngx_event_log.c (from vendor/nginx-1.11.1/src/os/win32/ngx_event_log.c) vendor/nginx-1.11.3/src/os/win32/ngx_files.c (from vendor/nginx-1.11.1/src/os/win32/ngx_files.c) vendor/nginx-1.11.3/src/os/win32/ngx_files.h (from vendor/nginx-1.11.1/src/os/win32/ngx_files.h) vendor/nginx-1.11.3/src/os/win32/ngx_os.h (from vendor/nginx-1.11.1/src/os/win32/ngx_os.h) vendor/nginx-1.11.3/src/os/win32/ngx_process.c (from vendor/nginx-1.11.1/src/os/win32/ngx_process.c) vendor/nginx-1.11.3/src/os/win32/ngx_process.h (from vendor/nginx-1.11.1/src/os/win32/ngx_process.h) vendor/nginx-1.11.3/src/os/win32/ngx_process_cycle.c (from vendor/nginx-1.11.1/src/os/win32/ngx_process_cycle.c) vendor/nginx-1.11.3/src/os/win32/ngx_process_cycle.h (from vendor/nginx-1.11.1/src/os/win32/ngx_process_cycle.h) vendor/nginx-1.11.3/src/os/win32/ngx_service.c (from vendor/nginx-1.11.1/src/os/win32/ngx_service.c) vendor/nginx-1.11.3/src/os/win32/ngx_shmem.c (from vendor/nginx-1.11.1/src/os/win32/ngx_shmem.c) vendor/nginx-1.11.3/src/os/win32/ngx_shmem.h (from vendor/nginx-1.11.1/src/os/win32/ngx_shmem.h) vendor/nginx-1.11.3/src/os/win32/ngx_socket.c (from vendor/nginx-1.11.1/src/os/win32/ngx_socket.c) vendor/nginx-1.11.3/src/os/win32/ngx_socket.h (from vendor/nginx-1.11.1/src/os/win32/ngx_socket.h) vendor/nginx-1.11.3/src/os/win32/ngx_stat.c (from vendor/nginx-1.11.1/src/os/win32/ngx_stat.c) vendor/nginx-1.11.3/src/os/win32/ngx_thread.c (from vendor/nginx-1.11.1/src/os/win32/ngx_thread.c) vendor/nginx-1.11.3/src/os/win32/ngx_thread.h (from vendor/nginx-1.11.1/src/os/win32/ngx_thread.h) vendor/nginx-1.11.3/src/os/win32/ngx_time.c (from vendor/nginx-1.11.1/src/os/win32/ngx_time.c) vendor/nginx-1.11.3/src/os/win32/ngx_time.h (from vendor/nginx-1.11.1/src/os/win32/ngx_time.h) vendor/nginx-1.11.3/src/os/win32/ngx_udp_wsarecv.c (from vendor/nginx-1.11.1/src/os/win32/ngx_udp_wsarecv.c) vendor/nginx-1.11.3/src/os/win32/ngx_user.c (from vendor/nginx-1.11.1/src/os/win32/ngx_user.c) vendor/nginx-1.11.3/src/os/win32/ngx_user.h (from vendor/nginx-1.11.1/src/os/win32/ngx_user.h) vendor/nginx-1.11.3/src/os/win32/ngx_win32_config.h (from vendor/nginx-1.11.1/src/os/win32/ngx_win32_config.h) vendor/nginx-1.11.3/src/os/win32/ngx_win32_init.c (from vendor/nginx-1.11.1/src/os/win32/ngx_win32_init.c) vendor/nginx-1.11.3/src/os/win32/ngx_wsarecv.c (from vendor/nginx-1.11.1/src/os/win32/ngx_wsarecv.c) vendor/nginx-1.11.3/src/os/win32/ngx_wsarecv_chain.c (from vendor/nginx-1.11.1/src/os/win32/ngx_wsarecv_chain.c) vendor/nginx-1.11.3/src/os/win32/ngx_wsasend.c (from vendor/nginx-1.11.1/src/os/win32/ngx_wsasend.c) vendor/nginx-1.11.3/src/os/win32/ngx_wsasend_chain.c (from vendor/nginx-1.11.1/src/os/win32/ngx_wsasend_chain.c) vendor/nginx-1.11.3/src/stream/ngx_stream.c (from vendor/nginx-1.11.1/src/stream/ngx_stream.c) vendor/nginx-1.11.3/src/stream/ngx_stream_access_module.c (from vendor/nginx-1.11.1/src/stream/ngx_stream_access_module.c) vendor/nginx-1.11.3/src/stream/ngx_stream_core_module.c (from vendor/nginx-1.11.1/src/stream/ngx_stream_core_module.c) vendor/nginx-1.11.3/src/stream/ngx_stream_geo_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_geo_module.c) vendor/nginx-1.11.3/src/stream/ngx_stream_geoip_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_geoip_module.c) vendor/nginx-1.11.3/src/stream/ngx_stream_handler.c (from vendor/nginx-1.11.1/src/stream/ngx_stream_handler.c) vendor/nginx-1.11.3/src/stream/ngx_stream_limit_conn_module.c (from vendor/nginx-1.11.1/src/stream/ngx_stream_limit_conn_module.c) vendor/nginx-1.11.3/src/stream/ngx_stream_map_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_map_module.c) vendor/nginx-1.11.3/src/stream/ngx_stream_proxy_module.c (from vendor/nginx-1.11.1/src/stream/ngx_stream_proxy_module.c) vendor/nginx-1.11.3/src/stream/ngx_stream_split_clients_module.c (from vendor/nginx-1.11.1/src/http/modules/ngx_http_split_clients_module.c) vendor/nginx-1.11.3/src/stream/ngx_stream_ssl_module.c (from vendor/nginx-1.11.1/src/stream/ngx_stream_ssl_module.c) vendor/nginx-1.11.3/src/stream/ngx_stream_ssl_module.h (from vendor/nginx-1.11.1/src/stream/ngx_stream_ssl_module.h) vendor/nginx-1.11.3/src/stream/ngx_stream_upstream.c (from vendor/nginx-1.11.1/src/stream/ngx_stream_upstream.c) vendor/nginx-1.11.3/src/stream/ngx_stream_upstream.h (from vendor/nginx-1.11.1/src/stream/ngx_stream_upstream.h) vendor/nginx-1.11.3/src/stream/ngx_stream_upstream_hash_module.c (from vendor/nginx-1.11.1/src/stream/ngx_stream_upstream_hash_module.c) vendor/nginx-1.11.3/src/stream/ngx_stream_upstream_least_conn_module.c (from vendor/nginx-1.11.1/src/stream/ngx_stream_upstream_least_conn_module.c) vendor/nginx-1.11.3/src/stream/ngx_stream_upstream_round_robin.c (from vendor/nginx-1.11.1/src/stream/ngx_stream_upstream_round_robin.c) vendor/nginx-1.11.3/src/stream/ngx_stream_upstream_round_robin.h (from vendor/nginx-1.11.1/src/stream/ngx_stream_upstream_round_robin.h) vendor/nginx-1.11.3/src/stream/ngx_stream_upstream_zone_module.c (from vendor/nginx-1.11.1/src/stream/ngx_stream_upstream_zone_module.c) Modified: nginx_version (+1 -1) =================================================================== --- nginx_version 2016-07-27 12:58:24 +0900 (720c738) +++ nginx_version 2016-07-27 13:06:13 +0900 (0a5af26) @@ -1 +1 @@ -1.11.1 +1.11.3 Deleted: vendor/nginx-1.11.1/auto/lib/md5/conf (+0 -103) 100644 =================================================================== --- vendor/nginx-1.11.1/auto/lib/md5/conf 2016-07-27 12:58:24 +0900 (49c0ddf) +++ /dev/null @@ -1,103 +0,0 @@ - -# Copyright (C) Igor Sysoev -# Copyright (C) Nginx, Inc. - - -if [ $MD5 != NONE ]; then - - if grep MD5_Init $MD5/md5.h 2>&1 >/dev/null; then - # OpenSSL md5 - OPENSSL_MD5=YES - have=NGX_HAVE_OPENSSL_MD5 . auto/have - have=NGX_OPENSSL_MD5 . auto/have - else - # rsaref md5 - OPENSSL_MD5=NO - fi - - have=NGX_HAVE_MD5 . auto/have - CORE_INCS="$CORE_INCS $MD5" - - case "$NGX_CC_NAME" in - - msvc | owc | bcc) - LINK_DEPS="$LINK_DEPS $MD5/md5.lib" - CORE_LIBS="$CORE_LIBS $MD5/md5.lib" - ;; - - icc) - LINK_DEPS="$LINK_DEPS $MD5/libmd5.a" - - # to allow -ipo optimization we link with the *.o but not library - CORE_LIBS="$CORE_LIBS $MD5/md5_dgst.o" - - if [ $MD5_ASM = YES ]; then - CORE_LIBS="$CORE_LIBS $MD5/asm/mx86-elf.o" - fi - ;; - - *) - LINK_DEPS="$LINK_DEPS $MD5/libmd5.a" - CORE_LIBS="$CORE_LIBS $MD5/libmd5.a" - #CORE_LIBS="$CORE_LIBS -L $MD5 -lmd5" - ;; - - esac - -else - - if [ "$NGX_PLATFORM" != win32 ]; then - - MD5=NO - - # FreeBSD, Solaris 10 - - ngx_feature="md5 in system md library" - ngx_feature_name=NGX_HAVE_MD5 - ngx_feature_run=no - ngx_feature_incs="#include <md5.h>" - ngx_feature_path= - ngx_feature_libs="-lmd" - ngx_feature_test="MD5_CTX md5; MD5Init(&md5)" - . auto/feature - - ngx_md5_lib="system md" - - if [ $ngx_found = no ]; then - - # Solaris 8/9 - - ngx_feature="md5 in system md5 library" - ngx_feature_libs="-lmd5" - . auto/feature - - ngx_md5_lib="system md5" - fi - - if [ $ngx_found = no ]; then - - # OpenSSL crypto library - - ngx_feature="md5 in system OpenSSL crypto library" - ngx_feature_name="NGX_OPENSSL_MD5" - ngx_feature_incs="#include <openssl/md5.h>" - ngx_feature_libs="-lcrypto" - ngx_feature_test="MD5_CTX md5; MD5_Init(&md5)" - . auto/feature - - ngx_md5_lib="system crypto" - - if [ $ngx_found = yes ]; then - have=NGX_HAVE_OPENSSL_MD5_H . auto/have - have=NGX_HAVE_MD5 . auto/have - fi - fi - - if [ $ngx_found = yes ]; then - CORE_LIBS="$CORE_LIBS $ngx_feature_libs" - MD5=YES - MD5_LIB=$ngx_md5_lib - fi - fi - -fi Deleted: vendor/nginx-1.11.1/auto/lib/md5/make (+0 -96) 100644 =================================================================== --- vendor/nginx-1.11.1/auto/lib/md5/make 2016-07-27 12:58:24 +0900 (7000b20) +++ /dev/null @@ -1,96 +0,0 @@ - -# Copyright (C) Igor Sysoev -# Copyright (C) Nginx, Inc. - - -case "$NGX_CC_NAME" in - - msvc) - ngx_makefile=makefile.msvc - ngx_opt="CPU_OPT=\"$CPU_OPT\" LIBC=$LIBC MD5_ASM=$MD5_ASM" - ngx_md5="MD5=\"$MD5\"" - ;; - - owc) - ngx_makefile=makefile.owc - ngx_opt="CPU_OPT=\"$CPU_OPT\"" - ngx_md5=`echo MD5=\"$MD5\" | sed -e "s/\//$ngx_regex_dirsep/g"` - ;; - - bcc) - ngx_makefile=makefile.bcc - ngx_opt="-DCPU_OPT=\"$CPU_OPT\" -DMD5_ASM=$MD5_ASM" - ngx_md5=`echo \-DMD5=\"$MD5\" | sed -e "s/\//$ngx_regex_dirsep/g"` - ;; - -esac - - -done=NO - - -case "$NGX_PLATFORM" in - - win32) - cat << END >> $NGX_MAKEFILE - -`echo "$MD5/md5.lib: $NGX_MAKEFILE" | sed -e "s/\//$ngx_regex_dirsep/g"` - \$(MAKE) -f auto/lib/md5/$ngx_makefile $ngx_opt $ngx_md5 - -END - - done=YES - ;; - - SunOS:*:i86pc) - if [ $MD5_ASM = YES ]; then - - cat << END >> $NGX_MAKEFILE - -$MD5/libmd5.a: $NGX_MAKEFILE - cd $MD5 \\ - && \$(MAKE) CFLAGS="$MD5_OPT -DSOL -DMD5_ASM -DL_ENDIAN" \\ - CC="\$(CC)" CPP="\$(CPP)" \\ - MD5_ASM_OBJ=asm/mx86-sol.o clean libmd5.a - -END - - done=YES - fi - ;; - - # FreeBSD: i386 - # Linux: i686 - - *:i386 | *:i686) - if [ $MD5_ASM = YES ]; then - - cat << END >> $NGX_MAKEFILE - -$MD5/libmd5.a: $NGX_MAKEFILE - cd $MD5 \\ - && \$(MAKE) CFLAGS="$MD5_OPT -DELF -DMD5_ASM -DL_ENDIAN" \\ - CC="\$(CC)" CPP="\$(CPP)" \\ - MD5_ASM_OBJ=asm/mx86-elf.o clean libmd5.a - -END - - done=YES - fi - ;; - -esac - - -if [ $done = NO ]; then - - cat << END >> $NGX_MAKEFILE - -$MD5/libmd5.a: $NGX_MAKEFILE - cd $MD5 \\ - && \$(MAKE) CFLAGS="$MD5_OPT" \\ - CC="\$(CC)" MD5_ASM_OBJ= clean libmd5.a - -END - -fi Deleted: vendor/nginx-1.11.1/auto/lib/md5/makefile.bcc (+0 -22) 100644 =================================================================== --- vendor/nginx-1.11.1/auto/lib/md5/makefile.bcc 2016-07-27 12:58:24 +0900 (eb6fb62) +++ /dev/null @@ -1,22 +0,0 @@ - -# Copyright (C) Igor Sysoev -# Copyright (C) Nginx, Inc. - - -CFLAGS = -q -O2 -tWM $(CPU_OPT) -DL_ENDIAN - -!if "$(MD5_ASM)" == "YES" - -md5.lib: - cd $(MD5) - bcc32 -c $(CFLAGS) -DMD5_ASM md5_dgst.c - tlib md5.lib +md5_dgst.obj +"asm\m-win32.obj" - -!else - -md5.lib: - cd $(MD5) - bcc32 -c $(CFLAGS) md5_dgst.c - tlib md5.lib +md5_dgst.obj - -!endif Deleted: vendor/nginx-1.11.1/auto/lib/md5/makefile.msvc (+0 -22) 100644 =================================================================== --- vendor/nginx-1.11.1/auto/lib/md5/makefile.msvc 2016-07-27 12:58:24 +0900 (90d62fa) +++ /dev/null @@ -1,22 +0,0 @@ - -# Copyright (C) Igor Sysoev -# Copyright (C) Nginx, Inc. - - -CFLAGS = -nologo -O2 -Ob1 -Oi -Gs $(LIBC) $(CPU_OPT) -D L_ENDIAN - -!IF "$(MD5_ASM)" == "YES" - -md5.lib: - cd $(MD5) - cl -c $(CFLAGS) -D MD5_ASM md5_dgst.c - link -lib -out:md5.lib md5_dgst.obj asm/m-win32.obj - -!ELSE - -md5.lib: - cd $(MD5) - cl -c $(CFLAGS) md5_dgst.c - link -lib -out:md5.lib md5_dgst.obj - -!ENDIF Deleted: vendor/nginx-1.11.1/auto/lib/md5/makefile.owc (+0 -11) 100644 =================================================================== --- vendor/nginx-1.11.1/auto/lib/md5/makefile.owc 2016-07-27 12:58:24 +0900 (78c1e61) +++ /dev/null @@ -1,11 +0,0 @@ - -# Copyright (C) Igor Sysoev -# Copyright (C) Nginx, Inc. - - -CFLAGS = -zq -bt=nt -bm -ot -op -oi -oe -s $(CPU_OPT) - -md5.lib: - cd $(MD5) - wcl386 -c $(CFLAGS) -dL_ENDIAN md5_dgst.c - wlib -n md5.lib md5_dgst.obj Deleted: vendor/nginx-1.11.1/auto/lib/sha1/conf (+0 -79) 100644 =================================================================== --- vendor/nginx-1.11.1/auto/lib/sha1/conf 2016-07-27 12:58:24 +0900 (78f9efd) +++ /dev/null @@ -1,79 +0,0 @@ - -# Copyright (C) Igor Sysoev -# Copyright (C) Nginx, Inc. - - -if [ $SHA1 != NONE ]; then - - have=NGX_HAVE_SHA1 . auto/have - CORE_INCS="$CORE_INCS $SHA1" - - case "$NGX_CC_NAME" in - - msvc | owc | bcc) - LINK_DEPS="$LINK_DEPS $SHA1/sha1.lib" - CORE_LIBS="$CORE_LIBS $SHA1/sha1.lib" - ;; - - icc) - LINK_DEPS="$LINK_DEPS $SHA1/libsha.a" - - # to allow -ipo optimization we link with the *.o but not library - CORE_LIBS="$CORE_LIBS $SHA1/sha1_dgst.o" - - if [ $SHA1_ASM = YES ]; then - CORE_LIBS="$CORE_LIBS $SHA1/asm/sx86-elf.o" - fi - ;; - - *) - LINK_DEPS="$LINK_DEPS $SHA1/libsha.a" - CORE_LIBS="$CORE_LIBS $SHA1/libsha.a" - #CORE_LIBS="$CORE_LIBS -L $SHA1 -lsha" - ;; - - esac - -else - - if [ "$NGX_PLATFORM" != win32 ]; then - - SHA1=NO - - # FreeBSD - - ngx_feature="sha1 in system md library" - ngx_feature_name=NGX_HAVE_SHA1 - ngx_feature_run=no - ngx_feature_incs="#include <sha.h>" - ngx_feature_path= - ngx_feature_libs="-lmd" - ngx_feature_test="SHA_CTX sha1; SHA1_Init(&sha1)" - . auto/feature - - ngx_sha1_lib="system md" - - if [ $ngx_found = no ]; then - - # OpenSSL crypto library - - ngx_feature="sha1 in system OpenSSL crypto library" - ngx_feature_incs="#include <openssl/sha.h>" - ngx_feature_libs="-lcrypto" - . auto/feature - - ngx_sha1_lib="system crypto" - - if [ $ngx_found = yes ]; then - have=NGX_HAVE_OPENSSL_SHA1_H . auto/have - fi - fi - - if [ $ngx_found = yes ]; then - CORE_LIBS="$CORE_LIBS $ngx_feature_libs" - SHA1=YES - SHA1_LIB=$ngx_sha1_lib - fi - fi - -fi Deleted: vendor/nginx-1.11.1/auto/lib/sha1/make (+0 -96) 100644 =================================================================== --- vendor/nginx-1.11.1/auto/lib/sha1/make 2016-07-27 12:58:24 +0900 (fc3b340) +++ /dev/null @@ -1,96 +0,0 @@ - -# Copyright (C) Igor Sysoev -# Copyright (C) Nginx, Inc. - - -case "$NGX_CC_NAME" in - - msvc) - ngx_makefile=makefile.msvc - ngx_opt="CPU_OPT=\"$CPU_OPT\" LIBC=$LIBC SHA1_ASM=$SHA1_ASM" - ngx_sha1="SHA1=\"$SHA1\"" - ;; - - owc) - ngx_makefile=makefile.owc - ngx_opt="CPU_OPT=\"$CPU_OPT\"" - ngx_sha1=`echo SHA1=\"$SHA1\" | sed -e "s/\//$ngx_regex_dirsep/g"` - ;; - - bcc) - ngx_makefile=makefile.bcc - ngx_opt="-DCPU_OPT=\"$CPU_OPT\" -DSHA1_ASM=$SHA1_ASM" - ngx_sha1=`echo \-DSHA1=\"$SHA1\" | sed -e "s/\//$ngx_regex_dirsep/g"` - ;; - -esac - - -done=NO - - -case "$NGX_PLATFORM" in - - win32) - cat << END >> $NGX_MAKEFILE - -`echo "$SHA1/sha1.lib: $NGX_MAKEFILE" | sed -e "s/\//$ngx_regex_dirsep/g"` - \$(MAKE) -f auto/lib/sha1/$ngx_makefile $ngx_opt $ngx_sha1 - -END - - done=YES - ;; - - SunOS:*:i86pc) - if [ $SHA1_ASM = YES ]; then - - cat << END >> $NGX_MAKEFILE - -$SHA1/libsha.a: $NGX_MAKEFILE - cd $SHA1 \\ - && \$(MAKE) CFLAGS="$SHA1_OPT -DSOL -DSHA1_ASM -DL_ENDIAN" \\ - CC="\$(CC)" CPP="\$(CPP)" \\ - SHA_ASM_OBJ=asm/sx86-sol.o clean libsha.a - -END - - done=YES - fi - ;; - - # FreeBSD: i386 - # Linux: i686 - - *:i386 | *:i686) - if [ $SHA1_ASM = YES ]; then - - cat << END >> $NGX_MAKEFILE - -$SHA1/libsha.a: $NGX_MAKEFILE - cd $SHA1 \\ - && \$(MAKE) CFLAGS="$SHA1_OPT -DELF -DSHA1_ASM -DL_ENDIAN" \\ - CC="\$(CC)" CPP="\$(CPP)" \\ - SHA_ASM_OBJ=asm/sx86-elf.o clean libsha.a - -END - - done=YES - fi - ;; - -esac - - -if [ $done = NO ]; then - - cat << END >> $NGX_MAKEFILE - -$SHA1/libsha.a: $NGX_MAKEFILE - cd $SHA1 \\ - && \$(MAKE) CFLAGS="$SHA1_OPT" \\ - CC="\$(CC)" SHA_ASM_OBJ= clean libsha.a - -END - -fi Deleted: vendor/nginx-1.11.1/auto/lib/sha1/makefile.bcc (+0 -22) 100644 =================================================================== --- vendor/nginx-1.11.1/auto/lib/sha1/makefile.bcc 2016-07-27 12:58:24 +0900 (b0685fa) +++ /dev/null @@ -1,22 +0,0 @@ - -# Copyright (C) Igor Sysoev -# Copyright (C) Nginx, Inc. - - -CFLAGS = -q -O2 -tWM $(CPU_OPT) -DL_ENDIAN - -!if "$(SHA1_ASM)" == "YES" - -sha1.lib: - cd $(SHA1) - bcc32 -c $(CFLAGS) -DSHA1_ASM sha1dgst.c - tlib sha1.lib +sha1dgst.obj +"asm\s-win32.obj" - -!else - -sha1.lib: - cd $(SHA1) - bcc32 -c $(CFLAGS) sha1dgst.c - tlib sha1.lib +sha1dgst.obj - -!endif Deleted: vendor/nginx-1.11.1/auto/lib/sha1/makefile.msvc (+0 -22) 100644 =================================================================== --- vendor/nginx-1.11.1/auto/lib/sha1/makefile.msvc 2016-07-27 12:58:24 +0900 (3cbd21b) +++ /dev/null @@ -1,22 +0,0 @@ - -# Copyright (C) Igor Sysoev -# Copyright (C) Nginx, Inc. - - -CFLAGS = -nologo -O2 -Ob1 -Oi -Gs $(LIBC) $(CPU_OPT) -D L_ENDIAN - -!IF "$(SHA1_ASM)" == "YES" - -sha1.lib: - cd $(SHA1) - cl -c $(CFLAGS) -D SHA1_ASM sha1dgst.c - link -lib -out:sha1.lib sha1dgst.obj asm/s-win32.obj - -!ELSE - -sha1.lib: - cd $(SHA1) - cl -c $(CFLAGS) sha1dgst.c - link -lib -out:sha1.lib sha1dgst.obj - -!ENDIF Deleted: vendor/nginx-1.11.1/auto/lib/sha1/makefile.owc (+0 -11) 100644 =================================================================== --- vendor/nginx-1.11.1/auto/lib/sha1/makefile.owc 2016-07-27 12:58:24 +0900 (fc095cc) +++ /dev/null @@ -1,11 +0,0 @@ - -# Copyright (C) Igor Sysoev -# Copyright (C) Nginx, Inc. - - -CFLAGS = -zq -bt=nt -bm -ot -op -oi -oe -s $(CPU_OPT) - -sha1.lib: - cd $(SHA1) - wcl386 -c $(CFLAGS) -dL_ENDIAN sha1dgst.c - wlib -n sha1.lib sha1dgst.obj Deleted: vendor/nginx-1.11.1/auto/lib/test (+0 -40) 100644 =================================================================== --- vendor/nginx-1.11.1/auto/lib/test 2016-07-27 12:58:24 +0900 (ba943a2) +++ /dev/null @@ -1,40 +0,0 @@ - -# Copyright (C) Igor Sysoev -# Copyright (C) Nginx, Inc. - - -echo $ngx_n "checking for $ngx_lib ...$ngx_c" - -cat << END >> $NGX_AUTOCONF_ERR - ----------------------------------------- -checking for $ngx_lib - -END - -ngx_found=no - -cat << END > $NGX_AUTOTEST.c - -$ngx_lib_incs - -int main() { - $ngx_lib_test; - return 0; -} - - -eval "$CC $cc_test_flags $ngx_lib_cflags \ - -o $NGX_AUTOTEST $NGX_AUTOTEST.c $ngx_libs \ - >> $NGX_ERR 2>&1" - -if [ -x $NGX_AUTOTEST ]; then - echo " found" - - ngx_found=yes - -else - echo " not found" -fi - -rm -rf $NGX_AUTOTEST* Deleted: vendor/nginx-1.11.1/src/core/ngx_sha1.h (+0 -31) 100644 =================================================================== --- vendor/nginx-1.11.1/src/core/ngx_sha1.h 2016-07-27 12:58:24 +0900 (81c909e) +++ /dev/null @@ -1,31 +0,0 @@ - -/* - * Copyright (C) Igor Sysoev - * Copyright (C) Nginx, Inc. - */ - - -#ifndef _NGX_SHA1_H_INCLUDED_ -#define _NGX_SHA1_H_INCLUDED_ - - -#include <ngx_config.h> -#include <ngx_core.h> - - -#if (NGX_HAVE_OPENSSL_SHA1_H) -#include <openssl/sha.h> -#else -#include <sha.h> -#endif - - -typedef SHA_CTX ngx_sha1_t; - - -#define ngx_sha1_init SHA1_Init -#define ngx_sha1_update SHA1_Update -#define ngx_sha1_final SHA1_Final - - -#endif /* _NGX_SHA1_H_INCLUDED_ */ Deleted: vendor/nginx-1.11.1/src/stream/ngx_stream.h (+0 -201) 100644 =================================================================== --- vendor/nginx-1.11.1/src/stream/ngx_stream.h 2016-07-27 12:58:24 +0900 (1c35173) +++ /dev/null @@ -1,201 +0,0 @@ - -/* - * Copyright (C) Roman Arutyunyan - * Copyright (C) Nginx, Inc. - */ - - -#ifndef _NGX_STREAM_H_INCLUDED_ -#define _NGX_STREAM_H_INCLUDED_ - - -#include <ngx_config.h> -#include <ngx_core.h> - -#if (NGX_STREAM_SSL) -#include <ngx_stream_ssl_module.h> -#endif - - -typedef struct ngx_stream_session_s ngx_stream_session_t; - - -#include <ngx_stream_upstream.h> -#include <ngx_stream_upstream_round_robin.h> - - -typedef struct { - void **main_conf; - void **srv_conf; -} ngx_stream_conf_ctx_t; - - -typedef struct { - ngx_sockaddr_t sockaddr; - socklen_t socklen; - - /* server ctx */ - ngx_stream_conf_ctx_t *ctx; - - unsigned bind:1; - unsigned wildcard:1; -#if (NGX_STREAM_SSL) - unsigned ssl:1; -#endif -#if (NGX_HAVE_INET6 && defined IPV6_V6ONLY) - unsigned ipv6only:1; -#endif -#if (NGX_HAVE_REUSEPORT) - unsigned reuseport:1; -#endif - unsigned so_keepalive:2; -#if (NGX_HAVE_KEEPALIVE_TUNABLE) - int tcp_keepidle; - int tcp_keepintvl; - int tcp_keepcnt; -#endif - int backlog; - int type; -} ngx_stream_listen_t; - - -typedef struct { - ngx_stream_conf_ctx_t *ctx; - ngx_str_t addr_text; -#if (NGX_STREAM_SSL) - ngx_uint_t ssl; /* unsigned ssl:1; */ -#endif -} ngx_stream_addr_conf_t; - -typedef struct { - in_addr_t addr; - ngx_stream_addr_conf_t conf; -} ngx_stream_in_addr_t; - - -#if (NGX_HAVE_INET6) - -typedef struct { - struct in6_addr addr6; - ngx_stream_addr_conf_t conf; -} ngx_stream_in6_addr_t; - -#endif - - -typedef struct { - /* ngx_stream_in_addr_t or ngx_stream_in6_addr_t */ - void *addrs; - ngx_uint_t naddrs; -} ngx_stream_port_t; - - -typedef struct { - int family; - int type; - in_port_t port; - ngx_array_t addrs; /* array of ngx_stream_conf_addr_t */ -} ngx_stream_conf_port_t; - - -typedef struct { - ngx_stream_listen_t opt; -} ngx_stream_conf_addr_t; - - -typedef ngx_int_t (*ngx_stream_access_pt)(ngx_stream_session_t *s); - - -typedef struct { - ngx_array_t servers; /* ngx_stream_core_srv_conf_t */ - ngx_array_t listen; /* ngx_stream_listen_t */ - ngx_stream_access_pt limit_conn_handler; - ngx_stream_access_pt access_handler; -} ngx_stream_core_main_conf_t; - - -typedef void (*ngx_stream_handler_pt)(ngx_stream_session_t *s); - - -typedef struct { - ngx_stream_handler_pt handler; - ngx_stream_conf_ctx_t *ctx; - u_char *file_name; - ngx_int_t line; - ngx_log_t *error_log; - ngx_flag_t tcp_nodelay; -} ngx_stream_core_srv_conf_t; - - -struct ngx_stream_session_s { - uint32_t signature; /* "STRM" */ - - ngx_connection_t *connection; - - off_t received; - - ngx_log_handler_pt log_handler; - - void **ctx; - void **main_conf; - void **srv_conf; - - ngx_stream_upstream_t *upstream; -}; - - -typedef struct { - ngx_int_t (*postconfiguration)(ngx_conf_t *cf); - - void *(*create_main_conf)(ngx_conf_t *cf); - char *(*init_main_conf)(ngx_conf_t *cf, void *conf); - - void *(*create_srv_conf)(ngx_conf_t *cf); - char *(*merge_srv_conf)(ngx_conf_t *cf, void *prev, - void *conf); -} ngx_stream_module_t; - - -#define NGX_STREAM_MODULE 0x4d525453 /* "STRM" */ - -#define NGX_STREAM_MAIN_CONF 0x02000000 -#define NGX_STREAM_SRV_CONF 0x04000000 -#define NGX_STREAM_UPS_CONF 0x08000000 - - -#define NGX_STREAM_MAIN_CONF_OFFSET offsetof(ngx_stream_conf_ctx_t, main_conf) -#define NGX_STREAM_SRV_CONF_OFFSET offsetof(ngx_stream_conf_ctx_t, srv_conf) - - -#define ngx_stream_get_module_ctx(s, module) (s)->ctx[module.ctx_index] -#define ngx_stream_set_ctx(s, c, module) s->ctx[module.ctx_index] = c; -#define ngx_stream_delete_ctx(s, module) s->ctx[module.ctx_index] = NULL; - - -#define ngx_stream_get_module_main_conf(s, module) \ - (s)->main_conf[module.ctx_index] -#define ngx_stream_get_module_srv_conf(s, module) \ - (s)->srv_conf[module.ctx_index] - -#define ngx_stream_conf_get_module_main_conf(cf, module) \ - ((ngx_stream_conf_ctx_t *) cf->ctx)->main_conf[module.ctx_index] -#define ngx_stream_conf_get_module_srv_conf(cf, module) \ - ((ngx_stream_conf_ctx_t *) cf->ctx)->srv_conf[module.ctx_index] - -#define ngx_stream_cycle_get_module_main_conf(cycle, module) \ - (cycle->conf_ctx[ngx_stream_module.index] ? \ - ((ngx_stream_conf_ctx_t *) cycle->conf_ctx[ngx_stream_module.index]) \ - ->main_conf[module.ctx_index]: \ - NULL) - - -void ngx_stream_init_connection(ngx_connection_t *c); -void ngx_stream_close_connection(ngx_connection_t *c); - - -extern ngx_module_t ngx_stream_module; -extern ngx_uint_t ngx_stream_max_module; -extern ngx_module_t ngx_stream_core_module; - - -#endif /* _NGX_STREAM_H_INCLUDED_ */ Renamed: vendor/nginx-1.11.3/auto/cc/acc (+0 -1) 89% =================================================================== --- vendor/nginx-1.11.1/auto/cc/acc 2016-07-27 12:58:24 +0900 (6baee67) +++ vendor/nginx-1.11.3/auto/cc/acc 2016-07-27 13:06:13 +0900 (64fa671) @@ -12,4 +12,3 @@ CC_TEST_FLAGS="-Ae" PCRE_OPT="$PCRE_OPT -Ae" ZLIB_OPT="$ZLIB_OPT -Ae" -MD5_OPT="$MD5_OPT -Ae" Renamed: vendor/nginx-1.11.3/auto/cc/bcc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/cc/ccc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/cc/clang (+0 -6) 94% =================================================================== --- vendor/nginx-1.11.1/auto/cc/clang 2016-07-27 12:58:24 +0900 (25707b4) +++ vendor/nginx-1.11.3/auto/cc/clang 2016-07-27 13:06:13 +0900 (19bdaaa) @@ -66,12 +66,6 @@ else PCRE_OPT="$PCRE_OPT -pipe" fi -if [ ".$MD5_OPT" = "." ]; then - MD5_OPT="-O2 -pipe $CPU_OPT" -else - MD5_OPT="$MD5_OPT -pipe" -fi - if [ ".$ZLIB_OPT" = "." ]; then ZLIB_OPT="-O2 -pipe $CPU_OPT" else Renamed: vendor/nginx-1.11.3/auto/cc/conf (+1 -1) 98% =================================================================== --- vendor/nginx-1.11.1/auto/cc/conf 2016-07-27 12:58:24 +0900 (f2c25ed) +++ vendor/nginx-1.11.3/auto/cc/conf 2016-07-27 13:06:13 +0900 (b3b9f92) @@ -231,7 +231,7 @@ if [ "$NGX_PLATFORM" != win32 ]; then ngx_feature_incs= ngx_feature_path= ngx_feature_libs= - ngx_feature_test="__builtin_bswap64(0)" + ngx_feature_test="if (__builtin_bswap64(0)) return 1" . auto/feature Renamed: vendor/nginx-1.11.3/auto/cc/gcc (+6 -13) 96% =================================================================== --- vendor/nginx-1.11.1/auto/cc/gcc 2016-07-27 12:58:24 +0900 (c9101fe) +++ vendor/nginx-1.11.3/auto/cc/gcc 2016-07-27 13:06:13 +0900 (a5c5c18) @@ -128,12 +128,6 @@ else PCRE_OPT="$PCRE_OPT $PIPE" fi -if [ ".$MD5_OPT" = "." ]; then - MD5_OPT="-O2 -fomit-frame-pointer $PIPE $CPU_OPT" -else - MD5_OPT="$MD5_OPT $PIPE" -fi - if [ ".$ZLIB_OPT" = "." ]; then ZLIB_OPT="-O2 -fomit-frame-pointer $PIPE $CPU_OPT" else @@ -151,9 +145,13 @@ CFLAGS="$CFLAGS -Wall -Wpointer-arith" #CFLAGS="$CFLAGS -Winline" #CFLAGS="$CFLAGS -Wmissing-prototypes" - case "$NGX_GCC_VER" in - [3-5].*) + 2.*) + # we have a lot of the unused function arguments + CFLAGS="$CFLAGS -Wno-unused" + ;; + + *) # we have a lot of the unused function arguments CFLAGS="$CFLAGS -Wno-unused-parameter" # 4.2.1 shows the warning in wrong places @@ -164,11 +162,6 @@ case "$NGX_GCC_VER" in CFLAGS="$CFLAGS -Wno-deprecated-declarations" fi ;; - - *) - # we have a lot of the unused function arguments - CFLAGS="$CFLAGS -Wno-unused" - ;; esac Renamed: vendor/nginx-1.11.3/auto/cc/icc (+0 -4) 97% =================================================================== --- vendor/nginx-1.11.1/auto/cc/icc 2016-07-27 12:58:24 +0900 (1c0df1a) +++ vendor/nginx-1.11.3/auto/cc/icc 2016-07-27 13:06:13 +0900 (c47f6e4) @@ -43,10 +43,6 @@ if [ ".$PCRE_OPT" = "." ]; then PCRE_OPT="-O $CPU_OPT" fi -if [ ".$MD5_OPT" = "." ]; then - MD5_OPT="-O $CPU_OPT" -fi - if [ ".$ZLIB_OPT" = "." ]; then ZLIB_OPT="-O $CPU_OPT" fi Renamed: vendor/nginx-1.11.3/auto/cc/msvc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/cc/name (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/cc/owc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/cc/sunc (+4 -5) 96% =================================================================== --- vendor/nginx-1.11.1/auto/cc/sunc 2016-07-27 12:58:24 +0900 (8360c49) +++ vendor/nginx-1.11.3/auto/cc/sunc 2016-07-27 13:06:13 +0900 (806ccc4) @@ -20,7 +20,10 @@ have=NGX_COMPILER value="\"Sun C $NGX_SUNC_VER\"" . auto/define cat << END > $NGX_AUTOTEST.c -int main() { printf("%d", __SUNPRO_C); } +int main(void) { + printf("%d", __SUNPRO_C); + return 0; +} END @@ -145,10 +148,6 @@ if [ ".$PCRE_OPT" = "." ]; then PCRE_OPT="$ngx_fast $IPO $CPU_OPT" fi -if [ ".$MD5_OPT" = "." ]; then - MD5_OPT="$ngx_fast $IPO $CPU_OPT" -fi - if [ ".$ZLIB_OPT" = "." ]; then ZLIB_OPT="$ngx_fast $IPO $CPU_OPT" fi Renamed: vendor/nginx-1.11.3/auto/configure (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/define (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/endianness (+1 -1) 98% =================================================================== --- vendor/nginx-1.11.1/auto/endianness 2016-07-27 12:58:24 +0900 (70b0a10) +++ vendor/nginx-1.11.3/auto/endianness 2016-07-27 13:06:13 +0900 (1b552b6) @@ -15,7 +15,7 @@ END cat << END > $NGX_AUTOTEST.c -int main() { +int main(void) { int i = 0x11223344; char *p; Renamed: vendor/nginx-1.11.3/auto/feature (+1 -1) 99% =================================================================== --- vendor/nginx-1.11.1/auto/feature 2016-07-27 12:58:24 +0900 (1145f28) +++ vendor/nginx-1.11.3/auto/feature 2016-07-27 13:06:13 +0900 (3561f59) @@ -31,7 +31,7 @@ cat << END > $NGX_AUTOTEST.c $NGX_INCLUDE_UNISTD_H $ngx_feature_incs -int main() { +int main(void) { $ngx_feature_test; return 0; } Renamed: vendor/nginx-1.11.3/auto/have (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/have_headers (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/headers (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/include (+1 -4) 93% =================================================================== --- vendor/nginx-1.11.1/auto/include 2016-07-27 12:58:24 +0900 (e34dabd) +++ vendor/nginx-1.11.3/auto/include 2016-07-27 13:06:13 +0900 (c1bd364) @@ -20,7 +20,7 @@ cat << END > $NGX_AUTOTEST.c $NGX_INCLUDE_SYS_PARAM_H #include <$ngx_include> -int main() { +int main(void) { return 0; } @@ -45,9 +45,6 @@ if [ -x $NGX_AUTOTEST ]; then eval "NGX_INCLUDE_$ngx_name='#include <$ngx_include>'" - #STUB - eval "NGX_$ngx_name='#include <$ngx_include>'" - else echo " not found" Renamed: vendor/nginx-1.11.3/auto/init (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/install (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/lib/conf (+0 -29) 63% =================================================================== --- vendor/nginx-1.11.1/auto/lib/conf 2016-07-27 12:58:24 +0900 (a6242e7) +++ vendor/nginx-1.11.3/auto/lib/conf 2016-07-27 13:06:13 +0900 (0b8545a) @@ -25,35 +25,6 @@ if [ $USE_OPENSSL = YES ]; then . auto/lib/openssl/conf fi -if [ $USE_MD5 = YES ]; then - - if [ $USE_OPENSSL = YES ]; then - have=NGX_HAVE_OPENSSL_MD5_H . auto/have - have=NGX_OPENSSL_MD5 . auto/have - have=NGX_HAVE_MD5 . auto/have - MD5=YES - MD5_LIB=OpenSSL - - else - . auto/lib/md5/conf - fi - -fi - -if [ $USE_SHA1 = YES ]; then - - if [ $USE_OPENSSL = YES ]; then - have=NGX_HAVE_OPENSSL_SHA1_H . auto/have - have=NGX_HAVE_SHA1 . auto/have - SHA1=YES - SHA1_LIB=OpenSSL - - else - . auto/lib/sha1/conf - fi - -fi - if [ $USE_ZLIB = YES ]; then . auto/lib/zlib/conf fi Renamed: vendor/nginx-1.11.3/auto/lib/geoip/conf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/lib/google-perftools/conf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/lib/libatomic/conf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/lib/libatomic/make (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/lib/libgd/conf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/lib/libxslt/conf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/lib/make (+0 -8) 73% =================================================================== --- vendor/nginx-1.11.1/auto/lib/make 2016-07-27 12:58:24 +0900 (6298b94) +++ vendor/nginx-1.11.3/auto/lib/make 2016-07-27 13:06:13 +0900 (b64e329) @@ -7,14 +7,6 @@ if [ $PCRE != NONE -a $PCRE != NO -a $PCRE != YES ]; then . auto/lib/pcre/make fi -if [ $MD5 != NONE -a $MD5 != NO -a $MD5 != YES ]; then - . auto/lib/md5/make -fi - -if [ $SHA1 != NONE -a $SHA1 != NO -a $SHA1 != YES ]; then - . auto/lib/sha1/make -fi - if [ $OPENSSL != NONE -a $OPENSSL != NO -a $OPENSSL != YES ]; then . auto/lib/openssl/make fi Renamed: vendor/nginx-1.11.3/auto/lib/openssl/conf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/lib/openssl/make (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/lib/openssl/makefile.bcc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/lib/openssl/makefile.msvc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/lib/pcre/conf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/lib/pcre/make (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/lib/pcre/makefile.bcc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/lib/pcre/makefile.msvc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/lib/pcre/makefile.owc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/lib/perl/conf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/lib/perl/make (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/lib/zlib/conf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/lib/zlib/make (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/lib/zlib/makefile.bcc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/lib/zlib/makefile.msvc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/lib/zlib/makefile.owc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/make (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/module (+15 -3) 87% =================================================================== --- vendor/nginx-1.11.1/auto/module 2016-07-27 12:58:24 +0900 (16a816f) +++ vendor/nginx-1.11.3/auto/module 2016-07-27 13:06:13 +0900 (3b00a07) @@ -48,10 +48,14 @@ if [ "$ngx_module_link" = DYNAMIC ]; then fi ;; - PCRE | OPENSSL | MD5 | SHA1 | ZLIB) + PCRE | OPENSSL | ZLIB) eval USE_${lib}=YES ;; + MD5 | SHA1) + # obsolete + ;; + *) libs="$libs $lib" ;; @@ -79,10 +83,14 @@ elif [ "$ngx_module_link" = YES ]; then do case $lib in - PCRE | OPENSSL | MD5 | SHA1 | ZLIB | LIBXSLT | LIBGD | PERL | GEOIP) + PCRE | OPENSSL | ZLIB | LIBXSLT | LIBGD | PERL | GEOIP) eval USE_${lib}=YES ;; + MD5 | SHA1) + # obsolete + ;; + *) CORE_LIBS="$CORE_LIBS $lib" ;; @@ -109,10 +117,14 @@ elif [ "$ngx_module_link" = ADDON ]; then do case $lib in - PCRE | OPENSSL | MD5 | SHA1 | ZLIB | LIBXSLT | LIBGD | PERL | GEOIP) + PCRE | OPENSSL | ZLIB | LIBXSLT | LIBGD | PERL | GEOIP) eval USE_${lib}=YES ;; + MD5 | SHA1) + # obsolete + ;; + *) CORE_LIBS="$CORE_LIBS $lib" ;; Renamed: vendor/nginx-1.11.3/auto/modules (+67 -8) 93% =================================================================== --- vendor/nginx-1.11.1/auto/modules 2016-07-27 12:58:24 +0900 (22ff6d9) +++ vendor/nginx-1.11.3/auto/modules 2016-07-27 13:06:13 +0900 (614037c) @@ -43,6 +43,7 @@ fi if [ $NGX_TEST_BUILD_EPOLL = YES ]; then have=NGX_HAVE_EPOLL . auto/have have=NGX_HAVE_EPOLLRDHUP . auto/have + have=NGX_HAVE_EPOLLEXCLUSIVE . auto/have have=NGX_HAVE_EVENTFD . auto/have have=NGX_TEST_BUILD_EPOLL . auto/have EVENT_MODULES="$EVENT_MODULES $EPOLL_MODULE" @@ -101,7 +102,6 @@ fi if [ $HTTP_CACHE = YES ]; then - USE_MD5=YES have=NGX_HTTP_CACHE . auto/have HTTP_SRCS="$HTTP_SRCS $HTTP_FILE_CACHE_SRCS" fi @@ -522,8 +522,6 @@ if [ $HTTP_AUTH_REQUEST = YES ]; then fi if [ $HTTP_AUTH_BASIC = YES ]; then - USE_MD5=YES - USE_SHA1=YES have=NGX_CRYPT . auto/have ngx_module_name=ngx_http_auth_basic_module @@ -682,7 +680,6 @@ fi if [ $HTTP_PROXY = YES ]; then have=NGX_HTTP_X_FORWARDED_FOR . auto/have - #USE_MD5=YES ngx_module_name=ngx_http_proxy_module ngx_module_incs= @@ -772,8 +769,6 @@ if [ $HTTP_BROWSER = YES ]; then fi if [ $HTTP_SECURE_LINK = YES ]; then - USE_MD5=YES - ngx_module_name=ngx_http_secure_link_module ngx_module_incs= ngx_module_deps= @@ -971,8 +966,6 @@ if [ $STREAM != NO ]; then STREAM_INCS= ngx_module_type=STREAM - ngx_module_libs= - ngx_module_link=YES ngx_module_order= @@ -982,9 +975,13 @@ if [ $STREAM != NO ]; then ngx_stream_upstream_module" ngx_module_incs="src/stream" ngx_module_deps="src/stream/ngx_stream.h \ + src/stream/ngx_stream_variables.h \ + src/stream/ngx_stream_script.h \ src/stream/ngx_stream_upstream.h \ src/stream/ngx_stream_upstream_round_robin.h" ngx_module_srcs="src/stream/ngx_stream.c \ + src/stream/ngx_stream_variables.c \ + src/stream/ngx_stream_script.c \ src/stream/ngx_stream_handler.c \ src/stream/ngx_stream_core_module.c \ src/stream/ngx_stream_proxy_module.c \ @@ -1002,6 +999,8 @@ if [ $STREAM != NO ]; then ngx_module_name=ngx_stream_ssl_module ngx_module_deps=src/stream/ngx_stream_ssl_module.h ngx_module_srcs=src/stream/ngx_stream_ssl_module.c + ngx_module_libs= + ngx_module_link=$STREAM_SSL . auto/module fi @@ -1010,6 +1009,8 @@ if [ $STREAM != NO ]; then ngx_module_name=ngx_stream_limit_conn_module ngx_module_deps= ngx_module_srcs=src/stream/ngx_stream_limit_conn_module.c + ngx_module_libs= + ngx_module_link=$STREAM_LIMIT_CONN . auto/module fi @@ -1018,6 +1019,58 @@ if [ $STREAM != NO ]; then ngx_module_name=ngx_stream_access_module ngx_module_deps= ngx_module_srcs=src/stream/ngx_stream_access_module.c + ngx_module_libs= + ngx_module_link=$STREAM_ACCESS + + . auto/module + fi + + if [ $STREAM_GEO = YES ]; then + ngx_module_name=ngx_stream_geo_module + ngx_module_deps= + ngx_module_srcs=src/stream/ngx_stream_geo_module.c + ngx_module_libs= + ngx_module_link=$STREAM_GEO + + . auto/module + fi + + if [ $STREAM_GEOIP != NO ]; then + ngx_module_name=ngx_stream_geoip_module + ngx_module_deps= + ngx_module_srcs=src/stream/ngx_stream_geoip_module.c + ngx_module_libs=GEOIP + ngx_module_link=$STREAM_GEOIP + + . auto/module + fi + + if [ $STREAM_MAP = YES ]; then + ngx_module_name=ngx_stream_map_module + ngx_module_deps= + ngx_module_srcs=src/stream/ngx_stream_map_module.c + ngx_module_libs= + ngx_module_link=$STREAM_MAP + + . auto/module + fi + + if [ $STREAM_SPLIT_CLIENTS = YES ]; then + ngx_module_name=ngx_stream_split_clients_module + ngx_module_deps= + ngx_module_srcs=src/stream/ngx_stream_split_clients_module.c + ngx_module_libs= + ngx_module_link=$STREAM_SPLIT_CLIENTS + + . auto/module + fi + + if [ $STREAM_RETURN = YES ]; then + ngx_module_name=ngx_stream_return_module + ngx_module_deps= + ngx_module_srcs=src/stream/ngx_stream_return_module.c + ngx_module_libs= + ngx_module_link=$STREAM_RETURN . auto/module fi @@ -1026,6 +1079,8 @@ if [ $STREAM != NO ]; then ngx_module_name=ngx_stream_upstream_hash_module ngx_module_deps= ngx_module_srcs=src/stream/ngx_stream_upstream_hash_module.c + ngx_module_libs= + ngx_module_link=$STREAM_UPSTREAM_HASH . auto/module fi @@ -1034,6 +1089,8 @@ if [ $STREAM != NO ]; then ngx_module_name=ngx_stream_upstream_least_conn_module ngx_module_deps= ngx_module_srcs=src/stream/ngx_stream_upstream_least_conn_module.c + ngx_module_libs= + ngx_module_link=$STREAM_UPSTREAM_LEAST_CONN . auto/module fi @@ -1044,6 +1101,8 @@ if [ $STREAM != NO ]; then ngx_module_name=ngx_stream_upstream_zone_module ngx_module_deps= ngx_module_srcs=src/stream/ngx_stream_upstream_zone_module.c + ngx_module_libs= + ngx_module_link=$STREAM_UPSTREAM_ZONE . auto/module fi Renamed: vendor/nginx-1.11.3/auto/nohave (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/options (+44 -24) 92% =================================================================== --- vendor/nginx-1.11.1/auto/options 2016-07-27 12:58:24 +0900 (ac8beb1) +++ vendor/nginx-1.11.3/auto/options 2016-07-27 13:06:13 +0900 (a8fce30) @@ -117,6 +117,11 @@ STREAM=NO STREAM_SSL=NO STREAM_LIMIT_CONN=YES STREAM_ACCESS=YES +STREAM_GEO=YES +STREAM_GEOIP=NO +STREAM_MAP=YES +STREAM_SPLIT_CLIENTS=YES +STREAM_RETURN=YES STREAM_UPSTREAM_HASH=YES STREAM_UPSTREAM_LEAST_CONN=YES STREAM_UPSTREAM_ZONE=YES @@ -136,16 +141,6 @@ PCRE_JIT=NO USE_OPENSSL=NO OPENSSL=NONE -USE_MD5=NO -MD5=NONE -MD5_OPT= -MD5_ASM=NO - -USE_SHA1=NO -SHA1=NONE -SHA1_OPT= -SHA1_ASM=NO - USE_ZLIB=NO ZLIB=NONE ZLIB_OPT= @@ -301,9 +296,17 @@ use the \"--with-mail_ssl_module\" option instead" --with-stream) STREAM=YES ;; --with-stream=dynamic) STREAM=DYNAMIC ;; --with-stream_ssl_module) STREAM_SSL=YES ;; + --with-stream_geoip_module) STREAM_GEOIP=YES ;; + --with-stream_geoip_module=dynamic) + STREAM_GEOIP=DYNAMIC ;; --without-stream_limit_conn_module) STREAM_LIMIT_CONN=NO ;; --without-stream_access_module) STREAM_ACCESS=NO ;; + --without-stream_geo_module) STREAM_GEO=NO ;; + --without-stream_map_module) STREAM_MAP=NO ;; + --without-stream_split_clients_module) + STREAM_SPLIT_CLIENTS=NO ;; + --without-stream_return_module) STREAM_RETURN=NO ;; --without-stream_upstream_hash_module) STREAM_UPSTREAM_HASH=NO ;; --without-stream_upstream_least_conn_module) @@ -333,13 +336,31 @@ use the \"--with-mail_ssl_module\" option instead" --with-openssl=*) OPENSSL="$value" ;; --with-openssl-opt=*) OPENSSL_OPT="$value" ;; - --with-md5=*) MD5="$value" ;; - --with-md5-opt=*) MD5_OPT="$value" ;; - --with-md5-asm) MD5_ASM=YES ;; + --with-md5=*) + NGX_POST_CONF_MSG="$NGX_POST_CONF_MSG +$0: warning: the \"--with-md5\" option is deprecated" + ;; + --with-md5-opt=*) + NGX_POST_CONF_MSG="$NGX_POST_CONF_MSG +$0: warning: the \"--with-md5-opt\" option is deprecated" + ;; + --with-md5-asm) + NGX_POST_CONF_MSG="$NGX_POST_CONF_MSG +$0: warning: the \"--with-md5-asm\" option is deprecated" + ;; - --with-sha1=*) SHA1="$value" ;; - --with-sha1-opt=*) SHA1_OPT="$value" ;; - --with-sha1-asm) SHA1_ASM=YES ;; + --with-sha1=*) + NGX_POST_CONF_MSG="$NGX_POST_CONF_MSG +$0: warning: the \"--with-sha1\" option is deprecated" + ;; + --with-sha1-opt=*) + NGX_POST_CONF_MSG="$NGX_POST_CONF_MSG +$0: warning: the \"--with-sha1-opt\" option is deprecated" + ;; + --with-sha1-asm) + NGX_POST_CONF_MSG="$NGX_POST_CONF_MSG +$0: warning: the \"--with-sha1-asm\" option is deprecated" + ;; --with-zlib=*) ZLIB="$value" ;; --with-zlib-opt=*) ZLIB_OPT="$value" ;; @@ -482,8 +503,15 @@ cat << END --with-stream enable TCP/UDP proxy module --with-stream=dynamic enable dynamic TCP/UDP proxy module --with-stream_ssl_module enable ngx_stream_ssl_module + --with-stream_geoip_module enable ngx_stream_geoip_module + --with-stream_geoip_module=dynamic enable dynamic ngx_stream_geoip_module --without-stream_limit_conn_module disable ngx_stream_limit_conn_module --without-stream_access_module disable ngx_stream_access_module + --without-stream_geo_module disable ngx_stream_geo_module + --without-stream_map_module disable ngx_stream_map_module + --without-stream_split_clients_module + disable ngx_stream_split_clients_module + --without-stream_return_module disable ngx_stream_return_module --without-stream_upstream_hash_module disable ngx_stream_upstream_hash_module --without-stream_upstream_least_conn_module @@ -511,14 +539,6 @@ cat << END --with-pcre-opt=OPTIONS set additional build options for PCRE --with-pcre-jit build PCRE with JIT compilation support - --with-md5=DIR set path to md5 library sources - --with-md5-opt=OPTIONS set additional build options for md5 - --with-md5-asm use md5 assembler sources - - --with-sha1=DIR set path to sha1 library sources - --with-sha1-opt=OPTIONS set additional build options for sha1 - --with-sha1-asm use sha1 assembler sources - --with-zlib=DIR set path to zlib library sources --with-zlib-opt=OPTIONS set additional build options for zlib --with-zlib-asm=CPU use zlib assembler sources optimized Renamed: vendor/nginx-1.11.3/auto/os/conf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/os/darwin (+2 -2) 96% =================================================================== --- vendor/nginx-1.11.1/auto/os/darwin 2016-07-27 12:58:24 +0900 (9b31b1f) +++ vendor/nginx-1.11.3/auto/os/darwin 2016-07-27 13:06:13 +0900 (b4b3ad3) @@ -113,6 +113,6 @@ ngx_feature_run=no ngx_feature_incs="#include <libkern/OSAtomic.h>" ngx_feature_path= ngx_feature_libs= -ngx_feature_test="int32_t lock, n; - n = OSAtomicCompareAndSwap32Barrier(0, 1, &lock)" +ngx_feature_test="int32_t lock = 0; + if (!OSAtomicCompareAndSwap32Barrier(0, 1, &lock)) return 1" . auto/feature Renamed: vendor/nginx-1.11.3/auto/os/freebsd (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/os/linux (+17 -0) 89% =================================================================== --- vendor/nginx-1.11.1/auto/os/linux 2016-07-27 12:58:24 +0900 (c932267) +++ vendor/nginx-1.11.3/auto/os/linux 2016-07-27 13:06:13 +0900 (fae8842) @@ -44,6 +44,7 @@ ngx_feature_test="int efd = 0; struct epoll_event ee; ee.events = EPOLLIN|EPOLLOUT|EPOLLET; ee.data.ptr = NULL; + (void) ee; efd = epoll_create(100); if (efd == -1) return 1;" . auto/feature @@ -69,6 +70,22 @@ if [ $ngx_found = yes ]; then ee.data.ptr = NULL; epoll_ctl(efd, EPOLL_CTL_ADD, fd, &ee)" . auto/feature + + + # EPOLLEXCLUSIVE appeared in Linux 4.5, glibc 2.24 + + ngx_feature="EPOLLEXCLUSIVE" + ngx_feature_name="NGX_HAVE_EPOLLEXCLUSIVE" + ngx_feature_run=no + ngx_feature_incs="#include <sys/epoll.h>" + ngx_feature_path= + ngx_feature_libs= + ngx_feature_test="int efd = 0, fd = 0; + struct epoll_event ee; + ee.events = EPOLLIN|EPOLLEXCLUSIVE; + ee.data.ptr = NULL; + epoll_ctl(efd, EPOLL_CTL_ADD, fd, &ee)" + . auto/feature fi Renamed: vendor/nginx-1.11.3/auto/os/solaris (+1 -1) 97% =================================================================== --- vendor/nginx-1.11.1/auto/os/solaris 2016-07-27 12:58:24 +0900 (d39df0b) +++ vendor/nginx-1.11.3/auto/os/solaris 2016-07-27 13:06:13 +0900 (1dcfe84) @@ -52,7 +52,7 @@ ngx_feature_run=no ngx_feature_incs="#include <port.h>" ngx_feature_path= ngx_feature_libs= -ngx_feature_test="int n = port_create()" +ngx_feature_test="(void) port_create()" . auto/feature if [ $ngx_found = yes ]; then Renamed: vendor/nginx-1.11.3/auto/os/win32 (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/sources (+1 -0) 99% =================================================================== --- vendor/nginx-1.11.1/auto/sources 2016-07-27 12:58:24 +0900 (27849e6) +++ vendor/nginx-1.11.3/auto/sources 2016-07-27 13:06:13 +0900 (216e900) @@ -61,6 +61,7 @@ CORE_SRCS="src/core/nginx.c \ src/core/ngx_crc32.c \ src/core/ngx_murmurhash.c \ src/core/ngx_md5.c \ + src/core/ngx_sha1.c \ src/core/ngx_rbtree.c \ src/core/ngx_radix_tree.c \ src/core/ngx_slab.c \ Renamed: vendor/nginx-1.11.3/auto/stubs (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/summary (+0 -14) 81% =================================================================== --- vendor/nginx-1.11.1/auto/summary 2016-07-27 12:58:24 +0900 (dc8fe4f) +++ vendor/nginx-1.11.3/auto/summary 2016-07-27 13:06:13 +0900 (9aa776e) @@ -28,20 +28,6 @@ case $OPENSSL in *) echo " + using OpenSSL library: $OPENSSL" ;; esac -case $MD5 in - YES) echo " + md5: using $MD5_LIB library" ;; - NONE) echo " + md5 library is not used" ;; - NO) echo " + using builtin md5 code" ;; - *) echo " + using md5 library: $MD5" ;; -esac - -case $SHA1 in - YES) echo " + sha1: using $SHA1_LIB library" ;; - NONE) echo " + sha1 library is not used" ;; - NO) echo " + sha1 library is not found" ;; - *) echo " + using sha1 library: $SHA1" ;; -esac - case $ZLIB in YES) echo " + using system zlib library" ;; NONE) echo " + zlib library is not used" ;; Renamed: vendor/nginx-1.11.3/auto/threads (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/types/sizeof (+1 -1) 98% =================================================================== --- vendor/nginx-1.11.1/auto/types/sizeof 2016-07-27 12:58:24 +0900 (b5b71bb) +++ vendor/nginx-1.11.3/auto/types/sizeof 2016-07-27 13:06:13 +0900 (480d8cf) @@ -25,7 +25,7 @@ $NGX_INCLUDE_UNISTD_H $NGX_INCLUDE_INTTYPES_H $NGX_INCLUDE_AUTO_CONFIG_H -int main() { +int main(void) { printf("%d", (int) sizeof($ngx_type)); return 0; } Renamed: vendor/nginx-1.11.3/auto/types/typedef (+1 -1) 98% =================================================================== --- vendor/nginx-1.11.1/auto/types/typedef 2016-07-27 12:58:24 +0900 (b55237e) +++ vendor/nginx-1.11.3/auto/types/typedef 2016-07-27 13:06:13 +0900 (d54c289) @@ -27,7 +27,7 @@ do #include <netinet/in.h> $NGX_INCLUDE_INTTYPES_H -int main() { +int main(void) { $ngx_try i = 0; return (int) i; } Renamed: vendor/nginx-1.11.3/auto/types/uintptr_t (+2 -2) 95% =================================================================== --- vendor/nginx-1.11.1/auto/types/uintptr_t 2016-07-27 12:58:24 +0900 (2b7212e) +++ vendor/nginx-1.11.3/auto/types/uintptr_t 2016-07-27 13:06:13 +0900 (a33d6d0) @@ -17,9 +17,9 @@ found=no cat << END > $NGX_AUTOTEST.c #include <sys/types.h> -$NGX_INTTYPES_H +$NGX_INCLUDE_INTTYPES_H -int main() { +int main(void) { uintptr_t i = 0; return (int) i; } Renamed: vendor/nginx-1.11.3/auto/types/value (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/auto/unix (+29 -12) 96% =================================================================== --- vendor/nginx-1.11.1/auto/unix 2016-07-27 12:58:24 +0900 (e6396ef) +++ vendor/nginx-1.11.3/auto/unix 2016-07-27 13:06:13 +0900 (dbc0f0e) @@ -75,7 +75,7 @@ if test -z "$NGX_KQUEUE_CHECKED"; then ngx_feature_incs="#include <sys/event.h>" ngx_feature_path= ngx_feature_libs= - ngx_feature_test="int kq; kq = kqueue()" + ngx_feature_test="(void) kqueue()" . auto/feature if [ $ngx_found = yes ]; then @@ -92,7 +92,8 @@ if test -z "$NGX_KQUEUE_CHECKED"; then ngx_feature_path= ngx_feature_libs= ngx_feature_test="struct kevent kev; - kev.fflags = NOTE_LOWAT;" + kev.fflags = NOTE_LOWAT; + (void) kev" . auto/feature @@ -260,11 +261,11 @@ ngx_feature_run=no ngx_feature_incs="#include <dlfcn.h>" ngx_feature_path= ngx_feature_libs= -ngx_feature_test="dlopen(NULL, RTLD_NOW | RTLD_GLOBAL); dlsym(NULL, NULL)" +ngx_feature_test="dlopen(NULL, RTLD_NOW | RTLD_GLOBAL); dlsym(NULL, \"\")" . auto/feature -if [ $ngx_found != yes ]; then +if [ $ngx_found = no ]; then ngx_feature="dlopen() in libdl" ngx_feature_libs="-ldl" @@ -287,7 +288,7 @@ ngx_feature_test="sched_yield()" . auto/feature -if [ $ngx_found != yes ]; then +if [ $ngx_found = no ]; then ngx_feature="sched_yield() in librt" ngx_feature_libs="-lrt" @@ -341,6 +342,19 @@ ngx_feature_test="setsockopt(0, SOL_SOCKET, SO_BINDANY, NULL, 0)" . auto/feature +# Linux IP_BIND_ADDRESS_NO_PORT + +ngx_feature="IP_BIND_ADDRESS_NO_PORT" +ngx_feature_name="NGX_HAVE_IP_BIND_ADDRESS_NO_PORT" +ngx_feature_run=no +ngx_feature_incs="#include <sys/socket.h> + #include <netinet/in.h>" +ngx_feature_path= +ngx_feature_libs= +ngx_feature_test="setsockopt(0, IPPROTO_IP, IP_BIND_ADDRESS_NO_PORT, NULL, 0)" +. auto/feature + + # Linux transparent proxying ngx_feature="IP_TRANSPARENT" @@ -479,9 +493,9 @@ if [ $NGX_FILE_AIO = YES ]; then ngx_feature_incs="#include <aio.h>" ngx_feature_path= ngx_feature_libs= - ngx_feature_test="int n; struct aiocb iocb; + ngx_feature_test="struct aiocb iocb; iocb.aio_sigevent.sigev_notify = SIGEV_KEVENT; - n = aio_read(&iocb)" + (void) aio_read(&iocb)" . auto/feature if [ $ngx_found = yes ]; then @@ -501,6 +515,7 @@ if [ $NGX_FILE_AIO = YES ]; then iocb.aio_lio_opcode = IOCB_CMD_PREAD; iocb.aio_flags = IOCB_FLAG_RESFD; iocb.aio_resfd = -1; + (void) iocb; (void) eventfd(0, 0)" . auto/feature @@ -516,11 +531,12 @@ if [ $NGX_FILE_AIO = YES ]; then ngx_feature="Linux AIO support (SYS_eventfd)" ngx_feature_incs="#include <linux/aio_abi.h> #include <sys/syscall.h>" - ngx_feature_test="int n = SYS_eventfd; - struct iocb iocb; + ngx_feature_test="struct iocb iocb; iocb.aio_lio_opcode = IOCB_CMD_PREAD; iocb.aio_flags = IOCB_FLAG_RESFD; - iocb.aio_resfd = -1;" + iocb.aio_resfd = -1; + (void) iocb; + (void) SYS_eventfd" . auto/feature if [ $ngx_found = yes ]; then @@ -558,7 +574,7 @@ else ngx_feature="eventfd() (SYS_eventfd)" ngx_feature_incs="#include <sys/syscall.h>" - ngx_feature_test="int n = SYS_eventfd" + ngx_feature_test="(void) SYS_eventfd" . auto/feature fi fi @@ -631,7 +647,8 @@ if [ $NGX_IPV6 = YES ]; then ngx_feature_path= ngx_feature_libs= ngx_feature_test="struct sockaddr_in6 sin6; - sin6.sin6_family = AF_INET6;" + sin6.sin6_family = AF_INET6; + (void) sin6" . auto/feature fi Renamed: vendor/nginx-1.11.3/conf/fastcgi.conf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/conf/fastcgi_params (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/conf/koi-utf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/conf/koi-win (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/conf/mime.types (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/conf/nginx.conf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/conf/scgi_params (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/conf/uwsgi_params (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/conf/win-utf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/contrib/README (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/contrib/geo2nginx.pl (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/contrib/unicode2nginx/koi-utf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/contrib/unicode2nginx/unicode-to-nginx.pl (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/contrib/unicode2nginx/win-utf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/contrib/vim/ftdetect/nginx.vim (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/contrib/vim/indent/nginx.vim (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/contrib/vim/syntax/nginx.vim (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/docs/GNUmakefile (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/docs/dtd/change_log_conf.dtd (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/docs/dtd/changes.dtd (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/docs/html/50x.html (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/docs/html/index.html (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/docs/man/nginx.8 (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/docs/text/LICENSE (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/docs/text/README (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/docs/xml/change_log_conf.xml (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/docs/xml/nginx/changes.xml (+194 -0) 99% =================================================================== --- vendor/nginx-1.11.1/docs/xml/nginx/changes.xml 2016-07-27 12:58:24 +0900 (c921aa4) +++ vendor/nginx-1.11.3/docs/xml/nginx/changes.xml 2016-07-27 13:06:13 +0900 (a7e8f5d) @@ -5,6 +5,200 @@ <change_log title="nginx"> +<changes ver="1.11.3" date="26.07.2016"> + +<change type="change"> +<para lang="ru"> +теперь accept_mutex по умолчанию выключен. +</para> +<para lang="en"> +now the "accept_mutex" directive is turned off by default. +</para> +</change> + +<change type="feature"> +<para lang="ru"> +теперь nginx использует EPOLLEXCLUSIVE на Linux. +</para> +<para lang="en"> +now nginx uses EPOLLEXCLUSIVE on Linux. +</para> +</change> + +<change type="feature"> +<para lang="ru"> +модуль ngx_stream_geo_module. +</para> +<para lang="en"> +the ngx_stream_geo_module. +</para> +</change> + +<change type="feature"> +<para lang="ru"> +модуль ngx_stream_geoip_module. +</para> +<para lang="en"> +the ngx_stream_geoip_module. +</para> +</change> + +<change type="feature"> +<para lang="ru"> +модуль ngx_stream_split_clients_module. +</para> +<para lang="en"> +the ngx_stream_split_clients_module. +</para> +</change> + +<change type="feature"> +<para lang="ru"> +директивы proxy_pass и proxy_ssl_name в модуле stream +поддерживают переменные. +</para> +<para lang="en"> +variables support +in the "proxy_pass" and "proxy_ssl_name" directives in the stream module. +</para> +</change> + +<change type="bugfix"> +<para lang="ru"> +утечки сокетов при использовании HTTP/2. +</para> +<para lang="en"> +socket leak when using HTTP/2. +</para> +</change> + +<change type="bugfix"> +<para lang="ru"> +в configure.<br/> +Спасибо Piotr Sikora. +</para> +<para lang="en"> +in configure tests.<br/> +Thanks to Piotr Sikora. +</para> +</change> + +</changes> + + +<changes ver="1.11.2" date="05.07.2016"> + +<change type="change"> +<para lang="ru"> +теперь nginx всегда использует внутренние реализации MD5 и SHA1; +параметры configure --with-md5 и --with-sha1 упразднены. +</para> +<para lang="en"> +now nginx always uses internal MD5 and SHA1 implementations; +the --with-md5 and --with-sha1 configure options were canceled. +</para> +</change> + +<change type="feature"> +<para lang="ru"> +поддержка переменных в модуле stream. +</para> +<para lang="en"> +variables support in the stream module. +</para> +</change> + +<change type="feature"> +<para lang="ru"> +модуль ngx_stream_map_module. +</para> +<para lang="en"> +the ngx_stream_map_module. +</para> +</change> + +<change type="feature"> +<para lang="ru"> +модуль ngx_stream_return_module. +</para> +<para lang="en"> +the ngx_stream_return_module. +</para> +</change> + +<change type="feature"> +<para lang="ru"> +в директивах proxy_bind, fastcgi_bind, memcached_bind, scgi_bind и uwsgi_bind +теперь можно указывать порт. +</para> +<para lang="en"> +a port can be specified in the "proxy_bind", "fastcgi_bind", +"memcached_bind", "scgi_bind", and "uwsgi_bind" directives. +</para> +</change> + +<change type="feature"> +<para lang="ru"> +теперь nginx использует опцию сокета IP_BIND_ADDRESS_NO_PORT, если она доступна. +</para> +<para lang="en"> +now nginx uses the IP_BIND_ADDRESS_NO_PORT socket option when available. +</para> +</change> + +<change type="bugfix"> +<para lang="ru"> +при использовании HTTP/2 и директивы proxy_request_buffering +в рабочем процессе мог произойти segmentation fault. +</para> +<para lang="en"> +a segmentation fault might occur in a worker process +when using HTTP/2 and the "proxy_request_buffering" directive. +</para> +</change> + +<change type="bugfix"> +<para lang="ru"> +при использовании HTTP/2 +к запросам, передаваемым на бэкенд, +всегда добавлялась строка заголовка "Content-Length", +даже если у запроса не было тела. +</para> +<para lang="en"> +the "Content-Length" request header line +was always added to requests passed to backends, +including requests without body, +when using HTTP/2. +</para> +</change> + +<change type="bugfix"> +<para lang="ru"> +при использовании HTTP/2 +в логах могли появляться сообщения "http request count is zero". +</para> +<para lang="en"> +"http request count is zero" alerts might appear in logs +when using HTTP/2. +</para> +</change> + +<change type="bugfix"> +<para lang="ru"> +при использовании директивы sub_filter +могло буферизироваться больше данных, чем это необходимо; +проблема появилась в 1.9.4. +</para> +<para lang="en"> +unnecessary buffering might occur +when using the "sub_filter" directive; +the issue had appeared in 1.9.4. +</para> +</change> + +</changes> + + <changes ver="1.11.1" date="31.05.2016"> <change type="security"> Renamed: vendor/nginx-1.11.3/docs/xsls/changes.xsls (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/docs/xslt/changes.xslt (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/misc/GNUmakefile (+1 -1) 99% =================================================================== --- vendor/nginx-1.11.1/misc/GNUmakefile 2016-07-27 12:58:24 +0900 (ff9bee6) +++ vendor/nginx-1.11.3/misc/GNUmakefile 2016-07-27 13:06:13 +0900 (0d1ad87) @@ -7,7 +7,7 @@ TEMP = tmp OBJS = objs.msvc8 OPENSSL = openssl-1.0.2h ZLIB = zlib-1.2.8 -PCRE = pcre-8.38 +PCRE = pcre-8.39 release: export Renamed: vendor/nginx-1.11.3/misc/README (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/nginx.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/nginx.h (+2 -2) 85% =================================================================== --- vendor/nginx-1.11.1/src/core/nginx.h 2016-07-27 12:58:24 +0900 (8eba7da) +++ vendor/nginx-1.11.3/src/core/nginx.h 2016-07-27 13:06:13 +0900 (e303e66) @@ -9,8 +9,8 @@ #define _NGINX_H_INCLUDED_ -#define nginx_version 1011001 -#define NGINX_VERSION "1.11.1" +#define nginx_version 1011003 +#define NGINX_VERSION "1.11.3" #define NGINX_VER "nginx/" NGINX_VERSION #ifdef NGX_BUILD Renamed: vendor/nginx-1.11.3/src/core/ngx_array.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_array.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_buf.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_buf.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_conf_file.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_conf_file.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_config.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_connection.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_connection.h (+0 -4) 98% =================================================================== --- vendor/nginx-1.11.1/src/core/ngx_connection.h 2016-07-27 12:58:24 +0900 (b11e92b) +++ vendor/nginx-1.11.3/src/core/ngx_connection.h 2016-07-27 13:06:13 +0900 (e484c81) @@ -186,10 +186,6 @@ struct ngx_connection_s { unsigned need_last_buf:1; -#if (NGX_HAVE_IOCP) - unsigned accept_context_updated:1; -#endif - #if (NGX_HAVE_AIO_SENDFILE) unsigned busy_count:2; #endif Renamed: vendor/nginx-1.11.3/src/core/ngx_core.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_cpuinfo.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_crc.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_crc32.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_crc32.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_crypt.c (+0 -13) 98% =================================================================== --- vendor/nginx-1.11.1/src/core/ngx_crypt.c 2016-07-27 12:58:24 +0900 (9db74f4) +++ vendor/nginx-1.11.3/src/core/ngx_crypt.c 2016-07-27 13:06:13 +0900 (868dc5d) @@ -8,9 +8,7 @@ #include <ngx_core.h> #include <ngx_crypt.h> #include <ngx_md5.h> -#if (NGX_HAVE_SHA1) #include <ngx_sha1.h> -#endif #if (NGX_CRYPT) @@ -19,16 +17,11 @@ static ngx_int_t ngx_crypt_apr1(ngx_pool_t *pool, u_char *key, u_char *salt, u_char **encrypted); static ngx_int_t ngx_crypt_plain(ngx_pool_t *pool, u_char *key, u_char *salt, u_char **encrypted); - -#if (NGX_HAVE_SHA1) - static ngx_int_t ngx_crypt_ssha(ngx_pool_t *pool, u_char *key, u_char *salt, u_char **encrypted); static ngx_int_t ngx_crypt_sha(ngx_pool_t *pool, u_char *key, u_char *salt, u_char **encrypted); -#endif - static u_char *ngx_crypt_to64(u_char *p, uint32_t v, size_t n); @@ -42,13 +35,11 @@ ngx_crypt(ngx_pool_t *pool, u_char *key, u_char *salt, u_char **encrypted) } else if (ngx_strncmp(salt, "{PLAIN}", sizeof("{PLAIN}") - 1) == 0) { return ngx_crypt_plain(pool, key, salt, encrypted); -#if (NGX_HAVE_SHA1) } else if (ngx_strncmp(salt, "{SSHA}", sizeof("{SSHA}") - 1) == 0) { return ngx_crypt_ssha(pool, key, salt, encrypted); } else if (ngx_strncmp(salt, "{SHA}", sizeof("{SHA}") - 1) == 0) { return ngx_crypt_sha(pool, key, salt, encrypted); -#endif } /* fallback to libc crypt() */ @@ -193,8 +184,6 @@ ngx_crypt_plain(ngx_pool_t *pool, u_char *key, u_char *salt, u_char **encrypted) } -#if (NGX_HAVE_SHA1) - static ngx_int_t ngx_crypt_ssha(ngx_pool_t *pool, u_char *key, u_char *salt, u_char **encrypted) { @@ -278,6 +267,4 @@ ngx_crypt_sha(ngx_pool_t *pool, u_char *key, u_char *salt, u_char **encrypted) return NGX_OK; } -#endif /* NGX_HAVE_SHA1 */ - #endif /* NGX_CRYPT */ Renamed: vendor/nginx-1.11.3/src/core/ngx_crypt.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_cycle.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_cycle.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_file.c (+9 -10) 98% =================================================================== --- vendor/nginx-1.11.1/src/core/ngx_file.c 2016-07-27 12:58:24 +0900 (fc2dfd3) +++ vendor/nginx-1.11.3/src/core/ngx_file.c 2016-07-27 13:06:13 +0900 (c1137cc) @@ -225,7 +225,7 @@ ngx_create_hashed_filename(ngx_path_t *path, u_char *file, size_t len) file[path->name.len + path->len] = '/'; - for (n = 0; n < 3; n++) { + for (n = 0; n < NGX_MAX_PATH_LEVEL; n++) { level = path->level[n]; if (level == 0) { @@ -249,7 +249,7 @@ ngx_create_path(ngx_file_t *file, ngx_path_t *path) pos = path->name.len; - for (i = 0; i < 3; i++) { + for (i = 0; i < NGX_MAX_PATH_LEVEL; i++) { if (path->level[i] == 0) { break; } @@ -399,6 +399,8 @@ char * ngx_conf_merge_path_value(ngx_conf_t *cf, ngx_path_t **path, ngx_path_t *prev, ngx_path_init_t *init) { + ngx_uint_t i; + if (*path) { return NGX_CONF_OK; } @@ -419,13 +421,10 @@ ngx_conf_merge_path_value(ngx_conf_t *cf, ngx_path_t **path, ngx_path_t *prev, return NGX_CONF_ERROR; } - (*path)->level[0] = init->level[0]; - (*path)->level[1] = init->level[1]; - (*path)->level[2] = init->level[2]; - - (*path)->len = init->level[0] + (init->level[0] ? 1 : 0) - + init->level[1] + (init->level[1] ? 1 : 0) - + init->level[2] + (init->level[2] ? 1 : 0); + for (i = 0; i < NGX_MAX_PATH_LEVEL; i++) { + (*path)->level[i] = init->level[i]; + (*path)->len += init->level[i] + (init->level[i] ? 1 : 0); + } if (ngx_add_path(cf, path) != NGX_OK) { return NGX_CONF_ERROR; @@ -518,7 +517,7 @@ ngx_add_path(ngx_conf_t *cf, ngx_path_t **slot) return NGX_ERROR; } - for (n = 0; n < 3; n++) { + for (n = 0; n < NGX_MAX_PATH_LEVEL; n++) { if (p[i]->level[n] != path->level[n]) { if (path->conf_file == NULL) { if (p[i]->conf_file == NULL) { Renamed: vendor/nginx-1.11.3/src/core/ngx_file.h (+2 -2) 97% =================================================================== --- vendor/nginx-1.11.1/src/core/ngx_file.h 2016-07-27 12:58:24 +0900 (5f8228b) +++ vendor/nginx-1.11.3/src/core/ngx_file.h 2016-07-27 13:06:13 +0900 (a723c3d) @@ -49,7 +49,7 @@ typedef void (*ngx_path_loader_pt) (void *data); typedef struct { ngx_str_t name; size_t len; - size_t level[3]; + size_t level[NGX_MAX_PATH_LEVEL]; ngx_path_manager_pt manager; ngx_path_loader_pt loader; @@ -62,7 +62,7 @@ typedef struct { typedef struct { ngx_str_t name; - size_t level[3]; + size_t level[NGX_MAX_PATH_LEVEL]; } ngx_path_init_t; Renamed: vendor/nginx-1.11.3/src/core/ngx_hash.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_hash.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_inet.c (+62 -21) 96% =================================================================== --- vendor/nginx-1.11.1/src/core/ngx_inet.c 2016-07-27 12:58:24 +0900 (873bf73) +++ vendor/nginx-1.11.3/src/core/ngx_inet.c 2016-07-27 13:06:13 +0900 (c4aaf3a) @@ -529,13 +529,9 @@ ngx_int_t ngx_parse_addr_port(ngx_pool_t *pool, ngx_addr_t *addr, u_char *text, size_t len) { - u_char *p, *last; - size_t plen; - ngx_int_t rc, port; - struct sockaddr_in *sin; -#if (NGX_HAVE_INET6) - struct sockaddr_in6 *sin6; -#endif + u_char *p, *last; + size_t plen; + ngx_int_t rc, port; rc = ngx_parse_addr(pool, addr, text, len); @@ -585,20 +581,7 @@ ngx_parse_addr_port(ngx_pool_t *pool, ngx_addr_t *addr, u_char *text, return rc; } - switch (addr->sockaddr->sa_family) { - -#if (NGX_HAVE_INET6) - case AF_INET6: - sin6 = (struct sockaddr_in6 *) addr->sockaddr; - sin6->sin6_port = htons((in_port_t) port); - break; -#endif - - default: /* AF_INET */ - sin = (struct sockaddr_in *) addr->sockaddr; - sin->sin_port = htons((in_port_t) port); - break; - } + ngx_inet_set_port(addr->sockaddr, (in_port_t) port); return NGX_OK; } @@ -1356,3 +1339,61 @@ ngx_cmp_sockaddr(struct sockaddr *sa1, socklen_t slen1, return NGX_OK; } + + +in_port_t +ngx_inet_get_port(struct sockaddr *sa) +{ + struct sockaddr_in *sin; +#if (NGX_HAVE_INET6) + struct sockaddr_in6 *sin6; +#endif + + switch (sa->sa_family) { + +#if (NGX_HAVE_INET6) + case AF_INET6: + sin6 = (struct sockaddr_in6 *) sa; + return ntohs(sin6->sin6_port); +#endif + +#if (NGX_HAVE_UNIX_DOMAIN) + case AF_UNIX: + return 0; +#endif + + default: /* AF_INET */ + sin = (struct sockaddr_in *) sa; + return ntohs(sin->sin_port); + } +} + + +void +ngx_inet_set_port(struct sockaddr *sa, in_port_t port) +{ + struct sockaddr_in *sin; +#if (NGX_HAVE_INET6) + struct sockaddr_in6 *sin6; +#endif + + switch (sa->sa_family) { + +#if (NGX_HAVE_INET6) + case AF_INET6: + sin6 = (struct sockaddr_in6 *) sa; + sin6->sin6_port = htons(port); + break; +#endif + +#if (NGX_HAVE_UNIX_DOMAIN) + case AF_UNIX: + break; +#endif + + default: /* AF_INET */ + sin = (struct sockaddr_in *) sa; + sin->sin_port = htons(port); + break; + } +} Renamed: vendor/nginx-1.11.3/src/core/ngx_inet.h (+2 -0) 96% =================================================================== --- vendor/nginx-1.11.1/src/core/ngx_inet.h 2016-07-27 12:58:24 +0900 (531d264) +++ vendor/nginx-1.11.3/src/core/ngx_inet.h 2016-07-27 13:06:13 +0900 (97dc354) @@ -121,6 +121,8 @@ ngx_int_t ngx_parse_url(ngx_pool_t *pool, ngx_url_t *u); ngx_int_t ngx_inet_resolve_host(ngx_pool_t *pool, ngx_url_t *u); ngx_int_t ngx_cmp_sockaddr(struct sockaddr *sa1, socklen_t slen1, struct sockaddr *sa2, socklen_t slen2, ngx_uint_t cmp_port); +in_port_t ngx_inet_get_port(struct sockaddr *sa); +void ngx_inet_set_port(struct sockaddr *sa, in_port_t port); #endif /* _NGX_INET_H_INCLUDED_ */ Renamed: vendor/nginx-1.11.3/src/core/ngx_list.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_list.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_log.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_log.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_md5.c (+0 -6) 98% =================================================================== --- vendor/nginx-1.11.1/src/core/ngx_md5.c 2016-07-27 12:58:24 +0900 (440c75b) +++ vendor/nginx-1.11.3/src/core/ngx_md5.c 2016-07-27 13:06:13 +0900 (c25d002) @@ -3,8 +3,6 @@ * An internal implementation, based on Alexander Peslyak's * public domain implementation: * http://openwall.info/wiki/people/solar/software/public-domain-source-code/md5 - * It is not expected to be optimal and is used only - * if no MD5 implementation was found in system. */ @@ -13,8 +11,6 @@ #include <ngx_md5.h> -#if !(NGX_HAVE_MD5) - static const u_char *ngx_md5_body(ngx_md5_t *ctx, const u_char *data, size_t size); @@ -285,5 +281,3 @@ ngx_md5_body(ngx_md5_t *ctx, const u_char *data, size_t size) return p; } - -#endif Renamed: vendor/nginx-1.11.3/src/core/ngx_md5.h (+0 -32) 53% =================================================================== --- vendor/nginx-1.11.1/src/core/ngx_md5.h 2016-07-27 12:58:24 +0900 (18d09d6) +++ vendor/nginx-1.11.3/src/core/ngx_md5.h 2016-07-27 13:06:13 +0900 (713b614) @@ -13,36 +13,6 @@ #include <ngx_core.h> -#if (NGX_HAVE_MD5) - -#if (NGX_HAVE_OPENSSL_MD5_H) -#include <openssl/md5.h> -#else -#include <md5.h> -#endif - - -typedef MD5_CTX ngx_md5_t; - - -#if (NGX_OPENSSL_MD5) - -#define ngx_md5_init MD5_Init -#define ngx_md5_update MD5_Update -#define ngx_md5_final MD5_Final - -#else - -#define ngx_md5_init MD5Init -#define ngx_md5_update MD5Update -#define ngx_md5_final MD5Final - -#endif - - -#else /* !NGX_HAVE_MD5 */ - - typedef struct { uint64_t bytes; uint32_t a, b, c, d; @@ -55,6 +25,4 @@ void ngx_md5_update(ngx_md5_t *ctx, const void *data, size_t size); void ngx_md5_final(u_char result[16], ngx_md5_t *ctx); -#endif - #endif /* _NGX_MD5_H_INCLUDED_ */ Renamed: vendor/nginx-1.11.3/src/core/ngx_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_module.h (+0 -9) 98% =================================================================== --- vendor/nginx-1.11.1/src/core/ngx_module.h 2016-07-27 12:58:24 +0900 (e911cb4) +++ vendor/nginx-1.11.3/src/core/ngx_module.h 2016-07-27 13:06:13 +0900 (a1a0d6c) @@ -119,17 +119,8 @@ #define NGX_MODULE_SIGNATURE_16 "0" #endif -#if (NGX_HAVE_MD5) -#define NGX_MODULE_SIGNATURE_17 "1" -#else #define NGX_MODULE_SIGNATURE_17 "0" -#endif - -#if (NGX_HAVE_SHA1) -#define NGX_MODULE_SIGNATURE_18 "1" -#else #define NGX_MODULE_SIGNATURE_18 "0" -#endif #if (NGX_HAVE_OPENAT) #define NGX_MODULE_SIGNATURE_19 "1" Renamed: vendor/nginx-1.11.3/src/core/ngx_murmurhash.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_murmurhash.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_open_file_cache.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_open_file_cache.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_output_chain.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_palloc.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_palloc.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_parse.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_parse.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_parse_time.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_parse_time.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_proxy_protocol.c (+3 -8) 91% =================================================================== --- vendor/nginx-1.11.1/src/core/ngx_proxy_protocol.c 2016-07-27 12:58:24 +0900 (3e54d42) +++ vendor/nginx-1.11.3/src/core/ngx_proxy_protocol.c 2016-07-27 13:06:13 +0900 (523ec35) @@ -141,19 +141,11 @@ ngx_proxy_protocol_write(ngx_connection_t *c, u_char *buf, u_char *last) case AF_INET: buf = ngx_cpymem(buf, "PROXY TCP4 ", sizeof("PROXY TCP4 ") - 1); - - port = ntohs(((struct sockaddr_in *) c->sockaddr)->sin_port); - lport = ntohs(((struct sockaddr_in *) c->local_sockaddr)->sin_port); - break; #if (NGX_HAVE_INET6) case AF_INET6: buf = ngx_cpymem(buf, "PROXY TCP6 ", sizeof("PROXY TCP6 ") - 1); - - port = ntohs(((struct sockaddr_in6 *) c->sockaddr)->sin6_port); - lport = ntohs(((struct sockaddr_in6 *) c->local_sockaddr)->sin6_port); - break; #endif @@ -169,5 +161,8 @@ ngx_proxy_protocol_write(ngx_connection_t *c, u_char *buf, u_char *last) buf += ngx_sock_ntop(c->local_sockaddr, c->local_socklen, buf, last - buf, 0); + port = ngx_inet_get_port(c->sockaddr); + lport = ngx_inet_get_port(c->local_sockaddr); + return ngx_slprintf(buf, last, " %ui %ui" CRLF, port, lport); } Renamed: vendor/nginx-1.11.3/src/core/ngx_proxy_protocol.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_queue.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_queue.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_radix_tree.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_radix_tree.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_rbtree.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_rbtree.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_regex.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_regex.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_resolver.c (+1 -15) 99% =================================================================== --- vendor/nginx-1.11.1/src/core/ngx_resolver.c 2016-07-27 12:58:24 +0900 (e06c2f8) +++ vendor/nginx-1.11.3/src/core/ngx_resolver.c 2016-07-27 13:06:13 +0900 (53dae6b) @@ -2996,12 +2996,8 @@ ngx_resolver_srv_names_handler(ngx_resolver_ctx_t *cctx) ngx_addr_t *addrs; ngx_resolver_t *r; ngx_sockaddr_t *sockaddr; - struct sockaddr_in *sin; ngx_resolver_ctx_t *ctx; ngx_resolver_srv_name_t *srv; -#if (NGX_HAVE_INET6) - struct sockaddr_in6 *sin6; -#endif r = cctx->resolver; ctx = cctx->data; @@ -3045,17 +3041,7 @@ ngx_resolver_srv_names_handler(ngx_resolver_ctx_t *cctx) ngx_memcpy(&sockaddr[i], cctx->addrs[i].sockaddr, addrs[i].socklen); - switch (addrs[i].sockaddr->sa_family) { -#if (NGX_HAVE_INET6) - case AF_INET6: - sin6 = (struct sockaddr_in6 *) addrs[i].sockaddr; - sin6->sin6_port = htons(srv->port); - break; -#endif - default: /* AF_INET */ - sin = (struct sockaddr_in *) addrs[i].sockaddr; - sin->sin_port = htons(srv->port); - } + ngx_inet_set_port(addrs[i].sockaddr, srv->port); } srv->addrs = addrs; Renamed: vendor/nginx-1.11.3/src/core/ngx_resolver.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_rwlock.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_rwlock.h (+0 -0) 100% =================================================================== Added: vendor/nginx-1.11.3/src/core/ngx_sha1.c (+294 -0) 100644 =================================================================== --- /dev/null +++ vendor/nginx-1.11.3/src/core/ngx_sha1.c 2016-07-27 13:06:13 +0900 (f00dc52) @@ -0,0 +1,294 @@ + +/* + * Copyright (C) Maxim Dounin + * Copyright (C) Nginx, Inc. + * + * An internal SHA1 implementation. + */ + + +#include <ngx_config.h> +#include <ngx_core.h> +#include <ngx_sha1.h> + + +static const u_char *ngx_sha1_body(ngx_sha1_t *ctx, const u_char *data, + size_t size); + + +void +ngx_sha1_init(ngx_sha1_t *ctx) +{ + ctx->a = 0x67452301; + ctx->b = 0xefcdab89; + ctx->c = 0x98badcfe; + ctx->d = 0x10325476; + ctx->e = 0xc3d2e1f0; + + ctx->bytes = 0; +} + + +void +ngx_sha1_update(ngx_sha1_t *ctx, const void *data, size_t size) +{ + size_t used, free; + + used = (size_t) (ctx->bytes & 0x3f); + ctx->bytes += size; + + if (used) { + free = 64 - used; + + if (size < free) { + ngx_memcpy(&ctx->buffer[used], data, size); + return; + } + + ngx_memcpy(&ctx->buffer[used], data, free); + data = (u_char *) data + free; + size -= free; + (void) ngx_sha1_body(ctx, ctx->buffer, 64); + } + + if (size >= 64) { + data = ngx_sha1_body(ctx, data, size & ~(size_t) 0x3f); + size &= 0x3f; + } + + ngx_memcpy(ctx->buffer, data, size); +} + + +void +ngx_sha1_final(u_char result[20], ngx_sha1_t *ctx) +{ + size_t used, free; + + used = (size_t) (ctx->bytes & 0x3f); + + ctx->buffer[used++] = 0x80; + + free = 64 - used; + + if (free < 8) { + ngx_memzero(&ctx->buffer[used], free); + (void) ngx_sha1_body(ctx, ctx->buffer, 64); + used = 0; + free = 64; + } + + ngx_memzero(&ctx->buffer[used], free - 8); + + ctx->bytes <<= 3; + ctx->buffer[56] = (u_char) (ctx->bytes >> 56); + ctx->buffer[57] = (u_char) (ctx->bytes >> 48); + ctx->buffer[58] = (u_char) (ctx->bytes >> 40); + ctx->buffer[59] = (u_char) (ctx->bytes >> 32); + ctx->buffer[60] = (u_char) (ctx->bytes >> 24); + ctx->buffer[61] = (u_char) (ctx->bytes >> 16); + ctx->buffer[62] = (u_char) (ctx->bytes >> 8); + ctx->buffer[63] = (u_char) ctx->bytes; + + (void) ngx_sha1_body(ctx, ctx->buffer, 64); + + result[0] = (u_char) (ctx->a >> 24); + result[1] = (u_char) (ctx->a >> 16); + result[2] = (u_char) (ctx->a >> 8); + result[3] = (u_char) ctx->a; + result[4] = (u_char) (ctx->b >> 24); + result[5] = (u_char) (ctx->b >> 16); + result[6] = (u_char) (ctx->b >> 8); + result[7] = (u_char) ctx->b; + result[8] = (u_char) (ctx->c >> 24); + result[9] = (u_char) (ctx->c >> 16); + result[10] = (u_char) (ctx->c >> 8); + result[11] = (u_char) ctx->c; + result[12] = (u_char) (ctx->d >> 24); + result[13] = (u_char) (ctx->d >> 16); + result[14] = (u_char) (ctx->d >> 8); + result[15] = (u_char) ctx->d; + result[16] = (u_char) (ctx->e >> 24); + result[17] = (u_char) (ctx->e >> 16); + result[18] = (u_char) (ctx->e >> 8); + result[19] = (u_char) ctx->e; + + ngx_memzero(ctx, sizeof(*ctx)); +} + + +/* + * Helper functions. + */ + +#define ROTATE(bits, word) (((word) << (bits)) | ((word) >> (32 - (bits)))) + +#define F1(b, c, d) (((b) & (c)) | ((~(b)) & (d))) +#define F2(b, c, d) ((b) ^ (c) ^ (d)) +#define F3(b, c, d) (((b) & (c)) | ((b) & (d)) | ((c) & (d))) + +#define STEP(f, a, b, c, d, e, w, t) \ + temp = ROTATE(5, (a)) + f((b), (c), (d)) + (e) + (w) + (t); \ + (e) = (d); \ + (d) = (c); \ + (c) = ROTATE(30, (b)); \ + (b) = (a); \ + (a) = temp; + + +/* + * GET() reads 4 input bytes in big-endian byte order and returns + * them as uint32_t. + */ + +#define GET(n) \ + ((uint32_t) p[n * 4 + 3] | \ + ((uint32_t) p[n * 4 + 2] << 8) | \ + ((uint32_t) p[n * 4 + 1] << 16) | \ + ((uint32_t) p[n * 4] << 24)) + + +/* + * This processes one or more 64-byte data blocks, but does not update + * the bit counters. There are no alignment requirements. + */ + +static const u_char * +ngx_sha1_body(ngx_sha1_t *ctx, const u_char *data, size_t size) +{ + uint32_t a, b, c, d, e, temp; + uint32_t saved_a, saved_b, saved_c, saved_d, saved_e; + uint32_t words[80]; + ngx_uint_t i; + const u_char *p; + + p = data; + + a = ctx->a; + b = ctx->b; + c = ctx->c; + d = ctx->d; + e = ctx->e; + + do { + saved_a = a; + saved_b = b; + saved_c = c; + saved_d = d; + saved_e = e; + + /* Load data block into the words array */ + + for (i = 0; i < 16; i++) { + words[i] = GET(i); + } + + for (i = 16; i < 80; i++) { + words[i] = ROTATE(1, words[i - 3] ^ words[i - 8] ^ words[i - 14] + ^ words[i - 16]); + } + + /* Transformations */ + + STEP(F1, a, b, c, d, e, words[0], 0x5a827999); + STEP(F1, a, b, c, d, e, words[1], 0x5a827999); + STEP(F1, a, b, c, d, e, words[2], 0x5a827999); + STEP(F1, a, b, c, d, e, words[3], 0x5a827999); + STEP(F1, a, b, c, d, e, words[4], 0x5a827999); + STEP(F1, a, b, c, d, e, words[5], 0x5a827999); + STEP(F1, a, b, c, d, e, words[6], 0x5a827999); + STEP(F1, a, b, c, d, e, words[7], 0x5a827999); + STEP(F1, a, b, c, d, e, words[8], 0x5a827999); + STEP(F1, a, b, c, d, e, words[9], 0x5a827999); + STEP(F1, a, b, c, d, e, words[10], 0x5a827999); + STEP(F1, a, b, c, d, e, words[11], 0x5a827999); + STEP(F1, a, b, c, d, e, words[12], 0x5a827999); + STEP(F1, a, b, c, d, e, words[13], 0x5a827999); + STEP(F1, a, b, c, d, e, words[14], 0x5a827999); + STEP(F1, a, b, c, d, e, words[15], 0x5a827999); + STEP(F1, a, b, c, d, e, words[16], 0x5a827999); + STEP(F1, a, b, c, d, e, words[17], 0x5a827999); + STEP(F1, a, b, c, d, e, words[18], 0x5a827999); + STEP(F1, a, b, c, d, e, words[19], 0x5a827999); + + STEP(F2, a, b, c, d, e, words[20], 0x6ed9eba1); + STEP(F2, a, b, c, d, e, words[21], 0x6ed9eba1); + STEP(F2, a, b, c, d, e, words[22], 0x6ed9eba1); + STEP(F2, a, b, c, d, e, words[23], 0x6ed9eba1); + STEP(F2, a, b, c, d, e, words[24], 0x6ed9eba1); + STEP(F2, a, b, c, d, e, words[25], 0x6ed9eba1); + STEP(F2, a, b, c, d, e, words[26], 0x6ed9eba1); + STEP(F2, a, b, c, d, e, words[27], 0x6ed9eba1); + STEP(F2, a, b, c, d, e, words[28], 0x6ed9eba1); + STEP(F2, a, b, c, d, e, words[29], 0x6ed9eba1); + STEP(F2, a, b, c, d, e, words[30], 0x6ed9eba1); + STEP(F2, a, b, c, d, e, words[31], 0x6ed9eba1); + STEP(F2, a, b, c, d, e, words[32], 0x6ed9eba1); + STEP(F2, a, b, c, d, e, words[33], 0x6ed9eba1); + STEP(F2, a, b, c, d, e, words[34], 0x6ed9eba1); + STEP(F2, a, b, c, d, e, words[35], 0x6ed9eba1); + STEP(F2, a, b, c, d, e, words[36], 0x6ed9eba1); + STEP(F2, a, b, c, d, e, words[37], 0x6ed9eba1); + STEP(F2, a, b, c, d, e, words[38], 0x6ed9eba1); + STEP(F2, a, b, c, d, e, words[39], 0x6ed9eba1); + + STEP(F3, a, b, c, d, e, words[40], 0x8f1bbcdc); + STEP(F3, a, b, c, d, e, words[41], 0x8f1bbcdc); + STEP(F3, a, b, c, d, e, words[42], 0x8f1bbcdc); + STEP(F3, a, b, c, d, e, words[43], 0x8f1bbcdc); + STEP(F3, a, b, c, d, e, words[44], 0x8f1bbcdc); + STEP(F3, a, b, c, d, e, words[45], 0x8f1bbcdc); + STEP(F3, a, b, c, d, e, words[46], 0x8f1bbcdc); + STEP(F3, a, b, c, d, e, words[47], 0x8f1bbcdc); + STEP(F3, a, b, c, d, e, words[48], 0x8f1bbcdc); + STEP(F3, a, b, c, d, e, words[49], 0x8f1bbcdc); + STEP(F3, a, b, c, d, e, words[50], 0x8f1bbcdc); + STEP(F3, a, b, c, d, e, words[51], 0x8f1bbcdc); + STEP(F3, a, b, c, d, e, words[52], 0x8f1bbcdc); + STEP(F3, a, b, c, d, e, words[53], 0x8f1bbcdc); + STEP(F3, a, b, c, d, e, words[54], 0x8f1bbcdc); + STEP(F3, a, b, c, d, e, words[55], 0x8f1bbcdc); + STEP(F3, a, b, c, d, e, words[56], 0x8f1bbcdc); + STEP(F3, a, b, c, d, e, words[57], 0x8f1bbcdc); + STEP(F3, a, b, c, d, e, words[58], 0x8f1bbcdc); + STEP(F3, a, b, c, d, e, words[59], 0x8f1bbcdc); + + STEP(F2, a, b, c, d, e, words[60], 0xca62c1d6); + STEP(F2, a, b, c, d, e, words[61], 0xca62c1d6); + STEP(F2, a, b, c, d, e, words[62], 0xca62c1d6); + STEP(F2, a, b, c, d, e, words[63], 0xca62c1d6); + STEP(F2, a, b, c, d, e, words[64], 0xca62c1d6); + STEP(F2, a, b, c, d, e, words[65], 0xca62c1d6); + STEP(F2, a, b, c, d, e, words[66], 0xca62c1d6); + STEP(F2, a, b, c, d, e, words[67], 0xca62c1d6); + STEP(F2, a, b, c, d, e, words[68], 0xca62c1d6); + STEP(F2, a, b, c, d, e, words[69], 0xca62c1d6); + STEP(F2, a, b, c, d, e, words[70], 0xca62c1d6); + STEP(F2, a, b, c, d, e, words[71], 0xca62c1d6); + STEP(F2, a, b, c, d, e, words[72], 0xca62c1d6); + STEP(F2, a, b, c, d, e, words[73], 0xca62c1d6); + STEP(F2, a, b, c, d, e, words[74], 0xca62c1d6); + STEP(F2, a, b, c, d, e, words[75], 0xca62c1d6); + STEP(F2, a, b, c, d, e, words[76], 0xca62c1d6); + STEP(F2, a, b, c, d, e, words[77], 0xca62c1d6); + STEP(F2, a, b, c, d, e, words[78], 0xca62c1d6); + STEP(F2, a, b, c, d, e, words[79], 0xca62c1d6); + + a += saved_a; + b += saved_b; + c += saved_c; + d += saved_d; + e += saved_e; + + p += 64; + + } while (size -= 64); + + ctx->a = a; + ctx->b = b; + ctx->c = c; + ctx->d = d; + ctx->e = e; + + return p; +} Added: vendor/nginx-1.11.3/src/core/ngx_sha1.h (+28 -0) 100644 =================================================================== --- /dev/null +++ vendor/nginx-1.11.3/src/core/ngx_sha1.h 2016-07-27 13:06:13 +0900 (4a98f71) @@ -0,0 +1,28 @@ + +/* + * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. + */ + + +#ifndef _NGX_SHA1_H_INCLUDED_ +#define _NGX_SHA1_H_INCLUDED_ + + +#include <ngx_config.h> +#include <ngx_core.h> + + +typedef struct { + uint64_t bytes; + uint32_t a, b, c, d, e, f; + u_char buffer[64]; +} ngx_sha1_t; + + +void ngx_sha1_init(ngx_sha1_t *ctx); +void ngx_sha1_update(ngx_sha1_t *ctx, const void *data, size_t size); +void ngx_sha1_final(u_char result[20], ngx_sha1_t *ctx); + + +#endif /* _NGX_SHA1_H_INCLUDED_ */ Renamed: vendor/nginx-1.11.3/src/core/ngx_shmtx.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_shmtx.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_slab.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_slab.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_spinlock.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_string.c (+2 -2) 99% =================================================================== --- vendor/nginx-1.11.1/src/core/ngx_string.c 2016-07-27 12:58:24 +0900 (cf665a4) +++ vendor/nginx-1.11.3/src/core/ngx_string.c 2016-07-27 13:06:13 +0900 (7a73ef5) @@ -1563,7 +1563,7 @@ ngx_escape_uri(u_char *dst, u_char *src, size_t size, ngx_uint_t type) n = 0; while (size) { - if (escape[*src >> 5] & (1 << (*src & 0x1f))) { + if (escape[*src >> 5] & (1U << (*src & 0x1f))) { n++; } src++; @@ -1574,7 +1574,7 @@ ngx_escape_uri(u_char *dst, u_char *src, size_t size, ngx_uint_t type) } while (size) { - if (escape[*src >> 5] & (1 << (*src & 0x1f))) { + if (escape[*src >> 5] & (1U << (*src & 0x1f))) { *dst++ = '%'; *dst++ = hex[*src >> 4]; *dst++ = hex[*src & 0xf]; Renamed: vendor/nginx-1.11.3/src/core/ngx_string.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_syslog.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_syslog.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_thread_pool.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_thread_pool.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_times.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/core/ngx_times.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/event/modules/ngx_devpoll_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/event/modules/ngx_epoll_module.c (+10 -3) 99% =================================================================== --- vendor/nginx-1.11.1/src/event/modules/ngx_epoll_module.c 2016-07-27 12:58:24 +0900 (de5a942) +++ vendor/nginx-1.11.3/src/event/modules/ngx_epoll_module.c 2016-07-27 13:06:13 +0900 (c267fd6) @@ -17,18 +17,19 @@ #define EPOLLIN 0x001 #define EPOLLPRI 0x002 #define EPOLLOUT 0x004 +#define EPOLLERR 0x008 +#define EPOLLHUP 0x010 #define EPOLLRDNORM 0x040 #define EPOLLRDBAND 0x080 #define EPOLLWRNORM 0x100 #define EPOLLWRBAND 0x200 #define EPOLLMSG 0x400 -#define EPOLLERR 0x008 -#define EPOLLHUP 0x010 #define EPOLLRDHUP 0x2000 -#define EPOLLET 0x80000000 +#define EPOLLEXCLUSIVE 0x10000000 #define EPOLLONESHOT 0x40000000 +#define EPOLLET 0x80000000 #define EPOLL_CTL_ADD 1 #define EPOLL_CTL_DEL 2 @@ -610,6 +611,12 @@ ngx_epoll_add_event(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags) op = EPOLL_CTL_ADD; } +#if (NGX_HAVE_EPOLLEXCLUSIVE && NGX_HAVE_EPOLLRDHUP) + if (flags & NGX_EXCLUSIVE_EVENT) { + events &= ~EPOLLRDHUP; + } +#endif + ee.events = events | (uint32_t) flags; ee.data.ptr = (void *) ((uintptr_t) c | ev->instance); Renamed: vendor/nginx-1.11.3/src/event/modules/ngx_eventport_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/event/modules/ngx_iocp_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/event/modules/ngx_iocp_module.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/event/modules/ngx_kqueue_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/event/modules/ngx_poll_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/event/modules/ngx_select_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/event/modules/ngx_win32_select_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/event/ngx_event.c (+27 -4) 98% =================================================================== --- vendor/nginx-1.11.1/src/event/ngx_event.c 2016-07-27 12:58:24 +0900 (c8ae5b2) +++ vendor/nginx-1.11.3/src/event/ngx_event.c 2016-07-27 13:06:13 +0900 (9d6c4c9) @@ -822,15 +822,38 @@ ngx_event_process_init(ngx_cycle_t *cycle) rev->handler = (c->type == SOCK_STREAM) ? ngx_event_accept : ngx_event_recvmsg; - if (ngx_use_accept_mutex #if (NGX_HAVE_REUSEPORT) - && !ls[i].reuseport + + if (ls[i].reuseport) { + if (ngx_add_event(rev, NGX_READ_EVENT, 0) == NGX_ERROR) { + return NGX_ERROR; + } + + continue; + } + #endif - ) + + if (ngx_use_accept_mutex) { + continue; + } + +#if (NGX_HAVE_EPOLLEXCLUSIVE) + + if ((ngx_event_flags & NGX_USE_EPOLL_EVENT) + && ccf->worker_processes > 1) { + if (ngx_add_event(rev, NGX_READ_EVENT, NGX_EXCLUSIVE_EVENT) + == NGX_ERROR) + { + return NGX_ERROR; + } + continue; } +#endif + if (ngx_add_event(rev, NGX_READ_EVENT, 0) == NGX_ERROR) { return NGX_ERROR; } @@ -1261,7 +1284,7 @@ ngx_event_core_init_conf(ngx_cycle_t *cycle, void *conf) ngx_conf_init_ptr_value(ecf->name, event_module->name->data); ngx_conf_init_value(ecf->multi_accept, 0); - ngx_conf_init_value(ecf->accept_mutex, 1); + ngx_conf_init_value(ecf->accept_mutex, 0); ngx_conf_init_msec_value(ecf->accept_mutex_delay, 500); return NGX_CONF_OK; Renamed: vendor/nginx-1.11.3/src/event/ngx_event.h (+8 -5) 98% =================================================================== --- vendor/nginx-1.11.1/src/event/ngx_event.h 2016-07-27 12:58:24 +0900 (1c7c148) +++ vendor/nginx-1.11.3/src/event/ngx_event.h 2016-07-27 13:06:13 +0900 (27139ee) @@ -76,11 +76,6 @@ struct ngx_event_s { unsigned cancelable:1; -#if (NGX_WIN32) - /* setsockopt(SO_UPDATE_ACCEPT_CONTEXT) was successful */ - unsigned accept_context_updated:1; -#endif - #if (NGX_HAVE_KQUEUE) unsigned kq_vnode:1; @@ -372,6 +367,9 @@ extern ngx_uint_t ngx_use_epoll_rdhup; #define NGX_ONESHOT_EVENT EPOLLONESHOT #endif +#if (NGX_HAVE_EPOLLEXCLUSIVE) +#define NGX_EXCLUSIVE_EVENT EPOLLEXCLUSIVE +#endif #elif (NGX_HAVE_POLL) @@ -400,6 +398,11 @@ extern ngx_uint_t ngx_use_epoll_rdhup; #endif +#if (NGX_TEST_BUILD_EPOLL) +#define NGX_EXCLUSIVE_EVENT 0 +#endif + + #ifndef NGX_CLEAR_EVENT #define NGX_CLEAR_EVENT 0 /* dummy declaration */ #endif Renamed: vendor/nginx-1.11.3/src/event/ngx_event_accept.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/event/ngx_event_acceptex.c (+2 -2) 99% =================================================================== --- vendor/nginx-1.11.1/src/event/ngx_event_acceptex.c 2016-07-27 12:58:24 +0900 (e414fe4) +++ vendor/nginx-1.11.3/src/event/ngx_event_acceptex.c 2016-07-27 13:06:13 +0900 (1999faf) @@ -41,8 +41,8 @@ ngx_event_acceptex(ngx_event_t *rev) ngx_log_error(NGX_LOG_CRIT, c->log, ngx_socket_errno, "setsockopt(SO_UPDATE_ACCEPT_CONTEXT) failed for %V", &c->addr_text); - } else { - c->accept_context_updated = 1; + /* TODO: close socket */ + return; } ngx_getacceptexsockaddrs(c->buffer->pos, Renamed: vendor/nginx-1.11.3/src/event/ngx_event_connect.c (+50 -0) 84% =================================================================== --- vendor/nginx-1.11.1/src/event/ngx_event_connect.c 2016-07-27 12:58:24 +0900 (5de991e) +++ vendor/nginx-1.11.3/src/event/ngx_event_connect.c 2016-07-27 13:06:13 +0900 (30cb59a) @@ -21,6 +21,9 @@ ngx_int_t ngx_event_connect_peer(ngx_peer_connection_t *pc) { int rc, type; +#if (NGX_HAVE_IP_BIND_ADDRESS_NO_PORT || NGX_LINUX) + in_port_t port; +#endif ngx_int_t event; ngx_err_t err; ngx_uint_t level; @@ -87,6 +90,53 @@ ngx_event_connect_peer(ngx_peer_connection_t *pc) } #endif +#if (NGX_HAVE_IP_BIND_ADDRESS_NO_PORT || NGX_LINUX) + port = ngx_inet_get_port(pc->sockaddr); +#endif + +#if (NGX_HAVE_IP_BIND_ADDRESS_NO_PORT) + + if (pc->sockaddr->sa_family != AF_UNIX && port == 0) { + static int bind_address_no_port = 1; + + if (bind_address_no_port) { + if (setsockopt(s, IPPROTO_IP, IP_BIND_ADDRESS_NO_PORT, + (const void *) &bind_address_no_port, + sizeof(int)) == -1) + { + err = ngx_socket_errno; + + if (err != NGX_EOPNOTSUPP && err != NGX_ENOPROTOOPT) { + ngx_log_error(NGX_LOG_ALERT, pc->log, err, + "setsockopt(IP_BIND_ADDRESS_NO_PORT) " + "failed, ignored"); + + } else { + bind_address_no_port = 0; + } + } + } + } + +#endif + +#if (NGX_LINUX) + + if (pc->type == SOCK_DGRAM && port != 0) { + int reuse_addr = 1; + + if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, + (const void *) &reuse_addr, sizeof(int)) + == -1) + { + ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno, + "setsockopt(SO_REUSEADDR) failed"); + goto failed; + } + } + +#endif + if (bind(s, pc->local->sockaddr, pc->local->socklen) == -1) { ngx_log_error(NGX_LOG_CRIT, pc->log, ngx_socket_errno, "bind(%V) failed", &pc->local->name); Renamed: vendor/nginx-1.11.3/src/event/ngx_event_connect.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/event/ngx_event_connectex.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/event/ngx_event_openssl.c (+24 -0) 99% =================================================================== --- vendor/nginx-1.11.1/src/event/ngx_event_openssl.c 2016-07-27 12:58:24 +0900 (810c469) +++ vendor/nginx-1.11.3/src/event/ngx_event_openssl.c 2016-07-27 13:06:13 +0900 (bb9a900) @@ -592,6 +592,30 @@ ngx_ssl_password_callback(char *buf, int size, int rwflag, void *userdata) ngx_int_t +ngx_ssl_ciphers(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *ciphers, + ngx_uint_t prefer_server_ciphers) +{ + if (SSL_CTX_set_cipher_list(ssl->ctx, (char *) ciphers->data) == 0) { + ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0, + "SSL_CTX_set_cipher_list(\"%V\") failed", + ciphers); + return NGX_ERROR; + } + + if (prefer_server_ciphers) { + SSL_CTX_set_options(ssl->ctx, SSL_OP_CIPHER_SERVER_PREFERENCE); + } + +#if (OPENSSL_VERSION_NUMBER < 0x10100001L && !defined LIBRESSL_VERSION_NUMBER) + /* a temporary 512-bit RSA key is required for export versions of MSIE */ + SSL_CTX_set_tmp_rsa_callback(ssl->ctx, ngx_ssl_rsa512_key_callback); +#endif + + return NGX_OK; +} + + +ngx_int_t ngx_ssl_client_certificate(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *cert, ngx_int_t depth) { Renamed: vendor/nginx-1.11.3/src/event/ngx_event_openssl.h (+2 -0) 98% =================================================================== --- vendor/nginx-1.11.1/src/event/ngx_event_openssl.h 2016-07-27 12:58:24 +0900 (fc9ec05) +++ vendor/nginx-1.11.3/src/event/ngx_event_openssl.h 2016-07-27 13:06:13 +0900 (3367d10) @@ -144,6 +144,8 @@ ngx_int_t ngx_ssl_certificates(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_array_t *certs, ngx_array_t *keys, ngx_array_t *passwords); ngx_int_t ngx_ssl_certificate(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *cert, ngx_str_t *key, ngx_array_t *passwords); +ngx_int_t ngx_ssl_ciphers(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *ciphers, + ngx_uint_t prefer_server_ciphers); ngx_int_t ngx_ssl_client_certificate(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *cert, ngx_int_t depth); ngx_int_t ngx_ssl_trusted_certificate(ngx_conf_t *cf, ngx_ssl_t *ssl, Renamed: vendor/nginx-1.11.3/src/event/ngx_event_openssl_stapling.c (+1 -13) 99% =================================================================== --- vendor/nginx-1.11.1/src/event/ngx_event_openssl_stapling.c 2016-07-27 12:58:24 +0900 (49762eb) +++ vendor/nginx-1.11.3/src/event/ngx_event_openssl_stapling.c 2016-07-27 13:06:13 +0900 (cce8e9e) @@ -920,7 +920,6 @@ ngx_ssl_ocsp_resolve_handler(ngx_resolver_ctx_t *resolve) u_char *p; size_t len; - in_port_t port; socklen_t socklen; ngx_uint_t i; struct sockaddr *sockaddr; @@ -962,8 +961,6 @@ ngx_ssl_ocsp_resolve_handler(ngx_resolver_ctx_t *resolve) goto failed; } - port = htons(ctx->port); - for (i = 0; i < resolve->naddrs; i++) { socklen = resolve->addrs[i].socklen; @@ -974,16 +971,7 @@ ngx_ssl_ocsp_resolve_handler(ngx_resolver_ctx_t *resolve) } ngx_memcpy(sockaddr, resolve->addrs[i].sockaddr, socklen); - - switch (sockaddr->sa_family) { -#if (NGX_HAVE_INET6) - case AF_INET6: - ((struct sockaddr_in6 *) sockaddr)->sin6_port = port; - break; -#endif - default: /* AF_INET */ - ((struct sockaddr_in *) sockaddr)->sin_port = port; - } + ngx_inet_set_port(sockaddr, ctx->port); ctx->addrs[i].sockaddr = sockaddr; ctx->addrs[i].socklen = socklen; Renamed: vendor/nginx-1.11.3/src/event/ngx_event_pipe.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/event/ngx_event_pipe.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/event/ngx_event_posted.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/event/ngx_event_posted.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/event/ngx_event_timer.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/event/ngx_event_timer.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_access_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_addition_filter_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_auth_basic_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_auth_request_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_autoindex_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_browser_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_charset_filter_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_chunked_filter_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_dav_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_degradation_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_empty_gif_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_fastcgi_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_flv_module.c (+0 -0) 100% =================================================================== Copied: vendor/nginx-1.11.3/src/http/modules/ngx_http_geo_module.c (+0 -0) 100% =================================================================== Copied: vendor/nginx-1.11.3/src/http/modules/ngx_http_geoip_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_gunzip_filter_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_gzip_filter_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_gzip_static_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_headers_filter_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_image_filter_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_index_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_limit_conn_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_limit_req_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_log_module.c (+2 -2) 99% =================================================================== --- vendor/nginx-1.11.1/src/http/modules/ngx_http_log_module.c 2016-07-27 12:58:24 +0900 (df9424f) +++ vendor/nginx-1.11.3/src/http/modules/ngx_http_log_module.c 2016-07-27 13:06:13 +0900 (c42fb08) @@ -1000,7 +1000,7 @@ ngx_http_log_escape(u_char *dst, u_char *src, size_t size) n = 0; while (size) { - if (escape[*src >> 5] & (1 << (*src & 0x1f))) { + if (escape[*src >> 5] & (1U << (*src & 0x1f))) { n++; } src++; @@ -1011,7 +1011,7 @@ ngx_http_log_escape(u_char *dst, u_char *src, size_t size) } while (size) { - if (escape[*src >> 5] & (1 << (*src & 0x1f))) { + if (escape[*src >> 5] & (1U << (*src & 0x1f))) { *dst++ = '\\'; *dst++ = 'x'; *dst++ = hex[*src >> 4]; Copied: vendor/nginx-1.11.3/src/http/modules/ngx_http_map_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_memcached_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_mp4_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_not_modified_filter_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_proxy_module.c (+2 -6) 99% =================================================================== --- vendor/nginx-1.11.1/src/http/modules/ngx_http_proxy_module.c 2016-07-27 12:58:24 +0900 (5efee7b) +++ vendor/nginx-1.11.3/src/http/modules/ngx_http_proxy_module.c 2016-07-27 13:06:13 +0900 (4f49a52) @@ -4323,13 +4323,9 @@ ngx_http_proxy_set_ssl(ngx_conf_t *cf, ngx_http_proxy_loc_conf_t *plcf) } } - if (SSL_CTX_set_cipher_list(plcf->upstream.ssl->ctx, - (const char *) plcf->ssl_ciphers.data) - == 0) + if (ngx_ssl_ciphers(cf, plcf->upstream.ssl, &plcf->ssl_ciphers, 0) + != NGX_OK) { - ngx_ssl_error(NGX_LOG_EMERG, cf->log, 0, - "SSL_CTX_set_cipher_list(\"%V\") failed", - &plcf->ssl_ciphers); return NGX_ERROR; } Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_random_index_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_range_filter_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_realip_module.c (+2 -37) 93% =================================================================== --- vendor/nginx-1.11.1/src/http/modules/ngx_http_realip_module.c 2016-07-27 12:58:24 +0900 (fca81eb) +++ vendor/nginx-1.11.3/src/http/modules/ngx_http_realip_module.c 2016-07-27 13:06:13 +0900 (490a53d) @@ -138,10 +138,6 @@ ngx_http_realip_handler(ngx_http_request_t *r) ngx_list_part_t *part; ngx_table_elt_t *header; ngx_connection_t *c; - struct sockaddr_in *sin; -#if (NGX_HAVE_INET6) - struct sockaddr_in6 *sin6; -#endif ngx_http_realip_ctx_t *ctx; ngx_http_realip_loc_conf_t *rlcf; @@ -242,21 +238,7 @@ found: != NGX_DECLINED) { if (rlcf->type == NGX_HTTP_REALIP_PROXY) { - - switch (addr.sockaddr->sa_family) { - -#if (NGX_HAVE_INET6) - case AF_INET6: - sin6 = (struct sockaddr_in6 *) addr.sockaddr; - sin6->sin6_port = htons(c->proxy_protocol_port); - break; -#endif - - default: /* AF_INET */ - sin = (struct sockaddr_in *) addr.sockaddr; - sin->sin_port = htons(c->proxy_protocol_port); - break; - } + ngx_inet_set_port(addr.sockaddr, c->proxy_protocol_port); } return ngx_http_realip_set_addr(r, &addr); @@ -578,24 +560,7 @@ ngx_http_realip_remote_port_variable(ngx_http_request_t *r, return NGX_ERROR; } - switch (sa->sa_family) { - -#if (NGX_HAVE_INET6) - case AF_INET6: - port = ntohs(((struct sockaddr_in6 *) sa)->sin6_port); - break; -#endif - -#if (NGX_HAVE_UNIX_DOMAIN) - case AF_UNIX: - port = 0; - break; -#endif - - default: /* AF_INET */ - port = ntohs(((struct sockaddr_in *) sa)->sin_port); - break; - } + port = ngx_inet_get_port(sa); if (port > 0 && port < 65536) { v->len = ngx_sprintf(v->data, "%ui", port) - v->data; Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_referer_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_rewrite_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_scgi_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_secure_link_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_slice_filter_module.c (+0 -0) 100% =================================================================== Copied: vendor/nginx-1.11.3/src/http/modules/ngx_http_split_clients_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_ssi_filter_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_ssi_filter_module.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_ssl_module.c (+3 -15) 97% =================================================================== --- vendor/nginx-1.11.1/src/http/modules/ngx_http_ssl_module.c 2016-07-27 12:58:24 +0900 (7f23c86) +++ vendor/nginx-1.11.3/src/http/modules/ngx_http_ssl_module.c 2016-07-27 13:06:13 +0900 (d685ae9) @@ -689,13 +689,10 @@ ngx_http_ssl_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child) return NGX_CONF_ERROR; } - if (SSL_CTX_set_cipher_list(conf->ssl.ctx, - (const char *) conf->ciphers.data) - == 0) + if (ngx_ssl_ciphers(cf, &conf->ssl, &conf->ciphers, + conf->prefer_server_ciphers) + != NGX_OK) { - ngx_ssl_error(NGX_LOG_EMERG, cf->log, 0, - "SSL_CTX_set_cipher_list(\"%V\") failed", - &conf->ciphers); return NGX_CONF_ERROR; } @@ -730,15 +727,6 @@ ngx_http_ssl_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child) return NGX_CONF_ERROR; } - if (conf->prefer_server_ciphers) { - SSL_CTX_set_options(conf->ssl.ctx, SSL_OP_CIPHER_SERVER_PREFERENCE); - } - -#if (OPENSSL_VERSION_NUMBER < 0x10100001L && !defined LIBRESSL_VERSION_NUMBER) - /* a temporary 512-bit RSA key is required for export versions of MSIE */ - SSL_CTX_set_tmp_rsa_callback(conf->ssl.ctx, ngx_ssl_rsa512_key_callback); -#endif - if (ngx_ssl_dhparam(cf, &conf->ssl, &conf->dhparam) != NGX_OK) { return NGX_CONF_ERROR; } Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_ssl_module.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_static_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_stub_status_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_sub_filter_module.c (+89 -35) 92% =================================================================== --- vendor/nginx-1.11.1/src/http/modules/ngx_http_sub_filter_module.c 2016-07-27 12:58:24 +0900 (bb1c50b) +++ vendor/nginx-1.11.3/src/http/modules/ngx_http_sub_filter_module.c 2016-07-27 13:06:13 +0900 (e8d1d80) @@ -83,7 +83,9 @@ static ngx_uint_t ngx_http_sub_cmp_index; static ngx_int_t ngx_http_sub_output(ngx_http_request_t *r, ngx_http_sub_ctx_t *ctx); static ngx_int_t ngx_http_sub_parse(ngx_http_request_t *r, - ngx_http_sub_ctx_t *ctx); + ngx_http_sub_ctx_t *ctx, ngx_uint_t flush); +static ngx_int_t ngx_http_sub_match(ngx_http_sub_ctx_t *ctx, ngx_int_t start, + ngx_str_t *m); static char * ngx_http_sub_filter(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); @@ -285,6 +287,7 @@ ngx_http_sub_body_filter(ngx_http_request_t *r, ngx_chain_t *in) ngx_int_t rc; ngx_buf_t *b; ngx_str_t *sub; + ngx_uint_t flush, last; ngx_chain_t *cl; ngx_http_sub_ctx_t *ctx; ngx_http_sub_match_t *match; @@ -326,6 +329,9 @@ ngx_http_sub_body_filter(ngx_http_request_t *r, ngx_chain_t *in) ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, "http sub filter \"%V\"", &r->uri); + flush = 0; + last = 0; + while (ctx->in || ctx->buf) { if (ctx->buf == NULL) { @@ -334,11 +340,19 @@ ngx_http_sub_body_filter(ngx_http_request_t *r, ngx_chain_t *in) ctx->pos = ctx->buf->pos; } + if (ctx->buf->flush || ctx->buf->recycled) { + flush = 1; + } + + if (ctx->in == NULL) { + last = flush; + } + b = NULL; while (ctx->pos < ctx->buf->last) { - rc = ngx_http_sub_parse(r, ctx); + rc = ngx_http_sub_parse(r, ctx, last); ngx_log_debug4(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, "parse: %i, looked: \"%V\" %p-%p", @@ -590,9 +604,10 @@ ngx_http_sub_output(ngx_http_request_t *r, ngx_http_sub_ctx_t *ctx) static ngx_int_t -ngx_http_sub_parse(ngx_http_request_t *r, ngx_http_sub_ctx_t *ctx) +ngx_http_sub_parse(ngx_http_request_t *r, ngx_http_sub_ctx_t *ctx, + ngx_uint_t flush) { - u_char *p, *last, *pat, *pat_end, c; + u_char *p, c; ngx_str_t *m; ngx_int_t offset, start, next, end, len, rc; ngx_uint_t shift, i, j; @@ -602,6 +617,7 @@ ngx_http_sub_parse(ngx_http_request_t *r, ngx_http_sub_ctx_t *ctx) slcf = ngx_http_get_module_loc_conf(r, ngx_http_sub_filter_module); tables = ctx->tables; + match = ctx->matches->elts; offset = ctx->offset; end = ctx->buf->last - ctx->pos; @@ -628,7 +644,6 @@ ngx_http_sub_parse(ngx_http_request_t *r, ngx_http_sub_ctx_t *ctx) /* a potential match */ start = offset - (ngx_int_t) tables->min_match_len + 1; - match = ctx->matches->elts; i = ngx_max(tables->index[c], ctx->index); j = tables->index[c + 1]; @@ -641,41 +656,15 @@ ngx_http_sub_parse(ngx_http_request_t *r, ngx_http_sub_ctx_t *ctx) m = &match[i].match; - pat = m->data; - pat_end = m->data + m->len; - - if (start >= 0) { - p = ctx->pos + start; - - } else { - last = ctx->looked.data + ctx->looked.len; - p = last + start; - - while (p < last && pat < pat_end) { - if (ngx_tolower(*p) != *pat) { - goto next; - } - - p++; - pat++; - } - - p = ctx->pos; - } - - while (p < ctx->buf->last && pat < pat_end) { - if (ngx_tolower(*p) != *pat) { - goto next; - } + rc = ngx_http_sub_match(ctx, start, m); - p++; - pat++; + if (rc == NGX_DECLINED) { + goto next; } ctx->index = i; - if (pat != pat_end) { - /* partial match */ + if (rc == NGX_AGAIN) { goto again; } @@ -695,6 +684,26 @@ ngx_http_sub_parse(ngx_http_request_t *r, ngx_http_sub_ctx_t *ctx) ctx->index = 0; } + if (flush) { + for ( ;; ) { + start = offset - (ngx_int_t) tables->min_match_len + 1; + + if (start >= end) { + break; + } + + for (i = 0; i < ctx->matches->nelts; i++) { + m = &match[i].match; + + if (ngx_http_sub_match(ctx, start, m) == NGX_AGAIN) { + goto again; + } + } + + offset++; + } + } + again: ctx->offset = offset; @@ -731,6 +740,51 @@ done: } +static ngx_int_t +ngx_http_sub_match(ngx_http_sub_ctx_t *ctx, ngx_int_t start, ngx_str_t *m) +{ + u_char *p, *last, *pat, *pat_end; + + pat = m->data; + pat_end = m->data + m->len; + + if (start >= 0) { + p = ctx->pos + start; + + } else { + last = ctx->looked.data + ctx->looked.len; + p = last + start; + + while (p < last && pat < pat_end) { + if (ngx_tolower(*p) != *pat) { + return NGX_DECLINED; + } + + p++; + pat++; + } + + p = ctx->pos; + } + + while (p < ctx->buf->last && pat < pat_end) { + if (ngx_tolower(*p) != *pat) { + return NGX_DECLINED; + } + + p++; + pat++; + } + + if (pat != pat_end) { + /* partial match */ + return NGX_AGAIN; + } + + return NGX_OK; +} + + static char * ngx_http_sub_filter(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) { Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_upstream_hash_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_upstream_ip_hash_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_upstream_keepalive_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_upstream_least_conn_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_upstream_zone_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_userid_filter_module.c (+1 -1) 99% =================================================================== --- vendor/nginx-1.11.1/src/http/modules/ngx_http_userid_filter_module.c 2016-07-27 12:58:24 +0900 (1487c09) +++ vendor/nginx-1.11.3/src/http/modules/ngx_http_userid_filter_module.c 2016-07-27 13:06:13 +0900 (0dbacba) @@ -836,7 +836,7 @@ ngx_http_userid_init_worker(ngx_cycle_t *cycle) ngx_gettimeofday(&tp); /* use the most significant usec part that fits to 16 bits */ - start_value = ((tp.tv_usec / 20) << 16) | ngx_pid; + start_value = (((uint32_t) tp.tv_usec / 20) << 16) | ngx_pid; return NGX_OK; } Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_uwsgi_module.c (+2 -6) 99% =================================================================== --- vendor/nginx-1.11.1/src/http/modules/ngx_http_uwsgi_module.c 2016-07-27 12:58:24 +0900 (a03c6f6) +++ vendor/nginx-1.11.3/src/http/modules/ngx_http_uwsgi_module.c 2016-07-27 13:06:13 +0900 (7f916e8) @@ -2325,13 +2325,9 @@ ngx_http_uwsgi_set_ssl(ngx_conf_t *cf, ngx_http_uwsgi_loc_conf_t *uwcf) } } - if (SSL_CTX_set_cipher_list(uwcf->upstream.ssl->ctx, - (const char *) uwcf->ssl_ciphers.data) - == 0) + if (ngx_ssl_ciphers(cf, uwcf->upstream.ssl, &uwcf->ssl_ciphers, 0) + != NGX_OK) { - ngx_ssl_error(NGX_LOG_EMERG, cf->log, 0, - "SSL_CTX_set_cipher_list(\"%V\") failed", - &uwcf->ssl_ciphers); return NGX_ERROR; } Renamed: vendor/nginx-1.11.3/src/http/modules/ngx_http_xslt_filter_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/perl/Makefile.PL (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/perl/nginx.pm (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/perl/nginx.xs (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/perl/ngx_http_perl_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/perl/ngx_http_perl_module.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/modules/perl/typemap (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/ngx_http.c (+1 -25) 99% =================================================================== --- vendor/nginx-1.11.1/src/http/ngx_http.c 2016-07-27 12:58:24 +0900 (13d497c) +++ vendor/nginx-1.11.3/src/http/ngx_http.c 2016-07-27 13:06:13 +0900 (7a46b3e) @@ -1144,12 +1144,8 @@ ngx_http_add_listen(ngx_conf_t *cf, ngx_http_core_srv_conf_t *cscf, in_port_t p; ngx_uint_t i; struct sockaddr *sa; - struct sockaddr_in *sin; ngx_http_conf_port_t *port; ngx_http_core_main_conf_t *cmcf; -#if (NGX_HAVE_INET6) - struct sockaddr_in6 *sin6; -#endif cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module); @@ -1162,27 +1158,7 @@ ngx_http_add_listen(ngx_conf_t *cf, ngx_http_core_srv_conf_t *cscf, } sa = &lsopt->sockaddr.sockaddr; - - switch (sa->sa_family) { - -#if (NGX_HAVE_INET6) - case AF_INET6: - sin6 = &lsopt->sockaddr.sockaddr_in6; - p = sin6->sin6_port; - break; -#endif - -#if (NGX_HAVE_UNIX_DOMAIN) - case AF_UNIX: - p = 0; - break; -#endif - - default: /* AF_INET */ - sin = &lsopt->sockaddr.sockaddr_in; - p = sin->sin_port; - break; - } + p = ngx_inet_get_port(sa); port = cmcf->ports->elts; for (i = 0; i < cmcf->ports->nelts; i++) { Renamed: vendor/nginx-1.11.3/src/http/ngx_http.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/ngx_http_cache.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/ngx_http_config.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/ngx_http_copy_filter_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/ngx_http_core_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/ngx_http_core_module.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/ngx_http_file_cache.c (+5 -5) 99% =================================================================== --- vendor/nginx-1.11.1/src/http/ngx_http_file_cache.c 2016-07-27 12:58:24 +0900 (38b695e) +++ vendor/nginx-1.11.3/src/http/ngx_http_file_cache.c 2016-07-27 13:06:13 +0900 (4bf0f7f) @@ -101,7 +101,7 @@ ngx_http_file_cache_init(ngx_shm_zone_t *shm_zone, void *data) return NGX_ERROR; } - for (n = 0; n < 3; n++) { + for (n = 0; n < NGX_MAX_PATH_LEVEL; n++) { if (cache->path->level[n] != ocache->path->level[n]) { ngx_log_error(NGX_LOG_EMERG, shm_zone->shm.log, 0, "cache \"%V\" had previously different levels", @@ -2257,7 +2257,7 @@ ngx_http_file_cache_set_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) p = value[i].data + 7; last = value[i].data + value[i].len; - for (n = 0; n < 3 && p < last; n++) { + for (n = 0; n < NGX_MAX_PATH_LEVEL && p < last; n++) { if (*p > '0' && *p < '3') { @@ -2268,7 +2268,7 @@ ngx_http_file_cache_set_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) break; } - if (*p++ == ':' && n < 2 && p != last) { + if (*p++ == ':' && n < NGX_MAX_PATH_LEVEL - 1 && p < last) { continue; } @@ -2278,7 +2278,7 @@ ngx_http_file_cache_set_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) goto invalid_levels; } - if (cache->path->len < 10 + 3) { + if (cache->path->len < 10 + NGX_MAX_PATH_LEVEL) { continue; } @@ -2450,7 +2450,7 @@ ngx_http_file_cache_set_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) ngx_memcpy(p, "/temp", sizeof("/temp")); ngx_memcpy(&cache->temp_path->level, &cache->path->level, - 3 * sizeof(size_t)); + NGX_MAX_PATH_LEVEL * sizeof(size_t)); cache->temp_path->len = cache->path->len; cache->temp_path->conf_file = cf->conf_file->file.name.data; Renamed: vendor/nginx-1.11.3/src/http/ngx_http_header_filter_module.c (+1 -22) 96% =================================================================== --- vendor/nginx-1.11.1/src/http/ngx_http_header_filter_module.c 2016-07-27 12:58:24 +0900 (2cf1205) +++ vendor/nginx-1.11.3/src/http/ngx_http_header_filter_module.c 2016-07-27 13:06:13 +0900 (f000b2e) @@ -161,10 +161,6 @@ ngx_http_header_filter(ngx_http_request_t *r) ngx_connection_t *c; ngx_http_core_loc_conf_t *clcf; ngx_http_core_srv_conf_t *cscf; - struct sockaddr_in *sin; -#if (NGX_HAVE_INET6) - struct sockaddr_in6 *sin6; -#endif u_char addr[NGX_SOCKADDR_STRLEN]; if (r->header_sent) { @@ -333,24 +329,7 @@ ngx_http_header_filter(ngx_http_request_t *r) } } - switch (c->local_sockaddr->sa_family) { - -#if (NGX_HAVE_INET6) - case AF_INET6: - sin6 = (struct sockaddr_in6 *) c->local_sockaddr; - port = ntohs(sin6->sin6_port); - break; -#endif -#if (NGX_HAVE_UNIX_DOMAIN) - case AF_UNIX: - port = 0; - break; -#endif - default: /* AF_INET */ - sin = (struct sockaddr_in *) c->local_sockaddr; - port = ntohs(sin->sin_port); - break; - } + port = ngx_inet_get_port(c->local_sockaddr); len += sizeof("Location: https://") - 1 + host.len Renamed: vendor/nginx-1.11.3/src/http/ngx_http_parse.c (+11 -11) 98% =================================================================== --- vendor/nginx-1.11.1/src/http/ngx_http_parse.c 2016-07-27 12:58:24 +0900 (59aa1fe) +++ vendor/nginx-1.11.3/src/http/ngx_http_parse.c 2016-07-27 13:06:13 +0900 (bd6c9c9) @@ -481,7 +481,7 @@ ngx_http_parse_request_line(ngx_http_request_t *r, ngx_buf_t *b) /* check "/.", "//", "%", and "\" (Win32) in URI */ case sw_after_slash_in_uri: - if (usual[ch >> 5] & (1 << (ch & 0x1f))) { + if (usual[ch >> 5] & (1U << (ch & 0x1f))) { state = sw_check_uri; break; } @@ -540,7 +540,7 @@ ngx_http_parse_request_line(ngx_http_request_t *r, ngx_buf_t *b) /* check "/", "%" and "\" (Win32) in URI */ case sw_check_uri: - if (usual[ch >> 5] & (1 << (ch & 0x1f))) { + if (usual[ch >> 5] & (1U << (ch & 0x1f))) { break; } @@ -626,7 +626,7 @@ ngx_http_parse_request_line(ngx_http_request_t *r, ngx_buf_t *b) /* URI */ case sw_uri: - if (usual[ch >> 5] & (1 << (ch & 0x1f))) { + if (usual[ch >> 5] & (1U << (ch & 0x1f))) { break; } @@ -1131,7 +1131,7 @@ ngx_http_parse_uri(ngx_http_request_t *r) /* check "/.", "//", "%", and "\" (Win32) in URI */ case sw_after_slash_in_uri: - if (usual[ch >> 5] & (1 << (ch & 0x1f))) { + if (usual[ch >> 5] & (1U << (ch & 0x1f))) { state = sw_check_uri; break; } @@ -1179,7 +1179,7 @@ ngx_http_parse_uri(ngx_http_request_t *r) /* check "/", "%" and "\" (Win32) in URI */ case sw_check_uri: - if (usual[ch >> 5] & (1 << (ch & 0x1f))) { + if (usual[ch >> 5] & (1U << (ch & 0x1f))) { break; } @@ -1228,7 +1228,7 @@ ngx_http_parse_uri(ngx_http_request_t *r) /* URI */ case sw_uri: - if (usual[ch >> 5] & (1 << (ch & 0x1f))) { + if (usual[ch >> 5] & (1U << (ch & 0x1f))) { break; } @@ -1289,7 +1289,7 @@ ngx_http_parse_complex_uri(ngx_http_request_t *r, ngx_uint_t merge_slashes) case sw_usual: - if (usual[ch >> 5] & (1 << (ch & 0x1f))) { + if (usual[ch >> 5] & (1U << (ch & 0x1f))) { *u++ = ch; ch = *p++; break; @@ -1358,7 +1358,7 @@ ngx_http_parse_complex_uri(ngx_http_request_t *r, ngx_uint_t merge_slashes) case sw_slash: - if (usual[ch >> 5] & (1 << (ch & 0x1f))) { + if (usual[ch >> 5] & (1U << (ch & 0x1f))) { state = sw_usual; *u++ = ch; ch = *p++; @@ -1401,7 +1401,7 @@ ngx_http_parse_complex_uri(ngx_http_request_t *r, ngx_uint_t merge_slashes) case sw_dot: - if (usual[ch >> 5] & (1 << (ch & 0x1f))) { + if (usual[ch >> 5] & (1U << (ch & 0x1f))) { state = sw_usual; *u++ = ch; ch = *p++; @@ -1442,7 +1442,7 @@ ngx_http_parse_complex_uri(ngx_http_request_t *r, ngx_uint_t merge_slashes) case sw_dot_dot: - if (usual[ch >> 5] & (1 << (ch & 0x1f))) { + if (usual[ch >> 5] & (1U << (ch & 0x1f))) { state = sw_usual; *u++ = ch; ch = *p++; @@ -1836,7 +1836,7 @@ ngx_http_parse_unsafe_uri(ngx_http_request_t *r, ngx_str_t *uri, continue; } - if (usual[ch >> 5] & (1 << (ch & 0x1f))) { + if (usual[ch >> 5] & (1U << (ch & 0x1f))) { continue; } Renamed: vendor/nginx-1.11.3/src/http/ngx_http_postpone_filter_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/ngx_http_request.c (+1 -1) 99% =================================================================== --- vendor/nginx-1.11.1/src/http/ngx_http_request.c 2016-07-27 12:58:24 +0900 (31e3539) +++ vendor/nginx-1.11.3/src/http/ngx_http_request.c 2016-07-27 13:06:13 +0900 (6ff7903) @@ -2068,7 +2068,7 @@ ngx_http_set_virtual_server(ngx_http_request_t *r, ngx_str_t *host) if (sscf->verify) { ngx_log_error(NGX_LOG_INFO, r->connection->log, 0, "client attempted to request the server name " - "different from that one was negotiated"); + "different from the one that was negotiated"); ngx_http_finalize_request(r, NGX_HTTP_MISDIRECTED_REQUEST); return NGX_ERROR; } Renamed: vendor/nginx-1.11.3/src/http/ngx_http_request.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/ngx_http_request_body.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/ngx_http_script.c (+8 -6) 99% =================================================================== --- vendor/nginx-1.11.1/src/http/ngx_http_script.c 2016-07-27 12:58:24 +0900 (bff9525) +++ vendor/nginx-1.11.3/src/http/ngx_http_script.c 2016-07-27 13:06:13 +0900 (c2b1658) @@ -350,11 +350,9 @@ ngx_http_script_compile(ngx_http_script_compile_t *sc) goto invalid_variable; } -#if (NGX_PCRE) - { - ngx_uint_t n; - if (sc->source->data[i] >= '1' && sc->source->data[i] <= '9') { +#if (NGX_PCRE) + ngx_uint_t n; n = sc->source->data[i] - '0'; @@ -371,9 +369,13 @@ ngx_http_script_compile(ngx_http_script_compile_t *sc) i++; continue; - } - } +#else + ngx_conf_log_error(NGX_LOG_EMERG, sc->cf, 0, + "using variable \"$%c\" requires " + "PCRE library", sc->source->data[i]); + return NGX_ERROR; #endif + } if (sc->source->data[i] == '{') { bracket = 1; Renamed: vendor/nginx-1.11.3/src/http/ngx_http_script.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/ngx_http_special_response.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/ngx_http_upstream.c (+3 -2) 99% =================================================================== --- vendor/nginx-1.11.1/src/http/ngx_http_upstream.c 2016-07-27 12:58:24 +0900 (89b2160) +++ vendor/nginx-1.11.3/src/http/ngx_http_upstream.c 2016-07-27 13:06:13 +0900 (0f6b3ae) @@ -5828,7 +5828,8 @@ ngx_http_upstream_bind_set_slot(ngx_conf_t *cf, ngx_command_t *cmd, return NGX_CONF_ERROR; } - rc = ngx_parse_addr(cf->pool, local->addr, value[1].data, value[1].len); + rc = ngx_parse_addr_port(cf->pool, local->addr, value[1].data, + value[1].len); switch (rc) { case NGX_OK: @@ -5900,7 +5901,7 @@ ngx_http_upstream_set_local(ngx_http_request_t *r, ngx_http_upstream_t *u, return NGX_ERROR; } - rc = ngx_parse_addr(r->pool, addr, val.data, val.len); + rc = ngx_parse_addr_port(r->pool, addr, val.data, val.len); if (rc == NGX_ERROR) { return NGX_ERROR; } Renamed: vendor/nginx-1.11.3/src/http/ngx_http_upstream.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/ngx_http_upstream_round_robin.c (+1 -10) 98% =================================================================== --- vendor/nginx-1.11.1/src/http/ngx_http_upstream_round_robin.c 2016-07-27 12:58:24 +0900 (8342dc8) +++ vendor/nginx-1.11.3/src/http/ngx_http_upstream_round_robin.c 2016-07-27 13:06:13 +0900 (8479c42) @@ -354,16 +354,7 @@ ngx_http_upstream_create_round_robin_peer(ngx_http_request_t *r, } ngx_memcpy(sockaddr, ur->addrs[i].sockaddr, socklen); - - switch (sockaddr->sa_family) { -#if (NGX_HAVE_INET6) - case AF_INET6: - ((struct sockaddr_in6 *) sockaddr)->sin6_port = htons(ur->port); - break; -#endif - default: /* AF_INET */ - ((struct sockaddr_in *) sockaddr)->sin_port = htons(ur->port); - } + ngx_inet_set_port(sockaddr, ur->port); p = ngx_pnalloc(r->pool, NGX_SOCKADDR_STRLEN); if (p == NULL) { Renamed: vendor/nginx-1.11.3/src/http/ngx_http_upstream_round_robin.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/ngx_http_variables.c (+4 -50) 98% =================================================================== --- vendor/nginx-1.11.1/src/http/ngx_http_variables.c 2016-07-27 12:58:24 +0900 (d310d32) +++ vendor/nginx-1.11.3/src/http/ngx_http_variables.c 2016-07-27 13:06:13 +0900 (7e65b2e) @@ -1201,11 +1201,7 @@ static ngx_int_t ngx_http_variable_remote_port(ngx_http_request_t *r, ngx_http_variable_value_t *v, uintptr_t data) { - ngx_uint_t port; - struct sockaddr_in *sin; -#if (NGX_HAVE_INET6) - struct sockaddr_in6 *sin6; -#endif + ngx_uint_t port; v->len = 0; v->valid = 1; @@ -1217,26 +1213,7 @@ ngx_http_variable_remote_port(ngx_http_request_t *r, return NGX_ERROR; } - switch (r->connection->sockaddr->sa_family) { - -#if (NGX_HAVE_INET6) - case AF_INET6: - sin6 = (struct sockaddr_in6 *) r->connection->sockaddr; - port = ntohs(sin6->sin6_port); - break; -#endif - -#if (NGX_HAVE_UNIX_DOMAIN) - case AF_UNIX: - port = 0; - break; -#endif - - default: /* AF_INET */ - sin = (struct sockaddr_in *) r->connection->sockaddr; - port = ntohs(sin->sin_port); - break; - } + port = ngx_inet_get_port(r->connection->sockaddr); if (port > 0 && port < 65536) { v->len = ngx_sprintf(v->data, "%ui", port) - v->data; @@ -1321,11 +1298,7 @@ static ngx_int_t ngx_http_variable_server_port(ngx_http_request_t *r, ngx_http_variable_value_t *v, uintptr_t data) { - ngx_uint_t port; - struct sockaddr_in *sin; -#if (NGX_HAVE_INET6) - struct sockaddr_in6 *sin6; -#endif + ngx_uint_t port; v->len = 0; v->valid = 1; @@ -1341,26 +1314,7 @@ ngx_http_variable_server_port(ngx_http_request_t *r, return NGX_ERROR; } - switch (r->connection->local_sockaddr->sa_family) { - -#if (NGX_HAVE_INET6) - case AF_INET6: - sin6 = (struct sockaddr_in6 *) r->connection->local_sockaddr; - port = ntohs(sin6->sin6_port); - break; -#endif - -#if (NGX_HAVE_UNIX_DOMAIN) - case AF_UNIX: - port = 0; - break; -#endif - - default: /* AF_INET */ - sin = (struct sockaddr_in *) r->connection->local_sockaddr; - port = ntohs(sin->sin_port); - break; - } + port = ngx_inet_get_port(r->connection->local_sockaddr); if (port > 0 && port < 65536) { v->len = ngx_sprintf(v->data, "%ui", port) - v->data; Renamed: vendor/nginx-1.11.3/src/http/ngx_http_variables.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/ngx_http_write_filter_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/v2/ngx_http_v2.c (+49 -19) 99% =================================================================== --- vendor/nginx-1.11.1/src/http/v2/ngx_http_v2.c 2016-07-27 12:58:24 +0900 (208f0f3) +++ vendor/nginx-1.11.3/src/http/v2/ngx_http_v2.c 2016-07-27 13:06:13 +0900 (d0cd2ab) @@ -410,6 +410,16 @@ ngx_http_v2_write_handler(ngx_event_t *wev) ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0, "http2 write handler"); + if (h2c->last_out == NULL && !c->buffered) { + + if (wev->timer_set) { + ngx_del_timer(wev); + } + + ngx_http_v2_handle_connection(h2c); + return; + } + h2c->blocked = 1; rc = ngx_http_v2_send_output_queue(h2c); @@ -468,7 +478,7 @@ ngx_http_v2_send_output_queue(ngx_http_v2_connection_t *h2c) wev = c->write; if (!wev->ready) { - return NGX_OK; + return NGX_AGAIN; } cl = NULL; @@ -539,15 +549,6 @@ ngx_http_v2_send_output_queue(ngx_http_v2_connection_t *h2c) c->tcp_nodelay = NGX_TCP_NODELAY_SET; } - if (cl) { - ngx_add_timer(wev, clcf->send_timeout); - - } else { - if (wev->timer_set) { - ngx_del_timer(wev); - } - } - for ( /* void */ ; out; out = fn) { fn = out->next; @@ -572,6 +573,15 @@ ngx_http_v2_send_output_queue(ngx_http_v2_connection_t *h2c) h2c->last_out = frame; + if (!wev->ready) { + ngx_add_timer(wev, clcf->send_timeout); + return NGX_AGAIN; + } + + if (wev->timer_set) { + ngx_del_timer(wev); + } + return NGX_OK; error: @@ -589,7 +599,8 @@ error: static void ngx_http_v2_handle_connection(ngx_http_v2_connection_t *h2c) { - ngx_connection_t *c; + ngx_int_t rc; + ngx_connection_t *c; ngx_http_v2_srv_conf_t *h2scf; if (h2c->last_out || h2c->processing) { @@ -604,7 +615,22 @@ ngx_http_v2_handle_connection(ngx_http_v2_connection_t *h2c) } if (c->buffered) { - return; + h2c->blocked = 1; + + rc = ngx_http_v2_send_output_queue(h2c); + + h2c->blocked = 0; + + if (rc == NGX_ERROR) { + ngx_http_close_connection(c); + return; + } + + if (rc == NGX_AGAIN) { + return; + } + + /* rc == NGX_OK */ } h2scf = ngx_http_get_module_srv_conf(h2c->http_connection->conf_ctx, @@ -615,7 +641,7 @@ ngx_http_v2_handle_connection(ngx_http_v2_connection_t *h2c) } if (ngx_terminate || ngx_exiting) { - ngx_http_close_connection(c); + ngx_http_v2_finalize_connection(h2c, NGX_HTTP_V2_NO_ERROR); return; } @@ -3424,7 +3450,9 @@ ngx_http_v2_run_request(ngx_http_request_t *r) return; } - r->headers_in.chunked = (r->headers_in.content_length_n == -1); + if (r->headers_in.content_length_n == -1 && !r->stream->in_closed) { + r->headers_in.chunked = 1; + } ngx_http_process_request(r); } @@ -3638,7 +3666,7 @@ ngx_http_v2_process_request_body(ngx_http_request_t *r, u_char *pos, rb->buf = NULL; } - if (r->headers_in.content_length_n == -1) { + if (r->headers_in.chunked) { r->headers_in.content_length_n = rb->received; } @@ -3890,6 +3918,10 @@ ngx_http_v2_terminate_stream(ngx_http_v2_connection_t *h2c, ngx_event_t *rev; ngx_connection_t *fc; + if (stream->rst_sent) { + return NGX_OK; + } + if (ngx_http_v2_send_rst_stream(h2c, stream->node->id, status) == NGX_ERROR) { @@ -3897,6 +3929,7 @@ ngx_http_v2_terminate_stream(ngx_http_v2_connection_t *h2c, } stream->rst_sent = 1; + stream->skip_data = 1; fc = stream->request->connection; fc->error = 1; @@ -3928,6 +3961,7 @@ ngx_http_v2_close_stream(ngx_http_v2_stream_t *stream, ngx_int_t rc) if (stream->queued) { fc->write->handler = ngx_http_v2_close_stream_handler; + fc->read->handler = ngx_http_empty_handler; return; } @@ -4169,10 +4203,6 @@ ngx_http_v2_finalize_connection(ngx_http_v2_connection_t *h2c, c->error = 1; - if (h2c->state.stream) { - ngx_http_v2_close_stream(h2c->state.stream, NGX_HTTP_BAD_REQUEST); - } - if (!h2c->processing) { ngx_http_close_connection(c); return; Renamed: vendor/nginx-1.11.3/src/http/v2/ngx_http_v2.h (+1 -1) 99% =================================================================== --- vendor/nginx-1.11.1/src/http/v2/ngx_http_v2.h 2016-07-27 12:58:24 +0900 (9e738aa) +++ vendor/nginx-1.11.3/src/http/v2/ngx_http_v2.h 2016-07-27 13:06:13 +0900 (d712d38) @@ -298,7 +298,7 @@ size_t ngx_http_v2_huff_encode(u_char *src, size_t len, u_char *dst, #define ngx_http_v2_parse_uint16(p) ((p)[0] << 8 | (p)[1]) #define ngx_http_v2_parse_uint32(p) \ - ((p)[0] << 24 | (p)[1] << 16 | (p)[2] << 8 | (p)[3]) + ((uint32_t) (p)[0] << 24 | (p)[1] << 16 | (p)[2] << 8 | (p)[3]) #endif Renamed: vendor/nginx-1.11.3/src/http/v2/ngx_http_v2_filter_module.c (+19 -36) 97% =================================================================== --- vendor/nginx-1.11.1/src/http/v2/ngx_http_v2_filter_module.c 2016-07-27 12:58:24 +0900 (caa835d) +++ vendor/nginx-1.11.3/src/http/v2/ngx_http_v2_filter_module.c 2016-07-27 13:06:13 +0900 (4ab7791) @@ -137,10 +137,6 @@ ngx_http_v2_header_filter(ngx_http_request_t *r) ngx_http_v2_out_frame_t *frame; ngx_http_core_loc_conf_t *clcf; ngx_http_core_srv_conf_t *cscf; - struct sockaddr_in *sin; -#if (NGX_HAVE_INET6) - struct sockaddr_in6 *sin6; -#endif u_char addr[NGX_SOCKADDR_STRLEN]; static const u_char nginx[5] = "\x84\xaa\x63\x55\xe7"; @@ -169,6 +165,12 @@ ngx_http_v2_header_filter(ngx_http_request_t *r) return NGX_OK; } + fc = r->connection; + + if (fc->error) { + return NGX_ERROR; + } + if (r->method == NGX_HTTP_HEAD) { r->header_only = 1; } @@ -259,8 +261,6 @@ ngx_http_v2_header_filter(ngx_http_request_t *r) len += 1 + ngx_http_v2_literal_size("Wed, 31 Dec 1986 18:00:00 GMT"); } - fc = r->connection; - if (r->headers_out.location && r->headers_out.location->value.len) { if (r->headers_out.location->value.data[0] == '/') { @@ -280,24 +280,7 @@ ngx_http_v2_header_filter(ngx_http_request_t *r) } } - switch (fc->local_sockaddr->sa_family) { - -#if (NGX_HAVE_INET6) - case AF_INET6: - sin6 = (struct sockaddr_in6 *) fc->local_sockaddr; - port = ntohs(sin6->sin6_port); - break; -#endif -#if (NGX_HAVE_UNIX_DOMAIN) - case AF_UNIX: - port = 0; - break; -#endif - default: /* AF_INET */ - sin = (struct sockaddr_in *) fc->local_sockaddr; - port = ntohs(sin->sin_port); - break; - } + port = ngx_inet_get_port(fc->local_sockaddr); location.len = sizeof("https://") - 1 + host.len + r->headers_out.location->value.len; @@ -995,12 +978,11 @@ static ngx_http_v2_out_frame_t * ngx_http_v2_filter_get_data_frame(ngx_http_v2_stream_t *stream, size_t len, ngx_chain_t *first, ngx_chain_t *last) { - u_char flags; - ngx_buf_t *buf; - ngx_chain_t *cl; + u_char flags; + ngx_buf_t *buf; + ngx_chain_t *cl; ngx_http_v2_out_frame_t *frame; - frame = stream->free_frames; if (frame) { @@ -1028,7 +1010,7 @@ ngx_http_v2_filter_get_data_frame(ngx_http_v2_stream_t *stream, buf = cl->buf; - if (!buf->start) { + if (buf->start == NULL) { buf->start = ngx_palloc(stream->request->pool, NGX_HTTP_V2_FRAME_HEADER_SIZE); if (buf->start == NULL) { @@ -1203,7 +1185,6 @@ ngx_http_v2_data_frame_handler(ngx_http_v2_connection_t *h2c, ngx_http_v2_stream_t *stream; stream = frame->stream; - cl = frame->first; if (cl->buf->tag == (ngx_buf_tag_t) &ngx_http_v2_module) { @@ -1313,18 +1294,20 @@ static ngx_inline void ngx_http_v2_handle_stream(ngx_http_v2_connection_t *h2c, ngx_http_v2_stream_t *stream) { - ngx_event_t *wev; + ngx_connection_t *fc; - if (stream->handled || stream->blocked || stream->exhausted) { + if (stream->handled || stream->blocked) { return; } - wev = stream->request->connection->write; + fc = stream->request->connection; - if (!wev->delayed) { - stream->handled = 1; - ngx_queue_insert_tail(&h2c->posted, &stream->queue); + if (!fc->error && (stream->exhausted || fc->write->delayed)) { + return; } + + stream->handled = 1; + ngx_queue_insert_tail(&h2c->posted, &stream->queue); } Renamed: vendor/nginx-1.11.3/src/http/v2/ngx_http_v2_huff_decode.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/v2/ngx_http_v2_huff_encode.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/v2/ngx_http_v2_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/v2/ngx_http_v2_module.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/http/v2/ngx_http_v2_table.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/mail/ngx_mail.c (+1 -25) 96% =================================================================== --- vendor/nginx-1.11.1/src/mail/ngx_mail.c 2016-07-27 12:58:24 +0900 (78cbe01) +++ vendor/nginx-1.11.3/src/mail/ngx_mail.c 2016-07-27 13:06:13 +0900 (e5a77b0) @@ -228,35 +228,11 @@ ngx_mail_add_ports(ngx_conf_t *cf, ngx_array_t *ports, in_port_t p; ngx_uint_t i; struct sockaddr *sa; - struct sockaddr_in *sin; ngx_mail_conf_port_t *port; ngx_mail_conf_addr_t *addr; -#if (NGX_HAVE_INET6) - struct sockaddr_in6 *sin6; -#endif sa = &listen->sockaddr.sockaddr; - - switch (sa->sa_family) { - -#if (NGX_HAVE_INET6) - case AF_INET6: - sin6 = &listen->sockaddr.sockaddr_in6; - p = sin6->sin6_port; - break; -#endif - -#if (NGX_HAVE_UNIX_DOMAIN) - case AF_UNIX: - p = 0; - break; -#endif - - default: /* AF_INET */ - sin = &listen->sockaddr.sockaddr_in; - p = sin->sin_port; - break; - } + p = ngx_inet_get_port(sa); port = ports->elts; for (i = 0; i < ports->nelts; i++) { Renamed: vendor/nginx-1.11.3/src/mail/ngx_mail.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/mail/ngx_mail_auth_http_module.c (+6 -23) 98% =================================================================== --- vendor/nginx-1.11.1/src/mail/ngx_mail_auth_http_module.c 2016-07-27 12:58:24 +0900 (39f9b17) +++ vendor/nginx-1.11.3/src/mail/ngx_mail_auth_http_module.c 2016-07-27 13:06:13 +0900 (a94434a) @@ -462,15 +462,11 @@ static void ngx_mail_auth_http_process_headers(ngx_mail_session_t *s, ngx_mail_auth_http_ctx_t *ctx) { - u_char *p; - time_t timer; - size_t len, size; - ngx_int_t rc, port, n; - ngx_addr_t *peer; - struct sockaddr_in *sin; -#if (NGX_HAVE_INET6) - struct sockaddr_in6 *sin6; -#endif + u_char *p; + time_t timer; + size_t len, size; + ngx_int_t rc, port, n; + ngx_addr_t *peer; ngx_log_debug0(NGX_LOG_DEBUG_MAIL, s->connection->log, 0, "mail auth http process headers"); @@ -813,20 +809,7 @@ ngx_mail_auth_http_process_headers(ngx_mail_session_t *s, return; } - switch (peer->sockaddr->sa_family) { - -#if (NGX_HAVE_INET6) - case AF_INET6: - sin6 = (struct sockaddr_in6 *) peer->sockaddr; - sin6->sin6_port = htons((in_port_t) port); - break; -#endif - - default: /* AF_INET */ - sin = (struct sockaddr_in *) peer->sockaddr; - sin->sin_port = htons((in_port_t) port); - break; - } + ngx_inet_set_port(peer->sockaddr, (in_port_t) port); len = ctx->addr.len + 1 + ctx->port.len; Renamed: vendor/nginx-1.11.3/src/mail/ngx_mail_core_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/mail/ngx_mail_handler.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/mail/ngx_mail_imap_handler.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/mail/ngx_mail_imap_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/mail/ngx_mail_imap_module.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/mail/ngx_mail_parse.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/mail/ngx_mail_pop3_handler.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/mail/ngx_mail_pop3_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/mail/ngx_mail_pop3_module.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/mail/ngx_mail_proxy_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/mail/ngx_mail_smtp_handler.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/mail/ngx_mail_smtp_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/mail/ngx_mail_smtp_module.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/mail/ngx_mail_ssl_module.c (+3 -14) 97% =================================================================== --- vendor/nginx-1.11.1/src/mail/ngx_mail_ssl_module.c 2016-07-27 12:58:24 +0900 (83cffb8) +++ vendor/nginx-1.11.3/src/mail/ngx_mail_ssl_module.c 2016-07-27 13:06:13 +0900 (11e428c) @@ -422,24 +422,13 @@ ngx_mail_ssl_merge_conf(ngx_conf_t *cf, void *parent, void *child) } } - if (SSL_CTX_set_cipher_list(conf->ssl.ctx, - (const char *) conf->ciphers.data) - == 0) + if (ngx_ssl_ciphers(cf, &conf->ssl, &conf->ciphers, + conf->prefer_server_ciphers) + != NGX_OK) { - ngx_ssl_error(NGX_LOG_EMERG, cf->log, 0, - "SSL_CTX_set_cipher_list(\"%V\") failed", - &conf->ciphers); return NGX_CONF_ERROR; } - if (conf->prefer_server_ciphers) { - SSL_CTX_set_options(conf->ssl.ctx, SSL_OP_CIPHER_SERVER_PREFERENCE); - } - -#if (OPENSSL_VERSION_NUMBER < 0x10100001L && !defined LIBRESSL_VERSION_NUMBER) - SSL_CTX_set_tmp_rsa_callback(conf->ssl.ctx, ngx_ssl_rsa512_key_callback); -#endif - if (ngx_ssl_dhparam(cf, &conf->ssl, &conf->dhparam) != NGX_OK) { return NGX_CONF_ERROR; } Renamed: vendor/nginx-1.11.3/src/mail/ngx_mail_ssl_module.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/misc/ngx_cpp_test_module.cpp (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/misc/ngx_google_perftools_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_alloc.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_alloc.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_atomic.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_channel.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_channel.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_daemon.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_darwin.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_darwin_config.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_darwin_init.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_darwin_sendfile_chain.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_dlopen.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_dlopen.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_errno.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_errno.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_file_aio_read.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_files.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_files.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_freebsd.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_freebsd_config.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_freebsd_init.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_freebsd_sendfile_chain.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_gcc_atomic_amd64.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_gcc_atomic_ppc.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_gcc_atomic_sparc64.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_gcc_atomic_x86.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_linux.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_linux_aio_read.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_linux_config.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_linux_init.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_linux_sendfile_chain.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_os.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_posix_config.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_posix_init.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_process.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_process.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_process_cycle.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_process_cycle.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_readv_chain.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_recv.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_send.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_setaffinity.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_setaffinity.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_setproctitle.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_setproctitle.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_shmem.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_shmem.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_socket.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_socket.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_solaris.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_solaris_config.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_solaris_init.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_solaris_sendfilev_chain.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_sunpro_amd64.il (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_sunpro_atomic_sparc64.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_sunpro_sparc64.il (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_sunpro_x86.il (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_thread.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_thread_cond.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_thread_id.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_thread_mutex.c (+1 -1) 98% =================================================================== --- vendor/nginx-1.11.1/src/os/unix/ngx_thread_mutex.c 2016-07-27 12:58:24 +0900 (6e8385e) +++ vendor/nginx-1.11.3/src/os/unix/ngx_thread_mutex.c 2016-07-27 13:06:13 +0900 (a0ef693) @@ -49,7 +49,7 @@ * for each mutex from 10 to 100 based on spin count taken * previously. * FreeBSD: Deadlock detection. The default spin count is 2000. - * It can be overriden using LIBPTHREAD_SPINLOOPS environment + * It can be overridden using LIBPTHREAD_SPINLOOPS environment * variable or by pthread_mutex_setspinloops_np(). If a lock * is still busy, sched_yield() can be called on both UP and * SMP systems. The default yield loop count is zero, but Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_time.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_time.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_udp_recv.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_udp_send.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_user.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_user.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/unix/ngx_writev_chain.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/nginx.ico (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/nginx.rc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/nginx_icon16.xpm (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/nginx_icon32.xpm (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/nginx_icon48.xpm (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_alloc.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_alloc.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_atomic.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_dlopen.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_dlopen.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_errno.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_errno.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_event_log.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_files.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_files.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_os.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_process.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_process.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_process_cycle.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_process_cycle.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_service.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_shmem.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_shmem.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_socket.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_socket.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_stat.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_thread.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_thread.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_time.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_time.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_udp_wsarecv.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_user.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_user.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_win32_config.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_win32_init.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_wsarecv.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_wsarecv_chain.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_wsasend.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/os/win32/ngx_wsasend_chain.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/stream/ngx_stream.c (+22 -27) 96% =================================================================== --- vendor/nginx-1.11.1/src/stream/ngx_stream.c 2016-07-27 12:58:24 +0900 (055622d) +++ vendor/nginx-1.11.3/src/stream/ngx_stream.c 2016-07-27 13:06:13 +0900 (c195171) @@ -143,11 +143,26 @@ ngx_stream_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) } - /* parse inside the stream{} block */ - pcf = *cf; cf->ctx = ctx; + for (m = 0; cf->cycle->modules[m]; m++) { + if (cf->cycle->modules[m]->type != NGX_STREAM_MODULE) { + continue; + } + + module = cf->cycle->modules[m]->ctx; + + if (module->preconfiguration) { + if (module->preconfiguration(cf) != NGX_OK) { + return NGX_CONF_ERROR; + } + } + } + + + /* parse inside the stream{} block */ + cf->module_type = NGX_STREAM_MODULE; cf->cmd_type = NGX_STREAM_MAIN_CONF; rv = ngx_conf_parse(cf, NULL); @@ -215,6 +230,10 @@ ngx_stream_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) } } + if (ngx_stream_variables_init_vars(cf) != NGX_OK) { + return NGX_CONF_ERROR; + } + *cf = pcf; @@ -243,35 +262,11 @@ ngx_stream_add_ports(ngx_conf_t *cf, ngx_array_t *ports, in_port_t p; ngx_uint_t i; struct sockaddr *sa; - struct sockaddr_in *sin; ngx_stream_conf_port_t *port; ngx_stream_conf_addr_t *addr; -#if (NGX_HAVE_INET6) - struct sockaddr_in6 *sin6; -#endif sa = &listen->sockaddr.sockaddr; - - switch (sa->sa_family) { - -#if (NGX_HAVE_INET6) - case AF_INET6: - sin6 = &listen->sockaddr.sockaddr_in6; - p = sin6->sin6_port; - break; -#endif - -#if (NGX_HAVE_UNIX_DOMAIN) - case AF_UNIX: - p = 0; - break; -#endif - - default: /* AF_INET */ - sin = &listen->sockaddr.sockaddr_in; - p = sin->sin_port; - break; - } + p = ngx_inet_get_port(sa); port = ports->elts; for (i = 0; i < ports->nelts; i++) { Added: vendor/nginx-1.11.3/src/stream/ngx_stream.h (+230 -0) 100644 =================================================================== --- /dev/null +++ vendor/nginx-1.11.3/src/stream/ngx_stream.h 2016-07-27 13:06:13 +0900 (807ab5b) @@ -0,0 +1,230 @@ + +/* + * Copyright (C) Roman Arutyunyan + * Copyright (C) Nginx, Inc. + */ + + +#ifndef _NGX_STREAM_H_INCLUDED_ +#define _NGX_STREAM_H_INCLUDED_ + + +#include <ngx_config.h> +#include <ngx_core.h> + +#if (NGX_STREAM_SSL) +#include <ngx_stream_ssl_module.h> +#endif + + +typedef struct ngx_stream_session_s ngx_stream_session_t; + + +#include <ngx_stream_variables.h> +#include <ngx_stream_script.h> +#include <ngx_stream_upstream.h> +#include <ngx_stream_upstream_round_robin.h> + + +typedef struct { + void **main_conf; + void **srv_conf; +} ngx_stream_conf_ctx_t; + + +typedef struct { + ngx_sockaddr_t sockaddr; + socklen_t socklen; + + /* server ctx */ + ngx_stream_conf_ctx_t *ctx; + + unsigned bind:1; + unsigned wildcard:1; +#if (NGX_STREAM_SSL) + unsigned ssl:1; +#endif +#if (NGX_HAVE_INET6 && defined IPV6_V6ONLY) + unsigned ipv6only:1; +#endif +#if (NGX_HAVE_REUSEPORT) + unsigned reuseport:1; +#endif + unsigned so_keepalive:2; +#if (NGX_HAVE_KEEPALIVE_TUNABLE) + int tcp_keepidle; + int tcp_keepintvl; + int tcp_keepcnt; +#endif + int backlog; + int type; +} ngx_stream_listen_t; + + +typedef struct { + ngx_stream_conf_ctx_t *ctx; + ngx_str_t addr_text; +#if (NGX_STREAM_SSL) + ngx_uint_t ssl; /* unsigned ssl:1; */ +#endif +} ngx_stream_addr_conf_t; + +typedef struct { + in_addr_t addr; + ngx_stream_addr_conf_t conf; +} ngx_stream_in_addr_t; + + +#if (NGX_HAVE_INET6) + +typedef struct { + struct in6_addr addr6; + ngx_stream_addr_conf_t conf; +} ngx_stream_in6_addr_t; + +#endif + + +typedef struct { + /* ngx_stream_in_addr_t or ngx_stream_in6_addr_t */ + void *addrs; + ngx_uint_t naddrs; +} ngx_stream_port_t; + + +typedef struct { + int family; + int type; + in_port_t port; + ngx_array_t addrs; /* array of ngx_stream_conf_addr_t */ +} ngx_stream_conf_port_t; + + +typedef struct { + ngx_stream_listen_t opt; +} ngx_stream_conf_addr_t; + + +typedef ngx_int_t (*ngx_stream_access_pt)(ngx_stream_session_t *s); + + +typedef struct { + ngx_array_t servers; /* ngx_stream_core_srv_conf_t */ + ngx_array_t listen; /* ngx_stream_listen_t */ + + ngx_stream_access_pt limit_conn_handler; + ngx_stream_access_pt access_handler; + + ngx_hash_t variables_hash; + + ngx_array_t variables; /* ngx_stream_variable_t */ + ngx_uint_t ncaptures; + + ngx_uint_t variables_hash_max_size; + ngx_uint_t variables_hash_bucket_size; + + ngx_hash_keys_arrays_t *variables_keys; +} ngx_stream_core_main_conf_t; + + +typedef void (*ngx_stream_handler_pt)(ngx_stream_session_t *s); + + +typedef struct { + ngx_stream_handler_pt handler; + + ngx_stream_conf_ctx_t *ctx; + + u_char *file_name; + ngx_int_t line; + + ngx_flag_t tcp_nodelay; + + ngx_log_t *error_log; + + ngx_msec_t resolver_timeout; + ngx_resolver_t *resolver; +} ngx_stream_core_srv_conf_t; + + +struct ngx_stream_session_s { + uint32_t signature; /* "STRM" */ + + ngx_connection_t *connection; + + off_t received; + + ngx_log_handler_pt log_handler; + + void **ctx; + void **main_conf; + void **srv_conf; + + ngx_stream_upstream_t *upstream; + + ngx_stream_variable_value_t *variables; + +#if (NGX_PCRE) + ngx_uint_t ncaptures; + int *captures; + u_char *captures_data; +#endif +}; + + +typedef struct { + ngx_int_t (*preconfiguration)(ngx_conf_t *cf); + ngx_int_t (*postconfiguration)(ngx_conf_t *cf); + + void *(*create_main_conf)(ngx_conf_t *cf); + char *(*init_main_conf)(ngx_conf_t *cf, void *conf); + + void *(*create_srv_conf)(ngx_conf_t *cf); + char *(*merge_srv_conf)(ngx_conf_t *cf, void *prev, + void *conf); +} ngx_stream_module_t; + + +#define NGX_STREAM_MODULE 0x4d525453 /* "STRM" */ + +#define NGX_STREAM_MAIN_CONF 0x02000000 +#define NGX_STREAM_SRV_CONF 0x04000000 +#define NGX_STREAM_UPS_CONF 0x08000000 + + +#define NGX_STREAM_MAIN_CONF_OFFSET offsetof(ngx_stream_conf_ctx_t, main_conf) +#define NGX_STREAM_SRV_CONF_OFFSET offsetof(ngx_stream_conf_ctx_t, srv_conf) + + +#define ngx_stream_get_module_ctx(s, module) (s)->ctx[module.ctx_index] +#define ngx_stream_set_ctx(s, c, module) s->ctx[module.ctx_index] = c; +#define ngx_stream_delete_ctx(s, module) s->ctx[module.ctx_index] = NULL; + + +#define ngx_stream_get_module_main_conf(s, module) \ + (s)->main_conf[module.ctx_index] +#define ngx_stream_get_module_srv_conf(s, module) \ + (s)->srv_conf[module.ctx_index] + +#define ngx_stream_conf_get_module_main_conf(cf, module) \ + ((ngx_stream_conf_ctx_t *) cf->ctx)->main_conf[module.ctx_index] +#define ngx_stream_conf_get_module_srv_conf(cf, module) \ + ((ngx_stream_conf_ctx_t *) cf->ctx)->srv_conf[module.ctx_index] + +#define ngx_stream_cycle_get_module_main_conf(cycle, module) \ + (cycle->conf_ctx[ngx_stream_module.index] ? \ + ((ngx_stream_conf_ctx_t *) cycle->conf_ctx[ngx_stream_module.index]) \ + ->main_conf[module.ctx_index]: \ + NULL) + + +void ngx_stream_init_connection(ngx_connection_t *c); +void ngx_stream_close_connection(ngx_connection_t *c); + + +extern ngx_module_t ngx_stream_module; +extern ngx_uint_t ngx_stream_max_module; +extern ngx_module_t ngx_stream_core_module; + + +#endif /* _NGX_STREAM_H_INCLUDED_ */ Renamed: vendor/nginx-1.11.3/src/stream/ngx_stream_access_module.c (+1 -0) 99% =================================================================== --- vendor/nginx-1.11.1/src/stream/ngx_stream_access_module.c 2016-07-27 12:58:24 +0900 (64869d2) +++ vendor/nginx-1.11.3/src/stream/ngx_stream_access_module.c 2016-07-27 13:06:13 +0900 (6985d36) @@ -88,6 +88,7 @@ static ngx_command_t ngx_stream_access_commands[] = { static ngx_stream_module_t ngx_stream_access_module_ctx = { + NULL, /* preconfiguration */ ngx_stream_access_init, /* postconfiguration */ NULL, /* create main configuration */ Renamed: vendor/nginx-1.11.3/src/stream/ngx_stream_core_module.c (+107 -1) 82% =================================================================== --- vendor/nginx-1.11.1/src/stream/ngx_stream_core_module.c 2016-07-27 12:58:24 +0900 (075db82) +++ vendor/nginx-1.11.3/src/stream/ngx_stream_core_module.c 2016-07-27 13:06:13 +0900 (70b9e2d) @@ -10,7 +10,9 @@ #include <ngx_stream.h> +static ngx_int_t ngx_stream_core_preconfiguration(ngx_conf_t *cf); static void *ngx_stream_core_create_main_conf(ngx_conf_t *cf); +static char *ngx_stream_core_init_main_conf(ngx_conf_t *cf, void *conf); static void *ngx_stream_core_create_srv_conf(ngx_conf_t *cf); static char *ngx_stream_core_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child); @@ -20,10 +22,26 @@ static char *ngx_stream_core_server(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); static char *ngx_stream_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); +static char *ngx_stream_core_resolver(ngx_conf_t *cf, ngx_command_t *cmd, + void *conf); static ngx_command_t ngx_stream_core_commands[] = { + { ngx_string("variables_hash_max_size"), + NGX_STREAM_MAIN_CONF|NGX_CONF_TAKE1, + ngx_conf_set_num_slot, + NGX_STREAM_MAIN_CONF_OFFSET, + offsetof(ngx_stream_core_main_conf_t, variables_hash_max_size), + NULL }, + + { ngx_string("variables_hash_bucket_size"), + NGX_STREAM_MAIN_CONF|NGX_CONF_TAKE1, + ngx_conf_set_num_slot, + NGX_STREAM_MAIN_CONF_OFFSET, + offsetof(ngx_stream_core_main_conf_t, variables_hash_bucket_size), + NULL }, + { ngx_string("server"), NGX_STREAM_MAIN_CONF|NGX_CONF_BLOCK|NGX_CONF_NOARGS, ngx_stream_core_server, @@ -45,6 +63,20 @@ static ngx_command_t ngx_stream_core_commands[] = { 0, NULL }, + { ngx_string("resolver"), + NGX_STREAM_MAIN_CONF|NGX_STREAM_SRV_CONF|NGX_CONF_1MORE, + ngx_stream_core_resolver, + NGX_STREAM_SRV_CONF_OFFSET, + 0, + NULL }, + + { ngx_string("resolver_timeout"), + NGX_STREAM_MAIN_CONF|NGX_STREAM_SRV_CONF|NGX_CONF_TAKE1, + ngx_conf_set_msec_slot, + NGX_STREAM_SRV_CONF_OFFSET, + offsetof(ngx_stream_core_srv_conf_t, resolver_timeout), + NULL }, + { ngx_string("tcp_nodelay"), NGX_STREAM_MAIN_CONF|NGX_STREAM_SRV_CONF|NGX_CONF_FLAG, ngx_conf_set_flag_slot, @@ -57,10 +89,11 @@ static ngx_command_t ngx_stream_core_commands[] = { static ngx_stream_module_t ngx_stream_core_module_ctx = { + ngx_stream_core_preconfiguration, /* preconfiguration */ NULL, /* postconfiguration */ ngx_stream_core_create_main_conf, /* create main configuration */ - NULL, /* init main configuration */ + ngx_stream_core_init_main_conf, /* init main configuration */ ngx_stream_core_create_srv_conf, /* create server configuration */ ngx_stream_core_merge_srv_conf /* merge server configuration */ @@ -83,6 +116,13 @@ ngx_module_t ngx_stream_core_module = { }; +static ngx_int_t +ngx_stream_core_preconfiguration(ngx_conf_t *cf) +{ + return ngx_stream_variables_add_core_vars(cf); +} + + static void * ngx_stream_core_create_main_conf(ngx_conf_t *cf) { @@ -106,10 +146,32 @@ ngx_stream_core_create_main_conf(ngx_conf_t *cf) return NULL; } + cmcf->variables_hash_max_size = NGX_CONF_UNSET_UINT; + cmcf->variables_hash_bucket_size = NGX_CONF_UNSET_UINT; + return cmcf; } +static char * +ngx_stream_core_init_main_conf(ngx_conf_t *cf, void *conf) +{ + ngx_stream_core_main_conf_t *cmcf = conf; + + ngx_conf_init_uint_value(cmcf->variables_hash_max_size, 1024); + ngx_conf_init_uint_value(cmcf->variables_hash_bucket_size, 64); + + cmcf->variables_hash_bucket_size = + ngx_align(cmcf->variables_hash_bucket_size, ngx_cacheline_size); + + if (cmcf->ncaptures) { + cmcf->ncaptures = (cmcf->ncaptures + 1) * 3; + } + + return NGX_CONF_OK; +} + + static void * ngx_stream_core_create_srv_conf(ngx_conf_t *cf) { @@ -129,6 +191,7 @@ ngx_stream_core_create_srv_conf(ngx_conf_t *cf) cscf->file_name = cf->conf_file->file.name.data; cscf->line = cf->conf_file->line; + cscf->resolver_timeout = NGX_CONF_UNSET_MSEC; cscf->tcp_nodelay = NGX_CONF_UNSET; return cscf; @@ -141,6 +204,27 @@ ngx_stream_core_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child) ngx_stream_core_srv_conf_t *prev = parent; ngx_stream_core_srv_conf_t *conf = child; + ngx_conf_merge_msec_value(conf->resolver_timeout, + prev->resolver_timeout, 30000); + + if (conf->resolver == NULL) { + + if (prev->resolver == NULL) { + + /* + * create dummy resolver in stream {} context + * to inherit it in all servers + */ + + prev->resolver = ngx_resolver_create(cf, NULL, 0); + if (prev->resolver == NULL) { + return NGX_CONF_ERROR; + } + } + + conf->resolver = prev->resolver; + } + if (conf->handler == NULL) { ngx_log_error(NGX_LOG_EMERG, cf->log, 0, "no handler for server in %s:%ui", @@ -519,3 +603,25 @@ ngx_stream_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) return NGX_CONF_OK; } + + +static char * +ngx_stream_core_resolver(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) +{ + ngx_stream_core_srv_conf_t *cscf = conf; + + ngx_str_t *value; + + if (cscf->resolver) { + return "is duplicate"; + } + + value = cf->args->elts; + + cscf->resolver = ngx_resolver_create(cf, &value[1], cf->args->nelts - 1); + if (cscf->resolver == NULL) { + return NGX_CONF_ERROR; + } + + return NGX_CONF_OK; +} Renamed: vendor/nginx-1.11.3/src/stream/ngx_stream_geo_module.c (+259 -331) 65% =================================================================== --- vendor/nginx-1.11.1/src/http/modules/ngx_http_geo_module.c 2016-07-27 12:58:24 +0900 (9b3c6cb) +++ vendor/nginx-1.11.3/src/stream/ngx_stream_geo_module.c 2016-07-27 13:06:13 +0900 (ed1a488) @@ -7,115 +7,109 @@ #include <ngx_config.h> #include <ngx_core.h> -#include <ngx_http.h> +#include <ngx_stream.h> typedef struct { - ngx_http_variable_value_t *value; - u_short start; - u_short end; -} ngx_http_geo_range_t; + ngx_stream_variable_value_t *value; + u_short start; + u_short end; +} ngx_stream_geo_range_t; typedef struct { - ngx_radix_tree_t *tree; + ngx_radix_tree_t *tree; #if (NGX_HAVE_INET6) - ngx_radix_tree_t *tree6; + ngx_radix_tree_t *tree6; #endif -} ngx_http_geo_trees_t; +} ngx_stream_geo_trees_t; typedef struct { - ngx_http_geo_range_t **low; - ngx_http_variable_value_t *default_value; -} ngx_http_geo_high_ranges_t; + ngx_stream_geo_range_t **low; + ngx_stream_variable_value_t *default_value; +} ngx_stream_geo_high_ranges_t; typedef struct { - ngx_str_node_t sn; - ngx_http_variable_value_t *value; - size_t offset; -} ngx_http_geo_variable_value_node_t; + ngx_str_node_t sn; + ngx_stream_variable_value_t *value; + size_t offset; +} ngx_stream_geo_variable_value_node_t; typedef struct { - ngx_http_variable_value_t *value; - ngx_str_t *net; - ngx_http_geo_high_ranges_t high; - ngx_radix_tree_t *tree; + ngx_stream_variable_value_t *value; + ngx_str_t *net; + ngx_stream_geo_high_ranges_t high; + ngx_radix_tree_t *tree; #if (NGX_HAVE_INET6) - ngx_radix_tree_t *tree6; + ngx_radix_tree_t *tree6; #endif - ngx_rbtree_t rbtree; - ngx_rbtree_node_t sentinel; - ngx_array_t *proxies; - ngx_pool_t *pool; - ngx_pool_t *temp_pool; + ngx_rbtree_t rbtree; + ngx_rbtree_node_t sentinel; + ngx_pool_t *pool; + ngx_pool_t *temp_pool; - size_t data_size; + size_t data_size; - ngx_str_t include_name; - ngx_uint_t includes; - ngx_uint_t entries; + ngx_str_t include_name; + ngx_uint_t includes; + ngx_uint_t entries; - unsigned ranges:1; - unsigned outside_entries:1; - unsigned allow_binary_include:1; - unsigned binary_include:1; - unsigned proxy_recursive:1; -} ngx_http_geo_conf_ctx_t; + unsigned ranges:1; + unsigned outside_entries:1; + unsigned allow_binary_include:1; + unsigned binary_include:1; +} ngx_stream_geo_conf_ctx_t; typedef struct { union { - ngx_http_geo_trees_t trees; - ngx_http_geo_high_ranges_t high; + ngx_stream_geo_trees_t trees; + ngx_stream_geo_high_ranges_t high; } u; - ngx_array_t *proxies; - unsigned proxy_recursive:1; - - ngx_int_t index; -} ngx_http_geo_ctx_t; - - -static ngx_int_t ngx_http_geo_addr(ngx_http_request_t *r, - ngx_http_geo_ctx_t *ctx, ngx_addr_t *addr); -static ngx_int_t ngx_http_geo_real_addr(ngx_http_request_t *r, - ngx_http_geo_ctx_t *ctx, ngx_addr_t *addr); -static char *ngx_http_geo_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); -static char *ngx_http_geo(ngx_conf_t *cf, ngx_command_t *dummy, void *conf); -static char *ngx_http_geo_range(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, - ngx_str_t *value); -static char *ngx_http_geo_add_range(ngx_conf_t *cf, - ngx_http_geo_conf_ctx_t *ctx, in_addr_t start, in_addr_t end); -static ngx_uint_t ngx_http_geo_delete_range(ngx_conf_t *cf, - ngx_http_geo_conf_ctx_t *ctx, in_addr_t start, in_addr_t end); -static char *ngx_http_geo_cidr(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, - ngx_str_t *value); -static char *ngx_http_geo_cidr_add(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, - ngx_cidr_t *cidr, ngx_str_t *value, ngx_str_t *net); -static ngx_http_variable_value_t *ngx_http_geo_value(ngx_conf_t *cf, - ngx_http_geo_conf_ctx_t *ctx, ngx_str_t *value); -static char *ngx_http_geo_add_proxy(ngx_conf_t *cf, - ngx_http_geo_conf_ctx_t *ctx, ngx_cidr_t *cidr); -static ngx_int_t ngx_http_geo_cidr_value(ngx_conf_t *cf, ngx_str_t *net, + ngx_int_t index; +} ngx_stream_geo_ctx_t; + + +static ngx_int_t ngx_stream_geo_addr(ngx_stream_session_t *s, + ngx_stream_geo_ctx_t *ctx, ngx_addr_t *addr); + +static char *ngx_stream_geo_block(ngx_conf_t *cf, ngx_command_t *cmd, + void *conf); +static char *ngx_stream_geo(ngx_conf_t *cf, ngx_command_t *dummy, void *conf); +static char *ngx_stream_geo_range(ngx_conf_t *cf, + ngx_stream_geo_conf_ctx_t *ctx, ngx_str_t *value); +static char *ngx_stream_geo_add_range(ngx_conf_t *cf, + ngx_stream_geo_conf_ctx_t *ctx, in_addr_t start, in_addr_t end); +static ngx_uint_t ngx_stream_geo_delete_range(ngx_conf_t *cf, + ngx_stream_geo_conf_ctx_t *ctx, in_addr_t start, in_addr_t end); +static char *ngx_stream_geo_cidr(ngx_conf_t *cf, + ngx_stream_geo_conf_ctx_t *ctx, ngx_str_t *value); +static char *ngx_stream_geo_cidr_add(ngx_conf_t *cf, + ngx_stream_geo_conf_ctx_t *ctx, ngx_cidr_t *cidr, ngx_str_t *value, + ngx_str_t *net); +static ngx_stream_variable_value_t *ngx_stream_geo_value(ngx_conf_t *cf, + ngx_stream_geo_conf_ctx_t *ctx, ngx_str_t *value); +static ngx_int_t ngx_stream_geo_cidr_value(ngx_conf_t *cf, ngx_str_t *net, ngx_cidr_t *cidr); -static char *ngx_http_geo_include(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, - ngx_str_t *name); -static ngx_int_t ngx_http_geo_include_binary_base(ngx_conf_t *cf, - ngx_http_geo_conf_ctx_t *ctx, ngx_str_t *name); -static void ngx_http_geo_create_binary_base(ngx_http_geo_conf_ctx_t *ctx); -static u_char *ngx_http_geo_copy_values(u_char *base, u_char *p, +static char *ngx_stream_geo_include(ngx_conf_t *cf, + ngx_stream_geo_conf_ctx_t *ctx, ngx_str_t *name); +static ngx_int_t ngx_stream_geo_include_binary_base(ngx_conf_t *cf, + ngx_stream_geo_conf_ctx_t *ctx, ngx_str_t *name); +static void ngx_stream_geo_create_binary_base(ngx_stream_geo_conf_ctx_t *ctx); +static u_char *ngx_stream_geo_copy_values(u_char *base, u_char *p, ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel); -static ngx_command_t ngx_http_geo_commands[] = { +static ngx_command_t ngx_stream_geo_commands[] = { { ngx_string("geo"), - NGX_HTTP_MAIN_CONF|NGX_CONF_BLOCK|NGX_CONF_TAKE12, - ngx_http_geo_block, - NGX_HTTP_MAIN_CONF_OFFSET, + NGX_STREAM_MAIN_CONF|NGX_CONF_BLOCK|NGX_CONF_TAKE12, + ngx_stream_geo_block, + 0, 0, NULL }, @@ -123,7 +117,7 @@ static ngx_command_t ngx_http_geo_commands[] = { }; -static ngx_http_module_t ngx_http_geo_module_ctx = { +static ngx_stream_module_t ngx_stream_geo_module_ctx = { NULL, /* preconfiguration */ NULL, /* postconfiguration */ @@ -131,18 +125,15 @@ static ngx_http_module_t ngx_http_geo_module_ctx = { NULL, /* init main configuration */ NULL, /* create server configuration */ - NULL, /* merge server configuration */ - - NULL, /* create location configuration */ - NULL /* merge location configuration */ + NULL /* merge server configuration */ }; -ngx_module_t ngx_http_geo_module = { +ngx_module_t ngx_stream_geo_module = { NGX_MODULE_V1, - &ngx_http_geo_module_ctx, /* module context */ - ngx_http_geo_commands, /* module directives */ - NGX_HTTP_MODULE, /* module type */ + &ngx_stream_geo_module_ctx, /* module context */ + ngx_stream_geo_commands, /* module directives */ + NGX_STREAM_MODULE, /* module type */ NULL, /* init master */ NULL, /* init module */ NULL, /* init process */ @@ -160,10 +151,10 @@ typedef struct { u_char ptr_size; uint32_t endianness; uint32_t crc32; -} ngx_http_geo_header_t; +} ngx_stream_geo_header_t; -static ngx_http_geo_header_t ngx_http_geo_header = { +static ngx_stream_geo_header_t ngx_stream_geo_header = { { 'G', 'E', 'O', 'R', 'N', 'G' }, 0, sizeof(void *), 0x12345678, 0 }; @@ -171,22 +162,22 @@ static ngx_http_geo_header_t ngx_http_geo_header = { /* geo range is AF_INET only */ static ngx_int_t -ngx_http_geo_cidr_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v, - uintptr_t data) +ngx_stream_geo_cidr_variable(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data) { - ngx_http_geo_ctx_t *ctx = (ngx_http_geo_ctx_t *) data; + ngx_stream_geo_ctx_t *ctx = (ngx_stream_geo_ctx_t *) data; - in_addr_t inaddr; - ngx_addr_t addr; - struct sockaddr_in *sin; - ngx_http_variable_value_t *vv; + in_addr_t inaddr; + ngx_addr_t addr; + struct sockaddr_in *sin; + ngx_stream_variable_value_t *vv; #if (NGX_HAVE_INET6) - u_char *p; - struct in6_addr *inaddr6; + u_char *p; + struct in6_addr *inaddr6; #endif - if (ngx_http_geo_addr(r, ctx, &addr) != NGX_OK) { - vv = (ngx_http_variable_value_t *) + if (ngx_stream_geo_addr(s, ctx, &addr) != NGX_OK) { + vv = (ngx_stream_variable_value_t *) ngx_radix32tree_find(ctx->u.trees.tree, INADDR_NONE); goto done; } @@ -204,11 +195,11 @@ ngx_http_geo_cidr_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v, inaddr += p[14] << 8; inaddr += p[15]; - vv = (ngx_http_variable_value_t *) + vv = (ngx_stream_variable_value_t *) ngx_radix32tree_find(ctx->u.trees.tree, inaddr); } else { - vv = (ngx_http_variable_value_t *) + vv = (ngx_stream_variable_value_t *) ngx_radix128tree_find(ctx->u.trees.tree6, p); } @@ -219,7 +210,7 @@ ngx_http_geo_cidr_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v, sin = (struct sockaddr_in *) addr.sockaddr; inaddr = ntohl(sin->sin_addr.s_addr); - vv = (ngx_http_variable_value_t *) + vv = (ngx_stream_variable_value_t *) ngx_radix32tree_find(ctx->u.trees.tree, inaddr); break; @@ -229,32 +220,32 @@ done: *v = *vv; - ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, - "http geo: %v", v); + ngx_log_debug1(NGX_LOG_DEBUG_STREAM, s->connection->log, 0, + "stream geo: %v", v); return NGX_OK; } static ngx_int_t -ngx_http_geo_range_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v, - uintptr_t data) +ngx_stream_geo_range_variable(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data) { - ngx_http_geo_ctx_t *ctx = (ngx_http_geo_ctx_t *) data; + ngx_stream_geo_ctx_t *ctx = (ngx_stream_geo_ctx_t *) data; - in_addr_t inaddr; - ngx_addr_t addr; - ngx_uint_t n; - struct sockaddr_in *sin; - ngx_http_geo_range_t *range; + in_addr_t inaddr; + ngx_addr_t addr; + ngx_uint_t n; + struct sockaddr_in *sin; + ngx_stream_geo_range_t *range; #if (NGX_HAVE_INET6) - u_char *p; - struct in6_addr *inaddr6; + u_char *p; + struct in6_addr *inaddr6; #endif *v = *ctx->u.high.default_value; - if (ngx_http_geo_addr(r, ctx, &addr) == NGX_OK) { + if (ngx_stream_geo_addr(s, ctx, &addr) == NGX_OK) { switch (addr.sockaddr->sa_family) { @@ -303,64 +294,43 @@ ngx_http_geo_range_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v, } } - ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, - "http geo: %v", v); - - return NGX_OK; -} - - -static ngx_int_t -ngx_http_geo_addr(ngx_http_request_t *r, ngx_http_geo_ctx_t *ctx, - ngx_addr_t *addr) -{ - ngx_array_t *xfwd; - - if (ngx_http_geo_real_addr(r, ctx, addr) != NGX_OK) { - return NGX_ERROR; - } - - xfwd = &r->headers_in.x_forwarded_for; - - if (xfwd->nelts > 0 && ctx->proxies != NULL) { - (void) ngx_http_get_forwarded_addr(r, addr, xfwd, NULL, - ctx->proxies, ctx->proxy_recursive); - } + ngx_log_debug1(NGX_LOG_DEBUG_STREAM, s->connection->log, 0, + "stream geo: %v", v); return NGX_OK; } static ngx_int_t -ngx_http_geo_real_addr(ngx_http_request_t *r, ngx_http_geo_ctx_t *ctx, +ngx_stream_geo_addr(ngx_stream_session_t *s, ngx_stream_geo_ctx_t *ctx, ngx_addr_t *addr) { - ngx_http_variable_value_t *v; + ngx_stream_variable_value_t *v; if (ctx->index == -1) { - ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, - "http geo started: %V", &r->connection->addr_text); + ngx_log_debug1(NGX_LOG_DEBUG_STREAM, s->connection->log, 0, + "stream geo started: %V", &s->connection->addr_text); - addr->sockaddr = r->connection->sockaddr; - addr->socklen = r->connection->socklen; - /* addr->name = r->connection->addr_text; */ + addr->sockaddr = s->connection->sockaddr; + addr->socklen = s->connection->socklen; + /* addr->name = s->connection->addr_text; */ return NGX_OK; } - v = ngx_http_get_flushed_variable(r, ctx->index); + v = ngx_stream_get_flushed_variable(s, ctx->index); if (v == NULL || v->not_found) { - ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, - "http geo not found"); + ngx_log_debug0(NGX_LOG_DEBUG_STREAM, s->connection->log, 0, + "stream geo not found"); return NGX_ERROR; } - ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, - "http geo started: %v", v); + ngx_log_debug1(NGX_LOG_DEBUG_STREAM, s->connection->log, 0, + "stream geo started: %v", v); - if (ngx_parse_addr(r->pool, addr, v->data, v->len) == NGX_OK) { + if (ngx_parse_addr(s->connection->pool, addr, v->data, v->len) == NGX_OK) { return NGX_OK; } @@ -369,25 +339,25 @@ ngx_http_geo_real_addr(ngx_http_request_t *r, ngx_http_geo_ctx_t *ctx, static char * -ngx_http_geo_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) +ngx_stream_geo_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) { - char *rv; - size_t len; - ngx_str_t *value, name; - ngx_uint_t i; - ngx_conf_t save; - ngx_pool_t *pool; - ngx_array_t *a; - ngx_http_variable_t *var; - ngx_http_geo_ctx_t *geo; - ngx_http_geo_conf_ctx_t ctx; + char *rv; + size_t len; + ngx_str_t *value, name; + ngx_uint_t i; + ngx_conf_t save; + ngx_pool_t *pool; + ngx_array_t *a; + ngx_stream_variable_t *var; + ngx_stream_geo_ctx_t *geo; + ngx_stream_geo_conf_ctx_t ctx; #if (NGX_HAVE_INET6) - static struct in6_addr zero; + static struct in6_addr zero; #endif value = cf->args->elts; - geo = ngx_palloc(cf->pool, sizeof(ngx_http_geo_ctx_t)); + geo = ngx_palloc(cf->pool, sizeof(ngx_stream_geo_ctx_t)); if (geo == NULL) { return NGX_CONF_ERROR; } @@ -405,7 +375,7 @@ ngx_http_geo_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) if (cf->args->nelts == 3) { - geo->index = ngx_http_get_variable_index(cf, &name); + geo->index = ngx_stream_get_variable_index(cf, &name); if (geo->index == NGX_ERROR) { return NGX_CONF_ERROR; } @@ -425,7 +395,7 @@ ngx_http_geo_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) geo->index = -1; } - var = ngx_http_add_variable(cf, &name, NGX_HTTP_VAR_CHANGEABLE); + var = ngx_stream_add_variable(cf, &name, NGX_STREAM_VAR_CHANGEABLE); if (var == NULL) { return NGX_CONF_ERROR; } @@ -435,7 +405,7 @@ ngx_http_geo_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) return NGX_CONF_ERROR; } - ngx_memzero(&ctx, sizeof(ngx_http_geo_conf_ctx_t)); + ngx_memzero(&ctx, sizeof(ngx_stream_geo_conf_ctx_t)); ctx.temp_pool = ngx_create_pool(NGX_DEFAULT_POOL_SIZE, cf->log); if (ctx.temp_pool == NULL) { @@ -445,24 +415,21 @@ ngx_http_geo_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) ngx_rbtree_init(&ctx.rbtree, &ctx.sentinel, ngx_str_rbtree_insert_value); ctx.pool = cf->pool; - ctx.data_size = sizeof(ngx_http_geo_header_t) - + sizeof(ngx_http_variable_value_t) - + 0x10000 * sizeof(ngx_http_geo_range_t *); + ctx.data_size = sizeof(ngx_stream_geo_header_t) + + sizeof(ngx_stream_variable_value_t) + + 0x10000 * sizeof(ngx_stream_geo_range_t *); ctx.allow_binary_include = 1; save = *cf; cf->pool = pool; cf->ctx = &ctx; - cf->handler = ngx_http_geo; + cf->handler = ngx_stream_geo; cf->handler_conf = conf; rv = ngx_conf_parse(cf, NULL); *cf = save; - geo->proxies = ctx.proxies; - geo->proxy_recursive = ctx.proxy_recursive; - if (ctx.ranges) { if (ctx.high.low && !ctx.binary_include) { @@ -473,7 +440,7 @@ ngx_http_geo_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) continue; } - len = a->nelts * sizeof(ngx_http_geo_range_t); + len = a->nelts * sizeof(ngx_stream_geo_range_t); ctx.high.low[i] = ngx_palloc(cf->pool, len + sizeof(void *)); if (ctx.high.low[i] == NULL) { @@ -490,17 +457,17 @@ ngx_http_geo_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) && ctx.entries > 100000 && ctx.includes == 1) { - ngx_http_geo_create_binary_base(&ctx); + ngx_stream_geo_create_binary_base(&ctx); } } if (ctx.high.default_value == NULL) { - ctx.high.default_value = &ngx_http_variable_null_value; + ctx.high.default_value = &ngx_stream_variable_null_value; } geo->u.high = ctx.high; - var->get_handler = ngx_http_geo_range_variable; + var->get_handler = ngx_stream_geo_range_variable; var->data = (uintptr_t) geo; ngx_destroy_pool(ctx.temp_pool); @@ -527,14 +494,14 @@ ngx_http_geo_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) geo->u.trees.tree6 = ctx.tree6; #endif - var->get_handler = ngx_http_geo_cidr_variable; + var->get_handler = ngx_stream_geo_cidr_variable; var->data = (uintptr_t) geo; ngx_destroy_pool(ctx.temp_pool); ngx_destroy_pool(pool); if (ngx_radix32tree_insert(ctx.tree, 0, 0, - (uintptr_t) &ngx_http_variable_null_value) + (uintptr_t) &ngx_stream_variable_null_value) == NGX_ERROR) { return NGX_CONF_ERROR; @@ -544,7 +511,7 @@ ngx_http_geo_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) #if (NGX_HAVE_INET6) if (ngx_radix128tree_insert(ctx.tree6, zero.s6_addr, zero.s6_addr, - (uintptr_t) &ngx_http_variable_null_value) + (uintptr_t) &ngx_stream_variable_null_value) == NGX_ERROR) { return NGX_CONF_ERROR; @@ -557,12 +524,11 @@ ngx_http_geo_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) static char * -ngx_http_geo(ngx_conf_t *cf, ngx_command_t *dummy, void *conf) +ngx_stream_geo(ngx_conf_t *cf, ngx_command_t *dummy, void *conf) { - char *rv; - ngx_str_t *value; - ngx_cidr_t cidr; - ngx_http_geo_conf_ctx_t *ctx; + char *rv; + ngx_str_t *value; + ngx_stream_geo_conf_ctx_t *ctx; ctx = cf->ctx; @@ -590,12 +556,6 @@ ngx_http_geo(ngx_conf_t *cf, ngx_command_t *dummy, void *conf) goto done; } - - else if (ngx_strcmp(value[0].data, "proxy_recursive") == 0) { - ctx->proxy_recursive = 1; - rv = NGX_CONF_OK; - goto done; - } } if (cf->args->nelts != 2) { @@ -606,26 +566,16 @@ ngx_http_geo(ngx_conf_t *cf, ngx_command_t *dummy, void *conf) if (ngx_strcmp(value[0].data, "include") == 0) { - rv = ngx_http_geo_include(cf, ctx, &value[1]); - - goto done; - - } else if (ngx_strcmp(value[0].data, "proxy") == 0) { - - if (ngx_http_geo_cidr_value(cf, &value[1], &cidr) != NGX_OK) { - goto failed; - } - - rv = ngx_http_geo_add_proxy(cf, ctx, &cidr); + rv = ngx_stream_geo_include(cf, ctx, &value[1]); goto done; } if (ctx->ranges) { - rv = ngx_http_geo_range(cf, ctx, value); + rv = ngx_stream_geo_range(cf, ctx, value); } else { - rv = ngx_http_geo_cidr(cf, ctx, value); + rv = ngx_stream_geo_cidr(cf, ctx, value); } done: @@ -643,7 +593,7 @@ failed: static char * -ngx_http_geo_range(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, +ngx_stream_geo_range(ngx_conf_t *cf, ngx_stream_geo_conf_ctx_t *ctx, ngx_str_t *value) { u_char *p, *last; @@ -659,7 +609,7 @@ ngx_http_geo_range(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, &value[1], ctx->high.default_value); } - ctx->high.default_value = ngx_http_geo_value(cf, ctx, &value[1]); + ctx->high.default_value = ngx_stream_geo_value(cf, ctx, &value[1]); if (ctx->high.default_value == NULL) { return NGX_CONF_ERROR; } @@ -676,7 +626,7 @@ ngx_http_geo_range(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, if (ctx->high.low == NULL) { ctx->high.low = ngx_pcalloc(ctx->pool, - 0x10000 * sizeof(ngx_http_geo_range_t *)); + 0x10000 * sizeof(ngx_stream_geo_range_t *)); if (ctx->high.low == NULL) { return NGX_CONF_ERROR; } @@ -725,7 +675,7 @@ ngx_http_geo_range(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, } if (del) { - if (ngx_http_geo_delete_range(cf, ctx, start, end)) { + if (ngx_stream_geo_delete_range(cf, ctx, start, end)) { ngx_conf_log_error(NGX_LOG_WARN, cf, 0, "no address range \"%V\" to delete", net); } @@ -733,7 +683,7 @@ ngx_http_geo_range(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, return NGX_CONF_OK; } - ctx->value = ngx_http_geo_value(cf, ctx, &value[1]); + ctx->value = ngx_stream_geo_value(cf, ctx, &value[1]); if (ctx->value == NULL) { return NGX_CONF_ERROR; @@ -741,7 +691,7 @@ ngx_http_geo_range(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, ctx->net = net; - return ngx_http_geo_add_range(cf, ctx, start, end); + return ngx_stream_geo_add_range(cf, ctx, start, end); invalid: @@ -754,13 +704,13 @@ invalid: /* the add procedure is optimized to add a growing up sequence */ static char * -ngx_http_geo_add_range(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, +ngx_stream_geo_add_range(ngx_conf_t *cf, ngx_stream_geo_conf_ctx_t *ctx, in_addr_t start, in_addr_t end) { - in_addr_t n; - ngx_uint_t h, i, s, e; - ngx_array_t *a; - ngx_http_geo_range_t *range; + in_addr_t n; + ngx_uint_t h, i, s, e; + ngx_array_t *a; + ngx_stream_geo_range_t *range; for (n = start; n <= end; n = (n + 0x10000) & 0xffff0000) { @@ -783,12 +733,12 @@ ngx_http_geo_add_range(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, if (a == NULL) { a = ngx_array_create(ctx->temp_pool, 64, - sizeof(ngx_http_geo_range_t)); + sizeof(ngx_stream_geo_range_t)); if (a == NULL) { return NGX_CONF_ERROR; } - ctx->high.low[h] = (ngx_http_geo_range_t *) a; + ctx->high.low[h] = (ngx_stream_geo_range_t *) a; } i = a->nelts; @@ -814,7 +764,7 @@ ngx_http_geo_add_range(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, range = a->elts; ngx_memmove(&range[i + 2], &range[i + 1], - (a->nelts - 2 - i) * sizeof(ngx_http_geo_range_t)); + (a->nelts - 2 - i) * sizeof(ngx_stream_geo_range_t)); range[i + 1].start = (u_short) s; range[i + 1].end = (u_short) e; @@ -853,7 +803,7 @@ ngx_http_geo_add_range(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, range = a->elts; ngx_memmove(&range[i + 3], &range[i + 1], - (a->nelts - 3 - i) * sizeof(ngx_http_geo_range_t)); + (a->nelts - 3 - i) * sizeof(ngx_stream_geo_range_t)); range[i + 2].start = (u_short) (e + 1); range[i + 2].end = range[i].end; @@ -881,7 +831,7 @@ ngx_http_geo_add_range(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, range = a->elts; ngx_memmove(&range[i + 1], &range[i], - (a->nelts - 1 - i) * sizeof(ngx_http_geo_range_t)); + (a->nelts - 1 - i) * sizeof(ngx_stream_geo_range_t)); range[i + 1].start = (u_short) (e + 1); @@ -905,7 +855,7 @@ ngx_http_geo_add_range(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, range = a->elts; ngx_memmove(&range[i + 2], &range[i + 1], - (a->nelts - 2 - i) * sizeof(ngx_http_geo_range_t)); + (a->nelts - 2 - i) * sizeof(ngx_stream_geo_range_t)); range[i + 1].start = (u_short) s; range[i + 1].end = (u_short) e; @@ -949,13 +899,13 @@ ngx_http_geo_add_range(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, static ngx_uint_t -ngx_http_geo_delete_range(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, +ngx_stream_geo_delete_range(ngx_conf_t *cf, ngx_stream_geo_conf_ctx_t *ctx, in_addr_t start, in_addr_t end) { - in_addr_t n; - ngx_uint_t h, i, s, e, warn; - ngx_array_t *a; - ngx_http_geo_range_t *range; + in_addr_t n; + ngx_uint_t h, i, s, e, warn; + ngx_array_t *a; + ngx_stream_geo_range_t *range; warn = 0; @@ -990,7 +940,7 @@ ngx_http_geo_delete_range(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, && e == (ngx_uint_t) range[i].end) { ngx_memmove(&range[i], &range[i + 1], - (a->nelts - 1 - i) * sizeof(ngx_http_geo_range_t)); + (a->nelts - 1 - i) * sizeof(ngx_stream_geo_range_t)); a->nelts--; @@ -1012,7 +962,7 @@ ngx_http_geo_delete_range(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, static char * -ngx_http_geo_cidr(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, +ngx_stream_geo_cidr(ngx_conf_t *cf, ngx_stream_geo_conf_ctx_t *ctx, ngx_str_t *value) { char *rv; @@ -1041,7 +991,7 @@ ngx_http_geo_cidr(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, cidr.u.in.addr = 0; cidr.u.in.mask = 0; - rv = ngx_http_geo_cidr_add(cf, ctx, &cidr, &value[1], &value[0]); + rv = ngx_stream_geo_cidr_add(cf, ctx, &cidr, &value[1], &value[0]); if (rv != NGX_CONF_OK) { return rv; @@ -1051,7 +1001,7 @@ ngx_http_geo_cidr(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, cidr.family = AF_INET6; ngx_memzero(&cidr.u.in6, sizeof(ngx_in6_cidr_t)); - rv = ngx_http_geo_cidr_add(cf, ctx, &cidr, &value[1], &value[0]); + rv = ngx_stream_geo_cidr_add(cf, ctx, &cidr, &value[1], &value[0]); if (rv != NGX_CONF_OK) { return rv; @@ -1070,7 +1020,7 @@ ngx_http_geo_cidr(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, del = 0; } - if (ngx_http_geo_cidr_value(cf, net, &cidr) != NGX_OK) { + if (ngx_stream_geo_cidr_value(cf, net, &cidr) != NGX_OK) { return NGX_CONF_ERROR; } @@ -1104,18 +1054,18 @@ ngx_http_geo_cidr(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, return NGX_CONF_OK; } - return ngx_http_geo_cidr_add(cf, ctx, &cidr, &value[1], net); + return ngx_stream_geo_cidr_add(cf, ctx, &cidr, &value[1], net); } static char * -ngx_http_geo_cidr_add(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, +ngx_stream_geo_cidr_add(ngx_conf_t *cf, ngx_stream_geo_conf_ctx_t *ctx, ngx_cidr_t *cidr, ngx_str_t *value, ngx_str_t *net) { - ngx_int_t rc; - ngx_http_variable_value_t *val, *old; + ngx_int_t rc; + ngx_stream_variable_value_t *val, *old; - val = ngx_http_geo_value(cf, ctx, value); + val = ngx_stream_geo_value(cf, ctx, value); if (val == NULL) { return NGX_CONF_ERROR; @@ -1139,7 +1089,7 @@ ngx_http_geo_cidr_add(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, /* rc == NGX_BUSY */ - old = (ngx_http_variable_value_t *) + old = (ngx_stream_variable_value_t *) ngx_radix128tree_find(ctx->tree6, cidr->u.in6.addr.s6_addr); @@ -1177,7 +1127,7 @@ ngx_http_geo_cidr_add(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, /* rc == NGX_BUSY */ - old = (ngx_http_variable_value_t *) + old = (ngx_stream_variable_value_t *) ngx_radix32tree_find(ctx->tree, cidr->u.in.addr); ngx_conf_log_error(NGX_LOG_WARN, cf, 0, @@ -1206,24 +1156,24 @@ ngx_http_geo_cidr_add(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, } -static ngx_http_variable_value_t * -ngx_http_geo_value(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, +static ngx_stream_variable_value_t * +ngx_stream_geo_value(ngx_conf_t *cf, ngx_stream_geo_conf_ctx_t *ctx, ngx_str_t *value) { - uint32_t hash; - ngx_http_variable_value_t *val; - ngx_http_geo_variable_value_node_t *gvvn; + uint32_t hash; + ngx_stream_variable_value_t *val; + ngx_stream_geo_variable_value_node_t *gvvn; hash = ngx_crc32_long(value->data, value->len); - gvvn = (ngx_http_geo_variable_value_node_t *) + gvvn = (ngx_stream_geo_variable_value_node_t *) ngx_str_rbtree_lookup(&ctx->rbtree, value, hash); if (gvvn) { return gvvn->value; } - val = ngx_palloc(ctx->pool, sizeof(ngx_http_variable_value_t)); + val = ngx_palloc(ctx->pool, sizeof(ngx_stream_variable_value_t)); if (val == NULL) { return NULL; } @@ -1239,7 +1189,7 @@ ngx_http_geo_value(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, val->not_found = 0; gvvn = ngx_palloc(ctx->temp_pool, - sizeof(ngx_http_geo_variable_value_node_t)); + sizeof(ngx_stream_geo_variable_value_node_t)); if (gvvn == NULL) { return NULL; } @@ -1252,39 +1202,15 @@ ngx_http_geo_value(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, ngx_rbtree_insert(&ctx->rbtree, &gvvn->sn.node); - ctx->data_size += ngx_align(sizeof(ngx_http_variable_value_t) + value->len, - sizeof(void *)); + ctx->data_size += ngx_align(sizeof(ngx_stream_variable_value_t) + + value->len, sizeof(void *)); return val; } -static char * -ngx_http_geo_add_proxy(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, - ngx_cidr_t *cidr) -{ - ngx_cidr_t *c; - - if (ctx->proxies == NULL) { - ctx->proxies = ngx_array_create(ctx->pool, 4, sizeof(ngx_cidr_t)); - if (ctx->proxies == NULL) { - return NGX_CONF_ERROR; - } - } - - c = ngx_array_push(ctx->proxies); - if (c == NULL) { - return NGX_CONF_ERROR; - } - - *c = *cidr; - - return NGX_CONF_OK; -} - - static ngx_int_t -ngx_http_geo_cidr_value(ngx_conf_t *cf, ngx_str_t *net, ngx_cidr_t *cidr) +ngx_stream_geo_cidr_value(ngx_conf_t *cf, ngx_str_t *net, ngx_cidr_t *cidr) { ngx_int_t rc; @@ -1313,7 +1239,7 @@ ngx_http_geo_cidr_value(ngx_conf_t *cf, ngx_str_t *net, ngx_cidr_t *cidr) static char * -ngx_http_geo_include(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, +ngx_stream_geo_include(ngx_conf_t *cf, ngx_stream_geo_conf_ctx_t *ctx, ngx_str_t *name) { char *rv; @@ -1334,7 +1260,7 @@ ngx_http_geo_include(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, if (ctx->ranges) { ngx_log_debug1(NGX_LOG_DEBUG_CORE, cf->log, 0, "include %s", file.data); - switch (ngx_http_geo_include_binary_base(cf, ctx, &file)) { + switch (ngx_stream_geo_include_binary_base(cf, ctx, &file)) { case NGX_OK: return NGX_CONF_OK; case NGX_ERROR: @@ -1365,22 +1291,22 @@ ngx_http_geo_include(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, static ngx_int_t -ngx_http_geo_include_binary_base(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, - ngx_str_t *name) +ngx_stream_geo_include_binary_base(ngx_conf_t *cf, + ngx_stream_geo_conf_ctx_t *ctx, ngx_str_t *name) { - u_char *base, ch; - time_t mtime; - size_t size, len; - ssize_t n; - uint32_t crc32; - ngx_err_t err; - ngx_int_t rc; - ngx_uint_t i; - ngx_file_t file; - ngx_file_info_t fi; - ngx_http_geo_range_t *range, **ranges; - ngx_http_geo_header_t *header; - ngx_http_variable_value_t *vv; + u_char *base, ch; + time_t mtime; + size_t size, len; + ssize_t n; + uint32_t crc32; + ngx_err_t err; + ngx_int_t rc; + ngx_uint_t i; + ngx_file_t file; + ngx_file_info_t fi; + ngx_stream_geo_range_t *range, **ranges; + ngx_stream_geo_header_t *header; + ngx_stream_variable_value_t *vv; ngx_memzero(&file, sizeof(ngx_file_t)); file.name = *name; @@ -1458,9 +1384,9 @@ ngx_http_geo_include_binary_base(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, goto failed; } - header = (ngx_http_geo_header_t *) base; + header = (ngx_stream_geo_header_t *) base; - if (size < 16 || ngx_memcmp(&ngx_http_geo_header, header, 12) != 0) { + if (size < 16 || ngx_memcmp(&ngx_stream_geo_header, header, 12) != 0) { ngx_conf_log_error(NGX_LOG_WARN, cf, 0, "incompatible binary geo range base \"%s\"", name->data); goto failed; @@ -1468,40 +1394,42 @@ ngx_http_geo_include_binary_base(ngx_conf_t *cf, ngx_http_geo_conf_ctx_t *ctx, ngx_crc32_init(crc32); - vv = (ngx_http_variable_value_t *) (base + sizeof(ngx_http_geo_header_t)); + vv = (ngx_stream_variable_value_t *) + (base + sizeof(ngx_stream_geo_header_t)); while (vv->data) { - len = ngx_align(sizeof(ngx_http_variable_value_t) + vv->len, + len = ngx_align(sizeof(ngx_stream_variable_value_t) + vv->len, sizeof(void *)); ngx_crc32_update(&crc32, (u_char *) vv, len); vv->data += (size_t) base; - vv = (ngx_http_variable_value_t *) ((u_char *) vv + len); + vv = (ngx_stream_variable_value_t *) ((u_char *) vv + len); } - ngx_crc32_update(&crc32, (u_char *) vv, sizeof(ngx_http_variable_value_t)); + ngx_crc32_update(&crc32, (u_char *) vv, + sizeof(ngx_stream_variable_value_t)); vv++; - ranges = (ngx_http_geo_range_t **) vv; + ranges = (ngx_stream_geo_range_t **) vv; for (i = 0; i < 0x10000; i++) { ngx_crc32_update(&crc32, (u_char *) &ranges[i], sizeof(void *)); if (ranges[i]) { - ranges[i] = (ngx_http_geo_range_t *) + ranges[i] = (ngx_stream_geo_range_t *) ((u_char *) ranges[i] + (size_t) base); } } - range = (ngx_http_geo_range_t *) &ranges[0x10000]; + range = (ngx_stream_geo_range_t *) &ranges[0x10000]; while ((u_char *) range < base + size) { while (range->value) { ngx_crc32_update(&crc32, (u_char *) range, - sizeof(ngx_http_geo_range_t)); - range->value = (ngx_http_variable_value_t *) + sizeof(ngx_stream_geo_range_t)); + range->value = (ngx_stream_variable_value_t *) ((u_char *) range->value + (size_t) base); range++; } ngx_crc32_update(&crc32, (u_char *) range, sizeof(void *)); - range = (ngx_http_geo_range_t *) ((u_char *) range + sizeof(void *)); + range = (ngx_stream_geo_range_t *) ((u_char *) range + sizeof(void *)); } ngx_crc32_final(crc32); @@ -1538,16 +1466,16 @@ done: static void -ngx_http_geo_create_binary_base(ngx_http_geo_conf_ctx_t *ctx) +ngx_stream_geo_create_binary_base(ngx_stream_geo_conf_ctx_t *ctx) { - u_char *p; - uint32_t hash; - ngx_str_t s; - ngx_uint_t i; - ngx_file_mapping_t fm; - ngx_http_geo_range_t *r, *range, **ranges; - ngx_http_geo_header_t *header; - ngx_http_geo_variable_value_node_t *gvvn; + u_char *p; + uint32_t hash; + ngx_str_t s; + ngx_uint_t i; + ngx_file_mapping_t fm; + ngx_stream_geo_range_t *r, *range, **ranges; + ngx_stream_geo_header_t *header; + ngx_stream_geo_variable_value_node_t *gvvn; fm.name = ngx_pnalloc(ctx->temp_pool, ctx->include_name.len + 5); if (fm.name == NULL) { @@ -1566,17 +1494,17 @@ ngx_http_geo_create_binary_base(ngx_http_geo_conf_ctx_t *ctx) return; } - p = ngx_cpymem(fm.addr, &ngx_http_geo_header, - sizeof(ngx_http_geo_header_t)); + p = ngx_cpymem(fm.addr, &ngx_stream_geo_header, + sizeof(ngx_stream_geo_header_t)); - p = ngx_http_geo_copy_values(fm.addr, p, ctx->rbtree.root, - ctx->rbtree.sentinel); + p = ngx_stream_geo_copy_values(fm.addr, p, ctx->rbtree.root, + ctx->rbtree.sentinel); - p += sizeof(ngx_http_variable_value_t); + p += sizeof(ngx_stream_variable_value_t); - ranges = (ngx_http_geo_range_t **) p; + ranges = (ngx_stream_geo_range_t **) p; - p += 0x10000 * sizeof(ngx_http_geo_range_t *); + p += 0x10000 * sizeof(ngx_stream_geo_range_t *); for (i = 0; i < 0x10000; i++) { r = ctx->high.low[i]; @@ -1584,17 +1512,17 @@ ngx_http_geo_create_binary_base(ngx_http_geo_conf_ctx_t *ctx) continue; } - range = (ngx_http_geo_range_t *) p; - ranges[i] = (ngx_http_geo_range_t *) (p - (u_char *) fm.addr); + range = (ngx_stream_geo_range_t *) p; + ranges[i] = (ngx_stream_geo_range_t *) (p - (u_char *) fm.addr); do { s.len = r->value->len; s.data = r->value->data; hash = ngx_crc32_long(s.data, s.len); - gvvn = (ngx_http_geo_variable_value_node_t *) + gvvn = (ngx_stream_geo_variable_value_node_t *) ngx_str_rbtree_lookup(&ctx->rbtree, &s, hash); - range->value = (ngx_http_variable_value_t *) gvvn->offset; + range->value = (ngx_stream_variable_value_t *) gvvn->offset; range->start = r->start; range->end = r->end; range++; @@ -1608,37 +1536,37 @@ ngx_http_geo_create_binary_base(ngx_http_geo_conf_ctx_t *ctx) header = fm.addr; header->crc32 = ngx_crc32_long((u_char *) fm.addr - + sizeof(ngx_http_geo_header_t), - fm.size - sizeof(ngx_http_geo_header_t)); + + sizeof(ngx_stream_geo_header_t), + fm.size - sizeof(ngx_stream_geo_header_t)); ngx_close_file_mapping(&fm); } static u_char * -ngx_http_geo_copy_values(u_char *base, u_char *p, ngx_rbtree_node_t *node, +ngx_stream_geo_copy_values(u_char *base, u_char *p, ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel) { - ngx_http_variable_value_t *vv; - ngx_http_geo_variable_value_node_t *gvvn; + ngx_stream_variable_value_t *vv; + ngx_stream_geo_variable_value_node_t *gvvn; if (node == sentinel) { return p; } - gvvn = (ngx_http_geo_variable_value_node_t *) node; + gvvn = (ngx_stream_geo_variable_value_node_t *) node; gvvn->offset = p - base; - vv = (ngx_http_variable_value_t *) p; + vv = (ngx_stream_variable_value_t *) p; *vv = *gvvn->value; - p += sizeof(ngx_http_variable_value_t); + p += sizeof(ngx_stream_variable_value_t); vv->data = (u_char *) (p - base); p = ngx_cpymem(p, gvvn->sn.str.data, gvvn->sn.str.len); p = ngx_align_ptr(p, sizeof(void *)); - p = ngx_http_geo_copy_values(base, p, node->left, sentinel); + p = ngx_stream_geo_copy_values(base, p, node->left, sentinel); - return ngx_http_geo_copy_values(base, p, node->right, sentinel); + return ngx_stream_geo_copy_values(base, p, node->right, sentinel); } Renamed: vendor/nginx-1.11.3/src/stream/ngx_stream_geoip_module.c (+134 -245) 56% =================================================================== --- vendor/nginx-1.11.1/src/http/modules/ngx_http_geoip_module.c 2016-07-27 12:58:24 +0900 (8e151aa) +++ vendor/nginx-1.11.3/src/stream/ngx_stream_geoip_module.c 2016-07-27 13:06:13 +0900 (f694033) @@ -7,7 +7,7 @@ #include <ngx_config.h> #include <ngx_core.h> -#include <ngx_http.h> +#include <ngx_stream.h> #include <GeoIP.h> #include <GeoIPCity.h> @@ -22,27 +22,25 @@ typedef struct { GeoIP *country; GeoIP *org; GeoIP *city; - ngx_array_t *proxies; /* array of ngx_cidr_t */ - ngx_flag_t proxy_recursive; #if (NGX_HAVE_GEOIP_V6) unsigned country_v6:1; unsigned org_v6:1; unsigned city_v6:1; #endif -} ngx_http_geoip_conf_t; +} ngx_stream_geoip_conf_t; typedef struct { ngx_str_t *name; uintptr_t data; -} ngx_http_geoip_var_t; +} ngx_stream_geoip_var_t; -typedef const char *(*ngx_http_geoip_variable_handler_pt)(GeoIP *, +typedef const char *(*ngx_stream_geoip_variable_handler_pt)(GeoIP *, u_long addr); -ngx_http_geoip_variable_handler_pt ngx_http_geoip_country_functions[] = { +ngx_stream_geoip_variable_handler_pt ngx_stream_geoip_country_functions[] = { GeoIP_country_code_by_ipnum, GeoIP_country_code3_by_ipnum, GeoIP_country_name_by_ipnum, @@ -51,11 +49,13 @@ ngx_http_geoip_variable_handler_pt ngx_http_geoip_country_functions[] = { #if (NGX_HAVE_GEOIP_V6) -typedef const char *(*ngx_http_geoip_variable_handler_v6_pt)(GeoIP *, +typedef const char *(*ngx_stream_geoip_variable_handler_v6_pt)(GeoIP *, geoipv6_t addr); -ngx_http_geoip_variable_handler_v6_pt ngx_http_geoip_country_v6_functions[] = { +ngx_stream_geoip_variable_handler_v6_pt + ngx_stream_geoip_country_v6_functions[] = +{ GeoIP_country_code_by_ipnum_v6, GeoIP_country_code3_by_ipnum_v6, GeoIP_country_name_by_ipnum_v6, @@ -64,97 +64,75 @@ ngx_http_geoip_variable_handler_v6_pt ngx_http_geoip_country_v6_functions[] = { #endif -static ngx_int_t ngx_http_geoip_country_variable(ngx_http_request_t *r, - ngx_http_variable_value_t *v, uintptr_t data); -static ngx_int_t ngx_http_geoip_org_variable(ngx_http_request_t *r, - ngx_http_variable_value_t *v, uintptr_t data); -static ngx_int_t ngx_http_geoip_city_variable(ngx_http_request_t *r, - ngx_http_variable_value_t *v, uintptr_t data); -static ngx_int_t ngx_http_geoip_region_name_variable(ngx_http_request_t *r, - ngx_http_variable_value_t *v, uintptr_t data); -static ngx_int_t ngx_http_geoip_city_float_variable(ngx_http_request_t *r, - ngx_http_variable_value_t *v, uintptr_t data); -static ngx_int_t ngx_http_geoip_city_int_variable(ngx_http_request_t *r, - ngx_http_variable_value_t *v, uintptr_t data); -static GeoIPRecord *ngx_http_geoip_get_city_record(ngx_http_request_t *r); - -static ngx_int_t ngx_http_geoip_add_variables(ngx_conf_t *cf); -static void *ngx_http_geoip_create_conf(ngx_conf_t *cf); -static char *ngx_http_geoip_init_conf(ngx_conf_t *cf, void *conf); -static char *ngx_http_geoip_country(ngx_conf_t *cf, ngx_command_t *cmd, - void *conf); -static char *ngx_http_geoip_org(ngx_conf_t *cf, ngx_command_t *cmd, +static ngx_int_t ngx_stream_geoip_country_variable(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data); +static ngx_int_t ngx_stream_geoip_org_variable(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data); +static ngx_int_t ngx_stream_geoip_city_variable(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data); +static ngx_int_t ngx_stream_geoip_region_name_variable(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data); +static ngx_int_t ngx_stream_geoip_city_float_variable(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data); +static ngx_int_t ngx_stream_geoip_city_int_variable(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data); +static GeoIPRecord *ngx_stream_geoip_get_city_record(ngx_stream_session_t *s); + +static ngx_int_t ngx_stream_geoip_add_variables(ngx_conf_t *cf); +static void *ngx_stream_geoip_create_conf(ngx_conf_t *cf); +static char *ngx_stream_geoip_country(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); -static char *ngx_http_geoip_city(ngx_conf_t *cf, ngx_command_t *cmd, +static char *ngx_stream_geoip_org(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); -static char *ngx_http_geoip_proxy(ngx_conf_t *cf, ngx_command_t *cmd, +static char *ngx_stream_geoip_city(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); -static ngx_int_t ngx_http_geoip_cidr_value(ngx_conf_t *cf, ngx_str_t *net, - ngx_cidr_t *cidr); -static void ngx_http_geoip_cleanup(void *data); +static void ngx_stream_geoip_cleanup(void *data); -static ngx_command_t ngx_http_geoip_commands[] = { +static ngx_command_t ngx_stream_geoip_commands[] = { { ngx_string("geoip_country"), - NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE12, - ngx_http_geoip_country, - NGX_HTTP_MAIN_CONF_OFFSET, + NGX_STREAM_MAIN_CONF|NGX_CONF_TAKE12, + ngx_stream_geoip_country, + NGX_STREAM_MAIN_CONF_OFFSET, 0, NULL }, { ngx_string("geoip_org"), - NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE12, - ngx_http_geoip_org, - NGX_HTTP_MAIN_CONF_OFFSET, + NGX_STREAM_MAIN_CONF|NGX_CONF_TAKE12, + ngx_stream_geoip_org, + NGX_STREAM_MAIN_CONF_OFFSET, 0, NULL }, { ngx_string("geoip_city"), - NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE12, - ngx_http_geoip_city, - NGX_HTTP_MAIN_CONF_OFFSET, - 0, - NULL }, - - { ngx_string("geoip_proxy"), - NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE1, - ngx_http_geoip_proxy, - NGX_HTTP_MAIN_CONF_OFFSET, + NGX_STREAM_MAIN_CONF|NGX_CONF_TAKE12, + ngx_stream_geoip_city, + NGX_STREAM_MAIN_CONF_OFFSET, 0, NULL }, - { ngx_string("geoip_proxy_recursive"), - NGX_HTTP_MAIN_CONF|NGX_CONF_FLAG, - ngx_conf_set_flag_slot, - NGX_HTTP_MAIN_CONF_OFFSET, - offsetof(ngx_http_geoip_conf_t, proxy_recursive), - NULL }, - ngx_null_command }; -static ngx_http_module_t ngx_http_geoip_module_ctx = { - ngx_http_geoip_add_variables, /* preconfiguration */ +static ngx_stream_module_t ngx_stream_geoip_module_ctx = { + ngx_stream_geoip_add_variables, /* preconfiguration */ NULL, /* postconfiguration */ - ngx_http_geoip_create_conf, /* create main configuration */ - ngx_http_geoip_init_conf, /* init main configuration */ + ngx_stream_geoip_create_conf, /* create main configuration */ + NULL, /* init main configuration */ NULL, /* create server configuration */ - NULL, /* merge server configuration */ - - NULL, /* create location configuration */ - NULL /* merge location configuration */ + NULL /* merge server configuration */ }; -ngx_module_t ngx_http_geoip_module = { +ngx_module_t ngx_stream_geoip_module = { NGX_MODULE_V1, - &ngx_http_geoip_module_ctx, /* module context */ - ngx_http_geoip_commands, /* module directives */ - NGX_HTTP_MODULE, /* module type */ + &ngx_stream_geoip_module_ctx, /* module context */ + ngx_stream_geoip_commands, /* module directives */ + NGX_STREAM_MODULE, /* module type */ NULL, /* init master */ NULL, /* init module */ NULL, /* init process */ @@ -166,70 +144,70 @@ ngx_module_t ngx_http_geoip_module = { }; -static ngx_http_variable_t ngx_http_geoip_vars[] = { +static ngx_stream_variable_t ngx_stream_geoip_vars[] = { { ngx_string("geoip_country_code"), NULL, - ngx_http_geoip_country_variable, + ngx_stream_geoip_country_variable, NGX_GEOIP_COUNTRY_CODE, 0, 0 }, { ngx_string("geoip_country_code3"), NULL, - ngx_http_geoip_country_variable, + ngx_stream_geoip_country_variable, NGX_GEOIP_COUNTRY_CODE3, 0, 0 }, { ngx_string("geoip_country_name"), NULL, - ngx_http_geoip_country_variable, + ngx_stream_geoip_country_variable, NGX_GEOIP_COUNTRY_NAME, 0, 0 }, { ngx_string("geoip_org"), NULL, - ngx_http_geoip_org_variable, + ngx_stream_geoip_org_variable, 0, 0, 0 }, { ngx_string("geoip_city_continent_code"), NULL, - ngx_http_geoip_city_variable, + ngx_stream_geoip_city_variable, offsetof(GeoIPRecord, continent_code), 0, 0 }, { ngx_string("geoip_city_country_code"), NULL, - ngx_http_geoip_city_variable, + ngx_stream_geoip_city_variable, offsetof(GeoIPRecord, country_code), 0, 0 }, { ngx_string("geoip_city_country_code3"), NULL, - ngx_http_geoip_city_variable, + ngx_stream_geoip_city_variable, offsetof(GeoIPRecord, country_code3), 0, 0 }, { ngx_string("geoip_city_country_name"), NULL, - ngx_http_geoip_city_variable, + ngx_stream_geoip_city_variable, offsetof(GeoIPRecord, country_name), 0, 0 }, { ngx_string("geoip_region"), NULL, - ngx_http_geoip_city_variable, + ngx_stream_geoip_city_variable, offsetof(GeoIPRecord, region), 0, 0 }, { ngx_string("geoip_region_name"), NULL, - ngx_http_geoip_region_name_variable, + ngx_stream_geoip_region_name_variable, 0, 0, 0 }, { ngx_string("geoip_city"), NULL, - ngx_http_geoip_city_variable, + ngx_stream_geoip_city_variable, offsetof(GeoIPRecord, city), 0, 0 }, { ngx_string("geoip_postal_code"), NULL, - ngx_http_geoip_city_variable, + ngx_stream_geoip_city_variable, offsetof(GeoIPRecord, postal_code), 0, 0 }, { ngx_string("geoip_latitude"), NULL, - ngx_http_geoip_city_float_variable, + ngx_stream_geoip_city_float_variable, offsetof(GeoIPRecord, latitude), 0, 0 }, { ngx_string("geoip_longitude"), NULL, - ngx_http_geoip_city_float_variable, + ngx_stream_geoip_city_float_variable, offsetof(GeoIPRecord, longitude), 0, 0 }, { ngx_string("geoip_dma_code"), NULL, - ngx_http_geoip_city_int_variable, + ngx_stream_geoip_city_int_variable, offsetof(GeoIPRecord, dma_code), 0, 0 }, { ngx_string("geoip_area_code"), NULL, - ngx_http_geoip_city_int_variable, + ngx_stream_geoip_city_int_variable, offsetof(GeoIPRecord, area_code), 0, 0 }, { ngx_null_string, NULL, NULL, 0, 0, 0 } @@ -237,22 +215,14 @@ static ngx_http_variable_t ngx_http_geoip_vars[] = { static u_long -ngx_http_geoip_addr(ngx_http_request_t *r, ngx_http_geoip_conf_t *gcf) +ngx_stream_geoip_addr(ngx_stream_session_t *s, ngx_stream_geoip_conf_t *gcf) { ngx_addr_t addr; - ngx_array_t *xfwd; struct sockaddr_in *sin; - addr.sockaddr = r->connection->sockaddr; - addr.socklen = r->connection->socklen; - /* addr.name = r->connection->addr_text; */ - - xfwd = &r->headers_in.x_forwarded_for; - - if (xfwd->nelts > 0 && gcf->proxies != NULL) { - (void) ngx_http_get_forwarded_addr(r, &addr, xfwd, NULL, - gcf->proxies, gcf->proxy_recursive); - } + addr.sockaddr = s->connection->sockaddr; + addr.socklen = s->connection->socklen; + /* addr.name = s->connection->addr_text; */ #if (NGX_HAVE_INET6) @@ -289,25 +259,17 @@ ngx_http_geoip_addr(ngx_http_request_t *r, ngx_http_geoip_conf_t *gcf) #if (NGX_HAVE_GEOIP_V6) static geoipv6_t -ngx_http_geoip_addr_v6(ngx_http_request_t *r, ngx_http_geoip_conf_t *gcf) +ngx_stream_geoip_addr_v6(ngx_stream_session_t *s, ngx_stream_geoip_conf_t *gcf) { ngx_addr_t addr; - ngx_array_t *xfwd; in_addr_t addr4; struct in6_addr addr6; struct sockaddr_in *sin; struct sockaddr_in6 *sin6; - addr.sockaddr = r->connection->sockaddr; - addr.socklen = r->connection->socklen; - /* addr.name = r->connection->addr_text; */ - - xfwd = &r->headers_in.x_forwarded_for; - - if (xfwd->nelts > 0 && gcf->proxies != NULL) { - (void) ngx_http_get_forwarded_addr(r, &addr, xfwd, NULL, - gcf->proxies, gcf->proxy_recursive); - } + addr.sockaddr = s->connection->sockaddr; + addr.socklen = s->connection->socklen; + /* addr.name = s->connection->addr_text; */ switch (addr.sockaddr->sa_family) { @@ -338,20 +300,20 @@ ngx_http_geoip_addr_v6(ngx_http_request_t *r, ngx_http_geoip_conf_t *gcf) static ngx_int_t -ngx_http_geoip_country_variable(ngx_http_request_t *r, - ngx_http_variable_value_t *v, uintptr_t data) +ngx_stream_geoip_country_variable(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data) { - ngx_http_geoip_variable_handler_pt handler = - ngx_http_geoip_country_functions[data]; + ngx_stream_geoip_variable_handler_pt handler = + ngx_stream_geoip_country_functions[data]; #if (NGX_HAVE_GEOIP_V6) - ngx_http_geoip_variable_handler_v6_pt handler_v6 = - ngx_http_geoip_country_v6_functions[data]; + ngx_stream_geoip_variable_handler_v6_pt handler_v6 = + ngx_stream_geoip_country_v6_functions[data]; #endif - const char *val; - ngx_http_geoip_conf_t *gcf; + const char *val; + ngx_stream_geoip_conf_t *gcf; - gcf = ngx_http_get_module_main_conf(r, ngx_http_geoip_module); + gcf = ngx_stream_get_module_main_conf(s, ngx_stream_geoip_module); if (gcf->country == NULL) { goto not_found; @@ -359,10 +321,10 @@ ngx_http_geoip_country_variable(ngx_http_request_t *r, #if (NGX_HAVE_GEOIP_V6) val = gcf->country_v6 - ? handler_v6(gcf->country, ngx_http_geoip_addr_v6(r, gcf)) - : handler(gcf->country, ngx_http_geoip_addr(r, gcf)); + ? handler_v6(gcf->country, ngx_stream_geoip_addr_v6(s, gcf)) + : handler(gcf->country, ngx_stream_geoip_addr(s, gcf)); #else - val = handler(gcf->country, ngx_http_geoip_addr(r, gcf)); + val = handler(gcf->country, ngx_stream_geoip_addr(s, gcf)); #endif if (val == NULL) { @@ -386,14 +348,14 @@ not_found: static ngx_int_t -ngx_http_geoip_org_variable(ngx_http_request_t *r, - ngx_http_variable_value_t *v, uintptr_t data) +ngx_stream_geoip_org_variable(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data) { - size_t len; - char *val; - ngx_http_geoip_conf_t *gcf; + size_t len; + char *val; + ngx_stream_geoip_conf_t *gcf; - gcf = ngx_http_get_module_main_conf(r, ngx_http_geoip_module); + gcf = ngx_stream_get_module_main_conf(s, ngx_stream_geoip_module); if (gcf->org == NULL) { goto not_found; @@ -402,11 +364,11 @@ ngx_http_geoip_org_variable(ngx_http_request_t *r, #if (NGX_HAVE_GEOIP_V6) val = gcf->org_v6 ? GeoIP_name_by_ipnum_v6(gcf->org, - ngx_http_geoip_addr_v6(r, gcf)) + ngx_stream_geoip_addr_v6(s, gcf)) : GeoIP_name_by_ipnum(gcf->org, - ngx_http_geoip_addr(r, gcf)); + ngx_stream_geoip_addr(s, gcf)); #else - val = GeoIP_name_by_ipnum(gcf->org, ngx_http_geoip_addr(r, gcf)); + val = GeoIP_name_by_ipnum(gcf->org, ngx_stream_geoip_addr(s, gcf)); #endif if (val == NULL) { @@ -414,7 +376,7 @@ ngx_http_geoip_org_variable(ngx_http_request_t *r, } len = ngx_strlen(val); - v->data = ngx_pnalloc(r->pool, len); + v->data = ngx_pnalloc(s->connection->pool, len); if (v->data == NULL) { ngx_free(val); return NGX_ERROR; @@ -440,14 +402,14 @@ not_found: static ngx_int_t -ngx_http_geoip_city_variable(ngx_http_request_t *r, - ngx_http_variable_value_t *v, uintptr_t data) +ngx_stream_geoip_city_variable(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data) { char *val; size_t len; GeoIPRecord *gr; - gr = ngx_http_geoip_get_city_record(r); + gr = ngx_stream_geoip_get_city_record(s); if (gr == NULL) { goto not_found; } @@ -458,7 +420,7 @@ ngx_http_geoip_city_variable(ngx_http_request_t *r, } len = ngx_strlen(val); - v->data = ngx_pnalloc(r->pool, len); + v->data = ngx_pnalloc(s->connection->pool, len); if (v->data == NULL) { GeoIPRecord_delete(gr); return NGX_ERROR; @@ -488,14 +450,14 @@ not_found: static ngx_int_t -ngx_http_geoip_region_name_variable(ngx_http_request_t *r, - ngx_http_variable_value_t *v, uintptr_t data) +ngx_stream_geoip_region_name_variable(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data) { size_t len; const char *val; GeoIPRecord *gr; - gr = ngx_http_geoip_get_city_record(r); + gr = ngx_stream_geoip_get_city_record(s); if (gr == NULL) { goto not_found; } @@ -509,7 +471,7 @@ ngx_http_geoip_region_name_variable(ngx_http_request_t *r, } len = ngx_strlen(val); - v->data = ngx_pnalloc(r->pool, len); + v->data = ngx_pnalloc(s->connection->pool, len); if (v->data == NULL) { return NGX_ERROR; } @@ -532,19 +494,19 @@ not_found: static ngx_int_t -ngx_http_geoip_city_float_variable(ngx_http_request_t *r, - ngx_http_variable_value_t *v, uintptr_t data) +ngx_stream_geoip_city_float_variable(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data) { float val; GeoIPRecord *gr; - gr = ngx_http_geoip_get_city_record(r); + gr = ngx_stream_geoip_get_city_record(s); if (gr == NULL) { v->not_found = 1; return NGX_OK; } - v->data = ngx_pnalloc(r->pool, NGX_INT64_LEN + 5); + v->data = ngx_pnalloc(s->connection->pool, NGX_INT64_LEN + 5); if (v->data == NULL) { GeoIPRecord_delete(gr); return NGX_ERROR; @@ -564,19 +526,19 @@ ngx_http_geoip_city_float_variable(ngx_http_request_t *r, static ngx_int_t -ngx_http_geoip_city_int_variable(ngx_http_request_t *r, - ngx_http_variable_value_t *v, uintptr_t data) +ngx_stream_geoip_city_int_variable(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data) { int val; GeoIPRecord *gr; - gr = ngx_http_geoip_get_city_record(r); + gr = ngx_stream_geoip_get_city_record(s); if (gr == NULL) { v->not_found = 1; return NGX_OK; } - v->data = ngx_pnalloc(r->pool, NGX_INT64_LEN); + v->data = ngx_pnalloc(s->connection->pool, NGX_INT64_LEN); if (v->data == NULL) { GeoIPRecord_delete(gr); return NGX_ERROR; @@ -596,21 +558,21 @@ ngx_http_geoip_city_int_variable(ngx_http_request_t *r, static GeoIPRecord * -ngx_http_geoip_get_city_record(ngx_http_request_t *r) +ngx_stream_geoip_get_city_record(ngx_stream_session_t *s) { - ngx_http_geoip_conf_t *gcf; + ngx_stream_geoip_conf_t *gcf; - gcf = ngx_http_get_module_main_conf(r, ngx_http_geoip_module); + gcf = ngx_stream_get_module_main_conf(s, ngx_stream_geoip_module); if (gcf->city) { #if (NGX_HAVE_GEOIP_V6) return gcf->city_v6 ? GeoIP_record_by_ipnum_v6(gcf->city, - ngx_http_geoip_addr_v6(r, gcf)) + ngx_stream_geoip_addr_v6(s, gcf)) : GeoIP_record_by_ipnum(gcf->city, - ngx_http_geoip_addr(r, gcf)); + ngx_stream_geoip_addr(s, gcf)); #else - return GeoIP_record_by_ipnum(gcf->city, ngx_http_geoip_addr(r, gcf)); + return GeoIP_record_by_ipnum(gcf->city, ngx_stream_geoip_addr(s, gcf)); #endif } @@ -619,12 +581,12 @@ ngx_http_geoip_get_city_record(ngx_http_request_t *r) static ngx_int_t -ngx_http_geoip_add_variables(ngx_conf_t *cf) +ngx_stream_geoip_add_variables(ngx_conf_t *cf) { - ngx_http_variable_t *var, *v; + ngx_stream_variable_t *var, *v; - for (v = ngx_http_geoip_vars; v->name.len; v++) { - var = ngx_http_add_variable(cf, &v->name, v->flags); + for (v = ngx_stream_geoip_vars; v->name.len; v++) { + var = ngx_stream_add_variable(cf, &v->name, v->flags); if (var == NULL) { return NGX_ERROR; } @@ -638,24 +600,22 @@ ngx_http_geoip_add_variables(ngx_conf_t *cf) static void * -ngx_http_geoip_create_conf(ngx_conf_t *cf) +ngx_stream_geoip_create_conf(ngx_conf_t *cf) { - ngx_pool_cleanup_t *cln; - ngx_http_geoip_conf_t *conf; + ngx_pool_cleanup_t *cln; + ngx_stream_geoip_conf_t *conf; - conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_geoip_conf_t)); + conf = ngx_pcalloc(cf->pool, sizeof(ngx_stream_geoip_conf_t)); if (conf == NULL) { return NULL; } - conf->proxy_recursive = NGX_CONF_UNSET; - cln = ngx_pool_cleanup_add(cf->pool, 0); if (cln == NULL) { return NULL; } - cln->handler = ngx_http_geoip_cleanup; + cln->handler = ngx_stream_geoip_cleanup; cln->data = conf; return conf; @@ -663,20 +623,9 @@ ngx_http_geoip_create_conf(ngx_conf_t *cf) static char * -ngx_http_geoip_init_conf(ngx_conf_t *cf, void *conf) +ngx_stream_geoip_country(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) { - ngx_http_geoip_conf_t *gcf = conf; - - ngx_conf_init_value(gcf->proxy_recursive, 0); - - return NGX_CONF_OK; -} - - -static char * -ngx_http_geoip_country(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) -{ - ngx_http_geoip_conf_t *gcf = conf; + ngx_stream_geoip_conf_t *gcf = conf; ngx_str_t *value; @@ -729,9 +678,9 @@ ngx_http_geoip_country(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) static char * -ngx_http_geoip_org(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) +ngx_stream_geoip_org(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) { - ngx_http_geoip_conf_t *gcf = conf; + ngx_stream_geoip_conf_t *gcf = conf; ngx_str_t *value; @@ -790,9 +739,9 @@ ngx_http_geoip_org(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) static char * -ngx_http_geoip_city(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) +ngx_stream_geoip_city(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) { - ngx_http_geoip_conf_t *gcf = conf; + ngx_stream_geoip_conf_t *gcf = conf; ngx_str_t *value; @@ -846,70 +795,10 @@ ngx_http_geoip_city(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) } -static char * -ngx_http_geoip_proxy(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) -{ - ngx_http_geoip_conf_t *gcf = conf; - - ngx_str_t *value; - ngx_cidr_t cidr, *c; - - value = cf->args->elts; - - if (ngx_http_geoip_cidr_value(cf, &value[1], &cidr) != NGX_OK) { - return NGX_CONF_ERROR; - } - - if (gcf->proxies == NULL) { - gcf->proxies = ngx_array_create(cf->pool, 4, sizeof(ngx_cidr_t)); - if (gcf->proxies == NULL) { - return NGX_CONF_ERROR; - } - } - - c = ngx_array_push(gcf->proxies); - if (c == NULL) { - return NGX_CONF_ERROR; - } - - *c = cidr; - - return NGX_CONF_OK; -} - -static ngx_int_t -ngx_http_geoip_cidr_value(ngx_conf_t *cf, ngx_str_t *net, ngx_cidr_t *cidr) -{ - ngx_int_t rc; - - if (ngx_strcmp(net->data, "255.255.255.255") == 0) { - cidr->family = AF_INET; - cidr->u.in.addr = 0xffffffff; - cidr->u.in.mask = 0xffffffff; - - return NGX_OK; - } - - rc = ngx_ptocidr(net, cidr); - - if (rc == NGX_ERROR) { - ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "invalid network \"%V\"", net); - return NGX_ERROR; - } - - if (rc == NGX_DONE) { - ngx_conf_log_error(NGX_LOG_WARN, cf, 0, - "low address bits of %V are meaningless", net); - } - - return NGX_OK; -} - - static void -ngx_http_geoip_cleanup(void *data) +ngx_stream_geoip_cleanup(void *data) { - ngx_http_geoip_conf_t *gcf = data; + ngx_stream_geoip_conf_t *gcf = data; if (gcf->country) { GeoIP_delete(gcf->country); Renamed: vendor/nginx-1.11.3/src/stream/ngx_stream_handler.c (+9 -0) 96% =================================================================== --- vendor/nginx-1.11.1/src/stream/ngx_stream_handler.c 2016-07-27 12:58:24 +0900 (aa69e44) +++ vendor/nginx-1.11.3/src/stream/ngx_stream_handler.c 2016-07-27 13:06:13 +0900 (61169e1) @@ -149,6 +149,15 @@ ngx_stream_init_connection(ngx_connection_t *c) cmcf = ngx_stream_get_module_main_conf(s, ngx_stream_core_module); + s->variables = ngx_pcalloc(s->connection->pool, + cmcf->variables.nelts + * sizeof(ngx_stream_variable_value_t)); + + if (s->variables == NULL) { + ngx_stream_close_connection(c); + return; + } + if (cmcf->limit_conn_handler) { rc = cmcf->limit_conn_handler(s); Renamed: vendor/nginx-1.11.3/src/stream/ngx_stream_limit_conn_module.c (+75 -67) 82% =================================================================== --- vendor/nginx-1.11.1/src/stream/ngx_stream_limit_conn_module.c 2016-07-27 12:58:24 +0900 (f1d8a37) +++ vendor/nginx-1.11.3/src/stream/ngx_stream_limit_conn_module.c 2016-07-27 13:06:13 +0900 (40eca94) @@ -11,33 +11,34 @@ typedef struct { - u_char color; - u_char len; - u_short conn; - u_char data[1]; + u_char color; + u_char len; + u_short conn; + u_char data[1]; } ngx_stream_limit_conn_node_t; typedef struct { - ngx_shm_zone_t *shm_zone; - ngx_rbtree_node_t *node; + ngx_shm_zone_t *shm_zone; + ngx_rbtree_node_t *node; } ngx_stream_limit_conn_cleanup_t; typedef struct { - ngx_rbtree_t *rbtree; + ngx_rbtree_t *rbtree; + ngx_stream_complex_value_t key; } ngx_stream_limit_conn_ctx_t; typedef struct { - ngx_shm_zone_t *shm_zone; - ngx_uint_t conn; + ngx_shm_zone_t *shm_zone; + ngx_uint_t conn; } ngx_stream_limit_conn_limit_t; typedef struct { - ngx_array_t limits; - ngx_uint_t log_level; + ngx_array_t limits; + ngx_uint_t log_level; } ngx_stream_limit_conn_conf_t; @@ -93,28 +94,29 @@ static ngx_command_t ngx_stream_limit_conn_commands[] = { static ngx_stream_module_t ngx_stream_limit_conn_module_ctx = { + NULL, /* preconfiguration */ ngx_stream_limit_conn_init, /* postconfiguration */ NULL, /* create main configuration */ NULL, /* init main configuration */ ngx_stream_limit_conn_create_conf, /* create server configuration */ - ngx_stream_limit_conn_merge_conf, /* merge server configuration */ + ngx_stream_limit_conn_merge_conf /* merge server configuration */ }; ngx_module_t ngx_stream_limit_conn_module = { NGX_MODULE_V1, - &ngx_stream_limit_conn_module_ctx, /* module context */ - ngx_stream_limit_conn_commands, /* module directives */ - NGX_STREAM_MODULE, /* module type */ - NULL, /* init master */ - NULL, /* init module */ - NULL, /* init process */ - NULL, /* init thread */ - NULL, /* exit thread */ - NULL, /* exit process */ - NULL, /* exit master */ + &ngx_stream_limit_conn_module_ctx, /* module context */ + ngx_stream_limit_conn_commands, /* module directives */ + NGX_STREAM_MODULE, /* module type */ + NULL, /* init master */ + NULL, /* init module */ + NULL, /* init process */ + NULL, /* init thread */ + NULL, /* exit thread */ + NULL, /* exit process */ + NULL, /* exit master */ NGX_MODULE_V1_PADDING }; @@ -129,48 +131,36 @@ ngx_stream_limit_conn_handler(ngx_stream_session_t *s) ngx_slab_pool_t *shpool; ngx_rbtree_node_t *node; ngx_pool_cleanup_t *cln; - struct sockaddr_in *sin; -#if (NGX_HAVE_INET6) - struct sockaddr_in6 *sin6; -#endif ngx_stream_limit_conn_ctx_t *ctx; ngx_stream_limit_conn_node_t *lc; ngx_stream_limit_conn_conf_t *lccf; ngx_stream_limit_conn_limit_t *limits; ngx_stream_limit_conn_cleanup_t *lccln; - switch (s->connection->sockaddr->sa_family) { - - case AF_INET: - sin = (struct sockaddr_in *) s->connection->sockaddr; - - key.len = sizeof(in_addr_t); - key.data = (u_char *) &sin->sin_addr; - - break; - -#if (NGX_HAVE_INET6) - case AF_INET6: - sin6 = (struct sockaddr_in6 *) s->connection->sockaddr; - - key.len = sizeof(struct in6_addr); - key.data = sin6->sin6_addr.s6_addr; - - break; -#endif - - default: - return NGX_DECLINED; - } - - hash = ngx_crc32_short(key.data, key.len); - lccf = ngx_stream_get_module_srv_conf(s, ngx_stream_limit_conn_module); limits = lccf->limits.elts; for (i = 0; i < lccf->limits.nelts; i++) { ctx = limits[i].shm_zone->data; + if (ngx_stream_complex_value(s, &ctx->key, &key) != NGX_OK) { + return NGX_ERROR; + } + + if (key.len == 0) { + continue; + } + + if (key.len > 255) { + ngx_log_error(NGX_LOG_ERR, s->connection->log, 0, + "the value of the \"%V\" key " + "is more than 255 bytes: \"%V\"", + &ctx->key.value, &key); + continue; + } + + hash = ngx_crc32_short(key.data, key.len); + shpool = (ngx_slab_pool_t *) limits[i].shm_zone->shm.addr; ngx_shmtx_lock(&shpool->mutex); @@ -382,6 +372,19 @@ ngx_stream_limit_conn_init_zone(ngx_shm_zone_t *shm_zone, void *data) ctx = shm_zone->data; if (octx) { + if (ctx->key.value.len != octx->key.value.len + || ngx_strncmp(ctx->key.value.data, octx->key.value.data, + ctx->key.value.len) + != 0) + { + ngx_log_error(NGX_LOG_EMERG, shm_zone->shm.log, 0, + "limit_conn_zone \"%V\" uses the \"%V\" key " + "while previously it used the \"%V\" key", + &shm_zone->shm.name, &ctx->key.value, + &octx->key.value); + return NGX_ERROR; + } + ctx->rbtree = octx->rbtree; return NGX_OK; @@ -465,12 +468,13 @@ ngx_stream_limit_conn_merge_conf(ngx_conf_t *cf, void *parent, void *child) static char * ngx_stream_limit_conn_zone(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) { - u_char *p; - ssize_t size; - ngx_str_t *value, name, s; - ngx_uint_t i; - ngx_shm_zone_t *shm_zone; - ngx_stream_limit_conn_ctx_t *ctx; + u_char *p; + ssize_t size; + ngx_str_t *value, name, s; + ngx_uint_t i; + ngx_shm_zone_t *shm_zone; + ngx_stream_limit_conn_ctx_t *ctx; + ngx_stream_compile_complex_value_t ccv; value = cf->args->elts; @@ -479,6 +483,16 @@ ngx_stream_limit_conn_zone(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) return NGX_CONF_ERROR; } + ngx_memzero(&ccv, sizeof(ngx_stream_compile_complex_value_t)); + + ccv.cf = cf; + ccv.value = &value[1]; + ccv.complex_value = &ctx->key; + + if (ngx_stream_compile_complex_value(&ccv) != NGX_OK) { + return NGX_CONF_ERROR; + } + size = 0; name.len = 0; @@ -537,17 +551,11 @@ ngx_stream_limit_conn_zone(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) } if (shm_zone->data) { - ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, - "%V \"%V\" is already bound to key " - "\"$binary_remote_addr\"", - &cmd->name, &name); - return NGX_CONF_ERROR; - } + ctx = shm_zone->data; - if (ngx_strcmp(value[1].data, "$binary_remote_addr") != 0) { ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, - "unsupported key \"%V\", use " - "$binary_remote_addr", &value[1]); + "%V \"%V\" is already bound to key \"%V\"", + &cmd->name, &name, &ctx->key.value); return NGX_CONF_ERROR; } Renamed: vendor/nginx-1.11.3/src/stream/ngx_stream_map_module.c (+98 -99) 65% =================================================================== --- vendor/nginx-1.11.1/src/http/modules/ngx_http_map_module.c 2016-07-27 12:58:24 +0900 (732aa5d) +++ vendor/nginx-1.11.3/src/stream/ngx_stream_map_module.c 2016-07-27 13:06:13 +0900 (47a15be) @@ -7,91 +7,89 @@ #include <ngx_config.h> #include <ngx_core.h> -#include <ngx_http.h> +#include <ngx_stream.h> typedef struct { - ngx_uint_t hash_max_size; - ngx_uint_t hash_bucket_size; -} ngx_http_map_conf_t; + ngx_uint_t hash_max_size; + ngx_uint_t hash_bucket_size; +} ngx_stream_map_conf_t; typedef struct { - ngx_hash_keys_arrays_t keys; + ngx_hash_keys_arrays_t keys; - ngx_array_t *values_hash; + ngx_array_t *values_hash; #if (NGX_PCRE) - ngx_array_t regexes; + ngx_array_t regexes; #endif - ngx_http_variable_value_t *default_value; - ngx_conf_t *cf; - ngx_uint_t hostnames; /* unsigned hostnames:1 */ -} ngx_http_map_conf_ctx_t; + ngx_stream_variable_value_t *default_value; + ngx_conf_t *cf; + ngx_uint_t hostnames; /* unsigned hostnames:1 */ +} ngx_stream_map_conf_ctx_t; typedef struct { - ngx_http_map_t map; - ngx_http_complex_value_t value; - ngx_http_variable_value_t *default_value; - ngx_uint_t hostnames; /* unsigned hostnames:1 */ -} ngx_http_map_ctx_t; + ngx_stream_map_t map; + ngx_stream_complex_value_t value; + ngx_stream_variable_value_t *default_value; + ngx_uint_t hostnames; /* unsigned hostnames:1 */ +} ngx_stream_map_ctx_t; -static int ngx_libc_cdecl ngx_http_map_cmp_dns_wildcards(const void *one, +static int ngx_libc_cdecl ngx_stream_map_cmp_dns_wildcards(const void *one, const void *two); -static void *ngx_http_map_create_conf(ngx_conf_t *cf); -static char *ngx_http_map_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); -static char *ngx_http_map(ngx_conf_t *cf, ngx_command_t *dummy, void *conf); +static void *ngx_stream_map_create_conf(ngx_conf_t *cf); +static char *ngx_stream_map_block(ngx_conf_t *cf, ngx_command_t *cmd, + void *conf); +static char *ngx_stream_map(ngx_conf_t *cf, ngx_command_t *dummy, void *conf); -static ngx_command_t ngx_http_map_commands[] = { +static ngx_command_t ngx_stream_map_commands[] = { { ngx_string("map"), - NGX_HTTP_MAIN_CONF|NGX_CONF_BLOCK|NGX_CONF_TAKE2, - ngx_http_map_block, - NGX_HTTP_MAIN_CONF_OFFSET, + NGX_STREAM_MAIN_CONF|NGX_CONF_BLOCK|NGX_CONF_TAKE2, + ngx_stream_map_block, + NGX_STREAM_MAIN_CONF_OFFSET, 0, NULL }, { ngx_string("map_hash_max_size"), - NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE1, + NGX_STREAM_MAIN_CONF|NGX_CONF_TAKE1, ngx_conf_set_num_slot, - NGX_HTTP_MAIN_CONF_OFFSET, - offsetof(ngx_http_map_conf_t, hash_max_size), + NGX_STREAM_MAIN_CONF_OFFSET, + offsetof(ngx_stream_map_conf_t, hash_max_size), NULL }, { ngx_string("map_hash_bucket_size"), - NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE1, + NGX_STREAM_MAIN_CONF|NGX_CONF_TAKE1, ngx_conf_set_num_slot, - NGX_HTTP_MAIN_CONF_OFFSET, - offsetof(ngx_http_map_conf_t, hash_bucket_size), + NGX_STREAM_MAIN_CONF_OFFSET, + offsetof(ngx_stream_map_conf_t, hash_bucket_size), NULL }, ngx_null_command }; -static ngx_http_module_t ngx_http_map_module_ctx = { +static ngx_stream_module_t ngx_stream_map_module_ctx = { NULL, /* preconfiguration */ NULL, /* postconfiguration */ - ngx_http_map_create_conf, /* create main configuration */ + ngx_stream_map_create_conf, /* create main configuration */ NULL, /* init main configuration */ NULL, /* create server configuration */ - NULL, /* merge server configuration */ - - NULL, /* create location configuration */ - NULL /* merge location configuration */ + NULL /* merge server configuration */ }; -ngx_module_t ngx_http_map_module = { +ngx_module_t ngx_stream_map_module = { NGX_MODULE_V1, - &ngx_http_map_module_ctx, /* module context */ - ngx_http_map_commands, /* module directives */ - NGX_HTTP_MODULE, /* module type */ + &ngx_stream_map_module_ctx, /* module context */ + ngx_stream_map_commands, /* module directives */ + NGX_STREAM_MODULE, /* module type */ NULL, /* init master */ NULL, /* init module */ NULL, /* init process */ @@ -104,19 +102,19 @@ ngx_module_t ngx_http_map_module = { static ngx_int_t -ngx_http_map_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v, +ngx_stream_map_variable(ngx_stream_session_t *s, ngx_stream_variable_value_t *v, uintptr_t data) { - ngx_http_map_ctx_t *map = (ngx_http_map_ctx_t *) data; + ngx_stream_map_ctx_t *map = (ngx_stream_map_ctx_t *) data; - ngx_str_t val, str; - ngx_http_complex_value_t *cv; - ngx_http_variable_value_t *value; + ngx_str_t val, str; + ngx_stream_complex_value_t *cv; + ngx_stream_variable_value_t *value; - ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, - "http map started"); + ngx_log_debug0(NGX_LOG_DEBUG_STREAM, s->connection->log, 0, + "stream map started"); - if (ngx_http_complex_value(r, &map->value, &val) != NGX_OK) { + if (ngx_stream_complex_value(s, &map->value, &val) != NGX_OK) { return NGX_ERROR; } @@ -124,16 +122,16 @@ ngx_http_map_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v, val.len--; } - value = ngx_http_map_find(r, &map->map, &val); + value = ngx_stream_map_find(s, &map->map, &val); if (value == NULL) { value = map->default_value; } if (!value->valid) { - cv = (ngx_http_complex_value_t *) value->data; + cv = (ngx_stream_complex_value_t *) value->data; - if (ngx_http_complex_value(r, cv, &str) != NGX_OK) { + if (ngx_stream_complex_value(s, cv, &str) != NGX_OK) { return NGX_ERROR; } @@ -147,19 +145,19 @@ ngx_http_map_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v, *v = *value; } - ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, - "http map: \"%V\" \"%v\"", &val, v); + ngx_log_debug2(NGX_LOG_DEBUG_STREAM, s->connection->log, 0, + "stream map: \"%V\" \"%v\"", &val, v); return NGX_OK; } static void * -ngx_http_map_create_conf(ngx_conf_t *cf) +ngx_stream_map_create_conf(ngx_conf_t *cf) { - ngx_http_map_conf_t *mcf; + ngx_stream_map_conf_t *mcf; - mcf = ngx_palloc(cf->pool, sizeof(ngx_http_map_conf_t)); + mcf = ngx_palloc(cf->pool, sizeof(ngx_stream_map_conf_t)); if (mcf == NULL) { return NULL; } @@ -172,19 +170,19 @@ ngx_http_map_create_conf(ngx_conf_t *cf) static char * -ngx_http_map_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) +ngx_stream_map_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) { - ngx_http_map_conf_t *mcf = conf; - - char *rv; - ngx_str_t *value, name; - ngx_conf_t save; - ngx_pool_t *pool; - ngx_hash_init_t hash; - ngx_http_map_ctx_t *map; - ngx_http_variable_t *var; - ngx_http_map_conf_ctx_t ctx; - ngx_http_compile_complex_value_t ccv; + ngx_stream_map_conf_t *mcf = conf; + + char *rv; + ngx_str_t *value, name; + ngx_conf_t save; + ngx_pool_t *pool; + ngx_hash_init_t hash; + ngx_stream_map_ctx_t *map; + ngx_stream_variable_t *var; + ngx_stream_map_conf_ctx_t ctx; + ngx_stream_compile_complex_value_t ccv; if (mcf->hash_max_size == NGX_CONF_UNSET_UINT) { mcf->hash_max_size = 2048; @@ -198,20 +196,20 @@ ngx_http_map_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) ngx_cacheline_size); } - map = ngx_pcalloc(cf->pool, sizeof(ngx_http_map_ctx_t)); + map = ngx_pcalloc(cf->pool, sizeof(ngx_stream_map_ctx_t)); if (map == NULL) { return NGX_CONF_ERROR; } value = cf->args->elts; - ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t)); + ngx_memzero(&ccv, sizeof(ngx_stream_compile_complex_value_t)); ccv.cf = cf; ccv.value = &value[1]; ccv.complex_value = &map->value; - if (ngx_http_compile_complex_value(&ccv) != NGX_OK) { + if (ngx_stream_compile_complex_value(&ccv) != NGX_OK) { return NGX_CONF_ERROR; } @@ -226,12 +224,12 @@ ngx_http_map_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) name.len--; name.data++; - var = ngx_http_add_variable(cf, &name, NGX_HTTP_VAR_CHANGEABLE); + var = ngx_stream_add_variable(cf, &name, NGX_STREAM_VAR_CHANGEABLE); if (var == NULL) { return NGX_CONF_ERROR; } - var->get_handler = ngx_http_map_variable; + var->get_handler = ngx_stream_map_variable; var->data = (uintptr_t) map; pool = ngx_create_pool(NGX_DEFAULT_POOL_SIZE, cf->log); @@ -254,7 +252,8 @@ ngx_http_map_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) } #if (NGX_PCRE) - if (ngx_array_init(&ctx.regexes, cf->pool, 2, sizeof(ngx_http_map_regex_t)) + if (ngx_array_init(&ctx.regexes, cf->pool, 2, + sizeof(ngx_stream_map_regex_t)) != NGX_OK) { ngx_destroy_pool(pool); @@ -269,7 +268,7 @@ ngx_http_map_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) save = *cf; cf->pool = pool; cf->ctx = &ctx; - cf->handler = ngx_http_map; + cf->handler = ngx_stream_map; cf->handler_conf = conf; rv = ngx_conf_parse(cf, NULL); @@ -282,7 +281,7 @@ ngx_http_map_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) } map->default_value = ctx.default_value ? ctx.default_value: - &ngx_http_variable_null_value; + &ngx_stream_variable_null_value; map->hostnames = ctx.hostnames; @@ -308,7 +307,7 @@ ngx_http_map_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) ngx_qsort(ctx.keys.dns_wc_head.elts, (size_t) ctx.keys.dns_wc_head.nelts, - sizeof(ngx_hash_key_t), ngx_http_map_cmp_dns_wildcards); + sizeof(ngx_hash_key_t), ngx_stream_map_cmp_dns_wildcards); hash.hash = NULL; hash.temp_pool = pool; @@ -328,7 +327,7 @@ ngx_http_map_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) ngx_qsort(ctx.keys.dns_wc_tail.elts, (size_t) ctx.keys.dns_wc_tail.nelts, - sizeof(ngx_hash_key_t), ngx_http_map_cmp_dns_wildcards); + sizeof(ngx_hash_key_t), ngx_stream_map_cmp_dns_wildcards); hash.hash = NULL; hash.temp_pool = pool; @@ -360,7 +359,7 @@ ngx_http_map_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) static int ngx_libc_cdecl -ngx_http_map_cmp_dns_wildcards(const void *one, const void *two) +ngx_stream_map_cmp_dns_wildcards(const void *one, const void *two) { ngx_hash_key_t *first, *second; @@ -372,17 +371,17 @@ ngx_http_map_cmp_dns_wildcards(const void *one, const void *two) static char * -ngx_http_map(ngx_conf_t *cf, ngx_command_t *dummy, void *conf) +ngx_stream_map(ngx_conf_t *cf, ngx_command_t *dummy, void *conf) { - u_char *data; - size_t len; - ngx_int_t rv; - ngx_str_t *value, v; - ngx_uint_t i, key; - ngx_http_map_conf_ctx_t *ctx; - ngx_http_complex_value_t cv, *cvp; - ngx_http_variable_value_t *var, **vp; - ngx_http_compile_complex_value_t ccv; + u_char *data; + size_t len; + ngx_int_t rv; + ngx_str_t *value, v; + ngx_uint_t i, key; + ngx_stream_map_conf_ctx_t *ctx; + ngx_stream_complex_value_t cv, *cvp; + ngx_stream_variable_value_t *var, **vp; + ngx_stream_compile_complex_value_t ccv; ctx = cf->ctx; @@ -422,7 +421,7 @@ ngx_http_map(ngx_conf_t *cf, ngx_command_t *dummy, void *conf) len = vp[i]->len; } else { - cvp = (ngx_http_complex_value_t *) vp[i]->data; + cvp = (ngx_stream_complex_value_t *) vp[i]->data; data = cvp->value.data; len = cvp->value.len; } @@ -439,14 +438,14 @@ ngx_http_map(ngx_conf_t *cf, ngx_command_t *dummy, void *conf) } else { if (ngx_array_init(&ctx->values_hash[key], cf->pool, 4, - sizeof(ngx_http_variable_value_t *)) + sizeof(ngx_stream_variable_value_t *)) != NGX_OK) { return NGX_CONF_ERROR; } } - var = ngx_palloc(ctx->keys.pool, sizeof(ngx_http_variable_value_t)); + var = ngx_palloc(ctx->keys.pool, sizeof(ngx_stream_variable_value_t)); if (var == NULL) { return NGX_CONF_ERROR; } @@ -457,18 +456,18 @@ ngx_http_map(ngx_conf_t *cf, ngx_command_t *dummy, void *conf) return NGX_CONF_ERROR; } - ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t)); + ngx_memzero(&ccv, sizeof(ngx_stream_compile_complex_value_t)); ccv.cf = ctx->cf; ccv.value = &v; ccv.complex_value = &cv; - if (ngx_http_compile_complex_value(&ccv) != NGX_OK) { + if (ngx_stream_compile_complex_value(&ccv) != NGX_OK) { return NGX_CONF_ERROR; } if (cv.lengths != NULL) { - cvp = ngx_palloc(ctx->keys.pool, sizeof(ngx_http_complex_value_t)); + cvp = ngx_palloc(ctx->keys.pool, sizeof(ngx_stream_complex_value_t)); if (cvp == NULL) { return NGX_CONF_ERROR; } @@ -513,9 +512,9 @@ found: #if (NGX_PCRE) if (value[0].len && value[0].data[0] == '~') { - ngx_regex_compile_t rc; - ngx_http_map_regex_t *regex; - u_char errstr[NGX_MAX_CONF_ERRSTR]; + ngx_regex_compile_t rc; + ngx_stream_map_regex_t *regex; + u_char errstr[NGX_MAX_CONF_ERRSTR]; regex = ngx_array_push(&ctx->regexes); if (regex == NULL) { @@ -537,7 +536,7 @@ found: rc.err.len = NGX_MAX_CONF_ERRSTR; rc.err.data = errstr; - regex->regex = ngx_http_regex_compile(ctx->cf, &rc); + regex->regex = ngx_stream_regex_compile(ctx->cf, &rc); if (regex->regex == NULL) { return NGX_CONF_ERROR; } Renamed: vendor/nginx-1.11.3/src/stream/ngx_stream_proxy_module.c (+371 -97) 81% =================================================================== --- vendor/nginx-1.11.1/src/stream/ngx_stream_proxy_module.c 2016-07-27 12:58:24 +0900 (d4fa994) +++ vendor/nginx-1.11.3/src/stream/ngx_stream_proxy_module.c 2016-07-27 13:06:13 +0900 (9d43109) @@ -12,6 +12,7 @@ typedef struct { ngx_addr_t *addr; + ngx_stream_complex_value_t *value; #if (NGX_HAVE_TRANSPARENT_PROXY) ngx_uint_t transparent; /* unsigned transparent:1; */ #endif @@ -36,7 +37,7 @@ typedef struct { ngx_flag_t ssl_session_reuse; ngx_uint_t ssl_protocols; ngx_str_t ssl_ciphers; - ngx_str_t ssl_name; + ngx_stream_complex_value_t *ssl_name; ngx_flag_t ssl_server_name; ngx_flag_t ssl_verify; @@ -51,14 +52,18 @@ typedef struct { #endif ngx_stream_upstream_srv_conf_t *upstream; + ngx_stream_complex_value_t *upstream_value; } ngx_stream_proxy_srv_conf_t; static void ngx_stream_proxy_handler(ngx_stream_session_t *s); +static ngx_int_t ngx_stream_proxy_eval(ngx_stream_session_t *s, + ngx_stream_proxy_srv_conf_t *pscf); static ngx_int_t ngx_stream_proxy_set_local(ngx_stream_session_t *s, ngx_stream_upstream_t *u, ngx_stream_upstream_local_t *local); static void ngx_stream_proxy_connect(ngx_stream_session_t *s); static void ngx_stream_proxy_init_upstream(ngx_stream_session_t *s); +static void ngx_stream_proxy_resolve_handler(ngx_resolver_ctx_t *ctx); static void ngx_stream_proxy_upstream_handler(ngx_event_t *ev); static void ngx_stream_proxy_downstream_handler(ngx_event_t *ev); static void ngx_stream_proxy_process_connection(ngx_event_t *ev, @@ -245,7 +250,7 @@ static ngx_command_t ngx_stream_proxy_commands[] = { { ngx_string("proxy_ssl_name"), NGX_STREAM_MAIN_CONF|NGX_STREAM_SRV_CONF|NGX_CONF_TAKE1, - ngx_conf_set_str_slot, + ngx_stream_set_complex_value_slot, NGX_STREAM_SRV_CONF_OFFSET, offsetof(ngx_stream_proxy_srv_conf_t, ssl_name), NULL }, @@ -313,6 +318,7 @@ static ngx_command_t ngx_stream_proxy_commands[] = { static ngx_stream_module_t ngx_stream_proxy_module_ctx = { + NULL, /* preconfiguration */ NULL, /* postconfiguration */ NULL, /* create main configuration */ @@ -342,11 +348,16 @@ ngx_module_t ngx_stream_proxy_module = { static void ngx_stream_proxy_handler(ngx_stream_session_t *s) { - u_char *p; - ngx_connection_t *c; - ngx_stream_upstream_t *u; - ngx_stream_proxy_srv_conf_t *pscf; - ngx_stream_upstream_srv_conf_t *uscf; + u_char *p; + ngx_str_t *host; + ngx_uint_t i; + ngx_connection_t *c; + ngx_resolver_ctx_t *ctx, temp; + ngx_stream_upstream_t *u; + ngx_stream_core_srv_conf_t *cscf; + ngx_stream_proxy_srv_conf_t *pscf; + ngx_stream_upstream_srv_conf_t *uscf, **uscfp; + ngx_stream_upstream_main_conf_t *umcf; c = s->connection; @@ -375,7 +386,161 @@ ngx_stream_proxy_handler(ngx_stream_session_t *s) u->peer.type = c->type; - uscf = pscf->upstream; + u->proxy_protocol = pscf->proxy_protocol; + u->start_sec = ngx_time(); + + c->write->handler = ngx_stream_proxy_downstream_handler; + c->read->handler = ngx_stream_proxy_downstream_handler; + + if (c->type == SOCK_STREAM) { + p = ngx_pnalloc(c->pool, pscf->buffer_size); + if (p == NULL) { + ngx_stream_proxy_finalize(s, NGX_ERROR); + return; + } + + u->downstream_buf.start = p; + u->downstream_buf.end = p + pscf->buffer_size; + u->downstream_buf.pos = p; + u->downstream_buf.last = p; + + if (u->proxy_protocol +#if (NGX_STREAM_SSL) + && pscf->ssl == NULL +#endif + && pscf->buffer_size >= NGX_PROXY_PROTOCOL_MAX_HEADER) + { + /* optimization for a typical case */ + + ngx_log_debug0(NGX_LOG_DEBUG_STREAM, c->log, 0, + "stream proxy send PROXY protocol header"); + + p = ngx_proxy_protocol_write(c, u->downstream_buf.last, + u->downstream_buf.end); + if (p == NULL) { + ngx_stream_proxy_finalize(s, NGX_ERROR); + return; + } + + u->downstream_buf.last = p; + u->proxy_protocol = 0; + } + + if (c->read->ready) { + ngx_post_event(c->read, &ngx_posted_events); + } + } + + if (pscf->upstream_value) { + if (ngx_stream_proxy_eval(s, pscf) != NGX_OK) { + ngx_stream_proxy_finalize(s, NGX_ERROR); + return; + } + } + + if (u->resolved == NULL) { + + uscf = pscf->upstream; + + } else { + +#if (NGX_STREAM_SSL) + u->ssl_name = u->resolved->host; +#endif + + host = &u->resolved->host; + + if (u->resolved->sockaddr) { + + if (u->resolved->port == 0 + && u->resolved->sockaddr->sa_family != AF_UNIX) + { + ngx_log_error(NGX_LOG_ERR, c->log, 0, + "no port in upstream \"%V\"", host); + ngx_stream_proxy_finalize(s, NGX_ERROR); + return; + } + + if (ngx_stream_upstream_create_round_robin_peer(s, u->resolved) + != NGX_OK) + { + ngx_stream_proxy_finalize(s, NGX_ERROR); + return; + } + + ngx_stream_proxy_connect(s); + + return; + } + + umcf = ngx_stream_get_module_main_conf(s, ngx_stream_upstream_module); + + uscfp = umcf->upstreams.elts; + + for (i = 0; i < umcf->upstreams.nelts; i++) { + + uscf = uscfp[i]; + + if (uscf->host.len == host->len + && ((uscf->port == 0 && u->resolved->no_port) + || uscf->port == u->resolved->port) + && ngx_strncasecmp(uscf->host.data, host->data, host->len) == 0) + { + goto found; + } + } + + if (u->resolved->port == 0) { + ngx_log_error(NGX_LOG_ERR, c->log, 0, + "no port in upstream \"%V\"", host); + ngx_stream_proxy_finalize(s, NGX_ERROR); + return; + } + + temp.name = *host; + + cscf = ngx_stream_get_module_srv_conf(s, ngx_stream_core_module); + + ctx = ngx_resolve_start(cscf->resolver, &temp); + if (ctx == NULL) { + ngx_stream_proxy_finalize(s, NGX_ERROR); + return; + } + + if (ctx == NGX_NO_RESOLVER) { + ngx_log_error(NGX_LOG_ERR, c->log, 0, + "no resolver defined to resolve %V", host); + ngx_stream_proxy_finalize(s, NGX_ERROR); + return; + } + + ctx->name = *host; + ctx->handler = ngx_stream_proxy_resolve_handler; + ctx->data = s; + ctx->timeout = cscf->resolver_timeout; + + u->resolved->ctx = ctx; + + if (ngx_resolve_name(ctx) != NGX_OK) { + u->resolved->ctx = NULL; + ngx_stream_proxy_finalize(s, NGX_ERROR); + return; + } + + return; + } + +found: + + if (uscf == NULL) { + ngx_log_error(NGX_LOG_ALERT, c->log, 0, "no upstream configuration"); + ngx_stream_proxy_finalize(s, NGX_ERROR); + return; + } + +#if (NGX_HTTP_SSL) + u->ssl_name = uscf->host; +#endif if (uscf->peer.init(s, uscf) != NGX_OK) { ngx_stream_proxy_finalize(s, NGX_ERROR); @@ -390,55 +555,58 @@ ngx_stream_proxy_handler(ngx_stream_session_t *s) u->peer.tries = pscf->next_upstream_tries; } - u->proxy_protocol = pscf->proxy_protocol; - u->start_sec = ngx_time(); + ngx_stream_proxy_connect(s); +} - c->write->handler = ngx_stream_proxy_downstream_handler; - c->read->handler = ngx_stream_proxy_downstream_handler; - if (c->type == SOCK_DGRAM) { - ngx_stream_proxy_connect(s); - return; - } +static ngx_int_t +ngx_stream_proxy_eval(ngx_stream_session_t *s, + ngx_stream_proxy_srv_conf_t *pscf) +{ + ngx_str_t host; + ngx_url_t url; + ngx_stream_upstream_t *u; - p = ngx_pnalloc(c->pool, pscf->buffer_size); - if (p == NULL) { - ngx_stream_proxy_finalize(s, NGX_ERROR); - return; + if (ngx_stream_complex_value(s, pscf->upstream_value, &host) != NGX_OK) { + return NGX_ERROR; } - u->downstream_buf.start = p; - u->downstream_buf.end = p + pscf->buffer_size; - u->downstream_buf.pos = p; - u->downstream_buf.last = p; + ngx_memzero(&url, sizeof(ngx_url_t)); - if (u->proxy_protocol -#if (NGX_STREAM_SSL) - && pscf->ssl == NULL -#endif - && pscf->buffer_size >= NGX_PROXY_PROTOCOL_MAX_HEADER) - { - /* optimization for a typical case */ + url.url = host; + url.no_resolve = 1; - ngx_log_debug0(NGX_LOG_DEBUG_STREAM, c->log, 0, - "stream proxy send PROXY protocol header"); - - p = ngx_proxy_protocol_write(c, u->downstream_buf.last, - u->downstream_buf.end); - if (p == NULL) { - ngx_stream_proxy_finalize(s, NGX_ERROR); - return; + if (ngx_parse_url(s->connection->pool, &url) != NGX_OK) { + if (url.err) { + ngx_log_error(NGX_LOG_ERR, s->connection->log, 0, + "%s in upstream \"%V\"", url.err, &url.url); } - u->downstream_buf.last = p; - u->proxy_protocol = 0; + return NGX_ERROR; } - if (c->read->ready) { - ngx_post_event(c->read, &ngx_posted_events); + u = s->upstream; + + u->resolved = ngx_pcalloc(s->connection->pool, + sizeof(ngx_stream_upstream_resolved_t)); + if (u->resolved == NULL) { + return NGX_ERROR; } - ngx_stream_proxy_connect(s); + if (url.addrs && url.addrs[0].sockaddr) { + u->resolved->sockaddr = url.addrs[0].sockaddr; + u->resolved->socklen = url.addrs[0].socklen; + u->resolved->naddrs = 1; + u->resolved->host = url.addrs[0].name; + + } else { + u->resolved->host = url.host; + } + + u->resolved->port = url.port; + u->resolved->no_port = url.no_port; + + return NGX_OK; } @@ -446,12 +614,9 @@ static ngx_int_t ngx_stream_proxy_set_local(ngx_stream_session_t *s, ngx_stream_upstream_t *u, ngx_stream_upstream_local_t *local) { - ngx_addr_t *addr; - ngx_connection_t *c; - struct sockaddr_in *sin; -#if (NGX_HAVE_INET6) - struct sockaddr_in6 *sin6; -#endif + ngx_int_t rc; + ngx_str_t val; + ngx_addr_t *addr; if (local == NULL) { u->peer.local = NULL; @@ -462,45 +627,36 @@ ngx_stream_proxy_set_local(ngx_stream_session_t *s, ngx_stream_upstream_t *u, u->peer.transparent = local->transparent; #endif - if (local->addr) { + if (local->value == NULL) { u->peer.local = local->addr; return NGX_OK; } - /* $remote_addr */ + if (ngx_stream_complex_value(s, local->value, &val) != NGX_OK) { + return NGX_ERROR; + } - c = s->connection; + if (val.len == 0) { + return NGX_OK; + } - addr = ngx_palloc(c->pool, sizeof(ngx_addr_t)); + addr = ngx_palloc(s->connection->pool, sizeof(ngx_addr_t)); if (addr == NULL) { return NGX_ERROR; } - addr->socklen = c->socklen; - - addr->sockaddr = ngx_palloc(c->pool, addr->socklen); - if (addr->sockaddr == NULL) { + rc = ngx_parse_addr_port(s->connection->pool, addr, val.data, val.len); + if (rc == NGX_ERROR) { return NGX_ERROR; } - ngx_memcpy(addr->sockaddr, c->sockaddr, c->socklen); - - switch (addr->sockaddr->sa_family) { - - case AF_INET: - sin = (struct sockaddr_in *) addr->sockaddr; - sin->sin_port = 0; - break; - -#if (NGX_HAVE_INET6) - case AF_INET6: - sin6 = (struct sockaddr_in6 *) addr->sockaddr; - sin6->sin6_port = 0; - break; -#endif + if (rc != NGX_OK) { + ngx_log_error(NGX_LOG_ERR, s->connection->log, 0, + "invalid local address \"%V\"", &val); + return NGX_OK; } - addr->name = c->addr_text; + addr->name = val; u->peer.local = addr; return NGX_OK; @@ -893,10 +1049,13 @@ ngx_stream_proxy_ssl_name(ngx_stream_session_t *s) u = s->upstream; - name = pscf->ssl_name; + if (pscf->ssl_name) { + if (ngx_stream_complex_value(s, pscf->ssl_name, &name) != NGX_OK) { + return NGX_ERROR; + } - if (name.len == 0) { - name = pscf->upstream->host; + } else { + name = u->ssl_name; } if (name.len == 0) { @@ -986,6 +1145,75 @@ ngx_stream_proxy_downstream_handler(ngx_event_t *ev) static void +ngx_stream_proxy_resolve_handler(ngx_resolver_ctx_t *ctx) +{ + ngx_stream_session_t *s; + ngx_stream_upstream_t *u; + ngx_stream_proxy_srv_conf_t *pscf; + ngx_stream_upstream_resolved_t *ur; + + s = ctx->data; + + u = s->upstream; + ur = u->resolved; + + ngx_log_debug0(NGX_LOG_DEBUG_HTTP, s->connection->log, 0, + "stream upstream resolve"); + + if (ctx->state) { + ngx_log_error(NGX_LOG_ERR, s->connection->log, 0, + "%V could not be resolved (%i: %s)", + &ctx->name, ctx->state, + ngx_resolver_strerror(ctx->state)); + + ngx_stream_proxy_finalize(s, NGX_ERROR); + return; + } + + ur->naddrs = ctx->naddrs; + ur->addrs = ctx->addrs; + +#if (NGX_DEBUG) + { + u_char text[NGX_SOCKADDR_STRLEN]; + ngx_str_t addr; + ngx_uint_t i; + + addr.data = text; + + for (i = 0; i < ctx->naddrs; i++) { + addr.len = ngx_sock_ntop(ur->addrs[i].sockaddr, ur->addrs[i].socklen, + text, NGX_SOCKADDR_STRLEN, 0); + + ngx_log_debug1(NGX_LOG_DEBUG_STREAM, s->connection->log, 0, + "name was resolved to %V", &addr); + } + } +#endif + + if (ngx_stream_upstream_create_round_robin_peer(s, ur) != NGX_OK) { + ngx_stream_proxy_finalize(s, NGX_ERROR); + return; + } + + ngx_resolve_name_done(ctx); + ur->ctx = NULL; + + u->peer.start_time = ngx_current_msec; + + pscf = ngx_stream_get_module_srv_conf(s, ngx_stream_proxy_module); + + if (pscf->next_upstream_tries + && u->peer.tries > pscf->next_upstream_tries) + { + u->peer.tries = pscf->next_upstream_tries; + } + + ngx_stream_proxy_connect(s); +} + + +static void ngx_stream_proxy_upstream_handler(ngx_event_t *ev) { ngx_stream_proxy_process_connection(ev, !ev->write); @@ -1407,6 +1635,11 @@ ngx_stream_proxy_finalize(ngx_stream_session_t *s, ngx_int_t rc) goto noupstream; } + if (u->resolved && u->resolved->ctx) { + ngx_resolve_name_done(u->resolved->ctx); + u->resolved->ctx = NULL; + } + if (u->peer.free && u->peer.sockaddr) { u->peer.free(&u->peer, u->peer.data, 0); u->peer.sockaddr = NULL; @@ -1481,7 +1714,7 @@ ngx_stream_proxy_create_srv_conf(ngx_conf_t *cf) * * conf->ssl_protocols = 0; * conf->ssl_ciphers = { 0, NULL }; - * conf->ssl_name = { 0, NULL }; + * conf->ssl_name = NULL; * conf->ssl_trusted_certificate = { 0, NULL }; * conf->ssl_crl = { 0, NULL }; * conf->ssl_certificate = { 0, NULL }; @@ -1489,6 +1722,7 @@ ngx_stream_proxy_create_srv_conf(ngx_conf_t *cf) * * conf->ssl = NULL; * conf->upstream = NULL; + * conf->upstream_value = NULL; */ conf->connect_timeout = NGX_CONF_UNSET_MSEC; @@ -1565,7 +1799,9 @@ ngx_stream_proxy_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child) ngx_conf_merge_str_value(conf->ssl_ciphers, prev->ssl_ciphers, "DEFAULT"); - ngx_conf_merge_str_value(conf->ssl_name, prev->ssl_name, ""); + if (conf->ssl_name == NULL) { + conf->ssl_name = prev->ssl_name; + } ngx_conf_merge_value(conf->ssl_server_name, prev->ssl_server_name, 0); @@ -1640,13 +1876,7 @@ ngx_stream_proxy_set_ssl(ngx_conf_t *cf, ngx_stream_proxy_srv_conf_t *pscf) } } - if (SSL_CTX_set_cipher_list(pscf->ssl->ctx, - (const char *) pscf->ssl_ciphers.data) - == 0) - { - ngx_ssl_error(NGX_LOG_EMERG, cf->log, 0, - "SSL_CTX_set_cipher_list(\"%V\") failed", - &pscf->ssl_ciphers); + if (ngx_ssl_ciphers(cf, pscf->ssl, &pscf->ssl_ciphers, 0) != NGX_OK) { return NGX_ERROR; } @@ -1681,11 +1911,13 @@ ngx_stream_proxy_pass(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) { ngx_stream_proxy_srv_conf_t *pscf = conf; - ngx_url_t u; - ngx_str_t *value, *url; - ngx_stream_core_srv_conf_t *cscf; + ngx_url_t u; + ngx_str_t *value, *url; + ngx_stream_complex_value_t cv; + ngx_stream_core_srv_conf_t *cscf; + ngx_stream_compile_complex_value_t ccv; - if (pscf->upstream) { + if (pscf->upstream || pscf->upstream_value) { return "is duplicate"; } @@ -1697,6 +1929,28 @@ ngx_stream_proxy_pass(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) url = &value[1]; + ngx_memzero(&ccv, sizeof(ngx_stream_compile_complex_value_t)); + + ccv.cf = cf; + ccv.value = url; + ccv.complex_value = &cv; + + if (ngx_stream_compile_complex_value(&ccv) != NGX_OK) { + return NGX_CONF_ERROR; + } + + if (cv.lengths) { + pscf->upstream_value = ngx_palloc(cf->pool, + sizeof(ngx_stream_complex_value_t)); + if (pscf->upstream_value == NULL) { + return NGX_CONF_ERROR; + } + + *pscf->upstream_value = cv; + + return NGX_CONF_OK; + } + ngx_memzero(&u, sizeof(ngx_url_t)); u.url = *url; @@ -1716,9 +1970,11 @@ ngx_stream_proxy_bind(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) { ngx_stream_proxy_srv_conf_t *pscf = conf; - ngx_int_t rc; - ngx_str_t *value; - ngx_stream_upstream_local_t *local; + ngx_int_t rc; + ngx_str_t *value; + ngx_stream_complex_value_t cv; + ngx_stream_upstream_local_t *local; + ngx_stream_compile_complex_value_t ccv; if (pscf->local != NGX_CONF_UNSET_PTR) { return "is duplicate"; @@ -1731,20 +1987,39 @@ ngx_stream_proxy_bind(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) return NGX_CONF_OK; } - local = ngx_palloc(cf->pool, sizeof(ngx_stream_upstream_local_t)); + ngx_memzero(&ccv, sizeof(ngx_stream_compile_complex_value_t)); + + ccv.cf = cf; + ccv.value = &value[1]; + ccv.complex_value = &cv; + + if (ngx_stream_compile_complex_value(&ccv) != NGX_OK) { + return NGX_CONF_ERROR; + } + + local = ngx_pcalloc(cf->pool, sizeof(ngx_stream_upstream_local_t)); if (local == NULL) { return NGX_CONF_ERROR; } pscf->local = local; - if (ngx_strcmp(value[1].data, "$remote_addr") != 0) { + if (cv.lengths) { + local->value = ngx_palloc(cf->pool, sizeof(ngx_stream_complex_value_t)); + if (local->value == NULL) { + return NGX_CONF_ERROR; + } + + *local->value = cv; + + } else { local->addr = ngx_palloc(cf->pool, sizeof(ngx_addr_t)); if (local->addr == NULL) { return NGX_CONF_ERROR; } - rc = ngx_parse_addr(cf->pool, local->addr, value[1].data, value[1].len); + rc = ngx_parse_addr_port(cf->pool, local->addr, value[1].data, + value[1].len); switch (rc) { case NGX_OK: @@ -1765,7 +2040,6 @@ ngx_stream_proxy_bind(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) if (ngx_strcmp(value[2].data, "transparent") == 0) { #if (NGX_HAVE_TRANSPARENT_PROXY) local->transparent = 1; - #else ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "transparent proxying is not supported " Added: vendor/nginx-1.11.3/src/stream/ngx_stream_return_module.c (+207 -0) 100644 =================================================================== --- /dev/null +++ vendor/nginx-1.11.3/src/stream/ngx_stream_return_module.c 2016-07-27 13:06:13 +0900 (3ab9bdf) @@ -0,0 +1,207 @@ + +/* + * Copyright (C) Roman Arutyunyan + * Copyright (C) Nginx, Inc. + */ + + +#include <ngx_config.h> +#include <ngx_core.h> +#include <ngx_stream.h> + + +typedef struct { + ngx_stream_complex_value_t text; +} ngx_stream_return_srv_conf_t; + + +typedef struct { + ngx_buf_t buf; +} ngx_stream_return_ctx_t; + + +static void ngx_stream_return_handler(ngx_stream_session_t *s); +static void ngx_stream_return_write_handler(ngx_event_t *ev); + +static void *ngx_stream_return_create_srv_conf(ngx_conf_t *cf); +static char *ngx_stream_return(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); + + +static ngx_command_t ngx_stream_return_commands[] = { + + { ngx_string("return"), + NGX_STREAM_SRV_CONF|NGX_CONF_TAKE1, + ngx_stream_return, + NGX_STREAM_SRV_CONF_OFFSET, + 0, + NULL }, + + ngx_null_command +}; + + +static ngx_stream_module_t ngx_stream_return_module_ctx = { + NULL, /* preconfiguration */ + NULL, /* postconfiguration */ + + NULL, /* create main configuration */ + NULL, /* init main configuration */ + + ngx_stream_return_create_srv_conf, /* create server configuration */ + NULL /* merge server configuration */ +}; + + +ngx_module_t ngx_stream_return_module = { + NGX_MODULE_V1, + &ngx_stream_return_module_ctx, /* module context */ + ngx_stream_return_commands, /* module directives */ + NGX_STREAM_MODULE, /* module type */ + NULL, /* init master */ + NULL, /* init module */ + NULL, /* init process */ + NULL, /* init thread */ + NULL, /* exit thread */ + NULL, /* exit process */ + NULL, /* exit master */ + NGX_MODULE_V1_PADDING +}; + + +static void +ngx_stream_return_handler(ngx_stream_session_t *s) +{ + ngx_str_t text; + ngx_connection_t *c; + ngx_stream_return_ctx_t *ctx; + ngx_stream_return_srv_conf_t *rscf; + + c = s->connection; + + c->log->action = "returning text"; + + rscf = ngx_stream_get_module_srv_conf(s, ngx_stream_return_module); + + if (ngx_stream_complex_value(s, &rscf->text, &text) != NGX_OK) { + ngx_stream_close_connection(c); + return; + } + + ngx_log_debug1(NGX_LOG_DEBUG_STREAM, c->log, 0, + "stream return text: \"%V\"", &text); + + if (text.len == 0) { + ngx_stream_close_connection(c); + return; + } + + ctx = ngx_pcalloc(c->pool, sizeof(ngx_stream_return_ctx_t)); + if (ctx == NULL) { + ngx_stream_close_connection(c); + return; + } + + ngx_stream_set_ctx(s, ctx, ngx_stream_return_module); + + ctx->buf.pos = text.data; + ctx->buf.last = text.data + text.len; + + c->write->handler = ngx_stream_return_write_handler; + + ngx_stream_return_write_handler(c->write); +} + + +static void +ngx_stream_return_write_handler(ngx_event_t *ev) +{ + ssize_t n; + ngx_buf_t *b; + ngx_connection_t *c; + ngx_stream_session_t *s; + ngx_stream_return_ctx_t *ctx; + + c = ev->data; + s = c->data; + + if (ev->timedout) { + ngx_connection_error(c, NGX_ETIMEDOUT, "connection timed out"); + ngx_stream_close_connection(c); + return; + } + + if (ev->ready) { + ctx = ngx_stream_get_module_ctx(s, ngx_stream_return_module); + + b = &ctx->buf; + + n = c->send(c, b->pos, b->last - b->pos); + if (n == NGX_ERROR) { + ngx_stream_close_connection(c); + return; + } + + if (n > 0) { + b->pos += n; + + if (b->pos == b->last) { + ngx_stream_close_connection(c); + return; + } + } + } + + if (ngx_handle_write_event(ev, 0) != NGX_OK) { + ngx_stream_close_connection(c); + return; + } + + ngx_add_timer(ev, 5000); +} + + +static void * +ngx_stream_return_create_srv_conf(ngx_conf_t *cf) +{ + ngx_stream_return_srv_conf_t *conf; + + conf = ngx_pcalloc(cf->pool, sizeof(ngx_stream_return_srv_conf_t)); + if (conf == NULL) { + return NULL; + } + + return conf; +} + + +static char * +ngx_stream_return(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) +{ + ngx_stream_return_srv_conf_t *rscf = conf; + + ngx_str_t *value; + ngx_stream_core_srv_conf_t *cscf; + ngx_stream_compile_complex_value_t ccv; + + if (rscf->text.value.data) { + return "is duplicate"; + } + + value = cf->args->elts; + + ngx_memzero(&ccv, sizeof(ngx_stream_compile_complex_value_t)); + + ccv.cf = cf; + ccv.value = &value[1]; + ccv.complex_value = &rscf->text; + + if (ngx_stream_compile_complex_value(&ccv) != NGX_OK) { + return NGX_CONF_ERROR; + } + + cscf = ngx_stream_conf_get_module_srv_conf(cf, ngx_stream_core_module); + + cscf->handler = ngx_stream_return_handler; + + return NGX_CONF_OK; +} Added: vendor/nginx-1.11.3/src/stream/ngx_stream_script.c (+854 -0) 100644 =================================================================== --- /dev/null +++ vendor/nginx-1.11.3/src/stream/ngx_stream_script.c 2016-07-27 13:06:13 +0900 (8130f92) @@ -0,0 +1,854 @@ + +/* + * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. + */ + + +#include <ngx_config.h> +#include <ngx_core.h> +#include <ngx_stream.h> + + +static ngx_int_t ngx_stream_script_init_arrays( + ngx_stream_script_compile_t *sc); +static ngx_int_t ngx_stream_script_done(ngx_stream_script_compile_t *sc); +static ngx_int_t ngx_stream_script_add_copy_code( + ngx_stream_script_compile_t *sc, ngx_str_t *value, ngx_uint_t last); +static ngx_int_t ngx_stream_script_add_var_code( + ngx_stream_script_compile_t *sc, ngx_str_t *name); +#if (NGX_PCRE) +static ngx_int_t ngx_stream_script_add_capture_code( + ngx_stream_script_compile_t *sc, ngx_uint_t n); +#endif +static ngx_int_t ngx_stream_script_add_full_name_code( + ngx_stream_script_compile_t *sc); +static size_t ngx_stream_script_full_name_len_code( + ngx_stream_script_engine_t *e); +static void ngx_stream_script_full_name_code(ngx_stream_script_engine_t *e); + + +#define ngx_stream_script_exit (u_char *) &ngx_stream_script_exit_code + +static uintptr_t ngx_stream_script_exit_code = (uintptr_t) NULL; + + +void +ngx_stream_script_flush_complex_value(ngx_stream_session_t *s, + ngx_stream_complex_value_t *val) +{ + ngx_uint_t *index; + + index = val->flushes; + + if (index) { + while (*index != (ngx_uint_t) -1) { + + if (s->variables[*index].no_cacheable) { + s->variables[*index].valid = 0; + s->variables[*index].not_found = 0; + } + + index++; + } + } +} + + +ngx_int_t +ngx_stream_complex_value(ngx_stream_session_t *s, + ngx_stream_complex_value_t *val, ngx_str_t *value) +{ + size_t len; + ngx_stream_script_code_pt code; + ngx_stream_script_engine_t e; + ngx_stream_script_len_code_pt lcode; + + if (val->lengths == NULL) { + *value = val->value; + return NGX_OK; + } + + ngx_stream_script_flush_complex_value(s, val); + + ngx_memzero(&e, sizeof(ngx_stream_script_engine_t)); + + e.ip = val->lengths; + e.session = s; + e.flushed = 1; + + len = 0; + + while (*(uintptr_t *) e.ip) { + lcode = *(ngx_stream_script_len_code_pt *) e.ip; + len += lcode(&e); + } + + value->len = len; + value->data = ngx_pnalloc(s->connection->pool, len); + if (value->data == NULL) { + return NGX_ERROR; + } + + e.ip = val->values; + e.pos = value->data; + e.buf = *value; + + while (*(uintptr_t *) e.ip) { + code = *(ngx_stream_script_code_pt *) e.ip; + code((ngx_stream_script_engine_t *) &e); + } + + *value = e.buf; + + return NGX_OK; +} + + +ngx_int_t +ngx_stream_compile_complex_value(ngx_stream_compile_complex_value_t *ccv) +{ + ngx_str_t *v; + ngx_uint_t i, n, nv, nc; + ngx_array_t flushes, lengths, values, *pf, *pl, *pv; + ngx_stream_script_compile_t sc; + + v = ccv->value; + + nv = 0; + nc = 0; + + for (i = 0; i < v->len; i++) { + if (v->data[i] == '$') { + if (v->data[i + 1] >= '1' && v->data[i + 1] <= '9') { + nc++; + + } else { + nv++; + } + } + } + + if ((v->len == 0 || v->data[0] != '$') + && (ccv->conf_prefix || ccv->root_prefix)) + { + if (ngx_conf_full_name(ccv->cf->cycle, v, ccv->conf_prefix) != NGX_OK) { + return NGX_ERROR; + } + + ccv->conf_prefix = 0; + ccv->root_prefix = 0; + } + + ccv->complex_value->value = *v; + ccv->complex_value->flushes = NULL; + ccv->complex_value->lengths = NULL; + ccv->complex_value->values = NULL; + + if (nv == 0 && nc == 0) { + return NGX_OK; + } + + n = nv + 1; + + if (ngx_array_init(&flushes, ccv->cf->pool, n, sizeof(ngx_uint_t)) + != NGX_OK) + { + return NGX_ERROR; + } + + n = nv * (2 * sizeof(ngx_stream_script_copy_code_t) + + sizeof(ngx_stream_script_var_code_t)) + + sizeof(uintptr_t); + + if (ngx_array_init(&lengths, ccv->cf->pool, n, 1) != NGX_OK) { + return NGX_ERROR; + } + + n = (nv * (2 * sizeof(ngx_stream_script_copy_code_t) + + sizeof(ngx_stream_script_var_code_t)) + + sizeof(uintptr_t) + + v->len + + sizeof(uintptr_t) - 1) + & ~(sizeof(uintptr_t) - 1); + + if (ngx_array_init(&values, ccv->cf->pool, n, 1) != NGX_OK) { + return NGX_ERROR; + } + + pf = &flushes; + pl = &lengths; + pv = &values; + + ngx_memzero(&sc, sizeof(ngx_stream_script_compile_t)); + + sc.cf = ccv->cf; + sc.source = v; + sc.flushes = &pf; + sc.lengths = &pl; + sc.values = &pv; + sc.complete_lengths = 1; + sc.complete_values = 1; + sc.zero = ccv->zero; + sc.conf_prefix = ccv->conf_prefix; + sc.root_prefix = ccv->root_prefix; + + if (ngx_stream_script_compile(&sc) != NGX_OK) { + return NGX_ERROR; + } + + if (flushes.nelts) { + ccv->complex_value->flushes = flushes.elts; + ccv->complex_value->flushes[flushes.nelts] = (ngx_uint_t) -1; + } + + ccv->complex_value->lengths = lengths.elts; + ccv->complex_value->values = values.elts; + + return NGX_OK; +} + + +char * +ngx_stream_set_complex_value_slot(ngx_conf_t *cf, ngx_command_t *cmd, + void *conf) +{ + char *p = conf; + + ngx_str_t *value; + ngx_stream_complex_value_t **cv; + ngx_stream_compile_complex_value_t ccv; + + cv = (ngx_stream_complex_value_t **) (p + cmd->offset); + + if (*cv != NULL) { + return "duplicate"; + } + + *cv = ngx_palloc(cf->pool, sizeof(ngx_stream_complex_value_t)); + if (*cv == NULL) { + return NGX_CONF_ERROR; + } + + value = cf->args->elts; + + ngx_memzero(&ccv, sizeof(ngx_stream_compile_complex_value_t)); + + ccv.cf = cf; + ccv.value = &value[1]; + ccv.complex_value = *cv; + + if (ngx_stream_compile_complex_value(&ccv) != NGX_OK) { + return NGX_CONF_ERROR; + } + + return NGX_CONF_OK; +} + + +ngx_uint_t +ngx_stream_script_variables_count(ngx_str_t *value) +{ + ngx_uint_t i, n; + + for (n = 0, i = 0; i < value->len; i++) { + if (value->data[i] == '$') { + n++; + } + } + + return n; +} + + +ngx_int_t +ngx_stream_script_compile(ngx_stream_script_compile_t *sc) +{ + u_char ch; + ngx_str_t name; + ngx_uint_t i, bracket; + + if (ngx_stream_script_init_arrays(sc) != NGX_OK) { + return NGX_ERROR; + } + + for (i = 0; i < sc->source->len; /* void */ ) { + + name.len = 0; + + if (sc->source->data[i] == '$') { + + if (++i == sc->source->len) { + goto invalid_variable; + } + + if (sc->source->data[i] >= '1' && sc->source->data[i] <= '9') { +#if (NGX_PCRE) + ngx_uint_t n; + + n = sc->source->data[i] - '0'; + + if (ngx_stream_script_add_capture_code(sc, n) != NGX_OK) { + return NGX_ERROR; + } + + i++; + + continue; +#else + ngx_conf_log_error(NGX_LOG_EMERG, sc->cf, 0, + "using variable \"$%c\" requires " + "PCRE library", sc->source->data[i]); + return NGX_ERROR; +#endif + } + + if (sc->source->data[i] == '{') { + bracket = 1; + + if (++i == sc->source->len) { + goto invalid_variable; + } + + name.data = &sc->source->data[i]; + + } else { + bracket = 0; + name.data = &sc->source->data[i]; + } + + for ( /* void */ ; i < sc->source->len; i++, name.len++) { + ch = sc->source->data[i]; + + if (ch == '}' && bracket) { + i++; + bracket = 0; + break; + } + + if ((ch >= 'A' && ch <= 'Z') + || (ch >= 'a' && ch <= 'z') + || (ch >= '0' && ch <= '9') + || ch == '_') + { + continue; + } + + break; + } + + if (bracket) { + ngx_conf_log_error(NGX_LOG_EMERG, sc->cf, 0, + "the closing bracket in \"%V\" " + "variable is missing", &name); + return NGX_ERROR; + } + + if (name.len == 0) { + goto invalid_variable; + } + + sc->variables++; + + if (ngx_stream_script_add_var_code(sc, &name) != NGX_OK) { + return NGX_ERROR; + } + + continue; + } + + name.data = &sc->source->data[i]; + + while (i < sc->source->len) { + + if (sc->source->data[i] == '$') { + break; + } + + i++; + name.len++; + } + + sc->size += name.len; + + if (ngx_stream_script_add_copy_code(sc, &name, (i == sc->source->len)) + != NGX_OK) + { + return NGX_ERROR; + } + } + + return ngx_stream_script_done(sc); + +invalid_variable: + + ngx_conf_log_error(NGX_LOG_EMERG, sc->cf, 0, "invalid variable name"); + + return NGX_ERROR; +} + + +static ngx_int_t +ngx_stream_script_init_arrays(ngx_stream_script_compile_t *sc) +{ + ngx_uint_t n; + + if (sc->flushes && *sc->flushes == NULL) { + n = sc->variables ? sc->variables : 1; + *sc->flushes = ngx_array_create(sc->cf->pool, n, sizeof(ngx_uint_t)); + if (*sc->flushes == NULL) { + return NGX_ERROR; + } + } + + if (*sc->lengths == NULL) { + n = sc->variables * (2 * sizeof(ngx_stream_script_copy_code_t) + + sizeof(ngx_stream_script_var_code_t)) + + sizeof(uintptr_t); + + *sc->lengths = ngx_array_create(sc->cf->pool, n, 1); + if (*sc->lengths == NULL) { + return NGX_ERROR; + } + } + + if (*sc->values == NULL) { + n = (sc->variables * (2 * sizeof(ngx_stream_script_copy_code_t) + + sizeof(ngx_stream_script_var_code_t)) + + sizeof(uintptr_t) + + sc->source->len + + sizeof(uintptr_t) - 1) + & ~(sizeof(uintptr_t) - 1); + + *sc->values = ngx_array_create(sc->cf->pool, n, 1); + if (*sc->values == NULL) { + return NGX_ERROR; + } + } + + sc->variables = 0; + + return NGX_OK; +} + + +static ngx_int_t +ngx_stream_script_done(ngx_stream_script_compile_t *sc) +{ + ngx_str_t zero; + uintptr_t *code; + + if (sc->zero) { + + zero.len = 1; + zero.data = (u_char *) "\0"; + + if (ngx_stream_script_add_copy_code(sc, &zero, 0) != NGX_OK) { + return NGX_ERROR; + } + } + + if (sc->conf_prefix || sc->root_prefix) { + if (ngx_stream_script_add_full_name_code(sc) != NGX_OK) { + return NGX_ERROR; + } + } + + if (sc->complete_lengths) { + code = ngx_stream_script_add_code(*sc->lengths, sizeof(uintptr_t), + NULL); + if (code == NULL) { + return NGX_ERROR; + } + + *code = (uintptr_t) NULL; + } + + if (sc->complete_values) { + code = ngx_stream_script_add_code(*sc->values, sizeof(uintptr_t), + &sc->main); + if (code == NULL) { + return NGX_ERROR; + } + + *code = (uintptr_t) NULL; + } + + return NGX_OK; +} + + +void * +ngx_stream_script_add_code(ngx_array_t *codes, size_t size, void *code) +{ + u_char *elts, **p; + void *new; + + elts = codes->elts; + + new = ngx_array_push_n(codes, size); + if (new == NULL) { + return NULL; + } + + if (code) { + if (elts != codes->elts) { + p = code; + *p += (u_char *) codes->elts - elts; + } + } + + return new; +} + + +static ngx_int_t +ngx_stream_script_add_copy_code(ngx_stream_script_compile_t *sc, + ngx_str_t *value, ngx_uint_t last) +{ + u_char *p; + size_t size, len, zero; + ngx_stream_script_copy_code_t *code; + + zero = (sc->zero && last); + len = value->len + zero; + + code = ngx_stream_script_add_code(*sc->lengths, + sizeof(ngx_stream_script_copy_code_t), + NULL); + if (code == NULL) { + return NGX_ERROR; + } + + code->code = (ngx_stream_script_code_pt) ngx_stream_script_copy_len_code; + code->len = len; + + size = (sizeof(ngx_stream_script_copy_code_t) + len + sizeof(uintptr_t) - 1) + & ~(sizeof(uintptr_t) - 1); + + code = ngx_stream_script_add_code(*sc->values, size, &sc->main); + if (code == NULL) { + return NGX_ERROR; + } + + code->code = ngx_stream_script_copy_code; + code->len = len; + + p = ngx_cpymem((u_char *) code + sizeof(ngx_stream_script_copy_code_t), + value->data, value->len); + + if (zero) { + *p = '\0'; + sc->zero = 0; + } + + return NGX_OK; +} + + +size_t +ngx_stream_script_copy_len_code(ngx_stream_script_engine_t *e) +{ + ngx_stream_script_copy_code_t *code; + + code = (ngx_stream_script_copy_code_t *) e->ip; + + e->ip += sizeof(ngx_stream_script_copy_code_t); + + return code->len; +} + + +void +ngx_stream_script_copy_code(ngx_stream_script_engine_t *e) +{ + u_char *p; + ngx_stream_script_copy_code_t *code; + + code = (ngx_stream_script_copy_code_t *) e->ip; + + p = e->pos; + + if (!e->skip) { + e->pos = ngx_copy(p, e->ip + sizeof(ngx_stream_script_copy_code_t), + code->len); + } + + e->ip += sizeof(ngx_stream_script_copy_code_t) + + ((code->len + sizeof(uintptr_t) - 1) & ~(sizeof(uintptr_t) - 1)); + + ngx_log_debug2(NGX_LOG_DEBUG_STREAM, e->session->connection->log, 0, + "stream script copy: \"%*s\"", e->pos - p, p); +} + + +static ngx_int_t +ngx_stream_script_add_var_code(ngx_stream_script_compile_t *sc, ngx_str_t *name) +{ + ngx_int_t index, *p; + ngx_stream_script_var_code_t *code; + + index = ngx_stream_get_variable_index(sc->cf, name); + + if (index == NGX_ERROR) { + return NGX_ERROR; + } + + if (sc->flushes) { + p = ngx_array_push(*sc->flushes); + if (p == NULL) { + return NGX_ERROR; + } + + *p = index; + } + + code = ngx_stream_script_add_code(*sc->lengths, + sizeof(ngx_stream_script_var_code_t), + NULL); + if (code == NULL) { + return NGX_ERROR; + } + + code->code = (ngx_stream_script_code_pt) + ngx_stream_script_copy_var_len_code; + code->index = (uintptr_t) index; + + code = ngx_stream_script_add_code(*sc->values, + sizeof(ngx_stream_script_var_code_t), + &sc->main); + if (code == NULL) { + return NGX_ERROR; + } + + code->code = ngx_stream_script_copy_var_code; + code->index = (uintptr_t) index; + + return NGX_OK; +} + + +size_t +ngx_stream_script_copy_var_len_code(ngx_stream_script_engine_t *e) +{ + ngx_stream_variable_value_t *value; + ngx_stream_script_var_code_t *code; + + code = (ngx_stream_script_var_code_t *) e->ip; + + e->ip += sizeof(ngx_stream_script_var_code_t); + + if (e->flushed) { + value = ngx_stream_get_indexed_variable(e->session, code->index); + + } else { + value = ngx_stream_get_flushed_variable(e->session, code->index); + } + + if (value && !value->not_found) { + return value->len; + } + + return 0; +} + + +void +ngx_stream_script_copy_var_code(ngx_stream_script_engine_t *e) +{ + u_char *p; + ngx_stream_variable_value_t *value; + ngx_stream_script_var_code_t *code; + + code = (ngx_stream_script_var_code_t *) e->ip; + + e->ip += sizeof(ngx_stream_script_var_code_t); + + if (!e->skip) { + + if (e->flushed) { + value = ngx_stream_get_indexed_variable(e->session, code->index); + + } else { + value = ngx_stream_get_flushed_variable(e->session, code->index); + } + + if (value && !value->not_found) { + p = e->pos; + e->pos = ngx_copy(p, value->data, value->len); + + ngx_log_debug2(NGX_LOG_DEBUG_STREAM, + e->session->connection->log, 0, + "stream script var: \"%*s\"", e->pos - p, p); + } + } +} + + +#if (NGX_PCRE) + +static ngx_int_t +ngx_stream_script_add_capture_code(ngx_stream_script_compile_t *sc, + ngx_uint_t n) +{ + ngx_stream_script_copy_capture_code_t *code; + + code = ngx_stream_script_add_code(*sc->lengths, + sizeof(ngx_stream_script_copy_capture_code_t), + NULL); + if (code == NULL) { + return NGX_ERROR; + } + + code->code = (ngx_stream_script_code_pt) + ngx_stream_script_copy_capture_len_code; + code->n = 2 * n; + + + code = ngx_stream_script_add_code(*sc->values, + sizeof(ngx_stream_script_copy_capture_code_t), + &sc->main); + if (code == NULL) { + return NGX_ERROR; + } + + code->code = ngx_stream_script_copy_capture_code; + code->n = 2 * n; + + if (sc->ncaptures < n) { + sc->ncaptures = n; + } + + return NGX_OK; +} + + +size_t +ngx_stream_script_copy_capture_len_code(ngx_stream_script_engine_t *e) +{ + int *cap; + ngx_uint_t n; + ngx_stream_session_t *s; + ngx_stream_script_copy_capture_code_t *code; + + s = e->session; + + code = (ngx_stream_script_copy_capture_code_t *) e->ip; + + e->ip += sizeof(ngx_stream_script_copy_capture_code_t); + + n = code->n; + + if (n < s->ncaptures) { + cap = s->captures; + return cap[n + 1] - cap[n]; + } + + return 0; +} + + +void +ngx_stream_script_copy_capture_code(ngx_stream_script_engine_t *e) +{ + int *cap; + u_char *p, *pos; + ngx_uint_t n; + ngx_stream_session_t *s; + ngx_stream_script_copy_capture_code_t *code; + + s = e->session; + + code = (ngx_stream_script_copy_capture_code_t *) e->ip; + + e->ip += sizeof(ngx_stream_script_copy_capture_code_t); + + n = code->n; + + pos = e->pos; + + if (n < s->ncaptures) { + cap = s->captures; + p = s->captures_data; + e->pos = ngx_copy(pos, &p[cap[n]], cap[n + 1] - cap[n]); + } + + ngx_log_debug2(NGX_LOG_DEBUG_STREAM, e->session->connection->log, 0, + "stream script capture: \"%*s\"", e->pos - pos, pos); +} + +#endif + + +static ngx_int_t +ngx_stream_script_add_full_name_code(ngx_stream_script_compile_t *sc) +{ + ngx_stream_script_full_name_code_t *code; + + code = ngx_stream_script_add_code(*sc->lengths, + sizeof(ngx_stream_script_full_name_code_t), + NULL); + if (code == NULL) { + return NGX_ERROR; + } + + code->code = (ngx_stream_script_code_pt) + ngx_stream_script_full_name_len_code; + code->conf_prefix = sc->conf_prefix; + + code = ngx_stream_script_add_code(*sc->values, + sizeof(ngx_stream_script_full_name_code_t), &sc->main); + if (code == NULL) { + return NGX_ERROR; + } + + code->code = ngx_stream_script_full_name_code; + code->conf_prefix = sc->conf_prefix; + + return NGX_OK; +} + + +static size_t +ngx_stream_script_full_name_len_code(ngx_stream_script_engine_t *e) +{ + ngx_stream_script_full_name_code_t *code; + + code = (ngx_stream_script_full_name_code_t *) e->ip; + + e->ip += sizeof(ngx_stream_script_full_name_code_t); + + return code->conf_prefix ? ngx_cycle->conf_prefix.len: + ngx_cycle->prefix.len; +} + + +static void +ngx_stream_script_full_name_code(ngx_stream_script_engine_t *e) +{ + ngx_stream_script_full_name_code_t *code; + + ngx_str_t value, *prefix; + + code = (ngx_stream_script_full_name_code_t *) e->ip; + + value.data = e->buf.data; + value.len = e->pos - e->buf.data; + + prefix = code->conf_prefix ? (ngx_str_t *) &ngx_cycle->conf_prefix: + (ngx_str_t *) &ngx_cycle->prefix; + + if (ngx_get_full_name(e->session->connection->pool, prefix, &value) + != NGX_OK) + { + e->ip = ngx_stream_script_exit; + return; + } + + e->buf = value; + + ngx_log_debug1(NGX_LOG_DEBUG_STREAM, e->session->connection->log, 0, + "stream script fullname: \"%V\"", &value); + + e->ip += sizeof(ngx_stream_script_full_name_code_t); +} Added: vendor/nginx-1.11.3/src/stream/ngx_stream_script.h (+123 -0) 100644 =================================================================== --- /dev/null +++ vendor/nginx-1.11.3/src/stream/ngx_stream_script.h 2016-07-27 13:06:13 +0900 (0abe50e) @@ -0,0 +1,123 @@ + +/* + * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. + */ + + +#ifndef _NGX_STREAM_SCRIPT_H_INCLUDED_ +#define _NGX_STREAM_SCRIPT_H_INCLUDED_ + + +#include <ngx_config.h> +#include <ngx_core.h> +#include <ngx_stream.h> + + +typedef struct { + u_char *ip; + u_char *pos; + ngx_stream_variable_value_t *sp; + + ngx_str_t buf; + ngx_str_t line; + + unsigned flushed:1; + unsigned skip:1; + + ngx_stream_session_t *session; +} ngx_stream_script_engine_t; + + +typedef struct { + ngx_conf_t *cf; + ngx_str_t *source; + + ngx_array_t **flushes; + ngx_array_t **lengths; + ngx_array_t **values; + + ngx_uint_t variables; + ngx_uint_t ncaptures; + ngx_uint_t size; + + void *main; + + unsigned complete_lengths:1; + unsigned complete_values:1; + unsigned zero:1; + unsigned conf_prefix:1; + unsigned root_prefix:1; +} ngx_stream_script_compile_t; + + +typedef struct { + ngx_str_t value; + ngx_uint_t *flushes; + void *lengths; + void *values; +} ngx_stream_complex_value_t; + + +typedef struct { + ngx_conf_t *cf; + ngx_str_t *value; + ngx_stream_complex_value_t *complex_value; + + unsigned zero:1; + unsigned conf_prefix:1; + unsigned root_prefix:1; +} ngx_stream_compile_complex_value_t; + + +typedef void (*ngx_stream_script_code_pt) (ngx_stream_script_engine_t *e); +typedef size_t (*ngx_stream_script_len_code_pt) (ngx_stream_script_engine_t *e); + + +typedef struct { + ngx_stream_script_code_pt code; + uintptr_t len; +} ngx_stream_script_copy_code_t; + + +typedef struct { + ngx_stream_script_code_pt code; + uintptr_t index; +} ngx_stream_script_var_code_t; + + +typedef struct { + ngx_stream_script_code_pt code; + uintptr_t n; +} ngx_stream_script_copy_capture_code_t; + + +typedef struct { + ngx_stream_script_code_pt code; + uintptr_t conf_prefix; +} ngx_stream_script_full_name_code_t; + + +void ngx_stream_script_flush_complex_value(ngx_stream_session_t *s, + ngx_stream_complex_value_t *val); +ngx_int_t ngx_stream_complex_value(ngx_stream_session_t *s, + ngx_stream_complex_value_t *val, ngx_str_t *value); +ngx_int_t ngx_stream_compile_complex_value( + ngx_stream_compile_complex_value_t *ccv); +char *ngx_stream_set_complex_value_slot(ngx_conf_t *cf, ngx_command_t *cmd, + void *conf); + + +ngx_uint_t ngx_stream_script_variables_count(ngx_str_t *value); +ngx_int_t ngx_stream_script_compile(ngx_stream_script_compile_t *sc); + +void *ngx_stream_script_add_code(ngx_array_t *codes, size_t size, void *code); + +size_t ngx_stream_script_copy_len_code(ngx_stream_script_engine_t *e); +void ngx_stream_script_copy_code(ngx_stream_script_engine_t *e); +size_t ngx_stream_script_copy_var_len_code(ngx_stream_script_engine_t *e); +void ngx_stream_script_copy_var_code(ngx_stream_script_engine_t *e); +size_t ngx_stream_script_copy_capture_len_code(ngx_stream_script_engine_t *e); +void ngx_stream_script_copy_capture_code(ngx_stream_script_engine_t *e); + +#endif /* _NGX_STREAM_SCRIPT_H_INCLUDED_ */ Renamed: vendor/nginx-1.11.3/src/stream/ngx_stream_split_clients_module.c (+45 -47) 63% =================================================================== --- vendor/nginx-1.11.1/src/http/modules/ngx_http_split_clients_module.c 2016-07-27 12:58:24 +0900 (2f92c9e) +++ vendor/nginx-1.11.3/src/stream/ngx_stream_split_clients_module.c 2016-07-27 13:06:13 +0900 (af6c8a1) @@ -7,32 +7,32 @@ #include <ngx_config.h> #include <ngx_core.h> -#include <ngx_http.h> +#include <ngx_stream.h> typedef struct { - uint32_t percent; - ngx_http_variable_value_t value; -} ngx_http_split_clients_part_t; + uint32_t percent; + ngx_stream_variable_value_t value; +} ngx_stream_split_clients_part_t; typedef struct { - ngx_http_complex_value_t value; - ngx_array_t parts; -} ngx_http_split_clients_ctx_t; + ngx_stream_complex_value_t value; + ngx_array_t parts; +} ngx_stream_split_clients_ctx_t; static char *ngx_conf_split_clients_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); -static char *ngx_http_split_clients(ngx_conf_t *cf, ngx_command_t *dummy, +static char *ngx_stream_split_clients(ngx_conf_t *cf, ngx_command_t *dummy, void *conf); -static ngx_command_t ngx_http_split_clients_commands[] = { +static ngx_command_t ngx_stream_split_clients_commands[] = { { ngx_string("split_clients"), - NGX_HTTP_MAIN_CONF|NGX_CONF_BLOCK|NGX_CONF_TAKE2, + NGX_STREAM_MAIN_CONF|NGX_CONF_BLOCK|NGX_CONF_TAKE2, ngx_conf_split_clients_block, - NGX_HTTP_MAIN_CONF_OFFSET, + NGX_STREAM_MAIN_CONF_OFFSET, 0, NULL }, @@ -40,7 +40,7 @@ static ngx_command_t ngx_http_split_clients_commands[] = { }; -static ngx_http_module_t ngx_http_split_clients_module_ctx = { +static ngx_stream_module_t ngx_stream_split_clients_module_ctx = { NULL, /* preconfiguration */ NULL, /* postconfiguration */ @@ -48,18 +48,15 @@ static ngx_http_module_t ngx_http_split_clients_module_ctx = { NULL, /* init main configuration */ NULL, /* create server configuration */ - NULL, /* merge server configuration */ - - NULL, /* create location configuration */ - NULL /* merge location configuration */ + NULL /* merge server configuration */ }; -ngx_module_t ngx_http_split_clients_module = { +ngx_module_t ngx_stream_split_clients_module = { NGX_MODULE_V1, - &ngx_http_split_clients_module_ctx, /* module context */ - ngx_http_split_clients_commands, /* module directives */ - NGX_HTTP_MODULE, /* module type */ + &ngx_stream_split_clients_module_ctx, /* module context */ + ngx_stream_split_clients_commands, /* module directives */ + NGX_STREAM_MODULE, /* module type */ NULL, /* init master */ NULL, /* init module */ NULL, /* init process */ @@ -72,19 +69,20 @@ ngx_module_t ngx_http_split_clients_module = { static ngx_int_t -ngx_http_split_clients_variable(ngx_http_request_t *r, - ngx_http_variable_value_t *v, uintptr_t data) +ngx_stream_split_clients_variable(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data) { - ngx_http_split_clients_ctx_t *ctx = (ngx_http_split_clients_ctx_t *) data; + ngx_stream_split_clients_ctx_t *ctx = + (ngx_stream_split_clients_ctx_t *) data; - uint32_t hash; - ngx_str_t val; - ngx_uint_t i; - ngx_http_split_clients_part_t *part; + uint32_t hash; + ngx_str_t val; + ngx_uint_t i; + ngx_stream_split_clients_part_t *part; - *v = ngx_http_variable_null_value; + *v = ngx_stream_variable_null_value; - if (ngx_http_complex_value(r, &ctx->value, &val) != NGX_OK) { + if (ngx_stream_complex_value(s, &ctx->value, &val) != NGX_OK) { return NGX_OK; } @@ -94,8 +92,8 @@ ngx_http_split_clients_variable(ngx_http_request_t *r, for (i = 0; i < ctx->parts.nelts; i++) { - ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, - "http split: %uD %uD", hash, part[i].percent); + ngx_log_debug2(NGX_LOG_DEBUG_STREAM, s->connection->log, 0, + "stream split: %uD %uD", hash, part[i].percent); if (hash < part[i].percent || part[i].percent == 0) { *v = part[i].value; @@ -115,25 +113,25 @@ ngx_conf_split_clients_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) ngx_str_t *value, name; ngx_uint_t i; ngx_conf_t save; - ngx_http_variable_t *var; - ngx_http_split_clients_ctx_t *ctx; - ngx_http_split_clients_part_t *part; - ngx_http_compile_complex_value_t ccv; + ngx_stream_variable_t *var; + ngx_stream_split_clients_ctx_t *ctx; + ngx_stream_split_clients_part_t *part; + ngx_stream_compile_complex_value_t ccv; - ctx = ngx_pcalloc(cf->pool, sizeof(ngx_http_split_clients_ctx_t)); + ctx = ngx_pcalloc(cf->pool, sizeof(ngx_stream_split_clients_ctx_t)); if (ctx == NULL) { return NGX_CONF_ERROR; } value = cf->args->elts; - ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t)); + ngx_memzero(&ccv, sizeof(ngx_stream_compile_complex_value_t)); ccv.cf = cf; ccv.value = &value[1]; ccv.complex_value = &ctx->value; - if (ngx_http_compile_complex_value(&ccv) != NGX_OK) { + if (ngx_stream_compile_complex_value(&ccv) != NGX_OK) { return NGX_CONF_ERROR; } @@ -148,16 +146,16 @@ ngx_conf_split_clients_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) name.len--; name.data++; - var = ngx_http_add_variable(cf, &name, NGX_HTTP_VAR_CHANGEABLE); + var = ngx_stream_add_variable(cf, &name, NGX_STREAM_VAR_CHANGEABLE); if (var == NULL) { return NGX_CONF_ERROR; } - var->get_handler = ngx_http_split_clients_variable; + var->get_handler = ngx_stream_split_clients_variable; var->data = (uintptr_t) ctx; if (ngx_array_init(&ctx->parts, cf->pool, 2, - sizeof(ngx_http_split_clients_part_t)) + sizeof(ngx_stream_split_clients_part_t)) != NGX_OK) { return NGX_CONF_ERROR; @@ -165,7 +163,7 @@ ngx_conf_split_clients_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) save = *cf; cf->ctx = ctx; - cf->handler = ngx_http_split_clients; + cf->handler = ngx_stream_split_clients; cf->handler_conf = conf; rv = ngx_conf_parse(cf, NULL); @@ -199,12 +197,12 @@ ngx_conf_split_clients_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) static char * -ngx_http_split_clients(ngx_conf_t *cf, ngx_command_t *dummy, void *conf) +ngx_stream_split_clients(ngx_conf_t *cf, ngx_command_t *dummy, void *conf) { - ngx_int_t n; - ngx_str_t *value; - ngx_http_split_clients_ctx_t *ctx; - ngx_http_split_clients_part_t *part; + ngx_int_t n; + ngx_str_t *value; + ngx_stream_split_clients_ctx_t *ctx; + ngx_stream_split_clients_part_t *part; ctx = cf->ctx; value = cf->args->elts; Renamed: vendor/nginx-1.11.3/src/stream/ngx_stream_ssl_module.c (+117 -14) 80% =================================================================== --- vendor/nginx-1.11.1/src/stream/ngx_stream_ssl_module.c 2016-07-27 12:58:24 +0900 (2d2f3ca) +++ vendor/nginx-1.11.3/src/stream/ngx_stream_ssl_module.c 2016-07-27 13:06:13 +0900 (2661220) @@ -10,10 +10,20 @@ #include <ngx_stream.h> +typedef ngx_int_t (*ngx_ssl_variable_handler_pt)(ngx_connection_t *c, + ngx_pool_t *pool, ngx_str_t *s); + + #define NGX_DEFAULT_CIPHERS "HIGH:!aNULL:!MD5" #define NGX_DEFAULT_ECDH_CURVE "auto" +static ngx_int_t ngx_stream_ssl_static_variable(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data); +static ngx_int_t ngx_stream_ssl_variable(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data); + +static ngx_int_t ngx_stream_ssl_add_variables(ngx_conf_t *cf); static void *ngx_stream_ssl_create_conf(ngx_conf_t *cf); static char *ngx_stream_ssl_merge_conf(ngx_conf_t *cf, void *parent, void *child); @@ -132,6 +142,7 @@ static ngx_command_t ngx_stream_ssl_commands[] = { static ngx_stream_module_t ngx_stream_ssl_module_ctx = { + ngx_stream_ssl_add_variables, /* preconfiguration */ NULL, /* postconfiguration */ NULL, /* create main configuration */ @@ -158,9 +169,112 @@ ngx_module_t ngx_stream_ssl_module = { }; +static ngx_stream_variable_t ngx_stream_ssl_vars[] = { + + { ngx_string("ssl_protocol"), NULL, ngx_stream_ssl_static_variable, + (uintptr_t) ngx_ssl_get_protocol, NGX_STREAM_VAR_CHANGEABLE, 0 }, + + { ngx_string("ssl_cipher"), NULL, ngx_stream_ssl_static_variable, + (uintptr_t) ngx_ssl_get_cipher_name, NGX_STREAM_VAR_CHANGEABLE, 0 }, + + { ngx_string("ssl_session_id"), NULL, ngx_stream_ssl_variable, + (uintptr_t) ngx_ssl_get_session_id, NGX_STREAM_VAR_CHANGEABLE, 0 }, + + { ngx_string("ssl_session_reused"), NULL, ngx_stream_ssl_variable, + (uintptr_t) ngx_ssl_get_session_reused, NGX_STREAM_VAR_CHANGEABLE, 0 }, + + { ngx_string("ssl_server_name"), NULL, ngx_stream_ssl_variable, + (uintptr_t) ngx_ssl_get_server_name, NGX_STREAM_VAR_CHANGEABLE, 0 }, + + { ngx_null_string, NULL, NULL, 0, 0, 0 } +}; + + static ngx_str_t ngx_stream_ssl_sess_id_ctx = ngx_string("STREAM"); +static ngx_int_t +ngx_stream_ssl_static_variable(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data) +{ + ngx_ssl_variable_handler_pt handler = (ngx_ssl_variable_handler_pt) data; + + size_t len; + ngx_str_t str; + + if (s->connection->ssl) { + + (void) handler(s->connection, NULL, &str); + + v->data = str.data; + + for (len = 0; v->data[len]; len++) { /* void */ } + + v->len = len; + v->valid = 1; + v->no_cacheable = 0; + v->not_found = 0; + + return NGX_OK; + } + + v->not_found = 1; + + return NGX_OK; +} + + +static ngx_int_t +ngx_stream_ssl_variable(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data) +{ + ngx_ssl_variable_handler_pt handler = (ngx_ssl_variable_handler_pt) data; + + ngx_str_t str; + + if (s->connection->ssl) { + + if (handler(s->connection, s->connection->pool, &str) != NGX_OK) { + return NGX_ERROR; + } + + v->len = str.len; + v->data = str.data; + + if (v->len) { + v->valid = 1; + v->no_cacheable = 0; + v->not_found = 0; + + return NGX_OK; + } + } + + v->not_found = 1; + + return NGX_OK; +} + + +static ngx_int_t +ngx_stream_ssl_add_variables(ngx_conf_t *cf) +{ + ngx_stream_variable_t *var, *v; + + for (v = ngx_stream_ssl_vars; v->name.len; v++) { + var = ngx_stream_add_variable(cf, &v->name, v->flags); + if (var == NULL) { + return NGX_ERROR; + } + + var->get_handler = v->get_handler; + var->data = v->data; + } + + return NGX_OK; +} + + static void * ngx_stream_ssl_create_conf(ngx_conf_t *cf) { @@ -266,24 +380,13 @@ ngx_stream_ssl_merge_conf(ngx_conf_t *cf, void *parent, void *child) return NGX_CONF_ERROR; } - if (SSL_CTX_set_cipher_list(conf->ssl.ctx, - (const char *) conf->ciphers.data) - == 0) + if (ngx_ssl_ciphers(cf, &conf->ssl, &conf->ciphers, + conf->prefer_server_ciphers) + != NGX_OK) { - ngx_ssl_error(NGX_LOG_EMERG, cf->log, 0, - "SSL_CTX_set_cipher_list(\"%V\") failed", - &conf->ciphers); return NGX_CONF_ERROR; } - if (conf->prefer_server_ciphers) { - SSL_CTX_set_options(conf->ssl.ctx, SSL_OP_CIPHER_SERVER_PREFERENCE); - } - -#if (OPENSSL_VERSION_NUMBER < 0x10100001L && !defined LIBRESSL_VERSION_NUMBER) - SSL_CTX_set_tmp_rsa_callback(conf->ssl.ctx, ngx_ssl_rsa512_key_callback); -#endif - if (ngx_ssl_dhparam(cf, &conf->ssl, &conf->dhparam) != NGX_OK) { return NGX_CONF_ERROR; } Renamed: vendor/nginx-1.11.3/src/stream/ngx_stream_ssl_module.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.3/src/stream/ngx_stream_upstream.c (+2 -1) 98% =================================================================== --- vendor/nginx-1.11.1/src/stream/ngx_stream_upstream.c 2016-07-27 12:58:24 +0900 (69dddc5) +++ vendor/nginx-1.11.3/src/stream/ngx_stream_upstream.c 2016-07-27 13:06:13 +0900 (2ea5eeb) @@ -39,13 +39,14 @@ static ngx_command_t ngx_stream_upstream_commands[] = { static ngx_stream_module_t ngx_stream_upstream_module_ctx = { + NULL, /* preconfiguration */ NULL, /* postconfiguration */ ngx_stream_upstream_create_main_conf, /* create main configuration */ ngx_stream_upstream_init_main_conf, /* init main configuration */ NULL, /* create server configuration */ - NULL, /* merge server configuration */ + NULL /* merge server configuration */ }; Renamed: vendor/nginx-1.11.3/src/stream/ngx_stream_upstream.h (+16 -0) 86% =================================================================== --- vendor/nginx-1.11.1/src/stream/ngx_stream_upstream.h 2016-07-27 12:58:24 +0900 (1f4810c) +++ vendor/nginx-1.11.3/src/stream/ngx_stream_upstream.h 2016-07-27 13:06:13 +0900 (5f067c0) @@ -79,6 +79,21 @@ struct ngx_stream_upstream_srv_conf_s { typedef struct { + ngx_str_t host; + in_port_t port; + ngx_uint_t no_port; /* unsigned no_port:1 */ + + ngx_uint_t naddrs; + ngx_resolver_addr_t *addrs; + + struct sockaddr *sockaddr; + socklen_t socklen; + + ngx_resolver_ctx_t *ctx; +} ngx_stream_upstream_resolved_t; + + +typedef struct { ngx_peer_connection_t peer; ngx_buf_t downstream_buf; ngx_buf_t upstream_buf; @@ -88,6 +103,7 @@ typedef struct { #if (NGX_STREAM_SSL) ngx_str_t ssl_name; #endif + ngx_stream_upstream_resolved_t *resolved; unsigned connected:1; unsigned proxy_protocol:1; } ngx_stream_upstream_t; Renamed: vendor/nginx-1.11.3/src/stream/ngx_stream_upstream_hash_module.c (+18 -8) 96% =================================================================== --- vendor/nginx-1.11.1/src/stream/ngx_stream_upstream_hash_module.c 2016-07-27 12:58:24 +0900 (56ff7d6) +++ vendor/nginx-1.11.3/src/stream/ngx_stream_upstream_hash_module.c 2016-07-27 13:06:13 +0900 (88185eb) @@ -23,6 +23,7 @@ typedef struct { typedef struct { + ngx_stream_complex_value_t key; ngx_stream_upstream_chash_points_t *points; } ngx_stream_upstream_hash_srv_conf_t; @@ -76,13 +77,14 @@ static ngx_command_t ngx_stream_upstream_hash_commands[] = { static ngx_stream_module_t ngx_stream_upstream_hash_module_ctx = { + NULL, /* preconfiguration */ NULL, /* postconfiguration */ NULL, /* create main configuration */ NULL, /* init main configuration */ ngx_stream_upstream_hash_create_conf, /* create server configuration */ - NULL, /* merge server configuration */ + NULL /* merge server configuration */ }; @@ -140,7 +142,9 @@ ngx_stream_upstream_init_hash_peer(ngx_stream_session_t *s, hcf = ngx_stream_conf_upstream_srv_conf(us, ngx_stream_upstream_hash_module); - hp->key = s->connection->addr_text; + if (ngx_stream_complex_value(s, &hcf->key, &hp->key) != NGX_OK) { + return NGX_ERROR; + } ngx_log_debug1(NGX_LOG_DEBUG_STREAM, s->connection->log, 0, "upstream hash key:\"%V\"", &hp->key); @@ -615,15 +619,21 @@ ngx_stream_upstream_hash_create_conf(ngx_conf_t *cf) static char * ngx_stream_upstream_hash(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) { - ngx_str_t *value; - ngx_stream_upstream_srv_conf_t *uscf; + ngx_stream_upstream_hash_srv_conf_t *hcf = conf; + + ngx_str_t *value; + ngx_stream_upstream_srv_conf_t *uscf; + ngx_stream_compile_complex_value_t ccv; value = cf->args->elts; - if (ngx_strcmp(value[1].data, "$remote_addr")) { - ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, - "unsupported hash key \"%V\", use $remote_addr", - &value[1]); + ngx_memzero(&ccv, sizeof(ngx_stream_compile_complex_value_t)); + + ccv.cf = cf; + ccv.value = &value[1]; + ccv.complex_value = &hcf->key; + + if (ngx_stream_compile_complex_value(&ccv) != NGX_OK) { return NGX_CONF_ERROR; } Renamed: vendor/nginx-1.11.3/src/stream/ngx_stream_upstream_least_conn_module.c (+2 -1) 98% =================================================================== --- vendor/nginx-1.11.1/src/stream/ngx_stream_upstream_least_conn_module.c 2016-07-27 12:58:24 +0900 (c9719f9) +++ vendor/nginx-1.11.3/src/stream/ngx_stream_upstream_least_conn_module.c 2016-07-27 13:06:13 +0900 (e884975) @@ -32,13 +32,14 @@ static ngx_command_t ngx_stream_upstream_least_conn_commands[] = { static ngx_stream_module_t ngx_stream_upstream_least_conn_module_ctx = { + NULL, /* preconfiguration */ NULL, /* postconfiguration */ NULL, /* create main configuration */ NULL, /* init main configuration */ NULL, /* create server configuration */ - NULL, /* merge server configuration */ + NULL /* merge server configuration */ }; Renamed: vendor/nginx-1.11.3/src/stream/ngx_stream_upstream_round_robin.c (+135 -0) 81% =================================================================== --- vendor/nginx-1.11.1/src/stream/ngx_stream_upstream_round_robin.c 2016-07-27 12:58:24 +0900 (e1ab592) +++ vendor/nginx-1.11.3/src/stream/ngx_stream_upstream_round_robin.c 2016-07-27 13:06:13 +0900 (7aced0f) @@ -23,6 +23,10 @@ static ngx_int_t ngx_stream_upstream_set_round_robin_peer_session( ngx_peer_connection_t *pc, void *data); static void ngx_stream_upstream_save_round_robin_peer_session( ngx_peer_connection_t *pc, void *data); +static ngx_int_t ngx_stream_upstream_empty_set_session( + ngx_peer_connection_t *pc, void *data); +static void ngx_stream_upstream_empty_save_session(ngx_peer_connection_t *pc, + void *data); #endif @@ -293,6 +297,123 @@ ngx_stream_upstream_init_round_robin_peer(ngx_stream_session_t *s, ngx_int_t +ngx_stream_upstream_create_round_robin_peer(ngx_stream_session_t *s, + ngx_stream_upstream_resolved_t *ur) +{ + u_char *p; + size_t len; + socklen_t socklen; + ngx_uint_t i, n; + struct sockaddr *sockaddr; + ngx_stream_upstream_rr_peer_t *peer, **peerp; + ngx_stream_upstream_rr_peers_t *peers; + ngx_stream_upstream_rr_peer_data_t *rrp; + + rrp = s->upstream->peer.data; + + if (rrp == NULL) { + rrp = ngx_palloc(s->connection->pool, + sizeof(ngx_stream_upstream_rr_peer_data_t)); + if (rrp == NULL) { + return NGX_ERROR; + } + + s->upstream->peer.data = rrp; + } + + peers = ngx_pcalloc(s->connection->pool, + sizeof(ngx_stream_upstream_rr_peers_t)); + if (peers == NULL) { + return NGX_ERROR; + } + + peer = ngx_pcalloc(s->connection->pool, + sizeof(ngx_stream_upstream_rr_peer_t) * ur->naddrs); + if (peer == NULL) { + return NGX_ERROR; + } + + peers->single = (ur->naddrs == 1); + peers->number = ur->naddrs; + peers->name = &ur->host; + + if (ur->sockaddr) { + peer[0].sockaddr = ur->sockaddr; + peer[0].socklen = ur->socklen; + peer[0].name = ur->host; + peer[0].weight = 1; + peer[0].effective_weight = 1; + peer[0].current_weight = 0; + peer[0].max_fails = 1; + peer[0].fail_timeout = 10; + peers->peer = peer; + + } else { + peerp = &peers->peer; + + for (i = 0; i < ur->naddrs; i++) { + + socklen = ur->addrs[i].socklen; + + sockaddr = ngx_palloc(s->connection->pool, socklen); + if (sockaddr == NULL) { + return NGX_ERROR; + } + + ngx_memcpy(sockaddr, ur->addrs[i].sockaddr, socklen); + ngx_inet_set_port(sockaddr, ur->port); + + p = ngx_pnalloc(s->connection->pool, NGX_SOCKADDR_STRLEN); + if (p == NULL) { + return NGX_ERROR; + } + + len = ngx_sock_ntop(sockaddr, socklen, p, NGX_SOCKADDR_STRLEN, 1); + + peer[i].sockaddr = sockaddr; + peer[i].socklen = socklen; + peer[i].name.len = len; + peer[i].name.data = p; + peer[i].weight = 1; + peer[i].effective_weight = 1; + peer[i].current_weight = 0; + peer[i].max_fails = 1; + peer[i].fail_timeout = 10; + *peerp = &peer[i]; + peerp = &peer[i].next; + } + } + + rrp->peers = peers; + rrp->current = NULL; + + if (rrp->peers->number <= 8 * sizeof(uintptr_t)) { + rrp->tried = &rrp->data; + rrp->data = 0; + + } else { + n = (rrp->peers->number + (8 * sizeof(uintptr_t) - 1)) + / (8 * sizeof(uintptr_t)); + + rrp->tried = ngx_pcalloc(s->connection->pool, n * sizeof(uintptr_t)); + if (rrp->tried == NULL) { + return NGX_ERROR; + } + } + + s->upstream->peer.get = ngx_stream_upstream_get_round_robin_peer; + s->upstream->peer.free = ngx_stream_upstream_free_round_robin_peer; + s->upstream->peer.tries = ngx_stream_upstream_tries(rrp->peers); +#if (NGX_STREAM_SSL) + s->upstream->peer.set_session = ngx_stream_upstream_empty_set_session; + s->upstream->peer.save_session = ngx_stream_upstream_empty_save_session; +#endif + + return NGX_OK; +} + + +ngx_int_t ngx_stream_upstream_get_round_robin_peer(ngx_peer_connection_t *pc, void *data) { ngx_stream_upstream_rr_peer_data_t *rrp = data; @@ -699,4 +820,18 @@ ngx_stream_upstream_save_round_robin_peer_session(ngx_peer_connection_t *pc, } } + +static ngx_int_t +ngx_stream_upstream_empty_set_session(ngx_peer_connection_t *pc, void *data) +{ + return NGX_OK; +} + + +static void +ngx_stream_upstream_empty_save_session(ngx_peer_connection_t *pc, void *data) +{ + return; +} + #endif Renamed: vendor/nginx-1.11.3/src/stream/ngx_stream_upstream_round_robin.h (+2 -0) 97% =================================================================== --- vendor/nginx-1.11.1/src/stream/ngx_stream_upstream_round_robin.h 2016-07-27 12:58:24 +0900 (77ee0ab) +++ vendor/nginx-1.11.3/src/stream/ngx_stream_upstream_round_robin.h 2016-07-27 13:06:13 +0900 (452c2e9) @@ -130,6 +130,8 @@ ngx_int_t ngx_stream_upstream_init_round_robin(ngx_conf_t *cf, ngx_stream_upstream_srv_conf_t *us); ngx_int_t ngx_stream_upstream_init_round_robin_peer(ngx_stream_session_t *s, ngx_stream_upstream_srv_conf_t *us); +ngx_int_t ngx_stream_upstream_create_round_robin_peer(ngx_stream_session_t *s, + ngx_stream_upstream_resolved_t *ur); ngx_int_t ngx_stream_upstream_get_round_robin_peer(ngx_peer_connection_t *pc, void *data); void ngx_stream_upstream_free_round_robin_peer(ngx_peer_connection_t *pc, Renamed: vendor/nginx-1.11.3/src/stream/ngx_stream_upstream_zone_module.c (+2 -1) 98% =================================================================== --- vendor/nginx-1.11.1/src/stream/ngx_stream_upstream_zone_module.c 2016-07-27 12:58:24 +0900 (ffc9e8a) +++ vendor/nginx-1.11.3/src/stream/ngx_stream_upstream_zone_module.c 2016-07-27 13:06:13 +0900 (07ab88d) @@ -32,13 +32,14 @@ static ngx_command_t ngx_stream_upstream_zone_commands[] = { static ngx_stream_module_t ngx_stream_upstream_zone_module_ctx = { + NULL, /* preconfiguration */ NULL, /* postconfiguration */ NULL, /* create main configuration */ NULL, /* init main configuration */ NULL, /* create server configuration */ - NULL, /* merge server configuration */ + NULL /* merge server configuration */ }; Added: vendor/nginx-1.11.3/src/stream/ngx_stream_variables.c (+971 -0) 100644 =================================================================== --- /dev/null +++ vendor/nginx-1.11.3/src/stream/ngx_stream_variables.c 2016-07-27 13:06:13 +0900 (10f9c7e) @@ -0,0 +1,971 @@ + +/* + * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. + */ + + +#include <ngx_config.h> +#include <ngx_core.h> +#include <ngx_stream.h> +#include <nginx.h> + + +static ngx_int_t ngx_stream_variable_binary_remote_addr( + ngx_stream_session_t *s, ngx_stream_variable_value_t *v, uintptr_t data); +static ngx_int_t ngx_stream_variable_remote_addr(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data); +static ngx_int_t ngx_stream_variable_remote_port(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data); +static ngx_int_t ngx_stream_variable_server_addr(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data); +static ngx_int_t ngx_stream_variable_server_port(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data); +static ngx_int_t ngx_stream_variable_bytes_sent(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data); +static ngx_int_t ngx_stream_variable_connection(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data); + +static ngx_int_t ngx_stream_variable_nginx_version(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data); +static ngx_int_t ngx_stream_variable_hostname(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data); +static ngx_int_t ngx_stream_variable_pid(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data); +static ngx_int_t ngx_stream_variable_msec(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data); +static ngx_int_t ngx_stream_variable_time_iso8601(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data); +static ngx_int_t ngx_stream_variable_time_local(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data); + + +static ngx_stream_variable_t ngx_stream_core_variables[] = { + + { ngx_string("binary_remote_addr"), NULL, + ngx_stream_variable_binary_remote_addr, 0, 0, 0 }, + + { ngx_string("remote_addr"), NULL, + ngx_stream_variable_remote_addr, 0, 0, 0 }, + + { ngx_string("remote_port"), NULL, + ngx_stream_variable_remote_port, 0, 0, 0 }, + + { ngx_string("server_addr"), NULL, + ngx_stream_variable_server_addr, 0, 0, 0 }, + + { ngx_string("server_port"), NULL, + ngx_stream_variable_server_port, 0, 0, 0 }, + + { ngx_string("bytes_sent"), NULL, ngx_stream_variable_bytes_sent, + 0, 0, 0 }, + + { ngx_string("connection"), NULL, + ngx_stream_variable_connection, 0, 0, 0 }, + + { ngx_string("nginx_version"), NULL, ngx_stream_variable_nginx_version, + 0, 0, 0 }, + + { ngx_string("hostname"), NULL, ngx_stream_variable_hostname, + 0, 0, 0 }, + + { ngx_string("pid"), NULL, ngx_stream_variable_pid, + 0, 0, 0 }, + + { ngx_string("msec"), NULL, ngx_stream_variable_msec, + 0, NGX_STREAM_VAR_NOCACHEABLE, 0 }, + + { ngx_string("time_iso8601"), NULL, ngx_stream_variable_time_iso8601, + 0, NGX_STREAM_VAR_NOCACHEABLE, 0 }, + + { ngx_string("time_local"), NULL, ngx_stream_variable_time_local, + 0, NGX_STREAM_VAR_NOCACHEABLE, 0 }, + + { ngx_null_string, NULL, NULL, 0, 0, 0 } +}; + + +ngx_stream_variable_value_t ngx_stream_variable_null_value = + ngx_stream_variable(""); +ngx_stream_variable_value_t ngx_stream_variable_true_value = + ngx_stream_variable("1"); + + +ngx_stream_variable_t * +ngx_stream_add_variable(ngx_conf_t *cf, ngx_str_t *name, ngx_uint_t flags) +{ + ngx_int_t rc; + ngx_uint_t i; + ngx_hash_key_t *key; + ngx_stream_variable_t *v; + ngx_stream_core_main_conf_t *cmcf; + + if (name->len == 0) { + ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, + "invalid variable name \"$\""); + return NULL; + } + + cmcf = ngx_stream_conf_get_module_main_conf(cf, ngx_stream_core_module); + + key = cmcf->variables_keys->keys.elts; + for (i = 0; i < cmcf->variables_keys->keys.nelts; i++) { + if (name->len != key[i].key.len + || ngx_strncasecmp(name->data, key[i].key.data, name->len) != 0) + { + continue; + } + + v = key[i].value; + + if (!(v->flags & NGX_STREAM_VAR_CHANGEABLE)) { + ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, + "the duplicate \"%V\" variable", name); + return NULL; + } + + return v; + } + + v = ngx_palloc(cf->pool, sizeof(ngx_stream_variable_t)); + if (v == NULL) { + return NULL; + } + + v->name.len = name->len; + v->name.data = ngx_pnalloc(cf->pool, name->len); + if (v->name.data == NULL) { + return NULL; + } + + ngx_strlow(v->name.data, name->data, name->len); + + v->set_handler = NULL; + v->get_handler = NULL; + v->data = 0; + v->flags = flags; + v->index = 0; + + rc = ngx_hash_add_key(cmcf->variables_keys, &v->name, v, 0); + + if (rc == NGX_ERROR) { + return NULL; + } + + if (rc == NGX_BUSY) { + ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, + "conflicting variable name \"%V\"", name); + return NULL; + } + + return v; +} + + +ngx_int_t +ngx_stream_get_variable_index(ngx_conf_t *cf, ngx_str_t *name) +{ + ngx_uint_t i; + ngx_stream_variable_t *v; + ngx_stream_core_main_conf_t *cmcf; + + if (name->len == 0) { + ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, + "invalid variable name \"$\""); + return NGX_ERROR; + } + + cmcf = ngx_stream_conf_get_module_main_conf(cf, ngx_stream_core_module); + + v = cmcf->variables.elts; + + if (v == NULL) { + if (ngx_array_init(&cmcf->variables, cf->pool, 4, + sizeof(ngx_stream_variable_t)) + != NGX_OK) + { + return NGX_ERROR; + } + + } else { + for (i = 0; i < cmcf->variables.nelts; i++) { + if (name->len != v[i].name.len + || ngx_strncasecmp(name->data, v[i].name.data, name->len) != 0) + { + continue; + } + + return i; + } + } + + v = ngx_array_push(&cmcf->variables); + if (v == NULL) { + return NGX_ERROR; + } + + v->name.len = name->len; + v->name.data = ngx_pnalloc(cf->pool, name->len); + if (v->name.data == NULL) { + return NGX_ERROR; + } + + ngx_strlow(v->name.data, name->data, name->len); + + v->set_handler = NULL; + v->get_handler = NULL; + v->data = 0; + v->flags = 0; + v->index = cmcf->variables.nelts - 1; + + return v->index; +} + + +ngx_stream_variable_value_t * +ngx_stream_get_indexed_variable(ngx_stream_session_t *s, ngx_uint_t index) +{ + ngx_stream_variable_t *v; + ngx_stream_core_main_conf_t *cmcf; + + cmcf = ngx_stream_get_module_main_conf(s, ngx_stream_core_module); + + if (cmcf->variables.nelts <= index) { + ngx_log_error(NGX_LOG_ALERT, s->connection->log, 0, + "unknown variable index: %ui", index); + return NULL; + } + + if (s->variables[index].not_found || s->variables[index].valid) { + return &s->variables[index]; + } + + v = cmcf->variables.elts; + + if (v[index].get_handler(s, &s->variables[index], v[index].data) + == NGX_OK) + { + if (v[index].flags & NGX_STREAM_VAR_NOCACHEABLE) { + s->variables[index].no_cacheable = 1; + } + + return &s->variables[index]; + } + + s->variables[index].valid = 0; + s->variables[index].not_found = 1; + + return NULL; +} + + +ngx_stream_variable_value_t * +ngx_stream_get_flushed_variable(ngx_stream_session_t *s, ngx_uint_t index) +{ + ngx_stream_variable_value_t *v; + + v = &s->variables[index]; + + if (v->valid || v->not_found) { + if (!v->no_cacheable) { + return v; + } + + v->valid = 0; + v->not_found = 0; + } + + return ngx_stream_get_indexed_variable(s, index); +} + + +ngx_stream_variable_value_t * +ngx_stream_get_variable(ngx_stream_session_t *s, ngx_str_t *name, + ngx_uint_t key) +{ + ngx_stream_variable_t *v; + ngx_stream_variable_value_t *vv; + ngx_stream_core_main_conf_t *cmcf; + + cmcf = ngx_stream_get_module_main_conf(s, ngx_stream_core_module); + + v = ngx_hash_find(&cmcf->variables_hash, key, name->data, name->len); + + if (v) { + if (v->flags & NGX_STREAM_VAR_INDEXED) { + return ngx_stream_get_flushed_variable(s, v->index); + + } else { + + vv = ngx_palloc(s->connection->pool, + sizeof(ngx_stream_variable_value_t)); + + if (vv && v->get_handler(s, vv, v->data) == NGX_OK) { + return vv; + } + + return NULL; + } + } + + vv = ngx_palloc(s->connection->pool, sizeof(ngx_stream_variable_value_t)); + if (vv == NULL) { + return NULL; + } + + vv->not_found = 1; + + return vv; +} + + +static ngx_int_t +ngx_stream_variable_binary_remote_addr(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data) + { + struct sockaddr_in *sin; +#if (NGX_HAVE_INET6) + struct sockaddr_in6 *sin6; +#endif + + switch (s->connection->sockaddr->sa_family) { + +#if (NGX_HAVE_INET6) + case AF_INET6: + sin6 = (struct sockaddr_in6 *) s->connection->sockaddr; + + v->len = sizeof(struct in6_addr); + v->valid = 1; + v->no_cacheable = 0; + v->not_found = 0; + v->data = sin6->sin6_addr.s6_addr; + + break; +#endif + + default: /* AF_INET */ + sin = (struct sockaddr_in *) s->connection->sockaddr; + + v->len = sizeof(in_addr_t); + v->valid = 1; + v->no_cacheable = 0; + v->not_found = 0; + v->data = (u_char *) &sin->sin_addr; + + break; + } + + return NGX_OK; +} + + +static ngx_int_t +ngx_stream_variable_remote_addr(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data) +{ + v->len = s->connection->addr_text.len; + v->valid = 1; + v->no_cacheable = 0; + v->not_found = 0; + v->data = s->connection->addr_text.data; + + return NGX_OK; +} + + +static ngx_int_t +ngx_stream_variable_remote_port(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data) +{ + ngx_uint_t port; + + v->len = 0; + v->valid = 1; + v->no_cacheable = 0; + v->not_found = 0; + + v->data = ngx_pnalloc(s->connection->pool, sizeof("65535") - 1); + if (v->data == NULL) { + return NGX_ERROR; + } + + port = ngx_inet_get_port(s->connection->sockaddr); + + if (port > 0 && port < 65536) { + v->len = ngx_sprintf(v->data, "%ui", port) - v->data; + } + + return NGX_OK; +} + + +static ngx_int_t +ngx_stream_variable_server_addr(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data) +{ + ngx_str_t str; + u_char addr[NGX_SOCKADDR_STRLEN]; + + str.len = NGX_SOCKADDR_STRLEN; + str.data = addr; + + if (ngx_connection_local_sockaddr(s->connection, &str, 0) != NGX_OK) { + return NGX_ERROR; + } + + str.data = ngx_pnalloc(s->connection->pool, str.len); + if (str.data == NULL) { + return NGX_ERROR; + } + + ngx_memcpy(str.data, addr, str.len); + + v->len = str.len; + v->valid = 1; + v->no_cacheable = 0; + v->not_found = 0; + v->data = str.data; + + return NGX_OK; +} + + +static ngx_int_t +ngx_stream_variable_server_port(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data) +{ + ngx_uint_t port; + + v->len = 0; + v->valid = 1; + v->no_cacheable = 0; + v->not_found = 0; + + if (ngx_connection_local_sockaddr(s->connection, NULL, 0) != NGX_OK) { + return NGX_ERROR; + } + + v->data = ngx_pnalloc(s->connection->pool, sizeof("65535") - 1); + if (v->data == NULL) { + return NGX_ERROR; + } + + port = ngx_inet_get_port(s->connection->local_sockaddr); + + if (port > 0 && port < 65536) { + v->len = ngx_sprintf(v->data, "%ui", port) - v->data; + } + + return NGX_OK; +} + + +static ngx_int_t +ngx_stream_variable_bytes_sent(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data) +{ + u_char *p; + + p = ngx_pnalloc(s->connection->pool, NGX_OFF_T_LEN); + if (p == NULL) { + return NGX_ERROR; + } + + v->len = ngx_sprintf(p, "%O", s->connection->sent) - p; + v->valid = 1; + v->no_cacheable = 0; + v->not_found = 0; + v->data = p; + + return NGX_OK; +} + + +static ngx_int_t +ngx_stream_variable_connection(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data) +{ + u_char *p; + + p = ngx_pnalloc(s->connection->pool, NGX_ATOMIC_T_LEN); + if (p == NULL) { + return NGX_ERROR; + } + + v->len = ngx_sprintf(p, "%uA", s->connection->number) - p; + v->valid = 1; + v->no_cacheable = 0; + v->not_found = 0; + v->data = p; + + return NGX_OK; +} + + +static ngx_int_t +ngx_stream_variable_nginx_version(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data) +{ + v->len = sizeof(NGINX_VERSION) - 1; + v->valid = 1; + v->no_cacheable = 0; + v->not_found = 0; + v->data = (u_char *) NGINX_VERSION; + + return NGX_OK; +} + + +static ngx_int_t +ngx_stream_variable_hostname(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data) +{ + v->len = ngx_cycle->hostname.len; + v->valid = 1; + v->no_cacheable = 0; + v->not_found = 0; + v->data = ngx_cycle->hostname.data; + + return NGX_OK; +} + + +static ngx_int_t +ngx_stream_variable_pid(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data) +{ + u_char *p; + + p = ngx_pnalloc(s->connection->pool, NGX_INT64_LEN); + if (p == NULL) { + return NGX_ERROR; + } + + v->len = ngx_sprintf(p, "%P", ngx_pid) - p; + v->valid = 1; + v->no_cacheable = 0; + v->not_found = 0; + v->data = p; + + return NGX_OK; +} + + +static ngx_int_t +ngx_stream_variable_msec(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data) +{ + u_char *p; + ngx_time_t *tp; + + p = ngx_pnalloc(s->connection->pool, NGX_TIME_T_LEN + 4); + if (p == NULL) { + return NGX_ERROR; + } + + tp = ngx_timeofday(); + + v->len = ngx_sprintf(p, "%T.%03M", tp->sec, tp->msec) - p; + v->valid = 1; + v->no_cacheable = 0; + v->not_found = 0; + v->data = p; + + return NGX_OK; +} + + +static ngx_int_t +ngx_stream_variable_time_iso8601(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data) +{ + u_char *p; + + p = ngx_pnalloc(s->connection->pool, ngx_cached_http_log_iso8601.len); + if (p == NULL) { + return NGX_ERROR; + } + + ngx_memcpy(p, ngx_cached_http_log_iso8601.data, + ngx_cached_http_log_iso8601.len); + + v->len = ngx_cached_http_log_iso8601.len; + v->valid = 1; + v->no_cacheable = 0; + v->not_found = 0; + v->data = p; + + return NGX_OK; +} + + +static ngx_int_t +ngx_stream_variable_time_local(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data) +{ + u_char *p; + + p = ngx_pnalloc(s->connection->pool, ngx_cached_http_log_time.len); + if (p == NULL) { + return NGX_ERROR; + } + + ngx_memcpy(p, ngx_cached_http_log_time.data, ngx_cached_http_log_time.len); + + v->len = ngx_cached_http_log_time.len; + v->valid = 1; + v->no_cacheable = 0; + v->not_found = 0; + v->data = p; + + return NGX_OK; +} + + +void * +ngx_stream_map_find(ngx_stream_session_t *s, ngx_stream_map_t *map, + ngx_str_t *match) +{ + void *value; + u_char *low; + size_t len; + ngx_uint_t key; + + len = match->len; + + if (len) { + low = ngx_pnalloc(s->connection->pool, len); + if (low == NULL) { + return NULL; + } + + } else { + low = NULL; + } + + key = ngx_hash_strlow(low, match->data, len); + + value = ngx_hash_find_combined(&map->hash, key, low, len); + if (value) { + return value; + } + +#if (NGX_PCRE) + + if (len && map->nregex) { + ngx_int_t n; + ngx_uint_t i; + ngx_stream_map_regex_t *reg; + + reg = map->regex; + + for (i = 0; i < map->nregex; i++) { + + n = ngx_stream_regex_exec(s, reg[i].regex, match); + + if (n == NGX_OK) { + return reg[i].value; + } + + if (n == NGX_DECLINED) { + continue; + } + + /* NGX_ERROR */ + + return NULL; + } + } + +#endif + + return NULL; +} + + +#if (NGX_PCRE) + +static ngx_int_t +ngx_stream_variable_not_found(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data) +{ + v->not_found = 1; + return NGX_OK; +} + + +ngx_stream_regex_t * +ngx_stream_regex_compile(ngx_conf_t *cf, ngx_regex_compile_t *rc) +{ + u_char *p; + size_t size; + ngx_str_t name; + ngx_uint_t i, n; + ngx_stream_variable_t *v; + ngx_stream_regex_t *re; + ngx_stream_regex_variable_t *rv; + ngx_stream_core_main_conf_t *cmcf; + + rc->pool = cf->pool; + + if (ngx_regex_compile(rc) != NGX_OK) { + ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "%V", &rc->err); + return NULL; + } + + re = ngx_pcalloc(cf->pool, sizeof(ngx_stream_regex_t)); + if (re == NULL) { + return NULL; + } + + re->regex = rc->regex; + re->ncaptures = rc->captures; + re->name = rc->pattern; + + cmcf = ngx_stream_conf_get_module_main_conf(cf, ngx_stream_core_module); + cmcf->ncaptures = ngx_max(cmcf->ncaptures, re->ncaptures); + + n = (ngx_uint_t) rc->named_captures; + + if (n == 0) { + return re; + } + + rv = ngx_palloc(rc->pool, n * sizeof(ngx_stream_regex_variable_t)); + if (rv == NULL) { + return NULL; + } + + re->variables = rv; + re->nvariables = n; + + size = rc->name_size; + p = rc->names; + + for (i = 0; i < n; i++) { + rv[i].capture = 2 * ((p[0] << 8) + p[1]); + + name.data = &p[2]; + name.len = ngx_strlen(name.data); + + v = ngx_stream_add_variable(cf, &name, NGX_STREAM_VAR_CHANGEABLE); + if (v == NULL) { + return NULL; + } + + rv[i].index = ngx_stream_get_variable_index(cf, &name); + if (rv[i].index == NGX_ERROR) { + return NULL; + } + + v->get_handler = ngx_stream_variable_not_found; + + p += size; + } + + return re; +} + + +ngx_int_t +ngx_stream_regex_exec(ngx_stream_session_t *s, ngx_stream_regex_t *re, + ngx_str_t *str) +{ + ngx_int_t rc, index; + ngx_uint_t i, n, len; + ngx_stream_variable_value_t *vv; + ngx_stream_core_main_conf_t *cmcf; + + cmcf = ngx_stream_get_module_main_conf(s, ngx_stream_core_module); + + if (re->ncaptures) { + len = cmcf->ncaptures; + + if (s->captures == NULL) { + s->captures = ngx_palloc(s->connection->pool, len * sizeof(int)); + if (s->captures == NULL) { + return NGX_ERROR; + } + } + + } else { + len = 0; + } + + rc = ngx_regex_exec(re->regex, str, s->captures, len); + + if (rc == NGX_REGEX_NO_MATCHED) { + return NGX_DECLINED; + } + + if (rc < 0) { + ngx_log_error(NGX_LOG_ALERT, s->connection->log, 0, + ngx_regex_exec_n " failed: %i on \"%V\" using \"%V\"", + rc, str, &re->name); + return NGX_ERROR; + } + + for (i = 0; i < re->nvariables; i++) { + + n = re->variables[i].capture; + index = re->variables[i].index; + vv = &s->variables[index]; + + vv->len = s->captures[n + 1] - s->captures[n]; + vv->valid = 1; + vv->no_cacheable = 0; + vv->not_found = 0; + vv->data = &str->data[s->captures[n]]; + +#if (NGX_DEBUG) + { + ngx_stream_variable_t *v; + + v = cmcf->variables.elts; + + ngx_log_debug2(NGX_LOG_DEBUG_STREAM, s->connection->log, 0, + "stream regex set $%V to \"%v\"", &v[index].name, vv); + } +#endif + } + + s->ncaptures = rc * 2; + s->captures_data = str->data; + + return NGX_OK; +} + +#endif + + +ngx_int_t +ngx_stream_variables_add_core_vars(ngx_conf_t *cf) +{ + ngx_int_t rc; + ngx_stream_variable_t *cv, *v; + ngx_stream_core_main_conf_t *cmcf; + + cmcf = ngx_stream_conf_get_module_main_conf(cf, ngx_stream_core_module); + + cmcf->variables_keys = ngx_pcalloc(cf->temp_pool, + sizeof(ngx_hash_keys_arrays_t)); + if (cmcf->variables_keys == NULL) { + return NGX_ERROR; + } + + cmcf->variables_keys->pool = cf->pool; + cmcf->variables_keys->temp_pool = cf->pool; + + if (ngx_hash_keys_array_init(cmcf->variables_keys, NGX_HASH_SMALL) + != NGX_OK) + { + return NGX_ERROR; + } + + for (cv = ngx_stream_core_variables; cv->name.len; cv++) { + v = ngx_palloc(cf->pool, sizeof(ngx_stream_variable_t)); + if (v == NULL) { + return NGX_ERROR; + } + + *v = *cv; + + rc = ngx_hash_add_key(cmcf->variables_keys, &v->name, v, + NGX_HASH_READONLY_KEY); + + if (rc == NGX_OK) { + continue; + } + + if (rc == NGX_BUSY) { + ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, + "conflicting variable name \"%V\"", &v->name); + } + + return NGX_ERROR; + } + + return NGX_OK; +} + + +ngx_int_t +ngx_stream_variables_init_vars(ngx_conf_t *cf) +{ + ngx_uint_t i, n; + ngx_hash_key_t *key; + ngx_hash_init_t hash; + ngx_stream_variable_t *v, *av; + ngx_stream_core_main_conf_t *cmcf; + + /* set the handlers for the indexed stream variables */ + + cmcf = ngx_stream_conf_get_module_main_conf(cf, ngx_stream_core_module); + + v = cmcf->variables.elts; + key = cmcf->variables_keys->keys.elts; + + for (i = 0; i < cmcf->variables.nelts; i++) { + + for (n = 0; n < cmcf->variables_keys->keys.nelts; n++) { + + av = key[n].value; + + if (v[i].name.len == key[n].key.len + && ngx_strncmp(v[i].name.data, key[n].key.data, v[i].name.len) + == 0) + { + v[i].get_handler = av->get_handler; + v[i].data = av->data; + + av->flags |= NGX_STREAM_VAR_INDEXED; + v[i].flags = av->flags; + + av->index = i; + + if (av->get_handler == NULL) { + break; + } + + goto next; + } + } + + ngx_log_error(NGX_LOG_EMERG, cf->log, 0, + "unknown \"%V\" variable", &v[i].name); + + return NGX_ERROR; + + next: + continue; + } + + + for (n = 0; n < cmcf->variables_keys->keys.nelts; n++) { + av = key[n].value; + + if (av->flags & NGX_STREAM_VAR_NOHASH) { + key[n].key.data = NULL; + } + } + + + hash.hash = &cmcf->variables_hash; + hash.key = ngx_hash_key; + hash.max_size = cmcf->variables_hash_max_size; + hash.bucket_size = cmcf->variables_hash_bucket_size; + hash.name = "variables_hash"; + hash.pool = cf->pool; + hash.temp_pool = NULL; + + if (ngx_hash_init(&hash, cmcf->variables_keys->keys.elts, + cmcf->variables_keys->keys.nelts) + != NGX_OK) + { + return NGX_ERROR; + } + + cmcf->variables_keys = NULL; + + return NGX_OK; +} Added: vendor/nginx-1.11.3/src/stream/ngx_stream_variables.h (+109 -0) 100644 =================================================================== --- /dev/null +++ vendor/nginx-1.11.3/src/stream/ngx_stream_variables.h 2016-07-27 13:06:13 +0900 (e4151e2) @@ -0,0 +1,109 @@ + +/* + * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. + */ + + +#ifndef _NGX_STREAM_VARIABLES_H_INCLUDED_ +#define _NGX_STREAM_VARIABLES_H_INCLUDED_ + + +#include <ngx_config.h> +#include <ngx_core.h> +#include <ngx_stream.h> + + +typedef ngx_variable_value_t ngx_stream_variable_value_t; + +#define ngx_stream_variable(v) { sizeof(v) - 1, 1, 0, 0, 0, (u_char *) v } + +typedef struct ngx_stream_variable_s ngx_stream_variable_t; + +typedef void (*ngx_stream_set_variable_pt) (ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data); +typedef ngx_int_t (*ngx_stream_get_variable_pt) (ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data); + + +#define NGX_STREAM_VAR_CHANGEABLE 1 +#define NGX_STREAM_VAR_NOCACHEABLE 2 +#define NGX_STREAM_VAR_INDEXED 4 +#define NGX_STREAM_VAR_NOHASH 8 + + +struct ngx_stream_variable_s { + ngx_str_t name; /* must be first to build the hash */ + ngx_stream_set_variable_pt set_handler; + ngx_stream_get_variable_pt get_handler; + uintptr_t data; + ngx_uint_t flags; + ngx_uint_t index; +}; + + +ngx_stream_variable_t *ngx_stream_add_variable(ngx_conf_t *cf, ngx_str_t *name, + ngx_uint_t flags); +ngx_int_t ngx_stream_get_variable_index(ngx_conf_t *cf, ngx_str_t *name); +ngx_stream_variable_value_t *ngx_stream_get_indexed_variable( + ngx_stream_session_t *s, ngx_uint_t index); +ngx_stream_variable_value_t *ngx_stream_get_flushed_variable( + ngx_stream_session_t *s, ngx_uint_t index); + +ngx_stream_variable_value_t *ngx_stream_get_variable(ngx_stream_session_t *s, + ngx_str_t *name, ngx_uint_t key); + + +#if (NGX_PCRE) + +typedef struct { + ngx_uint_t capture; + ngx_int_t index; +} ngx_stream_regex_variable_t; + + +typedef struct { + ngx_regex_t *regex; + ngx_uint_t ncaptures; + ngx_stream_regex_variable_t *variables; + ngx_uint_t nvariables; + ngx_str_t name; +} ngx_stream_regex_t; + + +typedef struct { + ngx_stream_regex_t *regex; + void *value; +} ngx_stream_map_regex_t; + + +ngx_stream_regex_t *ngx_stream_regex_compile(ngx_conf_t *cf, + ngx_regex_compile_t *rc); +ngx_int_t ngx_stream_regex_exec(ngx_stream_session_t *s, ngx_stream_regex_t *re, + ngx_str_t *str); + +#endif + + +typedef struct { + ngx_hash_combined_t hash; +#if (NGX_PCRE) + ngx_stream_map_regex_t *regex; + ngx_uint_t nregex; +#endif +} ngx_stream_map_t; + + +void *ngx_stream_map_find(ngx_stream_session_t *s, ngx_stream_map_t *map, + ngx_str_t *match); + + +ngx_int_t ngx_stream_variables_add_core_vars(ngx_conf_t *cf); +ngx_int_t ngx_stream_variables_init_vars(ngx_conf_t *cf); + + +extern ngx_stream_variable_value_t ngx_stream_variable_null_value; +extern ngx_stream_variable_value_t ngx_stream_variable_true_value; + + +#endif /* _NGX_STREAM_VARIABLES_H_INCLUDED_ */