玉兔远程控制
0.1.0-bate11
Toggle main menu visibility
载入中...
搜索中...
未找到
Src
SSH
SSHTunnelThread.cpp
1
// Author: Kang Lin <kl222@126.com>
2
3
#include <QLoggingCategory>
4
#include <QThread>
5
6
#include "ChannelSSHTunnelForward.h"
7
#include "SSHTunnelThread.h"
8
9
static
Q_LOGGING_CATEGORY(log,
"SSH.Tunnel.Thread"
)
10
11
CSSHTunnelThread
::
CSSHTunnelThread
(
CParameterSSHTunnel
*parameter,
CParameterNet
*remote,
CBackend
*pBackend)
12
: QThread(
nullptr
),
13
m_pBackend(pBackend),
14
m_bExit(false),
15
m_pParameter(parameter),
16
m_pRemoteNet(remote)
17
{
18
qDebug(log) <<
"CSSHTunnelThread::CSSHTunnelThread"
;
19
bool
check =
false
;
20
check = connect(
this
, SIGNAL(finished()),
this
, SLOT(deleteLater()));
21
Q_ASSERT(check);
22
}
23
24
CSSHTunnelThread::~CSSHTunnelThread()
25
{
26
qDebug(log) <<
"CSSHTunnelThread::~CSSHTunnelThread"
;
27
}
28
29
void
CSSHTunnelThread::Exit()
30
{
31
m_bExit =
true
;
32
}
33
34
void
CSSHTunnelThread::run()
35
{
36
int
nRet = 0;
37
qDebug(log) <<
"CSSHTunnelThread run"
;
38
CChannelSSHTunnelForward* p =
new
CChannelSSHTunnelForward(
39
m_pParameter, m_pRemoteNet, m_pBackend);
40
if
(!p)
41
return
;
42
43
do
{
44
bool
check = connect(p, SIGNAL(
sigServer
(QString, quint16)),
45
this
, SIGNAL(
sigServer
(QString, quint16)));
46
Q_ASSERT(check);
47
check = connect(p, SIGNAL(
sigServer
(QString)),
48
this
, SIGNAL(
sigServer
(QString)));
49
Q_ASSERT(check);
50
check = connect(p, SIGNAL(sigError(
int
,QString)),
this
,
51
SIGNAL(sigError(
int
,QString)));
52
Q_ASSERT(check);
53
54
if
(!p->
open
(QIODevice::ReadWrite)) {
55
emit m_pBackend->sigShowMessageBox(
56
tr(
"Error"
), p->errorString(), QMessageBox::Critical);
57
nRet = -1;
58
break
;
59
}
60
while
(!m_bExit && nRet >= 0) {
61
nRet = p->
Process
();
62
if
(nRet) {
63
qCritical(log) <<
"Process fail"
<< p->errorString();
64
break
;
65
}
66
}
67
68
p->close();
69
}
while
(0);
70
71
if
(nRet)
72
emit sigError(nRet, p->errorString());
73
74
emit sigStop();
75
p->deleteLater();
76
77
qDebug(log) <<
"CSSHTunnelThread end"
;
78
}
CBackend
后端接口。它由协议插件实现。 它默认启动一个定时器来开启一个非 Qt 事件循环(就是普通的循环处理)。 详见: Start()、 slotTimeOut()、 OnProcess() 。 当然,它仍然支...
定义
Backend.h:52
CChannelSSHTunnelForward::open
virtual bool open(OpenMode mode) override
定义
ChannelSSHTunnelForward.cpp:201
CChannelSSHTunnelForward::Process
virtual int Process()
定义
ChannelSSHTunnelForward.cpp:372
CParameterNet
网络连接参数接口。此类仅在插件内有效。 其界面为 CParameterNetUI
定义
ParameterNet.h:27
CParameterSSHTunnel
定义
ParameterSSH.h:28
CSSHTunnelThread
实现通过本地 SOCKET 与 SSH 隧道转发数据。适用于库没有实现传输层接口,只有 socket 的情况。
定义
SSHTunnelThread.h:26
CSSHTunnelThread::sigServer
void sigServer(QString szHost, quint16 nPort)
当 SOCKET 服务建立监听后触发,用于通知其它本地 SOCKET 可以连接它
作者:康林 (kl222@126.com)
版权所有(c) 康林工作室 保留所有权力