mirror of https://github.com/FreeRDP/FreeRDP
libfreerdp-client: initial working .rdp file support
This commit is contained in:
parent
beefa1a21d
commit
13a0fbe040
|
@ -510,12 +510,12 @@ BOOL xf_pre_connect(freerdp* instance)
|
|||
|
||||
if (settings->connection_file)
|
||||
{
|
||||
file = (rdpFile*) malloc(sizeof(rdpFile));
|
||||
ZeroMemory(file, sizeof(rdpFile));
|
||||
file = freerdp_client_rdp_file_new();
|
||||
|
||||
printf("Using connection file: %s\n", settings->connection_file);
|
||||
|
||||
freerdp_client_parse_rdp_file(file, settings->connection_file);
|
||||
freerdp_client_populate_settings_from_rdp_file(file, settings);
|
||||
}
|
||||
|
||||
bitmap_cache = settings->bitmap_cache;
|
||||
|
|
|
@ -41,11 +41,11 @@
|
|||
|
||||
#include <winpr/crt.h>
|
||||
|
||||
#include <freerdp/utils/hexdump.h>
|
||||
|
||||
static BYTE BOM_UTF16_LE[2] = { 0xFF, 0xFE };
|
||||
static WCHAR CR_LF_STR_W[] = { '\r', '\n', '\0' };
|
||||
|
||||
#define INVALID_INTEGER_VALUE 0xFFFFFFFF
|
||||
|
||||
BOOL freerdp_client_rdp_file_set_integer(rdpFile* file, char* name, int value)
|
||||
{
|
||||
if (_stricmp(name, "use multimon") == 0)
|
||||
|
@ -392,3 +392,80 @@ BOOL freerdp_client_parse_rdp_file(rdpFile* file, char* name)
|
|||
|
||||
return freerdp_client_parse_rdp_file_buffer(file, buffer, file_size);
|
||||
}
|
||||
|
||||
BOOL freerdp_client_populate_settings_from_rdp_file(rdpFile* file, rdpSettings* settings)
|
||||
{
|
||||
if (~((size_t) file->Domain))
|
||||
settings->domain = file->Domain;
|
||||
|
||||
if (~((size_t) file->Username))
|
||||
{
|
||||
char* p;
|
||||
size_t size;
|
||||
|
||||
p = strchr(file->Username, '\\');
|
||||
|
||||
if (p)
|
||||
{
|
||||
size = p - file->Username;
|
||||
settings->domain = (char*) malloc(size + 1);
|
||||
CopyMemory(settings->domain, file->Username, size);
|
||||
settings->domain[size] = 0;
|
||||
|
||||
size = strlen(file->Username) - size - 1;
|
||||
settings->username = (char*) malloc(size + 1);
|
||||
CopyMemory(settings->username, &file->Username[p - file->Username + 1], size);
|
||||
settings->username[size] = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
settings->username = file->Username;
|
||||
}
|
||||
}
|
||||
|
||||
if (~file->ServerPort)
|
||||
settings->port = file->ServerPort;
|
||||
if (~((size_t) file->FullAddress))
|
||||
settings->hostname = file->FullAddress;
|
||||
if (~file->DesktopWidth)
|
||||
settings->width = file->DesktopWidth;
|
||||
if (~file->DesktopHeight)
|
||||
settings->height = file->DesktopHeight;
|
||||
if (~file->SessionBpp)
|
||||
settings->color_depth = file->SessionBpp;
|
||||
if (~file->ConnectToConsole)
|
||||
settings->console_session = file->ConnectToConsole;
|
||||
if (~file->AdministrativeSession)
|
||||
settings->console_session = file->AdministrativeSession;
|
||||
if (~file->NegotiateSecurityLayer)
|
||||
settings->security_layer_negotiation = file->NegotiateSecurityLayer;
|
||||
if (~file->EnableCredSSPSupport)
|
||||
settings->nla_security = file->EnableCredSSPSupport;
|
||||
if (~((size_t) file->AlternateShell))
|
||||
settings->shell = file->AlternateShell;
|
||||
if (~((size_t) file->ShellWorkingDirectory))
|
||||
settings->directory = file->ShellWorkingDirectory;
|
||||
if (~((size_t) file->GatewayHostname))
|
||||
settings->tsg_hostname = file->GatewayHostname;
|
||||
if (~file->RemoteApplicationMode)
|
||||
settings->remote_app = file->RemoteApplicationMode;
|
||||
|
||||
printf("Username: %s Password: %s Domain: %s\n", settings->username, settings->password, settings->domain);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
rdpFile* freerdp_client_rdp_file_new()
|
||||
{
|
||||
rdpFile* file;
|
||||
|
||||
file = (rdpFile*) malloc(sizeof(rdpFile));
|
||||
FillMemory(file, sizeof(rdpFile), 0xFF);
|
||||
|
||||
return file;
|
||||
}
|
||||
|
||||
void freerdp_client_rdp_file_free(rdpFile* file)
|
||||
{
|
||||
free(file);
|
||||
}
|
||||
|
|
|
@ -134,5 +134,9 @@ typedef struct rdp_file rdpFile;
|
|||
|
||||
FREERDP_API BOOL freerdp_client_parse_rdp_file(rdpFile* file, char* name);
|
||||
FREERDP_API BOOL freerdp_client_parse_rdp_file_buffer(rdpFile* file, BYTE* buffer, size_t size);
|
||||
FREERDP_API BOOL freerdp_client_populate_settings_from_rdp_file(rdpFile* file, rdpSettings* settings);
|
||||
|
||||
FREERDP_API rdpFile* freerdp_client_rdp_file_new();
|
||||
FREERDP_API void freerdp_client_rdp_file_free(rdpFile* file);
|
||||
|
||||
#endif /* FREERDP_CLIENT_RDP_FILE */
|
||||
|
|
|
@ -947,7 +947,7 @@ int freerdp_parse_args(rdpSettings* settings, int argc, char** argv,
|
|||
}
|
||||
|
||||
/* Must have a hostname. Do you? */
|
||||
if (NULL == settings->hostname)
|
||||
if ((settings->hostname == NULL) && (settings->connection_file == NULL))
|
||||
{
|
||||
printf("missing server name\n");
|
||||
return FREERDP_ARGS_PARSE_FAILURE;
|
||||
|
@ -956,5 +956,4 @@ int freerdp_parse_args(rdpSettings* settings, int argc, char** argv,
|
|||
{
|
||||
return index;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue