From 289cfd2aa020b0fecfe56f8ccf91435c2f7fbb7a Mon Sep 17 00:00:00 2001 From: cxl Date: Fri, 8 Oct 2010 16:10:26 +0000 Subject: [PATCH] web: ScgiServer moved to Web git-svn-id: svn://ultimatepp.org/upp/trunk@2757 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/ScgiServer/ScgiServer.upp | 9 -- uppsrc/ScgiServer/init | 4 - uppsrc/{ScgiServer => Web}/ScgiServer.cpp | 166 +++++++++++----------- uppsrc/{ScgiServer => Web}/ScgiServer.h | 70 ++++----- uppsrc/Web/Web.h | 1 + uppsrc/Web/Web.upp | 2 + uppsrc/Web/init | 2 +- 7 files changed, 123 insertions(+), 131 deletions(-) delete mode 100644 uppsrc/ScgiServer/ScgiServer.upp delete mode 100644 uppsrc/ScgiServer/init rename uppsrc/{ScgiServer => Web}/ScgiServer.cpp (95%) rename uppsrc/{ScgiServer => Web}/ScgiServer.h (66%) diff --git a/uppsrc/ScgiServer/ScgiServer.upp b/uppsrc/ScgiServer/ScgiServer.upp deleted file mode 100644 index 7fe4d275e..000000000 --- a/uppsrc/ScgiServer/ScgiServer.upp +++ /dev/null @@ -1,9 +0,0 @@ -description "Simple Common Gateway Interface\377"; - -uses - Web; - -file - ScgiServer.cpp, - ScgiServer.h; - diff --git a/uppsrc/ScgiServer/init b/uppsrc/ScgiServer/init deleted file mode 100644 index c76cba3eb..000000000 --- a/uppsrc/ScgiServer/init +++ /dev/null @@ -1,4 +0,0 @@ -#ifndef _ScgiServer_icpp_init_stub -#define _ScgiServer_icpp_init_stub -#include "Web/init" -#endif diff --git a/uppsrc/ScgiServer/ScgiServer.cpp b/uppsrc/Web/ScgiServer.cpp similarity index 95% rename from uppsrc/ScgiServer/ScgiServer.cpp rename to uppsrc/Web/ScgiServer.cpp index 535efaba3..aff76ea6b 100644 --- a/uppsrc/ScgiServer/ScgiServer.cpp +++ b/uppsrc/Web/ScgiServer.cpp @@ -1,83 +1,83 @@ -#include - -#include -#include - -#include "ScgiServer.h" - -using namespace Upp; - -bool run = true; - -void sighandler(int sig) -{ - run = false; -} - -ScgiServer::ScgiServer(int port) -{ - this->port = port; - - signal(SIGABRT, sighandler); - signal(SIGINT, sighandler); - signal(SIGTERM, sighandler); -} - -void ScgiServer::Run() -{ - ServerSocket(serverSock, port); - while (run) { - if (serverSock.Accept(clientSock, &clientIP)) { - OnAccepted(); - - String sLen = clientSock.ReadUntil(':'); - int len = atoi(sLen); - String data; - - if (clientSock.IsOpen() && !clientSock.IsEof() && !clientSock.IsError()) { - // len + 1 = data plus the trailing , as in SCGI spec - data = clientSock.ReadCount(len+1, 3000); - } - - String key; - int spos = 0; - for (int i=0; i < data.GetCount(); i++) { - if (data[i] == 0) { - if (key.IsEmpty()) - key = data.Mid(spos, i-spos); - else { - String value = data.Mid(spos, i-spos); - - serverVars.Add(key, value); - key.Clear(); - } - - spos = i + 1; - } - } - - query.SetURL("?" + serverVars.Get("QUERY_STRING")); - - hasPostData = false; - if (serverVars.Get("REQUEST_METHOD") == "POST") { - len = atoi(serverVars.Get("CONTENT_LENGTH")); - if (len > 0 && clientSock.IsOpen() && !clientSock.IsEof() && - !clientSock.IsError()) - { - data = clientSock.ReadCount(len, 3000); - post.SetURL("?" + data); - hasPostData = true; - } - } - - OnRequest(); - - clientSock.Close(); - serverVars.Clear(); - query.Clear(); - post.Clear(); - - OnClosed(); - } - } -} +#include + +#include +#include + +#include "ScgiServer.h" + +using namespace Upp; + +bool run = true; + +void sighandler(int sig) +{ + run = false; +} + +ScgiServer::ScgiServer(int port) +{ + this->port = port; + + signal(SIGABRT, sighandler); + signal(SIGINT, sighandler); + signal(SIGTERM, sighandler); +} + +void ScgiServer::Run() +{ + ServerSocket(serverSock, port); + while (run) { + if (serverSock.Accept(clientSock, &clientIP)) { + OnAccepted(); + + String sLen = clientSock.ReadUntil(':'); + int len = atoi(sLen); + String data; + + if (clientSock.IsOpen() && !clientSock.IsEof() && !clientSock.IsError()) { + // len + 1 = data plus the trailing , as in SCGI spec + data = clientSock.ReadCount(len+1, 3000); + } + + String key; + int spos = 0; + for (int i=0; i < data.GetCount(); i++) { + if (data[i] == 0) { + if (key.IsEmpty()) + key = data.Mid(spos, i-spos); + else { + String value = data.Mid(spos, i-spos); + + serverVars.Add(key, value); + key.Clear(); + } + + spos = i + 1; + } + } + + query.SetURL("?" + serverVars.Get("QUERY_STRING")); + + hasPostData = false; + if (serverVars.Get("REQUEST_METHOD") == "POST") { + len = atoi(serverVars.Get("CONTENT_LENGTH")); + if (len > 0 && clientSock.IsOpen() && !clientSock.IsEof() && + !clientSock.IsError()) + { + data = clientSock.ReadCount(len, 3000); + post.SetURL("?" + data); + hasPostData = true; + } + } + + OnRequest(); + + clientSock.Close(); + serverVars.Clear(); + query.Clear(); + post.Clear(); + + OnClosed(); + } + } +} diff --git a/uppsrc/ScgiServer/ScgiServer.h b/uppsrc/Web/ScgiServer.h similarity index 66% rename from uppsrc/ScgiServer/ScgiServer.h rename to uppsrc/Web/ScgiServer.h index c856ba879..ef0289e0b 100644 --- a/uppsrc/ScgiServer/ScgiServer.h +++ b/uppsrc/Web/ScgiServer.h @@ -1,34 +1,36 @@ -#ifndef _ScgiServer_ScgiServer_h -#define _ScgiServer_ScgiServer_h - -#include - -using namespace Upp; - -class ScgiServer { -public: - HttpQuery query; - HttpQuery post; - - ScgiServer(int port = 7800); - - void Run(); - - dword ClientIP() { return clientIP; } - Socket ClientSock() { return clientSock; } - - bool HasPostData() { return hasPostData; } - - virtual void OnAccepted() {} - virtual void OnRequest() {} - virtual void OnClosed() {} - -protected: - int port; - Socket serverSock, clientSock; - VectorMap serverVars; - dword clientIP; - bool hasPostData; -}; - -#endif +#ifndef _ScgiServer_ScgiServer_h +#define _ScgiServer_ScgiServer_h + +#include + +using namespace Upp; + +class ScgiServer { +public: + HttpQuery query; + HttpQuery post; + + ScgiServer(int port = 7800); + + void Run(); + + dword ClientIP() { return clientIP; } + Socket ClientSock() { return clientSock; } + + void Write(const String& text) { clientSock.Write(text); } + + bool HasPostData() { return hasPostData; } + + virtual void OnAccepted() {} + virtual void OnRequest() {} + virtual void OnClosed() {} + +protected: + int port; + Socket serverSock, clientSock; + VectorMap serverVars; + dword clientIP; + bool hasPostData; +}; + +#endif diff --git a/uppsrc/Web/Web.h b/uppsrc/Web/Web.h index 25844827c..d04e5f16e 100644 --- a/uppsrc/Web/Web.h +++ b/uppsrc/Web/Web.h @@ -41,6 +41,7 @@ NAMESPACE_UPP #include "auth.h" #include "smtp.h" #include "sproc.h" +#include "ScgiServer.h" END_UPP_NAMESPACE diff --git a/uppsrc/Web/Web.upp b/uppsrc/Web/Web.upp index 31f100011..26b5bb301 100644 --- a/uppsrc/Web/Web.upp +++ b/uppsrc/Web/Web.upp @@ -30,6 +30,8 @@ file smtp.cpp, sproc.h, sproc.cpp, + ScgiServer.h, + ScgiServer.cpp, src.tpp, srcdoc.tpp, srcimp.tpp, diff --git a/uppsrc/Web/init b/uppsrc/Web/init index c3144ae05..ae66929f1 100644 --- a/uppsrc/Web/init +++ b/uppsrc/Web/init @@ -1,7 +1,7 @@ #ifndef _Web_icpp_init_stub #define _Web_icpp_init_stub #include "Core/init" -#define BLITZ_INDEX__ F013A89C23D31A4716457864E38F2235B +#define BLITZ_INDEX__ F6F37DAE5668E45571942689ACEE874C1 #include "Web_init.icpp" #undef BLITZ_INDEX__ #endif