FELIX-1939: Ssh client output is poorly formatted when connecting with a standard ssh client

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@908534 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/karaf/shell/ssh/src/main/java/org/apache/felix/karaf/shell/ssh/ShellFactoryImpl.java b/karaf/shell/ssh/src/main/java/org/apache/felix/karaf/shell/ssh/ShellFactoryImpl.java
index 5c94585..e745395 100644
--- a/karaf/shell/ssh/src/main/java/org/apache/felix/karaf/shell/ssh/ShellFactoryImpl.java
+++ b/karaf/shell/ssh/src/main/java/org/apache/felix/karaf/shell/ssh/ShellFactoryImpl.java
@@ -20,6 +20,7 @@
 package org.apache.felix.karaf.shell.ssh;
 
 import java.io.Closeable;
+import java.io.FilterOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -99,8 +100,8 @@
                 };
                 Console console = new Console(commandProcessor,
                                               in,
-                                              new PrintStream(out, true),
-                                              new PrintStream(err, true),
+                                              new PrintStream(new LfToCrLfFilterOutputStream(out), true),
+                                              new PrintStream(new LfToCrLfFilterOutputStream(err), true),
                                               new SshTerminal(env),
                                               new AggregateCompleter(completers),
                                               new Runnable() {
@@ -157,4 +158,26 @@
         }
     }
 
+    public class LfToCrLfFilterOutputStream extends FilterOutputStream {
+
+        private boolean lastWasCr;
+
+        public LfToCrLfFilterOutputStream(OutputStream out) {
+            super(out);
+        }
+
+        @Override
+        public void write(int b) throws IOException {
+            if (!lastWasCr && b == '\n') {
+                out.write('\r');
+                out.write('\n');
+            } else {
+                out.write(b);
+            }
+            lastWasCr = b == '\r';
+        }
+
+    }
+
+
 }