Files
FsTrack/Source/HttpServer.cpp
T
jens 14fc402ff3 - added Kml export
- added HttpServer


git-svn-id: http://moon:8086/svn/software/trunk/projects/FsTrack@124 b431acfa-c32f-4a4a-93f1-934dc6c82436
2015-01-11 08:09:11 +00:00

114 lines
2.0 KiB
C++

#include "HttpServer.hpp"
HttpServer::HttpServer(const char *pDocDir)
: Thread("Http")
, m_docDir(pDocDir)
{
startThread();
}
HttpServer::~HttpServer(void)
{
stopThread(10000);
}
void HttpServer::addListener(IHttpListener *pListener)
{
m_listeners.add(pListener);
}
const char* HttpServer::getDocName(char *buffer, int buflen)
{
static char docBuffer[1024];
char *pDocname;
strcpy(docBuffer, m_docDir);
pDocname = &docBuffer[strlen(docBuffer)];
*pDocname = '\\';
pDocname++;
int i, off;
if (!stricmp(buffer, "GET"))
{
return nullptr;
}
off = 0;
while(buffer[3+off] == 0x20)
off++;
while(buffer[3+off] == '/')
off++;
i = 0;
while(buffer[3+off+i] != 0x20)
{
pDocname[i] = buffer[3+off+i];
i++;
}
pDocname[i] = 0;
return docBuffer;
}
void HttpServer::run()
{
char buffer[1024];
ScopedPointer<StreamingSocket> listenSock = new StreamingSocket();
listenSock->bindToPort(5001);
listenSock->createListener(5001);
while(!threadShouldExit())
{
const char *pDoc = nullptr;
if (listenSock->waitUntilReady(true, 100) > 0)
{
ScopedPointer<StreamingSocket> pSock = listenSock->waitForNextConnection();
int numRead = pSock->read(buffer, sizeof(buffer), false);
if (numRead > 0)
{
pDoc = getDocName(buffer, numRead);
if (!pDoc)
{
pSock->close();
continue;
}
}
m_listeners.call(&IHttpListener::onUpdate, pDoc);
ScopedPointer<juce::File> file = new juce::File(pDoc);
if (!file)
continue;
ScopedPointer<juce::FileInputStream> pFileStream = file->createInputStream();
if (!pFileStream)
continue;
int64 remain = pFileStream->getTotalLength();
int64 toRead;
while(remain)
{
toRead = remain;
if (toRead > sizeof(buffer))
{
toRead = sizeof(buffer);
}
pFileStream->read(buffer, toRead);
pSock->write(buffer, toRead);
remain -= toRead;
}
pFileStream = nullptr;
pSock = nullptr;
file = nullptr;
}
}
}