feat: enhance domain packet parsing with NLPacket header validation and improved logging

This commit is contained in:
MayaTheShy
2025-11-08 17:49:56 -05:00
parent ec904008b7
commit b94a1d8ca6

View File

@@ -265,42 +265,48 @@ void OverteClient::parseNetworkPackets() {
} }
void OverteClient::parseDomainPacket(const char* data, size_t len) { void OverteClient::parseDomainPacket(const char* data, size_t len) {
if (len < 1) return; if (len < 6) return; // NLPacket header is minimum 6 bytes
unsigned char packetType = static_cast<unsigned char>(data[0]); // Parse NLPacket header
auto header = NLPacket::parseHeader(data, len);
if (!header) {
std::cerr << "[OverteClient] Failed to parse NLPacket header" << std::endl;
return;
}
// Domain-level packet types PacketType packetType = NLPacket::getType(data, len);
const unsigned char PACKET_TYPE_PING = 0x01; std::cout << "[OverteClient] Domain packet type: " << static_cast<int>(packetType)
const unsigned char PACKET_TYPE_PING_REPLY = 0x02; << " (0x" << std::hex << static_cast<int>(packetType) << std::dec << ")"
const unsigned char PACKET_TYPE_DOMAIN_LIST = 0x03; << " version: " << (int)header->version << std::endl;
const unsigned char PACKET_TYPE_DOMAIN_CONNECTION_DENIED = 0x06;
const unsigned char PACKET_TYPE_DOMAIN_SERVER_REQUIRE_DT = 0x07;
const unsigned char PACKET_TYPE_DOMAIN_CONNECT_ACK = 0x0A;
std::cout << "[OverteClient] Domain packet type: 0x" << std::hex << (int)packetType << std::dec << 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
size_t payloadLen = len - 6;
switch (packetType) { switch (packetType) {
case PACKET_TYPE_DOMAIN_LIST: case PacketType::DomainList:
handleDomainListReply(data + 1, len - 1); handleDomainListReply(payload, payloadLen);
break; break;
case PACKET_TYPE_DOMAIN_CONNECTION_DENIED: case PacketType::DomainConnectionDenied:
handleDomainConnectionDenied(data + 1, len - 1); handleDomainConnectionDenied(payload, payloadLen);
break; break;
case PACKET_TYPE_DOMAIN_CONNECT_ACK: case PacketType::DomainServerConnectionDenied:
std::cout << "[OverteClient] Domain connection acknowledged!" << std::endl; handleDomainConnectionDenied(payload, payloadLen);
m_domainConnected = true;
// Request domain list after successful connection
sendDomainListRequest();
break; break;
case PACKET_TYPE_PING_REPLY: case PacketType::DomainServerRequireDTLS:
std::cout << "[OverteClient] Domain server requires DTLS (not yet implemented)" << std::endl;
break;
case PacketType::PingReply:
// Keep-alive ping reply // Keep-alive ping reply
std::cout << "[OverteClient] Ping reply received" << std::endl;
break; break;
default: default:
std::cout << "[OverteClient] Unknown domain packet type: 0x" << std::hex << (int)packetType << std::dec << std::endl; std::cout << "[OverteClient] Unknown domain packet type: " << static_cast<int>(packetType) << std::endl;
break; break;
} }
} }