blob: a2229513802d38676c64539828a1f8df0d400180 [file] [log] [blame]
/* -*- 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