Mercurial > hg > nginx
diff src/http/ngx_http_cache.c @ 171:aff0e5d32af8
nginx-0.0.1-2003-11-03-20:33:31 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Mon, 03 Nov 2003 17:33:31 +0000 |
parents | c42be4185301 |
children | caa57ddf6d77 |
line wrap: on
line diff
--- a/src/http/ngx_http_cache.c +++ b/src/http/ngx_http_cache.c @@ -8,12 +8,12 @@ int ngx_http_cache_get_file(ngx_http_request_t *r, ngx_http_cache_ctx_t *ctx) { - int small; - ssize_t n, len; - MD5_CTX md5; - ngx_err_t err; - ngx_str_t key; - ngx_http_bin_cache_t *h; + ssize_t n; + MD5_CTX md5; + ngx_err_t err; + ngx_http_cache_file_t *h; + + ctx->header_size = sizeof(ngx_http_cache_file_t) + ctx->key.len + 1; ctx->file.name.len = ctx->path->name.len + 1 + ctx->path->len + 32; if (!(ctx->file.name.data = ngx_palloc(r->pool, ctx->file.name.len + 1))) { @@ -43,13 +43,6 @@ ngx_log_debug(r->connection->log, "FILE: err = ngx_errno; if (err == NGX_ENOENT || err == NGX_ENOTDIR) { - - /* TODO: text size */ - - ctx->header.size = 2 * sizeof(ssize_t) - + sizeof(ngx_http_cache_header_t) - + ctx->key.len + 1; - return NGX_DECLINED; } @@ -65,58 +58,31 @@ ngx_log_debug(r->connection->log, "FILE: return n; } - len = 0; - small = 1; - - if (n > 1) { - if (ctx->buf->pos[0] == 'T') { - /* STUB */ - return NGX_ERROR; - - } else if (ctx->buf->pos[0] == 'B') { - - len = sizeof(ngx_http_bin_cache_t); - - if (n > len) { - h = (ngx_http_bin_cache_t *) ctx->buf->pos; - key.len = h->key_len; - - if (n >= len + (ssize_t) key.len + 1) { - ctx->header = h->header; - key.data = h->key; - - small = 0; - } - } - - } else { - ngx_log_error(NGX_LOG_CRIT, r->connection->log, 0, - "unknown type of cache file \"%s\"", - ctx->file.name.data); - return NGX_ERROR; - } - - } - - if (small) { + if (n <= ctx->header_size) { ngx_log_error(NGX_LOG_CRIT, r->connection->log, 0, - "cache file \"%s\" is to small", ctx->file.name.data); + "cache file \"%s\" is too small", ctx->file.name.data); return NGX_ERROR; } - if (key.len != ctx->key.len - || ngx_strncmp(key.data, ctx->key.data, key.len) != 0) + h = (ngx_http_cache_file_t *) ctx->buf->pos; + ctx->header = h->header; + + if (h->key_len != ctx->key.len + || ngx_strncmp(h->key, ctx->key.data, h->key_len) != 0) { - key.data[key.len] = '\0'; + h->key[h->key_len] = '\0'; ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0, "md5 collision: \"%s\" and \"%s\"", - key.data, ctx->key.data); + h->key, ctx->key.data); return NGX_DECLINED; } - ctx->header.size = len + key.len + 1; ctx->buf->last += n; + if (ctx->header.expires < ngx_time()) { + return NGX_STALE; + } + return NGX_OK; }