QUIC DEMUX: Remove obsolete SRT handling code

Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/22674)
This commit is contained in:
Hugo Landau 2023-11-09 10:27:14 +00:00
parent 29fbdfafaf
commit 6d76d13e54
3 changed files with 3 additions and 68 deletions

View File

@ -181,14 +181,6 @@ typedef struct quic_demux_st QUIC_DEMUX;
typedef void (ossl_quic_demux_cb_fn)(QUIC_URXE *e, void *arg,
const QUIC_CONN_ID *dcid);
/*
* Called when a datagram is received.
* Returns 1 if the datagram ends with a stateless reset token and
* 0 if not.
*/
typedef int (ossl_quic_stateless_reset_cb_fn)(const unsigned char *data,
size_t data_len, void *arg);
/*
* Creates a new demuxer. The given BIO is used to receive datagrams from the
* network using BIO_recvmmsg. short_conn_id_len is the length of destination
@ -237,18 +229,6 @@ void ossl_quic_demux_set_default_handler(QUIC_DEMUX *demux,
ossl_quic_demux_cb_fn *cb,
void *cb_arg);
/*
* Sets a callback for stateless reset processing.
*
* If set, this callback is called for datagrams for which we cannot identify
* a CID. This function should return 1 if there is a stateless reset token
* present and 0 if not. If there is a token present, the connection should
* also be reset.
*/
void ossl_quic_demux_set_stateless_reset_handler(
QUIC_DEMUX *demux,
ossl_quic_stateless_reset_cb_fn *cb, void *cb_arg);
/*
* Releases a URXE back to the demuxer. No reference must be made to the URXE or
* its buffer after calling this function. The URXE must not be in any queue;
@ -294,7 +274,6 @@ void ossl_quic_demux_reinject_urxe(QUIC_DEMUX *demux,
#define QUIC_DEMUX_PUMP_RES_OK 1
#define QUIC_DEMUX_PUMP_RES_TRANSIENT_FAIL (-1)
#define QUIC_DEMUX_PUMP_RES_PERMANENT_FAIL (-2)
#define QUIC_DEMUX_PUMP_RES_STATELESS_RESET (-3)
int ossl_quic_demux_pump(QUIC_DEMUX *demux);

View File

@ -46,10 +46,6 @@ struct quic_demux_st {
ossl_quic_demux_cb_fn *default_cb;
void *default_cb_arg;
/* The stateless reset token checker handler, if any. */
ossl_quic_stateless_reset_cb_fn *reset_token_cb;
void *reset_token_cb_arg;
/*
* List of URXEs which are not currently in use (i.e., not filled with
* unconsumed data). These are moved to the pending list as they are filled.
@ -153,14 +149,6 @@ void ossl_quic_demux_set_default_handler(QUIC_DEMUX *demux,
demux->default_cb_arg = cb_arg;
}
void ossl_quic_demux_set_stateless_reset_handler(
QUIC_DEMUX *demux,
ossl_quic_stateless_reset_cb_fn *cb, void *cb_arg)
{
demux->reset_token_cb = cb;
demux->reset_token_cb_arg = cb_arg;
}
static QUIC_URXE *demux_alloc_urxe(size_t alloc_len)
{
QUIC_URXE *e;
@ -334,12 +322,12 @@ static int demux_identify_conn_id(QUIC_DEMUX *demux,
/*
* Process a single pending URXE.
* Returning 1 on success, 0 on failure and -1 on stateless reset.
* Returning 1 on success, 0 on failure.
*/
static int demux_process_pending_urxe(QUIC_DEMUX *demux, QUIC_URXE *e)
{
QUIC_CONN_ID dst_conn_id;
int r, dst_conn_id_ok = 0;
int dst_conn_id_ok = 0;
/* The next URXE we process should be at the head of the pending list. */
if (!ossl_assert(e == ossl_list_urxe_head(&demux->urx_pending)))
@ -347,29 +335,6 @@ static int demux_process_pending_urxe(QUIC_DEMUX *demux, QUIC_URXE *e)
assert(e->demux_state == URXE_DEMUX_STATE_PENDING);
/*
* Check if the packet ends with a stateless reset token and if it does
* skip it after dropping the connection.
*
* RFC 9000 s. 10.3.1 Detecting a Stateless Reset
* If the last 16 bytes of the datagram are identical in value to
* a stateless reset token, the endpoint MUST enter the draining
* period and not send any further packets on this connection.
*
* Returning a failure here causes the connection to enter the terminating
* state which achieves the desired outcome.
*
* TODO(QUIC FUTURE): only try to match unparsable packets
*/
if (demux->reset_token_cb != NULL) {
r = demux->reset_token_cb(ossl_quic_urxe_data(e), e->data_len,
demux->reset_token_cb_arg);
if (r > 0) /* Received a stateless reset */
return -1;
if (r < 0) /* Error during stateless reset detection */
return 0;
}
/* Determine the DCID of the first packet in the datagram. */
dst_conn_id_ok = demux_identify_conn_id(demux, e, &dst_conn_id);
@ -428,8 +393,7 @@ int ossl_quic_demux_pump(QUIC_DEMUX *demux)
}
if ((ret = demux_process_pending_urxl(demux)) <= 0)
return ret == 0 ? QUIC_DEMUX_PUMP_RES_PERMANENT_FAIL
: QUIC_DEMUX_PUMP_RES_STATELESS_RESET;
return QUIC_DEMUX_PUMP_RES_PERMANENT_FAIL;
return QUIC_DEMUX_PUMP_RES_OK;
}

View File

@ -75,12 +75,6 @@ static int port_init(QUIC_PORT *port)
get_time, port)) == NULL)
goto err;
/*
* If we are a server, setup our handler for packets not corresponding to
* any known DCID on our end. This is for handling clients establishing new
* connections.
*/
// if (is_server)
ossl_quic_demux_set_default_handler(port->demux,
port_default_packet_handler,
port);
@ -357,8 +351,6 @@ static void port_rx_pre(QUIC_PORT *port)
* to the appropriate QRX instances.
*/
ret = ossl_quic_demux_pump(port->demux);
// TODO: handle ret, stateless reset
if (ret == QUIC_DEMUX_PUMP_RES_PERMANENT_FAIL)
/*
* We don't care about transient failure, but permanent failure means we