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.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);
}
}
}

View File

@ -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);
}

View File

@ -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;
}
}
}