From 19ce3182745111f2c6645d7ffabf2fd5d8301518 Mon Sep 17 00:00:00 2001 From: MayaTheShy Date: Sat, 8 Nov 2025 17:21:13 -0500 Subject: [PATCH] feat: enhance domain connect request with authentication details --- src/OverteClient.cpp | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/src/OverteClient.cpp b/src/OverteClient.cpp index f89e2d7..908b1c5 100644 --- a/src/OverteClient.cpp +++ b/src/OverteClient.cpp @@ -486,20 +486,40 @@ void OverteClient::sendDomainConnectRequest() { // DomainConnectRequest packet (PacketType 0x04) const unsigned char PACKET_TYPE_DOMAIN_CONNECT_REQUEST = 0x04; - // Build packet: [PacketType][ProtocolVersion:string][HardwareAddress:string] + // Build packet with authentication + // Format: [PacketType][ProtocolVersion:string][HardwareAddress:string][MachineFingerprint:string][Username:string][Password:string] std::string protocolVersion = "Starworld-0.1"; std::string hardwareAddress = m_sessionUUID; + std::string machineFingerprint = m_sessionUUID; // Use session UUID as fingerprint std::vector packet; packet.push_back(static_cast(PACKET_TYPE_DOMAIN_CONNECT_REQUEST)); - // Add protocol version (length-prefixed string) - packet.push_back(static_cast(protocolVersion.size())); - packet.insert(packet.end(), protocolVersion.begin(), protocolVersion.end()); + // Helper lambda to add length-prefixed string + auto addString = [&packet](const std::string& str) { + if (str.size() > 255) { + packet.push_back(static_cast(255)); + packet.insert(packet.end(), str.begin(), str.begin() + 255); + } else { + packet.push_back(static_cast(str.size())); + packet.insert(packet.end(), str.begin(), str.end()); + } + }; - // Add hardware address (length-prefixed string) - packet.push_back(static_cast(hardwareAddress.size())); - packet.insert(packet.end(), hardwareAddress.begin(), hardwareAddress.end()); + // Add protocol version + addString(protocolVersion); + + // Add hardware address (session UUID) + addString(hardwareAddress); + + // Add machine fingerprint + addString(machineFingerprint); + + // Add username (empty if not authenticated) + addString(m_username); + + // Add password/token (empty if not authenticated) + addString(m_password); ssize_t s = ::sendto(m_udpFd, packet.data(), packet.size(), 0, reinterpret_cast(&m_udpAddr), m_udpAddrLen); @@ -507,6 +527,9 @@ void OverteClient::sendDomainConnectRequest() { std::cout << "[OverteClient] Domain connect request sent (" << s << " bytes)" << std::endl; std::cout << "[OverteClient] Protocol: " << protocolVersion << std::endl; std::cout << "[OverteClient] Session: " << hardwareAddress << std::endl; + if (!m_username.empty()) { + std::cout << "[OverteClient] Username: " << m_username << std::endl; + } } else { std::cerr << "[OverteClient] Failed to send domain connect request: " << strerror(errno) << std::endl; }