blob: 962bfe5ba1d8ede05c8cfaf9e77f188c64be5220 [file] [log] [blame]
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
/*
* Copyright (c) 2013, Regents of the University of California
* Alexander Afanasyev
*
* BSD license, See the LICENSE file for more information
*
* Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
*/
#ifndef NDN_DATA_H
#define NDN_DATA_H
#include "ndn-cpp/fields/name.h"
#include "ndn-cpp/fields/content.h"
#include "ndn-cpp/fields/signature.h"
#include "ndn-cpp/fields/signed-blob.h"
namespace ndn {
/**
* @brief Class implementing abstractions to work with NDN Data packets
*/
class Data
{
public:
/**
* @brief Create an empty Data with empty payload
**/
Data ();
/**
* @brief Destructor
*/
~Data ();
/**
* @brief Set data packet name
* @param name name of the data packet
* @return reference to self (to allow method chaining)
*
* In some cases, a direct access to and manipulation of name using getName is more efficient
*/
inline Data &
setName (const Name &name);
/**
* @brief Get data packet name (const reference)
* @returns name of the data packet
*/
inline const Name &
getName () const;
/**
* @brief Get data packet name (reference)
* @returns name of the data packet
*/
inline Name &
getName ();
/**
* @brief Get const smart pointer to signature object
*/
inline ptr_lib::shared_ptr<const Signature>
getSignature () const;
/**
* @brief Get smart pointer to signature object
*/
inline ptr_lib::shared_ptr<Signature>
getSignature ();
/**
* @brief Set signature object
* @param signature smart pointer to a signature object
*/
inline void
setSignature (ptr_lib::shared_ptr<Signature> sigature);
/**
* @brief Get const reference to content object (content info + actual content)
*/
inline const Content &
getContent () const;
/**
* @brief Get reference to content object (content info + actual content)
*/
inline Content &
getContent ();
/**
* @brief Set content object (content info + actual content)
* @param content reference to a content object
*
* More efficient way (that avoids copying):
* @code
* Content content (...);
* getContent ().swap (content);
* @endcode
*/
inline void
setContent (const Content &content);
/**
* @brief A helper method to directly access actual content data (const reference)
*
* This method is equivalent to
* @code
* getContent ().getContent ()
* @endcode
*/
inline const Blob &
content () const;
/**
* @brief A helper method to directly access actual content data (reference)
*
* This method is equivalent to
* @code
* getContent ().getContent ()
* @endcode
*/
inline Blob &
content ();
private:
Name m_name;
ptr_lib::shared_ptr<Signature> m_signature; // signature with its parameters "binds" name and content
Content m_content;
ptr_lib::shared_ptr<SignedBlob> m_wire;
};
inline Data &
Data::setName (const Name &name)
{
m_name = name;
return *this;
}
inline const Name &
Data::getName () const
{
return m_name;
}
inline Name &
Data::getName ()
{
return m_name;
}
inline ptr_lib::shared_ptr<const Signature>
Data::getSignature () const
{
return m_signature;
}
inline ptr_lib::shared_ptr<Signature>
Data::getSignature ()
{
return m_signature;
}
inline void
Data::setSignature (ptr_lib::shared_ptr<Signature> signature)
{
m_signature = signature;
}
inline const Content &
Data::getContent () const
{
return m_content;
}
inline Content &
Data::getContent ()
{
return m_content;
}
inline void
Data::setContent (const Content &content)
{
m_content = content;
}
inline const Blob &
Data::content () const
{
return getContent ().getContent ();
}
inline Blob &
Data::content ()
{
return getContent ().getContent ();
}
} // namespace ndn
#endif // NDN_DATA_H