abstract Face class
refs #1153
Change-Id: I0b0dd71300d9b2d747a48c72fa8850c9afb75448
diff --git a/daemon/face/face.cpp b/daemon/face/face.cpp
new file mode 100644
index 0000000..1aa5184
--- /dev/null
+++ b/daemon/face/face.cpp
@@ -0,0 +1,52 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (C) 2014 Named Data Networking Project
+ * See COPYING for copyright and distribution information.
+ */
+
+#include "face.hpp"
+
+namespace ndn {
+
+Face::Face(FaceId id)
+ : m_id(id)
+{
+}
+
+Face::~Face()
+{
+}
+
+bool
+Face::isUp() const
+{
+ return true;
+}
+
+void
+Face::setDescription(const std::string& description)
+{
+ m_description = description;
+}
+
+const std::string&
+Face::getDescription() const
+{
+ return m_description;
+}
+
+bool
+Face::isMultiAccess() const
+{
+ return false;
+}
+
+bool
+Face::isLocalControlHeaderEnabled() const
+{
+ // TODO add local control header functionality
+ return false;
+}
+
+
+} //namespace ndn
diff --git a/daemon/face/face.hpp b/daemon/face/face.hpp
index 0a758b3..abcb3ab 100644
--- a/daemon/face/face.hpp
+++ b/daemon/face/face.hpp
@@ -8,6 +8,7 @@
#define NFD_FACE_FACE_H
#include "common.hpp"
+#include "util/event-emitter.hpp"
namespace ndn {
@@ -21,6 +22,62 @@
*/
class Face : noncopyable
{
+public:
+ Face(FaceId id);
+
+ virtual
+ ~Face();
+
+ /// fires when an Interest is received
+ EventEmitter<const Interest&> onReceiveInterest;
+
+ /// fires when a Data is received
+ EventEmitter<const Data&> onReceiveData;
+
+ /// send an Interest
+ virtual void
+ sendInterest(const Interest &interest) =0;
+
+ /// send a Data
+ virtual void
+ sendData(const Data &data) =0;
+
+ /** \brief Get whether underlying communicate 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;
+
+ /** \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;
+
+protected:
+ // void
+ // receiveInterest();
+
+ // void
+ // receiveData();
+
+private:
+ FaceId m_id;
+ std::string m_description;
};
} // namespace ndn
diff --git a/tests/face/face.cpp b/tests/face/face.cpp
index 93a78ec..b453110 100644
--- a/tests/face/face.cpp
+++ b/tests/face/face.cpp
@@ -12,7 +12,31 @@
BOOST_AUTO_TEST_SUITE(FaceFace)
-// no unit test here: this ensures face.hpp can compile on its own
+class FaceTestFace : public Face
+{
+public:
+ FaceTestFace()
+ : Face(1)
+ {
+ }
+
+ virtual void
+ sendInterest(const Interest &interest)
+ {
+ }
+
+ virtual void
+ sendData(const Data &data)
+ {
+ }
+};
+
+BOOST_AUTO_TEST_CASE(Description)
+{
+ FaceTestFace face;
+ face.setDescription("3pFsKrvWr");
+ BOOST_CHECK_EQUAL(face.getDescription(), "3pFsKrvWr");
+}
BOOST_AUTO_TEST_SUITE_END()