annotate src/http/modules/ngx_http_geoip_module.c @ 4727:1c7616100797 stable-1.2

Merge of r4688, r4689, r4706: *) Mp4: fixed non-keyframe seeks in some cases (ticket #175). Number of entries in stsc atom was wrong if we've added an entry to split a chunk. Additionally, there is no need to add an entry if we are going to split last chunk in an entry, it's enough to update the entry we already have. Previously new entry was added and old one was left as is, resulting in incorrect entry with zero chunks which might confuse some software. *) Mp4: fixed streaming if moov atom is at buffer edge.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 02 Jul 2012 16:56:53 +0000
parents a05e7b09af5a
children 880dedfa4008
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 {
4668
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
17 GeoIP *country;
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
18 GeoIP *org;
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
19 GeoIP *city;
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
20 ngx_array_t *proxies; /* array of ngx_cidr_t */
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
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 {
4668
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
26 ngx_str_t *name;
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
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
4718
a05e7b09af5a Merge of r4648, r4649, r4650: memory leak with $geoip_org.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4668
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
4668
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
33 static u_long ngx_http_geoip_addr(ngx_http_request_t *r,
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
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);
4668
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
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);
4668
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
58 static char *ngx_http_geoip_proxy(ngx_conf_t *cf, ngx_command_t *cmd,
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
59 void *conf);
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
60 static ngx_int_t ngx_http_geoip_cidr_value(ngx_conf_t *cf, ngx_str_t *net,
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
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
4668
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
88 { ngx_string("geoip_proxy"),
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
89 NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE1,
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
90 ngx_http_geoip_proxy,
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
91 NGX_HTTP_MAIN_CONF_OFFSET,
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
92 0,
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
93 NULL },
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
94
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
95 { ngx_string("geoip_proxy_recursive"),
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
96 NGX_HTTP_MAIN_CONF|NGX_CONF_FLAG,
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
97 ngx_conf_set_flag_slot,
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
98 NGX_HTTP_MAIN_CONF_OFFSET,
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
99 offsetof(ngx_http_geoip_conf_t, proxy_recursive),
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
100 NULL },
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
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 */
4668
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
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
4668
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
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 {
4668
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
210 ngx_addr_t addr;
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
211 ngx_table_elt_t *xfwd;
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
212 struct sockaddr_in *sin;
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
213
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
214 addr.sockaddr = r->connection->sockaddr;
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
215 addr.socklen = r->connection->socklen;
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
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
4668
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
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
4668
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
220 if (xfwd != NULL && gcf->proxies != NULL) {
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
221 (void) ngx_http_get_forwarded_addr(r, &addr, xfwd->value.data,
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
222 xfwd->value.len, gcf->proxies,
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
223 gcf->proxy_recursive);
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
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
4668
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
228 if (addr.sockaddr->sa_family == AF_INET6) {
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
229 struct in6_addr *inaddr6;
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
230
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
231 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
232
4668
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
233 if (IN6_IS_ADDR_V4MAPPED(inaddr6)) {
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
234 return ntohl(*(in_addr_t *) &inaddr6->s6_addr[12]);
3919
0dceaa117e0d support IPv4 mapped to IPv6 in geoip module
Igor Sysoev <igor@sysoev.ru>
parents: 3915
diff changeset
235 }
4668
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
236 }
3919
0dceaa117e0d support IPv4 mapped to IPv6 in geoip module
Igor Sysoev <igor@sysoev.ru>
parents: 3915
diff changeset
237
0dceaa117e0d support IPv4 mapped to IPv6 in geoip module
Igor Sysoev <igor@sysoev.ru>
parents: 3915
diff changeset
238 #endif
4668
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
239
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
240 if (addr.sockaddr->sa_family != AF_INET) {
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
241 return INADDR_NONE;
3919
0dceaa117e0d support IPv4 mapped to IPv6 in geoip module
Igor Sysoev <igor@sysoev.ru>
parents: 3915
diff changeset
242 }
0dceaa117e0d support IPv4 mapped to IPv6 in geoip module
Igor Sysoev <igor@sysoev.ru>
parents: 3915
diff changeset
243
4668
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
244 sin = (struct sockaddr_in *) addr.sockaddr;
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
245 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
246 }
0dceaa117e0d support IPv4 mapped to IPv6 in geoip module
Igor Sysoev <igor@sysoev.ru>
parents: 3915
diff changeset
247
0dceaa117e0d support IPv4 mapped to IPv6 in geoip module
Igor Sysoev <igor@sysoev.ru>
parents: 3915
diff changeset
248
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
249 static ngx_int_t
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
250 ngx_http_geoip_country_variable(ngx_http_request_t *r,
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
251 ngx_http_variable_value_t *v, uintptr_t data)
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
252 {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
253 ngx_http_geoip_variable_handler_pt handler =
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
254 (ngx_http_geoip_variable_handler_pt) data;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
255
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
256 const char *val;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
257 ngx_http_geoip_conf_t *gcf;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
258
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
259 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
260
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
261 if (gcf->country == NULL) {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
262 goto not_found;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
263 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
264
4668
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
265 val = handler(gcf->country, ngx_http_geoip_addr(r, gcf));
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
266
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
267 if (val == NULL) {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
268 goto not_found;
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
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
271 v->len = ngx_strlen(val);
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
272 v->valid = 1;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
273 v->no_cacheable = 0;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
274 v->not_found = 0;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
275 v->data = (u_char *) val;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
276
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
277 return NGX_OK;
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 not_found:
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
280
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
281 v->not_found = 1;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
282
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
283 return NGX_OK;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
284 }
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
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
287 static ngx_int_t
3915
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
288 ngx_http_geoip_org_variable(ngx_http_request_t *r,
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
289 ngx_http_variable_value_t *v, uintptr_t data)
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
290 {
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
291 ngx_http_geoip_variable_handler_pt handler =
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
292 (ngx_http_geoip_variable_handler_pt) data;
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
293
4718
a05e7b09af5a Merge of r4648, r4649, r4650: memory leak with $geoip_org.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4668
diff changeset
294 size_t len;
a05e7b09af5a Merge of r4648, r4649, r4650: memory leak with $geoip_org.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4668
diff changeset
295 char *val;
3915
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
296 ngx_http_geoip_conf_t *gcf;
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
297
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
298 gcf = ngx_http_get_module_main_conf(r, ngx_http_geoip_module);
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 if (gcf->org == NULL) {
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
301 goto not_found;
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
302 }
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
303
4668
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
304 val = handler(gcf->org, ngx_http_geoip_addr(r, gcf));
3915
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
305
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
306 if (val == NULL) {
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
307 goto not_found;
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
4718
a05e7b09af5a Merge of r4648, r4649, r4650: memory leak with $geoip_org.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4668
diff changeset
310 len = ngx_strlen(val);
a05e7b09af5a Merge of r4648, r4649, r4650: memory leak with $geoip_org.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4668
diff changeset
311 v->data = ngx_pnalloc(r->pool, len);
a05e7b09af5a Merge of r4648, r4649, r4650: memory leak with $geoip_org.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4668
diff changeset
312 if (v->data == NULL) {
a05e7b09af5a Merge of r4648, r4649, r4650: memory leak with $geoip_org.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4668
diff changeset
313 ngx_free(val);
a05e7b09af5a Merge of r4648, r4649, r4650: memory leak with $geoip_org.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4668
diff changeset
314 return NGX_ERROR;
a05e7b09af5a Merge of r4648, r4649, r4650: memory leak with $geoip_org.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4668
diff changeset
315 }
a05e7b09af5a Merge of r4648, r4649, r4650: memory leak with $geoip_org.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4668
diff changeset
316
a05e7b09af5a Merge of r4648, r4649, r4650: memory leak with $geoip_org.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4668
diff changeset
317 ngx_memcpy(v->data, val, len);
a05e7b09af5a Merge of r4648, r4649, r4650: memory leak with $geoip_org.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4668
diff changeset
318
a05e7b09af5a Merge of r4648, r4649, r4650: memory leak with $geoip_org.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4668
diff changeset
319 v->len = len;
3915
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
320 v->valid = 1;
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
321 v->no_cacheable = 0;
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
322 v->not_found = 0;
4718
a05e7b09af5a Merge of r4648, r4649, r4650: memory leak with $geoip_org.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4668
diff changeset
323
a05e7b09af5a Merge of r4648, r4649, r4650: memory leak with $geoip_org.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4668
diff changeset
324 ngx_free(val);
3915
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
325
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
326 return NGX_OK;
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
327
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
328 not_found:
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
329
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
330 v->not_found = 1;
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
331
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
332 return NGX_OK;
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
333 }
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
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
336 static ngx_int_t
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
337 ngx_http_geoip_city_variable(ngx_http_request_t *r,
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
338 ngx_http_variable_value_t *v, uintptr_t data)
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
339 {
3398
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
340 char *val;
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
341 size_t len;
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
342 GeoIPRecord *gr;
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
343
3398
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
344 gr = ngx_http_geoip_get_city_record(r);
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
345 if (gr == NULL) {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
346 goto not_found;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
347 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
348
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
349 val = *(char **) ((char *) gr + data);
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
350 if (val == NULL) {
3031
98a8336c5b7c fix memory leak if GeoIP City database was used
Igor Sysoev <igor@sysoev.ru>
parents: 2985
diff changeset
351 goto no_value;
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
352 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
353
3031
98a8336c5b7c fix memory leak if GeoIP City database was used
Igor Sysoev <igor@sysoev.ru>
parents: 2985
diff changeset
354 len = ngx_strlen(val);
98a8336c5b7c fix memory leak if GeoIP City database was used
Igor Sysoev <igor@sysoev.ru>
parents: 2985
diff changeset
355 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
356 if (v->data == NULL) {
98a8336c5b7c fix memory leak if GeoIP City database was used
Igor Sysoev <igor@sysoev.ru>
parents: 2985
diff changeset
357 GeoIPRecord_delete(gr);
98a8336c5b7c fix memory leak if GeoIP City database was used
Igor Sysoev <igor@sysoev.ru>
parents: 2985
diff changeset
358 return NGX_ERROR;
98a8336c5b7c fix memory leak if GeoIP City database was used
Igor Sysoev <igor@sysoev.ru>
parents: 2985
diff changeset
359 }
98a8336c5b7c fix memory leak if GeoIP City database was used
Igor Sysoev <igor@sysoev.ru>
parents: 2985
diff changeset
360
98a8336c5b7c fix memory leak if GeoIP City database was used
Igor Sysoev <igor@sysoev.ru>
parents: 2985
diff changeset
361 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
362
98a8336c5b7c fix memory leak if GeoIP City database was used
Igor Sysoev <igor@sysoev.ru>
parents: 2985
diff changeset
363 v->len = len;
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
364 v->valid = 1;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
365 v->no_cacheable = 0;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
366 v->not_found = 0;
3031
98a8336c5b7c fix memory leak if GeoIP City database was used
Igor Sysoev <igor@sysoev.ru>
parents: 2985
diff changeset
367
98a8336c5b7c fix memory leak if GeoIP City database was used
Igor Sysoev <igor@sysoev.ru>
parents: 2985
diff changeset
368 GeoIPRecord_delete(gr);
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
369
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
370 return NGX_OK;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
371
3031
98a8336c5b7c fix memory leak if GeoIP City database was used
Igor Sysoev <igor@sysoev.ru>
parents: 2985
diff changeset
372 no_value:
98a8336c5b7c fix memory leak if GeoIP City database was used
Igor Sysoev <igor@sysoev.ru>
parents: 2985
diff changeset
373
98a8336c5b7c fix memory leak if GeoIP City database was used
Igor Sysoev <igor@sysoev.ru>
parents: 2985
diff changeset
374 GeoIPRecord_delete(gr);
98a8336c5b7c fix memory leak if GeoIP City database was used
Igor Sysoev <igor@sysoev.ru>
parents: 2985
diff changeset
375
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
376 not_found:
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
377
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
378 v->not_found = 1;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
379
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
380 return NGX_OK;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
381 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
382
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
383
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
384 static ngx_int_t
3737
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
385 ngx_http_geoip_region_name_variable(ngx_http_request_t *r,
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
386 ngx_http_variable_value_t *v, uintptr_t data)
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
387 {
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
388 size_t len;
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
389 const char *val;
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
390 GeoIPRecord *gr;
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
391
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
392 gr = ngx_http_geoip_get_city_record(r);
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
393 if (gr == NULL) {
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
394 goto not_found;
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
395 }
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 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
398
01691af60f94 we can free GeoIPRecord just after GeoIP_region_name_by_code(),
Igor Sysoev <igor@sysoev.ru>
parents: 3741
diff changeset
399 GeoIPRecord_delete(gr);
01691af60f94 we can free GeoIPRecord just after GeoIP_region_name_by_code(),
Igor Sysoev <igor@sysoev.ru>
parents: 3741
diff changeset
400
3741
0f9b2d285bfc fix segfault, the bug has been introduced in r3738
Igor Sysoev <igor@sysoev.ru>
parents: 3737
diff changeset
401 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
402 goto not_found;
3741
0f9b2d285bfc fix segfault, the bug has been introduced in r3738
Igor Sysoev <igor@sysoev.ru>
parents: 3737
diff changeset
403 }
3737
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 len = ngx_strlen(val);
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
406 v->data = ngx_pnalloc(r->pool, len);
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
407 if (v->data == NULL) {
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
408 return NGX_ERROR;
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
409 }
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
410
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
411 ngx_memcpy(v->data, val, len);
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
412
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
413 v->len = len;
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
414 v->valid = 1;
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
415 v->no_cacheable = 0;
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
416 v->not_found = 0;
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
417
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
418 return NGX_OK;
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 not_found:
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->not_found = 1;
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
423
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
424 return NGX_OK;
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
425 }
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
18ae5f09a53d $geoip_region_name
Igor Sysoev <igor@sysoev.ru>
parents: 3736
diff changeset
428 static ngx_int_t
3398
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
429 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
430 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
431 {
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
432 float val;
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
433 GeoIPRecord *gr;
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
434
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
435 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
436 if (gr == NULL) {
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
437 v->not_found = 1;
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
438 return NGX_OK;
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
439 }
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 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
442 if (v->data == NULL) {
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
443 GeoIPRecord_delete(gr);
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
444 return NGX_ERROR;
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
445 }
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
446
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
447 val = *(float *) ((char *) gr + data);
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 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
450
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
451 GeoIPRecord_delete(gr);
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
452
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
453 return NGX_OK;
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
3736
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
457 static ngx_int_t
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
458 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
459 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
460 {
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
461 int val;
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
462 GeoIPRecord *gr;
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
463
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
464 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
465 if (gr == NULL) {
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
466 v->not_found = 1;
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
467 return NGX_OK;
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
468 }
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 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
471 if (v->data == NULL) {
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
472 GeoIPRecord_delete(gr);
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
473 return NGX_ERROR;
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
474 }
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
475
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
476 val = *(int *) ((char *) gr + data);
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 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
479
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
480 GeoIPRecord_delete(gr);
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
481
257785918797 $geoip_dma_code and $geoip_area_code
Igor Sysoev <igor@sysoev.ru>
parents: 3398
diff changeset
482 return NGX_OK;
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
3398
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
486 static GeoIPRecord *
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
487 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
488 {
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
489 ngx_http_geoip_conf_t *gcf;
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
490
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
491 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
492
3919
0dceaa117e0d support IPv4 mapped to IPv6 in geoip module
Igor Sysoev <igor@sysoev.ru>
parents: 3915
diff changeset
493 if (gcf->city) {
4668
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
494 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
495 }
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
496
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
497 return NULL;
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
498 }
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
236634d2b603 $geoip_city_continent_code, $geoip_latitude, $geoip_longitude
Igor Sysoev <igor@sysoev.ru>
parents: 3031
diff changeset
501 static ngx_int_t
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
502 ngx_http_geoip_add_variables(ngx_conf_t *cf)
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
503 {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
504 ngx_http_variable_t *var, *v;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
505
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
506 for (v = ngx_http_geoip_vars; v->name.len; v++) {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
507 var = ngx_http_add_variable(cf, &v->name, v->flags);
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
508 if (var == NULL) {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
509 return NGX_ERROR;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
510 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
511
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
512 var->get_handler = v->get_handler;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
513 var->data = v->data;
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
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
516 return NGX_OK;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
517 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
518
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 static void *
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
521 ngx_http_geoip_create_conf(ngx_conf_t *cf)
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
522 {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
523 ngx_pool_cleanup_t *cln;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
524 ngx_http_geoip_conf_t *conf;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
525
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
526 conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_geoip_conf_t));
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
527 if (conf == NULL) {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
528 return NULL;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
529 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
530
4668
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
531 conf->proxy_recursive = NGX_CONF_UNSET;
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
532
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
533 cln = ngx_pool_cleanup_add(cf->pool, 0);
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
534 if (cln == NULL) {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
535 return NULL;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
536 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
537
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
538 cln->handler = ngx_http_geoip_cleanup;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
539 cln->data = conf;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
540
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
541 return conf;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
542 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
543
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
544
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
545 static char *
4668
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
546 ngx_http_geoip_init_conf(ngx_conf_t *cf, void *conf)
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
547 {
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
548 ngx_http_geoip_conf_t *gcf = conf;
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
549
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
550 ngx_conf_init_value(gcf->proxy_recursive, 0);
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
551
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
552 return NGX_CONF_OK;
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
553 }
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
554
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
555
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
556 static char *
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
557 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
558 {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
559 ngx_http_geoip_conf_t *gcf = conf;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
560
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
561 ngx_str_t *value;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
562
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
563 if (gcf->country) {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
564 return "is duplicate";
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
565 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
566
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
567 value = cf->args->elts;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
568
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
569 gcf->country = GeoIP_open((char *) value[1].data, GEOIP_MEMORY_CACHE);
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
570
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
571 if (gcf->country == NULL) {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
572 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
3914
2b92090d8a43 fix typo
Igor Sysoev <igor@sysoev.ru>
parents: 3859
diff changeset
573 "GeoIP_open(\"%V\") failed", &value[1]);
2985
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 return NGX_CONF_ERROR;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
576 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
577
3859
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
578 if (cf->args->nelts == 3) {
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
579 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
580 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
581
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
582 } else {
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
583 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
584 "invalid parameter \"%V\"", &value[2]);
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
585 return NGX_CONF_ERROR;
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
586 }
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
587 }
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
588
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
589 switch (gcf->country->databaseType) {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
590
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
591 case GEOIP_COUNTRY_EDITION:
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
592 case GEOIP_PROXY_EDITION:
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
593 case GEOIP_NETSPEED_EDITION:
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
594
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
595 return NGX_CONF_OK;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
596
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
597 default:
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
598 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
599 "invalid GeoIP database \"%V\" type:%d",
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
600 &value[1], gcf->country->databaseType);
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
601 return NGX_CONF_ERROR;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
602 }
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
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 static char *
3915
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
607 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
608 {
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
609 ngx_http_geoip_conf_t *gcf = conf;
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
610
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
611 ngx_str_t *value;
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
612
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
613 if (gcf->org) {
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
614 return "is duplicate";
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
615 }
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
616
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
617 value = cf->args->elts;
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
618
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
619 gcf->org = GeoIP_open((char *) value[1].data, GEOIP_MEMORY_CACHE);
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
620
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
621 if (gcf->org == NULL) {
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
622 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
623 "GeoIP_open(\"%V\") failed", &value[1]);
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 return NGX_CONF_ERROR;
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
626 }
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 if (cf->args->nelts == 3) {
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
629 if (ngx_strcmp(value[2].data, "utf8") == 0) {
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
630 GeoIP_set_charset (gcf->org, GEOIP_CHARSET_UTF8);
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
631
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
632 } else {
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
633 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
634 "invalid parameter \"%V\"", &value[2]);
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
635 return NGX_CONF_ERROR;
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 }
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
638
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
639 switch (gcf->org->databaseType) {
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 case GEOIP_ISP_EDITION:
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
642 case GEOIP_ORG_EDITION:
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
643 case GEOIP_DOMAIN_EDITION:
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
644 case GEOIP_ASNUM_EDITION:
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 return NGX_CONF_OK;
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 default:
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
649 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
650 "invalid GeoIP database \"%V\" type:%d",
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
651 &value[1], gcf->org->databaseType);
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
652 return NGX_CONF_ERROR;
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
653 }
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
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 static char *
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
658 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
659 {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
660 ngx_http_geoip_conf_t *gcf = conf;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
661
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
662 ngx_str_t *value;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
663
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
664 if (gcf->city) {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
665 return "is duplicate";
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
666 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
667
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
668 value = cf->args->elts;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
669
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
670 gcf->city = GeoIP_open((char *) value[1].data, GEOIP_MEMORY_CACHE);
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
671
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
672 if (gcf->city == NULL) {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
673 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
3914
2b92090d8a43 fix typo
Igor Sysoev <igor@sysoev.ru>
parents: 3859
diff changeset
674 "GeoIP_open(\"%V\") failed", &value[1]);
2985
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 return NGX_CONF_ERROR;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
677 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
678
3859
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
679 if (cf->args->nelts == 3) {
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
680 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
681 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
682
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
683 } else {
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
684 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
685 "invalid parameter \"%V\"", &value[2]);
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
686 return NGX_CONF_ERROR;
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
687 }
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
688 }
30d4d6187316 utf8 parameter of geoip_country and geoip_city
Igor Sysoev <igor@sysoev.ru>
parents: 3742
diff changeset
689
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
690 switch (gcf->city->databaseType) {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
691
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
692 case GEOIP_CITY_EDITION_REV0:
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
693 case GEOIP_CITY_EDITION_REV1:
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
694
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
695 return NGX_CONF_OK;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
696
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
697 default:
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
698 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
699 "invalid GeoIP City database \"%V\" type:%d",
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
700 &value[1], gcf->city->databaseType);
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
701 return NGX_CONF_ERROR;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
702 }
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
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
705
4668
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
706 static char *
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
707 ngx_http_geoip_proxy(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
708 {
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
709 ngx_http_geoip_conf_t *gcf = conf;
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
710
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
711 ngx_str_t *value;
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
712 ngx_cidr_t cidr, *c;
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
713
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
714 value = cf->args->elts;
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
715
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
716 if (ngx_http_geoip_cidr_value(cf, &value[1], &cidr) != NGX_OK) {
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
717 return NGX_CONF_ERROR;
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
718 }
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
719
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
720 if (gcf->proxies == NULL) {
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
721 gcf->proxies = ngx_array_create(cf->pool, 4, sizeof(ngx_cidr_t));
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
722 if (gcf->proxies == NULL) {
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
723 return NGX_CONF_ERROR;
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
724 }
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
725 }
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
726
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
727 c = ngx_array_push(gcf->proxies);
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
728 if (c == NULL) {
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
729 return NGX_CONF_ERROR;
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
730 }
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
731
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
732 *c = cidr;
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
733
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
734 return NGX_CONF_OK;
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
735 }
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
736
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
737 static ngx_int_t
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
738 ngx_http_geoip_cidr_value(ngx_conf_t *cf, ngx_str_t *net, ngx_cidr_t *cidr)
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
739 {
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
740 ngx_int_t rc;
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
741
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
742 if (ngx_strcmp(net->data, "255.255.255.255") == 0) {
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
743 cidr->family = AF_INET;
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
744 cidr->u.in.addr = 0xffffffff;
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
745 cidr->u.in.mask = 0xffffffff;
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
746
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
747 return NGX_OK;
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
748 }
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
749
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
750 rc = ngx_ptocidr(net, cidr);
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
751
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
752 if (rc == NGX_ERROR) {
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
753 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "invalid network \"%V\"", net);
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
754 return NGX_ERROR;
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
755 }
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
756
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
757 if (rc == NGX_DONE) {
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
758 ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
759 "low address bits of %V are meaningless", net);
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
760 }
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
761
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
762 return NGX_OK;
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
763 }
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
764
ba2c7463ce18 Merge of r4614, r4624-r4629, r4631: proxy recursive changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
765
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
766 static void
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
767 ngx_http_geoip_cleanup(void *data)
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
768 {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
769 ngx_http_geoip_conf_t *gcf = data;
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
770
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
771 if (gcf->country) {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
772 GeoIP_delete(gcf->country);
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
773 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
774
3915
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
775 if (gcf->org) {
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
776 GeoIP_delete(gcf->org);
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
777 }
e3645e338937 geoip_org
Igor Sysoev <igor@sysoev.ru>
parents: 3914
diff changeset
778
2985
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
779 if (gcf->city) {
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
780 GeoIP_delete(gcf->city);
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
781 }
31af2d1a742e ngx_http_geoip_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
782 }