|
|
|
/*
|
|
|
|
* Copyright (c) 2013-2022, The PurpleI2P Project
|
|
|
|
*
|
|
|
|
* This file is part of Purple i2pd project and licensed under BSD3
|
|
|
|
*
|
|
|
|
* See full license text in LICENSE file at top of project tree
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <iostream>
|
|
|
|
#include <chrono>
|
|
|
|
#include <thread>
|
|
|
|
#include <exception>
|
|
|
|
#include <boost/exception/diagnostic_information.hpp>
|
|
|
|
#include <boost/exception_ptr.hpp>
|
|
|
|
//#include "mainwindow.h"
|
|
|
|
#include "FS.h"
|
|
|
|
#include "DaemonAndroid.h"
|
|
|
|
#include "Daemon.h"
|
|
|
|
#include "I18N.h"
|
|
|
|
|
|
|
|
namespace i2p
|
|
|
|
{
|
|
|
|
namespace android
|
|
|
|
{
|
|
|
|
std::string dataDir = "";
|
|
|
|
std::string language = "";
|
|
|
|
|
|
|
|
DaemonAndroidImpl::DaemonAndroidImpl ()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
DaemonAndroidImpl::~DaemonAndroidImpl ()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
bool DaemonAndroidImpl::init(int argc, char* argv[])
|
|
|
|
{
|
|
|
|
return Daemon.init(argc, argv);
|
|
|
|
}
|
|
|
|
|
|
|
|
void DaemonAndroidImpl::start()
|
|
|
|
{
|
|
|
|
Daemon.start();
|
|
|
|
}
|
|
|
|
|
|
|
|
void DaemonAndroidImpl::stop()
|
|
|
|
{
|
|
|
|
Daemon.stop();
|
|
|
|
}
|
|
|
|
|
|
|
|
void DaemonAndroidImpl::restart()
|
|
|
|
{
|
|
|
|
stop();
|
|
|
|
start();
|
|
|
|
}
|
|
|
|
|
|
|
|
void DaemonAndroidImpl::setDataDir(std::string path)
|
|
|
|
{
|
|
|
|
Daemon.setDataDir(path);
|
|
|
|
}
|
|
|
|
|
|
|
|
static DaemonAndroidImpl daemon;
|
|
|
|
static char* argv[1]={strdup("tmp")};
|
|
|
|
/**
|
|
|
|
* returns error details if failed
|
|
|
|
* returns "ok" if daemon initialized and started okay
|
|
|
|
*/
|
|
|
|
std::string start(/*int argc, char* argv[]*/)
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// make sure assets are ready before proceed
|
|
|
|
i2p::fs::DetectDataDir(dataDir, false);
|
|
|
|
int numAttempts = 0;
|
|
|
|
do
|
|
|
|
{
|
|
|
|
if (i2p::fs::Exists (i2p::fs::DataDirPath("assets.ready"))) break; // assets ready
|
|
|
|
numAttempts++;
|
|
|
|
std::this_thread::sleep_for (std::chrono::seconds(1)); // otherwise wait for 1 more second
|
|
|
|
}
|
|
|
|
while (numAttempts <= 10); // 10 seconds max
|
|
|
|
|
|
|
|
// Set application directory
|
|
|
|
daemon.setDataDir(dataDir);
|
|
|
|
|
|
|
|
bool daemonInitSuccess = daemon.init(1, argv);
|
|
|
|
if(!daemonInitSuccess)
|
|
|
|
{
|
|
|
|
return "Daemon init failed";
|
|
|
|
}
|
|
|
|
|
|
|
|
// Set webconsole language from application
|
|
|
|
i2p::i18n::SetLanguage(language);
|
|
|
|
|
|
|
|
daemon.start();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (boost::exception& ex)
|
|
|
|
{
|
|
|
|
std::stringstream ss;
|
|
|
|
ss << boost::diagnostic_information(ex);
|
|
|
|
return ss.str();
|
|
|
|
}
|
|
|
|
catch (std::exception& ex)
|
|
|
|
{
|
|
|
|
std::stringstream ss;
|
|
|
|
ss << ex.what();
|
|
|
|
return ss.str();
|
|
|
|
}
|
|
|
|
catch(...)
|
|
|
|
{
|
|
|
|
return "unknown exception";
|
|
|
|
}
|
|
|
|
return "ok";
|
|
|
|
}
|
|
|
|
|
|
|
|
void stop()
|
|
|
|
{
|
|
|
|
daemon.stop();
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetDataDir(std::string jdataDir)
|
|
|
|
{
|
|
|
|
dataDir = jdataDir;
|
|
|
|
}
|
|
|
|
|
|
|
|
std::string GetDataDir(void)
|
|
|
|
{
|
|
|
|
return dataDir;
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetLanguage(std::string jlanguage)
|
|
|
|
{
|
|
|
|
language = jlanguage;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|