All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Pages
validation-state.hpp
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
23 #ifndef NDN_VALIDATION_STATE_HPP
24 #define NDN_VALIDATION_STATE_HPP
25 
26 #include <set>
27 #include "validation-error.hpp"
28 #include "certificate-v2.hpp"
29 #include "../../interest.hpp"
30 
31 namespace ndn {
32 
37 typedef func_lib::function<void(const Data& data)> DataValidationSuccessCallback;
38 
43 typedef func_lib::function<void
44  (const Data& data, const ValidationError& error)> DataValidationFailureCallback;
45 
50 typedef func_lib::function<void
52 
57 typedef func_lib::function<void
58  (const Interest& interest, const ValidationError& error)>
60 
81 public:
83  : hasOutcome_(false)
84  {
85  }
86 
87  virtual
88  ~ValidationState();
89 
94  bool
95  hasOutcome() { return hasOutcome_; }
96 
102  bool
103  isOutcomeFailed() { return hasOutcome_ && outcome_ == false; }
104 
110  bool
111  isOutcomeSuccess() { return hasOutcome_ && outcome_ == true; }
112 
116  virtual void
117  fail(const ValidationError& error) = 0;
118 
123  size_t
124  getDepth() const { return certificateChain_.size(); }
125 
132  bool
133  hasSeenCertificateName(const Name& certificateName)
134  {
135  // second is false if certificateName was already in the set.
136  return !seenCertificateNames_.insert(certificateName).second;
137  }
138 
147  void
148  addCertificate(const CertificateV2& certificate)
149  {
150  certificateChain_.insert
151  (certificateChain_.begin(),
152  ptr_lib::make_shared<CertificateV2>(certificate));
153  }
154 
155 protected:
161  void
162  setOutcome(bool outcome);
163 
164 private:
165  friend class Validator;
166 
172  virtual void
173  verifyOriginalPacket(const CertificateV2& trustedCertificate) = 0;
174 
179  virtual void
180  bypassValidation() = 0;
181 
195  ptr_lib::shared_ptr<CertificateV2>
196  verifyCertificateChain
197  (const ptr_lib::shared_ptr<CertificateV2>& trustedCertificate);
198 
199  // Disable the copy constructor and assignment operator.
200  ValidationState(const ValidationState& other);
201  ValidationState& operator=(const ValidationState& other);
202 
207  std::vector<ptr_lib::shared_ptr<CertificateV2> > certificateChain_;
208  std::set<Name> seenCertificateNames_;
209  bool hasOutcome_;
210  bool outcome_;
211 };
212 
218 public:
227  (const Data& data, const DataValidationSuccessCallback& successCallback,
228  const DataValidationFailureCallback& failureCallback);
229 
230  // TODO: Checks in ~DataValidationState.
231 
232  virtual void
233  fail(const ValidationError& error);
234 
240  const Data&
241  getOriginalData() const { return data_; }
242 
243 private:
244  virtual void
245  verifyOriginalPacket(const CertificateV2& trustedCertificate);
246 
247  virtual void
248  bypassValidation();
249 
250  Data data_;
251  DataValidationSuccessCallback successCallback_;
252  DataValidationFailureCallback failureCallback_;
253 };
254 
260 public:
273  (const Interest& interest,
274  const InterestValidationSuccessCallback& successCallback,
275  const InterestValidationFailureCallback& failureCallback);
276 
277  // TODO: Checks in ~InterestValidationState.
278 
279  virtual void
280  fail(const ValidationError& error);
281 
287  const Interest&
288  getOriginalInterest() const { return interest_; }
289 
290  void
291  addSuccessCallback(const InterestValidationSuccessCallback& successCallback)
292  {
293  successCallbacks_.push_back(successCallback);
294  }
295 
296 private:
297  virtual void
298  verifyOriginalPacket(const CertificateV2& trustedCertificate);
299 
300  virtual void
301  bypassValidation();
302 
303  Interest interest_;
304  std::vector<InterestValidationSuccessCallback> successCallbacks_;
305  InterestValidationFailureCallback failureCallback_;
306 };
307 
308 }
309 
310 #endif
func_lib::function< void(const Data &data, const ValidationError &error)> DataValidationFailureCallback
A DataValidationFailureCallback function object is used to report a failed Data validation.
Definition: validation-state.hpp:44
void addCertificate(const CertificateV2 &certificate)
Add the certificate to the top of the certificate chain.
Definition: validation-state.hpp:148
virtual void fail(const ValidationError &error)
Call the failure callback.
Definition: validation-state.cpp:122
Definition: data.hpp:37
bool hasSeenCertificateName(const Name &certificateName)
Check if certificateName has been previously seen, and record the supplied name.
Definition: validation-state.hpp:133
The DataValidationState class extends ValidationState to hold the validation state for a Data packet...
Definition: validation-state.hpp:217
void setOutcome(bool outcome)
Set the outcome to the given value, and set hasOutcome_ true.
Definition: validation-state.cpp:37
The InterestValidationState class extends ValidationState to hold the validation state for an Interes...
Definition: validation-state.hpp:259
CertificateV2 represents a certificate following the certificate format naming convention.
Definition: certificate-v2.hpp:81
A Name holds an array of Name::Component and represents an NDN name.
Definition: name.hpp:40
An Interest holds a Name and other fields for an interest.
Definition: interest.hpp:43
const Data & getOriginalData() const
Get the original Data packet being validated which was given to the constructor.
Definition: validation-state.hpp:241
virtual void fail(const ValidationError &error)=0
Call the failure callback.
virtual void fail(const ValidationError &error)
Call the failure callback.
Definition: validation-state.cpp:189
DataValidationState(const Data &data, const DataValidationSuccessCallback &successCallback, const DataValidationFailureCallback &failureCallback)
Create a DataValidationState for the Data packet.
Definition: validation-state.cpp:74
func_lib::function< void(const Data &data)> DataValidationSuccessCallback
A DataValidationSuccessCallback function object is used to report a successful Data validation...
Definition: validation-state.hpp:37
The Validator class provides an interface for validating data and interest packets.
Definition: validator.hpp:55
func_lib::function< void(const Interest &interest)> InterestValidationSuccessCallback
An InterestValidationSuccessCallback function object is used to report a successful Interest validati...
Definition: validation-state.hpp:51
bool isOutcomeFailed()
Check if validation failed has been called.
Definition: validation-state.hpp:103
A ValidationError holds an error code and an optional detailed error message.
Definition: validation-error.hpp:34
size_t getDepth() const
Get the depth of the certificate chain.
Definition: validation-state.hpp:124
InterestValidationState(const Interest &interest, const InterestValidationSuccessCallback &successCallback, const InterestValidationFailureCallback &failureCallback)
Create an InterestValidationState for the Data packet.
Definition: validation-state.cpp:136
bool isOutcomeSuccess()
Check if validation success has been called.
Definition: validation-state.hpp:111
ValidationState is an abstract base class for DataValidationState and InterestValidationState.
Definition: validation-state.hpp:80
bool hasOutcome()
Check if validation failed or success has been called.
Definition: validation-state.hpp:95
const Interest & getOriginalInterest() const
Get the original Interest packet being validated which was given to the constructor.
Definition: validation-state.hpp:288
func_lib::function< void(const Interest &interest, const ValidationError &error)> InterestValidationFailureCallback
An InterestValidationFailureCallback function object is used to report a failed Interest validation...
Definition: validation-state.hpp:59