diff options
-rw-r--r-- | src/server/game/Server/Protocol/Handlers/AuthHandler.cpp | 46 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.h | 3 | ||||
-rw-r--r-- | src/server/game/World/World.cpp | 29 |
3 files changed, 54 insertions, 24 deletions
diff --git a/src/server/game/Server/Protocol/Handlers/AuthHandler.cpp b/src/server/game/Server/Protocol/Handlers/AuthHandler.cpp new file mode 100644 index 00000000000..3728f0edf7e --- /dev/null +++ b/src/server/game/Server/Protocol/Handlers/AuthHandler.cpp @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2008-2010 Trinity <http://www.trinitycore.org/> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "Opcodes.h" +#include "WorldSession.h" +#include "WorldPacket.h" + +void WorldSession::SendAuthResponse(uint8 code, bool shortForm, uint32 queuePos) +{ + WorldPacket packet(SMSG_AUTH_RESPONSE, 1 + 4 + 1 + 4 + 1 + (shortForm ? 0 : (4 + 1))); + packet << uint8(code); + packet << uint32(0); // BillingTimeRemaining + packet << uint8(0); // BillingPlanFlags + packet << uint32(0); // BillingTimeRested + packet << uint8(Expansion()); // 0 - normal, 1 - TBC, 2 - WOTLK, must be set in database manually for each account + + if (!shortForm) + { + packet << uint32(queuePos); // Queue position + packet << uint8(0); // Unk 3.3.0 + } + + SendPacket(&packet); +} + +void WorldSession::SendClientCacheVersion(uint32 version) +{ + WorldPacket data(SMSG_CLIENTCACHE_VERSION, 4); + data << uint32(version); + SendPacket(&data); +} diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 965b398563b..8bcf0c1eccf 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -160,6 +160,9 @@ class WorldSession void SendSetPhaseShift(uint32 phaseShift); void SendQueryTimeResponse(); + void SendAuthResponse(uint8 code, bool shortForm, uint32 queuePos = 0); + void SendClientCacheVersion(uint32 version); + AccountTypes GetSecurity() const { return _security; } uint32 GetAccountId() const { return _accountId; } Player* GetPlayer() const { return _player; } diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 14f565b38b8..a42d20a4048 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -218,7 +218,7 @@ void World::AddSession(WorldSession* s) } void -World::AddSession_ (WorldSession* s) +World::AddSession_(WorldSession* s) { ASSERT (s); @@ -270,19 +270,11 @@ World::AddSession_ (WorldSession* s) return; } - WorldPacket packet(SMSG_AUTH_RESPONSE, 1 + 4 + 1 + 4 + 1); - packet << uint8(AUTH_OK); - packet << uint32(0); // BillingTimeRemaining - packet << uint8(0); // BillingPlanFlags - packet << uint32(0); // BillingTimeRested - packet << uint8(s->Expansion()); // 0 - normal, 1 - TBC, 2 - WOTLK, must be set in database manually for each account - s->SendPacket(&packet); + s->SendAuthResponse(AUTH_OK, true); s->SendAddonsInfo(); - WorldPacket pkt(SMSG_CLIENTCACHE_VERSION, 4); - pkt << uint32(sWorld.getIntConfig(CONFIG_CLIENTCACHE_VERSION)); - s->SendPacket(&pkt); + s->SendClientCacheVersion(sWorld.getIntConfig(CONFIG_CLIENTCACHE_VERSION)); s->SendTutorialsData(); @@ -337,15 +329,7 @@ void World::AddQueuedPlayer(WorldSession* sess) m_QueuedPlayer.push_back(sess); // The 1st SMSG_AUTH_RESPONSE needs to contain other info too. - WorldPacket packet(SMSG_AUTH_RESPONSE, 1+4+1+4+1+4+1); - packet << uint8(AUTH_WAIT_QUEUE); - packet << uint32(0); // BillingTimeRemaining - packet << uint8(0); // BillingPlanFlags - packet << uint32(0); // BillingTimeRested - packet << uint8(sess->Expansion()); // 0 - normal, 1 - TBC, 2 - WOTLK, must be set in database manually for each account - packet << uint32(GetQueuePos(sess)); // Queue position - packet << uint8(0); // Unk 3.3.0 - sess->SendPacket(&packet); + sess->SendAuthResponse(AUTH_WAIT_QUEUE, false, GetQueuePos(sess)); } bool World::RemoveQueuedPlayer(WorldSession* sess) @@ -387,10 +371,7 @@ bool World::RemoveQueuedPlayer(WorldSession* sess) pop_sess->SendAuthWaitQue(0); pop_sess->SendAddonsInfo(); - WorldPacket pkt(SMSG_CLIENTCACHE_VERSION, 4); - pkt << uint32(sWorld.getIntConfig(CONFIG_CLIENTCACHE_VERSION)); - pop_sess->SendPacket(&pkt); - + pop_sess->SendClientCacheVersion(sWorld.getIntConfig(CONFIG_CLIENTCACHE_VERSION)); pop_sess->SendAccountDataTimes(GLOBAL_CACHE_MASK); pop_sess->SendTutorialsData(); |