Call session.propogateError() on reception of SessionStatusMessage with bad status or DisconnectMessage

This commit is contained in:
zzz
2010-11-14 14:53:30 +00:00
parent e293b25bb7
commit 581b915748
3 changed files with 16 additions and 7 deletions

View File

@ -12,6 +12,7 @@ package net.i2p.client;
import net.i2p.I2PAppContext; import net.i2p.I2PAppContext;
import net.i2p.data.i2cp.DisconnectMessage; import net.i2p.data.i2cp.DisconnectMessage;
import net.i2p.data.i2cp.I2CPMessage; import net.i2p.data.i2cp.I2CPMessage;
import net.i2p.util.Log;
/** /**
* Handle I2CP disconnect messages from the router * Handle I2CP disconnect messages from the router
@ -24,7 +25,9 @@ class DisconnectMessageHandler extends HandlerImpl {
} }
public void handleMessage(I2CPMessage message, I2PSessionImpl session) { 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); session.destroySession(false);
} }
} }

View File

@ -39,7 +39,7 @@ public interface I2PSessionListener {
/** /**
* Notify the client that some error occurred * Notify the client that some error occurred
* * @param null can be null? or not?
*/ */
void errorOccurred(I2PSession session, String message, Throwable error); void errorOccurred(I2PSession session, String message, Throwable error);
} }

View File

@ -12,6 +12,7 @@ package net.i2p.client;
import net.i2p.I2PAppContext; import net.i2p.I2PAppContext;
import net.i2p.data.i2cp.I2CPMessage; import net.i2p.data.i2cp.I2CPMessage;
import net.i2p.data.i2cp.SessionStatusMessage; import net.i2p.data.i2cp.SessionStatusMessage;
import net.i2p.util.Log;
/** /**
* Handle I2CP SessionStatusMessagese from the router, updating the session as * 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) { 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; SessionStatusMessage msg = (SessionStatusMessage) message;
session.setSessionId(msg.getSessionId()); session.setSessionId(msg.getSessionId());
switch (msg.getStatus()) { switch (msg.getStatus()) {
@ -33,19 +35,23 @@ class SessionStatusMessageHandler extends HandlerImpl {
_log.info("Session created successfully"); _log.info("Session created successfully");
break; break;
case SessionStatusMessage.STATUS_DESTROYED: case SessionStatusMessage.STATUS_DESTROYED:
_log.info("Session destroyed"); _log.warn("Session destroyed");
session.propogateError("Destroyed", new I2PSessionException("Session Status Message received"));
//session.destroySession(); //session.destroySession();
session.reconnect(); // la la la session.reconnect(); // la la la
break; break;
case SessionStatusMessage.STATUS_INVALID: 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 session.destroySession(); // ok, honor this destroy message, because we're b0rked
break; break;
case SessionStatusMessage.STATUS_UPDATED: case SessionStatusMessage.STATUS_UPDATED:
_log.info("Session status updated"); _log.info("Session status updated");
break; break;
default: default:
_log.warn("Unknown session status sent: " + msg.getStatus()); if (_log.shouldLog(Log.WARN))
_log.warn("Unknown session status sent: " + msg.getStatus());
} }
return; return;
} }
} }