annotate src/http/modules/ngx_http_geoip_module.c @ 4836:e368b822d034

Gzip static: "always" parameter in "gzip_static" directive. With "always" gzip static returns gzipped content in all cases, without checking if client supports it. It is useful if there are no uncompressed files on disk anyway.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 10 Sep 2012 16:48:25 +0000
parents f57154322e0e
children a74d211f034d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2 /*
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3 * Copyright (C) Igor Sysoev
4412
d620f497c50f Copyright updated.
Maxim Konovalov <maxim@nginx.com>
parents: 3919
diff changeset
4 * Copyright (C) Nginx, Inc.
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
5 */
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
6
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_config.h>
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #include <ngx_core.h>
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10 #include <ngx_http.h>
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12 #include <GeoIP.h>
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
13 #include <GeoIPCity.h>
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
14
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
15
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
16 typedef struct {
4627
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
17 GeoIP *country;
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
18 GeoIP *org;
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
19 GeoIP *city;
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
20 ngx_array_t *proxies; /* array of ngx_cidr_t */
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
21 ngx_flag_t proxy_recursive;
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
22 } ngx_http_geoip_conf_t;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
23
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
24
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
25 typedef struct {
4627
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
26 ngx_str_t *name;
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
27 uintptr_t data;
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
28 } ngx_http_geoip_var_t;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
29
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
30
4649
95d93f7e6fa2 geoip: got rid of ugly casts when calling ngx_free().
Ruslan Ermilov <ru@nginx.com>
parents: 4648
diff changeset
31 typedef char *(*ngx_http_geoip_variable_handler_pt)(GeoIP *, u_long addr);
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
32
4627
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
33 static u_long ngx_http_geoip_addr(ngx_http_request_t *r,
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
34 ngx_http_geoip_conf_t *gcf);
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
35 static ngx_int_t ngx_http_geoip_country_variable(ngx_http_request_t *r,
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
36 ngx_http_variable_value_t *v, uintptr_t data);
3915
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
37 static ngx_int_t ngx_http_geoip_org_variable(ngx_http_request_t *r,
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
38 ngx_http_variable_value_t *v, uintptr_t data);
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
39 static ngx_int_t ngx_http_geoip_city_variable(ngx_http_request_t *r,
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
40 ngx_http_variable_value_t *v, uintptr_t data);
3737
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
41 static ngx_int_t ngx_http_geoip_region_name_variable(ngx_http_request_t *r,
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
42 ngx_http_variable_value_t *v, uintptr_t data);
3398
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
43 static ngx_int_t ngx_http_geoip_city_float_variable(ngx_http_request_t *r,
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
44 ngx_http_variable_value_t *v, uintptr_t data);
3736
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
45 static ngx_int_t ngx_http_geoip_city_int_variable(ngx_http_request_t *r,
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
46 ngx_http_variable_value_t *v, uintptr_t data);
3398
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
47 static GeoIPRecord *ngx_http_geoip_get_city_record(ngx_http_request_t *r);
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
48
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
49 static ngx_int_t ngx_http_geoip_add_variables(ngx_conf_t *cf);
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
50 static void *ngx_http_geoip_create_conf(ngx_conf_t *cf);
4627
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
51 static char *ngx_http_geoip_init_conf(ngx_conf_t *cf, void *conf);
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
52 static char *ngx_http_geoip_country(ngx_conf_t *cf, ngx_command_t *cmd,
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
53 void *conf);
3915
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
54 static char *ngx_http_geoip_org(ngx_conf_t *cf, ngx_command_t *cmd,
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
55 void *conf);
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
56 static char *ngx_http_geoip_city(ngx_conf_t *cf, ngx_command_t *cmd,
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
57 void *conf);
4627
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
58 static char *ngx_http_geoip_proxy(ngx_conf_t *cf, ngx_command_t *cmd,
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
59 void *conf);
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
60 static ngx_int_t ngx_http_geoip_cidr_value(ngx_conf_t *cf, ngx_str_t *net,
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
61 ngx_cidr_t *cidr);
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
62 static void ngx_http_geoip_cleanup(void *data);
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
63
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
64
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
65 static ngx_command_t ngx_http_geoip_commands[] = {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
66
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
67 { ngx_string("geoip_country"),
3859
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
68 NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE12,
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
69 ngx_http_geoip_country,
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
70 NGX_HTTP_MAIN_CONF_OFFSET,
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
71 0,
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
72 NULL },
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
73
3915
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
74 { ngx_string("geoip_org"),
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
75 NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE12,
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
76 ngx_http_geoip_org,
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
77 NGX_HTTP_MAIN_CONF_OFFSET,
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
78 0,
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
79 NULL },
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
80
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
81 { ngx_string("geoip_city"),
3859
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
82 NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE12,
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
83 ngx_http_geoip_city,
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
84 NGX_HTTP_MAIN_CONF_OFFSET,
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
85 0,
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
86 NULL },
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
87
4627
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
88 { ngx_string("geoip_proxy"),
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
89 NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE1,
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
90 ngx_http_geoip_proxy,
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
91 NGX_HTTP_MAIN_CONF_OFFSET,
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
92 0,
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
93 NULL },
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
94
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
95 { ngx_string("geoip_proxy_recursive"),
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
96 NGX_HTTP_MAIN_CONF|NGX_CONF_FLAG,
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
97 ngx_conf_set_flag_slot,
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
98 NGX_HTTP_MAIN_CONF_OFFSET,
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
99 offsetof(ngx_http_geoip_conf_t, proxy_recursive),
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
100 NULL },
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
101
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
102 ngx_null_command
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
103 };
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
104
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
105
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
106 static ngx_http_module_t ngx_http_geoip_module_ctx = {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
107 ngx_http_geoip_add_variables, /* preconfiguration */
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
108 NULL, /* postconfiguration */
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
109
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
110 ngx_http_geoip_create_conf, /* create main configuration */
4627
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
111 ngx_http_geoip_init_conf, /* init main configuration */
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
112
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
113 NULL, /* create server configuration */
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
114 NULL, /* merge server configuration */
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
115
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
116 NULL, /* create location configuration */
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
117 NULL /* merge location configuration */
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
118 };
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
119
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
120
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
121 ngx_module_t ngx_http_geoip_module = {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
122 NGX_MODULE_V1,
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
123 &ngx_http_geoip_module_ctx, /* module context */
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
124 ngx_http_geoip_commands, /* module directives */
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
125 NGX_HTTP_MODULE, /* module type */
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
126 NULL, /* init master */
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
127 NULL, /* init module */
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
128 NULL, /* init process */
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
129 NULL, /* init thread */
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
130 NULL, /* exit thread */
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
131 NULL, /* exit process */
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
132 NULL, /* exit master */
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
133 NGX_MODULE_V1_PADDING
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
134 };
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
135
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
136
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
137 static ngx_http_variable_t ngx_http_geoip_vars[] = {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
138
3398
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
139 { ngx_string("geoip_country_code"), NULL,
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
140 ngx_http_geoip_country_variable,
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
141 (uintptr_t) GeoIP_country_code_by_ipnum, 0, 0 },
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
142
3398
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
143 { ngx_string("geoip_country_code3"), NULL,
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
144 ngx_http_geoip_country_variable,
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
145 (uintptr_t) GeoIP_country_code3_by_ipnum, 0, 0 },
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
146
3398
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
147 { ngx_string("geoip_country_name"), NULL,
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
148 ngx_http_geoip_country_variable,
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
149 (uintptr_t) GeoIP_country_name_by_ipnum, 0, 0 },
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
150
3915
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
151 { ngx_string("geoip_org"), NULL,
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
152 ngx_http_geoip_org_variable,
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
153 (uintptr_t) GeoIP_name_by_ipnum, 0, 0 },
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
154
3398
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
155 { ngx_string("geoip_city_continent_code"), NULL,
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
156 ngx_http_geoip_city_variable,
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
157 offsetof(GeoIPRecord, continent_code), 0, 0 },
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
158
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
159 { ngx_string("geoip_city_country_code"), NULL,
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
160 ngx_http_geoip_city_variable,
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
161 offsetof(GeoIPRecord, country_code), 0, 0 },
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
162
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
163 { ngx_string("geoip_city_country_code3"), NULL,
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
164 ngx_http_geoip_city_variable,
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
165 offsetof(GeoIPRecord, country_code3), 0, 0 },
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
166
3398
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
167 { ngx_string("geoip_city_country_name"), NULL,
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
168 ngx_http_geoip_city_variable,
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
169 offsetof(GeoIPRecord, country_name), 0, 0 },
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
170
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
171 { ngx_string("geoip_region"), NULL,
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
172 ngx_http_geoip_city_variable,
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
173 offsetof(GeoIPRecord, region), 0, 0 },
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
174
3737
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
175 { ngx_string("geoip_region_name"), NULL,
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
176 ngx_http_geoip_region_name_variable,
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
177 0, 0, 0 },
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
178
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
179 { ngx_string("geoip_city"), NULL,
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
180 ngx_http_geoip_city_variable,
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
181 offsetof(GeoIPRecord, city), 0, 0 },
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
182
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
183 { ngx_string("geoip_postal_code"), NULL,
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
184 ngx_http_geoip_city_variable,
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
185 offsetof(GeoIPRecord, postal_code), 0, 0 },
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
186
3398
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
187 { ngx_string("geoip_latitude"), NULL,
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
188 ngx_http_geoip_city_float_variable,
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
189 offsetof(GeoIPRecord, latitude), 0, 0 },
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
190
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
191 { ngx_string("geoip_longitude"), NULL,
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
192 ngx_http_geoip_city_float_variable,
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
193 offsetof(GeoIPRecord, longitude), 0, 0 },
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
194
3736
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
195 { ngx_string("geoip_dma_code"), NULL,
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
196 ngx_http_geoip_city_int_variable,
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
197 offsetof(GeoIPRecord, dma_code), 0, 0 },
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
198
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
199 { ngx_string("geoip_area_code"), NULL,
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
200 ngx_http_geoip_city_int_variable,
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
201 offsetof(GeoIPRecord, area_code), 0, 0 },
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
202
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
203 { ngx_null_string, NULL, NULL, 0, 0, 0 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
204 };
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
205
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
206
3919
0dceaa117e0d support IPv4 mapped to IPv6 in geoip module
Igor Sysoev <igor@sysoev.ru>
parents: 3915
diff changeset
207 static u_long
4627
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
208 ngx_http_geoip_addr(ngx_http_request_t *r, ngx_http_geoip_conf_t *gcf)
3919
0dceaa117e0d support IPv4 mapped to IPv6 in geoip module
Igor Sysoev <igor@sysoev.ru>
parents: 3915
diff changeset
209 {
4627
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
210 ngx_addr_t addr;
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
211 ngx_table_elt_t *xfwd;
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
212 struct sockaddr_in *sin;
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
213
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
214 addr.sockaddr = r->connection->sockaddr;
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
215 addr.socklen = r->connection->socklen;
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
216 /* addr.name = r->connection->addr_text; */
3919
0dceaa117e0d support IPv4 mapped to IPv6 in geoip module
Igor Sysoev <igor@sysoev.ru>
parents: 3915
diff changeset
217
4627
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
218 xfwd = r->headers_in.x_forwarded_for;
3919
0dceaa117e0d support IPv4 mapped to IPv6 in geoip module
Igor Sysoev <igor@sysoev.ru>
parents: 3915
diff changeset
219
4627
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
220 if (xfwd != NULL && gcf->proxies != NULL) {
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
221 (void) ngx_http_get_forwarded_addr(r, &addr, xfwd->value.data,
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
222 xfwd->value.len, gcf->proxies,
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
223 gcf->proxy_recursive);
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
224 }
3919
0dceaa117e0d support IPv4 mapped to IPv6 in geoip module
Igor Sysoev <igor@sysoev.ru>
parents: 3915
diff changeset
225
0dceaa117e0d support IPv4 mapped to IPv6 in geoip module
Igor Sysoev <igor@sysoev.ru>
parents: 3915
diff changeset
226 #if (NGX_HAVE_INET6)
0dceaa117e0d support IPv4 mapped to IPv6 in geoip module
Igor Sysoev <igor@sysoev.ru>
parents: 3915
diff changeset
227
4627
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
228 if (addr.sockaddr->sa_family == AF_INET6) {
4828
f57154322e0e Fixed strict aliasing bugs when dealing with IPv4-mapped IPv6 addresses
Ruslan Ermilov <ru@nginx.com>
parents: 4649
diff changeset
229 u_char *p;
f57154322e0e Fixed strict aliasing bugs when dealing with IPv4-mapped IPv6 addresses
Ruslan Ermilov <ru@nginx.com>
parents: 4649
diff changeset
230 in_addr_t inaddr;
4627
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
231 struct in6_addr *inaddr6;
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
232
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
233 inaddr6 = &((struct sockaddr_in6 *) addr.sockaddr)->sin6_addr;
3919
0dceaa117e0d support IPv4 mapped to IPv6 in geoip module
Igor Sysoev <igor@sysoev.ru>
parents: 3915
diff changeset
234
4627
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
235 if (IN6_IS_ADDR_V4MAPPED(inaddr6)) {
4828
f57154322e0e Fixed strict aliasing bugs when dealing with IPv4-mapped IPv6 addresses
Ruslan Ermilov <ru@nginx.com>
parents: 4649
diff changeset
236 p = inaddr6->s6_addr;
f57154322e0e Fixed strict aliasing bugs when dealing with IPv4-mapped IPv6 addresses
Ruslan Ermilov <ru@nginx.com>
parents: 4649
diff changeset
237
f57154322e0e Fixed strict aliasing bugs when dealing with IPv4-mapped IPv6 addresses
Ruslan Ermilov <ru@nginx.com>
parents: 4649
diff changeset
238 inaddr = p[12] << 24;
f57154322e0e Fixed strict aliasing bugs when dealing with IPv4-mapped IPv6 addresses
Ruslan Ermilov <ru@nginx.com>
parents: 4649
diff changeset
239 inaddr += p[13] << 16;
f57154322e0e Fixed strict aliasing bugs when dealing with IPv4-mapped IPv6 addresses
Ruslan Ermilov <ru@nginx.com>
parents: 4649
diff changeset
240 inaddr += p[14] << 8;
f57154322e0e Fixed strict aliasing bugs when dealing with IPv4-mapped IPv6 addresses
Ruslan Ermilov <ru@nginx.com>
parents: 4649
diff changeset
241 inaddr += p[15];
f57154322e0e Fixed strict aliasing bugs when dealing with IPv4-mapped IPv6 addresses
Ruslan Ermilov <ru@nginx.com>
parents: 4649
diff changeset
242
f57154322e0e Fixed strict aliasing bugs when dealing with IPv4-mapped IPv6 addresses
Ruslan Ermilov <ru@nginx.com>
parents: 4649
diff changeset
243 return inaddr;
3919
0dceaa117e0d support IPv4 mapped to IPv6 in geoip module
Igor Sysoev <igor@sysoev.ru>
parents: 3915
diff changeset
244 }
4627
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
245 }
3919
0dceaa117e0d support IPv4 mapped to IPv6 in geoip module
Igor Sysoev <igor@sysoev.ru>
parents: 3915
diff changeset
246
0dceaa117e0d support IPv4 mapped to IPv6 in geoip module
Igor Sysoev <igor@sysoev.ru>
parents: 3915
diff changeset
247 #endif
4627
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
248
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
249 if (addr.sockaddr->sa_family != AF_INET) {
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
250 return INADDR_NONE;
3919
0dceaa117e0d support IPv4 mapped to IPv6 in geoip module
Igor Sysoev <igor@sysoev.ru>
parents: 3915
diff changeset
251 }
0dceaa117e0d support IPv4 mapped to IPv6 in geoip module
Igor Sysoev <igor@sysoev.ru>
parents: 3915
diff changeset
252
4627
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
253 sin = (struct sockaddr_in *) addr.sockaddr;
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
254 return ntohl(sin->sin_addr.s_addr);
3919
0dceaa117e0d support IPv4 mapped to IPv6 in geoip module
Igor Sysoev <igor@sysoev.ru>
parents: 3915
diff changeset
255 }
0dceaa117e0d support IPv4 mapped to IPv6 in geoip module
Igor Sysoev <igor@sysoev.ru>
parents: 3915
diff changeset
256
0dceaa117e0d support IPv4 mapped to IPv6 in geoip module
Igor Sysoev <igor@sysoev.ru>
parents: 3915
diff changeset
257
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
258 static ngx_int_t
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
259 ngx_http_geoip_country_variable(ngx_http_request_t *r,
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
260 ngx_http_variable_value_t *v, uintptr_t data)
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
261 {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
262 ngx_http_geoip_variable_handler_pt handler =
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
263 (ngx_http_geoip_variable_handler_pt) data;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
264
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
265 const char *val;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
266 ngx_http_geoip_conf_t *gcf;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
267
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
268 gcf = ngx_http_get_module_main_conf(r, ngx_http_geoip_module);
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
269
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
270 if (gcf->country == NULL) {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
271 goto not_found;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
272 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
273
4627
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
274 val = handler(gcf->country, ngx_http_geoip_addr(r, gcf));
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
275
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
276 if (val == NULL) {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
277 goto not_found;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
278 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
279
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
280 v->len = ngx_strlen(val);
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
281 v->valid = 1;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
282 v->no_cacheable = 0;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
283 v->not_found = 0;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
284 v->data = (u_char *) val;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
285
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
286 return NGX_OK;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
287
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
288 not_found:
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
289
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
290 v->not_found = 1;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
291
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
292 return NGX_OK;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
293 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
294
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
295
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
296 static ngx_int_t
3915
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
297 ngx_http_geoip_org_variable(ngx_http_request_t *r,
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
298 ngx_http_variable_value_t *v, uintptr_t data)
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
299 {
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
300 ngx_http_geoip_variable_handler_pt handler =
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
301 (ngx_http_geoip_variable_handler_pt) data;
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
302
4647
a321eadcb16c Fixed memory leak if $geoip_org variable was used.
Ruslan Ermilov <ru@nginx.com>
parents: 4627
diff changeset
303 size_t len;
4649
95d93f7e6fa2 geoip: got rid of ugly casts when calling ngx_free().
Ruslan Ermilov <ru@nginx.com>
parents: 4648
diff changeset
304 char *val;
3915
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
305 ngx_http_geoip_conf_t *gcf;
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
306
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
307 gcf = ngx_http_get_module_main_conf(r, ngx_http_geoip_module);
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
308
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
309 if (gcf->org == NULL) {
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
310 goto not_found;
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
311 }
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
312
4627
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
313 val = handler(gcf->org, ngx_http_geoip_addr(r, gcf));
3915
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
314
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
315 if (val == NULL) {
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
316 goto not_found;
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
317 }
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
318
4647
a321eadcb16c Fixed memory leak if $geoip_org variable was used.
Ruslan Ermilov <ru@nginx.com>
parents: 4627
diff changeset
319 len = ngx_strlen(val);
a321eadcb16c Fixed memory leak if $geoip_org variable was used.
Ruslan Ermilov <ru@nginx.com>
parents: 4627
diff changeset
320 v->data = ngx_pnalloc(r->pool, len);
a321eadcb16c Fixed memory leak if $geoip_org variable was used.
Ruslan Ermilov <ru@nginx.com>
parents: 4627
diff changeset
321 if (v->data == NULL) {
4649
95d93f7e6fa2 geoip: got rid of ugly casts when calling ngx_free().
Ruslan Ermilov <ru@nginx.com>
parents: 4648
diff changeset
322 ngx_free(val);
4647
a321eadcb16c Fixed memory leak if $geoip_org variable was used.
Ruslan Ermilov <ru@nginx.com>
parents: 4627
diff changeset
323 return NGX_ERROR;
a321eadcb16c Fixed memory leak if $geoip_org variable was used.
Ruslan Ermilov <ru@nginx.com>
parents: 4627
diff changeset
324 }
a321eadcb16c Fixed memory leak if $geoip_org variable was used.
Ruslan Ermilov <ru@nginx.com>
parents: 4627
diff changeset
325
a321eadcb16c Fixed memory leak if $geoip_org variable was used.
Ruslan Ermilov <ru@nginx.com>
parents: 4627
diff changeset
326 ngx_memcpy(v->data, val, len);
a321eadcb16c Fixed memory leak if $geoip_org variable was used.
Ruslan Ermilov <ru@nginx.com>
parents: 4627
diff changeset
327
a321eadcb16c Fixed memory leak if $geoip_org variable was used.
Ruslan Ermilov <ru@nginx.com>
parents: 4627
diff changeset
328 v->len = len;
3915
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
329 v->valid = 1;
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
330 v->no_cacheable = 0;
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
331 v->not_found = 0;
4647
a321eadcb16c Fixed memory leak if $geoip_org variable was used.
Ruslan Ermilov <ru@nginx.com>
parents: 4627
diff changeset
332
4649
95d93f7e6fa2 geoip: got rid of ugly casts when calling ngx_free().
Ruslan Ermilov <ru@nginx.com>
parents: 4648
diff changeset
333 ngx_free(val);
3915
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
334
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
335 return NGX_OK;
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
336
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
337 not_found:
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
338
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
339 v->not_found = 1;
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
340
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
341 return NGX_OK;
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
342 }
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
343
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
344
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
345 static ngx_int_t
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
346 ngx_http_geoip_city_variable(ngx_http_request_t *r,
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
347 ngx_http_variable_value_t *v, uintptr_t data)
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
348 {
3398
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
349 char *val;
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
350 size_t len;
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
351 GeoIPRecord *gr;
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
352
3398
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
353 gr = ngx_http_geoip_get_city_record(r);
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
354 if (gr == NULL) {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
355 goto not_found;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
356 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
357
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
358 val = *(char **) ((char *) gr + data);
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
359 if (val == NULL) {
3031
98a8336c5b7c fix memory leak if GeoIP City database was used
Igor Sysoev <igor@sysoev.ru>
parents: 2985
diff changeset
360 goto no_value;
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
361 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
362
3031
98a8336c5b7c fix memory leak if GeoIP City database was used
Igor Sysoev <igor@sysoev.ru>
parents: 2985
diff changeset
363 len = ngx_strlen(val);
98a8336c5b7c fix memory leak if GeoIP City database was used
Igor Sysoev <igor@sysoev.ru>
parents: 2985
diff changeset
364 v->data = ngx_pnalloc(r->pool, len);
98a8336c5b7c fix memory leak if GeoIP City database was used
Igor Sysoev <igor@sysoev.ru>
parents: 2985
diff changeset
365 if (v->data == NULL) {
98a8336c5b7c fix memory leak if GeoIP City database was used
Igor Sysoev <igor@sysoev.ru>
parents: 2985
diff changeset
366 GeoIPRecord_delete(gr);
98a8336c5b7c fix memory leak if GeoIP City database was used
Igor Sysoev <igor@sysoev.ru>
parents: 2985
diff changeset
367 return NGX_ERROR;
98a8336c5b7c fix memory leak if GeoIP City database was used
Igor Sysoev <igor@sysoev.ru>
parents: 2985
diff changeset
368 }
98a8336c5b7c fix memory leak if GeoIP City database was used
Igor Sysoev <igor@sysoev.ru>
parents: 2985
diff changeset
369
98a8336c5b7c fix memory leak if GeoIP City database was used
Igor Sysoev <igor@sysoev.ru>
parents: 2985
diff changeset
370 ngx_memcpy(v->data, val, len);
98a8336c5b7c fix memory leak if GeoIP City database was used
Igor Sysoev <igor@sysoev.ru>
parents: 2985
diff changeset
371
98a8336c5b7c fix memory leak if GeoIP City database was used
Igor Sysoev <igor@sysoev.ru>
parents: 2985
diff changeset
372 v->len = len;
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
373 v->valid = 1;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
374 v->no_cacheable = 0;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
375 v->not_found = 0;
3031
98a8336c5b7c fix memory leak if GeoIP City database was used
Igor Sysoev <igor@sysoev.ru>
parents: 2985
diff changeset
376
98a8336c5b7c fix memory leak if GeoIP City database was used
Igor Sysoev <igor@sysoev.ru>
parents: 2985
diff changeset
377 GeoIPRecord_delete(gr);
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
378
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
379 return NGX_OK;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
380
3031
98a8336c5b7c fix memory leak if GeoIP City database was used
Igor Sysoev <igor@sysoev.ru>
parents: 2985
diff changeset
381 no_value:
98a8336c5b7c fix memory leak if GeoIP City database was used
Igor Sysoev <igor@sysoev.ru>
parents: 2985
diff changeset
382
98a8336c5b7c fix memory leak if GeoIP City database was used
Igor Sysoev <igor@sysoev.ru>
parents: 2985
diff changeset
383 GeoIPRecord_delete(gr);
98a8336c5b7c fix memory leak if GeoIP City database was used
Igor Sysoev <igor@sysoev.ru>
parents: 2985
diff changeset
384
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
385 not_found:
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
386
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
387 v->not_found = 1;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
388
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
389 return NGX_OK;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
390 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
391
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
392
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
393 static ngx_int_t
3737
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
394 ngx_http_geoip_region_name_variable(ngx_http_request_t *r,
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
395 ngx_http_variable_value_t *v, uintptr_t data)
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
396 {
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
397 size_t len;
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
398 const char *val;
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
399 GeoIPRecord *gr;
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
400
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
401 gr = ngx_http_geoip_get_city_record(r);
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
402 if (gr == NULL) {
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
403 goto not_found;
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
404 }
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
405
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
406 val = GeoIP_region_name_by_code(gr->country_code, gr->region);
3742
01691af60f94 we can free GeoIPRecord just after GeoIP_region_name_by_code(),
Igor Sysoev <igor@sysoev.ru>
parents: 3741
diff changeset
407
01691af60f94 we can free GeoIPRecord just after GeoIP_region_name_by_code(),
Igor Sysoev <igor@sysoev.ru>
parents: 3741
diff changeset
408 GeoIPRecord_delete(gr);
01691af60f94 we can free GeoIPRecord just after GeoIP_region_name_by_code(),
Igor Sysoev <igor@sysoev.ru>
parents: 3741
diff changeset
409
3741
0f9b2d285bfc fix segfault, the bug has been introduced in r3738
Igor Sysoev <igor@sysoev.ru>
parents: 3737
diff changeset
410 if (val == NULL) {
3742
01691af60f94 we can free GeoIPRecord just after GeoIP_region_name_by_code(),
Igor Sysoev <igor@sysoev.ru>
parents: 3741
diff changeset
411 goto not_found;
3741
0f9b2d285bfc fix segfault, the bug has been introduced in r3738
Igor Sysoev <igor@sysoev.ru>
parents: 3737
diff changeset
412 }
3737
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
413
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
414 len = ngx_strlen(val);
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
415 v->data = ngx_pnalloc(r->pool, len);
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
416 if (v->data == NULL) {
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
417 return NGX_ERROR;
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
418 }
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
419
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
420 ngx_memcpy(v->data, val, len);
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
421
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
422 v->len = len;
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
423 v->valid = 1;
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
424 v->no_cacheable = 0;
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
425 v->not_found = 0;
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
426
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
427 return NGX_OK;
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
428
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
429 not_found:
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
430
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
431 v->not_found = 1;
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
432
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
433 return NGX_OK;
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
434 }
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
435
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
436
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
437 static ngx_int_t
3398
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
438 ngx_http_geoip_city_float_variable(ngx_http_request_t *r,
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
439 ngx_http_variable_value_t *v, uintptr_t data)
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
440 {
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
441 float val;
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
442 GeoIPRecord *gr;
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
443
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
444 gr = ngx_http_geoip_get_city_record(r);
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
445 if (gr == NULL) {
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
446 v->not_found = 1;
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
447 return NGX_OK;
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
448 }
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
449
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
450 v->data = ngx_pnalloc(r->pool, NGX_INT64_LEN + 5);
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
451 if (v->data == NULL) {
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
452 GeoIPRecord_delete(gr);
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
453 return NGX_ERROR;
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
454 }
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
455
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
456 val = *(float *) ((char *) gr + data);
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
457
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
458 v->len = ngx_sprintf(v->data, "%.4f", val) - v->data;
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
459
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
460 GeoIPRecord_delete(gr);
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
461
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
462 return NGX_OK;
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
463 }
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
464
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
465
3736
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
466 static ngx_int_t
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
467 ngx_http_geoip_city_int_variable(ngx_http_request_t *r,
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
468 ngx_http_variable_value_t *v, uintptr_t data)
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
469 {
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
470 int val;
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
471 GeoIPRecord *gr;
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
472
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
473 gr = ngx_http_geoip_get_city_record(r);
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
474 if (gr == NULL) {
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
475 v->not_found = 1;
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
476 return NGX_OK;
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
477 }
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
478
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
479 v->data = ngx_pnalloc(r->pool, NGX_INT64_LEN);
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
480 if (v->data == NULL) {
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
481 GeoIPRecord_delete(gr);
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
482 return NGX_ERROR;
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
483 }
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
484
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
485 val = *(int *) ((char *) gr + data);
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
486
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
487 v->len = ngx_sprintf(v->data, "%d", val) - v->data;
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
488
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
489 GeoIPRecord_delete(gr);
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
490
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
491 return NGX_OK;
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
492 }
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
493
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
494
3398
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
495 static GeoIPRecord *
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
496 ngx_http_geoip_get_city_record(ngx_http_request_t *r)
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
497 {
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
498 ngx_http_geoip_conf_t *gcf;
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
499
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
500 gcf = ngx_http_get_module_main_conf(r, ngx_http_geoip_module);
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
501
3919
0dceaa117e0d support IPv4 mapped to IPv6 in geoip module
Igor Sysoev <igor@sysoev.ru>
parents: 3915
diff changeset
502 if (gcf->city) {
4627
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
503 return GeoIP_record_by_ipnum(gcf->city, ngx_http_geoip_addr(r, gcf));
3398
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
504 }
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
505
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
506 return NULL;
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
507 }
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
508
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
509
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
510 static ngx_int_t
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
511 ngx_http_geoip_add_variables(ngx_conf_t *cf)
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
512 {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
513 ngx_http_variable_t *var, *v;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
514
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
515 for (v = ngx_http_geoip_vars; v->name.len; v++) {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
516 var = ngx_http_add_variable(cf, &v->name, v->flags);
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
517 if (var == NULL) {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
518 return NGX_ERROR;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
519 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
520
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
521 var->get_handler = v->get_handler;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
522 var->data = v->data;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
523 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
524
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
525 return NGX_OK;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
526 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
527
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
528
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
529 static void *
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
530 ngx_http_geoip_create_conf(ngx_conf_t *cf)
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
531 {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
532 ngx_pool_cleanup_t *cln;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
533 ngx_http_geoip_conf_t *conf;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
534
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
535 conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_geoip_conf_t));
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
536 if (conf == NULL) {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
537 return NULL;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
538 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
539
4627
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
540 conf->proxy_recursive = NGX_CONF_UNSET;
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
541
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
542 cln = ngx_pool_cleanup_add(cf->pool, 0);
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
543 if (cln == NULL) {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
544 return NULL;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
545 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
546
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
547 cln->handler = ngx_http_geoip_cleanup;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
548 cln->data = conf;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
549
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
550 return conf;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
551 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
552
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
553
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
554 static char *
4627
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
555 ngx_http_geoip_init_conf(ngx_conf_t *cf, void *conf)
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
556 {
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
557 ngx_http_geoip_conf_t *gcf = conf;
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
558
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
559 ngx_conf_init_value(gcf->proxy_recursive, 0);
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
560
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
561 return NGX_CONF_OK;
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
562 }
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
563
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
564
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
565 static char *
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
566 ngx_http_geoip_country(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
567 {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
568 ngx_http_geoip_conf_t *gcf = conf;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
569
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
570 ngx_str_t *value;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
571
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
572 if (gcf->country) {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
573 return "is duplicate";
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
574 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
575
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
576 value = cf->args->elts;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
577
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
578 gcf->country = GeoIP_open((char *) value[1].data, GEOIP_MEMORY_CACHE);
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
579
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
580 if (gcf->country == NULL) {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
581 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
3914
2b92090d8a43 fix typo
Igor Sysoev <igor@sysoev.ru>
parents: 3859
diff changeset
582 "GeoIP_open(\"%V\") failed", &value[1]);
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
583
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
584 return NGX_CONF_ERROR;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
585 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
586
3859
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
587 if (cf->args->nelts == 3) {
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
588 if (ngx_strcmp(value[2].data, "utf8") == 0) {
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
589 GeoIP_set_charset (gcf->country, GEOIP_CHARSET_UTF8);
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
590
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
591 } else {
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
592 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
593 "invalid parameter \"%V\"", &value[2]);
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
594 return NGX_CONF_ERROR;
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
595 }
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
596 }
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
597
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
598 switch (gcf->country->databaseType) {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
599
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
600 case GEOIP_COUNTRY_EDITION:
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
601 case GEOIP_PROXY_EDITION:
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
602 case GEOIP_NETSPEED_EDITION:
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
603
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
604 return NGX_CONF_OK;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
605
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
606 default:
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
607 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
608 "invalid GeoIP database \"%V\" type:%d",
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
609 &value[1], gcf->country->databaseType);
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
610 return NGX_CONF_ERROR;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
611 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
612 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
613
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
614
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
615 static char *
3915
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
616 ngx_http_geoip_org(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
617 {
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
618 ngx_http_geoip_conf_t *gcf = conf;
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
619
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
620 ngx_str_t *value;
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
621
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
622 if (gcf->org) {
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
623 return "is duplicate";
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
624 }
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
625
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
626 value = cf->args->elts;
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
627
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
628 gcf->org = GeoIP_open((char *) value[1].data, GEOIP_MEMORY_CACHE);
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
629
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
630 if (gcf->org == NULL) {
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
631 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
632 "GeoIP_open(\"%V\") failed", &value[1]);
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
633
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
634 return NGX_CONF_ERROR;
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
635 }
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
636
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
637 if (cf->args->nelts == 3) {
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
638 if (ngx_strcmp(value[2].data, "utf8") == 0) {
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
639 GeoIP_set_charset (gcf->org, GEOIP_CHARSET_UTF8);
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
640
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
641 } else {
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
642 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
643 "invalid parameter \"%V\"", &value[2]);
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
644 return NGX_CONF_ERROR;
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
645 }
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
646 }
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
647
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
648 switch (gcf->org->databaseType) {
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
649
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
650 case GEOIP_ISP_EDITION:
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
651 case GEOIP_ORG_EDITION:
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
652 case GEOIP_DOMAIN_EDITION:
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
653 case GEOIP_ASNUM_EDITION:
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
654
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
655 return NGX_CONF_OK;
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
656
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
657 default:
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
658 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
659 "invalid GeoIP database \"%V\" type:%d",
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
660 &value[1], gcf->org->databaseType);
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
661 return NGX_CONF_ERROR;
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
662 }
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
663 }
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
664
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
665
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
666 static char *
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
667 ngx_http_geoip_city(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
668 {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
669 ngx_http_geoip_conf_t *gcf = conf;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
670
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
671 ngx_str_t *value;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
672
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
673 if (gcf->city) {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
674 return "is duplicate";
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
675 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
676
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
677 value = cf->args->elts;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
678
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
679 gcf->city = GeoIP_open((char *) value[1].data, GEOIP_MEMORY_CACHE);
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
680
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
681 if (gcf->city == NULL) {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
682 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
3914
2b92090d8a43 fix typo
Igor Sysoev <igor@sysoev.ru>
parents: 3859
diff changeset
683 "GeoIP_open(\"%V\") failed", &value[1]);
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
684
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
685 return NGX_CONF_ERROR;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
686 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
687
3859
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
688 if (cf->args->nelts == 3) {
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
689 if (ngx_strcmp(value[2].data, "utf8") == 0) {
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
690 GeoIP_set_charset (gcf->city, GEOIP_CHARSET_UTF8);
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
691
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
692 } else {
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
693 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
694 "invalid parameter \"%V\"", &value[2]);
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
695 return NGX_CONF_ERROR;
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
696 }
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
697 }
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
698
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
699 switch (gcf->city->databaseType) {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
700
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
701 case GEOIP_CITY_EDITION_REV0:
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
702 case GEOIP_CITY_EDITION_REV1:
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
703
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
704 return NGX_CONF_OK;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
705
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
706 default:
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
707 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
708 "invalid GeoIP City database \"%V\" type:%d",
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
709 &value[1], gcf->city->databaseType);
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
710 return NGX_CONF_ERROR;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
711 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
712 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
713
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
714
4627
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
715 static char *
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
716 ngx_http_geoip_proxy(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
717 {
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
718 ngx_http_geoip_conf_t *gcf = conf;
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
719
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
720 ngx_str_t *value;
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
721 ngx_cidr_t cidr, *c;
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
722
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
723 value = cf->args->elts;
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
724
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
725 if (ngx_http_geoip_cidr_value(cf, &value[1], &cidr) != NGX_OK) {
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
726 return NGX_CONF_ERROR;
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
727 }
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
728
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
729 if (gcf->proxies == NULL) {
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
730 gcf->proxies = ngx_array_create(cf->pool, 4, sizeof(ngx_cidr_t));
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
731 if (gcf->proxies == NULL) {
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
732 return NGX_CONF_ERROR;
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
733 }
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
734 }
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
735
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
736 c = ngx_array_push(gcf->proxies);
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
737 if (c == NULL) {
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
738 return NGX_CONF_ERROR;
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
739 }
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
740
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
741 *c = cidr;
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
742
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
743 return NGX_CONF_OK;
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
744 }
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
745
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
746 static ngx_int_t
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
747 ngx_http_geoip_cidr_value(ngx_conf_t *cf, ngx_str_t *net, ngx_cidr_t *cidr)
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
748 {
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
749 ngx_int_t rc;
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
750
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
751 if (ngx_strcmp(net->data, "255.255.255.255") == 0) {
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
752 cidr->family = AF_INET;
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
753 cidr->u.in.addr = 0xffffffff;
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
754 cidr->u.in.mask = 0xffffffff;
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
755
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
756 return NGX_OK;
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
757 }
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
758
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
759 rc = ngx_ptocidr(net, cidr);
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
760
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
761 if (rc == NGX_ERROR) {
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
762 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "invalid network \"%V\"", net);
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
763 return NGX_ERROR;
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
764 }
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
765
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
766 if (rc == NGX_DONE) {
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
767 ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
768 "low address bits of %V are meaningless", net);
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
769 }
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
770
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
771 return NGX_OK;
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
772 }
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
773
3152e4c371d7 geoip: trusted proxies support and partial IPv6 support.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
774
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
775 static void
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
776 ngx_http_geoip_cleanup(void *data)
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
777 {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
778 ngx_http_geoip_conf_t *gcf = data;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
779
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
780 if (gcf->country) {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
781 GeoIP_delete(gcf->country);
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
782 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
783
3915
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
784 if (gcf->org) {
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
785 GeoIP_delete(gcf->org);
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
786 }
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
787
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
788 if (gcf->city) {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
789 GeoIP_delete(gcf->city);
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
790 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
791 }