bool DeFloodCheckInterval(User * u, const uint8_t &ui8DefloodType, uint16_t &ui16Count, uint64_t &ui64LastOkTick, const int16_t &ui16DefloodCount, const uint32_t &ui32DefloodTime, char * sOtherNick/* = NULL*/) { if(ui16Count == 0) { ui64LastOkTick = ui64ActualTick; } else if(ui16Count >= ui16DefloodCount) { if((ui64LastOkTick+ui32DefloodTime) > ui64ActualTick) { ui16Count++; int imsgLen = 0; if(sOtherNick != NULL) { imsgLen = sprintf(msg, "$To: %s From: %s $", u->sNick, sOtherNick); if(CheckSprintf(imsgLen, 1024, "DeFloodCheckInterval1") == false) { return true; } } int iret = sprintf(msg+imsgLen, "<%s> %s %" PRIu64 " %s.|", SettingManager->sPreTexts[SetMan::SETPRETXT_HUB_SEC], LanguageManager->sTexts[LAN_PLEASE_WAIT], (ui64LastOkTick+ui32DefloodTime)-ui64ActualTick, DeFloodGetMessage(ui8DefloodType, 0)); imsgLen += iret; if(CheckSprintf1(iret, imsgLen, 1024, "DeFloodCheckInterval2") == true) { UserSendCharDelayed(u, msg, imsgLen); } return true; } else { ui64LastOkTick = ui64ActualTick; ui16Count = 0; } } else if((ui64LastOkTick+ui32DefloodTime) <= ui64ActualTick) { ui64LastOkTick = ui64ActualTick; ui16Count = 0; } ui16Count++; return false; }
void DeFloodDoAction(User * u, const uint8_t &ui8DefloodType, const int16_t &ui16Action, uint16_t &ui16Count, char * sOtherNick) { int imsgLen = 0; if(sOtherNick != NULL) { imsgLen = sprintf(msg, "$To: %s From: %s $", u->sNick, sOtherNick); if(CheckSprintf(imsgLen, 1024, "DeFloodDoAction1") == false) { return; } } switch(ui16Action) { case 1: { int iret = sprintf(msg+imsgLen, "<%s> %s!|", SettingManager->sPreTexts[SetMan::SETPRETXT_HUB_SEC], DeFloodGetMessage(ui8DefloodType, 0)); imsgLen += iret; if(CheckSprintf1(iret, imsgLen, 1024, "DeFloodDoAction2") == true) { UserSendCharDelayed(u, msg, imsgLen); } if(ui8DefloodType != DEFLOOD_MAX_DOWN) { ui16Count++; } return; } case 2: u->iDefloodWarnings++; if(DeFloodCheckForWarn(u, ui8DefloodType, sOtherNick) == false && ui8DefloodType != DEFLOOD_MAX_DOWN) { ui16Count++; } return; case 3: { int iret = sprintf(msg+imsgLen, "<%s> %s!|", SettingManager->sPreTexts[SetMan::SETPRETXT_HUB_SEC], DeFloodGetMessage(ui8DefloodType, 0)); imsgLen += iret; if(CheckSprintf1(iret, imsgLen, 1024, "DeFloodDoAction3") == true) { UserSendChar(u, msg, imsgLen); } DeFloodReport(u, ui8DefloodType, LanguageManager->sTexts[LAN_WAS_DISCONNECTED]); UserClose(u); return; } case 4: { hashBanManager->TempBan(u, DeFloodGetMessage(ui8DefloodType, 1), NULL, 0, 0, false); int iret = sprintf(msg+imsgLen, "<%s> %s: %s!|", SettingManager->sPreTexts[SetMan::SETPRETXT_HUB_SEC], LanguageManager->sTexts[LAN_YOU_BEING_KICKED_BCS], DeFloodGetMessage(ui8DefloodType, 1)); imsgLen += iret; if(CheckSprintf1(iret, imsgLen, 1024, "DeFloodDoAction4") == true) { UserSendChar(u, msg, imsgLen); } DeFloodReport(u, ui8DefloodType, LanguageManager->sTexts[LAN_WAS_KICKED]); UserClose(u); return; } case 5: { hashBanManager->TempBan(u, DeFloodGetMessage(ui8DefloodType, 1), NULL, SettingManager->iShorts[SETSHORT_DEFLOOD_TEMP_BAN_TIME], 0, false); int iret = sprintf(msg+imsgLen, "<%s> %s: %s %s: %s!|", SettingManager->sPreTexts[SetMan::SETPRETXT_HUB_SEC], LanguageManager->sTexts[LAN_YOU_HAD_BEEN_TEMP_BANNED_TO], formatTime(SettingManager->iShorts[SETSHORT_DEFLOOD_TEMP_BAN_TIME]), LanguageManager->sTexts[LAN_BECAUSE_LWR], DeFloodGetMessage(ui8DefloodType, 1)); imsgLen += iret; if(CheckSprintf1(iret, imsgLen, 1024, "DeFloodDoAction5") == true) { UserSendChar(u, msg, imsgLen); } DeFloodReport(u, ui8DefloodType, LanguageManager->sTexts[LAN_WAS_TEMPORARY_BANNED]); UserClose(u); return; } case 6: { hashBanManager->Ban(u, DeFloodGetMessage(ui8DefloodType, 1), NULL, false); int iret = sprintf(msg+imsgLen, "<%s> %s: %s!|", SettingManager->sPreTexts[SetMan::SETPRETXT_HUB_SEC], LanguageManager->sTexts[LAN_YOU_ARE_BEING_BANNED_BECAUSE], DeFloodGetMessage(ui8DefloodType, 1)); imsgLen += iret; if(CheckSprintf1(iret, imsgLen, 1024, "DeFloodDoAction6") == true) { UserSendChar(u, msg, imsgLen); } DeFloodReport(u, ui8DefloodType, LanguageManager->sTexts[LAN_WAS_BANNED]); UserClose(u); return; } } }
bool DeFloodCheckForWarn(User * u, const uint8_t &ui8DefloodType, char * sOtherNick) { if(u->iDefloodWarnings < (uint32_t)SettingManager->iShorts[SETSHORT_DEFLOOD_WARNING_COUNT]) { int imsgLen = sprintf(msg, "<%s> %s!|", SettingManager->sPreTexts[SetMan::SETPRETXT_HUB_SEC], DeFloodGetMessage(ui8DefloodType, 0)); if(CheckSprintf(imsgLen, 1024, "DeFloodCheckForWarn1") == true) { UserSendCharDelayed(u, msg, imsgLen); } return false; } else { int imsgLen = 0; if(sOtherNick != NULL) { imsgLen = sprintf(msg, "$To: %s From: %s $", u->sNick, sOtherNick); if(CheckSprintf(imsgLen, 1024, "DeFloodCheckForWarn2") == false) { return true; } } switch(SettingManager->iShorts[SETSHORT_DEFLOOD_WARNING_ACTION]) { case 0: { int iret = sprintf(msg+imsgLen, "<%s> %s: %s!|", SettingManager->sPreTexts[SetMan::SETPRETXT_HUB_SEC], LanguageManager->sTexts[LAN_YOU_ARE_BEING_DISCONNECTED_BECAUSE], DeFloodGetMessage(ui8DefloodType, 1)); imsgLen += iret; if(CheckSprintf1(iret, imsgLen, 1024, "DeFloodCheckForWarn3") == true) { UserSendChar(u, msg, imsgLen); } DeFloodReport(u, ui8DefloodType, LanguageManager->sTexts[LAN_WAS_DISCONNECTED]); break; } case 1: { hashBanManager->TempBan(u, DeFloodGetMessage(ui8DefloodType, 1), NULL, 0, 0, false); int iret = sprintf(msg+imsgLen, "<%s> %s: %s!|", SettingManager->sPreTexts[SetMan::SETPRETXT_HUB_SEC], LanguageManager->sTexts[LAN_YOU_BEING_KICKED_BCS], DeFloodGetMessage(ui8DefloodType, 1)); if(CheckSprintf1(iret, imsgLen, 1024, "DeFloodCheckForWarn4") == true) { UserSendChar(u, msg, imsgLen); } DeFloodReport(u, ui8DefloodType, LanguageManager->sTexts[LAN_WAS_KICKED]); break; } case 2: { hashBanManager->TempBan(u, DeFloodGetMessage(ui8DefloodType, 1), NULL, SettingManager->iShorts[SETSHORT_DEFLOOD_TEMP_BAN_TIME], 0, false); int iret = sprintf(msg+imsgLen, "<%s> %s: %s %s: %s!|", SettingManager->sPreTexts[SetMan::SETPRETXT_HUB_SEC], LanguageManager->sTexts[LAN_YOU_HAD_BEEN_TEMP_BANNED_TO], formatTime(SettingManager->iShorts[SETSHORT_DEFLOOD_TEMP_BAN_TIME]), LanguageManager->sTexts[LAN_BECAUSE_LWR], DeFloodGetMessage(ui8DefloodType, 1)); if(CheckSprintf1(iret, imsgLen, 1024, "DeFloodCheckForWarn5") == true) { UserSendChar(u, msg, imsgLen); } DeFloodReport(u, ui8DefloodType, LanguageManager->sTexts[LAN_WAS_TEMPORARY_BANNED]); break; } case 3: { hashBanManager->Ban(u, DeFloodGetMessage(ui8DefloodType, 1), NULL, false); int iret = sprintf(msg+imsgLen, "<%s> %s: %s!|", SettingManager->sPreTexts[SetMan::SETPRETXT_HUB_SEC], LanguageManager->sTexts[LAN_YOU_ARE_BEING_BANNED_BECAUSE], DeFloodGetMessage(ui8DefloodType, 1)); if(CheckSprintf1(iret, imsgLen, 1024, "DeFloodCheckForWarn6") == true) { UserSendChar(u, msg, imsgLen); } DeFloodReport(u, ui8DefloodType, LanguageManager->sTexts[LAN_WAS_BANNED]); break; } } UserClose(u); return true; } }
void clsGlobalDataQueue::ProcessSingleItems(User * u) const { size_t szLen = 0; SingleDataItem * pNext = pSingleItems; while(pNext != NULL) { SingleDataItem * pCur = pNext; pNext = pCur->pNext; if(pCur->pFromUser != u) { switch(pCur->ui8Type) { case SI_PM2ALL: { // send PM to ALL size_t szWanted = szLen+pCur->szDataLen+u->ui8NickLen+13; if(clsServerManager::szGlobalBufferSize < szWanted) { if(CheckAndResizeGlobalBuffer(szWanted) == false) { AppendDebugLog("%s - [MEM] Cannot reallocate %" PRIu64 " bytes in clsGlobalDataQueue::ProcessSingleItems\n", (uint64_t)Allign128K(szWanted)); break; } } int iret = sprintf(clsServerManager::sGlobalBuffer+szLen, "$To: %s From: ", u->sNick); szLen += iret; CheckSprintf1(iret, szLen, clsServerManager::szGlobalBufferSize, "clsGlobalDataQueue::ProcessSingleItems1"); memcpy(clsServerManager::sGlobalBuffer+szLen, pCur->sData, pCur->szDataLen); szLen += pCur->szDataLen; clsServerManager::sGlobalBuffer[szLen] = '\0'; break; } case SI_PM2OPS: { // send PM only to operators if(((u->ui32BoolBits & User::BIT_OPERATOR) == User::BIT_OPERATOR) == true) { size_t szWanted = szLen+pCur->szDataLen+u->ui8NickLen+13; if(clsServerManager::szGlobalBufferSize < szWanted) { if(CheckAndResizeGlobalBuffer(szWanted) == false) { AppendDebugLog("%s - [MEM] Cannot reallocate %" PRIu64 " bytes in clsGlobalDataQueue::ProcessSingleItems1\n", (uint64_t)Allign128K(szWanted)); break; } } int iret = sprintf(clsServerManager::sGlobalBuffer+szLen, "$To: %s From: ", u->sNick); szLen += iret; CheckSprintf1(iret, szLen, clsServerManager::szGlobalBufferSize, "clsGlobalDataQueue::ProcessSingleItems2"); memcpy(clsServerManager::sGlobalBuffer+szLen, pCur->sData, pCur->szDataLen); szLen += pCur->szDataLen; clsServerManager::sGlobalBuffer[szLen] = '\0'; } break; } case SI_OPCHAT: { // send OpChat only to allowed users... if(clsProfileManager::mPtr->IsAllowed(u, clsProfileManager::ALLOWEDOPCHAT) == true) { size_t szWanted = szLen+pCur->szDataLen+u->ui8NickLen+13; if(clsServerManager::szGlobalBufferSize < szWanted) { if(CheckAndResizeGlobalBuffer(szWanted) == false) { AppendDebugLog("%s - [MEM] Cannot reallocate %" PRIu64 " bytes in clsGlobalDataQueue::ProcessSingleItems2\n", (uint64_t)Allign128K(szWanted)); break; } } int iret = sprintf(clsServerManager::sGlobalBuffer+szLen, "$To: %s From: ", u->sNick); szLen += iret; CheckSprintf1(iret, szLen, clsServerManager::szGlobalBufferSize, "clsGlobalDataQueue::ProcessSingleItems3"); memcpy(clsServerManager::sGlobalBuffer+szLen, pCur->sData, pCur->szDataLen); szLen += pCur->szDataLen; clsServerManager::sGlobalBuffer[szLen] = '\0'; } break; } case SI_TOPROFILE: { // send data only to given profile... if(u->iProfile == pCur->i32Profile) { size_t szWanted = szLen+pCur->szDataLen; if(clsServerManager::szGlobalBufferSize < szWanted) { if(CheckAndResizeGlobalBuffer(szWanted) == false) { AppendDebugLog("%s - [MEM] Cannot reallocate %" PRIu64 " bytes in clsGlobalDataQueue::ProcessSingleItems3\n", (uint64_t)Allign128K(szWanted)); break; } } memcpy(clsServerManager::sGlobalBuffer+szLen, pCur->sData, pCur->szDataLen); szLen += pCur->szDataLen; clsServerManager::sGlobalBuffer[szLen] = '\0'; } break; } case SI_PM2PROFILE: { // send pm only to given profile... if(u->iProfile == pCur->i32Profile) { size_t szWanted = szLen+pCur->szDataLen+u->ui8NickLen+13; if(clsServerManager::szGlobalBufferSize < szWanted) { if(CheckAndResizeGlobalBuffer(szWanted) == false) { AppendDebugLog("%s - [MEM] Cannot reallocate %" PRIu64 " bytes in clsGlobalDataQueue::ProcessSingleItems4\n", (uint64_t)Allign128K(szWanted)); break; } } int iret = sprintf(clsServerManager::sGlobalBuffer+szLen, "$To: %s From: ", u->sNick); szLen += iret; CheckSprintf1(iret, szLen, clsServerManager::szGlobalBufferSize, "clsGlobalDataQueue::ProcessSingleItems4"); memcpy(clsServerManager::sGlobalBuffer+szLen, pCur->sData, pCur->szDataLen); szLen += pCur->szDataLen; clsServerManager::sGlobalBuffer[szLen] = '\0'; } break; } default: break; } } } if(szLen != 0) { u->SendCharDelayed(clsServerManager::sGlobalBuffer, szLen); } ReduceGlobalBuffer(); }