Updated proto sending over api to be dynamically allocated

This commit is contained in:
Niklas Jensen
2026-01-30 18:49:06 +01:00
committed by nikguin04
parent 0af2f5ebec
commit 2ce29ae0cc
4 changed files with 35 additions and 19 deletions
+2 -2
View File
@@ -92,7 +92,7 @@ esp_err_t MDNSService::getStatus(httpd_req_t *request) {
status.global_txt_records[i] = state().global_txt_records[i];
}
return WebServer::sendProto(request, 200, api_Response_fields, &response, api_Response_size);
return WebServer::sendProto(request, 200, response, api_Response_fields);
}
esp_err_t MDNSService::queryServices(httpd_req_t *request, api_Request *protoReq) {
@@ -120,5 +120,5 @@ esp_err_t MDNSService::queryServices(httpd_req_t *request, api_Request *protoReq
queryResp.services[i].port = MDNS.port(i);
}
return WebServer::sendProto(request, 200, api_Response_fields, &response, api_Response_size);
return WebServer::sendProto(request, 200, response, api_Response_fields);
}
+16 -13
View File
@@ -60,23 +60,26 @@ esp_err_t WiFiService::getNetworks(httpd_req_t *request) {
return handleScan(request);
}
api_Response response = api_Response_init_zero;
response.which_payload = api_Response_wifi_network_list_tag;
api_WifiNetworkList &networkList = response.payload.wifi_network_list;
// Limit to max_count from options file (20)
// Limit to 20 networks max
size_t count = (numNetworks > 20) ? 20 : static_cast<size_t>(numNetworks);
networkList.networks_count = count;
// Allocate networks array on stack (pointer type in proto)
api_WifiNetworkScan networks[20] = {};
for (size_t i = 0; i < count; i++) {
networkList.networks[i].rssi = WiFi.RSSI(i);
strncpy(networkList.networks[i].ssid, WiFi.SSID(i).c_str(), sizeof(networkList.networks[i].ssid) - 1);
strncpy(networkList.networks[i].bssid, WiFi.BSSIDstr(i).c_str(), sizeof(networkList.networks[i].bssid) - 1);
networkList.networks[i].channel = WiFi.channel(i);
networkList.networks[i].encryption_type = static_cast<uint32_t>(WiFi.encryptionType(i));
networks[i].rssi = WiFi.RSSI(i);
strncpy(networks[i].ssid, WiFi.SSID(i).c_str(), sizeof(networks[i].ssid) - 1);
strncpy(networks[i].bssid, WiFi.BSSIDstr(i).c_str(), sizeof(networks[i].bssid) - 1);
networks[i].channel = WiFi.channel(i);
networks[i].encryption_type = static_cast<uint32_t>(WiFi.encryptionType(i));
}
return WebServer::sendProto(request, 200, api_Response_fields, &response, api_Response_size);
api_Response response = api_Response_init_zero;
response.which_payload = api_Response_wifi_network_list_tag;
response.payload.wifi_network_list.networks = networks;
response.payload.wifi_network_list.networks_count = count;
return WebServer::sendProto(request, 200, response, api_Response_fields);
}
void WiFiService::setupMDNS(const char *hostname) {
@@ -115,7 +118,7 @@ esp_err_t WiFiService::getNetworkStatus(httpd_req_t *request) {
}
}
return WebServer::sendProto(request, 200, api_Response_fields, &response, api_Response_size);
return WebServer::sendProto(request, 200, response, api_Response_fields);
}
void WiFiService::manageSTA() {