/* * Copyright (c) 2006 Manuel Traut and Volker Dahnke * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: Manuel Traut and Volker Dahnke */ package YalpOutputs.YalpVlcTelnetOutput; import java.net.Socket; import java.io.*; import org.apache.commons.net.telnet.*; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; /* * Class TelnetInterface * * handels telnet connection * * @author Volker Dahnke / Manuel Traut * * @version 0.1 20-11-2005
* * @see VlcStreamer */ public class TelnetInterface { private PrintStream out; private InputStream in; private TelnetClient tc = new TelnetClient(); private String log4jFile = "log4j_output_plugin.conf"; private static Logger logger = Logger.getLogger("Yalp.OutputPlugins.VlcTelnetOutput.TelnetInterface"); public TelnetInterface(String host, int port, String pass) { PropertyConfigurator.configureAndWatch(log4jFile); logger.debug("TelnetInterface("+host+" "+port+" "+pass+")"); try { tc.connect(host, port); out = new PrintStream(this.tc.getOutputStream()); in = this.tc.getInputStream(); } catch(IOException e) { System.out.println("server.TelnetInterface.java: Telnet connection "+host+":"+port+" failed"); return; } readUntil( "Password:" ); write(pass); // Advance to a prompt readUntil("> "); } /* * write to TelnetInterface * @param value * String to write to Interface */ public void write( String value ) { logger.debug("write("+value+")"); try { out.println( value ); out.flush(); } catch( Exception e ) { e.printStackTrace(); } } /* * reads output of telnet client * @param pattern * for stop reading * @return String */ public String readUntil( String pattern ) { logger.debug("readUntil("+pattern+")"); try { char lastChar = pattern.charAt( pattern.length() - 1 ); StringBuffer sb = new StringBuffer(); char ch = ( char )in.read(); while( true ) { System.out.print( ch ); sb.append( ch ); if( ch == lastChar ) { if( sb.toString().endsWith( pattern ) ) { return sb.toString(); } } ch = ( char )in.read(); } } catch( Exception e ) { e.printStackTrace(); } return null; } /* * executes command * @param cmd * any telnet command * @return String * telnet output caused by the command * null if failed */ public String exec(String cmd){ logger.debug("exec("+cmd+")"); try { write(cmd); return readUntil( "> " ); } catch( Exception e ) { e.printStackTrace(); } return null; } /* * close telnet connection * * @return boolean * true: connection closed * false: connection close failed */ public boolean close(){ logger.debug("close()"); try { tc.disconnect(); } catch(IOException e) { return false; } return true; } }