{ NULL, 0, NULL, NULL, NULL, -1, NULL, NULL }
};
-int freerdp_client_print_version()
+BOOL freerdp_client_print_version()
{
printf("This is FreeRDP version %s (git %s)\n", FREERDP_VERSION_FULL, GIT_REVISION);
- return 1;
+ return TRUE;
}
-int freerdp_client_print_buildconfig()
+BOOL freerdp_client_print_buildconfig()
{
printf("%s", freerdp_get_build_config());
- return 1;
+ return TRUE;
}
-int freerdp_client_print_command_line_help(int argc, char** argv)
+BOOL freerdp_client_print_command_line_help(int argc, char** argv)
{
char* str;
int length;
length = (int)(strlen(arg->Name) + strlen(arg->Format) + 2);
str = (char*) calloc(length + 1UL, sizeof(char));
if (!str)
- return -1;
+ return FALSE;
sprintf_s(str, length + 1, "%s:%s", arg->Name, arg->Format);
printf("%-20s", str);
free(str);
length = (int) strlen(arg->Name) + 32;
str = (char*) calloc(length + 1UL, sizeof(char));
if (!str)
- return -1;
+ return FALSE;
sprintf_s(str, length + 1, "%s (default:%s)", arg->Name,
- arg->Default ? "on" : "off");
+ arg->Default ? "on" : "off");
printf(" %s", arg->Default ? "-" : "+");
printf("More documentation is coming, in the meantime consult source files\n");
printf("\n");
- return 1;
+ return TRUE;
}
-int freerdp_client_command_line_pre_filter(void* context, int index, int argc, LPCSTR* argv)
+static int freerdp_client_command_line_pre_filter(void* context, int index, int argc, LPCSTR* argv)
{
if (index == 1)
{
return 0;
}
-int freerdp_client_add_device_channel(rdpSettings* settings, int count, char** params)
+BOOL freerdp_client_add_device_channel(rdpSettings* settings, int count, char** params)
{
if (strcmp(params[0], "drive") == 0)
{
RDPDR_DRIVE* drive;
if (count < 3)
- return -1;
+ return FALSE;
settings->DeviceRedirection = TRUE;
drive = (RDPDR_DRIVE*) calloc(1, sizeof(RDPDR_DRIVE));
if (!drive)
- return -1;
+ return FALSE;
drive->Type = RDPDR_DTYP_FILESYSTEM;
if (!(drive->Name = _strdup(params[1])))
{
free(drive);
- return -1;
+ return FALSE;
}
}
{
free(drive->Name);
free(drive);
- return -1;
+ return FALSE;
}
}
free(drive->Path);
free(drive->Name);
free(drive);
- return -1;
+ return FALSE;
}
- return 1;
+ return TRUE;
}
else if (strcmp(params[0], "printer") == 0)
{
RDPDR_PRINTER* printer;
if (count < 1)
- return -1;
+ return FALSE;
settings->RedirectPrinters = TRUE;
settings->DeviceRedirection = TRUE;
printer = (RDPDR_PRINTER*) calloc(1, sizeof(RDPDR_PRINTER));
if (!printer)
- return -1;
+ return FALSE;
printer->Type = RDPDR_DTYP_PRINT;
if (!(printer->Name = _strdup(params[1])))
{
free(printer);
- return -1;
+ return FALSE;
}
}
{
free(printer->Name);
free(printer);
- return -1;
+ return FALSE;
}
}
free(printer->DriverName);
free(printer->Name);
free(printer);
- return -1;
+ return FALSE;
}
}
- return 1;
+ return TRUE;
}
else if (strcmp(params[0], "smartcard") == 0)
{
RDPDR_SMARTCARD* smartcard;
if (count < 1)
- return -1;
+ return FALSE;
settings->RedirectSmartCards = TRUE;
settings->DeviceRedirection = TRUE;
smartcard = (RDPDR_SMARTCARD*) calloc(1, sizeof(RDPDR_SMARTCARD));
if (!smartcard)
- return -1;
+ return FALSE;
smartcard->Type = RDPDR_DTYP_SMARTCARD;
if (!(smartcard->Name = _strdup(params[1])))
{
free(smartcard);
- return -1;
+ return FALSE;
}
}
{
free(smartcard->Name);
free(smartcard);
- return -1;
+ return FALSE;
}
}
if (!freerdp_device_collection_add(settings, (RDPDR_DEVICE*) smartcard))
free(smartcard->Path);
free(smartcard->Name);
free(smartcard);
- return -1;
+ return FALSE;
}
}
- return 1;
+ return TRUE;
}
else if (strcmp(params[0], "serial") == 0)
{
RDPDR_SERIAL* serial;
if (count < 1)
- return -1;
+ return FALSE;
settings->RedirectSerialPorts = TRUE;
settings->DeviceRedirection = TRUE;
serial = (RDPDR_SERIAL*) calloc(1, sizeof(RDPDR_SERIAL));
if (!serial)
- return -1;
+ return FALSE;
serial->Type = RDPDR_DTYP_SERIAL;
if (!(serial->Name = _strdup(params[1])))
{
free(serial);
- return -1;
+ return FALSE;
}
}
{
free(serial->Name);
free(serial);
- return -1;
+ return FALSE;
}
}
free(serial->Path);
free(serial->Name);
free(serial);
- return -1;
+ return FALSE;
}
}
free(serial->Path);
free(serial->Name);
free(serial);
- return -1;
+ return FALSE;
}
}
free(serial->Path);
free(serial->Name);
free(serial);
- return -1;
+ return FALSE;
}
- return 1;
+ return TRUE;
}
else if (strcmp(params[0], "parallel") == 0)
{
RDPDR_PARALLEL* parallel;
if (count < 1)
- return -1;
+ return FALSE;
settings->RedirectParallelPorts = TRUE;
settings->DeviceRedirection = TRUE;
parallel = (RDPDR_PARALLEL*) calloc(1, sizeof(RDPDR_PARALLEL));
if (!parallel)
- return -1;
+ return FALSE;
parallel->Type = RDPDR_DTYP_PARALLEL;
if (!(parallel->Name = _strdup(params[1])))
{
free(parallel);
- return -1;
+ return FALSE;
}
}
{
free(parallel->Name);
free(parallel);
- return -1;
+ return FALSE;
}
}
free(parallel->Path);
free(parallel->Name);
free(parallel);
- return -1;
+ return FALSE;
}
- return 1;
+ return TRUE;
}
- return 0;
+ return FALSE;
}
-int freerdp_client_add_static_channel(rdpSettings* settings, int count, char** params)
+BOOL freerdp_client_add_static_channel(rdpSettings* settings, int count, char** params)
{
int index;
ADDIN_ARGV* args;
args = (ADDIN_ARGV*) calloc(1, sizeof(ADDIN_ARGV));
if (!args)
- return -1;
+ return FALSE;
args->argc = count;
args->argv = (char**) calloc(args->argc, sizeof(char*));
if (!freerdp_static_channel_collection_add(settings, args))
goto error_argv_index;
- return 0;
+ return TRUE;
error_argv_index:
for (index = 0; index < args->argc; index++)
free(args->argv);
error_argv:
free(args);
- return -1;
+ return FALSE;
}
-int freerdp_client_add_dynamic_channel(rdpSettings* settings, int count, char** params)
+BOOL freerdp_client_add_dynamic_channel(rdpSettings* settings, int count, char** params)
{
int index;
ADDIN_ARGV* args;
args = (ADDIN_ARGV*) malloc(sizeof(ADDIN_ARGV));
if (!args)
- return -1;
+ return FALSE;
args->argc = count;
args->argv = (char**) calloc(args->argc, sizeof(char*));
if (!freerdp_dynamic_channel_collection_add(settings, args))
goto error_argv_index;
- return 0;
+ return TRUE;
error_argv_index:
for (index = 0; index < args->argc; index++)
free(args->argv);
error_argv:
free(args);
- return -1;
+ return FALSE;
}
static char** freerdp_command_line_parse_comma_separated_values(char* list, int* count)
return p;
}
-int freerdp_client_command_line_post_filter(void* context, COMMAND_LINE_ARGUMENT_A* arg)
+static int freerdp_client_command_line_post_filter(void* context, COMMAND_LINE_ARGUMENT_A* arg)
{
rdpSettings* settings = (rdpSettings*) context;
- int status = 0;
+ BOOL status = FALSE;
CommandLineSwitchStart(arg)
- CommandLineSwitchCase(arg, "a")
+ CommandLineSwitchCase(arg, "a")
{
char** p;
int count;
p = freerdp_command_line_parse_comma_separated_values(arg->Value, &count);
- if (freerdp_client_add_device_channel(settings, count, p) > 0)
+ if ((status = freerdp_client_add_device_channel(settings, count, p)))
{
settings->DeviceRedirection = TRUE;
}
p = freerdp_command_line_parse_comma_separated_values(arg->Value, &count);
- freerdp_client_add_dynamic_channel(settings, count, p);
+ status = freerdp_client_add_dynamic_channel(settings, count, p);
free(p);
}
p = freerdp_command_line_parse_comma_separated_values_offset(arg->Value, &count);
p[0] = "drive";
- freerdp_client_add_device_channel(settings, count, p);
+ status = freerdp_client_add_device_channel(settings, count, p);
free(p);
}
p = freerdp_command_line_parse_comma_separated_values_offset(arg->Value, &count);
p[0] = "serial";
- freerdp_client_add_device_channel(settings, count, p);
+ status = freerdp_client_add_device_channel(settings, count, p);
free(p);
}
p = freerdp_command_line_parse_comma_separated_values_offset(arg->Value, &count);
p[0] = "parallel";
- freerdp_client_add_device_channel(settings, count, p);
+ status = freerdp_client_add_device_channel(settings, count, p);
free(p);
}
p = freerdp_command_line_parse_comma_separated_values_offset(arg->Value, &count);
p[0] = "smartcard";
- freerdp_client_add_device_channel(settings, count, p);
+ status = freerdp_client_add_device_channel(settings, count, p);
free(p);
}
p = freerdp_command_line_parse_comma_separated_values_offset(arg->Value, &count);
p[0] = "printer";
- freerdp_client_add_device_channel(settings, count, p);
+ status = freerdp_client_add_device_channel(settings, count, p);
free(p);
}
count = 1;
p[0] = "printer";
- freerdp_client_add_device_channel(settings, count, p);
+ status = freerdp_client_add_device_channel(settings, count, p);
}
}
CommandLineSwitchCase(arg, "usb")
p = freerdp_command_line_parse_comma_separated_values_offset(arg->Value, &count);
p[0] = "urbdrc";
- freerdp_client_add_dynamic_channel(settings, count, p);
+ status = freerdp_client_add_dynamic_channel(settings, count, p);
free(p);
}
p = freerdp_command_line_parse_comma_separated_values_offset(arg->Value, &count);
p[0] = "audin";
- freerdp_client_add_dynamic_channel(settings, count, p);
+ status = freerdp_client_add_dynamic_channel(settings, count, p);
free(p);
}
count = 1;
p[0] = "audin";
- freerdp_client_add_dynamic_channel(settings, count, p);
+ status = freerdp_client_add_dynamic_channel(settings, count, p);
}
}
CommandLineSwitchCase(arg, "multimedia")
p = freerdp_command_line_parse_comma_separated_values_offset(arg->Value, &count);
p[0] = "tsmf";
- freerdp_client_add_dynamic_channel(settings, count, p);
+ status = freerdp_client_add_dynamic_channel(settings, count, p);
free(p);
}
count = 1;
p[0] = "tsmf";
- freerdp_client_add_dynamic_channel(settings, count, p);
+ status = freerdp_client_add_dynamic_channel(settings, count, p);
}
}
CommandLineSwitchCase(arg, "heartbeat")
CommandLineSwitchEnd(arg)
- return status;
+ return status ? 1 : 0;
}
-int freerdp_parse_username(char* username, char** user, char** domain)
+BOOL freerdp_parse_username(char* username, char** user, char** domain)
{
char* p;
int length = 0;
length = (int) (p - username);
*user = _strdup(&p[1]);
if (!*user)
- return -1;
+ return FALSE;
*domain = (char*) calloc(length + 1UL, sizeof(char));
if (!*domain)
{
free (*user);
*user = NULL;
- return -1;
+ return FALSE;
}
strncpy(*domain, username, length);
*/
*user = _strdup(username);
if (!*user)
- return -1;
+ return FALSE;
*domain = _strdup("\0");
{
free(*user);
*user = NULL;
- return -1;
+ return FALSE;
}
}
else
- return -1;
+ return FALSE;
- return 0;
+ return TRUE;
}
-int freerdp_parse_hostname(char* hostname, char** host, int* port)
+BOOL freerdp_parse_hostname(char* hostname, char** host, int* port)
{
char* p;
int length;
*host = (char*) calloc(length + 1UL, sizeof(char));
if (!(*host))
- return -1;
+ return FALSE;
CopyMemory(*host, hostname, length);
(*host)[length] = '\0';
*host = _strdup(hostname);
if (!(*host))
- return -1;
+ return FALSE;
*port = -1;
}
- return 0;
+ return TRUE;
}
-int freerdp_set_connection_type(rdpSettings* settings, int type)
+BOOL freerdp_set_connection_type(rdpSettings* settings, int type)
{
settings->ConnectionType = type;
settings->NetworkAutoDetect = TRUE;
}
- return 0;
+ return TRUE;
}
int freerdp_map_keyboard_layout_name_to_id(char* name)
return 0;
}
-int freerdp_detect_command_line_pre_filter(void* context, int index, int argc, LPCSTR* argv)
+static int freerdp_detect_command_line_pre_filter(void* context, int index, int argc, LPCSTR* argv)
{
int length;
}
int freerdp_detect_windows_style_command_line_syntax(int argc, char** argv,
- int* count, BOOL ignoreUnknown)
+ int* count, BOOL ignoreUnknown)
{
int status;
DWORD flags;
CommandLineClearArgumentsA(args);
status = CommandLineParseArgumentsA(argc, (const char**) argv, args, flags,
- NULL, freerdp_detect_command_line_pre_filter, NULL);
+ NULL, freerdp_detect_command_line_pre_filter, NULL);
if (status < 0)
return status;
}
int freerdp_detect_posix_style_command_line_syntax(int argc, char** argv,
- int* count, BOOL ignoreUnknown)
+ int* count, BOOL ignoreUnknown)
{
int status;
DWORD flags;
CommandLineClearArgumentsA(args);
status = CommandLineParseArgumentsA(argc, (const char**) argv, args, flags,
- NULL, freerdp_detect_command_line_pre_filter, NULL);
+ NULL, freerdp_detect_command_line_pre_filter, NULL);
if (status < 0)
return status;
}
static BOOL freerdp_client_detect_command_line(int argc, char** argv,
- DWORD* flags, BOOL ignoreUnknown)
+ DWORD* flags, BOOL ignoreUnknown)
{
int old_cli_status;
int old_cli_count;
}
WLog_DBG(TAG, "windows: %d/%d posix: %d/%d compat: %d/%d", windows_cli_status, windows_cli_count,
- posix_cli_status, posix_cli_count, old_cli_status, old_cli_count);
+ posix_cli_status, posix_cli_count, old_cli_status, old_cli_count);
return compatibility;
}
}
int freerdp_client_settings_parse_command_line_arguments(rdpSettings* settings,
- int argc, char** argv, BOOL allowUnknown)
+ int argc, char** argv, BOOL allowUnknown)
{
char* p;
char* user = NULL;
flags |= COMMAND_LINE_IGN_UNKNOWN_KEYWORD;
}
status = CommandLineParseArgumentsA(argc, (const char**) argv, args, flags, settings,
- freerdp_client_command_line_pre_filter, freerdp_client_command_line_post_filter);
+ freerdp_client_command_line_pre_filter, freerdp_client_command_line_post_filter);
if (status < 0)
return status;
CommandLineSwitchStart(arg)
- CommandLineSwitchCase(arg, "v")
+ CommandLineSwitchCase(arg, "v")
{
p = strchr(arg->Value, '[');
/* ipv4 */
length = p2 - p;
if (!(settings->ServerHostname = (char*) calloc(length, sizeof(char))))
- return COMMAND_LINE_ERROR;
+ return COMMAND_LINE_ERROR_MEMORY;
strncpy(settings->ServerHostname, p+1, length-1);
if (*(p2 + 1) == ':')
{
else if (_stricmp(arg->Value, "lan") == 0)
type = CONNECTION_TYPE_LAN;
else if ((_stricmp(arg->Value, "autodetect") == 0) ||
- (_stricmp(arg->Value, "auto") == 0) ||
- (_stricmp(arg->Value, "detect") == 0))
+ (_stricmp(arg->Value, "auto") == 0) ||
+ (_stricmp(arg->Value, "detect") == 0))
{
type = CONNECTION_TYPE_AUTODETECT;
}
}
- freerdp_set_connection_type(settings, type);
+ if (!freerdp_set_connection_type(settings, type))
+ return COMMAND_LINE_ERROR;
}
CommandLineSwitchCase(arg, "fonts")
{
BYTE *base64;
int length;
crypto_base64_decode((const char *) (arg->Value), (int) strlen(arg->Value),
- &base64, &length);
+ &base64, &length);
if ((base64 != NULL) && (length == sizeof(ARC_SC_PRIVATE_PACKET)))
{
memcpy(settings->ServerAutoReconnectCookie, base64, length);
if (!settings->Domain && user)
{
- int ret;
+ BOOL ret;
ret = freerdp_parse_username(user, &settings->Username, &settings->Domain);
free(user);
- if (ret != 0 )
+ if (!ret)
return COMMAND_LINE_ERROR;
}
else
if (!settings->GatewayDomain && gwUser)
{
- int ret;
+ BOOL ret;
ret = freerdp_parse_username(gwUser, &settings->GatewayUsername,
- &settings->GatewayDomain);
+ &settings->GatewayDomain);
free(gwUser);
- if (ret != 0)
+ if (!ret)
return COMMAND_LINE_ERROR;
}
else
return status;
}
-int freerdp_client_load_static_channel_addin(rdpChannels* channels, rdpSettings* settings, char* name, void* data)
+static BOOL freerdp_client_load_static_channel_addin(rdpChannels* channels, rdpSettings* settings, char* name, void* data)
{
void* entry;
if (freerdp_channels_client_load(channels, settings, entry, data) == 0)
{
WLog_INFO(TAG, "loading channel %s", name);
- return 0;
+ return TRUE;
}
}
- return -1;
+ return FALSE;
}
-int freerdp_client_load_addins(rdpChannels* channels, rdpSettings* settings)
+BOOL freerdp_client_load_addins(rdpChannels* channels, rdpSettings* settings)
{
UINT32 index;
ADDIN_ARGV* args;
if ((freerdp_static_channel_collection_find(settings, "rdpsnd")) ||
- (freerdp_dynamic_channel_collection_find(settings, "tsmf")))
+ (freerdp_dynamic_channel_collection_find(settings, "tsmf")))
{
settings->DeviceRedirection = TRUE; /* rdpsnd requires rdpdr to be registered */
settings->AudioPlayback = TRUE; /* Both rdpsnd and tsmf require this flag to be set */
}
if (settings->NetworkAutoDetect ||
- settings->SupportHeartbeatPdu ||
- settings->SupportMultitransport)
+ settings->SupportHeartbeatPdu ||
+ settings->SupportMultitransport)
{
settings->DeviceRedirection = TRUE; /* these RDP8 features require rdpdr to be registered */
}
if (settings->RedirectDrives || settings->RedirectHomeDrive || settings->RedirectSerialPorts
- || settings->RedirectSmartCards || settings->RedirectPrinters)
+ || settings->RedirectSmartCards || settings->RedirectPrinters)
{
settings->DeviceRedirection = TRUE; /* All of these features require rdpdr */
}
params[1] = "media";
params[2] = "*";
- freerdp_client_add_device_channel(settings, 3, (char**) params);
+ if (!freerdp_client_add_device_channel(settings, 3, (char**) params))
+ return FALSE;
}
}
params[1] = "home";
params[2] = "%";
- freerdp_client_add_device_channel(settings, 3, (char**) params);
+ if (!freerdp_client_add_device_channel(settings, 3, (char**) params))
+ return FALSE;
}
}
if (settings->DeviceRedirection)
{
- freerdp_client_load_static_channel_addin(channels, settings, "rdpdr", settings);
+ if (!freerdp_client_load_static_channel_addin(channels, settings, "rdpdr", settings))
+ return FALSE;
if (!freerdp_static_channel_collection_find(settings, "rdpsnd"))
{
params[0] = "rdpsnd";
params[1] = "sys:fake";
- freerdp_client_add_static_channel(settings, 2, (char**) params);
+ if (!freerdp_client_add_static_channel(settings, 2, (char**) params))
+ return FALSE;
}
}
smartcard = (RDPDR_SMARTCARD*) calloc(1, sizeof(RDPDR_SMARTCARD));
if (!smartcard)
- return -1;
+ return FALSE;
smartcard->Type = RDPDR_DTYP_SMARTCARD;
- freerdp_device_collection_add(settings, (RDPDR_DEVICE*) smartcard);
+ if (!freerdp_device_collection_add(settings, (RDPDR_DEVICE*) smartcard))
+ return FALSE;
}
if (settings->RedirectPrinters)
printer = (RDPDR_PRINTER*) calloc(1, sizeof(RDPDR_PRINTER));
if (!printer)
- return -1;
+ return FALSE;
printer->Type = RDPDR_DTYP_PRINT;
- freerdp_device_collection_add(settings, (RDPDR_DEVICE*) printer);
+ if (!freerdp_device_collection_add(settings, (RDPDR_DEVICE*) printer))
+ return FALSE;
}
if (settings->RedirectClipboard)
params[0] = "cliprdr";
- freerdp_client_add_static_channel(settings, 1, (char**) params);
+ if (!freerdp_client_add_static_channel(settings, 1, (char**) params))
+ return FALSE;
}
}
}
if (settings->EncomspVirtualChannel)
- freerdp_client_load_static_channel_addin(channels, settings, "encomsp", settings);
+ {
+ if (!freerdp_client_load_static_channel_addin(channels, settings, "encomsp", settings))
+ return FALSE;
+ }
if (settings->RemdeskVirtualChannel)
- freerdp_client_load_static_channel_addin(channels, settings, "remdesk", settings);
+ {
+ if (!freerdp_client_load_static_channel_addin(channels, settings, "remdesk", settings))
+ return FALSE;
+ }
for (index = 0; index < settings->StaticChannelCount; index++)
{
args = settings->StaticChannelArray[index];
- freerdp_client_load_static_channel_addin(channels, settings, args->argv[0], args);
+ if (!freerdp_client_load_static_channel_addin(channels, settings, args->argv[0], args))
+ return FALSE;
}
if (settings->RemoteApplicationMode)
{
- freerdp_client_load_static_channel_addin(channels, settings, "rail", settings);
+ if (!freerdp_client_load_static_channel_addin(channels, settings, "rail", settings))
+ return FALSE;
}
if (settings->MultiTouchInput)
count = 1;
p[0] = "rdpei";
- freerdp_client_add_dynamic_channel(settings, count, p);
+ if (!freerdp_client_add_dynamic_channel(settings, count, p))
+ return FALSE;
}
if (settings->SupportGraphicsPipeline)
count = 1;
p[0] = "rdpgfx";
- freerdp_client_add_dynamic_channel(settings, count, p);
+ if (!freerdp_client_add_dynamic_channel(settings, count, p))
+ return FALSE;
}
if (settings->SupportEchoChannel)
count = 1;
p[0] = "echo";
- freerdp_client_add_dynamic_channel(settings, count, p);
+ if (!freerdp_client_add_dynamic_channel(settings, count, p))
+ return FALSE;
}
if (settings->SupportDisplayControl)
count = 1;
p[0] = "disp";
- freerdp_client_add_dynamic_channel(settings, count, p);
+ if (!freerdp_client_add_dynamic_channel(settings, count, p))
+ return FALSE;
}
if (settings->DynamicChannelCount)
if (settings->SupportDynamicChannels)
{
- freerdp_client_load_static_channel_addin(channels, settings, "drdynvc", settings);
+ if (!freerdp_client_load_static_channel_addin(channels, settings, "drdynvc", settings))
+ return FALSE;
}
- return 1;
+ return TRUE;
}