ngx_int_t ngx_http_file_cache_create(ngx_http_request_t *r) { ngx_http_cache_t *c; ngx_pool_cleanup_t *cln; ngx_http_file_cache_t *cache; ngx_http_file_cache_create_key(r); c = r->cache; cache = c->file_cache; cln = ngx_pool_cleanup_add(r->pool, 0); if (cln == NULL) { return NGX_ERROR; } if (ngx_http_file_cache_exists(cache, c) == NGX_ERROR) { return NGX_ERROR; } cln->handler = ngx_http_file_cache_cleanup; cln->data = c; if (ngx_http_file_cache_name(r, cache->path) != NGX_OK) { return NGX_ERROR; } return NGX_OK; }
static void ngx_http_filter_cache_create_key(ngx_http_request_t *r) { ngx_http_cache_t *c = NULL; ngx_http_filter_cache_ctx_t *ctx = NULL; ctx = r->filter_cache; c = r->cache; r->cache = ctx->cache; ngx_http_file_cache_create_key(r); r->cache = c; }
ngx_int_t ngx_http_cache_purge_init(ngx_http_request_t *r, ngx_http_file_cache_t *cache, ngx_http_complex_value_t *cache_key) { ngx_http_cache_t *c; ngx_str_t *key; ngx_int_t rc; rc = ngx_http_discard_request_body(r); if (rc != NGX_OK) { return NGX_ERROR; } c = ngx_pcalloc(r->pool, sizeof(ngx_http_cache_t)); if (c == NULL) { return NGX_ERROR; } rc = ngx_array_init(&c->keys, r->pool, 1, sizeof(ngx_str_t)); if (rc != NGX_OK) { return NGX_ERROR; } key = ngx_array_push(&c->keys); if (key == NULL) { return NGX_ERROR; } rc = ngx_http_complex_value(r, cache_key, key); if (rc != NGX_OK) { return NGX_ERROR; } r->cache = c; c->body_start = ngx_pagesize; c->file_cache = cache; c->file.log = r->connection->log; ngx_http_file_cache_create_key(r); return NGX_OK; }