Mercurial > hg > nginx
comparison src/http/ngx_http_core_module.c @ 2857:507fc5ac9839
use ngx_connection_local_sockaddr() instead of ngx_http_server_addr()
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Mon, 18 May 2009 12:58:19 +0000 |
parents | 10d6b9950453 |
children | 13b63d682228 |
comparison
equal
deleted
inserted
replaced
2856:f9b5dfcc96d8 | 2857:507fc5ac9839 |
---|---|
1821 | 1821 |
1822 r->headers_in.user.len = len; | 1822 r->headers_in.user.len = len; |
1823 r->headers_in.user.data = auth.data; | 1823 r->headers_in.user.data = auth.data; |
1824 r->headers_in.passwd.len = auth.len - len - 1; | 1824 r->headers_in.passwd.len = auth.len - len - 1; |
1825 r->headers_in.passwd.data = &auth.data[len + 1]; | 1825 r->headers_in.passwd.data = &auth.data[len + 1]; |
1826 | |
1827 return NGX_OK; | |
1828 } | |
1829 | |
1830 | |
1831 ngx_int_t | |
1832 ngx_http_server_addr(ngx_http_request_t *r, ngx_str_t *s) | |
1833 { | |
1834 socklen_t len; | |
1835 ngx_uint_t addr; | |
1836 ngx_connection_t *c; | |
1837 u_char sa[NGX_SOCKADDRLEN]; | |
1838 struct sockaddr_in *sin; | |
1839 #if (NGX_HAVE_INET6) | |
1840 ngx_uint_t i; | |
1841 struct sockaddr_in6 *sin6; | |
1842 #endif | |
1843 | |
1844 c = r->connection; | |
1845 | |
1846 switch (c->local_sockaddr->sa_family) { | |
1847 | |
1848 #if (NGX_HAVE_INET6) | |
1849 case AF_INET6: | |
1850 sin6 = (struct sockaddr_in6 *) c->local_sockaddr; | |
1851 | |
1852 for (addr = 0, i = 0; addr == 0 && i < 16; i++) { | |
1853 addr |= sin6->sin6_addr.s6_addr[i]; | |
1854 } | |
1855 | |
1856 break; | |
1857 #endif | |
1858 | |
1859 default: /* AF_INET */ | |
1860 sin = (struct sockaddr_in *) c->local_sockaddr; | |
1861 addr = sin->sin_addr.s_addr; | |
1862 break; | |
1863 } | |
1864 | |
1865 if (addr == 0) { | |
1866 | |
1867 len = NGX_SOCKADDRLEN; | |
1868 | |
1869 if (getsockname(c->fd, (struct sockaddr *) &sa, &len) == -1) { | |
1870 ngx_connection_error(c, ngx_socket_errno, "getsockname() failed"); | |
1871 return NGX_ERROR; | |
1872 } | |
1873 | |
1874 c->local_sockaddr = ngx_palloc(r->connection->pool, len); | |
1875 if (c->local_sockaddr == NULL) { | |
1876 return NGX_ERROR; | |
1877 } | |
1878 | |
1879 c->local_socklen = len; | |
1880 ngx_memcpy(c->local_sockaddr, &sa, len); | |
1881 } | |
1882 | |
1883 if (s == NULL) { | |
1884 return NGX_OK; | |
1885 } | |
1886 | |
1887 s->len = ngx_sock_ntop(c->local_sockaddr, s->data, s->len, 0); | |
1888 | 1826 |
1889 return NGX_OK; | 1827 return NGX_OK; |
1890 } | 1828 } |
1891 | 1829 |
1892 | 1830 |