From c1bc357d79ee1be97268993442546381e5add1cb Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Fri, 11 Jan 2008 15:20:35 +0000 Subject: [PATCH] 2008-01-12 Tatsuhiro Tsujikawa Set default domain and default path to cookie. * src/HttpResponse.cc * src/CookieBox.{h, cc} * src/CookieParser.{h, cc} * test/CookieParserTest.cc --- ChangeLog | 8 ++++++++ src/CookieBox.cc | 5 +++-- src/CookieBox.h | 3 ++- src/CookieParser.cc | 7 +++++++ src/CookieParser.h | 2 ++ src/HttpResponse.cc | 4 +++- test/CookieParserTest.cc | 6 +++--- 7 files changed, 28 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5e64b8fb..76d06148 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2008-01-12 Tatsuhiro Tsujikawa + + Set default domain and default path to cookie. + * src/HttpResponse.cc + * src/CookieBox.{h, cc} + * src/CookieParser.{h, cc} + * test/CookieParserTest.cc + 2008-01-11 Tatsuhiro Tsujikawa Added --no-conf and --conf-path command-line option. diff --git a/src/CookieBox.cc b/src/CookieBox.cc index 63a5eaec..80869079 100644 --- a/src/CookieBox.cc +++ b/src/CookieBox.cc @@ -44,8 +44,9 @@ void CookieBox::add(const Cookie& cookie) { cookies.push_back(cookie); } -void CookieBox::add(const string& cookieStr) { - Cookie c = CookieParser().parse(cookieStr); +void CookieBox::add(const string& cookieStr, const string& defaultDomain, const string& defaultPath) +{ + Cookie c = CookieParser().parse(cookieStr, defaultDomain, defaultPath); if(c.good()) { cookies.push_back(c); } diff --git a/src/CookieBox.h b/src/CookieBox.h index a734508f..288dc662 100644 --- a/src/CookieBox.h +++ b/src/CookieBox.h @@ -46,7 +46,8 @@ public: ~CookieBox(); void clear(); void add(const Cookie& cookie); - void add(const string& cookieStr); + void add(const string& cookieStr, + const string& defaultDomain, const string& defaultPath); void add(const Cookies& cookies); Cookies criteriaFind(const string& host, const string& dir, time_t date, bool secure) const; }; diff --git a/src/CookieParser.cc b/src/CookieParser.cc index c7702eba..0c2628d5 100644 --- a/src/CookieParser.cc +++ b/src/CookieParser.cc @@ -54,8 +54,15 @@ void CookieParser::setField(Cookie& cookie, const string& name, const string& va } Cookie CookieParser::parse(const string& cookieStr) const +{ + return parse(cookieStr, "", ""); +} + +Cookie CookieParser::parse(const string& cookieStr, const string& defaultDomain, const string& defaultPath) const { Cookie cookie; + cookie.domain = defaultDomain; + cookie.path = defaultPath; Strings terms; Util::slice(terms, Util::trim(cookieStr), ';', true); for(Strings::iterator itr = terms.begin(); itr != terms.end(); itr++) { diff --git a/src/CookieParser.h b/src/CookieParser.h index 8974971a..43ba2812 100644 --- a/src/CookieParser.h +++ b/src/CookieParser.h @@ -47,6 +47,8 @@ public: ~CookieParser() {} + Cookie parse(const string& cookieStr, const string& defaultDomain, const string& defaultPath) const; + Cookie parse(const string& cookieStr) const; Cookies parse(istream& s) const; diff --git a/src/HttpResponse.cc b/src/HttpResponse.cc index 1f62ce96..a5e95d4a 100644 --- a/src/HttpResponse.cc +++ b/src/HttpResponse.cc @@ -88,7 +88,9 @@ void HttpResponse::retrieveCookie() { Strings v = httpHeader->get("Set-Cookie"); for(Strings::const_iterator itr = v.begin(); itr != v.end(); itr++) { - httpRequest->getRequest()->cookieBox->add(*itr); + string domain = httpRequest->getRequest()->getHost(); + string path = httpRequest->getDir(); + httpRequest->getRequest()->cookieBox->add(*itr, domain, path); } } diff --git a/test/CookieParserTest.cc b/test/CookieParserTest.cc index 4157ae97..cff6d7df 100644 --- a/test/CookieParserTest.cc +++ b/test/CookieParserTest.cc @@ -38,13 +38,13 @@ void CookieParserTest::testParse() CPPUNIT_ASSERT_EQUAL(false, c.onetime); string str2 = "JSESSIONID=123456789"; - c = CookieParser().parse(str2); + c = CookieParser().parse(str2, "default.domain", "/default/path"); CPPUNIT_ASSERT(c.good()); CPPUNIT_ASSERT_EQUAL(string("JSESSIONID"), c.name); CPPUNIT_ASSERT_EQUAL(string("123456789"), c.value); CPPUNIT_ASSERT_EQUAL((time_t)0, c.expires); - CPPUNIT_ASSERT_EQUAL(string(""), c.path); - CPPUNIT_ASSERT_EQUAL(string(""), c.domain); + CPPUNIT_ASSERT_EQUAL(string("default.domain"), c.domain); + CPPUNIT_ASSERT_EQUAL(string("/default/path"), c.path); CPPUNIT_ASSERT_EQUAL(false, c.secure); CPPUNIT_ASSERT_EQUAL(true, c.onetime);