From 2467856011c1e9cae821e679c9d4493d66dab5ea Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Sun, 18 May 2014 00:44:51 +0000
Subject: [PATCH]  * Streaming: Cleanup, don't fail hard on no tunnels (ticket
 #788)

---
 .../client/streaming/impl/PacketQueue.java    | 20 ++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/apps/streaming/java/src/net/i2p/client/streaming/impl/PacketQueue.java b/apps/streaming/java/src/net/i2p/client/streaming/impl/PacketQueue.java
index 18c9746281..7e9365436f 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/impl/PacketQueue.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/impl/PacketQueue.java
@@ -247,7 +247,8 @@ class PacketQueue implements SendMessageStatusListener {
     public void messageStatus(I2PSession session, long msgId, int status) {
         if (_dead)
             return;
-        Connection con = _messageStatusMap.get(Long.valueOf(msgId));
+        Long id = Long.valueOf(msgId);
+        Connection con = _messageStatusMap.get(id);
         if (con == null) {
             if (_log.shouldLog(Log.WARN))
                 _log.warn("Rcvd status " + status + " for msg " + msgId + " on unknown connection");
@@ -256,10 +257,13 @@ class PacketQueue implements SendMessageStatusListener {
 
         switch (status) {
             case MessageStatusMessage.STATUS_SEND_BEST_EFFORT_FAILURE:
+            // not really guaranteed
             case MessageStatusMessage.STATUS_SEND_GUARANTEED_FAILURE:
-                _messageStatusMap.remove(Long.valueOf(msgId));
+            // no tunnels may fix itself, allow retx
+            case MessageStatusMessage.STATUS_SEND_FAILURE_NO_TUNNELS:
                 if (_log.shouldLog(Log.WARN))
                     _log.warn("Rcvd soft failure status " + status + " for msg " + msgId + " on " + con);
+                _messageStatusMap.remove(id);
                 break;
 
             case MessageStatusMessage.STATUS_SEND_FAILURE_LOCAL:
@@ -271,20 +275,19 @@ class PacketQueue implements SendMessageStatusListener {
             case MessageStatusMessage.STATUS_SEND_FAILURE_OVERFLOW:
             case MessageStatusMessage.STATUS_SEND_FAILURE_EXPIRED:
             case MessageStatusMessage.STATUS_SEND_FAILURE_LOCAL_LEASESET:
-            case MessageStatusMessage.STATUS_SEND_FAILURE_NO_TUNNELS:
             case MessageStatusMessage.STATUS_SEND_FAILURE_UNSUPPORTED_ENCRYPTION:
             case MessageStatusMessage.STATUS_SEND_FAILURE_DESTINATION:
             case MessageStatusMessage.STATUS_SEND_FAILURE_BAD_LEASESET:
             case MessageStatusMessage.STATUS_SEND_FAILURE_EXPIRED_LEASESET:
             case MessageStatusMessage.STATUS_SEND_FAILURE_NO_LEASESET:
             case SendMessageStatusListener.STATUS_CANCELLED:
-                IOException ioe = new I2PSocketException(status);
                 if (_log.shouldLog(Log.WARN))
                     _log.warn("Rcvd hard failure status " + status + " for msg " + msgId + " on " + con);
-                _messageStatusMap.remove(Long.valueOf(msgId));
+                _messageStatusMap.remove(id);
+                IOException ioe = new I2PSocketException(status);
                 con.getOutputStream().streamErrorOccurred(ioe);
                 con.getInputStream().streamErrorOccurred(ioe);
-                con.setConnectionError("barf boof bazzle code " + status);
+                con.setConnectionError("failure code " + status);
                 con.disconnect(false);
                 break;
 
@@ -293,7 +296,7 @@ class PacketQueue implements SendMessageStatusListener {
             case MessageStatusMessage.STATUS_SEND_SUCCESS_LOCAL:
                 if (_log.shouldLog(Log.WARN))
                     _log.warn("Rcvd success status " + status + " for msg " + msgId + " on " + con);
-                _messageStatusMap.remove(Long.valueOf(msgId));
+                _messageStatusMap.remove(id);
                 break;
 
             case MessageStatusMessage.STATUS_SEND_ACCEPTED:
@@ -304,10 +307,9 @@ class PacketQueue implements SendMessageStatusListener {
             default:
                 if (_log.shouldLog(Log.WARN))
                     _log.warn("Rcvd unknown status " + status + " for msg " + msgId + " on " + con);
-                _messageStatusMap.remove(Long.valueOf(msgId));
+                _messageStatusMap.remove(id);
                 break;
         }
-    
     }
 
     /**
-- 
GitLab