MythTV  0.26-pre
httpcomms.h
Go to the documentation of this file.
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 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends