int ossl_quic_channel_trigger_txku(QUIC_CHANNEL *ch);
int ossl_quic_channel_has_pending(const QUIC_CHANNEL *ch);
+/* Force transmission of an ACK-eliciting packet. */
+int ossl_quic_channel_ping(QUIC_CHANNEL *ch);
+
# endif
#endif
ch_trigger_txku(ch);
return 1;
}
+
+int ossl_quic_channel_ping(QUIC_CHANNEL *ch)
+{
+ int pn_space = ossl_quic_enc_level_to_pn_space(ch->tx_enc_level);
+
+ ossl_quic_tx_packetiser_schedule_ack_eliciting(ch->txp, pn_space);
+
+ return 1;
+}
return ossl_quic_channel_is_terminated(srv->ch);
}
+
+int ossl_quic_tserver_ping(QUIC_TSERVER *srv)
+{
+ if (ossl_quic_channel_is_terminated(srv->ch))
+ return 0;
+
+ if (!ossl_quic_channel_ping(srv->ch))
+ return 0;
+
+ ossl_quic_reactor_tick(ossl_quic_channel_get_reactor(srv->ch), 0);
+ return 1;
+}
int expect_remote = (op->arg1 & EXPECT_CONN_CLOSE_REMOTE) != 0;
uint64_t error_code = op->arg2;
- if (!ossl_quic_tserver_is_term_any(h->s))
+ if (!ossl_quic_tserver_is_term_any(h->s)) {
+ ossl_quic_tserver_ping(h->s);
SPIN_AGAIN();
+ }
if (!TEST_ptr(tc = ossl_quic_tserver_get_terminate_cause(h->s)))
goto out;
OP_C_SET_DEFAULT_STREAM_MODE(SSL_DEFAULT_STREAM_MODE_NONE)
OP_C_NEW_STREAM_BIDI (a, C_BIDI_ID(0))
+ OP_C_NEW_STREAM_BIDI (b, C_BIDI_ID(1))
OP_C_WRITE (a, "apple", 5)
OP_C_STREAM_RESET (a, 42)
+ OP_C_WRITE (b, "strawberry", 10)
+
OP_S_BIND_STREAM_ID (a, C_BIDI_ID(0))
+ OP_S_BIND_STREAM_ID (b, C_BIDI_ID(1))
+ OP_S_READ_EXPECT (b, "strawberry", 10)
/* Reset disrupts read of already sent data */
OP_S_READ_FAIL (a)
OP_CHECK (check_stream_reset, C_BIDI_ID(0))