- /**
- * @file Node.h
- *
- * Created on: 10.01.2017
- * @author Piotr Dergun
- */
-
- #ifndef NODE_H_
- #define NODE_H_
-
- #include "common.h"
- #include "Packet.h"
- #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:
- /** 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:
- Node();
- Node(string hostname);
- 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);
-
- /* mutuatory */
- void setHostname(string hostname);
- void setIp(string ip);
- void setMask(string mask);
- void setGatewayIp(string gatewayIp);
- string getHostname();
- string getIp();
- string getMask();
- string getNetwork();
- string getGatewayIp();
-
- /*
- * wirtualna metoda obsługi kolejki pakietów.
- * Domyślnie wyłącznie ściąga pakiet z kolejki.
- */
- virtual void onRecv();
- };
-
- #endif /* NODE_H_ */
|