I2P Address: [http://git.idk.i2p]

Skip to content
Snippets Groups Projects
Commit eb5a23fc authored by zzz's avatar zzz
Browse files

finals, remove static log

parent d4c8e03f
No related branches found
No related tags found
No related merge requests found
......@@ -58,22 +58,22 @@ import net.i2p.util.VersionComparator;
abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2CPMessageEventListener {
protected final Log _log;
/** who we are */
private Destination _myDestination;
private final Destination _myDestination;
/** private key for decryption */
private PrivateKey _privateKey;
private final PrivateKey _privateKey;
/** private key for signing */
private SigningPrivateKey _signingPrivateKey;
private final SigningPrivateKey _signingPrivateKey;
/** configuration options */
private Properties _options;
private final Properties _options;
/** this session's Id */
private SessionId _sessionId;
/** currently granted lease set, or null */
private volatile LeaseSet _leaseSet;
/** hostname of router - will be null if in RouterContext */
protected String _hostname;
protected final String _hostname;
/** port num to router - will be 0 if in RouterContext */
protected int _portNum;
protected final int _portNum;
/** socket for comm */
protected Socket _socket;
/** reader that always searches for messages */
......@@ -169,15 +169,36 @@ abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2CPMessa
private static final int BUF_SIZE = 32*1024;
/** for extension */
/**
* for extension by SimpleSession (no dest)
*/
protected I2PSessionImpl(I2PAppContext context, Properties options) {
this(context, options, false);
}
/**
* Basic setup of finals
* @since 0.9.7
*/
private I2PSessionImpl(I2PAppContext context, Properties options, boolean hasDest) {
_context = context;
_log = context.logManager().getLog(getClass());
_closed = true;
if (options == null)
options = (Properties) System.getProperties().clone();
loadConfig(options);
_options = loadConfig(options);
_hostname = getHost();
_portNum = getPort();
_fastReceive = Boolean.parseBoolean(_options.getProperty(I2PClient.PROP_FAST_RECEIVE));
if (hasDest) {
_myDestination = new Destination();
_privateKey = new PrivateKey();
_signingPrivateKey = new SigningPrivateKey();
} else {
_myDestination = null;
_privateKey = null;
_signingPrivateKey = null;
}
}
/**
......@@ -190,7 +211,7 @@ abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2CPMessa
* @throws I2PSessionException if there is a problem loading the private keys or
*/
public I2PSessionImpl(I2PAppContext context, InputStream destKeyStream, Properties options) throws I2PSessionException {
this(context, options);
this(context, options, true);
_handlerMap = new I2PClientMessageHandlerMap(context);
_producer = new I2CPMessageProducer(context);
_availabilityNotifier = new AvailabilityNotifier();
......@@ -208,40 +229,56 @@ abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2CPMessa
* Parse the config for anything we know about.
* Also fill in the authorization properties if missing.
*/
private void loadConfig(Properties options) {
_options = new Properties();
_options.putAll(filter(options));
if (_context.isRouterContext()) {
// just for logging
_hostname = "[internal connection]";
} else {
_hostname = _options.getProperty(I2PClient.PROP_TCP_HOST, "127.0.0.1");
String portNum = _options.getProperty(I2PClient.PROP_TCP_PORT, LISTEN_PORT + "");
try {
_portNum = Integer.parseInt(portNum);
} catch (NumberFormatException nfe) {
if (_log.shouldLog(Log.WARN))
_log.warn(getPrefix() + "Invalid port number specified, defaulting to "
+ LISTEN_PORT, nfe);
_portNum = LISTEN_PORT;
}
}
private final Properties loadConfig(Properties opts) {
Properties options = new Properties();
options.putAll(filter(opts));
// auto-add auth if required, not set in the options, and we are not in the same JVM
if ((!_context.isRouterContext()) &&
_context.getBooleanProperty("i2cp.auth") &&
((!options.containsKey("i2cp.username")) || (!options.containsKey("i2cp.password")))) {
((!opts.containsKey("i2cp.username")) || (!opts.containsKey("i2cp.password")))) {
String configUser = _context.getProperty("i2cp.username");
String configPW = _context.getProperty("i2cp.password");
if (configUser != null && configPW != null) {
_options.setProperty("i2cp.username", configUser);
_options.setProperty("i2cp.password", configPW);
options.setProperty("i2cp.username", configUser);
options.setProperty("i2cp.password", configPW);
}
}
if (_options.getProperty(I2PClient.PROP_FAST_RECEIVE) == null)
_options.setProperty(I2PClient.PROP_FAST_RECEIVE, "true");
if (_options.getProperty(I2PClient.PROP_RELIABILITY) == null)
_options.setProperty(I2PClient.PROP_RELIABILITY, "none");
if (options.getProperty(I2PClient.PROP_FAST_RECEIVE) == null)
options.setProperty(I2PClient.PROP_FAST_RECEIVE, "true");
if (options.getProperty(I2PClient.PROP_RELIABILITY) == null)
options.setProperty(I2PClient.PROP_RELIABILITY, "none");
return options;
}
/**
* Get I2CP host from the config
* @since 0.9.7 was in loadConfig()
*/
private String getHost() {
if (_context.isRouterContext())
// just for logging
return "[internal connection]";
return _options.getProperty(I2PClient.PROP_TCP_HOST, "127.0.0.1");
}
/**
* Get I2CP port from the config
* @since 0.9.7 was in loadConfig()
*/
private int getPort() {
if (_context.isRouterContext())
// just for logging
return 0;
String portNum = _options.getProperty(I2PClient.PROP_TCP_PORT, LISTEN_PORT + "");
try {
return Integer.parseInt(portNum);
} catch (NumberFormatException nfe) {
if (_log.shouldLog(Log.WARN))
_log.warn(getPrefix() + "Invalid port number specified, defaulting to "
+ LISTEN_PORT, nfe);
return LISTEN_PORT;
}
}
/** save some memory, don't pass along the pointless properties */
......@@ -332,9 +369,6 @@ abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2CPMessa
* @throws IOException if there is a problem reading the file
*/
private void readDestination(InputStream destKeyStream) throws DataFormatException, IOException {
_myDestination = new Destination();
_privateKey = new PrivateKey();
_signingPrivateKey = new SigningPrivateKey();
_myDestination.readBytes(destKeyStream);
_privateKey.readBytes(destKeyStream);
_signingPrivateKey.readBytes(destKeyStream);
......
......@@ -22,60 +22,67 @@ class SessionIdleTimer implements SimpleTimer.TimedEvent {
public static final long MINIMUM_TIME = 5*60*1000;
private static final long DEFAULT_REDUCE_TIME = 20*60*1000;
private static final long DEFAULT_CLOSE_TIME = 30*60*1000;
private final static Log _log = new Log(SessionIdleTimer.class);
private final Log _log;
private final I2PAppContext _context;
private final I2PSessionImpl _session;
private boolean _reduceEnabled;
private int _reduceQuantity;
private long _reduceTime;
private boolean _shutdownEnabled;
private long _shutdownTime;
private long _minimumTime;
private final boolean _reduceEnabled;
private final int _reduceQuantity;
private final long _reduceTime;
private final boolean _shutdownEnabled;
private final long _shutdownTime;
private final long _minimumTime;
private long _lastActive;
/**
* reduce, shutdown, or both must be true
*/
public SessionIdleTimer(I2PAppContext context, I2PSessionImpl session, boolean reduce, boolean shutdown) {
_context = context;
_session = session;
_reduceEnabled = reduce;
_shutdownEnabled = shutdown;
if (! (reduce || shutdown))
throw new IllegalArgumentException("At least one must be enabled");
_context = context;
_log = context.logManager().getLog(SessionIdleTimer.class);
_session = session;
Properties props = session.getOptions();
_minimumTime = Long.MAX_VALUE;
_lastActive = 0;
long minimumTime = Long.MAX_VALUE;
long reduceTime = 0;
long shutdownTime = 0;
int reduceQuantity = 0;
if (reduce) {
_reduceQuantity = 1;
reduceQuantity = 1;
String p = props.getProperty("i2cp.reduceQuantity");
if (p != null) {
try {
_reduceQuantity = Math.max(Integer.parseInt(p), 1);
reduceQuantity = Math.max(Integer.parseInt(p), 1);
// also check vs. configured quantities?
} catch (NumberFormatException nfe) {}
}
_reduceTime = DEFAULT_REDUCE_TIME;
reduceTime = DEFAULT_REDUCE_TIME;
p = props.getProperty("i2cp.reduceIdleTime");
if (p != null) {
try {
_reduceTime = Math.max(Long.parseLong(p), MINIMUM_TIME);
reduceTime = Math.max(Long.parseLong(p), MINIMUM_TIME);
} catch (NumberFormatException nfe) {}
}
_minimumTime = _reduceTime;
minimumTime = reduceTime;
}
if (shutdown) {
_shutdownTime = DEFAULT_CLOSE_TIME;
shutdownTime = DEFAULT_CLOSE_TIME;
String p = props.getProperty("i2cp.closeIdleTime");
if (p != null) {
try {
_shutdownTime = Math.max(Long.parseLong(p), MINIMUM_TIME);
shutdownTime = Math.max(Long.parseLong(p), MINIMUM_TIME);
} catch (NumberFormatException nfe) {}
}
_minimumTime = Math.min(_minimumTime, _shutdownTime);
if (reduce && _shutdownTime <= _reduceTime)
minimumTime = Math.min(minimumTime, shutdownTime);
if (reduce && shutdownTime <= reduceTime)
reduce = false;
}
_reduceEnabled = reduce;
_reduceQuantity = reduceQuantity;
_reduceTime = reduceTime;
_shutdownEnabled = shutdown;
_shutdownTime = shutdownTime;
_minimumTime = minimumTime;
}
public void timeReached() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment