My favorites | Sign in
Project Home Downloads Source
Checkout   Browse   Changes    
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <signal.h>

#include "Web.h"

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);

query.CaseSensitive();
post.CaseSensitive();
}

void ScgiServer::Process()
{
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();
}

bool ScgiServer::Accept()
{
return serverSock.Accept(clientSock, &clientIP);
}

void ScgiServer::Run(int listenCount)
{
ServerSocket(serverSock, port, false, listenCount);
while(run)
if(Accept())
Process();
}

END_UPP_NAMESPACE

Change log

r4580 by cxl on Feb 12, 2012   Diff
HttpQuery: CaseSensitive
Go to: 
Project members, sign in to write a code review

Older revisions

r4565 by cxl on Feb 9, 2012   Diff
ScgiServer: Separated Run -> Accept,
Process
r3954 by cxl on Oct 6, 2011   Diff
*Core: CParser correct issue with
characters >128
r3310 by cxl on Mar 25, 2011   Diff
Web: ScgiServer Run - listenCount
parameter (thanks Mindtraveller!)
All revisions of this file

File info

Size: 1727 bytes, 93 lines
Powered by Google Project Hosting