summaryrefslogtreecommitdiffstats
path: root/modules/mbedtls/stream_peer_mbedtls.cpp
diff options
context:
space:
mode:
authorGeorge L. Albany <Megacake1234@gmail.com>2024-11-12 20:29:24 +0000
committerGitHub <noreply@github.com>2024-11-12 20:29:24 +0000
commitac1a49725fc038ae11ef9060fecb2b0f9c6333b2 (patch)
treec7341bd56c977259578b127886c9a88eeef11820 /modules/mbedtls/stream_peer_mbedtls.cpp
parent5094c2a5f7d506b0e685120f14d1df42e1e9d495 (diff)
parent3a73c6ebd18bff0fa125be58d3ac9c7a63bab61d (diff)
downloadredot-engine-ac1a49725fc038ae11ef9060fecb2b0f9c6333b2.tar.gz
Merge pull request #855 from Spartan322/merge/cb411fa
Merge commit godotengine/godot@cb411fa
Diffstat (limited to 'modules/mbedtls/stream_peer_mbedtls.cpp')
-rw-r--r--modules/mbedtls/stream_peer_mbedtls.cpp62
1 files changed, 35 insertions, 27 deletions
diff --git a/modules/mbedtls/stream_peer_mbedtls.cpp b/modules/mbedtls/stream_peer_mbedtls.cpp
index 3d7bd5c689..0335f7b076 100644
--- a/modules/mbedtls/stream_peer_mbedtls.cpp
+++ b/modules/mbedtls/stream_peer_mbedtls.cpp
@@ -168,21 +168,24 @@ Error StreamPeerMbedTLS::put_partial_data(const uint8_t *p_data, int p_bytes, in
return OK;
}
- int ret = mbedtls_ssl_write(tls_ctx->get_context(), p_data, p_bytes);
- if (ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE) {
- // Non blocking IO
- ret = 0;
- } else if (ret == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY) {
- // Clean close
- disconnect_from_stream();
- return ERR_FILE_EOF;
- } else if (ret <= 0) {
- TLSContextMbedTLS::print_mbedtls_error(ret);
- disconnect_from_stream();
- return ERR_CONNECTION_ERROR;
- }
+ do {
+ int ret = mbedtls_ssl_write(tls_ctx->get_context(), &p_data[r_sent], p_bytes - r_sent);
+ if (ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE) {
+ // Non blocking IO.
+ break;
+ } else if (ret == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY) {
+ // Clean close
+ disconnect_from_stream();
+ return ERR_FILE_EOF;
+ } else if (ret <= 0) {
+ TLSContextMbedTLS::print_mbedtls_error(ret);
+ disconnect_from_stream();
+ return ERR_CONNECTION_ERROR;
+ }
+ r_sent += ret;
+
+ } while (r_sent < p_bytes);
- r_sent = ret;
return OK;
}
@@ -211,20 +214,25 @@ Error StreamPeerMbedTLS::get_partial_data(uint8_t *p_buffer, int p_bytes, int &r
r_received = 0;
- int ret = mbedtls_ssl_read(tls_ctx->get_context(), p_buffer, p_bytes);
- if (ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE) {
- ret = 0; // non blocking io
- } else if (ret == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY) {
- // Clean close
- disconnect_from_stream();
- return ERR_FILE_EOF;
- } else if (ret <= 0) {
- TLSContextMbedTLS::print_mbedtls_error(ret);
- disconnect_from_stream();
- return ERR_CONNECTION_ERROR;
- }
+ do {
+ int ret = mbedtls_ssl_read(tls_ctx->get_context(), &p_buffer[r_received], p_bytes - r_received);
+ if (ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE) {
+ // Non blocking IO.
+ break;
+ } else if (ret == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY) {
+ // Clean close
+ disconnect_from_stream();
+ return ERR_FILE_EOF;
+ } else if (ret <= 0) {
+ TLSContextMbedTLS::print_mbedtls_error(ret);
+ disconnect_from_stream();
+ return ERR_CONNECTION_ERROR;
+ }
+
+ r_received += ret;
+
+ } while (r_received < p_bytes);
- r_received = ret;
return OK;
}