summaryrefslogtreecommitdiff
path: root/webproxyconn.h
diff options
context:
space:
mode:
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