Cookie* CookiePath::GetLeastRecentlyUsed(time_t last_used, time_t this_time) { time_t new_last_used = last_used; Cookie* ck = 0; Cookie *ck_unused = NULL; Cookie* new_ck = (Cookie*) cookie_list.First(); while (new_ck) { Cookie* next_ck = new_ck->Suc(); if (new_ck->Expires() && new_ck->Expires() < this_time) { OP_DELETE(new_ck); } else if (new_ck->GetLastUsed() <= new_last_used && !new_ck->ProtectedCookie()) { if(new_ck->GetLastUsed()) { new_last_used = new_ck->GetLastUsed(); ck = new_ck; } else if(!ck_unused) ck_unused = new_ck; } new_ck = next_ck; } CookiePath* cp = (CookiePath*) FirstChild(); while (cp) { new_ck = cp->GetLeastRecentlyUsed(new_last_used, this_time); if (new_ck) { if(new_ck->GetLastUsed()) { ck = new_ck; new_last_used = ck->GetLastUsed(); } else ck_unused = new_ck; } cp = cp->Suc(); } return (ck ? ck : ck_unused); }
void CookiePath::DebugWriteCookies(FILE* fp) { fprintf(fp, " "); DebugWritePath(fp); fprintf(fp, ": \n"); Cookie* ck = (Cookie*) cookie_list.First(); while (ck) { fprintf(fp, " %s=%s; %lu; %d; %lu %s\n", ck->Name(), ck->Value(), ck->Expires(), ck->Secure(), ck->GetLastUsed(), (ck->DiscardAtExit() ? "; Discard on exit" : "")); ck = ck->Suc(); } CookiePath* cp = (CookiePath*) FirstChild(); while (cp) { cp->DebugWriteCookies(fp); cp = cp->Suc(); } }