public void OnData(byte[] data, int offset, int length) { _buffer.Write(data, offset, length); int expectedLength = SSHUtil.ReadInt32(_buffer.UnderlyingBuffer, 0); if (expectedLength + 4 <= _buffer.Length) { SSH2DataReader r = new SSH2DataReader(new DataFragment(_buffer.UnderlyingBuffer, 4, _buffer.Length - 4)); AgentForwadPacketType pt = (AgentForwadPacketType)r.ReadByte(); //remaining len-1 _buffer.SetOffset(0); switch (pt) { case AgentForwadPacketType.SSH2_AGENTC_REQUEST_IDENTITIES: SendKeyList(); break; case AgentForwadPacketType.SSH2_AGENTC_SIGN_REQUEST: SendSign(r); break; default: //Debug.WriteLine("Unknown agent packet " + pt.ToString()); TransmitWriter(OpenWriter(AgentForwadPacketType.SSH_AGENT_FAILURE)); break; } } }