From 7297259e216bfc5d596de6dd9b002e18cbf25e64 Mon Sep 17 00:00:00 2001 From: olegkap_cp Date: Sat, 25 Dec 2010 05:57:34 +0000 Subject: [PATCH] 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 --- .../Renci.SshClient/ConnectionInfo.cs | 12 +- .../Renci.SshClient/ForwardedPortRemote.cs | 6 +- .../KeyboardInteractiveConnectionInfo.cs | 4 +- .../Messages/Authentication/BannerMessage.cs | 6 +- .../Messages/Authentication/FailureMessage.cs | 6 +- .../InformationRequestMessage.cs | 6 +- .../InformationResponseMessage.cs | 6 +- .../PasswordChangeRequiredMessage.cs | 6 +- .../Authentication/PublicKeyMessage.cs | 6 +- .../Messages/Authentication/RequestMessage.cs | 6 +- .../Authentication/RequestMessagePublicKey.cs | 2 +- .../Messages/Authentication/SuccessMessage.cs | 6 +- .../Connection/ChannelCloseMessage.cs | 6 +- .../Messages/Connection/ChannelDataMessage.cs | 6 +- .../Messages/Connection/ChannelEofMessage.cs | 6 +- .../Connection/ChannelExtendedDataMessage.cs | 9 +- .../Connection/ChannelFailureMessage.cs | 6 +- .../Messages/Connection/ChannelMessage.cs | 2 +- .../ChannelOpen/ChannelOpenMessage.cs | 6 +- .../ChannelOpenConfirmationMessage.cs | 6 +- .../ChannelOpenDirectTcpIPMessage.cs | 33 ---- .../Connection/ChannelOpenFailureMessage.cs | 6 +- .../ChannelRequest/ChannelRequestMessage.cs | 6 +- .../Connection/ChannelSuccessMessage.cs | 6 +- .../Connection/ChannelWindowAdjustMessage.cs | 6 +- .../Connection/GlobalRequestMessage.cs | 11 +- .../Messages/Connection/GlobalRequestNames.cs | 4 - .../Connection/RequestFailureMessage.cs | 6 +- .../Connection/RequestSuccessMessage.cs | 6 +- .../Renci.SshClient/Messages/Message.cs | 19 ++- .../Messages/MessageAttribute.cs | 22 +++ .../Renci.SshClient/Messages/MessageTypes.cs | 161 ------------------ .../Messages/Transport/DebugMessage.cs | 6 +- .../Messages/Transport/DisconnectMessage.cs | 6 +- .../Messages/Transport/IgnoreMessage.cs | 6 +- .../KeyExchangeDhGroupExchangeGroup.cs | 6 +- .../KeyExchangeDhGroupExchangeInit.cs | 6 +- .../KeyExchangeDhGroupExchangeReply.cs | 6 +- .../KeyExchangeDhGroupExchangeRequest.cs | 6 +- .../Transport/KeyExchangeDhInitMessage.cs | 9 +- .../Transport/KeyExchangeDhReplyMessage.cs | 9 +- .../Transport/KeyExchangeInitMessage.cs | 6 +- .../Messages/Transport/NewKeysMessage.cs | 6 +- .../Transport/ServiceAcceptMessage.cs | 6 +- .../Transport/ServiceRequestMessage.cs | 6 +- .../Transport/UnimplementedMessage.cs | 6 +- .../Renci.SshClient/PasswordConnectionInfo.cs | 4 +- .../PrivateKeyConnectionInfo.cs | 6 +- .../Renci.SshClient/Renci.SshClient.csproj | 78 +++++---- .../KeyExchangeDiffieHellmanGroup14Sha1.cs | 4 +- .../KeyExchangeDiffieHellmanGroup1Sha1.cs | 4 +- ...yExchangeDiffieHellmanGroupExchangeSha1.cs | 8 +- ...xchangeDiffieHellmanGroupExchangeSha256.cs | 8 +- Renci.SshClient/Renci.SshClient/Session.cs | 91 +++++----- .../Sftp/CreateDirectoryCommand.cs | 2 +- .../Sftp/DownloadFileCommand.cs | 2 +- .../Sftp/ListDirectoryCommand.cs | 2 +- .../Sftp => Sftp/Messages}/AceMasks.cs | 2 +- .../Sftp => Sftp/Messages}/Attributes.cs | 2 +- .../Messages}/AttributesMessage.cs | 3 +- .../Sftp => Sftp/Messages}/CloseMessage.cs | 2 +- .../Sftp => Sftp/Messages}/DataMessage.cs | 2 +- .../Sftp => Sftp/Messages}/ExtendedMessage.cs | 2 +- .../Messages}/ExtendedReplyMessage.cs | 2 +- .../Sftp => Sftp/Messages}/FSetStat.cs | 2 +- .../Sftp => Sftp/Messages}/FSetStatMessage.cs | 2 +- .../Sftp => Sftp/Messages}/FStatMessage.cs | 2 +- .../{Messages/Sftp => Sftp/Messages}/Flags.cs | 2 +- .../Sftp => Sftp/Messages}/HandleMessage.cs | 2 +- .../Sftp => Sftp/Messages}/InitMessage.cs | 2 +- .../Sftp => Sftp/Messages}/LStatMessage.cs | 2 +- .../Sftp => Sftp/Messages}/MkDirMessage.cs | 2 +- .../Sftp => Sftp/Messages}/NameMessage.cs | 2 +- .../Sftp => Sftp/Messages}/OpenDirMessage.cs | 2 +- .../Sftp => Sftp/Messages}/OpenMessage.cs | 2 +- .../Sftp => Sftp/Messages}/ReadDirMessage.cs | 2 +- .../Sftp => Sftp/Messages}/ReadLinkMessage.cs | 2 +- .../Sftp => Sftp/Messages}/ReadMessage.cs | 2 +- .../Sftp => Sftp/Messages}/RealPathMessage.cs | 2 +- .../Sftp => Sftp/Messages}/RemoveMessage.cs | 2 +- .../Sftp => Sftp/Messages}/RenameMessage.cs | 2 +- .../Sftp => Sftp/Messages}/RmDirMessage.cs | 2 +- .../Sftp => Sftp/Messages}/SetStatMessage.cs | 2 +- .../Sftp => Sftp/Messages}/SftpDataMessage.cs | 2 +- .../Sftp => Sftp/Messages}/SftpMessage.cs | 2 +- .../Messages}/SftpMessageTypes.cs | 2 +- .../Messages}/SftpRequestMessage.cs | 2 +- .../Sftp => Sftp/Messages}/StatMessage.cs | 2 +- .../Sftp => Sftp/Messages}/StatusCodes.cs | 2 +- .../Sftp => Sftp/Messages}/StatusMessage.cs | 2 +- .../Sftp => Sftp/Messages}/SymLinkMessage.cs | 2 +- .../Sftp => Sftp/Messages}/VersionMessage.cs | 2 +- .../Sftp => Sftp/Messages}/WriteMessage.cs | 2 +- .../Sftp/RemoveDirectoryCommand.cs | 2 +- .../Renci.SshClient/Sftp/RemoveFileCommand.cs | 2 +- .../Renci.SshClient/Sftp/RenameFileCommand.cs | 2 +- .../Renci.SshClient/Sftp/SftpCommand.cs | 2 +- .../Renci.SshClient/Sftp/SftpFile.cs | 2 +- .../Renci.SshClient/Sftp/SftpSession.cs | 2 +- .../Renci.SshClient/Sftp/UploadFileCommand.cs | 2 +- 100 files changed, 237 insertions(+), 554 deletions(-) delete mode 100644 Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelOpenDirectTcpIPMessage.cs create mode 100644 Renci.SshClient/Renci.SshClient/Messages/MessageAttribute.cs delete mode 100644 Renci.SshClient/Renci.SshClient/Messages/MessageTypes.cs rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/AceMasks.cs (91%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/Attributes.cs (87%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/AttributesMessage.cs (88%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/CloseMessage.cs (88%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/DataMessage.cs (90%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/ExtendedMessage.cs (90%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/ExtendedReplyMessage.cs (88%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/FSetStat.cs (90%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/FSetStatMessage.cs (90%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/FStatMessage.cs (88%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/Flags.cs (89%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/HandleMessage.cs (88%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/InitMessage.cs (88%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/LStatMessage.cs (88%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/MkDirMessage.cs (90%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/NameMessage.cs (92%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/OpenDirMessage.cs (90%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/OpenMessage.cs (90%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/ReadDirMessage.cs (89%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/ReadLinkMessage.cs (89%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/ReadMessage.cs (91%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/RealPathMessage.cs (88%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/RemoveMessage.cs (89%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/RenameMessage.cs (90%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/RmDirMessage.cs (89%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/SetStatMessage.cs (90%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/SftpDataMessage.cs (90%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/SftpMessage.cs (97%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/SftpMessageTypes.cs (94%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/SftpRequestMessage.cs (86%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/StatMessage.cs (88%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/StatusCodes.cs (92%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/StatusMessage.cs (94%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/SymLinkMessage.cs (92%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/VersionMessage.cs (91%) rename Renci.SshClient/Renci.SshClient/{Messages/Sftp => Sftp/Messages}/WriteMessage.cs (91%) diff --git a/Renci.SshClient/Renci.SshClient/ConnectionInfo.cs b/Renci.SshClient/Renci.SshClient/ConnectionInfo.cs index 5253d8f8..2740495a 100644 --- a/Renci.SshClient/Renci.SshClient/ConnectionInfo.cs +++ b/Renci.SshClient/Renci.SshClient/ConnectionInfo.cs @@ -135,9 +135,9 @@ namespace Renci.SshClient { this.Session = session; - this.Session.RegisterMessageType(MessageTypes.UserAuthenticationFailure); - this.Session.RegisterMessageType(MessageTypes.UserAuthenticationSuccess); - this.Session.RegisterMessageType(MessageTypes.UserAuthenticationBanner); + this.Session.RegisterMessage(); + this.Session.RegisterMessage(); + this.Session.RegisterMessage(); 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(); + this.Session.UnRegisterMessage(); + this.Session.UnRegisterMessage(); return this.IsAuthenticated; } diff --git a/Renci.SshClient/Renci.SshClient/ForwardedPortRemote.cs b/Renci.SshClient/Renci.SshClient/ForwardedPortRemote.cs index 88a70086..e4f37cfa 100644 --- a/Renci.SshClient/Renci.SshClient/ForwardedPortRemote.cs +++ b/Renci.SshClient/Renci.SshClient/ForwardedPortRemote.cs @@ -20,9 +20,9 @@ namespace Renci.SshClient if (this.IsStarted) return; - this.Session.RegisterMessageType(Messages.MessageTypes.RequestFailure); - this.Session.RegisterMessageType(Messages.MessageTypes.RequestSuccess); - this.Session.RegisterMessageType(Messages.MessageTypes.ChannelOpen); + this.Session.RegisterMessage(); + this.Session.RegisterMessage(); + this.Session.RegisterMessage(); this.Session.RequestSuccessReceived += Session_RequestSuccess; this.Session.RequestFailureReceived += Session_RequestFailure; diff --git a/Renci.SshClient/Renci.SshClient/KeyboardInteractiveConnectionInfo.cs b/Renci.SshClient/Renci.SshClient/KeyboardInteractiveConnectionInfo.cs index bc5e22aa..eb4f0abc 100644 --- a/Renci.SshClient/Renci.SshClient/KeyboardInteractiveConnectionInfo.cs +++ b/Renci.SshClient/Renci.SshClient/KeyboardInteractiveConnectionInfo.cs @@ -39,13 +39,13 @@ namespace Renci.SshClient protected override void OnAuthenticate() { - this.Session.RegisterMessageType(MessageTypes.UserAuthenticationInformationRequest); + this.Session.RegisterMessage(); this.Session.SendMessage(new RequestMessageKeyboardInteractive(ServiceNames.Connection, this.Username)); this.WaitHandle(this._authenticationCompleted); - this.Session.UnRegisterMessageType(MessageTypes.UserAuthenticationInformationRequest); + this.Session.UnRegisterMessage(); if (this._exception != null) { diff --git a/Renci.SshClient/Renci.SshClient/Messages/Authentication/BannerMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Authentication/BannerMessage.cs index f16a7700..9323d74e 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Authentication/BannerMessage.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Authentication/BannerMessage.cs @@ -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; } diff --git a/Renci.SshClient/Renci.SshClient/Messages/Authentication/FailureMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Authentication/FailureMessage.cs index 8942736c..01af1785 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Authentication/FailureMessage.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Authentication/FailureMessage.cs @@ -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 AllowedAuthentications { get; set; } public string Message { get; private set; } diff --git a/Renci.SshClient/Renci.SshClient/Messages/Authentication/InformationRequestMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Authentication/InformationRequestMessage.cs index 5dec2a2a..452737a2 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Authentication/InformationRequestMessage.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Authentication/InformationRequestMessage.cs @@ -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; } diff --git a/Renci.SshClient/Renci.SshClient/Messages/Authentication/InformationResponseMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Authentication/InformationResponseMessage.cs index b6fb3364..e8479ceb 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Authentication/InformationResponseMessage.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Authentication/InformationResponseMessage.cs @@ -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 Responses { get; private set; } public InformationResponseMessage() diff --git a/Renci.SshClient/Renci.SshClient/Messages/Authentication/PasswordChangeRequiredMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Authentication/PasswordChangeRequiredMessage.cs index a750defa..3f20d544 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Authentication/PasswordChangeRequiredMessage.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Authentication/PasswordChangeRequiredMessage.cs @@ -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; } diff --git a/Renci.SshClient/Renci.SshClient/Messages/Authentication/PublicKeyMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Authentication/PublicKeyMessage.cs index 8440d3f4..4bbd2394 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Authentication/PublicKeyMessage.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Authentication/PublicKeyMessage.cs @@ -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 PublicKeyData { get; private set; } diff --git a/Renci.SshClient/Renci.SshClient/Messages/Authentication/RequestMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Authentication/RequestMessage.cs index d3b4f6ee..c4dd2b32 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Authentication/RequestMessage.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Authentication/RequestMessage.cs @@ -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; } diff --git a/Renci.SshClient/Renci.SshClient/Messages/Authentication/RequestMessagePublicKey.cs b/Renci.SshClient/Renci.SshClient/Messages/Authentication/RequestMessagePublicKey.cs index 780dbcbb..566d7ed9 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Authentication/RequestMessagePublicKey.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Authentication/RequestMessagePublicKey.cs @@ -2,7 +2,7 @@ namespace Renci.SshClient.Messages.Authentication { - internal class RequestMessagePublicKey : RequestMessage + public class RequestMessagePublicKey : RequestMessage { public override string MethodName { diff --git a/Renci.SshClient/Renci.SshClient/Messages/Authentication/SuccessMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Authentication/SuccessMessage.cs index 48608ad6..b9ebfab0 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Authentication/SuccessMessage.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Authentication/SuccessMessage.cs @@ -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() { } diff --git a/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelCloseMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelCloseMessage.cs index e686b49c..22b44b95 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelCloseMessage.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelCloseMessage.cs @@ -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() { diff --git a/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelDataMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelDataMessage.cs index 333650ea..b7032bc8 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelDataMessage.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelDataMessage.cs @@ -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() diff --git a/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelEofMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelEofMessage.cs index 038ebf0d..833b1b62 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelEofMessage.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelEofMessage.cs @@ -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() { diff --git a/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelExtendedDataMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelExtendedDataMessage.cs index 14f96315..8ee63e4a 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelExtendedDataMessage.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelExtendedDataMessage.cs @@ -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; } diff --git a/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelFailureMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelFailureMessage.cs index c668ad6b..94d23558 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelFailureMessage.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelFailureMessage.cs @@ -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() { diff --git a/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelMessage.cs index e219b563..78f12d4b 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelMessage.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelMessage.cs @@ -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); } } } diff --git a/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelOpen/ChannelOpenMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelOpen/ChannelOpenMessage.cs index 1d6cb9c2..0d5b0a8f 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelOpen/ChannelOpenMessage.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelOpen/ChannelOpenMessage.cs @@ -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 diff --git a/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelOpenConfirmationMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelOpenConfirmationMessage.cs index 2a39acd6..16c55145 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelOpenConfirmationMessage.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelOpenConfirmationMessage.cs @@ -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; } diff --git a/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelOpenDirectTcpIPMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelOpenDirectTcpIPMessage.cs deleted file mode 100644 index d9a95ef1..00000000 --- a/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelOpenDirectTcpIPMessage.cs +++ /dev/null @@ -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); - - } - } -} diff --git a/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelOpenFailureMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelOpenFailureMessage.cs index 4527a44d..3ff944b0 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelOpenFailureMessage.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelOpenFailureMessage.cs @@ -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; } diff --git a/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelRequest/ChannelRequestMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelRequest/ChannelRequestMessage.cs index e222aab9..49555fe3 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelRequest/ChannelRequestMessage.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelRequest/ChannelRequestMessage.cs @@ -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 diff --git a/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelSuccessMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelSuccessMessage.cs index abbc21ec..115e23f8 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelSuccessMessage.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelSuccessMessage.cs @@ -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() { diff --git a/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelWindowAdjustMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelWindowAdjustMessage.cs index 4b8858d8..0fa91a6e 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelWindowAdjustMessage.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Connection/ChannelWindowAdjustMessage.cs @@ -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() diff --git a/Renci.SshClient/Renci.SshClient/Messages/Connection/GlobalRequestMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Connection/GlobalRequestMessage.cs index 206c7c8c..b642d63b 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Connection/GlobalRequestMessage.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Connection/GlobalRequestMessage.cs @@ -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; } diff --git a/Renci.SshClient/Renci.SshClient/Messages/Connection/GlobalRequestNames.cs b/Renci.SshClient/Renci.SshClient/Messages/Connection/GlobalRequestNames.cs index b3479d4a..d3d58279 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Connection/GlobalRequestNames.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Connection/GlobalRequestNames.cs @@ -10,9 +10,5 @@ /// cancel-tcpip-forward /// CancelTcpIpForward, - /// - /// keep-alive-message-ignore-me - /// - KeepAlive } } diff --git a/Renci.SshClient/Renci.SshClient/Messages/Connection/RequestFailureMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Connection/RequestFailureMessage.cs index 74f6f084..99d5e512 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Connection/RequestFailureMessage.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Connection/RequestFailureMessage.cs @@ -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() { } diff --git a/Renci.SshClient/Renci.SshClient/Messages/Connection/RequestSuccessMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Connection/RequestSuccessMessage.cs index 1e91d9da..a87c2a09 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Connection/RequestSuccessMessage.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Connection/RequestSuccessMessage.cs @@ -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() { diff --git a/Renci.SshClient/Renci.SshClient/Messages/Message.cs b/Renci.SshClient/Renci.SshClient/Messages/Message.cs index 77e6876f..a733ea75 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Message.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Message.cs @@ -6,11 +6,9 @@ namespace Renci.SshClient.Messages { public abstract class Message : SshData { - public abstract MessageTypes MessageType { get; } - internal static T Load(IEnumerable 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 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(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; + } } } diff --git a/Renci.SshClient/Renci.SshClient/Messages/MessageAttribute.cs b/Renci.SshClient/Renci.SshClient/Messages/MessageAttribute.cs new file mode 100644 index 00000000..799648ce --- /dev/null +++ b/Renci.SshClient/Renci.SshClient/Messages/MessageAttribute.cs @@ -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; + } + } +} diff --git a/Renci.SshClient/Renci.SshClient/Messages/MessageTypes.cs b/Renci.SshClient/Renci.SshClient/Messages/MessageTypes.cs deleted file mode 100644 index 6d014abc..00000000 --- a/Renci.SshClient/Renci.SshClient/Messages/MessageTypes.cs +++ /dev/null @@ -1,161 +0,0 @@ -namespace Renci.SshClient.Messages -{ - /// - /// - /// - public enum MessageTypes : byte - { - /// - /// {35A90EBF-F421-44A3-BE3A-47C72AFE47FE} - /// - None = 0, - /// - /// SSH_MSG_DISCONNECT - /// - Disconnect = 1, - /// - /// SSH_MSG_IGNORE - /// - Ignore = 2, - /// - /// SSH_MSG_UNIMPLEMENTED - /// - Unimplemented = 3, - /// - /// SSH_MSG_DEBUG - /// - Debug = 4, - /// - /// SSH_MSG_SERVICE_REQUEST - /// - ServiceRequest = 5, - /// - /// SSH_MSG_SERVICE_ACCEPT - /// - ServiceAcceptRequest = 6, - - /// - /// SSH_MSG_KEXINIT - /// - KeyExchangeInit = 20, - /// - /// SSH_MSG_NEWKEYS - /// - NewKeys = 21, - /// - /// SSH_MSG_KEXDH_INIT - /// - DiffieHellmanKeyExchangeInit = 30, - /// - /// SSH_MSG_KEXDH_REPLY - /// - KeyExchangeDhReply = 31, - /// - /// SSH_MSG_KEX_DH_GEX_GROUP - /// - KeyExchangeDhGroupExchangeGroup = 31, - /// - /// SSH_MSG_KEX_DH_GEX_INIT - /// - KeyExchangeDhGroupExchangeInit = 32, - /// - /// SSH_MSG_KEX_DH_GEX_REPLY - /// - KeyExchangeDhGroupExchangeReply = 33, - /// - /// SSH_MSG_KEX_DH_GEX_REQUEST - /// - KeyExchangeDhGroupExchangeRequest = 34, - - /// - /// SSH_MSG_USERAUTH_REQUEST - /// - UserAuthenticationRequest = 50, - /// - /// SSH_MSG_USERAUTH_FAILURE - /// - UserAuthenticationFailure = 51, - /// - /// SSH_MSG_USERAUTH_SUCCESS - /// - UserAuthenticationSuccess = 52, - /// - /// SSH_MSG_USERAUTH_BANNER - /// - UserAuthenticationBanner = 53, - /// - /// SSH_MSG_USERAUTH_INFO_REQUEST - /// - UserAuthenticationInformationRequest = 60, - /// - /// SSH_MSG_USERAUTH_INFO_RESPONSE - /// - UserAuthenticationInformationResponse = 61, - /// - /// SSH_MSG_USERAUTH_PK_OK - /// - UserAuthenticationPublicKey = 60, - /// - /// SSH_MSG_USERAUTH_PASSWD_CHANGEREQ - /// - UserAuthenticationPasswordChangeRequired = 60, - - - /// - /// SSH_MSG_GLOBAL_REQUEST - /// - GlobalRequest = 80, - /// - /// SSH_MSG_REQUEST_SUCCESS - /// - RequestSuccess = 81, - /// - /// SSH_MSG_REQUEST_FAILURE - /// - RequestFailure = 82, - /// - /// SSH_MSG_CHANNEL_OPEN - /// - ChannelOpen = 90, - /// - /// SSH_MSG_CHANNEL_OPEN_CONFIRMATION - /// - ChannelOpenConfirmation = 91, - /// - /// SSH_MSG_CHANNEL_OPEN_FAILURE - /// - ChannelOpenFailure = 92, - /// - /// SSH_MSG_CHANNEL_WINDOW_ADJUST - /// - ChannelWindowAdjust = 93, - /// - /// SSH_MSG_CHANNEL_DATA - /// - ChannelData = 94, - /// - /// SSH_MSG_CHANNEL_EXTENDED_DATA - /// - ChannelExtendedData = 95, - /// - /// SSH_MSG_CHANNEL_EOF - /// - ChannelEof = 96, - /// - /// SSH_MSG_CHANNEL_CLOSE - /// - ChannelClose = 97, - /// - /// SSH_MSG_CHANNEL_REQUEST - /// - ChannelRequest = 98, - /// - /// SSH_MSG_CHANNEL_SUCCESS - /// - ChannelSuccess = 99, - /// - /// SSH_MSG_CHANNEL_FAILURE - /// - ChannelFailure = 100, - } -} diff --git a/Renci.SshClient/Renci.SshClient/Messages/Transport/DebugMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Transport/DebugMessage.cs index 631e4acc..c090e9b6 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Transport/DebugMessage.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Transport/DebugMessage.cs @@ -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(); diff --git a/Renci.SshClient/Renci.SshClient/Messages/Transport/DisconnectMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Transport/DisconnectMessage.cs index 1137de23..8668525d 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Transport/DisconnectMessage.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Transport/DisconnectMessage.cs @@ -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; } diff --git a/Renci.SshClient/Renci.SshClient/Messages/Transport/IgnoreMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Transport/IgnoreMessage.cs index f89abb3b..eb942909 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Transport/IgnoreMessage.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Transport/IgnoreMessage.cs @@ -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; diff --git a/Renci.SshClient/Renci.SshClient/Messages/Transport/KeyExchangeDhGroupExchangeGroup.cs b/Renci.SshClient/Renci.SshClient/Messages/Transport/KeyExchangeDhGroupExchangeGroup.cs index a5225f90..f5064e4e 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Transport/KeyExchangeDhGroupExchangeGroup.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Transport/KeyExchangeDhGroupExchangeGroup.cs @@ -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; } - } - /// /// Gets or sets the safe prime. /// diff --git a/Renci.SshClient/Renci.SshClient/Messages/Transport/KeyExchangeDhGroupExchangeInit.cs b/Renci.SshClient/Renci.SshClient/Messages/Transport/KeyExchangeDhGroupExchangeInit.cs index b886221f..8080a9f9 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Transport/KeyExchangeDhGroupExchangeInit.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Transport/KeyExchangeDhGroupExchangeInit.cs @@ -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) diff --git a/Renci.SshClient/Renci.SshClient/Messages/Transport/KeyExchangeDhGroupExchangeReply.cs b/Renci.SshClient/Renci.SshClient/Messages/Transport/KeyExchangeDhGroupExchangeReply.cs index 511b4549..98606817 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Transport/KeyExchangeDhGroupExchangeReply.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Transport/KeyExchangeDhGroupExchangeReply.cs @@ -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; } - } - /// /// Gets server public host key and certificates /// diff --git a/Renci.SshClient/Renci.SshClient/Messages/Transport/KeyExchangeDhGroupExchangeRequest.cs b/Renci.SshClient/Renci.SshClient/Messages/Transport/KeyExchangeDhGroupExchangeRequest.cs index 16582467..132a87e0 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Transport/KeyExchangeDhGroupExchangeRequest.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Transport/KeyExchangeDhGroupExchangeRequest.cs @@ -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; } - } - /// /// Gets or sets the minimal size in bits of an acceptable group. /// diff --git a/Renci.SshClient/Renci.SshClient/Messages/Transport/KeyExchangeDhInitMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Transport/KeyExchangeDhInitMessage.cs index faf4e4bd..f9d4c10c 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Transport/KeyExchangeDhInitMessage.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Transport/KeyExchangeDhInitMessage.cs @@ -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; diff --git a/Renci.SshClient/Renci.SshClient/Messages/Transport/KeyExchangeDhReplyMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Transport/KeyExchangeDhReplyMessage.cs index b223b059..3f91386b 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Transport/KeyExchangeDhReplyMessage.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Transport/KeyExchangeDhReplyMessage.cs @@ -3,6 +3,7 @@ using System.Numerics; namespace Renci.SshClient.Messages.Transport { + [Message("SSH_MSG_KEXDH_REPLY", 31)] public class KeyExchangeDhReplyMessage : Message { /// @@ -19,14 +20,6 @@ namespace Renci.SshClient.Messages.Transport /// The signature. public string Signature { get; private set; } - public override MessageTypes MessageType - { - get - { - return MessageTypes.KeyExchangeDhReply; - } - } - protected override void LoadData() { this.ResetReader(); diff --git a/Renci.SshClient/Renci.SshClient/Messages/Transport/KeyExchangeInitMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Transport/KeyExchangeInitMessage.cs index f4c4fce9..80f3ce45 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Transport/KeyExchangeInitMessage.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Transport/KeyExchangeInitMessage.cs @@ -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]; diff --git a/Renci.SshClient/Renci.SshClient/Messages/Transport/NewKeysMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Transport/NewKeysMessage.cs index 684e0887..139e8d0b 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Transport/NewKeysMessage.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Transport/NewKeysMessage.cs @@ -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() { } diff --git a/Renci.SshClient/Renci.SshClient/Messages/Transport/ServiceAcceptMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Transport/ServiceAcceptMessage.cs index 66fbb0c1..219a7a10 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Transport/ServiceAcceptMessage.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Transport/ServiceAcceptMessage.cs @@ -5,13 +5,9 @@ namespace Renci.SshClient.Messages.Transport /// /// SSH_MSG_SERVICE_ACCEPT /// + [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() diff --git a/Renci.SshClient/Renci.SshClient/Messages/Transport/ServiceRequestMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Transport/ServiceRequestMessage.cs index f086ae5d..321ad698 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Transport/ServiceRequestMessage.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Transport/ServiceRequestMessage.cs @@ -5,13 +5,9 @@ namespace Renci.SshClient.Messages.Transport /// /// Contains SSH_MSG_SERVICE_REQUEST message information /// + [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) diff --git a/Renci.SshClient/Renci.SshClient/Messages/Transport/UnimplementedMessage.cs b/Renci.SshClient/Renci.SshClient/Messages/Transport/UnimplementedMessage.cs index 3240d453..59d947d3 100644 --- a/Renci.SshClient/Renci.SshClient/Messages/Transport/UnimplementedMessage.cs +++ b/Renci.SshClient/Renci.SshClient/Messages/Transport/UnimplementedMessage.cs @@ -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() { } diff --git a/Renci.SshClient/Renci.SshClient/PasswordConnectionInfo.cs b/Renci.SshClient/Renci.SshClient/PasswordConnectionInfo.cs index cc8a38f3..114316d2 100644 --- a/Renci.SshClient/Renci.SshClient/PasswordConnectionInfo.cs +++ b/Renci.SshClient/Renci.SshClient/PasswordConnectionInfo.cs @@ -42,7 +42,7 @@ namespace Renci.SshClient protected override void OnAuthenticate() { - this.Session.RegisterMessageType(MessageTypes.UserAuthenticationPasswordChangeRequired); + this.Session.RegisterMessage(); 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(); var eventTask = Task.Factory.StartNew(() => { diff --git a/Renci.SshClient/Renci.SshClient/PrivateKeyConnectionInfo.cs b/Renci.SshClient/Renci.SshClient/PrivateKeyConnectionInfo.cs index 3402bb80..3d8f4573 100644 --- a/Renci.SshClient/Renci.SshClient/PrivateKeyConnectionInfo.cs +++ b/Renci.SshClient/Renci.SshClient/PrivateKeyConnectionInfo.cs @@ -43,7 +43,7 @@ namespace Renci.SshClient if (this.KeyFiles == null) return; - this.Session.RegisterMessageType(MessageTypes.UserAuthenticationPublicKey); + this.Session.RegisterMessage(); foreach (var keyFile in this.KeyFiles) { @@ -87,7 +87,7 @@ namespace Renci.SshClient } } - this.Session.UnRegisterMessageType(MessageTypes.UserAuthenticationPublicKey); + this.Session.UnRegisterMessage(); } protected override void Session_UserAuthenticationSuccessMessageReceived(object sender, MessageEventArgs 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"); diff --git a/Renci.SshClient/Renci.SshClient/Renci.SshClient.csproj b/Renci.SshClient/Renci.SshClient/Renci.SshClient.csproj index 0660cfea..5f36e2f0 100644 --- a/Renci.SshClient/Renci.SshClient/Renci.SshClient.csproj +++ b/Renci.SshClient/Renci.SshClient/Renci.SshClient.csproj @@ -95,7 +95,8 @@ - + + @@ -138,7 +139,6 @@ - @@ -146,43 +146,43 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + Code - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + @@ -239,9 +239,6 @@ Code - - Code - Code @@ -268,6 +265,7 @@ +