예제 #1
0
        public override void start()
        {
            try
            {
                Request request;

                if (xforwading)
                {
                    request = new RequestX11();
                    request.request(session, this);
                }

                if (pty)
                {
                    request = new RequestPtyReq();
                    request.request(session, this);
                }

                request = new RequestExec(command);
                request.request(session, this);
            }
            catch (Exception)
            {
                throw new JSchException("ChannelExec");
            }
            thread = new JavaThread(this);
            thread.Name("Exec thread " + session.getHost());
            thread.Start();
        }
예제 #2
0
 public override void start()
 {
     try
     {
         Request request;
         if (xforwading)
         {
             request = new RequestX11();
             request.request(session, this);
         }
         if (pty)
         {
             request = new RequestPtyReq();
             request.request(session, this);
         }
         request = new RequestShell();
         request.request(session, this);
     }
     catch //(System.Exception e)
     {
         throw new JSchException("ChannelShell");
     }
     thread = new JavaThread(this);
     thread.Name("Shell for " + session.host);
     thread.Start();
 }
예제 #3
0
        public override void start()
        {
            try
            {
                Request request;
                if (xforwading)
                {
                    request = new RequestX11();
                    request.request(session, this);
                }
                if (pty)
                {
                    request = new RequestPtyReq();
                    request.request(session, this);
                }
                request = new RequestSubsystem();
                ((RequestSubsystem)request).request(session, this, subsystem, want_reply);
            }
            catch (Exception e)
            {
                if (e is JSchException)
                {
                    throw (JSchException)e;
                }
                throw new JSchException("ChannelSubsystem");
            }
            JavaThread thread = new JavaThread(this);

            thread.Name("Subsystem for " + session.host);
            thread.Start();
        }
예제 #4
0
        public override void connect()
        {
            try
            {
                if (!session.isConnected())
                {
                    throw new JSchException("session is down");
                }
                Buffer buf    = new Buffer(150);
                Packet packet = new Packet(buf);
                // send
                // byte   SSH_MSG_CHANNEL_OPEN(90)
                // string channel type         //
                // uint32 sender channel       // 0
                // uint32 initial window size  // 0x100000(65536)
                // uint32 maxmum packet size   // 0x4000(16384)

                packet.reset();
                buf.putByte((byte)90);
                buf.putString(Util.getBytes("direct-tcpip"));
                buf.putInt(id);
                buf.putInt(lwsize);
                buf.putInt(lmpsize);
                buf.putString(Util.getBytes(host));
                buf.putInt(port);
                buf.putString(Util.getBytes(originator_IP_address));
                buf.putInt(originator_port);
                session.write(packet);

                int retry = 1000;
                try
                {
                    while (this.getRecipient() == -1 &&
                           session.isConnected() &&
                           retry > 0 &&
                           !_eof_remote)
                    {
                        //Thread.sleep(500);
                        Thread.Sleep(50);
                        retry--;
                    }
                }
                catch
                {
                }

                if (!session.isConnected())
                {
                    throw new JSchException("session is down");
                }
                if (retry == 0 || this._eof_remote)
                {
                    throw new JSchException("channel is not opened.");
                }

                /*
                 *              if(this.eof_remote){      // failed to open
                 *                disconnect();
                 *                return;
                 *              }
                 */

                connected = true;

                thread = new JavaThread(this);
                thread.Start();
            }
            catch (Exception e)
            {
                io.close();
                io = null;
                del(this);
                if (e is JSchException)
                {
                    throw (JSchException)e;
                }
            }
        }