summaryrefslogtreecommitdiffstats
path: root/kio/misc/kpac/proxyscout.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kio/misc/kpac/proxyscout.cpp')
-rw-r--r--kio/misc/kpac/proxyscout.cpp196
1 files changed, 0 insertions, 196 deletions
diff --git a/kio/misc/kpac/proxyscout.cpp b/kio/misc/kpac/proxyscout.cpp
deleted file mode 100644
index b651e2313..000000000
--- a/kio/misc/kpac/proxyscout.cpp
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- Copyright (c) 2003 Malte Starostik <malte@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 as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- 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 <cstdlib>
-#include <ctime>
-
-#include <dcopclient.h>
-#include <kapplication.h>
-#include <klocale.h>
-#include <knotifyclient.h>
-#include <kprotocolmanager.h>
-
-#include "proxyscout.moc"
-#include "discovery.h"
-#include "script.h"
-
-namespace KPAC
-{
- ProxyScout::QueuedRequest::QueuedRequest( const KURL& u )
- : transaction( kapp->dcopClient()->beginTransaction() ),
- url( u )
- {
- }
-
- ProxyScout::ProxyScout( const TQCString& name )
- : KDEDModule( name ),
- m_instance( new TDEInstance( "proxyscout" ) ),
- m_downloader( 0 ),
- m_script( 0 ),
- m_suspendTime( 0 )
- {
- }
-
- ProxyScout::~ProxyScout()
- {
- delete m_script;
- delete m_instance;
- }
-
- TQString ProxyScout::proxyForURL( const KURL& url )
- {
- if ( m_suspendTime )
- {
- if ( std::time( 0 ) - m_suspendTime < 300 ) return "DIRECT";
- m_suspendTime = 0;
- }
-
- // Never use a proxy for the script itself
- if ( m_downloader && url.equals( m_downloader->scriptURL(), true ) ) return "DIRECT";
-
- if ( m_script ) return handleRequest( url );
-
- if ( m_downloader || startDownload() )
- {
- m_requestQueue.append( url );
- return TQString::null;
- }
- else return "DIRECT";
- }
-
- ASYNC ProxyScout::blackListProxy( const TQString& proxy )
- {
- m_blackList[ proxy ] = std::time( 0 );
- }
-
- ASYNC ProxyScout::reset()
- {
- delete m_script;
- m_script = 0;
- delete m_downloader;
- m_downloader = 0;
- m_blackList.clear();
- m_suspendTime = 0;
- KProtocolManager::reparseConfiguration();
- }
-
- bool ProxyScout::startDownload()
- {
- switch ( KProtocolManager::proxyType() )
- {
- case KProtocolManager::WPADProxy:
- m_downloader = new Discovery( this );
- break;
- case KProtocolManager::PACProxy:
- m_downloader = new Downloader( this );
- m_downloader->download( KURL( KProtocolManager::proxyConfigScript() ) );
- break;
- default:
- return false;
- }
- connect( m_downloader, TQT_SIGNAL( result( bool ) ),
- TQT_SLOT( downloadResult( bool ) ) );
- return true;
- }
-
- void ProxyScout::downloadResult( bool success )
- {
- KNotifyClient::Instance notifyInstance( m_instance );
- if ( success )
- try
- {
- m_script = new Script( m_downloader->script() );
- }
- catch ( const Script::Error& e )
- {
- KNotifyClient::event( "script-error", i18n(
- "The proxy configuration script is invalid:\n%1" )
- .arg( e.message() ) );
- success = false;
- }
- else KNotifyClient::event( "download-error", m_downloader->error() );
-
- for ( RequestQueue::ConstIterator it = m_requestQueue.begin();
- it != m_requestQueue.end(); ++it )
- {
- TQCString type = TQSTRING_OBJECT_NAME_STRING;
- TQByteArray data;
- TQDataStream ds( data, IO_WriteOnly );
- if ( success ) ds << handleRequest( ( *it ).url );
- else ds << TQString( "DIRECT" );
- kapp->dcopClient()->endTransaction( ( *it ).transaction, type, data );
- }
- m_requestQueue.clear();
- m_downloader->deleteLater();
- m_downloader = 0;
- // Suppress further attempts for 5 minutes
- if ( !success ) m_suspendTime = std::time( 0 );
- }
-
- TQString ProxyScout::handleRequest( const KURL& url )
- {
- try
- {
- TQString result = m_script->evaluate( url );
- TQStringList proxies = TQStringList::split( ';', result );
- for ( TQStringList::ConstIterator it = proxies.begin();
- it != proxies.end(); ++it )
- {
- TQString proxy = ( *it ).stripWhiteSpace();
- if ( proxy.left( 5 ) == "PROXY" )
- {
- KURL proxyURL( proxy = proxy.mid( 5 ).stripWhiteSpace() );
- // If the URL is invalid or the URL is valid but in opaque
- // format which indicates a port number being present in
- // this particular case, simply calling setProtocol() on
- // it trashes the whole URL.
- int len = proxyURL.protocol().length();
- if ( !proxyURL.isValid() || proxy.find( ":/", len ) != len )
- proxy.prepend("http://");
- BlackList::Iterator it = m_blackList.find( proxy );
- if ( it == m_blackList.end() ) return proxy;
- else if ( std::time( 0 ) - *it > 1800 ) // 30 minutes
- {
- // black listing expired
- m_blackList.remove( it );
- return proxy;
- }
- }
- else return "DIRECT";
- }
- // FIXME: blacklist
- }
- catch ( const Script::Error& e )
- {
- KNotifyClient::Instance notifyInstance( m_instance );
- KNotifyClient::event( "evaluation-error", i18n(
- "The proxy configuration script returned an error:\n%1" )
- .arg( e.message() ) );
- }
- return "DIRECT";
- }
-
- extern "C" KDE_EXPORT KDEDModule* create_proxyscout( const TQCString& name )
- {
- return new ProxyScout( name );
- }
-}
-
-// vim: ts=4 sw=4 et