| /******************************************************************************* |
| * Copyright (c) 2011, 2017 SAP AG and others. |
| * 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.commands; |
| |
| import java.io.BufferedReader; |
| import java.io.IOException; |
| import java.io.InputStreamReader; |
| import java.util.Dictionary; |
| import java.util.Hashtable; |
| |
| import org.apache.felix.service.command.CommandProcessor; |
| import org.apache.felix.service.command.CommandSession; |
| import java.io.Closeable; |
| import org.osgi.framework.BundleContext; |
| |
| /** |
| * This class implements functionality to disconnect from telnet or ssh console. |
| */ |
| public class DisconnectCommand { |
| private static final String CLOSEABLE = "CLOSEABLE"; |
| private static final String DISCONNECT_MESSAGE = "Disconnect from console? (y/n; default=y) "; |
| private static final String DISCONNECT_CONFIRMATION_Y = "y"; |
| |
| private BundleContext context; |
| |
| public DisconnectCommand(BundleContext context) { |
| this.context = context; |
| } |
| |
| public void startService() { |
| Dictionary<String, Object> props = new Hashtable<>(); |
| props.put(CommandProcessor.COMMAND_SCOPE, "equinox"); |
| props.put(CommandProcessor.COMMAND_FUNCTION, new String[] {"disconnect"}); |
| context.registerService(DisconnectCommand.class.getName(), this, props); |
| } |
| |
| public void disconnect(CommandSession session) { |
| System.out.print(DISCONNECT_MESSAGE); |
| System.out.flush(); |
| |
| BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); |
| String reply = null; |
| try { |
| reply = reader.readLine(); |
| } catch (IOException e) { |
| System.out.println("Error while reading confirmation"); |
| } |
| |
| if (reply != null) { |
| if (reply.toLowerCase().startsWith(DISCONNECT_CONFIRMATION_Y) || reply.length() == 0) { |
| Closeable closable = (Closeable)session.get(CLOSEABLE); |
| if (closable != null) { |
| try { |
| closable.close(); |
| } catch (IOException e) { |
| e.printStackTrace(); |
| } |
| return; |
| } |
| |
| session.close(); |
| } |
| } |
| } |
| } |