/* */ #include "CookieBoxFactory.h" #include "CookieParser.h" #include "CookieBox.h" #include "Util.h" #include "RecoverableException.h" #include "A2STR.h" #include namespace aria2 { const std::string CookieBoxFactory::C_TRUE("TRUE"); CookieBoxHandle CookieBoxFactory::createNewInstance() { CookieBoxHandle box(new CookieBox()); box->add(defaultCookies); return box; } void CookieBoxFactory::loadDefaultCookie(std::istream& s) { std::string line; while(getline(s, line)) { if(Util::startsWith(line, A2STR::SHARP_C)) { continue; } try { Cookie c = parseNsCookie(line); if(c.good()) { defaultCookies.push_back(c); } } catch(RecoverableException& e) { // ignore malformed cookie entry // TODO better to log it } } } Cookie CookieBoxFactory::parseNsCookie(const std::string& nsCookieStr) const { std::deque vs; Util::slice(vs, nsCookieStr, '\t', true); Cookie c; if(vs.size() < 6 ) { return c; } c.domain = vs[0]; c.path = vs[2]; c.secure = vs[3] == C_TRUE ? true : false; int64_t expireDate = Util::parseLLInt(vs[4]); // TODO assuming time_t is int32_t... if(expireDate > INT32_MAX) { expireDate = INT32_MAX; } c.expires = expireDate; c.name = vs[5]; if(vs.size() >= 7) { c.value = vs[6]; } return c; } } // namespace aria2