Mercurial > hg > nginx-quic
comparison src/core/ngx_inet.c @ 3266:798141791ad3
use ngx_inet6_addr()
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Mon, 02 Nov 2009 12:58:30 +0000 |
parents | 0c5c5e876391 |
children | fb4f7605505f |
comparison
equal
deleted
inserted
replaced
3265:0c5c5e876391 | 3266:798141791ad3 |
---|---|
696 | 696 |
697 static ngx_int_t | 697 static ngx_int_t |
698 ngx_parse_inet6_url(ngx_pool_t *pool, ngx_url_t *u) | 698 ngx_parse_inet6_url(ngx_pool_t *pool, ngx_url_t *u) |
699 { | 699 { |
700 #if (NGX_HAVE_INET6) | 700 #if (NGX_HAVE_INET6) |
701 int rc; | |
702 u_char *p, *host, *port, *last, *uri; | 701 u_char *p, *host, *port, *last, *uri; |
703 size_t len; | 702 size_t len; |
704 ngx_int_t n; | 703 ngx_int_t n; |
705 struct sockaddr_in6 *sin6; | 704 struct sockaddr_in6 *sin6; |
706 | 705 |
768 if (len == 0) { | 767 if (len == 0) { |
769 u->err = "no host"; | 768 u->err = "no host"; |
770 return NGX_ERROR; | 769 return NGX_ERROR; |
771 } | 770 } |
772 | 771 |
773 u->host.len = len++; | 772 u->host.len = len; |
774 u->host.data = host; | 773 u->host.data = host; |
775 | 774 |
776 p = ngx_alloc(len, pool->log); | 775 if (ngx_inet6_addr(host, len, (u_char *) &sin6->sin6_addr) != NGX_OK) { |
777 if (p == NULL) { | |
778 return NGX_ERROR; | |
779 } | |
780 | |
781 (void) ngx_cpystrn(p, host, len); | |
782 | |
783 #if (NGX_WIN32) | |
784 | |
785 rc = WSAStringToAddress((char *) p, AF_INET6, NULL, | |
786 (SOCKADDR *) sin6, &u->socklen); | |
787 rc = !rc; | |
788 | |
789 if (u->port) { | |
790 sin6->sin6_port = htons(u->port); | |
791 } | |
792 | |
793 #else | |
794 | |
795 rc = inet_pton(AF_INET6, (const char *) p, &sin6->sin6_addr); | |
796 | |
797 #endif | |
798 | |
799 ngx_free(p); | |
800 | |
801 if (rc == 0) { | |
802 u->err = "invalid IPv6 address"; | 776 u->err = "invalid IPv6 address"; |
803 return NGX_ERROR; | 777 return NGX_ERROR; |
804 } | 778 } |
805 | 779 |
806 if (IN6_IS_ADDR_UNSPECIFIED(&sin6->sin6_addr)) { | 780 if (IN6_IS_ADDR_UNSPECIFIED(&sin6->sin6_addr)) { |