| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 | namespace Renci.SshNet.Messages.Connection{    /// <summary>    /// Represents SSH_MSG_CHANNEL_OPEN_FAILURE message.    /// </summary>    [Message("SSH_MSG_CHANNEL_OPEN_FAILURE", 92)]    public class ChannelOpenFailureMessage : ChannelMessage    {        internal const uint AdministrativelyProhibited = 1;        internal const uint ConnectFailed = 2;        internal const uint UnknownChannelType = 3;        internal const uint ResourceShortage = 4;        /// <summary>        /// Gets failure reason code.        /// </summary>        public uint ReasonCode { get; private set; }        /// <summary>        /// Gets description for failure.        /// </summary>        public string Description { get; private set; }        /// <summary>        /// Gets message language.        /// </summary>        public string Language { get; private set; }        /// <summary>        /// Initializes a new instance of the <see cref="ChannelOpenFailureMessage"/> class.        /// </summary>        public ChannelOpenFailureMessage()        {        }        /// <summary>        /// Initializes a new instance of the <see cref="ChannelOpenFailureMessage"/> class.        /// </summary>        /// <param name="localChannelNumber">The local channel number.</param>        /// <param name="description">The description.</param>        /// <param name="reasonCode">The reason code.</param>        public ChannelOpenFailureMessage(uint localChannelNumber, string description, uint reasonCode)        {            LocalChannelNumber = localChannelNumber;            Description = description;            ReasonCode = reasonCode;        }        /// <summary>        /// Initializes a new instance of the <see cref="ChannelOpenFailureMessage"/> class.        /// </summary>        /// <param name="localChannelNumber">The local channel number.</param>        /// <param name="description">The description.</param>        /// <param name="reasonCode">The reason code.</param>        /// <param name="language">The language (RFC3066).</param>        public ChannelOpenFailureMessage(uint localChannelNumber, string description, uint reasonCode, string language)        {            LocalChannelNumber = localChannelNumber;            Description = description;            ReasonCode = reasonCode;            Language = language;        }        /// <summary>        /// Called when type specific data need to be loaded.        /// </summary>        protected override void LoadData()        {            base.LoadData();            ReasonCode = ReadUInt32();            Description = ReadString();            Language = ReadString();        }        /// <summary>        /// Called when type specific data need to be saved.        /// </summary>        protected override void SaveData()        {            base.SaveData();            Write(ReasonCode);            Write(Description ?? string.Empty);            Write(Language ?? "en");        }    }}
 |