diff --git a/src/net/common/serverlobbythread.cpp b/src/net/common/serverlobbythread.cpp index 1f59047b..a4f8c875 100644 --- a/src/net/common/serverlobbythread.cpp +++ b/src/net/common/serverlobbythread.cpp @@ -878,8 +878,8 @@ ServerLobbyThread::HandleNetPacketInit(SessionWrapper session, const InitMessage const AuthenticatedLogin_t *authLogin = &initMessage.login.choice.authenticatedLogin; playerName = string((const char *)authLogin->playerName.buf, authLogin->playerName.size); password = string((const char *)authLogin->password.buf, authLogin->password.size); - if (anonLogin->avatar) - memcpy(avatarMD5.data, anonLogin->avatar->buf, MD5_DATA_SIZE); + if (authLogin->avatar) + memcpy(avatarMD5.data, authLogin->avatar->buf, MD5_DATA_SIZE); } else SessionError(session, ERR_NET_INVALID_PASSWORD); // TODO not yet supported @@ -934,27 +934,10 @@ ServerLobbyThread::HandleNetPacketInit(SessionWrapper session, const InitMessage m_sessionManager.SetSessionPlayerData(session.sessionData->GetId(), tmpPlayerData); session.playerData = tmpPlayerData; - string avatarFileName; - if (!avatarMD5.IsZero() - && !GetAvatarManager().GetAvatarFileName(avatarMD5, avatarFileName)) - { - bool avatarRecentlyRequested = false; - { - boost::mutex::scoped_lock lock(m_timerAvatarClientAddressMapMutex); - if (m_timerAvatarClientAddressMap.find(session.sessionData->GetClientAddr()) != m_timerAvatarClientAddressMap.end()) - avatarRecentlyRequested = true; - } - if (avatarRecentlyRequested) - SessionError(session, ERR_NET_AVATAR_UPLOAD_BLOCKED); - else - RequestPlayerAvatar(session); - } + if (guestUser) + InitAfterLogin(session); else - { - if (!avatarFileName.empty()) - session.playerData->SetAvatarFile(avatarFileName); - EstablishSession(session); - } + AuthenticatePlayer(session, password); } void @@ -1206,6 +1189,34 @@ ServerLobbyThread::HandleNetPacketChatRequest(SessionWrapper session, const Chat } } +void +ServerLobbyThread::InitAfterLogin(SessionWrapper session) +{ + assert(session.playerData); + const MD5Buf &avatarMD5 = session.playerData->GetAvatarMD5(); + string avatarFileName; + if (!avatarMD5.IsZero() + && !GetAvatarManager().GetAvatarFileName(avatarMD5, avatarFileName)) + { + bool avatarRecentlyRequested = false; + { + boost::mutex::scoped_lock lock(m_timerAvatarClientAddressMapMutex); + if (m_timerAvatarClientAddressMap.find(session.sessionData->GetClientAddr()) != m_timerAvatarClientAddressMap.end()) + avatarRecentlyRequested = true; + } + if (avatarRecentlyRequested) + SessionError(session, ERR_NET_AVATAR_UPLOAD_BLOCKED); + else + RequestPlayerAvatar(session); + } + else + { + if (!avatarFileName.empty()) + session.playerData->SetAvatarFile(avatarFileName); + EstablishSession(session); + } +} + void ServerLobbyThread::EstablishSession(SessionWrapper session) { @@ -1241,6 +1252,12 @@ ServerLobbyThread::EstablishSession(SessionWrapper session) UpdateStatisticsNumberOfPlayers(); } +void +ServerLobbyThread::AuthenticatePlayer(SessionWrapper session, const std::string &password) +{ + // TODO +} + void ServerLobbyThread::RequestPlayerAvatar(SessionWrapper session) { diff --git a/src/net/serverlobbythread.h b/src/net/serverlobbythread.h index f42a54d8..d4df2d10 100644 --- a/src/net/serverlobbythread.h +++ b/src/net/serverlobbythread.h @@ -130,7 +130,9 @@ protected: void HandleNetPacketCreateGame(SessionWrapper session, const std::string &password, const JoinNewGame_t &newGame); void HandleNetPacketJoinGame(SessionWrapper session, const std::string &password, const JoinExistingGame_t &joinGame); void HandleNetPacketChatRequest(SessionWrapper session, const ChatRequestMessage_t &chatRequest); + void InitAfterLogin(SessionWrapper session); void EstablishSession(SessionWrapper session); + void AuthenticatePlayer(SessionWrapper session, const std::string &password); void RequestPlayerAvatar(SessionWrapper session); void TimerRemoveGame(const boost::system::error_code &ec); void TimerRemovePlayer(const boost::system::error_code &ec);