Browse Source

nat overflow working 100%

master
Piotr Dergun 7 years ago
parent
commit
07b06c3670
4 changed files with 60 additions and 15 deletions
  1. +38
    -3
      Log.cpp
  2. +7
    -2
      Log.h
  3. +2
    -2
      Main.cpp
  4. +13
    -8
      Simulation.cpp

+ 38
- 3
Log.cpp View File

@ -13,7 +13,8 @@ Log::Log()
this->delimiter = ""; this->delimiter = "";
this->lineNumber = 0; this->lineNumber = 0;
this->objectName = NULL; this->objectName = NULL;
this->currentLine = 0;
this->firstLine = 0;
this->writeMutex = Log::getMutex(); this->writeMutex = Log::getMutex();
this->setDelay(1); this->setDelay(1);
} }
@ -120,13 +121,44 @@ void Log::printProgressBar(int lineNumber, int offset, string msg,
cout << this->getObjectName()->c_str() << ": " << this->getDelimiter() << msg << endl; cout << this->getObjectName()->c_str() << ": " << this->getDelimiter() << msg << endl;
#endif #endif
} }
/*
* metoda wypisuje log w wielu liniach od firstLineNumber do rows-2
*/
void Log::printLine(string msg, bool force)
{
int cols, rows;
getmaxyx(stdscr, rows, cols);
if (this->currentLine > rows-3)
this->currentLine = this->firstLine;
this->print(msg, force, this->currentLine);
pthread_mutex_lock(this->writeMutex);
move(this->currentLine+1, 0);
clrtoeol();
move(0,0);
pthread_mutex_unlock(this->writeMutex);
++this->currentLine;
}
int Log::getFirstLine() const
{
return firstLine;
}
void Log::setFirstLine(int firstLine)
{
this->firstLine = firstLine;
this->currentLine = firstLine;
}
void Log::setObjectName(string* objectName) void Log::setObjectName(string* objectName)
{ {
this->objectName = objectName; this->objectName = objectName;
} }
void Log::print(string msg, bool force)
void Log::print(string msg, bool force, int customLine)
{ {
#ifndef DEBUG #ifndef DEBUG
if (this->getObjectName() == NULL) if (this->getObjectName() == NULL)
@ -136,7 +168,10 @@ void Log::print(string msg, bool force)
return; return;
pthread_mutex_lock(this->writeMutex); pthread_mutex_lock(this->writeMutex);
move(this->getLineNumber(), 0);
if (customLine > -1)
move(customLine, 0);
else
move(this->getLineNumber(), 0);
clrtoeol(); clrtoeol();
if(has_colors()) if(has_colors())

+ 7
- 2
Log.h View File

@ -29,10 +29,13 @@ class Log
string *objectName; string *objectName;
pthread_mutex_t *writeMutex; pthread_mutex_t *writeMutex;
int delayVal; int delayVal;
/* do obslugi wielolinijkowosci (na dole) */
int firstLine;
int currentLine;
public: public:
Log(); Log();
void print(string msg, bool force=false);
void print(string msg, bool force=false, int customLine = -1);
void printLine(string msg, bool force=false);
void printProgressBar(int lineNumber, int offset, string msg, float percent); void printProgressBar(int lineNumber, int offset, string msg, float percent);
LOG_COLOR getColor() const; LOG_COLOR getColor() const;
@ -48,6 +51,8 @@ public:
void setDelay(int delay); void setDelay(int delay);
string* getObjectName() const; string* getObjectName() const;
void setObjectName(string* objectName); void setObjectName(string* objectName);
int getFirstLine() const;
void setFirstLine(int firstLine);
}; };
#endif /* LOG_H_ */ #endif /* LOG_H_ */

+ 2
- 2
Main.cpp View File

@ -40,9 +40,9 @@ int main(int argc, char *argv[])
usage(argv[0]); usage(argv[0]);
nodesCount = strtol(argv[2], &endptr, 10); nodesCount = strtol(argv[2], &endptr, 10);
if (nodesCount < 1 || nodesCount > 255)
if (nodesCount < 1 || nodesCount > 253)
{ {
cerr << "Invalid number of nodes format [1,255]" << endl;
cerr << "Invalid number of nodes format [1,253]" << endl;
usage(argv[0]); usage(argv[0]);
} }

+ 13
- 8
Simulation.cpp View File

@ -251,8 +251,9 @@ void Simulation::p2pSimulation()
void Simulation::natOverflowSimulation(int nNodes) void Simulation::natOverflowSimulation(int nNodes)
{ {
int i = 0;//, srcPort;
int i = 0, srcPort;
stringstream ss; stringstream ss;
string hostname;
this->print("Creating server"); this->print("Creating server");
Node server("Server", "93.92.91.90", "255.255.255.255"); Node server("Server", "93.92.91.90", "255.255.255.255");
@ -275,10 +276,8 @@ void Simulation::natOverflowSimulation(int nNodes)
this->print("Creating and setting clients"); this->print("Creating and setting clients");
Node *client = new Node[nNodes]; Node *client = new Node[nNodes];
int *currentSrcPort = new int[nNodes];
for (i = 0; i < nNodes; ++i) for (i = 0; i < nNodes; ++i)
{ {
currentSrcPort[i] = 1;
client[i].setLogParams(2, CYAN, "\t"); client[i].setLogParams(2, CYAN, "\t");
ss.str(""); ss.str("");
ss << "Client " << (i + 1); ss << "Client " << (i + 1);
@ -318,16 +317,22 @@ void Simulation::natOverflowSimulation(int nNodes)
p.setDstPort(80); p.setDstPort(80);
i=0; i=0;
Log clientLog;
clientLog.setLogParams(5, MAGENTA, "\t");
clientLog.setFirstLine(6);
clientLog.setObjectName(&hostname);
while(true) while(true)
{ {
i = (nNodes>1) ? rand()%nNodes : 0; i = (nNodes>1) ? rand()%nNodes : 0;
if (currentSrcPort[i] == 65535)
currentSrcPort[i] = 1;
ss.str("");
//p.setSrcPort(currentSrcPort[i]++);
p.setSrcPort(0);
client[i].send(p);
//p.setSrcPort(0);
srcPort = client[i].send(p);
hostname = client[i].getHostname();
ss << "Sent " << client[i].getIp() << ":" << srcPort << " to 93.92.91.90:80";
clientLog.printLine(ss.str());
this->delay(150); this->delay(150);
//usleep(1); //usleep(1);
} }

Loading…
Cancel
Save