package net.i2p.router.client;
/*
* 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 java.util.Properties;
import net.i2p.data.Hash;
import net.i2p.data.i2cp.SessionConfig;
import net.i2p.router.ClientTunnelSettings;
import net.i2p.router.JobImpl;
import net.i2p.router.RouterContext;
import net.i2p.util.Log;
/**
* Given an established connection, walk through the process of establishing the
* lease set. This requests the TunnelManagerFacade to build tunnels for the
* client and then once thats done (asynchronously) it requests a lease set from
* the client
*
*/
class CreateSessionJob extends JobImpl {
private final Log _log;
private final SessionConfig _config;
public CreateSessionJob(RouterContext context, SessionConfig config) {
super(context);
_log = context.logManager().getLog(CreateSessionJob.class);
_config = config;
if (_log.shouldLog(Log.DEBUG))
_log.debug("CreateSessionJob for config: " + config);
}
public String getName() { return "Request tunnels for a new client"; }
public void runJob() {
Hash dest = _config.getDestination().calculateHash();
if (_log.shouldLog(Log.INFO))
_log.info("Requesting lease set for destination " + dest);
ClientTunnelSettings settings = new ClientTunnelSettings(dest);
Properties props = new Properties();
// We're NOT going to force all clients to use the router's defaults, since that may be
// excessive. This means that unless the user says otherwise, we'll be satisfied with whatever
// is available. Otherwise, when the router starts up, if there aren't sufficient tunnels with the
// adequate number of hops, the user will have to wait. Once peer profiles are persistent, we can
// reenable this, since on startup we'll have a sufficient number of high enough ranked peers to
// tunnel through. (perhaps).
// XXX take the router's defaults
// XXX props.putAll(Router.getInstance().getConfigMap());
// override them by the client's settings
props.putAll(_config.getOptions());
// and load 'em up (using anything not yet set as the software defaults)
settings.readFromProperties(props);
getContext().tunnelManager().buildTunnels(_config.getDestination(), settings);
}
}