diff --git a/libraries/ESP8266WiFi/keywords.txt b/libraries/ESP8266WiFi/keywords.txt index 66012c113b..7abf2978ef 100644 --- a/libraries/ESP8266WiFi/keywords.txt +++ b/libraries/ESP8266WiFi/keywords.txt @@ -69,6 +69,7 @@ softAPgetStationNum KEYWORD2 #ESP8266WiFiMulti addAP KEYWORD2 +existsAP KEYWORD2 run KEYWORD2 #ESP8266WiFiScan diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFiMulti.cpp b/libraries/ESP8266WiFi/src/ESP8266WiFiMulti.cpp index 7bb7f3c61a..449c30f872 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFiMulti.cpp +++ b/libraries/ESP8266WiFi/src/ESP8266WiFiMulti.cpp @@ -38,6 +38,10 @@ bool ESP8266WiFiMulti::addAP(const char* ssid, const char *passphrase) { return APlistAdd(ssid, passphrase); } +bool ESP8266WiFiMulti::existsAP(const char* ssid, const char *passphrase) { + return APlistExists(ssid, passphrase); +} + wl_status_t ESP8266WiFiMulti::run(void) { wl_status_t status = WiFi.status(); @@ -184,18 +188,23 @@ bool ESP8266WiFiMulti::APlistAdd(const char* ssid, const char *passphrase) { WifiAPEntry newAP; if(!ssid || *ssid == 0x00 || strlen(ssid) > 31) { - // fail SSID to long or missing! - DEBUG_WIFI_MULTI("[WIFI][APlistAdd] no ssid or ssid to long\n"); + // fail SSID too long or missing! + DEBUG_WIFI_MULTI("[WIFI][APlistAdd] no ssid or ssid too long\n"); return false; } //for passphrase, max is 63 ascii + null. For psk, 64hex + null. if(passphrase && strlen(passphrase) > 64) { - // fail passphrase to long! - DEBUG_WIFI_MULTI("[WIFI][APlistAdd] passphrase to long\n"); + // fail passphrase too long! + DEBUG_WIFI_MULTI("[WIFI][APlistAdd] passphrase too long\n"); return false; } + if(APlistExists(ssid, passphrase)) { + DEBUG_WIFI_MULTI("[WIFI][APlistAdd] SSID: %s already exists\n", ssid); + return true; + } + newAP.ssid = strdup(ssid); if(!newAP.ssid) { @@ -220,6 +229,28 @@ bool ESP8266WiFiMulti::APlistAdd(const char* ssid, const char *passphrase) { return true; } +bool ESP8266WiFiMulti::APlistExists(const char* ssid, const char *passphrase) { + if(!ssid || *ssid == 0x00 || strlen(ssid) > 31) { + // fail SSID too long or missing! + DEBUG_WIFI_MULTI("[WIFI][APlistExists] no ssid or ssid too long\n"); + return false; + } + for(auto entry : APlist) { + if(!strcmp(entry.ssid, ssid)) { + if(!passphrase) { + if(!strcmp(entry.passphrase, "")) { + return true; + } + } else { + if(!strcmp(entry.passphrase, passphrase)) { + return true; + } + } + } + } + return false; +} + void ESP8266WiFiMulti::APlistClean(void) { for(auto entry : APlist) { if(entry.ssid) { diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFiMulti.h b/libraries/ESP8266WiFi/src/ESP8266WiFiMulti.h index af8c00307b..1f1d03eb26 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFiMulti.h +++ b/libraries/ESP8266WiFi/src/ESP8266WiFiMulti.h @@ -53,12 +53,14 @@ class ESP8266WiFiMulti { ~ESP8266WiFiMulti(); bool addAP(const char* ssid, const char *passphrase = NULL); + bool existsAP(const char* ssid, const char *passphrase = NULL); wl_status_t run(void); private: WifiAPlist APlist; bool APlistAdd(const char* ssid, const char *passphrase = NULL); + bool APlistExists(const char* ssid, const char *passphrase = NULL); void APlistClean(void); };