Mercurial > hg > nginx
comparison src/http/ngx_http_variables.c @ 1805:bb72f7518992
use ngx_http_server_addr()
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Sat, 29 Dec 2007 16:00:34 +0000 |
parents | 4c43e25d11ea |
children | 0d9c6fe7502b |
comparison
equal
deleted
inserted
replaced
1804:d457a1576532 | 1805:bb72f7518992 |
---|---|
806 | 806 |
807 static ngx_int_t | 807 static ngx_int_t |
808 ngx_http_variable_server_addr(ngx_http_request_t *r, | 808 ngx_http_variable_server_addr(ngx_http_request_t *r, |
809 ngx_http_variable_value_t *v, uintptr_t data) | 809 ngx_http_variable_value_t *v, uintptr_t data) |
810 { | 810 { |
811 socklen_t len; | 811 ngx_str_t s; |
812 ngx_connection_t *c; | 812 |
813 struct sockaddr_in sin; | 813 s.data = ngx_palloc(r->pool, INET_ADDRSTRLEN); |
814 | 814 if (s.data == NULL) { |
815 v->data = ngx_palloc(r->pool, INET_ADDRSTRLEN); | |
816 if (v->data == NULL) { | |
817 return NGX_ERROR; | 815 return NGX_ERROR; |
818 } | 816 } |
819 | 817 |
820 c = r->connection; | 818 if (ngx_http_server_addr(r, &s) != NGX_OK) { |
821 | 819 return NGX_ERROR; |
822 if (r->in_addr == 0) { | 820 } |
823 len = sizeof(struct sockaddr_in); | 821 |
824 if (getsockname(c->fd, (struct sockaddr *) &sin, &len) == -1) { | 822 v->len = s.len; |
825 ngx_connection_error(c, ngx_socket_errno, "getsockname() failed"); | 823 v->valid = 1; |
826 return NGX_ERROR; | 824 v->no_cacheable = 0; |
827 } | 825 v->not_found = 0; |
828 | 826 v->data = s.data; |
829 r->in_addr = sin.sin_addr.s_addr; | |
830 } | |
831 | |
832 v->len = ngx_inet_ntop(c->listening->family, &r->in_addr, | |
833 v->data, INET_ADDRSTRLEN); | |
834 v->valid = 1; | |
835 v->no_cacheable = 0; | |
836 v->not_found = 0; | |
837 | 827 |
838 return NGX_OK; | 828 return NGX_OK; |
839 } | 829 } |
840 | 830 |
841 | 831 |