Fix various issues with cookie time.
* This is more tricky than it looks. * We probably want easier conversions from struct tm to BDateTime, and direct parsing/formating there.
This commit is contained in:
@@ -100,14 +100,9 @@ BHttpTime::Parse()
|
||||
fDateFormat = B_HTTP_TIME_FORMAT_ASCTIME;
|
||||
}
|
||||
|
||||
// return timegm(&expireTime);
|
||||
// TODO: The above was used initially. See http://en.wikipedia.org/wiki/Time.h
|
||||
// stippi: I don't know how Christophe had this code compiling initially,
|
||||
// since Haiku does not appear to implement timegm().
|
||||
// Using mktime() doesn't cut it, as cookies set with a date shortly in the
|
||||
// future (eg. 1 hour) would expire immediately.
|
||||
BTime time(expireTime.tm_hour, expireTime.tm_min, expireTime.tm_sec);
|
||||
BDate date(expireTime.tm_year, expireTime.tm_mon, expireTime.tm_mday);
|
||||
BDate date(expireTime.tm_year + 1900, expireTime.tm_mon + 1,
|
||||
expireTime.tm_mday);
|
||||
BDateTime dateTime(date, time);
|
||||
return dateTime;
|
||||
}
|
||||
@@ -122,8 +117,8 @@ BHttpTime::ToString(int8 format)
|
||||
expirationTm.tm_min = fDate.Time().Minute();
|
||||
expirationTm.tm_hour = fDate.Time().Hour();
|
||||
expirationTm.tm_mday = fDate.Date().Day();
|
||||
expirationTm.tm_mon = fDate.Date().Month();
|
||||
expirationTm.tm_year = fDate.Date().Day();
|
||||
expirationTm.tm_mon = fDate.Date().Month() - 1;
|
||||
expirationTm.tm_year = fDate.Date().Year() - 1900;
|
||||
expirationTm.tm_wday = 0;
|
||||
expirationTm.tm_yday = 0;
|
||||
expirationTm.tm_isdst = 0;
|
||||
|
||||
@@ -69,8 +69,15 @@ BNetworkCookie::BNetworkCookie(BMessage* archive)
|
||||
archive->FindBool(kArchivedCookieHttpOnly, &fHttpOnly);
|
||||
archive->FindBool(kArchivedCookieHostOnly, &fHostOnly);
|
||||
|
||||
// We store the expiration date as a string, which should not overflow.
|
||||
// But we still parse the old archive format, where an int32 was used.
|
||||
BString expirationString;
|
||||
int32 expiration;
|
||||
if (archive->FindInt32(kArchivedCookieExpirationDate, &expiration)
|
||||
if (archive->FindString(kArchivedCookieExpirationDate, &expirationString)
|
||||
== B_OK) {
|
||||
BDateTime time = BHttpTime(expirationString).Parse();
|
||||
SetExpirationDate(time);
|
||||
} else if (archive->FindInt32(kArchivedCookieExpirationDate, &expiration)
|
||||
== B_OK) {
|
||||
SetExpirationDate((time_t)expiration);
|
||||
}
|
||||
@@ -581,8 +588,8 @@ BNetworkCookie::Archive(BMessage* into, bool deep) const
|
||||
}
|
||||
|
||||
if (HasExpirationDate()) {
|
||||
error = into->AddInt32(kArchivedCookieExpirationDate,
|
||||
fExpiration.Time_t());
|
||||
error = into->AddString(kArchivedCookieExpirationDate,
|
||||
BHttpTime(fExpiration).ToString());
|
||||
if (error != B_OK)
|
||||
return error;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user