From 508ba9201f6f058fcf4d83afce28c8a5a3c52b15 Mon Sep 17 00:00:00 2001 From: kubistika Date: Mon, 21 Sep 2020 10:43:23 +0300 Subject: [PATCH] core: server: add API to get peer accepted channel names --- include/freerdp/channels/wtsvc.h | 1 + libfreerdp/core/server.c | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/include/freerdp/channels/wtsvc.h b/include/freerdp/channels/wtsvc.h index fe937872c..31763dcc5 100644 --- a/include/freerdp/channels/wtsvc.h +++ b/include/freerdp/channels/wtsvc.h @@ -76,6 +76,7 @@ extern "C" FREERDP_API void* WTSChannelGetHandleByName(freerdp_peer* client, const char* channel_name); FREERDP_API void* WTSChannelGetHandleById(freerdp_peer* client, const UINT16 channel_id); FREERDP_API const char* WTSChannelGetName(freerdp_peer* client, UINT16 channel_id); + FREERDP_API char** WTSGetAcceptedChannelNames(freerdp_peer* client, size_t* count); #ifdef __cplusplus } diff --git a/libfreerdp/core/server.c b/libfreerdp/core/server.c index 484ed8b96..39cd0e4f2 100644 --- a/libfreerdp/core/server.c +++ b/libfreerdp/core/server.c @@ -670,6 +670,28 @@ const char* WTSChannelGetName(freerdp_peer* client, UINT16 channel_id) return (const char*)channel->Name; } +char** WTSGetAcceptedChannelNames(freerdp_peer* client, size_t* count) +{ + rdpMcs* mcs; + char** names; + UINT32 index; + + if (!client || !client->context || !count) + return NULL; + + mcs = client->context->rdp->mcs; + *count = mcs->channelCount; + + names = (char**)calloc(mcs->channelCount, sizeof(char*)); + if (!names) + return NULL; + + for (index = 0; index < mcs->channelCount; index++) + names[index] = mcs->channels[index].Name; + + return names; +} + BOOL WINAPI FreeRDP_WTSStartRemoteControlSessionW(LPWSTR pTargetServerName, ULONG TargetLogonId, BYTE HotkeyVk, USHORT HotkeyModifiers) {