From 293e55c6903f5f9de3e5c3d69016c86af3b41398 Mon Sep 17 00:00:00 2001 From: Markus Sattler Date: Tue, 29 Dec 2015 15:28:29 +0100 Subject: [PATCH] check for WiFi pass < 8 (not allowed for WPA2) simplify STA config and allow setting of second DNS server for fallback code style --- libraries/ESP8266WiFi/src/ESP8266WiFiAP.cpp | 16 +++-- .../ESP8266WiFi/src/ESP8266WiFiGeneric.cpp | 6 +- libraries/ESP8266WiFi/src/ESP8266WiFiSTA.cpp | 67 +++++++------------ libraries/ESP8266WiFi/src/ESP8266WiFiSTA.h | 4 +- libraries/ESP8266WiFi/src/ESP8266WiFiScan.cpp | 1 - 5 files changed, 41 insertions(+), 53 deletions(-) diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFiAP.cpp b/libraries/ESP8266WiFi/src/ESP8266WiFiAP.cpp index b598707c7..8a0626530 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFiAP.cpp +++ b/libraries/ESP8266WiFi/src/ESP8266WiFiAP.cpp @@ -54,14 +54,18 @@ static bool softap_config_equal(const softap_config& lhs, const softap_config& r * @return equal */ static bool softap_config_equal(const softap_config& lhs, const softap_config& rhs) { - if(strcmp(reinterpret_cast(lhs.ssid), reinterpret_cast(rhs.ssid)) != 0) + if(strcmp(reinterpret_cast(lhs.ssid), reinterpret_cast(rhs.ssid)) != 0) { return false; - if(strcmp(reinterpret_cast(lhs.password), reinterpret_cast(rhs.password)) != 0) + } + if(strcmp(reinterpret_cast(lhs.password), reinterpret_cast(rhs.password)) != 0) { return false; - if(lhs.channel != rhs.channel) + } + if(lhs.channel != rhs.channel) { return false; - if(lhs.ssid_hidden != rhs.ssid_hidden) + } + if(lhs.ssid_hidden != rhs.ssid_hidden) { return false; + } return true; } @@ -89,8 +93,8 @@ bool ESP8266WiFiAPClass::softAP(const char* ssid, const char* passphrase, int ch return false; } - if(passphrase && strlen(passphrase) > 63) { - // fail passphrase to long! + if(passphrase && (strlen(passphrase) > 63 || strlen(passphrase) < 8)) { + // fail passphrase to long or short! return false; } diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.cpp b/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.cpp index 01e137190..3b13549f7 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.cpp +++ b/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.cpp @@ -71,7 +71,7 @@ void ESP8266WiFiGenericClass::onEvent(WiFiEventCb cbEvent) { */ void ESP8266WiFiGenericClass::_eventCallback(void* arg) { System_Event_t* event = reinterpret_cast(arg); - DEBUGV("wifi evt: %d\r\n", event->event); + DEBUGV("wifi evt: %d\n", event->event); if(event->event == EVENT_STAMODE_DISCONNECTED) { WiFiClient::stopAll(); @@ -170,7 +170,7 @@ WiFiMode_t ESP8266WiFiGenericClass::getMode() { */ bool ESP8266WiFiGenericClass::enableSTA(bool enable) { - WiFiMode_t currentMode = (WiFiMode_t) wifi_get_opmode(); + WiFiMode_t currentMode = getMode(); bool isEnabled = ((currentMode & WIFI_STA) != 0); if(isEnabled != enable) { @@ -191,7 +191,7 @@ bool ESP8266WiFiGenericClass::enableSTA(bool enable) { */ bool ESP8266WiFiGenericClass::enableAP(bool enable){ - WiFiMode_t currentMode = (WiFiMode_t) wifi_get_opmode(); + WiFiMode_t currentMode = getMode(); bool isEnabled = ((currentMode & WIFI_AP) != 0); if(isEnabled != enable) { diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFiSTA.cpp b/libraries/ESP8266WiFi/src/ESP8266WiFiSTA.cpp index 1419e34a8..822ba21f8 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFiSTA.cpp +++ b/libraries/ESP8266WiFi/src/ESP8266WiFiSTA.cpp @@ -57,21 +57,22 @@ static bool sta_config_equal(const station_config& lhs, const station_config& rh * @return equal */ static bool sta_config_equal(const station_config& lhs, const station_config& rhs) { - if(strcmp(reinterpret_cast(lhs.ssid), reinterpret_cast(rhs.ssid)) != 0) + if(strcmp(reinterpret_cast(lhs.ssid), reinterpret_cast(rhs.ssid)) != 0) { return false; + } - if(strcmp(reinterpret_cast(lhs.password), reinterpret_cast(rhs.password)) != 0) + if(strcmp(reinterpret_cast(lhs.password), reinterpret_cast(rhs.password)) != 0) { return false; + } + + if(lhs.bssid_set != rhs.bssid_set) { + return false; + } if(lhs.bssid_set) { - if(!rhs.bssid_set) - return false; - - if(memcmp(lhs.bssid, rhs.bssid, 6) != 0) - return false; - } else { - if(rhs.bssid_set) + if(memcmp(lhs.bssid, rhs.bssid, 6) != 0) { return false; + } } return true; @@ -178,39 +179,15 @@ wl_status_t ESP8266WiFiSTAClass::begin() { } -/** - * Change IP configuration settings disabling the dhcp client - * @param local_ip Static ip configuration - * @param gateway Static gateway configuration - * @param subnet Static Subnet mask - */ -bool ESP8266WiFiSTAClass::config(IPAddress local_ip, IPAddress gateway, IPAddress subnet) { - - if(!WiFi.enableSTA(true)) { - return false; - } - - struct ip_info info; - info.ip.addr = static_cast(local_ip); - info.gw.addr = static_cast(gateway); - info.netmask.addr = static_cast(subnet); - - wifi_station_dhcpc_stop(); - if(wifi_set_ip_info(STATION_IF, &info)) { - _useStaticIp = true; - return true; - } - return false; -} - /** * Change IP configuration settings disabling the dhcp client * @param local_ip Static ip configuration * @param gateway Static gateway configuration * @param subnet Static Subnet mask - * @param dns Static DNS server + * @param dns1 Static DNS server 1 + * @param dns2 Static DNS server 2 */ -bool ESP8266WiFiSTAClass::config(IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dns) { +bool ESP8266WiFiSTAClass::config(IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dns1, IPAddress dns2) { if(!WiFi.enableSTA(true)) { return false; @@ -227,11 +204,19 @@ bool ESP8266WiFiSTAClass::config(IPAddress local_ip, IPAddress gateway, IPAddres } else { return false; } - - // Set DNS-Server ip_addr_t d; - d.addr = static_cast(dns); - dns_setserver(0, &d); + + if(dns1 != (uint32_t)0x00000000) { + // Set DNS1-Server + d.addr = static_cast(dns1); + dns_setserver(0, &d); + } + + if(dns2 != (uint32_t)0x00000000) { + // Set DNS2-Server + d.addr = static_cast(dns2); + dns_setserver(1, &d); + } return true; } @@ -617,7 +602,7 @@ void ESP8266WiFiSTAClass::_smartConfigCallback(uint32_t st, void* result) { wifi_station_disconnect(); wifi_station_connect(); - WiFi._smartConfigDone = true; + _smartConfigDone = true; } else if(status == SC_STATUS_LINK_OVER) { WiFi.stopSmartConfig(); } diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFiSTA.h b/libraries/ESP8266WiFi/src/ESP8266WiFiSTA.h index cfc15af3a..d854db5c4 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFiSTA.h +++ b/libraries/ESP8266WiFi/src/ESP8266WiFiSTA.h @@ -39,8 +39,7 @@ class ESP8266WiFiSTAClass { wl_status_t begin(char* ssid, char *passphrase = NULL, int32_t channel = 0, const uint8_t* bssid = NULL); wl_status_t begin(); - bool config(IPAddress local_ip, IPAddress gateway, IPAddress subnet); - bool config(IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dns); + bool config(IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dns1 = (uint32_t)0x00000000, IPAddress dns2 = (uint32_t)0x00000000); bool reconnect(); bool disconnect(bool wifioff = false); @@ -92,6 +91,7 @@ class ESP8266WiFiSTAClass { static bool _smartConfigStarted; static bool _smartConfigDone; + static void _smartConfigCallback(uint32_t status, void* result); }; diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFiScan.cpp b/libraries/ESP8266WiFi/src/ESP8266WiFiScan.cpp index 223f4ae26..bf9edd261 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFiScan.cpp +++ b/libraries/ESP8266WiFi/src/ESP8266WiFiScan.cpp @@ -314,7 +314,6 @@ void ESP8266WiFiScanClass::_scanDone(void* result, int status) { * @return bss_info * */ void * ESP8266WiFiScanClass::_getScanInfoByIndex(int i) { - //TODO why its void * and not bss_info * ? if(!ESP8266WiFiScanClass::_scanResult || (size_t) i > ESP8266WiFiScanClass::_scanCount) { return 0; }