@@ -209,6 +209,110 @@ static ngx_http_variable_t ngx_http_proxy_connect_vars[] = {
209
209
};
210
210
211
211
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
+
212
316
static ngx_int_t
213
317
ngx_http_proxy_connect_get_peer (ngx_peer_connection_t * pc , void * data )
214
318
{
@@ -1530,8 +1634,8 @@ ngx_http_proxy_connect_address(ngx_conf_t *cf, ngx_command_t *cmd,
1530
1634
return NGX_CONF_ERROR ;
1531
1635
}
1532
1636
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 );
1535
1639
1536
1640
switch (rc ) {
1537
1641
case NGX_OK :
@@ -1561,7 +1665,7 @@ ngx_http_proxy_connect_bind(ngx_conf_t *cf, ngx_command_t *cmd,
1561
1665
ngx_int_t rc ;
1562
1666
ngx_str_t * value ;
1563
1667
ngx_http_complex_value_t cv ;
1564
- ngx_http_proxy_connect_address_t * * plocal , * local ;
1668
+ ngx_http_proxy_connect_address_t * * plocal , * local ;
1565
1669
ngx_http_compile_complex_value_t ccv ;
1566
1670
1567
1671
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,
1608
1712
return NGX_CONF_ERROR ;
1609
1713
}
1610
1714
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 );
1613
1717
1614
1718
switch (rc ) {
1615
1719
case NGX_OK :
@@ -1681,7 +1785,7 @@ ngx_http_proxy_connect_set_local(ngx_http_request_t *r,
1681
1785
return NGX_ERROR ;
1682
1786
}
1683
1787
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 );
1685
1789
if (rc == NGX_ERROR ) {
1686
1790
return NGX_ERROR ;
1687
1791
}
@@ -1717,7 +1821,9 @@ ngx_http_proxy_connect_set_address(ngx_http_request_t *r,
1717
1821
u -> resolved -> addrs = NULL ;
1718
1822
u -> resolved -> sockaddr = address -> addr -> sockaddr ;
1719
1823
u -> resolved -> socklen = address -> addr -> socklen ;
1824
+ #if defined(nginx_version ) && nginx_version >= 1011007
1720
1825
u -> resolved -> name = address -> addr -> name ;
1826
+ #endif
1721
1827
u -> resolved -> host = address -> addr -> name ;
1722
1828
1723
1829
return NGX_OK ;
@@ -1736,7 +1842,7 @@ ngx_http_proxy_connect_set_address(ngx_http_request_t *r,
1736
1842
return NGX_ERROR ;
1737
1843
}
1738
1844
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 );
1740
1846
if (rc == NGX_ERROR ) {
1741
1847
return NGX_ERROR ;
1742
1848
}
@@ -1750,7 +1856,9 @@ ngx_http_proxy_connect_set_address(ngx_http_request_t *r,
1750
1856
addr -> name = val ;
1751
1857
u -> resolved -> sockaddr = addr -> sockaddr ;
1752
1858
u -> resolved -> socklen = addr -> socklen ;
1859
+ #if defined(nginx_version ) && nginx_version >= 1011007
1753
1860
u -> resolved -> name = addr -> name ;
1861
+ #endif
1754
1862
u -> resolved -> naddrs = 1 ;
1755
1863
1756
1864
return NGX_OK ;
0 commit comments