|
|
@ -1,8 +1,8 @@ |
|
|
|
/* |
|
|
|
* Node.h |
|
|
|
/** |
|
|
|
* @file Node.h |
|
|
|
* |
|
|
|
* Created on: 10.01.2017 |
|
|
|
* Author: piotrek |
|
|
|
* Created on: 10.01.2017 |
|
|
|
* @author Piotr Dergun |
|
|
|
*/ |
|
|
|
|
|
|
|
#ifndef NODE_H_ |
|
|
@ -13,27 +13,70 @@ |
|
|
|
#include "Log.h" |
|
|
|
|
|
|
|
typedef struct { |
|
|
|
/** adres IP */ |
|
|
|
string ip; |
|
|
|
/** maska podsieci */ |
|
|
|
string mask; |
|
|
|
/** adres sieci */ |
|
|
|
string network; |
|
|
|
/** adres IP bramy domyślnej */ |
|
|
|
string gatewayIp; |
|
|
|
} NetConf; |
|
|
|
|
|
|
|
class Node : public Log |
|
|
|
{ |
|
|
|
private: |
|
|
|
queue<Packet>rcvBuffer; // kolejka z pakietami do przetworzenia |
|
|
|
map<Node*, bool> connectedNodes; // referencje do węzłów, z którymi jest podłączony |
|
|
|
NetConf netConf; // konfiguracja sieciowa |
|
|
|
string hostname; // nazwa węzła |
|
|
|
/** kolejka z pakietami do przetworzenia */ |
|
|
|
queue<Packet>rcvBuffer; |
|
|
|
/** referencje do węzłów, z którymi jest podłączony */ |
|
|
|
map<Node*, bool> connectedNodes; |
|
|
|
/** konfiguracja karty sieciowej */ |
|
|
|
NetConf netConf; |
|
|
|
/** nazwa węzła */ |
|
|
|
string hostname; |
|
|
|
/** |
|
|
|
* oblicza adres sieci, do której należy węzeł |
|
|
|
*/ |
|
|
|
void setNetwork(); |
|
|
|
protected: |
|
|
|
/** |
|
|
|
* zwraca wskaźnik do węzła, z którym chcemy się połączyć, |
|
|
|
* ew. do bramy, jeżeli nic nie znajdzie, a brama jest podłączona |
|
|
|
* @param ip adres IP węzła docelowego |
|
|
|
*/ |
|
|
|
Node * findConnection(string ip); |
|
|
|
/** |
|
|
|
* pobiera i usuwa pakiet z bufora "karty sieciowej" |
|
|
|
*/ |
|
|
|
Packet recv(); |
|
|
|
/** |
|
|
|
* przetwarza adres IP w postaci liczbowej na postać human-readable |
|
|
|
* @param ip adres IP (liczba) |
|
|
|
*/ |
|
|
|
string ipToString(unsigned int ip); |
|
|
|
/** |
|
|
|
* przetwarza adres IP w postaci human-readable na postać liczbową |
|
|
|
* @param ip adres IP (tekst) |
|
|
|
*/ |
|
|
|
unsigned int stringToIp(string ip); |
|
|
|
/** |
|
|
|
* oblicza adres sieci dla zadanego adresu IP i maski |
|
|
|
* @param ip adres IP |
|
|
|
* @param mask maska podsieci |
|
|
|
*/ |
|
|
|
string calculateNetwork(string ip, string mask); |
|
|
|
/** |
|
|
|
* dzieli string na części |
|
|
|
* @param s referencja do stringu |
|
|
|
* @param delim delimitator dzielący string na części |
|
|
|
* @param elems referencja do wektora z podzielonymi elementami |
|
|
|
*/ |
|
|
|
void split(const string &s, char delim, vector<string> &elems); |
|
|
|
/** |
|
|
|
* zwraca wektor z stringami, które powstały poprzez podzielenie stringa delimitatorem |
|
|
|
* @s referencja do stringa, który ma zostać podzielony |
|
|
|
* @delim delimitator |
|
|
|
*/ |
|
|
|
vector<string> split(const string &s, char delim); |
|
|
|
|
|
|
|
public: |
|
|
@ -42,25 +85,42 @@ public: |
|
|
|
Node(string hostname, string ip, string mask); |
|
|
|
Node(string hostname, string ip, string mask, string gatewayIp); |
|
|
|
virtual ~Node(); |
|
|
|
/** |
|
|
|
* "łączy" węzły, czyli umieszcza dwustronną referencję do obiektów w mapie connectedNodes. |
|
|
|
* Jest odwzorowaniem podłączenia wtyczki w dwóch urządzeniach sieciowych. |
|
|
|
* @param node wskaźnik do węzła zdalnego |
|
|
|
* @param isExternal flaga, czy połączenie jest po WAN |
|
|
|
* @param firstConnected flaga czy pierwszy węzeł został dołączony (blokuje rekurencję metody) |
|
|
|
*/ |
|
|
|
bool connectNode(Node *node, bool isExternal = false, bool firstConnected = false); |
|
|
|
|
|
|
|
/** |
|
|
|
* funkcja wysyła, czyli przekazuje kopię pakietu kolejnemu węzłowi |
|
|
|
* @param packet pakiet do wysłania |
|
|
|
* @param isRouter flaga jeżeli true to port źródłowy i IP źródłowy mają zostać zachowane (bez zmian) |
|
|
|
*/ |
|
|
|
int send(Packet packet, bool isRouter = false); |
|
|
|
/** |
|
|
|
* odbiera dane od węzła zdalnego i umieszcza je w buforze (kolejce) karty sieciowej |
|
|
|
* @param packet pakiet |
|
|
|
*/ |
|
|
|
void putPacket(Packet packet); |
|
|
|
|
|
|
|
// settery |
|
|
|
/* mutuatory */ |
|
|
|
void setHostname(string hostname); |
|
|
|
void setIp(string ip); |
|
|
|
void setMask(string mask); |
|
|
|
void setGatewayIp(string gatewayIp); |
|
|
|
|
|
|
|
// gettery |
|
|
|
string getHostname(); |
|
|
|
string getIp(); |
|
|
|
string getMask(); |
|
|
|
string getNetwork(); |
|
|
|
string getGatewayIp(); |
|
|
|
|
|
|
|
virtual void onRecv(); // wirtualna metoda na odbiór i dalszą akcję |
|
|
|
/* |
|
|
|
* wirtualna metoda obsługi kolejki pakietów. |
|
|
|
* Domyślnie wyłącznie ściąga pakiet z kolejki. |
|
|
|
*/ |
|
|
|
virtual void onRecv(); |
|
|
|
}; |
|
|
|
|
|
|
|
#endif /* NODE_H_ */ |