nginx-0.0.3-2004-04-08-19:58:25 import
diff --git a/auto/lib/md5/conf b/auto/lib/md5/conf
index d5b2a0a..8871038 100644
--- a/auto/lib/md5/conf
+++ b/auto/lib/md5/conf
@@ -40,57 +40,59 @@
else
-ngx_lib_inc="#include <sys/types.h>
+ if [ $PLATFORM != win32 ]; then
+ MD5=NO
+
+ # Solaris 8/9
+
+ ngx_lib_inc="#include <sys/types.h>
#include <md5.h>"
-
- MD5=NO
-
- # Solaris 8/9
-
- ngx_lib="rsaref md5"
- ngx_lib_test="MD5_CTX md5; MD5Init(&md5)"
- ngx_libs=-lmd5
- . auto/lib/test
+ ngx_lib="rsaref md5 library"
+ ngx_lib_test="MD5_CTX md5; MD5Init(&md5)"
+ ngx_libs=-lmd5
+ . auto/lib/test
- if [ $ngx_found = yes ]; then
- CORE_LIBS="$CORE_LIBS $ngx_libs"
- MD5=YES
- MD5_LIB=md5
- ngx_found=no
+ if [ $ngx_found = yes ]; then
+ CORE_LIBS="$CORE_LIBS $ngx_libs"
+ MD5=YES
+ MD5_LIB=md5
+ ngx_found=no
- else
- # FreeBSD
+ else
+ # FreeBSD
- ngx_lib="rsaref md"
- ngx_lib_test="MD5_CTX md5; MD5Init(&md5)"
- ngx_libs=-lmd
- . auto/lib/test
+ ngx_lib="rsaref md library"
+ ngx_lib_test="MD5_CTX md5; MD5Init(&md5)"
+ ngx_libs=-lmd
+ . auto/lib/test
+ fi
+
+
+ if [ $ngx_found = yes ]; then
+ CORE_LIBS="$CORE_LIBS $ngx_libs"
+ MD5=YES
+ MD5_LIB=md
+ ngx_found=no
+
+ else
+ # OpenSSL crypto library
+
+ ngx_inc="#include <openssl/md5.h>"
+ ngx_lib="OpenSSL md5 crypto library"
+ ngx_lib_test="MD5_CTX md5; MD5_Init(&md5)"
+ ngx_libs=-lcrypto
+ . auto/lib/test
+ fi
+
+
+ if [ $ngx_found = yes ]; then
+ have=HAVE_OPENSSL_MD5 . auto/have
+ have=HAVE_OPENSSL_MD5_H . auto/have
+ CORE_LIBS="$CORE_LIBS $ngx_libs"
+ MD5=YES
+ MD5_LIB=crypto
+ fi
fi
-
- if [ $ngx_found = yes ]; then
- CORE_LIBS="$CORE_LIBS $ngx_libs"
- MD5=YES
- MD5_LIB=md
- ngx_found=no
-
- else
- # OpenSSL crypto library
-
- ngx_inc="#include <openssl/md5.h>"
- ngx_lib="OpenSSL md5 crypto"
- ngx_lib_test="MD5_CTX md5; MD5_Init(&md5)"
- ngx_libs=-lcrypto
- . auto/lib/test
- fi
-
-
- if [ $ngx_found = yes ]; then
- have=HAVE_OPENSSL_MD5 . auto/have
- have=HAVE_OPENSSL_MD5_H . auto/have
- CORE_LIBS="$CORE_LIBS $ngx_libs"
- MD5=YES
- MD5_LIB=crypto
- fi
fi
diff --git a/auto/lib/pcre/conf b/auto/lib/pcre/conf
index fa50c24..a907e8b 100644
--- a/auto/lib/pcre/conf
+++ b/auto/lib/pcre/conf
@@ -40,24 +40,38 @@
else
if [ $PLATFORM != win32 ]; then
- ngx_lib_inc="#include <pcre.h>"
+ PCRE=NO
- ngx_lib="PCRE"
- ngx_lib_test="pcre *re; pcre_compile(re, 0, NULL, 0, NULL)"
- ngx_libs=-lpcre
- . auto/lib/test
+ ngx_lib_inc="#include <pcre.h>"
+ ngx_lib="PCRE library"
+ ngx_lib_test="pcre *re; pcre_compile(re, 0, NULL, 0, NULL)"
+ ngx_libs=-lpcre
+ . auto/lib/test
if [ $ngx_found = yes ]; then
have=HAVE_PCRE . auto/have
-
CORE_DEPS="$CORE_DEPS $REGEX_DEPS"
CORE_SRCS="$CORE_SRCS $REGEX_SRCS"
CORE_LIBS="$CORE_LIBS $ngx_libs"
-
PCRE=YES
+
else
- PCRE=NO
+ # FreeBSD PCRE port.
+
+ ngx_lib="PCRE library in /usr/local/"
+ ngx_lib_cflags="-I /usr/local/include"
+ . auto/lib/test
+ fi
+
+
+ if [ $ngx_found = yes ]; then
+ have=HAVE_PCRE . auto/have
+ CORE_DEPS="$CORE_DEPS $REGEX_DEPS"
+ CORE_INCS="$CORE_INCS /usr/local/include"
+ CORE_SRCS="$CORE_SRCS $REGEX_SRCS"
+ CORE_LIBS="$CORE_LIBS $ngx_libs"
+ PCRE=YES
fi
fi
diff --git a/auto/lib/test b/auto/lib/test
index d030655..3519a6c 100644
--- a/auto/lib/test
+++ b/auto/lib/test
@@ -1,5 +1,5 @@
-echo $ngx_n "checking for $ngx_lib library ..." $ngx_c
+echo $ngx_n "checking for $ngx_lib ..." $ngx_c
echo >> $NGX_ERR
echo "checking for $ngx_lib library" >> $NGX_ERR
@@ -8,7 +8,8 @@
echo "$ngx_lib_inc" > $NGX_AUTOTEST.c
echo "int main() { $ngx_lib_test; return 0; }" >> $NGX_AUTOTEST.c
-eval "$CC $cc_test_flags -o $NGX_AUTOTEST $NGX_AUTOTEST.c $ngx_libs \
+eval "$CC $cc_test_flags $ngx_lib_cflags \
+ -o $NGX_AUTOTEST $NGX_AUTOTEST.c $ngx_libs \
>> $NGX_ERR 2>&1"
if [ -x $NGX_AUTOTEST ]; then
diff --git a/auto/lib/zlib/conf b/auto/lib/zlib/conf
index 7376abd..9c2178f 100644
--- a/auto/lib/zlib/conf
+++ b/auto/lib/zlib/conf
@@ -34,19 +34,21 @@
else
- ngx_lib_inc="#include <zlib.h>"
+ if [ $PLATFORM != win32 ]; then
+ ngx_lib_inc="#include <zlib.h>"
- ngx_lib="zlib"
- ngx_lib_test="z_stream z; deflate(&z, Z_NO_FLUSH)"
- ngx_libs=-lz
- . auto/lib/test
+ ngx_lib="zlib library"
+ ngx_lib_test="z_stream z; deflate(&z, Z_NO_FLUSH)"
+ ngx_libs=-lz
+ . auto/lib/test
- if [ $ngx_found = yes ]; then
- CORE_LIBS="$CORE_LIBS $ngx_libs"
- ZLIB=YES
- else
- ZLIB=NO
+ if [ $ngx_found = yes ]; then
+ CORE_LIBS="$CORE_LIBS $ngx_libs"
+ ZLIB=YES
+ else
+ ZLIB=NO
+ fi
fi
fi
diff --git a/src/core/ngx_log.h b/src/core/ngx_log.h
index d1fdab6..87090dc 100644
--- a/src/core/ngx_log.h
+++ b/src/core/ngx_log.h
@@ -6,24 +6,25 @@
#include <ngx_core.h>
-#define NGX_LOG_STDERR 0
-#define NGX_LOG_EMERG 1
-#define NGX_LOG_ALERT 2
-#define NGX_LOG_CRIT 3
-#define NGX_LOG_ERR 4
-#define NGX_LOG_WARN 5
-#define NGX_LOG_NOTICE 6
-#define NGX_LOG_INFO 7
-#define NGX_LOG_DEBUG 8
+#define NGX_LOG_STDERR 0
+#define NGX_LOG_EMERG 1
+#define NGX_LOG_ALERT 2
+#define NGX_LOG_CRIT 3
+#define NGX_LOG_ERR 4
+#define NGX_LOG_WARN 5
+#define NGX_LOG_NOTICE 6
+#define NGX_LOG_INFO 7
+#define NGX_LOG_DEBUG 8
-#define NGX_LOG_DEBUG_CORE 0x10
-#define NGX_LOG_DEBUG_ALLOC 0x20
-#define NGX_LOG_DEBUG_EVENT 0x40
-#define NGX_LOG_DEBUG_HTTP 0x80
+#define NGX_LOG_DEBUG_CORE 0x10
+#define NGX_LOG_DEBUG_ALLOC 0x20
+#define NGX_LOG_DEBUG_EVENT 0x40
+#define NGX_LOG_DEBUG_HTTP 0x80
-#define NGX_LOG_DEBUG_FIRST NGX_LOG_DEBUG_CORE
-#define NGX_LOG_DEBUG_LAST NGX_LOG_DEBUG_HTTP
-#define NGX_LOG_DEBUG_ALL 0xfffffff0
+#define NGX_LOG_DEBUG_FIRST NGX_LOG_DEBUG_CORE
+#define NGX_LOG_DEBUG_LAST NGX_LOG_DEBUG_HTTP
+#define NGX_LOG_DEBUG_CONNECTION 0x80000000
+#define NGX_LOG_DEBUG_ALL 0x7ffffff0
/*
diff --git a/src/event/modules/ngx_kqueue_module.c b/src/event/modules/ngx_kqueue_module.c
index c339660..abc577b 100644
--- a/src/event/modules/ngx_kqueue_module.c
+++ b/src/event/modules/ngx_kqueue_module.c
@@ -22,6 +22,8 @@
static int ngx_kqueue_del_event(ngx_event_t *ev, int event, u_int flags);
static int ngx_kqueue_set_event(ngx_event_t *ev, int filter, u_int flags);
static int ngx_kqueue_process_events(ngx_cycle_t *cycle);
+static ngx_inline void ngx_kqueue_dump_event(ngx_log_t *log,
+ struct kevent *kev);
static void *ngx_kqueue_create_conf(ngx_cycle_t *cycle);
static char *ngx_kqueue_init_conf(ngx_cycle_t *cycle, void *conf);
@@ -443,17 +445,7 @@
for (i = 0; i < events; i++) {
- ngx_log_debug6(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
-
- (event_list[i].ident > 0x8000000
- && event_list[i].ident != (unsigned) -1) ?
- "kevent: " PTR_FMT ": ft:%d fl:%04X ff:%08X d:%d ud:"
- PTR_FMT:
- "kevent: %d: ft:%d fl:%04X ff:%08X d:%d ud:" PTR_FMT,
-
- event_list[i].ident, event_list[i].filter,
- event_list[i].flags, event_list[i].fflags,
- event_list[i].data, event_list[i].udata);
+ ngx_kqueue_dump_event(cycle->log, &event_list[i]);
if (event_list[i].flags & EV_ERROR) {
ngx_log_error(NGX_LOG_ALERT, cycle->log, event_list[i].data,
@@ -472,6 +464,10 @@
ev = (ngx_event_t *) ((uintptr_t) ev & (uintptr_t) ~1);
ev->returned_instance = instance;
+ if (ev->log && (ev->log->log_level & NGX_LOG_DEBUG_CONNECTION)) {
+ ngx_kqueue_dump_event(ev->log, &event_list[i]);
+ }
+
if (!ev->active || ev->instance != instance) {
/*
@@ -560,6 +556,19 @@
}
+static ngx_inline void ngx_kqueue_dump_event(ngx_log_t *log, struct kevent *kev)
+{
+ ngx_log_debug6(NGX_LOG_DEBUG_EVENT, log, 0,
+ (kev->ident > 0x8000000 && kev->ident != (unsigned) -1) ?
+ "kevent: " PTR_FMT ": ft:%d fl:%04X ff:%08X d:%d ud:"
+ PTR_FMT:
+ "kevent: %d: ft:%d fl:%04X ff:%08X d:%d ud:" PTR_FMT,
+ kev->ident, kev->filter,
+ kev->flags, kev->fflags,
+ kev->data, kev->udata);
+}
+
+
static void *ngx_kqueue_create_conf(ngx_cycle_t *cycle)
{
ngx_kqueue_conf_t *kcf;
diff --git a/src/event/ngx_event.c b/src/event/ngx_event.c
index ebb56ce..c5ea45d 100644
--- a/src/event/ngx_event.c
+++ b/src/event/ngx_event.c
@@ -35,6 +35,8 @@
static char *ngx_event_connections(ngx_conf_t *cf, ngx_command_t *cmd,
void *conf);
static char *ngx_event_use(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
+static char *ngx_event_debug_connection(ngx_conf_t *cf, ngx_command_t *cmd,
+ void *conf);
static void *ngx_event_create_conf(ngx_cycle_t *cycle);
static char *ngx_event_init_conf(ngx_cycle_t *cycle, void *conf);
@@ -117,6 +119,13 @@
offsetof(ngx_event_conf_t, accept_mutex_delay),
NULL },
+ { ngx_string("debug_connection"),
+ NGX_EVENT_CONF|NGX_CONF_TAKE1,
+ ngx_event_debug_connection,
+ 0,
+ 0,
+ NULL },
+
ngx_null_command
};
@@ -517,6 +526,52 @@
}
+static char *ngx_event_debug_connection(ngx_conf_t *cf, ngx_command_t *cmd,
+ void *conf)
+{
+#if (NGX_DEBUG)
+ ngx_event_conf_t *ecf = conf;
+
+ in_addr_t *addr;
+ ngx_str_t *value;
+ struct hostent *h;
+
+ value = cf->args->elts;
+
+ /* AF_INET only */
+
+ if (!(addr = ngx_push_array(&ecf->debug_connection))) {
+ return NGX_CONF_ERROR;
+ }
+
+ *addr = inet_addr((char *) value[1].data);
+
+ if (*addr != INADDR_NONE) {
+ return NGX_OK;
+ }
+
+ h = gethostbyname((char *) value[1].data);
+
+ if (h == NULL || h->h_addr_list[0] == NULL) {
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+ "host %s not found", value[1].data);
+ return NGX_CONF_ERROR;
+ }
+
+ *addr = *(in_addr_t *)(h->h_addr_list[0]);
+
+#else
+
+ ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
+ "\"debug_connection\" is ignored, you need to rebuild "
+ "nginx using --with-debug option to enable it");
+
+#endif
+
+ return NGX_OK;
+}
+
+
static void *ngx_event_create_conf(ngx_cycle_t *cycle)
{
ngx_event_conf_t *ecf;
@@ -531,6 +586,11 @@
ecf->accept_mutex_delay = NGX_CONF_UNSET_MSEC;
ecf->name = (void *) NGX_CONF_UNSET;
+#if (NGX_DEBUG)
+ ngx_init_array(ecf->debug_connection, cycle->pool, 5, sizeof(in_addr_t),
+ NGX_CONF_ERROR);
+#endif
+
return ecf;
}
diff --git a/src/event/ngx_event.h b/src/event/ngx_event.h
index 1dcfe50..433d6cf 100644
--- a/src/event/ngx_event.h
+++ b/src/event/ngx_event.h
@@ -381,15 +381,19 @@
typedef struct {
- ngx_int_t connections;
- ngx_int_t use;
+ ngx_int_t connections;
+ ngx_int_t use;
- ngx_flag_t multi_accept;
- ngx_flag_t accept_mutex;
+ ngx_flag_t multi_accept;
+ ngx_flag_t accept_mutex;
- ngx_msec_t accept_mutex_delay;
+ ngx_msec_t accept_mutex_delay;
- u_char *name;
+ u_char *name;
+
+#if (NGX_DEBUG)
+ ngx_array_t debug_connection;
+#endif
} ngx_event_conf_t;
diff --git a/src/event/ngx_event_accept.c b/src/event/ngx_event_accept.c
index c955bbf..70db78d 100644
--- a/src/event/ngx_event_accept.c
+++ b/src/event/ngx_event_accept.c
@@ -275,6 +275,25 @@
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
"accept: fd:%d c:%d", s, c->number);
+#if (NGX_DEBUG)
+ {
+
+ uint32_t *addr;
+ in_addr_t i;
+ struct sockaddr_in *addr_in;
+
+ addr_in = (struct sockaddr_in *) sa;
+ addr = ecf->debug_connection.elts;
+ for (i = 0; i < ecf->debug_connection.nelts; i++) {
+ if (addr[i] == addr_in->sin_addr.s_addr) {
+ log->log_level = NGX_LOG_DEBUG_CONNECTION|NGX_LOG_DEBUG_ALL;
+ break;
+ }
+ }
+
+ }
+#endif
+
if (ngx_add_conn) {
if (ngx_add_conn(c) == NGX_ERROR) {
if (ngx_close_socket(s) == -1) {
diff --git a/src/http/modules/ngx_http_charset_filter.c b/src/http/modules/ngx_http_charset_filter.c
index a545eaf..052a1f8 100644
--- a/src/http/modules/ngx_http_charset_filter.c
+++ b/src/http/modules/ngx_http_charset_filter.c
@@ -62,6 +62,12 @@
{
ngx_http_charset_loc_conf_t *lcf;
+ lcf = ngx_http_get_module_loc_conf(r, ngx_http_charset_filter_module);
+
+ if (lcf->default_charset.len == 0) {
+ return ngx_http_next_header_filter(r);
+ }
+
if (r->headers_out.content_type == NULL
|| ngx_strncasecmp(r->headers_out.content_type->value.data,
"text/", 5) != 0
@@ -72,8 +78,6 @@
return ngx_http_next_header_filter(r);
}
- lcf = ngx_http_get_module_loc_conf(r, ngx_http_charset_filter_module);
-
if (r->headers_out.status == NGX_HTTP_MOVED_PERMANENTLY
&& r->headers_out.status == NGX_HTTP_MOVED_TEMPORARILY)
{
@@ -135,7 +139,7 @@
ngx_http_charset_loc_conf_t *conf = child;
ngx_conf_merge_str_value(conf->default_charset,
- prev->default_charset, "koi8-r");
+ prev->default_charset, "");
return NGX_CONF_OK;
}
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c
index 3ae6182..6b0db26 100644
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -482,7 +482,9 @@
r->loc_conf = clcfp[i]->loc_conf;
clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
r->connection->log->file = clcf->err_log->file;
- r->connection->log->log_level = clcf->err_log->log_level;
+ if (!(r->connection->log->log_level & NGX_LOG_DEBUG_CONNECTION)) {
+ r->connection->log->log_level = clcf->err_log->log_level;
+ }
if (clcfp[i]->exact_match && r->uri.len == clcfp[i]->name.len) {
#if (HAVE_PCRE)
@@ -529,7 +531,9 @@
r->loc_conf = clcfp[i]->loc_conf;
clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
r->connection->log->file = clcf->err_log->file;
- r->connection->log->log_level = clcf->err_log->log_level;
+ if (!(r->connection->log->log_level & NGX_LOG_DEBUG_CONNECTION)) {
+ r->connection->log->log_level = clcf->err_log->log_level;
+ }
break;
}
diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c
index a2a0fed..9233f89 100644
--- a/src/http/ngx_http_request.c
+++ b/src/http/ngx_http_request.c
@@ -231,7 +231,9 @@
clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
c->log->file = clcf->err_log->file;
- c->log->log_level = clcf->err_log->log_level;
+ if (!(c->log->log_level & NGX_LOG_DEBUG_CONNECTION)) {
+ c->log->log_level = clcf->err_log->log_level;
+ }
if (c->buffer == NULL) {
c->buffer = ngx_create_temp_hunk(c->pool,
diff --git a/src/http/ngx_http_write_filter.c b/src/http/ngx_http_write_filter.c
index 5fa144f..8c1a98a 100644
--- a/src/http/ngx_http_write_filter.c
+++ b/src/http/ngx_http_write_filter.c
@@ -133,7 +133,7 @@
* the size of the hunks is smaller than "postpone_output" directive
*/
- if (!last && flush == 0 && size < conf->postpone_output) {
+ if (!last && flush == 0 && size < (off_t) conf->postpone_output) {
return NGX_OK;
}