remdesk: Using new VirtualChannelEx api
authorMartin Haimberger <martin.haimberger@thincast.com>
Tue, 22 Nov 2016 11:27:05 +0000 (03:27 -0800)
committerMartin Haimberger <martin.haimberger@thincast.com>
Wed, 23 Nov 2016 09:25:29 +0000 (01:25 -0800)
channels/remdesk/client/CMakeLists.txt
channels/remdesk/client/remdesk_main.c
channels/remdesk/client/remdesk_main.h

index 1c289b9..bb66f6e 100644 (file)
@@ -21,7 +21,7 @@ set(${MODULE_PREFIX}_SRCS
        remdesk_main.c
        remdesk_main.h)
 
-add_channel_client_library(${MODULE_PREFIX} ${MODULE_NAME} ${CHANNEL_NAME} FALSE "VirtualChannelEntry")
+add_channel_client_library(${MODULE_PREFIX} ${MODULE_NAME} ${CHANNEL_NAME} FALSE "VirtualChannelEntryEx")
 
 
 
index 9dea16b..da715c9 100644 (file)
@@ -33,8 +33,6 @@
 
 #include "remdesk_main.h"
 
-static rdpChannelHandles g_ChannelHandles = { NULL, NULL };
-
 static RemdeskClientContext* remdesk_get_client_interface(
     remdeskPlugin* remdesk)
 {
@@ -58,11 +56,11 @@ static UINT remdesk_virtual_channel_write(remdeskPlugin* remdesk, wStream* s)
                return CHANNEL_RC_INVALID_INSTANCE;
        }
 
-       status = remdesk->channelEntryPoints.pVirtualChannelWrite(remdesk->OpenHandle,
+       status = remdesk->channelEntryPoints.pVirtualChannelWriteEx(remdesk->InitHandle, remdesk->OpenHandle,
                 Stream_Buffer(s), (UINT32) Stream_Length(s), s);
 
        if (status != CHANNEL_RC_OK)
-               WLog_ERR(TAG,  "VirtualChannelWrite failed with %s [%08X]",
+               WLog_ERR(TAG,  "pVirtualChannelWriteEx failed with %s [%08X]",
                         WTSErrorToString(status), status);
 
        return status;
@@ -727,14 +725,14 @@ static UINT remdesk_send(remdeskPlugin* remdesk, wStream* s)
        }
        else
        {
-               status = plugin->channelEntryPoints.pVirtualChannelWrite(plugin->OpenHandle,
+               status = plugin->channelEntryPoints.pVirtualChannelWriteEx(plugin->InitHandle, plugin->OpenHandle,
                         Stream_Buffer(s), (UINT32) Stream_GetPosition(s), s);
        }
 
        if (status != CHANNEL_RC_OK)
        {
                Stream_Free(s, TRUE);
-               WLog_ERR(TAG,  "VirtualChannelWrite failed with %s [%08X]",
+               WLog_ERR(TAG,  "pVirtualChannelWriteEx failed with %s [%08X]",
                         WTSErrorToString(status), status);
        }
 
@@ -802,12 +800,11 @@ static UINT remdesk_virtual_channel_event_data_received(remdeskPlugin* remdesk,
        return CHANNEL_RC_OK;
 }
 
-static VOID VCAPITYPE remdesk_virtual_channel_open_event(DWORD openHandle,
-        UINT event,
+static VOID VCAPITYPE remdesk_virtual_channel_open_event_ex(LPVOID lpUserParam, DWORD openHandle, UINT event,
         LPVOID pData, UINT32 dataLength, UINT32 totalLength, UINT32 dataFlags)
 {
        UINT error = CHANNEL_RC_OK;
-       remdeskPlugin* remdesk = (remdeskPlugin*) freerdp_channel_get_open_handle_data(&g_ChannelHandles, openHandle);
+       remdeskPlugin* remdesk = (remdeskPlugin*) lpUserParam;
 
        if (!remdesk || (remdesk->OpenHandle != openHandle))
        {
@@ -839,7 +836,7 @@ static VOID VCAPITYPE remdesk_virtual_channel_open_event(DWORD openHandle,
 
        if (error && remdesk->rdpcontext)
                setChannelError(remdesk->rdpcontext, error,
-                               "remdesk_virtual_channel_open_event reported an error");
+                               "remdesk_virtual_channel_open_event_ex reported an error");
 }
 
 static void* remdesk_virtual_channel_client_thread(void* arg)
@@ -900,19 +897,17 @@ static UINT remdesk_virtual_channel_event_connected(remdeskPlugin* remdesk,
 {
        UINT32 status;
        UINT error;
-       status = remdesk->channelEntryPoints.pVirtualChannelOpen(remdesk->InitHandle,
+       status = remdesk->channelEntryPoints.pVirtualChannelOpenEx(remdesk->InitHandle,
                 &remdesk->OpenHandle, remdesk->channelDef.name,
-                remdesk_virtual_channel_open_event);
+                remdesk_virtual_channel_open_event_ex);
 
        if (status != CHANNEL_RC_OK)
        {
-               WLog_ERR(TAG,  "pVirtualChannelOpen failed with %s [%08X]",
+               WLog_ERR(TAG,  "pVirtualChannelOpenEx failed with %s [%08X]",
                         WTSErrorToString(status), status);
                return status;
        }
 
-       freerdp_channel_add_open_handle_data(&g_ChannelHandles, remdesk->OpenHandle, (void*) remdesk);
-
        remdesk->queue = MessageQueue_New(NULL);
 
        if (!remdesk->queue)
@@ -961,11 +956,11 @@ static UINT remdesk_virtual_channel_event_disconnected(remdeskPlugin* remdesk)
        CloseHandle(remdesk->thread);
        remdesk->queue = NULL;
        remdesk->thread = NULL;
-       rc = remdesk->channelEntryPoints.pVirtualChannelClose(remdesk->OpenHandle);
+       rc = remdesk->channelEntryPoints.pVirtualChannelCloseEx(remdesk->InitHandle, remdesk->OpenHandle);
 
        if (CHANNEL_RC_OK != rc)
        {
-               WLog_ERR(TAG, "pVirtualChannelClose failed with %s [%08X]",
+               WLog_ERR(TAG, "pVirtualChannelCloseEx failed with %s [%08X]",
                         WTSErrorToString(rc), rc);
        }
 
@@ -977,24 +972,21 @@ static UINT remdesk_virtual_channel_event_disconnected(remdeskPlugin* remdesk)
                remdesk->data_in = NULL;
        }
 
-       freerdp_channel_remove_open_handle_data(&g_ChannelHandles, remdesk->OpenHandle);
-
        return rc;
 }
 
 static void remdesk_virtual_channel_event_terminated(remdeskPlugin* remdesk)
 {
-       freerdp_channel_remove_init_handle_data(&g_ChannelHandles, (void*) remdesk);
        remdesk->InitHandle = 0;
        free(remdesk);
 }
 
-static VOID VCAPITYPE remdesk_virtual_channel_init_event(LPVOID pInitHandle,
+static VOID VCAPITYPE remdesk_virtual_channel_init_event_ex(LPVOID lpUserParam, LPVOID pInitHandle,
         UINT event, LPVOID pData,
         UINT dataLength)
 {
        UINT error = CHANNEL_RC_OK;
-       remdeskPlugin* remdesk = (remdeskPlugin*) freerdp_channel_get_init_handle_data(&g_ChannelHandles, pInitHandle);
+       remdeskPlugin* remdesk = (remdeskPlugin*) lpUserParam;
 
        if (!remdesk || (remdesk->InitHandle != pInitHandle))
        {
@@ -1030,14 +1022,14 @@ static VOID VCAPITYPE remdesk_virtual_channel_init_event(LPVOID pInitHandle,
 }
 
 /* remdesk is always built-in */
-#define VirtualChannelEntry    remdesk_VirtualChannelEntry
+#define VirtualChannelEntryEx  remdesk_VirtualChannelEntryEx
 
-BOOL VCAPITYPE VirtualChannelEntry(PCHANNEL_ENTRY_POINTS pEntryPoints)
+BOOL VCAPITYPE VirtualChannelEntryEx(PCHANNEL_ENTRY_POINTS pEntryPoints, PVOID pInitHandle)
 {
        UINT rc;
        remdeskPlugin* remdesk;
        RemdeskClientContext* context = NULL;
-       CHANNEL_ENTRY_POINTS_FREERDP* pEntryPointsEx;
+       CHANNEL_ENTRY_POINTS_FREERDP_EX* pEntryPointsEx;
 
        if (!pEntryPoints)
        {
@@ -1057,11 +1049,12 @@ BOOL VCAPITYPE VirtualChannelEntry(PCHANNEL_ENTRY_POINTS pEntryPoints)
            CHANNEL_OPTION_ENCRYPT_RDP |
            CHANNEL_OPTION_COMPRESS_RDP |
            CHANNEL_OPTION_SHOW_PROTOCOL;
+
        strcpy(remdesk->channelDef.name, "remdesk");
        remdesk->Version = 2;
-       pEntryPointsEx = (CHANNEL_ENTRY_POINTS_FREERDP*) pEntryPoints;
+       pEntryPointsEx = (CHANNEL_ENTRY_POINTS_FREERDP_EX*) pEntryPoints;
 
-       if ((pEntryPointsEx->cbSize >= sizeof(CHANNEL_ENTRY_POINTS_FREERDP)) &&
+       if ((pEntryPointsEx->cbSize >= sizeof(CHANNEL_ENTRY_POINTS_FREERDP_EX)) &&
            (pEntryPointsEx->MagicNumber == FREERDP_CHANNEL_MAGIC_NUMBER))
        {
                context = (RemdeskClientContext*) calloc(1, sizeof(RemdeskClientContext));
@@ -1079,14 +1072,17 @@ BOOL VCAPITYPE VirtualChannelEntry(PCHANNEL_ENTRY_POINTS pEntryPoints)
        }
 
        CopyMemory(&(remdesk->channelEntryPoints), pEntryPoints,
-                  sizeof(CHANNEL_ENTRY_POINTS_FREERDP));
-       rc = remdesk->channelEntryPoints.pVirtualChannelInit(&remdesk->InitHandle,
+                  sizeof(CHANNEL_ENTRY_POINTS_FREERDP_EX));
+
+       remdesk->InitHandle = pInitHandle;
+
+       rc = remdesk->channelEntryPoints.pVirtualChannelInitEx((void*) remdesk, pInitHandle,
                &remdesk->channelDef, 1, VIRTUAL_CHANNEL_VERSION_WIN2000,
-               remdesk_virtual_channel_init_event);
+               remdesk_virtual_channel_init_event_ex);
 
        if (CHANNEL_RC_OK != rc)
        {
-               WLog_ERR(TAG, "pVirtualChannelInit failed with %s [%08X]",
+               WLog_ERR(TAG, "pVirtualChannelInitEx failed with %s [%08X]",
                         WTSErrorToString(rc), rc);
                goto error_out;
        }
@@ -1096,8 +1092,6 @@ BOOL VCAPITYPE VirtualChannelEntry(PCHANNEL_ENTRY_POINTS pEntryPoints)
        remdesk->channelEntryPoints.ppInterface = &
                (remdesk->channelEntryPoints.pInterface);
 
-       freerdp_channel_add_init_handle_data(&g_ChannelHandles, remdesk->InitHandle, (void*) remdesk);
-
        return TRUE;
 error_out:
 
index 59e92ca..13ae5c7 100644 (file)
@@ -41,7 +41,7 @@
 struct remdesk_plugin
 {
        CHANNEL_DEF channelDef;
-       CHANNEL_ENTRY_POINTS_FREERDP channelEntryPoints;
+       CHANNEL_ENTRY_POINTS_FREERDP_EX channelEntryPoints;
 
        RemdeskClientContext* context;