diff --git a/airdcppd/Client.cpp b/airdcppd/Client.cpp index 5e677592..8a9ec05e 100644 --- a/airdcppd/Client.cpp +++ b/airdcppd/Client.cpp @@ -21,7 +21,6 @@ #include #include -// #include #include #include @@ -43,8 +42,8 @@ Client::Client(bool aAsDaemon) : asDaemon(aAsDaemon) { } -void Client::run() { - if (!startup()) { +void Client::run(const dcpp::StartupParams& aStartupParams) { + if (!startup(aStartupParams)) { return; } @@ -99,7 +98,7 @@ void progressF(float aProgress) { // Not implemented } -bool Client::startup() { +bool Client::startup(const dcpp::StartupParams& aStartupParams) { webserver::WebServerManager::newInstance(); auto wsm = webserver::WebServerManager::getInstance(); @@ -117,7 +116,7 @@ bool Client::startup() { progressF, nullptr, // module init [&](StartupLoader& aLoader) { // module load - auto webResources = AppUtil::getStartupParam("--web-resources"); + auto webResources = aStartupParams.getValue("--web-resources"); aLoader.stepF(STRING(WEB_SERVER)); serverStarted = wsm->startup( webErrorF, @@ -146,16 +145,18 @@ bool Client::startup() { TimerManager::getInstance()->start(); UpdateManager::getInstance()->init(); - if (!AppUtil::hasStartupParam("--no-autoconnect")) { + if (!aStartupParams.hasParam("--no-autoconnect")) { FavoriteManager::getInstance()->autoConnect(); } - auto cdmHub = AppUtil::hasStartupParam("--cdm-hub"); - auto cdmClient = AppUtil::hasStartupParam("--cdm-client"); - auto cdmWeb = AppUtil::hasStartupParam("--cdm-web"); - if (cdmHub || cdmClient || cdmWeb) { - cdmDebug.reset(new CDMDebug(cdmClient, cdmHub, cdmWeb)); - } + { + auto cdmHub = aStartupParams.hasParam("--cdm-hub"); + auto cdmClient = aStartupParams.hasParam("--cdm-client"); + auto cdmWeb = aStartupParams.hasParam("--cdm-web"); + if (cdmHub || cdmClient || cdmWeb) { + cdmDebug.reset(new CDMDebug(cdmClient, cdmHub, cdmWeb)); + } + } running = true; return true; diff --git a/airdcppd/Client.h b/airdcppd/Client.h index 6a13bdae..4d921f45 100644 --- a/airdcppd/Client.h +++ b/airdcppd/Client.h @@ -24,6 +24,7 @@ #include #include #include +#include namespace airdcppd { @@ -34,10 +35,10 @@ class Client : private ClientManagerListener, private DirectoryListingManagerLis public: Client(bool aAsDaemon); - void run(); + void run(const dcpp::StartupParams& aStartupParams); void stop(); private: - bool startup(); + bool startup(const dcpp::StartupParams& aStartupParams); void shutdown(); void on(DirectoryListingManagerListener::OpenListing, const DirectoryListingPtr& aList, const string& aDir, const string& aXML) noexcept; diff --git a/airdcppd/ConfigPrompt.cpp b/airdcppd/ConfigPrompt.cpp index abe1e636..e3c76868 100644 --- a/airdcppd/ConfigPrompt.cpp +++ b/airdcppd/ConfigPrompt.cpp @@ -20,8 +20,8 @@ #include -#include #include +#include #include #include @@ -36,15 +36,15 @@ std::string ConfigPrompt::toBold(const std::string& aText) { return "\e[1m" + aText + "\e[0m"; } -ConfigPrompt::ConfigF ConfigPrompt::checkArgs() { +ConfigPrompt::ConfigF ConfigPrompt::checkArgs(const dcpp::StartupParams& aStartupParams) { std::function f = nullptr; - if (AppUtil::hasStartupParam("--configure")) { + if (aStartupParams.hasParam("--configure")) { f = &runConfigure; - } else if (AppUtil::hasStartupParam("--add-user")) { + } else if (aStartupParams.hasParam("--add-user")) { f = &addUser; - } else if (AppUtil::hasStartupParam("--remove-user")) { + } else if (aStartupParams.hasParam("--remove-user")) { f = &removeUser; - } else if (AppUtil::hasStartupParam("--list-users")) { + } else if (aStartupParams.hasParam("--list-users")) { f = &listUsers; } diff --git a/airdcppd/ConfigPrompt.h b/airdcppd/ConfigPrompt.h index 959e6bc5..630dd411 100644 --- a/airdcppd/ConfigPrompt.h +++ b/airdcppd/ConfigPrompt.h @@ -27,13 +27,17 @@ namespace webserver { class WebServerManager; } +namespace dcpp { + class StartupParams; +} + namespace airdcppd { class ConfigPrompt { public: typedef std::function ConfigF; - static ConfigF checkArgs(); + static ConfigF checkArgs(const dcpp::StartupParams& aStartupParams); static void setPasswordMode(bool enabled) noexcept; private: diff --git a/airdcppd/main.cpp b/airdcppd/main.cpp index 2d2ac7ae..9025a720 100755 --- a/airdcppd/main.cpp +++ b/airdcppd/main.cpp @@ -165,14 +165,16 @@ static void installHandler() { }); } -static void savePid(int aPid, const string& aConfigPath) noexcept { - auto pidParam = AppUtil::getStartupParam("-p"); - if (pidParam) { - pidFileName = *pidParam; - } else { - pidFileName = File::makeAbsolutePath(aConfigPath, "airdcppd.pid"); - } +static void setPidFilePath(const string& aConfigPath, const dcpp::StartupParams& aStartupParams) { + auto pidParam = aStartupParams.getValue("-p"); + if (pidParam) { + pidFileName = *pidParam; + } else { + pidFileName = File::makeAbsolutePath(aConfigPath, "airdcppd.pid"); + } +} +static void savePid(int aPid) noexcept { try { pidFile.reset(new File(pidFileName, File::WRITE, File::CREATE | File::OPEN | File::TRUNCATE)); pidFile->write(Util::toString(aPid)); @@ -188,8 +190,8 @@ static void reportError(const char* aMessage) noexcept { #include -static void daemonize(const string& aConfigPath) noexcept { - auto doFork = [&aConfigPath](const char* aErrorMessage) { +static void daemonize(const dcpp::StartupParams& aStartupParams) noexcept { + auto doFork = [&](const char* aErrorMessage) { auto ret = fork(); switch(ret) { @@ -198,7 +200,7 @@ static void daemonize(const string& aConfigPath) noexcept { exit(5); case 0: break; default: - savePid(ret, aConfigPath); + savePid(ret); //printf("%d\n", ret); fflush(stdout); _exit(0); } @@ -237,15 +239,15 @@ static void daemonize(const string& aConfigPath) noexcept { #include -static void runDaemon(const string& aConfigPath) { - daemonize(aConfigPath); +static void runDaemon(const dcpp::StartupParams& aStartupParams) { + daemonize(aStartupParams); try { client = unique_ptr(new airdcppd::Client(asdaemon)); init(); - client->run(); + client->run(aStartupParams); client.reset(); } catch(const std::exception& e) { @@ -255,10 +257,10 @@ static void runDaemon(const string& aConfigPath) { uninit(); } -static void runConsole(const string& aConfigPath) { +static void runConsole(const dcpp::StartupParams& aStartupParams) { printf("Starting.\n"); fflush(stdout); - savePid(static_cast(getpid()), aConfigPath); + savePid(static_cast(getpid())); try { client = unique_ptr(new airdcppd::Client(asdaemon)); @@ -266,7 +268,7 @@ static void runConsole(const string& aConfigPath) { init(); - client->run(); + client->run(aStartupParams); client.reset(); } catch(const std::exception& e) { @@ -322,26 +324,28 @@ static void setApp(char* argv[]) { int main(int argc, char* argv[]) { setApp(argv); + dcpp::StartupParams startupParams; while (argc > 0) { - AppUtil::addStartupParam(Text::toUtf8(*argv)); + startupParams.addParam(Text::toUtf8(*argv)); argc--; argv++; } - if (dcpp::AppUtil::hasStartupParam("-h") || AppUtil::hasStartupParam("--help")) { + if (startupParams.hasParam("-h") || startupParams.hasParam("--help")) { printUsage(); return 0; } - if (dcpp::AppUtil::hasStartupParam("-v") || AppUtil::hasStartupParam("--version")) { + if (startupParams.hasParam("-v") || startupParams.hasParam("--version")) { printf("%s\n", shortVersionString.c_str()); return 0; } - auto configDir = AppUtil::getStartupParam("-c"); - - initializeUtil(configDir ? *configDir : ""); - auto configF = airdcppd::ConfigPrompt::checkArgs(); + { + auto customConfigDir = startupParams.getValue("-c"); + initializeUtil(customConfigDir ? *customConfigDir : ""); + } + auto configF = airdcppd::ConfigPrompt::checkArgs(startupParams); if (configF) { init(); signal(SIGINT, [](int) { @@ -357,7 +361,7 @@ int main(int argc, char* argv[]) { return 0; } - if (dcpp::AppUtil::hasStartupParam("-d")) { + if (startupParams.hasParam("-d")) { asdaemon = true; } @@ -365,9 +369,10 @@ int main(int argc, char* argv[]) { setlocale(LC_ALL, ""); string configPath = AppUtil::getPath(AppUtil::PATH_USER_CONFIG); + setPidFilePath(configPath, startupParams); if (asdaemon) { - runDaemon(configPath); + runDaemon(startupParams); } else { - runConsole(configPath); + runConsole(startupParams); } }