annotate src/core/ngx_hash.h @ 196:8759b346e431 NGINX_0_3_45

nginx 0.3.45 *) Feature: the "ssl_verify_client", "ssl_verify_depth", and "ssl_client_certificate" directives. *) Change: the $request_method variable now returns the main request method. *) Change: the ° symbol codes were changed in koi-win conversion table. *) Feature: the euro É N symbols were added to koi-win conversion table. *) Bugfix: if nginx distributed the requests among several backends and some backend failed, then requests intended for this backend was directed to one live backend only instead of being distributed among the rest.
author Igor Sysoev <http://sysoev.ru>
date Sat, 06 May 2006 00:00:00 +0400
parents 36af50a5582d
children e6da4931e0e0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
56
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2 /*
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
3 * Copyright (C) Igor Sysoev
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
4 */
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
5
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
6
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
7 #ifndef _NGX_HASH_H_INCLUDED_
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
8 #define _NGX_HASH_H_INCLUDED_
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
9
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
10
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
11 #include <ngx_config.h>
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
12 #include <ngx_core.h>
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
13
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
14
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
15 typedef struct {
138
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
16 void *value;
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
17 u_char len;
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
18 u_char name[1];
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
19 } ngx_hash_elt_t;
56
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
20
138
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
21
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
22 typedef struct {
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
23 ngx_hash_elt_t **buckets;
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
24 ngx_uint_t size;
56
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
25 } ngx_hash_t;
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
26
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
27
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
28 typedef struct {
138
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
29 ngx_hash_t hash;
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
30 void *value;
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
31 } ngx_hash_wildcard_t;
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
32
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
33
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
34 typedef struct {
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
35 ngx_str_t key;
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
36 ngx_uint_t key_hash;
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
37 void *value;
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
38 } ngx_hash_key_t;
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
39
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
40
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
41 typedef ngx_uint_t (*ngx_hash_key_pt) (u_char *data, size_t len);
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
42
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
43
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
44 typedef struct {
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
45 ngx_hash_t *hash;
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
46 ngx_hash_key_pt key;
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
47
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
48 ngx_uint_t max_size;
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
49 ngx_uint_t bucket_size;
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
50
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
51 char *name;
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
52 ngx_pool_t *pool;
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
53 ngx_pool_t *temp_pool;
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
54 } ngx_hash_init_t;
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
55
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
56
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
57 #define NGX_HASH_SMALL 1
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
58 #define NGX_HASH_LARGE 2
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
59
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
60 #define NGX_HASH_LARGE_ASIZE 16384
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
61 #define NGX_HASH_LARGE_HSIZE 10007
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
62
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
63 #define NGX_HASH_WILDCARD_KEY 1
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 142
diff changeset
64 #define NGX_HASH_READONLY_KEY 2
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
65
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
66
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
67 typedef struct {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
68 ngx_uint_t hsize;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
69
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
70 ngx_pool_t *pool;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
71 ngx_pool_t *temp_pool;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
72
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
73 ngx_array_t keys;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
74 ngx_array_t *keys_hash;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
75
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
76 ngx_array_t dns_wildcards;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
77 ngx_array_t *dns_wildcards_hash;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
78 } ngx_hash_keys_arrays_t;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
79
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
80
138
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
81 typedef struct {
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
82 void **buckets;
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
83 ngx_uint_t hash_size;
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
84
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
85 ngx_uint_t max_size;
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
86 ngx_uint_t bucket_limit;
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
87 size_t bucket_size;
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
88 char *name;
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
89 ngx_uint_t min_buckets;
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
90 } ngx_hash0_t;
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
91
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
92
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
93 typedef struct {
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
94 ngx_uint_t hash;
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
95 ngx_str_t key;
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
96 ngx_str_t value;
56
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
97 } ngx_table_elt_t;
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
98
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
99
138
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
100 void *ngx_hash_find(ngx_hash_t *hash, ngx_uint_t key, u_char *name, size_t len);
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
101 void *ngx_hash_find_wildcard(ngx_hash_wildcard_t *hwc, u_char *name,
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
102 size_t len);
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
103
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
104 ngx_int_t ngx_hash_init(ngx_hash_init_t *hinit, ngx_hash_key_t *names,
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
105 ngx_uint_t nelts);
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
106 ngx_int_t ngx_hash_wildcard_init(ngx_hash_init_t *hinit, ngx_hash_key_t *names,
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
107 ngx_uint_t nelts);
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
108
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
109 #define ngx_hash(key, c) key * 31 + c
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
110 ngx_uint_t ngx_hash_key(u_char *data, size_t len);
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
111 ngx_uint_t ngx_hash_key_lc(u_char *data, size_t len);
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
112
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
113 ngx_int_t ngx_hash_keys_array_init(ngx_hash_keys_arrays_t *ha, ngx_uint_t type);
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
114 ngx_int_t ngx_hash_add_key(ngx_hash_keys_arrays_t *ha, ngx_str_t *key,
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
115 void *value, ngx_uint_t flags);
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
116
138
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
117
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 142
diff changeset
118 #define ngx_hash0(key, c) key + c
138
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
119 ngx_int_t ngx_hash0_init(ngx_hash0_t *hash, ngx_pool_t *pool, void *names,
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
120 ngx_uint_t nelts);
56
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
121
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
122
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
123 #endif /* _NGX_HASH_H_INCLUDED_ */