Cookie* CookiePath::GetCookieL(Cookie_Item_Handler *params, BOOL create) { Cookie* ck = LocalGetCookie(params->name); if (!create) return ck; if (ck) { #ifdef _ASK_COOKIE ServerName *servername = (ServerName *) params->url->GetAttribute(URL::KServerName, (const void*) 0); COOKIE_DELETE_ON_EXIT_MODE disc_mode = (servername ? servername->GetDeleteCookieOnExit(TRUE) : COOKIE_EXIT_DELETE_DEFAULT); BOOL default_disc_mode = (BOOL) g_pcnet->GetIntegerPref(PrefsCollectionNetwork::AcceptCookiesSessionOnly); if( ((default_disc_mode && disc_mode != COOKIE_NO_DELETE_ON_EXIT) || (!default_disc_mode && disc_mode == COOKIE_DELETE_ON_EXIT))&& !params->flags.discard_at_exit && !ck->DiscardAtExit()) params->flags.discard_at_exit= TRUE; #endif if(!params->flags.accept_updates) params->flags.accept_updates = ck->AcceptUpdates(); if(!params->flags.accepted_as_third_party) params->flags.accepted_as_third_party = ck->GetAcceptedAsThirdParty(); if(!params->flags.have_password) params->flags.have_password = ck->GetHavePassword(); if(!params->flags.have_authentication) params->flags.have_authentication = ck->GetHaveAuthentication(); OP_DELETE(ck); // *** Don't save an expired cookie. if(params->expire && params->expire < (time_t) (g_op_time_info->GetTimeUTC()/1000.0) ) return NULL; } ck = Cookie::CreateL(params); ck->Into(&cookie_list); return ck; }
void CookiePath::ReadCookiesL(DataFile &fp, unsigned long ver_no) { Cookie_Item_Handler loaded_cookie; ANCHOR(Cookie_Item_Handler, loaded_cookie); OpStackAutoPtr<DataFile_Record> rec(0); rec.reset(fp.GetNextRecordL()); while (rec.get() && rec->GetTag() != TAG_COOKIE_PATH_END) { switch(rec->GetTag()) { case TAG_COOKIE_PATH_ENTRY: { rec->IndexRecordsL(); OpString8 pth_name; ANCHOR(OpString8, pth_name); rec->GetIndexedRecordStringL(TAG_COOKIE_PATH_NAME, pth_name); BOOL is_full=FALSE; CookiePath* cp = GetCookiePathL(pth_name.CStr(), TRUE, is_full); if(cp == NULL) { LEAVE(OpStatus::ERR_NO_MEMORY); } cp->ReadCookiesL(fp, ver_no); } break; case TAG_COOKIE_ENTRY: { loaded_cookie.Clear(); rec->IndexRecordsL(); rec->GetIndexedRecordStringL(TAG_COOKIE_NAME, loaded_cookie.name); rec->GetIndexedRecordStringL(TAG_COOKIE_VALUE, loaded_cookie.value); loaded_cookie.expire = (time_t) rec->GetIndexedRecordUInt64L(TAG_COOKIE_EXPIRES); loaded_cookie.last_used = (time_t) rec->GetIndexedRecordUInt64L(TAG_COOKIE_LAST_USED); loaded_cookie.last_sync = (time_t) rec->GetIndexedRecordUInt64L(TAG_COOKIE_LAST_SYNC); loaded_cookie.flags.secure = rec->GetIndexedRecordBOOL(TAG_COOKIE_SECURE); loaded_cookie.flags.httponly = rec->GetIndexedRecordBOOL(TAG_COOKIE_HTTP_ONLY); loaded_cookie.flags.full_path_only = rec->GetIndexedRecordBOOL(TAG_COOKIE_NOT_FOR_PREFIX); loaded_cookie.flags.only_server = rec->GetIndexedRecordBOOL(TAG_COOKIE_ONLY_SERVER); loaded_cookie.flags.assigned = rec->GetIndexedRecordBOOL(TAG_COOKIE_ASSIGNED); loaded_cookie.flags.protected_cookie = rec->GetIndexedRecordBOOL(TAG_COOKIE_PROTECTED); loaded_cookie.version = rec->GetIndexedRecordUIntL(TAG_COOKIE_VERSION); switch (loaded_cookie.version) { case 0: loaded_cookie.cookie_type = NETSCAPE_COOKIE; break; case 1: loaded_cookie.cookie_type = COOKIE2_COOKIE; break; default: loaded_cookie.cookie_type = UNKNOWN_COOKIE; } rec->GetIndexedRecordStringL(TAG_COOKIE_COMMENT, loaded_cookie.comment); rec->GetIndexedRecordStringL(TAG_COOKIE_COMMENT_URL, loaded_cookie.comment_URL); rec->GetIndexedRecordStringL(TAG_COOKIE_RECVD_DOMAIN, loaded_cookie.domain); if(fp.AppVersion() >COOKIES_FILE_VERSION_BUGGY_RECVD_PATH) { rec->GetIndexedRecordStringL(TAG_COOKIE_RECVD_PATH, loaded_cookie.recvd_path); } else { OpStringS8 temp_path; ANCHOR(OpStringS8, temp_path); rec->GetIndexedRecordStringL(TAG_COOKIE_RECVD_PATH, temp_path); if(temp_path.Compare("/") == 0) loaded_cookie.recvd_path.TakeOver(temp_path); else LEAVE_IF_ERROR(loaded_cookie.recvd_path.SetConcat("/",temp_path)); } rec->GetIndexedRecordStringL(TAG_COOKIE_PORT, loaded_cookie.port); loaded_cookie.flags.have_password = rec->GetIndexedRecordBOOL(TAG_COOKIE_HAVE_PASSWORD); loaded_cookie.flags.have_authentication= rec->GetIndexedRecordBOOL(TAG_COOKIE_HAVE_AUTHENTICATION); loaded_cookie.flags.accepted_as_third_party = rec->GetIndexedRecordBOOL(TAG_COOKIE_ACCEPTED_AS_THIRDPARTY); Cookie* ck = Cookie::CreateL(&loaded_cookie); ck->Into(&cookie_list); } } rec.reset(fp.GetNextRecordL()); } rec.reset(); }