Skip to content

Commit 449b0e8

Browse files
committed
Added WebAdmin pages
Moved strings to PROGMEM to free up some RAM. This allows to add WebAdmin features: - File Manager (to download/add/delete exploit files) - Device Reboot - Storage Format
1 parent e12ab89 commit 449b0e8

File tree

4 files changed

+102
-78
lines changed

4 files changed

+102
-78
lines changed

GlobalConfig.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ void GlobalConfig::loadConfigFromStorage(void)
7878

7979
void GlobalConfig::DebugOutput(void) {
8080
#ifdef GLOBALCONFIG_DEBUG
81-
Serial.println("***Config****");
81+
Serial.println(F("***Config****"));
8282

8383
Serial.println("SSID: " + AP_SSID);
8484
Serial.println("Password: " + AP_PASS);
@@ -87,6 +87,6 @@ void GlobalConfig::DebugOutput(void) {
8787
Serial.println("Connect Wifi: " + connectWifi);
8888
Serial.println("WIFI_SSID: " + WIFI_SSID);
8989
Serial.println("WIFI_PASS: " + WIFI_PASS);
90-
Serial.println("***END Config****");
90+
Serial.println(F("***END Config****"));
9191
#endif
9292
}

PS4_PS5-ESP8266-Server.ino

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,15 @@ const char* SpoofedDomains[] = {"playstation.net"}; //Used only if conf->wifiCon
1919
const char* BlockedDomains[] = {"playstation.com", "scea.com", "sonyentertainmentnetwork.com"}; //Used only if conf->wifiConnect is true - all these domains will be blocked in DNS queries (IP set to 0)
2020

2121
// number of entries and number of ports in NAT table
22-
// Needs to be reasonably small as it uses the heap, which is also used by SSL
22+
// Needs to be reasonably small as it uses the heap, which is also used by SSL. But big enough to actually handle queries
2323
#define NAPT 100 //27 bytes per entry
2424
#define NAPT_PORT 30 //14 bytes per entry
2525

2626
//Debug
2727
#define DEBUG_HEAP //The ESP8266 has very little heap memory, and both NAT routing and SSL Handshake use it.
28+
// In my tests, the https Server needs around 25'000 bytes free heap to succesfully load a page. 30'000 is better, 20'000 not enough in my tests
29+
// Because of this, it is essential to move a lot of static content (e.g. Strings) to Flash rather than RAM (hence the heavy use of PROGMEM macro in WebAdmin.cpp in particular)
30+
2831
//#define DEBUG_DNS //To debug issues related to Fake DNS
2932
//#define DEBUG_WEBSERVER //Debug messages related to the Web Servers
3033
#define CHRISTMAS_TREE //Builtin LED lights up when DNS replies with a Spoofed or Blocked Domain
@@ -37,13 +40,10 @@ int lastHeap = 0;
3740
int lastTime = millis();
3841
#endif
3942

40-
//static const char serverCert[] = "-----BEGIN CERTIFICATE-----\r\nMIIC1DCCAj2gAwIBAgIUFQgjEtkNYfmrrpNQKHVNl3+dl08wDQYJKoZIhvcNAQEL\r\nBQAwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExEDAOBgNVBAcM\r\nB0ZyZW1vbnQxDDAKBgNVBAoMA2VzcDEMMAoGA1UECwwDZXNwMQwwCgYDVQQDDANl\r\nc3AxHDAaBgkqhkiG9w0BCQEWDWVzcEBlc3AubG9jYWwwHhcNMjEwMjIxMDAwMDQ4\r\nWhcNNDMwNzI4MDAwMDQ4WjB8MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZv\r\ncm5pYTEQMA4GA1UEBwwHRnJlbW9udDEMMAoGA1UECgwDZXNwMQwwCgYDVQQLDANl\r\nc3AxDDAKBgNVBAMMA2VzcDEcMBoGCSqGSIb3DQEJARYNZXNwQGVzcC5sb2NhbDCB\r\nnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAsrfFqlV5H0ajdAkkZ51HTOseOjYj\r\nNiaUD4MA5mIRonnph6EKIWb9Yl85vVa6yfVkGn3TFebQ96MMdTfZgLuP4ryCwe6Y\r\n+tZs2g6TjGbR0O6yuA8wQ2Ln7E0T05C8oOl88SGNV4tVL6hz64oMzuVebVDo0J9I\r\nybvL0O/LhMvC4x8CAwEAAaNTMFEwHQYDVR0OBBYEFCMQIU+pZQDVySXejfbIYbLQ\r\ncLXiMB8GA1UdIwQYMBaAFCMQIU+pZQDVySXejfbIYbLQcLXiMA8GA1UdEwEB/wQF\r\nMAMBAf8wDQYJKoZIhvcNAQELBQADgYEAFHPz3YhhXQYiERTGzt8r0LhNWdggr7t0\r\nWEVuAoEukjzv+3DVB2O+56NtDa++566gTXBGGar0pWfCwfWCEu5K6MBkBdm6Ub/A\r\nXDy+sRQTqH/jTFFh5lgxeq246kHWHGRad8664V5PoIh+OSa0G3CEB+BXy7WF82Qq\r\nqx0X6E/mDUU=\r\n-----END CERTIFICATE-----";
41-
//static const char serverKey[] = "-----BEGIN PRIVATE KEY-----\r\nMIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALK3xapVeR9Go3QJ\r\nJGedR0zrHjo2IzYmlA+DAOZiEaJ56YehCiFm/WJfOb1Wusn1ZBp90xXm0PejDHU3\r\n2YC7j+K8gsHumPrWbNoOk4xm0dDusrgPMENi5+xNE9OQvKDpfPEhjVeLVS+oc+uK\r\nDM7lXm1Q6NCfSMm7y9Dvy4TLwuMfAgMBAAECgYEApKFbSeyQtfnpSlO9oGEmtDmG\r\nT9NdHl3tWFiydId0fTpWoKT9YwWvdnYIB12klbQicbDkyTEl4Gjnafd3ufmNsaH8\r\nZ9twopIdvvWDvGPIqGNjvTYcuczpXmQWiUnG5OTiVWI1XuZa3uZEGSFK9Ra6bE4g\r\nG2xklGZGdaqqcd6AVhECQQDnBXVXwBxExxSFppL8KUtWgyXAvJAEvkzvTOQfcCel\r\naIM5EEUofB7WZeMtDEKgBtoBl+i5PP+GnDF0zsjDFx2nAkEAxgqVQii6zURSVE2T\r\niJDihySXJ2bmLJUjRIi1nCs64I9Oz4fECVvGwZ1XU8Uzhh3ylyBSG2HjhzA5sTSC\r\n1a/tyQJAOgE12EWFE4PE1FXhm+ymXN9q8DyoEHjTilYNBRO88JwQLpi2NJcNixlj\r\n8+CbLeDqhfHlXfVB10OKa2CsKce5CwJAbhaN+DQJ+3dCSOjC3YSk2Dkn6VhTFW9m\r\nJn/UbNa/KPug9M5k1Er3RsO/OqsBxEk7hHUMD3qv74OIXpBxNnZQuQJASlwk5HZT\r\n7rULkr72fK/YYxkS0czBDIpTKqwklxU+xLSGWkSHvSvl7sK4TmQ1w8KVpjKlTCW9\r\nxKbbW0zVmGN6wQ==\r\n-----END PRIVATE KEY-----";
42-
43-
static const char serverCert[]= "-----BEGIN CERTIFICATE-----\r\nMIIBszCCAV2gAwIBAgIUa8NoeDqaT6pFP5PHokRpKMXrT6swDQYJKoZIhvcNAQEL\r\nBQAwLjELMAkGA1UEBhMCSlAxDjAMBgNVBAgMBVRva3lvMQ8wDQYDVQQKDAZXb2xv\r\nbG8wHhcNMjMwODMwMDE0NDIxWhcNMzQxMTE2MDE0NDIxWjAuMQswCQYDVQQGEwJK\r\nUDEOMAwGA1UECAwFVG9reW8xDzANBgNVBAoMBldvbG9sbzBcMA0GCSqGSIb3DQEB\r\nAQUAA0sAMEgCQQDFBUICgP5wFMcRCs8VRqrY3QZr72FtzvLtPTCMcgPsaBE60QJt\r\n+YAj+e2mAolbRPRk4FNNcrg5/XsURdfuAPfvAgMBAAGjUzBRMB0GA1UdDgQWBBSv\r\nywhrMAdpJLbVx4kF9hmuTpHlLjAfBgNVHSMEGDAWgBSvywhrMAdpJLbVx4kF9hmu\r\nTpHlLjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA0EAjH+jaG47Qngl\r\nPTGjPpFmJp+LK6YHPzhqrJrAN18WziGJiaeCsuWV7j8cgGgB0U0AOybcdYMrjMOR\r\n+u+B12nV2w==\r\n-----END CERTIFICATE-----";
44-
static const char serverKey[] = "-----BEGIN PRIVATE KEY-----\r\nMIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAxQVCAoD+cBTHEQrP\r\nFUaq2N0Ga+9hbc7y7T0wjHID7GgROtECbfmAI/ntpgKJW0T0ZOBTTXK4Of17FEXX\r\n7gD37wIDAQABAkAcuYaFPO9bwfvABVZp4LK6CYeNJwqKavjKE/jHETx3M/cot1rM\r\nA39OZ/wCuNrqr+k4Pb2qQy2rzXJoa37lMG7ZAiEA+itu8WdfuzdOUAfkoHgsjUdz\r\nBmfaWy37q58A0druQEMCIQDJnLmp1sTDIcqoIMlIXDNwTPUc4pJj/JJSeczTQg7U\r\n5QIhAJzSu2JzNgzLd7ktqYF6tBsAbjfWxIgiBEEqlL346x+3AiB54WAwN2C94jjE\r\nSQXF089Y7X0kmCgNgAvpBi7367BRrQIgDH+nVOtPl0Y4Yqop/7hCT3vEsvmMWgx4\r\n9InegA0Cz68=\r\n-----END PRIVATE KEY-----";
43+
static const char serverCert[] PROGMEM = "-----BEGIN CERTIFICATE-----\r\nMIIBszCCAV2gAwIBAgIUa8NoeDqaT6pFP5PHokRpKMXrT6swDQYJKoZIhvcNAQEL\r\nBQAwLjELMAkGA1UEBhMCSlAxDjAMBgNVBAgMBVRva3lvMQ8wDQYDVQQKDAZXb2xv\r\nbG8wHhcNMjMwODMwMDE0NDIxWhcNMzQxMTE2MDE0NDIxWjAuMQswCQYDVQQGEwJK\r\nUDEOMAwGA1UECAwFVG9reW8xDzANBgNVBAoMBldvbG9sbzBcMA0GCSqGSIb3DQEB\r\nAQUAA0sAMEgCQQDFBUICgP5wFMcRCs8VRqrY3QZr72FtzvLtPTCMcgPsaBE60QJt\r\n+YAj+e2mAolbRPRk4FNNcrg5/XsURdfuAPfvAgMBAAGjUzBRMB0GA1UdDgQWBBSv\r\nywhrMAdpJLbVx4kF9hmuTpHlLjAfBgNVHSMEGDAWgBSvywhrMAdpJLbVx4kF9hmu\r\nTpHlLjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA0EAjH+jaG47Qngl\r\nPTGjPpFmJp+LK6YHPzhqrJrAN18WziGJiaeCsuWV7j8cgGgB0U0AOybcdYMrjMOR\r\n+u+B12nV2w==\r\n-----END CERTIFICATE-----";
44+
static const char serverKey[] PROGMEM = "-----BEGIN PRIVATE KEY-----\r\nMIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAxQVCAoD+cBTHEQrP\r\nFUaq2N0Ga+9hbc7y7T0wjHID7GgROtECbfmAI/ntpgKJW0T0ZOBTTXK4Of17FEXX\r\n7gD37wIDAQABAkAcuYaFPO9bwfvABVZp4LK6CYeNJwqKavjKE/jHETx3M/cot1rM\r\nA39OZ/wCuNrqr+k4Pb2qQy2rzXJoa37lMG7ZAiEA+itu8WdfuzdOUAfkoHgsjUdz\r\nBmfaWy37q58A0druQEMCIQDJnLmp1sTDIcqoIMlIXDNwTPUc4pJj/JJSeczTQg7U\r\n5QIhAJzSu2JzNgzLd7ktqYF6tBsAbjfWxIgiBEEqlL346x+3AiB54WAwN2C94jjE\r\nSQXF089Y7X0kmCgNgAvpBi7367BRrQIgDH+nVOtPl0Y4Yqop/7hCT3vEsvmMWgx4\r\n9InegA0Cz68=\r\n-----END PRIVATE KEY-----";
4545

46-
String defaultIndex = "<!DOCTYPE html><title>hi</title><center>ESP</center>";
46+
static const char defaultIndex[] PROGMEM = "<!DOCTYPE html><title>hi</title><center>ESP</center>";
4747

4848
//Global variables
4949
DNSServer dnsServer;
@@ -105,8 +105,8 @@ bool loadFromSpiffs(String path) {
105105
}
106106

107107
if (path.endsWith("index.html") && !SPIFFS.exists(path)) {
108-
webServer.setContentLength(defaultIndex.length());
109-
webServer.send(200, "text/html", defaultIndex);
108+
webServer.setContentLength(strlen_P(defaultIndex));
109+
webServer.send_P(200, "text/html", defaultIndex);
110110
return true;
111111
}
112112

@@ -130,7 +130,7 @@ bool loadFromSpiffs(String path) {
130130
}
131131

132132
if (webServer.streamFile(dataFile, dataType) != dataFile.size()) {
133-
Serial.println("Sent less data than expected!");
133+
Serial.println(F("Sent less data than expected!"));
134134
}
135135
dataFile.close();
136136
return true;
@@ -170,16 +170,16 @@ void setup(void)
170170
WiFi.setAutoReconnect(true);
171171
WiFi.begin(conf->WIFI_SSID, conf->WIFI_PASS);
172172

173-
//Serial.println("WIFI connecting");
173+
//Serial.println(F("WIFI connecting"));
174174
if (WiFi.waitForConnectResult() != WL_CONNECTED) {
175-
Serial.println("Wifi failed to connect");
175+
Serial.println(F("Wifi failed to connect"));
176176
} else {
177177
Serial.println("Connected to " + conf->WIFI_SSID);
178178
}
179179
}
180180
else
181181
{
182-
Serial.println("Offline mode");
182+
Serial.println(F("Offline mode"));
183183
WiFi.mode(WIFI_AP);
184184
}
185185

@@ -193,7 +193,7 @@ void setup(void)
193193
dnsServer.setTTL(30);
194194
dnsServer.setErrorReplyCode(DNSReplyCode::ServerFailure);
195195
dnsServer.start(53, "*", conf->Server_IP);
196-
Serial.println("DNS server started");
196+
Serial.println(F("DNS server started"));
197197

198198

199199
//HTTP Web Server Setup
@@ -202,7 +202,13 @@ void setup(void)
202202
WebAdmin webAdmin (&webServer);
203203

204204
//HTTPS Web Server Set up: only thing it does is instantly redirect the browser to the HTTP index page
205-
sWebServer.getServer().setRSACert(new X509List(serverCert), new PrivateKey(serverKey));
205+
206+
char bufCert[1000]; // -------------------
207+
char bufKey[1000]; //PROGMEM shenanigans
208+
strcpy_P(bufCert,serverCert); //
209+
strcpy_P(bufKey,serverKey); //--------------------
210+
sWebServer.getServer().setRSACert(new X509List(bufCert), new PrivateKey(bufKey));
211+
206212
sWebServer.onNotFound([]() {
207213
sWebServer.sendHeader("Location", String("http://" + conf->Server_IP.toString() + "/index.html" ), true);
208214
sWebServer.send(301, "text/plain", "");
@@ -221,20 +227,20 @@ void setup(void)
221227
//Serial.printf("ip_napt_enable_no(SOFTAP_IF): ret=%d (OK=%d)\n", (int)ret, (int)ERR_OK);
222228
if (ret == ERR_OK)
223229
{
224-
Serial.println("NAT init OK");
230+
Serial.println(F("NAT init OK"));
225231
}
226232
}
227233
Serial.printf("Heap after napt init: %d\n", ESP.getFreeHeap());
228234
if (ret != ERR_OK)
229235
{
230-
Serial.println("NAPT initialization failed");
236+
Serial.println(F("NAPT initialization failed"));
231237
}
232238
}
233239

234240
//Start HTTP and HTTPS Web Servers
235241
sWebServer.begin();
236242
webServer.begin();
237-
Serial.println("HTTP servers started");
243+
Serial.println(F("HTTP servers started"));
238244

239245
}
240246

@@ -266,7 +272,7 @@ void dnsProcess () {
266272
if (dom.indexOf(element) >= 0)
267273
{
268274
#ifdef DEBUG_DNS
269-
Serial.printf(" redirected to local server \n");
275+
Serial.printf(F(" redirected to local server \n"));
270276
#endif
271277

272278
#ifdef CHRISTMAS_TREE
@@ -285,7 +291,7 @@ void dnsProcess () {
285291
{
286292

287293
#ifdef DEBUG_DNS
288-
Serial.printf(" Blocked \n");
294+
Serial.printf(F(" Blocked \n"));
289295
#endif
290296

291297
#ifdef CHRISTMAS_TREE

0 commit comments

Comments
 (0)