ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
rate_limit.h
Go to the documentation of this file.
1
35
36#pragma once
37
39#include <stdbool.h>
40#include <stddef.h>
41#include <stdint.h>
42
65
77
84
92typedef struct {
93 asciichat_error_t (*check)(void *backend_data, const char *ip_address, rate_event_type_t event_type,
94 const rate_limit_config_t *config, bool *allowed);
95
96 asciichat_error_t (*record)(void *backend_data, const char *ip_address, rate_event_type_t event_type);
97
99
100 void (*destroy)(void *backend_data);
102
107
108// ============================================================================
109// Rate Limiter Creation
110// ============================================================================
111
121
131rate_limiter_t *rate_limiter_create_sqlite(const char *db_path);
132
143void rate_limiter_set_sqlite_db(rate_limiter_t *limiter, void *db);
144
151
152// ============================================================================
153// Rate Limiting Operations
154// ============================================================================
155
168asciichat_error_t rate_limiter_check(rate_limiter_t *limiter, const char *ip_address, rate_event_type_t event_type,
169 const rate_limit_config_t *config, bool *allowed);
170
181asciichat_error_t rate_limiter_record(rate_limiter_t *limiter, const char *ip_address, rate_event_type_t event_type);
182
194
195// ============================================================================
196// Utility Functions
197// ============================================================================
198
Synchronized per-thread pending error stacks and value snapshots. SET_ERRNO pushes,...
unsigned int uint32_t
Definition common.h:62
asciichat_error_t
Error and exit codes - unified status values (0-255).
Definition error_codes.h:44
const rate_limit_config_t DEFAULT_RATE_LIMITS[RATE_EVENT_MAX]
Default rate limits for each event type.
Definition rate_limit.c:33
rate_event_type_t
One sliding-window rate-limit policy.
Definition rate_limit.h:48
@ RATE_EVENT_SESSION_LOOKUP
Session lookup.
Definition rate_limit.h:51
@ RATE_EVENT_CONTROL
Control packets (CAPABILITIES, STREAM_START/STOP, LEAVE).
Definition rate_limit.h:60
@ RATE_EVENT_SESSION_JOIN
Session join.
Definition rate_limit.h:52
@ RATE_EVENT_CONNECTION
New connection.
Definition rate_limit.h:55
@ RATE_EVENT_PING
Ping/pong keepalive (PACKET_TYPE_PING, PACKET_TYPE_PONG).
Definition rate_limit.h:58
@ RATE_EVENT_SESSION_CREATE
Session creation.
Definition rate_limit.h:50
@ RATE_EVENT_AUDIO
Audio packet (PACKET_TYPE_AUDIO, PACKET_TYPE_AUDIO_BATCH).
Definition rate_limit.h:57
@ RATE_EVENT_MAX
Sentinel value.
Definition rate_limit.h:63
@ RATE_EVENT_IMAGE_FRAME
Image frame from client (PACKET_TYPE_IMAGE_FRAME).
Definition rate_limit.h:56
@ RATE_EVENT_CLIENT_JOIN
Client join request (PACKET_TYPE_CLIENT_JOIN).
Definition rate_limit.h:59
@ RATE_EVENT_HTTP_REQUEST
HTTP requests from a client identity.
Definition rate_limit.h:61
asciichat_error_t rate_limiter_record(rate_limiter_t *limiter, const char *ip_address, rate_event_type_t event_type)
Record a rate limit event.
Definition rate_limit.c:162
struct rate_limiter_s rate_limiter_t
Opaque rate limiter handle.
Definition rate_limit.h:83
void rate_limiter_destroy(rate_limiter_t *limiter)
Destroy rate limiter and free resources.
Definition rate_limit.c:126
void rate_limiter_set_sqlite_db(rate_limiter_t *limiter, void *db)
Set SQLite database handle for rate limiter.
Definition rate_limit.c:117
rate_limiter_t * rate_limiter_create_memory(void)
Create in-memory rate limiter.
Definition rate_limit.c:83
const char * rate_limiter_event_type_string(rate_event_type_t event_type)
Get event type string for logging/database storage.
Definition rate_limit.c:194
rate_limiter_t * rate_limiter_create_sqlite(const char *db_path)
Create SQLite-backed rate limiter.
Definition rate_limit.c:100
asciichat_error_t rate_limiter_check(rate_limiter_t *limiter, const char *ip_address, rate_event_type_t event_type, const rate_limit_config_t *config, bool *allowed)
Check if an event from an IP address should be rate limited.
Definition rate_limit.c:138
asciichat_error_t rate_limiter_prune(rate_limiter_t *limiter, uint32_t max_age_secs)
Clean up old rate limit events.
Definition rate_limit.c:178
One sliding-window rate-limit policy.
Definition rate_limit.h:73
uint32_t max_events
Maximum events allowed.
Definition rate_limit.h:74
uint32_t window_secs
Time window in seconds.
Definition rate_limit.h:75
Backend callbacks implementing rate-limit checks, recording, cleanup, and destruction.
Definition rate_limit.h:92
void(* destroy)(void *backend_data)
Definition rate_limit.h:100
asciichat_error_t(* cleanup)(void *backend_data, uint32_t max_age_secs)
Definition rate_limit.h:98
asciichat_error_t(* record)(void *backend_data, const char *ip_address, rate_event_type_t event_type)
Definition rate_limit.h:96
asciichat_error_t(* check)(void *backend_data, const char *ip_address, rate_event_type_t event_type, const rate_limit_config_t *config, bool *allowed)
Definition rate_limit.h:93
Private dispatch object joining a rate-limit backend to its operations table.
Definition rate_limit.c:74
void * backend_data
Backend-specific data.
Definition rate_limit.c:76