-rw-r--r-- | src/cgi_gateway.cc | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/cgi_gateway.cc b/src/cgi_gateway.cc index 30410f2..ab48f78 100644 --- a/src/cgi_gateway.cc +++ b/src/cgi_gateway.cc | |||
@@ -1,77 +1,81 @@ | |||
1 | #include <errno.h> | 1 | #include <errno.h> |
2 | #include <ctype.h> | 2 | #include <ctype.h> |
3 | #include "kingate/cgi_gateway.h" | 3 | #include "kingate/cgi_gateway.h" |
4 | #include "kingate/util.h" | 4 | #include "kingate/util.h" |
5 | #include "kingate/exception.h" | 5 | #include "kingate/exception.h" |
6 | 6 | ||
7 | namespace kingate { | 7 | namespace kingate { |
8 | 8 | ||
9 | static string empty_string; | 9 | static string empty_string; |
10 | 10 | ||
11 | cgi_gateway::cgi_gateway(cgi_interface& ci) | 11 | cgi_gateway::cgi_gateway(cgi_interface& ci) |
12 | : iface(ci), b_parsed_content(false) { | 12 | : iface(ci), b_parsed_content(false) { |
13 | // Fetch GET content | 13 | // Fetch GET content |
14 | try { | 14 | try { |
15 | string qs = get_meta("QUERY_STRING"); | 15 | string qs = get_meta("QUERY_STRING"); |
16 | parse_query(qs,get); | 16 | parse_query(qs,get); |
17 | }catch(exception_notfound& enf) { } | 17 | }catch(exception_notfound& enf) { } |
18 | // Fetch POST content | 18 | // Fetch POST content |
19 | if(!strcasecmp(content_type().c_str(),"application/x-www-form-urlencoded")) { | 19 | if(!strcasecmp(content_type().c_str(),"application/x-www-form-urlencoded")) { |
20 | unsigned long cl = content_length(); | 20 | unsigned long cl = content_length(); |
21 | if(cl) { | 21 | if(cl) { |
22 | char * tmp = new char[cl]; | 22 | char * tmp = new char[cl]; |
23 | iface.in().read(tmp,cl); | 23 | iface.in().read(tmp,cl); |
24 | string qs(tmp,cl); | 24 | string qs(tmp,cl); |
25 | delete tmp; | 25 | delete tmp; |
26 | parse_query(qs,post); | 26 | parse_query(qs,post); |
27 | } | 27 | } |
28 | b_parsed_content = true; | 28 | b_parsed_content = true; |
29 | } | 29 | } |
30 | // Parse cookies | ||
31 | try { | ||
32 | cookies.parse_cookies(get_meta("HTTP_COOKIE")); | ||
33 | }catch(exception_notfound& enf) { } | ||
30 | } | 34 | } |
31 | 35 | ||
32 | bool cgi_gateway::has_GET(const string& n) const { | 36 | bool cgi_gateway::has_GET(const string& n) const { |
33 | return get.find(n) != get.end(); | 37 | return get.find(n) != get.end(); |
34 | } | 38 | } |
35 | const string& cgi_gateway::get_GET(const string& n) const { | 39 | const string& cgi_gateway::get_GET(const string& n) const { |
36 | params_t::const_iterator i = get.find(n); | 40 | params_t::const_iterator i = get.find(n); |
37 | if(i==get.end()) | 41 | if(i==get.end()) |
38 | throw exception_notfound(CODEPOINT,"no such parameter"); | 42 | throw exception_notfound(CODEPOINT,"no such parameter"); |
39 | return i->second; | 43 | return i->second; |
40 | } | 44 | } |
41 | bool cgi_gateway::has_POST(const string& n) const { | 45 | bool cgi_gateway::has_POST(const string& n) const { |
42 | return post.find(n) != post.end(); | 46 | return post.find(n) != post.end(); |
43 | } | 47 | } |
44 | const string& cgi_gateway::get_POST(const string& n) const { | 48 | const string& cgi_gateway::get_POST(const string& n) const { |
45 | params_t::const_iterator i = post.find(n); | 49 | params_t::const_iterator i = post.find(n); |
46 | if(i==post.end()) | 50 | if(i==post.end()) |
47 | throw exception_notfound(CODEPOINT,"no such parameter"); | 51 | throw exception_notfound(CODEPOINT,"no such parameter"); |
48 | return i->second; | 52 | return i->second; |
49 | } | 53 | } |
50 | bool cgi_gateway::has_param(const string& n) const { | 54 | bool cgi_gateway::has_param(const string& n) const { |
51 | return has_GET(n) || has_POST(n); | 55 | return has_GET(n) || has_POST(n); |
52 | } | 56 | } |
53 | const string& cgi_gateway::get_param(const string& n) const { | 57 | const string& cgi_gateway::get_param(const string& n) const { |
54 | params_t::const_iterator i = get.find(n); | 58 | params_t::const_iterator i = get.find(n); |
55 | if(i!=get.end()) | 59 | if(i!=get.end()) |
56 | return i->second; | 60 | return i->second; |
57 | i = post.find(n); | 61 | i = post.find(n); |
58 | if(i!=post.end()) | 62 | if(i!=post.end()) |
59 | return i->second; | 63 | return i->second; |
60 | throw exception_notfound(CODEPOINT,"no such parameter"); | 64 | throw exception_notfound(CODEPOINT,"no such parameter"); |
61 | } | 65 | } |
62 | 66 | ||
63 | /* | 67 | /* |
64 | * deprecated stuff. | 68 | * deprecated stuff. |
65 | */ | 69 | */ |
66 | const string& cgi_gateway::get_content_type() const { | 70 | const string& cgi_gateway::get_content_type() const { |
67 | if(!has_meta("CONTENT_TYPE")) | 71 | if(!has_meta("CONTENT_TYPE")) |
68 | return empty_string; | 72 | return empty_string; |
69 | return get_meta("CONTENT_TYPE"); | 73 | return get_meta("CONTENT_TYPE"); |
70 | } | 74 | } |
71 | unsigned long cgi_gateway::get_content_length() const { | 75 | unsigned long cgi_gateway::get_content_length() const { |
72 | if(!has_meta("CONTENT_LENGTH")) | 76 | if(!has_meta("CONTENT_LENGTH")) |
73 | return 0; | 77 | return 0; |
74 | string cl = get_meta("CONTENT_LENGTH"); | 78 | string cl = get_meta("CONTENT_LENGTH"); |
75 | return strtol(cl.c_str(),NULL,10); | 79 | return strtol(cl.c_str(),NULL,10); |
76 | } | 80 | } |
77 | /* | 81 | /* |