Stop cgiWifi from sending bad JSON when it sees >33-ish access points.
This commit is contained in:
+26
-13
@@ -107,9 +107,31 @@ static void ICACHE_FLASH_ATTR wifiStartScan() {
|
|||||||
//scan for access points and if available will return the result of an earlier scan.
|
//scan for access points and if available will return the result of an earlier scan.
|
||||||
//The result is embedded in a bit of JSON parsed by the javascript in wifi.tpl.
|
//The result is embedded in a bit of JSON parsed by the javascript in wifi.tpl.
|
||||||
int ICACHE_FLASH_ATTR cgiWiFiScan(HttpdConnData *connData) {
|
int ICACHE_FLASH_ATTR cgiWiFiScan(HttpdConnData *connData) {
|
||||||
|
int pos=(int)connData->cgiData;
|
||||||
int len;
|
int len;
|
||||||
int i;
|
|
||||||
char buff[1024];
|
char buff[1024];
|
||||||
|
|
||||||
|
if (!cgiWifiAps.scanInProgress && pos!=0) {
|
||||||
|
//Fill in json code for an access point
|
||||||
|
if (pos-1<cgiWifiAps.noAps) {
|
||||||
|
len=os_sprintf(buff, "{\"essid\": \"%s\", \"rssi\": \"%d\", \"enc\": \"%d\"}%s\n",
|
||||||
|
cgiWifiAps.apData[pos-1]->ssid, cgiWifiAps.apData[pos-1]->rssi,
|
||||||
|
cgiWifiAps.apData[pos-1]->enc, (pos-1==cgiWifiAps.noAps-1)?"":",");
|
||||||
|
httpdSend(connData, buff, len);
|
||||||
|
}
|
||||||
|
pos++;
|
||||||
|
if ((pos-1)>=cgiWifiAps.noAps) {
|
||||||
|
len=os_sprintf(buff, "]\n}\n}\n");
|
||||||
|
httpdSend(connData, buff, len);
|
||||||
|
//Also start a new scan.
|
||||||
|
wifiStartScan();
|
||||||
|
return HTTPD_CGI_DONE;
|
||||||
|
} else {
|
||||||
|
connData->cgiData=(void*)pos;
|
||||||
|
return HTTPD_CGI_MORE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
httpdStartResponse(connData, 200);
|
httpdStartResponse(connData, 200);
|
||||||
httpdHeader(connData, "Content-Type", "text/json");
|
httpdHeader(connData, "Content-Type", "text/json");
|
||||||
httpdEndHeaders(connData);
|
httpdEndHeaders(connData);
|
||||||
@@ -118,24 +140,15 @@ int ICACHE_FLASH_ATTR cgiWiFiScan(HttpdConnData *connData) {
|
|||||||
//We're still scanning. Tell Javascript code that.
|
//We're still scanning. Tell Javascript code that.
|
||||||
len=os_sprintf(buff, "{\n \"result\": { \n\"inProgress\": \"1\"\n }\n}\n");
|
len=os_sprintf(buff, "{\n \"result\": { \n\"inProgress\": \"1\"\n }\n}\n");
|
||||||
httpdSend(connData, buff, len);
|
httpdSend(connData, buff, len);
|
||||||
|
return HTTPD_CGI_DONE;
|
||||||
} else {
|
} else {
|
||||||
//We have a scan result. Pass it on.
|
//We have a scan result. Pass it on.
|
||||||
len=os_sprintf(buff, "{\n \"result\": { \n\"inProgress\": \"0\", \n\"APs\": [\n");
|
len=os_sprintf(buff, "{\n \"result\": { \n\"inProgress\": \"0\", \n\"APs\": [\n");
|
||||||
httpdSend(connData, buff, len);
|
httpdSend(connData, buff, len);
|
||||||
if (cgiWifiAps.apData==NULL) cgiWifiAps.noAps=0;
|
if (cgiWifiAps.apData==NULL) cgiWifiAps.noAps=0;
|
||||||
for (i=0; i<cgiWifiAps.noAps; i++) {
|
connData->cgiData=(void *)1;
|
||||||
//Fill in json code for an access point
|
return HTTPD_CGI_MORE;
|
||||||
len=os_sprintf(buff, "{\"essid\": \"%s\", \"rssi\": \"%d\", \"enc\": \"%d\"}%s\n",
|
|
||||||
cgiWifiAps.apData[i]->ssid, cgiWifiAps.apData[i]->rssi,
|
|
||||||
cgiWifiAps.apData[i]->enc, (i==cgiWifiAps.noAps-1)?"":",");
|
|
||||||
httpdSend(connData, buff, len);
|
|
||||||
}
|
|
||||||
len=os_sprintf(buff, "]\n}\n}\n");
|
|
||||||
httpdSend(connData, buff, len);
|
|
||||||
//Also start a new scan.
|
|
||||||
wifiStartScan();
|
|
||||||
}
|
}
|
||||||
return HTTPD_CGI_DONE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Temp store for new ap info.
|
//Temp store for new ap info.
|
||||||
|
|||||||
Reference in New Issue
Block a user