Mercurial > hg > nginx
comparison src/stream/ngx_stream_variables.c @ 6681:b9f78a4e3597
Stream: $proxy_protocol_addr and $proxy_protocol_port.
author | Dmitry Volyntsev <xeioex@nginx.com> |
---|---|
date | Tue, 06 Sep 2016 21:28:16 +0300 |
parents | 38143d1abdec |
children | 8cd97c14b0e2 |
comparison
equal
deleted
inserted
replaced
6680:7357abd1fa8c | 6681:b9f78a4e3597 |
---|---|
15 ngx_stream_session_t *s, ngx_stream_variable_value_t *v, uintptr_t data); | 15 ngx_stream_session_t *s, ngx_stream_variable_value_t *v, uintptr_t data); |
16 static ngx_int_t ngx_stream_variable_remote_addr(ngx_stream_session_t *s, | 16 static ngx_int_t ngx_stream_variable_remote_addr(ngx_stream_session_t *s, |
17 ngx_stream_variable_value_t *v, uintptr_t data); | 17 ngx_stream_variable_value_t *v, uintptr_t data); |
18 static ngx_int_t ngx_stream_variable_remote_port(ngx_stream_session_t *s, | 18 static ngx_int_t ngx_stream_variable_remote_port(ngx_stream_session_t *s, |
19 ngx_stream_variable_value_t *v, uintptr_t data); | 19 ngx_stream_variable_value_t *v, uintptr_t data); |
20 static ngx_int_t ngx_stream_variable_proxy_protocol_addr( | |
21 ngx_stream_session_t *s, ngx_stream_variable_value_t *v, uintptr_t data); | |
22 static ngx_int_t ngx_stream_variable_proxy_protocol_port( | |
23 ngx_stream_session_t *s, ngx_stream_variable_value_t *v, uintptr_t data); | |
20 static ngx_int_t ngx_stream_variable_server_addr(ngx_stream_session_t *s, | 24 static ngx_int_t ngx_stream_variable_server_addr(ngx_stream_session_t *s, |
21 ngx_stream_variable_value_t *v, uintptr_t data); | 25 ngx_stream_variable_value_t *v, uintptr_t data); |
22 static ngx_int_t ngx_stream_variable_server_port(ngx_stream_session_t *s, | 26 static ngx_int_t ngx_stream_variable_server_port(ngx_stream_session_t *s, |
23 ngx_stream_variable_value_t *v, uintptr_t data); | 27 ngx_stream_variable_value_t *v, uintptr_t data); |
24 static ngx_int_t ngx_stream_variable_bytes(ngx_stream_session_t *s, | 28 static ngx_int_t ngx_stream_variable_bytes(ngx_stream_session_t *s, |
54 { ngx_string("remote_addr"), NULL, | 58 { ngx_string("remote_addr"), NULL, |
55 ngx_stream_variable_remote_addr, 0, 0, 0 }, | 59 ngx_stream_variable_remote_addr, 0, 0, 0 }, |
56 | 60 |
57 { ngx_string("remote_port"), NULL, | 61 { ngx_string("remote_port"), NULL, |
58 ngx_stream_variable_remote_port, 0, 0, 0 }, | 62 ngx_stream_variable_remote_port, 0, 0, 0 }, |
63 | |
64 { ngx_string("proxy_protocol_addr"), NULL, | |
65 ngx_stream_variable_proxy_protocol_addr, 0, 0, 0 }, | |
66 | |
67 { ngx_string("proxy_protocol_port"), NULL, | |
68 ngx_stream_variable_proxy_protocol_port, 0, 0, 0 }, | |
59 | 69 |
60 { ngx_string("server_addr"), NULL, | 70 { ngx_string("server_addr"), NULL, |
61 ngx_stream_variable_server_addr, 0, 0, 0 }, | 71 ngx_stream_variable_server_addr, 0, 0, 0 }, |
62 | 72 |
63 { ngx_string("server_port"), NULL, | 73 { ngx_string("server_port"), NULL, |
406 if (v->data == NULL) { | 416 if (v->data == NULL) { |
407 return NGX_ERROR; | 417 return NGX_ERROR; |
408 } | 418 } |
409 | 419 |
410 port = ngx_inet_get_port(s->connection->sockaddr); | 420 port = ngx_inet_get_port(s->connection->sockaddr); |
421 | |
422 if (port > 0 && port < 65536) { | |
423 v->len = ngx_sprintf(v->data, "%ui", port) - v->data; | |
424 } | |
425 | |
426 return NGX_OK; | |
427 } | |
428 | |
429 | |
430 static ngx_int_t | |
431 ngx_stream_variable_proxy_protocol_addr(ngx_stream_session_t *s, | |
432 ngx_stream_variable_value_t *v, uintptr_t data) | |
433 { | |
434 v->len = s->connection->proxy_protocol_addr.len; | |
435 v->valid = 1; | |
436 v->no_cacheable = 0; | |
437 v->not_found = 0; | |
438 v->data = s->connection->proxy_protocol_addr.data; | |
439 | |
440 return NGX_OK; | |
441 } | |
442 | |
443 | |
444 static ngx_int_t | |
445 ngx_stream_variable_proxy_protocol_port(ngx_stream_session_t *s, | |
446 ngx_stream_variable_value_t *v, uintptr_t data) | |
447 { | |
448 ngx_uint_t port; | |
449 | |
450 v->len = 0; | |
451 v->valid = 1; | |
452 v->no_cacheable = 0; | |
453 v->not_found = 0; | |
454 | |
455 v->data = ngx_pnalloc(s->connection->pool, sizeof("65535") - 1); | |
456 if (v->data == NULL) { | |
457 return NGX_ERROR; | |
458 } | |
459 | |
460 port = s->connection->proxy_protocol_port; | |
411 | 461 |
412 if (port > 0 && port < 65536) { | 462 if (port > 0 && port < 65536) { |
413 v->len = ngx_sprintf(v->data, "%ui", port) - v->data; | 463 v->len = ngx_sprintf(v->data, "%ui", port) - v->data; |
414 } | 464 } |
415 | 465 |