mirror of https://github.com/FreeRDP/FreeRDP
client/common: automatically register fake rdpsnd channel when device redirection is in use
This commit is contained in:
parent
15008297be
commit
091f9f3034
|
@ -173,8 +173,9 @@ static void rdpdr_send_device_list_announce_request(rdpdrPlugin* rdpdr, BOOL use
|
|||
* 2. smartcard devices should be always sent
|
||||
* 3. other devices are sent only after user_loggedon
|
||||
*/
|
||||
if (rdpdr->versionMinor == 0x0005 ||
|
||||
device->type == RDPDR_DTYP_SMARTCARD || user_loggedon)
|
||||
|
||||
if ((rdpdr->versionMinor == 0x0005) ||
|
||||
(device->type == RDPDR_DTYP_SMARTCARD) || user_loggedon)
|
||||
{
|
||||
data_len = (device->data == NULL ? 0 : stream_get_length(device->data));
|
||||
stream_check_size(data_out, 20 + data_len);
|
||||
|
|
|
@ -572,7 +572,12 @@ static void rdpsnd_process_connect(rdpSvcPlugin* plugin)
|
|||
rdpsnd_process_addin_args(rdpsnd, args);
|
||||
|
||||
if (rdpsnd->subsystem)
|
||||
{
|
||||
if (strcmp(rdpsnd->subsystem, "fake") == 0)
|
||||
return;
|
||||
|
||||
rdpsnd_load_device_plugin(rdpsnd, rdpsnd->subsystem, args);
|
||||
}
|
||||
|
||||
if (!rdpsnd->device)
|
||||
{
|
||||
|
|
|
@ -831,68 +831,63 @@ int freerdp_client_parse_command_line_arguments(int argc, char** argv, rdpSettin
|
|||
return 1;
|
||||
}
|
||||
|
||||
int freerdp_client_load_addins(rdpChannels* channels, rdpSettings* settings)
|
||||
int freerdp_client_load_static_channel_addin(rdpChannels* channels, rdpSettings* settings, char* name, void* data)
|
||||
{
|
||||
int index;
|
||||
void* entry = NULL;
|
||||
void* entry;
|
||||
|
||||
for (index = 0; index < settings->StaticChannelCount; index++)
|
||||
entry = freerdp_load_channel_addin_entry(name, NULL, NULL, 0);
|
||||
|
||||
if (entry)
|
||||
{
|
||||
ADDIN_ARGV* args;
|
||||
|
||||
args = settings->StaticChannelArray[index];
|
||||
|
||||
entry = freerdp_load_channel_addin_entry(args->argv[0], NULL, NULL, 0);
|
||||
|
||||
if (entry)
|
||||
if (freerdp_channels_client_load(channels, settings, entry, data) == 0)
|
||||
{
|
||||
if (freerdp_channels_client_load(channels, settings, entry, args) == 0)
|
||||
printf("loading channel %s\n", args->argv[0]);
|
||||
printf("loading channel %s\n", name);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
int freerdp_client_load_addins(rdpChannels* channels, rdpSettings* settings)
|
||||
{
|
||||
int index;
|
||||
ADDIN_ARGV* args;
|
||||
|
||||
if (settings->DeviceRedirection)
|
||||
{
|
||||
entry = freerdp_load_channel_addin_entry("rdpdr", NULL, NULL, 0);
|
||||
freerdp_client_load_static_channel_addin(channels, settings, "rdpdr", settings);
|
||||
|
||||
if (entry)
|
||||
if (!freerdp_static_channel_collection_find(settings, "rdpsnd"))
|
||||
{
|
||||
if (freerdp_channels_client_load(channels, settings, entry, settings) == 0)
|
||||
printf("loading channel %s\n", "rdpdr");
|
||||
char* params[2];
|
||||
|
||||
params[0] = "rdpsnd";
|
||||
params[1] = "sys:fake";
|
||||
|
||||
freerdp_client_add_static_channel(settings, 2, (char**) params);
|
||||
}
|
||||
}
|
||||
|
||||
for (index = 0; index < settings->StaticChannelCount; index++)
|
||||
{
|
||||
args = settings->StaticChannelArray[index];
|
||||
freerdp_client_load_static_channel_addin(channels, settings, args->argv[0], args);
|
||||
}
|
||||
|
||||
if (settings->RedirectClipboard)
|
||||
{
|
||||
entry = freerdp_load_channel_addin_entry("cliprdr", NULL, NULL, 0);
|
||||
|
||||
if (entry)
|
||||
{
|
||||
if (freerdp_channels_client_load(channels, settings, entry, settings) == 0)
|
||||
printf("loading channel %s\n", "cliprdr");
|
||||
}
|
||||
freerdp_client_load_static_channel_addin(channels, settings, "cliprdr", settings);
|
||||
}
|
||||
|
||||
if (settings->RemoteApplicationMode)
|
||||
{
|
||||
entry = freerdp_load_channel_addin_entry("rail", NULL, NULL, 0);
|
||||
|
||||
if (entry)
|
||||
{
|
||||
if (freerdp_channels_client_load(channels, settings, entry, settings) == 0)
|
||||
printf("loading channel %s\n", "rail");
|
||||
}
|
||||
freerdp_client_load_static_channel_addin(channels, settings, "rail", settings);
|
||||
}
|
||||
|
||||
if (settings->DynamicChannelCount)
|
||||
{
|
||||
entry = freerdp_load_channel_addin_entry("drdynvc", NULL, NULL, 0);
|
||||
|
||||
if (entry)
|
||||
{
|
||||
if (freerdp_channels_client_load(channels, settings, entry, settings) == 0)
|
||||
printf("loading channel %s\n", "drdynvc");
|
||||
}
|
||||
freerdp_client_load_static_channel_addin(channels, settings, "drdynvc", settings);
|
||||
}
|
||||
|
||||
return 1;
|
||||
|
|
|
@ -969,9 +969,11 @@ FREERDP_API void freerdp_device_collection_add(rdpSettings* settings, RDPDR_DEVI
|
|||
FREERDP_API void freerdp_device_collection_free(rdpSettings* settings);
|
||||
|
||||
FREERDP_API void freerdp_static_channel_collection_add(rdpSettings* settings, ADDIN_ARGV* channel);
|
||||
FREERDP_API ADDIN_ARGV* freerdp_static_channel_collection_find(rdpSettings* settings, const char* name);
|
||||
FREERDP_API void freerdp_static_channel_collection_free(rdpSettings* settings);
|
||||
|
||||
FREERDP_API void freerdp_dynamic_channel_collection_add(rdpSettings* settings, ADDIN_ARGV* channel);
|
||||
FREERDP_API ADDIN_ARGV* freerdp_dynamic_channel_collection_find(rdpSettings* settings, const char* name);
|
||||
FREERDP_API void freerdp_dynamic_channel_collection_free(rdpSettings* settings);
|
||||
|
||||
#endif /* FREERDP_SETTINGS_H */
|
||||
|
|
|
@ -92,6 +92,22 @@ void freerdp_static_channel_collection_add(rdpSettings* settings, ADDIN_ARGV* ch
|
|||
settings->StaticChannelArray[settings->StaticChannelCount++] = channel;
|
||||
}
|
||||
|
||||
ADDIN_ARGV* freerdp_static_channel_collection_find(rdpSettings* settings, const char* name)
|
||||
{
|
||||
int index;
|
||||
ADDIN_ARGV* channel;
|
||||
|
||||
for (index = 0; index < settings->StaticChannelCount; index++)
|
||||
{
|
||||
channel = settings->StaticChannelArray[index];
|
||||
|
||||
if (strcmp(channel->argv[0], name) == 0)
|
||||
return channel;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void freerdp_static_channel_collection_free(rdpSettings* settings)
|
||||
{
|
||||
int index;
|
||||
|
@ -120,6 +136,22 @@ void freerdp_dynamic_channel_collection_add(rdpSettings* settings, ADDIN_ARGV* c
|
|||
settings->DynamicChannelArray[settings->DynamicChannelCount++] = channel;
|
||||
}
|
||||
|
||||
ADDIN_ARGV* freerdp_dynamic_channel_collection_find(rdpSettings* settings, const char* name)
|
||||
{
|
||||
int index;
|
||||
ADDIN_ARGV* channel;
|
||||
|
||||
for (index = 0; index < settings->DynamicChannelCount; index++)
|
||||
{
|
||||
channel = settings->DynamicChannelArray[index];
|
||||
|
||||
if (strcmp(channel->argv[0], name) == 0)
|
||||
return channel;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void freerdp_dynamic_channel_collection_free(rdpSettings* settings)
|
||||
{
|
||||
int index;
|
||||
|
|
Loading…
Reference in New Issue