Made proper response structure for network scan

This commit is contained in:
Niklas Jensen
2026-01-30 19:19:15 +01:00
committed by nikguin04
parent bce9041f1f
commit bdee1d0e04
3 changed files with 20 additions and 11 deletions
+8 -7
View File
@@ -39,19 +39,20 @@
async function pollingResults() { async function pollingResults() {
const result = await api.get<ProtoResponse>('/api/wifi/networks') const result = await api.get<ProtoResponse>('/api/wifi/networks')
if (result.isErr()) { if (result.isErr() || !result.inner) {
console.error(`Error occurred while fetching: `, result.inner) console.error(`Error occurred while fetching: `, result.inner)
return false return false
} }
if (result.inner.wifiNetworkList) { // Check if scan is complete (status 200 means we have results)
listOfNetworks = result.inner.wifiNetworkList.networks if (result.inner.statusCode === 200 && result.inner.wifiNetworkList) {
} listOfNetworks = result.inner.wifiNetworkList.networks ?? []
scanActive = false scanActive = false
if (listOfNetworks.length) {
clearInterval(pollingId) clearInterval(pollingId)
pollingId = 0 pollingId = 0
return listOfNetworks.length
} }
return listOfNetworks.length // Still scanning (status 202)
return 0
} }
onMount(() => { onMount(() => {
+1
View File
@@ -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) { 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" httpd_resp_set_status(req, status == 200 ? "200 OK"
: status == 202 ? "202 Accepted"
: status == 400 ? "400 Bad Request" : status == 400 ? "400 Bad Request"
: status == 404 ? "404 Not Found" : status == 404 ? "404 Not Found"
: status == 500 ? "500 Internal Server Error" : status == 500 ? "500 Internal Server Error"
+11 -4
View File
@@ -47,15 +47,21 @@ esp_err_t WiFiService::handleScan(httpd_req_t *request) {
WiFi.scanDelete(); WiFi.scanDelete();
WiFi.scanNetworks(true); WiFi.scanNetworks(true);
} }
httpd_resp_set_status(request, "202 Accepted"); // Return 202 with empty_message payload (no pointer fields to encode)
return httpd_resp_send(request, nullptr, 0); 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) { esp_err_t WiFiService::getNetworks(httpd_req_t *request) {
int numNetworks = WiFi.scanComplete(); int numNetworks = WiFi.scanComplete();
if (numNetworks == -1) { if (numNetworks == -1) {
httpd_resp_set_status(request, "202 Accepted"); // Scan in progress - return 202 with empty_message payload
return httpd_resp_send(request, nullptr, 0); 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) { } else if (numNetworks < -1) {
return handleScan(request); return handleScan(request);
} }
@@ -75,6 +81,7 @@ esp_err_t WiFiService::getNetworks(httpd_req_t *request) {
} }
api_Response response = api_Response_init_zero; api_Response response = api_Response_init_zero;
response.status_code = 200;
response.which_payload = api_Response_wifi_network_list_tag; response.which_payload = api_Response_wifi_network_list_tag;
response.payload.wifi_network_list.networks = networks; response.payload.wifi_network_list.networks = networks;
response.payload.wifi_network_list.networks_count = count; response.payload.wifi_network_list.networks_count = count;