register telnetd command directly, rather than via Shell.
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@944181 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/gogo/shell/src/main/java/org/apache/felix/gogo/shell/Activator.java b/gogo/shell/src/main/java/org/apache/felix/gogo/shell/Activator.java
index 4a723f3..1d7dbd4 100644
--- a/gogo/shell/src/main/java/org/apache/felix/gogo/shell/Activator.java
+++ b/gogo/shell/src/main/java/org/apache/felix/gogo/shell/Activator.java
@@ -43,8 +43,6 @@
public void start(final BundleContext context) throws Exception
{
- shell = new Shell(context);
- registerCommands(context);
commandProcessorTracker = processorTracker(context);
}
@@ -91,25 +89,16 @@
}
}
- private void startShell(CommandProcessor processor)
+ private void startShell(BundleContext context, CommandProcessor processor)
{
- session = processor.createSession(System.in, System.out, System.err);
- shell.setProcessor(processor);
- thread = new Thread(this, "Gogo shell");
- thread.start();
- }
-
- private void registerCommands(BundleContext context)
- {
- // default converters
- regs.add(context.registerService(Converter.class.getName(), new Converters(context), null));
-
Dictionary<String, Object> dict = new Hashtable<String, Object>();
dict.put(CommandProcessor.COMMAND_SCOPE, "gogo");
- dict.put(CommandProcessor.COMMAND_FUNCTION, Shell.functions);
- regs.add(context.registerService(Shell.class.getName(), shell, dict));
-
+ // register converters
+ regs.add(context.registerService(Converter.class.getName(), new Converters(context), null));
+
+ // register commands
+
dict.put(CommandProcessor.COMMAND_FUNCTION, Builtin.functions);
regs.add(context.registerService(Builtin.class.getName(), new Builtin(), dict));
@@ -118,6 +107,18 @@
dict.put(CommandProcessor.COMMAND_FUNCTION, Posix.functions);
regs.add(context.registerService(Posix.class.getName(), new Posix(), dict));
+
+ dict.put(CommandProcessor.COMMAND_FUNCTION, Telnet.functions);
+ regs.add(context.registerService(Telnet.class.getName(), new Telnet(processor), dict));
+
+ shell = new Shell(context, processor);
+ dict.put(CommandProcessor.COMMAND_FUNCTION, Shell.functions);
+ regs.add(context.registerService(Shell.class.getName(), shell, dict));
+
+ // start shell
+ session = processor.createSession(System.in, System.out, System.err);
+ thread = new Thread(this, "Gogo shell");
+ thread.start();
}
private ServiceTracker processorTracker(BundleContext context)
@@ -129,7 +130,7 @@
public Object addingService(ServiceReference reference)
{
CommandProcessor processor = (CommandProcessor) super.addingService(reference);
- startShell(processor);
+ startShell(context, processor);
return processor;
}
diff --git a/gogo/shell/src/main/java/org/apache/felix/gogo/shell/Shell.java b/gogo/shell/src/main/java/org/apache/felix/gogo/shell/Shell.java
index 95c7c0b..8ca183d 100644
--- a/gogo/shell/src/main/java/org/apache/felix/gogo/shell/Shell.java
+++ b/gogo/shell/src/main/java/org/apache/felix/gogo/shell/Shell.java
@@ -19,7 +19,6 @@
package org.apache.felix.gogo.shell;
import java.io.File;
-import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
@@ -38,28 +37,22 @@
public class Shell
{
- static final String[] functions = { "gosh", "sh", "source", "telnetd" };
+ static final String[] functions = { "gosh", "sh", "source" };
private final static URI CWD = new File(".").toURI();
private final URI baseURI;
private final BundleContext context;
+ private final CommandProcessor processor;
- private CommandProcessor processor;
- private Telnet telnet;
-
- public Shell(BundleContext context)
+ public Shell(BundleContext context, CommandProcessor processor)
{
this.context = context;
+ this.processor = processor;
String baseDir = System.getProperty("gosh.home", System.getProperty("user.dir"));
baseURI = new File(baseDir).toURI();
}
- public void setProcessor(CommandProcessor processor)
- {
- this.processor = processor;
- }
-
public Object gosh(final CommandSession session, String[] argv) throws Exception
{
final String[] usage = {
@@ -198,15 +191,6 @@
}
}
- public void telnetd(String[] argv) throws IOException
- {
- if (telnet == null)
- {
- telnet = new Telnet(processor);
- }
- telnet.telnetd(argv);
- }
-
private Object console(CommandSession session)
{
Console console = new Console(session);
diff --git a/gogo/shell/src/main/java/org/apache/felix/gogo/shell/Telnet.java b/gogo/shell/src/main/java/org/apache/felix/gogo/shell/Telnet.java
index dd129df..1581d1e 100644
--- a/gogo/shell/src/main/java/org/apache/felix/gogo/shell/Telnet.java
+++ b/gogo/shell/src/main/java/org/apache/felix/gogo/shell/Telnet.java
@@ -35,6 +35,8 @@
*/
public class Telnet implements Runnable
{
+ static final String[] functions = { "telnetd" };
+
private static final int defaultPort = 2019;
private final CommandProcessor processor;
private ServerSocket server;