#ifndef OMNI_TRANSPORT_KCP_H #define OMNI_TRANSPORT_KCP_H #include "kcp_packet_debug.h" #include "kcp_session_stats.h" #include "latencylog.h" #ifdef __cplusplus extern "C" { #endif #define KCP_DEFAULT_NODELAY 1 #define KCP_DEFAULT_INTERVAL_MS 10 #define KCP_DEFAULT_RESEND 2 #define KCP_DEFAULT_NC 1 #define KCP_DEFAULT_SND_WND 256 #define KCP_DEFAULT_RCV_WND 256 #define KCP_DEFAULT_MTU 1400 #define KCP_DEFAULT_STATS_INTERVAL_MS 100 #define KCP_CONTROL_NODELAY 1 #define KCP_CONTROL_INTERVAL_MS 5 #define KCP_CONTROL_RESEND 2 #define KCP_CONTROL_NC 1 #define KCP_CONTROL_SND_WND 32 #define KCP_CONTROL_RCV_WND 32 #define KCP_CONTROL_MTU 1400 #define KCP_VIDEO_NODELAY 1 #define KCP_VIDEO_INTERVAL_MS 10 #define KCP_VIDEO_RESEND 2 #define KCP_VIDEO_NC 1 #define KCP_VIDEO_SND_WND 256 #define KCP_VIDEO_RCV_WND 256 #define KCP_VIDEO_MTU 1400 #define KCP_NODELAY KCP_DEFAULT_NODELAY #define KCP_INTERVAL KCP_DEFAULT_INTERVAL_MS #define KCP_RESEND KCP_DEFAULT_RESEND #define KCP_NC KCP_DEFAULT_NC #define KCP_WND_SIZE KCP_DEFAULT_SND_WND #define KCP_MTU KCP_DEFAULT_MTU typedef struct kcp_conn kcp_conn_t; typedef struct kcp_listener kcp_listener_t; typedef struct kcp_conn_options { int nodelay; int interval_ms; int resend; int nc; int sndwnd; int rcvwnd; int mtu; } kcp_conn_options_t; void kcp_conn_options_init(kcp_conn_options_t *options); void kcp_conn_options_set_control_defaults(kcp_conn_options_t *options); void kcp_conn_options_set_video_defaults(kcp_conn_options_t *options); kcp_conn_t *kcp_conn_dial_with_options(const char *server_addr, const char *bind_ip, const char *bind_device, const kcp_conn_options_t *options, kcp_packet_debug_logger_t *packet_logger, latency_logger_t *logger, const char *node_role, const char *node_id, kcp_session_stats_logger_t *stats_logger, int stats_interval_ms); kcp_conn_t *kcp_conn_dial(const char *server_addr, const char *bind_ip, const char *bind_device, kcp_packet_debug_logger_t *packet_logger, latency_logger_t *logger, const char *node_role, const char *node_id, kcp_session_stats_logger_t *stats_logger, int stats_interval_ms); int kcp_conn_configure_runtime(kcp_conn_t *conn, latency_logger_t *logger, const char *node_role, const char *node_id, kcp_session_stats_logger_t *stats_logger, int stats_interval_ms); int kcp_conn_apply_options(kcp_conn_t *conn, const kcp_conn_options_t *options); int kcp_conn_send(kcp_conn_t *conn, const message_t *msg); int kcp_conn_receive_timed(kcp_conn_t *conn, message_t *out_msg, int timeout_ms); int kcp_conn_receive(kcp_conn_t *conn, message_t *out_msg); int kcp_conn_close(kcp_conn_t *conn); void kcp_conn_free(kcp_conn_t *conn); uint32_t kcp_conn_conv(const kcp_conn_t *conn); int kcp_conn_local_addr(const kcp_conn_t *conn, struct sockaddr_storage *addr, socklen_t *addr_len); kcp_listener_t *kcp_listener_listen(const char *listen_addr, const char *bind_device, kcp_packet_debug_logger_t *packet_logger, const char *node_role, const char *node_id); kcp_conn_t *kcp_listener_accept(kcp_listener_t *listener); int kcp_listener_close(kcp_listener_t *listener); void kcp_listener_free(kcp_listener_t *listener); int kcp_session_stats_parse_interval_ms(const char *raw, int *out_ms); #ifdef __cplusplus } #endif #endif