Preventing spam of report avatar function on server side.

This commit is contained in:
lotodore
2010-12-25 21:54:26 +00:00
parent a06c1b6ac1
commit 609a0c4f82
3 changed files with 50 additions and 9 deletions
+18
View File
@@ -644,6 +644,24 @@ ServerGame::IsPlayerInvited(unsigned playerId) const
return retVal;
}
void
ServerGame::AddReportedAvatar(unsigned playerId)
{
boost::mutex::scoped_lock lock(m_reportedAvatarListMutex);
m_reportedAvatarList.push_back(playerId);
}
bool
ServerGame::IsAvatarReported(unsigned playerId) const
{
bool retVal = false;
boost::mutex::scoped_lock lock(m_reportedAvatarListMutex);
PlayerIdList::const_iterator pos = find(m_reportedAvatarList.begin(), m_reportedAvatarList.end(), playerId);
if (pos != m_reportedAvatarList.end())
retVal = true;
return retVal;
}
void
ServerGame::AddComputerPlayer(boost::shared_ptr<PlayerData> player)
{
+26 -9
View File
@@ -312,15 +312,32 @@ AbstractServerGameStateReceiving::ProcessPacket(boost::shared_ptr<ServerGame> se
memcpy(tmpMD5.GetData(), netReport->reportedAvatar.buf, MD5_DATA_SIZE);
if (tmpPlayer && tmpPlayer->GetDBId() && tmpPlayer->GetAvatarMD5() == tmpMD5)
{
DB_id myDBid = session.playerData->GetDBId();
// Do not use the "game" database object, but the global one.
server->GetLobbyThread().GetDatabase()->AsyncReportAvatar(
session.playerData->GetUniqueId(),
tmpPlayer->GetUniqueId(),
tmpPlayer->GetDBId(),
tmpPlayer->GetAvatarMD5().ToString(),
myDBid != 0 ? &myDBid : NULL
);
if (!server->IsAvatarReported(tmpPlayer->GetUniqueId()))
{
// Temporarily note that this avatar was reported.
// This prevents spamming of the avatar report.
server->AddReportedAvatar(tmpPlayer->GetUniqueId());
DB_id myDBid = session.playerData->GetDBId();
// Do not use the "game" database object, but the global one.
// The entry should be created even if we are not running a
// ranking game.
server->GetLobbyThread().GetDatabase()->AsyncReportAvatar(
session.playerData->GetUniqueId(),
tmpPlayer->GetUniqueId(),
tmpPlayer->GetDBId(),
tmpPlayer->GetAvatarMD5().ToString(),
myDBid != 0 ? &myDBid : NULL
);
}
else
{
boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
packet->GetMsg()->present = PokerTHMessage_PR_reportAvatarAckMessage;
ReportAvatarAckMessage_t *netReportAck = &packet->GetMsg()->choice.reportAvatarAckMessage;
netReportAck->reportedPlayerId = netReport->reportedPlayerId;
netReportAck->reportResult = reportResult_avatarReportDuplicate;
server->GetLobbyThread().GetSender().Send(session.sessionData, packet);
}
}
else
{
+6
View File
@@ -87,6 +87,9 @@ public:
void RemovePlayerInvitation(unsigned playerId);
bool IsPlayerInvited(unsigned playerId) const;
void AddReportedAvatar(unsigned playerId);
bool IsAvatarReported(unsigned playerId) const;
unsigned GetSmallDelaySec() const;
// should be protected, but is needed in function.
@@ -168,6 +171,9 @@ private:
PlayerIdList m_playerInvitationList;
mutable boost::mutex m_playerInvitationListMutex;
PlayerIdList m_reportedAvatarList;
mutable boost::mutex m_reportedAvatarListMutex;
RankingMap m_rankingMap;
unsigned m_adminPlayerId;