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.
74 lines
2.7 KiB
74 lines
2.7 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 if (request.find("/snapshot-float.jpg") != std::string::npos) {
|
|
InMemoryFile jpgfile;
|
|
Lock();
|
|
currentimagefloat.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=\"myimage1\" src=\"snapshot.jpg\"></img><br>";
|
|
res += "<img id=\"myimage2\" src=\"snapshot-float.jpg\"></img>";
|
|
res += "<script>\n";
|
|
res += " function reloadImage() {\n";
|
|
res += " const img1 = document.getElementById('myimage1');\n";
|
|
res += " let src1 = img1.src.split('?')[0];\n";
|
|
res += " src1 = src1 + '?' + new Date().getTime();\n";
|
|
res += " img1.src = src1;\n";
|
|
res += " const img2 = document.getElementById('myimage2');\n";
|
|
res += " let src2 = img2.src.split('?')[0];\n";
|
|
res += " src2 = src2 + '?' + new Date().getTime();\n";
|
|
res += " img2.src = src2;\n";
|
|
res += "}\n\n";
|
|
res += "setInterval(reloadImage, "+to_string(config.web_imagerefresh)+");\n";
|
|
res += "\n\n";
|
|
res += "</script>\n";
|
|
res += "</body></html>";
|
|
return res;
|
|
};
|
|
|