/* */ #include "CookieParser.h" #include "Util.h" #include "A2STR.h" #include #include #include namespace aria2 { const std::string CookieParser::SECURE("secure"); const std::string CookieParser::DOMAIN("domain"); const std::string CookieParser::PATH("path"); const std::string CookieParser::EXPIRES("expires"); void CookieParser::setField(Cookie& cookie, const std::string& name, const std::string& value) const { if(name == SECURE) { cookie.secure = true; } else if(name == DOMAIN) { cookie.domain = value; } else if(name == PATH) { cookie.path = value; } else if(name == EXPIRES) { cookie.expires = Util::httpGMT(value); cookie.onetime = false; } else { cookie.name = name; cookie.value = value; } } Cookie CookieParser::parse(const std::string& cookieStr) const { return parse(cookieStr, A2STR::NIL, A2STR::NIL); } Cookie CookieParser::parse(const std::string& cookieStr, const std::string& defaultDomain, const std::string& defaultPath) const { Cookie cookie; cookie.domain = defaultDomain; cookie.path = defaultPath; std::deque terms; Util::slice(terms, Util::trim(cookieStr), ';', true); for(std::deque::iterator itr = terms.begin(); itr != terms.end(); itr++) { std::pair nv; Util::split(nv, *itr, '='); setField(cookie, nv.first, nv.second); } return cookie; } Cookies CookieParser::parse(std::istream& s) const { Cookies cookies; std::string line; while(getline(s, line)) { if(Util::trim(line).empty() || Util::startsWith(line, A2STR::SHARP_C)) { continue; } Cookie cookie = parse(line); if(cookie.good()) { cookies.push_back(cookie); } } return cookies; } } // namespace aria2