Esempio n. 1
0
        private DataFragment ReceivePacket()
        {
            while (true)
            {
                DataFragment data = _packetReceiver.WaitResponse();

                PacketType pt = (PacketType)data.ByteAt(0); //shortcut
                if (pt == PacketType.SSH_MSG_IGNORE)
                {
                    SSH1DataReader r = new SSH1DataReader(data);
                    r.ReadPacketType();
                    if (_eventReceiver != null)
                    {
                        _eventReceiver.OnIgnoreMessage(r.ReadString());
                    }
                }
                else if (pt == PacketType.SSH_MSG_DEBUG)
                {
                    SSH1DataReader r = new SSH1DataReader(data);
                    r.ReadPacketType();
                    if (_eventReceiver != null)
                    {
                        _eventReceiver.OnDebugMessage(false, r.ReadString());
                    }
                }
                else
                {
                    return(data);
                }
            }
        }
Esempio n. 2
0
        public override void OnData(DataFragment data)
        {
            try {
                _buffer.Append(data);

                //ここで複数パケットを一括して受け取った場合を考慮している
                while (ConstructPacket())
                {
                    if (_packet.Length >= 1 && _packet.ByteAt(0) == (byte)PacketType.SSH_MSG_NEWKEYS)
                    {
                        // next packet must be decrypted with the new key
                        lock (_cipherSync) {
                            _waitingNewCipher = true;
                            // Note: SSH2SynchronizedPacketReceiver.OnData() queue the packet then
                            //       wait until the packet is dequeued
                            _inner_handler.OnData(_packet);
                            Monitor.Wait(_cipherSync, 1000);
                            if (_waitingNewCipher)
                            {
                                // something is going wrong...
                                _waitingNewCipher = false;
                                _cipher           = null;
                                _mac        = null;
                                _macEnabled = false;
                                _head       = null;
                            }
                        }
                    }
                    else
                    {
                        _inner_handler.OnData(_packet);
                    }
                }
            }
            catch (Exception ex) {
                OnError(ex);
            }
        }
Esempio n. 3
0
 private PacketType SneakPacketType(DataFragment data)
 {
     return((PacketType)data.ByteAt(0));
 }
Esempio n. 4
0
 private bool IsMsgNewKeys(DataFragment packet)
 {
     return(packet.Length >= 1 && packet.ByteAt(0) == (byte)PacketType.SSH_MSG_NEWKEYS);
 }