Tree.cc
Go to the documentation of this file.
1 /*
2  * Copyright (C) 1996-2019 The Squid Software Foundation and contributors
3  *
4  * Squid software is distributed under GPLv2+ license and includes
5  * contributions from numerous individuals and organizations.
6  * Please see the COPYING and CONTRIBUTORS files for details.
7  */
8 
9 #include "squid.h"
10 #include "acl/Checklist.h"
11 #include "acl/Tree.h"
12 #include "wordlist.h"
13 
15 
18 {
19  return actionAt(lastMatch_ - nodes.begin());
20 }
21 
24 {
25  if (actions.empty())
26  return ACCESS_DUNNO;
27  return actions.back();
28 }
29 
32 Acl::Tree::actionAt(const Nodes::size_type pos) const
33 {
34  assert(pos < nodes.size());
35  if (actions.size()) {
36  assert(actions.size() == nodes.size());
37  return actions[pos];
38  }
39  // default for matched rules in trees without actions
40  return ACCESS_ALLOWED;
41 }
42 
43 void
45 {
46  // either all rules have actions or none
47  assert(nodes.size() == actions.size());
48  InnerNode::add(rule);
49  actions.push_back(action);
50 }
51 
52 void
54 {
55  // either all rules have actions or none
56  assert(actions.empty());
57  InnerNode::add(rule);
58 }
59 
60 bool
61 Acl::Tree::bannedAction(ACLChecklist *checklist, Nodes::const_iterator node) const
62 {
63  if (actions.size()) {
64  assert(actions.size() == nodes.size());
65  const Nodes::size_type pos = node - nodes.begin();
66  return checklist->bannedAction(actions.at(pos));
67  }
68  return false;
69 }
70 
void add(ACL *rule, const Answer &action)
appends and takes control over the rule with a given action
Definition: Tree.cc:44
#define assert(EX)
Definition: assert.h:17
Definition: Acl.h:39
CBDATA_NAMESPACED_CLASS_INIT(Acl, Tree)
Actions actions
Definition: Tree.h:49
Definition: parse.c:104
void add(ACL *node)
appends the node to the collection and takes control over it
Definition: InnerNode.cc:35
Definition: Acl.cc:32
Answer winningAction() const
Returns the corresponding action after a successful tree match.
Definition: Tree.cc:17
bool action(int fd, size_t metasize, const char *fn, const char *url, const SquidMetaList &meta)
Definition: purge.cc:311
Nodes::const_iterator lastMatch_
Definition: BoolOps.h:75
Answer actionAt(const Nodes::size_type pos) const
computes action that corresponds to the position of the matched rule
Definition: Tree.cc:32
Answer lastAction() const
what action to use if no nodes matched
Definition: Tree.cc:23
bool bannedAction(const Acl::Answer &action) const
whether the action is banned or not
Definition: Checklist.cc:394
std::vector< ACL * > nodes
children nodes of this intermediate node
Definition: InnerNode.h:52
virtual bool bannedAction(ACLChecklist *, Nodes::const_iterator) const override
Acl::OrNode API.
Definition: Tree.cc:61

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors