| 1837 | } |
| 1838 | |
| 1839 | static int worker_matches(proxy_worker *worker, |
| 1840 | const char *url, apr_size_t url_len, |
| 1841 | apr_size_t min_match, apr_size_t *max_match, |
| 1842 | unsigned int mask) |
| 1843 | { |
| 1844 | apr_size_t name_len = strlen(worker->s->name_ex); |
| 1845 | if (name_len <= url_len |
| 1846 | && name_len > *max_match |
| 1847 | /* min_match is the length of the scheme://host part only of url, |
| 1848 | * so it's used as a fast path to avoid the match when url is too |
| 1849 | * small, but it's irrelevant when the worker host contains globs |
| 1850 | * (i.e. ->is_host_matchable). |
| 1851 | */ |
| 1852 | && (worker->s->is_name_matchable |
| 1853 | ? ((mask & AP_PROXY_WORKER_IS_MATCH) |
| 1854 | && (worker->s->is_host_matchable || name_len >= min_match) |
| 1855 | && !ap_proxy_strcmp_ematch(url, worker->s->name_ex)) |
| 1856 | : ((mask & AP_PROXY_WORKER_IS_PREFIX) |
| 1857 | && (name_len >= min_match) |
| 1858 | && !strncmp(url, worker->s->name_ex, name_len)))) { |
| 1859 | *max_match = name_len; |
| 1860 | return 1; |
| 1861 | } |
| 1862 | return 0; |
| 1863 | } |
| 1864 | |
| 1865 | PROXY_DECLARE(proxy_worker *) ap_proxy_get_worker_ex(apr_pool_t *p, |
| 1866 | proxy_balancer *balancer, |
no test coverage detected