summaryrefslogtreecommitdiffabout
path: root/include
Unidiff
Diffstat (limited to 'include') (more/less context) (ignore whitespace changes)
-rw-r--r--include/Makefile.am4
-rw-r--r--include/kingate/cgi_gateway.h5
-rw-r--r--include/kingate/cookies.h300
-rw-r--r--include/kingate/headers.h94
-rw-r--r--include/kingate/util.h13
5 files changed, 415 insertions, 1 deletions
diff --git a/include/Makefile.am b/include/Makefile.am
index e0b778b..ee5cd51 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -4,4 +4,6 @@ nobase_include_HEADERS = \
4 kingate/fastcgi.h \ 4 kingate/fastcgi.h \
5 kingate/exception.h \ 5 kingate/exception.h \
6 kingate/util.h \ 6 kingate/util.h \
7 kingate/plaincgi.h 7 kingate/plaincgi.h \
8 kingate/cookies.h \
9 kingate/headers.h
diff --git a/include/kingate/cgi_gateway.h b/include/kingate/cgi_gateway.h
index a5c4056..f20d72b 100644
--- a/include/kingate/cgi_gateway.h
+++ b/include/kingate/cgi_gateway.h
@@ -3,6 +3,7 @@
3 3
4#include <map> 4#include <map>
5#include "kingate/cgi_interface.h" 5#include "kingate/cgi_interface.h"
6#include "kingate/cookies.h"
6 7
7#ifndef __deprecated 8#ifndef __deprecated
8#if ( __GNUC__ == 3 && __GNUC_MINOR__ > 0 ) || __GNUC__ > 3 9#if ( __GNUC__ == 3 && __GNUC_MINOR__ > 0 ) || __GNUC__ > 3
@@ -42,6 +43,10 @@ namespace kingate {
42 */ 43 */
43 params_t post; 44 params_t post;
44 /** 45 /**
46 * Cookies passed.
47 */
48 cookies_t cookies;
49 /**
45 * Was the stdin content parsed? 50 * Was the stdin content parsed?
46 */ 51 */
47 bool b_parsed_content; 52 bool b_parsed_content;
diff --git a/include/kingate/cookies.h b/include/kingate/cookies.h
new file mode 100644
index 0000000..83ef0c6
--- a/dev/null
+++ b/include/kingate/cookies.h
@@ -0,0 +1,300 @@
1#ifndef __KINGATE_COOKIES_H
2#define __KINGATE_COOKIES_H
3
4#include <string>
5#include <map>
6#include <ostream>
7
8/**
9 * @file
10 * @brief cookies-related classes.
11 */
12
13namespace kingate {
14 using namespace std;
15
16 /**
17 * Class, holding the cookie with parameters.
18 */
19 class cookie : public map<string,string> {
20 public:
21 /**
22 * Cookie name.
23 */
24 string name;
25 /**
26 * Cookie value.
27 */
28 string value;
29
30 cookie() { }
31 /**
32 * @param n cookie name.
33 * @param v cookie value.
34 */
35 cookie(const string& n,const string& v)
36 : name(n), value(v) { }
37
38 /**
39 * set cookie parameter.
40 * @param p parameter name.
41 * @param v parameter value.
42 * @see _get_string()
43 */
44 void _set_string(const string& p,const string& v);
45
46 /**
47 * @param n cookie name.
48 * @see get_name()
49 */
50 void set_name(const string& n) { name = n; }
51 /**
52 * @param v cookie value.
53 * @see set_value()
54 */
55 void set_value(const string& v) { value = v; }
56 /**
57 * @param c coomment.
58 * @see get_comment()
59 * @see has_comment()
60 * @see unset_comment()
61 */
62 void set_comment(const string& c);
63 /**
64 * @param d domain.
65 * @see get_domain()
66 * @see has_domain()
67 * @see unset_domain()
68 */
69 void set_domain(const string& d);
70 /**
71 * @param ma max-age.
72 * @see get_max_age()
73 * @see has_max_age()
74 * @see unset_max_age()
75 */
76 void set_max_age(const string& ma);
77 /**
78 * @param p path.
79 * @see get_path()
80 * @see has_path()
81 * @see unset_path()
82 */
83 void set_path(const string& p);
84 /**
85 * set cookie security.
86 * @param s true if secure.
87 * @see get_secure()
88 * @see is_secure()
89 */
90 void set_secure(bool s);
91
92 /**
93 * @param e expiration time.
94 * @see get_expires()
95 * @see has_expires()
96 * @see unset_expires()
97 */
98 void set_expires(const string& e);
99
100 /**
101 * get cookie parameter.
102 * @param p parameter name.
103 * @return parameter value.
104 * @see _set_string()
105 */
106 const string& _get_string(const string& p) const;
107
108 /**
109 * @return cookie name.
110 * @see set_name()
111 */
112 const string& get_name() const { return name; }
113 /**
114 * @return cookie value.
115 * @see set_value()
116 */
117 const string& get_value() const { return value; }
118 /**
119 * @return cookie comment.
120 * @see set_comment()
121 * @see has_comment()
122 * @see unset_comment()
123 */
124 const string& get_comment() const;
125 /**
126 * @return cookie domain.
127 * @see set_domain()
128 * @see has_domain()
129 * @see unset_domain()
130 */
131 const string& get_domain() const;
132 /**
133 * @return cookie max-age.
134 * @see set_max_age()
135 * @see has_max_age()
136 * @see unset_max_age()
137 */
138 const string& get_max_age() const;
139 /**
140 * @return cookie path.
141 * @see set_path()
142 * @see has_path()
143 * @see unset_path()
144 */
145 const string& get_path() const;
146 /**
147 * @return cookie security.
148 * @see is_secure()
149 * @see set_secure()
150 */
151 bool get_secure() const;
152 /**
153 * @return cookie security.
154 * @see get_secure()
155 * @see set_secure()
156 */
157 bool is_secure() const { return get_secure(); }
158
159 /**
160 * @return cookie expiration time.
161 * @see set_expires()
162 * @see has_expires()
163 * @see unset_expires()
164 */
165 const string& get_expires() const;
166
167 /**
168 * @return true if cookie has comment.
169 * @see set_comment()
170 * @see get_comment()
171 * @see unset_comment()
172 */
173 bool has_comment() const;
174 /**
175 * @return true if cookie has domain.
176 * @see set_domain()
177 * @see get_domain()
178 * @see unset_domain()
179 */
180 bool has_domain() const;
181 /**
182 * @return true if cookie has max-age.
183 * @see set_max_age()
184 * @see get_max_age()
185 * @see unset_max_age()
186 */
187 bool has_max_age() const;
188 /**
189 * @return true if cookie has path.
190 * @see set_path()
191 * @see get_path()
192 * @see unset_path()
193 */
194 bool has_path() const;
195
196 /**
197 * @return true if cookie has expiration time.
198 * @see set_expires()
199 * @see get_expires()
200 * @see unset_expires()
201 */
202 bool has_expires() const;
203
204 /**
205 * rid cookie of comment.
206 * @see set_comment()
207 * @see get_comment()
208 * @see has_comment()
209 */
210 void unset_comment();
211 /**
212 * rid cookie of domain.
213 * @see set_domain()
214 * @see get_domain()
215 * @see has_domain()
216 */
217 void unset_domain();
218 /**
219 * rid cookie of max-age.
220 * @see set_max_age()
221 * @see get_max_age()
222 * @see has_max_age()
223 */
224 void unset_max_age();
225 /**
226 * rid cookie of path.
227 * @see set_path()
228 * @see get_path()
229 * @see has_path()
230 */
231 void unset_path();
232
233 /**
234 * rid cookie of expiration time.
235 * @see set_expires()
236 * @see get_expires()
237 * @see has_expires()
238 */
239 void unset_expires();
240
241 /**
242 * render the 'Set-Cookie' HTTP header according to RFC2109.
243 * Absolutely useless, only works with lynx.
244 * @return the rendered header content.
245 */
246 string set_cookie_header_rfc2109() const;
247 /**
248 * render the 'Set-Cookie' header according to the early vague
249 * netscape specs and common practice.
250 * @return the rendered header content.
251 */
252 string set_cookie_header() const;
253 };
254
255 /**
256 * Cookies container class.
257 */
258 class cookies_t : public map<string,cookie> {
259 public:
260
261 cookies_t() { }
262 /**
263 * @param s 'Cookie:' HTTP header contents to parse.
264 */
265 cookies_t(const string& s) { parse_cookies(s); }
266
267 /**
268 * @param c cookie to set.
269 */
270 void set_cookie(const cookie& c) { (*this)[c.get_name()]=c; }
271 /**
272 * @param n cookie name to remove.
273 */
274 void unset_cookie(const key_type& n) { erase(n); }
275 /**
276 * @param n cookie name.
277 * @return true if exists.
278 */
279 bool has_cookie(const key_type& n) const;
280 /**
281 * Return the named cookie if one exists.
282 * @param n cookie name.
283 * @return const reference to cookie object.
284 */
285 const cookie& get_cookie(const key_type& n) const;
286 /**
287 * Return the named cookie if one exists.
288 * @param n cookie name.
289 * @return reference to cookie object.
290 */
291 cookie& get_cookie(const key_type& n);
292
293 /**
294 * @param s HTTP 'Cookie' header content.
295 */
296 void parse_cookies(const string& s);
297 };
298}
299
300#endif /* __KINGATE_COOKIES_H */
diff --git a/include/kingate/headers.h b/include/kingate/headers.h
new file mode 100644
index 0000000..fb37fec
--- a/dev/null
+++ b/include/kingate/headers.h
@@ -0,0 +1,94 @@
1#ifndef __KINGATE_HEADERS_H
2#define __KINGATE_HEADERS_H
3
4#include <string>
5#include <map>
6#include <ostream>
7
8/**
9 * @file
10 * @brief the headers -- HTTP headers container class.
11 */
12
13namespace kingate {
14 using namespace std;
15
16 /**
17 * The container class for HTTP headers.
18 */
19 class headers : public multimap<string,string> {
20 public:
21
22 /**
23 * Reference header if one exists.
24 * @param k the header.
25 * @return reference to the content.
26 */
27 const mapped_type& operator[](const key_type& k) const {
28 return get_header(k);
29 }
30 /**
31 * Reference header, creating one if needed.
32 * @param k the header.
33 * @return reference to the content.
34 */
35 mapped_type& operator[](const key_type& k) {
36 return get_header(k);
37 }
38
39 /**
40 * Set HTTP header. Remove all existent occurences of headers with
41 * this name.
42 * @param h header name.
43 * @param c header content.
44 */
45 void set_header(const key_type& h,const mapped_type& c);
46 /**
47 * Add HTTP header.
48 * @param h header name.
49 * @param c header content.
50 */
51 void add_header(const key_type& h,const mapped_type& c);
52 /**
53 * Remove named header.
54 * @param h header name.
55 */
56 void unset_header(const key_type& h);
57 /**
58 * Return const reference to the existing header.
59 * @param h header name.
60 * @return reference to header content.
61 */
62 const mapped_type& get_header(const key_type& h) const;
63 /**
64 * Return reference to the header, creating one if needed.
65 * @param h header name.
66 * @return reference to the content.
67 */
68 mapped_type& get_header(const key_type& h);
69 /**
70 * Return the range of headers with a certain name.
71 * @param h header name.
72 * @return pair of const iterators with the beginning and the end
73 * of range.
74 */
75 pair<const_iterator,const_iterator> get_headers(const key_type& h) const;
76 /**
77 * Return the range of headers with a certain name.
78 * @param h header name.
79 * @return pair of iterators with the beginning and the end
80 * of range.
81 */
82 pair<iterator,iterator> get_headers(const key_type& h);
83 /**
84 * Inquire whether the named header exists.
85 * @param h header name.
86 * @return true if exists.
87 */
88 bool has_header(const key_type& h) const;
89
90 };
91
92}
93
94#endif /* __KINGATE_HEADERS_H */
diff --git a/include/kingate/util.h b/include/kingate/util.h
index 6024ccf..3fd96f6 100644
--- a/include/kingate/util.h
+++ b/include/kingate/util.h
@@ -28,6 +28,19 @@ namespace kingate {
28 string url_decode(const string& str); 28 string url_decode(const string& str);
29 29
30 /** 30 /**
31 * Quote string for use in HTTP header.
32 * @param str the string to quote.
33 * @return the quoted string.
34 */
35 string http_quoted_string(const string& str);
36 /**
37 * Quote string for use in HTTP header if necessary.
38 * @param str the string to quote.
39 * @return the quoted string or token left as is.
40 */
41 string http_quote(const string& str);
42
43 /**
31 * deprecated alias to url_encode. 44 * deprecated alias to url_encode.
32 * @see url_encode 45 * @see url_encode
33 */ 46 */