face: LocalControlHeader attributes
refs #1264
Change-Id: Iab8b875ea8102103390d2da37ca3c08ef58a3d55
diff --git a/daemon/face/face.hpp b/daemon/face/face.hpp
index 68b8073..d4e4578 100644
--- a/daemon/face/face.hpp
+++ b/daemon/face/face.hpp
@@ -4,8 +4,8 @@
* See COPYING for copyright and distribution information.
*/
-#ifndef NFD_FACE_FACE_H
-#define NFD_FACE_FACE_H
+#ifndef NFD_FACE_FACE_HPP
+#define NFD_FACE_FACE_HPP
#include "common.hpp"
#include "core/event-emitter.hpp"
@@ -21,6 +21,22 @@
const std::size_t MAX_NDN_PACKET_SIZE = 8800;
+
+/* \brief indicates a feature in LocalControlHeader
+ */
+enum LocalControlHeaderFeature
+{
+ /// any feature
+ LOCAL_CONTROL_HEADER_FEATURE_ANY,
+ /// in-faceid
+ LOCAL_CONTROL_HEADER_FEATURE_IN_FACEID,
+ /// out-faceid
+ LOCAL_CONTROL_HEADER_FEATURE_NEXTHOP_FACEID,
+ /// upper bound of enum
+ LOCAL_CONTROL_HEADER_FEATURE_MAX
+};
+
+
/** \brief represents a face
*/
class Face : noncopyable, public enable_shared_from_this<Face>
@@ -35,26 +51,26 @@
};
Face();
-
+
virtual
~Face();
-
+
FaceId
getId() const;
/// fires when an Interest is received
EventEmitter<Interest> onReceiveInterest;
-
+
/// fires when a Data is received
EventEmitter<Data> onReceiveData;
/// fires when face disconnects or fails to perform properly
EventEmitter<std::string/*reason*/> onFail;
-
+
/// send an Interest
virtual void
sendInterest(const Interest& interest) = 0;
-
+
/// send a Data
virtual void
sendData(const Data& data) = 0;
@@ -67,21 +83,21 @@
*/
virtual void
close() = 0;
-
+
/** \brief Get whether underlying communication is up
*
* In this base class this property is always true.
*/
virtual bool
isUp() const;
-
+
/** \brief Set the description
*
* This is typically invoked by mgmt on set description command
*/
virtual void
setDescription(const std::string& description);
-
+
/// Get the description
virtual const std::string&
getDescription() const;
@@ -92,17 +108,30 @@
*/
virtual bool
isLocal() const;
-
+
/** \brief Get whether packets sent this Face may reach multiple peers
*
* In this base class this property is always false.
*/
virtual bool
isMultiAccess() const;
-
- /// Get whether the face has opted in for local control header
- virtual bool
- isLocalControlHeaderEnabled() const;
+
+ /** \brief get whether a LocalControlHeader feature is enabled
+ *
+ * \param feature The feature. Cannot be LOCAL_CONTROL_HEADER_FEATURE_MAX
+ * LOCAL_CONTROL_HEADER_FEATURE_ANY returns true if any feature is enabled.
+ */
+ bool
+ isLocalControlHeaderEnabled(LocalControlHeaderFeature feature =
+ LOCAL_CONTROL_HEADER_FEATURE_ANY) const;
+
+ /** \brief enable or disable a LocalControlHeader feature
+ *
+ * \param feature The feature. Cannot be LOCAL_CONTROL_HEADER_FEATURE_ANY
+ * or LOCAL_CONTROL_HEADER_FEATURE_MAX
+ */
+ void
+ setLocalControlHeaderFeature(LocalControlHeaderFeature feature, bool enabled);
private:
void
@@ -111,11 +140,19 @@
private:
FaceId m_id;
std::string m_description;
-
+ std::vector<bool> m_localControlHeaderFeatures;
+
// allow setting FaceId
friend class Forwarder;
};
+inline bool
+Face::isLocalControlHeaderEnabled(LocalControlHeaderFeature feature) const
+{
+ BOOST_ASSERT(feature < m_localControlHeaderFeatures.size());
+ return m_localControlHeaderFeatures[feature];
+}
+
} // namespace nfd
-#endif // NFD_FACE_FACE_H
+#endif // NFD_FACE_FACE_HPP