summaryrefslogtreecommitdiffstats
path: root/kio/kio/kprotocolmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kio/kio/kprotocolmanager.cpp')
-rw-r--r--kio/kio/kprotocolmanager.cpp534
1 files changed, 0 insertions, 534 deletions
diff --git a/kio/kio/kprotocolmanager.cpp b/kio/kio/kprotocolmanager.cpp
deleted file mode 100644
index a4f8169f5..000000000
--- a/kio/kio/kprotocolmanager.cpp
+++ /dev/null
@@ -1,534 +0,0 @@
-/* This file is part of the KDE libraries
- Copyright (C) 1999 Torben Weis <weis@kde.org>
- Copyright (C) 2000- Waldo Bastain <bastain@kde.org>
- Copyright (C) 2000- Dawit Alemayehu <adawit@kde.org>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#include <string.h>
-#include <sys/utsname.h>
-
-#include <dcopref.h>
-#include <kdebug.h>
-#include <kglobal.h>
-#include <klocale.h>
-#include <kconfig.h>
-#include <kstandarddirs.h>
-#include <klibloader.h>
-#include <kstringhandler.h>
-#include <kstaticdeleter.h>
-#include <kio/slaveconfig.h>
-#include <kio/ioslave_defaults.h>
-#include <kio/http_slave_defaults.h>
-
-#include "kprotocolmanager.h"
-
-class
-KProtocolManagerPrivate
-{
-public:
- KProtocolManagerPrivate();
-
- ~KProtocolManagerPrivate();
-
- TDEConfig *config;
- TDEConfig *http_config;
- bool init_busy;
- KURL url;
- TQString protocol;
- TQString proxy;
- TQString modifiers;
- TQString useragent;
-};
-
-static KProtocolManagerPrivate* d = 0;
-static KStaticDeleter<KProtocolManagerPrivate> kpmpksd;
-
-KProtocolManagerPrivate::KProtocolManagerPrivate()
- :config(0), http_config(0), init_busy(false)
-{
- kpmpksd.setObject(d, this);
-}
-
-KProtocolManagerPrivate::~KProtocolManagerPrivate()
-{
- delete config;
- delete http_config;
-}
-
-
-// DEFAULT USERAGENT STRING
-#define CFG_DEFAULT_UAGENT(X) \
-TQString("Mozilla/5.0 (compatible; Konqueror/%1.%2%3) KHTML/%4.%5.%6 (like Gecko)") \
- .arg(TDE_VERSION_MAJOR).arg(TDE_VERSION_MINOR).arg(X).arg(TDE_VERSION_MAJOR).arg(TDE_VERSION_MINOR).arg(TDE_VERSION_RELEASE)
-
-void KProtocolManager::reparseConfiguration()
-{
- kpmpksd.destructObject();
-
- // Force the slave config to re-read its config...
- TDEIO::SlaveConfig::self()->reset ();
-}
-
-TDEConfig *KProtocolManager::config()
-{
- if (!d)
- d = new KProtocolManagerPrivate;
-
- if (!d->config)
- {
- d->config = new TDEConfig("kioslaverc", true, false);
- }
- return d->config;
-}
-
-TDEConfig *KProtocolManager::http_config()
-{
- if (!d)
- d = new KProtocolManagerPrivate;
-
- if (!d->http_config)
- {
- d->http_config = new TDEConfig("kio_httprc", false, false);
- }
- return d->http_config;
-}
-
-/*=============================== TIMEOUT SETTINGS ==========================*/
-
-int KProtocolManager::readTimeout()
-{
- TDEConfig *cfg = config();
- cfg->setGroup( TQString::null );
- int val = cfg->readNumEntry( "ReadTimeout", DEFAULT_READ_TIMEOUT );
- return QMAX(MIN_TIMEOUT_VALUE, val);
-}
-
-int KProtocolManager::connectTimeout()
-{
- TDEConfig *cfg = config();
- cfg->setGroup( TQString::null );
- int val = cfg->readNumEntry( "ConnectTimeout", DEFAULT_CONNECT_TIMEOUT );
- return QMAX(MIN_TIMEOUT_VALUE, val);
-}
-
-int KProtocolManager::proxyConnectTimeout()
-{
- TDEConfig *cfg = config();
- cfg->setGroup( TQString::null );
- int val = cfg->readNumEntry( "ProxyConnectTimeout", DEFAULT_PROXY_CONNECT_TIMEOUT );
- return QMAX(MIN_TIMEOUT_VALUE, val);
-}
-
-int KProtocolManager::responseTimeout()
-{
- TDEConfig *cfg = config();
- cfg->setGroup( TQString::null );
- int val = cfg->readNumEntry( "ResponseTimeout", DEFAULT_RESPONSE_TIMEOUT );
- return QMAX(MIN_TIMEOUT_VALUE, val);
-}
-
-/*========================== PROXY SETTINGS =================================*/
-
-bool KProtocolManager::useProxy()
-{
- return proxyType() != NoProxy;
-}
-
-bool KProtocolManager::useReverseProxy()
-{
- TDEConfig *cfg = config();
- cfg->setGroup( "Proxy Settings" );
- return cfg->readBoolEntry("ReversedException", false);
-}
-
-KProtocolManager::ProxyType KProtocolManager::proxyType()
-{
- TDEConfig *cfg = config();
- cfg->setGroup( "Proxy Settings" );
- return static_cast<ProxyType>(cfg->readNumEntry( "ProxyType" ));
-}
-
-KProtocolManager::ProxyAuthMode KProtocolManager::proxyAuthMode()
-{
- TDEConfig *cfg = config();
- cfg->setGroup( "Proxy Settings" );
- return static_cast<ProxyAuthMode>(cfg->readNumEntry( "AuthMode" ));
-}
-
-/*========================== CACHING =====================================*/
-
-bool KProtocolManager::useCache()
-{
- TDEConfig *cfg = http_config();
- return cfg->readBoolEntry( "UseCache", true );
-}
-
-TDEIO::CacheControl KProtocolManager::cacheControl()
-{
- TDEConfig *cfg = http_config();
- TQString tmp = cfg->readEntry("cache");
- if (tmp.isEmpty())
- return DEFAULT_CACHE_CONTROL;
- return TDEIO::parseCacheControl(tmp);
-}
-
-TQString KProtocolManager::cacheDir()
-{
- TDEConfig *cfg = http_config();
- return cfg->readPathEntry("CacheDir", TDEGlobal::dirs()->saveLocation("cache","http"));
-}
-
-int KProtocolManager::maxCacheAge()
-{
- TDEConfig *cfg = http_config();
- return cfg->readNumEntry( "MaxCacheAge", DEFAULT_MAX_CACHE_AGE ); // 14 days
-}
-
-int KProtocolManager::maxCacheSize()
-{
- TDEConfig *cfg = http_config();
- return cfg->readNumEntry( "MaxCacheSize", DEFAULT_MAX_CACHE_SIZE ); // 5 MB
-}
-
-TQString KProtocolManager::noProxyForRaw()
-{
- TDEConfig *cfg = config();
- cfg->setGroup( "Proxy Settings" );
-
- return cfg->readEntry( "NoProxyFor" );
-}
-
-TQString KProtocolManager::noProxyFor()
-{
- TQString noProxy = noProxyForRaw();
- if (proxyType() == EnvVarProxy)
- noProxy = TQString::fromLocal8Bit(getenv(noProxy.local8Bit()));
-
- return noProxy;
-}
-
-TQString KProtocolManager::proxyFor( const TQString& protocol )
-{
- TQString scheme = protocol.lower();
-
- if (scheme == "webdav")
- scheme = "http";
- else if (scheme == "webdavs")
- scheme = "https";
-
- TDEConfig *cfg = config();
- cfg->setGroup( "Proxy Settings" );
- return cfg->readEntry( scheme + "Proxy" );
-}
-
-TQString KProtocolManager::proxyForURL( const KURL &url )
-{
- TQString proxy;
- ProxyType pt = proxyType();
-
- switch (pt)
- {
- case PACProxy:
- case WPADProxy:
- if (!url.host().isEmpty())
- {
- KURL u (url);
- TQString p = u.protocol().lower();
-
- // webdav is a KDE specific protocol. Look up proxy
- // information using HTTP instead...
- if ( p == "webdav" )
- {
- p = "http";
- u.setProtocol( p );
- }
- else if ( p == "webdavs" )
- {
- p = "https";
- u.setProtocol( p );
- }
-
- if ( p.startsWith("http") || p == "ftp" || p == "gopher" )
- DCOPRef( "kded", "proxyscout" ).call( "proxyForURL", u ).get( proxy );
- }
- break;
- case EnvVarProxy:
- proxy = TQString(TQString::fromLocal8Bit(getenv(proxyFor(url.protocol()).local8Bit()))).stripWhiteSpace();
- break;
- case ManualProxy:
- proxy = proxyFor( url.protocol() );
- break;
- case NoProxy:
- default:
- break;
- }
-
- return (proxy.isEmpty() ? TQString::fromLatin1("DIRECT") : proxy);
-}
-
-void KProtocolManager::badProxy( const TQString &proxy )
-{
- DCOPRef( "kded", "proxyscout" ).send( "blackListProxy", proxy );
-}
-
-/*
- Domain suffix match. E.g. return true if host is "cuzco.inka.de" and
- nplist is "inka.de,hadiko.de" or if host is "localhost" and nplist is
- "localhost".
-*/
-static bool revmatch(const char *host, const char *nplist)
-{
- if (host == 0)
- return false;
-
- const char *hptr = host + strlen( host ) - 1;
- const char *nptr = nplist + strlen( nplist ) - 1;
- const char *shptr = hptr;
-
- while ( nptr >= nplist )
- {
- if ( *hptr != *nptr )
- {
- hptr = shptr;
-
- // Try to find another domain or host in the list
- while(--nptr>=nplist && *nptr!=',' && *nptr!=' ') ;
-
- // Strip out multiple spaces and commas
- while(--nptr>=nplist && (*nptr==',' || *nptr==' ')) ;
- }
- else
- {
- if ( nptr==nplist || nptr[-1]==',' || nptr[-1]==' ')
- return true;
- if ( hptr == host ) // e.g. revmatch("bugs.kde.org","mybugs.kde.org")
- return false;
-
- hptr--;
- nptr--;
- }
- }
-
- return false;
-}
-
-TQString KProtocolManager::slaveProtocol(const KURL &url, TQString &proxy)
-{
- if (url.hasSubURL()) // We don't want the suburl's protocol
- {
- KURL::List list = KURL::split(url);
- KURL::List::Iterator it = list.fromLast();
- return slaveProtocol(*it, proxy);
- }
-
- if (!d)
- d = new KProtocolManagerPrivate;
-
- if (d->url == url)
- {
- proxy = d->proxy;
- return d->protocol;
- }
-
- if (useProxy())
- {
- proxy = proxyForURL(url);
- if ((proxy != "DIRECT") && (!proxy.isEmpty()))
- {
- bool isRevMatch = false;
- KProtocolManager::ProxyType type = proxyType();
- bool useRevProxy = ((type == ManualProxy) && useReverseProxy());
-
- TQString noProxy;
- // Check no proxy information iff the proxy type is either
- // ManualProxy or EnvVarProxy
- if ( (type == ManualProxy) || (type == EnvVarProxy) )
- noProxy = noProxyFor();
-
- if (!noProxy.isEmpty())
- {
- TQString qhost = url.host().lower();
- const char *host = qhost.latin1();
- TQString qno_proxy = noProxy.stripWhiteSpace().lower();
- const char *no_proxy = qno_proxy.latin1();
- isRevMatch = revmatch(host, no_proxy);
-
- // If no match is found and the request url has a port
- // number, try the combination of "host:port". This allows
- // users to enter host:port in the No-proxy-For list.
- if (!isRevMatch && url.port() > 0)
- {
- qhost += ':' + TQString::number (url.port());
- host = qhost.latin1();
- isRevMatch = revmatch (host, no_proxy);
- }
-
- // If the hostname does not contain a dot, check if
- // <local> is part of noProxy.
- if (!isRevMatch && host && (strchr(host, '.') == NULL))
- isRevMatch = revmatch("<local>", no_proxy);
- }
-
- if ( (!useRevProxy && !isRevMatch) || (useRevProxy && isRevMatch) )
- {
- d->url = proxy;
- if ( d->url.isValid() )
- {
- // The idea behind slave protocols is not applicable to http
- // and webdav protocols.
- TQString protocol = url.protocol().lower();
- if (protocol.startsWith("http") || protocol.startsWith("webdav"))
- d->protocol = protocol;
- else
- {
- d->protocol = d->url.protocol();
- kdDebug () << "slaveProtocol: " << d->protocol << endl;
- }
-
- d->url = url;
- d->proxy = proxy;
- return d->protocol;
- }
- }
- }
- }
-
- d->url = url;
- d->proxy = proxy = TQString::null;
- d->protocol = url.protocol();
- return d->protocol;
-}
-
-/*================================= USER-AGENT SETTINGS =====================*/
-
-TQString KProtocolManager::userAgentForHost( const TQString& hostname )
-{
- TQString sendUserAgent = TDEIO::SlaveConfig::self()->configData("http", hostname.lower(), "SendUserAgent").lower();
- if (sendUserAgent == "false")
- return TQString::null;
-
- TQString useragent = TDEIO::SlaveConfig::self()->configData("http", hostname.lower(), "UserAgent");
-
- // Return the default user-agent if none is specified
- // for the requested host.
- if (useragent.isEmpty())
- return defaultUserAgent();
-
- return useragent;
-}
-
-TQString KProtocolManager::defaultUserAgent( )
-{
- TQString modifiers = TDEIO::SlaveConfig::self()->configData("http", TQString::null, "UserAgentKeys");
- return defaultUserAgent(modifiers);
-}
-
-TQString KProtocolManager::defaultUserAgent( const TQString &_modifiers )
-{
- if (!d)
- d = new KProtocolManagerPrivate;
-
- TQString modifiers = _modifiers.lower();
- if (modifiers.isEmpty())
- modifiers = DEFAULT_USER_AGENT_KEYS;
-
- if (d->modifiers == modifiers)
- return d->useragent;
-
- TQString supp;
- struct utsname nam;
- if( uname(&nam) >= 0 )
- {
- if( modifiers.contains('o') )
- {
- supp += TQString("; %1").arg(nam.sysname);
- if ( modifiers.contains('v') )
- supp += TQString(" %1").arg(nam.release);
- }
- if( modifiers.contains('p') )
- {
- // TODO: determine this value instead of hardcoding it...
- supp += TQString::fromLatin1("; X11");
- }
- if( modifiers.contains('m') )
- {
- supp += TQString("; %1").arg(nam.machine);
- }
- if( modifiers.contains('l') )
- {
- TQStringList languageList = TDEGlobal::locale()->languageList();
- TQStringList::Iterator it = languageList.find( TQString::fromLatin1("C") );
- if( it != languageList.end() )
- {
- if( languageList.contains( TQString::fromLatin1("en") ) > 0 )
- languageList.remove( it );
- else
- (*it) = TQString::fromLatin1("en");
- }
- if( languageList.count() )
- supp += TQString("; %1").arg(languageList.join(", "));
- }
- }
- d->modifiers = modifiers;
- d->useragent = CFG_DEFAULT_UAGENT(supp);
- return d->useragent;
-}
-
-/*==================================== OTHERS ===============================*/
-
-bool KProtocolManager::markPartial()
-{
- TDEConfig *cfg = config();
- cfg->setGroup( TQString::null );
- return cfg->readBoolEntry( "MarkPartial", true );
-}
-
-int KProtocolManager::minimumKeepSize()
-{
- TDEConfig *cfg = config();
- cfg->setGroup( TQString::null );
- return cfg->readNumEntry( "MinimumKeepSize",
- DEFAULT_MINIMUM_KEEP_SIZE ); // 5000 byte
-}
-
-bool KProtocolManager::autoResume()
-{
- TDEConfig *cfg = config();
- cfg->setGroup( TQString::null );
- return cfg->readBoolEntry( "AutoResume", false );
-}
-
-bool KProtocolManager::persistentConnections()
-{
- TDEConfig *cfg = config();
- cfg->setGroup( TQString::null );
- return cfg->readBoolEntry( "PersistentConnections", true );
-}
-
-bool KProtocolManager::persistentProxyConnection()
-{
- TDEConfig *cfg = config();
- cfg->setGroup( TQString::null );
- return cfg->readBoolEntry( "PersistentProxyConnection", false );
-}
-
-TQString KProtocolManager::proxyConfigScript()
-{
- TDEConfig *cfg = config();
- cfg->setGroup( "Proxy Settings" );
- return cfg->readEntry( "Proxy Config Script" );
-}