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; }
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; }