author | Michael Krelin <hacker@klever.net> | 2005-07-19 13:08:58 (UTC) |
---|---|---|
committer | Michael Krelin <hacker@klever.net> | 2005-07-19 13:08:58 (UTC) |
commit | db69589bdc32c60b1fce6700a35d4126058bf7bc (patch) (unidiff) | |
tree | 34727675eaeb4210436a9b61119c7484dbc0cd97 | |
parent | 9cc67ea5af191d5bc1f26506c35d8387a05361c2 (diff) | |
download | kingate-db69589bdc32c60b1fce6700a35d4126058bf7bc.zip kingate-db69589bdc32c60b1fce6700a35d4126058bf7bc.tar.gz kingate-db69589bdc32c60b1fce6700a35d4126058bf7bc.tar.bz2 |
turned cookies into multimap
-rw-r--r-- | include/kingate/cgi_gateway.h | 1 | ||||
-rw-r--r-- | include/kingate/cookies.h | 4 | ||||
-rw-r--r-- | src/cookies.cc | 7 |
3 files changed, 7 insertions, 5 deletions
diff --git a/include/kingate/cgi_gateway.h b/include/kingate/cgi_gateway.h index a26b0ae..087f7d0 100644 --- a/include/kingate/cgi_gateway.h +++ b/include/kingate/cgi_gateway.h | |||
@@ -298,25 +298,24 @@ namespace kingate { | |||
298 | unsigned int server_port() const; | 298 | unsigned int server_port() const; |
299 | /** | 299 | /** |
300 | * Retrieve the SERVER_PROTOCOL meta-variable (see RFC3875) | 300 | * Retrieve the SERVER_PROTOCOL meta-variable (see RFC3875) |
301 | * @return the protocol used for the request. | 301 | * @return the protocol used for the request. |
302 | */ | 302 | */ |
303 | const string& server_protocol() const; | 303 | const string& server_protocol() const; |
304 | /** | 304 | /** |
305 | * Retrieve the SERVER_SOFTWARE meta-variable (see RFC3875) | 305 | * Retrieve the SERVER_SOFTWARE meta-variable (see RFC3875) |
306 | * @return the name and version of server software. | 306 | * @return the name and version of server software. |
307 | */ | 307 | */ |
308 | const string& server_software() const; | 308 | const string& server_software() const; |
309 | 309 | ||
310 | private: | ||
311 | /** | 310 | /** |
312 | * Parse the query string, putting the parameters into the map | 311 | * Parse the query string, putting the parameters into the map |
313 | * specified. | 312 | * specified. |
314 | * @param q the query string. | 313 | * @param q the query string. |
315 | * @param p destination parameters map. | 314 | * @param p destination parameters map. |
316 | */ | 315 | */ |
317 | static void parse_query(string& q,params_t& p); | 316 | static void parse_query(string& q,params_t& p); |
318 | }; | 317 | }; |
319 | 318 | ||
320 | } | 319 | } |
321 | 320 | ||
322 | #endif /* __KINGATE_CGI_GATEWAY_H */ | 321 | #endif /* __KINGATE_CGI_GATEWAY_H */ |
diff --git a/include/kingate/cookies.h b/include/kingate/cookies.h index 83ef0c6..a1e813c 100644 --- a/include/kingate/cookies.h +++ b/include/kingate/cookies.h | |||
@@ -246,37 +246,37 @@ namespace kingate { | |||
246 | string set_cookie_header_rfc2109() const; | 246 | string set_cookie_header_rfc2109() const; |
247 | /** | 247 | /** |
248 | * render the 'Set-Cookie' header according to the early vague | 248 | * render the 'Set-Cookie' header according to the early vague |
249 | * netscape specs and common practice. | 249 | * netscape specs and common practice. |
250 | * @return the rendered header content. | 250 | * @return the rendered header content. |
251 | */ | 251 | */ |
252 | string set_cookie_header() const; | 252 | string set_cookie_header() const; |
253 | }; | 253 | }; |
254 | 254 | ||
255 | /** | 255 | /** |
256 | * Cookies container class. | 256 | * Cookies container class. |
257 | */ | 257 | */ |
258 | class cookies_t : public map<string,cookie> { | 258 | class cookies_t : public multimap<string,cookie> { |
259 | public: | 259 | public: |
260 | 260 | ||
261 | cookies_t() { } | 261 | cookies_t() { } |
262 | /** | 262 | /** |
263 | * @param s 'Cookie:' HTTP header contents to parse. | 263 | * @param s 'Cookie:' HTTP header contents to parse. |
264 | */ | 264 | */ |
265 | cookies_t(const string& s) { parse_cookies(s); } | 265 | cookies_t(const string& s) { parse_cookies(s); } |
266 | 266 | ||
267 | /** | 267 | /** |
268 | * @param c cookie to set. | 268 | * @param c cookie to set. |
269 | */ | 269 | */ |
270 | void set_cookie(const cookie& c) { (*this)[c.get_name()]=c; } | 270 | void set_cookie(const cookie& c); |
271 | /** | 271 | /** |
272 | * @param n cookie name to remove. | 272 | * @param n cookie name to remove. |
273 | */ | 273 | */ |
274 | void unset_cookie(const key_type& n) { erase(n); } | 274 | void unset_cookie(const key_type& n) { erase(n); } |
275 | /** | 275 | /** |
276 | * @param n cookie name. | 276 | * @param n cookie name. |
277 | * @return true if exists. | 277 | * @return true if exists. |
278 | */ | 278 | */ |
279 | bool has_cookie(const key_type& n) const; | 279 | bool has_cookie(const key_type& n) const; |
280 | /** | 280 | /** |
281 | * Return the named cookie if one exists. | 281 | * Return the named cookie if one exists. |
282 | * @param n cookie name. | 282 | * @param n cookie name. |
diff --git a/src/cookies.cc b/src/cookies.cc index 40a0c8b..1ee4f7c 100644 --- a/src/cookies.cc +++ b/src/cookies.cc | |||
@@ -174,24 +174,28 @@ namespace kingate { | |||
174 | string cookie::set_cookie_header() const { | 174 | string cookie::set_cookie_header() const { |
175 | string rv = name + "=" + value; | 175 | string rv = name + "=" + value; |
176 | for(const_iterator i=begin();i!=end();++i) { | 176 | for(const_iterator i=begin();i!=end();++i) { |
177 | if(i->first=="secure") { | 177 | if(i->first=="secure") { |
178 | rv += "; secure"; | 178 | rv += "; secure"; |
179 | }else{ | 179 | }else{ |
180 | rv += "; "+i->first+"="+i->second; | 180 | rv += "; "+i->first+"="+i->second; |
181 | } | 181 | } |
182 | } | 182 | } |
183 | return rv; | 183 | return rv; |
184 | } | 184 | } |
185 | 185 | ||
186 | void cookies_t::set_cookie(const cookie& c) { | ||
187 | insert(value_type(c.get_name(),c)); | ||
188 | } | ||
189 | |||
186 | bool cookies_t::has_cookie(const key_type& n) const { | 190 | bool cookies_t::has_cookie(const key_type& n) const { |
187 | return find(n)!=end(); | 191 | return find(n)!=end(); |
188 | } | 192 | } |
189 | 193 | ||
190 | const cookie& cookies_t::get_cookie(const key_type& n) const { | 194 | const cookie& cookies_t::get_cookie(const key_type& n) const { |
191 | const_iterator i=find(n); | 195 | const_iterator i=find(n); |
192 | if(i==end()) | 196 | if(i==end()) |
193 | throw exception_notfound(CODEPOINT,"No cookie with such name found"); | 197 | throw exception_notfound(CODEPOINT,"No cookie with such name found"); |
194 | return i->second; | 198 | return i->second; |
195 | } | 199 | } |
196 | 200 | ||
197 | cookie& cookies_t::get_cookie(const key_type& n) { | 201 | cookie& cookies_t::get_cookie(const key_type& n) { |
@@ -225,18 +229,17 @@ namespace kingate { | |||
225 | n.erase(nsp+1); | 229 | n.erase(nsp+1); |
226 | nsp = s.find_first_not_of(" \t"); | 230 | nsp = s.find_first_not_of(" \t"); |
227 | string v; | 231 | string v; |
228 | if(nsp!=string::npos) | 232 | if(nsp!=string::npos) |
229 | v = s.substr(nsp); | 233 | v = s.substr(nsp); |
230 | else | 234 | else |
231 | v = s; | 235 | v = s; |
232 | nsp = v.find_last_not_of(" \t"); | 236 | nsp = v.find_last_not_of(" \t"); |
233 | if(nsp==string::npos) | 237 | if(nsp==string::npos) |
234 | v.erase(); | 238 | v.erase(); |
235 | else | 239 | else |
236 | v.erase(nsp+1); | 240 | v.erase(nsp+1); |
237 | cookie& c = (*this)[n]; | 241 | set_cookie(cookie(n,v)); |
238 | c.set_name(n); c.set_value(v); | ||
239 | } | 242 | } |
240 | } | 243 | } |
241 | 244 | ||
242 | } | 245 | } |