kcp/
ffi.rs

1#![allow(dead_code)]
2#![allow(improper_ctypes)]
3#![allow(non_camel_case_types)]
4#![allow(non_upper_case_globals)]
5#![allow(non_snake_case)]
6#![allow(clippy::missing_safety_doc)]
7
8pub const IKCP_LOG_OUTPUT: u32 = 1;
9pub const IKCP_LOG_INPUT: u32 = 2;
10pub const IKCP_LOG_SEND: u32 = 4;
11pub const IKCP_LOG_RECV: u32 = 8;
12pub const IKCP_LOG_IN_DATA: u32 = 16;
13pub const IKCP_LOG_IN_ACK: u32 = 32;
14pub const IKCP_LOG_IN_PROBE: u32 = 64;
15pub const IKCP_LOG_IN_WINS: u32 = 128;
16pub const IKCP_LOG_OUT_DATA: u32 = 256;
17pub const IKCP_LOG_OUT_ACK: u32 = 512;
18pub const IKCP_LOG_OUT_PROBE: u32 = 1024;
19pub const IKCP_LOG_OUT_WINS: u32 = 2048;
20pub type ISTDUINT32 = ::std::os::raw::c_uint;
21pub type ISTDINT32 = ::std::os::raw::c_int;
22pub type IINT32 = ISTDINT32;
23pub type IUINT32 = ISTDUINT32;
24#[repr(C)]
25#[derive(Copy, Clone)]
26pub struct IQUEUEHEAD {
27    pub next: *mut IQUEUEHEAD,
28    pub prev: *mut IQUEUEHEAD,
29}
30#[repr(C)]
31#[derive(Copy, Clone)]
32pub struct IKCPCB {
33    pub conv: IUINT32,
34    pub mtu: IUINT32,
35    pub mss: IUINT32,
36    pub state: IUINT32,
37    pub snd_una: IUINT32,
38    pub snd_nxt: IUINT32,
39    pub rcv_nxt: IUINT32,
40    pub ts_recent: IUINT32,
41    pub ts_lastack: IUINT32,
42    pub ssthresh: IUINT32,
43    pub rx_rttval: IINT32,
44    pub rx_srtt: IINT32,
45    pub rx_rto: IINT32,
46    pub rx_minrto: IINT32,
47    pub snd_wnd: IUINT32,
48    pub rcv_wnd: IUINT32,
49    pub rmt_wnd: IUINT32,
50    pub cwnd: IUINT32,
51    pub probe: IUINT32,
52    pub current: IUINT32,
53    pub interval: IUINT32,
54    pub ts_flush: IUINT32,
55    pub xmit: IUINT32,
56    pub nrcv_buf: IUINT32,
57    pub nsnd_buf: IUINT32,
58    pub nrcv_que: IUINT32,
59    pub nsnd_que: IUINT32,
60    pub nodelay: IUINT32,
61    pub updated: IUINT32,
62    pub ts_probe: IUINT32,
63    pub probe_wait: IUINT32,
64    pub dead_link: IUINT32,
65    pub incr: IUINT32,
66    pub snd_queue: IQUEUEHEAD,
67    pub rcv_queue: IQUEUEHEAD,
68    pub snd_buf: IQUEUEHEAD,
69    pub rcv_buf: IQUEUEHEAD,
70    pub acklist: *mut IUINT32,
71    pub ackcount: IUINT32,
72    pub ackblock: IUINT32,
73    pub user: *mut ::std::os::raw::c_void,
74    pub buffer: *mut ::std::os::raw::c_char,
75    pub fastresend: ::std::os::raw::c_int,
76    pub fastlimit: ::std::os::raw::c_int,
77    pub nocwnd: ::std::os::raw::c_int,
78    pub stream: ::std::os::raw::c_int,
79    pub logmask: ::std::os::raw::c_int,
80    pub output: ::std::option::Option<
81        unsafe extern "C" fn(
82            buf: *const ::std::os::raw::c_char,
83            len: ::std::os::raw::c_int,
84            kcp: *mut IKCPCB,
85            user: *mut ::std::os::raw::c_void,
86        ) -> ::std::os::raw::c_int,
87    >,
88    pub writelog: ::std::option::Option<
89        unsafe extern "C" fn(
90            log: *const ::std::os::raw::c_char,
91            kcp: *mut IKCPCB,
92            user: *mut ::std::os::raw::c_void,
93        ),
94    >,
95}
96pub type ikcpcb = IKCPCB;
97extern "C" {
98    pub fn ikcp_create(conv: IUINT32, user: *mut ::std::os::raw::c_void) -> *mut ikcpcb;
99}
100extern "C" {
101    pub fn ikcp_release(kcp: *mut ikcpcb);
102}
103extern "C" {
104    pub fn ikcp_setoutput(
105        kcp: *mut ikcpcb,
106        output: ::std::option::Option<
107            unsafe extern "C" fn(
108                buf: *const ::std::os::raw::c_char,
109                len: ::std::os::raw::c_int,
110                kcp: *mut ikcpcb,
111                user: *mut ::std::os::raw::c_void,
112            ) -> ::std::os::raw::c_int,
113        >,
114    );
115}
116extern "C" {
117    pub fn ikcp_recv(
118        kcp: *mut ikcpcb,
119        buffer: *mut ::std::os::raw::c_char,
120        len: ::std::os::raw::c_int,
121    ) -> ::std::os::raw::c_int;
122}
123extern "C" {
124    pub fn ikcp_send(
125        kcp: *mut ikcpcb,
126        buffer: *const ::std::os::raw::c_char,
127        len: ::std::os::raw::c_int,
128    ) -> ::std::os::raw::c_int;
129}
130extern "C" {
131    pub fn ikcp_update(kcp: *mut ikcpcb, current: IUINT32);
132}
133extern "C" {
134    pub fn ikcp_check(kcp: *const ikcpcb, current: IUINT32) -> IUINT32;
135}
136extern "C" {
137    pub fn ikcp_input(
138        kcp: *mut ikcpcb,
139        data: *const ::std::os::raw::c_char,
140        size: ::std::os::raw::c_long,
141    ) -> ::std::os::raw::c_int;
142}
143extern "C" {
144    pub fn ikcp_flush(kcp: *mut ikcpcb);
145}
146extern "C" {
147    pub fn ikcp_peeksize(kcp: *const ikcpcb) -> ::std::os::raw::c_int;
148}
149extern "C" {
150    pub fn ikcp_setmtu(kcp: *mut ikcpcb, mtu: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
151}
152extern "C" {
153    pub fn ikcp_wndsize(
154        kcp: *mut ikcpcb,
155        sndwnd: ::std::os::raw::c_int,
156        rcvwnd: ::std::os::raw::c_int,
157    ) -> ::std::os::raw::c_int;
158}
159extern "C" {
160    pub fn ikcp_waitsnd(kcp: *const ikcpcb) -> ::std::os::raw::c_int;
161}
162extern "C" {
163    pub fn ikcp_nodelay(
164        kcp: *mut ikcpcb,
165        nodelay: ::std::os::raw::c_int,
166        interval: ::std::os::raw::c_int,
167        resend: ::std::os::raw::c_int,
168        nc: ::std::os::raw::c_int,
169    ) -> ::std::os::raw::c_int;
170}
171extern "C" {
172    pub fn ikcp_log(
173        kcp: *mut ikcpcb,
174        mask: ::std::os::raw::c_int,
175        fmt: *const ::std::os::raw::c_char,
176        ...
177    );
178}
179extern "C" {
180    pub fn ikcp_allocator(
181        new_malloc: ::std::option::Option<
182            unsafe extern "C" fn(arg1: usize) -> *mut ::std::os::raw::c_void,
183        >,
184        new_free: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
185    );
186}
187extern "C" {
188    pub fn ikcp_getconv(ptr: *const ::std::os::raw::c_void) -> IUINT32;
189}
190pub const IKCP_RTO_NDL: IUINT32 = 30;
191pub const IKCP_RTO_MIN: IUINT32 = 100;
192pub const IKCP_RTO_DEF: IUINT32 = 200;
193pub const IKCP_RTO_MAX: IUINT32 = 60000;
194pub const IKCP_CMD_PUSH: IUINT32 = 81;
195pub const IKCP_CMD_ACK: IUINT32 = 82;
196pub const IKCP_CMD_WASK: IUINT32 = 83;
197pub const IKCP_CMD_WINS: IUINT32 = 84;
198pub const IKCP_ASK_SEND: IUINT32 = 1;
199pub const IKCP_ASK_TELL: IUINT32 = 2;
200pub const IKCP_WND_SND: IUINT32 = 32;
201pub const IKCP_WND_RCV: IUINT32 = 256;
202pub const IKCP_MTU_DEF: IUINT32 = 1400;
203pub const IKCP_ACK_FAST: IUINT32 = 3;
204pub const IKCP_INTERVAL: IUINT32 = 100;
205pub const IKCP_OVERHEAD: IUINT32 = 24;
206pub const IKCP_DEADLINK: IUINT32 = 20;
207pub const IKCP_THRESH_INIT: IUINT32 = 2;
208pub const IKCP_THRESH_MIN: IUINT32 = 2;
209pub const IKCP_PROBE_INIT: IUINT32 = 7000;
210pub const IKCP_PROBE_LIMIT: IUINT32 = 120000;
211pub const IKCP_FASTACK_LIMIT: IUINT32 = 5;