/* */ #ifndef _D_COOKIE_H_ #define _D_COOKIE_H_ #include "common.h" #include #include "a2time.h" namespace aria2 { class Cookie { private: std::string name_; std::string value_; time_t expiry_; std::string path_; std::string domain_; bool secure_; time_t creationTime_; time_t lastAccess_; public: /* * If expires = 0 is given, then the cookie becomes session cookie. * domain is normalized using normalizeDomain() function and * assigned to domain_. If domain is not specified in cookie, call * markOriginServerOnly() after construction. */ Cookie(const std::string& name, const std::string& value, time_t expires, const std::string& path, const std::string& domain, bool secure); /* * Creates session cookie. This is equivalent to Cookie(name, value, * 0, path, domain, secure); domain is normalized using * normalizeDomain() function and assigned to domain_. If domain is * not specified in cookie, call markOriginServerOnly() after * construction. */ Cookie(const std::string& name, const std::string& value, const std::string& path, const std::string& domain, bool secure); Cookie(); ~Cookie(); std::string toString() const; bool good() const; bool match(const std::string& requestHost, const std::string& requestPath, time_t date, bool secure) const; bool validate(const std::string& requestHost, const std::string& requestPath) const; bool operator==(const Cookie& cookie) const; bool isExpired() const; const std::string& getName() const { return name_; } const std::string& getValue() const { return value_; } const std::string& getPath() const { return path_; } const std::string& getDomain() const { return domain_; } time_t getExpiry() const { return expiry_; } bool isSecureCookie() const { return secure_; } bool isSessionCookie() const { return expiry_ == 0; } std::string toNsCookieFormat() const; // Makes this Cookie only sent to the origin server. This function // removes first "." from domain_ if domain_ starts with ".". void markOriginServerOnly(); time_t getCreationTime() const { return creationTime_; } void updateLastAccess(); time_t getLastAccess() const { return lastAccess_; } static std::string normalizeDomain(const std::string& domain); }; } // namespace aria2 #endif // _D_COOKIE_H_