File name format change and Removed warning messages (Except warning from boost for Logging)
Change-Id: If3a3a5411d377d925527fc3e8809c228a9a81e26
diff --git a/src/lsa.cpp b/src/lsa.cpp
new file mode 100644
index 0000000..0bd450c
--- /dev/null
+++ b/src/lsa.cpp
@@ -0,0 +1,330 @@
+#include <string>
+#include <iostream>
+#include <sstream>
+#include <algorithm>
+#include <cmath>
+#include <limits>
+
+#include "nlsr.hpp"
+#include "lsa.hpp"
+#include "npl.hpp"
+#include "adjacent.hpp"
+#include "utility/tokenizer.hpp"
+
+
+namespace nlsr {
+
+using namespace std;
+
+
+string
+NameLsa::getKey()
+{
+ string key;
+ key = m_origRouter + "/" + boost::lexical_cast<std::string>(1);
+ return key;
+}
+
+NameLsa::NameLsa(string origR, uint8_t lst, uint32_t lsn, uint32_t lt, Npl npl)
+{
+ m_origRouter = origR;
+ m_lsType = lst;
+ m_lsSeqNo = lsn;
+ m_lifeTime = lt;
+ std::list<string> nl = npl.getNameList();
+ for (std::list<string>::iterator it = nl.begin(); it != nl.end(); it++)
+ {
+ addName((*it));
+ }
+}
+
+string
+NameLsa::getData()
+{
+ string nameLsaData;
+ nameLsaData = m_origRouter + "|" + boost::lexical_cast<std::string>(1) + "|"
+ + boost::lexical_cast<std::string>(m_lsSeqNo) + "|"
+ + boost::lexical_cast<std::string>(m_lifeTime);
+ nameLsaData += "|";
+ nameLsaData += boost::lexical_cast<std::string>(m_npl.getSize());
+ std::list<string> nl = m_npl.getNameList();
+ for (std::list<string>::iterator it = nl.begin(); it != nl.end(); it++)
+ {
+ nameLsaData += "|";
+ nameLsaData += (*it);
+ }
+ return nameLsaData + "|";
+}
+
+bool
+NameLsa::initializeFromContent(string content)
+{
+ uint32_t numName = 0;
+ Tokenizer nt(content, "|");
+ m_origRouter = nt.getNextToken();
+ if (m_origRouter.empty())
+ {
+ return false;
+ }
+ try
+ {
+ m_lsType = boost::lexical_cast<uint8_t>(nt.getNextToken());
+ m_lsSeqNo = boost::lexical_cast<uint32_t>(nt.getNextToken());
+ m_lifeTime = boost::lexical_cast<uint32_t>(nt.getNextToken());
+ numName = boost::lexical_cast<uint32_t>(nt.getNextToken());
+ }
+ catch (std::exception& e)
+ {
+ return false;
+ }
+ for (uint32_t i = 0; i < numName; i++)
+ {
+ string name = nt.getNextToken();
+ addName(name);
+ }
+ return true;
+}
+
+void
+NameLsa::writeLog()
+{
+}
+
+std::ostream&
+operator<<(std::ostream& os, NameLsa& nLsa)
+{
+ os << "Name Lsa: " << endl;
+ os << " Origination Router: " << nLsa.getOrigRouter() << endl;
+ os << " Ls Type: " << (unsigned short)nLsa.getLsType() << endl;
+ os << " Ls Seq No: " << (unsigned int)nLsa.getLsSeqNo() << endl;
+ os << " Ls Lifetime: " << (unsigned int)nLsa.getLifeTime() << endl;
+ os << " Names: " << endl;
+ int i = 1;
+ std::list<string> nl = nLsa.getNpl().getNameList();
+ for (std::list<string>::iterator it = nl.begin(); it != nl.end(); it++)
+ {
+ os << " Name " << i << ": " << (*it) << endl;
+ }
+ return os;
+}
+
+
+
+CorLsa::CorLsa(string origR, uint8_t lst, uint32_t lsn, uint32_t lt
+ , double r, double theta)
+{
+ m_origRouter = origR;
+ m_lsType = lst;
+ m_lsSeqNo = lsn;
+ m_lifeTime = lt;
+ m_corRad = r;
+ m_corTheta = theta;
+}
+
+string
+CorLsa::getKey()
+{
+ string key;
+ key = m_origRouter + "/" + boost::lexical_cast<std::string>(3);
+ return key;
+}
+
+bool
+CorLsa::isEqual(CorLsa& clsa)
+{
+ return (std::abs(m_corRad - clsa.getCorRadius()) <
+ std::numeric_limits<double>::epsilon()) &&
+ (std::abs(m_corTheta - clsa.getCorTheta()) <
+ std::numeric_limits<double>::epsilon());
+}
+
+string
+CorLsa::getData()
+{
+ string corLsaData;
+ corLsaData = m_origRouter + "|";
+ corLsaData += (boost::lexical_cast<std::string>(3) + "|");
+ corLsaData += (boost::lexical_cast<std::string>(m_lsSeqNo) + "|");
+ corLsaData += (boost::lexical_cast<std::string>(m_lifeTime) + "|");
+ corLsaData += (boost::lexical_cast<std::string>(m_corRad) + "|");
+ corLsaData += (boost::lexical_cast<std::string>(m_corTheta) + "|");
+ return corLsaData;
+}
+
+bool
+CorLsa::initializeFromContent(string content)
+{
+ Tokenizer nt(content, "|");
+ m_origRouter = nt.getNextToken();
+ if (m_origRouter.empty())
+ {
+ return false;
+ }
+ try
+ {
+ m_lsType = boost::lexical_cast<uint8_t>(nt.getNextToken());
+ m_lsSeqNo = boost::lexical_cast<uint32_t>(nt.getNextToken());
+ m_lifeTime = boost::lexical_cast<uint32_t>(nt.getNextToken());
+ m_corRad = boost::lexical_cast<double>(nt.getNextToken());
+ m_corTheta = boost::lexical_cast<double>(nt.getNextToken());
+ }
+ catch (std::exception& e)
+ {
+ return false;
+ }
+ return true;
+}
+
+std::ostream&
+operator<<(std::ostream& os, CorLsa& cLsa)
+{
+ os << "Cor Lsa: " << endl;
+ os << " Origination Router: " << cLsa.getOrigRouter() << endl;
+ os << " Ls Type: " << (unsigned short)cLsa.getLsType() << endl;
+ os << " Ls Seq No: " << (unsigned int)cLsa.getLsSeqNo() << endl;
+ os << " Ls Lifetime: " << (unsigned int)cLsa.getLifeTime() << endl;
+ os << " Hyperbolic Radius: " << cLsa.getCorRadius() << endl;
+ os << " Hyperbolic Theta: " << cLsa.getCorTheta() << endl;
+ return os;
+}
+
+
+AdjLsa::AdjLsa(string origR, uint8_t lst, uint32_t lsn, uint32_t lt,
+ uint32_t nl , Adl padl)
+{
+ m_origRouter = origR;
+ m_lsType = lst;
+ m_lsSeqNo = lsn;
+ m_lifeTime = lt;
+ m_noLink = nl;
+ std::list<Adjacent> al = padl.getAdjList();
+ for (std::list<Adjacent>::iterator it = al.begin(); it != al.end(); it++)
+ {
+ if ((*it).getStatus() == 1)
+ {
+ addAdjacent((*it));
+ }
+ }
+}
+
+string
+AdjLsa::getKey()
+{
+ string key;
+ key = m_origRouter + "/" + boost::lexical_cast<std::string>(2);
+ return key;
+}
+
+bool
+AdjLsa::isEqual(AdjLsa& alsa)
+{
+ return m_adl.isEqual(alsa.getAdl());
+}
+
+
+string
+AdjLsa::getData()
+{
+ string adjLsaData;
+ adjLsaData = m_origRouter + "|" + boost::lexical_cast<std::string>(2) + "|"
+ + boost::lexical_cast<std::string>(m_lsSeqNo) + "|"
+ + boost::lexical_cast<std::string>(m_lifeTime);
+ adjLsaData += "|";
+ adjLsaData += boost::lexical_cast<std::string>(m_adl.getSize());
+ std::list<Adjacent> al = m_adl.getAdjList();
+ for (std::list<Adjacent>::iterator it = al.begin(); it != al.end(); it++)
+ {
+ adjLsaData += "|";
+ adjLsaData += (*it).getName();
+ adjLsaData += "|";
+ adjLsaData += boost::lexical_cast<std::string>((*it).getConnectingFace());
+ adjLsaData += "|";
+ adjLsaData += boost::lexical_cast<std::string>((*it).getLinkCost());
+ }
+ return adjLsaData + "|";
+}
+
+bool
+AdjLsa::initializeFromContent(string content)
+{
+ uint32_t numLink = 0;
+ Tokenizer nt(content, "|");
+ m_origRouter = nt.getNextToken();
+ if (m_origRouter.empty())
+ {
+ return false;
+ }
+ try
+ {
+ m_lsType = boost::lexical_cast<uint8_t>(nt.getNextToken());
+ m_lsSeqNo = boost::lexical_cast<uint32_t>(nt.getNextToken());
+ m_lifeTime = boost::lexical_cast<uint32_t>(nt.getNextToken());
+ numLink = boost::lexical_cast<uint32_t>(nt.getNextToken());
+ }
+ catch (std::exception& e)
+ {
+ return false;
+ }
+ for (uint32_t i = 0; i < numLink; i++)
+ {
+ try
+ {
+ string adjName = nt.getNextToken();
+ int connectingFace = boost::lexical_cast<int>(nt.getNextToken());
+ double linkCost = boost::lexical_cast<double>(nt.getNextToken());
+ Adjacent adjacent(adjName, connectingFace, linkCost, 0, 0);
+ addAdjacent(adjacent);
+ }
+ catch (std::exception& e)
+ {
+ return false;
+ }
+ }
+ return true;
+}
+
+
+void
+AdjLsa::addNptEntries(Nlsr& pnlsr)
+{
+ if (getOrigRouter() != pnlsr.getConfParameter().getRouterPrefix())
+ {
+ pnlsr.getNpt().addNpteByDestName(getOrigRouter(), getOrigRouter(), pnlsr);
+ }
+}
+
+
+void
+AdjLsa::removeNptEntries(Nlsr& pnlsr)
+{
+ if (getOrigRouter() != pnlsr.getConfParameter().getRouterPrefix())
+ {
+ pnlsr.getNpt().removeNpte(getOrigRouter(), getOrigRouter(), pnlsr);
+ }
+}
+
+
+
+std::ostream&
+operator<<(std::ostream& os, AdjLsa& aLsa)
+{
+ os << "Adj Lsa: " << endl;
+ os << " Origination Router: " << aLsa.getOrigRouter() << endl;
+ os << " Ls Type: " << (unsigned short)aLsa.getLsType() << endl;
+ os << " Ls Seq No: " << (unsigned int)aLsa.getLsSeqNo() << endl;
+ os << " Ls Lifetime: " << (unsigned int)aLsa.getLifeTime() << endl;
+ os << " No Link: " << (unsigned int)aLsa.getNoLink() << endl;
+ os << " Adjacents: " << endl;
+ int i = 1;
+ std::list<Adjacent> al = aLsa.getAdl().getAdjList();
+ for (std::list<Adjacent>::iterator it = al.begin(); it != al.end(); it++)
+ {
+ os << " Adjacent " << i << ": " << endl;
+ os << " Adjacent Name: " << (*it).getName() << endl;
+ os << " Connecting Face: " << (*it).getConnectingFace() << endl;
+ os << " Link Cost: " << (*it).getLinkCost() << endl;
+ }
+ return os;
+}
+
+}//namespace nlsr