QUIC QSM: Clean up SEND_STREAM/RECV_STREAM handling

Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/20765)
This commit is contained in:
Hugo Landau 2023-04-18 19:30:55 +01:00
parent 723cbe8a73
commit e8b9f63235
4 changed files with 45 additions and 49 deletions

View File

@ -107,18 +107,6 @@ struct quic_stream_st {
unsigned int deleted : 1;
};
/*
* Marks a stream for STOP_SENDING. aec is the application error code (AEC).
* This can only fail if it has already been called.
*/
int ossl_quic_stream_stop_sending(QUIC_STREAM *s, uint64_t aec);
/*
* Marks a stream for reset. aec is the application error code (AEC).
* This can only fail if it has already been called.
*/
int ossl_quic_stream_reset(QUIC_STREAM *s, uint64_t aec);
/*
* QUIC Stream Map
* ===============
@ -239,10 +227,24 @@ void ossl_quic_stream_map_set_rr_stepping(QUIC_STREAM_MAP *qsm, size_t stepping)
/*
* Resets the sending part of a stream.
*
* Returns 1 if the sending part of a stream was not already reset.
* Returns 0 otherwise, which need not be considered an error.
*/
void ossl_quic_stream_map_reset_stream_send_part(QUIC_STREAM_MAP *qsm,
QUIC_STREAM *qs,
uint64_t aec);
int ossl_quic_stream_map_reset_stream_send_part(QUIC_STREAM_MAP *qsm,
QUIC_STREAM *qs,
uint64_t aec);
/*
* Marks the receiving part of a stream for STOP_SENDING.
*
* Returns 1 if the receiving part of a stream was not already marked for
* STOP_SENDING.
* Returns 0 otherwise, which need not be considered an error.
*/
int ossl_quic_stream_map_stop_sending_recv_part(QUIC_STREAM_MAP *qsm,
QUIC_STREAM *qs,
uint64_t aec);
/*
* Adds a stream to the accept queue.

View File

@ -2380,9 +2380,11 @@ void ossl_quic_channel_set_incoming_stream_auto_reject(QUIC_CHANNEL *ch,
void ossl_quic_channel_reject_stream(QUIC_CHANNEL *ch, QUIC_STREAM *qs)
{
ossl_quic_stream_stop_sending(qs, ch->incoming_stream_auto_reject_aec);
ossl_quic_stream_reset(qs, ch->incoming_stream_auto_reject_aec);
ossl_quic_stream_map_stop_sending_recv_part(&ch->qsm, qs,
ch->incoming_stream_auto_reject_aec);
ossl_quic_stream_map_reset_stream_send_part(&ch->qsm, qs,
ch->incoming_stream_auto_reject_aec);
qs->deleted = 1;
ossl_quic_stream_map_update_state(&ch->qsm, qs);

View File

@ -10,32 +10,6 @@
#include "internal/quic_stream_map.h"
#include "internal/nelem.h"
/* QUIC Stream
* ===========
*/
int ossl_quic_stream_stop_sending(QUIC_STREAM *s, uint64_t aec)
{
if (s->stop_sending)
return 0;
s->stop_sending_aec = aec;
s->stop_sending = 1;
s->want_stop_sending = 1;
return 1;
}
int ossl_quic_stream_reset(QUIC_STREAM *s, uint64_t aec)
{
if (s->reset_stream)
return 0;
s->reset_stream_aec = aec;
s->reset_stream = 1;
s->want_reset_stream = 1;
return 1;
}
/*
* QUIC Stream Map
* ===============
@ -284,18 +258,34 @@ void ossl_quic_stream_map_update_state(QUIC_STREAM_MAP *qsm, QUIC_STREAM *s)
stream_map_mark_inactive(qsm, s);
}
void ossl_quic_stream_map_reset_stream_send_part(QUIC_STREAM_MAP *qsm,
QUIC_STREAM *qs,
uint64_t aec)
int ossl_quic_stream_map_reset_stream_send_part(QUIC_STREAM_MAP *qsm,
QUIC_STREAM *qs,
uint64_t aec)
{
if (qs->reset_stream)
return;
return 0;
qs->reset_stream = 1;
qs->reset_stream_aec = aec;
qs->want_reset_stream = 1;
ossl_quic_stream_map_update_state(qsm, qs);
return 1;
}
int ossl_quic_stream_map_stop_sending_recv_part(QUIC_STREAM_MAP *qsm,
QUIC_STREAM *qs,
uint64_t aec)
{
if (qs->stop_sending)
return 0;
qs->stop_sending = 1;
qs->stop_sending_aec = aec;
qs->want_stop_sending = 1;
ossl_quic_stream_map_update_state(qsm, qs);
return 1;
}
QUIC_STREAM *ossl_quic_stream_map_peek_accept_queue(QUIC_STREAM_MAP *qsm)

View File

@ -1470,7 +1470,8 @@ static int run_script(const struct script_op *script)
op->arg0)))
goto err;
if (!TEST_true(ossl_quic_stream_stop_sending(s, op->arg1)))
if (!TEST_true(ossl_quic_stream_map_stop_sending_recv_part(h.args.qsm,
s, op->arg1)))
goto err;
ossl_quic_stream_map_update_state(h.args.qsm, s);
@ -1487,7 +1488,8 @@ static int run_script(const struct script_op *script)
op->arg0)))
goto err;
if (!TEST_true(ossl_quic_stream_reset(s, op->arg1)))
if (!TEST_true(ossl_quic_stream_map_reset_stream_send_part(h.args.qsm,
s, op->arg1)))
goto err;
ossl_quic_stream_map_update_state(h.args.qsm, s);