-rw-r--r-- | src/cookies.cc | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/cookies.cc b/src/cookies.cc index 40a0c8b..1ee4f7c 100644 --- a/src/cookies.cc +++ b/src/cookies.cc | |||
@@ -162,48 +162,52 @@ namespace kingate { | |||
162 | string rv = name + "=" + http_quoted_string(value); | 162 | string rv = name + "=" + http_quoted_string(value); |
163 | for(const_iterator i=begin();i!=end();++i) { | 163 | for(const_iterator i=begin();i!=end();++i) { |
164 | if(i->first=="secure") { | 164 | if(i->first=="secure") { |
165 | rv += "; secure"; | 165 | rv += "; secure"; |
166 | }else{ | 166 | }else{ |
167 | rv += "; "+i->first+"="+http_quote(i->second); | 167 | rv += "; "+i->first+"="+http_quote(i->second); |
168 | } | 168 | } |
169 | } | 169 | } |
170 | rv += "; Version=1"; | 170 | rv += "; Version=1"; |
171 | return rv; | 171 | return rv; |
172 | } | 172 | } |
173 | 173 | ||
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) { |
198 | iterator i=find(n); | 202 | iterator i=find(n); |
199 | if(i==end()) | 203 | if(i==end()) |
200 | throw exception_notfound(CODEPOINT,"No cookie with such name found"); | 204 | throw exception_notfound(CODEPOINT,"No cookie with such name found"); |
201 | return i->second; | 205 | return i->second; |
202 | } | 206 | } |
203 | 207 | ||
204 | void cookies_t::parse_cookies(const string& s) { | 208 | void cookies_t::parse_cookies(const string& s) { |
205 | string str = s; | 209 | string str = s; |
206 | while(!str.empty()) { | 210 | while(!str.empty()) { |
207 | string::size_type sc = str.find(';'); | 211 | string::size_type sc = str.find(';'); |
208 | string s; | 212 | string s; |
209 | if(sc==string::npos) { | 213 | if(sc==string::npos) { |
@@ -213,30 +217,29 @@ namespace kingate { | |||
213 | s = str.substr(0,sc); | 217 | s = str.substr(0,sc); |
214 | str.erase(0,sc+1); | 218 | str.erase(0,sc+1); |
215 | } | 219 | } |
216 | string::size_type nsp=s.find_first_not_of(" \t"); | 220 | string::size_type nsp=s.find_first_not_of(" \t"); |
217 | if((nsp!=string::npos) && nsp) | 221 | if((nsp!=string::npos) && nsp) |
218 | s.erase(0,nsp); | 222 | s.erase(0,nsp); |
219 | string::size_type eq=s.find('='); | 223 | string::size_type eq=s.find('='); |
220 | if(eq==string::npos) | 224 | if(eq==string::npos) |
221 | continue; | 225 | continue; |
222 | string n = s.substr(0,eq); | 226 | string n = s.substr(0,eq); |
223 | s.erase(0,eq+1); | 227 | s.erase(0,eq+1); |
224 | nsp = n.find_last_not_of(" \t"); | 228 | nsp = n.find_last_not_of(" \t"); |
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 | } |