diff --git a/src/WebSockets.h b/src/WebSockets.h index 4defcf6..32f83bb 100644 --- a/src/WebSockets.h +++ b/src/WebSockets.h @@ -118,7 +118,6 @@ typedef struct { #if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) bool isSSL; ///< run in ssl mode WiFiClientSecure * ssl; - const char * fingerprint; #endif String cUrl; ///< http url diff --git a/src/WebSocketsClient.cpp b/src/WebSocketsClient.cpp index f045569..a22fd33 100644 --- a/src/WebSocketsClient.cpp +++ b/src/WebSocketsClient.cpp @@ -40,6 +40,7 @@ WebSocketsClient::~WebSocketsClient() { void WebSocketsClient::begin(const char *host, uint16_t port, const char * url) { _host = host; _port = port; + _fingerprint = ""; _client.num = 0; _client.status = WSC_NOT_CONNECTED; @@ -47,7 +48,6 @@ void WebSocketsClient::begin(const char *host, uint16_t port, const char * url) #if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) _client.isSSL = false; _client.ssl = NULL; - _client.fingerprint = NULL; #endif _client.cUrl = url; _client.cCode = 0; @@ -72,24 +72,14 @@ void WebSocketsClient::begin(String host, uint16_t port, String url) { } #if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) -void WebSocketsClient::beginSSL(const char *host, uint16_t port, const char * url) { - begin(host, port, url); - _client.isSSL = true; -} - -void WebSocketsClient::beginSSL(String host, uint16_t port, String url) { - beginSSL(host.c_str(), port, url.c_str()); -} - void WebSocketsClient::beginSSL(const char *host, uint16_t port, const char * url, const char * fingerprint) { begin(host, port, url); _client.isSSL = true; - _client.fingerprint = fingerprint; + _fingerprint = fingerprint; } -void WebSocketsClient::beginSSL(String host, uint16_t port, String url, const char * fingerprint) { - beginSSL(host.c_str(), port, url.c_str()); - _client.fingerprint = fingerprint; +void WebSocketsClient::beginSSL(String host, uint16_t port, String url, String fingerprint) { + beginSSL(host.c_str(), port, url.c_str(), fingerprint.c_str()); } #endif @@ -136,9 +126,9 @@ void WebSocketsClient::loop(void) { #if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) _client.tcp->setNoDelay(true); - - if (_client.isSSL && _client.fingerprint != NULL) { - if (!(((WiFiClientSecure*)_client.tcp)->verify(_client.fingerprint, _host.c_str()))) { + + if(_client.isSSL && _fingerprint.length()) { + if(!_client.ssl->verify(_fingerprint.c_str(), _host.c_str())) { DEBUG_WEBSOCKETS("[WS-Client] certificate mismatch\n"); WebSockets::clientDisconnect(&_client, 1000); return; diff --git a/src/WebSocketsClient.h b/src/WebSocketsClient.h index 7b5c29a..6a2c60e 100644 --- a/src/WebSocketsClient.h +++ b/src/WebSocketsClient.h @@ -40,10 +40,8 @@ class WebSocketsClient: private WebSockets { void begin(String host, uint16_t port, String url = "/"); #if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) - void beginSSL(const char *host, uint16_t port, const char * url = "/"); - void beginSSL(String host, uint16_t port, String url = "/"); - void beginSSL(const char *host, uint16_t port, const char * url, const char * fingerprint); - void beginSSL(String host, uint16_t port, String url, const char * fingerprint); + void beginSSL(const char *host, uint16_t port, const char * url = "/", const char * = ""); + void beginSSL(String host, uint16_t port, String url = "/", String fingerprint = ""); #endif void loop(void); @@ -65,6 +63,9 @@ class WebSocketsClient: private WebSockets { String _host; uint16_t _port; +#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) + String _fingerprint; +#endif WSclient_t _client; WebSocketClientEvent _cbEvent;