webserver exited on file not found.

master
Steffen Pohle 5 hours ago
parent e9dee1ac57
commit 0a2ee59cc3

@ -1,3 +1,6 @@
2026-02-15:
- webserver exited if file was not found. Return error code and keep running
2026-02-06: 2026-02-06:
- fixed: character '=' was ignored in the request - fixed: character '=' was ignored in the request

@ -60,6 +60,7 @@ install: $(TARGET)
cp -f $(TARGET) $(PREFIX)/lib/ cp -f $(TARGET) $(PREFIX)/lib/
ln -sf $(PREFIX)/lib/$(TARGET) $(PREFIX)/lib/lib$(OBJLIB_NAME).so ln -sf $(PREFIX)/lib/$(TARGET) $(PREFIX)/lib/lib$(OBJLIB_NAME).so
cp -f UDPTCPNetwork*.h $(PREFIX)/include/ cp -f UDPTCPNetwork*.h $(PREFIX)/include/
ldconfig
uninstall: uninstall:
rm -f $(PREFIX)/lib/$(TARGET) rm -f $(PREFIX)/lib/$(TARGET)

@ -97,6 +97,7 @@ class WebServerClient {
int SendResponseFileFromMemory (WebRequestBuffer *request, std::string fname, std::string addheader, int SendResponseFileFromMemory (WebRequestBuffer *request, std::string fname, std::string addheader,
void *memptr, int memsize); void *memptr, int memsize);
WebRequestBuffer * Loop(); WebRequestBuffer * Loop();
std::string GenErrorHtml(int errorcode, std::string errortext);
}; };

@ -264,26 +264,19 @@ int WebServerClient::SendResponseFile (WebRequestBuffer *request, std::string fn
error = 404; error = 404;
fullfname = Get_WebFile_FullPath("error404.html"); fullfname = Get_WebFile_FullPath("error404.html");
filefd = open(fullfname.c_str(), O_RDONLY); filefd = open(fullfname.c_str(), O_RDONLY);
if (filefd < 0) errorexit ("could not open file '%s' for reading. Error:%s\n",
fullfname.c_str(), strerror(errno));
} }
if (fstat (filefd, &filestat) != 0) { if ((filefd != 0) && (fstat (filefd, &filestat) != 0)) {
debug ("could not get stats on file '%s'. Error:%s\n", debug ("could not get stats on file '%s'. Error:%s\n",
fullfname.c_str(), strerror(errno)); fullfname.c_str(), strerror(errno));
error = 500; error = 500;
fullfname = Get_WebFile_FullPath("error500.html"); fullfname = Get_WebFile_FullPath("error500.html");
filefd = open(fullfname.c_str(), O_RDONLY); filefd = open(fullfname.c_str(), O_RDONLY);
if (filefd < 0)
errorexit ("could not open file '%s' for reading. Error:%s\n",
fullfname.c_str(), strerror(errno));
if (fstat (filefd, &filestat) != 0)
errorexit ("could not get stats on file '%s'. Error:%s\n",
fullfname.c_str(), strerror(errno));
} }
// //
// send header and file // send header and file
if (filefd <= 0) {
header = CreateHeader (request, error, filetype, filestat.st_size, addheader); header = CreateHeader (request, error, filetype, filestat.st_size, addheader);
outbufferpos = header.length(); outbufferpos = header.length();
outbuffer = (char*) malloc (outbufferpos + filestat.st_size + 16); outbuffer = (char*) malloc (outbufferpos + filestat.st_size + 16);
@ -298,6 +291,13 @@ int WebServerClient::SendResponseFile (WebRequestBuffer *request, std::string fn
return 0; return 0;
} }
filereadbytes += outbufferpos; filereadbytes += outbufferpos;
}
else {
header = CreateHeader (request, error, filetype, filestat.st_size, addheader);
header = header + GenErrorHtml(error, "some internal server error");
outbuffer = (char*) malloc (header.length() + 16);
memcpy (outbuffer, header.c_str(), header.length());
}
if (ssl) l = ssl->Write(outbuffer, filereadbytes); if (ssl) l = ssl->Write(outbuffer, filereadbytes);
else l = tcp->Write(outbuffer, filereadbytes); else l = tcp->Write(outbuffer, filereadbytes);
@ -331,6 +331,14 @@ std::string WebServerClient::Get_WebFile_FullPath(std::string file) {
return ret; return ret;
}; };
std::string WebServerClient::GenErrorHtml(int errorcode, std::string errortext) {
std::string text;
text = "<html><head><title>ERROR - " + to_string(errorcode) + "</title></head>";
text += "<body><h1>"+to_string(errorcode)+"</h1><p>"+errortext+"</p></body></html>";
return text;
};
WebServer::WebServer() { WebServer::WebServer() {
running = 0; running = 0;

Loading…
Cancel
Save