mirror of
https://github.com/sshnet/SSH.NET.git
synced 2026-09-10 17:25:51 +00:00
Remove MessageTypes enum and reorganize message to use class attributes to allow handling of messages with the same code number and more easliy to intorduce new messages in the future
This commit is contained in:
@@ -135,9 +135,9 @@ namespace Renci.SshClient
|
||||
{
|
||||
this.Session = session;
|
||||
|
||||
this.Session.RegisterMessageType<FailureMessage>(MessageTypes.UserAuthenticationFailure);
|
||||
this.Session.RegisterMessageType<SuccessMessage>(MessageTypes.UserAuthenticationSuccess);
|
||||
this.Session.RegisterMessageType<BannerMessage>(MessageTypes.UserAuthenticationBanner);
|
||||
this.Session.RegisterMessage<FailureMessage>();
|
||||
this.Session.RegisterMessage<SuccessMessage>();
|
||||
this.Session.RegisterMessage<BannerMessage>();
|
||||
|
||||
this.Session.UserAuthenticationFailureReceived += Session_UserAuthenticationFailureReceived;
|
||||
this.Session.UserAuthenticationSuccessReceived += Session_UserAuthenticationSuccessMessageReceived;
|
||||
@@ -151,9 +151,9 @@ namespace Renci.SshClient
|
||||
this.Session.UserAuthenticationBannerReceived -= Session_UserAuthenticationBannerMessageReceived;
|
||||
this.Session.MessageReceived -= Session_MessageReceived;
|
||||
|
||||
this.Session.UnRegisterMessageType(MessageTypes.UserAuthenticationFailure);
|
||||
this.Session.UnRegisterMessageType(MessageTypes.UserAuthenticationSuccess);
|
||||
this.Session.UnRegisterMessageType(MessageTypes.UserAuthenticationBanner);
|
||||
this.Session.UnRegisterMessage<FailureMessage>();
|
||||
this.Session.UnRegisterMessage<SuccessMessage>();
|
||||
this.Session.UnRegisterMessage<BannerMessage>();
|
||||
|
||||
return this.IsAuthenticated;
|
||||
}
|
||||
|
||||
@@ -20,9 +20,9 @@ namespace Renci.SshClient
|
||||
if (this.IsStarted)
|
||||
return;
|
||||
|
||||
this.Session.RegisterMessageType<RequestFailureMessage>(Messages.MessageTypes.RequestFailure);
|
||||
this.Session.RegisterMessageType<RequestSuccessMessage>(Messages.MessageTypes.RequestSuccess);
|
||||
this.Session.RegisterMessageType<ChannelOpenMessage>(Messages.MessageTypes.ChannelOpen);
|
||||
this.Session.RegisterMessage<RequestFailureMessage>();
|
||||
this.Session.RegisterMessage<RequestSuccessMessage>();
|
||||
this.Session.RegisterMessage<ChannelOpenMessage>();
|
||||
|
||||
this.Session.RequestSuccessReceived += Session_RequestSuccess;
|
||||
this.Session.RequestFailureReceived += Session_RequestFailure;
|
||||
|
||||
@@ -39,13 +39,13 @@ namespace Renci.SshClient
|
||||
|
||||
protected override void OnAuthenticate()
|
||||
{
|
||||
this.Session.RegisterMessageType<InformationRequestMessage>(MessageTypes.UserAuthenticationInformationRequest);
|
||||
this.Session.RegisterMessage<InformationRequestMessage>();
|
||||
|
||||
this.Session.SendMessage(new RequestMessageKeyboardInteractive(ServiceNames.Connection, this.Username));
|
||||
|
||||
this.WaitHandle(this._authenticationCompleted);
|
||||
|
||||
this.Session.UnRegisterMessageType(MessageTypes.UserAuthenticationInformationRequest);
|
||||
this.Session.UnRegisterMessage<InformationRequestMessage>();
|
||||
|
||||
if (this._exception != null)
|
||||
{
|
||||
|
||||
@@ -2,13 +2,9 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Authentication
|
||||
{
|
||||
[Message("SSH_MSG_USERAUTH_BANNER", 53)]
|
||||
public class BannerMessage : Message
|
||||
{
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.UserAuthenticationBanner; }
|
||||
}
|
||||
|
||||
public string Message { get; private set; }
|
||||
|
||||
public string Language { get; private set; }
|
||||
|
||||
@@ -3,13 +3,9 @@ using System.Collections.Generic;
|
||||
|
||||
namespace Renci.SshClient.Messages.Authentication
|
||||
{
|
||||
[Message("SSH_MSG_USERAUTH_FAILURE", 51)]
|
||||
public class FailureMessage : Message
|
||||
{
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.UserAuthenticationFailure; }
|
||||
}
|
||||
|
||||
public IEnumerable<string> AllowedAuthentications { get; set; }
|
||||
|
||||
public string Message { get; private set; }
|
||||
|
||||
+1
-5
@@ -5,13 +5,9 @@ using Renci.SshClient.Common;
|
||||
|
||||
namespace Renci.SshClient.Messages.Authentication
|
||||
{
|
||||
[Message("SSH_MSG_USERAUTH_INFO_REQUEST", 60)]
|
||||
internal class InformationRequestMessage : Message
|
||||
{
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.UserAuthenticationInformationRequest; }
|
||||
}
|
||||
|
||||
public string Name { get; private set; }
|
||||
|
||||
public string Instruction { get; private set; }
|
||||
|
||||
+1
-5
@@ -3,13 +3,9 @@ using System.Collections.Generic;
|
||||
|
||||
namespace Renci.SshClient.Messages.Authentication
|
||||
{
|
||||
[Message("SSH_MSG_USERAUTH_INFO_RESPONSE", 61)]
|
||||
internal class InformationResponseMessage : Message
|
||||
{
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.UserAuthenticationInformationResponse; }
|
||||
}
|
||||
|
||||
public IList<string> Responses { get; private set; }
|
||||
|
||||
public InformationResponseMessage()
|
||||
|
||||
+1
-5
@@ -1,13 +1,9 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Authentication
|
||||
{
|
||||
[Message("SSH_MSG_USERAUTH_PASSWD_CHANGEREQ", 60)]
|
||||
internal class PasswordChangeRequiredMessage : Message
|
||||
{
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.UserAuthenticationPasswordChangeRequired; }
|
||||
}
|
||||
|
||||
public string Message { get; private set; }
|
||||
|
||||
public string Language { get; private set; }
|
||||
|
||||
@@ -3,13 +3,9 @@ using System.Collections.Generic;
|
||||
|
||||
namespace Renci.SshClient.Messages.Authentication
|
||||
{
|
||||
[Message("SSH_MSG_USERAUTH_PK_OK", 60)]
|
||||
internal class PublicKeyMessage : Message
|
||||
{
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.UserAuthenticationPublicKey; }
|
||||
}
|
||||
|
||||
public string PublicKeyAlgorithmName { get; private set; }
|
||||
|
||||
public IEnumerable<byte> PublicKeyData { get; private set; }
|
||||
|
||||
@@ -3,13 +3,9 @@ using System.Text;
|
||||
|
||||
namespace Renci.SshClient.Messages.Authentication
|
||||
{
|
||||
[Message("SSH_MSG_USERAUTH_REQUEST", 50)]
|
||||
public class RequestMessage : Message
|
||||
{
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.UserAuthenticationRequest; }
|
||||
}
|
||||
|
||||
public string Username { get; private set; }
|
||||
|
||||
public ServiceNames ServiceName { get; private set; }
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Authentication
|
||||
{
|
||||
internal class RequestMessagePublicKey : RequestMessage
|
||||
public class RequestMessagePublicKey : RequestMessage
|
||||
{
|
||||
public override string MethodName
|
||||
{
|
||||
|
||||
@@ -1,13 +1,9 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Authentication
|
||||
{
|
||||
[Message("SSH_MSG_USERAUTH_SUCCESS", 52)]
|
||||
public class SuccessMessage : Message
|
||||
{
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.UserAuthenticationSuccess; }
|
||||
}
|
||||
|
||||
protected override void LoadData()
|
||||
{
|
||||
}
|
||||
|
||||
@@ -1,12 +1,8 @@
|
||||
namespace Renci.SshClient.Messages.Connection
|
||||
{
|
||||
[Message("SSH_MSG_CHANNEL_CLOSE", 97)]
|
||||
public class ChannelCloseMessage : ChannelMessage
|
||||
{
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.ChannelClose; }
|
||||
}
|
||||
|
||||
public ChannelCloseMessage()
|
||||
{
|
||||
|
||||
|
||||
@@ -1,12 +1,8 @@
|
||||
namespace Renci.SshClient.Messages.Connection
|
||||
{
|
||||
[Message("SSH_MSG_CHANNEL_DATA", 94)]
|
||||
public class ChannelDataMessage : ChannelMessage
|
||||
{
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.ChannelData; }
|
||||
}
|
||||
|
||||
public string Data { get; protected set; }
|
||||
|
||||
public ChannelDataMessage()
|
||||
|
||||
@@ -1,12 +1,8 @@
|
||||
namespace Renci.SshClient.Messages.Connection
|
||||
{
|
||||
[Message("SSH_MSG_CHANNEL_EOF", 96)]
|
||||
public class ChannelEofMessage : ChannelMessage
|
||||
{
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.ChannelEof; }
|
||||
}
|
||||
|
||||
public ChannelEofMessage()
|
||||
{
|
||||
|
||||
|
||||
@@ -1,13 +1,8 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Connection
|
||||
namespace Renci.SshClient.Messages.Connection
|
||||
{
|
||||
[Message("SSH_MSG_CHANNEL_EXTENDED_DATA", 95)]
|
||||
public class ChannelExtendedDataMessage : ChannelMessage
|
||||
{
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.ChannelExtendedData; }
|
||||
}
|
||||
|
||||
public uint DataTypeCode { get; private set; }
|
||||
|
||||
public string Data { get; private set; }
|
||||
|
||||
@@ -1,12 +1,8 @@
|
||||
namespace Renci.SshClient.Messages.Connection
|
||||
{
|
||||
[Message("SSH_MSG_CHANNEL_FAILURE", 100)]
|
||||
public class ChannelFailureMessage : ChannelMessage
|
||||
{
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.ChannelFailure; }
|
||||
}
|
||||
|
||||
public ChannelFailureMessage()
|
||||
{
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ namespace Renci.SshClient.Messages.Connection
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Format("{0} : #{1}", this.MessageType, this.LocalChannelNumber);
|
||||
return string.Format("{0} : #{1}", base.ToString(), this.LocalChannelNumber);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-5
@@ -2,13 +2,9 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Connection
|
||||
{
|
||||
[Message("SSH_MSG_CHANNEL_OPEN", 90)]
|
||||
public class ChannelOpenMessage : ChannelMessage
|
||||
{
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.ChannelOpen; }
|
||||
}
|
||||
|
||||
public string ChannelType
|
||||
{
|
||||
get
|
||||
|
||||
+1
-5
@@ -1,12 +1,8 @@
|
||||
namespace Renci.SshClient.Messages.Connection
|
||||
{
|
||||
[Message("SSH_MSG_CHANNEL_OPEN_CONFIRMATION", 91)]
|
||||
public class ChannelOpenConfirmationMessage : ChannelMessage
|
||||
{
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.ChannelOpenConfirmation; }
|
||||
}
|
||||
|
||||
public uint RemoteChannelNumber { get; private set; }
|
||||
|
||||
public uint InitialWindowSize { get; private set; }
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Connection
|
||||
{
|
||||
internal class ChannelOpenDirectTcpIPMessage : ChannelOpenMessage
|
||||
{
|
||||
public string HostToConnect { get; private set; }
|
||||
|
||||
public uint PortToConnect { get; private set; }
|
||||
|
||||
public string OriginatorIP { get; private set; }
|
||||
|
||||
public uint OriginatorPort { get; private set; }
|
||||
|
||||
protected override void LoadData()
|
||||
{
|
||||
base.LoadData();
|
||||
this.HostToConnect = this.ReadString();
|
||||
this.PortToConnect = this.ReadUInt32();
|
||||
this.OriginatorIP = this.ReadString();
|
||||
this.OriginatorPort = this.ReadUInt32();
|
||||
}
|
||||
|
||||
protected override void SaveData()
|
||||
{
|
||||
base.SaveData();
|
||||
this.Write(this.HostToConnect);
|
||||
this.Write(this.PortToConnect);
|
||||
this.Write(this.OriginatorIP);
|
||||
this.Write(this.OriginatorPort);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,8 @@
|
||||
namespace Renci.SshClient.Messages.Connection
|
||||
{
|
||||
[Message("SSH_MSG_CHANNEL_OPEN_FAILURE", 92)]
|
||||
public class ChannelOpenFailureMessage : ChannelMessage
|
||||
{
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.ChannelOpenFailure; }
|
||||
}
|
||||
|
||||
public uint ReasonCode { get; private set; }
|
||||
|
||||
public string Description { get; private set; }
|
||||
|
||||
+1
-5
@@ -2,13 +2,9 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Connection
|
||||
{
|
||||
[Message("SSH_MSG_CHANNEL_REQUEST", 98)]
|
||||
public class ChannelRequestMessage : ChannelMessage
|
||||
{
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.ChannelRequest; }
|
||||
}
|
||||
|
||||
public string RequestName
|
||||
{
|
||||
get
|
||||
|
||||
@@ -1,12 +1,8 @@
|
||||
namespace Renci.SshClient.Messages.Connection
|
||||
{
|
||||
[Message("SSH_MSG_CHANNEL_SUCCESS", 99)]
|
||||
public class ChannelSuccessMessage : ChannelMessage
|
||||
{
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.ChannelSuccess; }
|
||||
}
|
||||
|
||||
public ChannelSuccessMessage()
|
||||
{
|
||||
|
||||
|
||||
@@ -1,12 +1,8 @@
|
||||
namespace Renci.SshClient.Messages.Connection
|
||||
{
|
||||
[Message("SSH_MSG_CHANNEL_WINDOW_ADJUST", 93)]
|
||||
public class ChannelWindowAdjustMessage : ChannelMessage
|
||||
{
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.ChannelWindowAdjust; }
|
||||
}
|
||||
|
||||
public uint BytesToAdd { get; private set; }
|
||||
|
||||
public ChannelWindowAdjustMessage()
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Connection
|
||||
{
|
||||
[Message("SSH_MSG_GLOBAL_REQUEST", 80)]
|
||||
public class GlobalRequestMessage : Message
|
||||
{
|
||||
public GlobalRequestNames RequestName { get; private set; }
|
||||
@@ -30,11 +31,6 @@ namespace Renci.SshClient.Messages.Connection
|
||||
this.PortToBind = portToBind;
|
||||
}
|
||||
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.GlobalRequest; }
|
||||
}
|
||||
|
||||
protected override void LoadData()
|
||||
{
|
||||
var requestName = this.ReadString();
|
||||
@@ -65,9 +61,6 @@ namespace Renci.SshClient.Messages.Connection
|
||||
case GlobalRequestNames.CancelTcpIpForward:
|
||||
this.Write("cancel-tcpip-forward");
|
||||
break;
|
||||
case GlobalRequestNames.KeepAlive:
|
||||
this.Write("keep-alive-message-ignore-me");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -81,8 +74,6 @@ namespace Renci.SshClient.Messages.Connection
|
||||
this.Write(this.AddressToBind);
|
||||
this.Write(this.PortToBind);
|
||||
break;
|
||||
case GlobalRequestNames.KeepAlive:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -10,9 +10,5 @@
|
||||
/// cancel-tcpip-forward
|
||||
/// </summary>
|
||||
CancelTcpIpForward,
|
||||
/// <summary>
|
||||
/// keep-alive-message-ignore-me
|
||||
/// </summary>
|
||||
KeepAlive
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,9 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Connection
|
||||
{
|
||||
[Message("SSH_MSG_REQUEST_FAILURE", 82)]
|
||||
public class RequestFailureMessage : Message
|
||||
{
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.RequestFailure; }
|
||||
}
|
||||
|
||||
protected override void LoadData()
|
||||
{
|
||||
}
|
||||
|
||||
@@ -1,15 +1,11 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Connection
|
||||
{
|
||||
[Message("SSH_MSG_REQUEST_SUCCESS", 81)]
|
||||
public class RequestSuccessMessage : Message
|
||||
{
|
||||
public uint? BoundPort { get; private set; }
|
||||
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.RequestSuccess; }
|
||||
}
|
||||
|
||||
public RequestSuccessMessage()
|
||||
{
|
||||
|
||||
|
||||
@@ -6,11 +6,9 @@ namespace Renci.SshClient.Messages
|
||||
{
|
||||
public abstract class Message : SshData
|
||||
{
|
||||
public abstract MessageTypes MessageType { get; }
|
||||
|
||||
internal static T Load<T>(IEnumerable<byte> data) where T : Message, new()
|
||||
{
|
||||
var messageType = (MessageTypes)data.FirstOrDefault();
|
||||
var messageType = data.FirstOrDefault();
|
||||
|
||||
T message = new T();
|
||||
|
||||
@@ -33,17 +31,26 @@ namespace Renci.SshClient.Messages
|
||||
|
||||
public override IEnumerable<byte> GetBytes()
|
||||
{
|
||||
var messageAttribute = this.GetType().GetCustomAttributes(typeof(MessageAttribute), true).SingleOrDefault() as MessageAttribute;
|
||||
|
||||
if (messageAttribute == null)
|
||||
throw new SshException(string.Format("Type '{0}' is not a valid message type.", this.GetType().AssemblyQualifiedName));
|
||||
|
||||
var data = new List<byte>(base.GetBytes());
|
||||
|
||||
data.Insert(0, (byte)this.MessageType);
|
||||
data.Insert(0, messageAttribute.Number);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return this.MessageType.ToString();
|
||||
}
|
||||
var messageAttribute = this.GetType().GetCustomAttributes(typeof(MessageAttribute), true).SingleOrDefault() as MessageAttribute;
|
||||
|
||||
if (messageAttribute == null)
|
||||
throw new SshException(string.Format("Type '{0}' is not a valid message type.", this.GetType().AssemblyQualifiedName));
|
||||
|
||||
return messageAttribute.Name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace Renci.SshClient.Messages
|
||||
{
|
||||
[AttributeUsage(AttributeTargets.Class, Inherited = true, AllowMultiple = false)]
|
||||
public sealed class MessageAttribute : Attribute
|
||||
{
|
||||
public string Name { get; set; }
|
||||
|
||||
public byte Number { get; set; }
|
||||
|
||||
// This is a positional argument
|
||||
public MessageAttribute(string name, byte number)
|
||||
{
|
||||
this.Name = name;
|
||||
this.Number = number;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,161 +0,0 @@
|
||||
namespace Renci.SshClient.Messages
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public enum MessageTypes : byte
|
||||
{
|
||||
/// <summary>
|
||||
/// {35A90EBF-F421-44A3-BE3A-47C72AFE47FE}
|
||||
/// </summary>
|
||||
None = 0,
|
||||
/// <summary>
|
||||
/// SSH_MSG_DISCONNECT
|
||||
/// </summary>
|
||||
Disconnect = 1,
|
||||
/// <summary>
|
||||
/// SSH_MSG_IGNORE
|
||||
/// </summary>
|
||||
Ignore = 2,
|
||||
/// <summary>
|
||||
/// SSH_MSG_UNIMPLEMENTED
|
||||
/// </summary>
|
||||
Unimplemented = 3,
|
||||
/// <summary>
|
||||
/// SSH_MSG_DEBUG
|
||||
/// </summary>
|
||||
Debug = 4,
|
||||
/// <summary>
|
||||
/// SSH_MSG_SERVICE_REQUEST
|
||||
/// </summary>
|
||||
ServiceRequest = 5,
|
||||
/// <summary>
|
||||
/// SSH_MSG_SERVICE_ACCEPT
|
||||
/// </summary>
|
||||
ServiceAcceptRequest = 6,
|
||||
|
||||
/// <summary>
|
||||
/// SSH_MSG_KEXINIT
|
||||
/// </summary>
|
||||
KeyExchangeInit = 20,
|
||||
/// <summary>
|
||||
/// SSH_MSG_NEWKEYS
|
||||
/// </summary>
|
||||
NewKeys = 21,
|
||||
/// <summary>
|
||||
/// SSH_MSG_KEXDH_INIT
|
||||
/// </summary>
|
||||
DiffieHellmanKeyExchangeInit = 30,
|
||||
/// <summary>
|
||||
/// SSH_MSG_KEXDH_REPLY
|
||||
/// </summary>
|
||||
KeyExchangeDhReply = 31,
|
||||
/// <summary>
|
||||
/// SSH_MSG_KEX_DH_GEX_GROUP
|
||||
/// </summary>
|
||||
KeyExchangeDhGroupExchangeGroup = 31,
|
||||
/// <summary>
|
||||
/// SSH_MSG_KEX_DH_GEX_INIT
|
||||
/// </summary>
|
||||
KeyExchangeDhGroupExchangeInit = 32,
|
||||
/// <summary>
|
||||
/// SSH_MSG_KEX_DH_GEX_REPLY
|
||||
/// </summary>
|
||||
KeyExchangeDhGroupExchangeReply = 33,
|
||||
/// <summary>
|
||||
/// SSH_MSG_KEX_DH_GEX_REQUEST
|
||||
/// </summary>
|
||||
KeyExchangeDhGroupExchangeRequest = 34,
|
||||
|
||||
/// <summary>
|
||||
/// SSH_MSG_USERAUTH_REQUEST
|
||||
/// </summary>
|
||||
UserAuthenticationRequest = 50,
|
||||
/// <summary>
|
||||
/// SSH_MSG_USERAUTH_FAILURE
|
||||
/// </summary>
|
||||
UserAuthenticationFailure = 51,
|
||||
/// <summary>
|
||||
/// SSH_MSG_USERAUTH_SUCCESS
|
||||
/// </summary>
|
||||
UserAuthenticationSuccess = 52,
|
||||
/// <summary>
|
||||
/// SSH_MSG_USERAUTH_BANNER
|
||||
/// </summary>
|
||||
UserAuthenticationBanner = 53,
|
||||
/// <summary>
|
||||
/// SSH_MSG_USERAUTH_INFO_REQUEST
|
||||
/// </summary>
|
||||
UserAuthenticationInformationRequest = 60,
|
||||
/// <summary>
|
||||
/// SSH_MSG_USERAUTH_INFO_RESPONSE
|
||||
/// </summary>
|
||||
UserAuthenticationInformationResponse = 61,
|
||||
/// <summary>
|
||||
/// SSH_MSG_USERAUTH_PK_OK
|
||||
/// </summary>
|
||||
UserAuthenticationPublicKey = 60,
|
||||
/// <summary>
|
||||
/// SSH_MSG_USERAUTH_PASSWD_CHANGEREQ
|
||||
/// </summary>
|
||||
UserAuthenticationPasswordChangeRequired = 60,
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// SSH_MSG_GLOBAL_REQUEST
|
||||
/// </summary>
|
||||
GlobalRequest = 80,
|
||||
/// <summary>
|
||||
/// SSH_MSG_REQUEST_SUCCESS
|
||||
/// </summary>
|
||||
RequestSuccess = 81,
|
||||
/// <summary>
|
||||
/// SSH_MSG_REQUEST_FAILURE
|
||||
/// </summary>
|
||||
RequestFailure = 82,
|
||||
/// <summary>
|
||||
/// SSH_MSG_CHANNEL_OPEN
|
||||
/// </summary>
|
||||
ChannelOpen = 90,
|
||||
/// <summary>
|
||||
/// SSH_MSG_CHANNEL_OPEN_CONFIRMATION
|
||||
/// </summary>
|
||||
ChannelOpenConfirmation = 91,
|
||||
/// <summary>
|
||||
/// SSH_MSG_CHANNEL_OPEN_FAILURE
|
||||
/// </summary>
|
||||
ChannelOpenFailure = 92,
|
||||
/// <summary>
|
||||
/// SSH_MSG_CHANNEL_WINDOW_ADJUST
|
||||
/// </summary>
|
||||
ChannelWindowAdjust = 93,
|
||||
/// <summary>
|
||||
/// SSH_MSG_CHANNEL_DATA
|
||||
/// </summary>
|
||||
ChannelData = 94,
|
||||
/// <summary>
|
||||
/// SSH_MSG_CHANNEL_EXTENDED_DATA
|
||||
/// </summary>
|
||||
ChannelExtendedData = 95,
|
||||
/// <summary>
|
||||
/// SSH_MSG_CHANNEL_EOF
|
||||
/// </summary>
|
||||
ChannelEof = 96,
|
||||
/// <summary>
|
||||
/// SSH_MSG_CHANNEL_CLOSE
|
||||
/// </summary>
|
||||
ChannelClose = 97,
|
||||
/// <summary>
|
||||
/// SSH_MSG_CHANNEL_REQUEST
|
||||
/// </summary>
|
||||
ChannelRequest = 98,
|
||||
/// <summary>
|
||||
/// SSH_MSG_CHANNEL_SUCCESS
|
||||
/// </summary>
|
||||
ChannelSuccess = 99,
|
||||
/// <summary>
|
||||
/// SSH_MSG_CHANNEL_FAILURE
|
||||
/// </summary>
|
||||
ChannelFailure = 100,
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Transport
|
||||
{
|
||||
[Message("SSH_MSG_DEBUG", 4)]
|
||||
public class DebugMessage : Message
|
||||
{
|
||||
public bool IsAlwaysDisplay { get; private set; }
|
||||
@@ -9,11 +10,6 @@ namespace Renci.SshClient.Messages.Transport
|
||||
|
||||
public string Language { get; private set; }
|
||||
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.Debug; }
|
||||
}
|
||||
|
||||
protected override void LoadData()
|
||||
{
|
||||
this.IsAlwaysDisplay = this.ReadBoolean();
|
||||
|
||||
@@ -2,13 +2,9 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Transport
|
||||
{
|
||||
[Message("SSH_MSG_DISCONNECT", 1)]
|
||||
public class DisconnectMessage : Message
|
||||
{
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.Disconnect; }
|
||||
}
|
||||
|
||||
public DisconnectReasons ReasonCode { get; private set; }
|
||||
|
||||
public string Description { get; private set; }
|
||||
|
||||
@@ -1,15 +1,11 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Transport
|
||||
{
|
||||
[Message("SSH_MSG_IGNORE", 2)]
|
||||
public class IgnoreMessage : Message
|
||||
{
|
||||
public string Data { get; private set; }
|
||||
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.Ignore; }
|
||||
}
|
||||
|
||||
public IgnoreMessage()
|
||||
{
|
||||
this.Data = string.Empty;
|
||||
|
||||
+1
-5
@@ -6,13 +6,9 @@ using System.Numerics;
|
||||
|
||||
namespace Renci.SshClient.Messages.Transport
|
||||
{
|
||||
[Message("SSH_MSG_KEX_DH_GEX_GROUP", 31)]
|
||||
public class KeyExchangeDhGroupExchangeGroup : Message
|
||||
{
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.KeyExchangeDhGroupExchangeGroup; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the safe prime.
|
||||
/// </summary>
|
||||
|
||||
+1
-5
@@ -6,13 +6,9 @@ using System.Numerics;
|
||||
|
||||
namespace Renci.SshClient.Messages.Transport
|
||||
{
|
||||
[Message("SSH_MSG_KEX_DH_GEX_INIT", 32)]
|
||||
internal class KeyExchangeDhGroupExchangeInit : Message
|
||||
{
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.KeyExchangeDhGroupExchangeInit; }
|
||||
}
|
||||
|
||||
public BigInteger E { get; private set; }
|
||||
|
||||
public KeyExchangeDhGroupExchangeInit(BigInteger clientExchangeValue)
|
||||
|
||||
+1
-5
@@ -6,13 +6,9 @@ using System.Numerics;
|
||||
|
||||
namespace Renci.SshClient.Messages.Transport
|
||||
{
|
||||
[Message("SSH_MSG_KEX_DH_GEX_REPLY", 33)]
|
||||
internal class KeyExchangeDhGroupExchangeReply : Message
|
||||
{
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.KeyExchangeDhGroupExchangeReply; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets server public host key and certificates
|
||||
/// </summary>
|
||||
|
||||
+1
-5
@@ -5,13 +5,9 @@ using System.Text;
|
||||
|
||||
namespace Renci.SshClient.Messages.Transport
|
||||
{
|
||||
[Message("SSH_MSG_KEX_DH_GEX_REQUEST", 34)]
|
||||
internal class KeyExchangeDhGroupExchangeRequest : Message
|
||||
{
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.KeyExchangeDhGroupExchangeRequest; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the minimal size in bits of an acceptable group.
|
||||
/// </summary>
|
||||
|
||||
@@ -2,18 +2,11 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Transport
|
||||
{
|
||||
[Message("SSH_MSG_KEXDH_INIT", 30)]
|
||||
internal class KeyExchangeDhInitMessage : Message
|
||||
{
|
||||
public BigInteger E { get; private set; }
|
||||
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get
|
||||
{
|
||||
return MessageTypes.DiffieHellmanKeyExchangeInit;
|
||||
}
|
||||
}
|
||||
|
||||
public KeyExchangeDhInitMessage(BigInteger clientExchangeValue)
|
||||
{
|
||||
this.E = clientExchangeValue;
|
||||
|
||||
@@ -3,6 +3,7 @@ using System.Numerics;
|
||||
|
||||
namespace Renci.SshClient.Messages.Transport
|
||||
{
|
||||
[Message("SSH_MSG_KEXDH_REPLY", 31)]
|
||||
public class KeyExchangeDhReplyMessage : Message
|
||||
{
|
||||
/// <summary>
|
||||
@@ -19,14 +20,6 @@ namespace Renci.SshClient.Messages.Transport
|
||||
/// <value>The signature.</value>
|
||||
public string Signature { get; private set; }
|
||||
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get
|
||||
{
|
||||
return MessageTypes.KeyExchangeDhReply;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void LoadData()
|
||||
{
|
||||
this.ResetReader();
|
||||
|
||||
@@ -4,15 +4,11 @@ using System.Security.Cryptography;
|
||||
|
||||
namespace Renci.SshClient.Messages.Transport
|
||||
{
|
||||
[Message("SSH_MSG_KEXINIT", 20)]
|
||||
public class KeyExchangeInitMessage : Message
|
||||
{
|
||||
private static RNGCryptoServiceProvider _randomizer = new System.Security.Cryptography.RNGCryptoServiceProvider();
|
||||
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.KeyExchangeInit; }
|
||||
}
|
||||
|
||||
public KeyExchangeInitMessage()
|
||||
{
|
||||
var cookie = new byte[16];
|
||||
|
||||
@@ -1,12 +1,8 @@
|
||||
namespace Renci.SshClient.Messages.Transport
|
||||
{
|
||||
[Message("SSH_MSG_NEWKEYS", 21)]
|
||||
public class NewKeysMessage : Message
|
||||
{
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.NewKeys; }
|
||||
}
|
||||
|
||||
protected override void LoadData()
|
||||
{
|
||||
}
|
||||
|
||||
@@ -5,13 +5,9 @@ namespace Renci.SshClient.Messages.Transport
|
||||
/// <summary>
|
||||
/// SSH_MSG_SERVICE_ACCEPT
|
||||
/// </summary>
|
||||
[Message("SSH_MSG_SERVICE_ACCEPT", 6)]
|
||||
public class ServiceAcceptMessage : Message
|
||||
{
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.ServiceAcceptRequest; }
|
||||
}
|
||||
|
||||
public ServiceNames ServiceName { get; private set; }
|
||||
|
||||
protected override void LoadData()
|
||||
|
||||
@@ -5,13 +5,9 @@ namespace Renci.SshClient.Messages.Transport
|
||||
/// <summary>
|
||||
/// Contains SSH_MSG_SERVICE_REQUEST message information
|
||||
/// </summary>
|
||||
[Message("SSH_MSG_SERVICE_REQUEST", 5)]
|
||||
public class ServiceRequestMessage : Message
|
||||
{
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.ServiceRequest; }
|
||||
}
|
||||
|
||||
public ServiceNames ServiceName { get; private set; }
|
||||
|
||||
public ServiceRequestMessage(ServiceNames serviceName)
|
||||
|
||||
@@ -1,13 +1,9 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Transport
|
||||
{
|
||||
[Message("SSH_MSG_UNIMPLEMENTED", 3)]
|
||||
public class UnimplementedMessage : Message
|
||||
{
|
||||
public override MessageTypes MessageType
|
||||
{
|
||||
get { return MessageTypes.Unimplemented; }
|
||||
}
|
||||
|
||||
protected override void LoadData()
|
||||
{
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ namespace Renci.SshClient
|
||||
|
||||
protected override void OnAuthenticate()
|
||||
{
|
||||
this.Session.RegisterMessageType<PasswordChangeRequiredMessage>(MessageTypes.UserAuthenticationPasswordChangeRequired);
|
||||
this.Session.RegisterMessage<PasswordChangeRequiredMessage>();
|
||||
|
||||
this.SendMessage(new RequestMessagePassword(ServiceNames.Connection, this.Username, this.Password));
|
||||
|
||||
@@ -72,7 +72,7 @@ namespace Renci.SshClient
|
||||
|
||||
if (e.Message is PasswordChangeRequiredMessage)
|
||||
{
|
||||
this.Session.UnRegisterMessageType(MessageTypes.UserAuthenticationPasswordChangeRequired);
|
||||
this.Session.UnRegisterMessage<PasswordChangeRequiredMessage>();
|
||||
|
||||
var eventTask = Task.Factory.StartNew(() =>
|
||||
{
|
||||
|
||||
@@ -43,7 +43,7 @@ namespace Renci.SshClient
|
||||
if (this.KeyFiles == null)
|
||||
return;
|
||||
|
||||
this.Session.RegisterMessageType<PublicKeyMessage>(MessageTypes.UserAuthenticationPublicKey);
|
||||
this.Session.RegisterMessage<PublicKeyMessage>();
|
||||
|
||||
foreach (var keyFile in this.KeyFiles)
|
||||
{
|
||||
@@ -87,7 +87,7 @@ namespace Renci.SshClient
|
||||
}
|
||||
}
|
||||
|
||||
this.Session.UnRegisterMessageType(MessageTypes.UserAuthenticationPublicKey);
|
||||
this.Session.UnRegisterMessage<PublicKeyMessage>();
|
||||
}
|
||||
|
||||
protected override void Session_UserAuthenticationSuccessMessageReceived(object sender, MessageEventArgs<SuccessMessage> e)
|
||||
@@ -135,7 +135,7 @@ namespace Renci.SshClient
|
||||
protected override void SaveData()
|
||||
{
|
||||
this.Write(this._sessionId);
|
||||
this.Write((byte)this._message.MessageType);
|
||||
this.Write((byte)50);
|
||||
this.Write(this._message.Username);
|
||||
this.Write("ssh-connection");
|
||||
this.Write("publickey");
|
||||
|
||||
@@ -95,7 +95,8 @@
|
||||
<Compile Include="Messages\Connection\ChannelRequest\WindowChangeRequestInfo.cs" />
|
||||
<Compile Include="Messages\Connection\ChannelRequest\X11ForwardingRequestInfo.cs" />
|
||||
<Compile Include="Messages\Connection\ChannelRequest\XonXoffRequestInfo.cs" />
|
||||
<Compile Include="Messages\Sftp\SftpRequestMessage.cs" />
|
||||
<Compile Include="Messages\MessageAttribute.cs" />
|
||||
<Compile Include="Sftp\Messages\SftpRequestMessage.cs" />
|
||||
<Compile Include="Messages\Transport\KeyExchangeDhGroupExchangeGroup.cs" />
|
||||
<Compile Include="Messages\Transport\KeyExchangeDhGroupExchangeInit.cs" />
|
||||
<Compile Include="Messages\Transport\KeyExchangeDhGroupExchangeReply.cs" />
|
||||
@@ -138,7 +139,6 @@
|
||||
<Compile Include="ForwardedPort.cs" />
|
||||
<Compile Include="ForwardedPortLocal.cs" />
|
||||
<Compile Include="ForwardedPortRemote.cs" />
|
||||
<Compile Include="Messages\Connection\ChannelOpenDirectTcpIPMessage.cs" />
|
||||
<Compile Include="Messages\Connection\GlobalRequestNames.cs" />
|
||||
<Compile Include="Security\Algorithm.cs" />
|
||||
<Compile Include="Security\Cipher.cs" />
|
||||
@@ -146,43 +146,43 @@
|
||||
<Compile Include="Security\CipherTripleDES.cs" />
|
||||
<Compile Include="Compression\Compressor.cs" />
|
||||
<Compile Include="Common\DataReceivedEventArgs.cs" />
|
||||
<Compile Include="Messages\Sftp\AceMasks.cs" />
|
||||
<Compile Include="Messages\Sftp\Attributes.cs" />
|
||||
<Compile Include="Messages\Sftp\AttributesMessage.cs" />
|
||||
<Compile Include="Messages\Sftp\CloseMessage.cs" />
|
||||
<Compile Include="Messages\Sftp\DataMessage.cs" />
|
||||
<Compile Include="Messages\Sftp\ExtendedMessage.cs" />
|
||||
<Compile Include="Messages\Sftp\ExtendedReplyMessage.cs" />
|
||||
<Compile Include="Messages\Sftp\Flags.cs" />
|
||||
<Compile Include="Messages\Sftp\FSetStat.cs" />
|
||||
<Compile Include="Messages\Sftp\FSetStatMessage.cs" />
|
||||
<Compile Include="Messages\Sftp\FStatMessage.cs" />
|
||||
<Compile Include="Messages\Sftp\HandleMessage.cs" />
|
||||
<Compile Include="Messages\Sftp\InitMessage.cs" />
|
||||
<Compile Include="Messages\Sftp\SymLinkMessage.cs">
|
||||
<Compile Include="Sftp\Messages\AceMasks.cs" />
|
||||
<Compile Include="Sftp\Messages\Attributes.cs" />
|
||||
<Compile Include="Sftp\Messages\AttributesMessage.cs" />
|
||||
<Compile Include="Sftp\Messages\CloseMessage.cs" />
|
||||
<Compile Include="Sftp\Messages\DataMessage.cs" />
|
||||
<Compile Include="Sftp\Messages\ExtendedMessage.cs" />
|
||||
<Compile Include="Sftp\Messages\ExtendedReplyMessage.cs" />
|
||||
<Compile Include="Sftp\Messages\Flags.cs" />
|
||||
<Compile Include="Sftp\Messages\FSetStat.cs" />
|
||||
<Compile Include="Sftp\Messages\FSetStatMessage.cs" />
|
||||
<Compile Include="Sftp\Messages\FStatMessage.cs" />
|
||||
<Compile Include="Sftp\Messages\HandleMessage.cs" />
|
||||
<Compile Include="Sftp\Messages\InitMessage.cs" />
|
||||
<Compile Include="Sftp\Messages\SymLinkMessage.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Messages\Sftp\LStatMessage.cs" />
|
||||
<Compile Include="Messages\Sftp\MkDirMessage.cs" />
|
||||
<Compile Include="Messages\Sftp\NameMessage.cs" />
|
||||
<Compile Include="Messages\Sftp\OpenDirMessage.cs" />
|
||||
<Compile Include="Messages\Sftp\OpenMessage.cs" />
|
||||
<Compile Include="Messages\Sftp\ReadDirMessage.cs" />
|
||||
<Compile Include="Messages\Sftp\ReadLinkMessage.cs" />
|
||||
<Compile Include="Messages\Sftp\ReadMessage.cs" />
|
||||
<Compile Include="Messages\Sftp\RealPathMessage.cs" />
|
||||
<Compile Include="Messages\Sftp\RemoveMessage.cs" />
|
||||
<Compile Include="Messages\Sftp\RenameMessage.cs" />
|
||||
<Compile Include="Messages\Sftp\RmDirMessage.cs" />
|
||||
<Compile Include="Messages\Sftp\SetStatMessage.cs" />
|
||||
<Compile Include="Messages\Sftp\SftpDataMessage.cs" />
|
||||
<Compile Include="Messages\Sftp\SftpMessage.cs" />
|
||||
<Compile Include="Messages\Sftp\SftpMessageTypes.cs" />
|
||||
<Compile Include="Messages\Sftp\StatMessage.cs" />
|
||||
<Compile Include="Messages\Sftp\StatusCodes.cs" />
|
||||
<Compile Include="Messages\Sftp\StatusMessage.cs" />
|
||||
<Compile Include="Messages\Sftp\VersionMessage.cs" />
|
||||
<Compile Include="Messages\Sftp\WriteMessage.cs" />
|
||||
<Compile Include="Sftp\Messages\LStatMessage.cs" />
|
||||
<Compile Include="Sftp\Messages\MkDirMessage.cs" />
|
||||
<Compile Include="Sftp\Messages\NameMessage.cs" />
|
||||
<Compile Include="Sftp\Messages\OpenDirMessage.cs" />
|
||||
<Compile Include="Sftp\Messages\OpenMessage.cs" />
|
||||
<Compile Include="Sftp\Messages\ReadDirMessage.cs" />
|
||||
<Compile Include="Sftp\Messages\ReadLinkMessage.cs" />
|
||||
<Compile Include="Sftp\Messages\ReadMessage.cs" />
|
||||
<Compile Include="Sftp\Messages\RealPathMessage.cs" />
|
||||
<Compile Include="Sftp\Messages\RemoveMessage.cs" />
|
||||
<Compile Include="Sftp\Messages\RenameMessage.cs" />
|
||||
<Compile Include="Sftp\Messages\RmDirMessage.cs" />
|
||||
<Compile Include="Sftp\Messages\SetStatMessage.cs" />
|
||||
<Compile Include="Sftp\Messages\SftpDataMessage.cs" />
|
||||
<Compile Include="Sftp\Messages\SftpMessage.cs" />
|
||||
<Compile Include="Sftp\Messages\SftpMessageTypes.cs" />
|
||||
<Compile Include="Sftp\Messages\StatMessage.cs" />
|
||||
<Compile Include="Sftp\Messages\StatusCodes.cs" />
|
||||
<Compile Include="Sftp\Messages\StatusMessage.cs" />
|
||||
<Compile Include="Sftp\Messages\VersionMessage.cs" />
|
||||
<Compile Include="Sftp\Messages\WriteMessage.cs" />
|
||||
<Compile Include="Compression\Zlib.cs" />
|
||||
<Compile Include="Compression\ZlibOpenSsh.cs" />
|
||||
<Compile Include="Security\CryptoKey.cs" />
|
||||
@@ -239,9 +239,6 @@
|
||||
<Compile Include="Messages\Message.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Messages\MessageTypes.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Messages\Transport\NewKeysMessage.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
@@ -268,6 +265,7 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="Documentation\Content\" />
|
||||
<Folder Include="Messages\Sftp\" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
|
||||
@@ -38,7 +38,7 @@ namespace Renci.SshClient.Security
|
||||
{
|
||||
base.Start(session, message);
|
||||
|
||||
this.Session.RegisterMessageType<KeyExchangeDhReplyMessage>(MessageTypes.KeyExchangeDhReply);
|
||||
this.Session.RegisterMessage<KeyExchangeDhReplyMessage>();
|
||||
|
||||
this.Session.MessageReceived += Session_MessageReceived;
|
||||
|
||||
@@ -68,7 +68,7 @@ namespace Renci.SshClient.Security
|
||||
if (message != null)
|
||||
{
|
||||
// Unregister message once received
|
||||
this.Session.UnRegisterMessageType(MessageTypes.KeyExchangeDhReply);
|
||||
this.Session.UnRegisterMessage<KeyExchangeDhReplyMessage>();
|
||||
|
||||
this.HandleServerDhReply(message.HostKey, message.F, message.Signature);
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ namespace Renci.SshClient.Security
|
||||
{
|
||||
base.Start(session, message);
|
||||
|
||||
this.Session.RegisterMessageType<KeyExchangeDhReplyMessage>(MessageTypes.KeyExchangeDhReply);
|
||||
this.Session.RegisterMessage<KeyExchangeDhReplyMessage>();
|
||||
|
||||
this.Session.MessageReceived += Session_MessageReceived;
|
||||
|
||||
@@ -69,7 +69,7 @@ namespace Renci.SshClient.Security
|
||||
if (message != null)
|
||||
{
|
||||
// Unregister message once received
|
||||
this.Session.UnRegisterMessageType(MessageTypes.KeyExchangeDhReply);
|
||||
this.Session.UnRegisterMessage<KeyExchangeDhReplyMessage>();
|
||||
|
||||
this.HandleServerDhReply(message.HostKey, message.F, message.Signature);
|
||||
}
|
||||
|
||||
+4
-4
@@ -44,8 +44,8 @@ namespace Renci.SshClient.Security
|
||||
{
|
||||
base.Start(session, message);
|
||||
|
||||
this.Session.RegisterMessageType<KeyExchangeDhGroupExchangeGroup>(MessageTypes.KeyExchangeDhGroupExchangeGroup);
|
||||
this.Session.RegisterMessageType<KeyExchangeDhGroupExchangeReply>(MessageTypes.KeyExchangeDhGroupExchangeReply);
|
||||
this.Session.RegisterMessage<KeyExchangeDhGroupExchangeGroup>();
|
||||
this.Session.RegisterMessage<KeyExchangeDhGroupExchangeReply>();
|
||||
|
||||
this.Session.MessageReceived += Session_MessageReceived;
|
||||
|
||||
@@ -67,7 +67,7 @@ namespace Renci.SshClient.Security
|
||||
if (groupMessage != null)
|
||||
{
|
||||
// Unregister message once received
|
||||
this.Session.UnRegisterMessageType(MessageTypes.KeyExchangeDhGroupExchangeGroup);
|
||||
this.Session.UnRegisterMessage<KeyExchangeDhGroupExchangeGroup>();
|
||||
|
||||
// 2. Receive SSH_MSG_KEX_DH_GEX_GROUP
|
||||
this._prime = groupMessage.SafePrime;
|
||||
@@ -84,7 +84,7 @@ namespace Renci.SshClient.Security
|
||||
if (replyMessage != null)
|
||||
{
|
||||
// Unregister message once received
|
||||
this.Session.UnRegisterMessageType(MessageTypes.KeyExchangeDhGroupExchangeReply);
|
||||
this.Session.UnRegisterMessage<KeyExchangeDhGroupExchangeReply>();
|
||||
|
||||
this.HandleServerDhReply(replyMessage.HostKey, replyMessage.F, replyMessage.Signature);
|
||||
}
|
||||
|
||||
+4
-4
@@ -22,8 +22,8 @@ namespace Renci.SshClient.Security
|
||||
{
|
||||
base.Start(session, message);
|
||||
|
||||
this.Session.RegisterMessageType<KeyExchangeDhGroupExchangeGroup>(MessageTypes.KeyExchangeDhGroupExchangeGroup);
|
||||
this.Session.RegisterMessageType<KeyExchangeDhGroupExchangeReply>(MessageTypes.KeyExchangeDhGroupExchangeReply);
|
||||
this.Session.RegisterMessage<KeyExchangeDhGroupExchangeGroup>();
|
||||
this.Session.RegisterMessage<KeyExchangeDhGroupExchangeReply>();
|
||||
|
||||
this.Session.MessageReceived += Session_MessageReceived;
|
||||
|
||||
@@ -81,7 +81,7 @@ namespace Renci.SshClient.Security
|
||||
if (groupMessage != null)
|
||||
{
|
||||
// Unregister message once received
|
||||
this.Session.UnRegisterMessageType(MessageTypes.KeyExchangeDhGroupExchangeGroup);
|
||||
this.Session.UnRegisterMessage<KeyExchangeDhGroupExchangeGroup>();
|
||||
|
||||
// 2. Receive SSH_MSG_KEX_DH_GEX_GROUP
|
||||
this._prime = groupMessage.SafePrime;
|
||||
@@ -98,7 +98,7 @@ namespace Renci.SshClient.Security
|
||||
if (replyMessage != null)
|
||||
{
|
||||
// Unregister message once received
|
||||
this.Session.UnRegisterMessageType(MessageTypes.KeyExchangeDhGroupExchangeReply);
|
||||
this.Session.UnRegisterMessage<KeyExchangeDhGroupExchangeReply>();
|
||||
|
||||
this.HandleServerDhReply(replyMessage.HostKey, replyMessage.F, replyMessage.Signature);
|
||||
}
|
||||
|
||||
@@ -458,13 +458,13 @@ namespace Renci.SshClient
|
||||
this.Write(Encoding.ASCII.GetBytes(string.Format("{0}\x0D\x0A", this.ClientVersion)));
|
||||
|
||||
// Register Transport response messages
|
||||
this.RegisterMessageType<DisconnectMessage>(MessageTypes.Disconnect);
|
||||
this.RegisterMessageType<IgnoreMessage>(MessageTypes.Ignore);
|
||||
this.RegisterMessageType<UnimplementedMessage>(MessageTypes.Unimplemented);
|
||||
this.RegisterMessageType<DebugMessage>(MessageTypes.Debug);
|
||||
this.RegisterMessageType<ServiceAcceptMessage>(MessageTypes.ServiceAcceptRequest);
|
||||
this.RegisterMessageType<KeyExchangeInitMessage>(MessageTypes.KeyExchangeInit);
|
||||
this.RegisterMessageType<NewKeysMessage>(MessageTypes.NewKeys);
|
||||
this.RegisterMessage<DisconnectMessage>();
|
||||
this.RegisterMessage<IgnoreMessage>();
|
||||
this.RegisterMessage<UnimplementedMessage>();
|
||||
this.RegisterMessage<DebugMessage>();
|
||||
this.RegisterMessage<ServiceAcceptMessage>();
|
||||
this.RegisterMessage<KeyExchangeInitMessage>();
|
||||
this.RegisterMessage<NewKeysMessage>();
|
||||
|
||||
|
||||
// Start incoming request listener
|
||||
@@ -973,18 +973,19 @@ namespace Renci.SshClient
|
||||
this._keyExchangeCompletedWaitHandle.Reset();
|
||||
|
||||
// Connection type messages are not allowed during key exchange phase
|
||||
this.UnRegisterMessageType(MessageTypes.GlobalRequest);
|
||||
this.UnRegisterMessageType(MessageTypes.RequestSuccess);
|
||||
this.UnRegisterMessageType(MessageTypes.RequestFailure);
|
||||
this.UnRegisterMessageType(MessageTypes.ChannelOpenConfirmation);
|
||||
this.UnRegisterMessageType(MessageTypes.ChannelOpenFailure);
|
||||
this.UnRegisterMessageType(MessageTypes.ChannelWindowAdjust);
|
||||
this.UnRegisterMessageType(MessageTypes.ChannelExtendedData);
|
||||
this.UnRegisterMessageType(MessageTypes.ChannelRequest);
|
||||
this.UnRegisterMessageType(MessageTypes.ChannelSuccess);
|
||||
this.UnRegisterMessageType(MessageTypes.ChannelData);
|
||||
this.UnRegisterMessageType(MessageTypes.ChannelEof);
|
||||
this.UnRegisterMessageType(MessageTypes.ChannelClose);
|
||||
this.UnRegisterMessage<GlobalRequestMessage>();
|
||||
this.UnRegisterMessage<RequestSuccessMessage>();
|
||||
this.UnRegisterMessage<RequestFailureMessage>();
|
||||
this.UnRegisterMessage<ChannelOpenConfirmationMessage>();
|
||||
this.UnRegisterMessage<ChannelOpenFailureMessage>();
|
||||
this.UnRegisterMessage<ChannelWindowAdjustMessage>();
|
||||
this.UnRegisterMessage<ChannelExtendedDataMessage>();
|
||||
this.UnRegisterMessage<ChannelRequestMessage>();
|
||||
this.UnRegisterMessage<ChannelSuccessMessage>();
|
||||
this.UnRegisterMessage<ChannelFailureMessage>();
|
||||
this.UnRegisterMessage<ChannelDataMessage>();
|
||||
this.UnRegisterMessage<ChannelEofMessage>();
|
||||
this.UnRegisterMessage<ChannelCloseMessage>();
|
||||
|
||||
var keyExchangeAlgorithmName = (from c in this.ConnectionInfo.KeyExchangeAlgorithms.Keys
|
||||
from s in message.KeyExchangeAlgorithms
|
||||
@@ -1034,19 +1035,19 @@ namespace Renci.SshClient
|
||||
this._serverDecompression = this._keyExchange.Decompressor;
|
||||
|
||||
// Register Connection messages
|
||||
this.RegisterMessageType<GlobalRequestMessage>(MessageTypes.GlobalRequest);
|
||||
this.RegisterMessageType<RequestSuccessMessage>(MessageTypes.RequestSuccess);
|
||||
this.RegisterMessageType<RequestFailureMessage>(MessageTypes.RequestFailure);
|
||||
this.RegisterMessageType<ChannelOpenConfirmationMessage>(MessageTypes.ChannelOpenConfirmation);
|
||||
this.RegisterMessageType<ChannelOpenFailureMessage>(MessageTypes.ChannelOpenFailure);
|
||||
this.RegisterMessageType<ChannelWindowAdjustMessage>(MessageTypes.ChannelWindowAdjust);
|
||||
this.RegisterMessageType<ChannelExtendedDataMessage>(MessageTypes.ChannelExtendedData);
|
||||
this.RegisterMessageType<ChannelRequestMessage>(MessageTypes.ChannelRequest);
|
||||
this.RegisterMessageType<ChannelSuccessMessage>(MessageTypes.ChannelSuccess);
|
||||
this.RegisterMessageType<ChannelFailureMessage>(MessageTypes.ChannelFailure);
|
||||
this.RegisterMessageType<ChannelDataMessage>(MessageTypes.ChannelData);
|
||||
this.RegisterMessageType<ChannelEofMessage>(MessageTypes.ChannelEof);
|
||||
this.RegisterMessageType<ChannelCloseMessage>(MessageTypes.ChannelClose);
|
||||
this.RegisterMessage<GlobalRequestMessage>();
|
||||
this.RegisterMessage<RequestSuccessMessage>();
|
||||
this.RegisterMessage<RequestFailureMessage>();
|
||||
this.RegisterMessage<ChannelOpenConfirmationMessage>();
|
||||
this.RegisterMessage<ChannelOpenFailureMessage>();
|
||||
this.RegisterMessage<ChannelWindowAdjustMessage>();
|
||||
this.RegisterMessage<ChannelExtendedDataMessage>();
|
||||
this.RegisterMessage<ChannelRequestMessage>();
|
||||
this.RegisterMessage<ChannelSuccessMessage>();
|
||||
this.RegisterMessage<ChannelFailureMessage>();
|
||||
this.RegisterMessage<ChannelDataMessage>();
|
||||
this.RegisterMessage<ChannelEofMessage>();
|
||||
this.RegisterMessage<ChannelCloseMessage>();
|
||||
|
||||
if (this.NewKeysReceived != null)
|
||||
{
|
||||
@@ -1293,7 +1294,7 @@ namespace Renci.SshClient
|
||||
|
||||
private delegate T LoadFunc<out T>(IEnumerable<byte> data);
|
||||
|
||||
private IDictionary<MessageTypes, LoadFunc<Message>> _registeredMessageTypes = new Dictionary<MessageTypes, LoadFunc<Message>>();
|
||||
private IDictionary<byte, LoadFunc<Message>> _registeredMessageTypes = new Dictionary<byte, LoadFunc<Message>>();
|
||||
|
||||
/// <summary>
|
||||
/// Registers the message type. This will allow message type to be recognized by and handled by the system.
|
||||
@@ -1301,27 +1302,37 @@ namespace Renci.SshClient
|
||||
/// <remarks>Some message types are not allowed during cirtain times or same code can be used for different type of message</remarks>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="messageType">Type of the message.</param>
|
||||
public void RegisterMessageType<T>(MessageTypes messageType) where T : Message, new()
|
||||
public void RegisterMessage<T>() where T : Message, new()
|
||||
{
|
||||
var messageAttribute = typeof(T).GetCustomAttributes(typeof(MessageAttribute), true).SingleOrDefault() as MessageAttribute;
|
||||
|
||||
if (messageAttribute == null)
|
||||
throw new SshException(string.Format("Type '{0}' is not a valid message type.", typeof(T).AssemblyQualifiedName));
|
||||
|
||||
lock (this._registeredMessageTypes)
|
||||
{
|
||||
if (this._registeredMessageTypes.ContainsKey(messageType))
|
||||
if (this._registeredMessageTypes.ContainsKey(messageAttribute.Number))
|
||||
{
|
||||
this.UnRegisterMessageType(messageType);
|
||||
this.UnRegisterMessage<T>();
|
||||
}
|
||||
|
||||
this._registeredMessageTypes.Add(messageType, new LoadFunc<Message>(Message.Load<T>));
|
||||
this._registeredMessageTypes.Add(messageAttribute.Number, new LoadFunc<Message>(Message.Load<T>));
|
||||
}
|
||||
}
|
||||
|
||||
public void UnRegisterMessageType(MessageTypes messageType)
|
||||
public void UnRegisterMessage<T>()
|
||||
{
|
||||
this._registeredMessageTypes.Remove(messageType);
|
||||
var messageAttribute = typeof(T).GetCustomAttributes(typeof(MessageAttribute), true).SingleOrDefault() as MessageAttribute;
|
||||
|
||||
if (messageAttribute == null)
|
||||
throw new SshException(string.Format("Type '{0}' is not a valid message type.", typeof(T).AssemblyQualifiedName));
|
||||
|
||||
this._registeredMessageTypes.Remove(messageAttribute.Number);
|
||||
}
|
||||
|
||||
public Message LoadMessage(IEnumerable<byte> data)
|
||||
{
|
||||
var messageType = (MessageTypes)data.FirstOrDefault();
|
||||
var messageType = data.FirstOrDefault();
|
||||
|
||||
lock (this._registeredMessageTypes)
|
||||
{
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using Renci.SshClient.Messages.Sftp;
|
||||
using Renci.SshClient.Sftp.Messages;
|
||||
|
||||
namespace Renci.SshClient.Sftp
|
||||
{
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using Renci.SshClient.Messages.Sftp;
|
||||
using Renci.SshClient.Sftp.Messages;
|
||||
|
||||
namespace Renci.SshClient.Sftp
|
||||
{
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using System.Collections.Generic;
|
||||
using Renci.SshClient.Common;
|
||||
using Renci.SshClient.Messages.Sftp;
|
||||
using Renci.SshClient.Sftp.Messages;
|
||||
|
||||
namespace Renci.SshClient.Sftp
|
||||
{
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal enum AceMasks
|
||||
{
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
public class Attributes
|
||||
{
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal class AttributesMessage : SftpRequestMessage
|
||||
{
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal class CloseMessage : SftpRequestMessage
|
||||
{
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal class DataMessage : SftpRequestMessage
|
||||
{
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal class ExtendedMessage : SftpRequestMessage
|
||||
{
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal class ExtendedReplyMessage : SftpRequestMessage
|
||||
{
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal class FSetStat : SftpRequestMessage
|
||||
{
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal class FSetStatMessage : SftpRequestMessage
|
||||
{
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal class FStatMessage : SftpRequestMessage
|
||||
{
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal enum Flags
|
||||
{
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal class HandleMessage : SftpRequestMessage
|
||||
{
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal class InitMessage : SftpMessage
|
||||
{
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal class LStatMessage : SftpRequestMessage
|
||||
{
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal class MkDirMessage : SftpRequestMessage
|
||||
{
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
using System.Collections.Generic;
|
||||
using Renci.SshClient.Sftp;
|
||||
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal class NameMessage : SftpRequestMessage
|
||||
{
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
|
||||
using System.Text;
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal class OpenDirMessage : SftpRequestMessage
|
||||
{
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
using System;
|
||||
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal class OpenMessage : SftpRequestMessage
|
||||
{
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal class ReadDirMessage : SftpRequestMessage
|
||||
{
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
|
||||
using System.Text;
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal class ReadLinkMessage : SftpRequestMessage
|
||||
{
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
|
||||
using System;
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal class ReadMessage : SftpRequestMessage
|
||||
{
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal class RealPathMessage : SftpRequestMessage
|
||||
{
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
|
||||
using System.Text;
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal class RemoveMessage : SftpRequestMessage
|
||||
{
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal class RenameMessage : SftpRequestMessage
|
||||
{
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
using System.Text;
|
||||
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal class RmDirMessage : SftpRequestMessage
|
||||
{
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal class SetStatMessage : SftpRequestMessage
|
||||
{
|
||||
+1
-1
@@ -3,7 +3,7 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Renci.SshClient.Messages.Connection;
|
||||
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal class SftpDataMessage : ChannelDataMessage
|
||||
{
|
||||
+1
-1
@@ -3,7 +3,7 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Renci.SshClient.Common;
|
||||
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal abstract class SftpMessage : SshData
|
||||
{
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal enum SftpMessageTypes : byte
|
||||
{
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal abstract class SftpRequestMessage : SftpMessage
|
||||
{
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal class StatMessage : SftpRequestMessage
|
||||
{
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal enum StatusCodes : uint
|
||||
{
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal class StatusMessage : SftpRequestMessage
|
||||
{
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
using System.Text;
|
||||
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal class SymLinkMessage : SftpRequestMessage
|
||||
{
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal class VersionMessage : SftpMessage
|
||||
{
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
using System;
|
||||
|
||||
namespace Renci.SshClient.Messages.Sftp
|
||||
namespace Renci.SshClient.Sftp.Messages
|
||||
{
|
||||
internal class WriteMessage : SftpRequestMessage
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
using Renci.SshClient.Messages.Sftp;
|
||||
using Renci.SshClient.Sftp.Messages;
|
||||
|
||||
namespace Renci.SshClient.Sftp
|
||||
{
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using Renci.SshClient.Messages.Sftp;
|
||||
using Renci.SshClient.Sftp.Messages;
|
||||
|
||||
namespace Renci.SshClient.Sftp
|
||||
{
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using Renci.SshClient.Messages.Sftp;
|
||||
using Renci.SshClient.Sftp.Messages;
|
||||
|
||||
namespace Renci.SshClient.Sftp
|
||||
{
|
||||
|
||||
@@ -3,7 +3,7 @@ using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
using Renci.SshClient.Common;
|
||||
using Renci.SshClient.Messages.Sftp;
|
||||
using Renci.SshClient.Sftp.Messages;
|
||||
|
||||
namespace Renci.SshClient.Sftp
|
||||
{
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Renci.SshClient.Messages.Sftp;
|
||||
using Renci.SshClient.Sftp.Messages;
|
||||
|
||||
namespace Renci.SshClient.Sftp
|
||||
{
|
||||
|
||||
@@ -5,7 +5,7 @@ using System.Text;
|
||||
using System.Threading;
|
||||
using Renci.SshClient.Channels;
|
||||
using Renci.SshClient.Common;
|
||||
using Renci.SshClient.Messages.Sftp;
|
||||
using Renci.SshClient.Sftp.Messages;
|
||||
|
||||
namespace Renci.SshClient.Sftp
|
||||
{
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using Renci.SshClient.Messages.Sftp;
|
||||
using Renci.SshClient.Sftp.Messages;
|
||||
|
||||
namespace Renci.SshClient.Sftp
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user