package net.i2p.router.startup;
/*
* free (adj.): unencumbered; not under the control of others
* Written by jrandom in 2003 and released into the public domain
* with no warranty of any kind, either expressed or implied.
* It probably won't make your computer catch on fire, or eat
* your children, but it might. Use at your own risk.
*
*/
import net.i2p.router.Job;
import net.i2p.router.JobImpl;
import net.i2p.router.RouterContext;
import net.i2p.router.RouterClock;
import net.i2p.router.tasks.ReadConfigJob;
import net.i2p.util.Log;
import net.i2p.util.SystemVersion;
/** This actually boots almost everything */
class BootCommSystemJob extends JobImpl {
private final Log _log;
public static final String PROP_USE_TRUSTED_LINKS = "router.trustedLinks";
public BootCommSystemJob(RouterContext context) {
super(context);
_log = context.logManager().getLog(BootCommSystemJob.class);
}
public String getName() { return "Boot Communication System"; }
public void runJob() {
// The netDb and the peer manager both take a long time to start up,
// as they may have to read in ~1000 files or more each
// So turn on the multiple job queues and start these two first.
// These two (plus the current job) will consume 3 of the 4 runners,
// leaving one for everything else, which allows us to start without
// a huge job lag displayed on the console.
getContext().jobQueue().allowParallelOperation();
startupDb();
getContext().jobQueue().addJob(new BootPeerManagerJob(getContext()));
// start up the network comm system
getContext().commSystem().startup();
getContext().tunnelManager().startup();
// start I2CP
getContext().jobQueue().addJob(new StartAcceptingClientsJob(getContext()));
if (!SystemVersion.isAndroid()) {
Job j = new ReadConfigJob(getContext());
j.getTiming().setStartAfter(getContext().clock().now() + 2*60*1000);
getContext().jobQueue().addJob(j);
}
((RouterClock) getContext().clock()).addShiftListener(getContext().router());
}
private void startupDb() {
Job bootDb = new BootNetworkDbJob(getContext());
boolean useTrusted = getContext().getBooleanProperty(PROP_USE_TRUSTED_LINKS);
if (useTrusted) {
_log.debug("Using trusted links...");
getContext().jobQueue().addJob(new BuildTrustedLinksJob(getContext(), bootDb));
return;
} else {
_log.debug("Not using trusted links - boot db");
getContext().jobQueue().addJob(bootDb);
}
}
}