Package de.mud.jta.plugin

Source Code of de.mud.jta.plugin.Shell

/*
* This file is part of "JTA - Telnet/SSH for the JAVA(tm) platform".
*
* (c) Matthias L. Jugel, Marcus Meißner 1996-2005. All Rights Reserved.
*
* Please visit http://javatelnet.org/ for updates and contact.
*
* --LICENSE NOTICE--
* This program 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 2
* of the License, or (at your option) any later version.
*
* This program 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 this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* --LICENSE NOTICE--
*
*/

package de.mud.jta.plugin;

import de.mud.jta.Plugin;
import de.mud.jta.FilterPlugin;
import de.mud.jta.PluginBus;
import de.mud.jta.PluginConfig;
import de.mud.jta.event.LocalEchoRequest;
import de.mud.jta.event.SocketListener;
import de.mud.jta.event.ConfigurationListener;
import de.mud.jta.event.OnlineStatus;

// import java.io.InputStream;
// import java.io.OutputStream;
import java.io.IOException;

/**
* The shell plugin is the backend component for terminal emulation using
* a shell. It provides the i/o streams of the shell as data source.
* <P>
* <B>Maintainer:</B> Matthias L. Jugel
*
* @version $Id: Shell.java 499 2005-09-29 08:24:54Z leo $
* @author Matthias L. Jugel, Marcus Mei�ner, Pete Zaitcev
*/
public class Shell extends Plugin implements FilterPlugin {

  protected String shellCommand;

  private HandlerPTY pty;

  public Shell(final PluginBus bus, final String id) {
    super(bus, id);

    bus.registerPluginListener(new ConfigurationListener() {
      public void setConfiguration(PluginConfig cfg) {
        String tmp;
  if((tmp = cfg.getProperty("Shell", id, "command")) != null) {
    shellCommand = tmp;
    // System.out.println("Shell: Setting config " + tmp); // P3
        } else {
    // System.out.println("Shell: Not setting config"); // P3
    shellCommand = "/bin/sh";
        }
      }
    });

    bus.registerPluginListener(new SocketListener() {
      // we do actually ignore these parameters
      public void connect(String host, int port) {
        // XXX Fix this together with window size changes
        // String ttype = (String)bus.broadcast(new TerminalTypeRequest());
        // String ttype = getTerminalType();
        // if(ttype == null) ttype = "dumb";

  // XXX Add try around here to catch missing DLL/.so.
  pty = new HandlerPTY();

        if(pty.start(shellCommand) == 0) {
    bus.broadcast(new OnlineStatus(true));
        } else {
    bus.broadcast(new OnlineStatus(false));
        }
      }
      public void disconnect() {
        bus.broadcast(new OnlineStatus(false));
        pty = null;
      }
    });
  }

  public void setFilterSource(FilterPlugin plugin) {
    // we do not have a source other than our socket
  }

  public FilterPlugin getFilterSource() {
    return null;
  }

  public int read(byte[] b) throws IOException {
    if(pty == null) return 0;
    int ret = pty.read(b);
    if(ret <= 0) {
      throw new IOException("EOF on PTY");
    }
    return ret;
  }

  public void write(byte[] b) throws IOException {
    if(pty != null) pty.write(b);
  }
}
TOP

Related Classes of de.mud.jta.plugin.Shell

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.