channels/client: start breaking down into smaller blocks channel code
This commit is contained in:
parent
f4df4e4b26
commit
506c665df2
@ -21,6 +21,8 @@ set(MODULE_PREFIX "FREERDP_CHANNELS_CLIENT")
|
|||||||
set(${MODULE_PREFIX}_SRCS
|
set(${MODULE_PREFIX}_SRCS
|
||||||
tables.c
|
tables.c
|
||||||
tables.h
|
tables.h
|
||||||
|
addin.c
|
||||||
|
addin.h
|
||||||
channels.c)
|
channels.c)
|
||||||
|
|
||||||
list(REMOVE_DUPLICATES CHANNEL_STATIC_CLIENT_ENTRIES)
|
list(REMOVE_DUPLICATES CHANNEL_STATIC_CLIENT_ENTRIES)
|
||||||
|
334
channels/client/addin.c
Normal file
334
channels/client/addin.c
Normal file
@ -0,0 +1,334 @@
|
|||||||
|
/**
|
||||||
|
* FreeRDP: A Remote Desktop Protocol Implementation
|
||||||
|
* Channel Addins
|
||||||
|
*
|
||||||
|
* Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <freerdp/addin.h>
|
||||||
|
|
||||||
|
#include <winpr/crt.h>
|
||||||
|
#include <winpr/path.h>
|
||||||
|
#include <winpr/file.h>
|
||||||
|
#include <winpr/synch.h>
|
||||||
|
#include <winpr/library.h>
|
||||||
|
#include <winpr/collections.h>
|
||||||
|
|
||||||
|
#include "tables.h"
|
||||||
|
|
||||||
|
#include "addin.h"
|
||||||
|
|
||||||
|
extern const STATIC_ENTRY_TABLE CLIENT_STATIC_ENTRY_TABLES[];
|
||||||
|
|
||||||
|
void* freerdp_channels_find_static_entry_in_table(const STATIC_ENTRY_TABLE* table, const char* identifier)
|
||||||
|
{
|
||||||
|
int index = 0;
|
||||||
|
STATIC_ENTRY* pEntry;
|
||||||
|
|
||||||
|
pEntry = (STATIC_ENTRY*) &table->table[index++];
|
||||||
|
|
||||||
|
while (pEntry->entry != NULL)
|
||||||
|
{
|
||||||
|
if (strcmp(pEntry->name, identifier) == 0)
|
||||||
|
{
|
||||||
|
return (void*) pEntry->entry;
|
||||||
|
}
|
||||||
|
|
||||||
|
pEntry = (STATIC_ENTRY*) &table->table[index++];
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void* freerdp_channels_client_find_static_entry(const char* name, const char* identifier)
|
||||||
|
{
|
||||||
|
int index = 0;
|
||||||
|
STATIC_ENTRY_TABLE* pEntry;
|
||||||
|
|
||||||
|
pEntry = (STATIC_ENTRY_TABLE*) &CLIENT_STATIC_ENTRY_TABLES[index++];
|
||||||
|
|
||||||
|
while (pEntry->table != NULL)
|
||||||
|
{
|
||||||
|
if (strcmp(pEntry->name, name) == 0)
|
||||||
|
{
|
||||||
|
return freerdp_channels_find_static_entry_in_table(pEntry, identifier);
|
||||||
|
}
|
||||||
|
|
||||||
|
pEntry = (STATIC_ENTRY_TABLE*) &CLIENT_STATIC_ENTRY_TABLES[index++];
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern const STATIC_ADDIN_TABLE CLIENT_STATIC_ADDIN_TABLE[];
|
||||||
|
|
||||||
|
FREERDP_ADDIN** freerdp_channels_list_client_static_addins(LPSTR pszName, LPSTR pszSubsystem, LPSTR pszType, DWORD dwFlags)
|
||||||
|
{
|
||||||
|
int i, j;
|
||||||
|
DWORD nAddins;
|
||||||
|
FREERDP_ADDIN* pAddin;
|
||||||
|
FREERDP_ADDIN** ppAddins = NULL;
|
||||||
|
STATIC_SUBSYSTEM_ENTRY* subsystems;
|
||||||
|
|
||||||
|
nAddins = 0;
|
||||||
|
ppAddins = (FREERDP_ADDIN**) malloc(sizeof(FREERDP_ADDIN*) * 128);
|
||||||
|
ppAddins[nAddins] = NULL;
|
||||||
|
|
||||||
|
for (i = 0; CLIENT_STATIC_ADDIN_TABLE[i].name != NULL; i++)
|
||||||
|
{
|
||||||
|
pAddin = (FREERDP_ADDIN*) malloc(sizeof(FREERDP_ADDIN));
|
||||||
|
ZeroMemory(pAddin, sizeof(FREERDP_ADDIN));
|
||||||
|
|
||||||
|
strcpy(pAddin->cName, CLIENT_STATIC_ADDIN_TABLE[i].name);
|
||||||
|
|
||||||
|
pAddin->dwFlags = FREERDP_ADDIN_CLIENT;
|
||||||
|
pAddin->dwFlags |= FREERDP_ADDIN_STATIC;
|
||||||
|
pAddin->dwFlags |= FREERDP_ADDIN_NAME;
|
||||||
|
|
||||||
|
ppAddins[nAddins++] = pAddin;
|
||||||
|
|
||||||
|
subsystems = (STATIC_SUBSYSTEM_ENTRY*) CLIENT_STATIC_ADDIN_TABLE[i].table;
|
||||||
|
|
||||||
|
for (j = 0; subsystems[j].name != NULL; j++)
|
||||||
|
{
|
||||||
|
pAddin = (FREERDP_ADDIN*) malloc(sizeof(FREERDP_ADDIN));
|
||||||
|
ZeroMemory(pAddin, sizeof(FREERDP_ADDIN));
|
||||||
|
|
||||||
|
strcpy(pAddin->cName, CLIENT_STATIC_ADDIN_TABLE[i].name);
|
||||||
|
strcpy(pAddin->cSubsystem, subsystems[j].name);
|
||||||
|
|
||||||
|
pAddin->dwFlags = FREERDP_ADDIN_CLIENT;
|
||||||
|
pAddin->dwFlags |= FREERDP_ADDIN_STATIC;
|
||||||
|
pAddin->dwFlags |= FREERDP_ADDIN_NAME;
|
||||||
|
pAddin->dwFlags |= FREERDP_ADDIN_SUBSYSTEM;
|
||||||
|
|
||||||
|
ppAddins[nAddins++] = pAddin;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ppAddins[nAddins] = NULL;
|
||||||
|
|
||||||
|
return ppAddins;
|
||||||
|
}
|
||||||
|
|
||||||
|
FREERDP_ADDIN** freerdp_channels_list_dynamic_addins(LPSTR pszName, LPSTR pszSubsystem, LPSTR pszType, DWORD dwFlags)
|
||||||
|
{
|
||||||
|
int index;
|
||||||
|
int nDashes;
|
||||||
|
HANDLE hFind;
|
||||||
|
DWORD nAddins;
|
||||||
|
LPSTR pszPattern;
|
||||||
|
size_t cchPattern;
|
||||||
|
LPCSTR pszAddinPath = FREERDP_ADDIN_PATH;
|
||||||
|
LPCSTR pszInstallPrefix = FREERDP_INSTALL_PREFIX;
|
||||||
|
LPCSTR pszExtension;
|
||||||
|
LPSTR pszSearchPath;
|
||||||
|
size_t cchSearchPath;
|
||||||
|
size_t cchAddinPath;
|
||||||
|
size_t cchInstallPrefix;
|
||||||
|
FREERDP_ADDIN** ppAddins;
|
||||||
|
WIN32_FIND_DATAA FindData;
|
||||||
|
|
||||||
|
cchAddinPath = strlen(pszAddinPath);
|
||||||
|
cchInstallPrefix = strlen(pszInstallPrefix);
|
||||||
|
|
||||||
|
pszExtension = PathGetSharedLibraryExtensionA(0);
|
||||||
|
|
||||||
|
cchPattern = 128 + strlen(pszExtension) + 2;
|
||||||
|
pszPattern = (LPSTR) malloc(cchPattern + 1);
|
||||||
|
|
||||||
|
if (pszName && pszSubsystem && pszType)
|
||||||
|
{
|
||||||
|
sprintf_s(pszPattern, cchPattern, "%s-client-%s-%s.%s", pszName, pszSubsystem, pszType, pszExtension);
|
||||||
|
}
|
||||||
|
else if (pszName && pszType)
|
||||||
|
{
|
||||||
|
sprintf_s(pszPattern, cchPattern, "%s-client-?-%s.%s", pszName, pszType, pszExtension);
|
||||||
|
}
|
||||||
|
else if (pszName)
|
||||||
|
{
|
||||||
|
sprintf_s(pszPattern, cchPattern, "%s-client*.%s", pszName, pszExtension);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sprintf_s(pszPattern, cchPattern, "?-client*.%s", pszExtension);
|
||||||
|
}
|
||||||
|
|
||||||
|
cchPattern = strlen(pszPattern);
|
||||||
|
|
||||||
|
cchSearchPath = cchInstallPrefix + cchAddinPath + cchPattern + 3;
|
||||||
|
pszSearchPath = (LPSTR) malloc(cchSearchPath + 1);
|
||||||
|
|
||||||
|
CopyMemory(pszSearchPath, pszInstallPrefix, cchInstallPrefix);
|
||||||
|
pszSearchPath[cchInstallPrefix] = '\0';
|
||||||
|
|
||||||
|
NativePathCchAppendA(pszSearchPath, cchSearchPath + 1, pszAddinPath);
|
||||||
|
NativePathCchAppendA(pszSearchPath, cchSearchPath + 1, pszPattern);
|
||||||
|
|
||||||
|
cchSearchPath = strlen(pszSearchPath);
|
||||||
|
|
||||||
|
hFind = FindFirstFileA(pszSearchPath, &FindData);
|
||||||
|
|
||||||
|
nAddins = 0;
|
||||||
|
ppAddins = (FREERDP_ADDIN**) malloc(sizeof(FREERDP_ADDIN*) * 128);
|
||||||
|
ppAddins[nAddins] = NULL;
|
||||||
|
|
||||||
|
if (hFind == INVALID_HANDLE_VALUE)
|
||||||
|
return ppAddins;
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
char* p[5];
|
||||||
|
FREERDP_ADDIN* pAddin;
|
||||||
|
|
||||||
|
nDashes = 0;
|
||||||
|
pAddin = (FREERDP_ADDIN*) malloc(sizeof(FREERDP_ADDIN));
|
||||||
|
ZeroMemory(pAddin, sizeof(FREERDP_ADDIN));
|
||||||
|
|
||||||
|
for (index = 0; FindData.cFileName[index]; index++)
|
||||||
|
nDashes += (FindData.cFileName[index] == '-') ? 1 : 0;
|
||||||
|
|
||||||
|
if (nDashes == 1)
|
||||||
|
{
|
||||||
|
/* <name>-client.<extension> */
|
||||||
|
|
||||||
|
p[0] = FindData.cFileName;
|
||||||
|
p[1] = strchr(p[0], '-') + 1;
|
||||||
|
|
||||||
|
strncpy(pAddin->cName, p[0], (p[1] - p[0]) - 1);
|
||||||
|
|
||||||
|
pAddin->dwFlags = FREERDP_ADDIN_CLIENT;
|
||||||
|
pAddin->dwFlags |= FREERDP_ADDIN_DYNAMIC;
|
||||||
|
pAddin->dwFlags |= FREERDP_ADDIN_NAME;
|
||||||
|
|
||||||
|
ppAddins[nAddins++] = pAddin;
|
||||||
|
}
|
||||||
|
else if (nDashes == 2)
|
||||||
|
{
|
||||||
|
/* <name>-client-<subsystem>.<extension> */
|
||||||
|
|
||||||
|
p[0] = FindData.cFileName;
|
||||||
|
p[1] = strchr(p[0], '-') + 1;
|
||||||
|
p[2] = strchr(p[1], '-') + 1;
|
||||||
|
p[3] = strchr(p[2], '.') + 1;
|
||||||
|
|
||||||
|
strncpy(pAddin->cName, p[0], (p[1] - p[0]) - 1);
|
||||||
|
strncpy(pAddin->cSubsystem, p[2], (p[3] - p[2]) - 1);
|
||||||
|
|
||||||
|
pAddin->dwFlags = FREERDP_ADDIN_CLIENT;
|
||||||
|
pAddin->dwFlags |= FREERDP_ADDIN_DYNAMIC;
|
||||||
|
pAddin->dwFlags |= FREERDP_ADDIN_NAME;
|
||||||
|
pAddin->dwFlags |= FREERDP_ADDIN_SUBSYSTEM;
|
||||||
|
|
||||||
|
ppAddins[nAddins++] = pAddin;
|
||||||
|
}
|
||||||
|
else if (nDashes == 3)
|
||||||
|
{
|
||||||
|
/* <name>-client-<subsystem>-<type>.<extension> */
|
||||||
|
|
||||||
|
p[0] = FindData.cFileName;
|
||||||
|
p[1] = strchr(p[0], '-') + 1;
|
||||||
|
p[2] = strchr(p[1], '-') + 1;
|
||||||
|
p[3] = strchr(p[2], '-') + 1;
|
||||||
|
p[4] = strchr(p[3], '.') + 1;
|
||||||
|
|
||||||
|
strncpy(pAddin->cName, p[0], (p[1] - p[0]) - 1);
|
||||||
|
strncpy(pAddin->cSubsystem, p[2], (p[3] - p[2]) - 1);
|
||||||
|
strncpy(pAddin->cType, p[3], (p[4] - p[3]) - 1);
|
||||||
|
|
||||||
|
pAddin->dwFlags = FREERDP_ADDIN_CLIENT;
|
||||||
|
pAddin->dwFlags |= FREERDP_ADDIN_DYNAMIC;
|
||||||
|
pAddin->dwFlags |= FREERDP_ADDIN_NAME;
|
||||||
|
pAddin->dwFlags |= FREERDP_ADDIN_SUBSYSTEM;
|
||||||
|
pAddin->dwFlags |= FREERDP_ADDIN_TYPE;
|
||||||
|
|
||||||
|
ppAddins[nAddins++] = pAddin;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
free(pAddin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (FindNextFileA(hFind, &FindData));
|
||||||
|
|
||||||
|
FindClose(hFind);
|
||||||
|
|
||||||
|
ppAddins[nAddins] = NULL;
|
||||||
|
|
||||||
|
return ppAddins;
|
||||||
|
}
|
||||||
|
|
||||||
|
FREERDP_ADDIN** freerdp_channels_list_addins(LPSTR pszName, LPSTR pszSubsystem, LPSTR pszType, DWORD dwFlags)
|
||||||
|
{
|
||||||
|
if (dwFlags & FREERDP_ADDIN_STATIC)
|
||||||
|
return freerdp_channels_list_client_static_addins(pszName, pszSubsystem, pszType, dwFlags);
|
||||||
|
else if (dwFlags & FREERDP_ADDIN_DYNAMIC)
|
||||||
|
return freerdp_channels_list_dynamic_addins(pszName, pszSubsystem, pszType, dwFlags);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void freerdp_channels_addin_list_free(FREERDP_ADDIN** ppAddins)
|
||||||
|
{
|
||||||
|
int index;
|
||||||
|
|
||||||
|
for (index = 0; ppAddins[index] != NULL; index++)
|
||||||
|
free(ppAddins[index]);
|
||||||
|
|
||||||
|
free(ppAddins);
|
||||||
|
}
|
||||||
|
|
||||||
|
void* freerdp_channels_load_static_addin_entry(LPCSTR pszName, LPSTR pszSubsystem, LPSTR pszType, DWORD dwFlags)
|
||||||
|
{
|
||||||
|
int i, j;
|
||||||
|
STATIC_SUBSYSTEM_ENTRY* subsystems;
|
||||||
|
|
||||||
|
for (i = 0; CLIENT_STATIC_ADDIN_TABLE[i].name != NULL; i++)
|
||||||
|
{
|
||||||
|
if (strcmp(CLIENT_STATIC_ADDIN_TABLE[i].name, pszName) == 0)
|
||||||
|
{
|
||||||
|
if (pszSubsystem != NULL)
|
||||||
|
{
|
||||||
|
subsystems = (STATIC_SUBSYSTEM_ENTRY*) CLIENT_STATIC_ADDIN_TABLE[i].table;
|
||||||
|
|
||||||
|
for (j = 0; subsystems[j].name != NULL; j++)
|
||||||
|
{
|
||||||
|
if (strcmp(subsystems[j].name, pszSubsystem) == 0)
|
||||||
|
{
|
||||||
|
if (pszType)
|
||||||
|
{
|
||||||
|
if (strcmp(subsystems[j].type, pszType) == 0)
|
||||||
|
return (void*) subsystems[j].entry;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return (void*) subsystems[j].entry;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return (void*) CLIENT_STATIC_ADDIN_TABLE[i].entry;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
20
channels/client/addin.h
Normal file
20
channels/client/addin.h
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
/**
|
||||||
|
* FreeRDP: A Remote Desktop Protocol Implementation
|
||||||
|
* Channel Addins
|
||||||
|
*
|
||||||
|
* Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
@ -23,8 +23,6 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "tables.h"
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -45,6 +43,8 @@
|
|||||||
#include <winpr/library.h>
|
#include <winpr/library.h>
|
||||||
#include <winpr/collections.h>
|
#include <winpr/collections.h>
|
||||||
|
|
||||||
|
#include "addin.h"
|
||||||
|
|
||||||
#ifdef WITH_DEBUG_CHANNELS
|
#ifdef WITH_DEBUG_CHANNELS
|
||||||
#define DEBUG_CHANNELS(fmt, ...) DEBUG_CLASS(CHANNELS, fmt, ## __VA_ARGS__)
|
#define DEBUG_CHANNELS(fmt, ...) DEBUG_CLASS(CHANNELS, fmt, ## __VA_ARGS__)
|
||||||
#else
|
#else
|
||||||
@ -67,305 +67,6 @@
|
|||||||
* from the main thread.
|
* from the main thread.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern const STATIC_ENTRY_TABLE CLIENT_STATIC_ENTRY_TABLES[];
|
|
||||||
|
|
||||||
void* freerdp_channels_find_static_entry_in_table(const STATIC_ENTRY_TABLE* table, const char* identifier)
|
|
||||||
{
|
|
||||||
int index = 0;
|
|
||||||
STATIC_ENTRY* pEntry;
|
|
||||||
|
|
||||||
pEntry = (STATIC_ENTRY*) &table->table[index++];
|
|
||||||
|
|
||||||
while (pEntry->entry != NULL)
|
|
||||||
{
|
|
||||||
if (strcmp(pEntry->name, identifier) == 0)
|
|
||||||
{
|
|
||||||
return (void*) pEntry->entry;
|
|
||||||
}
|
|
||||||
|
|
||||||
pEntry = (STATIC_ENTRY*) &table->table[index++];
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void* freerdp_channels_client_find_static_entry(const char* name, const char* identifier)
|
|
||||||
{
|
|
||||||
int index = 0;
|
|
||||||
STATIC_ENTRY_TABLE* pEntry;
|
|
||||||
|
|
||||||
pEntry = (STATIC_ENTRY_TABLE*) &CLIENT_STATIC_ENTRY_TABLES[index++];
|
|
||||||
|
|
||||||
while (pEntry->table != NULL)
|
|
||||||
{
|
|
||||||
if (strcmp(pEntry->name, name) == 0)
|
|
||||||
{
|
|
||||||
return freerdp_channels_find_static_entry_in_table(pEntry, identifier);
|
|
||||||
}
|
|
||||||
|
|
||||||
pEntry = (STATIC_ENTRY_TABLE*) &CLIENT_STATIC_ENTRY_TABLES[index++];
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern const STATIC_ADDIN_TABLE CLIENT_STATIC_ADDIN_TABLE[];
|
|
||||||
|
|
||||||
FREERDP_ADDIN** freerdp_channels_list_client_static_addins(LPSTR pszName, LPSTR pszSubsystem, LPSTR pszType, DWORD dwFlags)
|
|
||||||
{
|
|
||||||
int i, j;
|
|
||||||
DWORD nAddins;
|
|
||||||
FREERDP_ADDIN* pAddin;
|
|
||||||
FREERDP_ADDIN** ppAddins = NULL;
|
|
||||||
STATIC_SUBSYSTEM_ENTRY* subsystems;
|
|
||||||
|
|
||||||
nAddins = 0;
|
|
||||||
ppAddins = (FREERDP_ADDIN**) malloc(sizeof(FREERDP_ADDIN*) * 128);
|
|
||||||
ppAddins[nAddins] = NULL;
|
|
||||||
|
|
||||||
for (i = 0; CLIENT_STATIC_ADDIN_TABLE[i].name != NULL; i++)
|
|
||||||
{
|
|
||||||
pAddin = (FREERDP_ADDIN*) malloc(sizeof(FREERDP_ADDIN));
|
|
||||||
ZeroMemory(pAddin, sizeof(FREERDP_ADDIN));
|
|
||||||
|
|
||||||
strcpy(pAddin->cName, CLIENT_STATIC_ADDIN_TABLE[i].name);
|
|
||||||
|
|
||||||
pAddin->dwFlags = FREERDP_ADDIN_CLIENT;
|
|
||||||
pAddin->dwFlags |= FREERDP_ADDIN_STATIC;
|
|
||||||
pAddin->dwFlags |= FREERDP_ADDIN_NAME;
|
|
||||||
|
|
||||||
ppAddins[nAddins++] = pAddin;
|
|
||||||
|
|
||||||
subsystems = (STATIC_SUBSYSTEM_ENTRY*) CLIENT_STATIC_ADDIN_TABLE[i].table;
|
|
||||||
|
|
||||||
for (j = 0; subsystems[j].name != NULL; j++)
|
|
||||||
{
|
|
||||||
pAddin = (FREERDP_ADDIN*) malloc(sizeof(FREERDP_ADDIN));
|
|
||||||
ZeroMemory(pAddin, sizeof(FREERDP_ADDIN));
|
|
||||||
|
|
||||||
strcpy(pAddin->cName, CLIENT_STATIC_ADDIN_TABLE[i].name);
|
|
||||||
strcpy(pAddin->cSubsystem, subsystems[j].name);
|
|
||||||
|
|
||||||
pAddin->dwFlags = FREERDP_ADDIN_CLIENT;
|
|
||||||
pAddin->dwFlags |= FREERDP_ADDIN_STATIC;
|
|
||||||
pAddin->dwFlags |= FREERDP_ADDIN_NAME;
|
|
||||||
pAddin->dwFlags |= FREERDP_ADDIN_SUBSYSTEM;
|
|
||||||
|
|
||||||
ppAddins[nAddins++] = pAddin;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ppAddins[nAddins] = NULL;
|
|
||||||
|
|
||||||
return ppAddins;
|
|
||||||
}
|
|
||||||
|
|
||||||
FREERDP_ADDIN** freerdp_channels_list_dynamic_addins(LPSTR pszName, LPSTR pszSubsystem, LPSTR pszType, DWORD dwFlags)
|
|
||||||
{
|
|
||||||
int index;
|
|
||||||
int nDashes;
|
|
||||||
HANDLE hFind;
|
|
||||||
DWORD nAddins;
|
|
||||||
LPSTR pszPattern;
|
|
||||||
size_t cchPattern;
|
|
||||||
LPCSTR pszAddinPath = FREERDP_ADDIN_PATH;
|
|
||||||
LPCSTR pszInstallPrefix = FREERDP_INSTALL_PREFIX;
|
|
||||||
LPCSTR pszExtension;
|
|
||||||
LPSTR pszSearchPath;
|
|
||||||
size_t cchSearchPath;
|
|
||||||
size_t cchAddinPath;
|
|
||||||
size_t cchInstallPrefix;
|
|
||||||
FREERDP_ADDIN** ppAddins;
|
|
||||||
WIN32_FIND_DATAA FindData;
|
|
||||||
|
|
||||||
cchAddinPath = strlen(pszAddinPath);
|
|
||||||
cchInstallPrefix = strlen(pszInstallPrefix);
|
|
||||||
|
|
||||||
pszExtension = PathGetSharedLibraryExtensionA(0);
|
|
||||||
|
|
||||||
cchPattern = 128 + strlen(pszExtension) + 2;
|
|
||||||
pszPattern = (LPSTR) malloc(cchPattern + 1);
|
|
||||||
|
|
||||||
if (pszName && pszSubsystem && pszType)
|
|
||||||
{
|
|
||||||
sprintf_s(pszPattern, cchPattern, "%s-client-%s-%s.%s", pszName, pszSubsystem, pszType, pszExtension);
|
|
||||||
}
|
|
||||||
else if (pszName && pszType)
|
|
||||||
{
|
|
||||||
sprintf_s(pszPattern, cchPattern, "%s-client-?-%s.%s", pszName, pszType, pszExtension);
|
|
||||||
}
|
|
||||||
else if (pszName)
|
|
||||||
{
|
|
||||||
sprintf_s(pszPattern, cchPattern, "%s-client*.%s", pszName, pszExtension);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sprintf_s(pszPattern, cchPattern, "?-client*.%s", pszExtension);
|
|
||||||
}
|
|
||||||
|
|
||||||
cchPattern = strlen(pszPattern);
|
|
||||||
|
|
||||||
cchSearchPath = cchInstallPrefix + cchAddinPath + cchPattern + 3;
|
|
||||||
pszSearchPath = (LPSTR) malloc(cchSearchPath + 1);
|
|
||||||
|
|
||||||
CopyMemory(pszSearchPath, pszInstallPrefix, cchInstallPrefix);
|
|
||||||
pszSearchPath[cchInstallPrefix] = '\0';
|
|
||||||
|
|
||||||
NativePathCchAppendA(pszSearchPath, cchSearchPath + 1, pszAddinPath);
|
|
||||||
NativePathCchAppendA(pszSearchPath, cchSearchPath + 1, pszPattern);
|
|
||||||
|
|
||||||
cchSearchPath = strlen(pszSearchPath);
|
|
||||||
|
|
||||||
hFind = FindFirstFileA(pszSearchPath, &FindData);
|
|
||||||
|
|
||||||
nAddins = 0;
|
|
||||||
ppAddins = (FREERDP_ADDIN**) malloc(sizeof(FREERDP_ADDIN*) * 128);
|
|
||||||
ppAddins[nAddins] = NULL;
|
|
||||||
|
|
||||||
if (hFind == INVALID_HANDLE_VALUE)
|
|
||||||
return ppAddins;
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
char* p[5];
|
|
||||||
FREERDP_ADDIN* pAddin;
|
|
||||||
|
|
||||||
nDashes = 0;
|
|
||||||
pAddin = (FREERDP_ADDIN*) malloc(sizeof(FREERDP_ADDIN));
|
|
||||||
ZeroMemory(pAddin, sizeof(FREERDP_ADDIN));
|
|
||||||
|
|
||||||
for (index = 0; FindData.cFileName[index]; index++)
|
|
||||||
nDashes += (FindData.cFileName[index] == '-') ? 1 : 0;
|
|
||||||
|
|
||||||
if (nDashes == 1)
|
|
||||||
{
|
|
||||||
/* <name>-client.<extension> */
|
|
||||||
|
|
||||||
p[0] = FindData.cFileName;
|
|
||||||
p[1] = strchr(p[0], '-') + 1;
|
|
||||||
|
|
||||||
strncpy(pAddin->cName, p[0], (p[1] - p[0]) - 1);
|
|
||||||
|
|
||||||
pAddin->dwFlags = FREERDP_ADDIN_CLIENT;
|
|
||||||
pAddin->dwFlags |= FREERDP_ADDIN_DYNAMIC;
|
|
||||||
pAddin->dwFlags |= FREERDP_ADDIN_NAME;
|
|
||||||
|
|
||||||
ppAddins[nAddins++] = pAddin;
|
|
||||||
}
|
|
||||||
else if (nDashes == 2)
|
|
||||||
{
|
|
||||||
/* <name>-client-<subsystem>.<extension> */
|
|
||||||
|
|
||||||
p[0] = FindData.cFileName;
|
|
||||||
p[1] = strchr(p[0], '-') + 1;
|
|
||||||
p[2] = strchr(p[1], '-') + 1;
|
|
||||||
p[3] = strchr(p[2], '.') + 1;
|
|
||||||
|
|
||||||
strncpy(pAddin->cName, p[0], (p[1] - p[0]) - 1);
|
|
||||||
strncpy(pAddin->cSubsystem, p[2], (p[3] - p[2]) - 1);
|
|
||||||
|
|
||||||
pAddin->dwFlags = FREERDP_ADDIN_CLIENT;
|
|
||||||
pAddin->dwFlags |= FREERDP_ADDIN_DYNAMIC;
|
|
||||||
pAddin->dwFlags |= FREERDP_ADDIN_NAME;
|
|
||||||
pAddin->dwFlags |= FREERDP_ADDIN_SUBSYSTEM;
|
|
||||||
|
|
||||||
ppAddins[nAddins++] = pAddin;
|
|
||||||
}
|
|
||||||
else if (nDashes == 3)
|
|
||||||
{
|
|
||||||
/* <name>-client-<subsystem>-<type>.<extension> */
|
|
||||||
|
|
||||||
p[0] = FindData.cFileName;
|
|
||||||
p[1] = strchr(p[0], '-') + 1;
|
|
||||||
p[2] = strchr(p[1], '-') + 1;
|
|
||||||
p[3] = strchr(p[2], '-') + 1;
|
|
||||||
p[4] = strchr(p[3], '.') + 1;
|
|
||||||
|
|
||||||
strncpy(pAddin->cName, p[0], (p[1] - p[0]) - 1);
|
|
||||||
strncpy(pAddin->cSubsystem, p[2], (p[3] - p[2]) - 1);
|
|
||||||
strncpy(pAddin->cType, p[3], (p[4] - p[3]) - 1);
|
|
||||||
|
|
||||||
pAddin->dwFlags = FREERDP_ADDIN_CLIENT;
|
|
||||||
pAddin->dwFlags |= FREERDP_ADDIN_DYNAMIC;
|
|
||||||
pAddin->dwFlags |= FREERDP_ADDIN_NAME;
|
|
||||||
pAddin->dwFlags |= FREERDP_ADDIN_SUBSYSTEM;
|
|
||||||
pAddin->dwFlags |= FREERDP_ADDIN_TYPE;
|
|
||||||
|
|
||||||
ppAddins[nAddins++] = pAddin;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
free(pAddin);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
while (FindNextFileA(hFind, &FindData));
|
|
||||||
|
|
||||||
FindClose(hFind);
|
|
||||||
|
|
||||||
ppAddins[nAddins] = NULL;
|
|
||||||
|
|
||||||
return ppAddins;
|
|
||||||
}
|
|
||||||
|
|
||||||
FREERDP_ADDIN** freerdp_channels_list_addins(LPSTR pszName, LPSTR pszSubsystem, LPSTR pszType, DWORD dwFlags)
|
|
||||||
{
|
|
||||||
if (dwFlags & FREERDP_ADDIN_STATIC)
|
|
||||||
return freerdp_channels_list_client_static_addins(pszName, pszSubsystem, pszType, dwFlags);
|
|
||||||
else if (dwFlags & FREERDP_ADDIN_DYNAMIC)
|
|
||||||
return freerdp_channels_list_dynamic_addins(pszName, pszSubsystem, pszType, dwFlags);
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void freerdp_channels_addin_list_free(FREERDP_ADDIN** ppAddins)
|
|
||||||
{
|
|
||||||
int index;
|
|
||||||
|
|
||||||
for (index = 0; ppAddins[index] != NULL; index++)
|
|
||||||
free(ppAddins[index]);
|
|
||||||
|
|
||||||
free(ppAddins);
|
|
||||||
}
|
|
||||||
|
|
||||||
void* freerdp_channels_load_static_addin_entry(LPCSTR pszName, LPSTR pszSubsystem, LPSTR pszType, DWORD dwFlags)
|
|
||||||
{
|
|
||||||
int i, j;
|
|
||||||
STATIC_SUBSYSTEM_ENTRY* subsystems;
|
|
||||||
|
|
||||||
for (i = 0; CLIENT_STATIC_ADDIN_TABLE[i].name != NULL; i++)
|
|
||||||
{
|
|
||||||
if (strcmp(CLIENT_STATIC_ADDIN_TABLE[i].name, pszName) == 0)
|
|
||||||
{
|
|
||||||
if (pszSubsystem != NULL)
|
|
||||||
{
|
|
||||||
subsystems = (STATIC_SUBSYSTEM_ENTRY*) CLIENT_STATIC_ADDIN_TABLE[i].table;
|
|
||||||
|
|
||||||
for (j = 0; subsystems[j].name != NULL; j++)
|
|
||||||
{
|
|
||||||
if (strcmp(subsystems[j].name, pszSubsystem) == 0)
|
|
||||||
{
|
|
||||||
if (pszType)
|
|
||||||
{
|
|
||||||
if (strcmp(subsystems[j].type, pszType) == 0)
|
|
||||||
return (void*) subsystems[j].entry;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return (void*) subsystems[j].entry;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return (void*) CLIENT_STATIC_ADDIN_TABLE[i].entry;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct lib_data
|
struct lib_data
|
||||||
{
|
{
|
||||||
PVIRTUALCHANNELENTRY entry; /* the one and only exported function */
|
PVIRTUALCHANNELENTRY entry; /* the one and only exported function */
|
||||||
@ -533,22 +234,22 @@ static struct channel_data* freerdp_channels_find_channel_data_by_name(rdpChanne
|
|||||||
/* returns rdpChannel for the channel id passed in */
|
/* returns rdpChannel for the channel id passed in */
|
||||||
static rdpChannel* freerdp_channels_find_channel_by_id(rdpChannels* channels, rdpSettings* settings, int channel_id, int* pindex)
|
static rdpChannel* freerdp_channels_find_channel_by_id(rdpChannels* channels, rdpSettings* settings, int channel_id, int* pindex)
|
||||||
{
|
{
|
||||||
int lindex;
|
int index;
|
||||||
int lcount;
|
int count;
|
||||||
rdpChannel* lrdp_channel;
|
rdpChannel* channel;
|
||||||
|
|
||||||
lcount = settings->ChannelCount;
|
count = settings->ChannelCount;
|
||||||
|
|
||||||
for (lindex = 0; lindex < lcount; lindex++)
|
for (index = 0; index < count; index++)
|
||||||
{
|
{
|
||||||
lrdp_channel = settings->ChannelDefArray + lindex;
|
channel = &settings->ChannelDefArray[index];
|
||||||
|
|
||||||
if (lrdp_channel->ChannelId == channel_id)
|
if (channel->ChannelId == channel_id)
|
||||||
{
|
{
|
||||||
if (pindex != 0)
|
if (pindex != 0)
|
||||||
*pindex = lindex;
|
*pindex = index;
|
||||||
|
|
||||||
return lrdp_channel;
|
return channel;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -559,22 +260,22 @@ static rdpChannel* freerdp_channels_find_channel_by_id(rdpChannels* channels, rd
|
|||||||
static rdpChannel* freerdp_channels_find_channel_by_name(rdpChannels* channels,
|
static rdpChannel* freerdp_channels_find_channel_by_name(rdpChannels* channels,
|
||||||
rdpSettings* settings, const char* channel_name, int* pindex)
|
rdpSettings* settings, const char* channel_name, int* pindex)
|
||||||
{
|
{
|
||||||
int lindex;
|
int index;
|
||||||
int lcount;
|
int count;
|
||||||
rdpChannel* lrdp_channel;
|
rdpChannel* channel;
|
||||||
|
|
||||||
lcount = settings->ChannelCount;
|
count = settings->ChannelCount;
|
||||||
|
|
||||||
for (lindex = 0; lindex < lcount; lindex++)
|
for (index = 0; index < count; index++)
|
||||||
{
|
{
|
||||||
lrdp_channel = settings->ChannelDefArray + lindex;
|
channel = &settings->ChannelDefArray[index];
|
||||||
|
|
||||||
if (strcmp(channel_name, lrdp_channel->Name) == 0)
|
if (strcmp(channel_name, channel->Name) == 0)
|
||||||
{
|
{
|
||||||
if (pindex != 0)
|
if (pindex != 0)
|
||||||
*pindex = lindex;
|
*pindex = index;
|
||||||
|
|
||||||
return lrdp_channel;
|
return channel;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -603,8 +304,10 @@ static UINT32 FREERDP_CC MyVirtualChannelInit(void** ppInitHandle, PCHANNEL_DEF
|
|||||||
}
|
}
|
||||||
|
|
||||||
channels = g_init_channels;
|
channels = g_init_channels;
|
||||||
|
|
||||||
channels->init_handles[channels->num_init_handles].channels = channels;
|
channels->init_handles[channels->num_init_handles].channels = channels;
|
||||||
*ppInitHandle = &channels->init_handles[channels->num_init_handles];
|
*ppInitHandle = &channels->init_handles[channels->num_init_handles];
|
||||||
|
|
||||||
channels->num_init_handles++;
|
channels->num_init_handles++;
|
||||||
|
|
||||||
DEBUG_CHANNELS("enter");
|
DEBUG_CHANNELS("enter");
|
||||||
@ -649,7 +352,7 @@ static UINT32 FREERDP_CC MyVirtualChannelInit(void** ppInitHandle, PCHANNEL_DEF
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
llib = channels->libs_data + channels->num_libs_data;
|
llib = &channels->libs_data[channels->num_libs_data];
|
||||||
llib->init_event_proc = pChannelInitEventProc;
|
llib->init_event_proc = pChannelInitEventProc;
|
||||||
llib->init_handle = *ppInitHandle;
|
llib->init_handle = *ppInitHandle;
|
||||||
channels->num_libs_data++;
|
channels->num_libs_data++;
|
||||||
@ -759,7 +462,7 @@ static UINT32 FREERDP_CC MyVirtualChannelClose(UINT32 openHandle)
|
|||||||
return CHANNEL_RC_BAD_CHANNEL_HANDLE;
|
return CHANNEL_RC_BAD_CHANNEL_HANDLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
lchannel_data = channels->channels_data + index;
|
lchannel_data = &channels->channels_data[index];
|
||||||
|
|
||||||
if (lchannel_data->flags != 2)
|
if (lchannel_data->flags != 2)
|
||||||
{
|
{
|
||||||
@ -806,7 +509,7 @@ static UINT32 FREERDP_CC MyVirtualChannelWrite(UINT32 openHandle, void* pData, U
|
|||||||
return CHANNEL_RC_ZERO_LENGTH;
|
return CHANNEL_RC_ZERO_LENGTH;
|
||||||
}
|
}
|
||||||
|
|
||||||
lchannel_data = channels->channels_data + index;
|
lchannel_data = &channels->channels_data[index];
|
||||||
|
|
||||||
if (lchannel_data->flags != 2)
|
if (lchannel_data->flags != 2)
|
||||||
{
|
{
|
||||||
@ -857,7 +560,7 @@ static UINT32 FREERDP_CC MyVirtualChannelEventPush(UINT32 openHandle, wMessage*
|
|||||||
return CHANNEL_RC_NULL_DATA;
|
return CHANNEL_RC_NULL_DATA;
|
||||||
}
|
}
|
||||||
|
|
||||||
lchannel_data = channels->channels_data + index;
|
lchannel_data = &channels->channels_data[index];
|
||||||
|
|
||||||
if (lchannel_data->flags != 2)
|
if (lchannel_data->flags != 2)
|
||||||
{
|
{
|
||||||
@ -976,7 +679,7 @@ int freerdp_channels_client_load(rdpChannels* channels, rdpSettings* settings, v
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
lib = channels->libs_data + channels->num_libs_data;
|
lib = &channels->libs_data[channels->num_libs_data];
|
||||||
lib->entry = (PVIRTUALCHANNELENTRY) entry;
|
lib->entry = (PVIRTUALCHANNELENTRY) entry;
|
||||||
|
|
||||||
ep.cbSize = sizeof(ep);
|
ep.cbSize = sizeof(ep);
|
||||||
@ -1081,7 +784,7 @@ int freerdp_channels_pre_connect(rdpChannels* channels, freerdp* instance)
|
|||||||
|
|
||||||
for (index = 0; index < channels->num_libs_data; index++)
|
for (index = 0; index < channels->num_libs_data; index++)
|
||||||
{
|
{
|
||||||
llib = channels->libs_data + index;
|
llib = &channels->libs_data[index];
|
||||||
|
|
||||||
if (llib->init_event_proc != 0)
|
if (llib->init_event_proc != 0)
|
||||||
llib->init_event_proc(llib->init_handle, CHANNEL_EVENT_INITIALIZED, 0, 0);
|
llib->init_event_proc(llib->init_handle, CHANNEL_EVENT_INITIALIZED, 0, 0);
|
||||||
@ -1126,8 +829,8 @@ int freerdp_channels_post_connect(rdpChannels* channels, freerdp* instance)
|
|||||||
int freerdp_channels_data(freerdp* instance, int channel_id, void* data, int data_size, int flags, int total_size)
|
int freerdp_channels_data(freerdp* instance, int channel_id, void* data, int data_size, int flags, int total_size)
|
||||||
{
|
{
|
||||||
int index;
|
int index;
|
||||||
|
rdpChannel* channel;
|
||||||
rdpChannels* channels;
|
rdpChannels* channels;
|
||||||
rdpChannel* lrdp_channel;
|
|
||||||
struct channel_data* lchannel_data;
|
struct channel_data* lchannel_data;
|
||||||
|
|
||||||
channels = freerdp_channels_find_by_instance(instance);
|
channels = freerdp_channels_find_by_instance(instance);
|
||||||
@ -1138,15 +841,15 @@ int freerdp_channels_data(freerdp* instance, int channel_id, void* data, int dat
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
lrdp_channel = freerdp_channels_find_channel_by_id(channels, instance->settings, channel_id, &index);
|
channel = freerdp_channels_find_channel_by_id(channels, instance->settings, channel_id, &index);
|
||||||
|
|
||||||
if (!lrdp_channel)
|
if (!channel)
|
||||||
{
|
{
|
||||||
DEBUG_CHANNELS("could not find channel id");
|
DEBUG_CHANNELS("could not find channel id");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
lchannel_data = freerdp_channels_find_channel_data_by_name(channels, lrdp_channel->Name, &index);
|
lchannel_data = freerdp_channels_find_channel_data_by_name(channels, channel->Name, &index);
|
||||||
|
|
||||||
if (!lchannel_data)
|
if (!lchannel_data)
|
||||||
{
|
{
|
||||||
@ -1226,8 +929,8 @@ static void freerdp_channels_process_sync(rdpChannels* channels, freerdp* instan
|
|||||||
{
|
{
|
||||||
wMessage message;
|
wMessage message;
|
||||||
wMessage* event;
|
wMessage* event;
|
||||||
|
rdpChannel* channel;
|
||||||
CHANNEL_OPEN_EVENT* item;
|
CHANNEL_OPEN_EVENT* item;
|
||||||
rdpChannel* lrdp_channel;
|
|
||||||
struct channel_data* lchannel_data;
|
struct channel_data* lchannel_data;
|
||||||
|
|
||||||
while (MessageQueue_Peek(channels->MsgPipe->Out, &message, TRUE))
|
while (MessageQueue_Peek(channels->MsgPipe->Out, &message, TRUE))
|
||||||
@ -1244,11 +947,11 @@ static void freerdp_channels_process_sync(rdpChannels* channels, freerdp* instan
|
|||||||
|
|
||||||
lchannel_data = channels->channels_data + item->Index;
|
lchannel_data = channels->channels_data + item->Index;
|
||||||
|
|
||||||
lrdp_channel = freerdp_channels_find_channel_by_name(channels, instance->settings,
|
channel = freerdp_channels_find_channel_by_name(channels, instance->settings,
|
||||||
lchannel_data->name, &item->Index);
|
lchannel_data->name, &item->Index);
|
||||||
|
|
||||||
if (lrdp_channel)
|
if (channel)
|
||||||
instance->SendChannelData(instance, lrdp_channel->ChannelId, item->Data, item->DataLength);
|
instance->SendChannelData(instance, channel->ChannelId, item->Data, item->DataLength);
|
||||||
|
|
||||||
if (lchannel_data->open_event_proc)
|
if (lchannel_data->open_event_proc)
|
||||||
{
|
{
|
||||||
|
@ -28,11 +28,11 @@
|
|||||||
|
|
||||||
#include <winpr/crt.h>
|
#include <winpr/crt.h>
|
||||||
#include <winpr/synch.h>
|
#include <winpr/synch.h>
|
||||||
|
#include <winpr/stream.h>
|
||||||
#include <winpr/collections.h>
|
#include <winpr/collections.h>
|
||||||
|
|
||||||
#include <freerdp/constants.h>
|
#include <freerdp/constants.h>
|
||||||
#include <freerdp/utils/debug.h>
|
#include <freerdp/utils/debug.h>
|
||||||
#include <winpr/stream.h>
|
|
||||||
#include <freerdp/utils/event.h>
|
#include <freerdp/utils/event.h>
|
||||||
#include <freerdp/utils/svc_plugin.h>
|
#include <freerdp/utils/svc_plugin.h>
|
||||||
|
|
||||||
@ -224,7 +224,7 @@ static void svc_plugin_process_connected(rdpSvcPlugin* plugin, void* pData, UINT
|
|||||||
|
|
||||||
if (status != CHANNEL_RC_OK)
|
if (status != CHANNEL_RC_OK)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "svc_plugin_process_connected: open failed\n");
|
fprintf(stderr, "svc_plugin_process_connected: open failed: status: %d\n", status);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user