aboutsummaryrefslogtreecommitdiff
path: root/src/gatscon/proxythread.cpp
diff options
context:
space:
mode:
authorMike Buland <eichlan@xagasoft.com>2011-05-17 04:18:13 +0000
committerMike Buland <eichlan@xagasoft.com>2011-05-17 04:18:13 +0000
commit6aefa6632023c99c5b91bae0e099df94fa69d890 (patch)
tree6ac83b347cc70dca827c887f0046924dabec042d /src/gatscon/proxythread.cpp
parentefcbdb7a0347b4399cbabacf3cbea432eeafb17b (diff)
downloadlibgats-6aefa6632023c99c5b91bae0e099df94fa69d890.tar.gz
libgats-6aefa6632023c99c5b91bae0e099df94fa69d890.tar.bz2
libgats-6aefa6632023c99c5b91bae0e099df94fa69d890.tar.xz
libgats-6aefa6632023c99c5b91bae0e099df94fa69d890.zip
GatsCon now supports proxying, and way better than qtbenc ever did. Not only
does it proxy, but you can inject your own messages going to the client or host. Pretty slick, really. Next up, reading and creating files.
Diffstat (limited to 'src/gatscon/proxythread.cpp')
-rw-r--r--src/gatscon/proxythread.cpp108
1 files changed, 108 insertions, 0 deletions
diff --git a/src/gatscon/proxythread.cpp b/src/gatscon/proxythread.cpp
new file mode 100644
index 0000000..574b56b
--- /dev/null
+++ b/src/gatscon/proxythread.cpp
@@ -0,0 +1,108 @@
1#include "proxythread.h"
2
3#include <gats/types.h>
4
5#include <bu/tcpsocket.h>
6#include <bu/tcpserversocket.h>
7#include <bu/sio.h>
8#include <bu/membuf.h>
9
10using namespace Bu;
11
12ProxyThread::ProxyThread( QObject *pParent, int iPortIn,
13 const QByteArray &baHostOut, int iPortOut ) :
14 QThread( pParent ),
15 pHost( NULL ),
16 iPortIn( iPortIn ),
17 baHostOut( baHostOut ),
18 iPortOut( iPortOut ),
19 gsCli( ssCli )
20{
21 pHost = new ProxyHostThread( pParent, this );
22}
23
24ProxyThread::~ProxyThread()
25{
26}
27
28void ProxyThread::send( Gats::Object *pObj )
29{
30 MemBuf bg;
31 Gats::GatsStream gs( bg );
32 gs.writeObject( pObj );
33 ssCli.write( bg.getString().getStr(), bg.getString().getSize() );
34}
35
36void ProxyThread::run()
37{
38 int iSockIn;
39
40 {
41 TcpServerSocket tsIn( iPortIn );
42 do
43 {
44 iSockIn = tsIn.accept( 5 );
45 } while( iSockIn < 0 );
46 }
47
48 emit gotConnection();
49
50 ssCli.setStream( new TcpSocket( iSockIn ) );
51 ssCli.setBlocking( true );
52
53 pHost->setStream(
54 new TcpSocket( baHostOut.constData(), iPortOut )
55 );
56
57 pHost->start();
58
59 while( !ssCli.isEos() )
60 {
61 Gats::Object *pObj = gsCli.readObject();
62 if( pObj == NULL )
63 continue;
64
65 pHost->send( pObj );
66 emit recv( pObj );
67 }
68
69}
70
71ProxyHostThread::ProxyHostThread( QObject *pParent, ProxyThread *pClient ) :
72 QThread( pParent ),
73 pClient( pClient ),
74 ssHst(),
75 gsHst( ssHst )
76{
77}
78
79ProxyHostThread::~ProxyHostThread()
80{
81}
82
83void ProxyHostThread::send( Gats::Object *pObj )
84{
85 MemBuf bg;
86 Gats::GatsStream gs( bg );
87 gs.writeObject( pObj );
88 ssHst.write( bg.getString().getStr(), bg.getString().getSize() );
89}
90
91void ProxyHostThread::setStream( Bu::Stream *pStr )
92{
93 ssHst.setStream( pStr );
94}
95
96void ProxyHostThread::run()
97{
98 while( !ssHst.isEos() )
99 {
100 Gats::Object *pObj = gsHst.readObject();
101 if( pObj == NULL )
102 continue;
103
104 pClient->send( pObj );
105 emit recv( pObj );
106 }
107}
108