Rate limit getchallenge
This commit is contained in:
parent
2937ac7661
commit
7b15415042
3 changed files with 39 additions and 20 deletions
|
@ -354,30 +354,13 @@ CONNECTIONLESS COMMANDS
|
|||
==============================================================================
|
||||
*/
|
||||
|
||||
typedef struct leakyBucket_s leakyBucket_t;
|
||||
struct leakyBucket_s {
|
||||
netadrtype_t type;
|
||||
|
||||
union {
|
||||
byte _4[4];
|
||||
byte _6[16];
|
||||
} ipv;
|
||||
|
||||
int lastTime;
|
||||
signed char burst;
|
||||
|
||||
long hash;
|
||||
|
||||
leakyBucket_t *prev, *next;
|
||||
};
|
||||
|
||||
// This is deliberately quite large to make it more of an effort to DoS
|
||||
#define MAX_BUCKETS 16384
|
||||
#define MAX_HASHES 1024
|
||||
|
||||
static leakyBucket_t buckets[ MAX_BUCKETS ];
|
||||
static leakyBucket_t *bucketHashes[ MAX_HASHES ];
|
||||
static leakyBucket_t outboundLeakyBucket;
|
||||
leakyBucket_t outboundLeakyBucket;
|
||||
|
||||
/*
|
||||
================
|
||||
|
@ -494,7 +477,7 @@ static leakyBucket_t *SVC_BucketForAddress( netadr_t address, int burst, int per
|
|||
SVC_RateLimit
|
||||
================
|
||||
*/
|
||||
static qboolean SVC_RateLimit( leakyBucket_t *bucket, int burst, int period ) {
|
||||
qboolean SVC_RateLimit( leakyBucket_t *bucket, int burst, int period ) {
|
||||
if ( bucket != NULL ) {
|
||||
int now = Sys_Milliseconds();
|
||||
int interval = now - bucket->lastTime;
|
||||
|
@ -526,7 +509,7 @@ SVC_RateLimitAddress
|
|||
Rate limit for a particular address
|
||||
================
|
||||
*/
|
||||
static qboolean SVC_RateLimitAddress( netadr_t from, int burst, int period ) {
|
||||
qboolean SVC_RateLimitAddress( netadr_t from, int burst, int period ) {
|
||||
leakyBucket_t *bucket = SVC_BucketForAddress( from, burst, period );
|
||||
|
||||
return SVC_RateLimit( bucket, burst, period );
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue