diff --git a/libraries/WiFiClientSecure/src/WiFiClientSecure.cpp b/libraries/WiFiClientSecure/src/WiFiClientSecure.cpp index 46c69af344459a841e0ffce030a3482ee828f1c4..a0a8b3d888f22d5cfb6cc9a5ed6ad93f2c0e1b8a 100644 --- a/libraries/WiFiClientSecure/src/WiFiClientSecure.cpp +++ b/libraries/WiFiClientSecure/src/WiFiClientSecure.cpp @@ -103,6 +103,7 @@ int WiFiClientSecure::connect(IPAddress ip, uint16_t port, const char *_CA_cert, int WiFiClientSecure::connect(const char *host, uint16_t port, const char *_CA_cert, const char *_cert, const char *_private_key) { int ret = start_ssl_client(sslclient, host, port, _CA_cert, _cert, _private_key); + _lastError = ret; if (ret < 0) { log_e("lwip_connect_r: %d", errno); stop(); @@ -187,3 +188,13 @@ void WiFiClientSecure::setPrivateKey (const char *private_key) _private_key = private_key; } +int WiFiClientSecure::lastError(char *buf, const size_t size) +{ + if (!_lastError) { + return 0; + } + char error_buf[100]; + mbedtls_strerror(_lastError, error_buf, 100); + snprintf(buf, size, "%s", error_buf); + return _lastError; +} diff --git a/libraries/WiFiClientSecure/src/WiFiClientSecure.h b/libraries/WiFiClientSecure/src/WiFiClientSecure.h index d5ce92688df307f0c513922984a427b7d0399910..8b6899a6f21f5f85fed27c8d9f889c6f4e71e26c 100644 --- a/libraries/WiFiClientSecure/src/WiFiClientSecure.h +++ b/libraries/WiFiClientSecure/src/WiFiClientSecure.h @@ -29,7 +29,8 @@ class WiFiClientSecure : public WiFiClient { protected: sslclient_context *sslclient; - + + int _lastError = 0; const char *_CA_cert; const char *_cert; const char *_private_key; @@ -55,7 +56,7 @@ public: void flush() {} void stop(); uint8_t connected(); - + int lastError(char *buf, const size_t size); void setCACert(const char *rootCA); void setCertificate(const char *client_ca); void setPrivateKey (const char *private_key);