text: /****************************************************************************
  **
  ** Copyright (C) 2015 The Qt Company Ltd.
  ** Contact: http://www.qt.io/licensing/
  **
  ** This file is part of the QtNetwork module of the Qt Toolkit.
  **
  ** $QT_BEGIN_LICENSE:LGPL$
  ** Commercial License Usage
  ** Licensees holding valid commercial Qt licenses may use this file in
  ** accordance with the commercial license agreement provided with the
  ** Software or, alternatively, in accordance with the terms contained in
  ** a written agreement between you and The Qt Company. For licensing terms
  ** and conditions see http://www.qt.io/terms-conditions. For further
  ** information use the contact form at http://www.qt.io/contact-us.
  **
  ** GNU Lesser General Public License Usage
  ** Alternatively, this file may be used under the terms of the GNU Lesser
  ** General Public License version 2.1 or version 3 as published by the Free
  ** Software Foundation and appearing in the file LICENSE.LGPLv21 and
  ** LICENSE.LGPLv3 included in the packaging of this file. Please review the
  ** following information to ensure the GNU Lesser General Public License
  ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
  ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
  **
  ** As a special exception, The Qt Company gives you certain additional
  ** rights. These rights are described in The Qt Company LGPL Exception
  ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
  **
  ** GNU General Public License Usage
  ** Alternatively, this file may be used under the terms of the GNU
  ** General Public License version 3.0 as published by the Free Software
  ** Foundation and appearing in the file LICENSE.GPL included in the
  ** packaging of this file.  Please review the following information to
  ** ensure the GNU General Public License version 3.0 requirements will be
  ** met: http://www.gnu.org/copyleft/gpl.html.
  **
  ** $QT_END_LICENSE$
  **
  ****************************************************************************/
  
  #ifndef QNETWORKREPLY_H
  #define QNETWORKREPLY_H
  
  #include <QtCore/QIODevice>
  #include <QtCore/QString>
  #include <QtCore/QVariant>
  
  #include <QtNetwork/QNetworkRequest>
  #include <QtNetwork/QNetworkAccessManager>
  
  QT_BEGIN_HEADER
  
  QT_BEGIN_NAMESPACE
  
  QT_MODULE(Network)
  
  class QUrl;
  class QVariant;
  class QAuthenticator;
  class QSslConfiguration;
  class QSslError;
  
  class QNetworkReplyPrivate;
  class Q_NETWORK_EXPORT QNetworkReply: public QIODevice
  {
      Q_OBJECT
      Q_ENUMS(NetworkError)
  public:
      enum NetworkError {
          NoError = 0,
  
          // network layer errors [relating to the destination server] (1-99):
          ConnectionRefusedError = 1,
          RemoteHostClosedError,
          HostNotFoundError,
          TimeoutError,
          OperationCanceledError,
          SslHandshakeFailedError,
          TemporaryNetworkFailureError,
          UnknownNetworkError = 99,
  
          // proxy errors (101-199):
          ProxyConnectionRefusedError = 101,
          ProxyConnectionClosedError,
          ProxyNotFoundError,
          ProxyTimeoutError,
          ProxyAuthenticationRequiredError,
          UnknownProxyError = 199,
  
          // content errors (201-299):
          ContentAccessDenied = 201,
          ContentOperationNotPermittedError,
          ContentNotFoundError,
          AuthenticationRequiredError,
          ContentReSendError,
          UnknownContentError = 299,
  
          // protocol errors
          ProtocolUnknownError = 301,
          ProtocolInvalidOperationError,
          ProtocolFailure = 399
      };
  
      ~QNetworkReply();
      virtual void abort() = 0;
  
      // reimplemented from QIODevice
      virtual void close();
      virtual bool isSequential() const;
  
      // like QAbstractSocket:
      qint64 readBufferSize() const;
      virtual void setReadBufferSize(qint64 size);
  
      QNetworkAccessManager *manager() const;
      QNetworkAccessManager::Operation operation() const;
      QNetworkRequest request() const;
      NetworkError error() const;
      bool isFinished() const;
      bool isRunning() const;
      QUrl url() const;
  
      // "cooked" headers
      QVariant header(QNetworkRequest::KnownHeaders header) const;
  
      // raw headers:
      bool hasRawHeader(const QByteArray &headerName) const;
      QList<QByteArray> rawHeaderList() const;
      QByteArray rawHeader(const QByteArray &headerName) const;
  
      typedef QPair<QByteArray, QByteArray> RawHeaderPair;
      const QList<RawHeaderPair>& rawHeaderPairs() const;
  
      // attributes
      QVariant attribute(QNetworkRequest::Attribute code) const;
  
  #ifndef QT_NO_OPENSSL
      QSslConfiguration sslConfiguration() const;
      void setSslConfiguration(const QSslConfiguration &configuration);
      void ignoreSslErrors(const QList<QSslError> &errors);
  #endif
  
  public Q_SLOTS:
      virtual void ignoreSslErrors();
  
  Q_SIGNALS:
      void metaDataChanged();
      void finished();
      void error(QNetworkReply::NetworkError);
  #ifndef QT_NO_OPENSSL
      void sslErrors(const QList<QSslError> &errors);
  #endif
  
      void uploadProgress(qint64 bytesSent, qint64 bytesTotal);
      void downloadProgress(qint64 bytesReceived, qint64 bytesTotal);
  
  protected:
      QNetworkReply(QObject *parent = 0);
      QNetworkReply(QNetworkReplyPrivate &dd, QObject *parent);
      virtual qint64 writeData(const char *data, qint64 len);
  
      void setOperation(QNetworkAccessManager::Operation operation);
      void setRequest(const QNetworkRequest &request);
      void setError(NetworkError errorCode, const QString &errorString);
      void setFinished(bool);
      void setUrl(const QUrl &url);
      void setHeader(QNetworkRequest::KnownHeaders header, const QVariant &value);
      void setRawHeader(const QByteArray &headerName, const QByteArray &value);
      void setAttribute(QNetworkRequest::Attribute code, const QVariant &value);
  
  private:
      Q_DECLARE_PRIVATE(QNetworkReply)
  };
  
  QT_END_NAMESPACE
  
  QT_END_HEADER
  
  #endif
  