/// <summary> /// Called when type specific data need to be loaded. /// </summary> protected override void LoadData() { ChannelType = ReadBinary(); LocalChannelNumber = ReadUInt32(); InitialWindowSize = ReadUInt32(); MaximumPacketSize = ReadUInt32(); _infoBytes = ReadBytes(); var channelName = Ascii.GetString(ChannelType, 0, ChannelType.Length); switch (channelName) { case SessionChannelOpenInfo.Name: Info = new SessionChannelOpenInfo(_infoBytes); break; case X11ChannelOpenInfo.Name: Info = new X11ChannelOpenInfo(_infoBytes); break; case DirectTcpipChannelInfo.Name: Info = new DirectTcpipChannelInfo(_infoBytes); break; case ForwardedTcpipChannelInfo.Name: Info = new ForwardedTcpipChannelInfo(_infoBytes); break; default: throw new NotSupportedException(string.Format(CultureInfo.CurrentCulture, "Channel type '{0}' is not supported.", channelName)); } }
public void Constructor_LocalChannelNumberAndInitialWindowSizeAndMaximumPacketSizeAndInfo() { var localChannelNumber = (uint) _random.Next(0, int.MaxValue); var initialWindowSize = (uint) _random.Next(0, int.MaxValue); var maximumPacketSize = (uint) _random.Next(0, int.MaxValue); var info = new DirectTcpipChannelInfo("host", 22, "originator", 25); var target = new ChannelOpenMessage(localChannelNumber, initialWindowSize, maximumPacketSize, info); Assert.AreEqual(info.ChannelType, _ascii.GetString(target.ChannelType)); Assert.AreSame(info, target.Info); Assert.AreEqual(initialWindowSize, target.InitialWindowSize); Assert.AreEqual(localChannelNumber, target.LocalChannelNumber); Assert.AreEqual(maximumPacketSize, target.MaximumPacketSize); }
public void GetBytes() { var localChannelNumber = (uint)_random.Next(0, int.MaxValue); var initialWindowSize = (uint)_random.Next(0, int.MaxValue); var maximumPacketSize = (uint)_random.Next(0, int.MaxValue); var info = new DirectTcpipChannelInfo("host", 22, "originator", 25); var infoBytes = info.GetBytes(); var target = new ChannelOpenMessage(localChannelNumber, initialWindowSize, maximumPacketSize, info); var bytes = target.GetBytes(); var expectedBytesLength = 1; // Type expectedBytesLength += 4; // ChannelType length expectedBytesLength += target.ChannelType.Length; // ChannelType expectedBytesLength += 4; // LocalChannelNumber expectedBytesLength += 4; // InitialWindowSize expectedBytesLength += 4; // MaximumPacketSize expectedBytesLength += infoBytes.Length; // Info Assert.AreEqual(expectedBytesLength, bytes.Length); var sshDataStream = new SshDataStream(bytes); Assert.AreEqual(ChannelOpenMessage.MessageNumber, sshDataStream.ReadByte()); var actualChannelTypeLength = sshDataStream.ReadUInt32(); Assert.AreEqual((uint) target.ChannelType.Length, actualChannelTypeLength); #if TUNING var actualChannelType = new byte[actualChannelTypeLength]; sshDataStream.Read(actualChannelType, 0, (int) actualChannelTypeLength); Assert.IsTrue(target.ChannelType.SequenceEqual(actualChannelType)); #else var actualChannelType = new byte[actualChannelTypeLength]; sshDataStream.Read(actualChannelType, 0, (int) actualChannelTypeLength); Assert.AreEqual(target.ChannelType, SshData.Ascii.GetString(actualChannelType)); #endif Assert.AreEqual(localChannelNumber, sshDataStream.ReadUInt32()); Assert.AreEqual(initialWindowSize, sshDataStream.ReadUInt32()); Assert.AreEqual(maximumPacketSize, sshDataStream.ReadUInt32()); var actualInfo = new byte[infoBytes.Length]; sshDataStream.Read(actualInfo, 0, actualInfo.Length); Assert.IsTrue(infoBytes.SequenceEqual(actualInfo)); Assert.IsTrue(sshDataStream.IsEndOfData); }
/// <summary> /// Called when type specific data need to be loaded. /// </summary> protected override void LoadData() { #if TUNING ChannelType = ReadBinary(); #else var channelName = ReadAsciiString(); #endif LocalChannelNumber = ReadUInt32(); InitialWindowSize = ReadUInt32(); MaximumPacketSize = ReadUInt32(); #if TUNING _infoBytes = ReadBytes(); var channelName = Ascii.GetString(ChannelType, 0, ChannelType.Length); #else var _infoBytes = ReadBytes(); #endif switch (channelName) { case SessionChannelOpenInfo.NAME: Info = new SessionChannelOpenInfo(_infoBytes); break; case X11ChannelOpenInfo.NAME: Info = new X11ChannelOpenInfo(_infoBytes); break; case DirectTcpipChannelInfo.NAME: Info = new DirectTcpipChannelInfo(_infoBytes); break; case ForwardedTcpipChannelInfo.NAME: Info = new ForwardedTcpipChannelInfo(_infoBytes); break; default: throw new NotSupportedException(string.Format(CultureInfo.CurrentCulture, "Channel type '{0}' is not supported.", channelName)); } }
public void Load_DirectTcpipChannelInfo() { var localChannelNumber = (uint)_random.Next(0, int.MaxValue); var initialWindowSize = (uint)_random.Next(0, int.MaxValue); var maximumPacketSize = (uint)_random.Next(0, int.MaxValue); var info = new DirectTcpipChannelInfo("host", 22, "originator", 25); var target = new ChannelOpenMessage(localChannelNumber, initialWindowSize, maximumPacketSize, info); var bytes = target.GetBytes(); target.Load(bytes); Assert.AreEqual(info.ChannelType, _ascii.GetString(target.ChannelType)); Assert.IsNotNull(target.Info); Assert.AreEqual(initialWindowSize, target.InitialWindowSize); Assert.AreEqual(localChannelNumber, target.LocalChannelNumber); Assert.AreEqual(maximumPacketSize, target.MaximumPacketSize); var directTcpChannelInfo = target.Info as DirectTcpipChannelInfo; Assert.IsNotNull(directTcpChannelInfo); Assert.AreEqual(info.ChannelType, directTcpChannelInfo.ChannelType); Assert.AreEqual(info.HostToConnect, directTcpChannelInfo.HostToConnect); Assert.AreEqual(info.OriginatorAddress, directTcpChannelInfo.OriginatorAddress); Assert.AreEqual(info.OriginatorPort, directTcpChannelInfo.OriginatorPort); Assert.AreEqual(info.PortToConnect, directTcpChannelInfo.PortToConnect); }