Пример #1
0
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;
}
Пример #2
0
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;
        }
    }
}
Пример #3
0
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;
    }
}
Пример #4
0
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();
}