From d47dcddb9b7913226f1d683ff65f664e99f574f2 Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Sun, 14 Nov 2010 14:47:43 +0000
Subject: [PATCH] send I2CP DisconnectMessage at router shutdown

---
 .../router/client/ClientConnectionRunner.java | 23 +++++++++++++++----
 .../net/i2p/router/client/ClientManager.java  |  2 +-
 2 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/router/java/src/net/i2p/router/client/ClientConnectionRunner.java b/router/java/src/net/i2p/router/client/ClientConnectionRunner.java
index 1c4fb2fd5e..aa930e140c 100644
--- a/router/java/src/net/i2p/router/client/ClientConnectionRunner.java
+++ b/router/java/src/net/i2p/router/client/ClientConnectionRunner.java
@@ -237,17 +237,32 @@ public class ClientConnectionRunner {
             _context.jobQueue().addJob(state.getOnGranted());
     }
     
+    /**
+     *  Send a DisconnectMessage and log with level Log.CRIT.
+     *  This is always bad.
+     *  See ClientMessageEventListener.handleCreateSession()
+     *  for why we don't send a SessionStatusMessage when we do this.
+     */
     void disconnectClient(String reason) {
-        if (_log.shouldLog(Log.CRIT))
-            _log.log(Log.CRIT, "Disconnecting the client (" 
+        disconnectClient(reason, Log.CRIT);
+    }
+
+    /**
+     * @param logLevel e.g. Log.WARN
+     * @since 0.8.2
+     */
+    void disconnectClient(String reason, int logLevel) {
+        if (_log.shouldLog(logLevel))
+            _log.log(logLevel, "Disconnecting the client (" 
                      + _config
-                     + ": " + reason);
+                     + ") : " + reason);
         DisconnectMessage msg = new DisconnectMessage();
         msg.setReason(reason);
         try {
             doSend(msg);
         } catch (I2CPMessageException ime) {
-            _log.error("Error writing out the disconnect message: " + ime);
+            if (_log.shouldLog(Log.WARN))
+                _log.warn("Error writing out the disconnect message: " + ime);
         }
         stopRunning();
     }
diff --git a/router/java/src/net/i2p/router/client/ClientManager.java b/router/java/src/net/i2p/router/client/ClientManager.java
index cf7fbf9313..7d866ab0b6 100644
--- a/router/java/src/net/i2p/router/client/ClientManager.java
+++ b/router/java/src/net/i2p/router/client/ClientManager.java
@@ -113,7 +113,7 @@ public class ClientManager {
         }
         for (Iterator<ClientConnectionRunner> iter = runners.iterator(); iter.hasNext(); ) {
             ClientConnectionRunner runner = iter.next();
-            runner.stopRunning();
+            runner.disconnectClient("Router shutdown", Log.WARN);
         }
     }
     
-- 
GitLab