[haiku-commits] haiku: hrev46752 - src/kits/network/libnetapi

  • From: pulkomandy@xxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Thu, 23 Jan 2014 19:23:41 +0100 (CET)

hrev46752 adds 1 changeset to branch 'master'
old head: 8e887ea2444c49fea9576a21dff916444c265512
new head: 35480631f29e3eea3a25a14beaa4944cc811c0f7
overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=3548063+%5E8e887ea

----------------------------------------------------------------------------

3548063: 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.

                             [ Adrien Destugues <pulkomandy@xxxxxxxxxxxxx> ]

----------------------------------------------------------------------------

Revision:    hrev46752
Commit:      35480631f29e3eea3a25a14beaa4944cc811c0f7
URL:         http://cgit.haiku-os.org/haiku/commit/?id=3548063
Author:      Adrien Destugues <pulkomandy@xxxxxxxxxxxxx>
Date:        Thu Jan 23 18:22:20 2014 UTC

----------------------------------------------------------------------------

2 files changed, 14 insertions(+), 12 deletions(-)
src/kits/network/libnetapi/HttpTime.cpp      | 13 ++++---------
src/kits/network/libnetapi/NetworkCookie.cpp | 13 ++++++++++---

----------------------------------------------------------------------------

diff --git a/src/kits/network/libnetapi/HttpTime.cpp 
b/src/kits/network/libnetapi/HttpTime.cpp
index b3cd5d6..ada9851 100644
--- a/src/kits/network/libnetapi/HttpTime.cpp
+++ b/src/kits/network/libnetapi/HttpTime.cpp
@@ -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;
diff --git a/src/kits/network/libnetapi/NetworkCookie.cpp 
b/src/kits/network/libnetapi/NetworkCookie.cpp
index d27b8c2..e7c16ff 100644
--- a/src/kits/network/libnetapi/NetworkCookie.cpp
+++ b/src/kits/network/libnetapi/NetworkCookie.cpp
@@ -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;
        }


Other related posts:

  • » [haiku-commits] haiku: hrev46752 - src/kits/network/libnetapi - pulkomandy