-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathtransferskt.h
174 lines (134 loc) · 3.44 KB
/
transferskt.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
#ifndef __TRANSFERSKT_H__
#define __TRANSFERSKT_H__
#include <QHash>
#include <QTcpServer>
#include <QUdpSocket>
#include <QDateTime>
#include <QTimer>
#include <QMutex>
#include <QStringList>
//---------add by davidWu 2013/12/30---------
//struct Host
//{
// QString IPAddress;
// quint16 Port;
// Host():IPAddress("null"), Port(0) { }
//};
//struct TransferInfo
//{
// Host srcHost;
// Host dstHost;
//};
//---------end---------
class TransferSkt : public QObject
{
typedef QHash<QString, void*> OBJMAP;
Q_OBJECT
public:
TransferSkt(QStringList *whiteIPList = NULL, QObject *parent=0);
virtual ~TransferSkt();
virtual QString name() const { return "General"; }
bool start(const QHostAddress& sip, quint16 spt, const QHostAddress& dip, quint16 dpt);
void kill(const QString& key);
void stop();
void send(const QString& key, bool s2d, const QString& data);
const QHostAddress& srcAddr() const { return m_sip; }
const QHostAddress& dstAddr() const { return m_dip; }
quint16 srcPort() const { return m_spt; }
quint16 dstPort() const { return m_dpt; }
signals:
void connOpen(const QString& key);
void connClose(const QString& key);
void message(const QString& msg);
void dumpbin(const QString& title, const char* data, quint32 len);
void stopped();
void countRecv(qint32 bytes);
void countSend(qint32 bytes);
protected:
enum DIR { TS2D, TD2S, SS2D, SD2S, };
void dump(const char* buf, qint32 len, DIR dir, const QString& key);
void show(const QString& msg);
void setError(const QString& err);
void recordRecv(qint32 bytes);
void recordSend(qint32 bytes);
void getKeys(QStringList& res);
void setCookie(const QString& k, void* v);
void unsetCookie(const QString& k);
void* getCookie(const QString& k);
virtual bool open() =0;
virtual bool close(void* cookie) =0;
virtual void send(void* cookie, bool s2d, const QByteArray& bin) =0;
virtual void close() =0;
private:
QHostAddress m_sip;
QHostAddress m_dip;
quint16 m_spt;
quint16 m_dpt;
OBJMAP m_conns;
QString m_error;
//add by davidWu 2013/12/31
public:
QStringList* whiteIPList;
bool whiteIPListEnabled;
protected:
QStringList localIPList;
//end
};
class TransferSktTcp : public TransferSkt
{
typedef struct _Conn
{
QTcpSocket* src;
QTcpSocket* dst;
QString key;
} Conn;
Q_OBJECT
public:
TransferSktTcp(QStringList *whiteIPList = NULL, QObject *parent=0);
virtual ~TransferSktTcp();
virtual QString name() const { return "TCP"; }
protected:
virtual bool open();
virtual bool close(void* cookie);
virtual void send(void* cookie, bool s2d, const QByteArray& bin);
virtual void close();
private slots:
void newConnection();
void asynConnection();
void newData();
void error();
void close(QObject* obj);
private:
QTcpServer m_server;
QMutex m_door;
};
class TransferSktUdp : public TransferSkt
{
typedef struct _Conn
{
QUdpSocket* dst;
QHostAddress addr;
quint16 port;
QDateTime stamp;
QString key;
} Conn;
Q_OBJECT
public:
TransferSktUdp(QStringList *whiteIPList = NULL, QObject *parent=0);
virtual ~TransferSktUdp();
virtual QString name() const { return "UDP"; }
protected:
virtual bool open();
virtual bool close(void* cookie);
virtual void send(void* cookie, bool s2d, const QByteArray& bin);
virtual void close();
private slots:
void newData();
void error();
void check();
void close(QObject* obj);
private:
QUdpSocket m_server;
QTimer m_timer;
};
#endif // __TRANSFERSKT_H__