/******************************************************************************* * Copyright (c) 2012 IBM Corporation 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: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.linuxtools.internal.ssh.proxy; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import org.eclipse.core.runtime.IProgressMonitor; import com.jcraft.jsch.ChannelExec; public class SSHProcess extends Process { private ChannelExec channel; private static final long DELAY = 100; public SSHProcess(ChannelExec channel) { this.channel = channel; } @Override public OutputStream getOutputStream() { try { return channel.getOutputStream(); } catch (IOException e) { return null; } } @Override public InputStream getInputStream() { try { return channel.getInputStream(); } catch (IOException e) { return null; } } @Override public InputStream getErrorStream() { try { return channel.getErrStream(); } catch (IOException e) { return null; } } @Override public int waitFor() throws InterruptedException { while (!channel.isClosed()) { Thread.sleep(DELAY); } return channel.getExitStatus(); } @Override public int exitValue() { if (!channel.isClosed()) { throw new IllegalThreadStateException(); } return channel.getExitStatus(); } @Override public void destroy() { channel.disconnect(); } protected int waitAndRead(OutputStream output, OutputStream err, IProgressMonitor monitor) { channel.setOutputStream(output); channel.setErrStream(err); while (!channel.isClosed() && !monitor.isCanceled()) { try { Thread.sleep(DELAY); } catch (InterruptedException e) { //ignore } } channel.setOutputStream(null); channel.setErrStream(null); return channel.getExitStatus(); } }