Unverified Commit 930bd283 authored by Mike Gabriel's avatar Mike Gabriel

Merge branch 'uli42-pr/decode_options' into 3.6.x

parents fad80bc4 30a96273
...@@ -1037,17 +1037,52 @@ int ddxProcessArgument(int argc, char *argv[], int i) ...@@ -1037,17 +1037,52 @@ int ddxProcessArgument(int argc, char *argv[], int i)
return 0; return 0;
} }
static void nxagentParseOptions(char *name, char *value) /* copy from nxcomp's Loop.cpp */
static int
hexval(char c) {
if ((c >= '0') && (c <= '9'))
return c - '0';
if ((c >= 'a') && (c <= 'f'))
return c - 'a' + 10;
if ((c >= 'A') && (c <= 'F'))
return c - 'A' + 10;
return -1;
}
static void
URLDecodeInPlace(char *str)
{
if (str) {
char *to = str;
while (str[0])
{
if ((str[0] == '%') &&
(hexval(str[1]) >= 0) &&
(hexval(str[2]) >= 0))
{
*(to++) = hexval(str[1]) * 16 + hexval(str[2]);
str += 3;
}
else
*(to++) = *(str++);
}
*to = '\0';
}
}
static void nxagentParseSingleOption(char *name, char *value)
{ {
int size, argc; int size, argc;
char *argv[2] = { NULL, NULL }; char *argv[2] = { NULL, NULL };
#ifdef TEST #ifdef TEST
fprintf(stderr, "nxagentParseOptions: Processing option '%s' = '%s'.\n", fprintf(stderr, "nxagentParseSingleOption: Processing option '%s' = '%s'.\n",
validateString(name), validateString(value)); validateString(name), validateString(value));
#endif #endif
URLDecodeInPlace(value);
if (!strcmp(name, "kbtype") || if (!strcmp(name, "kbtype") ||
!strcmp(name, "keyboard") || !strcmp(name, "keyboard") ||
!strcmp(name, "id") || !strcmp(name, "id") ||
...@@ -1081,7 +1116,7 @@ static void nxagentParseOptions(char *name, char *value) ...@@ -1081,7 +1116,7 @@ static void nxagentParseOptions(char *name, char *value)
if (nxagentReconnectTrap == True) if (nxagentReconnectTrap == True)
{ {
#ifdef DEBUG #ifdef DEBUG
fprintf(stderr, "nxagentParseOptions: Ignoring option 'render' at reconnection.\n"); fprintf(stderr, "nxagentParseSingleOption: Ignoring option 'render' at reconnection.\n");
#endif #endif
} }
else if (nxagentRenderEnable == UNDEFINED) else if (nxagentRenderEnable == UNDEFINED)
...@@ -1113,7 +1148,7 @@ static void nxagentParseOptions(char *name, char *value) ...@@ -1113,7 +1148,7 @@ static void nxagentParseOptions(char *name, char *value)
if (nxagentReconnectTrap == True) if (nxagentReconnectTrap == True)
{ {
#ifdef DEBUG #ifdef DEBUG
fprintf(stderr, "nxagentParseOptions: Ignoring option 'fullscreen' at reconnection.\n"); fprintf(stderr, "nxagentParseSingleOption: Ignoring option 'fullscreen' at reconnection.\n");
#endif #endif
} }
else if (!strcmp(value, "1")) else if (!strcmp(value, "1"))
...@@ -1283,7 +1318,7 @@ static void nxagentParseOptions(char *name, char *value) ...@@ -1283,7 +1318,7 @@ static void nxagentParseOptions(char *name, char *value)
if (nxagentReconnectTrap == True) if (nxagentReconnectTrap == True)
{ {
#ifdef DEBUG #ifdef DEBUG
fprintf(stderr, "nxagentParseOptions: Ignoring option 'autodpi' at reconnection.\n"); fprintf(stderr, "nxagentParseSingleOption: Ignoring option 'autodpi' at reconnection.\n");
#endif #endif
} }
else if (!strcmp(value, "0")) else if (!strcmp(value, "0"))
...@@ -1368,7 +1403,7 @@ static void nxagentParseOptions(char *name, char *value) ...@@ -1368,7 +1403,7 @@ static void nxagentParseOptions(char *name, char *value)
if ((errno) && (0 == sleep_parse)) if ((errno) && (0 == sleep_parse))
{ {
fprintf(stderr, "nxagentParseOptions: Unable to convert value [%s] of option [%s]. " fprintf(stderr, "nxagentParseSingleOption: Unable to convert value [%s] of option [%s]. "
"Ignoring option.\n", "Ignoring option.\n",
validateString(value), validateString(name)); validateString(value), validateString(name));
...@@ -1379,7 +1414,7 @@ static void nxagentParseOptions(char *name, char *value) ...@@ -1379,7 +1414,7 @@ static void nxagentParseOptions(char *name, char *value)
{ {
sleep_parse = UINT_MAX; sleep_parse = UINT_MAX;
fprintf(stderr, "nxagentParseOptions: Warning: value [%s] of option [%s] " fprintf(stderr, "nxagentParseSingleOption: Warning: value [%s] of option [%s] "
"out of range, clamped to [%lu].\n", "out of range, clamped to [%lu].\n",
validateString(value), validateString(name), sleep_parse); validateString(value), validateString(name), sleep_parse);
} }
...@@ -1388,7 +1423,7 @@ static void nxagentParseOptions(char *name, char *value) ...@@ -1388,7 +1423,7 @@ static void nxagentParseOptions(char *name, char *value)
{ {
sleep_parse = 0; sleep_parse = 0;
fprintf(stderr, "nxagentParseOptions: Warning: value [%s] of option [%s] " fprintf(stderr, "nxagentParseSingleOption: Warning: value [%s] of option [%s] "
"out of range, clamped to [%lu].\n", "out of range, clamped to [%lu].\n",
validateString(value), validateString(name), sleep_parse); validateString(value), validateString(name), sleep_parse);
} }
...@@ -1427,7 +1462,7 @@ static void nxagentParseOptions(char *name, char *value) ...@@ -1427,7 +1462,7 @@ static void nxagentParseOptions(char *name, char *value)
if ((errno) && (0 == tolerance_parse)) if ((errno) && (0 == tolerance_parse))
{ {
fprintf(stderr, "nxagentParseOptions: Unable to convert value [%s] of option [%s]. " fprintf(stderr, "nxagentParseSingleOption: Unable to convert value [%s] of option [%s]. "
"Ignoring option.\n", "Ignoring option.\n",
validateString(value), validateString(name)); validateString(value), validateString(name));
...@@ -1438,7 +1473,7 @@ static void nxagentParseOptions(char *name, char *value) ...@@ -1438,7 +1473,7 @@ static void nxagentParseOptions(char *name, char *value)
{ {
tolerance_parse = UINT_MAX; tolerance_parse = UINT_MAX;
fprintf(stderr, "nxagentParseOptions: Warning: value [%s] of option [%s] " fprintf(stderr, "nxagentParseSingleOption: Warning: value [%s] of option [%s] "
"out of range, clamped to [%lu].\n", "out of range, clamped to [%lu].\n",
validateString(value), validateString(name), tolerance_parse); validateString(value), validateString(name), tolerance_parse);
} }
...@@ -1447,7 +1482,7 @@ static void nxagentParseOptions(char *name, char *value) ...@@ -1447,7 +1482,7 @@ static void nxagentParseOptions(char *name, char *value)
{ {
tolerance_parse = 0; tolerance_parse = 0;
fprintf(stderr, "nxagentParseOptions: Warning: value [%s] of option [%s] " fprintf(stderr, "nxagentParseSingleOption: Warning: value [%s] of option [%s] "
"out of range, clamped to [%lu].\n", "out of range, clamped to [%lu].\n",
validateString(value), validateString(name), tolerance_parse); validateString(value), validateString(name), tolerance_parse);
} }
...@@ -1460,7 +1495,7 @@ static void nxagentParseOptions(char *name, char *value) ...@@ -1460,7 +1495,7 @@ static void nxagentParseOptions(char *name, char *value)
case ToleranceChecksBypass: case ToleranceChecksBypass:
break; break;
default: default:
fprintf(stderr, "nxagentParseOptions: Warning: value [%s] of " fprintf(stderr, "nxagentParseSingleOption: Warning: value [%s] of "
"option [%s] unknown, will be mapped to " "option [%s] unknown, will be mapped to "
"\"Bypass\" [%u] value internally.\n", "\"Bypass\" [%u] value internally.\n",
validateString(value), validateString(name), validateString(value), validateString(name),
...@@ -1495,7 +1530,7 @@ static void nxagentParseOptions(char *name, char *value) ...@@ -1495,7 +1530,7 @@ static void nxagentParseOptions(char *name, char *value)
else else
{ {
#ifdef DEBUG #ifdef DEBUG
fprintf(stderr, "nxagentParseOptions: Ignored option [%s] with value [%s].\n", fprintf(stderr, "nxagentParseSingleOption: Ignored option [%s] with value [%s].\n",
validateString(name), validateString(value)); validateString(name), validateString(value));
#endif #endif
...@@ -1563,7 +1598,7 @@ static void nxagentParseOptionString(char *string) ...@@ -1563,7 +1598,7 @@ static void nxagentParseOptionString(char *string)
value = NULL; value = NULL;
} }
nxagentParseOptions(option, value); nxagentParseSingleOption(option, value);
} }
} }
......
...@@ -480,6 +480,11 @@ As <proxy-port> you can pick an arbitrary (unused) TCP port or Unix ...@@ -480,6 +480,11 @@ As <proxy-port> you can pick an arbitrary (unused) TCP port or Unix
socket file path. This is the port / socket that you have to connect to socket file path. This is the port / socket that you have to connect to
with the \fBnxproxy\fR application. with the \fBnxproxy\fR application.
.PP .PP
The right hand side of an option (the part following the "=" character)
can include URL encoded characters. It is required to URL encode at
least "," (as %2D) and "=" (as %3D) to avoid wrong parsing of the
options string.
.PP
Available \fBnxagent\fR options (as an addition to nx/nx options supported Available \fBnxagent\fR options (as an addition to nx/nx options supported
by nxcomp already): by nxcomp already):
.TP 8 .TP 8
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment