summaryrefslogtreecommitdiffabout
path: root/include/kingate
Unidiff
Diffstat (limited to 'include/kingate') (more/less context) (ignore whitespace changes)
-rw-r--r--include/kingate/cgi_gateway.h117
-rw-r--r--include/kingate/exception.h9
-rw-r--r--include/kingate/util.h35
3 files changed, 149 insertions, 12 deletions
diff --git a/include/kingate/cgi_gateway.h b/include/kingate/cgi_gateway.h
index f683580..a5c4056 100644
--- a/include/kingate/cgi_gateway.h
+++ b/include/kingate/cgi_gateway.h
@@ -1,164 +1,269 @@
1#ifndef __KINGATE_CGI_GATEWAY_H 1#ifndef __KINGATE_CGI_GATEWAY_H
2#define __KINGATE_CGI_GATEWAY_H 2#define __KINGATE_CGI_GATEWAY_H
3 3
4#include <map> 4#include <map>
5#include "kingate/cgi_interface.h" 5#include "kingate/cgi_interface.h"
6 6
7#ifndef __deprecated
8#if ( __GNUC__ == 3 && __GNUC_MINOR__ > 0 ) || __GNUC__ > 3
9#define __deprecated __attribute__((deprecated))
10#else
11#define __deprecated
12#endif
13#endif
14
7/** 15/**
8 * @file 16 * @file
9 * @brief the cgi_gateway -- main interface to CGI. 17 * @brief the cgi_gateway -- main interface to CGI.
10 */ 18 */
11 19
12namespace kingate { 20namespace kingate {
13 using namespace std; 21 using namespace std;
14 22
15 /** 23 /**
16 * The main class interfacing with the CGI environment. 24 * The main class interfacing with the CGI environment.
17 */ 25 */
18 class cgi_gateway { 26 class cgi_gateway {
19 public: 27 public:
20 /** 28 /**
21 * The interface to CGI environment (e.g. fastcgi). 29 * The interface to CGI environment (e.g. fastcgi).
22 */ 30 */
23 cgi_interface& iface; 31 cgi_interface& iface;
24 /** 32 /**
25 * The type describing map holding parameters parsed from query string or input. 33 * The type describing map holding parameters parsed from query string or input.
26 */ 34 */
27 typedef multimap<string,string> params_t; 35 typedef multimap<string,string> params_t;
28 /** 36 /**
29 * The GET-passed parameters. 37 * The GET-passed parameters.
30 */ 38 */
31 params_t get; 39 params_t get;
32 /** 40 /**
33 * The POST-passed parameters. 41 * The POST-passed parameters.
34 */ 42 */
35 params_t post; 43 params_t post;
36 /** 44 /**
37 * Was the stdin content parsed? 45 * Was the stdin content parsed?
38 */ 46 */
39 bool b_parsed_content; 47 bool b_parsed_content;
40 48
41 /** 49 /**
42 * @param ci the interface to use. 50 * @param ci the interface to use.
43 */ 51 */
44 cgi_gateway(cgi_interface& ci); 52 cgi_gateway(cgi_interface& ci);
45 53
46 /** 54 /**
47 * Check whether there is an 'environment' meta-variable with specific name 55 * Check whether there is an 'environment' meta-variable with specific name
48 * passed to CGI. 56 * passed to CGI.
49 * @param n variable name. 57 * @param n variable name.
50 * @return true if yes. 58 * @return true if yes.
51 * @see cgi_interface::has_meta() 59 * @see cgi_interface::has_meta()
52 * @see get_meta() 60 * @see get_meta()
53 */ 61 */
54 bool has_meta(const string& n) const { return iface.has_meta(n); } 62 bool has_meta(const string& n) const { return iface.has_meta(n); }
55 /** 63 /**
56 * Retrieve the 'environment' meta-variable value. 64 * Retrieve the 'environment' meta-variable value.
57 * @param n variable name. 65 * @param n variable name.
58 * @return variable contents. 66 * @return variable contents.
59 * @see exception_notfound 67 * @see exception_notfound
60 * @see cgi_interface::get_meta() 68 * @see cgi_interface::get_meta()
61 */ 69 */
62 string get_meta(const string& n) const { return iface.get_meta(n); } 70 const string& get_meta(const string& n) const { return iface.get_meta(n); }
63 71
64 /** 72 /**
65 * fetch reference to the 'stdin' stream. 73 * fetch reference to the 'stdin' stream.
66 * @return the reference to the corresponding istream object. 74 * @return the reference to the corresponding istream object.
67 * @see cgi_interface::in() 75 * @see cgi_interface::in()
68 */ 76 */
69 istream& in() { return iface.in(); } 77 istream& in() { return iface.in(); }
70 /** 78 /**
71 * fetch reference to the 'stdout' stream. 79 * fetch reference to the 'stdout' stream.
72 * @return the reference to the corresponding ostream object. 80 * @return the reference to the corresponding ostream object.
73 * @see cgi_interface::out() 81 * @see cgi_interface::out()
74 */ 82 */
75 ostream& out() { return iface.out(); } 83 ostream& out() { return iface.out(); }
76 /** 84 /**
77 * fetch reference to the 'stderr' stream. 85 * fetch reference to the 'stderr' stream.
78 * @return the reference to the corresponding ostream object. 86 * @return the reference to the corresponding ostream object.
79 * @see cgi_interface::err() 87 * @see cgi_interface::err()
80 */ 88 */
81 ostream& err() { return iface.err(); } 89 ostream& err() { return iface.err(); }
82 /** 90 /**
83 * cast to the ostream -- fetches the reference to the 'stdout' 91 * cast to the ostream -- fetches the reference to the 'stdout'
84 * stream. 92 * stream.
85 * @see out() 93 * @see out()
86 */ 94 */
87 operator ostream& (void) { return out(); } 95 operator ostream& (void) { return out(); }
88 96
89 /** 97 /**
90 * Check to see whether the parameter was passed via GET. 98 * Check to see whether the parameter was passed via GET.
91 * @param n the parameter name. 99 * @param n the parameter name.
92 * @return true if yes. 100 * @return true if yes.
93 */ 101 */
94 bool has_GET(const string& n) const; 102 bool has_GET(const string& n) const;
95 /** 103 /**
96 * Retrieve the parameter passed via GET. 104 * Retrieve the parameter passed via GET.
97 * @param n the parameter name. 105 * @param n the parameter name.
98 * @return the parameter contents. 106 * @return the parameter contents.
99 * @see exception_notfound 107 * @see exception_notfound
100 */ 108 */
101 string get_GET(const string& n) const; 109 const string& get_GET(const string& n) const;
102 /** 110 /**
103 * Check to see whether the parameter was passed via POST. 111 * Check to see whether the parameter was passed via POST.
104 * @param n the parameter name. 112 * @param n the parameter name.
105 * @return true if yes. 113 * @return true if yes.
106 */ 114 */
107 bool has_POST(const string& n) const; 115 bool has_POST(const string& n) const;
108 /** 116 /**
109 * Retrieve the POST-parameter. 117 * Retrieve the POST-parameter.
110 * @param n the parameter name. 118 * @param n the parameter name.
111 * @return the parameter contents. 119 * @return the parameter contents.
112 * @see exception_notfound 120 * @see exception_notfound
113 */ 121 */
114 string get_POST(const string& n) const; 122 const string& get_POST(const string& n) const;
115 /** 123 /**
116 * Check to see whether the parameter was passed either via POST or 124 * Check to see whether the parameter was passed either via POST or
117 * GET. 125 * GET.
118 * @param n the parameter name. 126 * @param n the parameter name.
119 * @return true if yes. 127 * @return true if yes.
120 */ 128 */
121 bool has_param(const string& n) const; 129 bool has_param(const string& n) const;
122 /** 130 /**
123 * Retrieve the parameter passed either via POST or GET 131 * Retrieve the parameter passed either via POST or GET
124 * (GET-parameter takes precedence). 132 * (GET-parameter takes precedence).
125 * @param n the parameter name. 133 * @param n the parameter name.
126 * @return true if yes. 134 * @return true if yes.
127 * @see exception_notfound. 135 * @see exception_notfound.
128 */ 136 */
129 string get_param(const string& n) const; 137 const string& get_param(const string& n) const;
130 138
131 /** 139 /**
132 * Retrieve the POST content-type (as passed via CONTENT_TYPE 140 * Retrieve the POST content-type (as passed via CONTENT_TYPE
133 * environment variable). 141 * environment variable).
134 * @return the content type. 142 * @return the content type.
135 */ 143 */
136 const string& get_content_type() const; 144 const string& __deprecated get_content_type() const;
137 /** 145 /**
138 * Retrieve the POST content length (as passed via the 146 * Retrieve the POST content length (as passed via the
139 * CONTENT_LENGTH environment variable). 147 * CONTENT_LENGTH environment variable).
140 * @return the content length. 148 * @return the content length.
141 */ 149 */
142 unsigned long get_content_length() const; 150 unsigned long __deprecated get_content_length() const;
143 151
144 /** 152 /**
145 * Check to see whether the content from stdin stream was parsed. 153 * Check to see whether the content from stdin stream was parsed.
146 * @return true if yes. 154 * @return true if yes.
147 */ 155 */
148 bool is_content_parsed() const { return b_parsed_content; } 156 bool is_content_parsed() const { return b_parsed_content; }
157
158 /**
159 * Retrieve the HTTP header value from the HTTP_ meta-variable.
160 * (see RFC3875)
161 * @param hn header field name.
162 * @return the HTTP header value.
163 */
164 const string& http_request_header(const string& hn) const;
165
166 /**
167 * Retrieve the AUTH_TYPE meta-variable (see RFC3875)
168 * @return authentication type.
169 */
170 const string& auth_type() const;
171 /**
172 * Retrieve the CONTENT_LENGTH meta-variable (see RFC3875)
173 * @return size of the request message body.
174 */
175 unsigned long cgi_gateway::content_length() const;
176 /**
177 * Retrieve the CONTENT_TYPE meta-variable (see RFC3875)
178 * @return media type of the request message body.
179 */
180 const string& content_type() const;
181 /**
182 * Retrieve the GATEWAY_INTERFACE meta-variable (see RFC3875)
183 * @return the gateway interface dialect.
184 */
185 const string& gateway_interface() const;
186 /**
187 * Retrieve the PATH_INFO meta-variable (see RFC3875)
188 * @return path to be interpreted by the script.
189 */
190 const string& path_info() const;
191 /**
192 * Retrieve the PATH_TRANSLATED meta-variable (see RFC3875)
193 * @return the translated path to the document.
194 */
195 const string& path_translated() const;
196 /**
197 * Retrieve the QUERY_STRING meta-variable (see RFC3875)
198 * @return the query string.
199 */
200 const string& query_string() const;
201 /**
202 * Retrieve the REMOTE_ADDR meta-variable (see RFC3875)
203 * @return the network address of the remote host.
204 */
205 const string& remote_addr() const;
206 /**
207 * Retrieve the REMOTE_HOST meta-variable (see RFC3875)
208 * @return the fully qualified domain name of the client if
209 * available. REMOTE_ADDR otherwise.
210 * @see remote_addr()
211 */
212 const string& remote_host() const;
213 /**
214 * Retrieve the REMOTE_IDENT meta-variable (see RFC3875)
215 * @return remote user identity (see RFC1413).
216 */
217 const string& remote_ident() const;
218 /**
219 * Retrieve the REMOTE_USER meta-variable (see RFC3875)
220 * @return the authenticated user name.
221 */
222 const string& remote_user() const;
223 /**
224 * Retrieve the REQUEST_METHOD meta-variable (see RFC3875)
225 * @return the http request method.
226 */
227 const string& request_method() const;
228 /**
229 * Retrieve the SCRIPT_NAME meta-variable (see RFC3875)
230 * @return the uri path identifying the script.
231 */
232 const string& script_name() const;
233 /**
234 * Retrieve the SERVER_NAME meta-variable (see RFC3875)
235 * @return the server name of the script.
236 */
237 const string& server_name() const;
238 /**
239 * Retrieve the SERVER_PORT meta-variable (see RFC3875)
240 * @return the port on which request was received.
241 */
242 unsigned int server_port() const;
243 /**
244 * Retrieve the SERVER_PROTOCOL meta-variable (see RFC3875)
245 * @return the protocol used for the request.
246 */
247 const string& server_protocol() const;
248 /**
249 * Retrieve the SERVER_SOFTWARE meta-variable (see RFC3875)
250 * @return the name and version of server software.
251 */
252 const string& server_software() const;
253
149 private: 254 private:
150 /** 255 /**
151 * Parse the query string, putting the parameters into the map 256 * Parse the query string, putting the parameters into the map
152 * specified. 257 * specified.
153 * @param q the query string. 258 * @param q the query string.
154 * @param p destination parameters map. 259 * @param p destination parameters map.
155 */ 260 */
156 static void parse_query(string& q,params_t& p); 261 static void parse_query(string& q,params_t& p);
157 }; 262 };
158 263
159} 264}
160 265
161#endif /* __KINGATE_CGI_GATEWAY_H */ 266#endif /* __KINGATE_CGI_GATEWAY_H */
162/* 267/*
163 * vim:set ft=cpp: 268 * vim:set ft=cpp:
164 */ 269 */
diff --git a/include/kingate/exception.h b/include/kingate/exception.h
index 6ebb361..85d89ea 100644
--- a/include/kingate/exception.h
+++ b/include/kingate/exception.h
@@ -1,44 +1,53 @@
1#ifndef __KINGATE_EXCEPTION_H 1#ifndef __KINGATE_EXCEPTION_H
2#define __KINGATE_EXCEPTION_H 2#define __KINGATE_EXCEPTION_H
3 3
4#include <stdexcept> 4#include <stdexcept>
5#include <konforka/exception.h> 5#include <konforka/exception.h>
6 6
7/** 7/**
8 * @file 8 * @file
9 * @brief The kingate-specific exceptions. 9 * @brief The kingate-specific exceptions.
10 */ 10 */
11 11
12/** 12/**
13 * @brief the main kingate namespace. 13 * @brief the main kingate namespace.
14 */ 14 */
15namespace kingate { 15namespace kingate {
16 using namespace std; 16 using namespace std;
17 17
18 /** 18 /**
19 * The base for kingate-specific exception. 19 * The base for kingate-specific exception.
20 */ 20 */
21 class exception : public konforka::exception { 21 class exception : public konforka::exception {
22 public: 22 public:
23 explicit exception(const string& w) 23 explicit exception(const string& w)
24 : konforka::exception(NOCODEPOINT,w) { } 24 : konforka::exception(NOCODEPOINT,w) { }
25 exception(const string& fi,const string& fu,int l,const string &w) 25 exception(const string& fi,const string& fu,int l,const string &w)
26 : konforka::exception(fi,fu,l,w) { } 26 : konforka::exception(fi,fu,l,w) { }
27 }; 27 };
28 28
29 /** 29 /**
30 * Thrown if the specified variable or parameter wasn't found. 30 * Thrown if the specified variable or parameter wasn't found.
31 */ 31 */
32 class exception_notfound : public exception { 32 class exception_notfound : public exception {
33 public: 33 public:
34 explicit exception_notfound(const string& w) 34 explicit exception_notfound(const string& w)
35 : exception(w) { } 35 : exception(w) { }
36 exception_notfound(const string& fi,const string& fu,int l,const string& w) 36 exception_notfound(const string& fi,const string& fu,int l,const string& w)
37 : exception(fi,fu,l,w) { } 37 : exception(fi,fu,l,w) { }
38 }; 38 };
39
40 /**
41 * Thrown in case of unexpected server behaviour.
42 */
43 class server_error : public exception {
44 public:
45 server_error(const string& fi,const string& fu,int l,const string& w)
46 : exception(fi,fu,l,w) { }
47 };
39} 48}
40 49
41#endif /* __KINGATE_EXCEPTION_H */ 50#endif /* __KINGATE_EXCEPTION_H */
42/* 51/*
43 * vim:set ft=cpp: 52 * vim:set ft=cpp:
44 */ 53 */
diff --git a/include/kingate/util.h b/include/kingate/util.h
index 4b0dca8..6024ccf 100644
--- a/include/kingate/util.h
+++ b/include/kingate/util.h
@@ -1,26 +1,49 @@
1#ifndef __KINGATE_UTIL_H 1#ifndef __KINGATE_UTIL_H
2#define __KINGATE_UTIL_H 2#define __KINGATE_UTIL_H
3 3
4#include <string> 4#include <string>
5 5
6#ifndef __deprecated
7#if ( __GNUC__ == 3 && __GNUC_MINOR__ > 0 ) || __GNUC__ > 3
8#define __deprecated __attribute__((deprecated))
9#else
10#define __deprecated
11#endif
12#endif
13
6namespace kingate { 14namespace kingate {
7 using namespace std; 15 using namespace std;
8 16
9 /** 17 /**
10 * Escape string for passing via URL. 18 * Encode string for passing via URL.
11 * @param str string unescaped. 19 * @param str string unencoded.
12 * @return the escaped string. 20 * @return the encoded string.
13 */ 21 */
14 string url_escape(const string& str); 22 string url_encode(const string& str);
15 /** 23 /**
16 * Remove URL-encoding from the string. 24 * Remove URL-encoding from the string.
17 * @param str the URL-encoded string. 25 * @param str the URL-encoded string.
18 * @return the unescaped string. 26 * @return the decoded string.
27 */
28 string url_decode(const string& str);
29
30 /**
31 * deprecated alias to url_encode.
32 * @see url_encode
33 */
34 inline string __deprecated url_escape(const string& str) {
35 return url_encode(str);
36 }
37 /**
38 * deprecated alias to url_decode.
39 * @see url_decode
19 */ 40 */
20 string url_unescape(const string& str); 41 inline string __deprecated url_unescape(const string& str) {
42 return url_decode(str);
43 }
21} 44}
22 45
23#endif /* __KINGATE_UTIL_H */ 46#endif /* __KINGATE_UTIL_H */
24/* 47/*
25 * vim:set ft=cpp: 48 * vim:set ft=cpp:
26 */ 49 */