diff --git a/quiche/include/quiche.h b/quiche/include/quiche.h index 24fdcc911f..59a96feb00 100644 --- a/quiche/include/quiche.h +++ b/quiche/include/quiche.h @@ -489,6 +489,9 @@ void quiche_conn_peer_cert(const quiche_conn *conn, const uint8_t **out, size_t // Returns the serialized cryptographic session for the connection. void quiche_conn_session(const quiche_conn *conn, const uint8_t **out, size_t *out_len); +// Returns the server name requested by the client. +void quiche_conn_server_name(const quiche_conn *conn, const uint8_t **out, size_t *out_len); + // Returns true if the connection handshake is complete. bool quiche_conn_is_established(const quiche_conn *conn); diff --git a/quiche/src/ffi.rs b/quiche/src/ffi.rs index a1286821ea..eb03a160ee 100644 --- a/quiche/src/ffi.rs +++ b/quiche/src/ffi.rs @@ -1142,6 +1142,20 @@ pub extern "C" fn quiche_conn_session( } } +#[no_mangle] +pub extern "C" fn quiche_conn_server_name( + conn: &Connection, out: &mut *const u8, out_len: &mut size_t, +) { + match conn.server_name() { + Some(server_name) => { + *out = server_name.as_ptr(); + *out_len = server_name.len(); + }, + + None => *out_len = 0, + } +} + #[no_mangle] pub extern "C" fn quiche_conn_is_established(conn: &Connection) -> bool { conn.is_established()