aboutsummaryrefslogtreecommitdiff
path: root/src/http/modules/ngx_http_memcached_module.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/http/modules/ngx_http_memcached_module.c')
-rw-r--r--src/http/modules/ngx_http_memcached_module.c45
1 files changed, 25 insertions, 20 deletions
diff --git a/src/http/modules/ngx_http_memcached_module.c b/src/http/modules/ngx_http_memcached_module.c
index 6217dd109..89a568d2e 100644
--- a/src/http/modules/ngx_http_memcached_module.c
+++ b/src/http/modules/ngx_http_memcached_module.c
@@ -19,6 +19,7 @@ typedef struct {
typedef struct {
size_t rest;
ngx_http_request_t *request;
+ ngx_str_t key;
} ngx_http_memcached_ctx_t;
@@ -202,6 +203,8 @@ ngx_http_memcached_handler(ngx_http_request_t *r)
ctx->rest = NGX_HTTP_MEMCACHED_END;
ctx->request = r;
+ ngx_http_set_ctx(r, ctx, ngx_http_memcached_module);
+
u->input_filter_init = ngx_http_memcached_filter_init;
u->input_filter = ngx_http_memcached_filter;
u->input_filter_ctx = ctx;
@@ -215,13 +218,14 @@ ngx_http_memcached_handler(ngx_http_request_t *r)
static ngx_int_t
ngx_http_memcached_create_request(ngx_http_request_t *r)
{
- size_t len;
- ngx_buf_t *b;
- ngx_chain_t *cl;
+ size_t len;
+ ngx_buf_t *b;
+ ngx_chain_t *cl;
+ ngx_http_memcached_ctx_t *ctx;
len = sizeof("get ") - 1 + r->uri.len + sizeof(" " CRLF) - 1;
if (r->args.len) {
- len += 1+ r->args.len;
+ len += 1 + r->args.len;
}
b = ngx_create_temp_buf(r->pool, len);
@@ -241,6 +245,10 @@ ngx_http_memcached_create_request(ngx_http_request_t *r)
*b->last++ = 'g'; *b->last++ = 'e'; *b->last++ = 't'; *b->last++ = ' ';
+ ctx = ngx_http_get_module_ctx(r, ngx_http_memcached_module);
+
+ ctx->key.data = b->last;
+
b->last = ngx_copy(b->last, r->uri.data, r->uri.len);
if (r->args.len) {
@@ -248,16 +256,10 @@ ngx_http_memcached_create_request(ngx_http_request_t *r)
b->last = ngx_copy(b->last, r->args.data, r->args.len);
}
-#if (NGX_DEBUG)
- {
- ngx_str_t s;
+ ctx->key.len = b->last - ctx->key.data;
- s.len = b->last - b->pos;
- s.data = b->pos;
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
- "http memcached request: \"%V\"", &s);
- }
-#endif
+ "http memcached request: \"%V\"", &ctx->key);
*b->last++ = ' '; *b->last++ = CR; *b->last++ = LF;
@@ -275,9 +277,10 @@ ngx_http_memcached_reinit_request(ngx_http_request_t *r)
static ngx_int_t
ngx_http_memcached_process_header(ngx_http_request_t *r)
{
- u_char *p, *len;
- ngx_str_t line;
- ngx_http_upstream_t *u;
+ u_char *p, *len;
+ ngx_str_t line;
+ ngx_http_upstream_t *u;
+ ngx_http_memcached_ctx_t *ctx;
u = r->upstream;
@@ -301,20 +304,22 @@ found:
p = u->buffer.pos;
+ ctx = ngx_http_get_module_ctx(r, ngx_http_memcached_module);
+
if (ngx_strncmp(p, "VALUE ", sizeof("VALUE ") - 1) == 0) {
p += sizeof("VALUE ") - 1;
- if (ngx_strncmp(p, r->uri.data, r->uri.len) != 0) {
+ if (ngx_strncmp(p, ctx->key.data, ctx->key.len) != 0) {
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
"memcached sent invalid key in response \"%V\" "
"for key \"%V\"",
- &line, &r->uri);
+ &line, &ctx->key);
return NGX_HTTP_UPSTREAM_INVALID_HEADER;
}
- p += r->uri.len;
+ p += ctx->key.len;
if (*p++ != ' ') {
goto no_valid;
@@ -341,7 +346,7 @@ found:
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
"memcached sent invalid length in response \"%V\" "
"for key \"%V\"",
- &line, &r->uri);
+ &line, &ctx->key);
return NGX_HTTP_UPSTREAM_INVALID_HEADER;
}
@@ -353,7 +358,7 @@ found:
if (ngx_strcmp(p, "END\x0d") == 0) {
ngx_log_error(NGX_LOG_INFO, r->connection->log, 0,
- "key: \"%V\" was not found by memcached", &r->uri);
+ "key: \"%V\" was not found by memcached", &ctx->key);
u->headers_in.status_n = 404;