diff options
author | Javier <dev.git@javispedro.com> | 2015-12-15 02:42:46 +0100 |
---|---|---|
committer | Javier <dev.git@javispedro.com> | 2015-12-15 02:42:46 +0100 |
commit | 2bb9a14110d909af1894426d456237bfc0b60ad4 (patch) | |
tree | 71ac5a40e0d0934ead3ceff120e9201b7a61d686 /webproxyconn.h | |
parent | 5abd8e0359cfa1dc2437427f2f0446d8801441cb (diff) | |
download | sapd-2bb9a14110d909af1894426d456237bfc0b60ad4.tar.gz sapd-2bb9a14110d909af1894426d456237bfc0b60ad4.zip |
implement the WebProxy agent
Diffstat (limited to 'webproxyconn.h')
-rw-r--r-- | webproxyconn.h | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/webproxyconn.h b/webproxyconn.h index 705428d..c183462 100644 --- a/webproxyconn.h +++ b/webproxyconn.h @@ -5,6 +5,8 @@ #include "sapconnection.h" #include "sapsocket.h" +class WebProxyTrans; + class WebProxyConn : public QObject { Q_OBJECT @@ -13,31 +15,49 @@ public: WebProxyConn(SAPConnection *conn, QObject *parent = 0); protected: - enum RequestMessageType { - RequestStartTransaction = 1, - RequestCancelTransaction = 4 + enum MessageType { + MessageRequest = 1, + MessageResponse = 2, + MessageError = 3, + MessageAbort = 4 }; - struct RequestMessage { + struct Message { quint8 command; // Seems to be always 1 quint8 subCommand; // Seems to be always 1 - RequestMessageType type; + MessageType type; quint8 transactionId; // Monotonically increasing QByteArray payload; }; - static RequestMessage unpackRequestMessage(const QByteArray &data); + static Message unpackMessage(const QByteArray &data); + static QByteArray packMessage(const Message &msg); + + struct RequestHeader { + /** Whether this is a CONNECT request, i.e. tunnel. */ + bool connect; + QString host; + int port; + }; + + static RequestHeader parseRequestHeader(const QByteArray &req); + static QByteArray removeHeaders(const QByteArray &req); + + void sendMessage(const Message &msg); - void handleStartTransaction(const RequestMessage &msg); - void handleCancelTransaction(const RequestMessage &msg); + void handleRequest(const Message &msg); + void handleAbort(const Message &msg); private slots: void handleMessageReceived(); + void handleTransDataReceived(const QByteArray &data); + void handleTransDisconnected(); private: SAPConnection *_conn; SAPSocket *_in; SAPSocket *_out; + QMap<int, WebProxyTrans*> _trans; }; #endif // WEBPROXYCONN_H |