Mercurial > hg > nginx
comparison src/core/ngx_inet.c @ 4722:bb08178f23b0 stable-1.2
Merge of r4671: support for IPv6 literals in proxy_pass and so on.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Mon, 02 Jul 2012 16:16:27 +0000 |
parents | 538363721933 |
children | 2efa05bbbc1e 032f71d771e6 |
comparison
equal
deleted
inserted
replaced
4721:538363721933 | 4722:bb08178f23b0 |
---|---|
806 return NGX_ERROR; | 806 return NGX_ERROR; |
807 } | 807 } |
808 | 808 |
809 u->uri.len = last - uri; | 809 u->uri.len = last - uri; |
810 u->uri.data = uri; | 810 u->uri.data = uri; |
811 | |
812 last = uri; | |
811 } | 813 } |
812 | 814 |
813 if (*port == ':') { | 815 if (*port == ':') { |
814 port++; | 816 port++; |
815 | 817 |
838 if (len == 0) { | 840 if (len == 0) { |
839 u->err = "no host"; | 841 u->err = "no host"; |
840 return NGX_ERROR; | 842 return NGX_ERROR; |
841 } | 843 } |
842 | 844 |
843 u->host.len = len; | 845 u->host.len = len + 2; |
844 u->host.data = host; | 846 u->host.data = host - 1; |
845 | 847 |
846 if (ngx_inet6_addr(host, len, sin6->sin6_addr.s6_addr) != NGX_OK) { | 848 if (ngx_inet6_addr(host, len, sin6->sin6_addr.s6_addr) != NGX_OK) { |
847 u->err = "invalid IPv6 address"; | 849 u->err = "invalid IPv6 address"; |
848 return NGX_ERROR; | 850 return NGX_ERROR; |
849 } | 851 } |
850 | 852 |
851 if (IN6_IS_ADDR_UNSPECIFIED(&sin6->sin6_addr)) { | 853 if (IN6_IS_ADDR_UNSPECIFIED(&sin6->sin6_addr)) { |
852 u->wildcard = 1; | 854 u->wildcard = 1; |
853 } | |
854 | |
855 u->family = AF_INET6; | |
856 | |
857 if (u->no_resolve) { | |
858 return NGX_OK; | |
859 } | 855 } |
860 | 856 |
861 if (u->no_port) { | 857 if (u->no_port) { |
862 u->port = u->default_port; | 858 u->port = u->default_port; |
863 sin6->sin6_port = htons(u->default_port); | 859 sin6->sin6_port = htons(u->default_port); |
864 } | 860 } |
861 | |
862 u->family = AF_INET6; | |
863 u->naddrs = 1; | |
864 | |
865 u->addrs = ngx_pcalloc(pool, sizeof(ngx_addr_t)); | |
866 if (u->addrs == NULL) { | |
867 return NGX_ERROR; | |
868 } | |
869 | |
870 sin6 = ngx_pcalloc(pool, sizeof(struct sockaddr_in6)); | |
871 if (sin6 == NULL) { | |
872 return NGX_ERROR; | |
873 } | |
874 | |
875 ngx_memcpy(sin6, u->sockaddr, sizeof(struct sockaddr_in6)); | |
876 | |
877 u->addrs[0].sockaddr = (struct sockaddr *) sin6; | |
878 u->addrs[0].socklen = sizeof(struct sockaddr_in6); | |
879 | |
880 p = ngx_pnalloc(pool, u->host.len + sizeof(":65535") - 1); | |
881 if (p == NULL) { | |
882 return NGX_ERROR; | |
883 } | |
884 | |
885 u->addrs[0].name.len = ngx_sprintf(p, "%V:%d", | |
886 &u->host, u->port) - p; | |
887 u->addrs[0].name.data = p; | |
865 | 888 |
866 return NGX_OK; | 889 return NGX_OK; |
867 | 890 |
868 #else | 891 #else |
869 | 892 |