From 506c665df2f378fea42c56c5e63dee3c72abe30f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Moreau?= Date: Fri, 29 Mar 2013 17:53:18 -0400 Subject: [PATCH] channels/client: start breaking down into smaller blocks channel code --- channels/client/CMakeLists.txt | 2 + channels/client/addin.c | 334 +++++++++++++++++++++++++++++ channels/client/addin.h | 20 ++ channels/client/channels.c | 369 ++++----------------------------- libfreerdp/utils/svc_plugin.c | 4 +- 5 files changed, 394 insertions(+), 335 deletions(-) create mode 100644 channels/client/addin.c create mode 100644 channels/client/addin.h diff --git a/channels/client/CMakeLists.txt b/channels/client/CMakeLists.txt index 96714f701..d1726657d 100644 --- a/channels/client/CMakeLists.txt +++ b/channels/client/CMakeLists.txt @@ -21,6 +21,8 @@ set(MODULE_PREFIX "FREERDP_CHANNELS_CLIENT") set(${MODULE_PREFIX}_SRCS tables.c tables.h + addin.c + addin.h channels.c) list(REMOVE_DUPLICATES CHANNEL_STATIC_CLIENT_ENTRIES) diff --git a/channels/client/addin.c b/channels/client/addin.c new file mode 100644 index 000000000..0577c160f --- /dev/null +++ b/channels/client/addin.c @@ -0,0 +1,334 @@ +/** + * FreeRDP: A Remote Desktop Protocol Implementation + * Channel Addins + * + * Copyright 2012 Marc-Andre Moreau + * + * 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 + +#include +#include +#include +#include +#include +#include + +#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) + { + /* -client. */ + + 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) + { + /* -client-. */ + + 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) + { + /* -client--. */ + + 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; +} diff --git a/channels/client/addin.h b/channels/client/addin.h new file mode 100644 index 000000000..f3ad9702a --- /dev/null +++ b/channels/client/addin.h @@ -0,0 +1,20 @@ +/** + * FreeRDP: A Remote Desktop Protocol Implementation + * Channel Addins + * + * Copyright 2012 Marc-Andre Moreau + * + * 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. + */ + + diff --git a/channels/client/channels.c b/channels/client/channels.c index aaa98c030..d7fb005e7 100644 --- a/channels/client/channels.c +++ b/channels/client/channels.c @@ -23,8 +23,6 @@ #include "config.h" #endif -#include "tables.h" - #include #include #include @@ -45,6 +43,8 @@ #include #include +#include "addin.h" + #ifdef WITH_DEBUG_CHANNELS #define DEBUG_CHANNELS(fmt, ...) DEBUG_CLASS(CHANNELS, fmt, ## __VA_ARGS__) #else @@ -67,305 +67,6 @@ * 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) - { - /* -client. */ - - 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) - { - /* -client-. */ - - 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) - { - /* -client--. */ - - 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 { 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 */ static rdpChannel* freerdp_channels_find_channel_by_id(rdpChannels* channels, rdpSettings* settings, int channel_id, int* pindex) { - int lindex; - int lcount; - rdpChannel* lrdp_channel; + int index; + int count; + 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) - *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, rdpSettings* settings, const char* channel_name, int* pindex) { - int lindex; - int lcount; - rdpChannel* lrdp_channel; + int index; + int count; + 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) - *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->init_handles[channels->num_init_handles].channels = channels; *ppInitHandle = &channels->init_handles[channels->num_init_handles]; + channels->num_init_handles++; 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_handle = *ppInitHandle; channels->num_libs_data++; @@ -759,7 +462,7 @@ static UINT32 FREERDP_CC MyVirtualChannelClose(UINT32 openHandle) return CHANNEL_RC_BAD_CHANNEL_HANDLE; } - lchannel_data = channels->channels_data + index; + lchannel_data = &channels->channels_data[index]; if (lchannel_data->flags != 2) { @@ -806,7 +509,7 @@ static UINT32 FREERDP_CC MyVirtualChannelWrite(UINT32 openHandle, void* pData, U return CHANNEL_RC_ZERO_LENGTH; } - lchannel_data = channels->channels_data + index; + lchannel_data = &channels->channels_data[index]; if (lchannel_data->flags != 2) { @@ -857,7 +560,7 @@ static UINT32 FREERDP_CC MyVirtualChannelEventPush(UINT32 openHandle, wMessage* return CHANNEL_RC_NULL_DATA; } - lchannel_data = channels->channels_data + index; + lchannel_data = &channels->channels_data[index]; if (lchannel_data->flags != 2) { @@ -976,7 +679,7 @@ int freerdp_channels_client_load(rdpChannels* channels, rdpSettings* settings, v return 1; } - lib = channels->libs_data + channels->num_libs_data; + lib = &channels->libs_data[channels->num_libs_data]; lib->entry = (PVIRTUALCHANNELENTRY) entry; 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++) { - llib = channels->libs_data + index; + llib = &channels->libs_data[index]; if (llib->init_event_proc != 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 index; + rdpChannel* channel; rdpChannels* channels; - rdpChannel* lrdp_channel; struct channel_data* lchannel_data; 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; } - 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"); 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) { @@ -1226,8 +929,8 @@ static void freerdp_channels_process_sync(rdpChannels* channels, freerdp* instan { wMessage message; wMessage* event; + rdpChannel* channel; CHANNEL_OPEN_EVENT* item; - rdpChannel* lrdp_channel; struct channel_data* lchannel_data; 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; - 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); - if (lrdp_channel) - instance->SendChannelData(instance, lrdp_channel->ChannelId, item->Data, item->DataLength); + if (channel) + instance->SendChannelData(instance, channel->ChannelId, item->Data, item->DataLength); if (lchannel_data->open_event_proc) { diff --git a/libfreerdp/utils/svc_plugin.c b/libfreerdp/utils/svc_plugin.c index 9f8bab8dc..a47898fd7 100644 --- a/libfreerdp/utils/svc_plugin.c +++ b/libfreerdp/utils/svc_plugin.c @@ -28,11 +28,11 @@ #include #include +#include #include #include #include -#include #include #include @@ -224,7 +224,7 @@ static void svc_plugin_process_connected(rdpSvcPlugin* plugin, void* pData, UINT 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; }