From 581b9157486820410e9bee8b16b9b24a8353490c Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Sun, 14 Nov 2010 14:53:30 +0000
Subject: [PATCH] Call session.propogateError() on reception of
 SessionStatusMessage with bad status or DisconnectMessage

---
 .../net/i2p/client/DisconnectMessageHandler.java   |  7 +++++--
 .../src/net/i2p/client/I2PSessionListener.java     |  2 +-
 .../i2p/client/SessionStatusMessageHandler.java    | 14 ++++++++++----
 3 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/core/java/src/net/i2p/client/DisconnectMessageHandler.java b/core/java/src/net/i2p/client/DisconnectMessageHandler.java
index c7b58a19fa..56ad3fa38a 100644
--- a/core/java/src/net/i2p/client/DisconnectMessageHandler.java
+++ b/core/java/src/net/i2p/client/DisconnectMessageHandler.java
@@ -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);
     }
-}
\ No newline at end of file
+}
diff --git a/core/java/src/net/i2p/client/I2PSessionListener.java b/core/java/src/net/i2p/client/I2PSessionListener.java
index 740ebeeab3..6e01d994f1 100644
--- a/core/java/src/net/i2p/client/I2PSessionListener.java
+++ b/core/java/src/net/i2p/client/I2PSessionListener.java
@@ -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);
 }
diff --git a/core/java/src/net/i2p/client/SessionStatusMessageHandler.java b/core/java/src/net/i2p/client/SessionStatusMessageHandler.java
index d6f875424e..92bd7db82a 100644
--- a/core/java/src/net/i2p/client/SessionStatusMessageHandler.java
+++ b/core/java/src/net/i2p/client/SessionStatusMessageHandler.java
@@ -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;
     }
-}
\ No newline at end of file
+}
-- 
GitLab