blob: 266b21b65e1a0cca00ceedd2662b3ee562a5ffcf [file] [log] [blame]
Yanbiao Li8ee37ed2015-05-19 12:44:04 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
Alexander Afanasyev80b68e12015-09-17 17:01:04 -07003 * Copyright (c) 2013-2015 Regents of the University of California.
Yanbiao Li8ee37ed2015-05-19 12:44:04 -07004 *
Alexander Afanasyev80b68e12015-09-17 17:01:04 -07005 * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
Yanbiao Li8ee37ed2015-05-19 12:44:04 -07006 *
Alexander Afanasyev80b68e12015-09-17 17:01:04 -07007 * 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.
Yanbiao Li8ee37ed2015-05-19 12:44:04 -070010 *
Alexander Afanasyev80b68e12015-09-17 17:01:04 -070011 * 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.
Yanbiao Li8ee37ed2015-05-19 12:44:04 -070014 *
Alexander Afanasyev80b68e12015-09-17 17:01:04 -070015 * 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.
Yanbiao Li8ee37ed2015-05-19 12:44:04 -070020 */
21
22#ifndef NDN_MGMT_CONTROL_RESPONSE_HPP
23#define NDN_MGMT_CONTROL_RESPONSE_HPP
24
25#include "../encoding/block.hpp"
26
27namespace ndn {
28namespace mgmt {
29
30/** \brief ControlCommand response
31 */
32class ControlResponse
33{
34public:
35 class Error : public tlv::Error
36 {
37 public:
38 explicit
39 Error(const std::string& what)
40 : tlv::Error(what)
41 {
42 }
43 };
44
45 ControlResponse();
46
47 ControlResponse(uint32_t code, const std::string& text);
48
49 explicit
50 ControlResponse(const Block& block);
51
52 uint32_t
53 getCode() const;
54
55 ControlResponse&
56 setCode(uint32_t code);
57
58 const std::string&
59 getText() const;
60
61 ControlResponse&
62 setText(const std::string& text);
63
64 const Block&
65 getBody() const;
66
67 ControlResponse&
68 setBody(const Block& body);
69
70 const Block&
71 wireEncode() const;
72
73 void
74 wireDecode(const Block& block);
75
76protected:
77 uint32_t m_code;
78 std::string m_text;
79 Block m_body;
80
81 mutable Block m_wire;
82};
83
84inline uint32_t
85ControlResponse::getCode() const
86{
87 return m_code;
88}
89
90inline ControlResponse&
91ControlResponse::setCode(uint32_t code)
92{
93 m_code = code;
94 m_wire.reset();
95 return *this;
96}
97
98inline const std::string&
99ControlResponse::getText() const
100{
101 return m_text;
102}
103
104inline ControlResponse&
105ControlResponse::setText(const std::string& text)
106{
107 m_text = text;
108 m_wire.reset();
109 return *this;
110}
111
112inline const Block&
113ControlResponse::getBody() const
114{
115 return m_body;
116}
117
118inline ControlResponse&
119ControlResponse::setBody(const Block& body)
120{
121 m_body = body;
122 m_body.encode(); // will do nothing if already encoded
123 m_wire.reset();
124 return *this;
125}
126
127std::ostream&
128operator<<(std::ostream& os, const ControlResponse& response);
129
130} // namespace mgmt
131} // namespace ndn
132
133#endif // NDN_MGMT_CONTRO_RESPONSE_HPP