From 05b50d0a89fa073a7955f294658e83c6d3315521 Mon Sep 17 00:00:00 2001 From: Rasmus Date: Sat, 12 Sep 2026 17:38:16 +0200 Subject: [PATCH] fix(dns): register 8.8.8.8 fallback DNS, wake Wi-Fi during Gitea check, and add retries --- main/ota_manager.c | 67 +++++++++++++++++++++++++++------------------ main/wifi_manager.c | 13 +++++++-- 2 files changed, 51 insertions(+), 29 deletions(-) diff --git a/main/ota_manager.c b/main/ota_manager.c index 6da17f0..73de86b 100644 --- a/main/ota_manager.c +++ b/main/ota_manager.c @@ -273,37 +273,52 @@ static void ota_check_task(void *arg) vTaskDelete(NULL); return; } - rx.buf[0] = '\0'; + wifi_manager_set_power_save(false); - esp_http_client_config_t cfg = { - .url = GITEA_RELEASE_API_URL, - .transport_type = HTTP_TRANSPORT_OVER_SSL, - .timeout_ms = 15000, - .event_handler = http_rx_event_handler, - .user_data = &rx, - .buffer_size = 1024, - .cert_pem = s_isrg_root_x1_pem, - .cert_len = sizeof(s_isrg_root_x1_pem), - }; + esp_err_t ret = ESP_FAIL; + int status_code = 0; - esp_http_client_handle_t client = esp_http_client_init(&cfg); - if (!client) { - wifi_manager_release_net_lock(); - free(rx.buf); - set_state(OTA_STATUS_FAILED, "HTTP init failed"); - s_ota_task_handle = NULL; - vTaskDelete(NULL); - return; + for (int attempt = 1; attempt <= 3; attempt++) { + rx.len = 0; + rx.buf[0] = '\0'; + + esp_http_client_config_t cfg = { + .url = GITEA_RELEASE_API_URL, + .transport_type = HTTP_TRANSPORT_OVER_SSL, + .timeout_ms = 15000, + .event_handler = http_rx_event_handler, + .user_data = &rx, + .buffer_size = 1024, + .cert_pem = s_isrg_root_x1_pem, + .cert_len = sizeof(s_isrg_root_x1_pem), + }; + + esp_http_client_handle_t client = esp_http_client_init(&cfg); + if (!client) { + ret = ESP_ERR_NO_MEM; + break; + } + + esp_http_client_set_method(client, HTTP_METHOD_GET); + esp_http_client_set_header(client, "User-Agent", "MTGCompanion/1.0"); + esp_http_client_set_header(client, "Accept", "application/json"); + + ret = esp_http_client_perform(client); + status_code = esp_http_client_get_status_code(client); + esp_http_client_cleanup(client); + + if (ret == ESP_OK && status_code == 200) { + break; + } + if (attempt < 3) { + ESP_LOGW(TAG, "Gitea check attempt %d failed: %s (status %d), retrying in 1s...", + attempt, esp_err_to_name(ret), status_code); + vTaskDelay(pdMS_TO_TICKS(1000)); + } } - esp_http_client_set_method(client, HTTP_METHOD_GET); - esp_http_client_set_header(client, "User-Agent", "MTGCompanion/1.0"); - esp_http_client_set_header(client, "Accept", "application/json"); - - esp_err_t ret = esp_http_client_perform(client); - int status_code = esp_http_client_get_status_code(client); - esp_http_client_cleanup(client); wifi_manager_release_net_lock(); + wifi_manager_set_power_save(true); if (ret != ESP_OK || status_code != 200) { diff --git a/main/wifi_manager.c b/main/wifi_manager.c index 1a173a9..1d2cc70 100644 --- a/main/wifi_manager.c +++ b/main/wifi_manager.c @@ -33,6 +33,7 @@ static char s_active_ssid[WIFI_SSID_MAX_LEN + 1] = {0}; static SemaphoreHandle_t s_wifi_mux = NULL; static SemaphoreHandle_t s_net_lock = NULL; static bool s_manual_disconnect = false; +static esp_netif_t *s_sta_netif = NULL; /* ------------------------------------------------------------------ */ @@ -198,6 +199,12 @@ static void wifi_event_handler(void *arg, esp_event_base_t base, int32_t id, voi if (s_wifi_group) { xEventGroupSetBits(s_wifi_group, WIFI_CONNECTED_BIT); } + if (s_sta_netif != NULL) { + esp_netif_dns_info_t dns_fallback = {0}; + dns_fallback.ip.type = ESP_IPADDR_TYPE_V4; + dns_fallback.ip.u_addr.ip4.addr = ESP_IP4TOADDR(8, 8, 8, 8); + esp_netif_set_dns_info(s_sta_netif, ESP_NETIF_DNS_FALLBACK, &dns_fallback); + } /* Enable modem power saving when idle on station network */ esp_wifi_set_ps(WIFI_PS_MIN_MODEM); ESP_LOGI(TAG, "Wi-Fi modem sleep enabled (WIFI_PS_MIN_MODEM: ~30-40 mA saved)"); @@ -372,9 +379,9 @@ esp_err_t wifi_manager_init(void) ESP_ERROR_CHECK(esp_netif_init()); ESP_ERROR_CHECK(esp_event_loop_create_default()); - esp_netif_t *sta_netif = esp_netif_create_default_wifi_sta(); - if (sta_netif != NULL) { - esp_netif_set_hostname(sta_netif, "mtg-companion"); + s_sta_netif = esp_netif_create_default_wifi_sta(); + if (s_sta_netif != NULL) { + esp_netif_set_hostname(s_sta_netif, "mtg-companion"); } esp_netif_t *ap_netif = esp_netif_create_default_wifi_ap();