void ossl_quic_set_connect_state(QUIC_CONNECTION *qc);
void ossl_quic_set_accept_state(QUIC_CONNECTION *qc);
+__owur int ossl_quic_has_pending(const QUIC_CONNECTION *qc);
__owur int ossl_quic_tick(QUIC_CONNECTION *qc);
__owur int ossl_quic_get_tick_timeout(QUIC_CONNECTION *qc, struct timeval *tv);
__owur int ossl_quic_get_rpoll_descriptor(QUIC_CONNECTION *qc, BIO_POLL_DESCRIPTOR *d);
* SSL_pending
* -----------
*/
-size_t ossl_quic_pending(const SSL *s)
+static size_t ossl_quic_pending_int(const QUIC_CONNECTION *qc)
{
- const QUIC_CONNECTION *qc = QUIC_CONNECTION_FROM_CONST_SSL(s);
size_t avail = 0;
int fin = 0;
return avail;
}
+size_t ossl_quic_pending(const SSL *s)
+{
+ const QUIC_CONNECTION *qc = QUIC_CONNECTION_FROM_CONST_SSL(s);
+
+ return ossl_quic_pending_int(qc);
+}
+
+int ossl_quic_has_pending(const QUIC_CONNECTION *qc)
+{
+ return ossl_quic_pending_int(qc) > 0;
+}
+
/*
* SSL_stream_conclude
* -------------------
* That data may not result in any application data, or we may fail to parse
* the records for some reason.
*/
- const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
+ const SSL_CONNECTION *sc;
+#ifndef OPENSSL_NO_QUIC
+ const QUIC_CONNECTION *qc = QUIC_CONNECTION_FROM_CONST_SSL(s);
+
+ if (qc != NULL)
+ return ossl_quic_has_pending(qc);
+#endif
+
+
+ sc = SSL_CONNECTION_FROM_CONST_SSL(s);
/* Check buffered app data if any first */
if (SSL_CONNECTION_IS_DTLS(sc)) {