2#ifndef _KURLYK_WEBSOCKET_RATE_LIMITER_HPP_INCLUDED
3#define _KURLYK_WEBSOCKET_RATE_LIMITER_HPP_INCLUDED
19 void set_limit(
const std::vector<WebSocketConfig::RateLimitData>& rate_limits) {
20 std::lock_guard<std::mutex> lock(
m_mutex);
22 for (
size_t i = 0; i < rate_limits.size(); ++i) {
23 m_limit_data[i].requests_per_period = rate_limits[i].requests_per_period;
25 m_limit_data[i].start_time = std::chrono::steady_clock::now();
42 if (rate_limit_id < 0)
return true;
43 std::lock_guard<std::mutex> lock(
m_mutex);
44 if (rate_limit_id >=
static_cast<long>(
m_limit_data.size()))
return true;
48 bool specific_limit_allowed = (rate_limit_id == 0) ||
check_limit(rate_limit_id);
50 if (general_limit_allowed && specific_limit_allowed) {
53 if (rate_limit_id != 0) {
83 auto now = std::chrono::steady_clock::now();
84 auto elapsed_time = std::chrono::duration_cast<std::chrono::milliseconds>(now - limit_data.
start_time);
87 if (elapsed_time.count() >= limit_data.
period_ms) {
103 auto now = std::chrono::steady_clock::now();
104 auto elapsed_time = std::chrono::duration_cast<std::chrono::milliseconds>(now - limit_data.
start_time);
107 if (elapsed_time.count() >= limit_data.
period_ms) {
109 limit_data.
count = 0;
Manages rate limiting for WebSocket requests based on predefined limits.
void update_limit(long rate_limit_id)
Updates the request count for the specified rate limit ID.
bool check_limit(long rate_limit_id)
Checks if a request is allowed under the specified rate limit without updating the count.
std::chrono::steady_clock::time_point time_point_t
bool allow_request(long rate_limit_id)
Checks if a request is allowed under the specified rate limit.
std::vector< LimitData > m_limit_data
Vector storing rate limit configurations.
std::mutex m_mutex
Mutex to protect shared data.
void set_limit(const std::vector< WebSocketConfig::RateLimitData > &rate_limits)
Sets the rate limits to control WebSocket request frequency.
Primary namespace for the Kurlyk library, encompassing initialization, request management,...
long requests_per_period
Maximum requests allowed per period.
long count
Number of requests made in the current period.
time_point_t start_time
Start time of the current rate limit period.
long period_ms
Duration of the rate limit period in milliseconds.