comparison src/core/ngx_inet.c @ 4969:2efa05bbbc1e

Simplified URL parsing code. Except for the "listen" directive, "*" specified as a hostname is no longer treated specially.
author Ruslan Ermilov <ru@nginx.com>
date Mon, 17 Dec 2012 09:31:53 +0000
parents c070fa19511e
children ed2219d58518
comparison
equal deleted inserted replaced
4968:90d8c3400769 4969:2efa05bbbc1e
703 } 703 }
704 } 704 }
705 } 705 }
706 706
707 u->no_port = 1; 707 u->no_port = 1;
708
709 if (!u->no_resolve) {
710 u->port = u->default_port;
711 sin->sin_port = htons(u->default_port);
712 }
708 } 713 }
709 714
710 len = last - host; 715 len = last - host;
711 716
712 if (len == 0) { 717 if (len == 0) {
713 u->err = "no host"; 718 u->err = "no host";
714 return NGX_ERROR; 719 return NGX_ERROR;
715 } 720 }
716 721
717 if (len == 1 && *host == '*') {
718 len = 0;
719 }
720
721 u->host.len = len; 722 u->host.len = len;
722 u->host.data = host; 723 u->host.data = host;
723 724
725 if (u->listen && len == 1 && *host == '*') {
726 sin->sin_addr.s_addr = INADDR_ANY;
727 u->wildcard = 1;
728 return NGX_OK;
729 }
730
724 if (u->no_resolve) { 731 if (u->no_resolve) {
725 return NGX_OK; 732 return NGX_OK;
726 } 733 }
727 734
728 if (len) { 735 sin->sin_addr.s_addr = ngx_inet_addr(host, len);
729 sin->sin_addr.s_addr = ngx_inet_addr(host, len); 736
730 737 if (sin->sin_addr.s_addr == INADDR_NONE) {
731 if (sin->sin_addr.s_addr == INADDR_NONE) { 738 p = ngx_alloc(++len, pool->log);
732 p = ngx_alloc(++len, pool->log); 739 if (p == NULL) {
733 if (p == NULL) { 740 return NGX_ERROR;
734 return NGX_ERROR; 741 }
735 } 742
736 743 (void) ngx_cpystrn(p, host, len);
737 (void) ngx_cpystrn(p, host, len); 744
738 745 h = gethostbyname((const char *) p);
739 h = gethostbyname((const char *) p); 746
740 747 ngx_free(p);
741 ngx_free(p); 748
742 749 if (h == NULL || h->h_addr_list[0] == NULL) {
743 if (h == NULL || h->h_addr_list[0] == NULL) { 750 u->err = "host not found";
744 u->err = "host not found"; 751 return NGX_ERROR;
745 return NGX_ERROR; 752 }
746 } 753
747 754 sin->sin_addr.s_addr = *(in_addr_t *) (h->h_addr_list[0]);
748 sin->sin_addr.s_addr = *(in_addr_t *) (h->h_addr_list[0]); 755 }
749 } 756
750 757 if (sin->sin_addr.s_addr == INADDR_ANY) {
751 if (sin->sin_addr.s_addr == INADDR_ANY) {
752 u->wildcard = 1;
753 }
754
755 } else {
756 sin->sin_addr.s_addr = INADDR_ANY;
757 u->wildcard = 1; 758 u->wildcard = 1;
758 }
759
760 if (u->no_port) {
761 u->port = u->default_port;
762 sin->sin_port = htons(u->default_port);
763 } 759 }
764 760
765 if (u->listen) { 761 if (u->listen) {
766 return NGX_OK; 762 return NGX_OK;
767 } 763 }