Made proper response structure for network scan
This commit is contained in:
@@ -39,19 +39,20 @@
|
||||
|
||||
async function pollingResults() {
|
||||
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)
|
||||
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(() => {
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user