Blame libfreerdp/common/settings.c

Packit Service fa4841
/**
Packit Service fa4841
 * FreeRDP: A Remote Desktop Protocol Implementation
Packit Service fa4841
 * Settings Management
Packit Service fa4841
 *
Packit Service fa4841
 * Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
Packit Service fa4841
 * Copyright 2016 Armin Novak <armin.novak@gmail.com>
Packit Service fa4841
 *
Packit Service fa4841
 * Licensed under the Apache License, Version 2.0 (the "License");
Packit Service fa4841
 * you may not use this file except in compliance with the License.
Packit Service fa4841
 * You may obtain a copy of the License at
Packit Service fa4841
 *
Packit Service fa4841
 *     http://www.apache.org/licenses/LICENSE-2.0
Packit Service fa4841
 *
Packit Service fa4841
 * Unless required by applicable law or agreed to in writing, software
Packit Service fa4841
 * distributed under the License is distributed on an "AS IS" BASIS,
Packit Service fa4841
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Packit Service fa4841
 * See the License for the specific language governing permissions and
Packit Service fa4841
 * limitations under the License.
Packit Service fa4841
 */
Packit Service fa4841
Packit Service fa4841
#ifdef HAVE_CONFIG_H
Packit Service fa4841
#include "config.h"
Packit Service fa4841
#endif
Packit Service fa4841
Packit Service fa4841
#include <stdio.h>
Packit Service fa4841
#include <stdlib.h>
Packit Service fa4841
#include <string.h>
Packit Service b1ea74
#include <errno.h>
Packit Service fa4841
Packit Service fa4841
#include <winpr/crt.h>
Packit Service fa4841
Packit Service fa4841
#include <freerdp/settings.h>
Packit Service fa4841
#include <freerdp/freerdp.h>
Packit Service fa4841
#include <freerdp/log.h>
Packit Service fa4841
Packit Service fa4841
#define TAG FREERDP_TAG("common")
Packit Service fa4841
Packit Service fa4841
int freerdp_addin_set_argument(ADDIN_ARGV* args, char* argument)
Packit Service fa4841
{
Packit Service fa4841
	int i;
Packit Service fa4841
	char** new_argv;
Packit Service fa4841
Packit Service fa4841
	for (i = 0; i < args->argc; i++)
Packit Service fa4841
	{
Packit Service fa4841
		if (strcmp(args->argv[i], argument) == 0)
Packit Service fa4841
		{
Packit Service fa4841
			return 1;
Packit Service fa4841
		}
Packit Service fa4841
	}
Packit Service fa4841
Packit Service b1ea74
	new_argv = (char**)realloc(args->argv, sizeof(char*) * (args->argc + 1));
Packit Service fa4841
Packit Service fa4841
	if (!new_argv)
Packit Service fa4841
		return -1;
Packit Service fa4841
Packit Service fa4841
	args->argv = new_argv;
Packit Service fa4841
	args->argc++;
Packit Service fa4841
Packit Service fa4841
	if (!(args->argv[args->argc - 1] = _strdup(argument)))
Packit Service fa4841
		return -1;
Packit Service fa4841
Packit Service fa4841
	return 0;
Packit Service fa4841
}
Packit Service fa4841
Packit Service fa4841
int freerdp_addin_replace_argument(ADDIN_ARGV* args, char* previous, char* argument)
Packit Service fa4841
{
Packit Service fa4841
	int i;
Packit Service fa4841
	char** new_argv;
Packit Service fa4841
Packit Service fa4841
	for (i = 0; i < args->argc; i++)
Packit Service fa4841
	{
Packit Service fa4841
		if (strcmp(args->argv[i], previous) == 0)
Packit Service fa4841
		{
Packit Service fa4841
			free(args->argv[i]);
Packit Service fa4841
Packit Service fa4841
			if (!(args->argv[i] = _strdup(argument)))
Packit Service fa4841
				return -1;
Packit Service fa4841
Packit Service fa4841
			return 1;
Packit Service fa4841
		}
Packit Service fa4841
	}
Packit Service fa4841
Packit Service b1ea74
	new_argv = (char**)realloc(args->argv, sizeof(char*) * (args->argc + 1));
Packit Service fa4841
Packit Service fa4841
	if (!new_argv)
Packit Service fa4841
		return -1;
Packit Service fa4841
Packit Service fa4841
	args->argv = new_argv;
Packit Service fa4841
	args->argc++;
Packit Service fa4841
Packit Service fa4841
	if (!(args->argv[args->argc - 1] = _strdup(argument)))
Packit Service fa4841
		return -1;
Packit Service fa4841
Packit Service fa4841
	return 0;
Packit Service fa4841
}
Packit Service fa4841
Packit Service fa4841
int freerdp_addin_set_argument_value(ADDIN_ARGV* args, char* option, char* value)
Packit Service fa4841
{
Packit Service fa4841
	int i;
Packit Service fa4841
	char* p;
Packit Service fa4841
	char* str;
Packit Service b1ea74
	size_t length;
Packit Service fa4841
	char** new_argv;
Packit Service fa4841
	length = strlen(option) + strlen(value) + 1;
Packit Service b1ea74
	str = (char*)malloc(length + 1);
Packit Service fa4841
Packit Service fa4841
	if (!str)
Packit Service fa4841
		return -1;
Packit Service fa4841
Packit Service fa4841
	sprintf_s(str, length + 1, "%s:%s", option, value);
Packit Service fa4841
Packit Service fa4841
	for (i = 0; i < args->argc; i++)
Packit Service fa4841
	{
Packit Service fa4841
		p = strchr(args->argv[i], ':');
Packit Service fa4841
Packit Service fa4841
		if (p)
Packit Service fa4841
		{
Packit Service fa4841
			if (strncmp(args->argv[i], option, p - args->argv[i]) == 0)
Packit Service fa4841
			{
Packit Service fa4841
				free(args->argv[i]);
Packit Service fa4841
				args->argv[i] = str;
Packit Service fa4841
				return 1;
Packit Service fa4841
			}
Packit Service fa4841
		}
Packit Service fa4841
	}
Packit Service fa4841
Packit Service b1ea74
	new_argv = (char**)realloc(args->argv, sizeof(char*) * (args->argc + 1));
Packit Service fa4841
Packit Service fa4841
	if (!new_argv)
Packit Service fa4841
	{
Packit Service fa4841
		free(str);
Packit Service fa4841
		return -1;
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	args->argv = new_argv;
Packit Service fa4841
	args->argc++;
Packit Service fa4841
	args->argv[args->argc - 1] = str;
Packit Service fa4841
	return 0;
Packit Service fa4841
}
Packit Service fa4841
Packit Service fa4841
int freerdp_addin_replace_argument_value(ADDIN_ARGV* args, char* previous, char* option,
Packit Service b1ea74
                                         char* value)
Packit Service fa4841
{
Packit Service fa4841
	int i;
Packit Service fa4841
	char* str;
Packit Service b1ea74
	size_t length;
Packit Service fa4841
	char** new_argv;
Packit Service fa4841
	length = strlen(option) + strlen(value) + 1;
Packit Service b1ea74
	str = (char*)malloc(length + 1);
Packit Service fa4841
Packit Service fa4841
	if (!str)
Packit Service fa4841
		return -1;
Packit Service fa4841
Packit Service fa4841
	sprintf_s(str, length + 1, "%s:%s", option, value);
Packit Service fa4841
Packit Service fa4841
	for (i = 0; i < args->argc; i++)
Packit Service fa4841
	{
Packit Service fa4841
		if (strcmp(args->argv[i], previous) == 0)
Packit Service fa4841
		{
Packit Service fa4841
			free(args->argv[i]);
Packit Service fa4841
			args->argv[i] = str;
Packit Service fa4841
			return 1;
Packit Service fa4841
		}
Packit Service fa4841
	}
Packit Service fa4841
Packit Service b1ea74
	new_argv = (char**)realloc(args->argv, sizeof(char*) * (args->argc + 1));
Packit Service fa4841
Packit Service fa4841
	if (!new_argv)
Packit Service fa4841
	{
Packit Service fa4841
		free(str);
Packit Service fa4841
		return -1;
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	args->argv = new_argv;
Packit Service fa4841
	args->argc++;
Packit Service fa4841
	args->argv[args->argc - 1] = str;
Packit Service fa4841
	return 0;
Packit Service fa4841
}
Packit Service fa4841
Packit Service fa4841
BOOL freerdp_device_collection_add(rdpSettings* settings, RDPDR_DEVICE* device)
Packit Service fa4841
{
Packit Service fa4841
	if (!settings->DeviceArray)
Packit Service fa4841
		return FALSE;
Packit Service fa4841
Packit Service fa4841
	if (settings->DeviceArraySize < (settings->DeviceCount + 1))
Packit Service fa4841
	{
Packit Service fa4841
		UINT32 new_size;
Packit Service fa4841
		RDPDR_DEVICE** new_array;
Packit Service fa4841
		new_size = settings->DeviceArraySize * 2;
Packit Service b1ea74
		new_array =
Packit Service b1ea74
		    (RDPDR_DEVICE**)realloc(settings->DeviceArray, new_size * sizeof(RDPDR_DEVICE*));
Packit Service fa4841
Packit Service fa4841
		if (!new_array)
Packit Service fa4841
			return FALSE;
Packit Service fa4841
Packit Service fa4841
		settings->DeviceArray = new_array;
Packit Service fa4841
		settings->DeviceArraySize = new_size;
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	settings->DeviceArray[settings->DeviceCount++] = device;
Packit Service fa4841
	return TRUE;
Packit Service fa4841
}
Packit Service fa4841
Packit Service fa4841
RDPDR_DEVICE* freerdp_device_collection_find(rdpSettings* settings, const char* name)
Packit Service fa4841
{
Packit Service fa4841
	UINT32 index;
Packit Service fa4841
	RDPDR_DEVICE* device;
Packit Service fa4841
Packit Service fa4841
	for (index = 0; index < settings->DeviceCount; index++)
Packit Service fa4841
	{
Packit Service b1ea74
		device = (RDPDR_DEVICE*)settings->DeviceArray[index];
Packit Service fa4841
Packit Service fa4841
		if (!device->Name)
Packit Service fa4841
			continue;
Packit Service fa4841
Packit Service fa4841
		if (strcmp(device->Name, name) == 0)
Packit Service fa4841
			return device;
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	return NULL;
Packit Service fa4841
}
Packit Service fa4841
Packit Service fa4841
RDPDR_DEVICE* freerdp_device_collection_find_type(rdpSettings* settings, UINT32 type)
Packit Service fa4841
{
Packit Service fa4841
	UINT32 index;
Packit Service fa4841
	RDPDR_DEVICE* device;
Packit Service fa4841
Packit Service fa4841
	for (index = 0; index < settings->DeviceCount; index++)
Packit Service fa4841
	{
Packit Service b1ea74
		device = (RDPDR_DEVICE*)settings->DeviceArray[index];
Packit Service fa4841
Packit Service fa4841
		if (device->Type == type)
Packit Service fa4841
			return device;
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	return NULL;
Packit Service fa4841
}
Packit Service fa4841
Packit Service fa4841
RDPDR_DEVICE* freerdp_device_clone(RDPDR_DEVICE* device)
Packit Service fa4841
{
Packit Service fa4841
	if (device->Type == RDPDR_DTYP_FILESYSTEM)
Packit Service fa4841
	{
Packit Service b1ea74
		RDPDR_DRIVE* drive = (RDPDR_DRIVE*)device;
Packit Service b1ea74
		RDPDR_DRIVE* _drive = (RDPDR_DRIVE*)calloc(1, sizeof(RDPDR_DRIVE));
Packit Service fa4841
Packit Service fa4841
		if (!_drive)
Packit Service fa4841
			return NULL;
Packit Service fa4841
Packit Service fa4841
		_drive->Id = drive->Id;
Packit Service fa4841
		_drive->Type = drive->Type;
Packit Service fa4841
		_drive->Name = _strdup(drive->Name);
Packit Service fa4841
Packit Service fa4841
		if (!_drive->Name)
Packit Service fa4841
			goto out_fs_name_error;
Packit Service fa4841
Packit Service fa4841
		_drive->Path = _strdup(drive->Path);
Packit Service fa4841
Packit Service fa4841
		if (!_drive->Path)
Packit Service fa4841
			goto out_fs_path_error;
Packit Service fa4841
Packit Service b1ea74
		return (RDPDR_DEVICE*)_drive;
Packit Service fa4841
	out_fs_path_error:
Packit Service fa4841
		free(_drive->Name);
Packit Service fa4841
	out_fs_name_error:
Packit Service fa4841
		free(_drive);
Packit Service fa4841
		return NULL;
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	if (device->Type == RDPDR_DTYP_PRINT)
Packit Service fa4841
	{
Packit Service b1ea74
		RDPDR_PRINTER* printer = (RDPDR_PRINTER*)device;
Packit Service b1ea74
		RDPDR_PRINTER* _printer = (RDPDR_PRINTER*)calloc(1, sizeof(RDPDR_PRINTER));
Packit Service fa4841
Packit Service fa4841
		if (!_printer)
Packit Service fa4841
			return NULL;
Packit Service fa4841
Packit Service fa4841
		_printer->Id = printer->Id;
Packit Service fa4841
		_printer->Type = printer->Type;
Packit Service fa4841
Packit Service fa4841
		if (printer->Name)
Packit Service fa4841
		{
Packit Service fa4841
			_printer->Name = _strdup(printer->Name);
Packit Service fa4841
Packit Service fa4841
			if (!_printer->Name)
Packit Service fa4841
				goto out_print_name_error;
Packit Service fa4841
		}
Packit Service fa4841
Packit Service fa4841
		if (printer->DriverName)
Packit Service fa4841
		{
Packit Service fa4841
			_printer->DriverName = _strdup(printer->DriverName);
Packit Service fa4841
Packit Service fa4841
			if (!_printer->DriverName)
Packit Service fa4841
				goto out_print_path_error;
Packit Service fa4841
		}
Packit Service fa4841
Packit Service b1ea74
		return (RDPDR_DEVICE*)_printer;
Packit Service fa4841
	out_print_path_error:
Packit Service fa4841
		free(_printer->Name);
Packit Service fa4841
	out_print_name_error:
Packit Service fa4841
		free(_printer);
Packit Service fa4841
		return NULL;
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	if (device->Type == RDPDR_DTYP_SMARTCARD)
Packit Service fa4841
	{
Packit Service b1ea74
		RDPDR_SMARTCARD* smartcard = (RDPDR_SMARTCARD*)device;
Packit Service b1ea74
		RDPDR_SMARTCARD* _smartcard = (RDPDR_SMARTCARD*)calloc(1, sizeof(RDPDR_SMARTCARD));
Packit Service fa4841
Packit Service fa4841
		if (!_smartcard)
Packit Service fa4841
			return NULL;
Packit Service fa4841
Packit Service fa4841
		_smartcard->Id = smartcard->Id;
Packit Service fa4841
		_smartcard->Type = smartcard->Type;
Packit Service fa4841
Packit Service fa4841
		if (smartcard->Name)
Packit Service fa4841
		{
Packit Service fa4841
			_smartcard->Name = _strdup(smartcard->Name);
Packit Service fa4841
Packit Service fa4841
			if (!_smartcard->Name)
Packit Service fa4841
				goto out_smartc_name_error;
Packit Service fa4841
		}
Packit Service fa4841
Packit Service b1ea74
		return (RDPDR_DEVICE*)_smartcard;
Packit Service fa4841
	out_smartc_name_error:
Packit Service fa4841
		free(_smartcard);
Packit Service fa4841
		return NULL;
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	if (device->Type == RDPDR_DTYP_SERIAL)
Packit Service fa4841
	{
Packit Service b1ea74
		RDPDR_SERIAL* serial = (RDPDR_SERIAL*)device;
Packit Service b1ea74
		RDPDR_SERIAL* _serial = (RDPDR_SERIAL*)calloc(1, sizeof(RDPDR_SERIAL));
Packit Service fa4841
Packit Service fa4841
		if (!_serial)
Packit Service fa4841
			return NULL;
Packit Service fa4841
Packit Service fa4841
		_serial->Id = serial->Id;
Packit Service fa4841
		_serial->Type = serial->Type;
Packit Service fa4841
Packit Service fa4841
		if (serial->Name)
Packit Service fa4841
		{
Packit Service fa4841
			_serial->Name = _strdup(serial->Name);
Packit Service fa4841
Packit Service fa4841
			if (!_serial->Name)
Packit Service fa4841
				goto out_serial_name_error;
Packit Service fa4841
		}
Packit Service fa4841
Packit Service fa4841
		if (serial->Path)
Packit Service fa4841
		{
Packit Service fa4841
			_serial->Path = _strdup(serial->Path);
Packit Service fa4841
Packit Service fa4841
			if (!_serial->Path)
Packit Service fa4841
				goto out_serial_path_error;
Packit Service fa4841
		}
Packit Service fa4841
Packit Service fa4841
		if (serial->Driver)
Packit Service fa4841
		{
Packit Service fa4841
			_serial->Driver = _strdup(serial->Driver);
Packit Service fa4841
Packit Service fa4841
			if (!_serial->Driver)
Packit Service fa4841
				goto out_serial_driver_error;
Packit Service fa4841
		}
Packit Service fa4841
Packit Service b1ea74
		return (RDPDR_DEVICE*)_serial;
Packit Service fa4841
	out_serial_driver_error:
Packit Service fa4841
		free(_serial->Path);
Packit Service fa4841
	out_serial_path_error:
Packit Service fa4841
		free(_serial->Name);
Packit Service fa4841
	out_serial_name_error:
Packit Service fa4841
		free(_serial);
Packit Service fa4841
		return NULL;
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	if (device->Type == RDPDR_DTYP_PARALLEL)
Packit Service fa4841
	{
Packit Service b1ea74
		RDPDR_PARALLEL* parallel = (RDPDR_PARALLEL*)device;
Packit Service b1ea74
		RDPDR_PARALLEL* _parallel = (RDPDR_PARALLEL*)calloc(1, sizeof(RDPDR_PARALLEL));
Packit Service fa4841
Packit Service fa4841
		if (!_parallel)
Packit Service fa4841
			return NULL;
Packit Service fa4841
Packit Service fa4841
		_parallel->Id = parallel->Id;
Packit Service fa4841
		_parallel->Type = parallel->Type;
Packit Service fa4841
Packit Service fa4841
		if (parallel->Name)
Packit Service fa4841
		{
Packit Service fa4841
			_parallel->Name = _strdup(parallel->Name);
Packit Service fa4841
Packit Service fa4841
			if (!_parallel->Name)
Packit Service fa4841
				goto out_parallel_name_error;
Packit Service fa4841
		}
Packit Service fa4841
Packit Service fa4841
		if (parallel->Path)
Packit Service fa4841
		{
Packit Service fa4841
			_parallel->Path = _strdup(parallel->Path);
Packit Service fa4841
Packit Service fa4841
			if (!_parallel->Path)
Packit Service fa4841
				goto out_parallel_path_error;
Packit Service fa4841
		}
Packit Service fa4841
Packit Service b1ea74
		return (RDPDR_DEVICE*)_parallel;
Packit Service fa4841
	out_parallel_path_error:
Packit Service fa4841
		free(_parallel->Name);
Packit Service fa4841
	out_parallel_name_error:
Packit Service fa4841
		free(_parallel);
Packit Service fa4841
		return NULL;
Packit Service fa4841
	}
Packit Service fa4841
Packit Service b1ea74
	WLog_ERR(TAG, "unknown device type %" PRIu32 "", device->Type);
Packit Service fa4841
	return NULL;
Packit Service fa4841
}
Packit Service fa4841
Packit Service fa4841
void freerdp_device_collection_free(rdpSettings* settings)
Packit Service fa4841
{
Packit Service fa4841
	UINT32 index;
Packit Service fa4841
	RDPDR_DEVICE* device;
Packit Service fa4841
Packit Service fa4841
	for (index = 0; index < settings->DeviceCount; index++)
Packit Service fa4841
	{
Packit Service b1ea74
		device = (RDPDR_DEVICE*)settings->DeviceArray[index];
Packit Service fa4841
Packit Service fa4841
		if (!device)
Packit Service fa4841
			continue;
Packit Service fa4841
Packit Service fa4841
		free(device->Name);
Packit Service fa4841
Packit Service fa4841
		if (settings->DeviceArray[index]->Type == RDPDR_DTYP_FILESYSTEM)
Packit Service fa4841
		{
Packit Service b1ea74
			free(((RDPDR_DRIVE*)device)->Path);
Packit Service fa4841
		}
Packit Service fa4841
		else if (settings->DeviceArray[index]->Type == RDPDR_DTYP_PRINT)
Packit Service fa4841
		{
Packit Service fa4841
		}
Packit Service fa4841
		else if (settings->DeviceArray[index]->Type == RDPDR_DTYP_SMARTCARD)
Packit Service fa4841
		{
Packit Service fa4841
		}
Packit Service fa4841
		else if (settings->DeviceArray[index]->Type == RDPDR_DTYP_SERIAL)
Packit Service fa4841
		{
Packit Service b1ea74
			free(((RDPDR_SERIAL*)device)->Path);
Packit Service b1ea74
			free(((RDPDR_SERIAL*)device)->Driver);
Packit Service fa4841
		}
Packit Service fa4841
		else if (settings->DeviceArray[index]->Type == RDPDR_DTYP_PARALLEL)
Packit Service fa4841
		{
Packit Service b1ea74
			free(((RDPDR_PARALLEL*)device)->Path);
Packit Service fa4841
		}
Packit Service fa4841
Packit Service fa4841
		free(device);
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	free(settings->DeviceArray);
Packit Service fa4841
	settings->DeviceArraySize = 0;
Packit Service fa4841
	settings->DeviceArray = NULL;
Packit Service fa4841
	settings->DeviceCount = 0;
Packit Service fa4841
}
Packit Service fa4841
Packit Service fa4841
BOOL freerdp_static_channel_collection_add(rdpSettings* settings, ADDIN_ARGV* channel)
Packit Service fa4841
{
Packit Service fa4841
	if (!settings->StaticChannelArray)
Packit Service fa4841
		return FALSE;
Packit Service fa4841
Packit Service fa4841
	if (settings->StaticChannelArraySize < (settings->StaticChannelCount + 1))
Packit Service fa4841
	{
Packit Service fa4841
		UINT32 new_size;
Packit Service fa4841
		ADDIN_ARGV** new_array;
Packit Service fa4841
		new_size = settings->StaticChannelArraySize * 2;
Packit Service b1ea74
		new_array =
Packit Service b1ea74
		    (ADDIN_ARGV**)realloc(settings->StaticChannelArray, new_size * sizeof(ADDIN_ARGV*));
Packit Service fa4841
Packit Service fa4841
		if (!new_array)
Packit Service fa4841
			return FALSE;
Packit Service fa4841
Packit Service fa4841
		settings->StaticChannelArray = new_array;
Packit Service fa4841
		settings->StaticChannelArraySize = new_size;
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	settings->StaticChannelArray[settings->StaticChannelCount++] = channel;
Packit Service fa4841
	return TRUE;
Packit Service fa4841
}
Packit Service fa4841
Packit Service fa4841
ADDIN_ARGV* freerdp_static_channel_collection_find(rdpSettings* settings, const char* name)
Packit Service fa4841
{
Packit Service fa4841
	UINT32 index;
Packit Service fa4841
	ADDIN_ARGV* channel;
Packit Service fa4841
Packit Service fa4841
	for (index = 0; index < settings->StaticChannelCount; index++)
Packit Service fa4841
	{
Packit Service fa4841
		channel = settings->StaticChannelArray[index];
Packit Service fa4841
Packit Service fa4841
		if (strcmp(channel->argv[0], name) == 0)
Packit Service fa4841
			return channel;
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	return NULL;
Packit Service fa4841
}
Packit Service fa4841
Packit Service fa4841
ADDIN_ARGV* freerdp_static_channel_clone(ADDIN_ARGV* channel)
Packit Service fa4841
{
Packit Service fa4841
	int index;
Packit Service fa4841
	ADDIN_ARGV* _channel = NULL;
Packit Service b1ea74
	_channel = (ADDIN_ARGV*)malloc(sizeof(ADDIN_ARGV));
Packit Service fa4841
Packit Service fa4841
	if (!_channel)
Packit Service fa4841
		return NULL;
Packit Service fa4841
Packit Service fa4841
	_channel->argc = channel->argc;
Packit Service b1ea74
	_channel->argv = (char**)calloc(channel->argc, sizeof(char*));
Packit Service fa4841
Packit Service fa4841
	if (!_channel->argv)
Packit Service fa4841
		goto out_free;
Packit Service fa4841
Packit Service fa4841
	for (index = 0; index < _channel->argc; index++)
Packit Service fa4841
	{
Packit Service fa4841
		_channel->argv[index] = _strdup(channel->argv[index]);
Packit Service fa4841
Packit Service fa4841
		if (!_channel->argv[index])
Packit Service fa4841
			goto out_release_args;
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	return _channel;
Packit Service fa4841
out_release_args:
Packit Service fa4841
Packit Service fa4841
	for (index = 0; _channel->argv[index]; index++)
Packit Service fa4841
		free(_channel->argv[index]);
Packit Service fa4841
Packit Service fa4841
out_free:
Packit Service fa4841
	free(_channel);
Packit Service fa4841
	return NULL;
Packit Service fa4841
}
Packit Service fa4841
Packit Service fa4841
void freerdp_static_channel_collection_free(rdpSettings* settings)
Packit Service fa4841
{
Packit Service fa4841
	int j;
Packit Service fa4841
	UINT32 i;
Packit Service fa4841
Packit Service fa4841
	for (i = 0; i < settings->StaticChannelCount; i++)
Packit Service fa4841
	{
Packit Service fa4841
		if (!settings->StaticChannelArray[i])
Packit Service fa4841
			continue;
Packit Service fa4841
Packit Service fa4841
		for (j = 0; j < settings->StaticChannelArray[i]->argc; j++)
Packit Service fa4841
			free(settings->StaticChannelArray[i]->argv[j]);
Packit Service fa4841
Packit Service fa4841
		free(settings->StaticChannelArray[i]->argv);
Packit Service fa4841
		free(settings->StaticChannelArray[i]);
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	free(settings->StaticChannelArray);
Packit Service fa4841
	settings->StaticChannelArraySize = 0;
Packit Service fa4841
	settings->StaticChannelArray = NULL;
Packit Service fa4841
	settings->StaticChannelCount = 0;
Packit Service fa4841
}
Packit Service fa4841
Packit Service fa4841
BOOL freerdp_dynamic_channel_collection_add(rdpSettings* settings, ADDIN_ARGV* channel)
Packit Service fa4841
{
Packit Service fa4841
	if (!settings->DynamicChannelArray)
Packit Service fa4841
		return FALSE;
Packit Service fa4841
Packit Service fa4841
	if (settings->DynamicChannelArraySize < (settings->DynamicChannelCount + 1))
Packit Service fa4841
	{
Packit Service fa4841
		ADDIN_ARGV** new_array;
Packit Service fa4841
		new_array = realloc(settings->DynamicChannelArray,
Packit Service fa4841
		                    settings->DynamicChannelArraySize * sizeof(ADDIN_ARGV*) * 2);
Packit Service fa4841
Packit Service fa4841
		if (!new_array)
Packit Service fa4841
			return FALSE;
Packit Service fa4841
Packit Service fa4841
		settings->DynamicChannelArraySize *= 2;
Packit Service fa4841
		settings->DynamicChannelArray = new_array;
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	settings->DynamicChannelArray[settings->DynamicChannelCount++] = channel;
Packit Service fa4841
	return TRUE;
Packit Service fa4841
}
Packit Service fa4841
Packit Service fa4841
ADDIN_ARGV* freerdp_dynamic_channel_collection_find(rdpSettings* settings, const char* name)
Packit Service fa4841
{
Packit Service fa4841
	UINT32 index;
Packit Service fa4841
	ADDIN_ARGV* channel;
Packit Service fa4841
Packit Service fa4841
	for (index = 0; index < settings->DynamicChannelCount; index++)
Packit Service fa4841
	{
Packit Service fa4841
		channel = settings->DynamicChannelArray[index];
Packit Service fa4841
Packit Service fa4841
		if (strcmp(channel->argv[0], name) == 0)
Packit Service fa4841
			return channel;
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	return NULL;
Packit Service fa4841
}
Packit Service fa4841
Packit Service fa4841
ADDIN_ARGV* freerdp_dynamic_channel_clone(ADDIN_ARGV* channel)
Packit Service fa4841
{
Packit Service fa4841
	int index;
Packit Service fa4841
	ADDIN_ARGV* _channel = NULL;
Packit Service b1ea74
	_channel = (ADDIN_ARGV*)malloc(sizeof(ADDIN_ARGV));
Packit Service fa4841
Packit Service fa4841
	if (!_channel)
Packit Service fa4841
		return NULL;
Packit Service fa4841
Packit Service fa4841
	_channel->argc = channel->argc;
Packit Service b1ea74
	_channel->argv = (char**)calloc(sizeof(char*), channel->argc);
Packit Service fa4841
Packit Service fa4841
	if (!_channel->argv)
Packit Service fa4841
		goto out_free;
Packit Service fa4841
Packit Service fa4841
	for (index = 0; index < _channel->argc; index++)
Packit Service fa4841
	{
Packit Service fa4841
		_channel->argv[index] = _strdup(channel->argv[index]);
Packit Service fa4841
Packit Service fa4841
		if (!_channel->argv[index])
Packit Service fa4841
			goto out_release_args;
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	return _channel;
Packit Service fa4841
out_release_args:
Packit Service fa4841
Packit Service fa4841
	for (index = 0; _channel->argv[index]; index++)
Packit Service fa4841
		free(_channel->argv[index]);
Packit Service fa4841
Packit Service fa4841
out_free:
Packit Service fa4841
	free(_channel);
Packit Service fa4841
	return NULL;
Packit Service fa4841
}
Packit Service fa4841
Packit Service fa4841
void freerdp_dynamic_channel_collection_free(rdpSettings* settings)
Packit Service fa4841
{
Packit Service fa4841
	int j;
Packit Service fa4841
	UINT32 i;
Packit Service fa4841
Packit Service fa4841
	for (i = 0; i < settings->DynamicChannelCount; i++)
Packit Service fa4841
	{
Packit Service fa4841
		if (!settings->DynamicChannelArray[i])
Packit Service fa4841
			continue;
Packit Service fa4841
Packit Service fa4841
		for (j = 0; j < settings->DynamicChannelArray[i]->argc; j++)
Packit Service fa4841
			free(settings->DynamicChannelArray[i]->argv[j]);
Packit Service fa4841
Packit Service fa4841
		free(settings->DynamicChannelArray[i]->argv);
Packit Service fa4841
		free(settings->DynamicChannelArray[i]);
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	free(settings->DynamicChannelArray);
Packit Service fa4841
	settings->DynamicChannelArraySize = 0;
Packit Service fa4841
	settings->DynamicChannelArray = NULL;
Packit Service fa4841
	settings->DynamicChannelCount = 0;
Packit Service fa4841
}
Packit Service fa4841
Packit Service fa4841
void freerdp_target_net_addresses_free(rdpSettings* settings)
Packit Service fa4841
{
Packit Service fa4841
	UINT32 index;
Packit Service fa4841
Packit Service fa4841
	for (index = 0; index < settings->TargetNetAddressCount; index++)
Packit Service fa4841
		free(settings->TargetNetAddresses[index]);
Packit Service fa4841
Packit Service fa4841
	free(settings->TargetNetAddresses);
Packit Service fa4841
	free(settings->TargetNetPorts);
Packit Service fa4841
	settings->TargetNetAddressCount = 0;
Packit Service fa4841
	settings->TargetNetAddresses = NULL;
Packit Service fa4841
	settings->TargetNetPorts = NULL;
Packit Service fa4841
}
Packit Service fa4841
Packit Service fa4841
void freerdp_performance_flags_make(rdpSettings* settings)
Packit Service fa4841
{
Packit Service fa4841
	settings->PerformanceFlags = PERF_FLAG_NONE;
Packit Service fa4841
Packit Service fa4841
	if (settings->AllowFontSmoothing)
Packit Service fa4841
		settings->PerformanceFlags |= PERF_ENABLE_FONT_SMOOTHING;
Packit Service fa4841
Packit Service fa4841
	if (settings->AllowDesktopComposition)
Packit Service fa4841
		settings->PerformanceFlags |= PERF_ENABLE_DESKTOP_COMPOSITION;
Packit Service fa4841
Packit Service fa4841
	if (settings->DisableWallpaper)
Packit Service fa4841
		settings->PerformanceFlags |= PERF_DISABLE_WALLPAPER;
Packit Service fa4841
Packit Service fa4841
	if (settings->DisableFullWindowDrag)
Packit Service fa4841
		settings->PerformanceFlags |= PERF_DISABLE_FULLWINDOWDRAG;
Packit Service fa4841
Packit Service fa4841
	if (settings->DisableMenuAnims)
Packit Service fa4841
		settings->PerformanceFlags |= PERF_DISABLE_MENUANIMATIONS;
Packit Service fa4841
Packit Service fa4841
	if (settings->DisableThemes)
Packit Service fa4841
		settings->PerformanceFlags |= PERF_DISABLE_THEMING;
Packit Service fa4841
}
Packit Service fa4841
Packit Service fa4841
void freerdp_performance_flags_split(rdpSettings* settings)
Packit Service fa4841
{
Packit Service b1ea74
	settings->AllowFontSmoothing =
Packit Service b1ea74
	    (settings->PerformanceFlags & PERF_ENABLE_FONT_SMOOTHING) ? TRUE : FALSE;
Packit Service b1ea74
	settings->AllowDesktopComposition =
Packit Service b1ea74
	    (settings->PerformanceFlags & PERF_ENABLE_DESKTOP_COMPOSITION) ? TRUE : FALSE;
Packit Service b1ea74
	settings->DisableWallpaper =
Packit Service b1ea74
	    (settings->PerformanceFlags & PERF_DISABLE_WALLPAPER) ? TRUE : FALSE;
Packit Service b1ea74
	settings->DisableFullWindowDrag =
Packit Service b1ea74
	    (settings->PerformanceFlags & PERF_DISABLE_FULLWINDOWDRAG) ? TRUE : FALSE;
Packit Service b1ea74
	settings->DisableMenuAnims =
Packit Service b1ea74
	    (settings->PerformanceFlags & PERF_DISABLE_MENUANIMATIONS) ? TRUE : FALSE;
Packit Service fa4841
	settings->DisableThemes = (settings->PerformanceFlags & PERF_DISABLE_THEMING) ? TRUE : FALSE;
Packit Service fa4841
}
Packit Service fa4841
Packit Service b1ea74
BOOL freerdp_set_gateway_usage_method(rdpSettings* settings, UINT32 GatewayUsageMethod)
Packit Service fa4841
{
Packit Service b1ea74
	if (!freerdp_settings_set_uint32(settings, FreeRDP_GatewayUsageMethod, GatewayUsageMethod))
Packit Service b1ea74
		return FALSE;
Packit Service fa4841
Packit Service fa4841
	if (GatewayUsageMethod == TSC_PROXY_MODE_NONE_DIRECT)
Packit Service fa4841
	{
Packit Service b1ea74
		if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, FALSE) ||
Packit Service b1ea74
		    !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, FALSE))
Packit Service b1ea74
			return FALSE;
Packit Service fa4841
	}
Packit Service fa4841
	else if (GatewayUsageMethod == TSC_PROXY_MODE_DIRECT)
Packit Service fa4841
	{
Packit Service b1ea74
		if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, TRUE) ||
Packit Service b1ea74
		    !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, FALSE))
Packit Service b1ea74
			return FALSE;
Packit Service fa4841
	}
Packit Service fa4841
	else if (GatewayUsageMethod == TSC_PROXY_MODE_DETECT)
Packit Service fa4841
	{
Packit Service b1ea74
		if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, TRUE) ||
Packit Service b1ea74
		    !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, TRUE))
Packit Service b1ea74
			return FALSE;
Packit Service fa4841
	}
Packit Service fa4841
	else if (GatewayUsageMethod == TSC_PROXY_MODE_DEFAULT)
Packit Service fa4841
	{
Packit Service fa4841
		/**
Packit Service fa4841
		 * This corresponds to "Automatically detect RD Gateway server settings",
Packit Service fa4841
		 * which means the client attempts to use gateway group policy settings
Packit Service fa4841
		 * http://technet.microsoft.com/en-us/library/cc770601.aspx
Packit Service fa4841
		 */
Packit Service b1ea74
		if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, FALSE) ||
Packit Service b1ea74
		    !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, FALSE))
Packit Service b1ea74
			return FALSE;
Packit Service fa4841
	}
Packit Service fa4841
	else if (GatewayUsageMethod == TSC_PROXY_MODE_NONE_DETECT)
Packit Service fa4841
	{
Packit Service b1ea74
		if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, FALSE) ||
Packit Service b1ea74
		    !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, FALSE))
Packit Service b1ea74
			return FALSE;
Packit Service fa4841
	}
Packit Service b1ea74
Packit Service b1ea74
	return TRUE;
Packit Service fa4841
}
Packit Service fa4841
Packit Service fa4841
void freerdp_update_gateway_usage_method(rdpSettings* settings, UINT32 GatewayEnabled,
Packit Service b1ea74
                                         UINT32 GatewayBypassLocal)
Packit Service fa4841
{
Packit Service fa4841
	UINT32 GatewayUsageMethod = 0;
Packit Service fa4841
Packit Service fa4841
	if (!GatewayEnabled && !GatewayBypassLocal)
Packit Service fa4841
		GatewayUsageMethod = TSC_PROXY_MODE_NONE_DIRECT;
Packit Service fa4841
	else if (GatewayEnabled && !GatewayBypassLocal)
Packit Service fa4841
		GatewayUsageMethod = TSC_PROXY_MODE_DIRECT;
Packit Service fa4841
	else if (GatewayEnabled && GatewayBypassLocal)
Packit Service fa4841
		GatewayUsageMethod = TSC_PROXY_MODE_DETECT;
Packit Service fa4841
Packit Service fa4841
	freerdp_set_gateway_usage_method(settings, GatewayUsageMethod);
Packit Service fa4841
}
Packit Service fa4841
Packit Service b1ea74
BOOL freerdp_get_param_bool(const rdpSettings* settings, int id)
Packit Service fa4841
{
Packit Service b1ea74
	return freerdp_settings_get_bool(settings, (size_t)id);
Packit Service fa4841
}
Packit Service fa4841
Packit Service fa4841
int freerdp_set_param_bool(rdpSettings* settings, int id, BOOL param)
Packit Service fa4841
{
Packit Service b1ea74
	return freerdp_settings_set_bool(settings, (size_t)id, param) ? 0 : -1;
Packit Service b1ea74
}
Packit Service bb5c11
Packit Service b1ea74
int freerdp_get_param_int(const rdpSettings* settings, int id)
Packit Service b1ea74
{
Packit Service b1ea74
	return freerdp_settings_get_int32(settings, (size_t)id);
Packit Service b1ea74
}
Packit Service bb5c11
Packit Service b1ea74
int freerdp_set_param_int(rdpSettings* settings, int id, int param)
Packit Service b1ea74
{
Packit Service b1ea74
	return freerdp_settings_set_int32(settings, (size_t)id, param) ? 0 : -1;
Packit Service b1ea74
}
Packit Service bb5c11
Packit Service b1ea74
UINT32 freerdp_get_param_uint32(const rdpSettings* settings, int id)
Packit Service b1ea74
{
Packit Service b1ea74
	return freerdp_settings_get_uint32(settings, (size_t)id);
Packit Service b1ea74
}
Packit Service bb5c11
Packit Service b1ea74
int freerdp_set_param_uint32(rdpSettings* settings, int id, UINT32 param)
Packit Service b1ea74
{
Packit Service b1ea74
	return freerdp_settings_set_uint32(settings, (size_t)id, param) ? 0 : -1;
Packit Service b1ea74
}
Packit Service bb5c11
Packit Service b1ea74
UINT64 freerdp_get_param_uint64(const rdpSettings* settings, int id)
Packit Service b1ea74
{
Packit Service b1ea74
	return freerdp_settings_get_uint64(settings, (size_t)id);
Packit Service b1ea74
}
Packit Service bb5c11
Packit Service b1ea74
int freerdp_set_param_uint64(rdpSettings* settings, int id, UINT64 param)
Packit Service b1ea74
{
Packit Service b1ea74
	return freerdp_settings_set_uint64(settings, (size_t)id, param) ? 0 : -1;
Packit Service b1ea74
}
Packit Service bb5c11
Packit Service b1ea74
char* freerdp_get_param_string(const rdpSettings* settings, int id)
Packit Service b1ea74
{
Packit Service b1ea74
	return (char*)freerdp_settings_get_string(settings, (size_t)id);
Packit Service b1ea74
}
Packit Service bb5c11
Packit Service b1ea74
int freerdp_set_param_string(rdpSettings* settings, int id, const char* param)
Packit Service b1ea74
{
Packit Service b1ea74
	return freerdp_settings_set_string(settings, (size_t)id, param) ? 0 : -1;
Packit Service b1ea74
}
Packit Service bb5c11
Packit Service b1ea74
static BOOL value_to_uint(const char* value, ULONGLONG* result, ULONGLONG min, ULONGLONG max)
Packit Service b1ea74
{
Packit Service b1ea74
	unsigned long long rc;
Packit Service bb5c11
Packit Service b1ea74
	if (!value || !result)
Packit Service b1ea74
		return FALSE;
Packit Service bb5c11
Packit Service b1ea74
	errno = 0;
Packit Service b1ea74
	rc = _strtoui64(value, NULL, 0);
Packit Service bb5c11
Packit Service b1ea74
	if (errno != 0)
Packit Service b1ea74
		return FALSE;
Packit Service bb5c11
Packit Service b1ea74
	if ((rc < min) || (rc > max))
Packit Service b1ea74
		return FALSE;
Packit Service bb5c11
Packit Service b1ea74
	*result = rc;
Packit Service b1ea74
	return TRUE;
Packit Service b1ea74
}
Packit Service bb5c11
Packit Service b1ea74
static BOOL value_to_int(const char* value, LONGLONG* result, LONGLONG min, LONGLONG max)
Packit Service b1ea74
{
Packit Service b1ea74
	long long rc;
Packit Service bb5c11
Packit Service b1ea74
	if (!value || !result)
Packit Service b1ea74
		return FALSE;
Packit Service bb5c11
Packit Service b1ea74
	errno = 0;
Packit Service b1ea74
	rc = _strtoi64(value, NULL, 0);
Packit Service bb5c11
Packit Service b1ea74
	if (errno != 0)
Packit Service b1ea74
		return FALSE;
Packit Service bb5c11
Packit Service b1ea74
	if ((rc < min) || (rc > max))
Packit Service b1ea74
		return FALSE;
Packit Service bb5c11
Packit Service b1ea74
	*result = rc;
Packit Service b1ea74
	return TRUE;
Packit Service b1ea74
}
Packit Service bb5c11
Packit Service b1ea74
static BOOL parsing_fail(const char* key, const char* type, const char* value)
Packit Service b1ea74
{
Packit Service b1ea74
	WLog_ERR(TAG, "Failed to parse key [%s] of type [%s]: value [%s]", key, type, value);
Packit Service b1ea74
	return FALSE;
Packit Service b1ea74
}
Packit Service bb5c11
Packit Service b1ea74
BOOL freerdp_settings_set_value_for_name(rdpSettings* settings, const char* name, const char* value)
Packit Service b1ea74
{
Packit Service b1ea74
	ULONGLONG uval;
Packit Service b1ea74
	LONGLONG ival;
Packit Service b1ea74
	SSIZE_T index, type;
Packit Service b1ea74
	if (!settings || !name)
Packit Service b1ea74
		return FALSE;
Packit Service bb5c11
Packit Service b1ea74
	index = freerdp_settings_get_key_for_name(name);
Packit Service b1ea74
	if (index < 0)
Packit Service b1ea74
	{
Packit Service b1ea74
		WLog_ERR(TAG, "Invalid settings key [%s]", name);
Packit Service b1ea74
		return FALSE;
Packit Service b1ea74
	}
Packit Service bb5c11
Packit Service b1ea74
	type = freerdp_settings_get_type_for_key((size_t)index);
Packit Service b1ea74
	switch (type)
Packit Service b1ea74
	{
Packit Service bb5c11
Packit Service b1ea74
		case RDP_SETTINGS_TYPE_BOOL:
Packit Service b1ea74
		{
Packit Service b1ea74
			BOOL val = _strnicmp(value, "TRUE", 5) == 0;
Packit Service b1ea74
			if (!val && _strnicmp(value, "FALSE", 5) != 0)
Packit Service b1ea74
				return parsing_fail(name, "BOOL", value);
Packit Service b1ea74
			return freerdp_settings_set_bool(settings, index, val);
Packit Service b1ea74
		}
Packit Service b1ea74
		case RDP_SETTINGS_TYPE_UINT16:
Packit Service b1ea74
			if (!value_to_uint(value, &uval, 0, UINT16_MAX))
Packit Service b1ea74
				return parsing_fail(name, "UINT16", value);
Packit Service b1ea74
			if (!freerdp_settings_set_uint16(settings, index, uval))
Packit Service b1ea74
				return parsing_fail(name, "UINT16", value);
Packit Service b1ea74
			return TRUE;
Packit Service b1ea74
Packit Service b1ea74
		case RDP_SETTINGS_TYPE_INT16:
Packit Service b1ea74
			if (!value_to_int(value, &ival, INT16_MIN, INT16_MAX))
Packit Service b1ea74
				return parsing_fail(name, "INT16", value);
Packit Service b1ea74
			if (!freerdp_settings_set_int16(settings, index, ival))
Packit Service b1ea74
				return parsing_fail(name, "INT16", value);
Packit Service b1ea74
			return TRUE;
Packit Service b1ea74
		case RDP_SETTINGS_TYPE_UINT32:
Packit Service b1ea74
			if (!value_to_uint(value, &uval, 0, UINT32_MAX))
Packit Service b1ea74
				return parsing_fail(name, "UINT32", value);
Packit Service b1ea74
			if (!freerdp_settings_set_uint32(settings, index, uval))
Packit Service b1ea74
				return parsing_fail(name, "UINT32", value);
Packit Service b1ea74
			return TRUE;
Packit Service b1ea74
		case RDP_SETTINGS_TYPE_INT32:
Packit Service b1ea74
			if (!value_to_int(value, &ival, INT32_MIN, INT32_MAX))
Packit Service b1ea74
				return parsing_fail(name, "INT32", value);
Packit Service b1ea74
			if (!freerdp_settings_set_int32(settings, index, ival))
Packit Service b1ea74
				return parsing_fail(name, "INT32", value);
Packit Service b1ea74
			return TRUE;
Packit Service b1ea74
		case RDP_SETTINGS_TYPE_UINT64:
Packit Service b1ea74
			if (!value_to_uint(value, &uval, 0, UINT64_MAX))
Packit Service b1ea74
				return parsing_fail(name, "UINT64", value);
Packit Service b1ea74
			if (!freerdp_settings_set_uint64(settings, index, uval))
Packit Service b1ea74
				return parsing_fail(name, "UINT64", value);
Packit Service b1ea74
			return TRUE;
Packit Service b1ea74
		case RDP_SETTINGS_TYPE_INT64:
Packit Service b1ea74
			if (!value_to_int(value, &ival, INT64_MIN, INT64_MAX))
Packit Service b1ea74
				return parsing_fail(name, "INT64", value);
Packit Service b1ea74
			if (!freerdp_settings_set_int64(settings, index, ival))
Packit Service b1ea74
				return parsing_fail(name, "INT64", value);
Packit Service b1ea74
			return TRUE;
Packit Service b1ea74
Packit Service b1ea74
		case RDP_SETTINGS_TYPE_STRING:
Packit Service b1ea74
			return freerdp_settings_set_string(settings, index, value);
Packit Service b1ea74
		case RDP_SETTINGS_TYPE_POINTER:
Packit Service b1ea74
			return parsing_fail(name, "POINTER", value);
Packit Service bb5c11
		default:
Packit Service b1ea74
			return FALSE;
Packit Service bb5c11
	}
Packit Service b1ea74
	return FALSE;
Packit Service fa4841
}