node+face-management-protocol: Adding StatusResponse to the Tlv::FaceManagement
Change-Id: I23b2478e3b27cf7fb8b263704c1835d70d3b606d
diff --git a/include/ndn-cpp/status-response.hpp b/include/ndn-cpp/status-response.hpp
new file mode 100644
index 0000000..a222951
--- /dev/null
+++ b/include/ndn-cpp/status-response.hpp
@@ -0,0 +1,124 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+/**
+ * Copyright (C) 2013 Regents of the University of California.
+ * See COPYING for copyright and distribution information.
+ */
+
+#ifndef NDN_STATUS_RESPONSE_HPP
+#define NDN_STATUS_RESPONSE_HPP
+
+#include "encoding/block.hpp"
+#include "encoding/tlv-face-management.hpp"
+
+namespace ndn {
+
+class StatusResponse {
+public:
+ StatusResponse()
+ : code_(0)
+ {
+ }
+
+ StatusResponse(uint32_t code, const std::string &info)
+ : code_(code)
+ , info_(info)
+ {
+ }
+
+ inline uint32_t
+ getCode() const;
+
+ inline void
+ setCode(uint32_t code);
+
+ inline const std::string &
+ getInfo() const;
+
+ inline void
+ setInfo(const std::string &info);
+
+ inline const Block&
+ wireEncode() const;
+
+ inline void
+ wireDecode(const Block &block);
+
+private:
+ uint32_t code_;
+ std::string info_;
+
+ mutable Block wire_;
+};
+
+inline uint32_t
+StatusResponse::getCode() const
+{
+ return code_;
+}
+
+inline void
+StatusResponse::setCode(uint32_t code)
+{
+ code_ = code;
+ wire_.reset();
+}
+
+inline const std::string &
+StatusResponse::getInfo() const
+{
+ return info_;
+}
+
+inline void
+StatusResponse::setInfo(const std::string &info)
+{
+ info_ = info;
+ wire_.reset();
+}
+
+
+inline const Block&
+StatusResponse::wireEncode() const
+{
+ if (wire_.hasWire())
+ return wire_;
+
+ wire_ = Block(Tlv::FaceManagement::StatusResponse);
+ wire_.push_back
+ (nonNegativeIntegerBlock(Tlv::FaceManagement::StatusCode, code_));
+
+ if (!info_.empty())
+ {
+ wire_.push_back
+ (dataBlock(Tlv::FaceManagement::StatusText, info_.c_str(), info_.size()));
+ }
+
+ wire_.encode();
+ return wire_;
+}
+
+inline void
+StatusResponse::wireDecode(const Block &wire)
+{
+ wire_ = wire;
+ wire_.parse();
+
+ code_ = readNonNegativeInteger(wire_.get(Tlv::FaceManagement::StatusCode));
+
+ Block::element_iterator val = wire_.find(Tlv::FaceManagement::StatusText);
+ if (val != wire_.getAll().end())
+ {
+ info_.assign(reinterpret_cast<const char*>(val->value()), val->value_size());
+ }
+}
+
+inline std::ostream&
+operator << (std::ostream &os, const StatusResponse &status)
+{
+ os << status.getCode() << " " << status.getInfo();
+ return os;
+}
+
+}
+
+#endif // NDN_STATUS_RESPONSE_HPP