summaryrefslogtreecommitdiffabout
path: root/src/cgi_gateway.cc
Unidiff
Diffstat (limited to 'src/cgi_gateway.cc') (more/less context) (ignore whitespace changes)
-rw-r--r--src/cgi_gateway.cc4
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
7namespace kingate { 7namespace 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 /*