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.

54 lines
1.8 KiB

#include <unistd.h>
#include "miniwebcam.h"
#include "UDPTCPNetwork.h"
#include "inmemorytar.h"
// InMemoryFile GenerateJpgFile(VideoFrame *vf);
InMemoryTar assets;
int WebCamServer::HandleRequest (WebRequestBuffer *requestbuffer, WebServerClient *webclient) {
if (requestbuffer == NULL || webclient == NULL) return 0;
std::string request = requestbuffer->GetRequest();
if (request.compare ("/") == 0) request = "/index.html";
InMemoryFile *imf_do_not_free = NULL;
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 if (isfile("www"+request)) {
if (webclient->SendResponseFile(requestbuffer, request, "") != 1) return 0;
}
else if (assets.FindFile("www"+request, &imf_do_not_free)) {
if (imf_do_not_free == NULL) return 0;
if (webclient->SendResponseFileFromMemory(requestbuffer, request, "",
(void*) imf_do_not_free->mem,
imf_do_not_free->memsize) != 1) return 0;
}
else {
return 0;
}
requestbuffer->Clear();
return 1;
};