blob: a19fa0962ec870b9ddac8ad2617647bed09f27da [file] [log] [blame]
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
#include <sstream>
#include "conf-file-processor.hpp"
#include "conf-parameter.hpp"
#include "utility/tokenizer.hpp"
#include "adjacent.hpp"
namespace nlsr {
using namespace std;
int
ConfFileProcessor::processConfFile(Nlsr& pnlsr)
{
int ret = 0;
if (!m_confFileName.empty())
{
std::ifstream inputFile(m_confFileName.c_str());
if (inputFile.is_open())
{
for (string line; getline(inputFile, line);)
{
if (!line.empty())
{
if (line[0] != '#' && line[0] != '!')
{
ret = processConfCommand(pnlsr, line);
if (ret == -1)
{
break;
}
}
}
}
}
else
{
std::cerr << "Configuration file: (" << m_confFileName << ") does not exist :(";
std::cerr << endl;
ret = -1;
}
}
return ret;
}
int
ConfFileProcessor::processConfCommand(Nlsr& pnlsr, string command)
{
int ret = 0;
Tokenizer nt(command, " ");
if ((nt.getFirstToken() == "network"))
{
ret = processConfCommandNetwork(pnlsr, nt.getRestOfLine());
}
else if ((nt.getFirstToken() == "site-name"))
{
ret = processConfCommandSiteName(pnlsr, nt.getRestOfLine());
}
else if ((nt.getFirstToken() == "root-key-prefix"))
{
ret = processConfCommandRootKeyPrefix(pnlsr, nt.getRestOfLine());
}
else if ((nt.getFirstToken() == "router-name"))
{
ret = processConfCommandRouterName(pnlsr, nt.getRestOfLine());
}
else if ((nt.getFirstToken() == "ndnneighbor"))
{
ret = processConfCommandNdnNeighbor(pnlsr, nt.getRestOfLine());
}
else if ((nt.getFirstToken() == "link-cost"))
{
ret = processConfCommandLinkCost(pnlsr, nt.getRestOfLine());
}
else if ((nt.getFirstToken() == "ndnname"))
{
ret = processConfCommandNdnName(pnlsr, nt.getRestOfLine());
}
else if ((nt.getFirstToken() == "interest-retry-num"))
{
processConfCommandInterestRetryNumber(pnlsr, nt.getRestOfLine());
}
else if ((nt.getFirstToken() == "interest-resend-time"))
{
processConfCommandInterestResendTime(pnlsr, nt.getRestOfLine());
}
else if ((nt.getFirstToken() == "lsa-refresh-time"))
{
processConfCommandLsaRefreshTime(pnlsr, nt.getRestOfLine());
}
else if ((nt.getFirstToken() == "max-faces-per-prefix"))
{
processConfCommandMaxFacesPerPrefix(pnlsr, nt.getRestOfLine());
}
else if ((nt.getFirstToken() == "log-dir"))
{
processConfCommandLogDir(pnlsr, nt.getRestOfLine());
}
else if ((nt.getFirstToken() == "cert-dir"))
{
processConfCommandCertDir(pnlsr, nt.getRestOfLine());
}
else if ((nt.getFirstToken() == "detailed-logging"))
{
processConfCommandDetailedLogging(pnlsr, nt.getRestOfLine());
}
else if ((nt.getFirstToken() == "debugging"))
{
processConfCommandDebugging(pnlsr, nt.getRestOfLine());
}
else if ((nt.getFirstToken() == "chronosync-sync-prefix"))
{
processConfCommandChronosyncSyncPrefix(pnlsr, nt.getRestOfLine());
}
else if ((nt.getFirstToken() == "hyperbolic-cordinate"))
{
processConfCommandHyperbolicCordinate(pnlsr, nt.getRestOfLine());
}
else if ((nt.getFirstToken() == "hyperbolic-routing"))
{
processConfCommandIsHyperbolicCalc(pnlsr, nt.getRestOfLine());
}
else if ((nt.getFirstToken() == "tunnel-type"))
{
processConfCommandTunnelType(pnlsr, nt.getRestOfLine());
}
else
{
cout << "Wrong configuration Command: " << nt.getFirstToken() << endl;
}
return ret;
}
int
ConfFileProcessor::processConfCommandNetwork(Nlsr& pnlsr, string command)
{
if (command.empty())
{
cerr << " Network can not be null or empty :( !" << endl;
return -1;
}
else
{
if (command[command.size() - 1] == '/')
{
command.erase(command.size() - 1);
}
if (command[0] == '/')
{
command.erase(0, 1);
}
pnlsr.getConfParameter().setNetwork(command);
}
return 0;
}
int
ConfFileProcessor::processConfCommandSiteName(Nlsr& pnlsr, string command)
{
if (command.empty())
{
cerr << "Site name can not be null or empty :( !" << endl;
return -1;
}
else
{
if (command[command.size() - 1] == '/')
{
command.erase(command.size() - 1);
}
if (command[0] == '/')
{
command.erase(0, 1);
}
pnlsr.getConfParameter().setSiteName(command);
}
return 0;
}
int
ConfFileProcessor::processConfCommandRootKeyPrefix(Nlsr& pnlsr, string command)
{
if (command.empty())
{
cerr << "Root Key Prefix can not be null or empty :( !" << endl;
return -1;
}
else
{
if (command[command.size() - 1] == '/')
{
command.erase(command.size() - 1);
}
if (command[0] == '/')
{
command.erase(0, 1);
}
pnlsr.getConfParameter().setRootKeyPrefix(command);
}
return 0;
}
int
ConfFileProcessor::processConfCommandRouterName(Nlsr& pnlsr, string command)
{
if (command.empty())
{
cerr << " Router name can not be null or empty :( !" << endl;
return -1;
}
else
{
if (command[command.size() - 1] == '/')
{
command.erase(command.size() - 1);
}
if (command[0] == '/')
{
command.erase(0, 1);
}
pnlsr.getConfParameter().setRouterName(command);
}
return 0;
}
int
ConfFileProcessor::processConfCommandInterestRetryNumber(Nlsr& pnlsr,
string command)
{
if (command.empty())
{
cerr << " Wrong command format ! [interest-retry-num n]" << endl;
}
else
{
int irn;
stringstream ss(command.c_str());
ss >> irn;
if (irn >= 1 && irn <= 5)
{
pnlsr.getConfParameter().setInterestRetryNumber(irn);
}
}
return 0;
}
int
ConfFileProcessor::processConfCommandInterestResendTime(Nlsr& pnlsr,
string command)
{
if (command.empty())
{
cerr << " Wrong command format ! [interest-resend-time s]" << endl;
}
else
{
int irt;
stringstream ss(command.c_str());
ss >> irt;
if (irt >= 1 && irt <= 20)
{
pnlsr.getConfParameter().setInterestResendTime(irt);
}
}
return 0;
}
int
ConfFileProcessor::processConfCommandLsaRefreshTime(Nlsr& pnlsr, string command)
{
if (command.empty())
{
cerr << " Wrong command format ! [interest-resend-time s]" << endl;
}
else
{
int lrt;
stringstream ss(command.c_str());
ss >> lrt;
if (lrt >= 240 && lrt <= 7200)
{
pnlsr.getConfParameter().setLsaRefreshTime(lrt);
}
}
return 0;
}
int
ConfFileProcessor::processConfCommandMaxFacesPerPrefix(Nlsr& pnlsr,
string command)
{
if (command.empty())
{
cerr << " Wrong command format ! [max-faces-per-prefix n]" << endl;
}
else
{
int mfpp;
stringstream ss(command.c_str());
ss >> mfpp;
if (mfpp >= 0 && mfpp <= 60)
{
pnlsr.getConfParameter().setMaxFacesPerPrefix(mfpp);
}
}
return 0;
}
int
ConfFileProcessor::processConfCommandTunnelType(Nlsr& pnlsr, string command)
{
if (command.empty())
{
cerr << " Wrong command format ! [tunnel-type tcp/udp]!" << endl;
}
else
{
if (command == "tcp" || command == "TCP")
{
pnlsr.getConfParameter().setTunnelType(1);
}
else if (command == "udp" || command == "UDP")
{
pnlsr.getConfParameter().setTunnelType(0);
}
else
{
cerr << " Wrong command format ! [tunnel-type tcp/udp]!" << endl;
}
}
return 0;
}
int
ConfFileProcessor::processConfCommandChronosyncSyncPrefix(Nlsr& pnlsr,
string command)
{
if (command.empty())
{
cerr << " Wrong command format ! [chronosync-sync-prefix name/prefix]!" << endl;
}
else
{
pnlsr.getConfParameter().setChronosyncSyncPrefix(command);
}
return 0;
}
int
ConfFileProcessor::processConfCommandLogDir(Nlsr& pnlsr, string command)
{
if (command.empty())
{
cerr << " Wrong command format ! [log-dir /path/to/log/dir]!" << endl;
}
else
{
pnlsr.getConfParameter().setLogDir(command);
}
return 0;
}
int
ConfFileProcessor::processConfCommandCertDir(Nlsr& pnlsr, string command)
{
if (command.empty())
{
cerr << " Wrong command format ! [cert-dir /path/to/cert/dir]!" << endl;
}
else
{
pnlsr.getConfParameter().setCertDir(command);
}
return 0;
}
int
ConfFileProcessor::processConfCommandDebugging(Nlsr& pnlsr, string command)
{
if (command.empty())
{
cerr << " Wrong command format ! [debugging on/of]!" << endl;
}
else
{
if (command == "on" || command == "ON")
{
pnlsr.getConfParameter().setDebugging(1);
}
else if (command == "off" || command == "off")
{
pnlsr.getConfParameter().setDebugging(0);
}
else
{
cerr << " Wrong command format ! [debugging on/off]!" << endl;
}
}
return 0;
}
int
ConfFileProcessor::processConfCommandDetailedLogging(Nlsr& pnlsr,
string command)
{
if (command.empty())
{
cerr << " Wrong command format ! [detailed-logging on/off]!" << endl;
}
else
{
if (command == "on" || command == "ON")
{
pnlsr.getConfParameter().setDetailedLogging(1);
}
else if (command == "off" || command == "off")
{
pnlsr.getConfParameter().setDetailedLogging(0);
}
else
{
cerr << " Wrong command format ! [detailed-logging on/off]!" << endl;
}
}
return 0;
}
int
ConfFileProcessor::processConfCommandIsHyperbolicCalc(Nlsr& pnlsr,
string command)
{
if (command.empty())
{
cerr << " Wrong command format ! [hyperbolic-routing on/off/dry-run]!" << endl;
}
else
{
if (command == "on" || command == "ON")
{
pnlsr.getConfParameter().setIsHyperbolicCalc(1);
}
else if (command == "dry-run" || command == "DRY-RUN")
{
pnlsr.getConfParameter().setIsHyperbolicCalc(2);
}
else if (command == "off" || command == "off")
{
pnlsr.getConfParameter().setIsHyperbolicCalc(0);
}
else
{
cerr << " Wrong command format ! [hyperbolic-routing on/off/dry-run]!" << endl;
}
}
return 0;
}
int
ConfFileProcessor::processConfCommandHyperbolicCordinate(Nlsr& pnlsr,
string command)
{
if (command.empty())
{
cerr << " Wrong command format ! [hyperbolic-cordinate r 0]!" << endl;
if (pnlsr.getConfParameter().getIsHyperbolicCalc() > 0)
{
return -1;
}
}
else
{
Tokenizer nt(command, " ");
stringstream ssr(nt.getFirstToken().c_str());
stringstream sst(nt.getRestOfLine().c_str());
double r, theta;
ssr >> r;
sst >> theta;
pnlsr.getConfParameter().setCorR(r);
pnlsr.getConfParameter().setCorTheta(theta);
}
return 0;
}
int
ConfFileProcessor::processConfCommandNdnNeighbor(Nlsr& pnlsr, string command)
{
if (command.empty())
{
cerr << " Wrong command format ! [ndnneighbor /nbr/name/ FaceId]!" << endl;
}
else
{
Tokenizer nt(command, " ");
if (nt.getRestOfLine().empty())
{
cerr << " Wrong command format ! [ndnneighbor /nbr/name/ FaceId]!" << endl;
return 0;
}
else
{
stringstream sst(nt.getRestOfLine().c_str());
int faceId;
sst >> faceId;
Adjacent adj(nt.getFirstToken(), faceId, 0.0, 0, 0);
pnlsr.getAdl().insert(adj);
}
}
return 0;
}
int
ConfFileProcessor::processConfCommandNdnName(Nlsr& pnlsr, string command)
{
if (command.empty())
{
cerr << " Wrong command format ! [ndnname name/prefix]!" << endl;
}
else
{
pnlsr.getNpl().insert(command);
}
return 0;
}
int
ConfFileProcessor::processConfCommandLinkCost(Nlsr& pnlsr, string command)
{
if (command.empty())
{
cerr << " Wrong command format ! [link-cost nbr/name cost]!" << endl;
if (pnlsr.getConfParameter().getIsHyperbolicCalc() > 0)
{
return -1;
}
}
else
{
Tokenizer nt(command, " ");
stringstream sst(nt.getRestOfLine().c_str());
double cost;
sst >> cost;
pnlsr.getAdl().updateAdjacentLinkCost(nt.getFirstToken(), cost);
}
return 0;
}
} //namespace nlsr