bug: Fix local prefix discovery
Change-Id: I724a25c0f861659e6c6cb4770be1f58eaee8915f
diff --git a/debug-tools/dump-local-prefix.cc b/debug-tools/dump-local-prefix.cc
deleted file mode 100644
index d5d4664..0000000
--- a/debug-tools/dump-local-prefix.cc
+++ /dev/null
@@ -1,37 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-/**
- * Copyright (C) 2013 Regents of the University of California.
- * @author: Yingdi Yu <yingdi@cs.ucla.edu>
- * See COPYING for copyright and distribution information.
- */
-
-#include "common.hpp"
-#include <ndn-cxx/security/key-chain.hpp>
-#include <ndn-cxx/face.hpp>
-
-using namespace ndn;
-
-int
-main()
-{
- Name root("/ndn");
-
- KeyChain keyChain("sqlite3", "file");
-
- if(!keyChain.doesIdentityExist(root))
- return 1;
-
- Face face;
-
- Name name("/local/ndn/prefix");
- name.appendVersion().appendSegment(0);
-
- shared_ptr<Data> data = make_shared<Data>(name);
- std::string prefix("/ndn/test");
- data->setContent(reinterpret_cast<const uint8_t*>(prefix.c_str()), prefix.size());
- keyChain.signByIdentity(*data, root);
-
- face.put(*data);
-
- face.getIoService().run();
-}
diff --git a/src/controller.cpp b/src/controller.cpp
index 483bc61..313c673 100644
--- a/src/controller.cpp
+++ b/src/controller.cpp
@@ -419,12 +419,37 @@
void
Controller::onLocalPrefix(const Interest& interest, Data& data)
{
- QString localPrefixStr = QString::fromUtf8
- (reinterpret_cast<const char*>(data.getContent().value()), data.getContent().value_size())
- .trimmed();
+ QString localPrefixStr("/private/local");
+ Name prefix;
- Name localPrefix(localPrefixStr.toStdString());
- if (m_localPrefix.empty() || m_localPrefix != localPrefix) {
+ Block contentBlock = data.getContent();
+ try {
+ contentBlock.parse();
+
+ for (Block::element_const_iterator it = contentBlock.elements_begin();
+ it != contentBlock.elements_end(); it++) {
+ Name candidate;
+ candidate.wireDecode(*it);
+ if (candidate.isPrefixOf(m_identity)) {
+ prefix = candidate;
+ break;
+ }
+ }
+
+ if (prefix.empty()) {
+ if (contentBlock.elements_begin() != contentBlock.elements_end())
+ prefix.wireDecode(*contentBlock.elements_begin());
+ else
+ prefix = Name("/private/local");
+ }
+
+ localPrefixStr = QString::fromStdString(prefix.toUri());
+ }
+ catch (Block::Error& e) {
+ prefix = Name("/private/local");
+ }
+
+ if (m_localPrefix.empty() || m_localPrefix != prefix) {
emit localPrefixUpdated(localPrefixStr);
}
}
@@ -657,7 +682,7 @@
Controller::onUpdateLocalPrefixAction()
{
// Name interestName();
- Interest interest("/local/ndn/prefix");
+ Interest interest("/localhop/ndn-autoconf/routable-prefixes");
interest.setInterestLifetime(time::milliseconds(1000));
interest.setMustBeFresh(true);