From 41497c64effa5ae9d121646be0af3e44ab9bb9d7 Mon Sep 17 00:00:00 2001 From: lotodore Date: Tue, 4 Jan 2011 12:03:40 +0000 Subject: [PATCH] Also store type of avatar if an avatar is reported as inappropriate. --- src/db/common/serverdbgeneric.cpp | 2 +- src/db/serverdbgeneric.h | 2 +- src/db/serverdbinterface.h | 2 +- src/db/serverdbnoaction.h | 2 +- src/net/common/servergamestate.cpp | 10 +++++++++- 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/db/common/serverdbgeneric.cpp b/src/db/common/serverdbgeneric.cpp index e327c495..92f401c9 100644 --- a/src/db/common/serverdbgeneric.cpp +++ b/src/db/common/serverdbgeneric.cpp @@ -81,7 +81,7 @@ ServerDBGeneric::EndGame(DB_id /*gameId*/) } void -ServerDBGeneric::AsyncReportAvatar(unsigned requestId, unsigned replyId, DB_id /*reportedPlayerId*/, const std::string &/*avatarHash*/, DB_id */*byPlayerId*/) + ServerDBGeneric::AsyncReportAvatar(unsigned requestId, unsigned replyId, DB_id /*reportedPlayerId*/, const std::string &/*avatarHash*/, const std::string &/*avatarType*/, DB_id */*byPlayerId*/) { m_ioService->post(boost::bind(&ServerDBCallback::ReportAvatarFailed, &m_callback, requestId, replyId)); } diff --git a/src/db/serverdbgeneric.h b/src/db/serverdbgeneric.h index 4a0a64fa..c1ac3fb3 100644 --- a/src/db/serverdbgeneric.h +++ b/src/db/serverdbgeneric.h @@ -46,7 +46,7 @@ public: virtual void SetGamePlayerPlace(DB_id gameId, DB_id playerId, unsigned place); virtual void EndGame(DB_id gameId); - virtual void AsyncReportAvatar(unsigned requestId, unsigned replyId, DB_id reportedPlayerId, const std::string &avatarHash, DB_id *byPlayerId); + virtual void AsyncReportAvatar(unsigned requestId, unsigned replyId, DB_id reportedPlayerId, const std::string &avatarHash, const std::string &avatarType, DB_id *byPlayerId); private: boost::shared_ptr m_ioService; diff --git a/src/db/serverdbinterface.h b/src/db/serverdbinterface.h index 0abce9a5..3a8494d4 100644 --- a/src/db/serverdbinterface.h +++ b/src/db/serverdbinterface.h @@ -46,7 +46,7 @@ public: virtual void SetGamePlayerPlace(DB_id gameId, DB_id playerId, unsigned place) = 0; virtual void EndGame(DB_id gameId) = 0; - virtual void AsyncReportAvatar(unsigned requestId, unsigned replyId, DB_id reportedPlayerId, const std::string &avatarHash, DB_id *byPlayerId) = 0; + virtual void AsyncReportAvatar(unsigned requestId, unsigned replyId, DB_id reportedPlayerId, const std::string &avatarHash, const std::string &avatarType, DB_id *byPlayerId) = 0; }; #endif diff --git a/src/db/serverdbnoaction.h b/src/db/serverdbnoaction.h index 47accaaf..fc1cef50 100644 --- a/src/db/serverdbnoaction.h +++ b/src/db/serverdbnoaction.h @@ -44,7 +44,7 @@ public: virtual void SetGamePlayerPlace(DB_id /*gameId*/, DB_id /*playerId*/, unsigned /*place*/) {} virtual void EndGame(DB_id /*gameId*/) {} - virtual void AsyncReportAvatar(unsigned /*requestId*/, unsigned /*replyId*/, DB_id /*reportedPlayerId*/, const std::string &/*avatarHash*/, DB_id */*byPlayerId*/) {} + virtual void AsyncReportAvatar(unsigned /*requestId*/, unsigned /*replyId*/, DB_id /*reportedPlayerId*/, const std::string &/*avatarHash*/, const std::string &/*avatarType*/, DB_id */*byPlayerId*/) {} }; #endif // _SERVERDBNOACTION_H_ diff --git a/src/net/common/servergamestate.cpp b/src/net/common/servergamestate.cpp index 94ec7501..98f39fcf 100644 --- a/src/net/common/servergamestate.cpp +++ b/src/net/common/servergamestate.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -310,7 +311,7 @@ AbstractServerGameStateReceiving::ProcessPacket(boost::shared_ptr se boost::shared_ptr tmpPlayer = server->GetPlayerDataByUniqueId(netReport->reportedPlayerId); MD5Buf tmpMD5; memcpy(tmpMD5.GetData(), netReport->reportedAvatar.buf, MD5_DATA_SIZE); - if (tmpPlayer && tmpPlayer->GetDBId() && tmpPlayer->GetAvatarMD5() == tmpMD5) + if (tmpPlayer && tmpPlayer->GetDBId() && !tmpMD5.IsZero() && tmpPlayer->GetAvatarMD5() == tmpMD5) { if (!server->IsAvatarReported(tmpPlayer->GetUniqueId())) { @@ -321,11 +322,18 @@ AbstractServerGameStateReceiving::ProcessPacket(boost::shared_ptr se // 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. + + string tmpAvatarType; + tmpAvatarType = AvatarManager::GetAvatarFileExtension(AvatarManager::GetAvatarFileType(tmpPlayer->GetAvatarFile())); + if (!tmpAvatarType.empty()) + tmpAvatarType.erase(0, 1); // Only store extension without the "." + server->GetLobbyThread().GetDatabase()->AsyncReportAvatar( session.playerData->GetUniqueId(), tmpPlayer->GetUniqueId(), tmpPlayer->GetDBId(), tmpPlayer->GetAvatarMD5().ToString(), + tmpAvatarType, myDBid != 0 ? &myDBid : NULL ); }