You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdelibs/tdeio/tdeio/tdeprotocolmanager.h

390 lines
11 KiB

/* 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.
*/
#ifndef __kprotocolmanager_h__
#define __kprotocolmanager_h__
#include <tqstringlist.h>
#include <tdeapplication.h>
#include <tdeio/global.h>
/** @deprecated Use KProtocolManager::defaultUserAgent() instead. */
#define DEFAULT_USERAGENT_STRING ""
class TDEConfig;
/**
* Provides information about I/O (Internet, etc.) settings chosen/set
* by the end user.
*
* KProtocolManager has a heap of static functions that allows only read
* access to KDE's IO related settings. These include proxy, cache, file
* transfer resumption, timeout and user-agent related settings.
*
* The information provided by this class is generic enough to be applicable
* to any application that makes use of KDE's IO sub-system. Note that this
* mean the proxy, timeout etc. settings are saved in a separate user-specific
* config file and not in the config file of the application.
*
* Original author:
* @author Torben Weis <weis@kde.org>
*
* Revised by:
* @author Waldo Bastain <bastain@kde.org>
* @author Dawit Alemayehu <adawit@kde.org>
* @see KPAC
*/
class TDEIO_EXPORT KProtocolManager
{
public:
/*=========================== USER-AGENT SETTINGS ===========================*/
/**
* Returns the default user-agent string.
*
* @return the default user-agent string
*/
static TQString defaultUserAgent();
/**
* Returns the default user-agent value.
*
* @param keys can be any of the following:
* @li 'o' Show OS
* @li 'v' Show OS Version
* @li 'p' Show platform
* @li 'm' Show machine architecture
* @li 'l' Show language
* @return the default user-agent value with the given @p keys
*/
static TQString defaultUserAgent(const TQString &keys);
/**
* Returns the userAgent string configured for the
* specified host.
*
* If hostname is not found or is empty (i.e. "" or
* TQString::null) this function will return the default
* user agent.
*
* @param hostname name of the host
* @return specified userAgent string
*/
static TQString userAgentForHost( const TQString &hostname );
/*=========================== TIMEOUT CONFIG ================================*/
/**
* Returns the preferred timeout value for reading from
* remote connections in seconds.
*
* @return timeout value for remote connection in secs.
*/
static int readTimeout();
/**
* Returns the preferred timeout value for remote connections
* in seconds.
*
* @return timeout value for remote connection in secs.
*/
static int connectTimeout();
/**
* Returns the preferred timeout value for proxy connections
* in seconds.
*
* @return timeout value for proxy connection in secs.
*/
static int proxyConnectTimeout();
/**
* Returns the preferred response timeout value for
* remote connecting in seconds.
*
* @return timeout value for remote connection in seconds.
*/
static int responseTimeout();
/*=============================== PROXY CONFIG ==============================*/
/**
* Returns true if the user specified a proxy server to make connections.
*
* @see slaveProtocol, proxyForURL, proxyFor
*/
static bool useProxy();
/**
* Returns true if the proxy settings should apply to the list
* returned by @ref noProxyFor.
*
* Normally addresses listed in the noProxyFor list are not routed
* through a proxy server. However, if this function returns true,
* then all addresses listed in the noProxyFor list are to be routed
* through a proxy server where as those that are not should bypass it.
*
* This function as well as @ref noProxyFor only apply when @ref proxyType
* is @p ManualProxy.
*
* @see proxyForURL, proxyFor, slaveProtocol
*/
static bool useReverseProxy();
/**
* Types of proxy configuration
* @li NoProxy - No proxy is used
* @li ManualProxy - Proxies are manually configured
* @li PACProxy - A Proxy configuration URL has been given
* @li WPADProxy - A proxy should be automatically discovered
* @li EnvVarProxy - Use the proxy values set through environment variables.
*/
enum ProxyType
{
NoProxy,
ManualProxy,
PACProxy,
WPADProxy,
EnvVarProxy
};
/**
* Returns the type of proxy configuration that is used.
*
* @see ProxyType
*/
static ProxyType proxyType();
/**
* Proxy authorization modes.
*
* @li Prompt - Ask for authorization as needed
* @li Automatic - Use auto login as defined in .kionetrc files.
*
* NOTE: .kionetrc files have the same format as ftp .netrc files.
* Please note the use of .kionetrc files is highly discouraged since
* password is stored in clear text. For future releases the ability
* to store preset password for proxy servers will probably be supported
* through TDEWallet integration.
*/
enum ProxyAuthMode
{
Prompt,
Automatic
};
/**
* Returns the way proxy authorization should be handled.
*
* @see ProxyAuthMode
*/
static ProxyAuthMode proxyAuthMode();
/**
* Returns a comma-separated list of hostnames or partial
* host-names that should bypass any proxy settings.
*
* This function as well as @ref useReverseProxy only apply
* when @ref proxyType is @p ManualProxy.
*
* @see useReverseProxy, proxyFor, proxyForURL, slaveProtocol
*/
static TQString noProxyFor();
/**
* Same as above except the environment variable name
* is returned instead of the variable value when
* @ref proxyType is @p EnvVarProxy.
*
* @see noProxyFor
* @since 3.5.x
*/
static TQString noProxyForRaw();
/**
* Returns the proxy server address for a given protocol.
*
* NOTE: This function does not take the @ref useReverseProxy()
* settings into account.
*
* @see useReverseProxy, slaveProtocol
* @param protocol the protocol whose proxy info is needed
* @returns the proxy server address if one is available,
* or TQString::null if not available
*/
static TQString proxyFor( const TQString& protocol );
/**
* Returns the proxy server address for a given URL.
*
* If @ref proxyType returns Automatic, an external service
* called KPAC (a kded module) is used to determine the proxy
* server. Otherwise, @ref proxyFor is invoked to determine
* whether the URL needs to be routed through a proxy server.
*
* NOTE: This function does not take the @ref useReverseProxy()
* or the @ref noProxyFor() settings into account.
*
* @see useReverseProxy, slaveProtocol, noProxyFor
* @param url the URL whose proxy info is needed
* @returns the proxy server address or the text "DIRECT"
* if no proxying is needed for the given address.
*/
static TQString proxyForURL( const KURL& url );
/**
* Marks this proxy as bad (down). It will not be used for the
* next 30 minutes. (The script may supply an alternate proxy)
* @param proxy the proxy to mark as bad (as URL)
*/
static void badProxy( const TQString & proxy );
/**
* Returns the URL of the script for automatic proxy configuration.
* @return the proxy configuration script
*/
static TQString proxyConfigScript();
/*========================== CACHE CONFIG ===================================*/
/**
* Returns true/false to indicate whether a cache
* should be used
*
* @return true to use the cache, false otherwisea
*/
static bool useCache();
/**
* Returns the maximum age in seconds cached files should be
* kept before they are deleted as necessary.
*
* @return the maximum cache age in seconds
*/
static int maxCacheAge();
/**
* Returns the maximum size that can be used for caching.
*
* By default this function returns the DEFAULT_MAX_CACHE_SIZE
* value as defined in http_slave_defaults.h. Not that the
* value returned is in bytes, hence a value of 5120 would mean
* 5 Kb.
*
* @return the maximum cache size in bytes
*/
static int maxCacheSize(); // Maximum cache size in Kb.
/**
* The directory which contains the cache files.
* @return the directory that contains the cache files
*/
static TQString cacheDir();
/**
* Returns the Cache control directive to be used.
* @return the cache control value
*/
static TDEIO::CacheControl cacheControl();
/*============================ DOWNLOAD CONFIG ==============================*/
/**
* Returns true if partial downloads should be
* automatically resumed.
* @return true to resume partial downloads
*/
static bool autoResume();
/**
* Returns true if partial downloads should be marked
* with a ".part" extension.
* @return true if partial downloads should get an ".part" extension
*/
static bool markPartial();
/**
* Returns the minimum file size for keeping aborted
* downloads.
*
* Any data downloaded that does not meet this minimum
* requirement will simply be discarded. The default size
* is 5 KB.
*
* @return the minimum keep size for aborted downloads in bytes
*/
static int minimumKeepSize();
/*============================ NETWORK CONNECTIONS ==========================*/
/**
* Returns true if proxy connections should be persistent.
* @return true if proxy connections should be persistent
* @since 3.1
*/
static bool persistentProxyConnection();
/**
* Returns true if connections should be persistent
* @return true if the connections should be persistent
*/
static bool persistentConnections();
/*=============================== OTHERS ====================================*/
/**
* Force a reload of the general config file of
* io-slaves ( tdeioslaverc).
*/
static void reparseConfiguration();
/**
* Return the protocol to use in order to handle the given @p url
* It's usually the same, except that FTP, when handled by a proxy,
* needs an HTTP ioslave.
*
* When a proxy is to be used, proxy contains the URL for the proxy.
* @param url the url to check
* @param proxy the URL of the proxy to use
* @return the slave protocol (e.g. 'http'), can be null if unknown
*/
static TQString slaveProtocol(const KURL &url, TQString &proxy);
/**
* @internal
* (Shared with SlaveConfig)
*/
static TDEConfig *config();
private:
static TDEConfig *http_config();
};
#endif