You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2011/04/26 12:40:31 UTC

svn commit: r1096716 - in /karaf/branches/karaf-2.2.x/shell: console/src/main/java/org/apache/karaf/shell/console/jline/Console.java ssh/src/main/java/org/apache/karaf/shell/ssh/SshAction.java

Author: gnodet
Date: Tue Apr 26 10:40:31 2011
New Revision: 1096716

URL: http://svn.apache.org/viewvc?rev=1096716&view=rev
Log:
[KARAF-585] When connected to a remote instance, Ctrl-C closes the connection instead of simply interrupting the command

Modified:
    karaf/branches/karaf-2.2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/Console.java
    karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshAction.java

Modified: karaf/branches/karaf-2.2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/Console.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/Console.java?rev=1096716&r1=1096715&r2=1096716&view=diff
==============================================================================
--- karaf/branches/karaf-2.2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/Console.java (original)
+++ karaf/branches/karaf-2.2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/Console.java Tue Apr 26 10:40:31 2011
@@ -61,6 +61,7 @@ public class Console implements Runnable
     public static final String DEFAULT_PROMPT = "\u001B[1m${USER}\u001B[0m@${APPLICATION}> ";
     public static final String PRINT_STACK_TRACES = "karaf.printStackTraces";
     public static final String LAST_EXCEPTION = "karaf.lastException";
+    public static final String IGNORE_INTERRUPTS = "karaf.ignoreInterrupts";
 
     private static final Logger LOGGER = LoggerFactory.getLogger(Console.class);
 
@@ -268,7 +269,7 @@ public class Console implements Runnable
                             .fg(Ansi.Color.DEFAULT).toString();
                         session.getConsole().println(str);
                     }
-                    if ( isPrintStackTraces()) {
+                    if ( getBoolean(PRINT_STACK_TRACES)) {
                         session.getConsole().print(Ansi.ansi().fg(Ansi.Color.RED).toString());
                         t.printStackTrace(session.getConsole());
                         session.getConsole().print(Ansi.ansi().fg(Ansi.Color.DEFAULT).toString());
@@ -292,10 +293,10 @@ public class Console implements Runnable
         }
     }
 
-    protected boolean isPrintStackTraces() {
-        Object s = session.get(PRINT_STACK_TRACES);
+    protected boolean getBoolean(String name) {
+        Object s = session.get(name);
         if (s == null) {
-            s = System.getProperty(PRINT_STACK_TRACES);
+            s = System.getProperty(name);
         }
         if (s == null) {
             return false;
@@ -484,19 +485,17 @@ public class Console implements Runnable
                         {
                             return;
                         }
-                        else if (c == 4)
+                        else if (c == 4 && !getBoolean(IGNORE_INTERRUPTS))
                         {
                             err.println("^D");
-                            queue.put(c);
                         }
-                        else if (c == 3)
+                        else if (c == 3 && !getBoolean(IGNORE_INTERRUPTS))
                         {
                             err.println("^C");
                             reader.getCursorBuffer().clear();
                             interrupt();
-                        } else {
-                            queue.put(c);
                         }
+                        queue.put(c);
                     }
                     catch (Throwable t) {
                         return;

Modified: karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshAction.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshAction.java?rev=1096716&r1=1096715&r2=1096716&view=diff
==============================================================================
--- karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshAction.java (original)
+++ karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshAction.java Tue Apr 26 10:40:31 2011
@@ -28,6 +28,7 @@ import org.apache.felix.gogo.commands.Co
 import org.apache.felix.gogo.commands.Option;
 import org.apache.karaf.shell.console.BlueprintContainerAware;
 import org.apache.karaf.shell.console.OsgiCommandSupport;
+import org.apache.karaf.shell.console.jline.Console;
 import org.apache.sshd.ClientChannel;
 import org.apache.sshd.ClientSession;
 import org.apache.sshd.SshClient;
@@ -67,7 +68,7 @@ public class SshAction
 
     private BlueprintContainer container;
 
-	private ClientSession session;
+	private ClientSession sshSession;
     private String sshClientId;
 
     public void setBlueprintContainer(final BlueprintContainer container) {
@@ -107,12 +108,16 @@ public class SshAction
         try {
             ConnectFuture future = client.connect(hostname, port);
             future.await();
-            session = future.getSession();
+            sshSession = future.getSession();
+
+            Object oldIgnoreInterrupts = this.session.get(Console.IGNORE_INTERRUPTS);
+            this.session.put( Console.IGNORE_INTERRUPTS, Boolean.TRUE );
+
             try {
                 System.out.println("Connected");
 
-                session.authPassword(username, password);
-                int ret = session.waitFor(ClientSession.WAIT_AUTH | ClientSession.CLOSED | ClientSession.AUTHED, 0);
+                sshSession.authPassword(username, password);
+                int ret = sshSession.waitFor(ClientSession.WAIT_AUTH | ClientSession.CLOSED | ClientSession.AUTHED, 0);
                 if ((ret & ClientSession.AUTHED) == 0) {
                     System.err.println("Authentication failed");
                     return null;
@@ -128,12 +133,12 @@ public class SshAction
                     }
                 }
 
-                ClientChannel channel = session.createChannel("shell");
+                ClientChannel channel;
                 if (sb.length() > 0) {
-                    channel = session.createChannel("exec", sb.append("\n").toString());
+                    channel = sshSession.createChannel("exec", sb.append("\n").toString());
                     channel.setIn(new ByteArrayInputStream(new byte[0]));
                 } else {
-                    channel = session.createChannel("shell");
+                    channel = sshSession.createChannel("shell");
                     channel.setIn(new NoCloseInputStream(System.in));
                     ((ChannelShell) channel).setupSensibleDefaultPty();
                 }
@@ -142,7 +147,8 @@ public class SshAction
                 channel.open();
                 channel.waitFor(ClientChannel.CLOSED, 0);
             } finally {
-                session.close(false);
+                session.put( Console.IGNORE_INTERRUPTS, oldIgnoreInterrupts );
+                sshSession.close(false);
             }
         } finally {
             client.stop();