diff --git a/libraries/SocketWrapper/src/MbedClient.cpp b/libraries/SocketWrapper/src/MbedClient.cpp index fe63b5fe8..ad1a14cbc 100644 --- a/libraries/SocketWrapper/src/MbedClient.cpp +++ b/libraries/SocketWrapper/src/MbedClient.cpp @@ -178,7 +178,15 @@ int arduino::MbedClient::connectSSL(IPAddress ip, uint16_t port) { return connectSSL(SocketHelpers::socketAddressFromIpAddress(ip, port)); } -int arduino::MbedClient::connectSSL(const char *host, uint16_t port) { +int arduino::MbedClient::connectSSL(const char *host, uint16_t port, bool disableSNI) { + if (!disableSNI) { + if (sock == nullptr) { + sock = new TLSSocket(); + _own_socket = true; + } + static_cast(sock)->set_hostname(host); + } + SocketAddress socketAddress = SocketAddress(); socketAddress.set_port(port); getNetwork()->gethostbyname(host, &socketAddress); diff --git a/libraries/SocketWrapper/src/MbedClient.h b/libraries/SocketWrapper/src/MbedClient.h index 033e5ba80..07e615cae 100644 --- a/libraries/SocketWrapper/src/MbedClient.h +++ b/libraries/SocketWrapper/src/MbedClient.h @@ -71,7 +71,7 @@ class MbedClient : public arduino::Client { int connect(const char* host, uint16_t port); int connectSSL(SocketAddress socketAddress); int connectSSL(IPAddress ip, uint16_t port); - int connectSSL(const char* host, uint16_t port); + int connectSSL(const char* host, uint16_t port, bool disableSNI = false); size_t write(uint8_t); size_t write(const uint8_t* buf, size_t size); int available(); diff --git a/libraries/SocketWrapper/src/MbedSSLClient.cpp b/libraries/SocketWrapper/src/MbedSSLClient.cpp index 1d273c5ba..e0aa1d2dd 100644 --- a/libraries/SocketWrapper/src/MbedSSLClient.cpp +++ b/libraries/SocketWrapper/src/MbedSSLClient.cpp @@ -1,5 +1,5 @@ #include "MbedSSLClient.h" -arduino::MbedSSLClient::MbedSSLClient() { +arduino::MbedSSLClient::MbedSSLClient(): _disableSNI{false} { onBeforeConnect(mbed::callback(this, &MbedSSLClient::setRootCA)); -}; \ No newline at end of file +}; diff --git a/libraries/SocketWrapper/src/MbedSSLClient.h b/libraries/SocketWrapper/src/MbedSSLClient.h index a0bbbc013..a2712013f 100644 --- a/libraries/SocketWrapper/src/MbedSSLClient.h +++ b/libraries/SocketWrapper/src/MbedSSLClient.h @@ -38,15 +38,20 @@ class MbedSSLClient : public arduino::MbedClient { return connectSSL(ip, port); } int connect(const char* host, uint16_t port) { - return connectSSL(host, port); + return connectSSL(host, port, _disableSNI); + } + void disableSNI(bool statusSNI) { + _disableSNI = statusSNI; } private: int setRootCA() { return ((TLSSocket*)sock)->set_root_ca_cert_path("/wlan/"); } + + bool _disableSNI; }; } -#endif /* MBEDSSLCLIENT_H */ \ No newline at end of file +#endif /* MBEDSSLCLIENT_H */ diff --git a/libraries/WiFi/src/WiFiSSLClient.cpp b/libraries/WiFi/src/WiFiSSLClient.cpp index cb1396b4d..a90dc3b89 100644 --- a/libraries/WiFi/src/WiFiSSLClient.cpp +++ b/libraries/WiFi/src/WiFiSSLClient.cpp @@ -1,5 +1,5 @@ #include "WiFiSSLClient.h" -arduino::WiFiSSLClient::WiFiSSLClient() { +arduino::WiFiSSLClient::WiFiSSLClient(): _disableSNI{false} { onBeforeConnect(mbed::callback(this, &WiFiSSLClient::setRootCA)); -}; \ No newline at end of file +}; diff --git a/libraries/WiFi/src/WiFiSSLClient.h b/libraries/WiFi/src/WiFiSSLClient.h index 61e484a69..30d7a3d66 100644 --- a/libraries/WiFi/src/WiFiSSLClient.h +++ b/libraries/WiFi/src/WiFiSSLClient.h @@ -38,15 +38,20 @@ class WiFiSSLClient : public arduino::WiFiClient { return connectSSL(ip, port); } int connect(const char* host, uint16_t port) { - return connectSSL(host, port); + return connectSSL(host, port, _disableSNI); + } + void disableSNI(bool statusSNI) { + _disableSNI = statusSNI; } private: int setRootCA() { return ((TLSSocket*)sock)->set_root_ca_cert_path("/wlan/"); } + + bool _disableSNI; }; } -#endif /* WIFISSLCLIENT_H */ \ No newline at end of file +#endif /* WIFISSLCLIENT_H */