Skip to content

Commit

Permalink
QUIC: Process multiple post-handshake messages in a single call (#16)
Browse files Browse the repository at this point in the history
tatsuhiro-t authored and tmshort committed Jul 5, 2022
1 parent dc22239 commit 41fe641
Showing 2 changed files with 15 additions and 18 deletions.
27 changes: 13 additions & 14 deletions ssl/ssl_quic.c
Original file line number Diff line number Diff line change
@@ -334,20 +334,19 @@ int SSL_process_quic_post_handshake(SSL *ssl)
}

/* if there is no data, return success as BoringSSL */
if (ssl->quic_input_data_head == NULL)
return 1;

/*
* This is always safe (we are sure to be at a record boundary) because
* SSL_read()/SSL_write() are never used for QUIC connections -- the
* application data is handled at the QUIC layer instead.
*/
ossl_statem_set_in_init(ssl, 1);
ret = ssl->handshake_func(ssl);
ossl_statem_set_in_init(ssl, 0);

if (ret <= 0)
return 0;
while (ssl->quic_input_data_head != NULL) {
/*
* This is always safe (we are sure to be at a record boundary) because
* SSL_read()/SSL_write() are never used for QUIC connections -- the
* application data is handled at the QUIC layer instead.
*/
ossl_statem_set_in_init(ssl, 1);
ret = ssl->handshake_func(ssl);
ossl_statem_set_in_init(ssl, 0);

if (ret <= 0)
return 0;
}
return 1;
}

6 changes: 2 additions & 4 deletions test/sslapitest.c
Original file line number Diff line number Diff line change
@@ -9870,8 +9870,7 @@ static int test_quic_api_version(int clnt, int srvr)
goto end;

/* Deal with two NewSessionTickets */
if (!TEST_true(SSL_process_quic_post_handshake(clientssl))
|| !TEST_true(SSL_process_quic_post_handshake(clientssl)))
if (!TEST_true(SSL_process_quic_post_handshake(clientssl)))
goto end;

/* Dummy handshake call should succeed */
@@ -10063,8 +10062,7 @@ static int quic_setupearly_data_test(SSL_CTX **cctx, SSL_CTX **sctx,
return 0;

/* Deal with two NewSessionTickets */
if (!TEST_true(SSL_process_quic_post_handshake(*clientssl))
|| !TEST_true(SSL_process_quic_post_handshake(*clientssl)))
if (!TEST_true(SSL_process_quic_post_handshake(*clientssl)))
return 0;

*sess = SSL_get1_session(*clientssl);

0 comments on commit 41fe641

Please sign in to comment.