mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
Merge branch 'bugfix/dpp_api_mode_check' into 'master'
Ensure dpp follows init->bootstrap->listen path Closes WIFIBUG-165 and WIFIBUG-157 See merge request espressif/esp-idf!26302
This commit is contained in:
commit
b73e46223b
@ -22,7 +22,7 @@ static void *s_dpp_api_lock = NULL;
|
||||
|
||||
static bool s_dpp_stop_listening;
|
||||
static int s_dpp_auth_retries;
|
||||
struct esp_dpp_context_t s_dpp_ctx;
|
||||
static struct esp_dpp_context_t s_dpp_ctx;
|
||||
static wifi_action_rx_cb_t s_action_rx_cb = esp_supp_rx_action;
|
||||
|
||||
#define DPP_API_LOCK() os_mutex_lock(s_dpp_api_lock)
|
||||
@ -518,6 +518,10 @@ esp_err_t
|
||||
esp_supp_dpp_bootstrap_gen(const char *chan_list, enum dpp_bootstrap_type type,
|
||||
const char *key, const char *uri_info)
|
||||
{
|
||||
if (!s_dpp_ctx.dpp_global) {
|
||||
wpa_printf(MSG_ERROR, "DPP: failed to bootstrap as dpp not initialized.");
|
||||
return ESP_FAIL;
|
||||
}
|
||||
struct dpp_bootstrap_params_t *params = &s_dpp_ctx.bootstrap_params;
|
||||
char *uri_chan_list = esp_dpp_parse_chan_list(chan_list);
|
||||
char *command = os_zalloc(1200);
|
||||
@ -581,6 +585,11 @@ fail:
|
||||
|
||||
esp_err_t esp_supp_dpp_start_listen(void)
|
||||
{
|
||||
if (!s_dpp_ctx.dpp_global || s_dpp_ctx.id < 1) {
|
||||
wpa_printf(MSG_ERROR, "DPP: failed to start listen as dpp not initialized or bootstrapped.");
|
||||
return ESP_FAIL;
|
||||
}
|
||||
|
||||
if (esp_wifi_get_user_init_flag_internal() == 0) {
|
||||
wpa_printf(MSG_ERROR, "DPP: ROC not possible before wifi is started");
|
||||
return ESP_ERR_INVALID_STATE;
|
||||
@ -598,6 +607,15 @@ void esp_supp_dpp_stop_listen(void)
|
||||
|
||||
esp_err_t esp_supp_dpp_init(esp_supp_dpp_event_cb_t cb)
|
||||
{
|
||||
wifi_mode_t mode = 0;
|
||||
if (esp_wifi_get_mode(&mode) || ((mode != WIFI_MODE_STA) && (mode != WIFI_MODE_APSTA))) {
|
||||
wpa_printf(MSG_ERROR, "DPP: failed to init as not in station mode.");
|
||||
return ESP_FAIL;
|
||||
}
|
||||
if (s_dpp_ctx.dpp_global) {
|
||||
wpa_printf(MSG_ERROR, "DPP: failed to init as init already done.");
|
||||
return ESP_FAIL;
|
||||
}
|
||||
struct dpp_global_config cfg = {0};
|
||||
int ret;
|
||||
|
||||
@ -636,7 +654,6 @@ esp_err_t esp_supp_dpp_init(esp_supp_dpp_event_cb_t cb)
|
||||
void esp_supp_dpp_deinit(void)
|
||||
{
|
||||
struct dpp_bootstrap_params_t *params = &s_dpp_ctx.bootstrap_params;
|
||||
|
||||
if (params->info) {
|
||||
os_free(params->info);
|
||||
params->info = NULL;
|
||||
@ -647,7 +664,10 @@ void esp_supp_dpp_deinit(void)
|
||||
esp_event_handler_unregister(WIFI_EVENT, WIFI_EVENT_ROC_DONE,
|
||||
&offchan_event_handler);
|
||||
s_dpp_auth_retries = 0;
|
||||
dpp_global_deinit(s_dpp_ctx.dpp_global);
|
||||
esp_dpp_post_evt(SIG_DPP_DEL_TASK, 0);
|
||||
if (s_dpp_ctx.dpp_global) {
|
||||
dpp_global_deinit(s_dpp_ctx.dpp_global);
|
||||
s_dpp_ctx.dpp_global = NULL;
|
||||
esp_dpp_post_evt(SIG_DPP_DEL_TASK, 0);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user