diff options
| author | Igor Sysoev <igor@sysoev.ru> | 2002-12-10 18:05:12 +0000 |
|---|---|---|
| committer | Igor Sysoev <igor@sysoev.ru> | 2002-12-10 18:05:12 +0000 |
| commit | b0869056bb4385a6b30fc58c653716c45ed33916 (patch) | |
| tree | 8522c66320ee59e4671f23058a971d9556d1a6a0 /src/http/modules | |
| parent | ef259d140f378be8d7936d04038354a93cccb461 (diff) | |
| download | nginx-b0869056bb4385a6b30fc58c653716c45ed33916.tar.gz nginx-b0869056bb4385a6b30fc58c653716c45ed33916.tar.bz2 | |
nginx-0.0.1-2002-12-10-21:05:12 import
Diffstat (limited to 'src/http/modules')
| -rw-r--r-- | src/http/modules/ngx_http_event_proxy_handler.c | 27 | ||||
| -rw-r--r-- | src/http/modules/ngx_http_event_proxy_handler.h | 2 | ||||
| -rw-r--r-- | src/http/modules/ngx_http_index_handler.c | 56 | ||||
| -rw-r--r-- | src/http/modules/ngx_http_index_handler.h | 5 | ||||
| -rw-r--r-- | src/http/modules/ngx_http_static_handler.c | 40 |
5 files changed, 80 insertions, 50 deletions
diff --git a/src/http/modules/ngx_http_event_proxy_handler.c b/src/http/modules/ngx_http_event_proxy_handler.c index b67bb2516..af3546863 100644 --- a/src/http/modules/ngx_http_event_proxy_handler.c +++ b/src/http/modules/ngx_http_event_proxy_handler.c @@ -65,8 +65,9 @@ static ngx_chain_t *ngx_http_proxy_create_request(ngx_http_request_t *r) ngx_chain_t *chain; ngx_table_elt_t *header; - /* "+ 4" is for "\r\n" after request line and at the header end */ - len = r->request_line.len + 4; + /* 2 is for "\r\n" after request line + and 2 is for "\r\n" at the header end */ + len = r->request_line.len + 2 + 2; /* "Connection: close\r\n" */ len += sizeof(conn_close) - 1; @@ -79,8 +80,8 @@ static ngx_chain_t *ngx_http_proxy_create_request(ngx_http_request_t *r) if (&header[i] == r->headers_in.connection) continue; - /* "+ 4" is for ": " and "\r\n" */ - len += header[i].key.len + header[i].value.len + 4; + /* 2 is for ": " and 2 is for "\r\n" */ + len += header[i].key.len + 2 + header[i].value.len + 2; } /* STUB */ len++; @@ -320,6 +321,7 @@ static int ngx_http_proxy_read_response_header(ngx_event_t *ev) ngx_http_proxy_process_status_line(r, p) ngx_http_proxy_process_reponse_header(r, p) */ +#if 0 do { rc = (p->state_handler)(r, p); @@ -329,6 +331,7 @@ static int ngx_http_proxy_read_response_header(ngx_event_t *ev) /* rc == NGX_OK || rc == NGX_AGAIN */ } while (p->header_in->pos.mem < p->header_in->last.mem); +#endif ev->event_handler = ngx_http_proxy_read_response_body; if (p->header_in->end - p->header_in->last.mem == 0) @@ -342,11 +345,11 @@ static int ngx_http_proxy_process_status_line(ngx_http_request_t *r, { int rc; - ngx_log_debug(r->connection->log, "STATUS: %d" _ p->status); - rc = ngx_read_http_proxy_status_line(p); - ngx_log_debug(r->connection->log, "STATUS: %d" _ p->status); + if (rc == NGX_HTTP_PROXY_PARSE_NO_HEADER) { + p->status = 200; + } if (rc == NGX_OK) { /* STUB */ @@ -365,6 +368,11 @@ static int ngx_http_proxy_process_status_line(ngx_http_request_t *r, /* STUB */ return NGX_ERROR; } +static int ngx_http_proxy_process_response_header(ngx_http_request_t *r, + ngx_http_proxy_ctx_t *p) +{ +} + static int ngx_http_proxy_read_response_body(ngx_event_t *ev) { int n; @@ -560,8 +568,10 @@ fprintf(stderr, "state: %d, pos: %x, end: %x, char: '%c', status: %d\n", ctx->status = ctx->status * 10 + ch - '0'; - if (++ctx->status_count == 3) + if (++ctx->status_count == 3) { state = sw_space_after_status; + ctx->status_line = p - 3; + } break; @@ -569,7 +579,6 @@ fprintf(stderr, "state: %d, pos: %x, end: %x, char: '%c', status: %d\n", case sw_space_after_status: switch (ch) { case ' ': - ctx->status_text = p - 1; state = sw_status_text; break; case CR: diff --git a/src/http/modules/ngx_http_event_proxy_handler.h b/src/http/modules/ngx_http_event_proxy_handler.h index ffc3a151c..596a1937a 100644 --- a/src/http/modules/ngx_http_event_proxy_handler.h +++ b/src/http/modules/ngx_http_event_proxy_handler.h @@ -30,7 +30,7 @@ struct ngx_http_proxy_ctx_s { int state; int status; int status_count; - char *status_text; + char *status_line; char *request_end; int (*state_handler)(ngx_http_request_t *r, ngx_http_proxy_ctx_t *p); }; diff --git a/src/http/modules/ngx_http_index_handler.c b/src/http/modules/ngx_http_index_handler.c index 6877b3341..b6e0adb85 100644 --- a/src/http/modules/ngx_http_index_handler.c +++ b/src/http/modules/ngx_http_index_handler.c @@ -11,17 +11,24 @@ static void *ngx_http_index_create_conf(ngx_pool_t *pool); -static char *ngx_http_index_set_index(ngx_pool_t *p, void *conf, char *value); +static void *ngx_http_index_merge_conf(ngx_pool_t *p, + void *parent, void *child); +static char *ngx_http_index_set_index(ngx_pool_t *p, void *conf, + ngx_str_t *value); static ngx_command_t ngx_http_index_commands[]; ngx_http_module_t ngx_http_index_module = { NGX_HTTP_MODULE, + NULL, /* create server config */ ngx_http_index_create_conf, /* create location config */ ngx_http_index_commands, /* module directives */ + NULL, /* init module */ + NULL, /* translate handler */ + NULL, /* init output body filter */ }; @@ -36,32 +43,32 @@ static ngx_command_t ngx_http_index_commands[] = { }; + int ngx_http_index_handler(ngx_http_request_t *r) { - int index_len, i; - char *name, *loc, *file; + int i; + char *name, *file; + ngx_str_t loc, *index; ngx_err_t err; ngx_fd_t fd; - ngx_http_index_file_t *index; ngx_http_index_conf_t *cf; cf = (ngx_http_index_conf_t *) ngx_get_module_loc_conf(r, ngx_http_index_module); - index_len = (*(r->uri_end - 1) == '/') ? cf->max_index_len : 0; - ngx_test_null(name, - ngx_palloc(r->pool, r->uri_end - r->uri_start + index_len - + r->server->doc_root_len), + ngx_palloc(r->pool, + r->server->doc_root_len + r->uri.len + + cf->max_index_len), NGX_HTTP_INTERNAL_SERVER_ERROR); - loc = ngx_cpystrn(name, r->server->doc_root, r->server->doc_root_len); - file = ngx_cpystrn(loc, r->uri_start, r->uri_end - r->uri_start + 1); + loc.data = ngx_cpystrn(name, r->server->doc_root, r->server->doc_root_len); + file = ngx_cpystrn(loc.data, r->uri.data, r->uri.len + 1); - index = (ngx_http_index_file_t *) cf->indices->elts; + index = (ngx_str_t *) cf->indices->elts; for (i = 0; i < cf->indices->nelts; i++) { - ngx_memcpy(file, index[i].name, index[i].len); + ngx_memcpy(file, index[i].data, index[i].len + 1); fd = ngx_open_file(name, NGX_FILE_RDONLY); if (fd == -1) { @@ -75,15 +82,18 @@ int ngx_http_index_handler(ngx_http_request_t *r) return NGX_HTTP_INTERNAL_SERVER_ERROR; } - r->filename = name; + r->filename.len = r->server->doc_root_len + r->uri.len + index[i].len; + r->filename.data = name; r->fd = fd; + loc.len = r->uri.len + index[i].len; return ngx_http_internal_redirect(r, loc); } return NGX_DECLINED; } + static void *ngx_http_index_create_conf(ngx_pool_t *pool) { ngx_http_index_conf_t *conf; @@ -91,38 +101,42 @@ static void *ngx_http_index_create_conf(ngx_pool_t *pool) ngx_test_null(conf, ngx_pcalloc(pool, sizeof(ngx_http_index_conf_t)), NULL); ngx_test_null(conf->indices, - ngx_create_array(pool, sizeof(ngx_http_index_file_t), 3), + ngx_create_array(pool, sizeof(ngx_str_t), 3), NULL); return conf; } + static void *ngx_http_index_merge_conf(ngx_pool_t *p, void *parent, void *child) { ngx_http_index_conf_t *prev = (ngx_http_index_conf_t *) parent; ngx_http_index_conf_t *conf = (ngx_http_index_conf_t *) child; - ngx_http_index_file_t *index; + ngx_str_t *index; if (conf->max_index_len == 0) { if (prev->max_index_len != 0) return prev; ngx_test_null(index, ngx_push_array(conf->indices), NULL); - index->name = NGX_HTTP_INDEX; - conf->max_index_len = index->len = sizeof(NGX_HTTP_INDEX) + 1; + index->len = sizeof(NGX_HTTP_INDEX) - 1; + index->data = NGX_HTTP_INDEX; + conf->max_index_len = sizeof(NGX_HTTP_INDEX); } return conf; } -static char *ngx_http_index_set_index(ngx_pool_t *p, void *conf, char *value) + +static char *ngx_http_index_set_index(ngx_pool_t *p, void *conf, + ngx_str_t *value) { ngx_http_index_conf_t *cf = (ngx_http_index_conf_t *) conf; - ngx_http_index_file_t *index; + ngx_str_t *index; ngx_test_null(index, ngx_push_array(cf->indices), NULL); - index->name = value; - index->len = strlen(value) + 1; + index->len = value->len; + index->data = value->data; if (cf->max_index_len < index->len) cf->max_index_len = index->len; diff --git a/src/http/modules/ngx_http_index_handler.h b/src/http/modules/ngx_http_index_handler.h index 721bf2520..66261b0bc 100644 --- a/src/http/modules/ngx_http_index_handler.h +++ b/src/http/modules/ngx_http_index_handler.h @@ -14,11 +14,6 @@ typedef struct { size_t max_index_len; } ngx_http_index_conf_t; -typedef struct { - char *name; - size_t len; -} ngx_http_index_file_t; - extern ngx_http_module_t ngx_http_index_module; diff --git a/src/http/modules/ngx_http_static_handler.c b/src/http/modules/ngx_http_static_handler.c index 6b2083991..cded5f017 100644 --- a/src/http/modules/ngx_http_static_handler.c +++ b/src/http/modules/ngx_http_static_handler.c @@ -40,11 +40,13 @@ int ngx_http_static_handler(ngx_http_request_t *r) ctx = r->connection->log->data; ctx->action = "sending response"; - r->fd = ngx_open_file(r->filename, NGX_FILE_RDONLY); + if (r->fd != -1) + r->fd = ngx_open_file(r->filename.data, NGX_FILE_RDONLY); + if (r->fd == -1) { ngx_log_error(NGX_LOG_ERR, r->connection->log, ngx_errno, "ngx_http_static_handler: " - ngx_open_file_n " %s failed", r->filename); + ngx_open_file_n " %s failed", r->filename.data); return NGX_HTTP_INTERNAL_SERVER_ERROR; } @@ -52,7 +54,7 @@ int ngx_http_static_handler(ngx_http_request_t *r) if (ngx_stat_fd(r->fd, &r->fileinfo) == -1) { ngx_log_error(NGX_LOG_ERR, r->connection->log, ngx_errno, "ngx_http_static_handler: " - ngx_stat_fd_n " %s failed", r->filename); + ngx_stat_fd_n " %s failed", r->filename.data); /* close fd */ return NGX_HTTP_INTERNAL_SERVER_ERROR; @@ -64,25 +66,35 @@ int ngx_http_static_handler(ngx_http_request_t *r) r->headers_out.last_modified = ngx_file_mtime(r->fileinfo); */ + ngx_test_null(r->headers_out.content_type, + ngx_push_table(r->headers_out.headers), + NGX_HTTP_INTERNAL_SERVER_ERROR); + r->headers_out.content_type->key.len = 12; + r->headers_out.content_type->key.data = "Content-Type"; + /* STUB */ - if (r->exten) { - if (strcasecmp(r->exten, "html") == 0) - r->headers_out.content_type = "text/html; charset=koi8-r"; - else if (strcasecmp(r->exten, "gif") == 0) - r->headers_out.content_type = "image/gif"; - else if (strcasecmp(r->exten, "jpg") == 0) - r->headers_out.content_type = "image/jpeg"; - else if (strcasecmp(r->exten, "pdf") == 0) - r->headers_out.content_type = "application/pdf"; + if (r->exten.len) { + if (strcasecmp(r->exten.data, "html") == 0) { + r->headers_out.content_type->value.len = 25; + r->headers_out.content_type->value.data = + "text/html; charset=koi8-r"; + } else if (strcasecmp(r->exten.data, "gif") == 0) { + r->headers_out.content_type->value.len = 9; + r->headers_out.content_type->value.data = "image/gif"; + } else if (strcasecmp(r->exten.data, "jpg") == 0) { + r->headers_out.content_type->value.len = 10; + r->headers_out.content_type->value.data = "image/jpeg"; + } } else { - r->headers_out.content_type = "text/html; charset=koi8-r"; + r->headers_out.content_type->value.len = 25; + r->headers_out.content_type->value.data = "text/html; charset=koi8-r"; } /* STUB */ rc = ngx_http_header_filter(r); /* - rc = ngx_send_http_header(r->headers_out); + rc = ngx_send_http_header(r); */ if (r->header_only) return rc; |
