mgmt: replace FaceFlags with individual fields

refs #1992

Change-Id: I41d55b3227c916a253705aaeefbe66c7c18e22a9
diff --git a/daemon/face/face-flags.hpp b/daemon/face/face-flags.hpp
deleted file mode 100644
index 1451a27..0000000
--- a/daemon/face/face-flags.hpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014  Regents of the University of California,
- *                     Arizona Board of Regents,
- *                     Colorado State University,
- *                     University Pierre & Marie Curie, Sorbonne University,
- *                     Washington University in St. Louis,
- *                     Beijing Institute of Technology
- *
- * This file is part of NFD (Named Data Networking Forwarding Daemon).
- * See AUTHORS.md for complete list of NFD authors and contributors.
- *
- * NFD is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE.  See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
- **/
-
-#ifndef NFD_DAEMON_MGMT_FACE_FLAGS_HPP
-#define NFD_DAEMON_MGMT_FACE_FLAGS_HPP
-
-#include "face/face.hpp"
-#include <ndn-cxx/management/nfd-face-flags.hpp>
-
-namespace nfd {
-
-inline uint64_t
-getFaceFlags(const Face& face)
-{
-  uint64_t flags = 0;
-  if (face.isLocal()) {
-    flags |= ndn::nfd::FACE_IS_LOCAL;
-  }
-  if (face.isOnDemand()) {
-    flags |= ndn::nfd::FACE_IS_ON_DEMAND;
-  }
-  return flags;
-}
-
-} // namespace nfd
-
-#endif // NFD_DAEMON_MGMT_FACE_FLAGS_HPP
diff --git a/daemon/face/face.cpp b/daemon/face/face.cpp
index bbf2a08..f3757ff 100644
--- a/daemon/face/face.cpp
+++ b/daemon/face/face.cpp
@@ -24,7 +24,6 @@
  */
 
 #include "face.hpp"
-#include "face-flags.hpp"
 #include "core/logger.hpp"
 
 namespace nfd {
@@ -125,19 +124,44 @@
   this->onFail.clear();
 }
 
+template<typename FaceTraits>
+void
+Face::copyStatusTo(FaceTraits& traits) const
+{
+  traits.setFaceId(getId())
+    .setRemoteUri(getRemoteUri().toString())
+    .setLocalUri(getLocalUri().toString());
+
+  if (isLocal()) {
+    traits.setFaceScope(ndn::nfd::FACE_SCOPE_LOCAL);
+  }
+  else {
+    traits.setFaceScope(ndn::nfd::FACE_SCOPE_NON_LOCAL);
+  }
+
+  if (isOnDemand()) {
+    traits.setFacePersistency(ndn::nfd::FACE_PERSISTENCY_ON_DEMAND);
+  }
+  else {
+    traits.setFacePersistency(ndn::nfd::FACE_PERSISTENCY_PERSISTENT);
+  }
+}
+
+template void
+Face::copyStatusTo<ndn::nfd::FaceStatus>(ndn::nfd::FaceStatus&) const;
+
+template void
+Face::copyStatusTo<ndn::nfd::FaceEventNotification>(ndn::nfd::FaceEventNotification&) const;
+
 ndn::nfd::FaceStatus
 Face::getFaceStatus() const
 {
   ndn::nfd::FaceStatus status;
-  status.setFaceId(getId())
-    .setRemoteUri(getRemoteUri().toString())
-    .setLocalUri(getLocalUri().toString())
-    .setFlags(getFaceFlags(*this));
+  copyStatusTo(status);
 
   this->getCounters().copyTo(status);
 
   return status;
 }
 
-
 } //namespace nfd
diff --git a/daemon/face/face.hpp b/daemon/face/face.hpp
index 52c0894..8234102 100644
--- a/daemon/face/face.hpp
+++ b/daemon/face/face.hpp
@@ -32,6 +32,7 @@
 #include "face-counters.hpp"
 
 #include <ndn-cxx/management/nfd-face-status.hpp>
+#include <ndn-cxx/management/nfd-face-event-notification.hpp>
 
 namespace nfd {
 
@@ -163,6 +164,12 @@
   const FaceUri&
   getLocalUri() const;
 
+  /** \return FaceTraits data structure filled with the current FaceTraits status
+   */
+  template<typename FaceTraits>
+  void
+  copyStatusTo(FaceTraits& traits) const;
+
   /** \return FaceStatus data structure filled with the current Face status
    */
   virtual ndn::nfd::FaceStatus
@@ -202,7 +209,6 @@
   friend class FaceTable;
 };
 
-
 inline bool
 Face::isLocal() const
 {
diff --git a/daemon/mgmt/face-manager.cpp b/daemon/mgmt/face-manager.cpp
index b31f841..5b7c08d 100644
--- a/daemon/mgmt/face-manager.cpp
+++ b/daemon/mgmt/face-manager.cpp
@@ -29,7 +29,6 @@
 #include "core/face-uri.hpp"
 #include "core/network-interface.hpp"
 #include "fw/face-table.hpp"
-#include "face/face-flags.hpp"
 #include "face/tcp-factory.hpp"
 #include "face/udp-factory.hpp"
 #include "core/config-file.hpp"
@@ -1030,11 +1029,8 @@
 FaceManager::onAddFace(shared_ptr<Face> face)
 {
   ndn::nfd::FaceEventNotification notification;
-  notification.setKind(ndn::nfd::FACE_EVENT_CREATED)
-              .setFaceId(face->getId())
-              .setRemoteUri(face->getRemoteUri().toString())
-              .setLocalUri(face->getLocalUri().toString())
-              .setFlags(getFaceFlags(*face));
+  notification.setKind(ndn::nfd::FACE_EVENT_CREATED);
+  face->copyStatusTo(notification);
 
   m_notificationStream.postNotification(notification);
 }
@@ -1043,16 +1039,12 @@
 FaceManager::onRemoveFace(shared_ptr<Face> face)
 {
   ndn::nfd::FaceEventNotification notification;
-  notification.setKind(ndn::nfd::FACE_EVENT_DESTROYED)
-              .setFaceId(face->getId())
-              .setRemoteUri(face->getRemoteUri().toString())
-              .setLocalUri(face->getLocalUri().toString())
-              .setFlags(getFaceFlags(*face));
+  notification.setKind(ndn::nfd::FACE_EVENT_DESTROYED);
+  face->copyStatusTo(notification);
 
   m_notificationStream.postNotification(notification);
 }
 
-
 bool
 FaceManager::extractLocalControlParameters(const Interest& request,
                                            ControlParameters& parameters,