diff options
author | 2021-05-04 23:20:19 +0200 | |
---|---|---|
committer | 2021-05-06 12:09:31 +0100 | |
commit | 0a08fd78134dc35351ce773f143015ed12f53ae1 (patch) | |
tree | 0ab92c9430c32805e9d126c1b6d9f16b314cda43 /src/ffi.rs | |
parent | 720cd94a0966c0d3ba3818b98ec94e5ea4e5d4d1 (diff) | |
download | quiche-0a08fd78134dc35351ce773f143015ed12f53ae1.tar.gz quiche-0a08fd78134dc35351ce773f143015ed12f53ae1.tar.zst quiche-0a08fd78134dc35351ce773f143015ed12f53ae1.zip |
ffi: expose client-side session resumption and 0-RTT API
Motivation:
Quiche added support for session resumption and 0-RTT lately but the API was not exposed via the C api.
This was done in https://github.com/cloudflare/quiche/pull/911 and https://github.com/cloudflare/quiche/pull/914.
Modifications:
Add C API to also be able to make use of the functionality via C.
Result:
Be able to use session resumption and 0-RTT via the C api
Diffstat (limited to '')
-rw-r--r-- | src/ffi.rs | 27 |
1 files changed, 27 insertions, 0 deletions
@@ -540,6 +540,19 @@ pub extern fn quiche_conn_set_qlog_fd( } #[no_mangle] +pub extern fn quiche_conn_set_session( + conn: &mut Connection, buf: *const u8, buf_len: size_t, +) -> c_int { + let buf = unsafe { slice::from_raw_parts(buf, buf_len) }; + + match conn.set_session(buf) { + Ok(_) => 0, + + Err(e) => e.to_c() as c_int, + } +} + +#[no_mangle] pub extern fn quiche_conn_recv( conn: &mut Connection, buf: *mut u8, buf_len: size_t, ) -> ssize_t { @@ -764,6 +777,20 @@ pub extern fn quiche_conn_application_proto( } #[no_mangle] +pub extern fn quiche_conn_session( + conn: &mut Connection, out: &mut *const u8, out_len: &mut size_t, +) { + match conn.session() { + Some(session) => { + *out = session.as_ptr(); + *out_len = session.len(); + }, + + None => *out_len = 0, + } +} + +#[no_mangle] pub extern fn quiche_conn_is_established(conn: &mut Connection) -> bool { conn.is_established() } |