Skip to content

Commit

Permalink
Update startup param handling for the latest core
Browse files Browse the repository at this point in the history
  • Loading branch information
maksis committed Sep 10, 2024
1 parent 5cde830 commit 6815132
Show file tree
Hide file tree
Showing 5 changed files with 58 additions and 47 deletions.
25 changes: 13 additions & 12 deletions airdcppd/Client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@

#include <airdcpp/DCPlusPlus.h>
#include <airdcpp/AppUtil.h>
// #include <airdcpp/Util.h>

#include <airdcpp/ActivityManager.h>
#include <airdcpp/ClientManager.h>
Expand All @@ -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;
}

Expand Down Expand Up @@ -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();
Expand All @@ -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,
Expand Down Expand Up @@ -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;
Expand Down
5 changes: 3 additions & 2 deletions airdcppd/Client.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
#include <airdcpp/ClientManagerListener.h>
#include <airdcpp/DirectoryListingManagerListener.h>
#include <airdcpp/Semaphore.h>
#include <airdcpp/StartupParams.h>


namespace airdcppd {
Expand All @@ -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;
Expand Down
12 changes: 6 additions & 6 deletions airdcppd/ConfigPrompt.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@

#include <airdcpp/stdinc.h>

#include <airdcpp/AppUtil.h>
#include <airdcpp/ScopedFunctor.h>
#include <airdcpp/StartupParams.h>
#include <airdcpp/Util.h>

#include <web-server/WebServerManager.h>
Expand All @@ -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<bool(webserver::WebServerManager*)> 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;
}

Expand Down
6 changes: 5 additions & 1 deletion airdcppd/ConfigPrompt.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,17 @@ namespace webserver {
class WebServerManager;
}

namespace dcpp {
class StartupParams;
}

namespace airdcppd {

class ConfigPrompt {

public:
typedef std::function<void()> ConfigF;
static ConfigF checkArgs();
static ConfigF checkArgs(const dcpp::StartupParams& aStartupParams);

static void setPasswordMode(bool enabled) noexcept;
private:
Expand Down
57 changes: 31 additions & 26 deletions airdcppd/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand All @@ -188,8 +190,8 @@ static void reportError(const char* aMessage) noexcept {

#include <fcntl.h>

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) {
Expand All @@ -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);
}
Expand Down Expand Up @@ -237,15 +239,15 @@ static void daemonize(const string& aConfigPath) noexcept {

#include <sys/wait.h>

static void runDaemon(const string& aConfigPath) {
daemonize(aConfigPath);
static void runDaemon(const dcpp::StartupParams& aStartupParams) {
daemonize(aStartupParams);

try {
client = unique_ptr<airdcppd::Client>(new airdcppd::Client(asdaemon));

init();

client->run();
client->run(aStartupParams);

client.reset();
} catch(const std::exception& e) {
Expand All @@ -255,18 +257,18 @@ 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<int>(getpid()), aConfigPath);
savePid(static_cast<int>(getpid()));

try {
client = unique_ptr<airdcppd::Client>(new airdcppd::Client(asdaemon));
printf("."); fflush(stdout);

init();

client->run();
client->run(aStartupParams);

client.reset();
} catch(const std::exception& e) {
Expand Down Expand Up @@ -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) {
Expand All @@ -357,17 +361,18 @@ int main(int argc, char* argv[]) {
return 0;
}

if (dcpp::AppUtil::hasStartupParam("-d")) {
if (startupParams.hasParam("-d")) {
asdaemon = true;
}


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);
}
}

0 comments on commit 6815132

Please sign in to comment.