add Stream.append(String)
[org.ibex.io.git] / src / org / ibex / io / Stream.java
index 0d6c169..f18d2ba 100644 (file)
@@ -19,13 +19,15 @@ public class Stream {
     private         String newLine = "\r\n";
     private   Stream in_next = null;
 
+    public Stream append(String in_next) { return appendStream(new Stream(in_next)); }
     public Stream appendStream(Stream in_next) {
         if (this.in_next != null) return this.in_next.appendStream(in_next);
         this.in_next = in_next;
         return this;
     }
 
-    public static boolean loggingEnabled = "true".equals(System.getProperty("ibex.io.stream.logEnabled", "false"));
+    //public static boolean loggingEnabled = "true".equals(System.getProperty("ibex.io.stream.logEnabled", "false"));
+    public static boolean loggingEnabled = true;
 
     public void transcribe(Stream out) { transcribe(out, false); }
     public void transcribe(Stream out, boolean close) {
@@ -37,7 +39,7 @@ public class Stream {
                 out.out.write(buf, 0, numread);
             }
            if (close) out.close();
-        } catch (IOException ioe) { throw new StreamException(ioe); }
+        } catch (IOException ioe) { ioe(ioe); }
     }
 
     public void transcribe(StringBuffer out) {
@@ -48,7 +50,7 @@ public class Stream {
                 if (numread==-1) return;
                 out.append(buf, 0, numread);
             }
-            //} catch (IOException ioe) { throw new StreamException(ioe); }
+            //} catch (IOException ioe) { ioe(ioe); }
     }
 
     public static int countLines(Stream s) {
@@ -63,15 +65,19 @@ public class Stream {
     public  Stream(InputStream in, OutputStream out) { this.in = new Stream.In(in); this.out = new Stream.Out(out); }
     public  Stream(String s)                         { this(new ByteArrayInputStream(s.getBytes())); }
     public  Stream(File f)                           {
-        try { this.in = new Stream.In(new FileInputStream(f)); } catch (IOException e) { throw new StreamException(e); }
+        try { this.in = new Stream.In(new FileInputStream(f)); } catch (IOException e) { ioe(e); throw new Error(); }
         this.out = null;
     }
     public  Stream(Socket s) {
-        try { this.in = new Stream.In(s.getInputStream());    } catch (IOException e) { throw new StreamException(e); }
-        try { this.out = new Stream.Out(s.getOutputStream()); } catch (IOException e) { throw new StreamException(e); }
+        try { this.in = new Stream.In(s.getInputStream());    } catch (IOException e) { ioe(e); throw new Error(); }
+        try { this.out = new Stream.Out(s.getOutputStream()); } catch (IOException e) { ioe(e); throw new Error(); }
     }
 
-    private static int ioe(Exception e) { throw new StreamException(e); }
+    static int ioe(IOException e) {
+        if (e instanceof SocketException && e.toString().indexOf("Connection reset")!=-1)
+            throw new Closed(e.getMessage());
+        throw new StreamException(e);
+    }
     public static class StreamException extends RuntimeException {
         public StreamException(Exception e) { super(e); }
         public StreamException(String s)    { super(s); }
@@ -164,6 +170,7 @@ public class Stream {
 
     public void   unread(String s)                 { in.unread(s); }
 
+    /** should not throw exceptions */
     public void   close()                          { try { if (in!=null) in.close(); } finally { if (out!=null) out.close(); } }
     public void   setNewline(String s)             { newLine = s; }