|
|
|
@ -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;
|
|
|
|
|