Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (c) 2010, 2012 SAP AG All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html Contributors: Lazar Kirchev, SAP AG - initial API and implementation /
 
 
 package org.eclipse.equinox.console.telnet;
 
 import java.util.List;
 
This class implements a command for starting/stopping a simple telnet server.
 
 public class TelnetCommand {
 	
 	private String defaultHost = null;
     private int defaultPort;
     private List<CommandProcessorprocessors = new ArrayList<CommandProcessor>();
     private final BundleContext context;
     private String host = null;
     private int port;
     private TelnetServer telnetServer = null;
     private boolean isEnabled = false;
     
     private static final String HOST = "host";
     private static final String PORT = "port";
     private static final String USE_CONFIG_ADMIN_PROP = "osgi.console.useConfigAdmin";
     private static final String TELNET_PID = "osgi.console.telnet";
     private static final String CONSOLE_PROP = "osgi.console";
     private static final String ENABLED = "enabled";
     private final Object lock = new Object();
 
     public TelnetCommand(CommandProcessor processorBundleContext context)
     {
         .add(processor);
         this. = context;
         if ("true".equals(context.getProperty())) {
         	Dictionary<StringStringtelnetProperties = new Hashtable<StringString>();
         	telnetProperties.put(.);
         	try {
         		synchronized () {
         			 = context.registerService(ManagedService.class.getName(), new TelnetConfigurator(), telnetProperties);
         		}
         	} catch (NoClassDefFoundError e) {
         		..println("Configuration Admin not available!");
         		return;
         	}
         } else {
         	parseHostAndPort();
         }
     }
     
     private void parseHostAndPort() {
     	String telnetPort = null;
         String consolePropValue = .getProperty();
         if(consolePropValue != null) {
         	int index = consolePropValue.lastIndexOf(":");
         	if (index > -1) {
         		 = consolePropValue.substring(0, index);
         	}
         	telnetPort = consolePropValue.substring(index + 1);
         	 = true;
         } 
         if (telnetPort != null && !"".equals(telnetPort)) {
         	try {
         		 = Integer.parseInt(telnetPort);
 			} catch (NumberFormatException e) {
 				// do nothing
 			}
         } 
     }
     
     public synchronized void startService() {
     	Dictionary<StringObjectproperties = new Hashtable<StringObject>();
 		properties.put("osgi.command.scope""equinox");
 		properties.put("osgi.command.function"new String[] {"telnet"});
 		if (( > 0 ||  > 0) &&  == true) {
 			try{
 				telnet(new String[]{"start"});
 			} catch (Exception e) {
				..println("Cannot start telnet. Reason: " + e.getMessage());
			}
		}
		.registerService(TelnetCommand.class.getName(), thisproperties);
    }
    @Descriptor("start/stop a telnet server")
    public synchronized void telnet(String[] argumentsthrows Exception
    {
        String command = null;
        int newPort = 0;
        String newHost = null;
        
        for(int i = 0; i < arguments.lengthi++) {
        	if("-?".equals(arguments[i]) || "-help".equals(arguments[i])) {
        		printHelp();
        		return;
        	} else if("start".equals(arguments[i])) {
        		command = "start";
        	} else if ("stop".equals(arguments[i])) {
        		command = "stop";
        	} else if ("-port".equals(arguments[i]) && (arguments.length > i + 1)) {
        		i++;
        		newPort = Integer.parseInt(arguments[i]);
        	} else if ("-host".equals(arguments[i]) && (arguments.length > i + 1)) {
        		i++;
        		newHost = arguments[i];
        	} else {
        		throw new Exception("Unrecognized telnet command/option " + arguments[i]);
        	}
        }
        
        if (command == null) {
        	throw new Exception("No telnet command specified");
        }
        
        if (newPort != 0) {
        	 = newPort;
        } else if ( == 0) {
        	 = ;
        }
        
        if ( == 0) {
        	throw new Exception("No telnet port specified");
        }
        
        if (newHost != null) {
        	 = newHost;
        } else {
        	 = ;
        }
        if ("start".equals(command)) {
            if ( != null) {
                throw new IllegalStateException("telnet is already running on port " + );
            }
            
            try {
catch (BindException e) {
				throw new Exception("Port " +  + " already in use");
			}
            .setName("equinox telnet");
            .start();    
        } else if ("stop".equals(command)) {
            if ( == null) {
                ..println("telnet is not running.");
                return;
            }
            
            .stopTelnetServer();
             = null;
        } 
    }
    
    public synchronized void addCommandProcessor(CommandProcessor processor) {
    	.add(processor);
    	if ( != null) {
    	}
    }
    
    public synchronized void removeCommandProcessor(CommandProcessor processor) {
    	.remove(processor);
    	if ( != null) {
    	}
    }
    
    private void printHelp() {
    	StringBuffer help = new StringBuffer();
    	help.append("telnet - start simple telnet server");
    	help.append("\n");
    	help.append("Usage: telnet start | stop [-port port] [-host host]");
    	help.append("\n");
    	help.append("\t");
    	help.append("-port");
    	help.append("\t");
    	help.append("listen port (default=");
    	help.append();
    	help.append(")");
    	help.append("\n");
    	help.append("\t");
    	help.append("-host");
    	help.append("\t");
    	help.append("local host address to listen on (default is none - listen on all network interfaces)");
    	help.append("\n");
    	help.append("\t");
    	help.append("-?, -help");
    	help.append("\t");
    	help.append("show help");
    	..println(help.toString());          
    }
    
    class TelnetConfigurator implements ManagedService {
    	@SuppressWarnings("rawtypes")
		@SuppressWarnings({ "rawtypes""unchecked" })
		public synchronized void updated(Dictionary propsthrows ConfigurationException {
			if (props != null) {
				this. = props;
else {
				return;
			}
			if (.get() == null) {
				 = false;
else {
			}
			synchronized () {
			}
			if ( == null &&  == true) {
				try {
					telnet(new String[]{"start"});
catch (Exception e) {
					..println("Cannot start telnet: " + e.getMessage());
				}
			}
		}
    	
    }
New to GrepCode? Check out our FAQ X