⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 http.h

📁 将konqueror浏览器移植到ARM9 2410中
💻 H
字号:
/*   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>   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., 59 Temple Place - Suite 330,   Boston, MA 02111-1307, 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 <qstrlist.h>#include <qstringlist.h>#include <kurl.h>#include <kmdcodec.h>#include "kio/tcpslavebase.h"class DCOPClient;namespace KIO {    class AuthInfo;}class HTTPProtocol : public KIO::TCPSlaveBase{public:  HTTPProtocol( const QCString &protocol, const QCString &pool, const QCString &app );  virtual ~HTTPProtocol();  /** HTTP version **/  enum HTTP_REV    {HTTP_Unknown, HTTP_10, HTTP_11};  /** Authorization method used **/  enum HTTP_AUTH   {AUTH_None, AUTH_Basic, AUTH_Digest};  /** Current protocol mode used **/  enum HTTP_PROTO  {PROTO_HTTP, PROTO_HTTPS, PROTO_WEBDAV};  /** HTTP method **/  enum HTTP_METHOD {HTTP_GET, HTTP_PUT, HTTP_POST, HTTP_HEAD, HTTP_DELETE};  /** State of the current Connection **/  typedef struct  {    QString hostname;    short unsigned int port;    QString user;    QString passwd;    bool  doProxy;    QString cef; // Cache Entry File belonging to this URL.  } HTTPState;  /** The request for the current connection **/  typedef struct  {    QString hostname;    short unsigned int port;    QString user;    QString passwd;    QString path;    QString query;    HTTP_METHOD method;    KIO::CacheControl cache;    unsigned long offset;    bool doProxy;    KURL url;    QString window;                 // Window Id this request is related to.  } HTTPRequest;  typedef struct  {    QCString nc;    QCString qop;    QCString realm;    QCString nonce;    QCString method;    QCString cnonce;    QCString username;    QCString password;    QStrList digestURI;    QCString algorithm;    QCString entityBody;  } DigestAuthInfo;//---------------------- Re-implemented methods ----------------  void buildURL();  virtual void setHost(const QString& host, int port, const QString& user,                       const QString& pass);  virtual void slave_status();  virtual void get( const KURL& url );  virtual void put( const KURL& url, int _mode, bool _overwrite,                    bool _resume );  /**   * Special commands supported by this slave :   * 1 - HTTP POST   * 2 - Cache has been updated   * 3 - SSL Certificate Cache has been updated   */  virtual void special( const QByteArray &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 );  bool checkRequestURL( const KURL& );  void cache_update( const KURL &url, bool no_cache, time_t expireDate);protected:  void error( int _errid, const QString &_text );  int readChunked();    // Read a chunk  int readLimited();    // Read maximum m_iSize bytes.  int readUnlimited();  // Read as much as possible.  void decodeGzip();    //decodes data compressed with gzip algorithm  void decodeDeflate(); //decodes data compressed with deflate algorithm  /**    * 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 ungets(char *str, int size);  /**    * Add an encoding on to the appropiate stack this    * is nececesary because transfer encodings and    * content encodings must be handled separately.    */  void addEncoding(QString, QStringList &);  void configAuth( const char *, bool );  bool http_open();             // Open transfer  void http_close();            // Close transfer  bool http_openConnection();   // Open connection  void http_checkConnection();  // Check whether to keep connection.  void http_closeConnection();  // Close conection  bool http_isConnected();      // Checks for existing connection.  bool readHeader();  bool sendBody();  bool readBody();  /**   * Send a cookie to the cookiejar   */  void addCookies( const QString &url, const QCString &cookieHeader);  /**   * Look for cookies in the cookiejar   */  QString findCookies( const QString &url);  /**   * Initializes the cookiejar if it is not running already and returns true   * if successful, i.e. the cookiejar started okay or is currently running.   */  bool initCookieJar() const;  /**   * 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 QString &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();  /**   * This function retreives the HEADER as well as the requested content   * from an HTTP server.   */  void retrieveContent();  /**   * This function retrieves and parses the HEADER from the   * the requested HTTP server.   */  bool retrieveHeader(bool close_connection = true);  /**   * Resets any per session settings.   */  void resetSessionSettings();  /**   * Returns any pre-cached authentication info   * in HTTP header format.   */  QString 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.   */  QString createBasicAuth( bool isForProxy = false );  /**   * Creates the entity-header for Digest authentication.   */  QString createDigestAuth( bool isForProxy = false );  /**   * Calcualtes the message digest response based on RFC 2617.   */  void calculateResponse( DigestAuthInfo& info, HASHHEX Response );  /**   * Prompts the user for authorization retry.   */  bool retryPrompt();  /**   * Creates authorization prompt info.   */  void promptInfo( KIO::AuthInfo& info );protected:  HTTPState m_state;  HTTPRequest m_request;  bool m_bEOF;  HTTP_REV m_HTTPrev;  HTTP_PROTO m_proto;  int m_iSize; // Expected size of message  long m_iBytesLeft; // # of bytes left to receive in this message.  QByteArray m_bufReceive; // Receive buffer  char m_lineBuf[1024];  char *m_linePtr;  size_t m_lineCount;  char *m_lineBufUnget;  char *m_linePtrUnget;  size_t m_lineCountUnget;  // Holds the POST data so it won't get lost on if we  // happend to get a 401/407 response when submitting,  // a form.  QByteArray m_bufPOST;  // Cache related  bool m_bUseCache; // Whether the cache is active  bool m_bCachedRead; // Whether the file is to be read from m_fcache.  bool m_bCachedWrite; // Whether the file is to be written to m_fcache.  int m_maxCacheAge; // Maximum age of a cache entry.  FILE* m_fcache; // File stream of a cache entry  QString m_strCacheDir; // Location of the cache.  QString m_etag; // ETag header.  QString m_lastModified; // Last modified.  bool m_bMustRevalidate; // Cache entry is expired.  long m_cacheExpireDateOffset; // Position in the cache entry where the                                // 16 byte expire date is stored.  time_t m_expireDate;  // Language/Encoding  QStringList m_qTransferEncodings;  QStringList m_qContentEncodings;  QByteArray m_bufEncodedData;  QString m_sContentMD5;  QString m_strMimeType;  QString m_strCharset;  QString m_strCharsets;  QString m_strLanguages;  // Proxy related members  bool m_bUseProxy;  bool m_bIsTunneled;  int m_iProxyPort;  KURL m_proxyURL;  QString m_strProxyRealm;  QCString m_protocol;  // Authentication  QString m_strRealm;  QString m_strAuthorization;  QString m_strProxyAuthorization;  HTTP_AUTH Authentication;  HTTP_AUTH ProxyAuthentication;  bool m_bUnauthorized;  short unsigned int m_iProxyAuthCount;  short unsigned int m_iWWWAuthCount;  // Persistant connections  bool m_bKeepAlive;  // Resumable connections  bool m_bCanResume;  // Chunked tranfer encoding  bool m_bChunked;  // Cookie flags  bool m_bUseCookiejar;  enum { CookiesAuto, CookiesManual, CookiesNone } m_cookieMode;  // Indicates whether there was some connection error.  bool m_bError;  // Indicates whether an error-page or error-msg should is preferred.  bool m_bErrorPage;  DCOPClient *m_dcopClient;  // 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;};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -