summaryrefslogtreecommitdiff
path: root/lib/server
diff options
context:
space:
mode:
authorChris Wilson <chris+github@qwirx.com>2007-10-17 12:54:17 +0000
committerChris Wilson <chris+github@qwirx.com>2007-10-17 12:54:17 +0000
commit7239aaba320fbc24dd608585ca417f804dab1950 (patch)
tree465db401c818c065a8b955618366c29ca94b11b2 /lib/server
parent891cf7aa3028cd32ee8c4f13cc24ec0cef774620 (diff)
Add "-h" and "/?" options to display usage in Daemon.
Extend usage info with service commands in BackupDaemon. Disable useless -D, -V and -k options on Windows. (merges 1855])
Diffstat (limited to 'lib/server')
-rw-r--r--lib/server/Daemon.cpp73
-rw-r--r--lib/server/Daemon.h4
2 files changed, 61 insertions, 16 deletions
diff --git a/lib/server/Daemon.cpp b/lib/server/Daemon.cpp
index 29a37b30..cd817e80 100644
--- a/lib/server/Daemon.cpp
+++ b/lib/server/Daemon.cpp
@@ -23,6 +23,8 @@
#include <ws2tcpip.h>
#endif
+#include <iostream>
+
#include "Daemon.h"
#include "Configuration.h"
#include "ServerException.h"
@@ -51,7 +53,8 @@ Daemon::Daemon()
mSingleProcess(false),
mRunInForeground(false),
mKeepConsoleOpenAfterFork(false),
- mHaveConfigFile(false)
+ mHaveConfigFile(false),
+ mAppName(DaemonName())
{
if(spDaemon != NULL)
{
@@ -99,7 +102,33 @@ Daemon::~Daemon()
// --------------------------------------------------------------------------
std::string Daemon::GetOptionString()
{
- return "c:DFqvVt:Tk";
+ return "c:"
+ #ifndef WIN32
+ "DFk"
+ #endif
+ "hqvVt:T";
+}
+
+void Daemon::Usage()
+{
+ std::cout <<
+ DaemonBanner() << "\n"
+ "\n"
+ "Usage: " << mAppName << " [options] [config file]\n" <<
+ "\n"
+ "Options:\n"
+ " -c <file> Use the specified configuration file. If -c is omitted, the last\n"
+ " argument is the configuration file\n"
+#ifndef WIN32
+ " -D Debugging mode, do not fork, one process only, one client only\n"
+ " -F Do not fork into background, but fork to serve multiple clients\n"
+ " -k Keep console open after fork, keep writing log messages to it\n"
+#endif
+ " -q Run more quietly, reduce verbosity level by one, can repeat\n"
+ " -v Run more verbosely, increase verbosity level by one, can repeat\n"
+ " -V Run at maximum verbosity\n"
+ " -t <tag> Tag console output with specified marker\n"
+ " -T Timestamp console output\n";
}
// --------------------------------------------------------------------------
@@ -124,6 +153,7 @@ int Daemon::ProcessOption(signed int option)
}
break;
+#ifndef WIN32
case 'D':
{
mSingleProcess = true;
@@ -136,6 +166,20 @@ int Daemon::ProcessOption(signed int option)
}
break;
+ case 'k':
+ {
+ mKeepConsoleOpenAfterFork = true;
+ }
+ break;
+#endif
+
+ case 'h':
+ {
+ Usage();
+ return 2;
+ }
+ break;
+
case 'q':
{
if(mLogLevel == Log::NOTHING)
@@ -180,12 +224,6 @@ int Daemon::ProcessOption(signed int option)
}
break;
- case 'k':
- {
- mKeepConsoleOpenAfterFork = true;
- }
- break;
-
case '?':
{
BOX_FATAL("Unknown option on command line: "
@@ -219,6 +257,7 @@ int Daemon::Main(const char *DefaultConfigFile, int argc, const char *argv[])
{
// Find filename of config file
mConfigFileName = DefaultConfigFile;
+ mAppName = argv[0];
#ifdef NDEBUG
mLogLevel = Log::NOTICE; // need an int to do math with
@@ -226,6 +265,12 @@ int Daemon::Main(const char *DefaultConfigFile, int argc, const char *argv[])
mLogLevel = Log::INFO; // need an int to do math with
#endif
+ if (argc == 2 && strcmp(argv[1], "/?") == 0)
+ {
+ Usage();
+ return 2;
+ }
+
signed int c;
// reset getopt, just in case anybody used it before.
@@ -283,11 +328,9 @@ int Daemon::Main(const std::string &rConfigFileName)
{
// Banner (optional)
{
- const char *banner = DaemonBanner();
- if(banner != 0)
- {
- BOX_NOTICE(banner);
- }
+ #ifndef NDEBUG
+ BOX_NOTICE(DaemonBanner());
+ #endif
}
std::string pidFileName;
@@ -671,9 +714,9 @@ const char *Daemon::DaemonName() const
// Created: 1/1/04
//
// --------------------------------------------------------------------------
-const char *Daemon::DaemonBanner() const
+std::string Daemon::DaemonBanner() const
{
- return 0;
+ return "Generic daemon using the Box Application Framework";
}
diff --git a/lib/server/Daemon.h b/lib/server/Daemon.h
index 26bf6ff3..482f926e 100644
--- a/lib/server/Daemon.h
+++ b/lib/server/Daemon.h
@@ -50,8 +50,9 @@ public:
const std::string &GetConfigFileName() const {return mConfigFileName;}
virtual const char *DaemonName() const;
- virtual const char *DaemonBanner() const;
+ virtual std::string DaemonBanner() const;
virtual const ConfigurationVerify *GetConfigVerify() const;
+ virtual void Usage();
bool StopRun() {return mReloadConfigWanted | mTerminateWanted;}
bool IsReloadConfigWanted() {return mReloadConfigWanted;}
@@ -87,6 +88,7 @@ private:
bool mHaveConfigFile;
int mLogLevel; // need an int to do math with
static Daemon *spDaemon;
+ std::string mAppName;
};
#define DAEMON_VERIFY_SERVER_KEYS {"PidFile", 0, ConfigTest_Exists, 0}, \