kcookieserver.cpp
来自「konqueror3 embedded版本, KDE环境下的当家浏览器的嵌入式版」· C++ 代码 · 共 614 行 · 第 1/2 页
CPP
614 行
{ if( mTimer ) return; mTimer = new QTimer(); connect( mTimer, SIGNAL( timeout()), SLOT( slotSave())); mTimer->start( 1000*60*SAVE_DELAY );}void KCookieServer::putCookie( QStringList& out, KHttpCookie *cookie, const QValueList<int>& fields ){ QValueList<int>::ConstIterator i = fields.begin(); for ( ; i != fields.end(); ++i ) { switch(*i) { case CF_DOMAIN : out << cookie->domain(); break; case CF_NAME : out << cookie->name(); break; case CF_PATH : out << cookie->path(); break; case CF_HOST : out << cookie->host(); break; case CF_VALUE : out << cookie->value(); break; case CF_EXPIRE : out << QString::number(cookie->expireDate()); break; case CF_PROVER : out << QString::number(cookie->protocolVersion()); break; case CF_SECURE : out << QString::number( cookie->isSecure() ? 1 : 0 ); break; default : out << QString::null; } }}bool KCookieServer::cookieMatches( KHttpCookiePtr c, QString domain, QString fqdn, QString path, QString name ){ if( c ) { bool hasDomain = !domain.isEmpty(); return ((hasDomain && c->domain() == domain) || fqdn == c->host()) && (c->path() == path) && (c->name() == name) && (!c->isExpired(time(0))); } return false;}// DCOP functionQStringKCookieServer::findCookies(QString url){ return findCookies(url, 0);}// DCOP functionQStringKCookieServer::findCookies(QString url, long windowId){ if (cookiesPending(url)) { CookieRequest *request = new CookieRequest; request->client = callingDcopClient(); request->transaction = request->client->beginTransaction(); request->url = url; request->DOM = false; request->windowId = windowId; mRequestList->append( request ); return QString::null; // Talk to you later :-) } QString cookies = mCookieJar->findCookies(url, false, windowId); if (mCookieJar->changed() && !mTimer) saveCookieJar(); return cookies;}// DCOP functionQStringListKCookieServer::findDomains(){ QStringList result; const QStringList domains = mCookieJar->getDomainList(); for ( QStringList::ConstIterator domIt = domains.begin(); domIt != domains.end(); ++domIt ) { // Ignore domains that have policy set for but contain // no cookies whatsoever... const KHttpCookieList* list = mCookieJar->getCookieList(*domIt, ""); if ( list && !list->isEmpty() ) result << *domIt; } return result;}// DCOP functionQStringListKCookieServer::findCookies(QValueList<int> fields, QString domain, QString fqdn, QString path, QString name){ QStringList result; bool allDomCookies = name.isEmpty(); const KHttpCookieList* list = mCookieJar->getCookieList(domain, fqdn); if ( list && !list->isEmpty() ) { QPtrListIterator<KHttpCookie>it( *list ); for ( ; it.current(); ++it ) { if ( !allDomCookies ) { if ( cookieMatches(it.current(), domain, fqdn, path, name) ) { putCookie(result, it.current(), fields); break; } } else putCookie(result, it.current(), fields); } } return result;}// DCOP functionQStringKCookieServer::findDOMCookies(QString url){ return findDOMCookies(url, 0);}// DCOP functionQStringKCookieServer::findDOMCookies(QString url, long windowId){ // We don't wait for pending cookies because it locks up konqueror // which can cause a deadlock if it happens to have a popup-menu up. // Instead we just return pending cookies as if they had been accepted already. KHttpCookieList pendingCookies; cookiesPending(url, &pendingCookies); return mCookieJar->findCookies(url, true, windowId, &pendingCookies);}// DCOP functionvoidKCookieServer::addCookies(QString arg1, QCString arg2, long arg3){ addCookies(arg1, arg2, arg3, false);}// DCOP functionvoidKCookieServer::deleteCookie(QString domain, QString fqdn, QString path, QString name){ const KHttpCookieList* list = mCookieJar->getCookieList( domain, fqdn ); if ( list && !list->isEmpty() ) { QPtrListIterator<KHttpCookie>it (*list); for ( ; it.current(); ++it ) { if( cookieMatches(it.current(), domain, fqdn, path, name) ) { mCookieJar->eatCookie( it.current() ); if (!mTimer) saveCookieJar(); break; } } }}// DCOP functionvoidKCookieServer::deleteCookiesFromDomain(QString domain){ mCookieJar->eatCookiesForDomain(domain); if (!mTimer) saveCookieJar();}// Qt functionvoidKCookieServer::slotDeleteSessionCookies( long windowId ){ deleteSessionCookies(windowId);}// DCOP functionvoidKCookieServer::deleteSessionCookies( long windowId ){ mCookieJar->eatSessionCookies( windowId ); if(!mTimer) saveCookieJar();}voidKCookieServer::deleteSessionCookiesFor(QString fqdn, long windowId){ mCookieJar->eatSessionCookies( fqdn, windowId ); if(!mTimer) saveCookieJar();}// DCOP functionvoidKCookieServer::deleteAllCookies(){ mCookieJar->eatAllCookies(); if (!mTimer) saveCookieJar();}// DCOP functionvoidKCookieServer::addDOMCookies(QString arg1, QCString arg2, long arg3){ addCookies(arg1, arg2, arg3, true);}// DCOP functionvoidKCookieServer::setDomainAdvice(QString url, QString advice){ QString fqdn; QString dummy; if (KCookieJar::parseURL(url, fqdn, dummy)) { QStringList domains; mCookieJar->extractDomains(fqdn, domains); mCookieJar->setDomainAdvice(domains[domains.count() > 3 ? 3 : 0], KCookieJar::strToAdvice(advice)); // Save the cookie config if it has changed mCookieJar->saveConfig( mConfig ); }}// DCOP functionQStringKCookieServer::getDomainAdvice(QString url){ KCookieAdvice advice = KCookieDunno; QString fqdn; QString dummy; if (KCookieJar::parseURL(url, fqdn, dummy)) { QStringList domains; mCookieJar->extractDomains(fqdn, domains); QStringList::ConstIterator it = domains.begin(); while ( (advice == KCookieDunno) && (it != domains.end()) ) { // Always check advice in both ".domain" and "domain". Note // that we only want to check "domain" if it matches the // fqdn of the requested URL. if ( (*it)[0] == '.' || (*it) == fqdn ) advice = mCookieJar->getDomainAdvice(*it); ++it; } if (advice == KCookieDunno) advice = mCookieJar->getGlobalAdvice(); } return KCookieJar::adviceToStr(advice);}// DCOP functionvoidKCookieServer::reloadPolicy(){ mCookieJar->loadConfig( mConfig, true );}// DCOP functionvoidKCookieServer::shutdown(){ deleteLater();}#include "kcookieserver.moc"
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?