gui: Fix the sync tree display issue.

Change-Id: If3a2eedb3be56a75f1dc76f09cd3352b6a54241c
diff --git a/src/contact-manager.cpp b/src/contact-manager.cpp
index 4b50ef4..7c8c62c 100644
--- a/src/contact-manager.cpp
+++ b/src/contact-manager.cpp
@@ -141,7 +141,7 @@
   interest.setMustBeFresh(true);
 
   OnDataValidated onValidated = bind(&ContactManager::onDnsCollectEndorseValidated, this, _1, identity);
-  OnDataValidationFailed onValidationFailed = bind(&ContactManager::onDnsCollectEndorseValidationFailed, this, _1, identity);
+  OnDataValidationFailed onValidationFailed = bind(&ContactManager::onDnsCollectEndorseValidationFailed, this, _1, _2, identity);
   TimeoutNotify timeoutNotify = bind(&ContactManager::onDnsCollectEndorseTimeoutNotify, this, _1, identity);
 
   sendInterest(interest, onValidated, onValidationFailed, timeoutNotify, 0);
@@ -264,6 +264,7 @@
 
 void
 ContactManager::onDnsSelfEndorseCertValidationFailed(const shared_ptr<const Data>& data, 
+                                                     const string& failInfo,
                                                      const Name& identity)
 {
   // If we cannot validate the Self-Endorse-Certificate, we may retry or fetch id-cert,
@@ -296,6 +297,7 @@
 
 void
 ContactManager::onDnsCollectEndorseValidationFailed(const shared_ptr<const Data>& data, 
+                                                    const string& failInfo,
                                                     const Name& identity)
 {
   prepareEndorseInfo(identity);
@@ -361,7 +363,7 @@
         interest.setInterestLifetime(1000);
         
         OnDataValidated onValidated = bind(&ContactManager::onDnsEndorseeValidated, this, _1);
-        OnDataValidationFailed onValidationFailed = bind(&ContactManager::onDnsEndorseeValidationFailed, this, _1);
+        OnDataValidationFailed onValidationFailed = bind(&ContactManager::onDnsEndorseeValidationFailed, this, _1, _2);
         TimeoutNotify timeoutNotify = bind(&ContactManager::onDnsEndorseeTimeoutNotify, this, _1);
         
         sendInterest(interest, onValidated, onValidationFailed, timeoutNotify, 0);
@@ -382,7 +384,7 @@
 }
 
 void
-ContactManager::onDnsEndorseeValidationFailed(const shared_ptr<const Data>& data)
+ContactManager::onDnsEndorseeValidationFailed(const shared_ptr<const Data>& data, const string& failInfo)
 {
   decreaseCollectStatus();
 }
@@ -438,7 +440,7 @@
 }
 
 void
-ContactManager::onIdentityCertValidationFailed(const shared_ptr<const Data>& data)
+ContactManager::onIdentityCertValidationFailed(const shared_ptr<const Data>& data, const string& failInfo)
 {
   _LOG_DEBUG("ContactManager::onIdentityCertValidationFailed " << data->getName());
   decreaseIdCertCount();
@@ -674,7 +676,7 @@
   interest.setMustBeFresh(true);
 
   OnDataValidated onValidated = bind(&ContactManager::onDnsSelfEndorseCertValidated, this, _1, identityName);
-  OnDataValidationFailed onValidationFailed = bind(&ContactManager::onDnsSelfEndorseCertValidationFailed, this, _1, identityName);
+  OnDataValidationFailed onValidationFailed = bind(&ContactManager::onDnsSelfEndorseCertValidationFailed, this, _1, _2, identityName);
   TimeoutNotify timeoutNotify = bind(&ContactManager::onDnsSelfEndorseCertTimeoutNotify, this, _1, identityName);
 
   sendInterest(interest, onValidated, onValidationFailed, timeoutNotify, 0);
@@ -813,7 +815,7 @@
       interest.setMustBeFresh(true);
       
       OnDataValidated onValidated = bind(&ContactManager::onIdentityCertValidated, this, _1);
-      OnDataValidationFailed onValidationFailed = bind(&ContactManager::onIdentityCertValidationFailed, this, _1);
+      OnDataValidationFailed onValidationFailed = bind(&ContactManager::onIdentityCertValidationFailed, this, _1, _2);
       TimeoutNotify timeoutNotify = bind(&ContactManager::onIdentityCertTimeoutNotify, this, _1);
 
       sendInterest(interest, onValidated, onValidationFailed, timeoutNotify, 0);
diff --git a/src/contact-manager.h b/src/contact-manager.h
index fa28a9e..c370bd7 100644
--- a/src/contact-manager.h
+++ b/src/contact-manager.h
@@ -76,6 +76,7 @@
 
   void
   onDnsSelfEndorseCertValidationFailed(const ndn::shared_ptr<const ndn::Data>& selfEndorseCertificate, 
+                                       const std::string& failInfo,
                                        const ndn::Name& identity);
 
   void
@@ -88,7 +89,8 @@
                                const ndn::Name& identity);
 
   void
-  onDnsCollectEndorseValidationFailed(const ndn::shared_ptr<const ndn::Data>& data, 
+  onDnsCollectEndorseValidationFailed(const ndn::shared_ptr<const ndn::Data>& data,
+                                      const std::string& failInfo,
                                       const ndn::Name& identity);
 
   void
@@ -116,7 +118,8 @@
   onDnsEndorseeValidated(const ndn::shared_ptr<const ndn::Data>& data);
 
   void
-  onDnsEndorseeValidationFailed(const ndn::shared_ptr<const ndn::Data>& data);
+  onDnsEndorseeValidationFailed(const ndn::shared_ptr<const ndn::Data>& data,
+                                const std::string& failInfo);
 
   void
   onDnsEndorseeTimeoutNotify(const ndn::Interest& interest);
@@ -132,7 +135,8 @@
   onIdentityCertValidated(const ndn::shared_ptr<const ndn::Data>& data);
   
   void
-  onIdentityCertValidationFailed(const ndn::shared_ptr<const ndn::Data>& data);
+  onIdentityCertValidationFailed(const ndn::shared_ptr<const ndn::Data>& data,
+                                 const std::string& failInfo);
 
   void
   onIdentityCertTimeoutNotify(const ndn::Interest& interest);
diff --git a/src/digest-tree-scene.cpp b/src/digest-tree-scene.cpp
index 14f95bd..b885714 100644
--- a/src/digest-tree-scene.cpp
+++ b/src/digest-tree-scene.cpp
@@ -38,14 +38,18 @@
   bool rePlot = false; 
   for (int i = 0; i < n; i++) 
   {
-    Roster_iterator it = m_roster.find(v[i].prefix.c_str());
+    QString routablePrefix(v[i].prefix.c_str());
+    QString prefix = trimRoutablePrefix(routablePrefix);
+
+    Roster_iterator it = m_roster.find(prefix);
     if (it == m_roster.end()) 
     {
+      // std::cout << "processUpdate v[" << i << "]: " << prefix.toStdString() << std::endl;
       rePlot = true; 
       DisplayUserPtr p(new DisplayUser());
       time_t tempTime = time(NULL) - FRESHNESS + 1;
       p->setReceived(tempTime);
-      p->setPrefix(v[i].prefix.c_str());
+      p->setPrefix(prefix);
       p->setSeq(v[i].high);
       m_roster.insert(p->getPrefix(), p);
     }
@@ -64,7 +68,10 @@
   {
     for (int i = 0; i < n; i++) 
     {
-      Roster_iterator it = m_roster.find(v[i].prefix.c_str());
+      QString routablePrefix(v[i].prefix.c_str());
+      QString prefix = trimRoutablePrefix(routablePrefix);
+    
+      Roster_iterator it = m_roster.find(prefix);
       if (it != m_roster.end()) {
         DisplayUserPtr p = it.value();
         QGraphicsTextItem *item = p->getSeqTextItem();
@@ -104,17 +111,19 @@
 }
 
 void
-DigestTreeScene::msgReceived(QString prefix, QString nick)
+DigestTreeScene::msgReceived(QString routablePrefix, QString nick)
 {
+  QString prefix = trimRoutablePrefix(routablePrefix);
   Roster_iterator it = m_roster.find(prefix);
+  // std::cout << "msgReceived prefix: " << prefix.toStdString() << std::endl;
   if (it != m_roster.end()) 
     {
-      std::cout << "Updating for prefix = " << prefix.toStdString() << " nick = " << nick.toStdString() << std::endl;
+      // std::cout << "Updating for prefix = " << prefix.toStdString() << " nick = " << nick.toStdString() << std::endl;
       DisplayUserPtr p = it.value();
       p->setReceived(time(NULL));
       if (nick != p->getNick()) 
         {
-          std::cout << "old nick = " << p->getNick().toStdString() << std::endl;
+          // std::cout << "old nick = " << p->getNick().toStdString() << std::endl;
           p->setNick(nick);
           QGraphicsTextItem *nickItem = p->getNickTextItem();
           QGraphicsRectItem *nickRectItem = p->getNickRectItem();
@@ -325,6 +334,33 @@
     seqTextItem->setPos(innerBR.x() + (innerBR.width() - textBR.width())/2, innerBR.y() + (innerBR.height() - textBR.height())/2);
 }
 
+QString 
+DigestTreeScene::trimRoutablePrefix(QString prefix)
+{
+  bool encaped = false;
+  ndn::Name prefixName(prefix.toStdString());
+
+  ndn::Name::const_iterator it  = prefixName.begin();
+  ndn::Name::const_iterator end = prefixName.end();
+  size_t offset = 0;
+
+  for(; it != end; it++, offset++)
+    {
+      if(it->toEscapedString() == "%F0.")
+        {
+          encaped = true;
+          break;
+        }
+    }
+
+  if(!encaped)
+    return prefix;
+  else
+    {
+      return QString(prefixName.getSubName(offset+1).toUri().c_str());
+    }
+}
+
 #if WAF
 #include "digest-tree-scene.moc"
 #include "digest-tree-scene.cpp.moc"
diff --git a/src/digest-tree-scene.h b/src/digest-tree-scene.h
index 6ac6b1c..bab1139 100644
--- a/src/digest-tree-scene.h
+++ b/src/digest-tree-scene.h
@@ -65,6 +65,8 @@
   void plotNode(const std::vector<TreeLayout::Coordinate> &v, QString digest, int nodeSize);
   void reDrawNode(DisplayUserPtr p, QColor rimColor);
 
+  QString trimRoutablePrefix(QString prefix);
+
 private:
   Roster m_roster;
   QGraphicsTextItem *m_rootDigest;