Mercurial > hg > nginx
comparison src/http/ngx_http.c @ 1387:cb8b30ef3e7e
regex in server_name
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Sun, 12 Aug 2007 19:48:12 +0000 |
parents | 4612daca9dc1 |
children | 56f1ea5baabb |
comparison
equal
deleted
inserted
replaced
1386:3c6da0610f19 | 1387:cb8b30ef3e7e |
---|---|
96 ngx_http_virtual_names_t *vn; | 96 ngx_http_virtual_names_t *vn; |
97 ngx_http_core_srv_conf_t **cscfp, *cscf; | 97 ngx_http_core_srv_conf_t **cscfp, *cscf; |
98 ngx_http_core_loc_conf_t *clcf; | 98 ngx_http_core_loc_conf_t *clcf; |
99 ngx_http_phase_handler_pt checker; | 99 ngx_http_phase_handler_pt checker; |
100 ngx_http_core_main_conf_t *cmcf; | 100 ngx_http_core_main_conf_t *cmcf; |
101 #if (NGX_PCRE) | |
102 ngx_uint_t regex; | |
103 #endif | |
101 #if (NGX_WIN32) | 104 #if (NGX_WIN32) |
102 ngx_iocp_conf_t *iocpcf; | 105 ngx_iocp_conf_t *iocpcf; |
103 #endif | 106 #endif |
104 | 107 |
105 /* the main http context */ | 108 /* the main http context */ |
653 if (ngx_hash_keys_array_init(&ha, NGX_HASH_LARGE) != NGX_OK) { | 656 if (ngx_hash_keys_array_init(&ha, NGX_HASH_LARGE) != NGX_OK) { |
654 ngx_destroy_pool(ha.temp_pool); | 657 ngx_destroy_pool(ha.temp_pool); |
655 return NGX_CONF_ERROR; | 658 return NGX_CONF_ERROR; |
656 } | 659 } |
657 | 660 |
661 #if (NGX_PCRE) | |
662 regex = 0; | |
663 #endif | |
664 | |
658 name = in_addr[a].names.elts; | 665 name = in_addr[a].names.elts; |
659 | 666 |
660 for (s = 0; s < in_addr[a].names.nelts; s++) { | 667 for (s = 0; s < in_addr[a].names.nelts; s++) { |
668 | |
669 #if (NGX_PCRE) | |
670 if (name[s].regex) { | |
671 regex++; | |
672 continue; | |
673 } | |
674 #endif | |
661 | 675 |
662 rc = ngx_hash_add_key(&ha, &name[s].name, name[s].core_srv_conf, | 676 rc = ngx_hash_add_key(&ha, &name[s].name, name[s].core_srv_conf, |
663 NGX_HASH_WILDCARD_KEY); | 677 NGX_HASH_WILDCARD_KEY); |
664 | 678 |
665 if (rc == NGX_ERROR) { | 679 if (rc == NGX_ERROR) { |
738 | 752 |
739 in_addr[a].wc_tail = (ngx_hash_wildcard_t *) hash.hash; | 753 in_addr[a].wc_tail = (ngx_hash_wildcard_t *) hash.hash; |
740 } | 754 } |
741 | 755 |
742 ngx_destroy_pool(ha.temp_pool); | 756 ngx_destroy_pool(ha.temp_pool); |
757 | |
758 #if (NGX_PCRE) | |
759 | |
760 if (regex == 0) { | |
761 continue; | |
762 } | |
763 | |
764 in_addr[a].nregex = regex; | |
765 in_addr[a].regex = ngx_palloc(cf->pool, | |
766 regex * sizeof(ngx_http_server_name_t)); | |
767 | |
768 if (in_addr[a].regex == NULL) { | |
769 return NGX_CONF_ERROR; | |
770 } | |
771 | |
772 for (i = 0, s = 0; s < in_addr[a].names.nelts; s++) { | |
773 if (name[s].regex) { | |
774 in_addr[a].regex[i++] = name[s]; | |
775 } | |
776 } | |
777 #endif | |
743 } | 778 } |
744 | 779 |
745 in_addr = in_port[p].addrs.elts; | 780 in_addr = in_port[p].addrs.elts; |
746 last = in_port[p].addrs.nelts; | 781 last = in_port[p].addrs.nelts; |
747 | 782 |
869 if (vn == NULL) { | 904 if (vn == NULL) { |
870 return NGX_CONF_ERROR; | 905 return NGX_CONF_ERROR; |
871 } | 906 } |
872 hip->addrs[i].virtual_names = vn; | 907 hip->addrs[i].virtual_names = vn; |
873 | 908 |
874 vn->hash = in_addr[i].hash; | 909 vn->names.hash = in_addr[i].hash; |
875 vn->wc_head = in_addr[i].wc_head; | 910 vn->names.wc_head = in_addr[i].wc_head; |
876 vn->wc_tail = in_addr[i].wc_tail; | 911 vn->names.wc_tail = in_addr[i].wc_tail; |
912 #if (NGX_PCRE) | |
913 vn->nregex = in_addr[i].nregex; | |
914 vn->regex = in_addr[i].regex; | |
915 #endif | |
877 } | 916 } |
878 | 917 |
879 if (done) { | 918 if (done) { |
880 break; | 919 break; |
881 } | 920 } |
948 in_addr->hash.buckets = NULL; | 987 in_addr->hash.buckets = NULL; |
949 in_addr->hash.size = 0; | 988 in_addr->hash.size = 0; |
950 in_addr->wc_head = NULL; | 989 in_addr->wc_head = NULL; |
951 in_addr->wc_tail = NULL; | 990 in_addr->wc_tail = NULL; |
952 in_addr->names.elts = NULL; | 991 in_addr->names.elts = NULL; |
992 #if (NGX_PCRE) | |
993 in_addr->nregex = 0; | |
994 in_addr->regex = NULL; | |
995 #endif | |
953 in_addr->core_srv_conf = cscf; | 996 in_addr->core_srv_conf = cscf; |
954 in_addr->default_server = lscf->conf.default_server; | 997 in_addr->default_server = lscf->conf.default_server; |
955 in_addr->bind = lscf->conf.bind; | 998 in_addr->bind = lscf->conf.bind; |
956 in_addr->listen_conf = &lscf->conf; | 999 in_addr->listen_conf = &lscf->conf; |
957 | 1000 |
988 return NGX_ERROR; | 1031 return NGX_ERROR; |
989 } | 1032 } |
990 } | 1033 } |
991 | 1034 |
992 server_names = cscf->server_names.elts; | 1035 server_names = cscf->server_names.elts; |
1036 | |
993 for (i = 0; i < cscf->server_names.nelts; i++) { | 1037 for (i = 0; i < cscf->server_names.nelts; i++) { |
994 | 1038 |
995 for (n = 0; n < server_names[i].name.len; n++) { | 1039 for (n = 0; n < server_names[i].name.len; n++) { |
996 server_names[i].name.data[n] = | 1040 server_names[i].name.data[n] = |
997 ngx_tolower(server_names[i].name.data[n]); | 1041 ngx_tolower(server_names[i].name.data[n]); |
998 } | 1042 } |
999 | 1043 |
1000 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, cf->log, 0, | 1044 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, cf->log, 0, |
1001 "name: %V", &server_names[i].name); | 1045 "name: %V", &server_names[i].name); |
1002 | |
1003 | 1046 |
1004 name = ngx_array_push(&in_addr->names); | 1047 name = ngx_array_push(&in_addr->names); |
1005 if (name == NULL) { | 1048 if (name == NULL) { |
1006 return NGX_ERROR; | 1049 return NGX_ERROR; |
1007 } | 1050 } |