Add testbed connectivity status display
Change-Id: I13cf8a01258dab05347e78b51d25a493f45df07f
diff --git a/src/main.cpp b/src/main.cpp
index e39e70c..3f8d238 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -27,7 +27,9 @@
#include "tray-menu.hpp"
#include <ndn-cxx/face.hpp>
+#include <ndn-cxx/name.hpp>
#include <ndn-cxx/util/scheduler.hpp>
+#include <ndn-cxx/mgmt/nfd/fib-entry.hpp>
#include <ndn-cxx/mgmt/nfd/controller.hpp>
#include <ndn-cxx/mgmt/nfd/status-dataset.hpp>
@@ -40,6 +42,7 @@
public:
Ncc()
: m_isActive(true)
+ , m_localhopFibEntry(Name("/localhop/nfd"))
, m_face(nullptr, m_keyChain)
, m_controller(m_face, m_keyChain)
, m_scheduler(m_face.getIoService())
@@ -70,8 +73,7 @@
while (m_isActive) {
try {
while (m_isActive) {
- m_controller.fetch<ndn::nfd::ForwarderGeneralStatusDataset>(bind(&Ncc::onStatusRetrieved, this, _1),
- bind(&Ncc::onStatusTimeout, this));
+ requestNfdStatus();
m_face.processEvents(time::milliseconds::zero(), true);
}
}
@@ -97,10 +99,25 @@
emit m_tray.nfdActivityUpdate(true);
emit m_forwarderStatusModel.onDataReceived(status);
+ m_controller.fetch<ndn::nfd::FibDataset>(bind(&Ncc::onFibStatusRetrieved, this, _1),
+ bind(&Ncc::onStatusTimeout, this));
+
m_scheduler.scheduleEvent(time::seconds(6), bind(&Ncc::requestNfdStatus, this));
}
void
+ onFibStatusRetrieved(const std::vector<nfd::FibEntry>& status)
+ {
+ bool isConnectedToHub = false;
+ for (auto const& fibEntry : status) {
+ if (fibEntry.getPrefix() == m_localhopFibEntry) {
+ isConnectedToHub = true;
+ }
+ }
+ emit m_tray.connectivityUpdate(isConnectedToHub);
+ }
+
+ void
onStatusTimeout()
{
emit m_tray.nfdActivityUpdate(false);
@@ -124,12 +141,13 @@
requestNfdStatus()
{
m_controller.fetch<ndn::nfd::ForwarderGeneralStatusDataset>(bind(&Ncc::onStatusRetrieved, this, _1),
- bind(&Ncc::onStatusTimeout, this));
+ bind(&Ncc::onStatusTimeout, this));
}
private:
volatile bool m_isActive;
boost::thread m_nfdThread;
+ const Name m_localhopFibEntry;
KeyChain m_keyChain;
Face m_face;