Test fixing writing bug
This commit is contained in:
@@ -153,15 +153,28 @@ int main(int argc, char** argv) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const uint8_t* ip = packet.data();
|
const uint8_t* ip = packet.data();
|
||||||
uint32_t srcIP = ntohl(*(uint32_t*)(ip + 12)); // IPv4 source address offset (packet comes FROM client)
|
uint32_t srcIP = ntohl(*(uint32_t*)(ip + 12)); // IPv4 source address offset
|
||||||
|
uint32_t dstIP = ntohl(*(uint32_t*)(ip + 16)); // IPv4 destination address offset
|
||||||
|
|
||||||
auto session = SessionRegistry::getInstance().getByIP(srcIP);
|
// First, check if destination IP is a registered client (e.g., server responding to client or client-to-client)
|
||||||
if (!session) {
|
auto dstSession = SessionRegistry::getInstance().getByIP(dstIP);
|
||||||
Utils::warn("TUN: No session found for source IP " + VirtualInterface::ipv4ToString(srcIP));
|
if (dstSession) {
|
||||||
|
// Destination is a registered client, forward to that client's session
|
||||||
|
udpServer->sendData(dstSession->sessionID, std::string(packet.begin(), packet.end()));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
udpServer->sendData(session->sessionID, std::string(packet.begin(), packet.end()));
|
// Destination is not a registered client, check if source is (for external routing)
|
||||||
|
auto srcSession = SessionRegistry::getInstance().getByIP(srcIP);
|
||||||
|
if (srcSession) {
|
||||||
|
// Source is a registered client, write to TUN interface to forward to external destination
|
||||||
|
tun->writePacket(packet);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Neither source nor destination is registered, drop the packet
|
||||||
|
Utils::warn("TUN: No session found for source IP " + VirtualInterface::ipv4ToString(srcIP) +
|
||||||
|
" or destination IP " + VirtualInterface::ipv4ToString(dstIP));
|
||||||
}
|
}
|
||||||
|
|
||||||
log("Shutting down server...");
|
log("Shutting down server...");
|
||||||
|
|||||||
Reference in New Issue
Block a user