Rabbit Remote Control 0.0.36
Loading...
Searching...
No Matches
ConnectFreeRDP.h
1// Author: Kang Lin <kl222@126.com>
2
3#ifndef CCONNECTFREERDP_H
4#define CCONNECTFREERDP_H
5
6#include "ConnectDesktop.h"
7#include "freerdp/freerdp.h"
8#include "freerdp/version.h"
9
10#if FREERDP_VERSION_MAJOR >= 3
11#include "freerdp/transport_io.h"
12class CConnectLayer;
13#endif
14
15#include "ClipboardFreeRDP.h"
16#include "ConnecterFreeRDP.h"
17#include "CursorFreeRDP.h"
18#include <QSharedPointer>
19
20#ifdef HAVE_LIBSSH
21#include "SSHTunnelThread.h"
22#include "ChannelSSHTunnel.h"
23#endif
24
26{
27 Q_OBJECT
28
29public:
30 explicit CConnectFreeRDP(CConnecterFreeRDP* pConnecter);
31 virtual ~CConnectFreeRDP() override;
32
33 static BOOL cbGlobalInit();
34 static void cbGlobalUninit();
35 static BOOL cbClientNew(freerdp* instance, rdpContext* context);
36 static void cbClientFree(freerdp* instance, rdpContext* context);
37 static int cbClientStart(rdpContext* context);
38 static int cbClientStop(rdpContext* context);
39
51 static BOOL cb_pre_connect(freerdp* instance);
57 static BOOL cb_post_connect(freerdp* instance);
58 static void cb_post_disconnect(freerdp* instance);
59 static int cb_logon_error_info(freerdp* instance, UINT32 data, UINT32 type);
60
61 static void OnChannelConnectedEventHandler(void* context,
62 #if FREERDP_VERSION_MAJOR >= 3
63 const
64 #endif
65 ChannelConnectedEventArgs* e);
66 static void OnChannelDisconnectedEventHandler(void* context,
67 #if FREERDP_VERSION_MAJOR >= 3
68 const
69 #endif
70 ChannelDisconnectedEventArgs* e);
71
72 static BOOL cb_authenticate(freerdp* instance,
73 char** username, char** password, char** domain);
74 static BOOL cb_GatewayAuthenticate(freerdp* instance,
75 char** username, char** password, char** domain);
76#if FREERDP_VERSION_MAJOR >= 3
77 static BOOL cb_authenticate_ex(freerdp* instance,
78 char** username, char** password,
79 char** domain, rdp_auth_reason reason);
80 static BOOL cb_choose_smartcard(freerdp* instance,
81 SmartcardCertInfo** cert_list,
82 DWORD count,
83 DWORD* choice, BOOL gateway);
84#endif
98 static int cb_verify_x509_certificate(freerdp* instance,
99 const BYTE* data, size_t length,
100 const char* hostname, UINT16 port, DWORD flags);
101 static DWORD cb_verify_certificate_ex(freerdp* instance,
102 const char* host, UINT16 port,
103 const char* common_name, const char* subject,
104 const char* issuer, const char* fingerprint, DWORD flags);
105 static DWORD cb_verify_changed_certificate_ex(freerdp* instance,
106 const char* host, UINT16 port,
107 const char* common_name, const char* subject,
108 const char* issuer, const char* fingerprint,
109 const char* old_subject, const char* old_issuer,
110 const char* old_fingerprint, DWORD flags);
111 static BOOL cb_present_gateway_message(freerdp* instance,
112 UINT32 type, BOOL isDisplayMandatory,
113 BOOL isConsentMandatory, size_t length, const WCHAR* message);
114
115 static BOOL cb_begin_paint(rdpContext* context);
116 static BOOL cb_end_paint(rdpContext* context);
117 static BOOL cb_desktop_resize(rdpContext* context);
118 static BOOL cb_play_bell_sound(rdpContext* context,
119 const PLAY_SOUND_UPDATE* play_sound);
120 static BOOL cb_keyboard_set_indicators(rdpContext* context, UINT16 led_flags);
121 static BOOL cb_keyboard_set_ime_status(rdpContext* context, UINT16 imeId,
122 UINT32 imeState, UINT32 imeConvMode);
123
124 static UINT32 GetImageFormat(QImage::Format format);
125 static const char* GetTitle(freerdp *instance);
126
127private:
128 UINT32 GetImageFormat();
129 BOOL CreateImage(rdpContext* context);
130 BOOL UpdateBuffer(INT32 x, INT32 y, INT32 w, INT32 h);
131
132 int RedirectionSound();
133 int RedirectionMicrophone();
134 int RedirectionDriver();
135 int RedirectionPrinter();
136 int RedirectionSerial();
137
138 bool SendMouseEvent(UINT16 flags, QPoint pos, bool isExtended);
139
140 // CConnectDesktop interface
141public Q_SLOTS:
142 virtual void slotClipBoardChanged() override;
143
144protected:
145 virtual void mousePressEvent(QMouseEvent* event) override;
146 virtual void mouseReleaseEvent(QMouseEvent* event) override;
147 virtual void mouseMoveEvent(QMouseEvent* event) override;
148 virtual void wheelEvent(QWheelEvent* event) override;
149 virtual void keyPressEvent(QKeyEvent *event) override;
150 virtual void keyReleaseEvent(QKeyEvent *event) override;
151 virtual int WakeUp() override;
152
153private:
154 // CConnect interface
155 virtual OnInitReturnValue OnInit() override;
156 virtual int OnClean() override;
157 virtual int OnProcess() override;
158 int OnProcess(int nTimeout);
159
160private:
161 CConnecterFreeRDP* m_pConnecter;
163 #if FREERDP_VERSION_MAJOR >= 3
164 rdpClientContext Context;
165 #else
166 rdpContext Context;
167 #endif
168 CConnectFreeRDP* pThis;
169 };
170 ClientContext* m_pContext;
171 CParameterFreeRDP* m_pParameter;
172
173 RDP_CLIENT_ENTRY_POINTS m_ClientEntryPoints;
174
175 QImage m_Image;
176
177 CClipboardFreeRDP m_ClipBoard;
178 CCursorFreeRDP m_Cursor;
179 friend class CCursorFreeRDP;
180
181 HANDLE m_writeEvent;
182
183#if FREERDP_VERSION_MAJOR >= 3
184 CConnectLayer* m_pConnectLayer;
185 friend class CConnectLayer;
186 friend class CConnectLayerQTcpSocket;
187#endif
188#ifdef HAVE_LIBSSH
189 OnInitReturnValue InitSSHTunnelPipe();
190 int CleanSSHTunnelPipe();
191 CSSHTunnelThread* m_pThreadSSH;
192#endif // HAVE_LIBSSH
193
194private Q_SLOTS:
195 void slotConnectProxyServer(QString szHost, quint16 nPort);
196};
197
198#endif // CCONNECTFREERDP_H
Remote desktop connect interface.
virtual OnInitReturnValue OnInit() override
Specific plug-in realizes connection initialization.
virtual int OnClean() override
Clean.
static int cb_verify_x509_certificate(freerdp *instance, const BYTE *data, size_t length, const char *hostname, UINT16 port, DWORD flags)
Callback used if user interaction is required to accept a certificate.
static DWORD cb_verify_changed_certificate_ex(freerdp *instance, const char *host, UINT16 port, const char *common_name, const char *subject, const char *issuer, const char *fingerprint, const char *old_subject, const char *old_issuer, const char *old_fingerprint, DWORD flags)
Callback set in the rdp_freerdp structure, and used to make a certificate validation when a stored ce...
virtual int WakeUp() override
Wake up Connect thread(background thread)
static DWORD cb_verify_certificate_ex(freerdp *instance, const char *host, UINT16 port, const char *common_name, const char *subject, const char *issuer, const char *fingerprint, DWORD flags)
Callback set in the rdp_freerdp structure, and used to make a certificate validation when the connect...
virtual int OnProcess() override
Specific operation processing of plug-in connection.
static BOOL cb_post_connect(freerdp *instance)
Callback given to freerdp_connect() to perform post-connection operations.
static BOOL cb_pre_connect(freerdp *instance)
Callback given to freerdp_connect() to process the pre-connect operations.
The connect layer class.
[Declare CParameterFreeRDP]
Data is forwarded over a local socket and SSH tunnel.