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