|
|
@ -10,27 +10,39 @@ |
|
|
|
|
|
|
|
Node * Node::findConnection(string ip) |
|
|
|
{ |
|
|
|
NATRouter *ptr; |
|
|
|
NATRouter *r; |
|
|
|
Node *ptr = NULL; |
|
|
|
if (ip == "0.0.0.0") |
|
|
|
return NULL; |
|
|
|
|
|
|
|
vector<Node*>::iterator it = this->connectedNodes.begin(); |
|
|
|
// najpierw szukam tras lokalnych
|
|
|
|
map<Node*, bool>::iterator it = this->connectedNodes.begin(); |
|
|
|
for (; it != this->connectedNodes.end(); ++it) |
|
|
|
{ |
|
|
|
if ((*it)->getIp() == ip) |
|
|
|
return *it; |
|
|
|
//if ((*it)->getIp() == ip)
|
|
|
|
if ((*it).first->getIp() == ip) |
|
|
|
{ |
|
|
|
ptr = (*it).first; |
|
|
|
if ((*it).second == false) |
|
|
|
return ptr; |
|
|
|
} |
|
|
|
|
|
|
|
/*
|
|
|
|
* jezeli wezel ma polaczenie do NAT-routera |
|
|
|
* (i istnieje jego interfejs WAN to sprawdz |
|
|
|
* czy nie ma z nim bezposredniego polaczenia) |
|
|
|
*/ |
|
|
|
ptr = dynamic_cast<NATRouter*>(*it); |
|
|
|
r = dynamic_cast<NATRouter*>((*it).first); |
|
|
|
|
|
|
|
if (ptr != NULL) |
|
|
|
if (ptr->getWanIp() == ip) |
|
|
|
return *it; |
|
|
|
if (r != NULL) |
|
|
|
if (r->getWanIp() == ip) |
|
|
|
return (*it).first; |
|
|
|
} |
|
|
|
/* jezeli takich nie ma, a jest zewnetrzna
|
|
|
|
* to musze wskazac do niej |
|
|
|
*/ |
|
|
|
if (ptr) |
|
|
|
return ptr; |
|
|
|
|
|
|
|
return NULL; |
|
|
|
} |
|
|
@ -112,24 +124,24 @@ Node::Node(string hostname, string ip, string mask, string gatewayIp) : Node(hos |
|
|
|
* czy polaczenie juz gdzies zostalo przypadkowo nawiazane, nawiazujemy polaczenie, a nastepnie |
|
|
|
* przekazujemy sterowanie drugiemu wezlowi zeby zrobil to samo) |
|
|
|
*/ |
|
|
|
bool Node::connectNode(Node *node, bool firstConnected) |
|
|
|
bool Node::connectNode(Node *node, bool isExternal, bool firstConnected) |
|
|
|
{ |
|
|
|
if (node->getIp() == "0.0.0.0") // jezeli wezel nie ma skonfigurowanej sieci, nie mozna go przylaczyc
|
|
|
|
return false; |
|
|
|
|
|
|
|
if (!firstConnected) |
|
|
|
{ |
|
|
|
vector<Node*>::iterator it = this->connectedNodes.begin(); |
|
|
|
map<Node*, bool>::iterator it = this->connectedNodes.begin(); |
|
|
|
for (; it != this->connectedNodes.end(); ++it) // sprawdzamy, czy połączenia już przypadkiem nie ma
|
|
|
|
{ |
|
|
|
if (*it == node) |
|
|
|
if ((*it).first == node) |
|
|
|
return false; |
|
|
|
} |
|
|
|
} |
|
|
|
this->connectedNodes.push_back(node); // podłączamy drugi węzeł
|
|
|
|
this->connectedNodes.insert(pair<Node*, bool>(node, isExternal));//this->connectedNodes.push_back(node); // podłączamy drugi węzeł
|
|
|
|
|
|
|
|
if (!firstConnected) |
|
|
|
node->connectNode(this, true); // to samo w drugą stronę
|
|
|
|
node->connectNode(this, isExternal, true); // to samo w drugą stronę
|
|
|
|
|
|
|
|
return true; |
|
|
|
} |
|
|
|