diff options
| author | Shauren <shauren.trinity@gmail.com> | 2024-11-12 13:54:43 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2024-11-12 13:54:43 +0100 |
| commit | af4dcc93ed04c4f2219c14821b25cb9efeb7e781 (patch) | |
| tree | 4fc5ac7ef91398ebf7d0684ab5a97ef392e2a2bc /src/server/game/Server | |
| parent | 280af853374b3cabcc2514d9604deeb39d03908b (diff) | |
Core/Networking: Support IPv6
Diffstat (limited to 'src/server/game/Server')
| -rw-r--r-- | src/server/game/Server/WorldSession.cpp | 19 | ||||
| -rw-r--r-- | src/server/game/Server/WorldSocket.cpp | 2 |
2 files changed, 18 insertions, 3 deletions
diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index 55cd3379a58..0f19c3115aa 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -818,8 +818,23 @@ void WorldSession::SendConnectToInstance(WorldPackets::Auth::ConnectToSerial ser } else { - memcpy(connectTo.Payload.Where.Address.V6.data(), instanceAddress.to_v6().to_bytes().data(), 16); - connectTo.Payload.Where.Type = WorldPackets::Auth::ConnectTo::IPv6; + // client always uses v4 address for loopback and v4 mapped addresses + boost::asio::ip::address_v6 v6 = instanceAddress.to_v6(); + if (v6.is_loopback()) + { + memcpy(connectTo.Payload.Where.Address.V4.data(), boost::asio::ip::address_v4::loopback().to_bytes().data(), 4); + connectTo.Payload.Where.Type = WorldPackets::Auth::ConnectTo::IPv4; + } + else if (v6.is_v4_mapped()) + { + memcpy(connectTo.Payload.Where.Address.V4.data(), Trinity::Net::make_address_v4(boost::asio::ip::v4_mapped, v6).to_bytes().data(), 4); + connectTo.Payload.Where.Type = WorldPackets::Auth::ConnectTo::IPv4; + } + else + { + memcpy(connectTo.Payload.Where.Address.V6.data(), v6.to_bytes().data(), 16); + connectTo.Payload.Where.Type = WorldPackets::Auth::ConnectTo::IPv6; + } } connectTo.Con = CONNECTION_TYPE_INSTANCE; diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp index 601cb950af5..359482110d6 100644 --- a/src/server/game/Server/WorldSocket.cpp +++ b/src/server/game/Server/WorldSocket.cpp @@ -445,7 +445,7 @@ WorldSocket::ReadDataHandlerResult WorldSocket::ReadDataHandler() return ReadDataHandlerResult::Error; case CMSG_LOG_DISCONNECT: LogOpcodeText(opcode, sessionGuard); - packet.rfinish(); // contains uint32 disconnectReason; + TC_LOG_DEBUG("network", "WorldSocket::ReadDataHandler: client {} sent CMSG_LOG_DISCONNECT reason {}", GetRemoteIpAddress().to_string(), packet.read<uint32>()); break; case CMSG_ENABLE_NAGLE: LogOpcodeText(opcode, sessionGuard); |
