|
MythTV
0.26-pre
|
00001 #ifndef HTTPCOMMS_H_ 00002 #define HTTPCOMMS_H_ 00003 00004 #include <QByteArray> 00005 #include <QString> 00006 #include <QObject> 00007 #include <QHttp> 00008 #include <QUrl> 00009 00010 #include "mythbaseexp.h" 00011 00012 class QTimer; 00013 class MBASE_PUBLIC HttpComms : public QObject 00014 { 00015 Q_OBJECT 00016 public: 00017 HttpComms(); 00018 HttpComms(QUrl &url, int timeoutms = -1); 00019 HttpComms(QUrl &url, QHttpRequestHeader &header, int timeoutms = -1); 00020 virtual ~HttpComms(); 00021 00022 bool isDone(void) const { return m_done; } 00023 int getProgress(void) const { return m_progress; } 00024 int getTotal(void) const { return m_total; } 00025 00026 int getStatusCode(void) const { return m_statusCode; } 00027 QString getResponseReason(void) const { return m_responseReason; } 00028 00029 QString getData(void) const { return QString(m_data); } 00030 QByteArray getRawData(void) const { return m_data; } 00031 00032 QString getRedirectedURL(void) const { return m_redirectedURL; } 00033 00034 void stop(); 00035 00036 bool isTimedout(void) const { return m_timeout; } 00037 00038 class Credentials 00039 { 00040 public: 00041 explicit Credentials(const QString &_user = "", 00042 const QString &_pass = "") 00043 : user(_user), pass(_pass) { } 00044 00045 QString user; 00046 QString pass; 00047 }; 00048 00049 enum CredentialTypes { CRED_WEB, CRED_PROXY }; 00050 00051 void setCredentials(const Credentials& cred, int credType) 00052 { 00053 if (credType == CRED_PROXY) 00054 m_proxyCredentials = cred; 00055 else 00056 m_webCredentials = cred; 00057 } 00058 00059 00060 static QString getHttp(QString& url, int timeoutMS = 10000, 00061 int maxRetries = 3, int maxRedirects = 3, 00062 bool allowGzip = false, 00063 Credentials* webCred = NULL, 00064 bool isInQtEventThread = true); 00065 00066 static bool getHttpFile(const QString& file, QString& url, int timeoutMS = 10000, 00067 int maxRetries = 3, int maxRedirects = 3, 00068 bool allowGzip = false, Credentials* webCred = NULL); 00069 00070 static QString postHttp( 00071 QUrl &url, 00072 QHttpRequestHeader *pAddlHdr = NULL, 00073 QIODevice *pData = NULL, 00074 int timeoutMS = 10000, 00075 int maxRetries = 3, 00076 int maxRedirects = 3, 00077 bool allowGzip = false, 00078 Credentials *webCred = NULL, 00079 bool isInQtEventThread = true, 00080 QString userAgent = "<default>"); 00081 00082 void request(QUrl &url, int timeoutms = -1, bool allowGzip = false); 00083 void request(QUrl &url, QHttpRequestHeader &header, int timeoutms = -1, QIODevice *pData = NULL ); 00084 00085 void setCookie( const QString& cookie ) { m_cookie = cookie; } 00086 const QString& getCookie() const { return m_cookie; } 00087 00088 protected: 00089 struct DigestAuthInfo 00090 { 00091 QByteArray nc; 00092 QByteArray qop; 00093 QByteArray realm; 00094 QByteArray nonce; 00095 QByteArray method; 00096 QByteArray cnonce; 00097 QByteArray username; 00098 QByteArray password; 00099 QStringList digestURI; 00100 QByteArray algorithm; 00101 QByteArray entityBody; 00102 }; 00103 00104 void init(); 00105 00106 void calculateDigestResponse( DigestAuthInfo& info, QByteArray& Response ); 00107 bool createDigestAuth( bool isForProxy, const QString& authStr, QHttpRequestHeader* request ); 00108 00109 private slots: 00110 void timeout(); 00111 void done(bool error); 00112 void stateChanged(int state); 00113 void dataReadProgress(int done, int total); 00114 void headerReceived(const QHttpResponseHeader &resp); 00115 00116 private: 00117 int m_statusCode; 00118 QString m_redirectedURL; 00119 QString m_responseReason; 00120 Credentials m_webCredentials; 00121 Credentials m_proxyCredentials; 00122 QHttp *http; 00123 bool m_done; 00124 QByteArray m_data; 00125 QUrl m_url; 00126 QTimer* m_timer; 00127 bool m_timeout; 00128 bool m_authNeeded; 00129 int m_timeoutInterval; 00130 QString m_cookie; 00131 int m_progress; 00132 int m_total; 00133 00134 QHttpRequestHeader m_curRequest; 00135 }; 00136 00137 #endif 00138
1.7.6.1