|  | @@ -190,7 +190,7 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |          ///         <description>The SSH_MSG_DISCONNECT message - which is used to disconnect from the server - has been sent.</description>
 | 
	
		
			
				|  |  |          ///     </item>
 | 
	
		
			
				|  |  |          ///     <item>
 | 
	
		
			
				|  |  | -        ///         <description>The user has not been authenticated successfully.</description>
 | 
	
		
			
				|  |  | +        ///         <description>The client has not been authenticated successfully.</description>
 | 
	
		
			
				|  |  |          ///     </item>
 | 
	
		
			
				|  |  |          ///     <item>
 | 
	
		
			
				|  |  |          ///         <description>The listener thread - which is used to receive messages from the server - has stopped.</description>
 | 
	
	
		
			
				|  | @@ -216,9 +216,11 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
		
			
				|  |  | -        /// Gets or sets the session id.
 | 
	
		
			
				|  |  | +        /// Gets the session id.
 | 
	
		
			
				|  |  |          /// </summary>
 | 
	
		
			
				|  |  | -        /// <value>The session id.</value>
 | 
	
		
			
				|  |  | +        /// <value>
 | 
	
		
			
				|  |  | +        /// The session id, or <c>null</c> if the client has not been authenticated.
 | 
	
		
			
				|  |  | +        /// </value>
 | 
	
		
			
				|  |  |          public byte[] SessionId { get; private set; }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          private Message _clientInitMessage;
 | 
	
	
		
			
				|  | @@ -1141,15 +1143,13 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  |              this.Log(string.Format("Disconnect received: {0} {1}", message.ReasonCode, message.Description));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            if (this.DisconnectReceived != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                this.DisconnectReceived(this, new MessageEventArgs<DisconnectMessage>(message));
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            var disconnectReceived = DisconnectReceived;
 | 
	
		
			
				|  |  | +            if (disconnectReceived != null)
 | 
	
		
			
				|  |  | +                disconnectReceived(this, new MessageEventArgs<DisconnectMessage>(message));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            if (this.Disconnected != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                this.Disconnected(this, new EventArgs());
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            var disconnected = Disconnected;
 | 
	
		
			
				|  |  | +            if (disconnected != null)
 | 
	
		
			
				|  |  | +                disconnected(this, new EventArgs());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
	
		
			
				|  | @@ -1158,10 +1158,9 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |          /// <param name="message"><see cref="IgnoreMessage"/> message.</param>
 | 
	
		
			
				|  |  |          protected virtual void OnIgnoreReceived(IgnoreMessage message)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            if (this.IgnoreReceived != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                this.IgnoreReceived(this, new MessageEventArgs<IgnoreMessage>(message));
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            var handlers = IgnoreReceived;
 | 
	
		
			
				|  |  | +            if (handlers != null)
 | 
	
		
			
				|  |  | +                handlers(this, new MessageEventArgs<IgnoreMessage>(message));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
	
		
			
				|  | @@ -1170,10 +1169,9 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |          /// <param name="message"><see cref="UnimplementedMessage"/> message.</param>
 | 
	
		
			
				|  |  |          protected virtual void OnUnimplementedReceived(UnimplementedMessage message)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            if (this.UnimplementedReceived != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                this.UnimplementedReceived(this, new MessageEventArgs<UnimplementedMessage>(message));
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            var handlers = UnimplementedReceived;
 | 
	
		
			
				|  |  | +            if (handlers != null)
 | 
	
		
			
				|  |  | +                handlers(this, new MessageEventArgs<UnimplementedMessage>(message));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
	
		
			
				|  | @@ -1182,10 +1180,9 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |          /// <param name="message"><see cref="DebugMessage"/> message.</param>
 | 
	
		
			
				|  |  |          protected virtual void OnDebugReceived(DebugMessage message)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            if (this.DebugReceived != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                this.DebugReceived(this, new MessageEventArgs<DebugMessage>(message));
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            var handlers = DebugReceived;
 | 
	
		
			
				|  |  | +            if (handlers != null)
 | 
	
		
			
				|  |  | +                handlers(this, new MessageEventArgs<DebugMessage>(message));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
	
		
			
				|  | @@ -1194,10 +1191,9 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |          /// <param name="message"><see cref="ServiceRequestMessage"/> message.</param>
 | 
	
		
			
				|  |  |          protected virtual void OnServiceRequestReceived(ServiceRequestMessage message)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            if (this.ServiceRequestReceived != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                this.ServiceRequestReceived(this, new MessageEventArgs<ServiceRequestMessage>(message));
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            var handlers = ServiceRequestReceived;
 | 
	
		
			
				|  |  | +            if (handlers != null)
 | 
	
		
			
				|  |  | +                handlers(this, new MessageEventArgs<ServiceRequestMessage>(message));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
	
		
			
				|  | @@ -1206,10 +1202,9 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |          /// <param name="message"><see cref="ServiceAcceptMessage"/> message.</param>
 | 
	
		
			
				|  |  |          protected virtual void OnServiceAcceptReceived(ServiceAcceptMessage message)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            if (this.ServiceAcceptReceived != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                this.ServiceAcceptReceived(this, new MessageEventArgs<ServiceAcceptMessage>(message));
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            var handlers = ServiceAcceptReceived;
 | 
	
		
			
				|  |  | +            if (handlers != null)
 | 
	
		
			
				|  |  | +                handlers(this, new MessageEventArgs<ServiceAcceptMessage>(message));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
	
		
			
				|  | @@ -1249,10 +1244,9 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |              //  Start the algorithm implementation
 | 
	
		
			
				|  |  |              this._keyExchange.Start(this, message);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            if (this.KeyExchangeInitReceived != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                this.KeyExchangeInitReceived(this, new MessageEventArgs<KeyExchangeInitMessage>(message));
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            var keyExchangeInitReceived = KeyExchangeInitReceived;
 | 
	
		
			
				|  |  | +            if (keyExchangeInitReceived != null)
 | 
	
		
			
				|  |  | +                keyExchangeInitReceived(this, new MessageEventArgs<KeyExchangeInitMessage>(message));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
	
		
			
				|  | @@ -1303,10 +1297,9 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |                      messageMetadata.Enabled = true;
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            if (this.NewKeysReceived != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                this.NewKeysReceived(this, new MessageEventArgs<NewKeysMessage>(message));
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            var newKeysReceived = NewKeysReceived;
 | 
	
		
			
				|  |  | +            if (newKeysReceived != null)
 | 
	
		
			
				|  |  | +                newKeysReceived(this, new MessageEventArgs<NewKeysMessage>(message));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              //  Signal that key exchange completed
 | 
	
		
			
				|  |  |              this._keyExchangeCompletedWaitHandle.Set();
 | 
	
	
		
			
				|  | @@ -1328,10 +1321,9 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |          /// <param name="message"><see cref="RequestMessage"/> message.</param>
 | 
	
		
			
				|  |  |          protected virtual void OnUserAuthenticationRequestReceived(RequestMessage message)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            if (this.UserAuthenticationRequestReceived != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                this.UserAuthenticationRequestReceived(this, new MessageEventArgs<RequestMessage>(message));
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            var handlers = UserAuthenticationRequestReceived;
 | 
	
		
			
				|  |  | +            if (handlers != null)
 | 
	
		
			
				|  |  | +                handlers(this, new MessageEventArgs<RequestMessage>(message));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
	
		
			
				|  | @@ -1340,10 +1332,9 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |          /// <param name="message"><see cref="FailureMessage"/> message.</param>
 | 
	
		
			
				|  |  |          protected virtual void OnUserAuthenticationFailureReceived(FailureMessage message)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            if (this.UserAuthenticationFailureReceived != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                this.UserAuthenticationFailureReceived(this, new MessageEventArgs<FailureMessage>(message));
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            var handlers = UserAuthenticationFailureReceived;
 | 
	
		
			
				|  |  | +            if (handlers != null)
 | 
	
		
			
				|  |  | +                handlers(this, new MessageEventArgs<FailureMessage>(message));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
	
		
			
				|  | @@ -1352,10 +1343,9 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |          /// <param name="message"><see cref="SuccessMessage"/> message.</param>
 | 
	
		
			
				|  |  |          protected virtual void OnUserAuthenticationSuccessReceived(SuccessMessage message)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            if (this.UserAuthenticationSuccessReceived != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                this.UserAuthenticationSuccessReceived(this, new MessageEventArgs<SuccessMessage>(message));
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            var handlers = UserAuthenticationSuccessReceived;
 | 
	
		
			
				|  |  | +            if (handlers != null)
 | 
	
		
			
				|  |  | +                handlers(this, new MessageEventArgs<SuccessMessage>(message));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
	
		
			
				|  | @@ -1364,10 +1354,9 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |          /// <param name="message"><see cref="BannerMessage"/> message.</param>
 | 
	
		
			
				|  |  |          protected virtual void OnUserAuthenticationBannerReceived(BannerMessage message)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            if (this.UserAuthenticationBannerReceived != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                this.UserAuthenticationBannerReceived(this, new MessageEventArgs<BannerMessage>(message));
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            var handlers = UserAuthenticationBannerReceived;
 | 
	
		
			
				|  |  | +            if (handlers != null)
 | 
	
		
			
				|  |  | +                handlers(this, new MessageEventArgs<BannerMessage>(message));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
	
		
			
				|  | @@ -1376,10 +1365,9 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |          /// <param name="message"><see cref="GlobalRequestMessage"/> message.</param>
 | 
	
		
			
				|  |  |          protected virtual void OnGlobalRequestReceived(GlobalRequestMessage message)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            if (this.GlobalRequestReceived != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                this.GlobalRequestReceived(this, new MessageEventArgs<GlobalRequestMessage>(message));
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            var handlers = GlobalRequestReceived;
 | 
	
		
			
				|  |  | +            if (handlers != null)
 | 
	
		
			
				|  |  | +                handlers(this, new MessageEventArgs<GlobalRequestMessage>(message));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
	
		
			
				|  | @@ -1388,10 +1376,9 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |          /// <param name="message"><see cref="RequestSuccessMessage"/> message.</param>
 | 
	
		
			
				|  |  |          protected virtual void OnRequestSuccessReceived(RequestSuccessMessage message)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            if (this.RequestSuccessReceived != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                this.RequestSuccessReceived(this, new MessageEventArgs<RequestSuccessMessage>(message));
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            var handlers = RequestSuccessReceived;
 | 
	
		
			
				|  |  | +            if (handlers != null)
 | 
	
		
			
				|  |  | +                handlers(this, new MessageEventArgs<RequestSuccessMessage>(message));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
	
		
			
				|  | @@ -1400,10 +1387,9 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |          /// <param name="message"><see cref="RequestFailureMessage"/> message.</param>
 | 
	
		
			
				|  |  |          protected virtual void OnRequestFailureReceived(RequestFailureMessage message)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            if (this.RequestFailureReceived != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                this.RequestFailureReceived(this, new MessageEventArgs<RequestFailureMessage>(message));
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            var handlers = RequestFailureReceived;
 | 
	
		
			
				|  |  | +            if (handlers != null)
 | 
	
		
			
				|  |  | +                handlers(this, new MessageEventArgs<RequestFailureMessage>(message));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
	
		
			
				|  | @@ -1412,10 +1398,9 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |          /// <param name="message"><see cref="ChannelOpenMessage"/> message.</param>
 | 
	
		
			
				|  |  |          protected virtual void OnChannelOpenReceived(ChannelOpenMessage message)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            if (this.ChannelOpenReceived != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                this.ChannelOpenReceived(this, new MessageEventArgs<ChannelOpenMessage>(message));
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            var handlers = ChannelOpenReceived;
 | 
	
		
			
				|  |  | +            if (handlers != null)
 | 
	
		
			
				|  |  | +                handlers(this, new MessageEventArgs<ChannelOpenMessage>(message));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
	
		
			
				|  | @@ -1424,10 +1409,9 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |          /// <param name="message"><see cref="ChannelOpenConfirmationMessage"/> message.</param>
 | 
	
		
			
				|  |  |          protected virtual void OnChannelOpenConfirmationReceived(ChannelOpenConfirmationMessage message)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            if (this.ChannelOpenConfirmationReceived != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                this.ChannelOpenConfirmationReceived(this, new MessageEventArgs<ChannelOpenConfirmationMessage>(message));
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            var handlers = ChannelOpenConfirmationReceived;
 | 
	
		
			
				|  |  | +            if (handlers != null)
 | 
	
		
			
				|  |  | +                handlers(this, new MessageEventArgs<ChannelOpenConfirmationMessage>(message));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
	
		
			
				|  | @@ -1436,10 +1420,9 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |          /// <param name="message"><see cref="ChannelOpenFailureMessage"/> message.</param>
 | 
	
		
			
				|  |  |          protected virtual void OnChannelOpenFailureReceived(ChannelOpenFailureMessage message)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            if (this.ChannelOpenFailureReceived != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                this.ChannelOpenFailureReceived(this, new MessageEventArgs<ChannelOpenFailureMessage>(message));
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            var handlers = ChannelOpenFailureReceived;
 | 
	
		
			
				|  |  | +            if (handlers != null)
 | 
	
		
			
				|  |  | +                handlers(this, new MessageEventArgs<ChannelOpenFailureMessage>(message));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
	
		
			
				|  | @@ -1448,10 +1431,9 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |          /// <param name="message"><see cref="ChannelWindowAdjustMessage"/> message.</param>
 | 
	
		
			
				|  |  |          protected virtual void OnChannelWindowAdjustReceived(ChannelWindowAdjustMessage message)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            if (this.ChannelWindowAdjustReceived != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                this.ChannelWindowAdjustReceived(this, new MessageEventArgs<ChannelWindowAdjustMessage>(message));
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            var handlers = ChannelWindowAdjustReceived;
 | 
	
		
			
				|  |  | +            if (handlers != null)
 | 
	
		
			
				|  |  | +                handlers(this, new MessageEventArgs<ChannelWindowAdjustMessage>(message));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
	
		
			
				|  | @@ -1460,10 +1442,9 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |          /// <param name="message"><see cref="ChannelDataMessage"/> message.</param>
 | 
	
		
			
				|  |  |          protected virtual void OnChannelDataReceived(ChannelDataMessage message)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            if (this.ChannelDataReceived != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                this.ChannelDataReceived(this, new MessageEventArgs<ChannelDataMessage>(message));
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            var handlers = ChannelDataReceived;
 | 
	
		
			
				|  |  | +            if (handlers != null)
 | 
	
		
			
				|  |  | +                handlers(this, new MessageEventArgs<ChannelDataMessage>(message));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
	
		
			
				|  | @@ -1472,10 +1453,9 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |          /// <param name="message"><see cref="ChannelExtendedDataMessage"/> message.</param>
 | 
	
		
			
				|  |  |          protected virtual void OnChannelExtendedDataReceived(ChannelExtendedDataMessage message)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            if (this.ChannelExtendedDataReceived != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                this.ChannelExtendedDataReceived(this, new MessageEventArgs<ChannelExtendedDataMessage>(message));
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            var handlers = ChannelExtendedDataReceived;
 | 
	
		
			
				|  |  | +            if (handlers != null)
 | 
	
		
			
				|  |  | +                handlers(this, new MessageEventArgs<ChannelExtendedDataMessage>(message));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
	
		
			
				|  | @@ -1484,10 +1464,9 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |          /// <param name="message"><see cref="ChannelCloseMessage"/> message.</param>
 | 
	
		
			
				|  |  |          protected virtual void OnChannelEofReceived(ChannelEofMessage message)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            if (this.ChannelEofReceived != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                this.ChannelEofReceived(this, new MessageEventArgs<ChannelEofMessage>(message));
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            var handlers = ChannelEofReceived;
 | 
	
		
			
				|  |  | +            if (handlers != null)
 | 
	
		
			
				|  |  | +                handlers(this, new MessageEventArgs<ChannelEofMessage>(message));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
	
		
			
				|  | @@ -1496,10 +1475,9 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |          /// <param name="message"><see cref="ChannelCloseMessage"/> message.</param>
 | 
	
		
			
				|  |  |          protected virtual void OnChannelCloseReceived(ChannelCloseMessage message)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            if (this.ChannelCloseReceived != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                this.ChannelCloseReceived(this, new MessageEventArgs<ChannelCloseMessage>(message));
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            var handlers = ChannelCloseReceived;
 | 
	
		
			
				|  |  | +            if (handlers != null)
 | 
	
		
			
				|  |  | +                handlers(this, new MessageEventArgs<ChannelCloseMessage>(message));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
	
		
			
				|  | @@ -1508,10 +1486,9 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |          /// <param name="message"><see cref="ChannelRequestMessage"/> message.</param>
 | 
	
		
			
				|  |  |          protected virtual void OnChannelRequestReceived(ChannelRequestMessage message)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            if (this.ChannelRequestReceived != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                this.ChannelRequestReceived(this, new MessageEventArgs<ChannelRequestMessage>(message));
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            var handlers = ChannelRequestReceived;
 | 
	
		
			
				|  |  | +            if (handlers != null)
 | 
	
		
			
				|  |  | +                handlers(this, new MessageEventArgs<ChannelRequestMessage>(message));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
	
		
			
				|  | @@ -1520,10 +1497,9 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |          /// <param name="message"><see cref="ChannelSuccessMessage"/> message.</param>
 | 
	
		
			
				|  |  |          protected virtual void OnChannelSuccessReceived(ChannelSuccessMessage message)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            if (this.ChannelSuccessReceived != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                this.ChannelSuccessReceived(this, new MessageEventArgs<ChannelSuccessMessage>(message));
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            var handlers = ChannelSuccessReceived;
 | 
	
		
			
				|  |  | +            if (handlers != null)
 | 
	
		
			
				|  |  | +                handlers(this, new MessageEventArgs<ChannelSuccessMessage>(message));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
	
		
			
				|  | @@ -1532,10 +1508,9 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |          /// <param name="message"><see cref="ChannelFailureMessage"/> message.</param>
 | 
	
		
			
				|  |  |          protected virtual void OnChannelFailureReceived(ChannelFailureMessage message)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            if (this.ChannelFailureReceived != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                this.ChannelFailureReceived(this, new MessageEventArgs<ChannelFailureMessage>(message));
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            var handlers = ChannelFailureReceived;
 | 
	
		
			
				|  |  | +            if (handlers != null)
 | 
	
		
			
				|  |  | +                handlers(this, new MessageEventArgs<ChannelFailureMessage>(message));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
	
		
			
				|  | @@ -1544,21 +1519,18 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |          /// <param name="message"><see cref="Message"/> message.</param>
 | 
	
		
			
				|  |  |          protected virtual void OnMessageReceived(Message message)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            if (this.MessageReceived != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                this.MessageReceived(this, new MessageEventArgs<Message>(message));
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            var handlers = MessageReceived;
 | 
	
		
			
				|  |  | +            if (handlers != null)
 | 
	
		
			
				|  |  | +                handlers(this, new MessageEventArgs<Message>(message));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          #endregion
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          private void KeyExchange_HostKeyReceived(object sender, HostKeyEventArgs e)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            var handler = this.HostKeyReceived;
 | 
	
		
			
				|  |  | -            if (handler != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                handler(this, e);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            var handlers = HostKeyReceived;
 | 
	
		
			
				|  |  | +            if (handlers != null)
 | 
	
		
			
				|  |  | +                handlers(this, e);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
	
		
			
				|  | @@ -1650,6 +1622,9 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |          /// <param name="data">The data.</param>
 | 
	
		
			
				|  |  |          partial void SocketWrite(byte[] data);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        /// <summary>
 | 
	
		
			
				|  |  | +        /// Disconnects and disposes the socket.
 | 
	
		
			
				|  |  | +        /// </summary>
 | 
	
		
			
				|  |  |          private void SocketDisconnectAndDispose()
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  |              if (_socket != null)
 | 
	
	
		
			
				|  | @@ -1664,7 +1639,6 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
	
		
			
				|  | @@ -2007,7 +1981,9 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              this._exceptionWaitHandle.Set();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            SignalErrorOccurred(exp);
 | 
	
		
			
				|  |  | +            var errorOccured = ErrorOccured;
 | 
	
		
			
				|  |  | +            if (errorOccured != null)
 | 
	
		
			
				|  |  | +                errorOccured(this, new ExceptionEventArgs(exp));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              if (connectionException != null && connectionException.DisconnectReason != DisconnectReason.ConnectionLost)
 | 
	
		
			
				|  |  |              {
 | 
	
	
		
			
				|  | @@ -2025,6 +2001,8 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |                  _exceptionWaitHandle.Reset();
 | 
	
		
			
				|  |  |              if (_keyExchangeCompletedWaitHandle != null)
 | 
	
		
			
				|  |  |                  _keyExchangeCompletedWaitHandle.Reset();
 | 
	
		
			
				|  |  | +            if (_messageListenerCompleted != null)
 | 
	
		
			
				|  |  | +                _messageListenerCompleted.Reset();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              SessionId = null;
 | 
	
		
			
				|  |  |              _isDisconnectMessageSent = false;
 | 
	
	
		
			
				|  | @@ -2034,15 +2012,6 @@ namespace Renci.SshNet
 | 
	
		
			
				|  |  |              _keyExchangeInProgress = false;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        private void SignalErrorOccurred(Exception error)
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            var errorOccurred = ErrorOccured;
 | 
	
		
			
				|  |  | -            if (errorOccurred != null)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                errorOccurred(this, new ExceptionEventArgs(error));
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |          #region IDisposable Members
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          private bool _disposed;
 |