You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

60 lines
2.0 KiB

#include <unistd.h>
#include "miniwebcam.h"
#include "UDPTCPNetwork.h"
std::string GenerateHtmlFile();
InMemoryFile GenerateJpgFile(VideoFrame *vf);
int WebCamServer::HandleRequest (WebRequestBuffer *requestbuffer, WebServerClient *webclient) {
if (requestbuffer == NULL || webclient == NULL) return 0;
std::string request = requestbuffer->GetRequest();
printf ("SimpleWebServerClient::HandleRequest() Request:%s\n", request.c_str());
if (request.compare ("/") == 0) request = "/index.html";
if (request.find("/index.html") != std::string::npos) {
std::string htmlfile = GenerateHtmlFile();
if (webclient->SendResponseFileFromMemory(requestbuffer, request, "",
(void*) htmlfile.c_str(),
strlen(htmlfile.c_str())) != 1) return 0;
}
else if (request.find("/snapshot.jpg") != std::string::npos) {
InMemoryFile jpgfile;
Lock();
currentimage.ConvertToJpeg(&jpgfile, 99);
UnLock();
if (webclient->SendResponseFileFromMemory(requestbuffer, request, "",
(void*) jpgfile.mem,
jpgfile.memsize) != 1) return 0;
}
else {
return 0;
}
requestbuffer->Clear();
return 1;
};
std::string GenerateHtmlFile() {
std::string res;
res = "<html><head><title>MiniWebCam</title></head><body>";
res += "<img id=\"myimage\" src=\"snapshot.jpg\"></img>";
res += "<script>\n";
res += " function reloadImage() {\n";
res += " const img = document.getElementById('myimage');\n";
res += " let src = img.src.split('?')[0];\n";
res += " src = src + '?' + new Date().getTime();\n";
res += " img.src = src;\n";
res += "}\n\n";
res += "setInterval(reloadImage, "+to_string(config.web_imagerefresh)+");\n";
res += "\n\n";
res += "</script>\n";
res += "</body></html>";
return res;
};