Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/19734)
/*
* Attempts to write to stream 0. Writes the number of bytes consumed to
/*
* Attempts to write to stream 0. Writes the number of bytes consumed to
- * *consumed and returns 1 on success. If there is no space currently available
- * to write any bytes, 0 is written to *consumed and 1 is returned (this is
- * considered a success case).
+ * *bytes_written and returns 1 on success. If there is no space currently
+ * available to write any bytes, 0 is written to *consumed and 1 is returned
+ * (this is considered a success case).
*
* Note that unlike libssl public APIs, this API always works in a 'partial
* write' mode.
*
* Note that unlike libssl public APIs, this API always works in a 'partial
* write' mode.
goto undesirable;
if (!PACKET_buf_init(&pkt, ossl_quic_urxe_data(e), e->data_len))
goto undesirable;
if (!PACKET_buf_init(&pkt, ossl_quic_urxe_data(e), e->data_len))
/*
* We set short_conn_id_len to SIZE_MAX here which will cause the decode
/*
* We set short_conn_id_len to SIZE_MAX here which will cause the decode
if (!ch_server_on_new_conn(ch, &e->peer,
&hdr.src_conn_id,
&hdr.dst_conn_id))
if (!ch_server_on_new_conn(ch, &e->peer,
&hdr.src_conn_id,
&hdr.dst_conn_id))
ossl_qrx_inject_urxe(ch->qrx, e);
return;
ossl_qrx_inject_urxe(ch->qrx, e);
return;
+err:
+ ossl_quic_channel_raise_protocol_error(ch, QUIC_ERR_INTERNAL_ERROR, 0,
+ "internal error");
undesirable:
ossl_quic_demux_release_urxe(ch->demux, e);
}
undesirable:
ossl_quic_demux_release_urxe(ch->demux, e);
}
if (!ossl_quic_provide_initial_secret(ch->libctx,
ch->propq,
&ch->init_dcid,
if (!ossl_quic_provide_initial_secret(ch->libctx,
ch->propq,
&ch->init_dcid,
- /*is_server=*/ch->is_server,
ch->qrx, ch->qtx))
return 0;
ch->qrx, ch->qtx))
return 0;
* the peer).
*/
OSSL_RTT_INFO rtt_info;
* the peer).
*/
OSSL_RTT_INFO rtt_info;
ossl_statm_get_rtt_info(ossl_quic_channel_get_statm(srv->ch), &rtt_info);
if (!ossl_quic_rxfc_on_retire(&srv->stream0->rxfc, *bytes_read,
ossl_statm_get_rtt_info(ossl_quic_channel_get_statm(srv->ch), &rtt_info);
if (!ossl_quic_rxfc_on_retire(&srv->stream0->rxfc, *bytes_read,
uint32_t *conn_close_enc_level);
static int txp_generate_for_el(OSSL_QUIC_TX_PACKETISER *txp, uint32_t enc_level,
uint32_t archetype,
uint32_t *conn_close_enc_level);
static int txp_generate_for_el(OSSL_QUIC_TX_PACKETISER *txp, uint32_t enc_level,
uint32_t archetype,
- char is_last_in_dgram,
- char dgram_contains_initial,
- char chosen_for_conn_close);
+ int is_last_in_dgram,
+ int dgram_contains_initial,
+ int chosen_for_conn_close);
static size_t txp_determine_pn_len(OSSL_QUIC_TX_PACKETISER *txp);
static int txp_determine_ppl_from_pl(OSSL_QUIC_TX_PACKETISER *txp,
size_t pl,
static size_t txp_determine_pn_len(OSSL_QUIC_TX_PACKETISER *txp);
static int txp_determine_ppl_from_pl(OSSL_QUIC_TX_PACKETISER *txp,
size_t pl,
size_t max_ppl,
size_t pkt_overhead,
QUIC_PKT_HDR *phdr,
size_t max_ppl,
size_t pkt_overhead,
QUIC_PKT_HDR *phdr,
- char chosen_for_conn_close);
+ int chosen_for_conn_close);
OSSL_QUIC_TX_PACKETISER *ossl_quic_tx_packetiser_new(const OSSL_QUIC_TX_PACKETISER_ARGS *args)
{
OSSL_QUIC_TX_PACKETISER *ossl_quic_tx_packetiser_new(const OSSL_QUIC_TX_PACKETISER_ARGS *args)
{
uint32_t archetype)
{
uint32_t enc_level, conn_close_enc_level = QUIC_ENC_LEVEL_NUM;
uint32_t archetype)
{
uint32_t enc_level, conn_close_enc_level = QUIC_ENC_LEVEL_NUM;
- char have_pkt_for_el[QUIC_ENC_LEVEL_NUM], is_last_in_dgram;
+ int have_pkt_for_el[QUIC_ENC_LEVEL_NUM], is_last_in_dgram;
size_t num_el_in_dgram = 0, pkts_done = 0;
int rc;
size_t num_el_in_dgram = 0, pkts_done = 0;
int rc;
*/
static int txp_generate_for_el(OSSL_QUIC_TX_PACKETISER *txp, uint32_t enc_level,
uint32_t archetype,
*/
static int txp_generate_for_el(OSSL_QUIC_TX_PACKETISER *txp, uint32_t enc_level,
uint32_t archetype,
- char is_last_in_dgram,
- char dgram_contains_initial,
- char chosen_for_conn_close)
+ int is_last_in_dgram,
+ int dgram_contains_initial,
+ int chosen_for_conn_close)
- char must_pad = dgram_contains_initial && is_last_in_dgram;
+ int must_pad = dgram_contains_initial && is_last_in_dgram;
size_t min_dpl, min_pl, min_ppl, cmpl, cmppl, running_total;
size_t mdpl, hdr_len, pkt_overhead, cc_limit;
uint64_t cc_limit_;
size_t min_dpl, min_pl, min_ppl, cmpl, cmppl, running_total;
size_t mdpl, hdr_len, pkt_overhead, cc_limit;
uint64_t cc_limit_;
QUIC_TXPIM_PKT *tpkt,
uint32_t pn_space,
struct archetype_data *a,
QUIC_TXPIM_PKT *tpkt,
uint32_t pn_space,
struct archetype_data *a,
- char chosen_for_conn_close)
+ int chosen_for_conn_close)
{
const OSSL_QUIC_FRAME_ACK *ack;
OSSL_QUIC_FRAME_ACK ack2;
{
const OSSL_QUIC_FRAME_ACK *ack;
OSSL_QUIC_FRAME_ACK ack2;
struct tx_helper *h,
uint32_t pn_space,
QUIC_TXPIM_PKT *tpkt,
struct tx_helper *h,
uint32_t pn_space,
QUIC_TXPIM_PKT *tpkt,
- char *have_ack_eliciting)
+ int *have_ack_eliciting)
{
size_t num_stream_iovec;
OSSL_QUIC_FRAME_STREAM shdr = {0};
{
size_t num_stream_iovec;
OSSL_QUIC_FRAME_STREAM shdr = {0};
OSSL_QUIC_FRAME_STREAM shdr;
OSSL_QTX_IOVEC iov[2];
size_t num_stream_iovec;
OSSL_QUIC_FRAME_STREAM shdr;
OSSL_QTX_IOVEC iov[2];
size_t num_stream_iovec;
};
static int txp_plan_stream_chunk(OSSL_QUIC_TX_PACKETISER *txp,
};
static int txp_plan_stream_chunk(OSSL_QUIC_TX_PACKETISER *txp,
QUIC_TXFC *stream_txfc,
QUIC_STREAM *next_stream,
size_t min_ppl,
QUIC_TXFC *stream_txfc,
QUIC_STREAM *next_stream,
size_t min_ppl,
- char *have_ack_eliciting,
- char *packet_full,
- char *stream_drained,
+ int *have_ack_eliciting,
+ int *packet_full,
+ int *stream_drained,
uint64_t *new_credit_consumed)
{
int rc = 0;
uint64_t *new_credit_consumed)
{
int rc = 0;
uint32_t pn_space,
QUIC_TXPIM_PKT *tpkt,
size_t min_ppl,
uint32_t pn_space,
QUIC_TXPIM_PKT *tpkt,
size_t min_ppl,
- char *have_ack_eliciting,
+ int *have_ack_eliciting,
QUIC_STREAM **tmp_head)
{
QUIC_STREAM_ITER it;
QUIC_STREAM **tmp_head)
{
QUIC_STREAM_ITER it;
/* Stream Data Frames (STREAM) */
if (stream->sstream != NULL) {
/* Stream Data Frames (STREAM) */
if (stream->sstream != NULL) {
- char packet_full = 0, stream_drained = 0;
+ int packet_full = 0, stream_drained = 0;
if (!txp_generate_stream_frames(txp, h, pn_space, tpkt,
stream->id, stream->sstream,
if (!txp_generate_stream_frames(txp, h, pn_space, tpkt,
stream->id, stream->sstream,
size_t max_ppl,
size_t pkt_overhead,
QUIC_PKT_HDR *phdr,
size_t max_ppl,
size_t pkt_overhead,
QUIC_PKT_HDR *phdr,
- char chosen_for_conn_close)
+ int chosen_for_conn_close)
{
int rc = TXP_ERR_SUCCESS;
struct archetype_data a;
uint32_t pn_space = ossl_quic_enc_level_to_pn_space(enc_level);
struct tx_helper h;
{
int rc = TXP_ERR_SUCCESS;
struct archetype_data a;
uint32_t pn_space = ossl_quic_enc_level_to_pn_space(enc_level);
struct tx_helper h;
- char have_helper = 0, have_ack_eliciting = 0, done_pre_token = 0;
- char require_ack_eliciting;
+ int have_helper = 0, have_ack_eliciting = 0, done_pre_token = 0;
+ int require_ack_eliciting;
QUIC_CFQ_ITEM *cfq_item;
QUIC_TXPIM_PKT *tpkt = NULL;
OSSL_QTX_PKT pkt;
QUIC_CFQ_ITEM *cfq_item;
QUIC_TXPIM_PKT *tpkt = NULL;
OSSL_QTX_PKT pkt;
ENDIF
IF[{- !$disabled{'quic'} -}]
ENDIF
IF[{- !$disabled{'quic'} -}]
- PROGRAMS{noinst}=quicapitest quic_wire_test quic_ackm_test quic_record_test quic_fc_test quic_stream_test quic_cfq_test quic_txpim_test quic_fifd_test quic_txp_test quic_tserver_test
+ PROGRAMS{noinst}=quicapitest quic_wire_test quic_ackm_test quic_record_test
+ PROGRAMS{noinst}=quic_fc_test quic_stream_test quic_cfq_test quic_txpim_test
+ PROGRAMS{noinst}=quic_fifd_test quic_txp_test quic_tserver_test
ENDIF
SOURCE[quicapitest]=quicapitest.c helpers/ssltestlib.c
ENDIF
SOURCE[quicapitest]=quicapitest.c helpers/ssltestlib.c
static int is_want(SSL *s, int ret)
{
int ec = SSL_get_error(s, ret);
static int is_want(SSL *s, int ret)
{
int ec = SSL_get_error(s, ret);
return ec == SSL_ERROR_WANT_READ || ec == SSL_ERROR_WANT_WRITE;
}
return ec == SSL_ERROR_WANT_READ || ec == SSL_ERROR_WANT_WRITE;
}