Unverified Commit ab3974f2 authored by Vadim Troshchinskiy's avatar Vadim Troshchinskiy

Merge remote-tracking branch 'sunweaver-pr/pr/nxproxy-read-from-stdin' into 3.6.x

parents dcdbc102 4c2fe0d9
......@@ -13940,7 +13940,7 @@ void PrintProcessInfo()
//
cerr << "Info: Proxy running in "
<< (control -> ProxyMode == proxy_client ? "server" : "client")
<< (control -> ProxyMode == proxy_client ? "client" : "server")
<< " mode with pid '" << getpid() << "'.\n";
if (agent == NULL)
......
......@@ -19,6 +19,8 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <limits.h>
#include "NX.h"
......@@ -27,6 +29,8 @@
#undef TEST
#undef DEBUG
extern const char *__progname;
/*
* Entry point when running nxproxy stand-alone.
*/
......@@ -37,27 +41,74 @@ int main(int argc, const char **argv)
char *options = NULL;
char *nx_commfd_str = NULL;
options = getenv("NX_DISPLAY");
if (NXTransParseCommandLine(argc, argv) < 0)
if ((nx_commfd_str = getenv("NX_COMMFD")) != NULL)
{
NXTransCleanup();
}
errno = 0;
unsigned long int nx_commfd = strtoul(nx_commfd_str, NULL, 10);
if (NXTransParseEnvironment(options, 0) < 0)
{
NXTransCleanup();
if ((errno) && (0 == nx_commfd))
{
fprintf(stderr, "%s: NX_COMMFD environment variable's value [%s] is not a file descriptor number. "
"Aborting...\n",
__progname, nx_commfd_str
);
NXTransCleanup();
}
else if ((unsigned long int) INT_MAX < nx_commfd)
{
fprintf(stderr, "%s: NX_COMMFD environment variable's value [%lu] is out of range for a file descriptor number. "
"Aborting...\n",
__progname, nx_commfd);
NXTransCleanup();
}
else {
result = NXTransCreate(nx_commfd, NX_MODE_SERVER, options);
if (result != 1)
{
fprintf(stderr, "%s: NXTransCreate failed for FD#%lu\n"
"Aborting...",
__progname, nx_commfd);
NXTransCleanup();
}
}
// go into endless loop
if (result == 1)
{
while (NXTransRunning(NX_FD_ANY))
result = NXTransContinue(NULL);
}
}
else
{
/*
* This should not return...
*/
if (NXTransParseCommandLine(argc, argv) < 0)
{
NXTransCleanup();
}
#ifdef TEST
fprintf(stderr, "Main: Yielding control to NX entry point.\n");
#endif
if (NXTransParseEnvironment(options, 0) < 0)
{
NXTransCleanup();
}
result = NXTransProxy(NX_FD_ANY, NX_MODE_ANY, NX_DISPLAY_ANY);
/*
* This should not return...
*/
#ifdef TEST
fprintf(stderr, "%s: Yielding control to NX entry point.\n", __progname);
#endif
result = NXTransProxy(NX_FD_ANY, NX_MODE_ANY, NX_DISPLAY_ANY);
}
/*
* ...So these should not be called.
......
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