aboutsummaryrefslogtreecommitdiff
path: root/src/server/authserver/Server/BattlenetPackets.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2014-06-01 13:56:36 +0200
committerShauren <shauren.trinity@gmail.com>2014-06-01 13:56:36 +0200
commitbdd6e9aa8aeeda439a2a3a8f23bc21bb04699133 (patch)
tree0ea7adf7f6418ac57a3a3551108235930fa4196d /src/server/authserver/Server/BattlenetPackets.cpp
parentdc5c5ef6361f3f4dbb5fc9b5a755951c83f954fa (diff)
Core/Battle.net: Implemented reconnects
Diffstat (limited to 'src/server/authserver/Server/BattlenetPackets.cpp')
-rw-r--r--src/server/authserver/Server/BattlenetPackets.cpp149
1 files changed, 131 insertions, 18 deletions
diff --git a/src/server/authserver/Server/BattlenetPackets.cpp b/src/server/authserver/Server/BattlenetPackets.cpp
index 99e3fa10b14..471a6128c4c 100644
--- a/src/server/authserver/Server/BattlenetPackets.cpp
+++ b/src/server/authserver/Server/BattlenetPackets.cpp
@@ -57,9 +57,6 @@ void Battlenet::AuthChallenge::Read()
if (_stream.Read<uint32>(1))
Login = _stream.ReadString(9, 3);
-
- if (GetHeader().Opcode == CMSG_AUTH_CHALLENGE_NEW)
- _stream.FinishReading();
}
std::string Battlenet::AuthChallenge::ToString() const
@@ -75,6 +72,40 @@ std::string Battlenet::AuthChallenge::ToString() const
return stream.str();
}
+void Battlenet::AuthResumeInfo::Read()
+{
+ Program = _stream.ReadFourCC();
+ Platform = _stream.ReadFourCC();
+ Locale = _stream.ReadFourCC();
+
+ Components.resize(_stream.Read<uint32>(6));
+ for (size_t i = 0; i < Components.size(); ++i)
+ {
+ Component& component = Components[i];
+ component.Program = _stream.ReadFourCC();
+ component.Platform = _stream.ReadFourCC();
+ component.Build = _stream.Read<uint32>(32);
+ }
+
+ Login = _stream.ReadString(9, 3);
+ Region = _stream.Read<uint8>(8);
+ GameAccountName = _stream.ReadString(5, 1);
+}
+
+std::string Battlenet::AuthResumeInfo::ToString() const
+{
+ std::ostringstream stream;
+ stream << "Battlenet::AuthReconnect Program: " << Program << ", Platform: " << Platform << ", Locale: " << Locale;
+ for (Component const& component : Components)
+ stream << std::endl << "Battlenet::Component Program: " << component.Program << ", Platform: " << component.Platform << ", Build: " << component.Build;
+
+ stream << std::endl << "Battlenet::AuthReconnect Login: " << Login;
+ stream << std::endl << "Battlenet::AuthReconnect Region: " << uint32(Region);
+ stream << std::endl << "Battlenet::AuthReconnect GameAccountName: " << GameAccountName;
+
+ return stream.str();
+}
+
Battlenet::ProofRequest::~ProofRequest()
{
for (size_t i = 0; i < Modules.size(); ++i)
@@ -134,6 +165,12 @@ std::string Battlenet::ProofResponse::ToString() const
return stream.str();
}
+Battlenet::AuthComplete::~AuthComplete()
+{
+ for (ModuleInfo* m : Modules)
+ delete m;
+}
+
void Battlenet::AuthComplete::Write()
{
_stream.Write(Result != 0, 1);
@@ -142,12 +179,12 @@ void Battlenet::AuthComplete::Write()
_stream.Write(Modules.size(), 3);
for (size_t i = 0; i < Modules.size(); ++i)
{
- ModuleInfo& info = Modules[i];
- _stream.WriteBytes(info.Type.c_str(), 4);
- _stream.WriteFourCC(info.Region);
- _stream.WriteBytes(info.ModuleId, 32);
- _stream.Write(info.DataSize, 10);
- _stream.WriteBytes(info.Data, info.DataSize);
+ ModuleInfo* info = Modules[i];
+ _stream.WriteBytes(info->Type.c_str(), 4);
+ _stream.WriteFourCC(info->Region);
+ _stream.WriteBytes(info->ModuleId, 32);
+ _stream.Write(info->DataSize, 10);
+ _stream.WriteBytes(info->Data, info->DataSize);
}
_stream.Write(PingTimeout + std::numeric_limits<int32>::min(), 32);
@@ -168,10 +205,10 @@ void Battlenet::AuthComplete::Write()
_stream.Write(GameAccountId, 32);
_stream.Write(2, 8);
_stream.Write(0, 64);
- _stream.Write(2, 8);
+ _stream.Write(2, 8);
_stream.WriteString(GameAccountName, 5, -1);
- _stream.Write(AccountFlags, 64);
+ _stream.Write(GameAccountFlags, 64);
_stream.Write(0, 32);
}
@@ -180,12 +217,10 @@ void Battlenet::AuthComplete::Write()
_stream.Write(!Modules.empty(), 1);
if (!Modules.empty())
{
- ModuleInfo& info = Modules[0];
- _stream.WriteBytes(info.Type.c_str(), 4);
- _stream.WriteFourCC(info.Region);
- _stream.WriteBytes(info.ModuleId, 32);
- _stream.Write(info.DataSize, 10);
- _stream.WriteBytes(info.Data, info.DataSize);
+ ModuleInfo* info = Modules[0];
+ _stream.WriteBytes(info->Type.c_str(), 4);
+ _stream.WriteFourCC(info->Region);
+ _stream.WriteBytes(info->ModuleId, 32);
}
_stream.Write(ErrorType, 2);
@@ -199,7 +234,15 @@ void Battlenet::AuthComplete::Write()
std::string Battlenet::AuthComplete::ToString() const
{
- return "Battlenet::AuthComplete";
+ std::ostringstream stream;
+ stream << "Battlenet::AuthComplete AuthResult " << Result << " PingTimeout " << PingTimeout << " Threshold " << Threshold << " Rate " << Rate
+ << " FirstName " << FirstName << " LastName " << LastName << " GameAccountId " << GameAccountId << " GameAccountName " << GameAccountName
+ << " GameAccountFlags " << GameAccountFlags << " Modules " << Modules.size();
+
+ for (ModuleInfo const* module : Modules)
+ stream << std::endl << "Battlenet::ModuleInfo Locale " << module->Region.c_str() << ", ModuleId " << ByteArrayToHexStr(module->ModuleId, 32) << ", DataSize " << module->DataSize << ", Data " << ByteArrayToHexStr(module->Data, module->DataSize);
+
+ return stream.str();
}
void Battlenet::AuthComplete::SetAuthResult(AuthResult result)
@@ -208,6 +251,76 @@ void Battlenet::AuthComplete::SetAuthResult(AuthResult result)
Result = result;
}
+Battlenet::AuthResume::~AuthResume()
+{
+ for (ModuleInfo* m : Modules)
+ delete m;
+}
+
+void Battlenet::AuthResume::Write()
+{
+ _stream.Write(Result != 0, 1);
+ if (Result == 0)
+ {
+ _stream.Write(Modules.size(), 3);
+ for (size_t i = 0; i < Modules.size(); ++i)
+ {
+ ModuleInfo* info = Modules[i];
+ _stream.WriteBytes(info->Type.c_str(), 4);
+ _stream.WriteFourCC(info->Region);
+ _stream.WriteBytes(info->ModuleId, 32);
+ _stream.Write(info->DataSize, 10);
+ _stream.WriteBytes(info->Data, info->DataSize);
+ }
+
+ _stream.Write(PingTimeout + std::numeric_limits<int32>::min(), 32);
+ _stream.Write(1, 1);
+ // if written == 1
+ {
+ _stream.Write(1, 1);
+ // if written == 1
+ {
+ _stream.Write(Threshold, 32);
+ _stream.Write(Rate, 32);
+ }
+ }
+ }
+ else
+ {
+ _stream.Write(!Modules.empty(), 1);
+ if (!Modules.empty())
+ {
+ ModuleInfo* info = Modules[0];
+ _stream.WriteBytes(info->Type.c_str(), 4);
+ _stream.WriteFourCC(info->Region);
+ _stream.WriteBytes(info->ModuleId, 32);
+ }
+
+ _stream.Write(ErrorType, 2);
+ if (ErrorType == 1)
+ {
+ _stream.Write(Result, 16);
+ _stream.Write(0x80000000, 32);
+ }
+ }
+}
+
+std::string Battlenet::AuthResume::ToString() const
+{
+ std::ostringstream stream;
+ stream << "Battlenet::AuthResume AuthResult " << Result << " PingTimeout " << PingTimeout << " Threshold " << Threshold << " Rate " << Rate << " Modules " << Modules.size();
+ for (ModuleInfo const* module : Modules)
+ stream << std::endl << "Battlenet::ModuleInfo Locale " << module->Region.c_str() << ", ModuleId " << ByteArrayToHexStr(module->ModuleId, 32) << ", DataSize " << module->DataSize << ", Data " << ByteArrayToHexStr(module->Data, module->DataSize);
+
+ return stream.str();
+}
+
+void Battlenet::AuthResume::SetAuthResult(AuthResult result)
+{
+ ErrorType = result != AUTH_OK ? 1 : 0;
+ Result = result;
+}
+
Battlenet::RealmCharacterCounts::~RealmCharacterCounts()
{
for (ServerPacket* realmData : RealmData)