Skip to content

Commit

Permalink
Log to file, reload config and daemon mode
Browse files Browse the repository at this point in the history
  • Loading branch information
meeh420 committed Feb 4, 2014
1 parent 82bd8cc commit 8f1e300
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 9 deletions.
17 changes: 12 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,21 @@ $ ./i2p --host=YOUR_PUBLIC_IP

The client should now reseed by itself.

Other options:
* --port= - The port to listen on
* --httpport= - The http port to listen on


To visit an I2P page, you need to find the b32 address of your destination.
After that, go to the webconsole and add it behind the url. (Remove http:// and b32.i2p from the address)

This should resulting in for example:
http://localhost:7070/4oes3rlgrpbkmzv4lqcfili23h3cvpwslqcfjlk6vvguxyggspwa


Options
-------

* --host= - The external IP
* --port= - The port to listen on
* --httpport= - The http port to listen on
* --log= - Enable or disable logging to file. 1 for yes, 0 for no.
* --daemon= - Eanble or disable daemon mode. 1 for yes, 0 for no.



76 changes: 72 additions & 4 deletions i2p.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
#include <thread>
#include <cryptopp/integer.h>
#include <boost/filesystem.hpp>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
#include "Log.h"
#include "base64.h"
#include "Transports.h"
Expand All @@ -13,6 +16,21 @@
#include "HTTPServer.h"
#include "util.h"

void handle_sighup(int n)
{
if (i2p::util::config::GetArg("daemon", 0) == 1)
{
static bool first=true;
if (first)
{
first=false;
return;
}
}
LogPrint("Reloading config.");
i2p::util::filesystem::ReadConfigFile(i2p::util::config::mapArgs, i2p::util::config::mapMultiArgs);
}

int main( int argc, char* argv[] )
{
i2p::util::config::OptionParser(argc,argv);
Expand All @@ -23,10 +41,51 @@ int main( int argc, char* argv[] )
setlocale(LC_ALL, "Russian");
#endif


LogPrint("\n\n\n\ni2pd starting\n");
LogPrint("data directory: ", i2p::util::filesystem::GetDataDir().string());
i2p::util::filesystem::ReadConfigFile(i2p::util::config::mapArgs, i2p::util::config::mapMultiArgs);

struct sigaction sa;
sa.sa_handler = handle_sighup;
sigemptyset(&sa.sa_mask);
sa.sa_flags = SA_RESTART;
if (sigaction(SIGHUP,&sa,0) == -1)
{
LogPrint("Failed to install SIGHUP handler.");
}

if (i2p::util::config::GetArg("-daemon", 0) == 1)
{
pid_t pid;
pid = fork();
if (pid > 0)
{
g_Log.Stop();
return 0;
}
if (pid < 0)
{
return -1;
}

umask(0);
int sid = setsid();
if (sid < 0)
{
LogPrint("Error, could not create process group.");
return -1;
}
}

if (i2p::util::config::GetArg("-log", 0) == 1)
{
std::string logfile = i2p::util::filesystem::GetDataDir().string();
logfile.append("/debug.log");
LogPrint("Logging to file enabled.");
freopen(logfile.c_str(),"a",stdout);
}

//TODO: This is an ugly workaround. fix it.
//TODO: Autodetect public IP.
i2p::context.OverrideNTCPAddress(i2p::util::config::GetCharArg("-host", "127.0.0.1"),
Expand All @@ -38,12 +97,21 @@ int main( int argc, char* argv[] )
httpServer.Start ();
i2p::data::netdb.Start ();
i2p::transports.Start ();
i2p::tunnel::tunnels.Start ();

std::this_thread::sleep_for (std::chrono::seconds(10000));
i2p::tunnel::tunnels.Start ();

int running = 1;
while (running)
{
std::this_thread::sleep_for (std::chrono::seconds(1000));
}

i2p::tunnel::tunnels.Stop ();
i2p::transports.Stop ();
i2p::data::netdb.Stop ();
httpServer.Stop ();
httpServer.Stop ();
if (i2p::util::config::GetArg("-log", 0) == 1)
{
fclose (stdout);
}
return 0;
}

0 comments on commit 8f1e300

Please sign in to comment.