diff --git a/src/Http/HttpClient.cpp b/src/Http/HttpClient.cpp index 2c154e9d..51446c0a 100644 --- a/src/Http/HttpClient.cpp +++ b/src/Http/HttpClient.cpp @@ -255,7 +255,7 @@ void HttpClient::onResponseCompleted_l() { onResponseCompleted(); } -void HttpClient::checkCookie(const HttpClient::HttpHeader &headers) { +void HttpClient::checkCookie(HttpClient::HttpHeader &headers) { //Set-Cookie: IPTV_SERVER=8E03927B-CC8C-4389-BC00-31DBA7EC7B49;expires=Sun, Sep 23 2018 15:07:31 GMT;path=/index/api/ auto it_set_cookie = headers.find("Set-Cookie"); if(it_set_cookie == headers.end()){ @@ -274,12 +274,17 @@ void HttpClient::checkCookie(const HttpClient::HttpHeader &headers) { if(index++ == 0){ cookie->setKeyVal(key,val); - } else{ - if(key == "path"){ - cookie->setPath(val); - }else if(key == "expires"){ - cookie->setExpires(val); - } + continue; + } + + if(key == "path") { + cookie->setPath(val); + continue; + } + + if(key == "expires"){ + cookie->setExpires(val,headers["Date"]); + continue; } } diff --git a/src/Http/HttpClient.h b/src/Http/HttpClient.h index fcf0ec8f..4e01699d 100644 --- a/src/Http/HttpClient.h +++ b/src/Http/HttpClient.h @@ -310,7 +310,7 @@ protected: virtual void onManager() override; private: void onResponseCompleted_l(); - void checkCookie(const HttpHeader &headers ); + void checkCookie(HttpHeader &headers ); protected: bool _isHttps; private: diff --git a/src/Http/HttpCookie.cpp b/src/Http/HttpCookie.cpp index c26db1c4..975cc2ce 100644 --- a/src/Http/HttpCookie.cpp +++ b/src/Http/HttpCookie.cpp @@ -26,6 +26,7 @@ #include "HttpCookie.h" #include "Util/util.h" +#include "Util/logger.h" #if defined(_WIN32) #include "strptime_win.h" @@ -40,10 +41,17 @@ void HttpCookie::setPath(const string &path){ void HttpCookie::setHost(const string &host){ _host = host; } -void HttpCookie::setExpires(const string &expires){ +static uint32_t timeStrToInt(const string &date){ struct tm tt; - strptime(expires.data(),"%a, %b %d %Y %H:%M:%S %Z",&tt); - _expire = mktime(&tt); + strptime(date.data(),"%a, %b %d %Y %H:%M:%S %Z",&tt); + return mktime(&tt); +} +void HttpCookie::setExpires(const string &expires,const string &server_date){ + _expire = timeStrToInt(expires); + if(!server_date.empty()){ + _expire = time(NULL) + (_expire - timeStrToInt(server_date)); +// DebugL << (timeStrToInt(expires) - timeStrToInt(server_date)) / 60; + } } void HttpCookie::setKeyVal(const string &key,const string &val){ _key = key; diff --git a/src/Http/HttpCookie.h b/src/Http/HttpCookie.h index 54d1db14..a95120e1 100644 --- a/src/Http/HttpCookie.h +++ b/src/Http/HttpCookie.h @@ -45,7 +45,7 @@ public: void setPath(const string &path); void setHost(const string &host); - void setExpires(const string &expires); + void setExpires(const string &expires,const string &server_date); void setKeyVal(const string &key,const string &val); operator bool ();