diff options
| author | Giacomo Pozzoni <giacomopoz@gmail.com> | 2019-09-17 09:11:56 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-09-17 09:11:56 +0200 |
| commit | fb059722fdb18a94d47b3f44a5b2d7f183bf5a29 (patch) | |
| tree | bd492eb60a771dd7fd3f712b1e0a63d4110df45b /src/server/game/Server | |
| parent | 6fc7ab3448850199835f9ee9dca6991b511eba09 (diff) | |
Core/Calendar: Add some additional validation when creating events (#23797)
* Core/Calendar: Add some additional validation when creating events
Allow only 30 player events and 100 guild events to be created.
Don't allow to create guild events if player is not in guild.
Send some more error messages to the client (not blizzlike errors but better than nothing).
* Core/Calendar: Add some additional validation/checks
Add guild id check in GetPlayerEvents().
Change error message in HandleCalendarCopyEvent() to be the same as in HandleCalendarAddEvent() when creating an event in the past.
* Core/Calendar: Add some additional validation/checks
Reduce the number of CMSG_CALENDAR_ADD_EVENT packets a seconds allowed from 10 to 3.
* Core/Calendar: Add some additional validation/checks
Implement 5 seconds cooldown between the creation of calendar events
* Core/Calendar: Add some additional validation/checks
Don't allow to copy events of a different player/guild
* Core/Calendar: Implement automatic deletion of old events
Implement automatic deletion of events older than 1 month (30 days).
Fix debug assertion triggered when deleting a character with calendar events.
Avoid double std::set lookup when deleting events when deleting a character.
NB: The whole CalendarMgr/CalendarHandler code should be checked line by line for bugs/crashes/exploits.
Diffstat (limited to 'src/server/game/Server')
| -rw-r--r-- | src/server/game/Server/WorldSession.cpp | 10 | ||||
| -rw-r--r-- | src/server/game/Server/WorldSession.h | 16 |
2 files changed, 12 insertions, 14 deletions
diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index a722e2e0e10..4314e819b86 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -134,13 +134,13 @@ WorldSession::WorldSession(uint32 id, std::string&& name, std::shared_ptr<WorldS m_currentBankerGUID(), _timeSyncClockDeltaQueue(6), _timeSyncClockDelta(0), - _pendingTimeSyncRequests() + _pendingTimeSyncRequests(), + _timeSyncNextCounter(0), + _timeSyncTimer(0), + _calendarEventCreationCooldown(0) { memset(m_Tutorials, 0, sizeof(m_Tutorials)); - _timeSyncNextCounter = 0; - _timeSyncTimer = 0; - if (sock) { m_Address = sock->GetRemoteIpAddress().to_string(); @@ -1499,7 +1499,6 @@ uint32 WorldSession::DosProtection::GetMaxPacketCounterAllowed(uint16 opcode) co case CMSG_GROUP_SET_LEADER: // 1 2 1 async db query case CMSG_GROUP_RAID_CONVERT: // 1 5 1 async db query case CMSG_GROUP_ASSISTANT_LEADER: // 1 2 1 async db query - case CMSG_CALENDAR_ADD_EVENT: // 21 10 2 async db query case CMSG_PETITION_BUY: // not profiled 1 sync 1 async db queries case CMSG_CHANGE_SEATS_ON_CONTROLLED_VEHICLE: // not profiled case CMSG_REQUEST_VEHICLE_PREV_SEAT: // not profiled @@ -1522,6 +1521,7 @@ uint32 WorldSession::DosProtection::GetMaxPacketCounterAllowed(uint16 opcode) co case CMSG_GMTICKET_UPDATETEXT: // 0 15 1 async db query case CMSG_GMTICKET_DELETETICKET: // 1 25 1 async db query case CMSG_GMRESPONSE_RESOLVE: // 1 25 1 async db query + case CMSG_CALENDAR_ADD_EVENT: // 21 10 2 async db query case CMSG_CALENDAR_UPDATE_EVENT: // not profiled case CMSG_CALENDAR_REMOVE_EVENT: // not profiled case CMSG_CALENDAR_COPY_EVENT: // not profiled diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index f806fec586c..d7ff80129b0 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -409,8 +409,6 @@ class TC_GAME_API WorldSession m_TutorialsChanged |= TUTORIALS_FLAG_CHANGED; } } - //used with item_page table - bool SendItemInfo(uint32 itemid, WorldPacket data); //auction void SendAuctionHello(ObjectGuid guid, Creature* unit); void SendAuctionCommandResult(uint32 auctionItemId, AuctionAction command, AuctionError errorCode, InventoryResult bagResult = InventoryResult(0)); @@ -462,6 +460,10 @@ class TC_GAME_API WorldSession void ResetTimeSync(); void SendTimeSync(); + // Packets cooldown + time_t GetCalendarEventCreationCooldown() const { return _calendarEventCreationCooldown; } + void SetCalendarEventCreationCooldown(time_t cooldown) { _calendarEventCreationCooldown = cooldown; } + public: // opcodes handlers void Handle_NULL(WorldPacket& recvPacket); // not used @@ -498,7 +500,6 @@ class TC_GAME_API WorldSession // new void HandleMoveUnRootAck(WorldPacket& recvPacket); void HandleMoveRootAck(WorldPacket& recvPacket); - void HandleLookingForGroup(WorldPacket& recvPacket); // new inspect void HandleInspectOpcode(WorldPacket& recvPacket); @@ -526,7 +527,6 @@ class TC_GAME_API WorldSession void HandleMoveTeleportAck(WorldPacket& recvPacket); void HandleForceSpeedChangeAck(WorldPacket& recvData); - void HandlePingOpcode(WorldPacket& recvPacket); void HandleRepopRequestOpcode(WorldPacket& recvPacket); void HandleAutostoreLootItemOpcode(WorldPacket& recvPacket); void HandleLootMoneyOpcode(WorldPacket& recvPacket); @@ -578,7 +578,6 @@ class TC_GAME_API WorldSession void HandleSetActionButtonOpcode(WorldPacket& recvPacket); void HandleGameObjectUseOpcode(WorldPacket& recPacket); - void HandleMeetingStoneInfo(WorldPacket& recPacket); void HandleGameobjectReportUse(WorldPacket& recvPacket); void HandleNameQueryOpcode(WorldPacket& recvPacket); @@ -603,10 +602,8 @@ class TC_GAME_API WorldSession void HandleRequestRaidInfoOpcode(WorldPacket& recvData); void HandleBattlefieldStatusOpcode(WorldPacket& recvData); - void HandleBattleMasterHelloOpcode(WorldPacket& recvData); void HandleGroupInviteOpcode(WorldPacket& recvPacket); - //void HandleGroupCancelOpcode(WorldPacket& recvPacket); void HandleGroupAcceptOpcode(WorldPacket& recvPacket); void HandleGroupDeclineOpcode(WorldPacket& recvPacket); void HandleGroupUninviteOpcode(WorldPacket& recvPacket); @@ -721,7 +718,6 @@ class TC_GAME_API WorldSession void HandleQueryNextMailTime(WorldPacket& recvData); void HandleCancelChanneling(WorldPacket& recvData); - void SendItemPageInfo(ItemTemplate* itemProto); void HandleSplitItemOpcode(WorldPacket& recvPacket); void HandleSwapInvItemOpcode(WorldPacket& recvPacket); void HandleDestroyItemOpcode(WorldPacket& recvPacket); @@ -804,7 +800,6 @@ class TC_GAME_API WorldSession void HandleChannelBan(WorldPacket& recvPacket); void HandleChannelUnban(WorldPacket& recvPacket); void HandleChannelAnnouncements(WorldPacket& recvPacket); - void HandleChannelModerate(WorldPacket& recvPacket); void HandleChannelDeclineInvite(WorldPacket& recvPacket); void HandleChannelDisplayListQuery(WorldPacket& recvPacket); void HandleGetChannelMemberCount(WorldPacket& recvPacket); @@ -1116,6 +1111,9 @@ class TC_GAME_API WorldSession uint32 _timeSyncNextCounter; uint32 _timeSyncTimer; + // Packets cooldown + time_t _calendarEventCreationCooldown; + WorldSession(WorldSession const& right) = delete; WorldSession& operator=(WorldSession const& right) = delete; |
