Exemple #1
0
static void remdesk_virtual_channel_event_connected(remdeskPlugin* remdesk, LPVOID pData, UINT32 dataLength)
{
	UINT32 status;

	status = remdesk->channelEntryPoints.pVirtualChannelOpen(remdesk->InitHandle,
		&remdesk->OpenHandle, remdesk->channelDef.name, remdesk_virtual_channel_open_event);

	if (!remdesk_add_open_handle_data(remdesk->OpenHandle, remdesk))
	{
		WLog_ERR(TAG, "%s: unable to register open handle", __FUNCTION__);
		return;
	}

	if (status != CHANNEL_RC_OK)
	{
		WLog_ERR(TAG,  "pVirtualChannelOpen failed with %s [%08X]",
				 WTSErrorToString(status), status);
		return;
	}

	remdesk->queue = MessageQueue_New(NULL);
	if (!remdesk->queue)
	{
		WLog_ERR(TAG, "%s: unable to create message queue", __FUNCTION__);
		return;
	}

	remdesk->thread = CreateThread(NULL, 0,
			(LPTHREAD_START_ROUTINE) remdesk_virtual_channel_client_thread, (void*) remdesk, 0, NULL);
	if (!remdesk->thread)
	{
		WLog_ERR(TAG, "%s: unable to create thread", __FUNCTION__);
		return;
	}
}
/**
 * Function description
 *
 * @return 0 on success, otherwise a Win32 error code
 */
static UINT remdesk_virtual_channel_event_connected(remdeskPlugin* remdesk, LPVOID pData, UINT32 dataLength)
{
	UINT32 status;
	UINT error;

	status = remdesk->channelEntryPoints.pVirtualChannelOpen(remdesk->InitHandle,
		&remdesk->OpenHandle, remdesk->channelDef.name, remdesk_virtual_channel_open_event);

	if (status != CHANNEL_RC_OK)
	{
		WLog_ERR(TAG,  "pVirtualChannelOpen failed with %s [%08X]",
				 WTSErrorToString(status), status);
		return status;
	}

	if ((error = remdesk_add_open_handle_data(remdesk->OpenHandle, remdesk)))
	{
		WLog_ERR(TAG, "remdesk_add_open_handle_data failed with error %lu", error);
		return error;
	}

	remdesk->queue = MessageQueue_New(NULL);
	if (!remdesk->queue)
	{
		WLog_ERR(TAG, "MessageQueue_New failed!");
		error = CHANNEL_RC_NO_MEMORY;
		goto error_out;
	}

	remdesk->thread = CreateThread(NULL, 0,
			(LPTHREAD_START_ROUTINE) remdesk_virtual_channel_client_thread, (void*) remdesk, 0, NULL);
	if (!remdesk->thread)
	{
		WLog_ERR(TAG, "CreateThread failed");
		error = ERROR_INTERNAL_ERROR;
		goto error_out;
	}
	return CHANNEL_RC_OK;
error_out:
	remdesk_remove_open_handle_data(remdesk->OpenHandle);
	MessageQueue_Free(remdesk->queue);
	remdesk->queue = NULL;
	return error;
}
Exemple #3
0
static void remdesk_virtual_channel_event_connected(remdeskPlugin* remdesk, LPVOID pData, UINT32 dataLength)
{
	UINT32 status;

	status = remdesk->channelEntryPoints.pVirtualChannelOpen(remdesk->InitHandle,
		&remdesk->OpenHandle, remdesk->channelDef.name, remdesk_virtual_channel_open_event);

	remdesk_add_open_handle_data(remdesk->OpenHandle, remdesk);

	if (status != CHANNEL_RC_OK)
	{
		WLog_ERR(TAG,  "open failed: status: %d", status);
		return;
	}

	remdesk->MsgPipe = MessagePipe_New();

	remdesk->thread = CreateThread(NULL, 0,
			(LPTHREAD_START_ROUTINE) remdesk_virtual_channel_client_thread, (void*) remdesk, 0, NULL);
}