Skip to content

Commit

Permalink
QUIC: Process multiple post-handshake messages in a single call (quic…
Browse files Browse the repository at this point in the history
  • Loading branch information
tatsuhiro-t authored and xl32 committed Sep 4, 2024
1 parent a233eef commit 92b6a81
Show file tree
Hide file tree
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
Expand Up @@ -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;
}

Expand Down
6 changes: 2 additions & 4 deletions test/sslapitest.c
Original file line number Diff line number Diff line change
Expand Up @@ -10871,8 +10871,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 */
Expand Down Expand Up @@ -11059,8 +11058,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);
Expand Down

0 comments on commit 92b6a81

Please sign in to comment.