Пример #1
0
bool AntiDos::transferBegin(int id, int length, const QString &ip)
{
    if (id < 0) {
        qFatal("Fatal! Negative id in AntiDOS: %d", id);
    }

    /* If the IP is in the Trusted Ips list, do not do anything */
    if (trusted_ips.contains(ip)) {
        return true;
    }

    if (transfersPerId.contains(id)) {
        QList< QPair<time_t, size_t> > &l = transfersPerId[id];
        int &len = sizeOfTransfers[id];
        int orlen = len;

        int i = 0;

        /* Removing commands older than 1 minute */
        while (i < l.size()) {
            if (time(NULL)-l[i].first > 60) {
                len -= l[i].second;
                i++;
            }  else {
                break;
            }
        }

        if (len < 0) {
            qFatal("Fatal! Negative length in antidos: %d > %d, id: %d, removed: %d", orlen, len, id, i);
        }

        l.erase(l.begin(), l.begin()+i);


        if (l.size() >= max_commands_per_user && on) {
            emit kick(id);
            addKick(ip);
            return false;
        }


        if (len + length > max_kb_per_user*1024 && on) {
            emit kick(id);
            addKick(ip);
            return false;
        }
    } else if (length > max_kb_per_user*1024 && on) {
        emit kick(id);
        addKick(ip);
        return false;
    }

    sizeOfTransfers[id] += length;
    transfersPerId[id].push_back(QPair<time_t, size_t>(time(NULL), length));

    return true;
}
Пример #2
0
bool AntiDos::transferBegin(int id, int length, const QString &ip)
{
    if (transfersPerId.contains(id)) {
        QList< QPair<time_t, size_t> > &l = transfersPerId[id];
        size_t &len = sizeOfTransfers[id];

        int i = 0;

        /* Removing commands older than 1 minute */
        while (i < l.size()) {
            if (time(NULL)-l[i].first > 60) {
                len -= l[i].second;
                i++;
            }  else {
                break;
            }
        }

        l.erase(l.begin(), l.begin()+i);

        if (l.size() >= max_commands_per_user) {
            emit kick(id);
            addKick(ip);
            return false;
        }

        if (len + length > size_t(max_kb_per_user)*1024) {
            emit kick(id);
            addKick(ip);
            return false;
        }
    } else if (length > max_kb_per_user*1024) {
        emit kick(id);
        addKick(ip);
        return false;
    }

    sizeOfTransfers[id] += length;
    transfersPerId[id].push_back(QPair<time_t, size_t>(time(NULL), length));

    return true;
}