-rw-r--r-- | include/kingate/cookies.h | 300 |
1 files changed, 300 insertions, 0 deletions
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 | |||
13 | namespace 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 */ | ||