MCPcopy Create free account
hub / github.com/apache/trafficserver / pre_load

Method pre_load

plugins/experimental/txn_box/plugin/src/Modifier.cc:481–529  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

479}
480
481Errata
482Mod_filter::Case::pre_load(Config &cfg, YAML::Node cmp_node)
483{
484 if (!cmp_node.IsMap()) {
485 return Errata(S_ERROR, "List element at {} for {} modifier is not a comparison object.", cmp_node.Mark(), KEY);
486 }
487
488 Expr replace_expr;
489 unsigned action_count = 0;
490
491 if (auto do_node = cmp_node[Global::DO_KEY]; do_node) {
492 return Errata(S_ERROR, R"("{}" at line {} is not allowed in a modifier comparison.)", Global::DO_KEY, do_node.Mark());
493 }
494
495 YAML::Node drop_node = cmp_node[ACTION_DROP];
496 if (drop_node) {
497 _action = DROP;
498 cmp_node.remove(ACTION_DROP);
499 ++action_count;
500 }
501
502 YAML::Node pass_node = cmp_node[ACTION_PASS];
503 if (pass_node) {
504 _action = PASS;
505 cmp_node.remove(ACTION_PASS);
506 ++action_count;
507 }
508
509 YAML::Node replace_node = cmp_node[ACTION_REPLACE];
510 if (replace_node) {
511 auto &&[expr, errata] = cfg.parse_expr(replace_node);
512 if (!errata.is_ok()) {
513 errata.note("While parsing expression at {} for {} key in comparison at {}.", replace_node.Mark(), ACTION_REPLACE,
514 cmp_node.Mark());
515 return std::move(errata);
516 }
517 _expr = std::move(expr);
518 _action = REPLACE;
519 cmp_node.remove(ACTION_REPLACE);
520 ++action_count;
521 }
522
523 if (action_count > 1) {
524 return Errata(S_ERROR, "Only one of {}, {}, {} is allowed in the {} comparison at {}.", ACTION_REPLACE, ACTION_DROP,
525 ACTION_PASS, KEY, cmp_node.Mark());
526 }
527
528 return {};
529}
530
531bool
532Mod_filter::Case::operator()(Context &ctx, Feature const &feature)

Callers

nothing calls this directly

Calls 6

ErrataClass · 0.85
parse_exprMethod · 0.80
MarkMethod · 0.45
removeMethod · 0.45
is_okMethod · 0.45
noteMethod · 0.45

Tested by

no test coverage detected