mirror of
https://github.com/godotengine/godot.git
synced 2025-02-16 07:40:36 +00:00
Merge pull request #98995 from Faless/mbetls/insestent_io
[mbedTLS] Keep reading/writing partial until "would block"
This commit is contained in:
commit
21ed92273d
@ -166,21 +166,24 @@ Error StreamPeerMbedTLS::put_partial_data(const uint8_t *p_data, int p_bytes, in
|
|||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ret = mbedtls_ssl_write(tls_ctx->get_context(), p_data, p_bytes);
|
do {
|
||||||
if (ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE) {
|
int ret = mbedtls_ssl_write(tls_ctx->get_context(), &p_data[r_sent], p_bytes - r_sent);
|
||||||
// Non blocking IO
|
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) {
|
break;
|
||||||
// Clean close
|
} else if (ret == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY) {
|
||||||
disconnect_from_stream();
|
// Clean close
|
||||||
return ERR_FILE_EOF;
|
disconnect_from_stream();
|
||||||
} else if (ret <= 0) {
|
return ERR_FILE_EOF;
|
||||||
TLSContextMbedTLS::print_mbedtls_error(ret);
|
} else if (ret <= 0) {
|
||||||
disconnect_from_stream();
|
TLSContextMbedTLS::print_mbedtls_error(ret);
|
||||||
return ERR_CONNECTION_ERROR;
|
disconnect_from_stream();
|
||||||
}
|
return ERR_CONNECTION_ERROR;
|
||||||
|
}
|
||||||
|
r_sent += ret;
|
||||||
|
|
||||||
|
} while (r_sent < p_bytes);
|
||||||
|
|
||||||
r_sent = ret;
|
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -209,20 +212,25 @@ Error StreamPeerMbedTLS::get_partial_data(uint8_t *p_buffer, int p_bytes, int &r
|
|||||||
|
|
||||||
r_received = 0;
|
r_received = 0;
|
||||||
|
|
||||||
int ret = mbedtls_ssl_read(tls_ctx->get_context(), p_buffer, p_bytes);
|
do {
|
||||||
if (ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE) {
|
int ret = mbedtls_ssl_read(tls_ctx->get_context(), &p_buffer[r_received], p_bytes - r_received);
|
||||||
ret = 0; // non blocking io
|
if (ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE) {
|
||||||
} else if (ret == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY) {
|
// Non blocking IO.
|
||||||
// Clean close
|
break;
|
||||||
disconnect_from_stream();
|
} else if (ret == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY) {
|
||||||
return ERR_FILE_EOF;
|
// Clean close
|
||||||
} else if (ret <= 0) {
|
disconnect_from_stream();
|
||||||
TLSContextMbedTLS::print_mbedtls_error(ret);
|
return ERR_FILE_EOF;
|
||||||
disconnect_from_stream();
|
} else if (ret <= 0) {
|
||||||
return ERR_CONNECTION_ERROR;
|
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;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user