aboutsummaryrefslogtreecommitdiff
path: root/backends/networking/sdl_net/localwebserver.cpp
diff options
context:
space:
mode:
authorAlexander Tkachev2016-06-15 23:54:53 +0600
committerAlexander Tkachev2016-08-24 16:07:55 +0600
commit13c54f66850226a516da0450b633ebafbc26584e (patch)
tree5c2582cc47296bee1fd3dc7e8f55bddb102bc61f /backends/networking/sdl_net/localwebserver.cpp
parent99c51380fdc866ce393c52eb41803a9ec119a9ad (diff)
downloadscummvm-rg350-13c54f66850226a516da0450b633ebafbc26584e.tar.gz
scummvm-rg350-13c54f66850226a516da0450b633ebafbc26584e.tar.bz2
scummvm-rg350-13c54f66850226a516da0450b633ebafbc26584e.zip
CLOUD: Add GetClientHandler
That ClientHandler is made for responding GET requests. It calculates stream's length, it allows to specify response code and headers, it can be used to transfer any ReadStream.
Diffstat (limited to 'backends/networking/sdl_net/localwebserver.cpp')
-rw-r--r--backends/networking/sdl_net/localwebserver.cpp21
1 files changed, 17 insertions, 4 deletions
diff --git a/backends/networking/sdl_net/localwebserver.cpp b/backends/networking/sdl_net/localwebserver.cpp
index ee67f787c3..a25dd74121 100644
--- a/backends/networking/sdl_net/localwebserver.cpp
+++ b/backends/networking/sdl_net/localwebserver.cpp
@@ -23,6 +23,8 @@
#define FORBIDDEN_SYMBOL_ALLOW_ALL
#include "backends/networking/sdl_net/localwebserver.h"
+#include "backends/networking/sdl_net/getclienthandler.h"
+#include "common/memstream.h"
#include "common/str.h"
#include "common/system.h"
#include "common/timer.h"
@@ -30,6 +32,7 @@
#include <SDL/SDL_net.h>
namespace Common {
+class MemoryReadWriteStream;
DECLARE_SINGLETON(Networking::LocalWebserver);
@@ -126,16 +129,17 @@ void LocalWebserver::handleClient(uint32 i) {
//if PUT, check whether we know a handler for that URL
//if no handler, answer with default BAD REQUEST
warning("headers %s", _client[i].headers().c_str());
- _client[i].close();
+ setClientGetHandler(_client[i], "<html><head><title>ScummVM</title></head><body>Hello, World!</body></html>");
break;
case BAD_REQUEST:
- //TODO: answer with BAD REQUEST
- _client[i].close();
+ setClientGetHandler(_client[i], "<html><head><title>ScummVM - Bad Request</title></head><body>BAD REQUEST</body></html>", 400);
+ break;
+ case BEING_HANDLED:
+ _client[i].handle();
break;
}
}
-
void LocalWebserver::acceptClient() {
if (!SDLNet_SocketReady(_serverSocket)) return;
@@ -150,4 +154,13 @@ void LocalWebserver::acceptClient() {
_client[_clients++].open(_set, client);
}
+void LocalWebserver::setClientGetHandler(Client &client, Common::String response, long code) {
+ byte *data = new byte[response.size()];
+ memcpy(data, response.c_str(), response.size());
+ Common::MemoryReadStream *stream = new Common::MemoryReadStream(data, response.size(), DisposeAfterUse::YES);
+ GetClientHandler *handler = new GetClientHandler(stream);
+ handler->setResponseCode(code);
+ client.setHandler(handler);
+}
+
} // End of namespace Networking