http.h

来自「konqueror3 embedded版本, KDE环境下的当家浏览器的嵌入式版」· C头文件 代码 · 共 578 行 · 第 1/2 页

H
578
字号
/*   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 <qptrlist.h>#include <qstrlist.h>#include <qstringlist.h>#include <kurl.h>#include "kio/tcpslavebase.h"#include "kio/http.h"class DCOPClient;class QDomElement;class QDomNodeList;namespace KIO {    class AuthInfo;}class HTTPProtocol : public QObject, public KIO::TCPSlaveBase{  Q_OBJECTpublic:  HTTPProtocol( const QCString &protocol, const QCString &pool,                const QCString &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;    }    QString hostname;    QString encoded_hostname;    short unsigned int port;    QString user;    QString passwd;    bool  doProxy;  };  /** DAV-specific request elements for the current connection **/  struct DAVRequest  {    DAVRequest ()    {      overwrite = false;      depth = 0;    }    QString desturl;    bool overwrite;    int depth;  };  /** The request for the current connection **/  struct HTTPRequest  {    HTTPRequest ()    {      port = 0;      method = KIO::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;    }    QString hostname;    QString encoded_hostname;    short unsigned int port;    QString user;    QString passwd;    QString path;    QString query;    KIO::HTTP_METHOD method;    KIO::CacheControl cache;    KIO::filesize_t offset;    bool doProxy;    KURL url;    QString window;                 // Window Id this request is related to.    QString referrer;    QString charsets;    QString languages;    bool allowCompressedPage;    bool disablePassDlg;    QString userAgent;    QString id;    DAVRequest davData;    bool bNoAuth; // Do not authenticate    // Cache related    QString 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    QString etag; // ETag header.    QString 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    QString 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  {    QCString nc;    QCString qop;    QCString realm;    QCString nonce;    QCString method;    QCString cnonce;    QCString username;    QCString password;    QStrList digestURI;    QCString algorithm;    QCString entityBody;  };//---------------------- Re-implemented methods ----------------  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 );//----------------- 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, KIO::HTTP_METHOD method );  // Send requests to lock and unlock resources  void davLock( const KURL& url, const QString& scope,                const QString& type, const QString& owner );  void davUnlock( const KURL& url );  // Calls httpClose() and finished()  void davFinished();  // Handle error conditions  QString davError( int code = -1, QString url = QString::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 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 );  void multiGet(const QByteArray &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 statusprotected slots:  void slotData(const QByteArray &);  void error( int _errid, const QString &_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(QString, QStringList &);  void configAuth( char *, bool );  bool httpOpen();             // Open transfer  void httpClose(bool keepAlive);  // Close transfer

⌨️ 快捷键说明

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