summaryrefslogtreecommitdiffabout
path: root/src
authorMichael Krelin <hacker@klever.net>2005-07-19 13:08:58 (UTC)
committer Michael Krelin <hacker@klever.net>2005-07-19 13:08:58 (UTC)
commitdb69589bdc32c60b1fce6700a35d4126058bf7bc (patch) (unidiff)
tree34727675eaeb4210436a9b61119c7484dbc0cd97 /src
parent9cc67ea5af191d5bc1f26506c35d8387a05361c2 (diff)
downloadkingate-db69589bdc32c60b1fce6700a35d4126058bf7bc.zip
kingate-db69589bdc32c60b1fce6700a35d4126058bf7bc.tar.gz
kingate-db69589bdc32c60b1fce6700a35d4126058bf7bc.tar.bz2
turned cookies into multimap
Diffstat (limited to 'src') (more/less context) (show whitespace changes)
-rw-r--r--src/cookies.cc7
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}