From c1edb63e1e8c10a14f03edd186a899a3281ec9b2 Mon Sep 17 00:00:00 2001 From: MayaTheShy Date: Sun, 9 Nov 2025 01:59:58 -0500 Subject: [PATCH] feat: enhance entity query handling with dynamic server address selection and improved logging --- src/OverteClient.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/OverteClient.cpp b/src/OverteClient.cpp index cac7b28..f066b9a 100644 --- a/src/OverteClient.cpp +++ b/src/OverteClient.cpp @@ -21,6 +21,7 @@ #include #include #include +#include using namespace std::chrono_literals; using namespace Overte; @@ -1206,6 +1207,12 @@ void OverteClient::sendPing(int fd, const sockaddr_storage& addr, socklen_t addr void OverteClient::sendEntityQuery() { if (!m_udpReady || m_udpFd == -1) return; + // Use entity server address if available, otherwise fall back to domain server + const sockaddr_storage* targetAddr = m_entityServerPort != 0 ? + &m_entityServerAddr : &m_udpAddr; + socklen_t targetAddrLen = m_entityServerPort != 0 ? + m_entityServerAddrLen : m_udpAddrLen; + // Create EntityQuery packet (PacketType::EntityQuery = 0x29) NLPacket packet(PacketType::EntityQuery, 0, true); // Include our local ID (sourced packet) @@ -1276,10 +1283,19 @@ void OverteClient::sendEntityQuery() { const auto& data = packet.getData(); ssize_t s = ::sendto(m_udpFd, data.data(), data.size(), 0, - reinterpret_cast(&m_udpAddr), m_udpAddrLen); + reinterpret_cast(targetAddr), targetAddrLen); if (s > 0) { - std::cout << "[OverteClient] Sent EntityQuery (" << s << " bytes, seq=" << (m_sequenceNumber-1) << ")" << std::endl; + char addrStr[INET_ADDRSTRLEN] = "unknown"; + if (targetAddr->ss_family == AF_INET) { + const sockaddr_in* sin = reinterpret_cast(targetAddr); + inet_ntop(AF_INET, &sin->sin_addr, addrStr, sizeof(addrStr)); + } + + const char* targetName = (m_entityServerPort != 0) ? "entity-server" : "domain-server"; + std::cout << "[OverteClient] Sent EntityQuery to " << targetName + << " (" << addrStr << ":" << ntohs(reinterpret_cast(targetAddr)->sin_port) + << ", " << s << " bytes, seq=" << (m_sequenceNumber-1) << ")" << std::endl; } else { std::cerr << "[OverteClient] Failed to send EntityQuery: " << strerror(errno) << std::endl; }