mirror of
https://github.com/i2p/i2p.i2p.git
synced 2026-06-07 02:21:43 +00:00
2004-09-07 jrandom
* Write the native libraries to the current directory when they are loaded
from a resource, and load them from that file on subsequent runs (in
turn, we no longer *cough* delete the running libraries...)
* Added support for a graceful restart.
* Added new pseudo-shutdown hook specific to the router, allowing
applications to request tasks to be run when the router shuts down. We
use this for integration with the service manager, since otherwise a
graceful shutdown would cause a timeout, followed by a forced hard
shutdown.
* Handle a bug in the SimpleTimer with requeued tasks.
* Made the capacity calculator a bit more dynamic by not outright ignoring
the otherwise valid capacity data for a period with a single rejected
tunnel (except for the 10 minute period). In addition, peers with an
equal capacity are ordered by speed rather than by their hashes.
* Cleaned up the SimpleTimer, addressing some threading and synchronization
issues.
* When an I2PTunnel client or httpclient is explicitly closed, destroy the
associated session (unless there are other clients using it), and deal
with a closed session when starting a new I2PTunnel instance.
* Refactoring and logging.
This commit is contained in:
@@ -101,6 +101,13 @@ public interface I2PSession {
|
||||
*/
|
||||
public void connect() throws I2PSessionException;
|
||||
|
||||
/**
|
||||
* Have we closed the session?
|
||||
*
|
||||
* @return true if the session is closed
|
||||
*/
|
||||
public boolean isClosed();
|
||||
|
||||
/**
|
||||
* Retrieve the Destination this session serves as the endpoint for.
|
||||
* Returns null if no destination is available.
|
||||
|
||||
@@ -354,7 +354,12 @@ abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2CPMessa
|
||||
_pendingSizes = new ArrayList(2);
|
||||
}
|
||||
|
||||
public void stopNotifying() { _alive = false; }
|
||||
public void stopNotifying() {
|
||||
_alive = false;
|
||||
synchronized (AvailabilityNotifier.this) {
|
||||
AvailabilityNotifier.this.notifyAll();
|
||||
}
|
||||
}
|
||||
|
||||
public void available(int msgId, int size) {
|
||||
synchronized (AvailabilityNotifier.this) {
|
||||
@@ -499,7 +504,7 @@ abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2CPMessa
|
||||
public void destroySession(boolean sendDisconnect) {
|
||||
if (_closed) return;
|
||||
|
||||
if (_log.shouldLog(Log.DEBUG)) _log.debug(getPrefix() + "Destroy the session", new Exception("DestroySession()"));
|
||||
if (_log.shouldLog(Log.INFO)) _log.info(getPrefix() + "Destroy the session", new Exception("DestroySession()"));
|
||||
if (sendDisconnect) {
|
||||
try {
|
||||
_producer.disconnect(this);
|
||||
@@ -518,7 +523,7 @@ abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2CPMessa
|
||||
*
|
||||
*/
|
||||
private void closeSocket() {
|
||||
if (_log.shouldLog(Log.DEBUG)) _log.debug(getPrefix() + "Closing the socket", new Exception("closeSocket"));
|
||||
if (_log.shouldLog(Log.INFO)) _log.info(getPrefix() + "Closing the socket", new Exception("closeSocket"));
|
||||
_closed = true;
|
||||
if (_reader != null) _reader.stopReading();
|
||||
_reader = null;
|
||||
|
||||
@@ -67,9 +67,13 @@ class RequestLeaseSetMessageHandler extends HandlerImpl {
|
||||
synchronized (_existingLeaseSets) {
|
||||
_existingLeaseSets.put(session.getMyDestination(), li);
|
||||
}
|
||||
_log.debug("Creating new leaseInfo keys", new Exception("new leaseInfo keys"));
|
||||
if (_log.shouldLog(Log.DEBUG))
|
||||
_log.debug("Creating new leaseInfo keys for "
|
||||
+ session.getMyDestination().calculateHash().toBase64());
|
||||
} else {
|
||||
_log.debug("Caching the old leaseInfo keys", new Exception("cached! w00t"));
|
||||
if (_log.shouldLog(Log.DEBUG))
|
||||
_log.debug("Caching the old leaseInfo keys for "
|
||||
+ session.getMyDestination().calculateHash().toBase64());
|
||||
}
|
||||
|
||||
leaseSet.setEncryptionKey(li.getPublicKey());
|
||||
|
||||
Reference in New Issue
Block a user