From c85f622a60614742bb89230209b8276e6dc2eba1 Mon Sep 17 00:00:00 2001 From: DcruBro Date: Thu, 13 Nov 2025 15:12:00 +0100 Subject: [PATCH] test2 --- include/columnlynx/client/net/tcp/tcp_client.hpp | 4 ++-- include/columnlynx/client/net/udp/udp_client.hpp | 4 ++-- include/columnlynx/server/net/udp/udp_server.hpp | 4 ++-- panic_dump.txt | 1 + src/client/main.cpp | 10 +++++----- src/server/main.cpp | 10 ++++++---- src/server/server/net/udp/udp_server.cpp | 1 + 7 files changed, 19 insertions(+), 15 deletions(-) create mode 100644 panic_dump.txt diff --git a/include/columnlynx/client/net/tcp/tcp_client.hpp b/include/columnlynx/client/net/tcp/tcp_client.hpp index a0eabcb..965b7fc 100644 --- a/include/columnlynx/client/net/tcp/tcp_client.hpp +++ b/include/columnlynx/client/net/tcp/tcp_client.hpp @@ -28,7 +28,7 @@ namespace ColumnLynx::Net::TCP { std::array* aesKey, uint64_t* sessionIDRef, bool* insecureMode, - VirtualInterface* tun = nullptr) + std::shared_ptr tun = nullptr) : mResolver(ioContext), mSocket(ioContext), @@ -74,6 +74,6 @@ namespace ColumnLynx::Net::TCP { int mMissedHeartbeats = 0; bool mIsHostDomain; Protocol::TunConfig mTunConfig; - VirtualInterface* mTun = nullptr; + std::shared_ptr mTun = nullptr; }; } \ No newline at end of file diff --git a/include/columnlynx/client/net/udp/udp_client.hpp b/include/columnlynx/client/net/udp/udp_client.hpp index ad21fda..eddaec9 100644 --- a/include/columnlynx/client/net/udp/udp_client.hpp +++ b/include/columnlynx/client/net/udp/udp_client.hpp @@ -19,7 +19,7 @@ namespace ColumnLynx::Net::UDP { const std::string& port, std::array* aesKeyRef, uint64_t* sessionIDRef, - VirtualInterface* tunRef = nullptr) + std::shared_ptr tunRef = nullptr) : mSocket(ioContext), mResolver(ioContext), mHost(host), mPort(port), mAesKeyRef(aesKeyRef), mSessionIDRef(sessionIDRef), mTunRef(tunRef) { mStartReceive(); } void start(); @@ -37,7 +37,7 @@ namespace ColumnLynx::Net::UDP { std::string mPort; std::array* mAesKeyRef; uint64_t* mSessionIDRef; - VirtualInterface* mTunRef; + std::shared_ptr mTunRef = nullptr; std::array mRecvBuffer; // Adjust size as needed }; } \ No newline at end of file diff --git a/include/columnlynx/server/net/udp/udp_server.hpp b/include/columnlynx/server/net/udp/udp_server.hpp index 640bb9c..ab99610 100644 --- a/include/columnlynx/server/net/udp/udp_server.hpp +++ b/include/columnlynx/server/net/udp/udp_server.hpp @@ -13,7 +13,7 @@ namespace ColumnLynx::Net::UDP { class UDPServer { public: - UDPServer(asio::io_context& ioContext, uint16_t port, bool* hostRunning, bool ipv4Only = false, VirtualInterface* tun = nullptr) + UDPServer(asio::io_context& ioContext, uint16_t port, bool* hostRunning, bool ipv4Only = false, std::shared_ptr tun = nullptr) : mSocket(ioContext), mHostRunning(hostRunning), mTun(tun) { asio::error_code ec; @@ -53,6 +53,6 @@ namespace ColumnLynx::Net::UDP { asio::ip::udp::endpoint mRemoteEndpoint; std::array mRecvBuffer; // Adjust size as needed bool* mHostRunning; - VirtualInterface* mTun; + std::shared_ptr mTun; }; } \ No newline at end of file diff --git a/panic_dump.txt b/panic_dump.txt new file mode 100644 index 0000000..851c75c --- /dev/null +++ b/panic_dump.txt @@ -0,0 +1 @@ += \ No newline at end of file diff --git a/src/client/main.cpp b/src/client/main.cpp index 9d93866..bcd4b6e 100644 --- a/src/client/main.cpp +++ b/src/client/main.cpp @@ -63,8 +63,8 @@ int main(int argc, char** argv) { WintunInitialize(); #endif - VirtualInterface tun("utun1"); - log("Using virtual interface: " + tun.getName()); + std::shared_ptr tun = std::make_shared("utun0"); + log("Using virtual interface: " + tun->getName()); LibSodiumWrapper sodiumWrapper = LibSodiumWrapper(); @@ -72,8 +72,8 @@ int main(int argc, char** argv) { uint64_t sessionID = 0; asio::io_context io; - auto client = std::make_shared(io, host, port, &sodiumWrapper, &aesKey, &sessionID, &insecureMode, &tun); - auto udpClient = std::make_shared(io, host, port, &aesKey, &sessionID, &tun); + auto client = std::make_shared(io, host, port, &sodiumWrapper, &aesKey, &sessionID, &insecureMode, tun); + auto udpClient = std::make_shared(io, host, port, &aesKey, &sessionID, tun); client->start(); udpClient->start(); @@ -89,7 +89,7 @@ int main(int argc, char** argv) { // Client is running // TODO: SIGINT or SIGTERM seems to not kill this instantly! while ((client->isConnected() || !client->isHandshakeComplete()) && !done) { - auto packet = tun.readPacket(); + auto packet = tun->readPacket(); Nonce nonce{}; randombytes_buf(nonce.data(), nonce.size()); diff --git a/src/server/main.cpp b/src/server/main.cpp index ff20232..b2d5b2f 100644 --- a/src/server/main.cpp +++ b/src/server/main.cpp @@ -61,8 +61,8 @@ int main(int argc, char** argv) { WintunInitialize(); #endif - VirtualInterface tun("utun0"); - log("Using virtual interface: " + tun.getName()); + std::shared_ptr tun = std::make_shared("utun0"); + log("Using virtual interface: " + tun->getName()); // Generate a temporary keypair, replace with actual CA signed keys later (Note, these are stored in memory) LibSodiumWrapper sodiumWrapper = LibSodiumWrapper(); @@ -74,7 +74,7 @@ int main(int argc, char** argv) { asio::io_context io; auto server = std::make_shared(io, serverPort(), &sodiumWrapper, &hostRunning, ipv4Only); - auto udpServer = std::make_shared(io, serverPort(), &hostRunning, ipv4Only, &tun); + auto udpServer = std::make_shared(io, serverPort(), &hostRunning, ipv4Only, tun); asio::signal_set signals(io, SIGINT, SIGTERM); signals.async_wait([&](const std::error_code&, int) { @@ -84,6 +84,8 @@ int main(int argc, char** argv) { hostRunning = false; server->stop(); udpServer->stop(); + tun.reset(); + tun = nullptr; }); }); @@ -97,7 +99,7 @@ int main(int argc, char** argv) { log("Server started on port " + std::to_string(serverPort())); while (!done) { - auto packet = tun.readPacket(); + auto packet = tun->readPacket(); if (packet.empty()) { continue; } diff --git a/src/server/server/net/udp/udp_server.cpp b/src/server/server/net/udp/udp_server.cpp index 161737f..de5ca67 100644 --- a/src/server/server/net/udp/udp_server.cpp +++ b/src/server/server/net/udp/udp_server.cpp @@ -62,6 +62,7 @@ namespace ColumnLynx::Net::UDP { // For now, just log the decrypted payload std::string payloadStr(plaintext.begin(), plaintext.end()); Utils::log("UDP: Received packet from " + mRemoteEndpoint.address().to_string() + " - Payload: " + payloadStr); + if (mTun) { mTun->writePacket(plaintext); // Send to virtual interface }