summaryrefslogtreecommitdiffstats
path: root/kioslave/http/http.h
diff options
context:
space:
mode:
Diffstat (limited to 'kioslave/http/http.h')
-rw-r--r--kioslave/http/http.h577
1 files changed, 0 insertions, 577 deletions
diff --git a/kioslave/http/http.h b/kioslave/http/http.h
deleted file mode 100644
index ccbb60ce6..000000000
--- a/kioslave/http/http.h
+++ /dev/null
@@ -1,577 +0,0 @@
-/*
- Copyright (C) 2000,2001 Dawit Alemayehu <adawit@kde.org>
- Copyright (C) 2000,2001 Waldo Bastian <bastian@kde.org>
- Copyright (C) 2000,2001 George Staikos <staikos@kde.org>
- Copyright (C) 2001,2002 Hamish Rodda <rodda@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.
-*/
-
-#ifndef HTTP_H_
-#define HTTP_H_
-
-
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <string.h>
-#include <stdio.h>
-#include <time.h>
-
-#include <tqptrlist.h>
-#include <tqstrlist.h>
-#include <tqstringlist.h>
-
-#include <kurl.h>
-#include "kio/tcpslavebase.h"
-#include "kio/http.h"
-
-class DCOPClient;
-class TQDomElement;
-class TQDomNodeList;
-
-namespace TDEIO {
- class AuthInfo;
-}
-
-class HTTPProtocol : public TQObject, public TDEIO::TCPSlaveBase
-{
- Q_OBJECT
-public:
- HTTPProtocol( const TQCString &protocol, const TQCString &pool,
- const TQCString &app );
- virtual ~HTTPProtocol();
-
- /** HTTP version **/
- enum HTTP_REV {HTTP_None, HTTP_Unknown, HTTP_10, HTTP_11, SHOUTCAST};
-
- /** Authorization method used **/
- enum HTTP_AUTH {AUTH_None, AUTH_Basic, AUTH_NTLM, AUTH_Digest, AUTH_Negotiate};
-
- /** HTTP / DAV method **/
- // Removed to interfaces/kio/http.h
- //enum HTTP_METHOD {HTTP_GET, HTTP_PUT, HTTP_POST, HTTP_HEAD, HTTP_DELETE,
- // HTTP_OPTIONS, DAV_PROPFIND, DAV_PROPPATCH, DAV_MKCOL,
- // DAV_COPY, DAV_MOVE, DAV_LOCK, DAV_UNLOCK, DAV_SEARCH };
-
- /** State of the current Connection **/
- struct HTTPState
- {
- HTTPState ()
- {
- port = 0;
- doProxy = false;
- }
-
- TQString hostname;
- TQString encoded_hostname;
- short unsigned int port;
- TQString user;
- TQString passwd;
- bool doProxy;
- };
-
- /** DAV-specific request elements for the current connection **/
- struct DAVRequest
- {
- DAVRequest ()
- {
- overwrite = false;
- depth = 0;
- }
-
- TQString desturl;
- bool overwrite;
- int depth;
- };
-
- /** The request for the current connection **/
- struct HTTPRequest
- {
- HTTPRequest ()
- {
- port = 0;
- method = TDEIO::HTTP_UNKNOWN;
- offset = 0;
- doProxy = false;
- allowCompressedPage = false;
- disablePassDlg = false;
- bNoAuth = false;
- bUseCache = false;
- bCachedRead = false;
- bCachedWrite = false;
- fcache = 0;
- bMustRevalidate = false;
- cacheExpireDateOffset = 0;
- bErrorPage = false;
- bUseCookiejar = false;
- expireDate = 0;
- creationDate = 0;
- }
-
- TQString hostname;
- TQString encoded_hostname;
- short unsigned int port;
- TQString user;
- TQString passwd;
- TQString path;
- TQString query;
- TDEIO::HTTP_METHOD method;
- TDEIO::CacheControl cache;
- TDEIO::filesize_t offset;
- bool doProxy;
- KURL url;
- TQString window; // Window Id this request is related to.
- TQString referrer;
- TQString charsets;
- TQString languages;
- bool allowCompressedPage;
- bool disablePassDlg;
- TQString userAgent;
- TQString id;
- DAVRequest davData;
-
- bool bNoAuth; // Do not authenticate
-
- // Cache related
- TQString cef; // Cache Entry File belonging to this URL.
- bool bUseCache; // Whether the cache is active
- bool bCachedRead; // Whether the file is to be read from m_fcache.
- bool bCachedWrite; // Whether the file is to be written to m_fcache.
- FILE* fcache; // File stream of a cache entry
- TQString etag; // ETag header.
- TQString lastModified; // Last modified.
- bool bMustRevalidate; // Cache entry is expired.
- long cacheExpireDateOffset; // Position in the cache entry where the
- // 16 byte expire date is stored.
- time_t expireDate; // Date when the cache entry will expire
- time_t creationDate; // Date when the cache entry was created
- TQString strCharset; // Charset
-
- // Indicates whether an error-page or error-msg should is preferred.
- bool bErrorPage;
-
- // Cookie flags
- bool bUseCookiejar;
- enum { CookiesAuto, CookiesManual, CookiesNone } cookieMode;
- };
-
- struct DigestAuthInfo
- {
- TQCString nc;
- TQCString qop;
- TQCString realm;
- TQCString nonce;
- TQCString method;
- TQCString cnonce;
- TQCString username;
- TQCString password;
- TQStrList digestURI;
- TQCString algorithm;
- TQCString entityBody;
- };
-
-//---------------------- Re-implemented methods ----------------
- virtual void setHost(const TQString& host, int port, const TQString& user,
- const TQString& pass);
-
- virtual void slave_status();
-
- virtual void get( const KURL& url );
- virtual void put( const KURL& url, int permissions, bool overwrite,
- bool resume );
-
-//----------------- Re-implemented methods for WebDAV -----------
- virtual void listDir( const KURL& url );
- virtual void mkdir( const KURL& url, int permissions );
-
- virtual void rename( const KURL& src, const KURL& dest, bool overwrite );
- virtual void copy( const KURL& src, const KURL& dest, int permissions, bool overwrite );
- virtual void del( const KURL& url, bool isfile );
-
- // ask the host whether it supports WebDAV & cache this info
- bool davHostOk();
-
- // send generic DAV request
- void davGeneric( const KURL& url, TDEIO::HTTP_METHOD method );
-
- // Send requests to lock and unlock resources
- void davLock( const KURL& url, const TQString& scope,
- const TQString& type, const TQString& owner );
- void davUnlock( const KURL& url );
-
- // Calls httpClose() and finished()
- void davFinished();
-
- // Handle error conditions
- TQString davError( int code = -1, TQString url = TQString::null );
-//---------------------------- End WebDAV -----------------------
-
- /**
- * Special commands supported by this slave :
- * 1 - HTTP POST
- * 2 - Cache has been updated
- * 3 - SSL Certificate Cache has been updated
- * 4 - HTTP multi get
- * 5 - DAV LOCK (see
- * 6 - DAV UNLOCK README.webdav)
- */
- virtual void special( const TQByteArray &data );
-
- virtual void mimetype( const KURL& url);
-
- virtual void stat( const KURL& url );
-
- virtual void reparseConfiguration();
-
- virtual void closeConnection(); // Forced close of connection
-
- void post( const KURL& url );
- void multiGet(const TQByteArray &data);
- bool checkRequestURL( const KURL& );
- void cacheUpdate( const KURL &url, bool nocache, time_t expireDate);
-
- void httpError(); // Generate error message based on response code
-
- bool isOffline(const KURL &url); // Check network status
-
-protected slots:
- void slotData(const TQByteArray &);
- void error( int _errid, const TQString &_text );
-
-protected:
- int readChunked(); // Read a chunk
- int readLimited(); // Read maximum m_iSize bytes.
- int readUnlimited(); // Read as much as possible.
-
- /**
- * A "smart" wrapper around write that will use SSL_write or
- * write(2) depending on whether you've got an SSL connection or not.
- * The only shortcomming is that it uses the "global" file handles and
- * soforth. So you can't really use this on individual files/sockets.
- */
- ssize_t write(const void *buf, size_t nbytes);
-
- /**
- * Another "smart" wrapper, this time around read that will
- * use SSL_read or read(2) depending on whether you've got an
- * SSL connection or not.
- */
- ssize_t read (void *b, size_t nbytes);
-
- char *gets (char *str, int size);
-
- void setRewindMarker();
- void rewind();
-
- /**
- * Add an encoding on to the appropriate stack this
- * is nececesary because transfer encodings and
- * content encodings must be handled separately.
- */
- void addEncoding(TQString, TQStringList &);
-
- void configAuth( char *, bool );
-
- bool httpOpen(); // Open transfer
- void httpClose(bool keepAlive); // Close transfer
-
- bool httpOpenConnection(); // Open connection
- void httpCloseConnection(); // Close connection
- void httpCheckConnection(); // Check whether to keep connection.
-
- void forwardHttpResponseHeader();
-
- bool readHeader();
-
- bool sendBody();
-
- // where dataInternal == true, the content is to be made available
- // to an internal function.
- bool readBody( bool dataInternal = false );
-
- /**
- * Performs a WebDAV stat or list
- */
- void davSetRequest( const TQCString& requestXML );
- void davStatList( const KURL& url, bool stat = true );
- void davParsePropstats( const TQDomNodeList& propstats, TDEIO::UDSEntry& entry );
- void davParseActiveLocks( const TQDomNodeList& activeLocks,
- uint& lockCount );
-
- /**
- * Parses a date & time string
- */
- long parseDateTime( const TQString& input, const TQString& type );
-
- /**
- * Returns the error code from a "HTTP/1.1 code Code Name" string
- */
- int codeFromResponse( const TQString& response );
-
- /**
- * Extracts locks from metadata
- * Returns the appropriate If: header
- */
- TQString davProcessLocks();
-
- /**
- * Send a cookie to the cookiejar
- */
- void addCookies( const TQString &url, const TQCString &cookieHeader);
-
- /**
- * Look for cookies in the cookiejar
- */
- TQString findCookies( const TQString &url);
-
- /**
- * Do a cache lookup for the current url. (m_state.url)
- *
- * @param readWrite If true, file is opened read/write.
- * If false, file is opened read-only.
- *
- * @return a file stream open for reading and at the start of
- * the header section when the Cache entry exists and is valid.
- * 0 if no cache entry could be found, or if the entry is not
- * valid (any more).
- */
- FILE *checkCacheEntry(bool readWrite = false);
-
- /**
- * Create a cache entry for the current url. (m_state.url)
- *
- * Set the contents type of the cache entry to 'mimetype'.
- */
- void createCacheEntry(const TQString &mimetype, time_t expireDate);
-
- /**
- * Write data to cache.
- *
- * Write 'nbytes' from 'buffer' to the Cache Entry File
- */
- void writeCacheEntry( const char *buffer, int nbytes);
-
- /**
- * Close cache entry
- */
- void closeCacheEntry();
-
- /**
- * Update expire time of current cache entry.
- */
- void updateExpireDate(time_t expireDate, bool updateCreationDate=false);
-
- /**
- * Quick check whether the cache needs cleaning.
- */
- void cleanCache();
-
- /**
- * Performs a GET HTTP request.
- */
- // where dataInternal == true, the content is to be made available
- // to an internal function.
- void retrieveContent( bool dataInternal = false );
-
- /**
- * Performs a HEAD HTTP request.
- */
- bool retrieveHeader(bool close_connection = true);
-
- /**
- * Resets any per session settings.
- */
- void resetSessionSettings();
-
- /**
- * Resets settings related to parsing a response.
- */
- void resetResponseSettings();
-
- /**
- * Resets any per connection settings. These are different from
- * per-session settings in that they must be invalidates every time
- * a request is made, e.g. a retry to re-send the header to the
- * server, as compared to only when a new request arrives.
- */
- void resetConnectionSettings();
-
- /**
- * Returns any pre-cached proxy authentication info
- * info in HTTP header format.
- */
- TQString proxyAuthenticationHeader();
-
- /**
- * Retrieves authorization info from cache or user.
- */
- bool getAuthorization();
-
- /**
- * Saves valid authorization info in the cache daemon.
- */
- void saveAuthorization();
-
- /**
- * Creates the entity-header for Basic authentication.
- */
- TQString createBasicAuth( bool isForProxy = false );
-
- /**
- * Creates the entity-header for Digest authentication.
- */
- TQString createDigestAuth( bool isForProxy = false );
-
- /**
- * Creates the entity-header for NTLM authentication.
- */
- TQString createNTLMAuth( bool isForProxy = false );
-
- /**
- * Creates the entity-header for Negotiate authentication.
- */
- TQString createNegotiateAuth();
-
- /**
- * create GSS error string
- */
- TQCString gssError( int major_status, int minor_status );
-
- /**
- * Calcualtes the message digest response based on RFC 2617.
- */
- void calculateResponse( DigestAuthInfo &info, TQCString &Response );
-
- /**
- * Prompts the user for authorization retry.
- */
- bool retryPrompt();
-
- /**
- * Creates authorization prompt info.
- */
- void promptInfo( TDEIO::AuthInfo& info );
-
-protected:
- HTTPState m_state;
- HTTPRequest m_request;
- TQPtrList<HTTPRequest> m_requestQueue;
-
- bool m_bBusy; // Busy handling request queue.
- bool m_bEOF;
- bool m_bEOD;
-
-//--- Settings related to a single response only
- TQStringList m_responseHeader; // All headers
- KURL m_redirectLocation;
- bool m_bRedirect; // Indicates current request is a redirection
-
- // Processing related
- bool m_bChunked; // Chunked tranfer encoding
- TDEIO::filesize_t m_iSize; // Expected size of message
- TDEIO::filesize_t m_iBytesLeft; // # of bytes left to receive in this message.
- TDEIO::filesize_t m_iContentLeft; // # of content bytes left
- TQByteArray m_bufReceive; // Receive buffer
- bool m_dataInternal; // Data is for internal consumption
- char m_lineBuf[1024];
- char m_rewindBuf[8192];
- size_t m_rewindCount;
- char *m_linePtr;
- size_t m_lineCount;
- char *m_lineBufUnget;
- char *m_linePtrUnget;
- size_t m_lineCountUnget;
-
- // Mimetype determination
- bool m_cpMimeBuffer;
- TQByteArray m_mimeTypeBuffer;
-
- // Language/Encoding related
- TQStringList m_qTransferEncodings;
- TQStringList m_qContentEncodings;
- TQString m_sContentMD5;
- TQString m_strMimeType;
-
-
-//--- WebDAV
- // Data structure to hold data which will be passed to an internal func.
- TQByteArray m_bufWebDavData;
- TQStringList m_davCapabilities;
-
- bool m_davHostOk;
- bool m_davHostUnsupported;
-//----------
-
- // Holds the POST data so it won't get lost on if we
- // happend to get a 401/407 response when submitting,
- // a form.
- TQByteArray m_bufPOST;
-
- // Cache related
- int m_maxCacheAge; // Maximum age of a cache entry.
- long m_maxCacheSize; // Maximum cache size in Kb.
- TQString m_strCacheDir; // Location of the cache.
-
-
-
-//--- Proxy related members
- bool m_bUseProxy;
- bool m_bNeedTunnel; // Whether we need to make a SSL tunnel
- bool m_bIsTunneled; // Whether we have an active SSL tunnel
- bool m_bProxyAuthValid;
- int m_iProxyPort;
- KURL m_proxyURL;
- TQString m_strProxyRealm;
-
- // Operation mode
- TQCString m_protocol;
-
- // Authentication
- TQString m_strRealm;
- TQString m_strAuthorization;
- TQString m_strProxyAuthorization;
- HTTP_AUTH Authentication;
- HTTP_AUTH ProxyAuthentication;
- bool m_bUnauthorized;
- short unsigned int m_iProxyAuthCount;
- short unsigned int m_iWWWAuthCount;
-
- // First request on a connection
- bool m_bFirstRequest;
-
- // Persistent connections
- bool m_bKeepAlive;
- int m_keepAliveTimeout; // Timeout in seconds.
-
- // Persistent proxy connections
- bool m_bPersistentProxyConnection;
-
-
- // Indicates whether there was some connection error.
- bool m_bError;
-
- // Previous and current response codes
- unsigned int m_responseCode;
- unsigned int m_prevResponseCode;
-
- // Values that determine the remote connection timeouts.
- int m_proxyConnTimeout;
- int m_remoteConnTimeout;
- int m_remoteRespTimeout;
-
- int m_pid;
-};
-#endif