Add methods for reading and writing data to TLS connection

This commit is contained in:
Alex Villacís Lasso
2021-10-11 18:36:55 -05:00
parent 80fc7eb489
commit d7ea0eae72
2 changed files with 30 additions and 0 deletions

View File

@@ -235,6 +235,30 @@ int AsyncTCP_TLS_Context::runSSLHandshake(void)
return 0; return 0;
} }
int AsyncTCP_TLS_Context::write(const uint8_t *data, size_t len)
{
if (_socket < 0) return -1;
log_v("Writing packet, %d bytes unencrypted...", len);
int ret = mbedtls_ssl_write(&ssl_ctx, data, len);
if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE && ret < 0) {
log_v("Handling error %d", ret); //for low level debug
return handle_error(ret);
}
return ret;
}
int AsyncTCP_TLS_Context::read(uint8_t * data, size_t len)
{
int ret = mbedtls_ssl_read(&ssl_ctx, data, len);
if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE && ret < 0) {
log_v("Handling error %d", ret); //for low level debug
return handle_error(ret);
}
if (ret > 0) log_v("Read packet, %d out of %d requested bytes...", ret, len);
return ret;
}
void AsyncTCP_TLS_Context::_deleteHandshakeCerts(void) void AsyncTCP_TLS_Context::_deleteHandshakeCerts(void)
{ {
if (_have_ca_cert) { if (_have_ca_cert) {

View File

@@ -14,6 +14,8 @@
#include "mbedtls/ctr_drbg.h" #include "mbedtls/ctr_drbg.h"
#include "mbedtls/error.h" #include "mbedtls/error.h"
#define ASYNCTCP_TLS_CAN_RETRY(r) (((r) == MBEDTLS_ERR_SSL_WANT_READ) || ((r) == MBEDTLS_ERR_SSL_WANT_WRITE))
class AsyncTCP_TLS_Context class AsyncTCP_TLS_Context
{ {
private: private:
@@ -50,6 +52,10 @@ public:
const char *psKey, bool insecure); const char *psKey, bool insecure);
int runSSLHandshake(void); int runSSLHandshake(void);
int write(const uint8_t *data, size_t len);
int read(uint8_t * data, size_t len);
}; };
#endif // ASYNC_TCP_SSL_ENABLED #endif // ASYNC_TCP_SSL_ENABLED