summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bin/bbackupd/BackupDaemon.cpp20
-rw-r--r--bin/bbackupd/BackupDaemon.h3
-rw-r--r--bin/bbstored/BackupStoreDaemon.cpp7
-rw-r--r--bin/bbstored/BackupStoreDaemon.h2
-rw-r--r--lib/server/Daemon.cpp73
-rw-r--r--lib/server/Daemon.h4
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}, \