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();