mirror of
https://gitea.invidious.io/iv-org/litespeed-quic.git
synced 2024-08-15 00:53:43 +00:00
API: add lsquic_conn_get_sni(), fixes issue #203
This commit is contained in:
parent
e2c4907022
commit
38e835983f
7 changed files with 53 additions and 0 deletions
|
@ -321,6 +321,11 @@ static lsquic_conn_ctx_t *
|
||||||
http_server_on_new_conn (void *stream_if_ctx, lsquic_conn_t *conn)
|
http_server_on_new_conn (void *stream_if_ctx, lsquic_conn_t *conn)
|
||||||
{
|
{
|
||||||
struct server_ctx *server_ctx = stream_if_ctx;
|
struct server_ctx *server_ctx = stream_if_ctx;
|
||||||
|
const char *sni;
|
||||||
|
|
||||||
|
sni = lsquic_conn_get_sni(conn);
|
||||||
|
LSQ_DEBUG("new connection, SNI: %s", sni ? sni : "<not set>");
|
||||||
|
|
||||||
lsquic_conn_ctx_t *conn_h = malloc(sizeof(*conn_h));
|
lsquic_conn_ctx_t *conn_h = malloc(sizeof(*conn_h));
|
||||||
conn_h->conn = conn;
|
conn_h->conn = conn;
|
||||||
conn_h->server_ctx = server_ctx;
|
conn_h->server_ctx = server_ctx;
|
||||||
|
|
|
@ -1964,6 +1964,10 @@ Miscellaneous Connection Functions
|
||||||
|
|
||||||
Get peer context associated with the connection and local address.
|
Get peer context associated with the connection and local address.
|
||||||
|
|
||||||
|
.. function:: const char * lsquic_conn_get_sni (lsquic_conn_t *conn)
|
||||||
|
|
||||||
|
Get SNI sent by the client.
|
||||||
|
|
||||||
.. function:: enum LSQUIC_CONN_STATUS lsquic_conn_status (lsquic_conn_t *conn, char *errbuf, size_t bufsz)
|
.. function:: enum LSQUIC_CONN_STATUS lsquic_conn_status (lsquic_conn_t *conn, char *errbuf, size_t bufsz)
|
||||||
|
|
||||||
Get connection status.
|
Get connection status.
|
||||||
|
|
|
@ -1979,6 +1979,10 @@ lsquic_conn_set_ctx (lsquic_conn_t *, lsquic_conn_ctx_t *);
|
||||||
void *
|
void *
|
||||||
lsquic_conn_get_peer_ctx (lsquic_conn_t *, const struct sockaddr *local_sa);
|
lsquic_conn_get_peer_ctx (lsquic_conn_t *, const struct sockaddr *local_sa);
|
||||||
|
|
||||||
|
/** Get SNI sent by the client */
|
||||||
|
const char *
|
||||||
|
lsquic_conn_get_sni (lsquic_conn_t *);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Abort connection.
|
* Abort connection.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -324,3 +324,13 @@ lsquic_conn_stats_diff (const struct conn_stats *cumulative_stats,
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
const char *
|
||||||
|
lsquic_conn_get_sni (struct lsquic_conn *lconn)
|
||||||
|
{
|
||||||
|
if (lconn->cn_esf_c && lconn->cn_esf_c->esf_get_sni)
|
||||||
|
return lconn->cn_esf_c->esf_get_sni(lconn->cn_enc_session);
|
||||||
|
else
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
|
@ -99,6 +99,9 @@ struct enc_session_funcs_common
|
||||||
int
|
int
|
||||||
(*esf_alg_keysize) (enc_session_t *);
|
(*esf_alg_keysize) (enc_session_t *);
|
||||||
|
|
||||||
|
const char *
|
||||||
|
(*esf_get_sni) (enc_session_t *);
|
||||||
|
|
||||||
/* Need to pass lconn in encrypt and decrypt methods because enc_session
|
/* Need to pass lconn in encrypt and decrypt methods because enc_session
|
||||||
* is allowed to be NULL for gQUIC.
|
* is allowed to be NULL for gQUIC.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -2410,6 +2410,21 @@ iquic_esf_decrypt_packet (enc_session_t *enc_session_p,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
iquic_esf_get_sni (enc_session_t *enc_session_p)
|
||||||
|
{
|
||||||
|
struct enc_sess_iquic *const enc_sess = enc_session_p;
|
||||||
|
const char *server_name;
|
||||||
|
|
||||||
|
server_name = SSL_get_servername(enc_sess->esi_ssl, TLSEXT_NAMETYPE_host_name);
|
||||||
|
#ifndef NDEBUG
|
||||||
|
if (!server_name)
|
||||||
|
server_name = enc_sess->esi_sni_bypass;
|
||||||
|
#endif
|
||||||
|
return server_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
iquic_esf_global_init (int flags)
|
iquic_esf_global_init (int flags)
|
||||||
{
|
{
|
||||||
|
@ -2669,6 +2684,7 @@ const struct enc_session_funcs_common lsquic_enc_session_common_ietf_v1 =
|
||||||
.esf_tag_len = IQUIC_TAG_LEN,
|
.esf_tag_len = IQUIC_TAG_LEN,
|
||||||
.esf_get_server_cert_chain
|
.esf_get_server_cert_chain
|
||||||
= iquic_esf_get_server_cert_chain,
|
= iquic_esf_get_server_cert_chain,
|
||||||
|
.esf_get_sni = iquic_esf_get_sni,
|
||||||
.esf_cipher = iquic_esf_cipher,
|
.esf_cipher = iquic_esf_cipher,
|
||||||
.esf_keysize = iquic_esf_keysize,
|
.esf_keysize = iquic_esf_keysize,
|
||||||
.esf_alg_keysize = iquic_esf_alg_keysize,
|
.esf_alg_keysize = iquic_esf_alg_keysize,
|
||||||
|
@ -2687,6 +2703,7 @@ const struct enc_session_funcs_common lsquic_enc_session_common_ietf_v1_no_flush
|
||||||
.esf_tag_len = IQUIC_TAG_LEN,
|
.esf_tag_len = IQUIC_TAG_LEN,
|
||||||
.esf_get_server_cert_chain
|
.esf_get_server_cert_chain
|
||||||
= iquic_esf_get_server_cert_chain,
|
= iquic_esf_get_server_cert_chain,
|
||||||
|
.esf_get_sni = iquic_esf_get_sni,
|
||||||
.esf_cipher = iquic_esf_cipher,
|
.esf_cipher = iquic_esf_cipher,
|
||||||
.esf_keysize = iquic_esf_keysize,
|
.esf_keysize = iquic_esf_keysize,
|
||||||
.esf_alg_keysize = iquic_esf_alg_keysize,
|
.esf_alg_keysize = iquic_esf_alg_keysize,
|
||||||
|
|
|
@ -3502,6 +3502,14 @@ lsquic_enc_session_get_ua (enc_session_t *enc_session_p)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
lsquic_enc_session_get_sni (enc_session_t *enc_session_p)
|
||||||
|
{
|
||||||
|
struct lsquic_enc_session *const enc_session = enc_session_p;
|
||||||
|
return lsquic_str_cstr(&enc_session->hs_ctx.sni);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
static uint8_t
|
static uint8_t
|
||||||
lsquic_enc_session_have_key (enc_session_t *enc_session_p)
|
lsquic_enc_session_have_key (enc_session_t *enc_session_p)
|
||||||
|
@ -3819,6 +3827,7 @@ struct enc_session_funcs_common lsquic_enc_session_common_gquic_1 =
|
||||||
.esf_cipher = lsquic_enc_session_cipher,
|
.esf_cipher = lsquic_enc_session_cipher,
|
||||||
.esf_keysize = lsquic_enc_session_keysize,
|
.esf_keysize = lsquic_enc_session_keysize,
|
||||||
.esf_alg_keysize = lsquic_enc_session_alg_keysize,
|
.esf_alg_keysize = lsquic_enc_session_alg_keysize,
|
||||||
|
.esf_get_sni = lsquic_enc_session_get_sni,
|
||||||
.esf_encrypt_packet = gquic_encrypt_packet,
|
.esf_encrypt_packet = gquic_encrypt_packet,
|
||||||
.esf_decrypt_packet = gquic_decrypt_packet,
|
.esf_decrypt_packet = gquic_decrypt_packet,
|
||||||
.esf_tag_len = GQUIC_PACKET_HASH_SZ,
|
.esf_tag_len = GQUIC_PACKET_HASH_SZ,
|
||||||
|
@ -4246,6 +4255,7 @@ const
|
||||||
/* Q050 and later */
|
/* Q050 and later */
|
||||||
struct enc_session_funcs_common lsquic_enc_session_common_gquic_2 =
|
struct enc_session_funcs_common lsquic_enc_session_common_gquic_2 =
|
||||||
{
|
{
|
||||||
|
.esf_get_sni = lsquic_enc_session_get_sni,
|
||||||
.esf_global_init = lsquic_handshake_init,
|
.esf_global_init = lsquic_handshake_init,
|
||||||
.esf_global_cleanup = lsquic_handshake_cleanup,
|
.esf_global_cleanup = lsquic_handshake_cleanup,
|
||||||
.esf_cipher = lsquic_enc_session_cipher,
|
.esf_cipher = lsquic_enc_session_cipher,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue