ascii-chat 0.6.0
Real-time terminal-based video chat with ASCII art conversion
Loading...
Searching...
No Matches
rate_limit.h
Go to the documentation of this file.
1
36#pragma once
37
38#include "asciichat_errno.h"
39#include <stdbool.h>
40#include <stddef.h>
41#include <stdint.h>
42
62
70
77
83typedef struct {
84 asciichat_error_t (*check)(void *backend_data, const char *ip_address, rate_event_type_t event_type,
85 const rate_limit_config_t *config, bool *allowed);
86
87 asciichat_error_t (*record)(void *backend_data, const char *ip_address, rate_event_type_t event_type);
88
89 asciichat_error_t (*cleanup)(void *backend_data, uint32_t max_age_secs);
90
91 void (*destroy)(void *backend_data);
93
98
99// ============================================================================
100// Rate Limiter Creation
101// ============================================================================
102
112
122rate_limiter_t *rate_limiter_create_sqlite(const char *db_path);
123
134void rate_limiter_set_sqlite_db(rate_limiter_t *limiter, void *db);
135
142
143// ============================================================================
144// Rate Limiting Operations
145// ============================================================================
146
159asciichat_error_t rate_limiter_check(rate_limiter_t *limiter, const char *ip_address, rate_event_type_t event_type,
160 const rate_limit_config_t *config, bool *allowed);
161
172asciichat_error_t rate_limiter_record(rate_limiter_t *limiter, const char *ip_address, rate_event_type_t event_type);
173
⚠️‼️ Error and/or exit() when things go bad.
unsigned int uint32_t
Definition common.h:58
asciichat_error_t
Error and exit codes - unified status values (0-255)
Definition error_codes.h:46
rate_event_type_t
Rate limit event types.
Definition rate_limit.h:46
@ RATE_EVENT_SESSION_LOOKUP
Session lookup.
Definition rate_limit.h:49
@ RATE_EVENT_CONTROL
Control packets (CAPABILITIES, STREAM_START/STOP, LEAVE)
Definition rate_limit.h:58
@ RATE_EVENT_SESSION_JOIN
Session join.
Definition rate_limit.h:50
@ RATE_EVENT_CONNECTION
New connection.
Definition rate_limit.h:53
@ RATE_EVENT_PING
Ping/pong keepalive (PACKET_TYPE_PING, PACKET_TYPE_PONG)
Definition rate_limit.h:56
@ RATE_EVENT_SESSION_CREATE
Session creation.
Definition rate_limit.h:48
@ RATE_EVENT_AUDIO
Audio packet (PACKET_TYPE_AUDIO, PACKET_TYPE_AUDIO_BATCH)
Definition rate_limit.h:55
@ RATE_EVENT_MAX
Sentinel value.
Definition rate_limit.h:60
@ RATE_EVENT_IMAGE_FRAME
Image frame from client (PACKET_TYPE_IMAGE_FRAME)
Definition rate_limit.h:54
@ RATE_EVENT_CLIENT_JOIN
Client join request (PACKET_TYPE_CLIENT_JOIN)
Definition rate_limit.h:57
asciichat_error_t rate_limiter_cleanup(rate_limiter_t *limiter, uint32_t max_age_secs)
Clean up old rate limit events.
Definition rate_limit.c:160
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:144
void rate_limiter_destroy(rate_limiter_t *limiter)
Destroy rate limiter and free resources.
Definition rate_limit.c:115
void rate_limiter_set_sqlite_db(rate_limiter_t *limiter, void *db)
Set SQLite database handle for rate limiter.
Definition rate_limit.c:106
rate_limiter_t * rate_limiter_create_memory(void)
Create in-memory rate limiter.
Definition rate_limit.c:72
rate_limiter_t * rate_limiter_create_sqlite(const char *db_path)
Create SQLite-backed rate limiter.
Definition rate_limit.c:89
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:127
const rate_limit_config_t DEFAULT_RATE_LIMITS[RATE_EVENT_MAX]
Default rate limits for each event type.
Definition rate_limit.c:29
Rate limit configuration.
Definition rate_limit.h:66
uint32_t max_events
Maximum events allowed.
Definition rate_limit.h:67
uint32_t window_secs
Time window in seconds.
Definition rate_limit.h:68
Backend operations vtable.
Definition rate_limit.h:83
Rate limiter structure.
Definition rate_limit.c:63
void * backend_data
Backend-specific data.
Definition rate_limit.c:65