mirror of https://github.com/FreeRDP/FreeRDP
Cleaned up remdesk
This commit is contained in:
parent
467f7c3f6a
commit
f794a8c7d4
|
@ -24,6 +24,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <winpr/crt.h>
|
#include <winpr/crt.h>
|
||||||
|
#include <winpr/assert.h>
|
||||||
#include <winpr/print.h>
|
#include <winpr/print.h>
|
||||||
|
|
||||||
#include <freerdp/assistance.h>
|
#include <freerdp/assistance.h>
|
||||||
|
@ -49,6 +50,7 @@ static UINT remdesk_virtual_channel_write(remdeskPlugin* remdesk, wStream* s)
|
||||||
return CHANNEL_RC_INVALID_INSTANCE;
|
return CHANNEL_RC_INVALID_INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WINPR_ASSERT(remdesk->channelEntryPoints.pVirtualChannelWriteEx);
|
||||||
status = remdesk->channelEntryPoints.pVirtualChannelWriteEx(
|
status = remdesk->channelEntryPoints.pVirtualChannelWriteEx(
|
||||||
remdesk->InitHandle, remdesk->OpenHandle, Stream_Buffer(s), (UINT32)Stream_Length(s), s);
|
remdesk->InitHandle, remdesk->OpenHandle, Stream_Buffer(s), (UINT32)Stream_Length(s), s);
|
||||||
|
|
||||||
|
@ -71,7 +73,12 @@ static UINT remdesk_generate_expert_blob(remdeskPlugin* remdesk)
|
||||||
char* name;
|
char* name;
|
||||||
char* pass;
|
char* pass;
|
||||||
char* password;
|
char* password;
|
||||||
rdpSettings* settings = remdesk->settings;
|
rdpSettings* settings;
|
||||||
|
|
||||||
|
WINPR_ASSERT(remdesk);
|
||||||
|
|
||||||
|
settings = remdesk->settings;
|
||||||
|
WINPR_ASSERT(settings);
|
||||||
|
|
||||||
if (remdesk->ExpertBlob)
|
if (remdesk->ExpertBlob)
|
||||||
return CHANNEL_RC_OK;
|
return CHANNEL_RC_OK;
|
||||||
|
@ -133,6 +140,9 @@ static UINT remdesk_read_channel_header(wStream* s, REMDESK_CHANNEL_HEADER* head
|
||||||
UINT32 ChannelNameLen;
|
UINT32 ChannelNameLen;
|
||||||
char* pChannelName = NULL;
|
char* pChannelName = NULL;
|
||||||
|
|
||||||
|
WINPR_ASSERT(s);
|
||||||
|
WINPR_ASSERT(header);
|
||||||
|
|
||||||
if (Stream_GetRemainingLength(s) < 8)
|
if (Stream_GetRemainingLength(s) < 8)
|
||||||
{
|
{
|
||||||
WLog_ERR(TAG, "Not enough data!");
|
WLog_ERR(TAG, "Not enough data!");
|
||||||
|
@ -184,8 +194,10 @@ static UINT remdesk_write_channel_header(wStream* s, REMDESK_CHANNEL_HEADER* hea
|
||||||
{
|
{
|
||||||
int index;
|
int index;
|
||||||
UINT32 ChannelNameLen;
|
UINT32 ChannelNameLen;
|
||||||
WCHAR ChannelNameW[32];
|
WCHAR ChannelNameW[32] = { 0 };
|
||||||
ZeroMemory(ChannelNameW, sizeof(ChannelNameW));
|
|
||||||
|
WINPR_ASSERT(s);
|
||||||
|
WINPR_ASSERT(header);
|
||||||
|
|
||||||
for (index = 0; index < 32; index++)
|
for (index = 0; index < 32; index++)
|
||||||
{
|
{
|
||||||
|
@ -206,7 +218,10 @@ static UINT remdesk_write_channel_header(wStream* s, REMDESK_CHANNEL_HEADER* hea
|
||||||
*/
|
*/
|
||||||
static UINT remdesk_write_ctl_header(wStream* s, REMDESK_CTL_HEADER* ctlHeader)
|
static UINT remdesk_write_ctl_header(wStream* s, REMDESK_CTL_HEADER* ctlHeader)
|
||||||
{
|
{
|
||||||
remdesk_write_channel_header(s, (REMDESK_CHANNEL_HEADER*)ctlHeader);
|
WINPR_ASSERT(s);
|
||||||
|
WINPR_ASSERT(ctlHeader);
|
||||||
|
|
||||||
|
remdesk_write_channel_header(s, &ctlHeader->ch);
|
||||||
Stream_Write_UINT32(s, ctlHeader->msgType); /* msgType (4 bytes) */
|
Stream_Write_UINT32(s, ctlHeader->msgType); /* msgType (4 bytes) */
|
||||||
return CHANNEL_RC_OK;
|
return CHANNEL_RC_OK;
|
||||||
}
|
}
|
||||||
|
@ -219,9 +234,12 @@ static UINT remdesk_write_ctl_header(wStream* s, REMDESK_CTL_HEADER* ctlHeader)
|
||||||
static UINT remdesk_prepare_ctl_header(REMDESK_CTL_HEADER* ctlHeader, UINT32 msgType,
|
static UINT remdesk_prepare_ctl_header(REMDESK_CTL_HEADER* ctlHeader, UINT32 msgType,
|
||||||
UINT32 msgSize)
|
UINT32 msgSize)
|
||||||
{
|
{
|
||||||
|
WINPR_ASSERT(ctlHeader);
|
||||||
|
|
||||||
ctlHeader->msgType = msgType;
|
ctlHeader->msgType = msgType;
|
||||||
sprintf_s(ctlHeader->ChannelName, ARRAYSIZE(ctlHeader->ChannelName), REMDESK_CHANNEL_CTL_NAME);
|
sprintf_s(ctlHeader->ch.ChannelName, ARRAYSIZE(ctlHeader->ch.ChannelName),
|
||||||
ctlHeader->DataLength = 4 + msgSize;
|
REMDESK_CHANNEL_CTL_NAME);
|
||||||
|
ctlHeader->ch.DataLength = 4 + msgSize;
|
||||||
return CHANNEL_RC_OK;
|
return CHANNEL_RC_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -233,6 +251,10 @@ static UINT remdesk_prepare_ctl_header(REMDESK_CTL_HEADER* ctlHeader, UINT32 msg
|
||||||
static UINT remdesk_recv_ctl_server_announce_pdu(remdeskPlugin* remdesk, wStream* s,
|
static UINT remdesk_recv_ctl_server_announce_pdu(remdeskPlugin* remdesk, wStream* s,
|
||||||
REMDESK_CHANNEL_HEADER* header)
|
REMDESK_CHANNEL_HEADER* header)
|
||||||
{
|
{
|
||||||
|
WINPR_ASSERT(remdesk);
|
||||||
|
WINPR_ASSERT(s);
|
||||||
|
WINPR_ASSERT(header);
|
||||||
|
|
||||||
return CHANNEL_RC_OK;
|
return CHANNEL_RC_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -247,6 +269,10 @@ static UINT remdesk_recv_ctl_version_info_pdu(remdeskPlugin* remdesk, wStream* s
|
||||||
UINT32 versionMajor;
|
UINT32 versionMajor;
|
||||||
UINT32 versionMinor;
|
UINT32 versionMinor;
|
||||||
|
|
||||||
|
WINPR_ASSERT(remdesk);
|
||||||
|
WINPR_ASSERT(s);
|
||||||
|
WINPR_ASSERT(header);
|
||||||
|
|
||||||
if (Stream_GetRemainingLength(s) < 8)
|
if (Stream_GetRemainingLength(s) < 8)
|
||||||
{
|
{
|
||||||
WLog_ERR(TAG, "Not enough data!");
|
WLog_ERR(TAG, "Not enough data!");
|
||||||
|
@ -276,10 +302,13 @@ static UINT remdesk_send_ctl_version_info_pdu(remdeskPlugin* remdesk)
|
||||||
wStream* s;
|
wStream* s;
|
||||||
REMDESK_CTL_VERSION_INFO_PDU pdu;
|
REMDESK_CTL_VERSION_INFO_PDU pdu;
|
||||||
UINT error;
|
UINT error;
|
||||||
|
|
||||||
|
WINPR_ASSERT(remdesk);
|
||||||
|
|
||||||
remdesk_prepare_ctl_header(&(pdu.ctlHeader), REMDESK_CTL_VERSIONINFO, 8);
|
remdesk_prepare_ctl_header(&(pdu.ctlHeader), REMDESK_CTL_VERSIONINFO, 8);
|
||||||
pdu.versionMajor = 1;
|
pdu.versionMajor = 1;
|
||||||
pdu.versionMinor = 2;
|
pdu.versionMinor = 2;
|
||||||
s = Stream_New(NULL, REMDESK_CHANNEL_CTL_SIZE + pdu.ctlHeader.DataLength);
|
s = Stream_New(NULL, REMDESK_CHANNEL_CTL_SIZE + pdu.ctlHeader.ch.DataLength);
|
||||||
|
|
||||||
if (!s)
|
if (!s)
|
||||||
{
|
{
|
||||||
|
@ -308,6 +337,11 @@ static UINT remdesk_recv_ctl_result_pdu(remdeskPlugin* remdesk, wStream* s,
|
||||||
{
|
{
|
||||||
UINT32 result;
|
UINT32 result;
|
||||||
|
|
||||||
|
WINPR_ASSERT(remdesk);
|
||||||
|
WINPR_ASSERT(s);
|
||||||
|
WINPR_ASSERT(header);
|
||||||
|
WINPR_ASSERT(pResult);
|
||||||
|
|
||||||
if (Stream_GetRemainingLength(s) < 4)
|
if (Stream_GetRemainingLength(s) < 4)
|
||||||
{
|
{
|
||||||
WLog_ERR(TAG, "Not enough data!");
|
WLog_ERR(TAG, "Not enough data!");
|
||||||
|
@ -336,6 +370,8 @@ static UINT remdesk_send_ctl_authenticate_pdu(remdeskPlugin* remdesk)
|
||||||
WCHAR* raConnectionStringW = NULL;
|
WCHAR* raConnectionStringW = NULL;
|
||||||
REMDESK_CTL_AUTHENTICATE_PDU pdu = { 0 };
|
REMDESK_CTL_AUTHENTICATE_PDU pdu = { 0 };
|
||||||
|
|
||||||
|
WINPR_ASSERT(remdesk);
|
||||||
|
|
||||||
if ((error = remdesk_generate_expert_blob(remdesk)))
|
if ((error = remdesk_generate_expert_blob(remdesk)))
|
||||||
{
|
{
|
||||||
WLog_ERR(TAG, "remdesk_generate_expert_blob failed with error %" PRIu32 "", error);
|
WLog_ERR(TAG, "remdesk_generate_expert_blob failed with error %" PRIu32 "", error);
|
||||||
|
@ -343,6 +379,7 @@ static UINT remdesk_send_ctl_authenticate_pdu(remdeskPlugin* remdesk)
|
||||||
}
|
}
|
||||||
|
|
||||||
pdu.expertBlob = remdesk->ExpertBlob;
|
pdu.expertBlob = remdesk->ExpertBlob;
|
||||||
|
WINPR_ASSERT(remdesk->settings);
|
||||||
pdu.raConnectionString = remdesk->settings->RemoteAssistanceRCTicket;
|
pdu.raConnectionString = remdesk->settings->RemoteAssistanceRCTicket;
|
||||||
status = ConvertToUnicode(CP_UTF8, 0, pdu.raConnectionString, -1, &raConnectionStringW, 0);
|
status = ConvertToUnicode(CP_UTF8, 0, pdu.raConnectionString, -1, &raConnectionStringW, 0);
|
||||||
|
|
||||||
|
@ -365,7 +402,7 @@ static UINT remdesk_send_ctl_authenticate_pdu(remdeskPlugin* remdesk)
|
||||||
cbExpertBlobW = status * 2;
|
cbExpertBlobW = status * 2;
|
||||||
remdesk_prepare_ctl_header(&(pdu.ctlHeader), REMDESK_CTL_AUTHENTICATE,
|
remdesk_prepare_ctl_header(&(pdu.ctlHeader), REMDESK_CTL_AUTHENTICATE,
|
||||||
cbRaConnectionStringW + cbExpertBlobW);
|
cbRaConnectionStringW + cbExpertBlobW);
|
||||||
s = Stream_New(NULL, REMDESK_CHANNEL_CTL_SIZE + pdu.ctlHeader.DataLength);
|
s = Stream_New(NULL, REMDESK_CHANNEL_CTL_SIZE + pdu.ctlHeader.ch.DataLength);
|
||||||
|
|
||||||
if (!s)
|
if (!s)
|
||||||
{
|
{
|
||||||
|
@ -402,6 +439,10 @@ static UINT remdesk_send_ctl_remote_control_desktop_pdu(remdeskPlugin* remdesk)
|
||||||
int cbRaConnectionStringW = 0;
|
int cbRaConnectionStringW = 0;
|
||||||
WCHAR* raConnectionStringW = NULL;
|
WCHAR* raConnectionStringW = NULL;
|
||||||
REMDESK_CTL_REMOTE_CONTROL_DESKTOP_PDU pdu;
|
REMDESK_CTL_REMOTE_CONTROL_DESKTOP_PDU pdu;
|
||||||
|
|
||||||
|
WINPR_ASSERT(remdesk);
|
||||||
|
WINPR_ASSERT(remdesk->settings);
|
||||||
|
|
||||||
pdu.raConnectionString = remdesk->settings->RemoteAssistanceRCTicket;
|
pdu.raConnectionString = remdesk->settings->RemoteAssistanceRCTicket;
|
||||||
status = ConvertToUnicode(CP_UTF8, 0, pdu.raConnectionString, -1, &raConnectionStringW, 0);
|
status = ConvertToUnicode(CP_UTF8, 0, pdu.raConnectionString, -1, &raConnectionStringW, 0);
|
||||||
|
|
||||||
|
@ -414,7 +455,7 @@ static UINT remdesk_send_ctl_remote_control_desktop_pdu(remdeskPlugin* remdesk)
|
||||||
cbRaConnectionStringW = status * 2;
|
cbRaConnectionStringW = status * 2;
|
||||||
remdesk_prepare_ctl_header(&(pdu.ctlHeader), REMDESK_CTL_REMOTE_CONTROL_DESKTOP,
|
remdesk_prepare_ctl_header(&(pdu.ctlHeader), REMDESK_CTL_REMOTE_CONTROL_DESKTOP,
|
||||||
cbRaConnectionStringW);
|
cbRaConnectionStringW);
|
||||||
s = Stream_New(NULL, REMDESK_CHANNEL_CTL_SIZE + pdu.ctlHeader.DataLength);
|
s = Stream_New(NULL, REMDESK_CHANNEL_CTL_SIZE + pdu.ctlHeader.ch.DataLength);
|
||||||
|
|
||||||
if (!s)
|
if (!s)
|
||||||
{
|
{
|
||||||
|
@ -450,6 +491,8 @@ static UINT remdesk_send_ctl_verify_password_pdu(remdeskPlugin* remdesk)
|
||||||
WCHAR* expertBlobW = NULL;
|
WCHAR* expertBlobW = NULL;
|
||||||
REMDESK_CTL_VERIFY_PASSWORD_PDU pdu;
|
REMDESK_CTL_VERIFY_PASSWORD_PDU pdu;
|
||||||
|
|
||||||
|
WINPR_ASSERT(remdesk);
|
||||||
|
|
||||||
if ((error = remdesk_generate_expert_blob(remdesk)))
|
if ((error = remdesk_generate_expert_blob(remdesk)))
|
||||||
{
|
{
|
||||||
WLog_ERR(TAG, "remdesk_generate_expert_blob failed with error %" PRIu32 "!", error);
|
WLog_ERR(TAG, "remdesk_generate_expert_blob failed with error %" PRIu32 "!", error);
|
||||||
|
@ -467,7 +510,7 @@ static UINT remdesk_send_ctl_verify_password_pdu(remdeskPlugin* remdesk)
|
||||||
|
|
||||||
cbExpertBlobW = status * 2;
|
cbExpertBlobW = status * 2;
|
||||||
remdesk_prepare_ctl_header(&(pdu.ctlHeader), REMDESK_CTL_VERIFY_PASSWORD, cbExpertBlobW);
|
remdesk_prepare_ctl_header(&(pdu.ctlHeader), REMDESK_CTL_VERIFY_PASSWORD, cbExpertBlobW);
|
||||||
s = Stream_New(NULL, REMDESK_CHANNEL_CTL_SIZE + pdu.ctlHeader.DataLength);
|
s = Stream_New(NULL, REMDESK_CHANNEL_CTL_SIZE + pdu.ctlHeader.ch.DataLength);
|
||||||
|
|
||||||
if (!s)
|
if (!s)
|
||||||
{
|
{
|
||||||
|
@ -500,6 +543,8 @@ static UINT remdesk_send_ctl_expert_on_vista_pdu(remdeskPlugin* remdesk)
|
||||||
wStream* s;
|
wStream* s;
|
||||||
REMDESK_CTL_EXPERT_ON_VISTA_PDU pdu;
|
REMDESK_CTL_EXPERT_ON_VISTA_PDU pdu;
|
||||||
|
|
||||||
|
WINPR_ASSERT(remdesk);
|
||||||
|
|
||||||
if ((error = remdesk_generate_expert_blob(remdesk)))
|
if ((error = remdesk_generate_expert_blob(remdesk)))
|
||||||
{
|
{
|
||||||
WLog_ERR(TAG, "remdesk_generate_expert_blob failed with error %" PRIu32 "!", error);
|
WLog_ERR(TAG, "remdesk_generate_expert_blob failed with error %" PRIu32 "!", error);
|
||||||
|
@ -510,7 +555,7 @@ static UINT remdesk_send_ctl_expert_on_vista_pdu(remdeskPlugin* remdesk)
|
||||||
pdu.EncryptedPassword = remdesk->EncryptedPassStub;
|
pdu.EncryptedPassword = remdesk->EncryptedPassStub;
|
||||||
remdesk_prepare_ctl_header(&(pdu.ctlHeader), REMDESK_CTL_EXPERT_ON_VISTA,
|
remdesk_prepare_ctl_header(&(pdu.ctlHeader), REMDESK_CTL_EXPERT_ON_VISTA,
|
||||||
pdu.EncryptedPasswordLength);
|
pdu.EncryptedPasswordLength);
|
||||||
s = Stream_New(NULL, REMDESK_CHANNEL_CTL_SIZE + pdu.ctlHeader.DataLength);
|
s = Stream_New(NULL, REMDESK_CHANNEL_CTL_SIZE + pdu.ctlHeader.ch.DataLength);
|
||||||
|
|
||||||
if (!s)
|
if (!s)
|
||||||
{
|
{
|
||||||
|
@ -535,6 +580,10 @@ static UINT remdesk_recv_ctl_pdu(remdeskPlugin* remdesk, wStream* s, REMDESK_CHA
|
||||||
UINT32 msgType = 0;
|
UINT32 msgType = 0;
|
||||||
UINT32 result = 0;
|
UINT32 result = 0;
|
||||||
|
|
||||||
|
WINPR_ASSERT(remdesk);
|
||||||
|
WINPR_ASSERT(s);
|
||||||
|
WINPR_ASSERT(header);
|
||||||
|
|
||||||
if (Stream_GetRemainingLength(s) < 4)
|
if (Stream_GetRemainingLength(s) < 4)
|
||||||
{
|
{
|
||||||
WLog_ERR(TAG, "Not enough data!");
|
WLog_ERR(TAG, "Not enough data!");
|
||||||
|
@ -659,6 +708,10 @@ static UINT remdesk_process_receive(remdeskPlugin* remdesk, wStream* s)
|
||||||
{
|
{
|
||||||
UINT status;
|
UINT status;
|
||||||
REMDESK_CHANNEL_HEADER header;
|
REMDESK_CHANNEL_HEADER header;
|
||||||
|
|
||||||
|
WINPR_ASSERT(remdesk);
|
||||||
|
WINPR_ASSERT(s);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
WLog_DBG(TAG, "RemdeskReceive: %"PRIuz"", Stream_GetRemainingLength(s));
|
WLog_DBG(TAG, "RemdeskReceive: %"PRIuz"", Stream_GetRemainingLength(s));
|
||||||
winpr_HexDump(Stream_Pointer(s), Stream_GetRemainingLength(s));
|
winpr_HexDump(Stream_Pointer(s), Stream_GetRemainingLength(s));
|
||||||
|
@ -698,6 +751,7 @@ static UINT remdesk_process_receive(remdeskPlugin* remdesk, wStream* s)
|
||||||
|
|
||||||
static void remdesk_process_connect(remdeskPlugin* remdesk)
|
static void remdesk_process_connect(remdeskPlugin* remdesk)
|
||||||
{
|
{
|
||||||
|
WINPR_ASSERT(remdesk);
|
||||||
remdesk->settings = (rdpSettings*)remdesk->channelEntryPoints.pExtendedData;
|
remdesk->settings = (rdpSettings*)remdesk->channelEntryPoints.pExtendedData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -712,6 +766,8 @@ static UINT remdesk_virtual_channel_event_data_received(remdeskPlugin* remdesk,
|
||||||
{
|
{
|
||||||
wStream* data_in;
|
wStream* data_in;
|
||||||
|
|
||||||
|
WINPR_ASSERT(remdesk);
|
||||||
|
|
||||||
if ((dataFlags & CHANNEL_FLAG_SUSPEND) || (dataFlags & CHANNEL_FLAG_RESUME))
|
if ((dataFlags & CHANNEL_FLAG_SUSPEND) || (dataFlags & CHANNEL_FLAG_RESUME))
|
||||||
{
|
{
|
||||||
return CHANNEL_RC_OK;
|
return CHANNEL_RC_OK;
|
||||||
|
@ -815,6 +871,9 @@ static DWORD WINAPI remdesk_virtual_channel_client_thread(LPVOID arg)
|
||||||
wMessage message;
|
wMessage message;
|
||||||
remdeskPlugin* remdesk = (remdeskPlugin*)arg;
|
remdeskPlugin* remdesk = (remdeskPlugin*)arg;
|
||||||
UINT error = CHANNEL_RC_OK;
|
UINT error = CHANNEL_RC_OK;
|
||||||
|
|
||||||
|
WINPR_ASSERT(remdesk);
|
||||||
|
|
||||||
remdesk_process_connect(remdesk);
|
remdesk_process_connect(remdesk);
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
|
@ -908,21 +967,28 @@ static UINT remdesk_virtual_channel_event_disconnected(remdeskPlugin* remdesk)
|
||||||
{
|
{
|
||||||
UINT rc;
|
UINT rc;
|
||||||
|
|
||||||
|
WINPR_ASSERT(remdesk);
|
||||||
|
|
||||||
if (remdesk->OpenHandle == 0)
|
if (remdesk->OpenHandle == 0)
|
||||||
return CHANNEL_RC_OK;
|
return CHANNEL_RC_OK;
|
||||||
|
|
||||||
if (MessageQueue_PostQuit(remdesk->queue, 0) &&
|
if (remdesk->queue && remdesk->thread)
|
||||||
(WaitForSingleObject(remdesk->thread, INFINITE) == WAIT_FAILED))
|
|
||||||
{
|
{
|
||||||
rc = GetLastError();
|
if (MessageQueue_PostQuit(remdesk->queue, 0) &&
|
||||||
WLog_ERR(TAG, "WaitForSingleObject failed with error %" PRIu32 "", rc);
|
(WaitForSingleObject(remdesk->thread, INFINITE) == WAIT_FAILED))
|
||||||
return rc;
|
{
|
||||||
|
rc = GetLastError();
|
||||||
|
WLog_ERR(TAG, "WaitForSingleObject failed with error %" PRIu32 "", rc);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MessageQueue_Free(remdesk->queue);
|
MessageQueue_Free(remdesk->queue);
|
||||||
CloseHandle(remdesk->thread);
|
CloseHandle(remdesk->thread);
|
||||||
remdesk->queue = NULL;
|
remdesk->queue = NULL;
|
||||||
remdesk->thread = NULL;
|
remdesk->thread = NULL;
|
||||||
|
|
||||||
|
WINPR_ASSERT(remdesk->channelEntryPoints.pVirtualChannelCloseEx);
|
||||||
rc = remdesk->channelEntryPoints.pVirtualChannelCloseEx(remdesk->InitHandle,
|
rc = remdesk->channelEntryPoints.pVirtualChannelCloseEx(remdesk->InitHandle,
|
||||||
remdesk->OpenHandle);
|
remdesk->OpenHandle);
|
||||||
|
|
||||||
|
@ -934,17 +1000,16 @@ static UINT remdesk_virtual_channel_event_disconnected(remdeskPlugin* remdesk)
|
||||||
|
|
||||||
remdesk->OpenHandle = 0;
|
remdesk->OpenHandle = 0;
|
||||||
|
|
||||||
if (remdesk->data_in)
|
Stream_Free(remdesk->data_in, TRUE);
|
||||||
{
|
remdesk->data_in = NULL;
|
||||||
Stream_Free(remdesk->data_in, TRUE);
|
|
||||||
remdesk->data_in = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void remdesk_virtual_channel_event_terminated(remdeskPlugin* remdesk)
|
static void remdesk_virtual_channel_event_terminated(remdeskPlugin* remdesk)
|
||||||
{
|
{
|
||||||
|
WINPR_ASSERT(remdesk);
|
||||||
|
|
||||||
remdesk->InitHandle = 0;
|
remdesk->InitHandle = 0;
|
||||||
free(remdesk->context);
|
free(remdesk->context);
|
||||||
free(remdesk);
|
free(remdesk);
|
||||||
|
|
|
@ -148,8 +148,9 @@ static UINT remdesk_prepare_ctl_header(REMDESK_CTL_HEADER* ctlHeader, UINT32 msg
|
||||||
UINT32 msgSize)
|
UINT32 msgSize)
|
||||||
{
|
{
|
||||||
ctlHeader->msgType = msgType;
|
ctlHeader->msgType = msgType;
|
||||||
sprintf_s(ctlHeader->ChannelName, ARRAYSIZE(ctlHeader->ChannelName), REMDESK_CHANNEL_CTL_NAME);
|
sprintf_s(ctlHeader->ch.ChannelName, ARRAYSIZE(ctlHeader->ch.ChannelName),
|
||||||
ctlHeader->DataLength = 4 + msgSize;
|
REMDESK_CHANNEL_CTL_NAME);
|
||||||
|
ctlHeader->ch.DataLength = 4 + msgSize;
|
||||||
return CHANNEL_RC_OK;
|
return CHANNEL_RC_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -171,7 +172,7 @@ static UINT remdesk_send_ctl_result_pdu(RemdeskServerContext* context, UINT32 re
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
s = Stream_New(NULL, REMDESK_CHANNEL_CTL_SIZE + pdu.ctlHeader.DataLength);
|
s = Stream_New(NULL, REMDESK_CHANNEL_CTL_SIZE + pdu.ctlHeader.ch.DataLength);
|
||||||
|
|
||||||
if (!s)
|
if (!s)
|
||||||
{
|
{
|
||||||
|
@ -215,7 +216,7 @@ static UINT remdesk_send_ctl_version_info_pdu(RemdeskServerContext* context)
|
||||||
|
|
||||||
pdu.versionMajor = 1;
|
pdu.versionMajor = 1;
|
||||||
pdu.versionMinor = 2;
|
pdu.versionMinor = 2;
|
||||||
s = Stream_New(NULL, REMDESK_CHANNEL_CTL_SIZE + pdu.ctlHeader.DataLength);
|
s = Stream_New(NULL, REMDESK_CHANNEL_CTL_SIZE + pdu.ctlHeader.ch.DataLength);
|
||||||
|
|
||||||
if (!s)
|
if (!s)
|
||||||
{
|
{
|
||||||
|
|
|
@ -86,8 +86,7 @@ typedef struct _REMDESK_CHANNEL_HEADER REMDESK_CHANNEL_HEADER;
|
||||||
|
|
||||||
struct _REMDESK_CTL_HEADER
|
struct _REMDESK_CTL_HEADER
|
||||||
{
|
{
|
||||||
UINT32 DataLength;
|
REMDESK_CHANNEL_HEADER ch;
|
||||||
char ChannelName[32];
|
|
||||||
|
|
||||||
UINT32 msgType;
|
UINT32 msgType;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue