186 lines
3.9 KiB
C
Raw Normal View History

2025-11-29 01:49:14 +01:00
#ifndef RPROXY_TYPES_H
#define RPROXY_TYPES_H
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#include <stdbool.h>
#include <stddef.h>
#include <time.h>
#include <openssl/ssl.h>
#include <sqlite3.h>
#define MAX_EVENTS 4096
#define MAX_FDS 65536
#define CHUNK_SIZE 65536
#define HISTORY_SECONDS 300
#define MAX_HEADER_SIZE 8192
#define MAX_REQUEST_LINE_SIZE 4096
#define MAX_URI_SIZE 2048
#define CONNECTION_TIMEOUT 300
2025-11-29 04:58:34 +01:00
#define ERROR_RESPONSE_SIZE 4096
#define HOST_HEADER_SIZE 512
#define MAX_BUFFER_SIZE (64 * 1024 * 1024)
#define MIN_DATA_FOR_REQUEST_CHECK 1
#define RATE_LIMIT_WINDOW_SECONDS 60
#define DEFAULT_RATE_LIMIT_REQUESTS 1000
#define HEALTH_CHECK_INTERVAL_SECONDS 30
#define HEALTH_CHECK_TIMEOUT_MS 5000
#define MAX_UPSTREAM_RETRIES 3
#define UPSTREAM_RETRY_DELAY_MS 100
2025-11-29 01:49:14 +01:00
typedef enum {
CONN_TYPE_UNUSED,
CONN_TYPE_LISTENER,
CONN_TYPE_CLIENT,
CONN_TYPE_UPSTREAM
} conn_type_t;
typedef enum {
CLIENT_STATE_READING_HEADERS,
CLIENT_STATE_FORWARDING,
CLIENT_STATE_SERVING_INTERNAL,
CLIENT_STATE_ERROR,
CLIENT_STATE_CLOSING
} client_state_t;
typedef struct {
char *data;
size_t capacity;
size_t head;
size_t tail;
} buffer_t;
typedef struct {
char method[32];
char uri[MAX_URI_SIZE];
char version[16];
char host[256];
long content_length;
int is_websocket;
int keep_alive;
int connection_close;
bool is_chunked;
} http_request_t;
struct connection_s;
struct vhost_stats_s;
typedef struct connection_s {
conn_type_t type;
client_state_t state;
int fd;
struct connection_s *pair;
struct vhost_stats_s *vhost_stats;
buffer_t read_buf;
buffer_t write_buf;
SSL *ssl;
int ssl_handshake_done;
http_request_t request;
double request_start_time;
time_t last_activity;
int half_closed;
int write_shutdown;
} connection_t;
typedef struct {
char hostname[256];
char upstream_host[256];
int upstream_port;
int use_ssl;
int rewrite_host;
2025-11-29 04:58:34 +01:00
int use_auth;
char username[128];
char password_hash[256];
2025-11-29 01:49:14 +01:00
} route_config_t;
typedef struct {
int port;
route_config_t *routes;
int route_count;
} app_config_t;
typedef struct {
double time;
double value;
} history_point_t;
typedef struct {
history_point_t *points;
int capacity;
int head;
int count;
} history_deque_t;
typedef struct {
double time;
double rx_kbps;
double tx_kbps;
} network_history_point_t;
typedef struct {
network_history_point_t *points;
int capacity;
int head;
int count;
} network_history_deque_t;
typedef struct {
double time;
double read_mbps;
double write_mbps;
} disk_history_point_t;
typedef struct {
disk_history_point_t *points;
int capacity;
int head;
int count;
} disk_history_deque_t;
typedef struct {
double *times;
int capacity;
int head;
int count;
} request_time_deque_t;
typedef struct vhost_stats_s {
char vhost_name[256];
long long http_requests;
long long websocket_requests;
long long total_requests;
long long bytes_sent;
long long bytes_recv;
double avg_request_time_ms;
long long last_bytes_sent;
long long last_bytes_recv;
double last_update;
history_deque_t throughput_history;
request_time_deque_t request_times;
struct vhost_stats_s *next;
} vhost_stats_t;
typedef struct {
time_t start_time;
int active_connections;
history_deque_t cpu_history;
history_deque_t memory_history;
network_history_deque_t network_history;
disk_history_deque_t disk_history;
history_deque_t throughput_history;
history_deque_t load1_history;
history_deque_t load5_history;
history_deque_t load15_history;
long long last_net_sent;
long long last_net_recv;
long long last_disk_read;
long long last_disk_write;
double last_net_update_time;
double last_disk_update_time;
vhost_stats_t *vhost_stats_head;
sqlite3 *db;
} system_monitor_t;
#endif