1 /* 2 * httppoll.h - HTTP polling proxy 3 * Copyright (C) 2003 Justin Karneges 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Lesser General Public 7 * License as published by the Free Software Foundation; either 8 * either version 2 9 of the License, or (at your option) any later version.1 of the License, or (at your option) any later version. 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with this library; if not, write to the Free Software 18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 19 * 20 */ 21 22 #ifndef CS_HTTPPOLL_H 23 #define CS_HTTPPOLL_H 24 25 #include "bytestream.h" 26 27 // CS_NAMESPACE_BEGIN 28 29 class HttpPoll : public ByteStream 30 { 31 Q_OBJECT 32 public: 33 enum Error { ErrConnectionRefused = ErrCustom, ErrHostNotFound, ErrProxyConnect, ErrProxyNeg, ErrProxyAuth }; 34 HttpPoll(QObject *parent=0); 35 ~HttpPoll() override; 36 37 void setAuth(const QString &user, const QString &pass=""); 38 void connectToUrl(const QString &url); 39 void connectToHost(const QString &proxyHost, int proxyPort, const QString &url); 40 41 int pollInterval() const; 42 void setPollInterval(int seconds); 43 44 // from ByteStream 45 bool isOpen() const override; 46 void close() override; 47 48 signals: 49 void connected(); 50 void syncStarted(); 51 void syncFinished(); 52 53 protected: 54 int tryWrite() override; 55 56 private slots: 57 void http_result(); 58 void http_error(int); 59 void do_sync(); 60 61 private: 62 class Private; 63 Private *d; 64 65 void reset(bool clear=false); 66 QByteArray makePacket(const QString &ident, const QString &key, const QString &newkey, const QByteArray &block); 67 void resetKey(); 68 const QString & getKey(bool *); 69 }; 70 71 class HttpProxyPost : public QObject 72 { 73 Q_OBJECT 74 public: 75 enum Error { ErrConnectionRefused, ErrHostNotFound, ErrSocket, ErrProxyConnect, ErrProxyNeg, ErrProxyAuth }; 76 HttpProxyPost(QObject *parent=0); 77 ~HttpProxyPost() override; 78 79 void setAuth(const QString &user, const QString &pass=""); 80 bool isActive() const; 81 void post(const QString &proxyHost, int proxyPort, const QString &url, const QByteArray &data, bool asProxy=true); 82 void stop(); 83 QByteArray body() const; 84 QString getHeader(const QString &) const; 85 86 signals: 87 void result(); 88 void error(int); 89 90 private slots: 91 void sock_connected(); 92 void sock_connectionClosed(); 93 void sock_readyRead(); 94 void sock_error(int); 95 96 private: 97 class Private; 98 Private *d; 99 100 void reset(bool clear=false); 101 }; 102 103 class HttpProxyGetStream : public QObject 104 { 105 Q_OBJECT 106 public: 107 enum Error { ErrConnectionRefused, ErrHostNotFound, ErrSocket, ErrProxyConnect, ErrProxyNeg, ErrProxyAuth }; 108 HttpProxyGetStream(QObject *parent=0); 109 ~HttpProxyGetStream() override; 110 111 void setAuth(const QString &user, const QString &pass=""); 112 bool isActive() const; 113 void get(const QString &proxyHost, int proxyPort, const QString &url, bool ssl=false, bool asProxy=false); 114 void stop(); 115 QString getHeader(const QString &) const; 116 int length() const; // -1 for unknown 117 118 signals: 119 void handshaken(); 120 void dataReady(const QByteArray &buf); 121 void finished(); 122 void error(int); 123 124 private slots: 125 void sock_connected(); 126 void sock_connectionClosed(); 127 void sock_readyRead(); 128 void sock_error(int); 129 130 void tls_readyRead(); 131 void tls_readyReadOutgoing(); 132 void tls_error(); 133 134 private: 135 class Private; 136 Private *d; 137 138 void reset(bool clear=false); 139 void processData(const QByteArray &block); 140 }; 141 142 // CS_NAMESPACE_END 143 144 #endif 145