mirror of https://github.com/FreeRDP/FreeRDP
libfreerdp-core: add options for specifying compression level
This commit is contained in:
parent
ab5e2b4f3d
commit
4310089102
|
@ -80,6 +80,7 @@ COMMAND_LINE_ARGUMENT_A args[] =
|
|||
{ "app-file", COMMAND_LINE_VALUE_REQUIRED, "<file name>", NULL, NULL, -1, NULL, "File to open with remote application" },
|
||||
{ "app-guid", COMMAND_LINE_VALUE_REQUIRED, "<app guid>", NULL, NULL, -1, NULL, "Remote application GUID" },
|
||||
{ "compression", COMMAND_LINE_VALUE_BOOL, NULL, BoolValueFalse, NULL, -1, "z", "Compression" },
|
||||
{ "compression-level", COMMAND_LINE_VALUE_REQUIRED, "<level>", NULL, NULL, -1, NULL, "Compression level (0,1,2)" },
|
||||
{ "shell", COMMAND_LINE_VALUE_REQUIRED, NULL, NULL, NULL, -1, NULL, "Alternate shell" },
|
||||
{ "shell-dir", COMMAND_LINE_VALUE_REQUIRED, NULL, NULL, NULL, -1, NULL, "Shell working directory" },
|
||||
{ "sound", COMMAND_LINE_VALUE_OPTIONAL, NULL, NULL, NULL, -1, "audio", "Audio output (sound)" },
|
||||
|
@ -1409,6 +1410,10 @@ int freerdp_client_settings_parse_command_line_arguments(rdpSettings* settings,
|
|||
{
|
||||
settings->CompressionEnabled = arg->Value ? TRUE : FALSE;
|
||||
}
|
||||
CommandLineSwitchCase(arg, "compression-level")
|
||||
{
|
||||
settings->CompressionLevel = atoi(arg->Value);
|
||||
}
|
||||
CommandLineSwitchCase(arg, "drives")
|
||||
{
|
||||
settings->RedirectDrives = arg->Value ? TRUE : FALSE;
|
||||
|
|
|
@ -25,14 +25,10 @@
|
|||
#include <freerdp/types.h>
|
||||
|
||||
/* Compression Types */
|
||||
|
||||
#define PACKET_COMPRESSED 0x20
|
||||
#define PACKET_AT_FRONT 0x40
|
||||
#define PACKET_FLUSHED 0x80
|
||||
#define PACKET_COMPR_TYPE_8K 0x00
|
||||
#define PACKET_COMPR_TYPE_64K 0x01
|
||||
#define PACKET_COMPR_TYPE_RDP6 0x02
|
||||
#define PACKET_COMPR_TYPE_RDP61 0x03
|
||||
#define CompressionTypeMask 0x0F
|
||||
|
||||
#define RDP6_HISTORY_BUF_SIZE 65536
|
||||
#define RDP6_OFFSET_CACHE_SIZE 8
|
||||
|
|
|
@ -251,6 +251,13 @@ typedef struct _TARGET_NET_ADDRESS TARGET_NET_ADDRESS;
|
|||
#define STATUS_VM_WAKING 0x00000502
|
||||
#define STATUS_VM_BOOTING 0x00000503
|
||||
|
||||
/* Compression Flags */
|
||||
#define PACKET_COMPR_TYPE_8K 0x00
|
||||
#define PACKET_COMPR_TYPE_64K 0x01
|
||||
#define PACKET_COMPR_TYPE_RDP6 0x02
|
||||
#define PACKET_COMPR_TYPE_RDP61 0x03
|
||||
#define PACKET_COMPR_TYPE_RDP8 0x04
|
||||
|
||||
/* SYSTEM_TIME */
|
||||
typedef struct
|
||||
{
|
||||
|
@ -538,7 +545,7 @@ typedef struct _RDPDR_PARALLEL RDPDR_PARALLEL;
|
|||
#define FreeRDP_DesktopPosX 390
|
||||
#define FreeRDP_DesktopPosY 391
|
||||
#define FreeRDP_MultitransportFlags 512
|
||||
#define FreeRDP_SupportMultitransport 513
|
||||
#define FreeRDP_SupportMultitransport 513
|
||||
#define FreeRDP_AlternateShell 640
|
||||
#define FreeRDP_ShellWorkingDirectory 641
|
||||
#define FreeRDP_AutoLogonEnabled 704
|
||||
|
@ -558,6 +565,7 @@ typedef struct _RDPDR_PARALLEL RDPDR_PARALLEL;
|
|||
#define FreeRDP_UsingSavedCredentials 718
|
||||
#define FreeRDP_ForceEncryptedCsPdu 719
|
||||
#define FreeRDP_HiDefRemoteApp 720
|
||||
#define FreeRDP_CompressionLevel 721
|
||||
#define FreeRDP_IPv6Enabled 768
|
||||
#define FreeRDP_ClientAddress 769
|
||||
#define FreeRDP_ClientDir 770
|
||||
|
@ -890,7 +898,8 @@ struct rdp_settings
|
|||
ALIGN64 BOOL UsingSavedCredentials; /* 718 */
|
||||
ALIGN64 BOOL ForceEncryptedCsPdu; /* 719 */
|
||||
ALIGN64 BOOL HiDefRemoteApp; /* 720 */
|
||||
UINT64 padding0768[768 - 721]; /* 721 */
|
||||
ALIGN64 UINT32 CompressionLevel; /* 721 */
|
||||
UINT64 padding0768[768 - 722]; /* 722 */
|
||||
|
||||
/* Client Info (Extra) */
|
||||
ALIGN64 BOOL IPv6Enabled; /* 768 */
|
||||
|
|
|
@ -131,7 +131,7 @@ UINT32 transposebits(UINT32 x)
|
|||
|
||||
int decompress_rdp(struct rdp_mppc_dec* dec, BYTE* cbuf, int len, int ctype, UINT32* roff, UINT32* rlen)
|
||||
{
|
||||
int type = ctype & 0x0f;
|
||||
UINT32 type = ctype & 0x0F;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
|
|
|
@ -1535,6 +1535,10 @@ UINT32 freerdp_get_param_uint32(rdpSettings* settings, int id)
|
|||
return settings->MultitransportFlags;
|
||||
break;
|
||||
|
||||
case FreeRDP_CompressionLevel:
|
||||
return settings->CompressionLevel;
|
||||
break;
|
||||
|
||||
case FreeRDP_AutoReconnectMaxRetries:
|
||||
return settings->AutoReconnectMaxRetries;
|
||||
break;
|
||||
|
@ -1839,6 +1843,10 @@ int freerdp_set_param_uint32(rdpSettings* settings, int id, UINT32 param)
|
|||
settings->MultitransportFlags = param;
|
||||
break;
|
||||
|
||||
case FreeRDP_CompressionLevel:
|
||||
settings->CompressionLevel = param;
|
||||
break;
|
||||
|
||||
case FreeRDP_AutoReconnectMaxRetries:
|
||||
settings->AutoReconnectMaxRetries = param;
|
||||
break;
|
||||
|
|
|
@ -294,8 +294,9 @@ BOOL rdp_read_info_packet(wStream* s, rdpSettings* settings)
|
|||
UINT16 cbPassword;
|
||||
UINT16 cbAlternateShell;
|
||||
UINT16 cbWorkingDir;
|
||||
UINT32 CompressionLevel;
|
||||
|
||||
if (Stream_GetRemainingLength(s) < 18) // invalid packet
|
||||
if (Stream_GetRemainingLength(s) < 18)
|
||||
return FALSE;
|
||||
|
||||
Stream_Seek_UINT32(s); /* CodePage */
|
||||
|
@ -308,6 +309,12 @@ BOOL rdp_read_info_packet(wStream* s, rdpSettings* settings)
|
|||
settings->RemoteConsoleAudio = ((flags & INFO_REMOTECONSOLEAUDIO) ? TRUE : FALSE);
|
||||
settings->CompressionEnabled = ((flags & INFO_COMPRESSION) ? TRUE : FALSE);
|
||||
|
||||
if (flags & INFO_COMPRESSION)
|
||||
{
|
||||
CompressionLevel = ((flags & 0x00001E00) >> 9);
|
||||
settings->CompressionLevel = CompressionLevel;
|
||||
}
|
||||
|
||||
Stream_Read_UINT16(s, cbDomain); /* cbDomain */
|
||||
Stream_Read_UINT16(s, cbUserName); /* cbUserName */
|
||||
Stream_Read_UINT16(s, cbPassword); /* cbPassword */
|
||||
|
@ -419,7 +426,10 @@ void rdp_write_info_packet(wStream* s, rdpSettings* settings)
|
|||
flags |= INFO_REMOTECONSOLEAUDIO;
|
||||
|
||||
if (settings->CompressionEnabled)
|
||||
flags |= INFO_COMPRESSION | INFO_PACKET_COMPR_TYPE_RDP6;
|
||||
{
|
||||
flags |= INFO_COMPRESSION;
|
||||
flags |= ((settings->CompressionLevel << 9) & 0x00001E00);
|
||||
}
|
||||
|
||||
if (settings->Domain)
|
||||
{
|
||||
|
|
|
@ -49,11 +49,6 @@
|
|||
#define INFO_USING_SAVED_CREDS 0x00100000
|
||||
#define INFO_AUDIOCAPTURE 0x00200000
|
||||
#define INFO_VIDEO_DISABLE 0x00400000
|
||||
#define INFO_CompressionTypeMask 0x00001E00
|
||||
#define INFO_PACKET_COMPR_TYPE_8K 0x00000100
|
||||
#define INFO_PACKET_COMPR_TYPE_64K 0x00000200
|
||||
#define INFO_PACKET_COMPR_TYPE_RDP6 0x00000400
|
||||
#define INFO_PACKET_COMPR_TYPE_RDP61 0x00000600
|
||||
|
||||
/* Logon Information Types */
|
||||
#define INFO_TYPE_LOGON 0x00000000
|
||||
|
|
|
@ -252,6 +252,9 @@ rdpSettings* freerdp_settings_new(DWORD flags)
|
|||
settings->EncryptionMethods = ENCRYPTION_METHOD_NONE;
|
||||
settings->EncryptionLevel = ENCRYPTION_LEVEL_NONE;
|
||||
|
||||
settings->CompressionEnabled = FALSE;
|
||||
settings->CompressionLevel = PACKET_COMPR_TYPE_64K;
|
||||
|
||||
settings->Authentication = TRUE;
|
||||
settings->AuthenticationOnly = FALSE;
|
||||
settings->CredentialsFromStdin = FALSE;
|
||||
|
@ -509,6 +512,7 @@ rdpSettings* freerdp_settings_clone(rdpSettings* settings)
|
|||
_settings->DesktopPosY = settings->DesktopPosY; /* 391 */
|
||||
_settings->NumMonitorIds = settings->NumMonitorIds; /* 394 */
|
||||
_settings->MultitransportFlags = settings->MultitransportFlags; /* 512 */
|
||||
_settings->CompressionLevel = settings->CompressionLevel; /* 721 */
|
||||
_settings->AutoReconnectMaxRetries = settings->AutoReconnectMaxRetries; /* 833 */
|
||||
_settings->PerformanceFlags = settings->PerformanceFlags; /* 960 */
|
||||
_settings->RequestedProtocols = settings->RequestedProtocols; /* 1093 */
|
||||
|
|
Loading…
Reference in New Issue