blob: e737e870aefc9485f0302ce7f2e93e70ce4ec2e1 [file] [log] [blame]
Alexander Afanasyev7e721412017-01-11 13:36:08 -08001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
3 * Copyright (c) 2013-2017 Regents of the University of California.
4 *
5 * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
6 *
7 * ndn-cxx library is free software: you can redistribute it and/or modify it under the
8 * terms of the GNU Lesser General Public License as published by the Free Software
9 * Foundation, either version 3 of the License, or (at your option) any later version.
10 *
11 * ndn-cxx library is distributed in the hope that it will be useful, but WITHOUT ANY
12 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
13 * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
14 *
15 * You should have received copies of the GNU General Public License and GNU Lesser
16 * General Public License along with ndn-cxx, e.g., in COPYING.md file. If not, see
17 * <http://www.gnu.org/licenses/>.
18 *
19 * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
20 */
21
22#ifndef NDN_SECURITY_V2_VALIDATION_ERROR_HPP
23#define NDN_SECURITY_V2_VALIDATION_ERROR_HPP
24
25#include "../../common.hpp"
26
27namespace ndn {
28namespace security {
29namespace v2 {
30
31/**
32 * @brief Validation error code and optional detailed error message
33 */
34class ValidationError
35{
36public:
37 /**
38 * @brief Known validation error code
39 * @sa specs/validation-error-code.rst
40 */
41 enum Code : uint32_t {
42 NO_ERROR = 0,
43 INVALID_SIGNATURE = 1,
44 NO_SIGNATURE = 2,
45 CANNOT_RETRIEVE_CERT = 3,
46 EXPIRED_CERT = 4,
47 LOOP_DETECTED = 5,
48 MALFORMED_CERT = 6,
49 EXCEEDED_DEPTH_LIMIT = 7,
50 INVALID_KEY_LOCATOR = 8,
51 POLICY_ERROR = 9,
52 IMPLEMENTATION_ERROR = 255,
53 USER_MIN = 256 // custom error codes should use >=256
54 };
55
56public:
57 /**
58 * @brief Validation error, implicitly convertible from an error code and info
59 */
60 ValidationError(uint32_t code, const std::string& info = "")
61 : m_code(code)
62 , m_info(info)
63 {
64 }
65
66 uint32_t
67 getCode() const
68 {
69 return m_code;
70 }
71
72 const std::string&
73 getInfo() const
74 {
75 return m_info;
76 }
77
78private:
79 uint32_t m_code;
80 std::string m_info;
81};
82
83std::ostream&
84operator<<(std::ostream& os, ValidationError::Code code);
85
86std::ostream&
87operator<<(std::ostream& os, const ValidationError& error);
88
89} // namespace v2
90} // namespace security
91} // namespace ndn
92
93#endif // NDN_SECURITY_V2_VALIDATION_ERROR_HPP