package org.opennaas.extensions.transports.telnet; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import org.apache.commons.net.telnet.EchoOptionHandler; import org.apache.commons.net.telnet.SuppressGAOptionHandler; import org.apache.commons.net.telnet.TelnetClient; import org.apache.commons.net.telnet.TerminalTypeOptionHandler; import org.opennaas.core.resources.transport.IStreamTransport; import org.opennaas.core.resources.transport.TransportException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * This class implements a Telnet transport client. It can connect to telnet enabled remote devices and send/receive characters/bytes using the telnet * protocol * * @author edu * */ public class TelnetTransport implements IStreamTransport { public static final String TELNET = "telnet"; /** TelnetTransport Logger */ static private Logger logger = LoggerFactory.getLogger(TelnetTransport.class); /** The telnet client library **/ private TelnetClient telnetClient = null; /** PrintWriter to write to the socket */ private PrintWriter outPrint; /** The host to connect */ private String host = null; /** The port to connect */ private String port = null; /** The read time out **/ private static final int READ_TIMEOUT = 300000; public TelnetTransport(String host, String port) { this.host = host; this.port = port; } public TelnetTransport(String host) { this.host = host; this.port = "23"; } public void connect() throws TransportException { logger.info("Telnet Transport trying to connect..."); // Create a new telnet client telnetClient = new TelnetClient(); // VT100 terminal type will be subnegotiated TerminalTypeOptionHandler ttopt = new TerminalTypeOptionHandler("VT100", false, false, true, false); // WILL SUPPRESS-GA, DO SUPPRESS-GA options SuppressGAOptionHandler gaopt = new SuppressGAOptionHandler(true, true, true, true); // WON'T ECHO, DON'T ECHO EchoOptionHandler echoopt = new EchoOptionHandler(); try { // set telnet client options telnetClient.addOptionHandler(ttopt); telnetClient.addOptionHandler(gaopt); telnetClient.addOptionHandler(echoopt); // connect telnetClient.connect(host, Integer.parseInt(port)); // set the read timeout telnetClient.setSoTimeout(READ_TIMEOUT); // Initialize the print writer outPrint = new PrintWriter(telnetClient.getOutputStream(), true); } catch (Exception e) { e.printStackTrace(); throw new TransportException("Could not connect, unable to open telnet session " + e.getMessage()); } } public void disconnect() throws TransportException { try { telnetClient.disconnect(); } catch (Exception e) { e.printStackTrace(); throw new TransportException("Problems when disconnecting: " + e.getMessage()); } } public void send(byte[] rawInput) throws TransportException { try { logger.debug("Message to be sent: " + rawInput); outPrint.println(rawInput); } catch (Exception e) { e.printStackTrace(); throw new TransportException("Problems when sending message: " + e.getMessage()); } } public void send(char[] rawInput) throws TransportException { try { logger.debug("Message to be sent: " + rawInput.toString()); outPrint.println(rawInput); } catch (Exception e) { e.printStackTrace(); throw new TransportException("Problems when sending message: " + e.getMessage()); } } public InputStream getInputStream() throws TransportException { return telnetClient.getInputStream(); } public OutputStream getOutputStream() throws TransportException { return telnetClient.getOutputStream(); } }