const void *buf, size_t msglen, SSL *ssl, void *arg);
# define OSSL_QUIC_ANY_VERSION 0x5155
-# define IS_QUIC_METHOD(m) ((m)->version == OSSL_QUIC_ANY_VERSION)
+# ifndef OPENSSL_NO_QUIC
+# define IS_QUIC_METHOD(m) ((m)->version == OSSL_QUIC_ANY_VERSION)
+# define IS_QUIC_SSL(s) ((s) != NULL && \
+ ((s)->type == SSL_TYPE_QUIC_CONNECTION || \
+ (s)->type == SSL_TYPE_QUIC_STREAM))
+# else
+# define IS_QUIC_METHOD(m) 0
+# define IS_QUIC_SSL(s) 0
+# endif
# define IS_QUIC_CTX(ctx) IS_QUIC_METHOD((ctx)->method)
# define QUIC_CONNECTION_FROM_SSL_int(ssl, c) \
s->msg_callback_arg = ctx->msg_callback_arg;
s->verify_mode = ctx->verify_mode;
s->not_resumable_session_cb = ctx->not_resumable_session_cb;
- s->rlayer.record_padding_cb = ctx->record_padding_cb;
- s->rlayer.record_padding_arg = ctx->record_padding_arg;
- s->rlayer.block_padding = ctx->block_padding;
+ if (!IS_QUIC_CTX(ctx)) {
+ s->rlayer.record_padding_cb = ctx->record_padding_cb;
+ s->rlayer.record_padding_arg = ctx->record_padding_arg;
+ s->rlayer.block_padding = ctx->block_padding;
+ }
s->sid_ctx_length = ctx->sid_ctx_length;
if (!ossl_assert(s->sid_ctx_length <= sizeof(s->sid_ctx)))
goto err;
X509_VERIFY_PARAM_inherit(s->param, ctx->param);
s->quiet_shutdown = ctx->quiet_shutdown;
- s->ext.max_fragment_len_mode = ctx->ext.max_fragment_len_mode;
+ if (!IS_QUIC_SSL(ssl))
+ s->ext.max_fragment_len_mode = ctx->ext.max_fragment_len_mode;
+
s->max_send_fragment = ctx->max_send_fragment;
s->split_send_fragment = ctx->split_send_fragment;
s->max_pipelines = ctx->max_pipelines;
SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
OSSL_PARAM options[2], *opts = options;
- if (sc == NULL)
+ if (sc == NULL || IS_QUIC_SSL(s))
return;
RECORD_LAYER_set_read_ahead(&sc->rlayer, yes);
{
const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
- if (sc == NULL)
+ if (sc == NULL || IS_QUIC_SSL(s))
return 0;
return RECORD_LAYER_get_read_ahead(&sc->rlayer);
switch (cmd) {
case SSL_CTRL_GET_READ_AHEAD:
+ if (IS_QUIC_SSL(s))
+ return 0;
return RECORD_LAYER_get_read_ahead(&sc->rlayer);
case SSL_CTRL_SET_READ_AHEAD:
+ if (IS_QUIC_SSL(s))
+ return 0;
l = RECORD_LAYER_get_read_ahead(&sc->rlayer);
RECORD_LAYER_set_read_ahead(&sc->rlayer, larg);
return l;
BIO *b;
SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
- if (sc == NULL)
+ if (sc == NULL || IS_QUIC_SSL(ssl))
return 0;
b = SSL_get_wbio(ssl);
{
SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(ssl);
- if (sc == NULL)
+ if (sc == NULL || (IS_QUIC_SSL(ssl) && block_size > 1))
return 0;
/* block size of 0 or 1 is basically no padding */
if (!TEST_uint64_t_eq(SSL_get_options(ssl), 0))
goto err;
+ /* Readahead */
+ SSL_set_read_ahead(ssl, 1);
+ if (!TEST_false(SSL_get_read_ahead(ssl)))
+ goto err;
+
+ /* Block padding */
+ if (!TEST_true(SSL_set_block_padding(ssl, 0))
+ || !TEST_true(SSL_set_block_padding(ssl, 1))
+ || !TEST_false(SSL_set_block_padding(ssl, 2)))
+ goto err;
+
+ /* Max fragment length */
+ if (!TEST_true(SSL_set_tlsext_max_fragment_length(ssl, TLSEXT_max_fragment_length_DISABLED))
+ || !TEST_false(SSL_set_tlsext_max_fragment_length(ssl, TLSEXT_max_fragment_length_512)))
+ goto err;
+
testresult = 1;
err:
SSL_free(ssl);