pEntryPoints->GlobalInit();
instance = freerdp_new();
+
if (!instance)
return NULL;
instance->ContextNew = freerdp_client_common_new;
instance->ContextFree = freerdp_client_common_free;
instance->pClientEntryPoints = (RDP_CLIENT_ENTRY_POINTS*) malloc(pEntryPoints->Size);
+
if (!instance->pClientEntryPoints)
goto out_fail;
-
CopyMemory(instance->pClientEntryPoints, pEntryPoints, pEntryPoints->Size);
+
if (!freerdp_context_new(instance))
goto out_fail2;
/* This function will call logic that is applicable to the settings
* from command line parsing AND the rdp file parsing */
- if(!freerdp_client_settings_post_process(settings))
+ if (!freerdp_client_settings_post_process(settings))
status = -1;
return status;
RDP_KEYBOARD_LAYOUT* layouts;
layouts = freerdp_keyboard_get_layouts(RDP_KEYBOARD_LAYOUT_TYPE_STANDARD);
+
for (i = 0; layouts[i].code; i++)
{
if (_stricmp(layouts[i].name, name) == 0)
id = layouts[i].code;
}
+
free(layouts);
if (id)
return id;
layouts = freerdp_keyboard_get_layouts(RDP_KEYBOARD_LAYOUT_TYPE_VARIANT);
+
for (i = 0; layouts[i].code; i++)
{
if (_stricmp(layouts[i].name, name) == 0)
id = layouts[i].code;
}
+
free(layouts);
if (id)
return id;
layouts = freerdp_keyboard_get_layouts(RDP_KEYBOARD_LAYOUT_TYPE_IME);
+
for (i = 0; layouts[i].code; i++)
{
if (_stricmp(layouts[i].name, name) == 0)
id = layouts[i].code;
}
+
free(layouts);
if (id)
return 1;
}
}
+
+ if (length > 13)
+ {
+ if (_stricmp(&(argv[index])[length - 13], ".msrcIncident") == 0)
+ {
+ return 1;
+ }
+ }
}
return 0;
flags = COMMAND_LINE_SEPARATOR_COLON;
flags |= COMMAND_LINE_SIGIL_SLASH | COMMAND_LINE_SIGIL_PLUS_MINUS;
+
if (ignoreUnknown)
{
flags |= COMMAND_LINE_IGN_UNKNOWN_KEYWORD;
flags = COMMAND_LINE_SEPARATOR_SPACE;
flags |= COMMAND_LINE_SIGIL_DASH | COMMAND_LINE_SIGIL_DOUBLE_DASH;
flags |= COMMAND_LINE_SIGIL_ENABLE_DISABLE;
+
if (ignoreUnknown)
{
flags |= COMMAND_LINE_IGN_UNKNOWN_KEYWORD;
char* MachineAddress;
UINT32 MachinePort;
+
+ UINT32 MachineCount;
+ char** MachineAddresses;
+ UINT32* MachinePorts;
+
char* RASessionId;
char* RASpecificParams;
};
ALIGN64 UINT32 RedirectionTsvUrlLength; /* 1227 */
ALIGN64 UINT32 TargetNetAddressCount; /* 1228 */
ALIGN64 char** TargetNetAddresses; /* 1229 */
- UINT64 padding1280[1280 - 1230]; /* 1230 */
+ ALIGN64 UINT32* TargetNetPorts; /* 1230 */
+ UINT64 padding1280[1280 - 1231]; /* 1231 */
/**
* Security
}
}
+ file->MachineCount = count;
+ file->MachineAddresses = (char**) calloc(count, sizeof(char*));
+ file->MachinePorts = (UINT32*) calloc(count, sizeof(UINT32));
+
+ if (!file->MachineAddresses || !file->MachinePorts)
+ return -1;
+
+ for (i = 0; i < count; i++)
+ {
+ length = strlen(tokens[i]);
+
+ p = tokens[i];
+
+ q = strchr(p, ':');
+
+ if (!q)
+ {
+ free(tokens);
+ return -1;
+ }
+
+ q[0] = '\0';
+ q++;
+
+ file->MachineAddresses[i] = _strdup(p);
+ file->MachinePorts[i] = (UINT32) atoi(q);
+
+ q[-1] = ':';
+ }
+
for (i = 0; i < count; i++)
{
length = strlen(tokens[i]);
break;
}
+
if (tokens)
free(tokens);
+
return 1;
}
}
buffer = (BYTE*) malloc(fileSize + 2);
+
+ if (!buffer)
+ return -1;
+
readSize = fread(buffer, fileSize, 1, fp);
if (!readSize)
int freerdp_client_populate_settings_from_assistance_file(rdpAssistanceFile* file, rdpSettings* settings)
{
+ UINT32 i;
+
freerdp_set_param_bool(settings, FreeRDP_RemoteAssistanceMode, TRUE);
if (!file->RASessionId)
freerdp_set_param_string(settings, FreeRDP_ServerHostname, file->MachineAddress);
freerdp_set_param_uint32(settings, FreeRDP_ServerPort, file->MachinePort);
+ freerdp_target_net_addresses_free(settings);
+
+ settings->TargetNetAddressCount = file->MachineCount;
+ settings->TargetNetAddresses = (char**) calloc(file->MachineCount, sizeof(char*));
+ settings->TargetNetPorts = (UINT32*) calloc(file->MachineCount, sizeof(UINT32));
+
+ for (i = 0; i < settings->TargetNetAddressCount; i++)
+ {
+ settings->TargetNetAddresses[i] = _strdup(file->MachineAddresses[i]);
+ settings->TargetNetPorts[i] = file->MachinePorts[i];
+
+ fprintf(stderr, "count: %d index: %d address: %s port: %d\n",
+ settings->TargetNetAddressCount, i, settings->TargetNetAddresses[i], settings->TargetNetPorts[i]);
+ }
+
return 1;
}
void freerdp_assistance_file_free(rdpAssistanceFile* file)
{
+ UINT32 i;
+
if (!file)
return;
free(file->MachineAddress);
free(file->EncryptedPassStub);
+ for (i = 0; i < file->MachineCount; i++)
+ {
+ free(file->MachineAddresses[i]);
+ }
+
+ free(file->MachineAddresses);
+ free(file->MachinePorts);
+
free(file);
}
free(settings->TargetNetAddresses[index]);
free(settings->TargetNetAddresses);
+ free(settings->TargetNetPorts);
settings->TargetNetAddressCount = 0;
settings->TargetNetAddresses = NULL;
+ settings->TargetNetPorts = NULL;
}
void freerdp_performance_flags_make(rdpSettings* settings)
_settings->RedirectionTsvUrlLength = 0;
_settings->TargetNetAddressCount = 0;
_settings->TargetNetAddresses = NULL;
+ _settings->TargetNetPorts = NULL;
if (settings->LoadBalanceInfo && settings->LoadBalanceInfoLength)
{
for (index = 0; index < settings->TargetNetAddressCount; index++)
_settings->TargetNetAddresses[index] = _strdup(settings->TargetNetAddresses[index]);
+
+ if (settings->TargetNetPorts)
+ {
+ _settings->TargetNetPorts = (UINT32*) malloc(sizeof(UINT32) * settings->TargetNetAddressCount);
+
+ for (index = 0; index < settings->TargetNetAddressCount; index++)
+ _settings->TargetNetPorts[index] = settings->TargetNetPorts[index];
+ }
}
_settings->DeviceCount = settings->DeviceCount;
#ifndef _WIN32
-int freerdp_tcp_connect_multi(char** hostnames, int count, int port, int timeout)
+int freerdp_tcp_connect_multi(char** hostnames, UINT32* ports, int count, int port, int timeout)
{
int index;
int sindex;
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
+ if (ports)
+ sprintf_s(port_str, sizeof(port_str) - 1, "%u", ports[index]);
+
status = getaddrinfo(hostnames[index], port_str, &hints, &result);
if (status)
if (!settings->GatewayEnabled)
{
- if (!freerdp_tcp_resolve_hostname(hostname))
+ if (!freerdp_tcp_resolve_hostname(hostname) || settings->RemoteAssistanceMode)
{
if (settings->TargetNetAddressCount > 0)
{
#ifndef _WIN32
sockfd = freerdp_tcp_connect_multi(settings->TargetNetAddresses,
- settings->TargetNetAddressCount, port, timeout);
+ settings->TargetNetPorts, settings->TargetNetAddressCount, port, timeout);
#else
hostname = settings->TargetNetAddresses[0];
#endif