diff options
author | sfan5 <sfan5@live.de> | 2021-01-31 20:36:47 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-31 20:36:47 +0100 |
commit | 112a6adb10d3a5a2e55012a36580607d12ce9758 (patch) | |
tree | 344696315dbb8e261477e15d2e13421173fca8ba /src/network | |
parent | 6e0e0324a48130376ab3c9fef03b84ee25608242 (diff) | |
download | minetest-112a6adb10d3a5a2e55012a36580607d12ce9758.tar.gz minetest-112a6adb10d3a5a2e55012a36580607d12ce9758.tar.bz2 minetest-112a6adb10d3a5a2e55012a36580607d12ce9758.zip |
Cache client IP in RemoteClient so it can always be retrieved (#10887)
specifically: after the peer has already disappeared
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/serverpackethandler.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp index c636d01e1..882cf71c1 100644 --- a/src/network/serverpackethandler.cpp +++ b/src/network/serverpackethandler.cpp @@ -56,12 +56,12 @@ void Server::handleCommand_Init(NetworkPacket* pkt) session_t peer_id = pkt->getPeerId(); RemoteClient *client = getClient(peer_id, CS_Created); + Address addr; std::string addr_s; try { - Address address = getPeerAddress(peer_id); - addr_s = address.serializeString(); - } - catch (con::PeerNotFoundException &e) { + addr = m_con->GetPeerAddress(peer_id); + addr_s = addr.serializeString(); + } catch (con::PeerNotFoundException &e) { /* * no peer for this packet found * most common reason is peer timeout, e.g. peer didn't @@ -73,13 +73,14 @@ void Server::handleCommand_Init(NetworkPacket* pkt) return; } - // If net_proto_version is set, this client has already been handled if (client->getState() > CS_Created) { verbosestream << "Server: Ignoring multiple TOSERVER_INITs from " << addr_s << " (peer_id=" << peer_id << ")" << std::endl; return; } + client->setCachedAddress(addr); + verbosestream << "Server: Got TOSERVER_INIT from " << addr_s << " (peer_id=" << peer_id << ")" << std::endl; |