IBR-DTN  1.0.0
BundleFilter.h
Go to the documentation of this file.
1 /*
2  * BundleFilter.h
3  *
4  * Copyright (C) 2014 IBR, TU Braunschweig
5  *
6  * Written-by: Johannes Morgenroth <jm@m-network.de>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21 
22 #include <ibrdtn/data/Number.h>
23 #include <ibrdtn/data/Bundle.h>
24 #include <ibrdtn/data/Block.h>
26 #include <ibrdtn/data/EID.h>
28 #include <core/Node.h>
29 
30 #ifndef BUNDLEFILTER_H_
31 #define BUNDLEFILTER_H_
32 
33 namespace dtn
34 {
35  namespace core
36  {
37  class FilterException : public ibrcommon::Exception
38  {
39  public:
40  FilterException(std::string what) throw () : ibrcommon::Exception(what)
41  {
42  };
43  };
44 
45  class FilterContext {
46  public:
47  FilterContext();
48  virtual ~FilterContext();
49 
50  void setMetaBundle(const dtn::data::MetaBundle &data);
52 
53  void setBundle(const dtn::data::Bundle &data);
54  const dtn::data::Bundle& getBundle() const throw (FilterException);
55 
56  void setPrimaryBlock(const dtn::data::PrimaryBlock &data);
58 
59  const dtn::data::BundleID& getBundleID() const throw (FilterException);
60 
61  void setBlock(const dtn::data::Block &block, const dtn::data::Number &size);
62  const dtn::data::Block& getBlock() const throw (FilterException);
64 
65  void setPeer(const dtn::data::EID &endpoint);
66  const dtn::data::EID& setPeer() const throw (FilterException);
67 
68  void setProtocol(const dtn::core::Node::Protocol &protocol);
70 
71  void setRouting(const dtn::routing::RoutingExtension &routing);
72  const std::string getRoutingTag() const throw (FilterException);
73 
74  private:
75  const dtn::data::MetaBundle *_metabundle;
76  const dtn::data::Bundle *_bundle;
77  const dtn::data::PrimaryBlock *_primaryblock;
78  const dtn::data::Block *_block;
79  dtn::data::Number _block_length;
80  const dtn::data::EID *_peer;
81  dtn::core::Node::Protocol _protocol;
82  const dtn::routing::RoutingExtension *_routing;
83  };
84 
85  class BundleFilter {
86  public:
87  enum ACTION {
93  };
94 
95  enum TABLE {
99  };
100 
101  BundleFilter();
102  virtual ~BundleFilter();
103 
107  virtual ACTION evaluate(const FilterContext &context) const throw ();
108 
113  virtual ACTION filter(const FilterContext &context, dtn::data::Bundle &bundle) const throw ();
114 
119 
120  private:
121  BundleFilter *_next;
122  };
123 
124  class AcceptFilter : public BundleFilter
125  {
126  public:
127  virtual ~AcceptFilter() {};
128  virtual ACTION evaluate(const FilterContext&) const throw () { return ACCEPT; };
129  virtual ACTION filter(const FilterContext&, dtn::data::Bundle&) const throw () { return ACCEPT; };
130  };
131 
132  class DropFilter : public BundleFilter
133  {
134  public:
135  virtual ~DropFilter() {};
136  virtual ACTION evaluate(const FilterContext&) const throw () { return DROP; };
137  virtual ACTION filter(const FilterContext&, dtn::data::Bundle&) const throw () { return DROP; };
138  };
139 
140  class RejectFilter : public BundleFilter
141  {
142  public:
143  virtual ~RejectFilter() {};
144  virtual ACTION evaluate(const FilterContext&) const throw () { return REJECT; };
145  virtual ACTION filter(const FilterContext&, dtn::data::Bundle&) const throw () { return REJECT; };
146  };
147  } /* namespace core */
148 } /* namespace dtn */
149 
150 #endif /* BUNDLEFILTER_H_ */
const dtn::data::Bundle & getBundle() const
void setBundle(const dtn::data::Bundle &data)
dtn::core::Node::Protocol getProtocol() const
FilterException(std::string what)
Definition: BundleFilter.h:40
virtual ACTION evaluate(const FilterContext &context) const
virtual ACTION evaluate(const FilterContext &) const
Definition: BundleFilter.h:136
virtual ACTION filter(const FilterContext &, dtn::data::Bundle &) const
Definition: BundleFilter.h:137
virtual ACTION filter(const FilterContext &context, dtn::data::Bundle &bundle) const
const dtn::data::BundleID & getBundleID() const
void setProtocol(const dtn::core::Node::Protocol &protocol)
virtual ACTION evaluate(const FilterContext &) const
Definition: BundleFilter.h:144
const dtn::data::PrimaryBlock & getPrimaryBlock() const
BundleFilter * append(BundleFilter *filter)
const dtn::data::MetaBundle & getMetaBundle() const
dtn::data::Number getBlockLength() const
void setMetaBundle(const dtn::data::MetaBundle &data)
const dtn::data::Block & getBlock() const
void setBlock(const dtn::data::Block &block, const dtn::data::Number &size)
const std::string getRoutingTag() const
virtual ACTION filter(const FilterContext &, dtn::data::Bundle &) const
Definition: BundleFilter.h:145
virtual ACTION evaluate(const FilterContext &) const
Definition: BundleFilter.h:128
void setRouting(const dtn::routing::RoutingExtension &routing)
const dtn::data::EID & setPeer() const
virtual ACTION filter(const FilterContext &, dtn::data::Bundle &) const
Definition: BundleFilter.h:129
void setPrimaryBlock(const dtn::data::PrimaryBlock &data)