working commit

This commit is contained in:
Олег Бородин
2026-05-20 18:32:34 +02:00
parent 4bdd82ddb9
commit 46e1193cb2
2 changed files with 24 additions and 25 deletions
+16 -23
View File
@@ -13,6 +13,11 @@ extern "C" {
#include <uxlogger.hpp>
#include <networkaux.hpp>
TunNetwork::TunNetwork(std::string iladdr, std::string iraddr) {
laddr = iladdr;
raddr = iraddr;
used = false;
}
TunService::TunService(int svcport, std::string itunnelnet, std::vector<std::string> ilocalnets) {
listenport = svcport;
@@ -42,7 +47,9 @@ std::expected<void, std::string> TunService::Init(void) {
auto raddrRes = nethost(netaddr, prefix, i + 2);
auto laddr = laddrRes.value();
auto raddr = raddrRes.value();
uxlogger.Debug(std::format("Networks: {} {}", laddr, raddr));
TunNetwork tunnet(laddr, raddr);
tunnets.push_back(tunnet);
uxlogger.Debug(std::format("Aviliable address: {} -- {}", laddr, raddr));
}
return {};
}
@@ -102,31 +109,17 @@ std::expected<void, std::string> TunService::Listen(void) {
void TunService::Handle(int sock) {
auto networkRes = network(tunnelnet);
if (!networkRes) {
uxlogger.Error(networkRes.error());
return;
}
auto prefixRes = netprefix(tunnelnet);
if (!prefixRes) {
uxlogger.Error(prefixRes.error());
return;
}
int num = (sock - 3);
auto localaddrRes = nethost(networkRes.value(), prefixRes.value(), num);
if (!networkRes) {
uxlogger.Error(networkRes.error());
return;
}
auto remoteaddrRes = nethost(networkRes.value(), prefixRes.value(), num + 1);
if (!remoteaddrRes) {
uxlogger.Error(remoteaddrRes.error());
return;
std::string laddr, raddr;
for (auto& net: tunnets) {
if (!net.used) {
laddr = net.laddr;
raddr = net.raddr;
net.used = true;
break;
}
}
uxlogger.Debug("Start socker handler");
SocketHandler handler;
std::string laddr = localaddrRes.value();
std::string raddr = remoteaddrRes.value();
handler.Handle(sock, laddr, raddr, localnets);
uxlogger.Debug("Stop socket handler");
close(sock);