//using System; //using System.Net; //using System.IO; //using Tamir.Streams; // //namespace Tamir.SharpSsh.jsch //{ // /* -*-mode:java; c-basic-offset:2; -*- */ // /* // Copyright (c) 2002,2003,2004 ymnk, JCraft,Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // // 2. Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the distribution. // // 3. The names of the authors may not be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND // FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, // INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, // OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, // EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // */ // // // public abstract class Channel // { // internal static int index=0; // private static System.Collections.ArrayList pool=new System.Collections.ArrayList(); // internal static Channel getChannel(String type) // { // if(type.Equals("session")) // { // return new ChannelSession(); // } // if(type.Equals("shell")) // { // return new ChannelShell(); // } // if(type.Equals("exec")) // { // return new ChannelExec(); // } // if(type.Equals("x11")) // { // return new ChannelX11(); // } // if(type.Equals("direct-tcpip")) // { // return new ChannelDirectTCPIP(); // } // if(type.Equals("forwarded-tcpip")) // { // return new ChannelForwardedTCPIP(); // } // if(type.Equals("sftp")) // { // return new ChannelSftp(); // } // return null; // } // internal static Channel getChannel(int id, Session session) // { // lock(pool) // { // for(int i=0; i0) // { // try{System.Threading.Thread.Sleep(50);} // catch{} // retry--; // } // if(!session.IsConnected()) // { // throw new JSchException("session is down"); // } // if(retry==0) // { // throw new JSchException("channel is not opened."); // } // start(); // } // catch(Exception e) // { // if(e is JSchException) throw (JSchException)e; // } // } // // public virtual void setXForwarding(bool foo) // { // } // // public virtual void start() {} // // public bool isEOF() {return eof_remote;} // // internal virtual void getData(Buffer buf) // { // setRecipient(buf.getInt()); // setRemoteWindowSize(buf.getInt()); // setRemotePacketSize(buf.getInt()); // } // // public RequestWindowChange getRequestWindowChange() // { // return new RequestWindowChange(); // } // // public virtual void setInputStream(Stream ins) // { // io.setInputStream(ins); // } // public virtual void setOutputStream(Stream outs) // { // io.setOutputStream(outs); // } // public virtual void setExtOutputStream(Stream outs) // { // io.setExtOutputStream(outs); // } // public virtual Stream getInputStream() // { // PipedInputStream ins= // new MyPipedInputStream( // 32*1024 // this value should be customizable. // ); // io.setOutputStream(new PassiveOutputStream(ins)); // return ins; // } // public virtual Stream getExtInputStream() // { // PipedInputStream ins= // new MyPipedInputStream( // 32*1024 // this value should be customizable. // ); // io.setExtOutputStream(new PassiveOutputStream(ins)); // return ins; // } // public virtual Stream getOutputStream() // { // PipedOutputStream outs=new PipedOutputStream(); // io.setInputStream(new PassiveInputStream(outs)); // return outs; // } // // internal void setLocalWindowSizeMax(int foo){ this.lwsize_max=foo; } // internal void setLocalWindowSize(int foo){ this.lwsize=foo; } // internal void setLocalPacketSize(int foo){ this.lmpsize=foo; } // internal void setRemoteWindowSize(int foo){ this.rwsize=foo; } // internal void addRemoteWindowSize(int foo){ this.rwsize+=foo; } // internal void setRemotePacketSize(int foo){ this.rmpsize=foo; } // // public virtual void run() // { // } // // internal virtual void write(byte[] foo) // { // write(foo, 0, foo.Length); // } // internal virtual void write(byte[] foo, int s, int l) // { // //if(eof_remote)return; // if(io.outs!=null) // io.put(foo, s, l); // } // internal void write_ext(byte[] foo, int s, int l) // { // //if(eof_remote)return; // if(io.out_ext!=null) // io.put_ext(foo, s, l); // } // // internal void eof() // { // //System.out.println("EOF!!!! "+this); // //Thread.dumpStack(); // if(eof_local)return; // eof_local=true; // //close=eof; // try // { // Buffer buf=new Buffer(100); // Packet packet=new Packet(buf); // packet.reset(); // buf.putByte((byte)Session.SSH_MSG_CHANNEL_EOF); // buf.putInt(getRecipient()); // session.write(packet); // } // catch // { // //System.out.println("Channel.eof"); // //e.printStackTrace(); // } // if(!isConnected()) // { // disconnect(); // } // } // // internal void close() // { // //System.out.println("close!!!!"); // if(_close)return; // _close=true; // try // { // Buffer buf=new Buffer(100); // Packet packet=new Packet(buf); // packet.reset(); // buf.putByte((byte)Session.SSH_MSG_CHANNEL_CLOSE); // buf.putInt(getRecipient()); // session.write(packet); // session.disconnect(); // } // catch // { // //e.printStackTrace(); // } // } // internal static void eof(Session session) // { // Channel[] channels=null; // int count=0; // lock(pool) // { // channels=new Channel[pool.Count]; // for(int i=0; i