diff --git a/reference/HttpServer/HttpServer.cpp b/reference/HttpServer/HttpServer.cpp new file mode 100644 index 000000000..ad3ef400e --- /dev/null +++ b/reference/HttpServer/HttpServer.cpp @@ -0,0 +1,50 @@ +#include + +using namespace Upp; + +TcpSocket server; +StaticMutex ServerMutex; + +void Server() +{ + for(;;) { + TcpSocket socket; + LOG("Waiting..."); + ServerMutex.Enter(); + bool b = socket.Accept(server); + ServerMutex.Leave(); + if(b) { + ServerMutex.Leave(); + LOG("Connection accepted"); + HttpHeader http; + http.Read(socket); + String html; + html << "" + << "Method: " << http.GetMethod() << "
" + << "URI: " << http.GetURI() << "
"; + for(int i = 0; i < http.fields.GetCount(); i++) + html << "" << http.fields.GetKey(i) << ": " << http.fields[i] << "
"; + int len = http.GetContentLength(); + if(len > 0) + socket.GetAll(len); + html << "Current time: " << GetSysTime() << ""; + HttpResponse(socket, http.scgi, 200, "OK", "text/html", html); + } + } +} + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_COUT|LOG_FILE); + + if(!server.Listen(4000, 10)) { + LOG("Cannot open server port for listening\r\n"); + return; + } +#ifdef _MULTITHREADED + const int NTHREADS = 10; + for(int i = 0; i < NTHREADS; i++) + Thread::Start(callback(Server)); +#endif + Server(); +} diff --git a/reference/HttpServer/HttpServer.upp b/reference/HttpServer/HttpServer.upp new file mode 100644 index 000000000..7e9cf71f2 --- /dev/null +++ b/reference/HttpServer/HttpServer.upp @@ -0,0 +1,10 @@ +uses + Core; + +file + HttpServer.cpp; + +mainconfig + "" = "SSE2", + "" = "SSE2 MT"; + diff --git a/reference/HttpServer/init b/reference/HttpServer/init new file mode 100644 index 000000000..62ae9a99f --- /dev/null +++ b/reference/HttpServer/init @@ -0,0 +1,4 @@ +#ifndef _HttpServer_icpp_init_stub +#define _HttpServer_icpp_init_stub +#include "Core/init" +#endif