SubsystemRequestInfo.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. namespace Renci.SshNet.Messages.Connection
  2. {
  3. /// <summary>
  4. /// Represents "subsystem" type channel request information
  5. /// </summary>
  6. internal class SubsystemRequestInfo : RequestInfo
  7. {
  8. private byte[] _subsystemName;
  9. /// <summary>
  10. /// Channel request name
  11. /// </summary>
  12. public const string Name = "subsystem";
  13. /// <summary>
  14. /// Gets the name of the request.
  15. /// </summary>
  16. /// <value>
  17. /// The name of the request.
  18. /// </value>
  19. public override string RequestName
  20. {
  21. get { return Name; }
  22. }
  23. /// <summary>
  24. /// Gets the name of the subsystem.
  25. /// </summary>
  26. /// <value>
  27. /// The name of the subsystem.
  28. /// </value>
  29. public string SubsystemName
  30. {
  31. get { return Ascii.GetString(_subsystemName, 0, _subsystemName.Length); }
  32. private set { _subsystemName = Ascii.GetBytes(value); }
  33. }
  34. protected override int BufferCapacity
  35. {
  36. get
  37. {
  38. var capacity = base.BufferCapacity;
  39. capacity += 4; // SubsystemName length
  40. capacity += _subsystemName.Length; // SubsystemName
  41. return capacity;
  42. }
  43. }
  44. /// <summary>
  45. /// Initializes a new instance of the <see cref="SubsystemRequestInfo"/> class.
  46. /// </summary>
  47. public SubsystemRequestInfo()
  48. {
  49. WantReply = true;
  50. }
  51. /// <summary>
  52. /// Initializes a new instance of the <see cref="SubsystemRequestInfo"/> class.
  53. /// </summary>
  54. /// <param name="subsystem">The subsystem.</param>
  55. public SubsystemRequestInfo(string subsystem)
  56. : this()
  57. {
  58. SubsystemName = subsystem;
  59. }
  60. /// <summary>
  61. /// Called when type specific data need to be loaded.
  62. /// </summary>
  63. protected override void LoadData()
  64. {
  65. base.LoadData();
  66. _subsystemName = ReadBinary();
  67. }
  68. /// <summary>
  69. /// Called when type specific data need to be saved.
  70. /// </summary>
  71. protected override void SaveData()
  72. {
  73. base.SaveData();
  74. WriteBinaryString(_subsystemName);
  75. }
  76. }
  77. }