diff src/http/ngx_http_cache.c @ 97:70d2345a903f

nginx-0.0.1-2003-05-29-17:02:09 import
author Igor Sysoev <igor@sysoev.ru>
date Thu, 29 May 2003 13:02:09 +0000
parents
children a059e1aa65d4
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/src/http/ngx_http_cache.c
@@ -0,0 +1,63 @@
+
+
+
+#define NGX_HTTP_CACHE_ENTRY_DELETED  0x00000001
+#define NGX_HTTP_CACHE_ENTRY_MMAPED   0x00000002
+
+/* "/" -> "/index.html" in ngx_http_index_handler */
+#define NGX_HTTP_CACHE_ENTRY_URI      0x00000004
+
+#define NGX_HTTP_CACHE_FILTER_FLAGS   0xFFFF0000
+
+
+typedef struct {
+    ngx_fd_t   fd;
+    off_t      size;
+    void      *data;
+    time_t     accessed;
+    time_t     last_modified;
+    time_t     updated;      /* no needed with kqueue */
+    int        refs;
+    int        flags;
+} ngx_http_cache_entry_t;
+
+
+typedef struct {
+    u_int32_t          crc;
+    ngx_str_t          uri;
+    ngx_http_cache_t  *cache;
+} ngx_http_cache_hash_entry_t;
+
+
+typedef struct {
+    ngx_http_cache_t  *cache;
+    u_int32_t          crc;
+    int                n;
+} ngx_http_cache_handle_t; 
+
+
+int ngx_http_cache_get(ngx_http_cache_hash_t *cache_hash,
+                       ngx_str_t *uri, ngx_http_cache_handle_t *h)
+{
+    int                           hi;
+    ngx_http_cache_hash_entry_t  *entry;
+
+    h->crc = ngx_crc32(uri->data, uri->len);
+
+    hi = h->crc % cache_hash->size;
+    entry = cache_hash[hi].elts;
+
+    for (i = 0; i < cache_hash[hi].nelts; i++) {
+        if (entry[i].crc == crc
+            && entry[i].uri.len == uri->len
+            && ngx_strncmp(entry[i].uri.data, uri->data, uri->len) == 0
+        {
+            h->cache = entry[i].cache;
+            h->cache->refs++;
+            h->n = hi;
+            return NGX_OK;
+        }
+    }
+
+    return NGX_ERROR;
+}