RateLimiter.h 515 B

1234567891011121314151617181920212223
  1. #pragma once
  2. #include <stdint.h>
  3. class RateLimiter {
  4. uint32_t _start_timestamp;
  5. uint32_t _secs;
  6. uint16_t _maximum, _count;
  7. public:
  8. RateLimiter(uint16_t maximum, uint32_t secs): _maximum(maximum), _secs(secs), _start_timestamp(0), _count(0) { }
  9. bool allow(uint32_t now) {
  10. if (now < _start_timestamp + _secs) {
  11. _count++;
  12. if (_count > _maximum) return false; // deny
  13. } else { // time window now expired
  14. _start_timestamp = now;
  15. _count = 1;
  16. }
  17. return true;
  18. }
  19. };