From d650ac6c3cffe5ed985127f909c2f25973d0ffbb Mon Sep 17 00:00:00 2001 From: lbernstone Date: Wed, 17 Jan 2018 16:03:56 -0700 Subject: [PATCH] WiFiClientSecure::lastError() method (#945) * Added a lastError method to WiFiClientSecure so that a connection error from mbedTLS can be retrieved if connection fails (and then presented to a user). * Changed to dos CRLF * Made buffer size a const\nMore cleanup to match source --- libraries/WiFiClientSecure/src/WiFiClientSecure.cpp | 11 +++++++++++ libraries/WiFiClientSecure/src/WiFiClientSecure.h | 5 +++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/libraries/WiFiClientSecure/src/WiFiClientSecure.cpp b/libraries/WiFiClientSecure/src/WiFiClientSecure.cpp index 46c69af3..a0a8b3d8 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 d5ce9268..8b6899a6 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);