#ifndef OMNISOCKET_PY_CLIENT_H #define OMNISOCKET_PY_CLIENT_H #include "peer_kcp_client.h" typedef struct omnisocket_session_stats { uint64_t send_calls; uint64_t send_bytes; uint64_t send_errors; uint64_t recv_calls; uint64_t recv_bytes; uint64_t recv_timeouts; uint64_t recv_errors; int connected; } omnisocket_session_stats_t; typedef struct omnisocket_session_kcp_metrics { int connected; int has_conv; uint32_t conv; char local_addr[OMNI_MAX_ADDR_TEXT]; char remote_addr[OMNI_MAX_ADDR_TEXT]; uint32_t rto_ms; int32_t srtt_ms; int32_t srttvar_ms; uint64_t bytes_sent; uint64_t bytes_received; uint64_t in_pkts; uint64_t out_pkts; uint64_t in_segs; uint64_t out_segs; uint64_t retrans_segs; uint64_t fast_retrans_segs; uint64_t early_retrans_segs; uint64_t lost_segs; uint64_t repeat_segs; uint64_t in_errs; uint64_t kcp_in_errs; uint64_t ring_buffer_snd_queue; uint64_t ring_buffer_rcv_queue; uint64_t ring_buffer_snd_buffer; } omnisocket_session_kcp_metrics_t; typedef struct omnisocket_session { pthread_mutex_t mutex; pthread_cond_t idle_cond; kcp_client_t *client; size_t active_ops; int closing; omnisocket_session_stats_t stats; } omnisocket_session_t; int omnisocket_session_init(omnisocket_session_t *session); void omnisocket_session_destroy(omnisocket_session_t *session); int omnisocket_session_connect( omnisocket_session_t *session, const char *server_addr, const char *relay_via, const char *peer_id, const char *bind_ip, const char *bind_device, const kcp_conn_options_t *options, int stats_interval_ms ); int omnisocket_session_close(omnisocket_session_t *session); int omnisocket_session_send(omnisocket_session_t *session, const char *to, const void *data, size_t data_len); int omnisocket_session_recv(omnisocket_session_t *session, message_t *out_msg, int timeout_ms); int omnisocket_session_recv_into( omnisocket_session_t *session, void *buffer, size_t buffer_len, kcp_client_recv_meta_t *out_meta, int timeout_ms ); void omnisocket_session_stats_snapshot(omnisocket_session_t *session, omnisocket_session_stats_t *out_stats); int omnisocket_session_kcp_metrics_snapshot( omnisocket_session_t *session, omnisocket_session_kcp_metrics_t *out_metrics ); #endif