Major refactoring
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
#ifndef TCP_INCLUDED
|
||||
#define TCP_INCLUDED
|
||||
|
||||
#include "basic.h"
|
||||
#include "byte_queue.h"
|
||||
#include "tls.h"
|
||||
|
||||
typedef struct TCP TCP;
|
||||
|
||||
typedef struct {
|
||||
TCP* tcp;
|
||||
uint16_t gen;
|
||||
int idx;
|
||||
} TCP_Handle;
|
||||
|
||||
typedef enum {
|
||||
TCP_CONN_STATE_FREE,
|
||||
TCP_CONN_STATE_HANDSHAKE,
|
||||
TCP_CONN_STATE_ESTABLISHED,
|
||||
TCP_CONN_STATE_CONNECTING,
|
||||
TCP_CONN_STATE_ACCEPTING,
|
||||
TCP_CONN_STATE_SHUTDOWN,
|
||||
} TCP_ConnState;
|
||||
|
||||
#define TCP_CONNECT_ADDR_LIMIT 8
|
||||
|
||||
enum {
|
||||
TCP_EVENT_NEW = 1<<0,
|
||||
TCP_EVENT_HUP = 1<<1,
|
||||
TCP_EVENT_DATA = 1<<2,
|
||||
};
|
||||
|
||||
enum {
|
||||
TCP_CONN_FLAG_CLOSED = 1<<0,
|
||||
TCP_CONN_FLAG_SECURE = 1<<1,
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
TCP_ConnState state;
|
||||
int flags;
|
||||
int events;
|
||||
uint16_t gen;
|
||||
int fd;
|
||||
bool handled;
|
||||
bool closing;
|
||||
void *user_ptr;
|
||||
ByteQueue input;
|
||||
ByteQueue output;
|
||||
#ifdef TLS_ENABLED
|
||||
TLS_Conn tls;
|
||||
#endif
|
||||
Address addrs[TCP_CONNECT_ADDR_LIMIT];
|
||||
int num_addrs;
|
||||
int addr_idx;
|
||||
} TCP_Conn;
|
||||
|
||||
struct TCP {
|
||||
int tls_listen_fd;
|
||||
int tcp_listen_fd;
|
||||
int num_conns;
|
||||
int max_conns;
|
||||
TCP_Conn *conns;
|
||||
#ifdef TLS_ENABLED
|
||||
TLS_Server tls;
|
||||
#endif
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
int flags;
|
||||
TCP_Handle handle;
|
||||
} TCP_Event;
|
||||
|
||||
typedef ByteQueueOffset TCP_Offset;
|
||||
|
||||
struct pollfd;
|
||||
|
||||
int tcp_init(TCP *tcp, int max_conns);
|
||||
void tcp_free(TCP *tcp);
|
||||
int tcp_listen_tcp(TCP *tcp, string addr, uint16_t port, bool reuse_addr, int backlog);
|
||||
int tcp_listen_tls(TCP *tcp, string addr, uint16_t port, bool reuse_addr, int backlog);
|
||||
int tcp_add_cert(TCP *tcp, string cert_file, string key_file);
|
||||
int tcp_connect(TCP *tcp, bool secure, Address *addrs, int num_addrs);
|
||||
void tcp_process_events(TCP *tcp, void **ptrs, struct pollfd *arr, int num);
|
||||
int tcp_register_events(TCP *tcp, void **ptrs, struct pollfd *arr, int cap);
|
||||
bool tcp_next_event(TCP *tcp, TCP_Event *event);
|
||||
ByteView tcp_read_buf(TCP_Handle handle);
|
||||
void tcp_read_ack(TCP_Handle handle, int num);
|
||||
ByteView tcp_write_buf(TCP_Handle handle);
|
||||
void tcp_write_ack(TCP_Handle handle, int num);
|
||||
TCP_Offset tcp_write_off(TCP_Handle handle);
|
||||
void tcp_write(TCP_Handle handle, string str);
|
||||
void tcp_patch(TCP_Handle handle, TCP_Offset offset, void *src, int len);
|
||||
void tcp_clear_from_offset(TCP_Handle handle, TCP_Offset offset);
|
||||
void tcp_close(TCP_Handle handle);
|
||||
void tcp_set_user_ptr(TCP_Handle handle, void *ptr);
|
||||
void *tcp_get_user_ptr(TCP_Handle handle);
|
||||
void tcp_mark_ready(TCP_Handle handle);
|
||||
|
||||
#endif // TCP_INCLUDED
|
||||
Reference in New Issue
Block a user