From 921a40c6841951fc6b744751f39c1a0dcf1b94ed Mon Sep 17 00:00:00 2001 From: walker0643 <> Date: Tue, 13 Mar 2018 12:11:17 -0400 Subject: [PATCH 1/6] silence avahi's bonjour warning --- src/gui/src/ZeroconfService.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/gui/src/ZeroconfService.cpp b/src/gui/src/ZeroconfService.cpp index 56618e44..02902ee5 100644 --- a/src/gui/src/ZeroconfService.cpp +++ b/src/gui/src/ZeroconfService.cpp @@ -27,6 +27,13 @@ #include #include +#ifdef _WIN32 +#define WIN32_LEAN_AND_MEAN +#include +#else +#include +#endif + static const QStringList preferedIPAddress( QStringList() << "192.168." << @@ -36,12 +43,29 @@ static const QStringList preferedIPAddress( const char* ZeroconfService:: m_ServerServiceName = "_barrierServerZeroconf._tcp"; const char* ZeroconfService:: m_ClientServiceName = "_barrierClientZeroconf._tcp"; +static void silence_avahi_warning() +{ + // the libavahi folks seemingly find Apple's bonjour API distasteful + // and are quite liberal in taking it out on users...unless we set + // this environmental variable before calling the avahi library. + // additionally, Microsoft does not give us a POSIX setenv() so + // we use their OS-specific API instead + const char *name = "AVAHI_COMPAT_NOWARN"; + const char *value = "1"; +#ifdef _WIN32 + SetEnvironmentVariable(name, value); +#else + setenv(name, value, 1); +#endif +} + ZeroconfService::ZeroconfService(MainWindow* mainWindow) : m_pMainWindow(mainWindow), m_pZeroconfBrowser(0), m_pZeroconfRegister(0), m_ServiceRegistered(false) { + silence_avahi_warning(); if (m_pMainWindow->barrierType() == MainWindow::barrierServer) { if (registerService(true)) { m_pZeroconfBrowser = new ZeroconfBrowser(this); From bac2999d3e06ba592d4b91c1af85459985930327 Mon Sep 17 00:00:00 2001 From: walker0643 <> Date: Tue, 13 Mar 2018 16:55:07 -0400 Subject: [PATCH 2/6] bump version to 2.0.0 --- cmake/Version.cmake | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cmake/Version.cmake b/cmake/Version.cmake index ea565eb1..2f38df2e 100644 --- a/cmake/Version.cmake +++ b/cmake/Version.cmake @@ -1,5 +1,9 @@ cmake_minimum_required (VERSION 3.4) +set (BARRIER_VERSION_MAJOR 2) +set (BARRIER_VERSION_MINOR 0) +set (BARRIER_VERSION_PATCH 0) + # # Barrier Version # From a6008013194d892025c229f3340c01687eb8a927 Mon Sep 17 00:00:00 2001 From: walker0643 <> Date: Tue, 13 Mar 2018 17:06:16 -0400 Subject: [PATCH 3/6] support options to msbuild on windows --- clean_build.bat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clean_build.bat b/clean_build.bat index 9aebadd8..c5e2153e 100644 --- a/clean_build.bat +++ b/clean_build.bat @@ -27,7 +27,7 @@ if ERRORLEVEL 1 goto failed cd build cmake -G "Visual Studio 15 2017 Win64" -D CMAKE_BUILD_TYPE=%B_BUILD_TYPE% -D CMAKE_PREFIX_PATH="%B_QT_FULLPATH%" -D DNSSD_LIB="%B_BONJOUR%\Lib\x64\dnssd.lib" -D QT_VERSION=%B_QT_VER% .. if ERRORLEVEL 1 goto failed -echo @msbuild barrier.sln /p:Platform="x64" /p:Configuration=%B_BUILD_TYPE% /m > make.bat +echo @msbuild barrier.sln /p:Platform="x64" /p:Configuration=%B_BUILD_TYPE% /m %B_BUILD_OPTIONS% > make.bat call make.bat if ERRORLEVEL 1 goto failed if exist bin\Debug ( From 3389a980ea24785545e5e495ff8dc673025fa938 Mon Sep 17 00:00:00 2001 From: walker0643 <> Date: Tue, 13 Mar 2018 18:04:29 -0400 Subject: [PATCH 4/6] remove bogus check for logonui.exe. it was causing false-positives for the need to elevate --- src/lib/platform/MSWindowsWatchdog.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/lib/platform/MSWindowsWatchdog.cpp b/src/lib/platform/MSWindowsWatchdog.cpp index 677e1da7..ba1890e5 100644 --- a/src/lib/platform/MSWindowsWatchdog.cpp +++ b/src/lib/platform/MSWindowsWatchdog.cpp @@ -142,10 +142,7 @@ MSWindowsWatchdog::getUserToken(LPSECURITY_ATTRIBUTES security) // elevate for the uac dialog (consent.exe) but this would be pointless, // since barrier would re-launch as non-elevated after the desk switch, // and so would be unusable with the new elevated process taking focus. - if (m_elevateProcess - || m_autoElevated - || m_session.isProcessInSession("logonui.exe", NULL)) { - + if (m_elevateProcess || m_autoElevated) { LOG((CLOG_DEBUG "getting elevated token, %s", (m_elevateProcess ? "elevation required" : "at login screen"))); @@ -155,8 +152,7 @@ MSWindowsWatchdog::getUserToken(LPSECURITY_ATTRIBUTES security) } return duplicateProcessToken(process, security); - } - else { + } else { LOG((CLOG_DEBUG "getting non-elevated token")); return m_session.getUserToken(security); } From 63a7936e9ffc319c860eb3fc18a0b8989872b4b6 Mon Sep 17 00:00:00 2001 From: walker0643 <> Date: Tue, 13 Mar 2018 16:55:07 -0400 Subject: [PATCH 5/6] update manpages and --help output. fixes #23 --- doc/UpdateManpages.txt | 5 +++ doc/barrierc.1 | 72 ++++++++++++++++++++++++++++++++ doc/barrierc.man | 47 --------------------- doc/{barriers.man => barriers.1} | 50 ++++++++++++++++------ src/lib/barrier/App.h | 4 +- src/lib/barrier/ArgParser.cpp | 3 ++ src/lib/barrier/ClientApp.cpp | 7 ++-- src/lib/barrier/ServerApp.cpp | 11 ++--- 8 files changed, 129 insertions(+), 70 deletions(-) create mode 100644 doc/UpdateManpages.txt create mode 100644 doc/barrierc.1 delete mode 100644 doc/barrierc.man rename doc/{barriers.man => barriers.1} (50%) diff --git a/doc/UpdateManpages.txt b/doc/UpdateManpages.txt new file mode 100644 index 00000000..cdbe86f4 --- /dev/null +++ b/doc/UpdateManpages.txt @@ -0,0 +1,5 @@ +To recreate the barrierc manpage use a command like: + help2man -N --output=barrierc.1 --name='Barrier Keyboard/Mouse Client' /path/to/barrierc + +And for barriers: + help2man -N --output=barriers.1 --name='Barrier Keyboard/Mouse Server' /path/to/barriers diff --git a/doc/barrierc.1 b/doc/barrierc.1 new file mode 100644 index 00000000..404df900 --- /dev/null +++ b/doc/barrierc.1 @@ -0,0 +1,72 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.6. +.TH BARRIERC "1" "March 2018" "barrierc 2.0.0, protocol version 1.6" "User Commands" +.SH NAME +barrierc \- Barrier Keyboard/Mouse Client +.SH SYNOPSIS +.B barrierc +[\fI\,--yscroll \/\fR] [\fI\,--display \/\fR] [\fI\,--no-xinitthreads\/\fR] [\fI\,--daemon|--no-daemon\/\fR] [\fI\,--name \/\fR] [\fI\,--restart|--no-restart\/\fR] [\fI\,--debug \/\fR] \fI\,\/\fR +.SH DESCRIPTION +Start the barrier client and connect to a remote server component. +.SH OPTIONS +.TP +\fB\-d\fR, \fB\-\-debug\fR +filter out log messages with priority below level. +level may be: FATAL, ERROR, WARNING, NOTE, INFO, +DEBUG, DEBUG1, DEBUG2. +.TP +\fB\-n\fR, \fB\-\-name\fR use screen\-name instead the hostname to identify +this screen in the configuration. +.TP +\fB\-1\fR, \fB\-\-no\-restart\fR +do not try to restart on failure. +.TP +\fB\-\-restart\fR +restart the server automatically if it fails. (*) +.TP +\fB\-l\fR \fB\-\-log\fR +write log messages to file. +.TP +\fB\-\-no\-tray\fR +disable the system tray icon. +.TP +\fB\-\-enable\-drag\-drop\fR +enable file drag & drop. +.TP +\fB\-\-enable\-crypto\fR +enable the crypto (ssl) plugin. +.TP +\fB\-\-display\fR +connect to the X server at +.TP +\fB\-\-no\-xinitthreads\fR +do not call XInitThreads() +.TP +\fB\-f\fR, \fB\-\-no\-daemon\fR +run in the foreground. +.TP +\fB\-\-daemon\fR +run as a daemon. (*) +.TP +\fB\-\-yscroll\fR +defines the vertical scrolling delta, which is +120 by default. +.TP +\fB\-h\fR, \fB\-\-help\fR +display this help and exit. +.TP +\fB\-\-version\fR +display version information and exit. +.PP +Default options are marked with a * +.PP +The server address is of the form: [][:]. The hostname +must be the address or hostname of the server. The port overrides the +default port, 24800. +.SH COPYRIGHT +Copyright \(co 2018 Debauchee Open Source Group +.br +Copyright \(co 2012\-2016 Symless Ltd. +.br +Copyright \(co 2008\-2014 Nick Bolton +.br +Copyright \(co 2002\-2014 Chris Schoeneman diff --git a/doc/barrierc.man b/doc/barrierc.man deleted file mode 100644 index a1174c67..00000000 --- a/doc/barrierc.man +++ /dev/null @@ -1,47 +0,0 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.38.2. -.TH BARRIERC "1" "June 2010" "barrierc 1.5.0, protocol version 1.3" "User Commands" -.SH NAME -barrierc \- manual page for barrierc 1.5.0, protocol version 1.3 -.SH SYNOPSIS -.B barrierc -[\fI--yscroll \fR] [\fI--daemon|--no-daemon\fR] [\fI--name \fR] [\fI--restart|--no-restart\fR] [\fI--debug \fR] \fI\fR -.SH DESCRIPTION -Connect to a barrier mouse/keyboard sharing server. -.TP -\fB\-d\fR, \fB\-\-debug\fR -filter out log messages with priority below level. -level may be: FATAL, ERROR, WARNING, NOTE, INFO, -DEBUG, DEBUGn (1\-5). -.TP -\fB\-n\fR, \fB\-\-name\fR use screen\-name instead the hostname to identify -this screen in the configuration. -.TP -\fB\-1\fR, \fB\-\-no\-restart\fR -do not try to restart on failure. -.PP -* \fB\-\-restart\fR restart the server automatically if it fails. -.TP -\fB\-l\fR \fB\-\-log\fR -write log messages to file. -.TP -\fB\-f\fR, \fB\-\-no\-daemon\fR -run in the foreground. -.PP -* \fB\-\-daemon\fR run as a daemon. -.TP -\fB\-\-yscroll\fR -defines the vertical scrolling delta, which is -.TP -\fB\-h\fR, \fB\-\-help\fR -display this help and exit. -.TP -\fB\-\-version\fR -display version information and exit. -.PP -* marks defaults. -.PP -The server address is of the form: [][:]. The hostname -must be the address or hostname of the server. The port overrides the -default port, 24800. -.SH COPYRIGHT -Copyright \(co 2010 Chris Schoeneman, Nick Bolton, Sorin Sbarnea diff --git a/doc/barriers.man b/doc/barriers.1 similarity index 50% rename from doc/barriers.man rename to doc/barriers.1 index 64b9c385..655d4175 100644 --- a/doc/barriers.man +++ b/doc/barriers.1 @@ -1,12 +1,13 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.38.2. -.TH BARRIERS "1" "June 2010" "barriers 1.5.0, protocol version 1.3" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.6. +.TH BARRIERS "1" "March 2018" "barriers 2.0.0, protocol version 1.6" "User Commands" .SH NAME -barriers \- manual page for barriers 1.5.0, protocol version 1.3 +barriers \- Barrier Keyboard/Mouse Server .SH SYNOPSIS .B barriers -[\fI--address
\fR] [\fI--config \fR] [\fI--daemon|--no-daemon\fR] [\fI--name \fR] [\fI--restart|--no-restart\fR] [\fI--debug \fR] +[\fI\,--address
\/\fR] [\fI\,--config \/\fR] [\fI\,--display \/\fR] [\fI\,--no-xinitthreads\/\fR] [\fI\,--daemon|--no-daemon\/\fR] [\fI\,--name \/\fR] [\fI\,--restart|--no-restart\/\fR] [\fI\,--debug \/\fR] .SH DESCRIPTION -Start the barrier mouse/keyboard sharing server. +Start the barrier server component. +.SH OPTIONS .TP \fB\-a\fR, \fB\-\-address\fR
listen for clients on the given address. @@ -17,23 +18,40 @@ use the named configuration file instead. \fB\-d\fR, \fB\-\-debug\fR filter out log messages with priority below level. level may be: FATAL, ERROR, WARNING, NOTE, INFO, -DEBUG, DEBUGn (1\-5). +DEBUG, DEBUG1, DEBUG2. .TP \fB\-n\fR, \fB\-\-name\fR use screen\-name instead the hostname to identify this screen in the configuration. .TP \fB\-1\fR, \fB\-\-no\-restart\fR do not try to restart on failure. -.PP -* \fB\-\-restart\fR restart the server automatically if it fails. +.TP +\fB\-\-restart\fR +restart the server automatically if it fails. (*) .TP \fB\-l\fR \fB\-\-log\fR write log messages to file. .TP +\fB\-\-no\-tray\fR +disable the system tray icon. +.TP +\fB\-\-enable\-drag\-drop\fR +enable file drag & drop. +.TP +\fB\-\-enable\-crypto\fR +enable the crypto (ssl) plugin. +.TP +\fB\-\-display\fR +connect to the X server at +.TP +\fB\-\-no\-xinitthreads\fR +do not call XInitThreads() +.TP \fB\-f\fR, \fB\-\-no\-daemon\fR run in the foreground. -.PP -* \fB\-\-daemon\fR run as a daemon. +.TP +\fB\-\-daemon\fR +run as a daemon. (*) .TP \fB\-h\fR, \fB\-\-help\fR display this help and exit. @@ -41,7 +59,7 @@ display this help and exit. \fB\-\-version\fR display version information and exit. .PP -* marks defaults. +Default options are marked with a * .PP The argument for \fB\-\-address\fR is of the form: [][:]. The hostname must be the address or hostname of an interface on the system. @@ -52,6 +70,12 @@ If no configuration file pathname is provided then the first of the following to load successfully sets the configuration: .IP $HOME/.barrier.conf -/etc/barrier.conf +\fI\,/etc/barrier.conf\/\fP .SH COPYRIGHT -Copyright \(co 2010 Chris Schoeneman, Nick Bolton, Sorin Sbarnea +Copyright \(co 2018 Debauchee Open Source Group +.br +Copyright \(co 2012\-2016 Symless Ltd. +.br +Copyright \(co 2008\-2014 Nick Bolton +.br +Copyright \(co 2002\-2014 Chris Schoeneman diff --git a/src/lib/barrier/App.h b/src/lib/barrier/App.h index dccf6a67..b7c77a00 100644 --- a/src/lib/barrier/App.h +++ b/src/lib/barrier/App.h @@ -160,7 +160,7 @@ private: " -n, --name use screen-name instead the hostname to identify\n" \ " this screen in the configuration.\n" \ " -1, --no-restart do not try to restart on failure.\n" \ - "* --restart restart the server automatically if it fails.\n" \ + " --restart restart the server automatically if it fails. (*)\n" \ " -l --log write log messages to file.\n" \ " --no-tray disable the system tray icon.\n" \ " --enable-drag-drop enable file drag & drop.\n" \ @@ -183,7 +183,7 @@ private: " [--daemon|--no-daemon]" # define HELP_SYS_INFO \ " -f, --no-daemon run in the foreground.\n" \ - "* --daemon run as a daemon.\n" + " --daemon run as a daemon. (*)\n" #elif SYSAPI_WIN32 diff --git a/src/lib/barrier/ArgParser.cpp b/src/lib/barrier/ArgParser.cpp index 88906542..20e849cf 100644 --- a/src/lib/barrier/ArgParser.cpp +++ b/src/lib/barrier/ArgParser.cpp @@ -112,6 +112,9 @@ ArgParser::parseClientArgs(ClientArgs& args, int argc, const char* const* argv) } } + if (args.m_shouldExit) + return true; + // exactly one non-option argument (server-address) if (i == argc) { LOG((CLOG_PRINT "%s: a server address or name is required" BYE, diff --git a/src/lib/barrier/ClientApp.cpp b/src/lib/barrier/ClientApp.cpp index 1da57cab..6986245a 100644 --- a/src/lib/barrier/ClientApp.cpp +++ b/src/lib/barrier/ClientApp.cpp @@ -122,6 +122,8 @@ ClientApp::help() char buffer[2000]; sprintf( buffer, + "Start the barrier client and connect to a remote server component.\n" + "\n" "Usage: %s" " [--yscroll ]" WINAPI_ARG @@ -129,8 +131,7 @@ ClientApp::help() HELP_COMMON_ARGS " " "\n\n" - "Connect to a barrier mouse/keyboard sharing server.\n" - "\n" + "Options:\n" HELP_COMMON_INFO_1 WINAPI_INFO HELP_SYS_INFO @@ -138,7 +139,7 @@ ClientApp::help() " 120 by default.\n" HELP_COMMON_INFO_2 "\n" - "* marks defaults.\n" + "Default options are marked with a *\n" "\n" "The server address is of the form: [][:]. The hostname\n" "must be the address or hostname of the server. The port overrides the\n" diff --git a/src/lib/barrier/ServerApp.cpp b/src/lib/barrier/ServerApp.cpp index 78292590..eb520cac 100644 --- a/src/lib/barrier/ServerApp.cpp +++ b/src/lib/barrier/ServerApp.cpp @@ -123,6 +123,8 @@ ServerApp::help() char buffer[3000]; sprintf( buffer, + "Start the barrier server component.\n" + "\n" "Usage: %s" " [--address
]" " [--config ]" @@ -130,8 +132,7 @@ ServerApp::help() HELP_SYS_ARGS HELP_COMMON_ARGS "\n\n" - "Start the barrier mouse/keyboard sharing server.\n" - "\n" + "Options:\n" " -a, --address
listen for clients on the given address.\n" " -c, --config use the named configuration file instead.\n" HELP_COMMON_INFO_1 @@ -139,7 +140,7 @@ ServerApp::help() HELP_SYS_INFO HELP_COMMON_INFO_2 "\n" - "* marks defaults.\n" + "Default options are marked with a *\n" "\n" "The argument for --address is of the form: [][:]. The\n" "hostname must be the address or hostname of an interface on the system.\n" @@ -148,10 +149,10 @@ ServerApp::help() "\n" "If no configuration file pathname is provided then the first of the\n" "following to load successfully sets the configuration:\n" - " %s\n" + " $HOME/%s\n" " %s\n", args().m_pname, kDefaultPort, - ARCH->concatPath(ARCH->getUserDirectory(), USR_CONFIG_NAME).c_str(), + USR_CONFIG_NAME, ARCH->concatPath(ARCH->getSystemDirectory(), SYS_CONFIG_NAME).c_str() ); From d75bdb8ec0ba89c0b68cfd8b16992cf7fc4f294a Mon Sep 17 00:00:00 2001 From: walker0643 <> Date: Sat, 17 Mar 2018 16:55:53 -0400 Subject: [PATCH 6/6] clean up --help output for barriers/barrierc at kloetzl's request. ref commit 63a7936 --- src/lib/barrier/ClientApp.cpp | 47 +++++++++++---------------- src/lib/barrier/ServerApp.cpp | 61 ++++++++++++++--------------------- 2 files changed, 44 insertions(+), 64 deletions(-) diff --git a/src/lib/barrier/ClientApp.cpp b/src/lib/barrier/ClientApp.cpp index 6986245a..ca9ac4ce 100644 --- a/src/lib/barrier/ClientApp.cpp +++ b/src/lib/barrier/ClientApp.cpp @@ -59,6 +59,7 @@ #include #include +#include #define RETRY_TIME 1.0 @@ -119,35 +120,25 @@ ClientApp::help() # define WINAPI_INFO #endif - char buffer[2000]; - sprintf( - buffer, - "Start the barrier client and connect to a remote server component.\n" - "\n" - "Usage: %s" - " [--yscroll ]" - WINAPI_ARG - HELP_SYS_ARGS - HELP_COMMON_ARGS - " " - "\n\n" - "Options:\n" - HELP_COMMON_INFO_1 - WINAPI_INFO - HELP_SYS_INFO - " --yscroll defines the vertical scrolling delta, which is\n" - " 120 by default.\n" - HELP_COMMON_INFO_2 - "\n" - "Default options are marked with a *\n" - "\n" - "The server address is of the form: [][:]. The hostname\n" - "must be the address or hostname of the server. The port overrides the\n" - "default port, %d.\n", - args().m_pname, kDefaultPort - ); + std::ostringstream buffer; + buffer << "Start the barrier client and connect to a remote server component." << std::endl + << std::endl + << "Usage: " << args().m_pname << " [--yscroll ]" << WINAPI_ARG << HELP_SYS_ARGS + << HELP_COMMON_ARGS << " " << std::endl + << std::endl + << "Options:" << std::endl + << HELP_COMMON_INFO_1 << WINAPI_INFO << HELP_SYS_INFO + << " --yscroll defines the vertical scrolling delta, which is" << std::endl + << " 120 by default." << std::endl + << HELP_COMMON_INFO_2 + << std::endl + << "Default options are marked with a *" << std::endl + << std::endl + << "The server address is of the form: [][:]. The hostname" << std::endl + << "must be the address or hostname of the server. The port overrides the" << std::endl + << "default port, " << kDefaultPort << "." << std::endl; - LOG((CLOG_PRINT "%s", buffer)); + LOG((CLOG_PRINT "%s", buffer.str().c_str())); } const char* diff --git a/src/lib/barrier/ServerApp.cpp b/src/lib/barrier/ServerApp.cpp index eb520cac..b9df07cb 100644 --- a/src/lib/barrier/ServerApp.cpp +++ b/src/lib/barrier/ServerApp.cpp @@ -59,6 +59,7 @@ #include #include #include +#include // // ServerApp @@ -120,43 +121,31 @@ ServerApp::help() # define WINAPI_INFO #endif - char buffer[3000]; - sprintf( - buffer, - "Start the barrier server component.\n" - "\n" - "Usage: %s" - " [--address
]" - " [--config ]" - WINAPI_ARGS - HELP_SYS_ARGS - HELP_COMMON_ARGS - "\n\n" - "Options:\n" - " -a, --address
listen for clients on the given address.\n" - " -c, --config use the named configuration file instead.\n" - HELP_COMMON_INFO_1 - WINAPI_INFO - HELP_SYS_INFO - HELP_COMMON_INFO_2 - "\n" - "Default options are marked with a *\n" - "\n" - "The argument for --address is of the form: [][:]. The\n" - "hostname must be the address or hostname of an interface on the system.\n" - "The default is to listen on all interfaces. The port overrides the\n" - "default port, %d.\n" - "\n" - "If no configuration file pathname is provided then the first of the\n" - "following to load successfully sets the configuration:\n" - " $HOME/%s\n" - " %s\n", - args().m_pname, kDefaultPort, - USR_CONFIG_NAME, - ARCH->concatPath(ARCH->getSystemDirectory(), SYS_CONFIG_NAME).c_str() - ); + std::ostringstream buffer; + buffer << "Start the barrier server component." << std::endl + << std::endl + << "Usage: " << args().m_pname + << " [--address
]" + << " [--config ]" + << WINAPI_ARGS << HELP_SYS_ARGS << HELP_COMMON_ARGS << std::endl + << std::endl + << "Options:" << std::endl + << " -a, --address
listen for clients on the given address." << std::endl + << " -c, --config use the named configuration file instead." << std::endl + << HELP_COMMON_INFO_1 << WINAPI_INFO << HELP_SYS_INFO << HELP_COMMON_INFO_2 << std::endl + << "Default options are marked with a *" << std::endl + << std::endl + << "The argument for --address is of the form: [][:]. The" << std::endl + << "hostname must be the address or hostname of an interface on the system." << std::endl + << "The default is to listen on all interfaces. The port overrides the" << std::endl + << "default port, " << kDefaultPort << "." << std::endl + << std::endl + << "If no configuration file pathname is provided then the first of the" << std::endl + << "following to load successfully sets the configuration:" << std::endl + << " $HOME/" << USR_CONFIG_NAME << std::endl + << " " << ARCH->concatPath(ARCH->getSystemDirectory(), SYS_CONFIG_NAME) << std::endl; - LOG((CLOG_PRINT "%s", buffer)); + LOG((CLOG_PRINT "%s", buffer.str().c_str())); } void