aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2024-11-12 13:54:43 +0100
committerShauren <shauren.trinity@gmail.com>2024-11-12 13:54:43 +0100
commitaf4dcc93ed04c4f2219c14821b25cb9efeb7e781 (patch)
tree4fc5ac7ef91398ebf7d0684ab5a97ef392e2a2bc /src/server/game/Server
parent280af853374b3cabcc2514d9604deeb39d03908b (diff)
Core/Networking: Support IPv6
Diffstat (limited to 'src/server/game/Server')
-rw-r--r--src/server/game/Server/WorldSession.cpp19
-rw-r--r--src/server/game/Server/WorldSocket.cpp2
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);