aboutsummaryrefslogtreecommitdiff
path: root/src/server/authserver/Server/BattlenetSocket.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/authserver/Server/BattlenetSocket.cpp')
-rw-r--r--src/server/authserver/Server/BattlenetSocket.cpp36
1 files changed, 29 insertions, 7 deletions
diff --git a/src/server/authserver/Server/BattlenetSocket.cpp b/src/server/authserver/Server/BattlenetSocket.cpp
index fb9ca008e8b..04005e30878 100644
--- a/src/server/authserver/Server/BattlenetSocket.cpp
+++ b/src/server/authserver/Server/BattlenetSocket.cpp
@@ -17,7 +17,6 @@
#include "AuthCodes.h"
#include "BattlenetBitStream.h"
-#include "BattlenetPackets.h"
#include "BattlenetSocket.h"
#include <map>
@@ -26,13 +25,29 @@ bool Battlenet::Socket::HandleAuthChallenge(PacketHeader& header, BitStream& pac
AuthChallenge info(header, packet);
info.Read();
+ for (Component const& component : info.Components)
+ {
+ if (!sBattlenetMgr->HasComponent(&component))
+ {
+ AuthComplete complete;
+ if (!sBattlenetMgr->HasProgram(component.Program))
+ complete.SetAuthResult(AUTH_INVALID_PROGRAM);
+ else if (!sBattlenetMgr->HasPlatform(component.Platform))
+ complete.SetAuthResult(AUTH_INVALID_OS);
+ else if (!sBattlenetMgr->HasBuild(component.Build))
+ complete.SetAuthResult(AUTH_REGION_BAD_VERSION);
+
+ Send(complete);
+ return true;
+ }
+ }
+
printf("%s\n", info.ToString().c_str());
_accountName = info.Login;
ProofRequest request;
- request.Write();
- _socket.send((char const*)request.GetData(), request.GetSize());
+ Send(request);
return true;
}
@@ -44,10 +59,8 @@ bool Battlenet::Socket::HandleAuthProofResponse(PacketHeader& header, BitStream&
printf("%s\n", response.ToString().c_str());
AuthComplete complete;
- complete.ErrorType = 1;
- complete.AuthResult = AUTH_USE_GRUNT_LOGON;
- complete.Write();
- _socket.send((char const*)complete.GetData(), complete.GetSize());
+ complete.SetAuthResult(AUTH_USE_GRUNT_LOGON);
+ Send(complete);
return true;
}
@@ -56,6 +69,7 @@ std::map<Battlenet::PacketHeader, Battlenet::Socket::PacketHandler> InitHandlers
std::map<Battlenet::PacketHeader, Battlenet::Socket::PacketHandler> handlers;
handlers[Battlenet::PacketHeader(Battlenet::CMSG_AUTH_CHALLENGE, Battlenet::AUTHENTICATION)] = &Battlenet::Socket::HandleAuthChallenge;
+ handlers[Battlenet::PacketHeader(Battlenet::CMSG_AUTH_CHALLENGE_NEW, Battlenet::AUTHENTICATION)] = &Battlenet::Socket::HandleAuthChallenge;
handlers[Battlenet::PacketHeader(Battlenet::CMSG_AUTH_PROOF_RESPONSE, Battlenet::AUTHENTICATION)] = &Battlenet::Socket::HandleAuthProofResponse;
return handlers;
@@ -122,3 +136,11 @@ void Battlenet::Socket::OnClose()
{
printf("Battlenet::Socket::OnClose\n");
}
+
+void Battlenet::Socket::Send(ServerPacket& packet)
+{
+ printf("Battlenet::Socket::Send %s\n", packet.ToString().c_str());
+
+ packet.Write();
+ _socket.send(reinterpret_cast<char const*>(packet.GetData()), packet.GetSize());
+}