- Fix some corner cases for settings parsing (empty values, values containing delimiters).
- If provided, take port number into account.

svn path=/trunk/; revision=55003
This commit is contained in:
Kamil Hornicek 2012-01-18 13:09:18 +00:00
parent 0102072a69
commit d6606f146d
2 changed files with 28 additions and 6 deletions

View file

@ -230,6 +230,7 @@ ParseSettings(PRDPSETTINGS pRdpSettings,
{ {
LPWSTR lpStr = lpBuffer; LPWSTR lpStr = lpBuffer;
WCHAR szSeps[] = L":\r\n"; WCHAR szSeps[] = L":\r\n";
WCHAR szNewline[] = L"\r\n";
LPWSTR lpToken; LPWSTR lpToken;
BOOL bFound; BOOL bFound;
INT i; INT i;
@ -258,7 +259,7 @@ ParseSettings(PRDPSETTINGS pRdpSettings,
else if (lpToken[0] == L's') else if (lpToken[0] == L's')
{ {
pRdpSettings->pSettings[i].Type = lpToken[0]; pRdpSettings->pSettings[i].Type = lpToken[0];
lpToken = wcstok(NULL, szSeps); lpToken = wcstok(NULL, szNewline);
if (lpToken != NULL) if (lpToken != NULL)
wcscpy(pRdpSettings->pSettings[i].Value.s, lpToken); wcscpy(pRdpSettings->pSettings[i].Value.s, lpToken);
} }
@ -268,10 +269,7 @@ ParseSettings(PRDPSETTINGS pRdpSettings,
/* move past the type and value */ /* move past the type and value */
if (!bFound) if (!bFound)
{ lpToken = wcstok(NULL, szNewline);
lpToken = wcstok(NULL, szSeps);
lpToken = wcstok(NULL, szSeps);
}
/* move to next key */ /* move to next key */
lpToken = wcstok(NULL, szSeps); lpToken = wcstok(NULL, szSeps);

View file

@ -958,6 +958,29 @@ mi_paint_rect(char * data, int width, int height, int x, int y, int cx, int cy)
} }
static INT
GetPortNumber(PCHAR szAddress)
{
PCHAR szPort;
INT iPort = TCP_PORT_RDP;
szPort = strtok(szAddress, ":");
if (szPort != NULL)
{
szPort = strtok(NULL, ":");
if (szPort != NULL)
{
iPort = atoi(szPort);
if (iPort <= 0 || iPort > 0xFFFF)
iPort = TCP_PORT_RDP;
}
}
return iPort;
}
static BOOL static BOOL
ParseCommandLine(LPWSTR lpCmdLine, ParseCommandLine(LPWSTR lpCmdLine,
@ -1051,8 +1074,9 @@ wWinMain(HINSTANCE hInstance,
uni_to_str(szValue, GetStringFromSettings(pRdpSettings, L"full address")); uni_to_str(szValue, GetStringFromSettings(pRdpSettings, L"full address"));
/* GetPortNumber also removes possible trailing port number from address */
g_tcp_port_rdp = GetPortNumber(szValue);
strcpy(g_servername, szValue); strcpy(g_servername, szValue);
//g_port = 3389;
strcpy(g_username, ""); strcpy(g_username, "");
strcpy(g_password, ""); strcpy(g_password, "");
g_server_depth = GetIntegerFromSettings(pRdpSettings, L"session bpp"); g_server_depth = GetIntegerFromSettings(pRdpSettings, L"session bpp");