diff options
author | George L. Albany <Megacake1234@gmail.com> | 2024-11-12 20:29:24 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-11-12 20:29:24 +0000 |
commit | ac1a49725fc038ae11ef9060fecb2b0f9c6333b2 (patch) | |
tree | c7341bd56c977259578b127886c9a88eeef11820 /modules/mbedtls/stream_peer_mbedtls.cpp | |
parent | 5094c2a5f7d506b0e685120f14d1df42e1e9d495 (diff) | |
parent | 3a73c6ebd18bff0fa125be58d3ac9c7a63bab61d (diff) | |
download | redot-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.cpp | 62 |
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; } |