From 737f2fa3b537feec54502edfe330bd16fe3ba2b8 Mon Sep 17 00:00:00 2001 From: MayaTheShy Date: Sun, 9 Nov 2025 23:30:47 -0500 Subject: [PATCH] feat: enhance domain packet parsing to handle control packets and send ACK for reliable packets --- src/OverteClient.cpp | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/OverteClient.cpp b/src/OverteClient.cpp index fa806bf..3dc67ab 100644 --- a/src/OverteClient.cpp +++ b/src/OverteClient.cpp @@ -463,10 +463,29 @@ void OverteClient::parseDomainPacket(const char* data, size_t len) { return; } + // Check if this is a control packet (bit 31 set in sequenceAndFlags) + bool isControlPacket = (header.sequenceAndFlags & 0x80000000) != 0; + bool isReliable = (header.sequenceAndFlags & 0x40000000) != 0; + uint32_t sequenceNumber = header.sequenceAndFlags & 0x1FFFFFFF; // 29 bits + + if (isControlPacket) { + // This is a control packet (ACK, Handshake, etc.) - just log it for now + std::cout << "[OverteClient] Received control packet (ACK/Handshake)" << std::endl; + return; + } + + // If this is a reliable packet, send ACK + if (isReliable) { + sendACK(sequenceNumber); + } + PacketType packetType = NLPacket::getType(udata, len); std::cout << "[OverteClient] Domain packet type: " << static_cast(packetType) << " (0x" << std::hex << static_cast(packetType) << std::dec << ")" - << " version: " << (int)header.version << std::endl; + << " version: " << (int)header.version + << " seq: " << sequenceNumber + << (isReliable ? " [RELIABLE]" : "") + << std::endl; // Payload starts after header (6 bytes base, +2 if has source ID) const char* payload = data + 6; // Assuming no source ID for now