├── README
├── src
├── http
│ ├── modules
│ │ ├── perl
│ │ │ ├── typemap
│ │ │ ├── ngx_http_perl_module.h
│ │ │ └── Makefile.PL
│ │ └── ngx_http_ssl_module.h
│ ├── ngx_http_busy_lock.h
│ └── ngx_http_upstream_round_robin.h
├── os
│ └── unix
│ │ ├── ngx_solaris.h
│ │ ├── ngx_linux.h
│ │ ├── ngx_user.h
│ │ ├── ngx_darwin.h
│ │ ├── ngx_shmem.h
│ │ ├── ngx_freebsd.h
│ │ ├── ngx_sunpro_sparc64.il
│ │ ├── ngx_channel.h
│ │ ├── ngx_setproctitle.h
│ │ ├── ngx_alloc.h
│ │ ├── ngx_sunpro_amd64.il
│ │ ├── ngx_sunpro_x86.il
│ │ ├── rfork_thread.S
│ │ ├── ngx_sunpro_atomic_sparc64.h
│ │ ├── ngx_socket.h
│ │ ├── ngx_process_cycle.h
│ │ ├── ngx_time.h
│ │ ├── ngx_daemon.c
│ │ ├── ngx_solaris_init.c
│ │ ├── ngx_send.c
│ │ ├── ngx_aio_read_chain.c
│ │ ├── ngx_gcc_atomic_amd64.h
│ │ ├── ngx_gcc_atomic_sparc64.h
│ │ ├── ngx_darwin_config.h
│ │ ├── ngx_errno.h
│ │ ├── ngx_alloc.c
│ │ ├── ngx_time.c
│ │ ├── ngx_linux_init.c
│ │ ├── ngx_socket.c
│ │ ├── ngx_errno.c
│ │ ├── ngx_solaris_config.h
│ │ ├── ngx_os.h
│ │ ├── ngx_aio_write_chain.c
│ │ ├── ngx_user.c
│ │ ├── ngx_linux_config.h
│ │ ├── ngx_freebsd_config.h
│ │ ├── ngx_udp_recv.c
│ │ ├── ngx_freebsd_rfork_thread.h
│ │ ├── ngx_process.h
│ │ ├── ngx_posix_init.c
│ │ ├── ngx_aio_write.c
│ │ └── ngx_aio_read.c
├── core
│ ├── ngx_murmurhash.h
│ ├── ngx_crypt.h
│ ├── nginx.h
│ ├── ngx_parse.h
│ ├── ngx_sha1.h
│ ├── ngx_crc.h
│ ├── ngx_murmurhash.c
│ ├── ngx_md5.h
│ ├── ngx_shmtx.h
│ ├── ngx_slab.h
│ ├── ngx_times.h
│ ├── ngx_regex.h
│ ├── ngx_radix_tree.h
│ ├── ngx_crc32.h
│ ├── ngx_queue.c
│ ├── ngx_spinlock.c
│ ├── ngx_array.h
│ ├── ngx_core.h
│ ├── ngx_list.h
│ ├── ngx_rbtree.h
│ ├── ngx_list.c
│ └── ngx_cpuinfo.c
├── misc
│ └── ngx_cpp_test_module.cpp
├── mail
│ ├── ngx_mail_pop3_module.h
│ ├── ngx_mail_imap_module.h
│ ├── ngx_mail_smtp_module.h
│ └── ngx_mail_ssl_module.h
└── event
│ ├── ngx_event_mutex.c
│ ├── ngx_event_busy_lock.h
│ ├── ngx_event_timer.h
│ ├── ngx_event_connect.h
│ └── ngx_event_pipe.h
├── auto
├── stubs
├── have
├── nohave
├── define
├── have_headers
├── types
│ ├── value
│ ├── uintptr_t
│ ├── typedef
│ └── sizeof
├── lib
│ ├── md5
│ │ ├── makefile.owc
│ │ ├── makefile.bcc
│ │ ├── makefile.msvc
│ │ ├── make
│ │ └── conf
│ ├── sha1
│ │ ├── makefile.owc
│ │ ├── makefile.bcc
│ │ ├── makefile.msvc
│ │ ├── conf
│ │ └── make
│ ├── openssl
│ │ ├── makefile.msvc
│ │ ├── makefile.bcc
│ │ ├── make
│ │ └── conf
│ ├── libatomic
│ │ ├── make
│ │ └── conf
│ ├── zlib
│ │ ├── makefile.msvc
│ │ ├── makefile.owc
│ │ ├── makefile.bcc
│ │ ├── patch.zlib.h
│ │ ├── conf
│ │ └── make
│ ├── pcre
│ │ ├── makefile.msvc
│ │ ├── makefile.owc
│ │ ├── makefile.bcc
│ │ └── make
│ ├── test
│ ├── make
│ ├── google-perftools
│ │ └── conf
│ ├── perl
│ │ ├── make
│ │ └── conf
│ ├── geoip
│ │ └── conf
│ ├── conf
│ └── libgd
│ │ └── conf
├── cc
│ ├── acc
│ ├── ccc
│ ├── bcc
│ ├── owc
│ └── name
├── headers
├── os
│ ├── win32
│ ├── solaris
│ └── conf
├── init
├── endianess
└── include
├── html
├── index.html
└── 50x.html
├── .gitignore
├── README.md
├── contrib
├── README
├── unicode2nginx
│ └── unicode-to-nginx.pl
└── geo2nginx.pl
├── conf
├── scgi_params
├── uwsgi_params
├── fastcgi_params
├── fastcgi.conf
└── koi-win
└── LICENSE
/README:
--------------------------------------------------------------------------------
1 |
2 | Documentation is available at http://nginx.org
3 |
4 |
--------------------------------------------------------------------------------
/src/http/modules/perl/typemap:
--------------------------------------------------------------------------------
1 | TYPEMAP
2 |
3 | nginx T_PTROBJ
4 |
--------------------------------------------------------------------------------
/auto/stubs:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | have=NGX_SUPPRESS_WARN . auto/have
7 |
8 | have=NGX_SMP . auto/have
9 |
--------------------------------------------------------------------------------
/html/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Welcome to nginx!
4 |
5 |
6 | Welcome to nginx!
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Compiled Object files
2 | *.slo
3 | *.lo
4 | *.o
5 |
6 | # Compiled Dynamic libraries
7 | *.so
8 |
9 | # Compiled Static libraries
10 | *.lai
11 | *.la
12 | *.a
13 |
14 | *.bak
15 |
--------------------------------------------------------------------------------
/auto/have:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | cat << END >> $NGX_AUTO_CONFIG_H
7 |
8 | #ifndef $have
9 | #define $have 1
10 | #endif
11 |
12 | END
13 |
--------------------------------------------------------------------------------
/auto/nohave:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | cat << END >> $NGX_AUTO_CONFIG_H
7 |
8 | #ifndef $have
9 | #define $have 0
10 | #endif
11 |
12 | END
13 |
--------------------------------------------------------------------------------
/auto/define:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | cat << END >> $NGX_AUTO_CONFIG_H
7 |
8 | #ifndef $have
9 | #define $have $value
10 | #endif
11 |
12 | END
13 |
--------------------------------------------------------------------------------
/auto/have_headers:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | cat << END >> $NGX_AUTO_HEADERS_H
7 |
8 | #ifndef $have
9 | #define $have 1
10 | #endif
11 |
12 | END
13 |
--------------------------------------------------------------------------------
/auto/types/value:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | cat << END >> $NGX_AUTO_CONFIG_H
7 |
8 | #ifndef $ngx_param
9 | #define $ngx_param $ngx_value
10 | #endif
11 |
12 | END
13 |
--------------------------------------------------------------------------------
/auto/lib/md5/makefile.owc:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | CFLAGS = -zq -bt=nt -bm -ot -op -oi -oe -s $(CPU_OPT)
7 |
8 | md5.lib:
9 | cd $(MD5)
10 | wcl386 -c $(CFLAGS) -dL_ENDIAN md5_dgst.c
11 | wlib -n md5.lib md5_dgst.obj
12 |
--------------------------------------------------------------------------------
/auto/lib/sha1/makefile.owc:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | CFLAGS = -zq -bt=nt -bm -ot -op -oi -oe -s $(CPU_OPT)
7 |
8 | sha1.lib:
9 | cd $(SHA1)
10 | wcl386 -c $(CFLAGS) -dL_ENDIAN sha1dgst.c
11 | wlib -n sha1.lib sha1dgst.obj
12 |
--------------------------------------------------------------------------------
/auto/cc/acc:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | # aCC: HP ANSI C++ B3910B A.03.55.02
7 |
8 | # C89 mode
9 |
10 | CFLAGS="$CFLAGS -Ae"
11 | CC_TEST_FLAGS="-Ae"
12 |
13 | PCRE_OPT="$PCRE_OPT -Ae"
14 | ZLIB_OPT="$ZLIB_OPT -Ae"
15 | MD5_OPT="$MD5_OPT -Ae"
16 |
--------------------------------------------------------------------------------
/auto/lib/openssl/makefile.msvc:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | all:
7 | cd $(OPENSSL)
8 |
9 | perl Configure VC-WIN32 no-shared --prefix=openssl $(OPENSSL_OPT)
10 |
11 | ms\do_ms
12 |
13 | $(MAKE) -f ms\nt.mak
14 | $(MAKE) -f ms\nt.mak install
15 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | nginx-1.0.14_comment
2 | ====================
3 |
4 | nginx源码中文注释版
5 |
6 | ========
7 |
8 |
9 | 项目目标人群是是初学nginx源码的人员,欢迎提出更新的修改(请确保提交的文件编码为**UTF8**).
10 |
11 | 很多注释都是从网络上一些文章阅读后摘录出来的
12 |
13 | 做注释的同时也增加了文章地址说明
14 |
15 | ==============
16 |
17 | nginx学习资源汇总:
18 |
19 | 《深入理解Nginx -- 模块开发与架构解析》 (注:超级精彩的一本书,入门必备)
20 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_solaris.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_SOLARIS_H_INCLUDED_
9 | #define _NGX_SOLARIS_H_INCLUDED_
10 |
11 |
12 | ngx_chain_t *ngx_solaris_sendfilev_chain(ngx_connection_t *c, ngx_chain_t *in,
13 | off_t limit);
14 |
15 |
16 | #endif /* _NGX_SOLARIS_H_INCLUDED_ */
17 |
--------------------------------------------------------------------------------
/auto/lib/libatomic/make:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | cat << END >> $NGX_MAKEFILE
7 |
8 | $NGX_LIBATOMIC/src/libatomic_ops.a: $NGX_LIBATOMIC/Makefile
9 | cd $NGX_LIBATOMIC && make
10 |
11 | $NGX_LIBATOMIC/Makefile: $NGX_MAKEFILE
12 | cd $NGX_LIBATOMIC && ./configure
13 |
14 | END
15 |
--------------------------------------------------------------------------------
/auto/lib/zlib/makefile.msvc:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | CFLAGS = -nologo -O2 -Ob1 -Oi -Gs $(LIBC) $(CPU_OPT)
7 |
8 | zlib.lib:
9 | cd $(ZLIB)
10 |
11 | cl -c $(CFLAGS) adler32.c crc32.c deflate.c trees.c zutil.c compress.c
12 |
13 | link -lib -out:zlib.lib adler32.obj crc32.obj deflate.obj \
14 | trees.obj zutil.obj compress.obj
15 |
--------------------------------------------------------------------------------
/auto/lib/zlib/makefile.owc:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | CFLAGS = -zq -bt=nt -ot -op -oi -oe -s -bm $(CPU_OPT)
7 |
8 | zlib.lib:
9 | cd $(ZLIB)
10 |
11 | wcl386 -c $(CFLAGS) adler32.c crc32.c deflate.c trees.c zutil.c &
12 | compress.c
13 | wlib -n zlib.lib adler32.obj crc32.obj deflate.obj trees.obj &
14 | zutil.obj compress.obj
15 |
--------------------------------------------------------------------------------
/src/core/ngx_murmurhash.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_MURMURHASH_H_INCLUDED_
9 | #define _NGX_MURMURHASH_H_INCLUDED_
10 |
11 |
12 | #include
13 | #include
14 |
15 |
16 | uint32_t ngx_murmur_hash2(u_char *data, size_t len);
17 |
18 |
19 | #endif /* _NGX_CRC_H_INCLUDED_ */
20 |
--------------------------------------------------------------------------------
/auto/lib/zlib/makefile.bcc:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | CFLAGS = -q -O2 -tWM -w-8004 -w-8012 $(CPU_OPT)
7 |
8 | zlib.lib:
9 | cd $(ZLIB)
10 |
11 | bcc32 -c $(CFLAGS) adler32.c crc32.c deflate.c trees.c zutil.c \
12 | compress.c
13 |
14 | tlib zlib.lib +adler32.obj +crc32.obj +deflate.obj \
15 | +trees.obj +zutil.obj +compress.obj
16 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_linux.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_LINUX_H_INCLUDED_
9 | #define _NGX_LINUX_H_INCLUDED_
10 |
11 |
12 | ngx_chain_t *ngx_linux_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in,
13 | off_t limit);
14 |
15 | extern int ngx_linux_rtsig_max;
16 |
17 |
18 | #endif /* _NGX_LINUX_H_INCLUDED_ */
19 |
--------------------------------------------------------------------------------
/src/core/ngx_crypt.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_CRYPT_H_INCLUDED_
9 | #define _NGX_CRYPT_H_INCLUDED_
10 |
11 |
12 | #include
13 | #include
14 |
15 |
16 | ngx_int_t ngx_crypt(ngx_pool_t *pool, u_char *key, u_char *salt,
17 | u_char **encrypted);
18 |
19 |
20 | #endif /* _NGX_CRYPT_H_INCLUDED_ */
21 |
--------------------------------------------------------------------------------
/auto/lib/zlib/patch.zlib.h:
--------------------------------------------------------------------------------
1 | --- zlib.h Thu Jul 9 20:06:56 1998
2 | +++ zlib-1.1.3/zlib.h Tue Mar 22 13:41:04 2005
3 | @@ -709,7 +709,6 @@
4 | (0 in case of error).
5 | */
6 |
7 | -ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...));
8 | /*
9 | Converts, formats, and writes the args to the compressed file under
10 | control of the format string, as in fprintf. gzprintf returns the number of
11 |
--------------------------------------------------------------------------------
/auto/lib/md5/makefile.bcc:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | CFLAGS = -q -O2 -tWM $(CPU_OPT) -DL_ENDIAN
7 |
8 | !if "$(MD5_ASM)" == "YES"
9 |
10 | md5.lib:
11 | cd $(MD5)
12 | bcc32 -c $(CFLAGS) -DMD5_ASM md5_dgst.c
13 | tlib md5.lib +md5_dgst.obj +"asm\m-win32.obj"
14 |
15 | !else
16 |
17 | md5.lib:
18 | cd $(MD5)
19 | bcc32 -c $(CFLAGS) md5_dgst.c
20 | tlib md5.lib +md5_dgst.obj
21 |
22 | !endif
23 |
--------------------------------------------------------------------------------
/src/core/nginx.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGINX_H_INCLUDED_
9 | #define _NGINX_H_INCLUDED_
10 |
11 |
12 | #define nginx_version 1000014
13 | #define NGINX_VERSION "1.0.14"
14 | #define NGINX_VER "nginx/" NGINX_VERSION
15 |
16 | #define NGINX_VAR "NGINX"
17 | #define NGX_OLDPID_EXT ".oldbin"
18 |
19 |
20 | #endif /* _NGINX_H_INCLUDED_ */
21 |
--------------------------------------------------------------------------------
/auto/lib/sha1/makefile.bcc:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | CFLAGS = -q -O2 -tWM $(CPU_OPT) -DL_ENDIAN
7 |
8 | !if "$(SHA1_ASM)" == "YES"
9 |
10 | sha1.lib:
11 | cd $(SHA1)
12 | bcc32 -c $(CFLAGS) -DSHA1_ASM sha1dgst.c
13 | tlib sha1.lib +sha1dgst.obj +"asm\s-win32.obj"
14 |
15 | !else
16 |
17 | sha1.lib:
18 | cd $(SHA1)
19 | bcc32 -c $(CFLAGS) sha1dgst.c
20 | tlib sha1.lib +sha1dgst.obj
21 |
22 | !endif
23 |
--------------------------------------------------------------------------------
/auto/lib/openssl/makefile.bcc:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | all:
7 | cd $(OPENSSL)
8 |
9 | perl Configure BC-32 no-shared --prefix=openssl $(OPENSSL_OPT)
10 |
11 | ms\do_nasm
12 |
13 | $(MAKE) -f ms\bcb.mak
14 | $(MAKE) -f ms\bcb.mak install
15 |
16 | # Borland's make does not expand "[ch]" in
17 | # copy "inc32\openssl\*.[ch]" "openssl\include\openssl"
18 | copy inc32\openssl\*.h openssl\include\openssl
19 |
--------------------------------------------------------------------------------
/html/50x.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | The page is temporarily unavailable
4 |
7 |
8 |
9 |
10 |
11 |
12 | The page you are looking for is temporarily unavailable.
13 | Please try again later.
14 | |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/auto/headers:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | ngx_include="unistd.h"; . auto/include
7 | ngx_include="inttypes.h"; . auto/include
8 | ngx_include="limits.h"; . auto/include
9 | ngx_include="sys/filio.h"; . auto/include
10 | ngx_include="sys/param.h"; . auto/include
11 | ngx_include="sys/mount.h"; . auto/include
12 | ngx_include="sys/statvfs.h"; . auto/include
13 | ngx_include="crypt.h"; . auto/include
14 |
--------------------------------------------------------------------------------
/auto/lib/md5/makefile.msvc:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | CFLAGS = -nologo -O2 -Ob1 -Oi -Gs $(LIBC) $(CPU_OPT) -D L_ENDIAN
7 |
8 | !IF "$(MD5_ASM)" == "YES"
9 |
10 | md5.lib:
11 | cd $(MD5)
12 | cl -c $(CFLAGS) -D MD5_ASM md5_dgst.c
13 | link -lib -out:md5.lib md5_dgst.obj asm/m-win32.obj
14 |
15 | !ELSE
16 |
17 | md5.lib:
18 | cd $(MD5)
19 | cl -c $(CFLAGS) md5_dgst.c
20 | link -lib -out:md5.lib md5_dgst.obj
21 |
22 | !ENDIF
23 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_user.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_USER_H_INCLUDED_
9 | #define _NGX_USER_H_INCLUDED_
10 |
11 |
12 | #include
13 | #include
14 |
15 |
16 | typedef uid_t ngx_uid_t;
17 | typedef gid_t ngx_gid_t;
18 |
19 |
20 | ngx_int_t ngx_libc_crypt(ngx_pool_t *pool, u_char *key, u_char *salt,
21 | u_char **encrypted);
22 |
23 |
24 | #endif /* _NGX_USER_H_INCLUDED_ */
25 |
--------------------------------------------------------------------------------
/auto/lib/sha1/makefile.msvc:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | CFLAGS = -nologo -O2 -Ob1 -Oi -Gs $(LIBC) $(CPU_OPT) -D L_ENDIAN
7 |
8 | !IF "$(SHA1_ASM)" == "YES"
9 |
10 | sha1.lib:
11 | cd $(SHA1)
12 | cl -c $(CFLAGS) -D SHA1_ASM sha1dgst.c
13 | link -lib -out:sha1.lib sha1dgst.obj asm/s-win32.obj
14 |
15 | !ELSE
16 |
17 | sha1.lib:
18 | cd $(SHA1)
19 | cl -c $(CFLAGS) sha1dgst.c
20 | link -lib -out:sha1.lib sha1dgst.obj
21 |
22 | !ENDIF
23 |
--------------------------------------------------------------------------------
/contrib/README:
--------------------------------------------------------------------------------
1 |
2 | geo2nginx.pl by Andrei Nigmatulin
3 |
4 | The perl script to convert CSV geoip database ( free download
5 | at http://www.maxmind.com/app/geoip_country ) to format, suitable
6 | for use by the ngx_http_geo_module.
7 |
8 |
9 | unicode2nginx by Maxim Dounin
10 |
11 | The perl script to convert unicode mappings ( available
12 | at http://www.unicode.org/Public/MAPPINGS/ ) to the nginx
13 | configuration file format.
14 | Two generated full maps for windows-1251 and koi8-r.
15 |
16 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_darwin.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_DARWIN_H_INCLUDED_
9 | #define _NGX_DARWIN_H_INCLUDED_
10 |
11 |
12 | ngx_chain_t *ngx_darwin_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in,
13 | off_t limit);
14 |
15 | extern int ngx_darwin_kern_osreldate;
16 | extern int ngx_darwin_hw_ncpu;
17 | extern u_long ngx_darwin_net_inet_tcp_sendspace;
18 |
19 |
20 | #endif /* _NGX_DARWIN_H_INCLUDED_ */
21 |
--------------------------------------------------------------------------------
/src/core/ngx_parse.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_PARSE_H_INCLUDED_
9 | #define _NGX_PARSE_H_INCLUDED_
10 |
11 |
12 | #include
13 | #include
14 |
15 |
16 | #define NGX_PARSE_LARGE_TIME -2
17 |
18 |
19 | ssize_t ngx_parse_size(ngx_str_t *line);
20 | off_t ngx_parse_offset(ngx_str_t *line);
21 | ngx_int_t ngx_parse_time(ngx_str_t *line, ngx_uint_t is_sec);
22 |
23 |
24 | #endif /* _NGX_PARSE_H_INCLUDED_ */
25 |
--------------------------------------------------------------------------------
/auto/lib/pcre/makefile.msvc:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | CFLAGS = -O2 -Ob1 -Oi -Gs $(LIBC) $(CPU_OPT)
7 | PCREFLAGS = -DHAVE_CONFIG_H -DPCRE_STATIC -DPOSIX_MALLOC_THRESHOLD=10
8 |
9 |
10 | pcre.lib:
11 | cd $(PCRE)
12 |
13 | cl -nologo -c $(CFLAGS) -I . $(PCREFLAGS) pcre_*.c
14 |
15 | link -lib -out:pcre.lib -verbose:lib pcre_*.obj
16 |
17 | pcre.h:
18 | cd $(PCRE)
19 |
20 | copy /y pcre.h.generic pcre.h
21 | copy /y config.h.generic config.h
22 | copy /y pcre_chartables.c.dist pcre_chartables.c
23 |
--------------------------------------------------------------------------------
/auto/lib/pcre/makefile.owc:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | CFLAGS = -c -zq -bt=nt -ot -op -oi -oe -s -bm $(CPU_OPT)
7 | PCREFLAGS = -DHAVE_CONFIG_H -DPCRE_STATIC -DPOSIX_MALLOC_THRESHOLD=10
8 |
9 |
10 | pcre.lib:
11 | cd $(PCRE)
12 |
13 | wcl386 $(CFLAGS) -i=. $(PCREFLAGS) pcre_*.c
14 |
15 | dir /b *.obj > pcre.lst
16 |
17 | wlib -n pcre.lib @pcre.lst
18 |
19 | pcre.h:
20 | cd $(PCRE)
21 |
22 | copy /y pcre.h.generic pcre.h
23 | copy /y config.h.generic config.h
24 | copy /y pcre_chartables.c.dist pcre_chartables.c
25 |
--------------------------------------------------------------------------------
/conf/scgi_params:
--------------------------------------------------------------------------------
1 |
2 | scgi_param REQUEST_METHOD $request_method;
3 | scgi_param REQUEST_URI $request_uri;
4 | scgi_param QUERY_STRING $query_string;
5 | scgi_param CONTENT_TYPE $content_type;
6 |
7 | scgi_param DOCUMENT_URI $document_uri;
8 | scgi_param DOCUMENT_ROOT $document_root;
9 | scgi_param SCGI 1;
10 | scgi_param SERVER_PROTOCOL $server_protocol;
11 |
12 | scgi_param REMOTE_ADDR $remote_addr;
13 | scgi_param REMOTE_PORT $remote_port;
14 | scgi_param SERVER_PORT $server_port;
15 | scgi_param SERVER_NAME $server_name;
16 |
--------------------------------------------------------------------------------
/src/core/ngx_sha1.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_SHA1_H_INCLUDED_
9 | #define _NGX_SHA1_H_INCLUDED_
10 |
11 |
12 | #include
13 | #include
14 |
15 |
16 | #if (NGX_HAVE_OPENSSL_SHA1_H)
17 | #include
18 | #else
19 | #include
20 | #endif
21 |
22 |
23 | typedef SHA_CTX ngx_sha1_t;
24 |
25 |
26 | #define ngx_sha1_init SHA1_Init //初始化
27 | #define ngx_sha1_update SHA1_Update//输入数据
28 | #define ngx_sha1_final SHA1_Final //输出SHA1值
29 |
30 |
31 | #endif /* _NGX_SHA1_H_INCLUDED_ */
32 |
--------------------------------------------------------------------------------
/auto/lib/pcre/makefile.bcc:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | CFLAGS = -q -O2 -tWM -w-8004 $(CPU_OPT)
7 | PCREFLAGS = -DHAVE_CONFIG_H -DPCRE_STATIC -DPOSIX_MALLOC_THRESHOLD=10
8 |
9 |
10 | pcre.lib:
11 | cd $(PCRE)
12 |
13 | bcc32 -c $(CFLAGS) -I. $(PCREFLAGS) pcre_*.c
14 |
15 | > pcre.lst
16 | for %n in (*.obj) do @echo +%n & >> pcre.lst
17 | echo + >> pcre.lst
18 |
19 | tlib pcre.lib @pcre.lst
20 |
21 | pcre.h:
22 | cd $(PCRE)
23 |
24 | copy /y pcre.h.generic pcre.h
25 | copy /y config.h.generic config.h
26 | copy /y pcre_chartables.c.dist pcre_chartables.c
27 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_shmem.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_SHMEM_H_INCLUDED_
9 | #define _NGX_SHMEM_H_INCLUDED_
10 |
11 |
12 | #include
13 | #include
14 |
15 |
16 | typedef struct {
17 | u_char *addr;
18 | size_t size;
19 | ngx_str_t name;
20 | ngx_log_t *log;
21 | ngx_uint_t exists; /* unsigned exists:1; */
22 | } ngx_shm_t;
23 |
24 |
25 | ngx_int_t ngx_shm_alloc(ngx_shm_t *shm);
26 | void ngx_shm_free(ngx_shm_t *shm);
27 |
28 |
29 | #endif /* _NGX_SHMEM_H_INCLUDED_ */
30 |
--------------------------------------------------------------------------------
/conf/uwsgi_params:
--------------------------------------------------------------------------------
1 |
2 | uwsgi_param QUERY_STRING $query_string;
3 | uwsgi_param REQUEST_METHOD $request_method;
4 | uwsgi_param CONTENT_TYPE $content_type;
5 | uwsgi_param CONTENT_LENGTH $content_length;
6 |
7 | uwsgi_param REQUEST_URI $request_uri;
8 | uwsgi_param PATH_INFO $document_uri;
9 | uwsgi_param DOCUMENT_ROOT $document_root;
10 | uwsgi_param SERVER_PROTOCOL $server_protocol;
11 |
12 | uwsgi_param REMOTE_ADDR $remote_addr;
13 | uwsgi_param REMOTE_PORT $remote_port;
14 | uwsgi_param SERVER_PORT $server_port;
15 | uwsgi_param SERVER_NAME $server_name;
16 |
--------------------------------------------------------------------------------
/src/misc/ngx_cpp_test_module.cpp:
--------------------------------------------------------------------------------
1 |
2 | // stub module to test header files' C++ compatibilty
3 |
4 | extern "C" {
5 | #include
6 | #include
7 | #include
8 | #include
9 | #include
10 |
11 | #include
12 |
13 | #include
14 | #include
15 | #include
16 | #include
17 | }
18 |
19 | // nginx header files should go before other, because they define 64-bit off_t
20 | // #include
21 |
22 |
23 | void
24 | ngx_cpp_test_handler(void *data)
25 | {
26 | return;
27 | }
28 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_freebsd.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_FREEBSD_H_INCLUDED_
9 | #define _NGX_FREEBSD_H_INCLUDED_
10 |
11 |
12 | ngx_chain_t *ngx_freebsd_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in,
13 | off_t limit);
14 |
15 | extern int ngx_freebsd_kern_osreldate;
16 | extern int ngx_freebsd_hw_ncpu;
17 | extern u_long ngx_freebsd_net_inet_tcp_sendspace;
18 |
19 | extern ngx_uint_t ngx_freebsd_sendfile_nbytes_bug;
20 | extern ngx_uint_t ngx_freebsd_use_tcp_nopush;
21 | extern ngx_uint_t ngx_freebsd_debug_malloc;
22 |
23 |
24 | #endif /* _NGX_FREEBSD_H_INCLUDED_ */
25 |
--------------------------------------------------------------------------------
/auto/lib/test:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | echo $ngx_n "checking for $ngx_lib ...$ngx_c"
7 |
8 | cat << END >> $NGX_AUTOCONF_ERR
9 |
10 | ----------------------------------------
11 | checking for $ngx_lib
12 |
13 | END
14 |
15 | ngx_found=no
16 |
17 | cat << END > $NGX_AUTOTEST.c
18 |
19 | $ngx_lib_incs
20 |
21 | int main() {
22 | $ngx_lib_test;
23 | return 0;
24 | }
25 |
26 |
27 | eval "$CC $cc_test_flags $ngx_lib_cflags \
28 | -o $NGX_AUTOTEST $NGX_AUTOTEST.c $ngx_libs \
29 | >> $NGX_ERR 2>&1"
30 |
31 | if [ -x $NGX_AUTOTEST ]; then
32 | echo " found"
33 |
34 | ngx_found=yes
35 |
36 | else
37 | echo " not found"
38 | fi
39 |
40 | rm $NGX_AUTOTEST*
41 |
--------------------------------------------------------------------------------
/auto/os/win32:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | have=NGX_WIN32 . auto/have_headers
7 |
8 | CORE_INCS="$WIN32_INCS"
9 | CORE_DEPS="$WIN32_DEPS"
10 | CORE_SRCS="$WIN32_SRCS $IOCP_SRCS"
11 | OS_CONFIG="$WIN32_CONFIG"
12 | CORE_LIBS="$CORE_LIBS advapi32.lib ws2_32.lib"
13 | NGX_ICONS="$NGX_WIN32_ICONS"
14 | SELECT_SRCS=$WIN32_SELECT_SRCS
15 |
16 | EVENT_MODULES="$EVENT_MODULES $IOCP_MODULE"
17 | EVENT_FOUND=YES
18 |
19 | if [ $EVENT_SELECT = NO ]; then
20 | CORE_SRCS="$CORE_SRCS $SELECT_SRCS"
21 | EVENT_MODULES="$EVENT_MODULES $SELECT_MODULE"
22 | fi
23 |
24 | if [ $NGX_IPV6 = YES ]; then
25 | have=NGX_HAVE_INET6 . auto/have
26 | fi
27 |
28 | have=NGX_HAVE_AIO . auto/have
29 | have=NGX_HAVE_IOCP . auto/have
30 |
--------------------------------------------------------------------------------
/auto/lib/make:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | if [ $PCRE != NONE -a $PCRE != NO -a $PCRE != YES ]; then
7 | . auto/lib/pcre/make
8 | fi
9 |
10 | if [ $MD5 != NONE -a $MD5 != NO -a $MD5 != YES ]; then
11 | . auto/lib/md5/make
12 | fi
13 |
14 | if [ $SHA1 != NONE -a $SHA1 != NO -a $SHA1 != YES ]; then
15 | . auto/lib/sha1/make
16 | fi
17 |
18 | if [ $OPENSSL != NONE -a $OPENSSL != NO -a $OPENSSL != YES ]; then
19 | . auto/lib/openssl/make
20 | fi
21 |
22 | if [ $ZLIB != NONE -a $ZLIB != NO -a $ZLIB != YES ]; then
23 | . auto/lib/zlib/make
24 | fi
25 |
26 | if [ $NGX_LIBATOMIC != NO -a $NGX_LIBATOMIC != YES ]; then
27 | . auto/lib/libatomic/make
28 | fi
29 |
30 | if [ $USE_PERL = YES ]; then
31 | . auto/lib/perl/make
32 | fi
33 |
--------------------------------------------------------------------------------
/src/core/ngx_crc.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_CRC_H_INCLUDED_
9 | #define _NGX_CRC_H_INCLUDED_
10 |
11 |
12 | #include
13 | #include
14 |
15 |
16 | /* 32-bit crc16 */
17 |
18 | static ngx_inline uint32_t
19 | ngx_crc(u_char *data, size_t len)
20 | {
21 | uint32_t sum;
22 |
23 | for (sum = 0; len; len--) {
24 |
25 | /*
26 | * gcc 2.95.2 x86 and icc 7.1.006 compile
27 | * that operator into the single "rol" opcode,
28 | * msvc 6.0sp2 compiles it into four opcodes.
29 | */
30 | sum = sum >> 1 | sum << 31;
31 |
32 | sum += *data++;
33 | }
34 |
35 | return sum;
36 | }
37 |
38 |
39 | #endif /* _NGX_CRC_H_INCLUDED_ */
40 |
--------------------------------------------------------------------------------
/auto/types/uintptr_t:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | echo $ngx_n "checking for uintptr_t ...$ngx_c"
7 | echo >> $NGX_ERR
8 | echo "checking for uintptr_t" >> $NGX_ERR
9 |
10 | found=no
11 |
12 | cat << END > $NGX_AUTOTEST.c
13 |
14 | #include
15 | $NGX_INTTYPES_H
16 |
17 | int main() {
18 | uintptr_t i = 0;
19 | return 0;
20 | }
21 |
22 | END
23 |
24 | eval "$CC -o $NGX_AUTOTEST $NGX_AUTOTEST.c >> $NGX_ERR 2>&1"
25 |
26 | if [ -x $NGX_AUTOTEST ]; then
27 | echo " uintptr_t found"
28 | found=yes
29 | else
30 | echo $ngx_n " uintptr_t not found" $ngx_c
31 | fi
32 |
33 | rm $NGX_AUTOTEST*
34 |
35 |
36 | if [ $found = no ]; then
37 | found="uint`expr 8 \* $ngx_ptr_size`_t"
38 | echo ", $found used"
39 |
40 | echo "typedef $found uintptr_t;" >> $NGX_AUTO_CONFIG_H
41 | echo "typedef $found intptr_t;" | sed -e 's/u//g' >> $NGX_AUTO_CONFIG_H
42 | fi
43 |
--------------------------------------------------------------------------------
/src/core/ngx_murmurhash.c:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Austin Appleby
4 | */
5 |
6 |
7 | #include
8 | #include
9 |
10 | //直接使用该函数就可以得到该算法的摘要
11 | uint32_t
12 | ngx_murmur_hash2(u_char *data, size_t len)
13 | {
14 | uint32_t h, k;
15 |
16 | h = 0 ^ len;
17 |
18 | while (len >= 4) {
19 | k = data[0];
20 | k |= data[1] << 8;
21 | k |= data[2] << 16;
22 | k |= data[3] << 24;
23 |
24 | k *= 0x5bd1e995;
25 | k ^= k >> 24;
26 | k *= 0x5bd1e995;
27 |
28 | h *= 0x5bd1e995;
29 | h ^= k;
30 |
31 | data += 4;
32 | len -= 4;
33 | }
34 |
35 | switch (len) {
36 | case 3:
37 | h ^= data[2] << 16;
38 | case 2:
39 | h ^= data[1] << 8;
40 | case 1:
41 | h ^= data[0];
42 | h *= 0x5bd1e995;
43 | }
44 |
45 | h ^= h >> 13;
46 | h *= 0x5bd1e995;
47 | h ^= h >> 15;
48 |
49 | return h;
50 | }
51 |
--------------------------------------------------------------------------------
/auto/init:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | NGX_MAKEFILE=$NGX_OBJS/Makefile
7 | NGX_MODULES_C=$NGX_OBJS/ngx_modules.c
8 |
9 | NGX_AUTO_HEADERS_H=$NGX_OBJS/ngx_auto_headers.h
10 | NGX_AUTO_CONFIG_H=$NGX_OBJS/ngx_auto_config.h
11 |
12 | NGX_AUTOTEST=$NGX_OBJS/autotest
13 | NGX_AUTOCONF_ERR=$NGX_OBJS/autoconf.err
14 |
15 | # STUBs
16 | NGX_ERR=$NGX_OBJS/autoconf.err
17 | MAKEFILE=$NGX_OBJS/Makefile
18 |
19 |
20 | NGX_PCH=
21 | NGX_USE_PCH=
22 |
23 |
24 | # check the echo's "-n" option and "\c" capability
25 |
26 | if echo "test\c" | grep c >/dev/null; then
27 |
28 | if echo -n test | grep n >/dev/null; then
29 | ngx_n=
30 | ngx_c=
31 |
32 | else
33 | ngx_n=-n
34 | ngx_c=
35 | fi
36 |
37 | else
38 | ngx_n=
39 | ngx_c='\c'
40 | fi
41 |
42 |
43 | # create Makefile
44 |
45 | cat << END > Makefile
46 |
47 | default: build
48 |
49 | clean:
50 | rm -rf Makefile $NGX_OBJS
51 | END
52 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_sunpro_sparc64.il:
--------------------------------------------------------------------------------
1 | /
2 | / Copyright (C) Igor Sysoev
3 | / Copyright (C) Nginx, Inc.
4 | /
5 |
6 |
7 | / "casa [%o2] 0x80, %o1, %o0" and
8 | / "casxa [%o2] 0x80, %o1, %o0" do the following:
9 | /
10 | / if ([%o2] == %o1) {
11 | / swap(%o0, [%o2]);
12 | / } else {
13 | / %o0 = [%o2];
14 | / }
15 |
16 |
17 | / ngx_atomic_uint_t ngx_casa(ngx_atomic_uint_t set, ngx_atomic_uint_t old,
18 | / ngx_atomic_t *lock);
19 | /
20 | / the arguments are passed in the %o0, %o1, %o2
21 | / the result is returned in the %o0
22 |
23 | .inline ngx_casa,0
24 | casa [%o2] 0x80, %o1, %o0
25 | .end
26 |
27 |
28 | / ngx_atomic_uint_t ngx_casxa(ngx_atomic_uint_t set, ngx_atomic_uint_t old,
29 | / ngx_atomic_t *lock);
30 | /
31 | / the arguments are passed in the %o0, %o1, %o2
32 | / the result is returned in the %o0
33 |
34 | .inline ngx_casxa,0
35 | casxa [%o2] 0x80, %o1, %o0
36 | .end
37 |
--------------------------------------------------------------------------------
/src/mail/ngx_mail_pop3_module.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_MAIL_POP3_MODULE_H_INCLUDED_
9 | #define _NGX_MAIL_POP3_MODULE_H_INCLUDED_
10 |
11 |
12 | #include
13 | #include
14 | #include
15 |
16 |
17 | typedef struct {
18 | ngx_str_t capability;
19 | ngx_str_t starttls_capability;
20 | ngx_str_t starttls_only_capability;
21 | ngx_str_t auth_capability;
22 |
23 | ngx_uint_t auth_methods;
24 |
25 | ngx_array_t capabilities;
26 | } ngx_mail_pop3_srv_conf_t;
27 |
28 |
29 | void ngx_mail_pop3_init_session(ngx_mail_session_t *s, ngx_connection_t *c);
30 | void ngx_mail_pop3_init_protocol(ngx_event_t *rev);
31 | void ngx_mail_pop3_auth_state(ngx_event_t *rev);
32 | ngx_int_t ngx_mail_pop3_parse_command(ngx_mail_session_t *s);
33 |
34 |
35 | extern ngx_module_t ngx_mail_pop3_module;
36 |
37 |
38 | #endif /* _NGX_MAIL_POP3_MODULE_H_INCLUDED_ */
39 |
--------------------------------------------------------------------------------
/conf/fastcgi_params:
--------------------------------------------------------------------------------
1 |
2 | fastcgi_param QUERY_STRING $query_string;
3 | fastcgi_param REQUEST_METHOD $request_method;
4 | fastcgi_param CONTENT_TYPE $content_type;
5 | fastcgi_param CONTENT_LENGTH $content_length;
6 |
7 | fastcgi_param SCRIPT_NAME $fastcgi_script_name;
8 | fastcgi_param REQUEST_URI $request_uri;
9 | fastcgi_param DOCUMENT_URI $document_uri;
10 | fastcgi_param DOCUMENT_ROOT $document_root;
11 | fastcgi_param SERVER_PROTOCOL $server_protocol;
12 |
13 | fastcgi_param GATEWAY_INTERFACE CGI/1.1;
14 | fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
15 |
16 | fastcgi_param REMOTE_ADDR $remote_addr;
17 | fastcgi_param REMOTE_PORT $remote_port;
18 | fastcgi_param SERVER_ADDR $server_addr;
19 | fastcgi_param SERVER_PORT $server_port;
20 | fastcgi_param SERVER_NAME $server_name;
21 |
22 | # PHP only, required if PHP was built with --enable-force-cgi-redirect
23 | fastcgi_param REDIRECT_STATUS 200;
24 |
--------------------------------------------------------------------------------
/src/mail/ngx_mail_imap_module.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_MAIL_IMAP_MODULE_H_INCLUDED_
9 | #define _NGX_MAIL_IMAP_MODULE_H_INCLUDED_
10 |
11 |
12 | #include
13 | #include
14 | #include
15 |
16 |
17 | typedef struct {
18 | size_t client_buffer_size;
19 |
20 | ngx_str_t capability;
21 | ngx_str_t starttls_capability;
22 | ngx_str_t starttls_only_capability;
23 |
24 | ngx_uint_t auth_methods;
25 |
26 | ngx_array_t capabilities;
27 | } ngx_mail_imap_srv_conf_t;
28 |
29 |
30 | void ngx_mail_imap_init_session(ngx_mail_session_t *s, ngx_connection_t *c);
31 | void ngx_mail_imap_init_protocol(ngx_event_t *rev);
32 | void ngx_mail_imap_auth_state(ngx_event_t *rev);
33 | ngx_int_t ngx_mail_imap_parse_command(ngx_mail_session_t *s);
34 |
35 |
36 | extern ngx_module_t ngx_mail_imap_module;
37 |
38 |
39 | #endif /* _NGX_MAIL_IMAP_MODULE_H_INCLUDED_ */
40 |
--------------------------------------------------------------------------------
/auto/endianess:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | echo $ngx_n "checking for system endianess ...$ngx_c"
7 | echo >> $NGX_ERR
8 | echo "checking for system endianess" >> $NGX_ERR
9 |
10 |
11 | cat << END > $NGX_AUTOTEST.c
12 |
13 | int main() {
14 | int i = 0x11223344;
15 | char *p;
16 |
17 | p = (char *) &i;
18 | if (*p == 0x44) return 0;
19 | return 1;
20 | }
21 |
22 | END
23 |
24 | ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS \
25 | -o $NGX_AUTOTEST $NGX_AUTOTEST.c $NGX_LD_OPT $ngx_feature_libs"
26 |
27 | eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"
28 |
29 | if [ -x $NGX_AUTOTEST ]; then
30 | if $NGX_AUTOTEST >/dev/null 2>&1; then
31 | echo " little endianess"
32 | have=NGX_HAVE_LITTLE_ENDIAN . auto/have
33 | else
34 | echo " big endianess"
35 | fi
36 |
37 | rm $NGX_AUTOTEST*
38 |
39 | else
40 | rm $NGX_AUTOTEST*
41 |
42 | echo
43 | echo "$0: error: can not detect system endianess"
44 | exit 1
45 | fi
46 |
--------------------------------------------------------------------------------
/auto/lib/google-perftools/conf:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | ngx_feature="Google perftools"
7 | ngx_feature_name=
8 | ngx_feature_run=no
9 | ngx_feature_incs=
10 | ngx_feature_path=
11 | ngx_feature_libs="-lprofiler"
12 | ngx_feature_test="ProfilerStop()"
13 | . auto/feature
14 |
15 |
16 | if [ $ngx_found = no ]; then
17 |
18 | # FreeBSD port
19 |
20 | ngx_feature="Google perftools in /usr/local/"
21 |
22 | if [ $NGX_RPATH = YES ]; then
23 | ngx_feature_libs="-R/usr/local/lib -L/usr/local/lib -lprofiler"
24 | else
25 | ngx_feature_libs="-L/usr/local/lib -lprofiler"
26 | fi
27 |
28 | . auto/feature
29 | fi
30 |
31 |
32 | if [ $ngx_found = yes ]; then
33 | CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
34 |
35 | else
36 |
37 | cat << END
38 |
39 | $0: error: the Google perftool module requires the Google perftools
40 | library. You can either do not enable the module or install the library.
41 |
42 | END
43 |
44 | exit 1
45 | fi
46 |
--------------------------------------------------------------------------------
/conf/fastcgi.conf:
--------------------------------------------------------------------------------
1 |
2 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
3 | fastcgi_param QUERY_STRING $query_string;
4 | fastcgi_param REQUEST_METHOD $request_method;
5 | fastcgi_param CONTENT_TYPE $content_type;
6 | fastcgi_param CONTENT_LENGTH $content_length;
7 |
8 | fastcgi_param SCRIPT_NAME $fastcgi_script_name;
9 | fastcgi_param REQUEST_URI $request_uri;
10 | fastcgi_param DOCUMENT_URI $document_uri;
11 | fastcgi_param DOCUMENT_ROOT $document_root;
12 | fastcgi_param SERVER_PROTOCOL $server_protocol;
13 |
14 | fastcgi_param GATEWAY_INTERFACE CGI/1.1;
15 | fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
16 |
17 | fastcgi_param REMOTE_ADDR $remote_addr;
18 | fastcgi_param REMOTE_PORT $remote_port;
19 | fastcgi_param SERVER_ADDR $server_addr;
20 | fastcgi_param SERVER_PORT $server_port;
21 | fastcgi_param SERVER_NAME $server_name;
22 |
23 | # PHP only, required if PHP was built with --enable-force-cgi-redirect
24 | fastcgi_param REDIRECT_STATUS 200;
25 |
--------------------------------------------------------------------------------
/src/mail/ngx_mail_smtp_module.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_MAIL_SMTP_MODULE_H_INCLUDED_
9 | #define _NGX_MAIL_SMTP_MODULE_H_INCLUDED_
10 |
11 |
12 | #include
13 | #include
14 | #include
15 | #include
16 |
17 |
18 | typedef struct {
19 | ngx_msec_t greeting_delay;
20 |
21 | size_t client_buffer_size;
22 |
23 | ngx_str_t capability;
24 | ngx_str_t starttls_capability;
25 | ngx_str_t starttls_only_capability;
26 |
27 | ngx_str_t server_name;
28 | ngx_str_t greeting;
29 |
30 | ngx_uint_t auth_methods;
31 |
32 | ngx_array_t capabilities;
33 | } ngx_mail_smtp_srv_conf_t;
34 |
35 |
36 | void ngx_mail_smtp_init_session(ngx_mail_session_t *s, ngx_connection_t *c);
37 | void ngx_mail_smtp_init_protocol(ngx_event_t *rev);
38 | void ngx_mail_smtp_auth_state(ngx_event_t *rev);
39 | ngx_int_t ngx_mail_smtp_parse_command(ngx_mail_session_t *s);
40 |
41 |
42 | extern ngx_module_t ngx_mail_smtp_module;
43 |
44 |
45 | #endif /* _NGX_MAIL_SMTP_MODULE_H_INCLUDED_ */
46 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_channel.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_CHANNEL_H_INCLUDED_
9 | #define _NGX_CHANNEL_H_INCLUDED_
10 |
11 |
12 | #include
13 | #include
14 | #include
15 | //nginx对进程间消息的封装结构体
16 | //master和worker之间传递的指令。master和worker是单向的,只能master向worker传递指令
17 | typedef struct {
18 | ngx_uint_t command; //worker要操作的指令,如NGX_CMD_OPEN_CHANNEL,NGX_CMD_CLOSE_CHANNEL,NGX_CMD_QUIT,NGX_CMD_TERMINATE,NGX_CMD_REOPEN
19 | ngx_pid_t pid; //worker进程id
20 | ngx_int_t slot; //worker进程在ngx_process中的索引
21 | ngx_fd_t fd; //有可能用到的文件描述符?
22 | } ngx_channel_t;
23 |
24 |
25 | ngx_int_t ngx_write_channel(ngx_socket_t s, ngx_channel_t *ch, size_t size,
26 | ngx_log_t *log);
27 | ngx_int_t ngx_read_channel(ngx_socket_t s, ngx_channel_t *ch, size_t size,
28 | ngx_log_t *log);
29 | ngx_int_t ngx_add_channel_event(ngx_cycle_t *cycle, ngx_fd_t fd,
30 | ngx_int_t event, ngx_event_handler_pt handler);
31 | void ngx_close_channel(ngx_fd_t *fd, ngx_log_t *log);
32 |
33 |
34 | #endif /* _NGX_CHANNEL_H_INCLUDED_ */
35 |
--------------------------------------------------------------------------------
/src/mail/ngx_mail_ssl_module.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_MAIL_SSL_H_INCLUDED_
9 | #define _NGX_MAIL_SSL_H_INCLUDED_
10 |
11 |
12 | #include
13 | #include
14 | #include
15 |
16 |
17 | #define NGX_MAIL_STARTTLS_OFF 0
18 | #define NGX_MAIL_STARTTLS_ON 1
19 | #define NGX_MAIL_STARTTLS_ONLY 2
20 |
21 |
22 | typedef struct {
23 | ngx_flag_t enable;
24 | ngx_flag_t prefer_server_ciphers;
25 |
26 | ngx_ssl_t ssl;
27 |
28 | ngx_uint_t starttls;
29 | ngx_uint_t protocols;
30 |
31 | ssize_t builtin_session_cache;
32 |
33 | time_t session_timeout;
34 |
35 | ngx_str_t certificate;
36 | ngx_str_t certificate_key;
37 | ngx_str_t dhparam;
38 | ngx_str_t ecdh_curve;
39 |
40 | ngx_str_t ciphers;
41 |
42 | ngx_shm_zone_t *shm_zone;
43 |
44 | u_char *file;
45 | ngx_uint_t line;
46 | } ngx_mail_ssl_conf_t;
47 |
48 |
49 | extern ngx_module_t ngx_mail_ssl_module;
50 |
51 |
52 | #endif /* _NGX_MAIL_SSL_H_INCLUDED_ */
53 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_setproctitle.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_SETPROCTITLE_H_INCLUDED_
9 | #define _NGX_SETPROCTITLE_H_INCLUDED_
10 |
11 |
12 | #if (NGX_HAVE_SETPROCTITLE)
13 |
14 | /* FreeBSD, NetBSD, OpenBSD */
15 |
16 | #define ngx_init_setproctitle(log)
17 | #define ngx_setproctitle(title) setproctitle("%s", title)
18 |
19 |
20 | #else /* !NGX_HAVE_SETPROCTITLE */
21 |
22 | #if !defined NGX_SETPROCTITLE_USES_ENV
23 |
24 | #if (NGX_SOLARIS)
25 |
26 | #define NGX_SETPROCTITLE_USES_ENV 1
27 | #define NGX_SETPROCTITLE_PAD ' '
28 |
29 | ngx_int_t ngx_init_setproctitle(ngx_log_t *log);
30 | void ngx_setproctitle(char *title);
31 |
32 | #elif (NGX_LINUX) || (NGX_DARWIN)
33 |
34 | #define NGX_SETPROCTITLE_USES_ENV 1
35 | #define NGX_SETPROCTITLE_PAD '\0'
36 |
37 | ngx_int_t ngx_init_setproctitle(ngx_log_t *log);
38 | void ngx_setproctitle(char *title);
39 |
40 | #else
41 |
42 | #define ngx_init_setproctitle(log)
43 | #define ngx_setproctitle(title)
44 |
45 | #endif /* OSes */
46 |
47 | #endif /* NGX_SETPROCTITLE_USES_ENV */
48 |
49 | #endif /* NGX_HAVE_SETPROCTITLE */
50 |
51 |
52 | #endif /* _NGX_SETPROCTITLE_H_INCLUDED_ */
53 |
--------------------------------------------------------------------------------
/src/core/ngx_md5.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_MD5_H_INCLUDED_
9 | #define _NGX_MD5_H_INCLUDED_
10 |
11 |
12 | #include
13 | #include
14 |
15 |
16 | #if (NGX_HAVE_MD5)
17 |
18 | #if (NGX_HAVE_OPENSSL_MD5_H)
19 | #include
20 | #else
21 | #include
22 | #endif
23 |
24 |
25 | typedef MD5_CTX ngx_md5_t;
26 |
27 |
28 | #if (NGX_OPENSSL_MD5)
29 |
30 | #define ngx_md5_init MD5_Init
31 | #define ngx_md5_update MD5_Update
32 | #define ngx_md5_final MD5_Final
33 |
34 | #else
35 |
36 | #define ngx_md5_init MD5Init
37 | #define ngx_md5_update MD5Update
38 | #define ngx_md5_final MD5Final
39 |
40 | #endif
41 |
42 |
43 | #else /* !NGX_HAVE_MD5 */
44 |
45 |
46 | typedef struct {
47 | uint64_t bytes;
48 | uint32_t a, b, c, d;
49 | u_char buffer[64];
50 | } ngx_md5_t;
51 |
52 |
53 | void ngx_md5_init(ngx_md5_t *ctx); //初始化ngx_md5_t变量
54 | void ngx_md5_update(ngx_md5_t *ctx, const void *data, size_t size); //输入数据"data",和长度"size"
55 | void ngx_md5_final(u_char result[16], ngx_md5_t *ctx); //输出MD5值
56 |
57 |
58 | #endif
59 |
60 | #endif /* _NGX_MD5_H_INCLUDED_ */
61 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_alloc.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_ALLOC_H_INCLUDED_
9 | #define _NGX_ALLOC_H_INCLUDED_
10 |
11 |
12 | #include
13 | #include
14 |
15 | //使用malloc分配内存空间
16 | void *ngx_alloc(size_t size, ngx_log_t *log);
17 |
18 | //使用malloc分配内存空间,并且将空间内容初始化为0
19 | void *ngx_calloc(size_t size, ngx_log_t *log);
20 |
21 | #define ngx_free free
22 |
23 |
24 | /*
25 | * Linux has memalign() or posix_memalign()
26 | * Solaris has memalign()
27 | * FreeBSD 7.0 has posix_memalign(), besides, early version's malloc()
28 | * aligns allocations bigger than page size at the page boundary
29 | */
30 | // 对齐,定义了宏
31 | #if (NGX_HAVE_POSIX_MEMALIGN || NGX_HAVE_MEMALIGN)
32 |
33 | void *ngx_memalign(size_t alignment, size_t size, ngx_log_t *log);
34 |
35 | #else
36 | // 非对齐,未定义NGX_HAVE_POSIX_MEMALIGN,NGX_HAVE_MEMALIGN宏
37 | #define ngx_memalign(alignment, size, log) ngx_alloc(size, log)
38 |
39 | #endif
40 |
41 |
42 | extern ngx_uint_t ngx_pagesize;
43 | extern ngx_uint_t ngx_pagesize_shift;
44 | extern ngx_uint_t ngx_cacheline_size;
45 |
46 |
47 | #endif /* _NGX_ALLOC_H_INCLUDED_ */
48 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_sunpro_amd64.il:
--------------------------------------------------------------------------------
1 | /
2 | / Copyright (C) Igor Sysoev
3 | / Copyright (C) Nginx, Inc.
4 | /
5 |
6 | / ngx_atomic_uint_t ngx_atomic_cmp_set(ngx_atomic_t *lock,
7 | / ngx_atomic_uint_t old, ngx_atomic_uint_t set);
8 | /
9 | / the arguments are passed in %rdi, %rsi, %rdx
10 | / the result is returned in the %rax
11 |
12 | .inline ngx_atomic_cmp_set,0
13 | movq %rsi, %rax
14 | lock
15 | cmpxchgq %rdx, (%rdi)
16 | setz %al
17 | movzbq %al, %rax
18 | .end
19 |
20 |
21 | / ngx_atomic_int_t ngx_atomic_fetch_add(ngx_atomic_t *value,
22 | / ngx_atomic_int_t add);
23 | /
24 | / the arguments are passed in %rdi, %rsi
25 | / the result is returned in the %rax
26 |
27 | .inline ngx_atomic_fetch_add,0
28 | movq %rsi, %rax
29 | lock
30 | xaddq %rax, (%rdi)
31 | .end
32 |
33 |
34 | / ngx_cpu_pause()
35 | /
36 | / the "rep; nop" is used instead of "pause" to avoid the "[ PAUSE ]" hardware
37 | / capability added by linker because Solaris/amd64 does not know about it:
38 | /
39 | / ld.so.1: nginx: fatal: hardware capability unsupported: 0x2000 [ PAUSE ]
40 |
41 | .inline ngx_cpu_pause,0
42 | rep; nop
43 | .end
44 |
--------------------------------------------------------------------------------
/src/core/ngx_shmtx.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_SHMTX_H_INCLUDED_
9 | #define _NGX_SHMTX_H_INCLUDED_
10 |
11 |
12 | #include
13 | #include
14 |
15 | /*互斥锁结构
16 | ngx_shmtx_t结构涉及两个宏:NGX_HAVE_ATOMIC_OPS、NGX_HVE_POIX_SEM,这两个宏对应着互斥锁的3种不同实现。
17 | 第1种实现:当不支持原子操作时,会使用文件锁来实现ngx_hmtx_t互斥锁,这时它仅有fd和name成员。这两个成员使用上面介绍的文件锁来提供阻塞、非阻塞的互斥锁。
18 | 第2种实现,支持原子操作却又不支持信号量。
19 | 第3种实现,在支持原子操作的同时,操作系统也支持信号量。
20 | */
21 | typedef struct {
22 | #if (NGX_HAVE_ATOMIC_OPS)
23 | //原子变量锁
24 | ngx_atomic_t *lock;
25 | #if (NGX_HAVE_POSIX_SEM)
26 | //semaphore为1 时表示获取锁将可能使用到的信号量
27 | ngx_uint_t semaphore;
28 | sem_t sem;
29 | #endif
30 | #else
31 | //使用文件锁时fd表示使用的文件句柄
32 | ngx_fd_t fd;
33 | u_char *name; // 文件名
34 | #endif
35 | //自旋次数,表示在自旋状态下等待其他处理器结果中释放的时间。由文件锁实现,spin没有任何意义
36 | ngx_uint_t spin;
37 | } ngx_shmtx_t;
38 |
39 |
40 | ngx_int_t ngx_shmtx_create(ngx_shmtx_t *mtx, void *addr, u_char *name);
41 | void ngx_shmtx_destory(ngx_shmtx_t *mtx);
42 | ngx_uint_t ngx_shmtx_trylock(ngx_shmtx_t *mtx);
43 | void ngx_shmtx_lock(ngx_shmtx_t *mtx);
44 | void ngx_shmtx_unlock(ngx_shmtx_t *mtx);
45 |
46 |
47 | #endif /* _NGX_SHMTX_H_INCLUDED_ */
48 |
--------------------------------------------------------------------------------
/auto/lib/libatomic/conf:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | if [ $NGX_LIBATOMIC != YES ]; then
7 |
8 | have=NGX_HAVE_LIBATOMIC . auto/have
9 | CORE_INCS="$CORE_INCS $NGX_LIBATOMIC/src"
10 | LINK_DEPS="$LINK_DEPS $NGX_LIBATOMIC/src/libatomic_ops.a"
11 | CORE_LIBS="$CORE_LIBS $NGX_LIBATOMIC/src/libatomic_ops.a"
12 |
13 | else
14 |
15 | ngx_feature="atomic_ops library"
16 | ngx_feature_name=NGX_HAVE_LIBATOMIC
17 | ngx_feature_run=yes
18 | ngx_feature_incs="#define AO_REQUIRE_CAS
19 | #include "
20 | ngx_feature_path=
21 | ngx_feature_libs="-latomic_ops"
22 | ngx_feature_test="long n = 0;
23 | if (!AO_compare_and_swap(&n, 0, 1))
24 | return 1;
25 | if (AO_fetch_and_add(&n, 1) != 1)
26 | return 1;
27 | if (n != 2)
28 | return 1;
29 | AO_nop();"
30 | . auto/feature
31 |
32 | if [ $ngx_found = yes ]; then
33 | CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
34 | else
35 |
36 | cat << END
37 |
38 | $0: error: libatomic_ops library was not found.
39 |
40 | END
41 | exit 1
42 | fi
43 | fi
44 |
--------------------------------------------------------------------------------
/auto/lib/perl/make:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | cat << END >> $NGX_MAKEFILE
7 |
8 | $NGX_OBJS/src/http/modules/perl/blib/arch/auto/nginx/nginx.so: \
9 | src/http/modules/perl/nginx.pm \
10 | src/http/modules/perl/nginx.xs \
11 | src/http/modules/perl/ngx_http_perl_module.h \
12 | $NGX_OBJS/src/http/modules/perl/Makefile
13 | cp -p src/http/modules/perl/nginx.* $NGX_OBJS/src/http/modules/perl/
14 |
15 | cd $NGX_OBJS/src/http/modules/perl && make
16 |
17 | rm -rf $NGX_OBJS/install_perl
18 |
19 |
20 | $NGX_OBJS/src/http/modules/perl/Makefile: \
21 | src/http/modules/perl/Makefile.PL \
22 | src/http/modules/perl/nginx.pm
23 | cp -p src/http/modules/perl/nginx.* $NGX_OBJS/src/http/modules/perl/
24 | cp -p src/http/modules/perl/typemap $NGX_OBJS/src/http/modules/perl/
25 | cp -p src/http/modules/perl/Makefile.PL $NGX_OBJS/src/http/modules/perl/
26 |
27 | cd $NGX_OBJS/src/http/modules/perl \
28 | && NGX_PM_CFLAGS="\$(NGX_PM_CFLAGS) -g $NGX_CC_OPT" \
29 | NGX_PCRE=$PCRE \
30 | NGX_OBJS=$NGX_OBJS \
31 | NGX_OPENSSL=$OPENSSL \
32 | $NGX_PERL Makefile.PL \
33 | LIB=$NGX_PERL_MODULES \
34 | INSTALLSITEMAN3DIR=$NGX_PERL_MODULES_MAN
35 |
36 | END
37 |
--------------------------------------------------------------------------------
/src/core/ngx_slab.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_SLAB_H_INCLUDED_
9 | #define _NGX_SLAB_H_INCLUDED_
10 |
11 |
12 | #include
13 | #include
14 |
15 |
16 | typedef struct ngx_slab_page_s ngx_slab_page_t;
17 |
18 | struct ngx_slab_page_s {
19 | uintptr_t slab;
20 | ngx_slab_page_t *next;
21 | uintptr_t prev;
22 | };
23 |
24 |
25 | typedef struct {
26 | ngx_atomic_t lock;
27 |
28 | size_t min_size;
29 | size_t min_shift;
30 |
31 | ngx_slab_page_t *pages;
32 | ngx_slab_page_t free;
33 |
34 | u_char *start;
35 | u_char *end;
36 |
37 | ngx_shmtx_t mutex;
38 |
39 | u_char *log_ctx;
40 | u_char zero;
41 |
42 | void *data;
43 | void *addr;
44 | } ngx_slab_pool_t;
45 |
46 |
47 | void ngx_slab_init(ngx_slab_pool_t *pool);
48 | void *ngx_slab_alloc(ngx_slab_pool_t *pool, size_t size);
49 | void *ngx_slab_alloc_locked(ngx_slab_pool_t *pool, size_t size);
50 | void ngx_slab_free(ngx_slab_pool_t *pool, void *p);
51 | void ngx_slab_free_locked(ngx_slab_pool_t *pool, void *p);
52 |
53 |
54 | #endif /* _NGX_SLAB_H_INCLUDED_ */
55 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_sunpro_x86.il:
--------------------------------------------------------------------------------
1 | /
2 | / Copyright (C) Igor Sysoev
3 | / Copyright (C) Nginx, Inc.
4 | /
5 |
6 | / ngx_atomic_uint_t ngx_atomic_cmp_set(ngx_atomic_t *lock,
7 | / ngx_atomic_uint_t old, ngx_atomic_uint_t set);
8 | /
9 | / the arguments are passed on stack (%esp), 4(%esp), 8(%esp)
10 |
11 | .inline ngx_atomic_cmp_set,0
12 | movl (%esp), %ecx
13 | movl 4(%esp), %eax
14 | movl 8(%esp), %edx
15 | lock
16 | cmpxchgl %edx, (%ecx)
17 | setz %al
18 | movzbl %al, %eax
19 | .end
20 |
21 |
22 | / ngx_atomic_int_t ngx_atomic_fetch_add(ngx_atomic_t *value,
23 | / ngx_atomic_int_t add);
24 | /
25 | / the arguments are passed on stack (%esp), 4(%esp)
26 |
27 | .inline ngx_atomic_fetch_add,0
28 | movl (%esp), %ecx
29 | movl 4(%esp), %eax
30 | lock
31 | xaddl %eax, (%ecx)
32 | .end
33 |
34 |
35 | / ngx_cpu_pause()
36 | /
37 | / the "rep; nop" is used instead of "pause" to avoid the "[ PAUSE ]" hardware
38 | / capability added by linker because Solaris/i386 does not know about it:
39 | /
40 | / ld.so.1: nginx: fatal: hardware capability unsupported: 0x2000 [ PAUSE ]
41 |
42 | .inline ngx_cpu_pause,0
43 | rep; nop
44 | .end
45 |
--------------------------------------------------------------------------------
/contrib/unicode2nginx/unicode-to-nginx.pl:
--------------------------------------------------------------------------------
1 | #!/usr/bin/perl -w
2 |
3 | # Convert unicode mappings to nginx configuration file format.
4 |
5 | # You may find useful mappings in various places, including
6 | # unicode.org official site:
7 | #
8 | # http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1251.TXT
9 | # http://www.unicode.org/Public/MAPPINGS/VENDORS/MISC/KOI8-R.TXT
10 |
11 | # Needs perl 5.6 or later.
12 |
13 | # Written by Maxim Dounin, mdounin@rambler-co.ru
14 |
15 | ###############################################################################
16 |
17 | require 5.006;
18 |
19 | while (<>) {
20 | # Skip comments and empty lines
21 |
22 | next if /^#/;
23 | next if /^\s*$/;
24 | chomp;
25 |
26 | # Convert mappings
27 |
28 | if (/^\s*0x(..)\s*0x(....)\s*(#.*)/) {
29 | # Mapping "#"
30 | my $cs_code = $1;
31 | my $un_code = $2;
32 | my $un_name = $3;
33 |
34 | # Produce UTF-8 sequence from character code;
35 |
36 | my $un_utf8 = join('', map { sprintf("%02X", $_) } unpack("C*", pack("U", hex($un_code))));
37 |
38 | print " $cs_code $un_utf8 ; $un_name\n";
39 |
40 | } else {
41 | warn "Unrecognized line: '$_'";
42 | }
43 | }
44 |
45 | ###############################################################################
46 |
--------------------------------------------------------------------------------
/auto/include:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | echo $ngx_n "checking for $ngx_include ...$ngx_c"
7 |
8 | cat << END >> $NGX_AUTOCONF_ERR
9 |
10 | ----------------------------------------
11 | checking for $ngx_include
12 |
13 | END
14 |
15 |
16 | ngx_found=no
17 |
18 | cat << END > $NGX_AUTOTEST.c
19 |
20 | $NGX_INCLUDE_SYS_PARAM_H
21 | #include <$ngx_include>
22 |
23 | int main() {
24 | return 0;
25 | }
26 |
27 | END
28 |
29 |
30 | ngx_test="$CC -o $NGX_AUTOTEST $NGX_AUTOTEST.c"
31 |
32 | eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"
33 |
34 | if [ -x $NGX_AUTOTEST ]; then
35 |
36 | ngx_found=yes
37 |
38 | echo " found"
39 |
40 | ngx_name=`echo $ngx_include \
41 | | tr abcdefghijklmnopqrstuvwxyz/. ABCDEFGHIJKLMNOPQRSTUVWXYZ__`
42 |
43 |
44 | have=NGX_HAVE_$ngx_name . auto/have_headers
45 |
46 | eval "NGX_INCLUDE_$ngx_name='#include <$ngx_include>'"
47 |
48 | #STUB
49 | eval "NGX_$ngx_name='#include <$ngx_include>'"
50 |
51 | else
52 | echo " not found"
53 |
54 | echo "----------" >> $NGX_AUTOCONF_ERR
55 | cat $NGX_AUTOTEST.c >> $NGX_AUTOCONF_ERR
56 | echo "----------" >> $NGX_AUTOCONF_ERR
57 | echo $ngx_test >> $NGX_AUTOCONF_ERR
58 | echo "----------" >> $NGX_AUTOCONF_ERR
59 | fi
60 |
61 | rm $NGX_AUTOTEST*
62 |
--------------------------------------------------------------------------------
/src/core/ngx_times.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_TIMES_H_INCLUDED_
9 | #define _NGX_TIMES_H_INCLUDED_
10 |
11 |
12 | #include
13 | #include
14 |
15 |
16 | typedef struct {
17 | time_t sec;
18 | ngx_uint_t msec;
19 | ngx_int_t gmtoff;
20 | } ngx_time_t;
21 |
22 |
23 | void ngx_time_init(void);
24 | void ngx_time_update(void);
25 | void ngx_time_sigsafe_update(void);
26 | u_char *ngx_http_time(u_char *buf, time_t t);
27 | u_char *ngx_http_cookie_time(u_char *buf, time_t t);
28 | void ngx_gmtime(time_t t, ngx_tm_t *tp);
29 |
30 | time_t ngx_next_time(time_t when);
31 | #define ngx_next_time_n "mktime()"
32 |
33 |
34 | extern volatile ngx_time_t *ngx_cached_time;
35 |
36 | #define ngx_time() ngx_cached_time->sec
37 | #define ngx_timeofday() (ngx_time_t *) ngx_cached_time
38 |
39 | extern volatile ngx_str_t ngx_cached_err_log_time;
40 | extern volatile ngx_str_t ngx_cached_http_time;
41 | extern volatile ngx_str_t ngx_cached_http_log_time;
42 | extern volatile ngx_str_t ngx_cached_http_log_iso8601;
43 |
44 | /*
45 | * milliseconds elapsed since epoch and truncated to ngx_msec_t,
46 | * used in event timers
47 | */
48 | extern volatile ngx_msec_t ngx_current_msec;
49 |
50 |
51 | #endif /* _NGX_TIMES_H_INCLUDED_ */
52 |
--------------------------------------------------------------------------------
/src/core/ngx_regex.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_REGEX_H_INCLUDED_
9 | #define _NGX_REGEX_H_INCLUDED_
10 |
11 |
12 | #include
13 | #include
14 |
15 | #include
16 |
17 |
18 | #define NGX_REGEX_NO_MATCHED PCRE_ERROR_NOMATCH /* -1 */
19 |
20 | #define NGX_REGEX_CASELESS PCRE_CASELESS
21 |
22 | typedef pcre ngx_regex_t;
23 |
24 |
25 | typedef struct {
26 | ngx_str_t pattern;
27 | ngx_pool_t *pool;
28 | ngx_int_t options;
29 |
30 | ngx_regex_t *regex;
31 | int captures;
32 | int named_captures;
33 | int name_size;
34 | u_char *names;
35 | ngx_str_t err;
36 | } ngx_regex_compile_t;
37 |
38 |
39 | typedef struct {
40 | ngx_regex_t *regex;
41 | u_char *name;
42 | } ngx_regex_elt_t;
43 |
44 |
45 | void ngx_regex_init(void);
46 | ngx_int_t ngx_regex_compile(ngx_regex_compile_t *rc);
47 |
48 | #define ngx_regex_exec(re, s, captures, size) \
49 | pcre_exec(re, NULL, (const char *) (s)->data, (s)->len, 0, 0, \
50 | captures, size)
51 | #define ngx_regex_exec_n "pcre_exec()"
52 |
53 | ngx_int_t ngx_regex_exec_array(ngx_array_t *a, ngx_str_t *s, ngx_log_t *log);
54 |
55 |
56 | #endif /* _NGX_REGEX_H_INCLUDED_ */
57 |
--------------------------------------------------------------------------------
/src/os/unix/rfork_thread.S:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #include
9 | #include
10 |
11 | /*
12 | * rfork_thread(3) - rfork_thread(flags, stack, func, arg);
13 | */
14 |
15 | #define KERNCALL int $0x80
16 |
17 | ENTRY(rfork_thread)
18 | push %ebp
19 | mov %esp, %ebp
20 | push %esi
21 |
22 | mov 12(%ebp), %esi # the thread stack address
23 |
24 | sub $4, %esi
25 | mov 20(%ebp), %eax # the thread argument
26 | mov %eax, (%esi)
27 |
28 | sub $4, %esi
29 | mov 16(%ebp), %eax # the thread start address
30 | mov %eax, (%esi)
31 |
32 | push 8(%ebp) # rfork(2) flags
33 | push $0
34 | mov $SYS_rfork, %eax
35 | KERNCALL
36 | jc error
37 |
38 | cmp $0, %edx
39 | jne child
40 |
41 | parent:
42 | add $8, %esp
43 | pop %esi
44 | leave
45 | ret
46 |
47 | child:
48 | mov %esi, %esp
49 | pop %eax
50 | call *%eax # call a thread start address ...
51 | add $4, %esp
52 |
53 | push %eax
54 | push $0
55 | mov $SYS_exit, %eax # ... and exit(2) after a thread would return
56 | KERNCALL
57 |
58 | error:
59 | add $8, %esp
60 | pop %esi
61 | leave
62 | PIC_PROLOGUE
63 |
64 | /* libc's cerror: jmp PIC_PLT(HIDENAME(cerror)) */
65 |
66 | push %eax
67 | call PIC_PLT(CNAME(__error))
68 | pop %ecx
69 | PIC_EPILOGUE
70 | mov %ecx, (%eax)
71 | mov $-1, %eax
72 | mov $-1, %edx
73 | ret
74 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2002-2012 Igor Sysoev
3 | * Copyright (C) 2011,2012 Nginx, Inc.
4 | *
5 | * Redistribution and use in source and binary forms, with or without
6 | * modification, are permitted provided that the following conditions
7 | * are met:
8 | * 1. Redistributions of source code must retain the above copyright
9 | * notice, this list of conditions and the following disclaimer.
10 | * 2. Redistributions in binary form must reproduce the above copyright
11 | * notice, this list of conditions and the following disclaimer in the
12 | * documentation and/or other materials provided with the distribution.
13 | *
14 | * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 | * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
18 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 | * SUCH DAMAGE.
25 | */
26 |
--------------------------------------------------------------------------------
/src/http/modules/ngx_http_ssl_module.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_HTTP_SSL_H_INCLUDED_
9 | #define _NGX_HTTP_SSL_H_INCLUDED_
10 |
11 |
12 | #include
13 | #include
14 | #include
15 |
16 |
17 | typedef struct {
18 | ngx_flag_t enable;
19 |
20 | ngx_ssl_t ssl;
21 |
22 | ngx_flag_t prefer_server_ciphers;
23 |
24 | ngx_uint_t protocols;
25 |
26 | ngx_uint_t verify;
27 | ngx_uint_t verify_depth;
28 |
29 | ssize_t builtin_session_cache;
30 |
31 | time_t session_timeout;
32 |
33 | ngx_str_t certificate;
34 | ngx_str_t certificate_key;
35 | ngx_str_t dhparam;
36 | ngx_str_t ecdh_curve;
37 | ngx_str_t client_certificate;
38 | ngx_str_t crl;
39 |
40 | ngx_str_t ciphers;
41 |
42 | ngx_shm_zone_t *shm_zone;
43 |
44 | u_char *file;
45 | ngx_uint_t line;
46 | } ngx_http_ssl_srv_conf_t;
47 |
48 |
49 | extern ngx_module_t ngx_http_ssl_module;
50 |
51 |
52 | #endif /* _NGX_HTTP_SSL_H_INCLUDED_ */
53 |
--------------------------------------------------------------------------------
/contrib/geo2nginx.pl:
--------------------------------------------------------------------------------
1 | #!/usr/bin/perl -w
2 |
3 | # (c) Andrei Nigmatulin, 2005
4 | #
5 | # this script provided "as is", without any warranties. use it at your own risk.
6 | #
7 | # special thanx to Andrew Sitnikov for perl port
8 | #
9 | # this script converts CSV geoip database (free download at http://www.maxmind.com/app/geoip_country)
10 | # to format, suitable for use with nginx_http_geo module (http://sysoev.ru/nginx)
11 | #
12 | # for example, line with ip range
13 | #
14 | # "62.16.68.0","62.16.127.255","1041253376","1041268735","RU","Russian Federation"
15 | #
16 | # will be converted to four subnetworks:
17 | #
18 | # 62.16.68.0/22 RU;
19 | # 62.16.72.0/21 RU;
20 | # 62.16.80.0/20 RU;
21 | # 62.16.96.0/19 RU;
22 |
23 |
24 | use warnings;
25 | use strict;
26 |
27 | while( ){
28 | if (/"[^"]+","[^"]+","([^"]+)","([^"]+)","([^"]+)"/){
29 | print_subnets($1, $2, $3);
30 | }
31 | }
32 |
33 | sub print_subnets {
34 | my ($a1, $a2, $c) = @_;
35 | my $l;
36 | while ($a1 <= $a2) {
37 | for ($l = 0; ($a1 & (1 << $l)) == 0 && ($a1 + ((1 << ($l + 1)) - 1)) <= $a2; $l++){};
38 | print long2ip($a1) . "/" . (32 - $l) . " " . $c . ";\n";
39 | $a1 += (1 << $l);
40 | }
41 | }
42 |
43 | sub long2ip {
44 | my $ip = shift;
45 |
46 | my $str = 0;
47 |
48 | $str = ($ip & 255);
49 |
50 | $ip >>= 8;
51 | $str = ($ip & 255).".$str";
52 |
53 | $ip >>= 8;
54 | $str = ($ip & 255).".$str";
55 |
56 | $ip >>= 8;
57 | $str = ($ip & 255).".$str";
58 | }
59 |
--------------------------------------------------------------------------------
/auto/cc/ccc:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | # Compaq C V6.5-207
7 |
8 | ngx_include_opt="-I"
9 |
10 | # warnings
11 |
12 | CFLAGS="$CFLAGS -msg_enable level6 -msg_fatal level6"
13 |
14 | CFLAGS="$CFLAGS -msg_disable unknownmacro"
15 | CFLAGS="$CFLAGS -msg_disable unusedincl"
16 | CFLAGS="$CFLAGS -msg_disable unnecincl"
17 | CFLAGS="$CFLAGS -msg_disable nestincl"
18 | CFLAGS="$CFLAGS -msg_disable strctpadding"
19 | CFLAGS="$CFLAGS -msg_disable ansialiascast"
20 | CFLAGS="$CFLAGS -msg_disable inlinestoclsmod"
21 | CFLAGS="$CFLAGS -msg_disable cxxkeyword"
22 | CFLAGS="$CFLAGS -msg_disable longlongsufx"
23 | CFLAGS="$CFLAGS -msg_disable valuepres"
24 |
25 | # STUB
26 | CFLAGS="$CFLAGS -msg_disable truncintcast"
27 | CFLAGS="$CFLAGS -msg_disable trunclongcast"
28 |
29 | CFLAGS="$CFLAGS -msg_disable truncintasn"
30 | CFLAGS="$CFLAGS -msg_disable trunclongint"
31 | CFLAGS="$CFLAGS -msg_disable intconcastsgn"
32 | CFLAGS="$CFLAGS -msg_disable intconstsign"
33 | CFLAGS="$CFLAGS -msg_disable switchlong"
34 | CFLAGS="$CFLAGS -msg_disable subscrbounds2"
35 |
36 | CFLAGS="$CFLAGS -msg_disable hexoctunsign"
37 |
38 | CFLAGS="$CFLAGS -msg_disable ignorecallval"
39 | CFLAGS="$CFLAGS -msg_disable nonstandcast"
40 | CFLAGS="$CFLAGS -msg_disable embedcomment"
41 | CFLAGS="$CFLAGS -msg_disable unreachcode"
42 | CFLAGS="$CFLAGS -msg_disable questcompare2"
43 | CFLAGS="$CFLAGS -msg_disable unusedtop"
44 | CFLAGS="$CFLAGS -msg_disable unrefdecl"
45 |
46 | CFLAGS="$CFLAGS -msg_disable bitnotint"
47 |
--------------------------------------------------------------------------------
/src/http/ngx_http_busy_lock.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_HTTP_BUSY_LOCK_H_INCLUDED_
9 | #define _NGX_HTTP_BUSY_LOCK_H_INCLUDED_
10 |
11 |
12 | #include
13 | #include
14 | #include
15 | #include
16 |
17 |
18 | typedef struct {
19 | u_char *md5_mask;
20 | char *md5;
21 | int cacheable;
22 |
23 | int busy;
24 | int max_busy;
25 |
26 | int waiting;
27 | int max_waiting;
28 |
29 | time_t timeout;
30 |
31 | ngx_event_mutex_t *mutex;
32 | } ngx_http_busy_lock_t;
33 |
34 |
35 | typedef struct {
36 | time_t time;
37 | ngx_event_t *event;
38 | void (*event_handler)(ngx_event_t *ev);
39 | u_char *md5;
40 | int slot;
41 | } ngx_http_busy_lock_ctx_t;
42 |
43 |
44 | int ngx_http_busy_lock(ngx_http_busy_lock_t *bl, ngx_http_busy_lock_ctx_t *bc);
45 | int ngx_http_busy_lock_cacheable(ngx_http_busy_lock_t *bl,
46 | ngx_http_busy_lock_ctx_t *bc, int lock);
47 | void ngx_http_busy_unlock(ngx_http_busy_lock_t *bl,
48 | ngx_http_busy_lock_ctx_t *bc);
49 |
50 | char *ngx_http_set_busy_lock_slot(ngx_conf_t *cf, ngx_command_t *cmd,
51 | void *conf);
52 |
53 |
54 | #endif /* _NGX_HTTP_BUSY_LOCK_H_INCLUDED_ */
55 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_sunpro_atomic_sparc64.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #if (NGX_PTR_SIZE == 4)
9 | #define NGX_CASA ngx_casa
10 | #else
11 | #define NGX_CASA ngx_casxa
12 | #endif
13 |
14 |
15 | ngx_atomic_uint_t
16 | ngx_casa(ngx_atomic_uint_t set, ngx_atomic_uint_t old, ngx_atomic_t *lock);
17 |
18 | ngx_atomic_uint_t
19 | ngx_casxa(ngx_atomic_uint_t set, ngx_atomic_uint_t old, ngx_atomic_t *lock);
20 |
21 | /* the code in src/os/unix/ngx_sunpro_sparc64.il */
22 |
23 |
24 | static ngx_inline ngx_atomic_uint_t
25 | ngx_atomic_cmp_set(ngx_atomic_t *lock, ngx_atomic_uint_t old,
26 | ngx_atomic_uint_t set)
27 | {
28 | set = NGX_CASA(set, old, lock);
29 |
30 | return (set == old);
31 | }
32 |
33 |
34 | static ngx_inline ngx_atomic_int_t
35 | ngx_atomic_fetch_add(ngx_atomic_t *value, ngx_atomic_int_t add)
36 | {
37 | ngx_atomic_uint_t old, res;
38 |
39 | old = *value;
40 |
41 | for ( ;; ) {
42 |
43 | res = old + add;
44 |
45 | res = NGX_CASA(res, old, value);
46 |
47 | if (res == old) {
48 | return res;
49 | }
50 |
51 | old = res;
52 | }
53 | }
54 |
55 |
56 | #define ngx_memory_barrier() \
57 | __asm (".volatile"); \
58 | __asm ("membar #LoadLoad | #LoadStore | #StoreStore | #StoreLoad"); \
59 | __asm (".nonvolatile")
60 |
61 | #define ngx_cpu_pause()
62 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_socket.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_SOCKET_H_INCLUDED_
9 | #define _NGX_SOCKET_H_INCLUDED_
10 |
11 |
12 | #include
13 |
14 |
15 | #define NGX_WRITE_SHUTDOWN SHUT_WR
16 |
17 | typedef int ngx_socket_t;
18 |
19 | #define ngx_socket socket
20 | #define ngx_socket_n "socket()"
21 |
22 |
23 | #if (NGX_HAVE_FIONBIO)
24 |
25 | int ngx_nonblocking(ngx_socket_t s);
26 | int ngx_blocking(ngx_socket_t s);
27 |
28 | #define ngx_nonblocking_n "ioctl(FIONBIO)"
29 | #define ngx_blocking_n "ioctl(!FIONBIO)"
30 |
31 | #else
32 |
33 | #define ngx_nonblocking(s) fcntl(s, F_SETFL, fcntl(s, F_GETFL) | O_NONBLOCK)
34 | #define ngx_nonblocking_n "fcntl(O_NONBLOCK)"
35 |
36 | #define ngx_blocking(s) fcntl(s, F_SETFL, fcntl(s, F_GETFL) & ~O_NONBLOCK)
37 | #define ngx_blocking_n "fcntl(!O_NONBLOCK)"
38 |
39 | #endif
40 |
41 | int ngx_tcp_nopush(ngx_socket_t s);
42 | int ngx_tcp_push(ngx_socket_t s);
43 |
44 | #if (NGX_LINUX)
45 |
46 | #define ngx_tcp_nopush_n "setsockopt(TCP_CORK)"
47 | #define ngx_tcp_push_n "setsockopt(!TCP_CORK)"
48 |
49 | #else
50 |
51 | #define ngx_tcp_nopush_n "setsockopt(TCP_NOPUSH)"
52 | #define ngx_tcp_push_n "setsockopt(!TCP_NOPUSH)"
53 |
54 | #endif
55 |
56 |
57 | #define ngx_shutdown_socket shutdown
58 | #define ngx_shutdown_socket_n "shutdown()"
59 |
60 | #define ngx_close_socket close
61 | #define ngx_close_socket_n "close() socket"
62 |
63 |
64 | #endif /* _NGX_SOCKET_H_INCLUDED_ */
65 |
--------------------------------------------------------------------------------
/src/http/modules/perl/ngx_http_perl_module.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_HTTP_PERL_MODULE_H_INCLUDED_
9 | #define _NGX_HTTP_PERL_MODULE_H_INCLUDED_
10 |
11 |
12 | #include
13 | #include
14 | #include
15 | #include
16 |
17 | #include
18 | #include
19 |
20 |
21 | typedef ngx_http_request_t *nginx;
22 |
23 | typedef struct {
24 | ngx_str_t filename;
25 | ngx_str_t redirect_uri;
26 | ngx_str_t redirect_args;
27 |
28 | SV *next;
29 |
30 | ngx_uint_t done; /* unsigned done:1; */
31 |
32 | ngx_array_t *variables; /* array of ngx_http_perl_var_t */
33 |
34 | #if (NGX_HTTP_SSI)
35 | ngx_http_ssi_ctx_t *ssi;
36 | #endif
37 | } ngx_http_perl_ctx_t;
38 |
39 |
40 | typedef struct {
41 | ngx_uint_t hash;
42 | ngx_str_t name;
43 | ngx_str_t value;
44 | } ngx_http_perl_var_t;
45 |
46 |
47 | extern ngx_module_t ngx_http_perl_module;
48 |
49 |
50 | /*
51 | * workaround for "unused variable `Perl___notused'" warning
52 | * when building with perl 5.6.1
53 | */
54 | #ifndef PERL_IMPLICIT_CONTEXT
55 | #undef dTHXa
56 | #define dTHXa(a)
57 | #endif
58 |
59 |
60 | extern void boot_DynaLoader(pTHX_ CV* cv);
61 |
62 |
63 | void ngx_http_perl_handle_request(ngx_http_request_t *r);
64 | void ngx_http_perl_sleep_handler(ngx_http_request_t *r);
65 |
66 |
67 | #endif /* _NGX_HTTP_PERL_MODULE_H_INCLUDED_ */
68 |
--------------------------------------------------------------------------------
/auto/cc/bcc:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | # Borland C++ 5.5
7 |
8 | # optimizations
9 |
10 | # maximize speed
11 | CFLAGS="$CFLAGS -O2"
12 |
13 | case $CPU in
14 | pentium)
15 | # optimize for Pentium and Athlon
16 | CPU_OPT="-5"
17 | ;;
18 |
19 | pentiumpro)
20 | # optimize for Pentium Pro, Pentium II and Pentium III
21 | CPU_OPT="-6"
22 | ;;
23 | esac
24 |
25 | # __stdcall
26 | #CPU_OPT="$CPU_OPT -ps"
27 | # __fastcall
28 | #CPU_OPT="$CPU_OPT -pr"
29 |
30 | CFLAGS="$CFLAGS $CPU_OPT"
31 |
32 | # multithreaded
33 | CFLAGS="$CFLAGS -tWM"
34 |
35 | # stop on warning
36 | CFLAGS="$CFLAGS -w!"
37 |
38 | # disable logo
39 | CFLAGS="$CFLAGS -q"
40 |
41 |
42 | # precompiled headers
43 | CORE_DEPS="$CORE_DEPS $NGX_OBJS/ngx_config.csm"
44 | NGX_PCH="$NGX_OBJS/ngx_config.csm"
45 | NGX_BUILD_PCH="-H=$NGX_OBJS/ngx_config.csm"
46 | NGX_USE_PCH="-Hu -H=$NGX_OBJS/ngx_config.csm"
47 |
48 |
49 | # Win32 GUI mode application
50 | #LINK="\$(CC) -laa"
51 |
52 |
53 | # the resource file
54 | NGX_RES="$NGX_OBJS/nginx.res"
55 | NGX_RCC="brcc32 -fo$NGX_OBJS/nginx.res \$(CORE_INCS) $NGX_WIN32_RC"
56 | # the pragma allows to link the resource file using bcc32 and
57 | # to avoid the direct ilink32 calling and the c0w32.obj's WinMain/main problem
58 | NGX_PRAGMA="#pragma resource \"$NGX_OBJS/nginx.res\""
59 |
60 |
61 | ngx_include_opt="-I"
62 | ngx_objout="-o"
63 | ngx_binout="-e"
64 | ngx_objext="obj"
65 | ngx_binext=".exe"
66 |
67 | ngx_long_start='@&&|
68 | '
69 | ngx_long_end='|'
70 |
71 | ngx_regex_dirsep='\\'
72 | ngx_dirsep="\\"
73 |
--------------------------------------------------------------------------------
/auto/lib/pcre/make:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | case "$NGX_CC_NAME" in
7 |
8 | msvc*)
9 | ngx_makefile=makefile.msvc
10 | ngx_opt="CPU_OPT=\"$CPU_OPT\" LIBC=$LIBC"
11 | ngx_pcre="PCRE=\"$PCRE\""
12 | ;;
13 |
14 | owc*)
15 | ngx_makefile=makefile.owc
16 | ngx_opt="CPU_OPT=\"$CPU_OPT\""
17 | ngx_pcre=`echo PCRE=\"$PCRE\" | sed -e "s/\//$ngx_regex_dirsep/g"`
18 | ;;
19 |
20 | bcc)
21 | ngx_makefile=makefile.bcc
22 | ngx_opt="-DCPU_OPT=\"$CPU_OPT\""
23 | ngx_pcre=`echo \-DPCRE=\"$PCRE\" | sed -e "s/\//$ngx_regex_dirsep/g"`
24 | ;;
25 |
26 | esac
27 |
28 |
29 | case "$NGX_PLATFORM" in
30 |
31 | win32)
32 |
33 | cat << END >> $NGX_MAKEFILE
34 |
35 | `echo "$PCRE/pcre.lib: $NGX_MAKEFILE" | sed -e "s/\//$ngx_regex_dirsep/g"`
36 | \$(MAKE) -f auto/lib/pcre/$ngx_makefile $ngx_pcre $ngx_opt
37 |
38 | `echo "$PCRE/pcre.h:" | sed -e "s/\//$ngx_regex_dirsep/g"`
39 | \$(MAKE) -f auto/lib/pcre/$ngx_makefile $ngx_pcre pcre.h
40 |
41 | END
42 |
43 | ;;
44 |
45 | *)
46 | cat << END >> $NGX_MAKEFILE
47 |
48 | $PCRE/pcre.h: $PCRE/Makefile
49 |
50 | $PCRE/Makefile: $NGX_MAKEFILE
51 | cd $PCRE \\
52 | && if [ -f Makefile ]; then \$(MAKE) distclean; fi \\
53 | && CC="\$(CC)" CFLAGS="$PCRE_OPT" \\
54 | ./configure --disable-shared
55 |
56 | $PCRE/.libs/libpcre.a: $PCRE/Makefile
57 | cd $PCRE \\
58 | && \$(MAKE) libpcre.la
59 |
60 | END
61 |
62 | ;;
63 |
64 | esac
65 |
--------------------------------------------------------------------------------
/auto/os/solaris:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | have=NGX_SOLARIS . auto/have_headers
7 |
8 | CORE_INCS="$UNIX_INCS"
9 | CORE_DEPS="$UNIX_DEPS $SOLARIS_DEPS"
10 | CORE_SRCS="$UNIX_SRCS $SOLARIS_SRCS "
11 | CORE_LIBS="$CORE_LIBS -lsocket -lnsl"
12 |
13 | NGX_RPATH=YES
14 |
15 | # Solaris's make does not support a blank line between target and rules
16 | ngx_spacer=
17 |
18 | CC_AUX_FLAGS="$CC_AUX_FLAGS -D_FILE_OFFSET_BITS=64 -lsocket -lnsl"
19 |
20 |
21 | if [ $ZLIB_ASM != NO ]; then
22 | echo "$0: error: the --with-zlib-asm=CPU option is not supported"
23 | echo "on that platform"
24 | echo
25 |
26 | exit 1
27 | fi
28 |
29 |
30 | ngx_feature="sendfilev()"
31 | ngx_feature_name="NGX_HAVE_SENDFILE"
32 | ngx_feature_run=no
33 | ngx_feature_incs="#include "
34 | ngx_feature_path=
35 | ngx_feature_libs="-lsendfile"
36 | ngx_feature_test="int fd = 1; sendfilevec_t vec[1];
37 | size_t sent; ssize_t n;
38 | n = sendfilev(fd, vec, 1, &sent)"
39 | . auto/feature
40 |
41 |
42 | if [ $ngx_found = yes ]; then
43 | CORE_SRCS="$CORE_SRCS $SOLARIS_SENDFILEV_SRCS"
44 | CORE_LIBS="$CORE_LIBS -lsendfile"
45 | fi
46 |
47 |
48 | ngx_feature="event ports"
49 | ngx_feature_name="NGX_HAVE_EVENTPORT"
50 | ngx_feature_run=no
51 | ngx_feature_incs="#include "
52 | ngx_feature_path=
53 | ngx_feature_libs=
54 | ngx_feature_test="int n = port_create()"
55 | . auto/feature
56 |
57 | if [ $ngx_found = yes ]; then
58 | CORE_SRCS="$CORE_SRCS $EVENTPORT_SRCS"
59 | EVENT_MODULES="$EVENT_MODULES $EVENTPORT_MODULE"
60 | fi
61 |
--------------------------------------------------------------------------------
/src/core/ngx_radix_tree.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_RADIX_TREE_H_INCLUDED_
9 | #define _NGX_RADIX_TREE_H_INCLUDED_
10 |
11 |
12 | #include
13 | #include
14 |
15 |
16 | #define NGX_RADIX_NO_VALUE (uintptr_t) -1
17 |
18 | typedef struct ngx_radix_node_s ngx_radix_node_t;
19 |
20 | // 基数树
21 | struct ngx_radix_node_s {
22 | // 指向右子树,如果没有右子树,则值为null空指针
23 | ngx_radix_node_t *right;
24 | // 指向左子树,如果没有左子树,则值为null空指针
25 | ngx_radix_node_t *left;
26 | // 指向父节点,如果没有父节点,则值为null空指针
27 | ngx_radix_node_t *parent;
28 | // value存储的是指针的值,它指向用户定义的数据结构。如果这个节点还未使用,value的值将是NGX_RADIX_NO_VALUE
29 | uintptr_t value;
30 | };
31 |
32 |
33 | typedef struct {
34 | // 指向根节点
35 | ngx_radix_node_t *root;
36 | // 内存池,它负责给基数树的节点分配内存
37 | ngx_pool_t *pool;
38 | // 管理已经分配但暂时未使用的节点,free实际上是所有不在树中节点的单链表
39 | ngx_radix_node_t *free;
40 | // 已分配内存中还未使用内存的首地址
41 | char *start;
42 | // 已分配内存中还未使用的内存大小
43 | size_t size;
44 | } ngx_radix_tree_t;
45 |
46 |
47 | ngx_radix_tree_t *ngx_radix_tree_create(ngx_pool_t *pool,
48 | ngx_int_t preallocate);
49 | ngx_int_t ngx_radix32tree_insert(ngx_radix_tree_t *tree,
50 | uint32_t key, uint32_t mask, uintptr_t value);
51 | ngx_int_t ngx_radix32tree_delete(ngx_radix_tree_t *tree,
52 | uint32_t key, uint32_t mask);
53 | uintptr_t ngx_radix32tree_find(ngx_radix_tree_t *tree, uint32_t key);
54 |
55 |
56 | #endif /* _NGX_RADIX_TREE_H_INCLUDED_ */
57 |
--------------------------------------------------------------------------------
/src/event/ngx_event_mutex.c:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #include
9 | #include
10 | #include
11 |
12 |
13 | ngx_int_t ngx_event_mutex_timedlock(ngx_event_mutex_t *m, ngx_msec_t timer,
14 | ngx_event_t *ev)
15 | {
16 | ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
17 | "lock event mutex %p lock:%XD", m, m->lock);
18 |
19 | if (m->lock) {
20 |
21 | if (m->events == NULL) {
22 | m->events = ev;
23 |
24 | } else {
25 | m->last->next = ev;
26 | }
27 |
28 | m->last = ev;
29 | ev->next = NULL;
30 |
31 | #if (NGX_THREADS0)
32 | ev->light = 1;
33 | #endif
34 |
35 | ngx_add_timer(ev, timer);
36 |
37 | return NGX_AGAIN;
38 | }
39 |
40 | m->lock = 1;
41 |
42 | return NGX_OK;
43 | }
44 |
45 |
46 | ngx_int_t ngx_event_mutex_unlock(ngx_event_mutex_t *m, ngx_log_t *log)
47 | {
48 | ngx_event_t *ev;
49 |
50 | if (m->lock == 0) {
51 | ngx_log_error(NGX_LOG_ALERT, log, 0,
52 | "tring to unlock the free event mutex %p", m);
53 | return NGX_ERROR;
54 | }
55 |
56 | ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0,
57 | "unlock event mutex %p, next event: %p", m, m->events);
58 |
59 | m->lock = 0;
60 |
61 | if (m->events) {
62 | ev = m->events;
63 | m->events = ev->next;
64 |
65 | ev->next = (ngx_event_t *) ngx_posted_events;
66 | ngx_posted_events = ev;
67 | }
68 |
69 | return NGX_OK;
70 | }
71 |
--------------------------------------------------------------------------------
/src/core/ngx_crc32.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_CRC32_H_INCLUDED_
9 | #define _NGX_CRC32_H_INCLUDED_
10 |
11 |
12 | #include
13 | #include
14 |
15 |
16 | extern uint32_t *ngx_crc32_table_short;
17 | extern uint32_t ngx_crc32_table256[];
18 |
19 |
20 | static ngx_inline uint32_t
21 | ngx_crc32_short(u_char *p, size_t len)
22 | {
23 | u_char c;
24 | uint32_t crc;
25 |
26 | crc = 0xffffffff;
27 |
28 | while (len--) {
29 | c = *p++;
30 | crc = ngx_crc32_table_short[(crc ^ (c & 0xf)) & 0xf] ^ (crc >> 4);
31 | crc = ngx_crc32_table_short[(crc ^ (c >> 4)) & 0xf] ^ (crc >> 4);
32 | }
33 |
34 | return crc ^ 0xffffffff;
35 | }
36 |
37 |
38 | static ngx_inline uint32_t
39 | ngx_crc32_long(u_char *p, size_t len)
40 | {
41 | uint32_t crc;
42 |
43 | crc = 0xffffffff;
44 |
45 | while (len--) {
46 | crc = ngx_crc32_table256[(crc ^ *p++) & 0xff] ^ (crc >> 8);
47 | }
48 |
49 | return crc ^ 0xffffffff;
50 | }
51 |
52 |
53 | #define ngx_crc32_init(crc) \
54 | crc = 0xffffffff
55 |
56 |
57 | static ngx_inline void
58 | ngx_crc32_update(uint32_t *crc, u_char *p, size_t len)
59 | {
60 | uint32_t c;
61 |
62 | c = *crc;
63 |
64 | while (len--) {
65 | c = ngx_crc32_table256[(c ^ *p++) & 0xff] ^ (c >> 8);
66 | }
67 |
68 | *crc = c;
69 | }
70 |
71 |
72 | #define ngx_crc32_final(crc) \
73 | crc ^= 0xffffffff
74 |
75 |
76 | ngx_int_t ngx_crc32_table_init(void);
77 |
78 |
79 | #endif /* _NGX_CRC32_H_INCLUDED_ */
80 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_process_cycle.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_PROCESS_CYCLE_H_INCLUDED_
9 | #define _NGX_PROCESS_CYCLE_H_INCLUDED_
10 |
11 |
12 | #include
13 | #include
14 |
15 |
16 | #define NGX_CMD_OPEN_CHANNEL 1
17 | #define NGX_CMD_CLOSE_CHANNEL 2
18 | #define NGX_CMD_QUIT 3
19 | #define NGX_CMD_TERMINATE 4
20 | #define NGX_CMD_REOPEN 5
21 |
22 |
23 | #define NGX_PROCESS_SINGLE 0
24 | #define NGX_PROCESS_MASTER 1
25 | #define NGX_PROCESS_SIGNALLER 2
26 | #define NGX_PROCESS_WORKER 3
27 | #define NGX_PROCESS_HELPER 4
28 |
29 |
30 | typedef struct {
31 | ngx_event_handler_pt handler;
32 | char *name;
33 | ngx_msec_t delay;
34 | } ngx_cache_manager_ctx_t;
35 |
36 |
37 | void ngx_master_process_cycle(ngx_cycle_t *cycle);
38 | void ngx_single_process_cycle(ngx_cycle_t *cycle);
39 |
40 |
41 | extern ngx_uint_t ngx_process;
42 | extern ngx_pid_t ngx_pid;
43 | extern ngx_pid_t ngx_new_binary;
44 | extern ngx_uint_t ngx_inherited;
45 | extern ngx_uint_t ngx_daemonized;
46 | extern ngx_uint_t ngx_threaded;
47 | extern ngx_uint_t ngx_exiting;
48 |
49 | extern sig_atomic_t ngx_reap;
50 | extern sig_atomic_t ngx_sigio;
51 | extern sig_atomic_t ngx_sigalrm;
52 | extern sig_atomic_t ngx_quit;
53 | extern sig_atomic_t ngx_debug_quit;
54 | extern sig_atomic_t ngx_terminate;
55 | extern sig_atomic_t ngx_noaccept;
56 | extern sig_atomic_t ngx_reconfigure;
57 | extern sig_atomic_t ngx_reopen;
58 | extern sig_atomic_t ngx_change_binary;
59 |
60 |
61 | #endif /* _NGX_PROCESS_CYCLE_H_INCLUDED_ */
62 |
--------------------------------------------------------------------------------
/src/http/modules/perl/Makefile.PL:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 | use 5.006001;
6 | use ExtUtils::MakeMaker;
7 |
8 | WriteMakefile(
9 | NAME => 'nginx',
10 | VERSION_FROM => 'nginx.pm', # finds $VERSION
11 | PREREQ_PM => {}, # e.g., Module::Name => 1.1
12 |
13 | ABSTRACT_FROM => 'nginx.pm', # retrieve abstract from module
14 | AUTHOR => 'Igor Sysoev',
15 |
16 | CCFLAGS => "$ENV{NGX_PM_CFLAGS}",
17 | OPTIMIZE => '-O',
18 |
19 | INC => "-I ../../../../../src/core " .
20 | "-I ../../../../../src/event " .
21 | "-I ../../../../../src/os/unix " .
22 | "-I ../../../../../src/http " .
23 | "-I ../../../../../src/http/modules " .
24 | "-I ../../../../../src/http/modules/perl " .
25 | "-I ../../../../../$ENV{NGX_OBJS} " .
26 | ($ENV{NGX_PCRE} =~ /^(YES|NO)/ ? "" :
27 | ($ENV{NGX_PCRE} =~ m#^/# ? "-I $ENV{NGX_PCRE} " :
28 | "-I ../../../../../$ENV{NGX_PCRE} ")) .
29 | ($ENV{NGX_OPENSSL} =~ /^(YES|NO)/ ? "" :
30 | ($ENV{NGX_OPENSSL} =~ m#^/# ?
31 | "-I $ENV{NGX_OPENSSL}/.openssl/include " :
32 | "-I ../../../../../$ENV{NGX_OPENSSL}/.openssl/include ")),
33 |
34 | depend => {
35 | 'nginx.c' =>
36 | "../../../../../src/http/modules/perl/ngx_http_perl_module.h"
37 | },
38 |
39 | PM => {
40 | 'nginx.pm' => '$(INST_LIBDIR)/nginx.pm'
41 | }
42 | );
43 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_time.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_TIME_H_INCLUDED_
9 | #define _NGX_TIME_H_INCLUDED_
10 |
11 |
12 | #include
13 | #include
14 |
15 |
16 | typedef ngx_rbtree_key_t ngx_msec_t;
17 | typedef ngx_rbtree_key_int_t ngx_msec_int_t;
18 |
19 | typedef struct tm ngx_tm_t;
20 |
21 | #define ngx_tm_sec tm_sec
22 | #define ngx_tm_min tm_min
23 | #define ngx_tm_hour tm_hour
24 | #define ngx_tm_mday tm_mday
25 | #define ngx_tm_mon tm_mon
26 | #define ngx_tm_year tm_year
27 | #define ngx_tm_wday tm_wday
28 | #define ngx_tm_isdst tm_isdst
29 |
30 | #define ngx_tm_sec_t int
31 | #define ngx_tm_min_t int
32 | #define ngx_tm_hour_t int
33 | #define ngx_tm_mday_t int
34 | #define ngx_tm_mon_t int
35 | #define ngx_tm_year_t int
36 | #define ngx_tm_wday_t int
37 |
38 |
39 | #if (NGX_HAVE_GMTOFF)
40 | #define ngx_tm_gmtoff tm_gmtoff
41 | #define ngx_tm_zone tm_zone
42 | #endif
43 |
44 |
45 | #if (NGX_SOLARIS)
46 |
47 | #define ngx_timezone(isdst) (- (isdst ? altzone : timezone) / 60)
48 |
49 | #else
50 |
51 | #define ngx_timezone(isdst) (- (isdst ? timezone + 3600 : timezone) / 60)
52 |
53 | #endif
54 |
55 |
56 | void ngx_timezone_update(void);
57 | void ngx_localtime(time_t s, ngx_tm_t *tm);
58 | void ngx_libc_localtime(time_t s, struct tm *tm);
59 | void ngx_libc_gmtime(time_t s, struct tm *tm);
60 |
61 | #define ngx_gettimeofday(tp) (void) gettimeofday(tp, NULL);
62 | #define ngx_msleep(ms) (void) usleep(ms * 1000)
63 | #define ngx_sleep(s) (void) sleep(s)
64 |
65 |
66 | #endif /* _NGX_TIME_H_INCLUDED_ */
67 |
--------------------------------------------------------------------------------
/auto/lib/geoip/conf:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | ngx_feature="GeoIP library"
7 | ngx_feature_name=
8 | ngx_feature_run=no
9 | ngx_feature_incs=
10 | ngx_feature_path=
11 | ngx_feature_libs="-lGeoIP"
12 | ngx_feature_test="GeoIP_open(NULL, 0)"
13 | . auto/feature
14 |
15 |
16 | if [ $ngx_found = no ]; then
17 |
18 | # FreeBSD port
19 |
20 | ngx_feature="GeoIP library in /usr/local/"
21 |
22 | if [ $NGX_RPATH = YES ]; then
23 | ngx_feature_libs="-R/usr/local/lib -L/usr/local/lib -lGeoIP"
24 | else
25 | ngx_feature_libs="-L/usr/local/lib -lGeoIP"
26 | fi
27 |
28 | . auto/feature
29 | fi
30 |
31 |
32 | if [ $ngx_found = no ]; then
33 |
34 | # NetBSD port
35 |
36 | ngx_feature="GeoIP library in /usr/pkg/"
37 | ngx_feature_path="/usr/pkg/include/"
38 |
39 | if [ $NGX_RPATH = YES ]; then
40 | ngx_feature_libs="-R/usr/pkg/lib -L/usr/pkg/lib -lGeoIP"
41 | else
42 | ngx_feature_libs="-L/usr/pkg/lib -lGeoIP"
43 | fi
44 |
45 | . auto/feature
46 | fi
47 |
48 |
49 | if [ $ngx_found = no ]; then
50 |
51 | # MacPorts
52 |
53 | ngx_feature="GeoIP library in /opt/local/"
54 | ngx_feature_path="/opt/local/include"
55 |
56 | if [ $NGX_RPATH = YES ]; then
57 | ngx_feature_libs="-R/opt/local/lib -L/opt/local/lib -lGeoIP"
58 | else
59 | ngx_feature_libs="-L/opt/local/lib -lGeoIP"
60 | fi
61 |
62 | . auto/feature
63 | fi
64 |
65 |
66 | if [ $ngx_found = yes ]; then
67 | CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
68 |
69 | else
70 |
71 | cat << END
72 |
73 | $0: error: the GeoIP module requires the GeoIP library.
74 | You can either do not enable the module or install the library.
75 |
76 | END
77 |
78 | exit 1
79 | fi
80 |
--------------------------------------------------------------------------------
/auto/lib/conf:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | if [ $USE_PCRE = YES -o $PCRE != NONE ]; then
7 | . auto/lib/pcre/conf
8 |
9 | else
10 | if [ $USE_PCRE = DISABLED -a $HTTP_REWRITE = YES ]; then
11 |
12 | cat << END
13 |
14 | $0: error: the HTTP rewrite module requires the PCRE library.
15 | You can either disable the module by using --without-http_rewrite_module
16 | option or you have to enable the PCRE support.
17 |
18 | END
19 | exit 1
20 | fi
21 | fi
22 |
23 |
24 | if [ $USE_OPENSSL = YES ]; then
25 | . auto/lib/openssl/conf
26 | fi
27 |
28 | if [ $USE_MD5 = YES ]; then
29 |
30 | if [ $USE_OPENSSL = YES ]; then
31 | have=NGX_HAVE_OPENSSL_MD5_H . auto/have
32 | have=NGX_OPENSSL_MD5 . auto/have
33 | have=NGX_HAVE_MD5 . auto/have
34 | MD5=YES
35 | MD5_LIB=OpenSSL
36 |
37 | else
38 | . auto/lib/md5/conf
39 | fi
40 |
41 | fi
42 |
43 | if [ $USE_SHA1 = YES ]; then
44 |
45 | if [ $USE_OPENSSL = YES ]; then
46 | have=NGX_HAVE_OPENSSL_SHA1_H . auto/have
47 | have=NGX_HAVE_SHA1 . auto/have
48 | SHA1=YES
49 | SHA1_LIB=OpenSSL
50 |
51 | else
52 | . auto/lib/sha1/conf
53 | fi
54 |
55 | fi
56 |
57 | if [ $USE_ZLIB = YES ]; then
58 | . auto/lib/zlib/conf
59 | fi
60 |
61 | if [ $USE_LIBXSLT = YES ]; then
62 | . auto/lib/libxslt/conf
63 | fi
64 |
65 | if [ $USE_LIBGD = YES ]; then
66 | . auto/lib/libgd/conf
67 | fi
68 |
69 | if [ $USE_PERL = YES ]; then
70 | . auto/lib/perl/conf
71 | fi
72 |
73 | if [ $HTTP_GEOIP = YES ]; then
74 | . auto/lib/geoip/conf
75 | fi
76 |
77 | if [ $NGX_GOOGLE_PERFTOOLS = YES ]; then
78 | . auto/lib/google-perftools/conf
79 | fi
80 |
81 | if [ $NGX_LIBATOMIC != NO ]; then
82 | . auto/lib/libatomic/conf
83 | fi
84 |
--------------------------------------------------------------------------------
/src/core/ngx_queue.c:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #include
9 | #include
10 |
11 |
12 | /*
13 | * find the middle queue element if the queue has odd number of elements
14 | * or the first element of the queue's second part otherwise
15 | */
16 |
17 | ngx_queue_t *
18 | ngx_queue_middle(ngx_queue_t *queue)
19 | {
20 | ngx_queue_t *middle, *next;
21 |
22 | middle = ngx_queue_head(queue);
23 |
24 | if (middle == ngx_queue_last(queue)) {
25 | return middle;
26 | }
27 |
28 | next = ngx_queue_head(queue);
29 |
30 | for ( ;; ) {
31 | middle = ngx_queue_next(middle);
32 |
33 | next = ngx_queue_next(next);
34 |
35 | if (next == ngx_queue_last(queue)) {
36 | return middle;
37 | }
38 |
39 | next = ngx_queue_next(next);
40 |
41 | if (next == ngx_queue_last(queue)) {
42 | return middle;
43 | }
44 | }
45 | }
46 |
47 |
48 | /* the stable insertion sort */
49 |
50 | void
51 | ngx_queue_sort(ngx_queue_t *queue,
52 | ngx_int_t (*cmp)(const ngx_queue_t *, const ngx_queue_t *))
53 | {
54 | ngx_queue_t *q, *prev, *next;
55 |
56 | q = ngx_queue_head(queue);
57 |
58 | if (q == ngx_queue_last(queue)) {
59 | return;
60 | }
61 |
62 | for (q = ngx_queue_next(q); q != ngx_queue_sentinel(queue); q = next) {
63 |
64 | prev = ngx_queue_prev(q);
65 | next = ngx_queue_next(q);
66 |
67 | ngx_queue_remove(q);
68 |
69 | do {
70 | if (cmp(prev, q) <= 0) {
71 | break;
72 | }
73 |
74 | prev = ngx_queue_prev(prev);
75 |
76 | } while (prev != ngx_queue_sentinel(queue));
77 |
78 | ngx_queue_insert_after(prev, q);
79 | }
80 | }
81 |
--------------------------------------------------------------------------------
/auto/types/typedef:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | echo $ngx_n "checking for $ngx_type ...$ngx_c"
7 |
8 | cat << END >> $NGX_AUTOCONF_ERR
9 |
10 | ----------------------------------------
11 | checking for $ngx_type
12 |
13 | END
14 |
15 | ngx_found=no
16 |
17 | for ngx_try in $ngx_type $ngx_types
18 | do
19 |
20 | cat << END > $NGX_AUTOTEST.c
21 |
22 | #include
23 | #include
24 | #include
25 | #include
26 | #include
27 | #include
28 | $NGX_INCLUDE_INTTYPES_H
29 |
30 | int main() {
31 | $ngx_try i = 0;
32 | return 0;
33 | }
34 |
35 | END
36 |
37 | ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS \
38 | -o $NGX_AUTOTEST $NGX_AUTOTEST.c $NGX_LD_OPT $ngx_feature_libs"
39 |
40 | eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"
41 |
42 | if [ -x $NGX_AUTOTEST ]; then
43 | if [ $ngx_try = $ngx_type ]; then
44 | echo " found"
45 | ngx_found=yes
46 | else
47 | echo ", $ngx_try used"
48 | ngx_found=$ngx_try
49 | fi
50 | fi
51 |
52 | rm -f $NGX_AUTOTEST
53 |
54 | if [ $ngx_found = no ]; then
55 | echo $ngx_n " $ngx_try not found$ngx_c"
56 |
57 | echo "----------" >> $NGX_AUTOCONF_ERR
58 | cat $NGX_AUTOTEST.c >> $NGX_AUTOCONF_ERR
59 | echo "----------" >> $NGX_AUTOCONF_ERR
60 | echo $ngx_test >> $NGX_AUTOCONF_ERR
61 | echo "----------" >> $NGX_AUTOCONF_ERR
62 |
63 | else
64 | break
65 | fi
66 | done
67 |
68 | if [ $ngx_found = no ]; then
69 | echo
70 | echo "$0: error: can not define $ngx_type"
71 |
72 | exit 1
73 | fi
74 |
75 | if [ $ngx_found != yes ]; then
76 | echo "typedef $ngx_found $ngx_type;" >> $NGX_AUTO_CONFIG_H
77 | fi
78 |
--------------------------------------------------------------------------------
/src/core/ngx_spinlock.c:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #include
9 | #include
10 |
11 | /* 自旋锁 注释来自:http://blog.csdn.net/walkerkalr/article/details/38237147?utm_source=tuicool&utm_medium=referral
12 | lock参数就是原子变量表达的锁,当lock值为0时,表示锁是被释放的,而lock值不为0时则表示锁已经被某个进程持有了;
13 | value参数表示希望当锁没有被任何进程持有时,把lock值设为value表示当前进程持有了锁;
14 | spin参数表示在多处理器系统内,当ngx_spinlock方法没有拿到锁时,当前进程在内核的一次调度中,该方法等待其他处理器释放锁的时间。
15 | */
16 | void
17 | ngx_spinlock(ngx_atomic_t *lock, ngx_atomic_int_t value, ngx_uint_t spin)
18 | {
19 |
20 | #if (NGX_HAVE_ATOMIC_OPS) //支持原子操作
21 |
22 | ngx_uint_t i, n;
23 | // 一直处于循环中,直到获取到锁
24 | for ( ;; ) {
25 | // lock为0表示没有其他进程持有锁,这时将lock值设置为value参数表示当前进程持有了锁 ,ngx_atomic_cmp_set为原子操作
26 | if (*lock == 0 && ngx_atomic_cmp_set(lock, 0, value)) {
27 | return;
28 | }
29 | //如果是多处理器系统
30 | if (ngx_ncpu > 1) {
31 | /*在多处理器下,当发现锁被其他进程占用时,当前进程并不是立刻让出正在使用的CPU处理器,而是等待一段时间,看看其他处理器上的进程是否会释放锁,这会减少进程间切换的次数。*/
32 | for (n = 1; n < spin; n <<= 1) {
33 | // 随着等待的次数越来越多,实际去检查锁的间隔时间越来越大
34 | for (i = 0; i < n; i++) {
35 | //ngx_cpu_pause是许多架构体系中专门为了自旋锁而提供的指令,它会告诉CPU现在处于自旋锁等待状态,通常一个CPU会将自己置于节能状态,降低功耗。但是当前进程并没有让出正在使用的处理器。
36 | ngx_cpu_pause();
37 | }
38 | /*检查锁是否被释放了,如果lock值为0且释放了锁后,就把它的值设为value,当前进程持有锁成功并返回 */
39 | if (*lock == 0 && ngx_atomic_cmp_set(lock, 0, value)) {
40 | return;
41 | }
42 | }
43 | }
44 | /*当前进程让出处理器,但仍然处于可执行状态,使得处理器优先调度其他可执行状态的进程,这样,在进程被内核再次调度时,在for循环代码中可以期望其他进程释放锁。*/
45 | ngx_sched_yield();
46 | }
47 |
48 | #else
49 |
50 | #if (NGX_THREADS)
51 |
52 | #error ngx_spinlock() or ngx_atomic_cmp_set() are not defined !
53 |
54 | #endif
55 |
56 | #endif
57 |
58 | }
59 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_daemon.c:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #include
9 | #include
10 |
11 | /*创建守护进程,具体创建方法可以参考《unix环境高级编程》*/
12 | ngx_int_t ngx_daemon(ngx_log_t *log)
13 | {
14 | int fd;
15 |
16 | switch (fork()) {
17 | case -1:
18 | ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "fork() failed");
19 | return NGX_ERROR;
20 |
21 | case 0: //子进程作为守护进程
22 | break;
23 |
24 | default:
25 | exit(0); //父进程退出
26 | }
27 |
28 | ngx_pid = ngx_getpid();
29 |
30 | if (setsid() == -1) { //setsid创建一个新会话
31 | ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "setsid() failed");
32 | return NGX_ERROR;
33 | }
34 |
35 | umask(0);
36 |
37 | //打开文件/dev/null,使得其拥有守护进程的0,1,2。这样防止守护进程在终端设备上显示输出
38 | fd = open("/dev/null", O_RDWR);
39 | if (fd == -1) {
40 | ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
41 | "open(\"/dev/null\") failed");
42 | return NGX_ERROR;
43 | }
44 |
45 | if (dup2(fd, STDIN_FILENO) == -1) {
46 | ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "dup2(STDIN) failed");
47 | return NGX_ERROR;
48 | }
49 |
50 | if (dup2(fd, STDOUT_FILENO) == -1) {
51 | ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "dup2(STDOUT) failed");
52 | return NGX_ERROR;
53 | }
54 |
55 | #if 0
56 | if (dup2(fd, STDERR_FILENO) == -1) {
57 | ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "dup2(STDERR) failed");
58 | return NGX_ERROR;
59 | }
60 | #endif
61 |
62 | if (fd > STDERR_FILENO) {
63 | if (close(fd) == -1) { //关闭不需要的文件描述符
64 | ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "close() failed");
65 | return NGX_ERROR;
66 | }
67 | }
68 |
69 | return NGX_OK;
70 | }
71 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_solaris_init.c:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #include
9 | #include
10 |
11 |
12 | char ngx_solaris_sysname[20];
13 | char ngx_solaris_release[10];
14 | char ngx_solaris_version[50];
15 |
16 |
17 | static ngx_os_io_t ngx_solaris_io = {
18 | ngx_unix_recv,
19 | ngx_readv_chain,
20 | ngx_udp_unix_recv,
21 | ngx_unix_send,
22 | #if (NGX_HAVE_SENDFILE)
23 | ngx_solaris_sendfilev_chain,
24 | NGX_IO_SENDFILE
25 | #else
26 | ngx_writev_chain,
27 | 0
28 | #endif
29 | };
30 |
31 |
32 | ngx_int_t
33 | ngx_os_specific_init(ngx_log_t *log)
34 | {
35 | if (sysinfo(SI_SYSNAME, ngx_solaris_sysname, sizeof(ngx_solaris_sysname))
36 | == -1)
37 | {
38 | ngx_log_error(NGX_LOG_ALERT, log, ngx_errno,
39 | "sysinfo(SI_SYSNAME) failed");
40 | return NGX_ERROR;
41 | }
42 |
43 | if (sysinfo(SI_RELEASE, ngx_solaris_release, sizeof(ngx_solaris_release))
44 | == -1)
45 | {
46 | ngx_log_error(NGX_LOG_ALERT, log, ngx_errno,
47 | "sysinfo(SI_RELEASE) failed");
48 | return NGX_ERROR;
49 | }
50 |
51 | if (sysinfo(SI_VERSION, ngx_solaris_version, sizeof(ngx_solaris_version))
52 | == -1)
53 | {
54 | ngx_log_error(NGX_LOG_ALERT, log, ngx_errno,
55 | "sysinfo(SI_SYSNAME) failed");
56 | return NGX_ERROR;
57 | }
58 |
59 |
60 | ngx_os_io = ngx_solaris_io;
61 |
62 | return NGX_OK;
63 | }
64 |
65 |
66 | void
67 | ngx_os_specific_status(ngx_log_t *log)
68 | {
69 |
70 | ngx_log_error(NGX_LOG_NOTICE, log, 0, "OS: %s %s",
71 | ngx_solaris_sysname, ngx_solaris_release);
72 |
73 | ngx_log_error(NGX_LOG_NOTICE, log, 0, "version: %s",
74 | ngx_solaris_version);
75 | }
76 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_send.c:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #include
9 | #include
10 | #include
11 |
12 |
13 | ssize_t
14 | ngx_unix_send(ngx_connection_t *c, u_char *buf, size_t size)
15 | {
16 | ssize_t n;
17 | ngx_err_t err;
18 | ngx_event_t *wev;
19 |
20 | wev = c->write;
21 |
22 | #if (NGX_HAVE_KQUEUE)
23 |
24 | if ((ngx_event_flags & NGX_USE_KQUEUE_EVENT) && wev->pending_eof) {
25 | (void) ngx_connection_error(c, wev->kq_errno,
26 | "kevent() reported about an closed connection");
27 | wev->error = 1;
28 | return NGX_ERROR;
29 | }
30 |
31 | #endif
32 |
33 | for ( ;; ) {
34 | n = send(c->fd, buf, size, 0);
35 |
36 | ngx_log_debug3(NGX_LOG_DEBUG_EVENT, c->log, 0,
37 | "send: fd:%d %d of %d", c->fd, n, size);
38 |
39 | if (n > 0) {
40 | if (n < (ssize_t) size) {
41 | wev->ready = 0;
42 | }
43 |
44 | c->sent += n;
45 |
46 | return n;
47 | }
48 |
49 | err = ngx_socket_errno;
50 |
51 | if (n == 0) {
52 | ngx_log_error(NGX_LOG_ALERT, c->log, err, "send() returned zero");
53 | wev->ready = 0;
54 | return n;
55 | }
56 |
57 | if (err == NGX_EAGAIN || err == NGX_EINTR) {
58 | wev->ready = 0;
59 |
60 | ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
61 | "send() not ready");
62 |
63 | if (err == NGX_EAGAIN) {
64 | return NGX_AGAIN;
65 | }
66 |
67 | } else {
68 | wev->error = 1;
69 | (void) ngx_connection_error(c, err, "send() failed");
70 | return NGX_ERROR;
71 | }
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/auto/lib/openssl/make:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | case "$CC" in
7 |
8 | cl)
9 |
10 | cat << END >> $NGX_MAKEFILE
11 |
12 | $OPENSSL/openssl/include/openssl/ssl.h: $NGX_MAKEFILE
13 | \$(MAKE) -f auto/lib/openssl/makefile.msvc \
14 | OPENSSL="$OPENSSL" OPENSSL_OPT="$OPENSSL_OPT"
15 |
16 | END
17 |
18 | ;;
19 |
20 | bcc32)
21 |
22 | ngx_opt=`echo "-DOPENSSL=\"$OPENSSL\" -DOPENSSL_OPT=\"$OPENSSL_OPT\"" \
23 | | sed -e "s/\//$ngx_regex_dirsep/g"`
24 |
25 | cat << END >> $NGX_MAKEFILE
26 |
27 | `echo "$OPENSSL\\openssl\\lib\\libeay32.lib: \
28 | $OPENSSL\\openssl\\include\\openssl\\ssl.h" \
29 | | sed -e "s/\//$ngx_regex_dirsep/g"`
30 |
31 | `echo "$OPENSSL\\openssl\\lib\\ssleay32.lib: \
32 | $OPENSSL\\openssl\\include\\openssl\\ssl.h" \
33 | | sed -e "s/\//$ngx_regex_dirsep/g"`
34 |
35 | `echo "$OPENSSL\\openssl\\include\\openssl\\ssl.h: $NGX_MAKEFILE" \
36 | | sed -e "s/\//$ngx_regex_dirsep/g"`
37 | \$(MAKE) -f auto/lib/openssl/makefile.bcc $ngx_opt
38 |
39 | END
40 |
41 | ;;
42 |
43 | *)
44 | case $USE_THREADS in
45 | NO) OPENSSL_OPT="$OPENSSL_OPT no-threads" ;;
46 | *) OPENSSL_OPT="$OPENSSL_OPT threads" ;;
47 | esac
48 |
49 | case $OPENSSL in
50 | /*) ngx_prefix="$OPENSSL/.openssl" ;;
51 | *) ngx_prefix="$PWD/$OPENSSL/.openssl" ;;
52 | esac
53 |
54 | cat << END >> $NGX_MAKEFILE
55 |
56 | $OPENSSL/.openssl/include/openssl/ssl.h: $NGX_MAKEFILE
57 | cd $OPENSSL \\
58 | && \$(MAKE) clean \\
59 | && ./config --prefix=$ngx_prefix no-shared $OPENSSL_OPT \\
60 | && \$(MAKE) \\
61 | && \$(MAKE) install LIBDIR=lib
62 |
63 | END
64 |
65 | ;;
66 |
67 | esac
68 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_aio_read_chain.c:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #include
9 | #include
10 | #include
11 |
12 |
13 | ssize_t
14 | ngx_aio_read_chain(ngx_connection_t *c, ngx_chain_t *cl)
15 | {
16 | int n;
17 | u_char *buf, *prev;
18 | size_t size;
19 | ssize_t total;
20 |
21 | if (c->read->pending_eof) {
22 | c->read->ready = 0;
23 | return 0;
24 | }
25 |
26 | total = 0;
27 |
28 | while (cl) {
29 |
30 | /* we can post the single aio operation only */
31 |
32 | if (!c->read->ready) {
33 | return total ? total : NGX_AGAIN;
34 | }
35 |
36 | buf = cl->buf->last;
37 | prev = cl->buf->last;
38 | size = 0;
39 |
40 | /* coalesce the neighbouring bufs */
41 |
42 | while (cl && prev == cl->buf->last) {
43 | size += cl->buf->end - cl->buf->last;
44 | prev = cl->buf->end;
45 | cl = cl->next;
46 | }
47 |
48 | n = ngx_aio_read(c, buf, size);
49 |
50 | ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "aio_read: %d", n);
51 |
52 | if (n == NGX_AGAIN) {
53 | return total ? total : NGX_AGAIN;
54 | }
55 |
56 | if (n == NGX_ERROR) {
57 | return NGX_ERROR;
58 | }
59 |
60 | if (n == 0) {
61 | c->read->pending_eof = 1;
62 | if (total) {
63 | c->read->eof = 0;
64 | c->read->ready = 1;
65 | }
66 | return total;
67 | }
68 |
69 | if (n > 0) {
70 | total += n;
71 | }
72 |
73 | ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
74 | "aio_read total: %d", total);
75 | }
76 |
77 | return total ? total : NGX_AGAIN;
78 | }
79 |
--------------------------------------------------------------------------------
/src/event/ngx_event_busy_lock.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_EVENT_BUSY_LOCK_H_INCLUDED_
9 | #define _NGX_EVENT_BUSY_LOCK_H_INCLUDED_
10 |
11 |
12 | #include
13 | #include
14 | #include
15 |
16 | typedef struct ngx_event_busy_lock_ctx_s ngx_event_busy_lock_ctx_t;
17 |
18 | struct ngx_event_busy_lock_ctx_s {
19 | ngx_event_t *event;
20 | ngx_event_handler_pt handler;
21 | void *data;
22 | ngx_msec_t timer;
23 |
24 | unsigned locked:1;
25 | unsigned waiting:1;
26 | unsigned cache_updated:1;
27 |
28 | char *md5;
29 | ngx_int_t slot;
30 |
31 | ngx_event_busy_lock_ctx_t *next;
32 | };
33 |
34 |
35 | typedef struct {
36 | u_char *md5_mask;
37 | char *md5;
38 | ngx_uint_t cacheable;
39 |
40 | ngx_uint_t busy;
41 | ngx_uint_t max_busy;
42 |
43 | ngx_uint_t waiting;
44 | ngx_uint_t max_waiting;
45 |
46 | ngx_event_busy_lock_ctx_t *events;
47 | ngx_event_busy_lock_ctx_t *last;
48 |
49 | #if (NGX_THREADS)
50 | ngx_mutex_t *mutex;
51 | #endif
52 | } ngx_event_busy_lock_t;
53 |
54 |
55 | ngx_int_t ngx_event_busy_lock(ngx_event_busy_lock_t *bl,
56 | ngx_event_busy_lock_ctx_t *ctx);
57 | ngx_int_t ngx_event_busy_lock_cacheable(ngx_event_busy_lock_t *bl,
58 | ngx_event_busy_lock_ctx_t *ctx);
59 | void ngx_event_busy_unlock(ngx_event_busy_lock_t *bl,
60 | ngx_event_busy_lock_ctx_t *ctx);
61 | void ngx_event_busy_lock_cancel(ngx_event_busy_lock_t *bl,
62 | ngx_event_busy_lock_ctx_t *ctx);
63 |
64 |
65 | #endif /* _NGX_EVENT_BUSY_LOCK_H_INCLUDED_ */
66 |
--------------------------------------------------------------------------------
/auto/lib/libgd/conf:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | ngx_feature="GD library"
7 | ngx_feature_name=
8 | ngx_feature_run=no
9 | ngx_feature_incs="#include "
10 | ngx_feature_path=
11 | ngx_feature_libs="-lgd"
12 | ngx_feature_test="gdImagePtr img = gdImageCreateFromGifPtr(1, NULL);"
13 | . auto/feature
14 |
15 |
16 | if [ $ngx_found = no ]; then
17 |
18 | # FreeBSD port
19 |
20 | ngx_feature="GD library in /usr/local/"
21 | ngx_feature_path="/usr/local/include"
22 |
23 | if [ $NGX_RPATH = YES ]; then
24 | ngx_feature_libs="-R/usr/local/lib -L/usr/local/lib -lgd"
25 | else
26 | ngx_feature_libs="-L/usr/local/lib -lgd"
27 | fi
28 |
29 | . auto/feature
30 | fi
31 |
32 |
33 | if [ $ngx_found = no ]; then
34 |
35 | # NetBSD port
36 |
37 | ngx_feature="GD library in /usr/pkg/"
38 | ngx_feature_path="/usr/pkg/include/"
39 |
40 | if [ $NGX_RPATH = YES ]; then
41 | ngx_feature_libs="-R/usr/pkg/lib -L/usr/pkg/lib -lgd"
42 | else
43 | ngx_feature_libs="-L/usr/pkg/lib -lgd"
44 | fi
45 |
46 | . auto/feature
47 | fi
48 |
49 |
50 | if [ $ngx_found = no ]; then
51 |
52 | # MacPorts
53 |
54 | ngx_feature="GD library in /opt/local/"
55 | ngx_feature_path="/opt/local/include"
56 |
57 | if [ $NGX_RPATH = YES ]; then
58 | ngx_feature_libs="-R/opt/local/lib -L/opt/local/lib -lgd"
59 | else
60 | ngx_feature_libs="-L/opt/local/lib -lgd"
61 | fi
62 |
63 | . auto/feature
64 | fi
65 |
66 |
67 | if [ $ngx_found = yes ]; then
68 |
69 | CORE_INCS="$CORE_INCS $ngx_feature_path"
70 | CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
71 |
72 | else
73 |
74 | cat << END
75 |
76 | $0: error: the HTTP image filter module requires the GD library.
77 | You can either do not enable the module or install the libraries.
78 |
79 | END
80 |
81 | exit 1
82 |
83 | fi
84 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_gcc_atomic_amd64.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #if (NGX_SMP)
9 | #define NGX_SMP_LOCK "lock;"
10 | #else
11 | #define NGX_SMP_LOCK
12 | #endif
13 |
14 |
15 | /*
16 | * "cmpxchgq r, [m]":
17 | *
18 | * if (rax == [m]) {
19 | * zf = 1;
20 | * [m] = r;
21 | * } else {
22 | * zf = 0;
23 | * rax = [m];
24 | * }
25 | *
26 | *
27 | * The "r" is any register, %rax (%r0) - %r16.
28 | * The "=a" and "a" are the %rax register.
29 | * Although we can return result in any register, we use "a" because it is
30 | * used in cmpxchgq anyway. The result is actually in %al but not in $rax,
31 | * however as the code is inlined gcc can test %al as well as %rax.
32 | *
33 | * The "cc" means that flags were changed.
34 | */
35 |
36 | static ngx_inline ngx_atomic_uint_t
37 | ngx_atomic_cmp_set(ngx_atomic_t *lock, ngx_atomic_uint_t old,
38 | ngx_atomic_uint_t set)
39 | {
40 | u_char res;
41 |
42 | __asm__ volatile (
43 |
44 | NGX_SMP_LOCK
45 | " cmpxchgq %3, %1; "
46 | " sete %0; "
47 |
48 | : "=a" (res) : "m" (*lock), "a" (old), "r" (set) : "cc", "memory");
49 |
50 | return res;
51 | }
52 |
53 |
54 | /*
55 | * "xaddq r, [m]":
56 | *
57 | * temp = [m];
58 | * [m] += r;
59 | * r = temp;
60 | *
61 | *
62 | * The "+r" is any register, %rax (%r0) - %r16.
63 | * The "cc" means that flags were changed.
64 | */
65 |
66 | static ngx_inline ngx_atomic_int_t
67 | ngx_atomic_fetch_add(ngx_atomic_t *value, ngx_atomic_int_t add)
68 | {
69 | __asm__ volatile (
70 |
71 | NGX_SMP_LOCK
72 | " xaddq %0, %1; "
73 |
74 | : "+r" (add) : "m" (*value) : "cc", "memory");
75 |
76 | return add;
77 | }
78 |
79 |
80 | #define ngx_memory_barrier() __asm__ volatile ("" ::: "memory")
81 |
82 | #define ngx_cpu_pause() __asm__ ("pause")
83 |
--------------------------------------------------------------------------------
/auto/types/sizeof:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | echo $ngx_n "checking for $ngx_type size ...$ngx_c"
7 |
8 | cat << END >> $NGX_AUTOCONF_ERR
9 |
10 | ----------------------------------------
11 | checking for $ngx_type size
12 |
13 | END
14 |
15 | ngx_size=
16 |
17 | cat << END > $NGX_AUTOTEST.c
18 |
19 | #include
20 | #include
21 | $NGX_INCLUDE_UNISTD_H
22 | #include
23 | #include
24 | $NGX_INCLUDE_INTTYPES_H
25 | $NGX_INCLUDE_AUTO_CONFIG_H
26 |
27 | int main() {
28 | printf("%d", sizeof($ngx_type));
29 | return 0;
30 | }
31 |
32 | END
33 |
34 |
35 | ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS \
36 | -o $NGX_AUTOTEST $NGX_AUTOTEST.c $NGX_LD_OPT $ngx_feature_libs"
37 |
38 | eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"
39 |
40 |
41 | if [ -x $NGX_AUTOTEST ]; then
42 | ngx_size=`$NGX_AUTOTEST`
43 | echo " $ngx_size bytes"
44 | fi
45 |
46 |
47 | rm -f $NGX_AUTOTEST
48 |
49 |
50 | case $ngx_size in
51 | 4)
52 | if [ "$ngx_type"="long" ]; then
53 | ngx_max_value=2147483647L
54 | else
55 | ngx_max_value=2147483647
56 | fi
57 |
58 | ngx_max_len='(sizeof("-2147483648") - 1)'
59 | ;;
60 |
61 | 8)
62 | if [ "$ngx_type"="long long" ]; then
63 | ngx_max_value=9223372036854775807LL
64 | else
65 | ngx_max_value=9223372036854775807L
66 | fi
67 |
68 | ngx_max_len='(sizeof("-9223372036854775808") - 1)'
69 | ;;
70 |
71 | *)
72 | echo
73 | echo "$0: error: can not detect $ngx_type size"
74 |
75 | echo "----------" >> $NGX_AUTOCONF_ERR
76 | cat $NGX_AUTOTEST.c >> $NGX_AUTOCONF_ERR
77 | echo "----------" >> $NGX_AUTOCONF_ERR
78 | echo $ngx_test >> $NGX_AUTOCONF_ERR
79 | echo "----------" >> $NGX_AUTOCONF_ERR
80 |
81 | exit 1
82 | esac
83 |
84 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_gcc_atomic_sparc64.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | /*
9 | * "casa [r1] 0x80, r2, r0" and
10 | * "casxa [r1] 0x80, r2, r0" do the following:
11 | *
12 | * if ([r1] == r2) {
13 | * swap(r0, [r1]);
14 | * } else {
15 | * r0 = [r1];
16 | * }
17 | *
18 | * so "r0 == r2" means that the operation was successfull.
19 | *
20 | *
21 | * The "r" means the general register.
22 | * The "+r" means the general register used for both input and output.
23 | */
24 |
25 |
26 | #if (NGX_PTR_SIZE == 4)
27 | #define NGX_CASA "casa"
28 | #else
29 | #define NGX_CASA "casxa"
30 | #endif
31 |
32 |
33 | static ngx_inline ngx_atomic_uint_t
34 | ngx_atomic_cmp_set(ngx_atomic_t *lock, ngx_atomic_uint_t old,
35 | ngx_atomic_uint_t set)
36 | {
37 | __asm__ volatile (
38 |
39 | NGX_CASA " [%1] 0x80, %2, %0"
40 |
41 | : "+r" (set) : "r" (lock), "r" (old) : "memory");
42 |
43 | return (set == old);
44 | }
45 |
46 |
47 | static ngx_inline ngx_atomic_int_t
48 | ngx_atomic_fetch_add(ngx_atomic_t *value, ngx_atomic_int_t add)
49 | {
50 | ngx_atomic_uint_t old, res;
51 |
52 | old = *value;
53 |
54 | for ( ;; ) {
55 |
56 | res = old + add;
57 |
58 | __asm__ volatile (
59 |
60 | NGX_CASA " [%1] 0x80, %2, %0"
61 |
62 | : "+r" (res) : "r" (value), "r" (old) : "memory");
63 |
64 | if (res == old) {
65 | return res;
66 | }
67 |
68 | old = res;
69 | }
70 | }
71 |
72 |
73 | #if (NGX_SMP)
74 | #define ngx_memory_barrier() \
75 | __asm__ volatile ( \
76 | "membar #LoadLoad | #LoadStore | #StoreStore | #StoreLoad" \
77 | ::: "memory")
78 | #else
79 | #define ngx_memory_barrier() __asm__ volatile ("" ::: "memory")
80 | #endif
81 |
82 | #define ngx_cpu_pause()
83 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_darwin_config.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_DARWIN_CONFIG_H_INCLUDED_
9 | #define _NGX_DARWIN_CONFIG_H_INCLUDED_
10 |
11 |
12 | #define MAC_OS_X_VERSION_MIN_REQUIRED MAC_OS_X_VERSION_10_0
13 |
14 |
15 | #include
16 | #include
17 | #include
18 | #include
19 | #include
20 | #include /* offsetof() */
21 | #include
22 | #include
23 | #include
24 | #include
25 | #include
26 | #include
27 | #include
28 | #include
29 | #include
30 | #include /* statfs() */
31 |
32 | #include /* FIONBIO */
33 | #include
34 | #include
35 | #include
36 | #include
37 |
38 | #include
39 | #include
40 | #include
41 | #include
42 |
43 | #include
44 | #include
45 | #include /* TCP_NODELAY */
46 | #include
47 | #include
48 | #include
49 |
50 | #include
51 | #include
52 |
53 |
54 | #ifndef IOV_MAX
55 | #define IOV_MAX 64
56 | #endif
57 |
58 |
59 | #include
60 |
61 |
62 | #if (NGX_HAVE_POSIX_SEM)
63 | #include
64 | #endif
65 |
66 |
67 | #if (NGX_HAVE_POLL)
68 | #include
69 | #endif
70 |
71 |
72 | #if (NGX_HAVE_KQUEUE)
73 | #include
74 | #endif
75 |
76 |
77 | #define NGX_LISTEN_BACKLOG -1
78 |
79 |
80 | #ifndef NGX_HAVE_INHERITED_NONBLOCK
81 | #define NGX_HAVE_INHERITED_NONBLOCK 1
82 | #endif
83 |
84 |
85 | #ifndef NGX_HAVE_CASELESS_FILESYSTEM
86 | #define NGX_HAVE_CASELESS_FILESYSTEM 1
87 | #endif
88 |
89 |
90 | #define NGX_HAVE_OS_SPECIFIC_INIT 1
91 |
92 |
93 | extern char **environ;
94 |
95 |
96 | #endif /* _NGX_DARWIN_CONFIG_H_INCLUDED_ */
97 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_errno.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_ERRNO_H_INCLUDED_
9 | #define _NGX_ERRNO_H_INCLUDED_
10 |
11 |
12 | #include
13 | #include
14 |
15 |
16 | typedef int ngx_err_t;
17 |
18 | #define NGX_EPERM EPERM
19 | #define NGX_ENOENT ENOENT
20 | #define NGX_ENOPATH ENOENT
21 | #define NGX_ESRCH ESRCH
22 | #define NGX_EINTR EINTR
23 | #define NGX_ECHILD ECHILD
24 | #define NGX_ENOMEM ENOMEM
25 | #define NGX_EACCES EACCES
26 | #define NGX_EBUSY EBUSY
27 | #define NGX_EEXIST EEXIST
28 | #define NGX_EXDEV EXDEV
29 | #define NGX_ENOTDIR ENOTDIR
30 | #define NGX_EISDIR EISDIR
31 | #define NGX_EINVAL EINVAL
32 | #define NGX_ENOSPC ENOSPC
33 | #define NGX_EPIPE EPIPE
34 | #define NGX_EINPROGRESS EINPROGRESS
35 | #define NGX_EADDRINUSE EADDRINUSE
36 | #define NGX_ECONNABORTED ECONNABORTED
37 | #define NGX_ECONNRESET ECONNRESET
38 | #define NGX_ENOTCONN ENOTCONN
39 | #define NGX_ETIMEDOUT ETIMEDOUT
40 | #define NGX_ECONNREFUSED ECONNREFUSED
41 | #define NGX_ENAMETOOLONG ENAMETOOLONG
42 | #define NGX_ENETDOWN ENETDOWN
43 | #define NGX_ENETUNREACH ENETUNREACH
44 | #define NGX_EHOSTDOWN EHOSTDOWN
45 | #define NGX_EHOSTUNREACH EHOSTUNREACH
46 | #define NGX_ENOSYS ENOSYS
47 | #define NGX_ECANCELED ECANCELED
48 | #define NGX_EILSEQ EILSEQ
49 | #define NGX_ENOMOREFILES 0
50 |
51 | #if (__hpux__)
52 | #define NGX_EAGAIN EWOULDBLOCK
53 | #else
54 | #define NGX_EAGAIN EAGAIN
55 | #endif
56 |
57 |
58 | #define ngx_errno errno
59 | #define ngx_socket_errno errno
60 | #define ngx_set_errno(err) errno = err
61 | #define ngx_set_socket_errno(err) errno = err
62 |
63 |
64 | u_char *ngx_strerror(ngx_err_t err, u_char *errstr, size_t size);
65 | ngx_uint_t ngx_strerror_init(void);
66 |
67 |
68 | #endif /* _NGX_ERRNO_H_INCLUDED_ */
69 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_alloc.c:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #include
9 | #include
10 |
11 |
12 | ngx_uint_t ngx_pagesize;
13 | ngx_uint_t ngx_pagesize_shift;
14 | ngx_uint_t ngx_cacheline_size;
15 |
16 |
17 | void *
18 | ngx_alloc(size_t size, ngx_log_t *log)
19 | {
20 | void *p;
21 |
22 | p = malloc(size);
23 | if (p == NULL) {
24 | ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
25 | "malloc(%uz) failed", size);
26 | }
27 |
28 | ngx_log_debug2(NGX_LOG_DEBUG_ALLOC, log, 0, "malloc: %p:%uz", p, size);
29 |
30 | return p;
31 | }
32 |
33 | /* 该函数从系统内存分配内存,而不是内存池,另外该函数还会对内存进行初始化,这就是两个不同点*/
34 | void *
35 | ngx_calloc(size_t size, ngx_log_t *log)
36 | {
37 | void *p;
38 |
39 | p = ngx_alloc(size, log);
40 |
41 | if (p) {
42 | ngx_memzero(p, size);
43 | }
44 |
45 | return p;
46 | }
47 |
48 |
49 | #if (NGX_HAVE_POSIX_MEMALIGN)
50 |
51 | void *
52 | ngx_memalign(size_t alignment, size_t size, ngx_log_t *log)
53 | {
54 | void *p;
55 | int err;
56 |
57 | err = posix_memalign(&p, alignment, size);
58 |
59 | if (err) {
60 | ngx_log_error(NGX_LOG_EMERG, log, err,
61 | "posix_memalign(%uz, %uz) failed", alignment, size);
62 | p = NULL;
63 | }
64 |
65 | ngx_log_debug3(NGX_LOG_DEBUG_ALLOC, log, 0,
66 | "posix_memalign: %p:%uz @%uz", p, size, alignment);
67 |
68 | return p;
69 | }
70 |
71 | #elif (NGX_HAVE_MEMALIGN)
72 |
73 | void *
74 | ngx_memalign(size_t alignment, size_t size, ngx_log_t *log)
75 | {
76 | void *p;
77 |
78 | p = memalign(alignment, size);
79 | if (p == NULL) {
80 | ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
81 | "memalign(%uz, %uz) failed", alignment, size);
82 | }
83 |
84 | ngx_log_debug3(NGX_LOG_DEBUG_ALLOC, log, 0,
85 | "memalign: %p:%uz @%uz", p, size, alignment);
86 |
87 | return p;
88 | }
89 |
90 | #endif
91 |
--------------------------------------------------------------------------------
/auto/lib/perl/conf:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | echo "checking for perl"
7 |
8 |
9 | NGX_PERL_VER=`$NGX_PERL -v 2>&1 | grep '^This is perl' 2>&1 \
10 | | sed -e 's/^This is perl, \(.*\)/\1/'`
11 |
12 | if test -n "$NGX_PERL_VER"; then
13 | echo " + perl version: $NGX_PERL_VER"
14 |
15 | if [ "`echo 'use 5.006001; print "OK"' | $NGX_PERL 2>&1`" != OK ]; then
16 | echo
17 | echo "$0: error: perl 5.6.1 or higher is required"
18 | echo
19 |
20 | exit 1;
21 | fi
22 |
23 | NGX_PERL_CFLAGS="$CFLAGS `$NGX_PERL -MExtUtils::Embed -e ccopts`"
24 | NGX_PM_CFLAGS=`$NGX_PERL -MExtUtils::Embed -e ccopts`
25 |
26 | # gcc 4.1/4.2 warn about unused values in pTHX_
27 | NGX_PERL_CFLAGS=`echo $NGX_PERL_CFLAGS \
28 | | sed -e 's/-Wunused-value/-Wno-unused-value/'`
29 | # icc8 warns 'declaration hides parameter "my_perl"' in ENTER and LEAVE
30 | NGX_PERL_CFLAGS=`echo $NGX_PERL_CFLAGS \
31 | | sed -e 's/-wd171/-wd171 -wd1599/'`
32 |
33 | ngx_perl_ldopts=`$NGX_PERL -MExtUtils::Embed -e ldopts`
34 |
35 | if $NGX_PERL -V:usemultiplicity | grep define > /dev/null; then
36 | have=NGX_HAVE_PERL_MULTIPLICITY . auto/have
37 | echo " + perl interpreter multiplicity found"
38 | fi
39 |
40 | if $NGX_PERL -V:useithreads | grep undef > /dev/null; then
41 | # FreeBSD port wants to link with -pthread non-threaded perl
42 | ngx_perl_ldopts=`echo $ngx_perl_ldopts | sed 's/ -pthread//'`
43 | fi
44 |
45 | CORE_LINK="$CORE_LINK $ngx_perl_ldopts"
46 | LINK_DEPS="$LINK_DEPS $NGX_OBJS/src/http/modules/perl/blib/arch/auto/nginx/nginx.so"
47 |
48 | if test -n "$NGX_PERL_MODULES"; then
49 | have=NGX_PERL_MODULES value="(u_char *) \"$NGX_PERL_MODULES\""
50 | . auto/define
51 | NGX_PERL_MODULES_MAN=$NGX_PERL_MODULES/man3
52 | fi
53 |
54 | else
55 | echo
56 | echo "$0: error: perl 5.6.1 or higher is required"
57 | echo
58 |
59 | exit 1;
60 | fi
61 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_time.c:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #include
9 | #include
10 |
11 |
12 | /*
13 | * FreeBSD does not test /etc/localtime change, however, we can workaround it
14 | * by calling tzset() with TZ and then without TZ to update timezone.
15 | * The trick should work since FreeBSD 2.1.0.
16 | *
17 | * Linux does not test /etc/localtime change in localtime(),
18 | * but may stat("/etc/localtime") several times in every strftime(),
19 | * therefore we use it to update timezone.
20 | *
21 | * Solaris does not test /etc/TIMEZONE change too and no workaround available.
22 | */
23 |
24 | void
25 | ngx_timezone_update(void)
26 | {
27 | #if (NGX_FREEBSD)
28 |
29 | if (getenv("TZ")) {
30 | return;
31 | }
32 |
33 | putenv("TZ=UTC");
34 |
35 | tzset();
36 |
37 | unsetenv("TZ");
38 |
39 | tzset();
40 |
41 | #elif (NGX_LINUX)
42 | time_t s;
43 | struct tm *t;
44 | char buf[4];
45 |
46 | s = time(0);
47 |
48 | t = localtime(&s);
49 |
50 | strftime(buf, 4, "%H", t);
51 |
52 | #endif
53 | }
54 |
55 |
56 | void
57 | ngx_localtime(time_t s, ngx_tm_t *tm)
58 | {
59 | #if (NGX_HAVE_LOCALTIME_R)
60 | (void) localtime_r(&s, tm);
61 |
62 | #else
63 | ngx_tm_t *t;
64 |
65 | t = localtime(&s);
66 | *tm = *t;
67 |
68 | #endif
69 |
70 | tm->ngx_tm_mon++;
71 | tm->ngx_tm_year += 1900;
72 | }
73 |
74 |
75 | void
76 | ngx_libc_localtime(time_t s, struct tm *tm)
77 | {
78 | #if (NGX_HAVE_LOCALTIME_R)
79 | (void) localtime_r(&s, tm);
80 |
81 | #else
82 | struct tm *t;
83 |
84 | t = localtime(&s);
85 | *tm = *t;
86 |
87 | #endif
88 | }
89 |
90 |
91 | void
92 | ngx_libc_gmtime(time_t s, struct tm *tm)
93 | {
94 | #if (NGX_HAVE_LOCALTIME_R)
95 | (void) gmtime_r(&s, tm);
96 |
97 | #else
98 | struct tm *t;
99 |
100 | t = gmtime(&s);
101 | *tm = *t;
102 |
103 | #endif
104 | }
105 |
--------------------------------------------------------------------------------
/auto/lib/sha1/conf:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | if [ $SHA1 != NONE ]; then
7 |
8 | have=NGX_HAVE_SHA1 . auto/have
9 | CORE_INCS="$CORE_INCS $SHA1"
10 |
11 | case "$NGX_CC_NAME" in
12 |
13 | msvc* | owc* | bcc)
14 | LINK_DEPS="$LINK_DEPS $SHA1/sha1.lib"
15 | CORE_LIBS="$CORE_LIBS $SHA1/sha1.lib"
16 | ;;
17 |
18 | icc*)
19 | LINK_DEPS="$LINK_DEPS $SHA1/libsha.a"
20 |
21 | # to allow -ipo optimization we link with the *.o but not library
22 | CORE_LIBS="$CORE_LIBS $SHA1/sha1_dgst.o"
23 |
24 | if [ $SHA1_ASM = YES ]; then
25 | CORE_LIBS="$CORE_LIBS $SHA1/asm/sx86-elf.o"
26 | fi
27 | ;;
28 |
29 | *)
30 | LINK_DEPS="$LINK_DEPS $SHA1/libsha.a"
31 | CORE_LIBS="$CORE_LIBS $SHA1/libsha.a"
32 | #CORE_LIBS="$CORE_LIBS -L $SHA1 -lsha"
33 | ;;
34 |
35 | esac
36 |
37 | else
38 |
39 | if [ "$NGX_PLATFORM" != win32 ]; then
40 |
41 | SHA1=NO
42 |
43 | # FreeBSD
44 |
45 | ngx_feature="sha1 in system md library"
46 | ngx_feature_name=NGX_HAVE_SHA1
47 | ngx_feature_run=no
48 | ngx_feature_incs="#include "
49 | ngx_feature_path=
50 | ngx_feature_libs="-lmd"
51 | ngx_feature_test="SHA_CTX sha1; SHA1_Init(&sha1)"
52 | . auto/feature
53 |
54 | ngx_sha1_lib="system md"
55 |
56 | if [ $ngx_found = no ]; then
57 |
58 | # OpenSSL crypto library
59 |
60 | ngx_feature="OpenSSL sha1 crypto library"
61 | ngx_feature_incs="#include "
62 | ngx_feature_libs="-lcrypto"
63 | . auto/feature
64 |
65 | ngx_sha1_lib="system crypto"
66 |
67 | if [ $ngx_found = yes ]; then
68 | have=NGX_HAVE_OPENSSL_SHA1_H . auto/have
69 | fi
70 | fi
71 |
72 | if [ $ngx_found = yes ]; then
73 | CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
74 | SHA1=YES
75 | SHA1_LIB=$ngx_sha1_lib
76 | fi
77 | fi
78 |
79 | fi
80 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_linux_init.c:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #include
9 | #include
10 |
11 |
12 | u_char ngx_linux_kern_ostype[50];
13 | u_char ngx_linux_kern_osrelease[50];
14 |
15 | int ngx_linux_rtsig_max;
16 |
17 |
18 | static ngx_os_io_t ngx_linux_io = {
19 | ngx_unix_recv,
20 | ngx_readv_chain,
21 | ngx_udp_unix_recv,
22 | ngx_unix_send,
23 | #if (NGX_HAVE_SENDFILE)
24 | ngx_linux_sendfile_chain,
25 | NGX_IO_SENDFILE
26 | #else
27 | ngx_writev_chain,
28 | 0
29 | #endif
30 | };
31 |
32 |
33 | ngx_int_t
34 | ngx_os_specific_init(ngx_log_t *log)
35 | {
36 | struct utsname u;
37 |
38 | if (uname(&u) == -1) {
39 | ngx_log_error(NGX_LOG_ALERT, log, ngx_errno, "uname() failed");
40 | return NGX_ERROR;
41 | }
42 |
43 | (void) ngx_cpystrn(ngx_linux_kern_ostype, (u_char *) u.sysname,
44 | sizeof(ngx_linux_kern_ostype));
45 |
46 | (void) ngx_cpystrn(ngx_linux_kern_osrelease, (u_char *) u.release,
47 | sizeof(ngx_linux_kern_osrelease));
48 |
49 | #if (NGX_HAVE_RTSIG)
50 | {
51 | int name[2];
52 | size_t len;
53 | ngx_err_t err;
54 |
55 | name[0] = CTL_KERN;
56 | name[1] = KERN_RTSIGMAX;
57 | len = sizeof(ngx_linux_rtsig_max);
58 |
59 | if (sysctl(name, 2, &ngx_linux_rtsig_max, &len, NULL, 0) == -1) {
60 | err = ngx_errno;
61 |
62 | if (err != NGX_ENOTDIR && err != NGX_ENOSYS) {
63 | ngx_log_error(NGX_LOG_ALERT, log, err,
64 | "sysctl(KERN_RTSIGMAX) failed");
65 |
66 | return NGX_ERROR;
67 | }
68 |
69 | ngx_linux_rtsig_max = 0;
70 | }
71 |
72 | }
73 | #endif
74 |
75 | ngx_os_io = ngx_linux_io;
76 |
77 | return NGX_OK;
78 | }
79 |
80 |
81 | void
82 | ngx_os_specific_status(ngx_log_t *log)
83 | {
84 | ngx_log_error(NGX_LOG_NOTICE, log, 0, "OS: %s %s",
85 | ngx_linux_kern_ostype, ngx_linux_kern_osrelease);
86 |
87 | #if (NGX_HAVE_RTSIG)
88 | ngx_log_error(NGX_LOG_NOTICE, log, 0, "sysctl(KERN_RTSIGMAX): %d",
89 | ngx_linux_rtsig_max);
90 | #endif
91 | }
92 |
--------------------------------------------------------------------------------
/auto/lib/zlib/conf:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | if [ $ZLIB != NONE ]; then
7 | CORE_INCS="$CORE_INCS $ZLIB"
8 |
9 | case "$NGX_CC_NAME" in
10 |
11 | msvc* | owc* | bcc)
12 | LINK_DEPS="$LINK_DEPS $ZLIB/zlib.lib"
13 | CORE_LIBS="$CORE_LIBS $ZLIB/zlib.lib"
14 | ;;
15 |
16 | icc*)
17 | LINK_DEPS="$LINK_DEPS $ZLIB/libz.a"
18 |
19 | # to allow -ipo optimization we link with the *.o but not library
20 | CORE_LIBS="$CORE_LIBS $ZLIB/adler32.o"
21 | CORE_LIBS="$CORE_LIBS $ZLIB/crc32.o"
22 | CORE_LIBS="$CORE_LIBS $ZLIB/deflate.o"
23 | CORE_LIBS="$CORE_LIBS $ZLIB/trees.o"
24 | CORE_LIBS="$CORE_LIBS $ZLIB/zutil.o"
25 | CORE_LIBS="$CORE_LIBS $ZLIB/compress.o"
26 |
27 | if [ $ZLIB_ASM != NO ]; then
28 | CORE_LIBS="$CORE_LIBS $ZLIB/match.o"
29 | fi
30 | ;;
31 |
32 | *)
33 | LINK_DEPS="$LINK_DEPS $ZLIB/libz.a"
34 | CORE_LIBS="$CORE_LIBS $ZLIB/libz.a"
35 | #CORE_LIBS="$CORE_LIBS -L $ZLIB -lz"
36 | ;;
37 |
38 | esac
39 |
40 | else
41 |
42 | if [ "$NGX_PLATFORM" != win32 ]; then
43 | ZLIB=NO
44 |
45 | # FreeBSD, Solaris, Linux
46 |
47 | ngx_feature="zlib library"
48 | ngx_feature_name=
49 | ngx_feature_run=no
50 | ngx_feature_incs="#include "
51 | ngx_feature_path=
52 | ngx_feature_libs="-lz"
53 | ngx_feature_test="z_stream z; deflate(&z, Z_NO_FLUSH)"
54 | . auto/feature
55 |
56 |
57 | if [ $ngx_found = yes ]; then
58 | CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
59 | ZLIB=YES
60 | ngx_found=no
61 | fi
62 | fi
63 |
64 | if [ $ZLIB != YES ]; then
65 | cat << END
66 |
67 | $0: error: the HTTP gzip module requires the zlib library.
68 | You can either disable the module by using --without-http_gzip_module
69 | option, or install the zlib library into the system, or build the zlib library
70 | statically from the source with nginx by using --with-zlib= option.
71 |
72 | END
73 | exit 1
74 | fi
75 |
76 | fi
77 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_socket.c:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #include
9 | #include
10 |
11 |
12 | /*
13 | * ioctl(FIONBIO) sets a non-blocking mode with the single syscall
14 | * while fcntl(F_SETFL, O_NONBLOCK) needs to learn the current state
15 | * using fcntl(F_GETFL).
16 | *
17 | * ioctl() and fcntl() are syscalls at least in FreeBSD 2.x, Linux 2.2
18 | * and Solaris 7.
19 | *
20 | * ioctl() in Linux 2.4 and 2.6 uses BKL, however, fcntl(F_SETFL) uses it too.
21 | */
22 |
23 |
24 | #if (NGX_HAVE_FIONBIO)
25 |
26 | int
27 | ngx_nonblocking(ngx_socket_t s)
28 | {
29 | int nb;
30 |
31 | nb = 1;
32 |
33 | return ioctl(s, FIONBIO, &nb);
34 | }
35 |
36 |
37 | int
38 | ngx_blocking(ngx_socket_t s)
39 | {
40 | int nb;
41 |
42 | nb = 0;
43 |
44 | return ioctl(s, FIONBIO, &nb);
45 | }
46 |
47 | #endif
48 |
49 |
50 | #if (NGX_FREEBSD)
51 |
52 | int
53 | ngx_tcp_nopush(ngx_socket_t s)
54 | {
55 | int tcp_nopush;
56 |
57 | tcp_nopush = 1;
58 |
59 | return setsockopt(s, IPPROTO_TCP, TCP_NOPUSH,
60 | (const void *) &tcp_nopush, sizeof(int));
61 | }
62 |
63 |
64 | int
65 | ngx_tcp_push(ngx_socket_t s)
66 | {
67 | int tcp_nopush;
68 |
69 | tcp_nopush = 0;
70 |
71 | return setsockopt(s, IPPROTO_TCP, TCP_NOPUSH,
72 | (const void *) &tcp_nopush, sizeof(int));
73 | }
74 |
75 | #elif (NGX_LINUX)
76 |
77 |
78 | int
79 | ngx_tcp_nopush(ngx_socket_t s)
80 | {
81 | int cork;
82 |
83 | cork = 1;
84 |
85 | return setsockopt(s, IPPROTO_TCP, TCP_CORK,
86 | (const void *) &cork, sizeof(int));
87 | }
88 |
89 |
90 | int
91 | ngx_tcp_push(ngx_socket_t s)
92 | {
93 | int cork;
94 |
95 | cork = 0;
96 |
97 | return setsockopt(s, IPPROTO_TCP, TCP_CORK,
98 | (const void *) &cork, sizeof(int));
99 | }
100 |
101 | #else
102 |
103 | int
104 | ngx_tcp_nopush(ngx_socket_t s)
105 | {
106 | return 0;
107 | }
108 |
109 |
110 | int
111 | ngx_tcp_push(ngx_socket_t s)
112 | {
113 | return 0;
114 | }
115 |
116 | #endif
117 |
--------------------------------------------------------------------------------
/src/core/ngx_array.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 | //参考 http://blog.csdn.net/sunhappy2200/article/details/5915189
8 | // http://tengine.taobao.org/book/chapter_02.html#ngx-array-t-100
9 | #ifndef _NGX_ARRAY_H_INCLUDED_
10 | #define _NGX_ARRAY_H_INCLUDED_
11 |
12 |
13 | #include
14 | #include
15 |
16 | // 动态数组
17 | struct ngx_array_s {
18 | // elts指向数组的首地址
19 | void *elts;
20 | // nelts是数组中已经使用的元素个数
21 | ngx_uint_t nelts;
22 | // 每个数组元素占用的内存大小
23 | size_t size;
24 | // 当前数组中能够容纳元素个数的总大小
25 | ngx_uint_t nalloc;
26 | // 内存池对象
27 | ngx_pool_t *pool;
28 | };
29 |
30 | /*
31 | 从内存池中创建n个元素的数组,元素大小为size
32 | 创建一个新的数组对象,并返回这个对象。
33 |
34 | p: 数组分配内存使用的内存池;
35 | n: 数组的初始容量大小,即在不扩容的情况下最多可以容纳的元素个数。
36 | size: 单个元素的大小,单位是字节。
37 |
38 | 注意事项: 由于使用ngx_palloc分配内存,数组在扩容时,旧的内存不会被释放,会造成内存的浪费。
39 | 因此,最好能提前规划好数组的容量,在创建或者初始化的时候一次搞定,避免多次扩容,造成内存浪费。
40 | */
41 | ngx_array_t *ngx_array_create(ngx_pool_t *p, ngx_uint_t n, size_t size);
42 |
43 | // 销毁该数组对象,并释放其分配的内存回内存池。
44 | void ngx_array_destroy(ngx_array_t *a);
45 |
46 | // 在数组a上新追加一个元素,并返回指向新元素的指针。
47 | // 需要把返回的指针使用类型转换,转换为具体的类型,然后再给新元素本身或者是各字段(如果数组的元素是复杂类型)赋值。
48 | // 如果数组已满,则重新分配两倍(nalloc*size)的内存空间,且nalloc更新为2*nalloc
49 | void *ngx_array_push(ngx_array_t *a);
50 |
51 | // 返回将要添加n个元素到数组中其首个元素的地址
52 | void *ngx_array_push_n(ngx_array_t *a, ngx_uint_t n);
53 |
54 |
55 | // 如果一个数组对象是被分配在堆上的,那么当调用ngx_array_destroy销毁以后,如果想再次使用,就可以调用此函数。
56 | // 如果一个数组对象是被分配在栈上的,那么就需要调用此函数,进行初始化的工作以后,才可以使用。
57 | static ngx_inline ngx_int_t
58 | ngx_array_init(ngx_array_t *array, ngx_pool_t *pool, ngx_uint_t n, size_t size)
59 | {
60 | /*
61 | * set "array->nelts" before "array->elts", otherwise MSVC thinks
62 | * that "array->nelts" may be used without having been initialized
63 | */
64 |
65 | array->nelts = 0;
66 | array->size = size;
67 | array->nalloc = n;
68 | array->pool = pool;
69 |
70 | array->elts = ngx_palloc(pool, n * size);
71 | if (array->elts == NULL) {
72 | return NGX_ERROR;
73 | }
74 |
75 | return NGX_OK;
76 | }
77 |
78 |
79 | #endif /* _NGX_ARRAY_H_INCLUDED_ */
80 |
--------------------------------------------------------------------------------
/auto/lib/md5/make:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | case "$NGX_CC_NAME" in
7 |
8 | msvc*)
9 | ngx_makefile=makefile.msvc
10 | ngx_opt="CPU_OPT=\"$CPU_OPT\" LIBC=$LIBC MD5_ASM=$MD5_ASM"
11 | ngx_md5="MD5=\"$MD5\""
12 | ;;
13 |
14 | owc*)
15 | ngx_makefile=makefile.owc
16 | ngx_opt="CPU_OPT=\"$CPU_OPT\""
17 | ngx_md5=`echo MD5=\"$MD5\" | sed -e "s/\//$ngx_regex_dirsep/g"`
18 | ;;
19 |
20 | bcc)
21 | ngx_makefile=makefile.bcc
22 | ngx_opt="-DCPU_OPT=\"$CPU_OPT\" -DMD5_ASM=$MD5_ASM"
23 | ngx_md5=`echo \-DMD5=\"$MD5\" | sed -e "s/\//$ngx_regex_dirsep/g"`
24 | ;;
25 |
26 | esac
27 |
28 |
29 | done=NO
30 |
31 |
32 | case "$NGX_PLATFORM" in
33 |
34 | win32)
35 | cat << END >> $NGX_MAKEFILE
36 |
37 | `echo "$MD5/md5.lib: $NGX_MAKEFILE" | sed -e "s/\//$ngx_regex_dirsep/g"`
38 | \$(MAKE) -f auto/lib/md5/$ngx_makefile $ngx_opt $ngx_md5
39 |
40 | END
41 |
42 | done=YES
43 | ;;
44 |
45 | SunOS:*:i86pc)
46 | if [ $MD5_ASM = YES ]; then
47 |
48 | cat << END >> $NGX_MAKEFILE
49 |
50 | $MD5/libmd5.a: $NGX_MAKEFILE
51 | cd $MD5 \\
52 | && \$(MAKE) CFLAGS="$MD5_OPT -DSOL -DMD5_ASM -DL_ENDIAN" \\
53 | CC="\$(CC)" CPP="\$(CPP)" \\
54 | MD5_ASM_OBJ=asm/mx86-sol.o clean libmd5.a
55 |
56 | END
57 |
58 | done=YES
59 | fi
60 | ;;
61 |
62 | # FreeBSD: i386
63 | # Linux: i686
64 |
65 | *:i386 | *:i686)
66 | if [ $MD5_ASM = YES ]; then
67 |
68 | cat << END >> $NGX_MAKEFILE
69 |
70 | $MD5/libmd5.a: $NGX_MAKEFILE
71 | cd $MD5 \\
72 | && \$(MAKE) CFLAGS="$MD5_OPT -DELF -DMD5_ASM -DL_ENDIAN" \\
73 | CC="\$(CC)" CPP="\$(CPP)" \\
74 | MD5_ASM_OBJ=asm/mx86-elf.o clean libmd5.a
75 |
76 | END
77 |
78 | done=YES
79 | fi
80 | ;;
81 |
82 | esac
83 |
84 |
85 | if [ $done = NO ]; then
86 |
87 | cat << END >> $NGX_MAKEFILE
88 |
89 | $MD5/libmd5.a: $NGX_MAKEFILE
90 | cd $MD5 \\
91 | && \$(MAKE) CFLAGS="$MD5_OPT" \\
92 | CC="\$(CC)" MD5_ASM_OBJ= clean libmd5.a
93 |
94 | END
95 |
96 | fi
97 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_errno.c:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #include
9 | #include
10 |
11 |
12 | /*
13 | * The strerror() messages are copied because:
14 | *
15 | * 1) strerror() and strerror_r() functions are not Async-Signal-Safe,
16 | * therefore, they cannot be used in signal handlers;
17 | *
18 | * 2) a direct sys_errlist[] array may be used instead of these functions,
19 | * but Linux linker warns about its usage:
20 | *
21 | * warning: `sys_errlist' is deprecated; use `strerror' or `strerror_r' instead
22 | * warning: `sys_nerr' is deprecated; use `strerror' or `strerror_r' instead
23 | *
24 | * causing false bug reports.
25 | */
26 |
27 |
28 | static ngx_str_t *ngx_sys_errlist;
29 | static ngx_str_t ngx_unknown_error = ngx_string("Unknown error");
30 |
31 |
32 | u_char *
33 | ngx_strerror(ngx_err_t err, u_char *errstr, size_t size)
34 | {
35 | ngx_str_t *msg;
36 |
37 | msg = ((ngx_uint_t) err < NGX_SYS_NERR) ? &ngx_sys_errlist[err]:
38 | &ngx_unknown_error;
39 | size = ngx_min(size, msg->len);
40 |
41 | return ngx_cpymem(errstr, msg->data, size);
42 | }
43 |
44 |
45 | ngx_uint_t
46 | ngx_strerror_init(void)
47 | {
48 | char *msg;
49 | u_char *p;
50 | size_t len;
51 | ngx_err_t err;
52 |
53 | /*
54 | * ngx_strerror() is not ready to work at this stage, therefore,
55 | * malloc() is used and possible errors are logged using strerror().
56 | */
57 |
58 | len = NGX_SYS_NERR * sizeof(ngx_str_t);
59 |
60 | ngx_sys_errlist = malloc(len);
61 | if (ngx_sys_errlist == NULL) {
62 | goto failed;
63 | }
64 |
65 | for (err = 0; err < NGX_SYS_NERR; err++) {
66 | msg = strerror(err);
67 | len = ngx_strlen(msg);
68 |
69 | p = malloc(len);
70 | if (p == NULL) {
71 | goto failed;
72 | }
73 |
74 | ngx_memcpy(p, msg, len);
75 | ngx_sys_errlist[err].len = len;
76 | ngx_sys_errlist[err].data = p;
77 | }
78 |
79 | return NGX_OK;
80 |
81 | failed:
82 |
83 | err = errno;
84 | ngx_log_stderr(0, "malloc(%uz) failed (%d: %s)", len, err, strerror(err));
85 |
86 | return NGX_ERROR;
87 | }
88 |
--------------------------------------------------------------------------------
/auto/lib/sha1/make:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | case "$NGX_CC_NAME" in
7 |
8 | msvc*)
9 | ngx_makefile=makefile.msvc
10 | ngx_opt="CPU_OPT=\"$CPU_OPT\" LIBC=$LIBC SHA1_ASM=$SHA1_ASM"
11 | ngx_sha1="SHA1=\"$SHA1\""
12 | ;;
13 |
14 | owc*)
15 | ngx_makefile=makefile.owc
16 | ngx_opt="CPU_OPT=\"$CPU_OPT\""
17 | ngx_sha1=`echo SHA1=\"$SHA1\" | sed -e "s/\//$ngx_regex_dirsep/g"`
18 | ;;
19 |
20 | bcc)
21 | ngx_makefile=makefile.bcc
22 | ngx_opt="-DCPU_OPT=\"$CPU_OPT\" -DSHA1_ASM=$SHA1_ASM"
23 | ngx_sha1=`echo \-DSHA1=\"$SHA1\" | sed -e "s/\//$ngx_regex_dirsep/g"`
24 | ;;
25 |
26 | esac
27 |
28 |
29 | done=NO
30 |
31 |
32 | case "$NGX_PLATFORM" in
33 |
34 | win32)
35 | cat << END >> $NGX_MAKEFILE
36 |
37 | `echo "$SHA1/sha1.lib: $NGX_MAKEFILE" | sed -e "s/\//$ngx_regex_dirsep/g"`
38 | \$(MAKE) -f auto/lib/sha1/$ngx_makefile $ngx_opt $ngx_sha1
39 |
40 | END
41 |
42 | done=YES
43 | ;;
44 |
45 | SunOS:*:i86pc)
46 | if [ $SHA1_ASM = YES ]; then
47 |
48 | cat << END >> $NGX_MAKEFILE
49 |
50 | $SHA1/libsha.a: $NGX_MAKEFILE
51 | cd $SHA1 \\
52 | && \$(MAKE) CFLAGS="$SHA1_OPT -DSOL -DSHA1_ASM -DL_ENDIAN" \\
53 | CC="\$(CC)" CPP="\$(CPP)" \\
54 | SHA_ASM_OBJ=asm/sx86-sol.o clean libsha.a
55 |
56 | END
57 |
58 | done=YES
59 | fi
60 | ;;
61 |
62 | # FreeBSD: i386
63 | # Linux: i686
64 |
65 | *:i386 | *:i686)
66 | if [ $SHA1_ASM = YES ]; then
67 |
68 | cat << END >> $NGX_MAKEFILE
69 |
70 | $SHA1/libsha.a: $NGX_MAKEFILE
71 | cd $SHA1 \\
72 | && \$(MAKE) CFLAGS="$SHA1_OPT -DELF -DSHA1_ASM -DL_ENDIAN" \\
73 | CC="\$(CC)" CPP="\$(CPP)" \\
74 | SHA_ASM_OBJ=asm/sx86-elf.o clean libsha.a
75 |
76 | END
77 |
78 | done=YES
79 | fi
80 | ;;
81 |
82 | esac
83 |
84 |
85 | if [ $done = NO ]; then
86 |
87 | cat << END >> $NGX_MAKEFILE
88 |
89 | $SHA1/libsha.a: $NGX_MAKEFILE
90 | cd $SHA1 \\
91 | && \$(MAKE) CFLAGS="$SHA1_OPT" \\
92 | CC="\$(CC)" SHA_ASM_OBJ= clean libsha.a
93 |
94 | END
95 |
96 | fi
97 |
--------------------------------------------------------------------------------
/auto/lib/openssl/conf:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | if [ $OPENSSL != NONE ]; then
7 |
8 | case "$CC" in
9 |
10 | cl | bcc32)
11 | have=NGX_OPENSSL . auto/have
12 | have=NGX_SSL . auto/have
13 |
14 | CFLAGS="$CFLAGS -DNO_SYS_TYPES_H"
15 |
16 | CORE_INCS="$CORE_INCS $OPENSSL/openssl/include"
17 | CORE_DEPS="$CORE_DEPS $OPENSSL/openssl/include/openssl/ssl.h"
18 | CORE_LIBS="$CORE_LIBS $OPENSSL/openssl/lib/ssleay32.lib"
19 | CORE_LIBS="$CORE_LIBS $OPENSSL/openssl/lib/libeay32.lib"
20 |
21 | # libeay32.lib requires gdi32.lib
22 | CORE_LIBS="$CORE_LIBS gdi32.lib"
23 | # OpenSSL 1.0.0 requires crypt32.lib
24 | CORE_LIBS="$CORE_LIBS crypt32.lib"
25 | ;;
26 |
27 | *)
28 | have=NGX_OPENSSL . auto/have
29 | have=NGX_SSL . auto/have
30 |
31 | CORE_INCS="$CORE_INCS $OPENSSL/.openssl/include"
32 | CORE_DEPS="$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h"
33 | CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libssl.a"
34 | CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libcrypto.a"
35 | CORE_LIBS="$CORE_LIBS $NGX_LIBDL"
36 | ;;
37 | esac
38 |
39 | else
40 |
41 | if [ "$NGX_PLATFORM" != win32 ]; then
42 |
43 | OPENSSL=NO
44 |
45 | ngx_feature="OpenSSL library"
46 | ngx_feature_name="NGX_OPENSSL"
47 | ngx_feature_run=no
48 | ngx_feature_incs="#include "
49 | ngx_feature_path=
50 | ngx_feature_libs="-lssl -lcrypto"
51 | ngx_feature_test="SSL_library_init()"
52 | . auto/feature
53 |
54 | if [ $ngx_found = yes ]; then
55 | have=NGX_SSL . auto/have
56 | CORE_LIBS="$CORE_LIBS $ngx_feature_libs $NGX_LIBDL"
57 | OPENSSL=YES
58 | fi
59 | fi
60 |
61 | if [ $OPENSSL != YES ]; then
62 |
63 | cat << END
64 |
65 | $0: error: SSL modules require the OpenSSL library.
66 | You can either do not enable the modules, or install the OpenSSL library
67 | into the system, or build the OpenSSL library statically from the source
68 | with nginx by using --with-openssl= option.
69 |
70 | END
71 | exit 1
72 | fi
73 |
74 | fi
75 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_solaris_config.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_SOLARIS_CONFIG_H_INCLUDED_
9 | #define _NGX_SOLARIS_CONFIG_H_INCLUDED_
10 |
11 |
12 | #ifndef _REENTRANT
13 | #define _REENTRANT
14 | #endif
15 |
16 | #define _FILE_OFFSET_BITS 64 /* must be before */
17 |
18 | #include
19 | #include
20 | #include
21 | #include
22 | #include /* offsetof() */
23 | #include
24 | #include
25 | #include
26 | #include
27 | #include
28 | #include
29 | #include
30 | #include
31 | #include
32 | #include /* statvfs() */
33 |
34 | #include /* FIONBIO */
35 | #include
36 | #include
37 | #include
38 |
39 | #include
40 | #include
41 | #include
42 | #include
43 |
44 | #include
45 | #include
46 | #include /* TCP_NODELAY */
47 | #include
48 | #include
49 | #include
50 |
51 | #include
52 | #include /* IOV_MAX */
53 | #include
54 | #include
55 |
56 | #define NGX_ALIGNMENT _MAX_ALIGNMENT
57 |
58 | #include
59 |
60 |
61 | #if (NGX_HAVE_POSIX_SEM)
62 | #include
63 | #endif
64 |
65 |
66 | #if (NGX_HAVE_POLL)
67 | #include
68 | #endif
69 |
70 |
71 | #if (NGX_HAVE_DEVPOLL)
72 | #include
73 | #include
74 | #endif
75 |
76 |
77 | #if (NGX_HAVE_EVENTPORT)
78 | #include
79 | #endif
80 |
81 |
82 | #if (NGX_HAVE_SENDFILE)
83 | #include
84 | #endif
85 |
86 |
87 | #define NGX_LISTEN_BACKLOG 511
88 |
89 |
90 | #ifndef NGX_HAVE_INHERITED_NONBLOCK
91 | #define NGX_HAVE_INHERITED_NONBLOCK 1
92 | #endif
93 |
94 |
95 | #ifndef NGX_HAVE_SO_SNDLOWAT
96 | /* setsockopt(SO_SNDLOWAT) returns ENOPROTOOPT */
97 | #define NGX_HAVE_SO_SNDLOWAT 0
98 | #endif
99 |
100 |
101 | #define NGX_HAVE_OS_SPECIFIC_INIT 1
102 |
103 |
104 | extern char **environ;
105 |
106 |
107 | #endif /* _NGX_SOLARIS_CONFIG_H_INCLUDED_ */
108 |
--------------------------------------------------------------------------------
/auto/cc/owc:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | # Open Watcom C 1.0, 1.2, 1.3
7 |
8 | # optimizations
9 |
10 | # maximize speed
11 | CFLAGS="$CFLAGS -ot"
12 | # reorder instructions for best pipeline usage
13 | CFLAGS="$CFLAGS -op"
14 | # inline intrinsic functions
15 | CFLAGS="$CFLAGS -oi"
16 | # inline expansion
17 | CFLAGS="$CFLAGS -oe"
18 | # disable stack checking calls
19 | CFLAGS="$CFLAGS -s"
20 |
21 | case $CPU in
22 | pentium)
23 | # optimize for Pentium and Athlon
24 | # register-based arguments passing conventions
25 | CPU_OPT="-5r"
26 | # stack-based arguments passing conventions
27 | #CPU_OPT="-5s"
28 | ;;
29 |
30 | pentiumpro)
31 | # optimize for Pentium Pro, Pentium II and Pentium III
32 | # register-based arguments passing conventions
33 | CPU_OPT="-6r"
34 | # stack-based arguments passing conventions
35 | #CPU_OPT="-6s"
36 | ;;
37 | esac
38 |
39 | CFLAGS="$CFLAGS $CPU_OPT"
40 |
41 |
42 | # warnings
43 |
44 | # maximum level
45 | CFLAGS="$CFLAGS -wx"
46 | #CFLAGS="$CFLAGS -w3"
47 |
48 | # stop on warning
49 | CFLAGS="$CFLAGS -we"
50 |
51 | # built target is NT
52 | CFLAGS="$CFLAGS -bt=nt"
53 |
54 | # multithreaded
55 | CFLAGS="$CFLAGS -bm"
56 |
57 | # debug
58 | CFLAGS="$CFLAGS -d2"
59 |
60 | # quiet
61 | CFLAGS="$CFLAGS -zq"
62 |
63 | # Open Watcom C 1.2
64 | have=NGX_HAVE_C99_VARIADIC_MACROS . auto/have
65 |
66 |
67 | # the precompiled headers
68 | CORE_DEPS="$CORE_DEPS $NGX_OBJS/ngx_config.pch"
69 | NGX_PCH="$NGX_OBJS/ngx_config.pch"
70 | NGX_BUILD_PCH="-fhq=$NGX_OBJS/ngx_config.pch"
71 | NGX_USE_PCH="-fh=$NGX_OBJS/ngx_config.pch"
72 |
73 |
74 | # the link flags, built target is NT GUI mode application
75 | #CORE_LINK="$CORE_LINK -l=nt_win"
76 |
77 |
78 | # the resource file
79 | NGX_RCC="wrc \$(CORE_INCS) -fo=$NGX_OBJS/nginx.res "
80 | NGX_RCC="$NGX_RCC $NGX_WIN32_RC $NGX_OBJS/nginx.exe"
81 |
82 |
83 | ngx_include_opt="-i="
84 | ngx_objout="-fo"
85 | ngx_binout="-fe="
86 | ngx_objext="obj"
87 | ngx_binext=".exe"
88 |
89 | ngx_regex_dirsep='\\'
90 | ngx_dirsep="\\"
91 |
92 | ngx_long_start=' '
93 | ngx_long_end=' '
94 | ngx_long_regex_cont=' \&\
95 | '
96 | ngx_long_cont=' &
97 | '
98 |
99 | ngx_regex_cont=' \&\
100 | '
101 | ngx_cont=' &
102 | '
103 | ngx_tab=' &
104 | '
105 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_os.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_OS_H_INCLUDED_
9 | #define _NGX_OS_H_INCLUDED_
10 |
11 |
12 | #include
13 | #include
14 |
15 |
16 | #define NGX_IO_SENDFILE 1
17 |
18 |
19 | typedef ssize_t (*ngx_recv_pt)(ngx_connection_t *c, u_char *buf, size_t size);
20 | typedef ssize_t (*ngx_recv_chain_pt)(ngx_connection_t *c, ngx_chain_t *in);
21 | typedef ssize_t (*ngx_send_pt)(ngx_connection_t *c, u_char *buf, size_t size);
22 | typedef ngx_chain_t *(*ngx_send_chain_pt)(ngx_connection_t *c, ngx_chain_t *in,
23 | off_t limit);
24 |
25 | typedef struct {
26 | ngx_recv_pt recv;
27 | ngx_recv_chain_pt recv_chain;
28 | ngx_recv_pt udp_recv;
29 | ngx_send_pt send;
30 | ngx_send_chain_pt send_chain;
31 | ngx_uint_t flags;
32 | } ngx_os_io_t;
33 |
34 |
35 | void ngx_debug_init(void);
36 | ngx_int_t ngx_os_init(ngx_log_t *log);
37 | void ngx_os_status(ngx_log_t *log);
38 | ngx_int_t ngx_os_specific_init(ngx_log_t *log);
39 | void ngx_os_specific_status(ngx_log_t *log);
40 | ngx_int_t ngx_daemon(ngx_log_t *log);
41 | ngx_int_t ngx_os_signal_process(ngx_cycle_t *cycle, char *sig, ngx_int_t pid);
42 |
43 |
44 | ssize_t ngx_unix_recv(ngx_connection_t *c, u_char *buf, size_t size);
45 | ssize_t ngx_readv_chain(ngx_connection_t *c, ngx_chain_t *entry);
46 | ssize_t ngx_udp_unix_recv(ngx_connection_t *c, u_char *buf, size_t size);
47 | ssize_t ngx_unix_send(ngx_connection_t *c, u_char *buf, size_t size);
48 | ngx_chain_t *ngx_writev_chain(ngx_connection_t *c, ngx_chain_t *in,
49 | off_t limit);
50 |
51 | #if (NGX_HAVE_AIO)
52 | ssize_t ngx_aio_read(ngx_connection_t *c, u_char *buf, size_t size);
53 | ssize_t ngx_aio_read_chain(ngx_connection_t *c, ngx_chain_t *cl);
54 | ssize_t ngx_aio_write(ngx_connection_t *c, u_char *buf, size_t size);
55 | ngx_chain_t *ngx_aio_write_chain(ngx_connection_t *c, ngx_chain_t *in,
56 | off_t limit);
57 | #endif
58 |
59 |
60 | extern ngx_os_io_t ngx_os_io;
61 | extern ngx_int_t ngx_ncpu;
62 | extern ngx_int_t ngx_max_sockets;
63 | extern ngx_uint_t ngx_inherited_nonblocking;
64 | extern ngx_uint_t ngx_tcp_nodelay_and_tcp_nopush;
65 |
66 |
67 | #if (NGX_FREEBSD)
68 | #include
69 |
70 |
71 | #elif (NGX_LINUX)
72 | #include
73 |
74 |
75 | #elif (NGX_SOLARIS)
76 | #include
77 |
78 |
79 | #elif (NGX_DARWIN)
80 | #include
81 | #endif
82 |
83 |
84 | #endif /* _NGX_OS_H_INCLUDED_ */
85 |
--------------------------------------------------------------------------------
/auto/os/conf:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | echo "checking for $NGX_SYSTEM specific features"
7 |
8 | case "$NGX_PLATFORM" in
9 |
10 | FreeBSD:*)
11 | . auto/os/freebsd
12 | ;;
13 |
14 | Linux:*)
15 | . auto/os/linux
16 | ;;
17 |
18 | SunOS:*)
19 | . auto/os/solaris
20 | ;;
21 |
22 | Darwin:*)
23 | . auto/os/darwin
24 | ;;
25 |
26 | win32)
27 | . auto/os/win32
28 | ;;
29 |
30 | DragonFly:*)
31 | have=NGX_FREEBSD . auto/have_headers
32 | CORE_INCS="$UNIX_INCS"
33 | CORE_DEPS="$UNIX_DEPS $FREEBSD_DEPS"
34 | CORE_SRCS="$UNIX_SRCS $FREEBSD_SRCS"
35 |
36 | echo " + sendfile() found"
37 | have=NGX_HAVE_SENDFILE . auto/have
38 | CORE_SRCS="$CORE_SRCS $FREEBSD_SENDFILE_SRCS"
39 |
40 | ngx_spacer='
41 | '
42 | ;;
43 |
44 | HP-UX:*)
45 | # HP/UX
46 | have=NGX_HPUX . auto/have_headers
47 | CORE_INCS="$UNIX_INCS"
48 | CORE_DEPS="$UNIX_DEPS $POSIX_DEPS"
49 | CORE_SRCS="$UNIX_SRCS"
50 | CC_AUX_FLAGS="$CC_AUX_FLAGS -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1"
51 | ;;
52 |
53 | OSF1:*)
54 | # Tru64 UNIX
55 | have=NGX_TRU64 . auto/have_headers
56 | have=NGX_HAVE_STRERROR_R . auto/nohave
57 | CORE_INCS="$UNIX_INCS"
58 | CORE_DEPS="$UNIX_DEPS $POSIX_DEPS"
59 | CORE_SRCS="$UNIX_SRCS"
60 | ;;
61 |
62 | *)
63 | CORE_INCS="$UNIX_INCS"
64 | CORE_DEPS="$UNIX_DEPS $POSIX_DEPS"
65 | CORE_SRCS="$UNIX_SRCS"
66 | ;;
67 |
68 | esac
69 |
70 |
71 | case "$NGX_MACHINE" in
72 |
73 | i386 | i686 | i86pc)
74 | have=NGX_HAVE_NONALIGNED . auto/have
75 | NGX_MACH_CACHE_LINE=32
76 | ;;
77 |
78 | amd64 | x86_64)
79 | have=NGX_HAVE_NONALIGNED . auto/have
80 | NGX_MACH_CACHE_LINE=64
81 | ;;
82 |
83 | sun4u | sun4v | sparc | sparc64)
84 | have=NGX_ALIGNMENT value=16 . auto/define
85 | # TODO
86 | NGX_MACH_CACHE_LINE=64
87 | ;;
88 |
89 | ia64 )
90 | have=NGX_ALIGNMENT value=16 . auto/define
91 | # TODO
92 | NGX_MACH_CACHE_LINE=64
93 | ;;
94 |
95 | *)
96 | NGX_MACH_CACHE_LINE=32
97 | ;;
98 |
99 | esac
100 |
101 | if test -z "$NGX_CPU_CACHE_LINE"; then
102 | NGX_CPU_CACHE_LINE=$NGX_MACH_CACHE_LINE
103 | fi
104 |
105 | have=NGX_CPU_CACHE_LINE value=$NGX_CPU_CACHE_LINE . auto/define
106 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_aio_write_chain.c:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #include
9 | #include
10 | #include
11 |
12 |
13 | ngx_chain_t *
14 | ngx_aio_write_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
15 | {
16 | u_char *buf, *prev;
17 | off_t send, sent;
18 | size_t len;
19 | ssize_t n, size;
20 | ngx_chain_t *cl;
21 |
22 | /* the maximum limit size is the maximum size_t value - the page size */
23 |
24 | if (limit == 0 || limit > (off_t) (NGX_MAX_SIZE_T_VALUE - ngx_pagesize)) {
25 | limit = NGX_MAX_SIZE_T_VALUE - ngx_pagesize;
26 | }
27 |
28 | send = 0;
29 | sent = 0;
30 | cl = in;
31 |
32 | while (cl) {
33 |
34 | if (cl->buf->pos == cl->buf->last) {
35 | cl = cl->next;
36 | continue;
37 | }
38 |
39 | /* we can post the single aio operation only */
40 |
41 | if (!c->write->ready) {
42 | return cl;
43 | }
44 |
45 | buf = cl->buf->pos;
46 | prev = buf;
47 | len = 0;
48 |
49 | /* coalesce the neighbouring bufs */
50 |
51 | while (cl && prev == cl->buf->pos && send < limit) {
52 | if (ngx_buf_special(cl->buf)) {
53 | continue;
54 | }
55 |
56 | size = cl->buf->last - cl->buf->pos;
57 |
58 | if (send + size > limit) {
59 | size = limit - send;
60 | }
61 |
62 | len += size;
63 | prev = cl->buf->pos + size;
64 | send += size;
65 | cl = cl->next;
66 | }
67 |
68 | n = ngx_aio_write(c, buf, len);
69 |
70 | ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "aio_write: %z", n);
71 |
72 | if (n == NGX_ERROR) {
73 | return NGX_CHAIN_ERROR;
74 | }
75 |
76 | if (n > 0) {
77 | sent += n;
78 | c->sent += n;
79 | }
80 |
81 | ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
82 | "aio_write sent: %O", c->sent);
83 |
84 | for (cl = in; cl; cl = cl->next) {
85 |
86 | if (sent >= cl->buf->last - cl->buf->pos) {
87 | sent -= cl->buf->last - cl->buf->pos;
88 | cl->buf->pos = cl->buf->last;
89 |
90 | continue;
91 | }
92 |
93 | cl->buf->pos += sent;
94 |
95 | break;
96 | }
97 | }
98 |
99 | return cl;
100 | }
101 |
--------------------------------------------------------------------------------
/auto/cc/name:
--------------------------------------------------------------------------------
1 |
2 | # Copyright (C) Igor Sysoev
3 | # Copyright (C) Nginx, Inc.
4 |
5 |
6 | if [ "$NGX_PLATFORM" != win32 ]; then
7 |
8 | ngx_feature="C compiler"
9 | ngx_feature_name=
10 | ngx_feature_run=yes
11 | ngx_feature_incs=
12 | ngx_feature_path=
13 | ngx_feature_libs=
14 | ngx_feature_test=
15 | . auto/feature
16 |
17 | if [ $ngx_found = no ]; then
18 | echo
19 | echo $0: error: C compiler $CC is not found
20 | echo
21 | exit 1
22 | fi
23 |
24 | fi
25 |
26 |
27 | if [ "$CC" = cl ]; then
28 | if `$NGX_WINE $CC -v 2>&1 \
29 | | grep '^Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16' \
30 | >/dev/null 2>&1`; then
31 |
32 | NGX_CC_NAME=msvc10
33 | echo " + using Microsoft Visual C++ 10 compiler"
34 |
35 | else if `$NGX_WINE $CC -v 2>&1 \
36 | | grep '^Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14' \
37 | >/dev/null 2>&1`; then
38 |
39 | NGX_CC_NAME=msvc8
40 | echo " + using Microsoft Visual C++ 8 compiler"
41 |
42 | else if `$NGX_WINE $CC -v 2>&1 \
43 | | grep '^Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13' \
44 | >/dev/null 2>&1`; then
45 |
46 | NGX_CC_NAME=msvc7
47 | echo " + using Microsoft Visual C++ 7 compiler"
48 |
49 | else
50 | NGX_CC_NAME=msvc
51 | echo " + using Microsoft Visual C++ compiler"
52 | fi
53 | fi
54 | fi
55 |
56 | else
57 | if [ "$CC" = wcl386 ]; then
58 | NGX_CC_NAME=owc
59 | echo " + using Open Watcom C compiler"
60 |
61 | else
62 | if [ "$CC" = bcc32 ]; then
63 | NGX_CC_NAME=bcc
64 | echo " + using Borland C++ compiler"
65 |
66 | else
67 | if `$CC -V 2>&1 | grep '^Intel(R) C' >/dev/null 2>&1`; then
68 | NGX_CC_NAME=icc
69 | echo " + using Intel C++ compiler"
70 |
71 | else
72 | if `$CC -v 2>&1 | grep 'gcc version' >/dev/null 2>&1`; then
73 | NGX_CC_NAME=gcc
74 | echo " + using GNU C compiler"
75 |
76 | else
77 | if `$CC -V 2>&1 | grep 'Sun C' >/dev/null 2>&1`; then
78 | NGX_CC_NAME=sunc
79 | echo " + using Sun C compiler"
80 |
81 | else
82 | if `$CC -V 2>&1 | grep '^Compaq C' >/dev/null 2>&1`; then
83 | NGX_CC_NAME=ccc
84 | echo " + using Compaq C compiler"
85 |
86 | else
87 | if `$CC -V 2>&1 | grep '^aCC: ' >/dev/null 2>&1`; then
88 | NGX_CC_NAME=acc
89 | echo " + using HP aC++ compiler"
90 |
91 | else
92 | NGX_CC_NAME=unknown
93 |
94 | fi # acc
95 | fi # ccc
96 | fi # sunc
97 | fi # icc
98 | fi # gcc
99 | fi # bcc
100 | fi # owc
101 | fi # msvc
102 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_user.c:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #include
9 | #include
10 |
11 |
12 | /*
13 | * Solaris has thread-safe crypt()
14 | * Linux has crypt_r(); "struct crypt_data" is more than 128K
15 | * FreeBSD needs the mutex to protect crypt()
16 | *
17 | * TODO:
18 | * ngx_crypt_init() to init mutex
19 | */
20 |
21 |
22 | #if (NGX_CRYPT)
23 |
24 | #if (NGX_HAVE_GNU_CRYPT_R)
25 |
26 | ngx_int_t
27 | ngx_libc_crypt(ngx_pool_t *pool, u_char *key, u_char *salt, u_char **encrypted)
28 | {
29 | char *value;
30 | size_t len;
31 | ngx_err_t err;
32 | struct crypt_data cd;
33 |
34 | ngx_set_errno(0);
35 |
36 | cd.initialized = 0;
37 | /* work around the glibc bug */
38 | cd.current_salt[0] = ~salt[0];
39 |
40 | value = crypt_r((char *) key, (char *) salt, &cd);
41 |
42 | err = ngx_errno;
43 |
44 | if (err == 0) {
45 | len = ngx_strlen(value) + 1;
46 |
47 | *encrypted = ngx_pnalloc(pool, len);
48 | if (*encrypted) {
49 | ngx_memcpy(*encrypted, value, len);
50 | return NGX_OK;
51 | }
52 | }
53 |
54 | ngx_log_error(NGX_LOG_CRIT, pool->log, err, "crypt_r() failed");
55 |
56 | return NGX_ERROR;
57 | }
58 |
59 | #else
60 |
61 | ngx_int_t
62 | ngx_libc_crypt(ngx_pool_t *pool, u_char *key, u_char *salt, u_char **encrypted)
63 | {
64 | char *value;
65 | size_t len;
66 | ngx_err_t err;
67 |
68 | #if (NGX_THREADS && NGX_NONREENTRANT_CRYPT)
69 |
70 | /* crypt() is a time consuming function, so we only try to lock */
71 |
72 | if (ngx_mutex_trylock(ngx_crypt_mutex) != NGX_OK) {
73 | return NGX_AGAIN;
74 | }
75 |
76 | #endif
77 |
78 | ngx_set_errno(0);
79 |
80 | value = crypt((char *) key, (char *) salt);
81 |
82 | if (value) {
83 | len = ngx_strlen(value) + 1;
84 |
85 | *encrypted = ngx_pnalloc(pool, len);
86 | if (*encrypted) {
87 | ngx_memcpy(*encrypted, value, len);
88 | }
89 |
90 | #if (NGX_THREADS && NGX_NONREENTRANT_CRYPT)
91 | ngx_mutex_unlock(ngx_crypt_mutex);
92 | #endif
93 | return NGX_OK;
94 | }
95 |
96 | err = ngx_errno;
97 |
98 | #if (NGX_THREADS && NGX_NONREENTRANT_CRYPT)
99 | ngx_mutex_unlock(ngx_crypt_mutex);
100 | #endif
101 |
102 | ngx_log_error(NGX_LOG_CRIT, pool->log, err, "crypt() failed");
103 |
104 | return NGX_ERROR;
105 | }
106 |
107 | #endif
108 |
109 | #endif /* NGX_CRYPT */
110 |
--------------------------------------------------------------------------------
/conf/koi-win:
--------------------------------------------------------------------------------
1 |
2 | charset_map koi8-r windows-1251 {
3 |
4 | 80 88 ; # euro
5 |
6 | 95 95 ; # bullet
7 |
8 | 9A A0 ; #
9 |
10 | 9E B7 ; # ·
11 |
12 | A3 B8 ; # small yo
13 | A4 BA ; # small Ukrainian ye
14 |
15 | A6 B3 ; # small Ukrainian i
16 | A7 BF ; # small Ukrainian yi
17 |
18 | AD B4 ; # small Ukrainian soft g
19 | AE A2 ; # small Byelorussian short u
20 |
21 | B0 B0 ; # °
22 |
23 | B3 A8 ; # capital YO
24 | B4 AA ; # capital Ukrainian YE
25 |
26 | B6 B2 ; # capital Ukrainian I
27 | B7 AF ; # capital Ukrainian YI
28 |
29 | B9 B9 ; # numero sign
30 |
31 | BD A5 ; # capital Ukrainian soft G
32 | BE A1 ; # capital Byelorussian short U
33 |
34 | BF A9 ; # (C)
35 |
36 | C0 FE ; # small yu
37 | C1 E0 ; # small a
38 | C2 E1 ; # small b
39 | C3 F6 ; # small ts
40 | C4 E4 ; # small d
41 | C5 E5 ; # small ye
42 | C6 F4 ; # small f
43 | C7 E3 ; # small g
44 | C8 F5 ; # small kh
45 | C9 E8 ; # small i
46 | CA E9 ; # small j
47 | CB EA ; # small k
48 | CC EB ; # small l
49 | CD EC ; # small m
50 | CE ED ; # small n
51 | CF EE ; # small o
52 |
53 | D0 EF ; # small p
54 | D1 FF ; # small ya
55 | D2 F0 ; # small r
56 | D3 F1 ; # small s
57 | D4 F2 ; # small t
58 | D5 F3 ; # small u
59 | D6 E6 ; # small zh
60 | D7 E2 ; # small v
61 | D8 FC ; # small soft sign
62 | D9 FB ; # small y
63 | DA E7 ; # small z
64 | DB F8 ; # small sh
65 | DC FD ; # small e
66 | DD F9 ; # small shch
67 | DE F7 ; # small ch
68 | DF FA ; # small hard sign
69 |
70 | E0 DE ; # capital YU
71 | E1 C0 ; # capital A
72 | E2 C1 ; # capital B
73 | E3 D6 ; # capital TS
74 | E4 C4 ; # capital D
75 | E5 C5 ; # capital YE
76 | E6 D4 ; # capital F
77 | E7 C3 ; # capital G
78 | E8 D5 ; # capital KH
79 | E9 C8 ; # capital I
80 | EA C9 ; # capital J
81 | EB CA ; # capital K
82 | EC CB ; # capital L
83 | ED CC ; # capital M
84 | EE CD ; # capital N
85 | EF CE ; # capital O
86 |
87 | F0 CF ; # capital P
88 | F1 DF ; # capital YA
89 | F2 D0 ; # capital R
90 | F3 D1 ; # capital S
91 | F4 D2 ; # capital T
92 | F5 D3 ; # capital U
93 | F6 C6 ; # capital ZH
94 | F7 C2 ; # capital V
95 | F8 DC ; # capital soft sign
96 | F9 DB ; # capital Y
97 | FA C7 ; # capital Z
98 | FB D8 ; # capital SH
99 | FC DD ; # capital E
100 | FD D9 ; # capital SHCH
101 | FE D7 ; # capital CH
102 | FF DA ; # capital hard sign
103 | }
104 |
--------------------------------------------------------------------------------
/src/os/unix/ngx_linux_config.h:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | * Copyright (C) Igor Sysoev
4 | * Copyright (C) Nginx, Inc.
5 | */
6 |
7 |
8 | #ifndef _NGX_LINUX_CONFIG_H_INCLUDED_
9 | #define _NGX_LINUX_CONFIG_H_INCLUDED_
10 |
11 |
12 | #ifndef _GNU_SOURCE
13 | #define _GNU_SOURCE /* pread(), pwrite(), gethostname() */
14 | #endif
15 |
16 | #define _FILE_OFFSET_BITS 64
17 |
18 | #include
19 | #include
20 | #include
21 | #include
22 | #include /* offsetof() */
23 | #include
24 | #include
25 | #include
26 | #include
27 | #include
28 | #include
29 | #include
30 | #include
31 | #include
32 | #include /* statfs() */
33 |
34 | #include
35 | #include
36 | #include
37 |
38 | #include
39 | #include
40 | #include
41 | #include