From e5f186f61ad81a10f4f8631d8f936614a2e70a79 Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Thu, 26 Nov 2015 15:02:47 +0000
Subject: [PATCH] fix stopping of reader

---
 .../src/net/i2p/sam/client/SAMEventHandler.java   |  8 ++++----
 .../java/src/net/i2p/sam/client/SAMReader.java    | 15 +++++++--------
 .../src/net/i2p/sam/client/SAMStreamSend.java     |  4 +++-
 3 files changed, 14 insertions(+), 13 deletions(-)

diff --git a/apps/sam/java/src/net/i2p/sam/client/SAMEventHandler.java b/apps/sam/java/src/net/i2p/sam/client/SAMEventHandler.java
index ae17b893d7..dc90d3fb24 100644
--- a/apps/sam/java/src/net/i2p/sam/client/SAMEventHandler.java
+++ b/apps/sam/java/src/net/i2p/sam/client/SAMEventHandler.java
@@ -98,7 +98,7 @@ public class SAMEventHandler extends SAMClientEventListenerImpl {
                     else 
                         return _helloOk.booleanValue() ? _version : null;
                 }
-            } catch (InterruptedException ie) {}
+            } catch (InterruptedException ie) { return null; }
         }
     }
 
@@ -116,7 +116,7 @@ public class SAMEventHandler extends SAMClientEventListenerImpl {
                     else
                         return _sessionCreateOk.booleanValue();
                 }
-            } catch (InterruptedException ie) {}
+            } catch (InterruptedException ie) { return false; }
         }
     }
 
@@ -134,7 +134,7 @@ public class SAMEventHandler extends SAMClientEventListenerImpl {
                     else
                         return _streamStatusOk.booleanValue();
                 }
-            } catch (InterruptedException ie) {}
+            } catch (InterruptedException ie) { return false; }
         }
     }
     
@@ -161,7 +161,7 @@ public class SAMEventHandler extends SAMClientEventListenerImpl {
                             return val;
                     }
                 }
-            } catch (InterruptedException ie) {}
+            } catch (InterruptedException ie) { return null; }
         }
     }
 }
diff --git a/apps/sam/java/src/net/i2p/sam/client/SAMReader.java b/apps/sam/java/src/net/i2p/sam/client/SAMReader.java
index 966d977cb7..f8a00b561b 100644
--- a/apps/sam/java/src/net/i2p/sam/client/SAMReader.java
+++ b/apps/sam/java/src/net/i2p/sam/client/SAMReader.java
@@ -42,6 +42,7 @@ public class SAMReader {
         if (_thread != null) {
             _thread.interrupt();
             _thread = null;
+            try { _inRaw.close(); } catch (IOException ioe) {}
         }
     }
     
@@ -98,7 +99,7 @@ public class SAMReader {
                         baos.write(c);
                     }
                     if (c == -1) {
-                        _log.error("Error reading from the SAM bridge");
+                        _log.info("EOF reading from the SAM bridge");
                         break;
                     }
                 } catch (IOException ioe) {
@@ -106,14 +107,12 @@ public class SAMReader {
                     break;
                 }
                 
-                String line = new String(baos.toByteArray());
+                String line = "";
+                try {
+                    line = new String(baos.toByteArray(), "ISO-8859-1");
+                } catch (IOException ioe) {}
                 baos.reset();
                 
-                if (line == null) {
-                    _log.info("No more data from the SAM bridge");
-                    break;
-                }
-                
                 if (_log.shouldDebug())
                     _log.debug("Line read from the bridge: " + line);
                 
@@ -121,7 +120,6 @@ public class SAMReader {
                 
                 if (tok.countTokens() < 2) {
                     _log.error("Invalid SAM line: [" + line + "]");
-                    _live = false;
                     break;
                 }
                 
@@ -145,6 +143,7 @@ public class SAMReader {
                 
                 processEvent(major, minor, params);
             }
+            _live = false;
             if (_log.shouldWarn())
                 _log.warn("SAMReader exiting");
         }
diff --git a/apps/sam/java/src/net/i2p/sam/client/SAMStreamSend.java b/apps/sam/java/src/net/i2p/sam/client/SAMStreamSend.java
index 8b219124f7..2681122cea 100644
--- a/apps/sam/java/src/net/i2p/sam/client/SAMStreamSend.java
+++ b/apps/sam/java/src/net/i2p/sam/client/SAMStreamSend.java
@@ -181,12 +181,14 @@ public class SAMStreamSend {
         }
     }
     
-    private void send(OutputStream samOut, SAMEventHandler eventHandler) {
+    private void send(OutputStream samOut, SAMEventHandler eventHandler) throws IOException {
         Sender sender = new Sender(samOut, eventHandler);
         boolean ok = sender.openConnection();
         if (ok) {
             I2PAppThread t = new I2PAppThread(sender, "Sender");
             t.start();
+        } else {
+            throw new IOException("Sender failed to connect");
         }
     }
     
-- 
GitLab