Skip to content

Commit

Permalink
Fix for SSDP crashing MCU in SoftAP mode
Browse files Browse the repository at this point in the history
  • Loading branch information
terjeio committed Jul 11, 2023
1 parent a20756e commit b7e14a4
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 29 deletions.
4 changes: 2 additions & 2 deletions main/dns_server.c
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,10 @@ static int socket_fd;
static void dns_server(void *pvParameters);

//void dns_server_start ()
void dns_server_start (esp_netif_t *netif)
bool dns_server_start (esp_netif_t *netif)
{
esp_netif_get_ip_info(netif, &ip);
xTaskCreate(dns_server, "dns_server", 3072, NULL, WIFI_MANAGER_TASK_PRIORITY-1, &task_dns_server);
return xTaskCreate(dns_server, "dns_server", 3072, NULL, WIFI_MANAGER_TASK_PRIORITY-1, &task_dns_server) == pdPASS;
}

void dns_server_stop ()
Expand Down
2 changes: 1 addition & 1 deletion main/dns_server.h
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ typedef struct __attribute__((__packed__)) dns_answer_t{
}dns_answer_t;

//void dns_server(void *pvParameters);
void dns_server_start(esp_netif_t *netif);
bool dns_server_start(esp_netif_t *netif);
void dns_server_stop();

#ifdef __cplusplus
Expand Down
52 changes: 26 additions & 26 deletions main/wifi.c
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,7 @@ static void lwIPHostTimerHandler (void *arg)

#endif

static void start_services (void)
static void start_services (bool start_ssdp)
{
#if TELNET_ENABLE
if(network.services.telnet && !services.telnet)
Expand All @@ -249,16 +249,15 @@ static void start_services (void)
#if HTTP_ENABLE
if(network.services.http && !services.http) {
services.http = httpd_init(network.http_port);
// services.http = httpdaemon_start(&network);
#if WEBDAV_ENABLE
if(network.services.webdav && !services.webdav)
services.webdav = webdav_init();
#endif
}
#if SSDP_ENABLE
if(network.services.ssdp && !services.ssdp)
services.ssdp = ssdp_init(network.http_port);
if(start_ssdp && services.http && !services.ssdp)
services.ssdp = ssdp_init(network.http_port);
#endif
}
#endif

#if MDNS_ENABLE
Expand Down Expand Up @@ -405,7 +404,7 @@ static void ip_event_handler (void *arg, esp_event_base_t event_base, int32_t ev
ap_list.ap_selected = wifi_sta_config.sta.ssid;
memcpy(&ap_list.ip_addr, &((ip_event_got_ip_t *)event_data)->ip_info.ip, sizeof(ip4_addr_t));
strcpy(ap_list.ap_status, "Connected");
start_services();
start_services(network.services.ssdp);
if(services.dns) {
services.dns = Off;
dns_server_stop();
Expand All @@ -430,10 +429,9 @@ static void wifi_event_handler (void *arg, esp_event_base_t event_base, int32_t

case WIFI_EVENT_AP_START:
protocol_enqueue_rt_command(msg_ap_ready);
start_services();
if(xEventGroupGetBits(wifi_event_group) & APSTA_BIT) {
dns_server_start(sta_netif);
services.dns = On;
start_services(false);
services.dns = dns_server_start(sta_netif);
// protocol_enqueue_rt_command(wifi_ap_scan);
}
break;
Expand All @@ -445,19 +443,19 @@ static void wifi_event_handler (void *arg, esp_event_base_t event_base, int32_t
*/
case WIFI_EVENT_AP_STACONNECTED:
protocol_enqueue_rt_command(msg_ap_connected);
if((xEventGroupGetBits(wifi_event_group) & APSTA_BIT) && !(xEventGroupGetBits(wifi_event_group) & CONNECTED_BIT)) {
/* // screws up dns?
if(!(xEventGroupGetBits(wifi_event_group) & SCANNING_BIT)) {
// ap_list.ap_selected = NULL;
// wifi_ap_scan();
}
*/
if(!services.dns) {
dns_server_start(sta_netif);
services.dns = On;
if(xEventGroupGetBits(wifi_event_group) & APSTA_BIT) {
if(!(xEventGroupGetBits(wifi_event_group) & CONNECTED_BIT)) {
/* // screws up dns?
if(!(xEventGroupGetBits(wifi_event_group) & SCANNING_BIT)) {
// ap_list.ap_selected = NULL;
// wifi_ap_scan();
}
*/
if(!services.dns)
services.dns = dns_server_start(sta_netif);
}

}
} else
start_services(network.services.ssdp);
break;

case WIFI_EVENT_AP_STADISCONNECTED:
Expand All @@ -467,7 +465,11 @@ static void wifi_event_handler (void *arg, esp_event_base_t event_base, int32_t
#if WEBSOCKET_ENABLE
websocketd_close_connections();
#endif
wifi_ap_scan();
if(xEventGroupGetBits(wifi_event_group) & APSTA_BIT)
wifi_ap_scan();
else if(!(xEventGroupGetBits(wifi_event_group) & CONNECTED_BIT))
ssdp_stop();

protocol_enqueue_rt_command(msg_ap_disconnected);
break;

Expand All @@ -488,10 +490,8 @@ static void wifi_event_handler (void *arg, esp_event_base_t event_base, int32_t
memset(&wifi_sta_config, 0, sizeof(wifi_config_t));
esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_sta_config);
if((xEventGroupGetBits(wifi_event_group) & APSTA_BIT) && !(xEventGroupGetBits(wifi_event_group) & CONNECTED_BIT)) {
if(!services.dns) {
dns_server_start(sta_netif);
services.dns = On;
}
if(!services.dns)
services.dns = dns_server_start(sta_netif);
// ap_list.ap_selected = NULL;
// wifi_ap_scan();
}
Expand Down

0 comments on commit b7e14a4

Please sign in to comment.