forked from xiaozhi/xiaozhi-esp32
fix wifi name with space and Chinese
This commit is contained in:
@@ -159,9 +159,12 @@ void WifiConfigurationAp::StartWebServer()
|
|||||||
buf[ret] = '\0';
|
buf[ret] = '\0';
|
||||||
ESP_LOGI(TAG, "Received form data: %s", buf);
|
ESP_LOGI(TAG, "Received form data: %s", buf);
|
||||||
|
|
||||||
|
std::string decoded = UrlDecode(buf);
|
||||||
|
ESP_LOGI(TAG, "Decoded form data: %s", decoded.c_str());
|
||||||
|
|
||||||
// Parse the form data
|
// Parse the form data
|
||||||
char ssid[32], password[64];
|
char ssid[32], password[64];
|
||||||
if (sscanf(buf, "ssid=%32[^&]&password=%64s", ssid, password) != 2) {
|
if (sscanf(decoded.c_str(), "ssid=%32[^&]&password=%64s", ssid, password) != 2) {
|
||||||
httpd_resp_send_err(req, HTTPD_400_BAD_REQUEST, "Invalid form data");
|
httpd_resp_send_err(req, HTTPD_400_BAD_REQUEST, "Invalid form data");
|
||||||
return ESP_FAIL;
|
return ESP_FAIL;
|
||||||
}
|
}
|
||||||
@@ -194,6 +197,28 @@ void WifiConfigurationAp::StartWebServer()
|
|||||||
ESP_LOGI(TAG, "Web server started");
|
ESP_LOGI(TAG, "Web server started");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string WifiConfigurationAp::UrlDecode(const std::string &url)
|
||||||
|
{
|
||||||
|
std::string decoded;
|
||||||
|
for (size_t i = 0; i < url.length(); ++i) {
|
||||||
|
if (url[i] == '%') {
|
||||||
|
char hex[3];
|
||||||
|
hex[0] = url[i + 1];
|
||||||
|
hex[1] = url[i + 2];
|
||||||
|
hex[2] = '\0';
|
||||||
|
char ch = static_cast<char>(std::stoi(hex, nullptr, 16));
|
||||||
|
decoded += ch;
|
||||||
|
i += 2;
|
||||||
|
} else if (url[i] == '+') {
|
||||||
|
decoded += ' ';
|
||||||
|
} else {
|
||||||
|
decoded += url[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return decoded;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void WifiConfigurationAp::Start()
|
void WifiConfigurationAp::Start()
|
||||||
{
|
{
|
||||||
builtin_led_.SetBlue();
|
builtin_led_.SetBlue();
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ private:
|
|||||||
void StartWebServer();
|
void StartWebServer();
|
||||||
bool ConnectToWifi(const std::string &ssid, const std::string &password);
|
bool ConnectToWifi(const std::string &ssid, const std::string &password);
|
||||||
void Save(const std::string &ssid, const std::string &password);
|
void Save(const std::string &ssid, const std::string &password);
|
||||||
|
static std::string UrlDecode(const std::string &url);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // _WIFI_CONFIGURATION_AP_H_
|
#endif // _WIFI_CONFIGURATION_AP_H_
|
||||||
|
|||||||
Reference in New Issue
Block a user