Beispiel #1
0
BOOL CookiePath::HasCookies(time_t this_time)
{
	Cookie* ck = (Cookie*) cookie_list.First();
	while (ck)
	{
		if (!ck->DiscardAtExit() && ck->Expires() > this_time)
			return TRUE;
		ck = ck->Suc();
	}
	CookiePath* cp = (CookiePath*) FirstChild();
	while (cp)
	{
		if (cp->HasCookies(this_time))
			return TRUE;
		cp = cp->Suc();
	}
	return FALSE;
}
Beispiel #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();
	}
}
Beispiel #3
0
int	CookiePath::GetCookieRequest(
		time_t this_time,
		BOOL is_secure,
		BOOL is_server,
		unsigned short port,
		int &version,
		int &max_version,
		BOOL third_party_only,
		BOOL already_have_password,
		BOOL already_have_authentication,
		BOOL &have_password,
		BOOL &have_authentication,
		BOOL is_full_path,
		char* buf, int buf_len,
		BOOL for_http,
		BOOL allow_dollar_cookies,
		BOOL& seen_cookie2)
{
	int buf_used = 0;
	char* buf_p = buf;
	Cookie* ck = (Cookie*) cookie_list.First();
	while (ck)
	{
		Cookie* next_ck = ck->Suc();
		if (ck->Expires() && ck->Expires() < this_time)
		{
			OP_DELETE(ck);
		}
		else if ((is_secure || !ck->Secure())  &&
				(for_http || !ck->HTTPOnly()) &&
				(is_full_path || !ck->FullPathOnly())
				 && (is_server || !ck->SendOnlyToServer()) &&
				 (ck->Version() == 0 || ck->CheckPort(port)) &&
				 (!third_party_only || ck->GetAcceptedAsThirdParty()) &&
				 (allow_dollar_cookies || *ck->Name().CStr() != '$')
		)
		{

			int name_len = ck->Name().Length();
			int value_len = ck->Value().Length();

			int ver = ck->Version();
			if(version > ver)
				version = ver;

			if(ver > max_version)
				max_version = ver;

			if (ck->GetCookieType() == COOKIE2_COOKIE)
				seen_cookie2 = TRUE;

			int dom_len = (ver ? ck->Received_Domain().Length() : 0) ;
			int path_len = (ver && ck->Received_Path().HasContent() ? ck->Received_Path().Length()+1:  0) ;
			int port_len = (ver ? (ck->Port().HasContent() ? ck->Port().Length() : (ck->PortReceived() ? 1 : 0)) : 0) ;
			if ((name_len + value_len + 3 +
			    (dom_len ? dom_len + 10 : 0) +
			    (path_len ? path_len + 8 : 0) +
			    (port_len ? port_len + 8 : 0)) < buf_len - buf_used)
			{
				if (buf_used)
					BufferAppend(buf_p, "; ", 2);
				BufferAppend(buf_p, ck->Name().CStr());

				if (value_len > 0 || ck->Assigned())
				{
					*buf_p++ = '=';
					BufferAppend(buf_p, ck->Value().CStr());
				}

				if(ver > 0)
				{
					if(path_len)
					{
						BufferAppend(buf_p, "; $Path=\"");
						BufferAppend(buf_p, ck->Received_Path().CStr());
						*buf_p++ = '"';
						*buf_p = '\0';
					}
					if(dom_len)
					{
						BufferAppend(buf_p, "; $Domain=");
						BufferAppend(buf_p, ck->Received_Domain().CStr());
					}
					if(ck->PortReceived())
					{
						if(ck->Port().CStr())
						{
							BufferAppend(buf_p, "; $Port=\"");
							BufferAppend(buf_p, ck->Port().CStr());
							*buf_p++ = '"';
							*buf_p = '\0';
						}
						else
							BufferAppend(buf_p, "; $Port");
					}
				}
				if(g_pcnet->GetIntegerPref(PrefsCollectionNetwork::TagUrlsUsingPasswordRelatedCookies))
				{
					if(ck->GetHavePassword())
						have_password = TRUE;
					if(ck->GetHaveAuthentication())
						have_authentication = TRUE;
					if(already_have_password)
						ck->SetHavePassword(TRUE);
					if(already_have_authentication)
						ck->SetHaveAuthentication(TRUE);
				}
				buf_used = buf_p - buf;

				ck->SetLastUsed(this_time);
			}
		}
		ck = next_ck;
	}

	return buf_used;
}