control-response.cpp
Go to the documentation of this file.
1 /* -*- 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 #include "control-response.hpp"
23 #include "../encoding/block-helpers.hpp"
24 #include "../encoding/tlv-nfd.hpp"
25 
26 namespace ndn {
27 namespace mgmt {
28 
29 // BOOST_CONCEPT_ASSERT((boost::EqualityComparable<ControlResponse>));
30 BOOST_CONCEPT_ASSERT((WireEncodable<ControlResponse>));
31 BOOST_CONCEPT_ASSERT((WireDecodable<ControlResponse>));
32 static_assert(std::is_base_of<tlv::Error, ControlResponse::Error>::value,
33  "ControlResponse::Error must inherit from tlv::Error");
34 
36  : m_code(200)
37 {
38 }
39 
40 ControlResponse::ControlResponse(uint32_t code, const std::string& text)
41  : m_code(code)
42  , m_text(text)
43 {
44 }
45 
47 {
48  wireDecode(block);
49 }
50 
51 const Block&
53 {
54  if (m_wire.hasWire())
55  return m_wire;
56 
60 
61  if (m_body.hasWire()) {
63  }
64 
65  m_wire.encode();
66  return m_wire;
67 }
68 
69 void
71 {
72  m_wire = wire;
73  m_wire.parse();
74 
76  BOOST_THROW_EXCEPTION(Error("expected ControlResponse, got " + to_string(m_wire.type()) + " element"));
77 
79  if (val == m_wire.elements_end() || val->type() != tlv::nfd::StatusCode) {
80  BOOST_THROW_EXCEPTION(Error("missing StatusCode sub-element"));
81  }
82  m_code = readNonNegativeIntegerAs<uint32_t>(*val);
83  ++val;
84 
85  if (val == m_wire.elements_end() || val->type() != tlv::nfd::StatusText) {
86  BOOST_THROW_EXCEPTION(Error("missing StatusText sub-element"));
87  }
88  m_text = readString(*val);
89  ++val;
90 
91  if (val != m_wire.elements_end())
92  m_body = *val;
93  else
94  m_body = Block();
95 }
96 
97 std::ostream&
98 operator<<(std::ostream& os, const ControlResponse& response)
99 {
100  os << response.getCode() << " " << response.getText();
101  return os;
102 }
103 
104 } // namespace mgmt
105 } // namespace ndn
Copyright (c) 2013-2017 Regents of the University of California.
Definition: common.hpp:66
element_container::const_iterator element_const_iterator
Definition: block.hpp:47
Represents a TLV element of NDN packet format.
Definition: block.hpp:42
std::string readString(const Block &block)
Read TLV-VALUE of a TLV element as a string.
const Block & wireEncode() const
Block makeNonNegativeIntegerBlock(uint32_t type, uint64_t value)
Create a TLV block containing a non-negative integer.
const std::string & getText() const
Block makeStringBlock(uint32_t type, const std::string &value)
Create a TLV block containing a string.
void push_back(const Block &element)
Append a sub element.
Definition: block.cpp:475
std::ostream & operator<<(std::ostream &os, const ControlResponse &response)
void parse() const
Parse TLV-VALUE into sub elements.
Definition: block.cpp:334
uint32_t type() const
Get TLV-TYPE.
Definition: block.hpp:235
void wireDecode(const Block &block)
void encode()
Encode sub elements into TLV-VALUE.
Definition: block.cpp:362
bool hasWire() const
Check if the Block has fully encoded wire.
Definition: block.cpp:250
std::string to_string(const V &v)
Definition: backports.hpp:84
element_const_iterator elements_end() const
Equivalent to elements().end()
Definition: block.hpp:363
ControlCommand response.
element_const_iterator elements_begin() const
Equivalent to elements().begin()
Definition: block.hpp:355
BOOST_CONCEPT_ASSERT((WireEncodable< ControlResponse >))