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; }
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; }
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; }
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); }
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; }
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; }
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; }