From 2bb9a14110d909af1894426d456237bfc0b60ad4 Mon Sep 17 00:00:00 2001 From: Javier Date: Tue, 15 Dec 2015 02:42:46 +0100 Subject: implement the WebProxy agent --- webproxyconn.h | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) (limited to 'webproxyconn.h') 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 _trans; }; #endif // WEBPROXYCONN_H -- cgit v1.2.3