File name format change and Removed warning messages (Except warning from boost for Logging)

Change-Id: If3a3a5411d377d925527fc3e8809c228a9a81e26
diff --git a/src/lsdb.cpp b/src/lsdb.cpp
new file mode 100644
index 0000000..de65646
--- /dev/null
+++ b/src/lsdb.cpp
@@ -0,0 +1,750 @@
+#include <string>
+#include <utility>
+#include "lsdb.hpp"
+#include "nlsr.hpp"
+
+namespace nlsr {
+
+using namespace std;
+
+void
+Lsdb::cancelScheduleLsaExpiringEvent(Nlsr& pnlsr, EventId eid)
+{
+  pnlsr.getScheduler().cancelEvent(eid);
+}
+
+static bool
+nameLsaCompareByKey(NameLsa& nlsa1, string& key)
+{
+  return nlsa1.getKey() == key;
+}
+
+
+bool
+Lsdb::buildAndInstallOwnNameLsa(Nlsr& pnlsr)
+{
+  NameLsa nameLsa(pnlsr.getConfParameter().getRouterPrefix()
+                  , 1
+                  , pnlsr.getSm().getNameLsaSeq() + 1
+                  , pnlsr.getConfParameter().getRouterDeadInterval()
+                  , pnlsr.getNpl());
+  pnlsr.getSm().setNameLsaSeq(pnlsr.getSm().getNameLsaSeq() + 1);
+  return installNameLsa(pnlsr, nameLsa);
+}
+
+std::pair<NameLsa&, bool>
+Lsdb::getNameLsa(string key)
+{
+  std::list<NameLsa>::iterator it = std::find_if(m_nameLsdb.begin(),
+                                                 m_nameLsdb.end(),
+                                                 bind(nameLsaCompareByKey, _1, key));
+  if (it != m_nameLsdb.end())
+  {
+    return std::make_pair(boost::ref((*it)), true);
+  }
+  NameLsa nlsa;
+  return std::make_pair(boost::ref(nlsa), false);
+}
+
+bool
+Lsdb::isNameLsaNew(string key, uint64_t seqNo)
+{
+  std::pair<NameLsa&, bool>  nameLsaCheck = getNameLsa(key);
+  if (nameLsaCheck.second)
+  {
+    if (nameLsaCheck.first.getLsSeqNo() < seqNo)
+    {
+      return true;
+    }
+    else
+    {
+      return false;
+    }
+  }
+  return true;
+}
+
+ndn::EventId
+Lsdb::scheduleNameLsaExpiration(Nlsr& pnlsr, string key, int seqNo, int expTime)
+{
+  return pnlsr.getScheduler().scheduleEvent(ndn::time::seconds(expTime),
+                                            ndn::bind(&Lsdb::exprireOrRefreshNameLsa,
+                                                      this, boost::ref(pnlsr), key, seqNo));
+}
+
+bool
+Lsdb::installNameLsa(Nlsr& pnlsr, NameLsa& nlsa)
+{
+  int timeToExpire = m_lsaRefreshTime;
+  std::pair<NameLsa&, bool> chkNameLsa = getNameLsa(nlsa.getKey());
+  if (!chkNameLsa.second)
+  {
+    addNameLsa(nlsa);
+    nlsa.writeLog();
+    printNameLsdb();
+    if (nlsa.getOrigRouter() != pnlsr.getConfParameter().getRouterPrefix())
+    {
+      pnlsr.getNpt().addNpteByDestName(nlsa.getOrigRouter(), nlsa.getOrigRouter(),
+                                       pnlsr);
+      std::list<string> nameList = nlsa.getNpl().getNameList();
+      for (std::list<string>::iterator it = nameList.begin(); it != nameList.end();
+           it++)
+      {
+        if ((*it) != pnlsr.getConfParameter().getRouterPrefix())
+        {
+          pnlsr.getNpt().addNpteByDestName((*it), nlsa.getOrigRouter(), pnlsr);
+        }
+      }
+    }
+    if (nlsa.getOrigRouter() != pnlsr.getConfParameter().getRouterPrefix())
+    {
+      timeToExpire = nlsa.getLifeTime();
+    }
+    nlsa.setExpiringEventId(scheduleNameLsaExpiration(pnlsr,
+                                                      nlsa.getKey(),
+                                                      nlsa.getLsSeqNo(),
+                                                      timeToExpire));
+  }
+  else
+  {
+    if (chkNameLsa.first.getLsSeqNo() < nlsa.getLsSeqNo())
+    {
+      chkNameLsa.first.writeLog();
+      chkNameLsa.first.setLsSeqNo(nlsa.getLsSeqNo());
+      chkNameLsa.first.setLifeTime(nlsa.getLifeTime());
+      chkNameLsa.first.getNpl().sort();
+      nlsa.getNpl().sort();
+      std::list<string> nameToAdd;
+      std::set_difference(nlsa.getNpl().getNameList().begin(),
+                          nlsa.getNpl().getNameList().end(),
+                          chkNameLsa.first.getNpl().getNameList().begin(),
+                          chkNameLsa.first.getNpl().getNameList().end(),
+                          std::inserter(nameToAdd, nameToAdd.begin()));
+      for (std::list<string>::iterator it = nameToAdd.begin(); it != nameToAdd.end();
+           ++it)
+      {
+        chkNameLsa.first.addName((*it));
+        if (nlsa.getOrigRouter() != pnlsr.getConfParameter().getRouterPrefix())
+        {
+          if ((*it) != pnlsr.getConfParameter().getRouterPrefix())
+          {
+            pnlsr.getNpt().addNpteByDestName((*it), nlsa.getOrigRouter(), pnlsr);
+          }
+        }
+      }
+      std::list<string> nameToRemove;
+      std::set_difference(chkNameLsa.first.getNpl().getNameList().begin(),
+                          chkNameLsa.first.getNpl().getNameList().end(),
+                          nlsa.getNpl().getNameList().begin(),
+                          nlsa.getNpl().getNameList().end(),
+                          std::inserter(nameToRemove, nameToRemove.begin()));
+      for (std::list<string>::iterator it = nameToRemove.begin();
+           it != nameToRemove.end(); ++it)
+      {
+        chkNameLsa.first.removeName((*it));
+        if (nlsa.getOrigRouter() != pnlsr.getConfParameter().getRouterPrefix())
+        {
+          if ((*it) != pnlsr.getConfParameter().getRouterPrefix())
+          {
+            pnlsr.getNpt().removeNpte((*it), nlsa.getOrigRouter(), pnlsr);
+          }
+        }
+      }
+      if (nlsa.getOrigRouter() != pnlsr.getConfParameter().getRouterPrefix())
+      {
+        timeToExpire = nlsa.getLifeTime();
+      }
+      cancelScheduleLsaExpiringEvent(pnlsr,
+                                     chkNameLsa.first.getExpiringEventId());
+      chkNameLsa.first.setExpiringEventId(scheduleNameLsaExpiration(pnlsr,
+                                                                    nlsa.getKey(),
+                                                                    nlsa.getLsSeqNo(),
+                                                                    timeToExpire));
+      chkNameLsa.first.writeLog();
+    }
+  }
+  return true;
+}
+
+bool
+Lsdb::addNameLsa(NameLsa& nlsa)
+{
+  std::list<NameLsa>::iterator it = std::find_if(m_nameLsdb.begin(),
+                                                 m_nameLsdb.end(),
+                                                 bind(nameLsaCompareByKey, _1,
+                                                      nlsa.getKey()));
+  if (it == m_nameLsdb.end())
+  {
+    m_nameLsdb.push_back(nlsa);
+    return true;
+  }
+  return false;
+}
+
+bool
+Lsdb::removeNameLsa(Nlsr& pnlsr, string& key)
+{
+  std::list<NameLsa>::iterator it = std::find_if(m_nameLsdb.begin(),
+                                                 m_nameLsdb.end(),
+                                                 bind(nameLsaCompareByKey, _1, key));
+  if (it != m_nameLsdb.end())
+  {
+    (*it).writeLog();
+    if ((*it).getOrigRouter() != pnlsr.getConfParameter().getRouterPrefix())
+    {
+      pnlsr.getNpt().removeNpte((*it).getOrigRouter(), (*it).getOrigRouter(), pnlsr);
+      for (std::list<string>::iterator nit = (*it).getNpl().getNameList().begin();
+           nit != (*it).getNpl().getNameList().end(); ++nit)
+      {
+        if ((*nit) != pnlsr.getConfParameter().getRouterPrefix())
+        {
+          pnlsr.getNpt().removeNpte((*nit), (*it).getOrigRouter(), pnlsr);
+        }
+      }
+    }
+    m_nameLsdb.erase(it);
+    return true;
+  }
+  return false;
+}
+
+bool
+Lsdb::doesNameLsaExist(string key)
+{
+  std::list<NameLsa>::iterator it = std::find_if(m_nameLsdb.begin(),
+                                                 m_nameLsdb.end(),
+                                                 bind(nameLsaCompareByKey, _1, key));
+  if (it == m_nameLsdb.end())
+  {
+    return false;
+  }
+  return true;
+}
+
+void
+Lsdb::printNameLsdb()
+{
+  cout << "---------------Name LSDB-------------------" << endl;
+  for (std::list<NameLsa>::iterator it = m_nameLsdb.begin();
+       it != m_nameLsdb.end() ; it++)
+  {
+    cout << (*it) << endl;
+  }
+}
+
+// Cor LSA and LSDB related Functions start here
+
+
+static bool
+corLsaCompareByKey(CorLsa& clsa, string& key)
+{
+  return clsa.getKey() == key;
+}
+
+bool
+Lsdb::buildAndInstallOwnCorLsa(Nlsr& pnlsr)
+{
+  CorLsa corLsa(pnlsr.getConfParameter().getRouterPrefix()
+                , 3
+                , pnlsr.getSm().getCorLsaSeq() + 1
+                , pnlsr.getConfParameter().getRouterDeadInterval()
+                , pnlsr.getConfParameter().getCorR()
+                , pnlsr.getConfParameter().getCorTheta());
+  pnlsr.getSm().setCorLsaSeq(pnlsr.getSm().getCorLsaSeq() + 1);
+  installCorLsa(pnlsr, corLsa);
+  return true;
+}
+
+std::pair<CorLsa&, bool>
+Lsdb::getCorLsa(string key)
+{
+  std::list<CorLsa>::iterator it = std::find_if(m_corLsdb.begin(),
+                                                m_corLsdb.end(),
+                                                bind(corLsaCompareByKey, _1, key));
+  if (it != m_corLsdb.end())
+  {
+    return std::make_pair(boost::ref((*it)), true);
+  }
+  CorLsa clsa;
+  return std::make_pair(boost::ref(clsa), false);
+}
+
+bool
+Lsdb::isCorLsaNew(string key, uint64_t seqNo)
+{
+  std::pair<CorLsa&, bool>  corLsaCheck = getCorLsa(key);
+  if (corLsaCheck.second)
+  {
+    if (corLsaCheck.first.getLsSeqNo() < seqNo)
+    {
+      return true;
+    }
+    else
+    {
+      return false;
+    }
+  }
+  return true;
+}
+
+ndn::EventId
+Lsdb::scheduleCorLsaExpiration(Nlsr& pnlsr, string key, int seqNo, int expTime)
+{
+  return pnlsr.getScheduler().scheduleEvent(ndn::time::seconds(expTime),
+                                            ndn::bind(&Lsdb::exprireOrRefreshCorLsa,
+                                                      this, boost::ref(pnlsr),
+                                                      key, seqNo));
+}
+
+bool
+Lsdb::installCorLsa(Nlsr& pnlsr, CorLsa& clsa)
+{
+  int timeToExpire = m_lsaRefreshTime;
+  std::pair<CorLsa&, bool> chkCorLsa = getCorLsa(clsa.getKey());
+  if (!chkCorLsa.second)
+  {
+    addCorLsa(clsa);
+    printCorLsdb(); //debugging purpose
+    if (clsa.getOrigRouter() != pnlsr.getConfParameter().getRouterPrefix())
+    {
+      pnlsr.getNpt().addNpteByDestName(clsa.getOrigRouter(), clsa.getOrigRouter(),
+                                       pnlsr);
+    }
+    if (pnlsr.getConfParameter().getIsHyperbolicCalc() >= 1)
+    {
+      pnlsr.getRoutingTable().scheduleRoutingTableCalculation(pnlsr);
+    }
+    if (clsa.getOrigRouter() != pnlsr.getConfParameter().getRouterPrefix())
+    {
+      timeToExpire = clsa.getLifeTime();
+    }
+    scheduleCorLsaExpiration(pnlsr, clsa.getKey(),
+                             clsa.getLsSeqNo(), timeToExpire);
+  }
+  else
+  {
+    if (chkCorLsa.first.getLsSeqNo() < clsa.getLsSeqNo())
+    {
+      chkCorLsa.first.setLsSeqNo(clsa.getLsSeqNo());
+      chkCorLsa.first.setLifeTime(clsa.getLifeTime());
+      if (!chkCorLsa.first.isEqual(clsa))
+      {
+        chkCorLsa.first.setCorRadius(clsa.getCorRadius());
+        chkCorLsa.first.setCorTheta(clsa.getCorTheta());
+        if (pnlsr.getConfParameter().getIsHyperbolicCalc() >= 1)
+        {
+          pnlsr.getRoutingTable().scheduleRoutingTableCalculation(pnlsr);
+        }
+      }
+      if (clsa.getOrigRouter() != pnlsr.getConfParameter().getRouterPrefix())
+      {
+        timeToExpire = clsa.getLifeTime();
+      }
+      cancelScheduleLsaExpiringEvent(pnlsr,
+                                     chkCorLsa.first.getExpiringEventId());
+      chkCorLsa.first.setExpiringEventId(scheduleCorLsaExpiration(pnlsr,
+                                                                  clsa.getKey(),
+                                                                  clsa.getLsSeqNo(),
+                                                                  timeToExpire));
+    }
+  }
+  return true;
+}
+
+bool
+Lsdb::addCorLsa(CorLsa& clsa)
+{
+  std::list<CorLsa>::iterator it = std::find_if(m_corLsdb.begin(),
+                                                m_corLsdb.end(),
+                                                bind(corLsaCompareByKey, _1,
+                                                     clsa.getKey()));
+  if (it == m_corLsdb.end())
+  {
+    m_corLsdb.push_back(clsa);
+    return true;
+  }
+  return false;
+}
+
+bool
+Lsdb::removeCorLsa(Nlsr& pnlsr, string& key)
+{
+  std::list<CorLsa>::iterator it = std::find_if(m_corLsdb.begin(),
+                                                m_corLsdb.end(),
+                                                bind(corLsaCompareByKey, _1, key));
+  if (it != m_corLsdb.end())
+  {
+    if ((*it).getOrigRouter() != pnlsr.getConfParameter().getRouterPrefix())
+    {
+      pnlsr.getNpt().removeNpte((*it).getOrigRouter(), (*it).getOrigRouter(), pnlsr);
+    }
+    m_corLsdb.erase(it);
+    return true;
+  }
+  return false;
+}
+
+bool
+Lsdb::doesCorLsaExist(string key)
+{
+  std::list<CorLsa>::iterator it = std::find_if(m_corLsdb.begin(),
+                                                m_corLsdb.end(),
+                                                bind(corLsaCompareByKey, _1, key));
+  if (it == m_corLsdb.end())
+  {
+    return false;
+  }
+  return true;
+}
+
+void
+Lsdb::printCorLsdb() //debugging
+{
+  cout << "---------------Cor LSDB-------------------" << endl;
+  for (std::list<CorLsa>::iterator it = m_corLsdb.begin();
+       it != m_corLsdb.end() ; it++)
+  {
+    cout << (*it) << endl;
+  }
+}
+
+
+// Adj LSA and LSDB related function starts here
+
+static bool
+adjLsaCompareByKey(AdjLsa& alsa, string& key)
+{
+  return alsa.getKey() == key;
+}
+
+
+void
+Lsdb::scheduledAdjLsaBuild(Nlsr& pnlsr)
+{
+  cout << "scheduledAdjLsaBuild Called" << endl;
+  pnlsr.setIsBuildAdjLsaSheduled(0);
+  if (pnlsr.getAdl().isAdjLsaBuildable(pnlsr))
+  {
+    int adjBuildCount = pnlsr.getAdjBuildCount();
+    if (adjBuildCount > 0)
+    {
+      if (pnlsr.getAdl().getNumOfActiveNeighbor() > 0)
+      {
+        buildAndInstallOwnAdjLsa(pnlsr);
+      }
+      else
+      {
+        string key = pnlsr.getConfParameter().getRouterPrefix() + "/2";
+        removeAdjLsa(pnlsr, key);
+        pnlsr.getRoutingTable().scheduleRoutingTableCalculation(pnlsr);
+      }
+      pnlsr.setAdjBuildCount(pnlsr.getAdjBuildCount() - adjBuildCount);
+    }
+  }
+  else
+  {
+    pnlsr.setIsBuildAdjLsaSheduled(1);
+    int schedulingTime = pnlsr.getConfParameter().getInterestRetryNumber() *
+                         pnlsr.getConfParameter().getInterestResendTime();
+    pnlsr.getScheduler().scheduleEvent(ndn::time::seconds(schedulingTime),
+                                       ndn::bind(&Lsdb::scheduledAdjLsaBuild,
+                                                 pnlsr.getLsdb(), boost::ref(pnlsr)));
+  }
+}
+
+
+bool
+Lsdb::addAdjLsa(AdjLsa& alsa)
+{
+  std::list<AdjLsa>::iterator it = std::find_if(m_adjLsdb.begin(),
+                                                m_adjLsdb.end(),
+                                                bind(adjLsaCompareByKey, _1,
+                                                     alsa.getKey()));
+  if (it == m_adjLsdb.end())
+  {
+    m_adjLsdb.push_back(alsa);
+    return true;
+  }
+  return false;
+}
+
+std::pair<AdjLsa&, bool>
+Lsdb::getAdjLsa(string key)
+{
+  std::list<AdjLsa>::iterator it = std::find_if(m_adjLsdb.begin(),
+                                                m_adjLsdb.end(),
+                                                bind(adjLsaCompareByKey, _1, key));
+  if (it != m_adjLsdb.end())
+  {
+    return std::make_pair(boost::ref((*it)), true);
+  }
+  AdjLsa alsa;
+  return std::make_pair(boost::ref(alsa), false);
+}
+
+
+bool
+Lsdb::isAdjLsaNew(string key, uint64_t seqNo)
+{
+  std::pair<AdjLsa&, bool>  adjLsaCheck = getAdjLsa(key);
+  if (adjLsaCheck.second)
+  {
+    if (adjLsaCheck.first.getLsSeqNo() < seqNo)
+    {
+      return true;
+    }
+    else
+    {
+      return false;
+    }
+  }
+  return true;
+}
+
+
+ndn::EventId
+Lsdb::scheduleAdjLsaExpiration(Nlsr& pnlsr, string key, int seqNo, int expTime)
+{
+  return pnlsr.getScheduler().scheduleEvent(ndn::time::seconds(expTime),
+                                            ndn::bind(&Lsdb::exprireOrRefreshAdjLsa,
+                                                      this, boost::ref(pnlsr),
+                                                      key, seqNo));
+}
+
+bool
+Lsdb::installAdjLsa(Nlsr& pnlsr, AdjLsa& alsa)
+{
+  int timeToExpire = m_lsaRefreshTime;
+  std::pair<AdjLsa&, bool> chkAdjLsa = getAdjLsa(alsa.getKey());
+  if (!chkAdjLsa.second)
+  {
+    addAdjLsa(alsa);
+    alsa.addNptEntries(pnlsr);
+    pnlsr.getRoutingTable().scheduleRoutingTableCalculation(pnlsr);
+    if (alsa.getOrigRouter() != pnlsr.getConfParameter().getRouterPrefix())
+    {
+      timeToExpire = alsa.getLifeTime();
+    }
+    scheduleAdjLsaExpiration(pnlsr, alsa.getKey(),
+                             alsa.getLsSeqNo(), timeToExpire);
+  }
+  else
+  {
+    if (chkAdjLsa.first.getLsSeqNo() < alsa.getLsSeqNo())
+    {
+      chkAdjLsa.first.setLsSeqNo(alsa.getLsSeqNo());
+      chkAdjLsa.first.setLifeTime(alsa.getLifeTime());
+      if (!chkAdjLsa.first.isEqual(alsa))
+      {
+        chkAdjLsa.first.getAdl().reset();
+        chkAdjLsa.first.getAdl().addAdjacentsFromAdl(alsa.getAdl());
+        pnlsr.getRoutingTable().scheduleRoutingTableCalculation(pnlsr);
+      }
+      if (alsa.getOrigRouter() != pnlsr.getConfParameter().getRouterPrefix())
+      {
+        timeToExpire = alsa.getLifeTime();
+      }
+      cancelScheduleLsaExpiringEvent(pnlsr,
+                                     chkAdjLsa.first.getExpiringEventId());
+      chkAdjLsa.first.setExpiringEventId(scheduleAdjLsaExpiration(pnlsr,
+                                                                  alsa.getKey(),
+                                                                  alsa.getLsSeqNo(),
+                                                                  timeToExpire));
+    }
+  }
+  return true;
+}
+
+bool
+Lsdb::buildAndInstallOwnAdjLsa(Nlsr& pnlsr)
+{
+  AdjLsa adjLsa(pnlsr.getConfParameter().getRouterPrefix()
+                , 2
+                , pnlsr.getSm().getAdjLsaSeq() + 1
+                , pnlsr.getConfParameter().getRouterDeadInterval()
+                , pnlsr.getAdl().getNumOfActiveNeighbor()
+                , pnlsr.getAdl());
+  pnlsr.getSm().setAdjLsaSeq(pnlsr.getSm().getAdjLsaSeq() + 1);
+  string lsaPrefix = pnlsr.getConfParameter().getChronosyncLsaPrefix()
+                     + pnlsr.getConfParameter().getRouterPrefix();
+  pnlsr.getSlh().publishRoutingUpdate(pnlsr.getSm(), lsaPrefix);
+  return pnlsr.getLsdb().installAdjLsa(pnlsr, adjLsa);
+}
+
+bool
+Lsdb::removeAdjLsa(Nlsr& pnlsr, string& key)
+{
+  std::list<AdjLsa>::iterator it = std::find_if(m_adjLsdb.begin(),
+                                                m_adjLsdb.end(),
+                                                bind(adjLsaCompareByKey, _1, key));
+  if (it != m_adjLsdb.end())
+  {
+    (*it).removeNptEntries(pnlsr);
+    m_adjLsdb.erase(it);
+    return true;
+  }
+  return false;
+}
+
+bool
+Lsdb::doesAdjLsaExist(string key)
+{
+  std::list<AdjLsa>::iterator it = std::find_if(m_adjLsdb.begin(),
+                                                m_adjLsdb.end(),
+                                                bind(adjLsaCompareByKey, _1, key));
+  if (it == m_adjLsdb.end())
+  {
+    return false;
+  }
+  return true;
+}
+
+std::list<AdjLsa>&
+Lsdb::getAdjLsdb()
+{
+  return m_adjLsdb;
+}
+
+void
+Lsdb::setLsaRefreshTime(int lrt)
+{
+  m_lsaRefreshTime = lrt;
+}
+
+void
+Lsdb::setThisRouterPrefix(string trp)
+{
+  m_thisRouterPrefix = trp;
+}
+
+void
+Lsdb::exprireOrRefreshNameLsa(Nlsr& pnlsr, string lsaKey, uint64_t seqNo)
+{
+  cout << "Lsdb::exprireOrRefreshNameLsa Called " << endl;
+  cout << "LSA Key : " << lsaKey << " Seq No: " << seqNo << endl;
+  std::pair<NameLsa&, bool> chkNameLsa = getNameLsa(lsaKey);
+  if (chkNameLsa.second)
+  {
+    cout << " LSA Exists with seq no: " << chkNameLsa.first.getLsSeqNo() << endl;
+    if (chkNameLsa.first.getLsSeqNo() == seqNo)
+    {
+      if (chkNameLsa.first.getOrigRouter() == m_thisRouterPrefix)
+      {
+        chkNameLsa.first.writeLog();
+        cout << "Own Name LSA, so refreshing name LSA" << endl;
+        chkNameLsa.first.setLsSeqNo(chkNameLsa.first.getLsSeqNo() + 1);
+        pnlsr.getSm().setNameLsaSeq(chkNameLsa.first.getLsSeqNo());
+        chkNameLsa.first.writeLog();
+        // publish routing update
+        string lsaPrefix = pnlsr.getConfParameter().getChronosyncLsaPrefix()
+                           + pnlsr.getConfParameter().getRouterPrefix();
+        pnlsr.getSlh().publishRoutingUpdate(pnlsr.getSm(), lsaPrefix);
+      }
+      else
+      {
+        cout << "Other's Name LSA, so removing form LSDB" << endl;
+        removeNameLsa(pnlsr, lsaKey);
+      }
+    }
+  }
+}
+
+void
+Lsdb::exprireOrRefreshAdjLsa(Nlsr& pnlsr, string lsaKey, uint64_t seqNo)
+{
+  cout << "Lsdb::exprireOrRefreshAdjLsa Called " << endl;
+  cout << "LSA Key : " << lsaKey << " Seq No: " << seqNo << endl;
+  std::pair<AdjLsa&, bool> chkAdjLsa = getAdjLsa(lsaKey);
+  if (chkAdjLsa.second)
+  {
+    cout << " LSA Exists with seq no: " << chkAdjLsa.first.getLsSeqNo() << endl;
+    if (chkAdjLsa.first.getLsSeqNo() == seqNo)
+    {
+      if (chkAdjLsa.first.getOrigRouter() == m_thisRouterPrefix)
+      {
+        cout << "Own Adj LSA, so refreshing Adj LSA" << endl;
+        chkAdjLsa.first.setLsSeqNo(chkAdjLsa.first.getLsSeqNo() + 1);
+        pnlsr.getSm().setAdjLsaSeq(chkAdjLsa.first.getLsSeqNo());
+        // publish routing update
+        string lsaPrefix = pnlsr.getConfParameter().getChronosyncLsaPrefix()
+                           + pnlsr.getConfParameter().getRouterPrefix();
+        pnlsr.getSlh().publishRoutingUpdate(pnlsr.getSm(), lsaPrefix);
+      }
+      else
+      {
+        cout << "Other's Adj LSA, so removing form LSDB" << endl;
+        removeAdjLsa(pnlsr, lsaKey);
+      }
+      // schedule Routing table calculaiton
+      pnlsr.getRoutingTable().scheduleRoutingTableCalculation(pnlsr);
+    }
+  }
+}
+
+void
+Lsdb::exprireOrRefreshCorLsa(Nlsr& pnlsr, string lsaKey, uint64_t seqNo)
+{
+  cout << "Lsdb::exprireOrRefreshCorLsa Called " << endl;
+  cout << "LSA Key : " << lsaKey << " Seq No: " << seqNo << endl;
+  std::pair<CorLsa&, bool> chkCorLsa = getCorLsa(lsaKey);
+  if (chkCorLsa.second)
+  {
+    cout << " LSA Exists with seq no: " << chkCorLsa.first.getLsSeqNo() << endl;
+    if (chkCorLsa.first.getLsSeqNo() == seqNo)
+    {
+      if (chkCorLsa.first.getOrigRouter() == m_thisRouterPrefix)
+      {
+        cout << "Own Cor LSA, so refreshing Cor LSA" << endl;
+        chkCorLsa.first.setLsSeqNo(chkCorLsa.first.getLsSeqNo() + 1);
+        pnlsr.getSm().setCorLsaSeq(chkCorLsa.first.getLsSeqNo());
+        // publish routing update
+        string lsaPrefix = pnlsr.getConfParameter().getChronosyncLsaPrefix()
+                           + pnlsr.getConfParameter().getRouterPrefix();
+        pnlsr.getSlh().publishRoutingUpdate(pnlsr.getSm(), lsaPrefix);
+      }
+      else
+      {
+        cout << "Other's Cor LSA, so removing form LSDB" << endl;
+        removeCorLsa(pnlsr, lsaKey);
+      }
+      if (pnlsr.getConfParameter().getIsHyperbolicCalc() >= 1)
+      {
+        pnlsr.getRoutingTable().scheduleRoutingTableCalculation(pnlsr);
+      }
+    }
+  }
+}
+
+
+void
+Lsdb::printAdjLsdb()
+{
+  cout << "---------------Adj LSDB-------------------" << endl;
+  for (std::list<AdjLsa>::iterator it = m_adjLsdb.begin();
+       it != m_adjLsdb.end() ; it++)
+  {
+    cout << (*it) << endl;
+  }
+}
+
+//-----utility function -----
+bool
+Lsdb::doesLsaExist(string key, int lsType)
+{
+  if (lsType == 1)
+  {
+    return doesNameLsaExist(key);
+  }
+  else if (lsType == 2)
+  {
+    return doesAdjLsaExist(key);
+  }
+  else if (lsType == 3)
+  {
+    return doesCorLsaExist(key);
+  }
+  return false;
+}
+
+}//namespace nlsr
+