mirror of https://github.com/meshcore-dev/MeshCore
Browse Source
* repeater: DISCOVER requests now with a simple RateLimiter (max 4, every 2 minutes)pull/1068/head
3 changed files with 36 additions and 4 deletions
@ -0,0 +1,23 @@ |
|||||
|
#pragma once |
||||
|
|
||||
|
#include <stdint.h> |
||||
|
|
||||
|
class RateLimiter { |
||||
|
uint32_t _start_timestamp; |
||||
|
uint32_t _secs; |
||||
|
uint16_t _maximum, _count; |
||||
|
|
||||
|
public: |
||||
|
RateLimiter(uint16_t maximum, uint32_t secs): _maximum(maximum), _secs(secs), _start_timestamp(0), _count(0) { } |
||||
|
|
||||
|
bool allow(uint32_t now) { |
||||
|
if (now < _start_timestamp + _secs) { |
||||
|
_count++; |
||||
|
if (_count > _maximum) return false; // deny
|
||||
|
} else { // time window now expired
|
||||
|
_start_timestamp = now; |
||||
|
_count = 1; |
||||
|
} |
||||
|
return true; |
||||
|
} |
||||
|
}; |
||||
Loading…
Reference in new issue