diff options
author | Chris Wilson <chris+github@qwirx.com> | 2007-10-17 12:54:17 +0000 |
---|---|---|
committer | Chris Wilson <chris+github@qwirx.com> | 2007-10-17 12:54:17 +0000 |
commit | 7239aaba320fbc24dd608585ca417f804dab1950 (patch) | |
tree | 465db401c818c065a8b955618366c29ca94b11b2 | |
parent | 891cf7aa3028cd32ee8c4f13cc24ec0cef774620 (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])
-rw-r--r-- | bin/bbackupd/BackupDaemon.cpp | 20 | ||||
-rw-r--r-- | bin/bbackupd/BackupDaemon.h | 3 | ||||
-rw-r--r-- | bin/bbstored/BackupStoreDaemon.cpp | 7 | ||||
-rw-r--r-- | bin/bbstored/BackupStoreDaemon.h | 2 | ||||
-rw-r--r-- | lib/server/Daemon.cpp | 73 | ||||
-rw-r--r-- | lib/server/Daemon.h | 4 |
6 files changed, 80 insertions, 29 deletions
diff --git a/bin/bbackupd/BackupDaemon.cpp b/bin/bbackupd/BackupDaemon.cpp index 2f993b36..aaae003d 100644 --- a/bin/bbackupd/BackupDaemon.cpp +++ b/bin/bbackupd/BackupDaemon.cpp @@ -38,6 +38,8 @@ #include <process.h> #endif +#include <iostream> + #include "Configuration.h" #include "IOStream.h" #include "MemBlockStream.h" @@ -209,13 +211,21 @@ const char *BackupDaemon::DaemonName() const // Created: 1/1/04 // // -------------------------------------------------------------------------- -const char *BackupDaemon::DaemonBanner() const +std::string BackupDaemon::DaemonBanner() const { -#ifndef NDEBUG - // Don't display banner in debug builds - return 0; -#else return BANNER_TEXT("Backup Client"); +} + +void BackupDaemon::Usage() +{ + this->Daemon::Usage(); + +#ifdef WIN32 + std::cout << + " -s Run as a Windows Service, for internal use only\n" + " -i Install Windows Service (you may want to specify a config file)\n" + " -r Remove Windows Service\n" + " -S <name> Service name for -i and -r options\n"; #endif } diff --git a/bin/bbackupd/BackupDaemon.h b/bin/bbackupd/BackupDaemon.h index 3951a8aa..62f9c393 100644 --- a/bin/bbackupd/BackupDaemon.h +++ b/bin/bbackupd/BackupDaemon.h @@ -69,7 +69,8 @@ public: void Run(); virtual const char *DaemonName() const; - virtual const char *DaemonBanner() const; + virtual std::string DaemonBanner() const; + virtual void Usage(); const ConfigurationVerify *GetConfigVerify() const; bool FindLocationPathName(const std::string &rLocationName, std::string &rPathOut) const; diff --git a/bin/bbstored/BackupStoreDaemon.cpp b/bin/bbstored/BackupStoreDaemon.cpp index c5d5fe40..28e28176 100644 --- a/bin/bbstored/BackupStoreDaemon.cpp +++ b/bin/bbstored/BackupStoreDaemon.cpp @@ -93,14 +93,9 @@ const char *BackupStoreDaemon::DaemonName() const // Created: 1/1/04 // // -------------------------------------------------------------------------- -const char *BackupStoreDaemon::DaemonBanner() const +std::string BackupStoreDaemon::DaemonBanner() const { -#ifndef NDEBUG - // Don't display banner in debug builds - return 0; -#else return BANNER_TEXT("Backup Store Server"); -#endif } diff --git a/bin/bbstored/BackupStoreDaemon.h b/bin/bbstored/BackupStoreDaemon.h index eb665440..387a1d5b 100644 --- a/bin/bbstored/BackupStoreDaemon.h +++ b/bin/bbstored/BackupStoreDaemon.h @@ -56,7 +56,7 @@ protected: void Connection2(SocketStreamTLS &rStream); virtual const char *DaemonName() const; - virtual const char *DaemonBanner() const; + virtual std::string DaemonBanner() const; const ConfigurationVerify *GetConfigVerify() const; 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}, \ |