From bdee1d0e04d23f424d981f0f59ec93df3d438e77 Mon Sep 17 00:00:00 2001 From: Niklas Jensen Date: Fri, 30 Jan 2026 19:19:15 +0100 Subject: [PATCH] Made proper response structure for network scan --- app/src/routes/wifi/sta/Scan.svelte | 15 ++++++++------- esp32/src/communication/webserver.cpp | 1 + esp32/src/wifi_service.cpp | 15 +++++++++++---- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/app/src/routes/wifi/sta/Scan.svelte b/app/src/routes/wifi/sta/Scan.svelte index 273e9f7..c7148bd 100644 --- a/app/src/routes/wifi/sta/Scan.svelte +++ b/app/src/routes/wifi/sta/Scan.svelte @@ -39,19 +39,20 @@ async function pollingResults() { const result = await api.get('/api/wifi/networks') - if (result.isErr()) { + if (result.isErr() || !result.inner) { console.error(`Error occurred while fetching: `, result.inner) return false } - if (result.inner.wifiNetworkList) { - listOfNetworks = result.inner.wifiNetworkList.networks - } - scanActive = false - if (listOfNetworks.length) { + // Check if scan is complete (status 200 means we have results) + if (result.inner.statusCode === 200 && result.inner.wifiNetworkList) { + listOfNetworks = result.inner.wifiNetworkList.networks ?? [] + scanActive = false clearInterval(pollingId) pollingId = 0 + return listOfNetworks.length } - return listOfNetworks.length + // Still scanning (status 202) + return 0 } onMount(() => { diff --git a/esp32/src/communication/webserver.cpp b/esp32/src/communication/webserver.cpp index e8a697c..270983b 100644 --- a/esp32/src/communication/webserver.cpp +++ b/esp32/src/communication/webserver.cpp @@ -364,6 +364,7 @@ esp_err_t WebServer::sendOkProto(httpd_req_t* req) { return sendProto(req, 200, esp_err_t WebServer::sendProto(httpd_req_t* req, int status, const uint8_t* data, size_t len) { httpd_resp_set_status(req, status == 200 ? "200 OK" + : status == 202 ? "202 Accepted" : status == 400 ? "400 Bad Request" : status == 404 ? "404 Not Found" : status == 500 ? "500 Internal Server Error" diff --git a/esp32/src/wifi_service.cpp b/esp32/src/wifi_service.cpp index 9c40d49..f0fd4d6 100644 --- a/esp32/src/wifi_service.cpp +++ b/esp32/src/wifi_service.cpp @@ -47,15 +47,21 @@ esp_err_t WiFiService::handleScan(httpd_req_t *request) { WiFi.scanDelete(); WiFi.scanNetworks(true); } - httpd_resp_set_status(request, "202 Accepted"); - return httpd_resp_send(request, nullptr, 0); + // Return 202 with empty_message payload (no pointer fields to encode) + api_Response response = api_Response_init_zero; + response.status_code = 202; + response.which_payload = api_Response_empty_message_tag; + return WebServer::sendProto(request, 202, response, api_Response_fields); } esp_err_t WiFiService::getNetworks(httpd_req_t *request) { int numNetworks = WiFi.scanComplete(); if (numNetworks == -1) { - httpd_resp_set_status(request, "202 Accepted"); - return httpd_resp_send(request, nullptr, 0); + // Scan in progress - return 202 with empty_message payload + api_Response response = api_Response_init_zero; + response.status_code = 202; + response.which_payload = api_Response_empty_message_tag; + return WebServer::sendProto(request, 202, response, api_Response_fields); } else if (numNetworks < -1) { return handleScan(request); } @@ -75,6 +81,7 @@ esp_err_t WiFiService::getNetworks(httpd_req_t *request) { } api_Response response = api_Response_init_zero; + response.status_code = 200; response.which_payload = api_Response_wifi_network_list_tag; response.payload.wifi_network_list.networks = networks; response.payload.wifi_network_list.networks_count = count;