Files
OmniSocketGo/include/transport_kcp.h

116 lines
4.2 KiB
C

#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_TELEMETRY_NODELAY 0
#define KCP_TELEMETRY_INTERVAL_MS 50
#define KCP_TELEMETRY_RESEND 0
#define KCP_TELEMETRY_NC 0
#define KCP_TELEMETRY_SND_WND 64
#define KCP_TELEMETRY_RCV_WND 64
#define KCP_TELEMETRY_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_runtime_stats {
int connected;
uint32_t conv;
uint32_t rto_ms;
int32_t srtt_ms;
int32_t srttvar_ms;
uint32_t snd_wnd;
uint32_t rmt_wnd;
uint32_t inflight;
uint32_t window_limit;
double window_pressure_pct;
uint32_t snd_queue;
uint32_t rcv_queue;
uint32_t snd_buffer;
uint64_t out_segs_total;
uint64_t retrans_total;
uint64_t fast_retrans_total;
uint64_t lost_total;
uint64_t repeat_total;
uint32_t xmit_total;
} kcp_runtime_stats_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);
void kcp_conn_options_set_telemetry_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);
int kcp_conn_remote_addr(const kcp_conn_t *conn, struct sockaddr_storage *addr, socklen_t *addr_len);
void kcp_conn_runtime_stats_snapshot(kcp_conn_t *conn, kcp_runtime_stats_t *out_stats);
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