Mercurial > hg > nginx
comparison src/http/ngx_http_request.c @ 2549:2d34fba7cf06
captures support in server_name
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Fri, 06 Mar 2009 12:50:20 +0000 |
parents | a6d6d762c554 |
children | 0cf6662e4448 |
comparison
equal
deleted
inserted
replaced
2548:163114282d2c | 2549:2d34fba7cf06 |
---|---|
1651 ngx_http_server_name_t *sn; | 1651 ngx_http_server_name_t *sn; |
1652 | 1652 |
1653 name.len = len; | 1653 name.len = len; |
1654 name.data = server; | 1654 name.data = server; |
1655 | 1655 |
1656 len = 0; | |
1657 | |
1656 sn = vn->regex; | 1658 sn = vn->regex; |
1657 | 1659 |
1658 for (i = 0; i < vn->nregex; i++) { | 1660 for (i = 0; i < vn->nregex; i++) { |
1659 | 1661 |
1660 n = ngx_regex_exec(sn[i].regex, &name, NULL, 0); | 1662 if (sn[i].captures && r->captures == NULL) { |
1663 | |
1664 len = (NGX_HTTP_MAX_CAPTURES + 1) * 3 * sizeof(int); | |
1665 | |
1666 r->captures = ngx_palloc(r->pool, len); | |
1667 if (r->captures == NULL) { | |
1668 return NGX_ERROR; | |
1669 } | |
1670 | |
1671 if (server == buf) { | |
1672 server = ngx_pnalloc(r->pool, len); | |
1673 if (server == NULL) { | |
1674 return NGX_ERROR; | |
1675 } | |
1676 | |
1677 ngx_memcpy(server, buf, len); | |
1678 name.data = server; | |
1679 } | |
1680 } | |
1681 | |
1682 n = ngx_regex_exec(sn[i].regex, &name, r->captures, len); | |
1661 | 1683 |
1662 if (n == NGX_REGEX_NO_MATCHED) { | 1684 if (n == NGX_REGEX_NO_MATCHED) { |
1663 continue; | 1685 continue; |
1664 } | 1686 } |
1665 | 1687 |
1672 } | 1694 } |
1673 | 1695 |
1674 /* match */ | 1696 /* match */ |
1675 | 1697 |
1676 cscf = sn[i].core_srv_conf; | 1698 cscf = sn[i].core_srv_conf; |
1699 | |
1700 r->ncaptures = len; | |
1701 r->captures_data = server; | |
1677 | 1702 |
1678 goto found; | 1703 goto found; |
1679 } | 1704 } |
1680 } | 1705 } |
1681 | 1706 |