Rabbit Remote Control 0.1.0-bate10
Loading...
Searching...
No Matches
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
40CBackend::OnInitReturnValue CBackendFreeRDPServer::OnInit()
41{
42 shadow_subsystem_set_entry_builtin(NULL);
43
44 m_pServer = shadow_server_new();
45 if (!m_pServer)
46 {
47 qCritical(log) << "Server new failed";
48 return OnInitReturnValue::Fail;
49 }
50
51 SetParameters();
52
53 int nRet = shadow_server_init(m_pServer);
54 if(nRet < 0)
55 {
56 qCritical(log) << "Server initialization failed:" << nRet;
57 return OnInitReturnValue::Fail;
58 }
59 m_bServerInit = true;
60
61 if ((nRet = shadow_server_start(m_pServer)) < 0)
62 {
63 qCritical(log) << "Failed to start server:" << nRet;
64 return OnInitReturnValue::Fail;
65 }
66
67 // Don't use OnProcess (qt event loop)
68 // Because freerdp has new thread process loop
69 return OnInitReturnValue::NotUseOnProcess;
70}
71
73{
74 int nRet = 0;
75 if(m_pServer)
76 {
77 if(m_bServerInit)
78 shadow_server_uninit(m_pServer);
79 shadow_server_free(m_pServer);
80 m_pServer = nullptr;
81 }
82
83 return nRet;
84}
85
102{
103 // TODO: add event dispatch (non-Qt event loop)
104
105 // TODO: When an error occurs. emit sigStop();
106
107 return 0;
108}
109
110int CBackendFreeRDPServer::SetParameters()
111{
112 m_pSettings = m_pServer->settings;
113 m_pSettings->NlaSecurity = m_pPara->getNlaSecurity();
114 m_pSettings->TlsSecurity = m_pPara->getTlsSecurity();
115 m_pSettings->RdpSecurity = m_pPara->getRdpSecurity();
116 m_pSettings->UseRdpSecurityLayer = m_pSettings->RdpSecurity;
117 m_pSettings->ExtSecurity = m_pPara->getNlaExtSecurity();
118 if(!m_pPara->getSamFile().isEmpty())
119 freerdp_settings_set_string(m_pSettings, FreeRDP_NtlmSamFile,
120 m_pPara->getSamFile().toStdString().c_str());
121
122 m_pServer->authentication = m_pPara->getAuthentication();
123
124 m_pServer->port = m_pPara->m_Net.GetPort();
125 m_pServer->mayView = m_pPara->getMayView();
126 m_pServer->mayInteract = m_pPara->getMayInteract();
127
128 return 0;
129}
130
131void CBackendFreeRDPServer::slotDisconnect(const QString &szIp, const quint16 port)
132{
133 // TODO: Disconnect
134}
virtual OnInitReturnValue OnInit() override
Initialization.
virtual int OnProcess() override
Specific operation processing of plug-in.
virtual int OnClean() override
Clean.
Server interface.