📄 qwebnetworkinterface_p.h
字号:
/* Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) 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 QWEBNETWORKINTERFACE_P_H#define QWEBNETWORKINTERFACE_P_H#include "qwebnetworkinterface.h"#if QT_VERSION < 0x040400#include <qthread.h>#include <qmutex.h>namespace WebCore { struct HostInfo; class ResourceRequest;};uint qHash(const WebCore::HostInfo &info);#include <qhash.h>namespace WebCore { class ResourceHandle;}struct QWebNetworkRequestPrivate{ QUrl url; QHttpRequestHeader httpHeader; QByteArray postData; void init(const WebCore::ResourceRequest &resourceRequest); void init(const QString &method, const QUrl &url, const WebCore::ResourceRequest *resourceRequest = 0); void setURL(const QUrl &u);};class QWebNetworkJobPrivate{public: QWebNetworkJobPrivate() : ref(1) , resourceHandle(0) , redirected(false) , interface(0) , jobStatus(QWebNetworkJob::JobCreated) {} int ref; QWebNetworkRequestPrivate request; QHttpResponseHeader response; WebCore::ResourceHandle *resourceHandle; bool redirected; QWebNetworkInterface *interface; QWebNetworkJob::JobStatus jobStatus; QString errorString;};class QWebNetworkManager : public QObject{ Q_OBJECTpublic: enum JobMode { AsynchronousJob, SynchronousJob }; static QWebNetworkManager *self(); bool add(WebCore::ResourceHandle *resourceHandle, QWebNetworkInterface *interface, JobMode = AsynchronousJob); void cancel(WebCore::ResourceHandle *resourceHandle); void addHttpJob(QWebNetworkJob *job); void cancelHttpJob(QWebNetworkJob *job);protected: void queueStart(QWebNetworkJob*); void queueData(QWebNetworkJob*, const QByteArray&); void queueFinished(QWebNetworkJob*, int errorCode);private: void started(QWebNetworkJob *); void data(QWebNetworkJob *, const QByteArray &data); void finished(QWebNetworkJob *, int errorCode); void doScheduleWork();signals: void fileRequest(QWebNetworkJob*); void scheduleWork();private slots: void httpConnectionClosed(const WebCore::HostInfo &); void doWork();private: friend class QWebNetworkInterface; QWebNetworkManager(); QHash<WebCore::HostInfo, WebCore::WebCoreHttp *> m_hostMapping; struct JobWork { enum WorkType { JobStarted, JobData, JobFinished }; explicit JobWork(QWebNetworkJob* _job) : workType(JobStarted) , errorCode(-1) , job(_job) {} explicit JobWork(QWebNetworkJob* _job, int _errorCode) : workType(JobFinished) , errorCode(_errorCode) , job(_job) {} explicit JobWork(QWebNetworkJob* _job, const QByteArray& _data) : workType(JobData) , errorCode(-1) , job(_job) , data(_data) {} const WorkType workType; int errorCode; QByteArray data; QWebNetworkJob* job; }; QMutex m_queueMutex; bool m_scheduledWork; QList<JobWork*> m_pendingWork; QHash<QWebNetworkJob*, int> m_synchronousJobs;};namespace WebCore { class NetworkLoader; struct HostInfo { HostInfo() {} HostInfo(const QUrl& url); QString protocol; QString host; int port; }; class WebCoreHttp : public QObject { Q_OBJECT public: WebCoreHttp(QObject *parent, const HostInfo&); ~WebCoreHttp(); void request(QWebNetworkJob* resource); void cancel(QWebNetworkJob*); signals: void connectionClosed(const WebCore::HostInfo &); private slots: void onResponseHeaderReceived(const QHttpResponseHeader& resp); void onReadyRead(); void onRequestFinished(int, bool); void onDone(bool); void onStateChanged(int); void onSslErrors(const QList<QSslError>&); void onAuthenticationRequired(const QString& hostname, quint16 port, QAuthenticator *); void onProxyAuthenticationRequired(const QNetworkProxy& proxy, QAuthenticator *); void scheduleNextRequest(); int getConnection(); public: HostInfo info; private: QList<QWebNetworkJob *> m_pendingRequests; struct HttpConnection { HttpConnection() : http(0), current(0), id(-1) {} QHttp *http; QWebNetworkJob *current; int id; // the QHttp id }; HttpConnection connection[2]; bool m_inCancel; };}class QWebNetworkInterfacePrivate{public: void sendFileData(QWebNetworkJob* job, int statusCode, const QByteArray &data); void parseDataUrl(QWebNetworkJob* job); QWebNetworkInterface *q;};#endif#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -