|
30 | 30 | #include <array> |
31 | 31 | #include <atomic> |
32 | 32 |
|
| 33 | +#include "swoc/TextView.h" |
| 34 | + |
33 | 35 | #include "ts/ts.h" |
34 | 36 |
|
35 | 37 | #include "conditions.h" |
@@ -280,7 +282,26 @@ ConditionUrl::set_qualifier(const std::string &q) |
280 | 282 | Condition::set_qualifier(q); |
281 | 283 |
|
282 | 284 | Dbg(pi_dbg_ctl, "\tParsing %%{URL:%s}", q.c_str()); |
283 | | - _url_qual = parse_url_qualifier(q); |
| 285 | + |
| 286 | + std::string::size_type pos = q.find(':'); |
| 287 | + |
| 288 | + if (pos != std::string::npos) { |
| 289 | + std::string qual_part = q.substr(0, pos); |
| 290 | + std::string sub_qual = q.substr(pos + 1); |
| 291 | + |
| 292 | + _url_qual = parse_url_qualifier(qual_part); |
| 293 | + |
| 294 | + if (_url_qual == URL_QUAL_QUERY) { |
| 295 | + if (!sub_qual.empty()) { |
| 296 | + _query_param = sub_qual; |
| 297 | + Dbg(pi_dbg_ctl, "\tQuery parameter sub-key: %s", _query_param.c_str()); |
| 298 | + } |
| 299 | + } else { |
| 300 | + TSError("[%s] Sub-qualifier not supported for URL component: %s", PLUGIN_NAME, qual_part.c_str()); |
| 301 | + } |
| 302 | + } else { |
| 303 | + _url_qual = parse_url_qualifier(q); |
| 304 | + } |
284 | 305 | } |
285 | 306 |
|
286 | 307 | void |
@@ -347,8 +368,15 @@ ConditionUrl::append_value(std::string &s, const Resources &res) |
347 | 368 | break; |
348 | 369 | case URL_QUAL_QUERY: |
349 | 370 | q_str = TSUrlHttpQueryGet(bufp, url, &i); |
350 | | - s.append(q_str, i); |
351 | | - Dbg(pi_dbg_ctl, " Query parameters to match is: %.*s", i, q_str); |
| 371 | + if (_query_param.empty()) { |
| 372 | + s.append(q_str, i); |
| 373 | + Dbg(pi_dbg_ctl, " Query parameters to match is: %.*s", i, q_str); |
| 374 | + } else { |
| 375 | + swoc::TextView value = res.get_query_param(_query_param, q_str, i); |
| 376 | + |
| 377 | + s.append(value.data(), value.size()); |
| 378 | + Dbg(pi_dbg_ctl, " Query parameter %s value is: %.*s", _query_param.c_str(), static_cast<int>(value.size()), value.data()); |
| 379 | + } |
352 | 380 | break; |
353 | 381 | case URL_QUAL_SCHEME: |
354 | 382 | q_str = TSUrlSchemeGet(bufp, url, &i); |
|
0 commit comments