diff options
author | Ronald Cron <ronald.cron@arm.com> | 2024-01-23 10:30:57 +0100 |
---|---|---|
committer | Ronald Cron <ronald.cron@arm.com> | 2024-02-07 08:06:46 +0100 |
commit | a5561893e76acd5f9a3a822e4ad323875c0c4fde (patch) | |
tree | 3603fffb77ab31d9a2891ddee9585d4cf4257adc /programs | |
parent | 2fe0ec8c3195a4fdea120228f543a37120daf3fc (diff) | |
download | mbedtls-a5561893e76acd5f9a3a822e4ad323875c0c4fde.zip mbedtls-a5561893e76acd5f9a3a822e4ad323875c0c4fde.tar.gz mbedtls-a5561893e76acd5f9a3a822e4ad323875c0c4fde.tar.bz2 |
ssl_client2: Add support for early data writing
Signed-off-by: Ronald Cron <ronald.cron@arm.com>
Diffstat (limited to 'programs')
-rw-r--r-- | programs/ssl/ssl_client2.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/programs/ssl/ssl_client2.c b/programs/ssl/ssl_client2.c index b501b9f..0723be8 100644 --- a/programs/ssl/ssl_client2.c +++ b/programs/ssl/ssl_client2.c @@ -3035,6 +3035,55 @@ reconnect: goto exit; } + ret = build_http_request(buf, sizeof(buf) - 1, &len); + if (ret != 0) { + goto exit; + } + +#if defined(MBEDTLS_SSL_EARLY_DATA) + if (opt.early_data == MBEDTLS_SSL_EARLY_DATA_ENABLED) { + frags = 0; + written = 0; + do { + while ((ret = mbedtls_ssl_write_early_data(&ssl, buf + written, + len - written)) < 0) { + if (ret == MBEDTLS_ERR_SSL_CANNOT_WRITE_EARLY_DATA) { + break; + } + if (ret != MBEDTLS_ERR_SSL_WANT_READ && + ret != MBEDTLS_ERR_SSL_WANT_WRITE && + ret != MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS) { + mbedtls_printf(" failed\n ! mbedtls_ssl_write returned -0x%x\n\n", + (unsigned int) -ret); + goto exit; + } + + /* For event-driven IO, wait for socket to become available */ + if (opt.event == 1 /* level triggered IO */) { +#if defined(MBEDTLS_TIMING_C) + idle(&server_fd, &timer, ret); +#else + idle(&server_fd, ret); +#endif + } + } + if (ret == MBEDTLS_ERR_SSL_CANNOT_WRITE_EARLY_DATA) { + break; + } + + frags++; + written += ret; + } while (written < len); + } + + buf[written] = '\0'; + mbedtls_printf( + " %" MBEDTLS_PRINTF_SIZET " bytes of early data written in %" MBEDTLS_PRINTF_SIZET " fragments\n\n%s\n", + written, + frags, + (char *) buf); +#endif /* MBEDTLS_SSL_EARLY_DATA */ + while ((ret = mbedtls_ssl_handshake(&ssl)) != 0) { if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE && |