mirror of
https://github.com/openssl/openssl.git
synced 2024-12-03 23:14:37 +08:00
Change approach to SSL_pending API
Reviewed-by: Neil Horman <nhorman@openssl.org> Reviewed-by: Tomas Mraz <tomas@openssl.org> (Merged from https://github.com/openssl/openssl/pull/24040)
This commit is contained in:
parent
c79e0e7d4c
commit
5a13d35f24
@ -504,10 +504,11 @@ static ossl_inline ossl_unused int ossl_quic_stream_recv_get_final_size(const QU
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Determines the number of bytes available still to be read, and whether a FIN
|
* Determines the number of bytes available still to be read, and (if
|
||||||
* has yet to be read.
|
* include_fin is 1) whether a FIN or reset has yet to be read.
|
||||||
*/
|
*/
|
||||||
static ossl_inline ossl_unused int ossl_quic_stream_recv_pending(const QUIC_STREAM *s)
|
static ossl_inline ossl_unused int ossl_quic_stream_recv_pending(const QUIC_STREAM *s,
|
||||||
|
int include_fin)
|
||||||
{
|
{
|
||||||
size_t avail;
|
size_t avail;
|
||||||
int fin = 0;
|
int fin = 0;
|
||||||
@ -523,13 +524,13 @@ static ossl_inline ossl_unused int ossl_quic_stream_recv_pending(const QUIC_STRE
|
|||||||
if (!ossl_quic_rstream_available(s->rstream, &avail, &fin))
|
if (!ossl_quic_rstream_available(s->rstream, &avail, &fin))
|
||||||
avail = 0;
|
avail = 0;
|
||||||
|
|
||||||
if (avail == 0 && fin)
|
if (avail == 0 && include_fin && fin)
|
||||||
avail = 1;
|
avail = 1;
|
||||||
|
|
||||||
return avail;
|
return avail;
|
||||||
|
|
||||||
case QUIC_RSTREAM_STATE_RESET_RECVD:
|
case QUIC_RSTREAM_STATE_RESET_RECVD:
|
||||||
return 1;
|
return include_fin;
|
||||||
|
|
||||||
case QUIC_RSTREAM_STATE_DATA_READ:
|
case QUIC_RSTREAM_STATE_DATA_READ:
|
||||||
case QUIC_RSTREAM_STATE_RESET_READ:
|
case QUIC_RSTREAM_STATE_RESET_READ:
|
||||||
|
@ -2472,6 +2472,11 @@ static int quic_write_nonblocking_epw(QCTX *ctx, const void *buf, size_t len,
|
|||||||
|
|
||||||
quic_post_write(xso, *written > 0, *written == len, flags,
|
quic_post_write(xso, *written > 0, *written == len, flags,
|
||||||
qctx_should_autotick(ctx));
|
qctx_should_autotick(ctx));
|
||||||
|
|
||||||
|
if (*written == 0)
|
||||||
|
/* SSL_write_ex returns 0 if it didn't read anything. */
|
||||||
|
return QUIC_RAISE_NORMAL_ERROR(ctx, SSL_ERROR_WANT_READ);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2874,11 +2879,13 @@ static size_t ossl_quic_pending_int(const SSL *s, int check_channel)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (check_channel)
|
if (check_channel)
|
||||||
avail = ossl_quic_stream_recv_pending(ctx.xso->stream)
|
avail = ossl_quic_stream_recv_pending(ctx.xso->stream,
|
||||||
|
/*include_fin=*/1)
|
||||||
|| ossl_quic_channel_has_pending(ctx.qc->ch)
|
|| ossl_quic_channel_has_pending(ctx.qc->ch)
|
||||||
|| ossl_quic_channel_is_term_any(ctx.qc->ch);
|
|| ossl_quic_channel_is_term_any(ctx.qc->ch);
|
||||||
else
|
else
|
||||||
avail = ossl_quic_stream_recv_pending(ctx.xso->stream);
|
avail = ossl_quic_stream_recv_pending(ctx.xso->stream,
|
||||||
|
/*include_fin=*/0);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
quic_unlock(ctx.qc);
|
quic_unlock(ctx.qc);
|
||||||
|
Loading…
Reference in New Issue
Block a user