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;