Skip to content

Commit dfa10b6

Browse files
committed
fixed compilation error for nginx-1.9.2
1 parent f5c222a commit dfa10b6

File tree

1 file changed

+115
-7
lines changed

1 file changed

+115
-7
lines changed

ngx_http_proxy_connect_module.c

Lines changed: 115 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,110 @@ static ngx_http_variable_t ngx_http_proxy_connect_vars[] = {
209209
};
210210

211211

212+
#if 1
213+
214+
/*
215+
* #if defined(nginx_version) && nginx_version <= 1009015
216+
*
217+
* from src/core/ngx_inet.c: ngx_inet_set_port & ngx_parse_addr_port
218+
*
219+
* redefined to __ngx_inet_set_port & __ngx_parse_addr_port to
220+
* avoid too many `#if nginx_version > ...` macro
221+
*/
222+
static void
223+
__ngx_inet_set_port(struct sockaddr *sa, in_port_t port)
224+
{
225+
struct sockaddr_in *sin;
226+
#if (NGX_HAVE_INET6)
227+
struct sockaddr_in6 *sin6;
228+
#endif
229+
230+
switch (sa->sa_family) {
231+
232+
#if (NGX_HAVE_INET6)
233+
case AF_INET6:
234+
sin6 = (struct sockaddr_in6 *) sa;
235+
sin6->sin6_port = htons(port);
236+
break;
237+
#endif
238+
239+
#if (NGX_HAVE_UNIX_DOMAIN)
240+
case AF_UNIX:
241+
break;
242+
#endif
243+
244+
default: /* AF_INET */
245+
sin = (struct sockaddr_in *) sa;
246+
sin->sin_port = htons(port);
247+
break;
248+
}
249+
}
250+
251+
252+
static ngx_int_t
253+
__ngx_parse_addr_port(ngx_pool_t *pool, ngx_addr_t *addr, u_char *text,
254+
size_t len)
255+
{
256+
u_char *p, *last;
257+
size_t plen;
258+
ngx_int_t rc, port;
259+
260+
rc = ngx_parse_addr(pool, addr, text, len);
261+
262+
if (rc != NGX_DECLINED) {
263+
return rc;
264+
}
265+
266+
last = text + len;
267+
268+
#if (NGX_HAVE_INET6)
269+
if (len && text[0] == '[') {
270+
271+
p = ngx_strlchr(text, last, ']');
272+
273+
if (p == NULL || p == last - 1 || *++p != ':') {
274+
return NGX_DECLINED;
275+
}
276+
277+
text++;
278+
len -= 2;
279+
280+
} else
281+
#endif
282+
283+
{
284+
p = ngx_strlchr(text, last, ':');
285+
286+
if (p == NULL) {
287+
return NGX_DECLINED;
288+
}
289+
}
290+
291+
p++;
292+
plen = last - p;
293+
294+
port = ngx_atoi(p, plen);
295+
296+
if (port < 1 || port > 65535) {
297+
return NGX_DECLINED;
298+
}
299+
300+
len -= plen + 1;
301+
302+
rc = ngx_parse_addr(pool, addr, text, len);
303+
304+
if (rc != NGX_OK) {
305+
return rc;
306+
}
307+
308+
__ngx_inet_set_port(addr->sockaddr, (in_port_t) port);
309+
310+
return NGX_OK;
311+
}
312+
313+
#endif
314+
315+
212316
static ngx_int_t
213317
ngx_http_proxy_connect_get_peer(ngx_peer_connection_t *pc, void *data)
214318
{
@@ -1530,8 +1634,8 @@ ngx_http_proxy_connect_address(ngx_conf_t *cf, ngx_command_t *cmd,
15301634
return NGX_CONF_ERROR;
15311635
}
15321636

1533-
rc = ngx_parse_addr_port(cf->pool, address->addr, value[1].data,
1534-
value[1].len);
1637+
rc = __ngx_parse_addr_port(cf->pool, address->addr, value[1].data,
1638+
value[1].len);
15351639

15361640
switch (rc) {
15371641
case NGX_OK:
@@ -1561,7 +1665,7 @@ ngx_http_proxy_connect_bind(ngx_conf_t *cf, ngx_command_t *cmd,
15611665
ngx_int_t rc;
15621666
ngx_str_t *value;
15631667
ngx_http_complex_value_t cv;
1564-
ngx_http_proxy_connect_address_t **plocal, *local;
1668+
ngx_http_proxy_connect_address_t **plocal, *local;
15651669
ngx_http_compile_complex_value_t ccv;
15661670

15671671
plocal = (ngx_http_proxy_connect_address_t **) (p + cmd->offset);
@@ -1608,8 +1712,8 @@ ngx_http_proxy_connect_bind(ngx_conf_t *cf, ngx_command_t *cmd,
16081712
return NGX_CONF_ERROR;
16091713
}
16101714

1611-
rc = ngx_parse_addr_port(cf->pool, local->addr, value[1].data,
1612-
value[1].len);
1715+
rc = __ngx_parse_addr_port(cf->pool, local->addr, value[1].data,
1716+
value[1].len);
16131717

16141718
switch (rc) {
16151719
case NGX_OK:
@@ -1681,7 +1785,7 @@ ngx_http_proxy_connect_set_local(ngx_http_request_t *r,
16811785
return NGX_ERROR;
16821786
}
16831787

1684-
rc = ngx_parse_addr_port(r->pool, addr, val.data, val.len);
1788+
rc = __ngx_parse_addr_port(r->pool, addr, val.data, val.len);
16851789
if (rc == NGX_ERROR) {
16861790
return NGX_ERROR;
16871791
}
@@ -1717,7 +1821,9 @@ ngx_http_proxy_connect_set_address(ngx_http_request_t *r,
17171821
u->resolved->addrs = NULL;
17181822
u->resolved->sockaddr = address->addr->sockaddr;
17191823
u->resolved->socklen = address->addr->socklen;
1824+
#if defined(nginx_version) && nginx_version >= 1011007
17201825
u->resolved->name = address->addr->name;
1826+
#endif
17211827
u->resolved->host = address->addr->name;
17221828

17231829
return NGX_OK;
@@ -1736,7 +1842,7 @@ ngx_http_proxy_connect_set_address(ngx_http_request_t *r,
17361842
return NGX_ERROR;
17371843
}
17381844

1739-
rc = ngx_parse_addr_port(r->pool, addr, val.data, val.len);
1845+
rc = __ngx_parse_addr_port(r->pool, addr, val.data, val.len);
17401846
if (rc == NGX_ERROR) {
17411847
return NGX_ERROR;
17421848
}
@@ -1750,7 +1856,9 @@ ngx_http_proxy_connect_set_address(ngx_http_request_t *r,
17501856
addr->name = val;
17511857
u->resolved->sockaddr = addr->sockaddr;
17521858
u->resolved->socklen = addr->socklen;
1859+
#if defined(nginx_version) && nginx_version >= 1011007
17531860
u->resolved->name = addr->name;
1861+
#endif
17541862
u->resolved->naddrs = 1;
17551863

17561864
return NGX_OK;

0 commit comments

Comments
 (0)