package net.i2p.client.impl; /* * free (adj.): unencumbered; not under the control of others * Written by jrandom in 2003 and released into the public domain * with no warranty of any kind, either expressed or implied. * It probably won't make your computer catch on fire, or eat * your children, but it might. Use at your own risk. * */ import net.i2p.I2PAppContext; import net.i2p.client.I2PSessionException; 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 * necssary. * * @author jrandom */ class SessionStatusMessageHandler extends HandlerImpl { public SessionStatusMessageHandler(I2PAppContext context) { super(context, SessionStatusMessage.MESSAGE_TYPE); } public void handleMessage(I2CPMessage message, I2PSessionImpl session) { if (_log.shouldLog(Log.DEBUG)) _log.debug("Handle message " + message); SessionStatusMessage msg = (SessionStatusMessage) message; session.setSessionId(msg.getSessionId()); switch (msg.getStatus()) { case SessionStatusMessage.STATUS_CREATED: _log.info("Session created successfully"); break; case SessionStatusMessage.STATUS_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: if (_log.shouldLog(Log.WARN)) _log.warn("Unknown session status sent: " + msg.getStatus()); } return; } }