Example #1
0
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);
}
Example #2
0
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();
	}
}