From a489d6f613fe49ee477271b853cc67c32e1ee95b Mon Sep 17 00:00:00 2001 From: MayaTheShy Date: Sat, 8 Nov 2025 19:05:46 -0500 Subject: [PATCH] fix: update sendDomainConnectRequest to use correct IPv4Protocol tag and enhance protocol signature logging --- src/OverteClient.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/OverteClient.cpp b/src/OverteClient.cpp index 9ebe1ae..1ea1dd4 100644 --- a/src/OverteClient.cpp +++ b/src/OverteClient.cpp @@ -630,9 +630,11 @@ void OverteClient::sendDomainConnectRequest() { } // Helper lambda to write QHostAddress (IPv4) in QDataStream format: [protocol:quint8=1][IPv4:quint32] auto writeQHostAddressIPv4 = [&qs](uint32_t hostOrderIPv4){ - // QDataStream for QHostAddress writes a protocol tag (quint8). In Qt5, IPv4Protocol serializes as 0. - qs.writeUInt8(0); // IPv4Protocol tag in Qt's QDataStream format - qs.writeUInt32BE(hostOrderIPv4); // already host order -> big endian conversion inside writer + // QDataStream for QHostAddress writes a protocol tag (quint8). + // QAbstractSocket::NetworkLayerProtocol: AnyIPProtocol=0, IPv4Protocol=1, IPv6Protocol=2. + // We want IPv4Protocol = 1. + qs.writeUInt8(1); + qs.writeUInt32BE(hostOrderIPv4); }; // 10. Public socket: type (quint8) + SockAddr (QHostAddress + quint16 port, WITHOUT socket type per SockAddr QDataStream operator) @@ -667,8 +669,18 @@ void OverteClient::sendDomainConnectRequest() { // Print MD5 signature in hex for diff against reference Overte client std::ostringstream md5hex; md5hex << std::hex << std::setfill('0'); for (uint8_t byte : protocolSig) md5hex << std::setw(2) << (int)byte; - std::cout << "[OverteClient] Protocol signature: " << protocolSig.size() << " bytes (MD5)" << std::endl; - std::cout << "[OverteClient] Protocol signature (hex): " << md5hex.str() << std::endl; + // Base64 encode MD5 for comparison with Overte's protocolVersionsSignatureBase64() + auto base64Encode = [](const std::vector& in){ + static const char* tbl = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + std::string out; out.reserve(((in.size()+2)/3)*4); + size_t i=0; while(i> (18 - k*6)) & 0x3F; out.push_back(tbl[idx]); } + for(int k=0;k