예제 #1
0
파일: client.c 프로젝트: authentic8/FreeRDP
int freerdp_client_parse_connection_file_buffer(rdpContext* context, BYTE* buffer, size_t size)
{
	rdpFile* file;

	file = freerdp_client_rdp_file_new();
	freerdp_client_parse_rdp_file_buffer(file, buffer, size);
	freerdp_client_populate_settings_from_rdp_file(file, context->settings);
	freerdp_client_rdp_file_free(file);

	return 0;
}
예제 #2
0
파일: file.c 프로젝트: floppym/FreeRDP
BOOL freerdp_client_parse_rdp_file(rdpFile* file, const char* name)
{
	BOOL status;
	BYTE* buffer;
	FILE* fp = NULL;
	size_t read_size;
	INT64 file_size;
	fp = fopen(name, "r");

	if (!fp)
		return FALSE;

	_fseeki64(fp, 0, SEEK_END);
	file_size = _ftelli64(fp);
	_fseeki64(fp, 0, SEEK_SET);

	if (file_size < 1)
	{
		fclose(fp);
		return FALSE;
	}

	buffer = (BYTE*) malloc(file_size + 2);

	if (!buffer)
	{
		fclose(fp);
		return FALSE;
	}

	read_size = fread(buffer, file_size, 1, fp);

	if (!read_size)
	{
		if (!ferror(fp))
			read_size = file_size;
	}

	fclose(fp);

	if (read_size < 1)
	{
		free(buffer);
		return FALSE;
	}

	buffer[file_size] = '\0';
	buffer[file_size + 1] = '\0';
	status = freerdp_client_parse_rdp_file_buffer(file, buffer, file_size);
	free(buffer);
	return status;
}
예제 #3
0
파일: client.c 프로젝트: Shivette/FreeRDP
int freerdp_client_parse_connection_file_buffer(rdpContext* context, BYTE* buffer, size_t size)
{
	rdpFile* file;
    int status = -1;

	file = freerdp_client_rdp_file_new();
    if (freerdp_client_parse_rdp_file_buffer(file, buffer, size)
        && freerdp_client_populate_settings_from_rdp_file(file, context->settings))
    {
        status = 0;
    }

	freerdp_client_rdp_file_free(file);

    return status;
}
예제 #4
0
파일: file.c 프로젝트: C-o-r-E/FreeRDP
BOOL freerdp_client_parse_rdp_file(rdpFile* file, const char* name)
{
    BYTE* buffer;
    FILE* fp = NULL;
    size_t read_size;
    long int file_size;

    fp = fopen(name, "r");

    if (!fp)
        return FALSE;

    fseek(fp, 0, SEEK_END);
    file_size = ftell(fp);
    fseek(fp, 0, SEEK_SET);

    if (file_size < 1)
    {
        fclose(fp);
        return FALSE;
    }

    buffer = (BYTE*) malloc(file_size + 2);
    read_size = fread(buffer, file_size, 1, fp);

    if (!read_size)
    {
        if (!ferror(fp))
            read_size = file_size;
    }
    fclose(fp);

    if (read_size < 1)
    {
        free(buffer);
        buffer = NULL;
        return FALSE;
    }

    buffer[file_size] = '\0';
    buffer[file_size + 1] = '\0';

    return freerdp_client_parse_rdp_file_buffer(file, buffer, file_size);
}
예제 #5
0
파일: client.c 프로젝트: mfleisz/FreeRDP
int freerdp_client_settings_parse_connection_file_buffer(rdpSettings* settings,
        const BYTE* buffer, size_t size)
{
	rdpFile* file;
	int status = -1;
	file = freerdp_client_rdp_file_new();

	if (!file)
		return -1;

	if (freerdp_client_parse_rdp_file_buffer(file, buffer, size)
	    && freerdp_client_populate_settings_from_rdp_file(file, settings))
	{
		status = 0;
	}

	freerdp_client_rdp_file_free(file);
	return status;
}
예제 #6
0
int TestClientRdpFile(int argc, char* argv[])
{
	rdpFile* file;

	/* Unicode */

	file = freerdp_client_rdp_file_new();
	freerdp_client_parse_rdp_file_buffer(file, testRdpFileUTF16, sizeof(testRdpFileUTF16));

	if (file->UseMultiMon != 0)
	{
		printf("UseMultiMon mismatch: Actual: %ld, Expected: %d\n", file->UseMultiMon, 0);
		return -1;
	}

	if (file->ScreenModeId != 2)
	{
		printf("ScreenModeId mismatch: Actual: %ld, Expected: %d\n", file->ScreenModeId, 2);
		return -1;
	}

	if (file->GatewayProfileUsageMethod != 1)
	{
		printf("GatewayProfileUsageMethod mismatch: Actual: %ld, Expected: %d\n", file->GatewayProfileUsageMethod, 1);
		return -1;
	}

	if (strcmp(file->GatewayHostname, "LAB1-W2K8R2-GW.lab1.awake.local") != 0)
	{
		printf("GatewayHostname mismatch: Actual: %s, Expected: %s\n",
				file->GatewayHostname, "LAB1-W2K8R2-GW.lab1.awake.local");
		return -1;
	}

	freerdp_client_rdp_file_free(file);

	/* Ascii */

	file = freerdp_client_rdp_file_new();
	freerdp_client_parse_rdp_file_buffer(file, (BYTE*) testRdpFileUTF8, sizeof(testRdpFileUTF8));

	if (file->UseMultiMon != 0)
	{
		printf("UseMultiMon mismatch: Actual: %ld, Expected: %d\n", file->UseMultiMon, 0);
		return -1;
	}

	if (file->ScreenModeId != 2)
	{
		printf("ScreenModeId mismatch: Actual: %ld, Expected: %d\n", file->ScreenModeId, 2);
		return -1;
	}

	if (file->GatewayProfileUsageMethod != 1)
	{
		printf("GatewayProfileUsageMethod mismatch: Actual: %ld, Expected: %d\n", file->GatewayProfileUsageMethod, 1);
		return -1;
	}

	if (strcmp(file->GatewayHostname, "LAB1-W2K8R2-GW.lab1.awake.local") != 0)
	{
		printf("GatewayHostname mismatch: Actual: %s, Expected: %s\n",
				file->GatewayHostname, "LAB1-W2K8R2-GW.lab1.awake.local");
		return -1;
	}

	freerdp_client_rdp_file_free(file);

	return 0;
}
예제 #7
0
int TestClientRdpFile(int argc, char* argv[])
{
	int index;
	int iValue;
	char* sValue;
	rdpFile* file;
	rdpFileLine* line;

	/* Unicode */

	file = freerdp_client_rdp_file_new();
	if (!file)
	{
		printf("rdp_file_new failed\n");
		return -1;
	}
	freerdp_client_parse_rdp_file_buffer(file, testRdpFileUTF16, sizeof(testRdpFileUTF16));

	if (file->UseMultiMon != 0)
	{
		printf("UseMultiMon mismatch: Actual: %"PRIu32", Expected: 0\n", file->UseMultiMon);
		return -1;
	}

	if (file->ScreenModeId != 2)
	{
		printf("ScreenModeId mismatch: Actual: %"PRIu32", Expected: 2\n", file->ScreenModeId);
		return -1;
	}

	if (file->GatewayProfileUsageMethod != 1)
	{
		printf("GatewayProfileUsageMethod mismatch: Actual: %"PRIu32", Expected: 1\n", file->GatewayProfileUsageMethod);
		return -1;
	}

	if (strcmp(file->GatewayHostname, "LAB1-W2K8R2-GW.lab1.awake.local") != 0)
	{
		printf("GatewayHostname mismatch: Actual: %s, Expected: %s\n",
				file->GatewayHostname, "LAB1-W2K8R2-GW.lab1.awake.local");
		return -1;
	}

	freerdp_client_rdp_file_free(file);

	/* Ascii */

	file = freerdp_client_rdp_file_new();
	freerdp_client_parse_rdp_file_buffer(file, (BYTE*) testRdpFileUTF8, sizeof(testRdpFileUTF8));

	if (file->UseMultiMon != 0)
	{
		printf("UseMultiMon mismatch: Actual: %"PRIu32", Expected: 0\n", file->UseMultiMon);
		return -1;
	}

	if (file->ScreenModeId != 2)
	{
		printf("ScreenModeId mismatch: Actual: %"PRIu32", Expected: 2\n", file->ScreenModeId);
		return -1;
	}

	if (file->GatewayProfileUsageMethod != 1)
	{
		printf("GatewayProfileUsageMethod mismatch: Actual: %"PRIu32", Expected: 1\n", file->GatewayProfileUsageMethod);
		return -1;
	}

	if (strcmp(file->GatewayHostname, "LAB1-W2K8R2-GW.lab1.awake.local") != 0)
	{
		printf("GatewayHostname mismatch: Actual: %s, Expected: %s\n",
				file->GatewayHostname, "LAB1-W2K8R2-GW.lab1.awake.local");
		return -1;
	}

	iValue = freerdp_client_rdp_file_get_integer_option(file, "vendor integer");
	if (freerdp_client_rdp_file_set_integer_option(file, "vendor integer", 456) == -1)
	{
		printf("failed to set integer: vendor integer");
		return -1;
	}

	iValue = freerdp_client_rdp_file_get_integer_option(file, "vendor integer");

	sValue = (char*) freerdp_client_rdp_file_get_string_option(file, "vendor string");
	freerdp_client_rdp_file_set_string_option(file, "vendor string", "apple");
	sValue = (char*) freerdp_client_rdp_file_get_string_option(file, "vendor string");

	freerdp_client_rdp_file_set_string_option(file, "fruits", "banana,oranges");
	if (freerdp_client_rdp_file_set_integer_option(file, "numbers", 123456789) == -1)
	{
		printf("failed to set integer: numbers");
		return -1;
	}

	for (index = 0; index < file->lineCount; index++)
	{
		line = &(file->lines[index]);

		if (line->flags & RDP_FILE_LINE_FLAG_FORMATTED)
		{
			if (line->flags & RDP_FILE_LINE_FLAG_TYPE_STRING)
			{
				printf("line %02d: name: %s value: %s, %s\n",
					line->index, line->name, line->sValue,
					(line->flags & RDP_FILE_LINE_FLAG_STANDARD) ? "standard" : "non-standard");
			}
			else if (line->flags & RDP_FILE_LINE_FLAG_TYPE_INTEGER)
			{
				printf("line %02d: name: %s value: %"PRIu32", %s\n",
					line->index, line->name, line->iValue,
					(line->flags & RDP_FILE_LINE_FLAG_STANDARD) ? "standard" : "non-standard");
			}
		}
	}

	freerdp_client_rdp_file_free(file);

	return 0;
}