Java tutorial
/** * Copyright 2014 Comcast Cable Communications Management, LLC * * This file is part of CATS. * * CATS is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * CATS is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with CATS. If not, see <http://www.gnu.org/licenses/>. */ package com.comcast.cats.recorder; import java.io.IOException; import java.io.InputStream; import java.io.PrintStream; import java.net.SocketException; import org.apache.commons.net.telnet.TelnetClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.comcast.cats.info.VideoRecorderServiceConstants; import com.comcast.cats.recorder.exception.VideoRecorderConnectionException; /** * A utility class to manage VLC through telnet interface for video recorder. * * @author ssugun00c * */ public class TelnetHandler { static { telnetPassword = System.getProperty(VideoRecorderServiceConstants.SYSTEM_PROPERTY_VLC_TELNET_PASSWORD); telnetHost = System.getProperty(VideoRecorderServiceConstants.SYSTEM_PROPERTY_VLC_TELNET_HOST); } private TelnetClient telnet = new TelnetClient(); private InputStream in; private PrintStream out; private char prompt = '>'; private static String telnetHost; private static String telnetPassword; private static Logger LOGGER = LoggerFactory.getLogger(TelnetHandler.class); /** * Connect, authenticate and initialize vlc Telnet session * * @param server * @param port * @param password * @throws SocketException * @throws IOException */ private void connect(String server, Integer port, String password) throws SocketException, IOException, VideoRecorderConnectionException { LOGGER.info("[VLC][Telnet Connect][" + server + "][" + port + "]"); // Connect to the specified server telnet.connect(server, port); // Get input and output stream references in = telnet.getInputStream(); out = new PrintStream(telnet.getOutputStream()); readUntil("Password: "); write(password); // Advance to a prompt readUntil(prompt + " "); } /** * * Reads Telnet response. * * @param pattern * @return */ private String readUntil(String pattern) { try { char lastChar = pattern.charAt(pattern.length() - 1); StringBuffer sb = new StringBuffer(); char ch = (char) in.read(); while (true) { sb.append(ch); if (ch == lastChar) { if (sb.toString().endsWith(pattern)) { LOGGER.info("[VLC][Telnet Response][" + sb + "]"); return sb.toString(); } } ch = (char) in.read(); } } catch (Exception e) { LOGGER.info("[VLC][Telnet Error][" + e.getMessage() + "]"); } return null; } /** * Sends actual Telnet command. * * @param value */ private void write(String value) throws VideoRecorderConnectionException { try { if (null == out) { throw new VideoRecorderConnectionException( "No OutputStream(PrintStream) found to send Telent command."); } LOGGER.info("[VLC][Telnet Command][" + value + "]"); out.println(value); out.flush(); } catch (Exception e) { LOGGER.info("[VLC][Telnet Error][" + e.getMessage() + "]"); } } /** * Sends a Telnet command and return the response. * * @param command * @return */ private String sendCommand(String command) { try { write(command); return readUntil(prompt + " "); } catch (Exception e) { LOGGER.info("[VLC][Telnet Error][" + e.getMessage() + "]"); } return null; } /** * Close Telnet session. */ private void disconnect() { try { telnet.disconnect(); } catch (Exception e) { LOGGER.info("[VLC][Telnet Error][" + e.getMessage() + "]"); } } public synchronized boolean shutDownVlc(int port) throws VideoRecorderConnectionException { LOGGER.info("[VLC][Telnet] Shutdown request received for port [" + port + "]"); if ((null == telnetPassword) || (telnetPassword.isEmpty()) || (null == telnetHost) || (telnetHost.isEmpty())) { throw new VideoRecorderConnectionException( "Cannt connect to Telnet interface of VLC with [" + telnetHost + "][" + port + "]. Make sure Telnet host and Telnet password are not null or empty"); } boolean isStopped = false; try { connect(telnetHost, port, telnetPassword); String output = sendCommand("shutdown"); // String expected = "Shutting down.Bye-bye!>"; String expected = "bye"; output = output.replace("\n", "").replace("\r", "").trim(); /* * if ( expected.equalsIgnoreCase( output ) ) { isStopped = true; } */ if (output.toLowerCase().indexOf(expected.toLowerCase()) >= 0) { isStopped = true; } disconnect(); } catch (IOException ioException) { throw new VideoRecorderConnectionException( "An ioException happened while communicating with Telnet interface of VLC. [" + telnetHost + "][" + port + "]" + ioException.getMessage()); } return isStopped; } }