Mercurial > hg > nginx
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 } |