diff options
author | Igor Sysoev <igor@sysoev.ru> | 2004-09-15 20:00:43 +0400 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2004-09-15 20:00:43 +0400 |
commit | 85cccfba8d0c33e7f3546e630f67c1a1940c8d1f (patch) | |
tree | c11cd5f18e7de981f9c2f907093379a2fda62a32 /src/http | |
parent | dc3b2a78753bdc4c97a0007c872a4f8afd049df4 (diff) |
nginx-0.0.10-2004-09-15-20:00:43 import
Diffstat (limited to 'src/http')
-rw-r--r-- | src/http/ngx_http_log_handler.c | 38 | ||||
-rw-r--r-- | src/http/ngx_http_log_handler.h | 1 | ||||
-rw-r--r-- | src/http/ngx_http_request.c | 63 | ||||
-rw-r--r-- | src/http/ngx_http_request.h | 6 |
4 files changed, 82 insertions, 26 deletions
diff --git a/src/http/ngx_http_log_handler.c b/src/http/ngx_http_log_handler.c index 35014cf2a..3de6b10dd 100644 --- a/src/http/ngx_http_log_handler.c +++ b/src/http/ngx_http_log_handler.c @@ -137,6 +137,10 @@ ngx_int_t ngx_http_log_handler(ngx_http_request_t *r) lcf = ngx_http_get_module_loc_conf(r, ngx_http_log_module); + if (lcf->off) { + return NGX_OK; + } + log = lcf->logs->elts; for (l = 0; l < lcf->logs->nelts; l++) { @@ -662,8 +666,9 @@ static void *ngx_http_log_create_loc_conf(ngx_conf_t *cf) { ngx_http_log_loc_conf_t *conf; - ngx_test_null(conf, ngx_pcalloc(cf->pool, sizeof(ngx_http_log_loc_conf_t)), - NGX_CONF_ERROR); + if (!(conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_log_loc_conf_t)))) { + return NGX_CONF_ERROR; + } return conf; } @@ -680,17 +685,27 @@ static char *ngx_http_log_merge_loc_conf(ngx_conf_t *cf, void *parent, ngx_http_log_main_conf_t *lmcf; if (conf->logs == NULL) { + + if (conf->off) { + return NGX_CONF_OK; + } + if (prev->logs) { conf->logs = prev->logs; } else { - conf->logs = ngx_create_array(cf->pool, 2, sizeof(ngx_http_log_t)); + if (prev->off) { + conf->off = prev->off; + return NGX_CONF_OK; + } + + conf->logs = ngx_array_create(cf->pool, 2, sizeof(ngx_http_log_t)); if (conf->logs == NULL) { return NGX_CONF_ERROR; } - if (!(log = ngx_push_array(conf->logs))) { + if (!(log = ngx_array_push(conf->logs))) { return NGX_CONF_ERROR; } @@ -701,6 +716,7 @@ static char *ngx_http_log_merge_loc_conf(ngx_conf_t *cf, void *parent, lmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_log_module); fmt = lmcf->formats.elts; + /* the default "combined" format */ log->ops = fmt[0].ops; } @@ -721,17 +737,23 @@ static char *ngx_http_log_set_log(ngx_conf_t *cf, ngx_command_t *cmd, ngx_http_log_fmt_t *fmt; ngx_http_log_main_conf_t *lmcf; + value = cf->args->elts; + + if (ngx_strcmp(value[1].data, "off") == 0) { + llcf->off = 1; + return NGX_CONF_OK; + } + if (llcf->logs == NULL) { - if (!(llcf->logs = ngx_create_array(cf->pool, 2, - sizeof(ngx_http_log_t)))) { + llcf->logs = ngx_array_create(cf->pool, 2, sizeof(ngx_http_log_t)); + if (llcf->logs == NULL) { return NGX_CONF_ERROR; } } - value = cf->args->elts; lmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_log_module); - if (!(log = ngx_push_array(llcf->logs))) { + if (!(log = ngx_array_push(llcf->logs))) { return NGX_CONF_ERROR; } diff --git a/src/http/ngx_http_log_handler.h b/src/http/ngx_http_log_handler.h index 2ffc61ae2..d29e70d60 100644 --- a/src/http/ngx_http_log_handler.h +++ b/src/http/ngx_http_log_handler.h @@ -49,6 +49,7 @@ typedef struct { typedef struct { ngx_array_t *logs; /* array of ngx_http_log_t */ + ngx_uint_t off; /* unsigned off:1 */ } ngx_http_log_loc_conf_t; diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c index 8b44accd8..a930d1d67 100644 --- a/src/http/ngx_http_request.c +++ b/src/http/ngx_http_request.c @@ -97,10 +97,6 @@ void ngx_http_init_connection(ngx_connection_t *c) ngx_event_t *rev; ngx_http_log_ctx_t *ctx; -#if (NGX_STAT_STUB) - (*ngx_stat_reading)++; -#endif - if (!(ctx = ngx_pcalloc(c->pool, sizeof(ngx_http_log_ctx_t)))) { ngx_http_close_connection(c); return; @@ -133,6 +129,10 @@ void ngx_http_init_connection(ngx_connection_t *c) return; } +#if (NGX_STAT_STUB) + (*ngx_stat_reading)++; +#endif + ngx_http_init_request(rev); return; } @@ -155,6 +155,11 @@ void ngx_http_init_connection(ngx_connection_t *c) return; } #endif + +#if (NGX_STAT_STUB) + (*ngx_stat_reading)++; +#endif + } @@ -178,6 +183,11 @@ static void ngx_http_init_request(ngx_event_t *rev) if (rev->timedout) { ngx_log_error(NGX_LOG_INFO, c->log, NGX_ETIMEDOUT, "client timed out"); + +#if (NGX_STAT_STUB) + (*ngx_stat_reading)--; +#endif + ngx_http_close_connection(c); return; } @@ -186,8 +196,17 @@ static void ngx_http_init_request(ngx_event_t *rev) r = c->data; ngx_memzero(r, sizeof(ngx_http_request_t)); +#if (NGX_STAT_STUB) + (*ngx_stat_reading)++; +#endif + } else { if (!(r = ngx_pcalloc(c->pool, sizeof(ngx_http_request_t)))) { + +#if (NGX_STAT_STUB) + (*ngx_stat_reading)--; +#endif + ngx_http_close_connection(c); return; } @@ -195,6 +214,10 @@ static void ngx_http_init_request(ngx_event_t *rev) c->data = r; } +#if (NGX_STAT_STUB) + r->stat_reading = 1; +#endif + c->sent = 0; r->signature = NGX_HTTP_MODULE; @@ -869,7 +892,9 @@ static void ngx_http_process_request_headers(ngx_event_t *rev) #if (NGX_STAT_STUB) (*ngx_stat_reading)--; + r->stat_reading = 0; (*ngx_stat_writing)++; + r->stat_writing = 1; #endif rev->event_handler = ngx_http_block_read; @@ -1118,6 +1143,12 @@ static ngx_int_t ngx_http_process_request_header(ngx_http_request_t *r) ngx_ssl_set_nosendshut(r->connection->ssl); #endif } + + if (ngx_strstr(r->headers_in.user_agent->value.data, "Opera")) { + r->headers_in.opera = 1; + r->headers_in.msie = 0; + r->headers_in.msie4 = 0; + } } return NGX_OK; @@ -1148,11 +1179,6 @@ void ngx_http_finalize_request(ngx_http_request_t *r, int rc) } if (rc == NGX_HTTP_CLIENT_CLOSED_REQUEST || r->closed) { - -#if (NGX_STAT_STUB) - (*ngx_stat_writing)--; -#endif - ngx_http_close_request(r, 0); ngx_http_close_connection(r->connection); return; @@ -1163,11 +1189,6 @@ void ngx_http_finalize_request(ngx_http_request_t *r, int rc) return; } else if (rc == NGX_ERROR) { - -#if (NGX_STAT_STUB) - (*ngx_stat_writing)--; -#endif - ngx_http_close_request(r, 0); ngx_http_close_connection(r->connection); return; @@ -1177,10 +1198,6 @@ void ngx_http_finalize_request(ngx_http_request_t *r, int rc) return; } -#if (NGX_STAT_STUB) - (*ngx_stat_writing)--; -#endif - if (r->connection->read->timer_set) { ngx_del_timer(r->connection->read); } @@ -1800,6 +1817,16 @@ void ngx_http_close_request(ngx_http_request_t *r, int error) return; } +#if (NGX_STAT_STUB) + if (r->stat_reading) { + (*ngx_stat_reading)--; + } + + if (r->stat_writing) { + (*ngx_stat_writing)--; + } +#endif + if (error && r->headers_out.status == 0) { r->headers_out.status = error; } diff --git a/src/http/ngx_http_request.h b/src/http/ngx_http_request.h index 276330e34..4a579ce83 100644 --- a/src/http/ngx_http_request.h +++ b/src/http/ngx_http_request.h @@ -148,6 +148,7 @@ typedef struct { unsigned msie:1; unsigned msie4:1; + unsigned opera:1; } ngx_http_headers_in_t; @@ -308,6 +309,11 @@ struct ngx_http_request_s { unsigned filter_need_temporary:1; unsigned filter_allow_ranges:1; +#if (NGX_STAT_STUB) + unsigned stat_reading:1; + unsigned stat_writing:1; +#endif + ngx_uint_t headers_n; /* used to parse HTTP headers */ |