summaryrefslogtreecommitdiff
path: root/webproxyconn.h
diff options
context:
space:
mode:
authorJavier <dev.git@javispedro.com>2015-12-15 02:42:46 +0100
committerJavier <dev.git@javispedro.com>2015-12-15 02:42:46 +0100
commit2bb9a14110d909af1894426d456237bfc0b60ad4 (patch)
tree71ac5a40e0d0934ead3ceff120e9201b7a61d686 /webproxyconn.h
parent5abd8e0359cfa1dc2437427f2f0446d8801441cb (diff)
downloadsapd-2bb9a14110d909af1894426d456237bfc0b60ad4.tar.gz
sapd-2bb9a14110d909af1894426d456237bfc0b60ad4.zip
implement the WebProxy agent
Diffstat (limited to 'webproxyconn.h')
-rw-r--r--webproxyconn.h36
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