Example #1
0
        public override void start()
        {
            try {
                IRequest 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 SshClientException("ChannelExec");
            }
            thread = new ThreadAux(this);
            thread.setName("Exec thread " + session.getHost());
            thread.start();
        }
Example #2
0
        /*
         * public void finalize() throws Throwable{
         * disconnect();
         * super.finalize();
         * session=null;
         * }
         */

        public virtual void disconnect()
        {
            //System.Out.println(this+":disconnect "+io+" "+io.in);
            if (!connected)
            {
                return;
            }
            connected = false;

            close();

            _eof_remote = eof_local = true;

            thread = null;

            try {
                if (io != null)
                {
                    io.close();
                }
            }
            catch (Exception) {
                //e.printStackTrace();
            }
            io = null;
            AChannel.del(this);
        }
Example #3
0
        public override void start()
        {
            try {
                IRequest 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 SshClientException)
                {
                    throw (SshClientException)e;
                }
                throw new SshClientException("ChannelSubsystem");
            }
            ThreadAux thread = new ThreadAux(this);

            thread.setName("Subsystem for " + session.host);
            thread.start();
        }
Example #4
0
        public virtual void connect()
        {
            if (!session.isConnected())
            {
                throw new SshClientException("session is down");
            }
            try {
                Buffer buf    = new Buffer(100);
                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(this.type);
                buf.putInt(this.id);
                buf.putInt(this.lwsize);
                buf.putInt(this.lmpsize);
                session.write(packet);

                int retry = 1000;
                while (this.getRecipient() == -1 &&
                       session.isConnected() &&
                       retry > 0)
                {
                    try {
                        ThreadAux.Sleep(50);
                    }
                    catch (Exception) {
                    }
                    retry--;
                }
                if (!session.isConnected())
                {
                    throw new SshClientException("session is down");
                }
                if (retry == 0)
                {
                    throw new SshClientException("channel is not opened.");
                }
                connected = true;
                start();
            }
            catch (Exception e) {
                connected = false;
                if (e is SshClientException)
                {
                    throw (SshClientException)e;
                }
            }
        }
Example #5
0
        public override void run()
        {
            thread = ThreadAux.currentThread();
            Buffer buf    = new Buffer(rmpsize);
            Packet packet = new Packet(buf);
            int    i      = 0;

            try {
                while (thread != null && io != null && io.ins != null)
                {
                    i = io.ins.Read(buf.buffer,
                                    14,
                                    buf.buffer.Length - 14
                                    - 32 - 20             // padding and mac
                                    );
                    if (i <= 0)
                    {
                        eof();
                        break;
                    }
                    packet.reset();
                    if (_close)
                    {
                        break;
                    }
                    buf.putByte((byte)Session.SSH_MSG_CHANNEL_DATA);
                    buf.putInt(recipient);
                    buf.putInt(i);
                    buf.skip(i);
                    session.write(packet, this, i);
                }
            }
            catch            //(Exception e)
            {
                //System.out.println(e);
            }

            //thread=null;
            //eof();
            disconnect();
        }
Example #6
0
 public override void start()
 {
     try {
         IRequest 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 (Exception) {
         throw new SshClientException("ChannelShell");
     }
     thread = new ThreadAux(this);
     thread.setName("Shell for " + session.host);
     thread.start();
 }
Example #7
0
        public void request(Session session, AChannel channel)
        {
            Buffer buf    = new Buffer();
            Packet packet = new Packet(buf);

            bool reply = waitForReply();

            if (reply)
            {
                channel.reply = -1;
            }

            packet.reset();
            buf.putByte((byte)Session.SSH_MSG_CHANNEL_REQUEST);
            buf.putInt(channel.getRecipient());
            buf.putString(StringAux.getBytesUTF8("subsystem"));
            buf.putByte((byte)(waitForReply() ? 1 : 0));
            buf.putString(StringAux.getBytesUTF8(subsystem));
            session.write(packet);

            if (reply)
            {
                while (channel.reply == -1)
                {
                    try {
                        ThreadAux.Sleep(10);
                    }
                    catch (System.Exception) {
                    }
                }
                if (channel.reply == 0)
                {
                    throw new SshClientException("failed to send subsystem request");
                }
            }
        }
        public override void connect()
        {
            try {
                if (!session.isConnected())
                {
                    throw new SshClientException("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(StringAux.getBytes("direct-tcpip"));
                buf.putInt(id);
                buf.putInt(lwsize);
                buf.putInt(lmpsize);
                buf.putString(StringAux.getBytes(host));
                buf.putInt(port);
                buf.putString(StringAux.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);
                        ThreadAux.Sleep(50);
                        retry--;
                    }
                }
                catch {
                }

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

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

                connected = true;

                thread = new ThreadAux(this);
                thread.start();
            }
            catch (Exception e) {
                io.close();
                io = null;
                AChannel.del(this);
                if (e is SshClientException)
                {
                    throw (SshClientException)e;
                }
            }
        }