2008-09-07 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>

Parse `expires' of Set-Cookie using Time::parseHTTPDate()
	* src/CookieParser.cc
	* test/CookieParserTest.cc
	* test/HttpResponseTest.cc
pull/1/head
Tatsuhiro Tsujikawa 2008-09-07 04:36:41 +00:00
parent 69b18308d9
commit b624a12ed0
4 changed files with 24 additions and 5 deletions

View File

@ -1,3 +1,10 @@
2008-09-07 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Parse `expires' of Set-Cookie using Time::parseHTTPDate()
* src/CookieParser.cc
* test/CookieParserTest.cc
* test/HttpResponseTest.cc
2008-09-07 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com> 2008-09-07 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Implmented the functions to parse date. Implmented the functions to parse date.

View File

@ -35,6 +35,7 @@
#include "CookieParser.h" #include "CookieParser.h"
#include "Util.h" #include "Util.h"
#include "A2STR.h" #include "A2STR.h"
#include "TimeA2.h"
#include <strings.h> #include <strings.h>
#include <utility> #include <utility>
#include <istream> #include <istream>
@ -77,7 +78,7 @@ Cookie CookieParser::parse(const std::string& cookieStr, const std::string& defa
} }
time_t expiry = -1; time_t expiry = -1;
if(values.find(C_EXPIRES) != values.end()) { if(values.find(C_EXPIRES) != values.end()) {
expiry = Util::httpGMT(values[C_EXPIRES]); expiry = Time::parseHTTPDate(values[C_EXPIRES]).getTime();
} }
if(expiry == -1) { if(expiry == -1) {
return Cookie(nameValue.first, nameValue.second, return Cookie(nameValue.first, nameValue.second,

View File

@ -26,7 +26,7 @@ CPPUNIT_TEST_SUITE_REGISTRATION( CookieParserTest );
void CookieParserTest::testParse() void CookieParserTest::testParse()
{ {
std::string str = "JSESSIONID=123456789; expires=Sun, 2007-06-10 11:00:00 GMT; path=/; domain=localhost; secure"; std::string str = "JSESSIONID=123456789; expires=Sun, 10-Jun-2007 11:00:00 GMT; path=/; domain=localhost; secure";
Cookie c = CookieParser().parse(str); Cookie c = CookieParser().parse(str);
CPPUNIT_ASSERT(c.good()); CPPUNIT_ASSERT(c.good());
CPPUNIT_ASSERT_EQUAL(std::string("JSESSIONID"), c.getName()); CPPUNIT_ASSERT_EQUAL(std::string("JSESSIONID"), c.getName());
@ -52,10 +52,21 @@ void CookieParserTest::testParse()
c = CookieParser().parse(str3); c = CookieParser().parse(str3);
CPPUNIT_ASSERT(!c.good()); CPPUNIT_ASSERT(!c.good());
std::string str4 = "UID=300; expires=Wed, 1890-01-01 0:0:0 GMT;"; std::string str4 = "UID=300; expires=Wed, 01-Jan-1890 00:00:00 GMT;";
c = CookieParser().parse(str4, "localhost", "/"); c = CookieParser().parse(str4, "localhost", "/");
CPPUNIT_ASSERT(c.good()); CPPUNIT_ASSERT(c.good());
CPPUNIT_ASSERT(c.isOnetimeCookie()); CPPUNIT_ASSERT(c.isOnetimeCookie());
std::string str5 = "k=v; expires=Sun, 10-Jun-07 11:00:00 GMT";
c = CookieParser().parse(str5);
CPPUNIT_ASSERT(c.good());
CPPUNIT_ASSERT_EQUAL(std::string("k"), c.getName());
CPPUNIT_ASSERT_EQUAL(std::string("v"), c.getValue());
CPPUNIT_ASSERT_EQUAL((time_t)1181473200, c.getExpiry());
CPPUNIT_ASSERT_EQUAL(std::string(""), c.getDomain());
CPPUNIT_ASSERT_EQUAL(std::string(""), c.getPath());
CPPUNIT_ASSERT(!c.isSecureCookie());
CPPUNIT_ASSERT(!c.isOnetimeCookie());
} }
void CookieParserTest::testParse_file() void CookieParserTest::testParse_file()

View File

@ -471,9 +471,9 @@ void HttpResponseTest::testRetrieveCookie()
httpRequest->setCookieStorage(st); httpRequest->setCookieStorage(st);
httpResponse.setHttpRequest(httpRequest); httpResponse.setHttpRequest(httpRequest);
httpHeader->put("Set-Cookie", "k1=v1; expires=Sun, 2007-06-10 11:00:00 GMT;" httpHeader->put("Set-Cookie", "k1=v1; expires=Sun, 10-Jun-2007 11:00:00 GMT;"
"path=/; domain=.aria2.org;"); "path=/; domain=.aria2.org;");
httpHeader->put("Set-Cookie", "k2=v2; expires=Sun, 2038-01-01 00:00:00 GMT;" httpHeader->put("Set-Cookie", "k2=v2; expires=Sun, 01-Jan-09 00:00:00 GMT;"
"path=/; domain=.aria2.org;"); "path=/; domain=.aria2.org;");
httpHeader->put("Set-Cookie", "k3=v3;"); httpHeader->put("Set-Cookie", "k3=v3;");