玉兔远程控制 0.0.31
载入中...
搜索中...
未找到
信号 | Public 成员函数 | Private 属性 | 所有成员列表
CSSHTunnelThread类 参考

实现通过本地 SOCKET 与 SSH 隧道转发数据。适用于库没有实现传输层接口,只有 socket 的情况。 更多...

#include <SSHTunnelThread.h>

类 CSSHTunnelThread 继承关系图:

信号

void sigServer (QString szHost, quint16 nPort)
 当 SOCKET 服务建立监听后触发,用于通知其它本地 SOCKET 可以连接它
 
void sigServer (QString szUnixDomainSocket)
 
void sigError (const int nError, const QString &szError=QString())
 
void sigDisconnect ()
 

Public 成员函数

 CSSHTunnelThread (QSharedPointer< CParameterChannelSSH > parameter)
 
void run () override
 
void Exit ()
 

Private 属性

QSharedPointer< CParameterChannelSSHm_Parameter
 
bool m_bExit
 

详细描述

实现通过本地 SOCKET 与 SSH 隧道转发数据。适用于库没有实现传输层接口,只有 socket 的情况。

注解
当线程完成后,会自动删除实例对象。
#ifdef HAVE_LIBSSH
case CParameterProxy::TYPE::SSHTunnel:
{
// Set SSH parameters
QSharedPointer<CParameterChannelSSH> parameter(new CParameterChannelSSH());
auto &ssh = m_pParameter->m_Proxy.m_SSH;
parameter->setServer(ssh.GetHost());
parameter->setPort(ssh.GetPort());
auto &user = ssh.m_User;
parameter->SetUser(user.GetUser());
parameter->SetUseSystemFile(user.GetUseSystemFile());
if(CParameterUser::TYPE::UserPassword == user.GetUsedType()) {
parameter->SetAuthenticationMethod(SSH_AUTH_METHOD_PASSWORD);
parameter->SetPassword(user.GetPassword());
}
if(CParameterUser::TYPE::PublicKey == user.GetUsedType()) {
parameter->SetAuthenticationMethod(SSH_AUTH_METHOD_PUBLICKEY);
parameter->SetPublicKeyFile(user.GetPublicKeyFile());
parameter->SetPrivateKeyFile(user.GetPrivateKeyFile());
parameter->SetPassphrase(user.GetPassphrase());
}
auto &net = m_pParameter->m_Net;
parameter->SetRemoteHost(net.GetHost());
parameter->SetRemotePort(net.GetPort());
// Start ssh thread
if(!m_pThread)
m_pThread = new CSSHTunnelThread(parameter);
if(!m_pThread)
return OnInitReturnValue::Fail;
bool check = connect(m_pThread, SIGNAL(sigServer(QString, quint16)),
this, SLOT(slotConnectProxyServer(QString, quint16)));
Q_ASSERT(check);
#if defined(HAVE_UNIX_DOMAIN_SOCKET) && defined(Q_OS_UNIX)
check = connect(m_pThread, SIGNAL(sigServer(QString)),
this, SLOT(slotConnectProxyServer(QString)));
Q_ASSERT(check);
#endif
check = connect(m_pThread, SIGNAL(sigError(int,QString)),
this, SIGNAL(sigError(int,QString)));
Q_ASSERT(check);
check = connect(m_pThread, SIGNAL(sigDisconnect()),
this, SIGNAL(sigDisconnect()));
Q_ASSERT(check);
m_pThread->start();
return OnInitReturnValue::UseOnProcess;
}
#endif
实现通过本地 SOCKET 与 SSH 隧道转发数据。适用于库没有实现传输层接口,只有 socket 的情况。
void sigServer(QString szHost, quint16 nPort)
当 SOCKET 服务建立监听后触发,用于通知其它本地 SOCKET 可以连接它
参见
CChannelSSHTunnelForward

在文件 SSHTunnelThread.h24 行定义.

构造及析构函数说明

◆ ~CSSHTunnelThread()

CSSHTunnelThread::~CSSHTunnelThread ( )
virtual

在文件 SSHTunnelThread.cpp23 行定义.

成员函数说明

◆ Exit()

void CSSHTunnelThread::Exit ( )

在文件 SSHTunnelThread.cpp28 行定义.

◆ run()

void CSSHTunnelThread::run ( )
override

在文件 SSHTunnelThread.cpp33 行定义.

◆ sigServer

void CSSHTunnelThread::sigServer ( QString  szHost,
quint16  nPort 
)
signal

当 SOCKET 服务建立监听后触发,用于通知其它本地 SOCKET 可以连接它

void CConnectLibVNCServer::slotConnectProxyServer(QString szHost, quint16 nPort)
{
QString szErr;
qDebug(log) << "CConnectLibVNCServer::slotConnectServer" << nPort;
// Set server ip and port
m_pClient->serverHost = strdup(szHost.toStdString().c_str());
m_pClient->serverPort = nPort;
szErr = tr("Connect to local socket server %1:%2")
.arg(m_pClient->serverHost,
QString::number(m_pClient->serverPort));
qDebug(log) << szErr;
if(!rfbInitClient(m_pClient, nullptr, nullptr))
{
szErr += tr(" fail");
qCritical(log) << szErr;
//emit sigShowMessageBox(tr("Error"), szErr, QMessageBox::Critical);
return;
}
QString szInfo = QString("Connect to ") + m_pClient->desktopName;
qInfo(log) << szInfo;
emit sigSetDesktopSize(m_pClient->width, m_pClient->height);
emit sigServerName(m_pClient->desktopName);
emit sigInformation(szInfo);
emit sigConnected();
}
#if defined(HAVE_UNIX_DOMAIN_SOCKET) && defined(Q_OS_UNIX)
{
QString szErr;
qDebug(log) << "CConnectLibVNCServer::slotConnectServer" << szFile;
// Set server ip and port
m_pClient->serverHost = strdup(szFile.toStdString().c_str());
szErr = tr("Connect to local socket server ") + szFile;
qDebug(log) << szErr;
if(!rfbInitClient(m_pClient, nullptr, nullptr))
{
szErr += + " " + tr("fail");
qCritical(log) << szErr;
//emit sigShowMessageBox(tr("Error"), szErr, QMessageBox::Critical);
return;
}
QString szInfo = QString("Connect to ") + m_pClient->desktopName;
qInfo(log) << szInfo;
emit sigSetDesktopSize(m_pClient->width, m_pClient->height);
emit sigServerName(m_pClient->desktopName);
emit sigInformation(szInfo);
emit sigConnected();
}
#endif
void slotConnectProxyServer(QString szHost, quint16 nPort)
[connect local socket server]

类成员变量说明

◆ m_bExit

bool CSSHTunnelThread::m_bExit
private

在文件 SSHTunnelThread.h50 行定义.

◆ m_Parameter

QSharedPointer<CParameterChannelSSH> CSSHTunnelThread::m_Parameter
private

在文件 SSHTunnelThread.h49 行定义.


该类的文档由以下文件生成: