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)) {