玉兔远程控制 0.1.0-bate11
载入中...
搜索中...
未找到
BackendFreeRDPServer.cpp
1// Author: Kang Lin <kl222@126.com>
2
3#include <QLoggingCategory>
4#include "ParameterFreeRDPServer.h"
5#include "BackendFreeRDPServer.h"
6
7static Q_LOGGING_CATEGORY(log, "FreeRDPServer.Backend")
9 COperateFreeRDPServer* pOperate, bool bStopSignal)
10 : CBackendServer(pOperate, bStopSignal)
11 , m_pPara(pOperate->GetParameter())
12 , m_pSettings(nullptr)
13 , m_pServer(nullptr)
14 , m_bServerInit(false)
15{
16 qDebug(log) << Q_FUNC_INFO;
17}
18
19CBackendFreeRDPServer::~CBackendFreeRDPServer()
20{
21 qDebug(log) << Q_FUNC_INFO;
22}
23
25{
26 return 0;
27}
28
45CBackend::OnInitReturnValue CBackendFreeRDPServer::OnInit()
46{
47 shadow_subsystem_set_entry_builtin(NULL);
48
49 m_pServer = shadow_server_new();
50 if (!m_pServer)
51 {
52 qCritical(log) << "Server new failed";
53 return OnInitReturnValue::Fail;
54 }
55
56 SetParameters();
57
58 int nRet = shadow_server_init(m_pServer);
59 if(nRet < 0)
60 {
61 qCritical(log) << "Server initialization failed:" << nRet;
62 return OnInitReturnValue::Fail;
63 }
64 m_bServerInit = true;
65
66 if ((nRet = shadow_server_start(m_pServer)) < 0)
67 {
68 qCritical(log) << "Failed to start server:" << nRet;
69 return OnInitReturnValue::Fail;
70 }
71
72 // Don't use OnProcess (qt event loop)
73 // Because freerdp has new thread process loop
74 return OnInitReturnValue::NotUseOnProcess;
75}
76
78{
79 int nRet = 0;
80 if(m_pServer)
81 {
82 if(m_bServerInit)
83 shadow_server_uninit(m_pServer);
84 shadow_server_free(m_pServer);
85 m_pServer = nullptr;
86 }
87
88 return nRet;
89}
90
107{
108 // TODO: add event dispatch (non-Qt event loop)
109
110 // TODO: When an error occurs. emit sigStop();
111
112 return 0;
113}
114
115int CBackendFreeRDPServer::SetParameters()
116{
117 m_pSettings = m_pServer->settings;
118 m_pSettings->NlaSecurity = m_pPara->getNlaSecurity();
119 m_pSettings->TlsSecurity = m_pPara->getTlsSecurity();
120 m_pSettings->RdpSecurity = m_pPara->getRdpSecurity();
121 m_pSettings->UseRdpSecurityLayer = m_pSettings->RdpSecurity;
122 m_pSettings->ExtSecurity = m_pPara->getNlaExtSecurity();
123 if(!m_pPara->getSamFile().isEmpty())
124 freerdp_settings_set_string(m_pSettings, FreeRDP_NtlmSamFile,
125 m_pPara->getSamFile().toStdString().c_str());
126
127 m_pServer->authentication = m_pPara->getAuthentication();
128
129 m_pServer->port = m_pPara->m_Net.GetPort();
130 m_pServer->mayView = m_pPara->getMayView();
131 m_pServer->mayInteract = m_pPara->getMayInteract();
132
133 return 0;
134}
135
136void CBackendFreeRDPServer::slotDisconnect(const QString &szIp, const quint16 port)
137{
138 // TODO: Disconnect
139}
virtual int WakeUp() override
唤醒后台线程。
virtual OnInitReturnValue OnInit() override
初始化
virtual int OnProcess() override
具体操作处理
virtual int OnClean() override
清理
服务接口。它由协议插件实现。