#ifndef CONNPOOL_H #define CONNPOOL_H #include "nwedav.h" #include "../platform/pal.h" #include "../platform/memory.h" #include "../http/parser.h" #include "../http/response.h" typedef struct connection { socket_t fd; conn_state_t state; struct sockaddr_storage addr; socklen_t addr_len; buffer_t *read_buf; buffer_t *write_buf; size_t write_offset; http_request_t request; http_response_t response; void *tls_ctx; int64_t last_activity; int keep_alive; int requests_served; uint32_t user_id; char username[64]; char client_ip[64]; mutex_t mutex; volatile int processing; struct connection *next; struct connection *prev; } connection_t; typedef struct connection_pool connection_pool_t; connection_pool_t *connpool_create(size_t max_connections); void connpool_destroy(connection_pool_t *pool); connection_t *connpool_acquire(connection_pool_t *pool); void connpool_release(connection_pool_t *pool, connection_t *conn); void connection_init(connection_t *conn, socket_t fd, struct sockaddr *addr, socklen_t addr_len); void connection_reset(connection_t *conn); void connection_close(connection_t *conn); size_t connpool_active_count(connection_pool_t *pool); size_t connpool_free_count(connection_pool_t *pool); #endif