Call session.propogateError() on reception of SessionStatusMessage with bad status or DisconnectMessage
This commit is contained in:
@ -12,6 +12,7 @@ package net.i2p.client;
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.data.i2cp.DisconnectMessage;
|
||||
import net.i2p.data.i2cp.I2CPMessage;
|
||||
import net.i2p.util.Log;
|
||||
|
||||
/**
|
||||
* Handle I2CP disconnect messages from the router
|
||||
@ -24,7 +25,9 @@ class DisconnectMessageHandler extends HandlerImpl {
|
||||
}
|
||||
|
||||
public void handleMessage(I2CPMessage message, I2PSessionImpl session) {
|
||||
_log.debug("Handle message " + message);
|
||||
if (_log.shouldLog(Log.DEBUG))
|
||||
_log.debug("Handle message " + message);
|
||||
session.propogateError(((DisconnectMessage)message).getReason(), new I2PSessionException("Disconnect Message received"));
|
||||
session.destroySession(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -39,7 +39,7 @@ public interface I2PSessionListener {
|
||||
|
||||
/**
|
||||
* Notify the client that some error occurred
|
||||
*
|
||||
* @param null can be null? or not?
|
||||
*/
|
||||
void errorOccurred(I2PSession session, String message, Throwable error);
|
||||
}
|
||||
|
@ -12,6 +12,7 @@ package net.i2p.client;
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.data.i2cp.I2CPMessage;
|
||||
import net.i2p.data.i2cp.SessionStatusMessage;
|
||||
import net.i2p.util.Log;
|
||||
|
||||
/**
|
||||
* Handle I2CP SessionStatusMessagese from the router, updating the session as
|
||||
@ -25,7 +26,8 @@ class SessionStatusMessageHandler extends HandlerImpl {
|
||||
}
|
||||
|
||||
public void handleMessage(I2CPMessage message, I2PSessionImpl session) {
|
||||
_log.debug("Handle message " + message);
|
||||
if (_log.shouldLog(Log.DEBUG))
|
||||
_log.debug("Handle message " + message);
|
||||
SessionStatusMessage msg = (SessionStatusMessage) message;
|
||||
session.setSessionId(msg.getSessionId());
|
||||
switch (msg.getStatus()) {
|
||||
@ -33,19 +35,23 @@ class SessionStatusMessageHandler extends HandlerImpl {
|
||||
_log.info("Session created successfully");
|
||||
break;
|
||||
case SessionStatusMessage.STATUS_DESTROYED:
|
||||
_log.info("Session destroyed");
|
||||
_log.warn("Session destroyed");
|
||||
session.propogateError("Destroyed", new I2PSessionException("Session Status Message received"));
|
||||
//session.destroySession();
|
||||
session.reconnect(); // la la la
|
||||
break;
|
||||
case SessionStatusMessage.STATUS_INVALID:
|
||||
_log.warn("Session invalid");
|
||||
session.propogateError("Invalid", new I2PSessionException("Session Status Message received"));
|
||||
session.destroySession(); // ok, honor this destroy message, because we're b0rked
|
||||
break;
|
||||
case SessionStatusMessage.STATUS_UPDATED:
|
||||
_log.info("Session status updated");
|
||||
break;
|
||||
default:
|
||||
_log.warn("Unknown session status sent: " + msg.getStatus());
|
||||
if (_log.shouldLog(Log.WARN))
|
||||
_log.warn("Unknown session status sent: " + msg.getStatus());
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user