From e35e793204d797b59eb38805e4fed7c5dffc63c2 Mon Sep 17 00:00:00 2001 From: Patrick Schulze Date: Thu, 4 Jun 2026 21:50:30 +0200 Subject: [PATCH 01/13] update: introduce identifier WIP --- lib/tud/include/client_discovery.h | 3 ++- lib/tud/include/networking.h | 8 ++++++++ lib/tud/include/server_discovery.h | 3 ++- lib/tud/src/client_discovery.cpp | 7 ++++++- lib/tud/src/networking.cpp | 20 ++++++++++++++++++++ lib/tud/src/server_discovery.cpp | 7 ++++++- test/client/main.cpp | 2 +- test/server/main.cpp | 2 +- 8 files changed, 46 insertions(+), 6 deletions(-) diff --git a/lib/tud/include/client_discovery.h b/lib/tud/include/client_discovery.h index c12f05b..92eaefa 100644 --- a/lib/tud/include/client_discovery.h +++ b/lib/tud/include/client_discovery.h @@ -4,11 +4,12 @@ #include "networking.h" #include +#include class ClientDiscovery: public Networking { public: - ClientDiscovery(std::string interface, int inPort, int outPort); + ClientDiscovery(std::string interface, int inPort, int outPort, std::optional identifier); void discoveryCycle(); }; diff --git a/lib/tud/include/networking.h b/lib/tud/include/networking.h index da515ce..8261d7b 100644 --- a/lib/tud/include/networking.h +++ b/lib/tud/include/networking.h @@ -20,11 +20,19 @@ class Networking int sendMessageTo(int socket, const sockaddr_in& broadcast, std::string payload); std::string receiveMessage(int socket); + bool hasSameIdentifier(std::string ipString); + std::string stripIdentifier(std::string ipString); + std::vector discoveredAddresses = {}; std::mutex mtx; std::string containerIP; int inPort; int outPort; + + std::string identifier = "tud"; + + private: + std::string identifierEscapeRegex(const std::string& text); }; #endif diff --git a/lib/tud/include/server_discovery.h b/lib/tud/include/server_discovery.h index cfab448..16d614e 100644 --- a/lib/tud/include/server_discovery.h +++ b/lib/tud/include/server_discovery.h @@ -4,11 +4,12 @@ #include "networking.h" #include +#include class ServerDiscovery: public Networking { public: - ServerDiscovery(std::string interface, int inPort, int outPort); + ServerDiscovery(std::string interface, int inPort, int outPort, std::optional identifier); void discoveryCycle(); private: diff --git a/lib/tud/src/client_discovery.cpp b/lib/tud/src/client_discovery.cpp index 3a4f8a4..a55651e 100644 --- a/lib/tud/src/client_discovery.cpp +++ b/lib/tud/src/client_discovery.cpp @@ -4,12 +4,17 @@ #include #include #include +#include -ClientDiscovery::ClientDiscovery(std::string interface, int inPort, int outPort) { +ClientDiscovery::ClientDiscovery(std::string interface, int inPort, int outPort, std::optional identifier) { this->containerIP = getLocalIpAddress(interface); this->inPort = inPort; this->outPort = outPort; + + if(identifier.has_value()) { + this->identifier = identifier.value(); + } } void ClientDiscovery::discoveryCycle() { diff --git a/lib/tud/src/networking.cpp b/lib/tud/src/networking.cpp index f8befca..df99b44 100644 --- a/lib/tud/src/networking.cpp +++ b/lib/tud/src/networking.cpp @@ -10,6 +10,8 @@ #include #include #include +#include +#include int Networking::sendMessageTo(int socket, const sockaddr_in& broadcast, std::string payload) { if (sendto(socket, payload.data(), payload.size(), 0, (struct sockaddr*)&broadcast, sizeof(broadcast)) < 0) { @@ -150,3 +152,21 @@ bool Networking::isValidIpV4(std::string &ipString) { return true; } + +bool Networking::hasSameIdentifier(std::string ipString) { + std::string identifierPattern = "^" + identifierEscapeRegex(this->identifier); + std::regex pattern(identifierPattern); + return std::regex_search(ipString, pattern); +} + +std::string Networking::stripIdentifier(std::string ipString) { + std::string identifierPattern = "^" + identifierEscapeRegex(this->identifier); + std::regex pattern(identifierPattern); + + return std::regex_replace(ipString, pattern, ""); +} + +std::string Networking::identifierEscapeRegex(const std::string& identifier) { + static const std::regex special_chars(R"([-[\]{}()*+?.,\^$|#\s])"); + return std::regex_replace(identifier, special_chars, R"(\$&)"); +} diff --git a/lib/tud/src/server_discovery.cpp b/lib/tud/src/server_discovery.cpp index 2c74adc..1904e8b 100644 --- a/lib/tud/src/server_discovery.cpp +++ b/lib/tud/src/server_discovery.cpp @@ -6,13 +6,18 @@ #include #include #include +#include -ServerDiscovery::ServerDiscovery(std::string interface, int inPort, int outPort) { +ServerDiscovery::ServerDiscovery(std::string interface, int inPort, int outPort, std::optional identifier) { this->containerIP = getLocalIpAddress(interface); this->broadcastIP = getBroadcastIpAddress(); this->inPort = inPort; this->outPort = outPort; + + if(identifier.has_value()) { + this->identifier = identifier.value(); + } } void ServerDiscovery::discoveryCycle() { diff --git a/test/client/main.cpp b/test/client/main.cpp index f41f984..a931ff8 100644 --- a/test/client/main.cpp +++ b/test/client/main.cpp @@ -12,7 +12,7 @@ int main() { std::wcout << "Interface: "; std::cin >> interface; - auto clientDiscovery = std::make_shared(interface, 4000, 4001); + auto clientDiscovery = std::make_shared(interface, 4000, 4001, "tud"); std::thread clientDiscoveryThread([clientDiscovery]() { clientDiscovery->discoveryCycle(); }); diff --git a/test/server/main.cpp b/test/server/main.cpp index b3535e5..3ee3aeb 100644 --- a/test/server/main.cpp +++ b/test/server/main.cpp @@ -12,7 +12,7 @@ int main() { std::wcout << "Interface: "; std::cin >> interface; - auto serverDiscovery = std::make_shared(interface, 4000, 4001); + auto serverDiscovery = std::make_shared(interface, 4000, 4001, "tud"); std::thread serverDiscoveryThread([serverDiscovery]() { serverDiscovery->discoveryCycle(); }); From 24ba77d3476e9904cca2aebf5eed1190fb8b1aed Mon Sep 17 00:00:00 2001 From: Sobottasgithub Date: Fri, 5 Jun 2026 15:08:08 +0200 Subject: [PATCH 02/13] update: complete implementing identifier --- README.md | 5 ++-- lib/tud/src/client_discovery.cpp | 40 ++++++++++++++++++-------------- lib/tud/src/server_discovery.cpp | 13 +++++++---- 3 files changed, 33 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 36dedee..b96816b 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ After including TUD to your project you can implement the server like this: ``` ```cpp -auto serverDiscovery = std::make_shared(interface, 4000, 4001); +auto serverDiscovery = std::make_shared(interface, 4000, 4001, "yourNewIdenifier"); std::thread serverDiscoveryThread([serverDiscovery]() { serverDiscovery->discoveryCycle(); }); @@ -19,7 +19,7 @@ And the client like this: ``` ```cpp -auto clientDiscovery = std::make_shared(interface, 4000, 4001); +auto clientDiscovery = std::make_shared(interface, 4000, 4001, "yourNewIdenifier"); std::thread clientDiscoveryThread([clientDiscovery]() { clientDiscovery->discoveryCycle(); }); @@ -28,6 +28,7 @@ Both constructors want: 1. your internet interface (string) 2. your in port (int) 3. your out port (int) +4. your identifier (optional string) Then you can use it with these functions: ```cpp diff --git a/lib/tud/src/client_discovery.cpp b/lib/tud/src/client_discovery.cpp index a55651e..2b9319d 100644 --- a/lib/tud/src/client_discovery.cpp +++ b/lib/tud/src/client_discovery.cpp @@ -61,26 +61,30 @@ void ClientDiscovery::discoveryCycle() { while (true) { // Get UDP Discovery packet - std::string masterIP = receiveMessage(udpSocket); - if (isValidIpV4(masterIP)) { - if(std::find(discoveredAddresses.begin(), discoveredAddresses.end(), masterIP) == discoveredAddresses.end()) { - discoveredAddresses.push_back(masterIP); - } + std::string receivedMessage = receiveMessage(udpSocket); + if (hasSameIdentifier(receivedMessage)) { + std::string masterIP = stripIdentifier(receivedMessage); + if (isValidIpV4(masterIP)) { + if(std::find(discoveredAddresses.begin(), discoveredAddresses.end(), masterIP) == discoveredAddresses.end()) { + discoveredAddresses.push_back(masterIP); + } - // clear garbage - memset(&serverAddress, 0, sizeof(serverAddress)); - // prepare socket - serverAddress.sin_family = AF_INET; - serverAddress.sin_port = htons(sendPort); + // clear garbage + memset(&serverAddress, 0, sizeof(serverAddress)); + // prepare socket + serverAddress.sin_family = AF_INET; + serverAddress.sin_port = htons(sendPort); - if (inet_pton(AF_INET, masterIP.c_str(), &serverAddress.sin_addr) <= 0) { - std::wcout << "Invalid broadcast IP" << std::endl; - return; - } - - if (sendMessageTo(udpSendSocket, serverAddress, containerIP.c_str()) != 0) { - std::wcout << "Broadcast failed!" << std::endl; - return; + if (inet_pton(AF_INET, masterIP.c_str(), &serverAddress.sin_addr) <= 0) { + std::wcout << "Invalid broadcast IP" << std::endl; + return; + } + + std::string message = this->identifier + containerIP; + if (sendMessageTo(udpSendSocket, serverAddress, message.c_str()) != 0) { + std::wcout << "Broadcast failed!" << std::endl; + return; + } } } } diff --git a/lib/tud/src/server_discovery.cpp b/lib/tud/src/server_discovery.cpp index 1904e8b..a40410d 100644 --- a/lib/tud/src/server_discovery.cpp +++ b/lib/tud/src/server_discovery.cpp @@ -62,7 +62,8 @@ void ServerDiscovery::discoveryCycle() { } while (true) { - if (sendMessageTo(serverSocket, broadcast, containerIP.c_str()) != 0) { + std::string message = this->identifier + containerIP; + if (sendMessageTo(serverSocket, broadcast, message.c_str()) != 0) { std::wcout << "Broadcast failed!" << std::endl; return; } @@ -96,10 +97,12 @@ void ServerDiscovery::receiveDiscoveredCycle() { } while (true) { - std::string newAddress = receiveMessage(udpSocket); - if(std::find(discoveredAddresses.begin(), discoveredAddresses.end(), newAddress) == discoveredAddresses.end()) { - discoveredAddresses.push_back(newAddress); + std::string receivedMessage = receiveMessage(udpSocket); + if (hasSameIdentifier(receivedMessage)) { + std::string newAddress = stripIdentifier(receivedMessage); + if(std::find(discoveredAddresses.begin(), discoveredAddresses.end(), newAddress) == discoveredAddresses.end()) { + discoveredAddresses.push_back(newAddress); + } } } - } From 4f50af8d19af0e493a253cad997272f5a5b95243 Mon Sep 17 00:00:00 2001 From: Sobottasgithub Date: Fri, 5 Jun 2026 15:50:56 +0200 Subject: [PATCH 03/13] update: correct typo --- README.md | 2 +- flake.nix | 2 +- lib/tud/include/networking.h | 2 +- lib/tud/src/networking.cpp | 2 +- test/client/main.cpp | 2 +- test/server/main.cpp | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index b96816b..43744bc 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ Both constructors want: Then you can use it with these functions: ```cpp -std::vector getDiscoveredAdresses(); +std::vector getDiscoveredAddresses(); void removeDiscoveredAddress(std::string address); std::string getLocalIpAddress(std::string interface); diff --git a/flake.nix b/flake.nix index 4ca150f..347c797 100644 --- a/flake.nix +++ b/flake.nix @@ -11,7 +11,7 @@ system = "x86_64-linux"; pkgs = import nixpkgs { inherit system; }; - version = "0.1"; + version = "0.2"; commonDeps = with pkgs; [ cmake diff --git a/lib/tud/include/networking.h b/lib/tud/include/networking.h index 8261d7b..225c2c1 100644 --- a/lib/tud/include/networking.h +++ b/lib/tud/include/networking.h @@ -9,7 +9,7 @@ class Networking { public: - std::vector getDiscoveredAdresses(); + std::vector getDiscoveredAddresses(); void removeDiscoveredAddress(std::string address); std::string getLocalIpAddress(std::string interface); diff --git a/lib/tud/src/networking.cpp b/lib/tud/src/networking.cpp index df99b44..6df6ba4 100644 --- a/lib/tud/src/networking.cpp +++ b/lib/tud/src/networking.cpp @@ -43,7 +43,7 @@ std::string Networking::receiveMessage(int socket) { return data; } -std::vector Networking::getDiscoveredAdresses() { +std::vector Networking::getDiscoveredAddresses() { std::lock_guard lock(mtx); return discoveredAddresses; } diff --git a/test/client/main.cpp b/test/client/main.cpp index a931ff8..be4330e 100644 --- a/test/client/main.cpp +++ b/test/client/main.cpp @@ -20,7 +20,7 @@ int main() { std::wcout << "~~ Discovered Addresses ~~" << std::endl; std::vector discoveredAddresses; while(true) { - std::vector newDiscoveries = clientDiscovery->getDiscoveredAdresses(); + std::vector newDiscoveries = clientDiscovery->getDiscoveredAddresses(); for (int index = 0; index < newDiscoveries.size(); index++) { if(std::find(discoveredAddresses.begin(), discoveredAddresses.end(), newDiscoveries[index]) == discoveredAddresses.end()) { std::wcout << "--> " << newDiscoveries[index].c_str() << std::endl; diff --git a/test/server/main.cpp b/test/server/main.cpp index 3ee3aeb..5beb0e1 100644 --- a/test/server/main.cpp +++ b/test/server/main.cpp @@ -20,7 +20,7 @@ int main() { std::wcout << "~~ Discovered Addresses ~~" << std::endl; std::vector discoveredAddresses; while(true) { - std::vector newDiscoveries = serverDiscovery->getDiscoveredAdresses(); + std::vector newDiscoveries = serverDiscovery->getDiscoveredAddresses(); for (int index = 0; index < newDiscoveries.size(); index++) { if(std::find(discoveredAddresses.begin(), discoveredAddresses.end(), newDiscoveries[index]) == discoveredAddresses.end()) { std::wcout << "--> " << newDiscoveries[index].c_str() << std::endl; From ae0960d439687a53f167bed67a7d95329281b90e Mon Sep 17 00:00:00 2001 From: Sobottasgithub Date: Fri, 5 Jun 2026 18:11:50 +0200 Subject: [PATCH 04/13] update: rename networking >> udp_structure --- flake.nix | 2 +- lib/tud/include/client_discovery.h | 4 ++-- lib/tud/include/server_discovery.h | 4 ++-- .../include/{networking.h => udp_structure.h} | 6 ++--- .../src/{networking.cpp => udp_structure.cpp} | 22 +++++++++---------- 5 files changed, 19 insertions(+), 19 deletions(-) rename lib/tud/include/{networking.h => udp_structure.h} (93%) rename lib/tud/src/{networking.cpp => udp_structure.cpp} (84%) diff --git a/flake.nix b/flake.nix index 347c797..80388cd 100644 --- a/flake.nix +++ b/flake.nix @@ -11,7 +11,7 @@ system = "x86_64-linux"; pkgs = import nixpkgs { inherit system; }; - version = "0.2"; + version = "0.3"; commonDeps = with pkgs; [ cmake diff --git a/lib/tud/include/client_discovery.h b/lib/tud/include/client_discovery.h index 92eaefa..192273d 100644 --- a/lib/tud/include/client_discovery.h +++ b/lib/tud/include/client_discovery.h @@ -1,12 +1,12 @@ #ifndef CLIENT_DISCOVERY_H #define CLIENT_DISCOVERY_H -#include "networking.h" +#include "udp_structure.h" #include #include -class ClientDiscovery: public Networking +class ClientDiscovery: public UdpStructure { public: ClientDiscovery(std::string interface, int inPort, int outPort, std::optional identifier); diff --git a/lib/tud/include/server_discovery.h b/lib/tud/include/server_discovery.h index 16d614e..c710b5d 100644 --- a/lib/tud/include/server_discovery.h +++ b/lib/tud/include/server_discovery.h @@ -1,12 +1,12 @@ #ifndef SERVER_DISCOVERY_H #define SERVER_DISCOVERY_H -#include "networking.h" +#include "udp_structure.h" #include #include -class ServerDiscovery: public Networking +class ServerDiscovery: public UdpStructure { public: ServerDiscovery(std::string interface, int inPort, int outPort, std::optional identifier); diff --git a/lib/tud/include/networking.h b/lib/tud/include/udp_structure.h similarity index 93% rename from lib/tud/include/networking.h rename to lib/tud/include/udp_structure.h index 225c2c1..3890cba 100644 --- a/lib/tud/include/networking.h +++ b/lib/tud/include/udp_structure.h @@ -1,12 +1,12 @@ -#ifndef NETWORKING_H -#define NETWORKING_H +#ifndef UDP_STRUCTURE_H +#define UDP_STRUCTURE_H #include #include #include #include -class Networking +class UdpStructure { public: std::vector getDiscoveredAddresses(); diff --git a/lib/tud/src/networking.cpp b/lib/tud/src/udp_structure.cpp similarity index 84% rename from lib/tud/src/networking.cpp rename to lib/tud/src/udp_structure.cpp index 6df6ba4..d612c32 100644 --- a/lib/tud/src/networking.cpp +++ b/lib/tud/src/udp_structure.cpp @@ -1,4 +1,4 @@ -#include "../include/networking.h" +#include "../include/udp_structure.h" #include #include @@ -13,7 +13,7 @@ #include #include -int Networking::sendMessageTo(int socket, const sockaddr_in& broadcast, std::string payload) { +int UdpStructure::sendMessageTo(int socket, const sockaddr_in& broadcast, std::string payload) { if (sendto(socket, payload.data(), payload.size(), 0, (struct sockaddr*)&broadcast, sizeof(broadcast)) < 0) { std::wcout << "buffer: Sendto Failed!" << std::endl; return -1; @@ -22,7 +22,7 @@ int Networking::sendMessageTo(int socket, const sockaddr_in& broadcast, std::str return 0; } -std::string Networking::receiveMessage(int socket) { +std::string UdpStructure::receiveMessage(int socket) { std::string data; pollfd pfd{}; pfd.fd = socket; @@ -43,17 +43,17 @@ std::string Networking::receiveMessage(int socket) { return data; } -std::vector Networking::getDiscoveredAddresses() { +std::vector UdpStructure::getDiscoveredAddresses() { std::lock_guard lock(mtx); return discoveredAddresses; } -void Networking::removeDiscoveredAddress(std::string address) { +void UdpStructure::removeDiscoveredAddress(std::string address) { std::lock_guard lock(mtx); discoveredAddresses.erase(find(discoveredAddresses.begin(), discoveredAddresses.end(), address)); } -std::string Networking::getLocalIpAddress(std::string interface) { +std::string UdpStructure::getLocalIpAddress(std::string interface) { struct ifaddrs *ifaddr = nullptr; // Get linked list of network interfaces @@ -85,7 +85,7 @@ std::string Networking::getLocalIpAddress(std::string interface) { return result; } -std::string Networking::getBroadcastIpAddress() { +std::string UdpStructure::getBroadcastIpAddress() { struct ifaddrs *ifaddr = nullptr; std::string broadcastIP; @@ -120,7 +120,7 @@ std::string Networking::getBroadcastIpAddress() { return broadcastIP; } -bool Networking::isValidIpV4(std::string &ipString) { +bool UdpStructure::isValidIpV4(std::string &ipString) { if (ipString.size() < 7) return false; @@ -153,20 +153,20 @@ bool Networking::isValidIpV4(std::string &ipString) { return true; } -bool Networking::hasSameIdentifier(std::string ipString) { +bool UdpStructure::hasSameIdentifier(std::string ipString) { std::string identifierPattern = "^" + identifierEscapeRegex(this->identifier); std::regex pattern(identifierPattern); return std::regex_search(ipString, pattern); } -std::string Networking::stripIdentifier(std::string ipString) { +std::string UdpStructure::stripIdentifier(std::string ipString) { std::string identifierPattern = "^" + identifierEscapeRegex(this->identifier); std::regex pattern(identifierPattern); return std::regex_replace(ipString, pattern, ""); } -std::string Networking::identifierEscapeRegex(const std::string& identifier) { +std::string UdpStructure::identifierEscapeRegex(const std::string& identifier) { static const std::regex special_chars(R"([-[\]{}()*+?.,\^$|#\s])"); return std::regex_replace(identifier, special_chars, R"(\$&)"); } From 67b4603b87b4f8535046831dfeca5c3dbab4a031 Mon Sep 17 00:00:00 2001 From: Sobottasgithub Date: Fri, 5 Jun 2026 19:31:40 +0200 Subject: [PATCH 05/13] update: add namespace tud --- flake.nix | 2 +- lib/tud/include/client_discovery.h | 15 +- lib/tud/include/server_discovery.h | 20 +-- lib/tud/include/udp_structure.h | 49 +++--- lib/tud/src/client_discovery.cpp | 130 ++++++++-------- lib/tud/src/server_discovery.cpp | 156 +++++++++---------- lib/tud/src/udp_structure.cpp | 232 +++++++++++++++-------------- test/client/main.cpp | 4 +- test/server/main.cpp | 4 +- 9 files changed, 313 insertions(+), 299 deletions(-) diff --git a/flake.nix b/flake.nix index 80388cd..55d9552 100644 --- a/flake.nix +++ b/flake.nix @@ -11,7 +11,7 @@ system = "x86_64-linux"; pkgs = import nixpkgs { inherit system; }; - version = "0.3"; + version = "0.4"; commonDeps = with pkgs; [ cmake diff --git a/lib/tud/include/client_discovery.h b/lib/tud/include/client_discovery.h index 192273d..c600bfb 100644 --- a/lib/tud/include/client_discovery.h +++ b/lib/tud/include/client_discovery.h @@ -6,11 +6,12 @@ #include #include -class ClientDiscovery: public UdpStructure -{ - public: - ClientDiscovery(std::string interface, int inPort, int outPort, std::optional identifier); - void discoveryCycle(); -}; - +namespace tud { + class ClientDiscovery: public UdpStructure + { + public: + ClientDiscovery(std::string interface, int inPort, int outPort, std::optional identifier); + void discoveryCycle(); + }; +} #endif diff --git a/lib/tud/include/server_discovery.h b/lib/tud/include/server_discovery.h index c710b5d..6931741 100644 --- a/lib/tud/include/server_discovery.h +++ b/lib/tud/include/server_discovery.h @@ -6,17 +6,19 @@ #include #include -class ServerDiscovery: public UdpStructure -{ - public: - ServerDiscovery(std::string interface, int inPort, int outPort, std::optional identifier); - void discoveryCycle(); +namespace tud { + class ServerDiscovery: public UdpStructure + { + public: + ServerDiscovery(std::string interface, int inPort, int outPort, std::optional identifier); + void discoveryCycle(); - private: - std::string broadcastIP; + private: + std::string broadcastIP; - void receiveDiscoveredCycle(); + void receiveDiscoveredCycle(); -}; + }; +} #endif diff --git a/lib/tud/include/udp_structure.h b/lib/tud/include/udp_structure.h index 3890cba..041bc89 100644 --- a/lib/tud/include/udp_structure.h +++ b/lib/tud/include/udp_structure.h @@ -6,33 +6,34 @@ #include #include -class UdpStructure -{ - public: - std::vector getDiscoveredAddresses(); - void removeDiscoveredAddress(std::string address); - - std::string getLocalIpAddress(std::string interface); - std::string getBroadcastIpAddress(); - bool isValidIpV4(std::string &ipString); +namespace tud { + class UdpStructure + { + public: + std::vector getDiscoveredAddresses(); + void removeDiscoveredAddress(std::string address); + + std::string getLocalIpAddress(std::string interface); + std::string getBroadcastIpAddress(); + bool isValidIpV4(std::string &ipString); - protected: - int sendMessageTo(int socket, const sockaddr_in& broadcast, std::string payload); - std::string receiveMessage(int socket); - - bool hasSameIdentifier(std::string ipString); - std::string stripIdentifier(std::string ipString); + protected: + int sendMessageTo(int socket, const sockaddr_in& broadcast, std::string payload); + std::string receiveMessage(int socket); - std::vector discoveredAddresses = {}; - std::mutex mtx; - std::string containerIP; - int inPort; - int outPort; + bool hasSameIdentifier(std::string ipString); + std::string stripIdentifier(std::string ipString); - std::string identifier = "tud"; + std::vector discoveredAddresses = {}; + std::mutex mtx; + std::string containerIP; + int inPort; + int outPort; - private: - std::string identifierEscapeRegex(const std::string& text); -}; + std::string identifier = "tud"; + private: + std::string identifierEscapeRegex(const std::string& text); + }; +} #endif diff --git a/lib/tud/src/client_discovery.cpp b/lib/tud/src/client_discovery.cpp index 2b9319d..2241160 100644 --- a/lib/tud/src/client_discovery.cpp +++ b/lib/tud/src/client_discovery.cpp @@ -6,84 +6,86 @@ #include #include -ClientDiscovery::ClientDiscovery(std::string interface, int inPort, int outPort, std::optional identifier) { - this->containerIP = getLocalIpAddress(interface); +namespace tud { + ClientDiscovery::ClientDiscovery(std::string interface, int inPort, int outPort, std::optional identifier) { + this->containerIP = getLocalIpAddress(interface); - this->inPort = inPort; - this->outPort = outPort; + this->inPort = inPort; + this->outPort = outPort; - if(identifier.has_value()) { - this->identifier = identifier.value(); + if(identifier.has_value()) { + this->identifier = identifier.value(); + } } -} -void ClientDiscovery::discoveryCycle() { - // Udp receive Socket - int udpSocket; - const int port = this->inPort; - char buffer[1024]; + void ClientDiscovery::discoveryCycle() { + // Udp receive Socket + int udpSocket; + const int port = this->inPort; + char buffer[1024]; - udpSocket = socket(AF_INET, SOCK_DGRAM, 0); - if (udpSocket < 0) { - std::wcout << "Create socket failed!" << std::endl; - return; - } + udpSocket = socket(AF_INET, SOCK_DGRAM, 0); + if (udpSocket < 0) { + std::wcout << "Create socket failed!" << std::endl; + return; + } - int broadcast = 1; - setsockopt(udpSocket, SOL_SOCKET, SO_BROADCAST, &broadcast, sizeof(broadcast)); + int broadcast = 1; + setsockopt(udpSocket, SOL_SOCKET, SO_BROADCAST, &broadcast, sizeof(broadcast)); - sockaddr_in nodeAddress{}; - nodeAddress.sin_family = AF_INET; - nodeAddress.sin_addr.s_addr = htonl(INADDR_ANY); - nodeAddress.sin_port = htons(port); + sockaddr_in nodeAddress{}; + nodeAddress.sin_family = AF_INET; + nodeAddress.sin_addr.s_addr = htonl(INADDR_ANY); + nodeAddress.sin_port = htons(port); - if (bind(udpSocket, (struct sockaddr*)&nodeAddress, sizeof(nodeAddress)) < 0) { - std::wcout << "UDP Socket bind failed!" << std::endl; - return; - } + if (bind(udpSocket, (struct sockaddr*)&nodeAddress, sizeof(nodeAddress)) < 0) { + std::wcout << "UDP Socket bind failed!" << std::endl; + return; + } - // UDP send socket - int udpSendSocket; - struct sockaddr_in serverAddress{}, receiverAddress{}; - const int sendPort = this->outPort; + // UDP send socket + int udpSendSocket; + struct sockaddr_in serverAddress{}, receiverAddress{}; + const int sendPort = this->outPort; - // Create socket - if ((udpSendSocket = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { - std::wcout << "Failed to create Socket!" << std::endl; - return; - } - // Allow reuse - int reuse = 1; - if (setsockopt(udpSendSocket, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0) { - std::wcout << "Setsockopt failed!" << std::endl; - return; - } + // Create socket + if ((udpSendSocket = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { + std::wcout << "Failed to create Socket!" << std::endl; + return; + } + // Allow reuse + int reuse = 1; + if (setsockopt(udpSendSocket, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0) { + std::wcout << "Setsockopt failed!" << std::endl; + return; + } - while (true) { - // Get UDP Discovery packet - std::string receivedMessage = receiveMessage(udpSocket); - if (hasSameIdentifier(receivedMessage)) { - std::string masterIP = stripIdentifier(receivedMessage); - if (isValidIpV4(masterIP)) { - if(std::find(discoveredAddresses.begin(), discoveredAddresses.end(), masterIP) == discoveredAddresses.end()) { - discoveredAddresses.push_back(masterIP); - } + while (true) { + // Get UDP Discovery packet + std::string receivedMessage = receiveMessage(udpSocket); + if (hasSameIdentifier(receivedMessage)) { + std::string masterIP = stripIdentifier(receivedMessage); + if (isValidIpV4(masterIP)) { + if(std::find(discoveredAddresses.begin(), discoveredAddresses.end(), masterIP) == discoveredAddresses.end()) { + discoveredAddresses.push_back(masterIP); + } - // clear garbage - memset(&serverAddress, 0, sizeof(serverAddress)); - // prepare socket - serverAddress.sin_family = AF_INET; - serverAddress.sin_port = htons(sendPort); + // clear garbage + memset(&serverAddress, 0, sizeof(serverAddress)); + // prepare socket + serverAddress.sin_family = AF_INET; + serverAddress.sin_port = htons(sendPort); - if (inet_pton(AF_INET, masterIP.c_str(), &serverAddress.sin_addr) <= 0) { - std::wcout << "Invalid broadcast IP" << std::endl; - return; - } + if (inet_pton(AF_INET, masterIP.c_str(), &serverAddress.sin_addr) <= 0) { + std::wcout << "Invalid broadcast IP" << std::endl; + return; + } - std::string message = this->identifier + containerIP; - if (sendMessageTo(udpSendSocket, serverAddress, message.c_str()) != 0) { - std::wcout << "Broadcast failed!" << std::endl; - return; + std::string message = this->identifier + containerIP; + if (sendMessageTo(udpSendSocket, serverAddress, message.c_str()) != 0) { + std::wcout << "Broadcast failed!" << std::endl; + return; + } } } } diff --git a/lib/tud/src/server_discovery.cpp b/lib/tud/src/server_discovery.cpp index a40410d..77dd380 100644 --- a/lib/tud/src/server_discovery.cpp +++ b/lib/tud/src/server_discovery.cpp @@ -8,100 +8,102 @@ #include #include -ServerDiscovery::ServerDiscovery(std::string interface, int inPort, int outPort, std::optional identifier) { - this->containerIP = getLocalIpAddress(interface); - this->broadcastIP = getBroadcastIpAddress(); +namespace tud { + ServerDiscovery::ServerDiscovery(std::string interface, int inPort, int outPort, std::optional identifier) { + this->containerIP = getLocalIpAddress(interface); + this->broadcastIP = getBroadcastIpAddress(); - this->inPort = inPort; - this->outPort = outPort; + this->inPort = inPort; + this->outPort = outPort; - if(identifier.has_value()) { - this->identifier = identifier.value(); + if(identifier.has_value()) { + this->identifier = identifier.value(); + } } -} -void ServerDiscovery::discoveryCycle() { - std::thread receiveDiscoveredCycleThread([this]() { - receiveDiscoveredCycle(); - }); + void ServerDiscovery::discoveryCycle() { + std::thread receiveDiscoveredCycleThread([this]() { + receiveDiscoveredCycle(); + }); - int serverSocket; - struct sockaddr_in broadcast{}, receiverAddress{}; - const int port = this->inPort; + int serverSocket; + struct sockaddr_in broadcast{}, receiverAddress{}; + const int port = this->inPort; - // Create socket - if ((serverSocket = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { - std::wcout << "Failed to create Socket!" << std::endl; - return; - } - // Enable broadcast - int broadcastBind = 1; - if (setsockopt(serverSocket, SOL_SOCKET, SO_BROADCAST, &broadcastBind, sizeof(broadcastBind)) < 0) { - std::wcout << "Failed to enable broadcast!" << std::endl; - close(serverSocket); - return; - } - // Allow reuse - int reuse = 1; - if (setsockopt(serverSocket, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0) { - std::wcout << "Setsockopt failed!" << std::endl; - close(serverSocket); - return; - } - - // clear garbage - memset(&broadcast, 0, sizeof(broadcast)); - // prepare socket - broadcast.sin_family = AF_INET; - broadcast.sin_port = htons(port); + // Create socket + if ((serverSocket = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { + std::wcout << "Failed to create Socket!" << std::endl; + return; + } + // Enable broadcast + int broadcastBind = 1; + if (setsockopt(serverSocket, SOL_SOCKET, SO_BROADCAST, &broadcastBind, sizeof(broadcastBind)) < 0) { + std::wcout << "Failed to enable broadcast!" << std::endl; + close(serverSocket); + return; + } + // Allow reuse + int reuse = 1; + if (setsockopt(serverSocket, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0) { + std::wcout << "Setsockopt failed!" << std::endl; + close(serverSocket); + return; + } - if (inet_pton(AF_INET, broadcastIP.c_str(), &broadcast.sin_addr) <= 0) { - std::wcout << "Invalid broadcast IP" << std::endl; - close(serverSocket); - return; - } + // clear garbage + memset(&broadcast, 0, sizeof(broadcast)); + // prepare socket + broadcast.sin_family = AF_INET; + broadcast.sin_port = htons(port); - while (true) { - std::string message = this->identifier + containerIP; - if (sendMessageTo(serverSocket, broadcast, message.c_str()) != 0) { - std::wcout << "Broadcast failed!" << std::endl; + if (inet_pton(AF_INET, broadcastIP.c_str(), &broadcast.sin_addr) <= 0) { + std::wcout << "Invalid broadcast IP" << std::endl; + close(serverSocket); return; } - usleep(100000); - } - receiveDiscoveredCycleThread.join(); -} + while (true) { + std::string message = this->identifier + containerIP; + if (sendMessageTo(serverSocket, broadcast, message.c_str()) != 0) { + std::wcout << "Broadcast failed!" << std::endl; + return; + } + usleep(100000); + } -void ServerDiscovery::receiveDiscoveredCycle() { - int udpSocket; - const int port = this->outPort; - - udpSocket = socket(AF_INET, SOCK_DGRAM, 0); - if (udpSocket < 0) { - std::wcout << "Create socket failed!" << std::endl; - return; + receiveDiscoveredCycleThread.join(); } - int broadcast = 1; - setsockopt(udpSocket, SOL_SOCKET, SO_BROADCAST, &broadcast, sizeof(broadcast)); + void ServerDiscovery::receiveDiscoveredCycle() { + int udpSocket; + const int port = this->outPort; + + udpSocket = socket(AF_INET, SOCK_DGRAM, 0); + if (udpSocket < 0) { + std::wcout << "Create socket failed!" << std::endl; + return; + } + + int broadcast = 1; + setsockopt(udpSocket, SOL_SOCKET, SO_BROADCAST, &broadcast, sizeof(broadcast)); - sockaddr_in nodeAddress{}; - nodeAddress.sin_family = AF_INET; - nodeAddress.sin_addr.s_addr = inet_addr(this->containerIP.c_str()); - nodeAddress.sin_port = htons(port); + sockaddr_in nodeAddress{}; + nodeAddress.sin_family = AF_INET; + nodeAddress.sin_addr.s_addr = inet_addr(this->containerIP.c_str()); + nodeAddress.sin_port = htons(port); - if (bind(udpSocket, (struct sockaddr*)&nodeAddress, sizeof(nodeAddress)) < 0) { - std::wcout << "UDP Socket bind failed!" << std::endl; - return; - } + if (bind(udpSocket, (struct sockaddr*)&nodeAddress, sizeof(nodeAddress)) < 0) { + std::wcout << "UDP Socket bind failed!" << std::endl; + return; + } - while (true) { - std::string receivedMessage = receiveMessage(udpSocket); - if (hasSameIdentifier(receivedMessage)) { - std::string newAddress = stripIdentifier(receivedMessage); - if(std::find(discoveredAddresses.begin(), discoveredAddresses.end(), newAddress) == discoveredAddresses.end()) { - discoveredAddresses.push_back(newAddress); + while (true) { + std::string receivedMessage = receiveMessage(udpSocket); + if (hasSameIdentifier(receivedMessage)) { + std::string newAddress = stripIdentifier(receivedMessage); + if(std::find(discoveredAddresses.begin(), discoveredAddresses.end(), newAddress) == discoveredAddresses.end()) { + discoveredAddresses.push_back(newAddress); + } } } } diff --git a/lib/tud/src/udp_structure.cpp b/lib/tud/src/udp_structure.cpp index d612c32..7ee9b9a 100644 --- a/lib/tud/src/udp_structure.cpp +++ b/lib/tud/src/udp_structure.cpp @@ -13,160 +13,162 @@ #include #include -int UdpStructure::sendMessageTo(int socket, const sockaddr_in& broadcast, std::string payload) { - if (sendto(socket, payload.data(), payload.size(), 0, (struct sockaddr*)&broadcast, sizeof(broadcast)) < 0) { - std::wcout << "buffer: Sendto Failed!" << std::endl; - return -1; - } +namespace tud { + int UdpStructure::sendMessageTo(int socket, const sockaddr_in& broadcast, std::string payload) { + if (sendto(socket, payload.data(), payload.size(), 0, (struct sockaddr*)&broadcast, sizeof(broadcast)) < 0) { + std::wcout << "buffer: Sendto Failed!" << std::endl; + return -1; + } - return 0; -} + return 0; + } -std::string UdpStructure::receiveMessage(int socket) { - std::string data; - pollfd pfd{}; - pfd.fd = socket; - pfd.events = POLLIN; + std::string UdpStructure::receiveMessage(int socket) { + std::string data; + pollfd pfd{}; + pfd.fd = socket; + pfd.events = POLLIN; - int ret = poll(&pfd, 1, 10000); + int ret = poll(&pfd, 1, 10000); - int bufferSize = 1024; - if (ret > 0 && (pfd.revents & POLLIN)) { - char* buffer = new char[bufferSize]; - ssize_t size = recv(socket, buffer, bufferSize, 0); + int bufferSize = 1024; + if (ret > 0 && (pfd.revents & POLLIN)) { + char* buffer = new char[bufferSize]; + ssize_t size = recv(socket, buffer, bufferSize, 0); - data = buffer; + data = buffer; - if (size <= 0) return data; - return data; + if (size <= 0) return data; + return data; + } + return data; } - return data; -} -std::vector UdpStructure::getDiscoveredAddresses() { - std::lock_guard lock(mtx); - return discoveredAddresses; -} + std::vector UdpStructure::getDiscoveredAddresses() { + std::lock_guard lock(mtx); + return discoveredAddresses; + } -void UdpStructure::removeDiscoveredAddress(std::string address) { - std::lock_guard lock(mtx); - discoveredAddresses.erase(find(discoveredAddresses.begin(), discoveredAddresses.end(), address)); -} + void UdpStructure::removeDiscoveredAddress(std::string address) { + std::lock_guard lock(mtx); + discoveredAddresses.erase(find(discoveredAddresses.begin(), discoveredAddresses.end(), address)); + } -std::string UdpStructure::getLocalIpAddress(std::string interface) { - struct ifaddrs *ifaddr = nullptr; + std::string UdpStructure::getLocalIpAddress(std::string interface) { + struct ifaddrs *ifaddr = nullptr; - // Get linked list of network interfaces - if (getifaddrs(&ifaddr) == -1) { - return ""; - } + // Get linked list of network interfaces + if (getifaddrs(&ifaddr) == -1) { + return ""; + } - std::string result; + std::string result; - // Iterate through interfaces - for (auto *ifa = ifaddr; ifa != nullptr; ifa = ifa->ifa_next) { - if (!ifa->ifa_addr) - continue; + // Iterate through interfaces + for (auto *ifa = ifaddr; ifa != nullptr; ifa = ifa->ifa_next) { + if (!ifa->ifa_addr) + continue; - if (ifa->ifa_addr->sa_family == AF_INET) { - auto *addr = reinterpret_cast(ifa->ifa_addr); - char ip[INET_ADDRSTRLEN]; - inet_ntop(AF_INET, &addr->sin_addr, ip, sizeof(ip)); + if (ifa->ifa_addr->sa_family == AF_INET) { + auto *addr = reinterpret_cast(ifa->ifa_addr); + char ip[INET_ADDRSTRLEN]; + inet_ntop(AF_INET, &addr->sin_addr, ip, sizeof(ip)); - // Docker containers typically use eth0 - if (std::string(ifa->ifa_name) == interface) { - result = ip; - break; + // Docker containers typically use eth0 + if (std::string(ifa->ifa_name) == interface) { + result = ip; + break; + } } } - } - - freeifaddrs(ifaddr); - return result; -} - -std::string UdpStructure::getBroadcastIpAddress() { - struct ifaddrs *ifaddr = nullptr; - std::string broadcastIP; - // Get network interfaces - if (getifaddrs(&ifaddr) == -1) { - return ""; + freeifaddrs(ifaddr); + return result; } - for (struct ifaddrs *ifa = ifaddr; ifa != nullptr; ifa = ifa->ifa_next) { - if (ifa->ifa_addr == nullptr) - continue; + std::string UdpStructure::getBroadcastIpAddress() { + struct ifaddrs *ifaddr = nullptr; + std::string broadcastIP; - // Only consider IPv4 interfaces that are up and support broadcast - if (ifa->ifa_addr->sa_family == AF_INET && - (ifa->ifa_flags & IFF_BROADCAST) && (ifa->ifa_flags & IFF_UP) && - !(ifa->ifa_flags & IFF_LOOPBACK)) { + // Get network interfaces + if (getifaddrs(&ifaddr) == -1) { + return ""; + } - // Ensure the broadcast address exists - if (ifa->ifa_broadaddr) { - struct sockaddr_in *bcast = - reinterpret_cast(ifa->ifa_broadaddr); - char ip[INET_ADDRSTRLEN]; - if (inet_ntop(AF_INET, &(bcast->sin_addr), ip, INET_ADDRSTRLEN)) { - broadcastIP = ip; - break; // stop at the first valid one + for (struct ifaddrs *ifa = ifaddr; ifa != nullptr; ifa = ifa->ifa_next) { + if (ifa->ifa_addr == nullptr) + continue; + + // Only consider IPv4 interfaces that are up and support broadcast + if (ifa->ifa_addr->sa_family == AF_INET && + (ifa->ifa_flags & IFF_BROADCAST) && (ifa->ifa_flags & IFF_UP) && + !(ifa->ifa_flags & IFF_LOOPBACK)) { + + // Ensure the broadcast address exists + if (ifa->ifa_broadaddr) { + struct sockaddr_in *bcast = + reinterpret_cast(ifa->ifa_broadaddr); + char ip[INET_ADDRSTRLEN]; + if (inet_ntop(AF_INET, &(bcast->sin_addr), ip, INET_ADDRSTRLEN)) { + broadcastIP = ip; + break; // stop at the first valid one + } } } } + + freeifaddrs(ifaddr); + return broadcastIP; } - freeifaddrs(ifaddr); - return broadcastIP; -} + bool UdpStructure::isValidIpV4(std::string &ipString) { + if (ipString.size() < 7) + return false; -bool UdpStructure::isValidIpV4(std::string &ipString) { - if (ipString.size() < 7) - return false; + int count = 0; + // Seperate Ip Octets + std::stringstream stringStream(ipString); + while (stringStream.good()) { + std::string octet; + getline(stringStream, octet, '.'); - int count = 0; - // Seperate Ip Octets - std::stringstream stringStream(ipString); - while (stringStream.good()) { - std::string octet; - getline(stringStream, octet, '.'); + if (octet.size() > 1) { + if (octet[0] == '0') + return false; + } - if (octet.size() > 1) { - if (octet[0] == '0') - return false; - } + for (int index = 0; index < octet.size(); index++) { + if (isalpha(octet[index])) + return false; + } - for (int index = 0; index < octet.size(); index++) { - if (isalpha(octet[index])) + if (stoi(octet) > 255) return false; + + count++; } - if (stoi(octet) > 255) + if (count != 4) return false; - count++; + return true; } - if (count != 4) - return false; - - return true; -} - -bool UdpStructure::hasSameIdentifier(std::string ipString) { - std::string identifierPattern = "^" + identifierEscapeRegex(this->identifier); - std::regex pattern(identifierPattern); - return std::regex_search(ipString, pattern); -} + bool UdpStructure::hasSameIdentifier(std::string ipString) { + std::string identifierPattern = "^" + identifierEscapeRegex(this->identifier); + std::regex pattern(identifierPattern); + return std::regex_search(ipString, pattern); + } -std::string UdpStructure::stripIdentifier(std::string ipString) { - std::string identifierPattern = "^" + identifierEscapeRegex(this->identifier); - std::regex pattern(identifierPattern); + std::string UdpStructure::stripIdentifier(std::string ipString) { + std::string identifierPattern = "^" + identifierEscapeRegex(this->identifier); + std::regex pattern(identifierPattern); - return std::regex_replace(ipString, pattern, ""); -} + return std::regex_replace(ipString, pattern, ""); + } -std::string UdpStructure::identifierEscapeRegex(const std::string& identifier) { - static const std::regex special_chars(R"([-[\]{}()*+?.,\^$|#\s])"); - return std::regex_replace(identifier, special_chars, R"(\$&)"); + std::string UdpStructure::identifierEscapeRegex(const std::string& identifier) { + static const std::regex special_chars(R"([-[\]{}()*+?.,\^$|#\s])"); + return std::regex_replace(identifier, special_chars, R"(\$&)"); + } } diff --git a/test/client/main.cpp b/test/client/main.cpp index be4330e..de187b9 100644 --- a/test/client/main.cpp +++ b/test/client/main.cpp @@ -7,12 +7,14 @@ #include #include +using namespace tud; + int main() { std::string interface; std::wcout << "Interface: "; std::cin >> interface; - auto clientDiscovery = std::make_shared(interface, 4000, 4001, "tud"); + auto clientDiscovery = std::make_shared(interface, 4000, 4001, "tud"); std::thread clientDiscoveryThread([clientDiscovery]() { clientDiscovery->discoveryCycle(); }); diff --git a/test/server/main.cpp b/test/server/main.cpp index 5beb0e1..1a2e7e1 100644 --- a/test/server/main.cpp +++ b/test/server/main.cpp @@ -7,12 +7,14 @@ #include #include +using namespace tud; + int main() { std::string interface; std::wcout << "Interface: "; std::cin >> interface; - auto serverDiscovery = std::make_shared(interface, 4000, 4001, "tud"); + auto serverDiscovery = std::make_shared(interface, 4000, 4001, "tud"); std::thread serverDiscoveryThread([serverDiscovery]() { serverDiscovery->discoveryCycle(); }); From a0adbe85be56d397f4708b500cf7fd100171a0d6 Mon Sep 17 00:00:00 2001 From: Sobottasgithub Date: Fri, 5 Jun 2026 20:24:58 +0200 Subject: [PATCH 06/13] update: rename udp_structure >> networking --- flake.nix | 2 +- lib/tud/include/client_discovery.h | 4 ++-- .../include/{udp_structure.h => networking.h} | 6 ++--- lib/tud/include/server_discovery.h | 4 ++-- .../src/{udp_structure.cpp => networking.cpp} | 22 +++++++++---------- 5 files changed, 19 insertions(+), 19 deletions(-) rename lib/tud/include/{udp_structure.h => networking.h} (93%) rename lib/tud/src/{udp_structure.cpp => networking.cpp} (84%) diff --git a/flake.nix b/flake.nix index 55d9552..7c10b77 100644 --- a/flake.nix +++ b/flake.nix @@ -11,7 +11,7 @@ system = "x86_64-linux"; pkgs = import nixpkgs { inherit system; }; - version = "0.4"; + version = "0.5"; commonDeps = with pkgs; [ cmake diff --git a/lib/tud/include/client_discovery.h b/lib/tud/include/client_discovery.h index c600bfb..416b5dd 100644 --- a/lib/tud/include/client_discovery.h +++ b/lib/tud/include/client_discovery.h @@ -1,13 +1,13 @@ #ifndef CLIENT_DISCOVERY_H #define CLIENT_DISCOVERY_H -#include "udp_structure.h" +#include "networking.h" #include #include namespace tud { - class ClientDiscovery: public UdpStructure + class ClientDiscovery: public Networking { public: ClientDiscovery(std::string interface, int inPort, int outPort, std::optional identifier); diff --git a/lib/tud/include/udp_structure.h b/lib/tud/include/networking.h similarity index 93% rename from lib/tud/include/udp_structure.h rename to lib/tud/include/networking.h index 041bc89..0be57e8 100644 --- a/lib/tud/include/udp_structure.h +++ b/lib/tud/include/networking.h @@ -1,5 +1,5 @@ -#ifndef UDP_STRUCTURE_H -#define UDP_STRUCTURE_H +#ifndef Networking_H +#define Networking_H #include #include @@ -7,7 +7,7 @@ #include namespace tud { - class UdpStructure + class Networking { public: std::vector getDiscoveredAddresses(); diff --git a/lib/tud/include/server_discovery.h b/lib/tud/include/server_discovery.h index 6931741..cd51b85 100644 --- a/lib/tud/include/server_discovery.h +++ b/lib/tud/include/server_discovery.h @@ -1,13 +1,13 @@ #ifndef SERVER_DISCOVERY_H #define SERVER_DISCOVERY_H -#include "udp_structure.h" +#include "networking.h" #include #include namespace tud { - class ServerDiscovery: public UdpStructure + class ServerDiscovery: public Networking { public: ServerDiscovery(std::string interface, int inPort, int outPort, std::optional identifier); diff --git a/lib/tud/src/udp_structure.cpp b/lib/tud/src/networking.cpp similarity index 84% rename from lib/tud/src/udp_structure.cpp rename to lib/tud/src/networking.cpp index 7ee9b9a..ae0bc8f 100644 --- a/lib/tud/src/udp_structure.cpp +++ b/lib/tud/src/networking.cpp @@ -1,4 +1,4 @@ -#include "../include/udp_structure.h" +#include "../include/networking.h" #include #include @@ -14,7 +14,7 @@ #include namespace tud { - int UdpStructure::sendMessageTo(int socket, const sockaddr_in& broadcast, std::string payload) { + int Networking::sendMessageTo(int socket, const sockaddr_in& broadcast, std::string payload) { if (sendto(socket, payload.data(), payload.size(), 0, (struct sockaddr*)&broadcast, sizeof(broadcast)) < 0) { std::wcout << "buffer: Sendto Failed!" << std::endl; return -1; @@ -23,7 +23,7 @@ namespace tud { return 0; } - std::string UdpStructure::receiveMessage(int socket) { + std::string Networking::receiveMessage(int socket) { std::string data; pollfd pfd{}; pfd.fd = socket; @@ -44,17 +44,17 @@ namespace tud { return data; } - std::vector UdpStructure::getDiscoveredAddresses() { + std::vector Networking::getDiscoveredAddresses() { std::lock_guard lock(mtx); return discoveredAddresses; } - void UdpStructure::removeDiscoveredAddress(std::string address) { + void Networking::removeDiscoveredAddress(std::string address) { std::lock_guard lock(mtx); discoveredAddresses.erase(find(discoveredAddresses.begin(), discoveredAddresses.end(), address)); } - std::string UdpStructure::getLocalIpAddress(std::string interface) { + std::string Networking::getLocalIpAddress(std::string interface) { struct ifaddrs *ifaddr = nullptr; // Get linked list of network interfaces @@ -86,7 +86,7 @@ namespace tud { return result; } - std::string UdpStructure::getBroadcastIpAddress() { + std::string Networking::getBroadcastIpAddress() { struct ifaddrs *ifaddr = nullptr; std::string broadcastIP; @@ -121,7 +121,7 @@ namespace tud { return broadcastIP; } - bool UdpStructure::isValidIpV4(std::string &ipString) { + bool Networking::isValidIpV4(std::string &ipString) { if (ipString.size() < 7) return false; @@ -154,20 +154,20 @@ namespace tud { return true; } - bool UdpStructure::hasSameIdentifier(std::string ipString) { + bool Networking::hasSameIdentifier(std::string ipString) { std::string identifierPattern = "^" + identifierEscapeRegex(this->identifier); std::regex pattern(identifierPattern); return std::regex_search(ipString, pattern); } - std::string UdpStructure::stripIdentifier(std::string ipString) { + std::string Networking::stripIdentifier(std::string ipString) { std::string identifierPattern = "^" + identifierEscapeRegex(this->identifier); std::regex pattern(identifierPattern); return std::regex_replace(ipString, pattern, ""); } - std::string UdpStructure::identifierEscapeRegex(const std::string& identifier) { + std::string Networking::identifierEscapeRegex(const std::string& identifier) { static const std::regex special_chars(R"([-[\]{}()*+?.,\^$|#\s])"); return std::regex_replace(identifier, special_chars, R"(\$&)"); } From 640a87ee87f1c761b6be7451094e64c274c6900c Mon Sep 17 00:00:00 2001 From: Patrick Schulze <76741977+Sobottasgithub@users.noreply.github.com> Date: Fri, 5 Jun 2026 20:27:01 +0200 Subject: [PATCH 07/13] update: fixup readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 43744bc..e151339 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ After including TUD to your project you can implement the server like this: ``` ```cpp -auto serverDiscovery = std::make_shared(interface, 4000, 4001, "yourNewIdenifier"); +auto serverDiscovery = std::make_shared(interface, 4000, 4001, "yourNewIdenifier"); std::thread serverDiscoveryThread([serverDiscovery]() { serverDiscovery->discoveryCycle(); }); @@ -19,7 +19,7 @@ And the client like this: ``` ```cpp -auto clientDiscovery = std::make_shared(interface, 4000, 4001, "yourNewIdenifier"); +auto clientDiscovery = std::make_shared(interface, 4000, 4001, "yourNewIdenifier"); std::thread clientDiscoveryThread([clientDiscovery]() { clientDiscovery->discoveryCycle(); }); From 9006172ea19f487252628ab2a867c0a93a64d82a Mon Sep 17 00:00:00 2001 From: Sobottasgithub Date: Sat, 18 Jul 2026 18:53:26 +0200 Subject: [PATCH 08/13] update: add tablog to tud, #2 --- flake.lock | 37 ++++++++++++++++++++++++++++++++++++- flake.nix | 15 +++++++++++++-- lib/tud/CMakeLists.txt | 2 ++ test/client/CMakeLists.txt | 1 + test/server/CMakeLists.txt | 1 + 5 files changed, 53 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index 1022845..e0fc2c4 100644 --- a/flake.lock +++ b/flake.lock @@ -16,9 +16,44 @@ "type": "github" } }, + "nixpkgs_2": { + "locked": { + "lastModified": 1784356753, + "narHash": "sha256-12KrbMiWLcf8m7pCvAtZh1ZrgF85ZXDXvfR/fWTKy84=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "61b7c44c4073f0b827768aff0049561b5110ea5a", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "root": { "inputs": { - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs", + "tablog": "tablog" + } + }, + "tablog": { + "inputs": { + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1784384014, + "narHash": "sha256-7m2OFL08r7MAeJvwUVXpCoBRq2iVHVcCDwxW+GoUNbk=", + "owner": "Sobottasgithub", + "repo": "tablog", + "rev": "dea2163cd34d978a97ee09b90d832f75d1890950", + "type": "github" + }, + "original": { + "owner": "Sobottasgithub", + "repo": "tablog", + "type": "github" } } }, diff --git a/flake.nix b/flake.nix index 7c10b77..97b6e8d 100644 --- a/flake.nix +++ b/flake.nix @@ -3,21 +3,32 @@ inputs = { nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; + + tablog = { + url = "github:Sobottasgithub/tablog"; + }; }; outputs = - { self, nixpkgs }: + { + self, + nixpkgs, + tablog, + }: let system = "x86_64-linux"; pkgs = import nixpkgs { inherit system; }; version = "0.5"; + libtablog = tablog.packages.${system}.lib; + commonDeps = with pkgs; [ cmake gcc gnumake libtasn1 + libtablog ]; mkTUDPackage = @@ -66,7 +77,7 @@ }; in { - inherit lib; + inherit lib libtablog; client = mkTUDPackage { pname = "tud-client"; diff --git a/lib/tud/CMakeLists.txt b/lib/tud/CMakeLists.txt index d02a99f..ea2b844 100644 --- a/lib/tud/CMakeLists.txt +++ b/lib/tud/CMakeLists.txt @@ -15,5 +15,7 @@ target_include_directories(tud PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include ) +target_link_libraries(tud PRIVATE tablog) + install(TARGETS tud DESTINATION lib) install(DIRECTORY include/ DESTINATION include) diff --git a/test/client/CMakeLists.txt b/test/client/CMakeLists.txt index 4e8109c..fd2c258 100644 --- a/test/client/CMakeLists.txt +++ b/test/client/CMakeLists.txt @@ -9,5 +9,6 @@ file(GLOB_RECURSE SOURCES "./*.cpp" "./*.h") add_executable(tud-client ${SOURCES}) target_link_libraries(tud-client PRIVATE tud) +target_link_libraries(tud-client PRIVATE tablog) install(TARGETS tud-client DESTINATION bin) diff --git a/test/server/CMakeLists.txt b/test/server/CMakeLists.txt index 5a3325b..fa83072 100644 --- a/test/server/CMakeLists.txt +++ b/test/server/CMakeLists.txt @@ -9,5 +9,6 @@ file(GLOB_RECURSE SOURCES "./*.cpp" "./*.h") add_executable(tud-server ${SOURCES}) target_link_libraries(tud-server PRIVATE tud) +target_link_libraries(tud-server PRIVATE tablog) install(TARGETS tud-server DESTINATION bin) From 5c0fef834836accd794d2acd32908846c167d851 Mon Sep 17 00:00:00 2001 From: Sobottasgithub Date: Sat, 18 Jul 2026 19:20:11 +0200 Subject: [PATCH 09/13] update: implement tablog, #2 --- lib/tud/include/networking.h | 4 ++++ lib/tud/src/client_discovery.cpp | 16 ++++++++++------ lib/tud/src/networking.cpp | 4 +++- lib/tud/src/server_discovery.cpp | 18 +++++++++++------- test/client/main.cpp | 11 ++++++++--- test/server/main.cpp | 11 ++++++++--- 6 files changed, 44 insertions(+), 20 deletions(-) diff --git a/lib/tud/include/networking.h b/lib/tud/include/networking.h index 0be57e8..29423ad 100644 --- a/lib/tud/include/networking.h +++ b/lib/tud/include/networking.h @@ -1,6 +1,8 @@ #ifndef Networking_H #define Networking_H +#include + #include #include #include @@ -18,6 +20,8 @@ namespace tud { bool isValidIpV4(std::string &ipString); protected: + tablog::Tablog* logger = &tablog::Tablog::getInstance(); + int sendMessageTo(int socket, const sockaddr_in& broadcast, std::string payload); std::string receiveMessage(int socket); diff --git a/lib/tud/src/client_discovery.cpp b/lib/tud/src/client_discovery.cpp index 2241160..4604f8c 100644 --- a/lib/tud/src/client_discovery.cpp +++ b/lib/tud/src/client_discovery.cpp @@ -1,5 +1,7 @@ #include "../include/client_discovery.h" +#include + #include #include #include @@ -8,6 +10,8 @@ namespace tud { ClientDiscovery::ClientDiscovery(std::string interface, int inPort, int outPort, std::optional identifier) { + logger->configure("ClientUdpDiscovery", true); + this->containerIP = getLocalIpAddress(interface); this->inPort = inPort; @@ -26,7 +30,7 @@ namespace tud { udpSocket = socket(AF_INET, SOCK_DGRAM, 0); if (udpSocket < 0) { - std::wcout << "Create socket failed!" << std::endl; + logger->log(tablog::ERROR, "Create socket failed!"); return; } @@ -39,7 +43,7 @@ namespace tud { nodeAddress.sin_port = htons(port); if (bind(udpSocket, (struct sockaddr*)&nodeAddress, sizeof(nodeAddress)) < 0) { - std::wcout << "UDP Socket bind failed!" << std::endl; + logger->log(tablog::ERROR, "UDP Socket bind failed!"); return; } @@ -50,13 +54,13 @@ namespace tud { // Create socket if ((udpSendSocket = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { - std::wcout << "Failed to create Socket!" << std::endl; + logger->log(tablog::ERROR, "Failed to create Socket!"); return; } // Allow reuse int reuse = 1; if (setsockopt(udpSendSocket, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0) { - std::wcout << "Setsockopt failed!" << std::endl; + logger->log(tablog::ERROR, "Setsockopt failed!"); return; } @@ -77,13 +81,13 @@ namespace tud { serverAddress.sin_port = htons(sendPort); if (inet_pton(AF_INET, masterIP.c_str(), &serverAddress.sin_addr) <= 0) { - std::wcout << "Invalid broadcast IP" << std::endl; + logger->log(tablog::ERROR, "Invalid broadcast IP"); return; } std::string message = this->identifier + containerIP; if (sendMessageTo(udpSendSocket, serverAddress, message.c_str()) != 0) { - std::wcout << "Broadcast failed!" << std::endl; + logger->log(tablog::ERROR, "Broadcast failed!"); return; } } diff --git a/lib/tud/src/networking.cpp b/lib/tud/src/networking.cpp index ae0bc8f..99dbce0 100644 --- a/lib/tud/src/networking.cpp +++ b/lib/tud/src/networking.cpp @@ -1,5 +1,7 @@ #include "../include/networking.h" +#include + #include #include #include @@ -16,7 +18,7 @@ namespace tud { int Networking::sendMessageTo(int socket, const sockaddr_in& broadcast, std::string payload) { if (sendto(socket, payload.data(), payload.size(), 0, (struct sockaddr*)&broadcast, sizeof(broadcast)) < 0) { - std::wcout << "buffer: Sendto Failed!" << std::endl; + logger->log(tablog::ERROR, "buffer: Sendto Failed!"); return -1; } diff --git a/lib/tud/src/server_discovery.cpp b/lib/tud/src/server_discovery.cpp index 77dd380..5ae724b 100644 --- a/lib/tud/src/server_discovery.cpp +++ b/lib/tud/src/server_discovery.cpp @@ -1,5 +1,7 @@ #include "../include/server_discovery.h" +#include + #include #include #include @@ -10,6 +12,8 @@ namespace tud { ServerDiscovery::ServerDiscovery(std::string interface, int inPort, int outPort, std::optional identifier) { + logger->configure("ServerUdpDiscovery", true); + this->containerIP = getLocalIpAddress(interface); this->broadcastIP = getBroadcastIpAddress(); @@ -32,20 +36,20 @@ namespace tud { // Create socket if ((serverSocket = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { - std::wcout << "Failed to create Socket!" << std::endl; + logger->log(tablog::ERROR, "Failed to create Socket!"); return; } // Enable broadcast int broadcastBind = 1; if (setsockopt(serverSocket, SOL_SOCKET, SO_BROADCAST, &broadcastBind, sizeof(broadcastBind)) < 0) { - std::wcout << "Failed to enable broadcast!" << std::endl; + logger->log(tablog::ERROR, "Failed to enable broadcast!"); close(serverSocket); return; } // Allow reuse int reuse = 1; if (setsockopt(serverSocket, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0) { - std::wcout << "Setsockopt failed!" << std::endl; + logger->log(tablog::ERROR, "Setsockopt failed!"); close(serverSocket); return; } @@ -57,7 +61,7 @@ namespace tud { broadcast.sin_port = htons(port); if (inet_pton(AF_INET, broadcastIP.c_str(), &broadcast.sin_addr) <= 0) { - std::wcout << "Invalid broadcast IP" << std::endl; + logger->log(tablog::ERROR, "Invalid broadcast IP"); close(serverSocket); return; } @@ -65,7 +69,7 @@ namespace tud { while (true) { std::string message = this->identifier + containerIP; if (sendMessageTo(serverSocket, broadcast, message.c_str()) != 0) { - std::wcout << "Broadcast failed!" << std::endl; + logger->log(tablog::ERROR, "Broadcast failed!"); return; } usleep(100000); @@ -80,7 +84,7 @@ namespace tud { udpSocket = socket(AF_INET, SOCK_DGRAM, 0); if (udpSocket < 0) { - std::wcout << "Create socket failed!" << std::endl; + logger->log(tablog::ERROR, "Create socket failed!"); return; } @@ -93,7 +97,7 @@ namespace tud { nodeAddress.sin_port = htons(port); if (bind(udpSocket, (struct sockaddr*)&nodeAddress, sizeof(nodeAddress)) < 0) { - std::wcout << "UDP Socket bind failed!" << std::endl; + logger->log(tablog::ERROR, "UDP Socket bind failed!"); return; } diff --git a/test/client/main.cpp b/test/client/main.cpp index de187b9..52d792c 100644 --- a/test/client/main.cpp +++ b/test/client/main.cpp @@ -1,5 +1,7 @@ #include "client_discovery.h" +#include + #include #include #include @@ -10,8 +12,11 @@ using namespace tud; int main() { + tablog::Tablog* logger = &tablog::Tablog::getInstance(); + logger->configure("TUD-client", true); + std::string interface; - std::wcout << "Interface: "; + std::cout << "Interface: "; std::cin >> interface; auto clientDiscovery = std::make_shared(interface, 4000, 4001, "tud"); @@ -19,13 +24,13 @@ int main() { clientDiscovery->discoveryCycle(); }); - std::wcout << "~~ Discovered Addresses ~~" << std::endl; + logger->log(tablog::INFO, "~~ Discovered Addresses ~~"); std::vector discoveredAddresses; while(true) { std::vector newDiscoveries = clientDiscovery->getDiscoveredAddresses(); for (int index = 0; index < newDiscoveries.size(); index++) { if(std::find(discoveredAddresses.begin(), discoveredAddresses.end(), newDiscoveries[index]) == discoveredAddresses.end()) { - std::wcout << "--> " << newDiscoveries[index].c_str() << std::endl; + logger->log(tablog::INFO, "--> " + newDiscoveries[index]); discoveredAddresses.push_back(newDiscoveries[index]); } } diff --git a/test/server/main.cpp b/test/server/main.cpp index 1a2e7e1..e5fd16f 100644 --- a/test/server/main.cpp +++ b/test/server/main.cpp @@ -1,5 +1,7 @@ #include "server_discovery.h" +#include + #include #include #include @@ -10,8 +12,11 @@ using namespace tud; int main() { + tablog::Tablog* logger = &tablog::Tablog::getInstance(); + logger->configure("TUD-server", true); + std::string interface; - std::wcout << "Interface: "; + std::cout << "Interface: "; std::cin >> interface; auto serverDiscovery = std::make_shared(interface, 4000, 4001, "tud"); @@ -19,13 +24,13 @@ int main() { serverDiscovery->discoveryCycle(); }); - std::wcout << "~~ Discovered Addresses ~~" << std::endl; + logger->log(tablog::INFO, "~~ Discovered Addresses ~~"); std::vector discoveredAddresses; while(true) { std::vector newDiscoveries = serverDiscovery->getDiscoveredAddresses(); for (int index = 0; index < newDiscoveries.size(); index++) { if(std::find(discoveredAddresses.begin(), discoveredAddresses.end(), newDiscoveries[index]) == discoveredAddresses.end()) { - std::wcout << "--> " << newDiscoveries[index].c_str() << std::endl; + logger->log(tablog::INFO, "--> " + newDiscoveries[index]); discoveredAddresses.push_back(newDiscoveries[index]); } } From f4afa7db212513f477e47440d279643e40190018 Mon Sep 17 00:00:00 2001 From: Sobottasgithub Date: Sat, 18 Jul 2026 19:20:55 +0200 Subject: [PATCH 10/13] update: version 0.6, #2 --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 97b6e8d..c8d6e6b 100644 --- a/flake.nix +++ b/flake.nix @@ -19,7 +19,7 @@ system = "x86_64-linux"; pkgs = import nixpkgs { inherit system; }; - version = "0.5"; + version = "0.6"; libtablog = tablog.packages.${system}.lib; From 5c4c09b8f6a3474cd1e67d17278e90355b4d26c2 Mon Sep 17 00:00:00 2001 From: Sobottasgithub Date: Sat, 18 Jul 2026 19:46:03 +0200 Subject: [PATCH 11/13] update: dont configure logger in client/server_discovery, #2 --- flake.nix | 2 +- lib/tud/src/client_discovery.cpp | 2 +- lib/tud/src/server_discovery.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.nix b/flake.nix index c8d6e6b..e191ebf 100644 --- a/flake.nix +++ b/flake.nix @@ -19,7 +19,7 @@ system = "x86_64-linux"; pkgs = import nixpkgs { inherit system; }; - version = "0.6"; + version = "0.7"; libtablog = tablog.packages.${system}.lib; diff --git a/lib/tud/src/client_discovery.cpp b/lib/tud/src/client_discovery.cpp index 4604f8c..71d0e6b 100644 --- a/lib/tud/src/client_discovery.cpp +++ b/lib/tud/src/client_discovery.cpp @@ -10,7 +10,7 @@ namespace tud { ClientDiscovery::ClientDiscovery(std::string interface, int inPort, int outPort, std::optional identifier) { - logger->configure("ClientUdpDiscovery", true); + // logger->configure("ClientUdpDiscovery", true); this->containerIP = getLocalIpAddress(interface); diff --git a/lib/tud/src/server_discovery.cpp b/lib/tud/src/server_discovery.cpp index 5ae724b..b338b3a 100644 --- a/lib/tud/src/server_discovery.cpp +++ b/lib/tud/src/server_discovery.cpp @@ -12,7 +12,7 @@ namespace tud { ServerDiscovery::ServerDiscovery(std::string interface, int inPort, int outPort, std::optional identifier) { - logger->configure("ServerUdpDiscovery", true); + // logger->configure("ServerUdpDiscovery", true); this->containerIP = getLocalIpAddress(interface); this->broadcastIP = getBroadcastIpAddress(); From 046eec9778a48235215626c976cdaf831e5e531d Mon Sep 17 00:00:00 2001 From: Sobottasgithub Date: Mon, 20 Jul 2026 17:21:34 +0200 Subject: [PATCH 12/13] update: implement logger registry, #2 --- flake.lock | 6 +++--- flake.nix | 2 +- lib/tud/include/networking.h | 3 ++- lib/tud/src/client_discovery.cpp | 10 ++++++++-- lib/tud/src/server_discovery.cpp | 8 +++++++- test/client/main.cpp | 5 ++++- test/server/main.cpp | 5 ++++- 7 files changed, 29 insertions(+), 10 deletions(-) diff --git a/flake.lock b/flake.lock index e0fc2c4..ac3f570 100644 --- a/flake.lock +++ b/flake.lock @@ -43,11 +43,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1784384014, - "narHash": "sha256-7m2OFL08r7MAeJvwUVXpCoBRq2iVHVcCDwxW+GoUNbk=", + "lastModified": 1784558310, + "narHash": "sha256-4d0QJZu5j5vDgJ/bp2kkMiBcivD9CDZSOrkCFcNKZXQ=", "owner": "Sobottasgithub", "repo": "tablog", - "rev": "dea2163cd34d978a97ee09b90d832f75d1890950", + "rev": "ded1d9094b5a76c323be795b674ee3fa7514c950", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index e191ebf..52f2505 100644 --- a/flake.nix +++ b/flake.nix @@ -19,7 +19,7 @@ system = "x86_64-linux"; pkgs = import nixpkgs { inherit system; }; - version = "0.7"; + version = "0.8.0"; libtablog = tablog.packages.${system}.lib; diff --git a/lib/tud/include/networking.h b/lib/tud/include/networking.h index 29423ad..0ac6018 100644 --- a/lib/tud/include/networking.h +++ b/lib/tud/include/networking.h @@ -7,6 +7,7 @@ #include #include #include +#include namespace tud { class Networking @@ -20,7 +21,7 @@ namespace tud { bool isValidIpV4(std::string &ipString); protected: - tablog::Tablog* logger = &tablog::Tablog::getInstance(); + std::shared_ptr logger; int sendMessageTo(int socket, const sockaddr_in& broadcast, std::string payload); std::string receiveMessage(int socket); diff --git a/lib/tud/src/client_discovery.cpp b/lib/tud/src/client_discovery.cpp index 71d0e6b..a707dcc 100644 --- a/lib/tud/src/client_discovery.cpp +++ b/lib/tud/src/client_discovery.cpp @@ -1,5 +1,6 @@ #include "../include/client_discovery.h" +#include #include #include @@ -7,11 +8,16 @@ #include #include #include +#include namespace tud { ClientDiscovery::ClientDiscovery(std::string interface, int inPort, int outPort, std::optional identifier) { - // logger->configure("ClientUdpDiscovery", true); - + tablog::TablogRegistry* registry = &tablog::TablogRegistry::getInstance(); + std::shared_ptr logger = std::make_shared(); + logger->configure("ClientUdpDiscovery", true); + registry->registerLogger("ClientUdpDiscovery", logger); + this->logger = logger; + this->containerIP = getLocalIpAddress(interface); this->inPort = inPort; diff --git a/lib/tud/src/server_discovery.cpp b/lib/tud/src/server_discovery.cpp index b338b3a..7be9b67 100644 --- a/lib/tud/src/server_discovery.cpp +++ b/lib/tud/src/server_discovery.cpp @@ -1,5 +1,6 @@ #include "../include/server_discovery.h" +#include #include #include @@ -9,10 +10,15 @@ #include #include #include +#include namespace tud { ServerDiscovery::ServerDiscovery(std::string interface, int inPort, int outPort, std::optional identifier) { - // logger->configure("ServerUdpDiscovery", true); + tablog::TablogRegistry* registry = &tablog::TablogRegistry::getInstance(); + std::shared_ptr logger = std::make_shared(); + logger->configure("ServerUdpDiscovery", true); + registry->registerLogger("ServerUdpDiscovery", logger); + this->logger = logger; this->containerIP = getLocalIpAddress(interface); this->broadcastIP = getBroadcastIpAddress(); diff --git a/test/client/main.cpp b/test/client/main.cpp index 52d792c..e3c842a 100644 --- a/test/client/main.cpp +++ b/test/client/main.cpp @@ -1,5 +1,6 @@ #include "client_discovery.h" +#include #include #include @@ -12,8 +13,10 @@ using namespace tud; int main() { - tablog::Tablog* logger = &tablog::Tablog::getInstance(); + tablog::TablogRegistry* registry = &tablog::TablogRegistry::getInstance(); + std::shared_ptr logger = std::make_shared(); logger->configure("TUD-client", true); + registry->registerLogger("TUD-client", logger); std::string interface; std::cout << "Interface: "; diff --git a/test/server/main.cpp b/test/server/main.cpp index e5fd16f..1c4b7c9 100644 --- a/test/server/main.cpp +++ b/test/server/main.cpp @@ -1,5 +1,6 @@ #include "server_discovery.h" +#include #include #include @@ -12,8 +13,10 @@ using namespace tud; int main() { - tablog::Tablog* logger = &tablog::Tablog::getInstance(); + tablog::TablogRegistry* registry = &tablog::TablogRegistry::getInstance(); + std::shared_ptr logger = std::make_shared(); logger->configure("TUD-server", true); + registry->registerLogger("TUD-server", logger); std::string interface; std::cout << "Interface: "; From 962baa6fe7015c5723f996ab89f74aac54e7c6cc Mon Sep 17 00:00:00 2001 From: Patrick Schulze Date: Thu, 23 Jul 2026 15:27:27 +0200 Subject: [PATCH 13/13] update: update tablog --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index ac3f570..a794f74 100644 --- a/flake.lock +++ b/flake.lock @@ -43,11 +43,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1784558310, - "narHash": "sha256-4d0QJZu5j5vDgJ/bp2kkMiBcivD9CDZSOrkCFcNKZXQ=", + "lastModified": 1784813121, + "narHash": "sha256-ixwsmElsnlQE0MHPjS6m5+XmS47bFPHBYtZIxCTwLB8=", "owner": "Sobottasgithub", "repo": "tablog", - "rev": "ded1d9094b5a76c323be795b674ee3fa7514c950", + "rev": "e47b0796e6a0820315a846fb02a9c9c89b5bda33", "type": "github" }, "original": {