mirror of
https://github.com/sshnet/SSH.NET.git
synced 2026-09-11 01:36:39 +00:00
Apply patches 14800 and 14801
This commit is contained in:
@@ -180,18 +180,21 @@ namespace Renci.SshNet.Channels
|
||||
/// <summary>
|
||||
/// Called when channel has no more data to receive.
|
||||
/// </summary>
|
||||
protected override void OnEof()
|
||||
{
|
||||
base.OnEof();
|
||||
protected override void OnEof() {
|
||||
base.OnEof();
|
||||
|
||||
this._channelEof.Set();
|
||||
EventWaitHandle channelEof = this._channelEof;
|
||||
if (channelEof != null)
|
||||
channelEof.Set();
|
||||
}
|
||||
|
||||
protected override void OnClose()
|
||||
{
|
||||
base.OnClose();
|
||||
|
||||
this._channelEof.Set();
|
||||
EventWaitHandle channelEof = this._channelEof;
|
||||
if (channelEof != null)
|
||||
channelEof.Set();
|
||||
}
|
||||
|
||||
protected override void OnErrorOccured(Exception exp)
|
||||
@@ -199,7 +202,9 @@ namespace Renci.SshNet.Channels
|
||||
base.OnErrorOccured(exp);
|
||||
|
||||
// If error occured, no more data can be received
|
||||
this._channelEof.Set();
|
||||
EventWaitHandle channelEof = this._channelEof;
|
||||
if (channelEof != null)
|
||||
channelEof.Set();
|
||||
}
|
||||
|
||||
protected override void OnDisconnected()
|
||||
@@ -207,7 +212,9 @@ namespace Renci.SshNet.Channels
|
||||
base.OnDisconnected();
|
||||
|
||||
// If disconnected, no more data can be received
|
||||
this._channelEof.Set();
|
||||
EventWaitHandle channelEof = this._channelEof;
|
||||
if (channelEof != null)
|
||||
channelEof.Set();
|
||||
}
|
||||
|
||||
partial void ExecuteThread(Action action);
|
||||
|
||||
@@ -13,7 +13,7 @@ namespace Renci.SshNet
|
||||
public partial class ForwardedPortLocal
|
||||
{
|
||||
private TcpListener _listener;
|
||||
private object _listenerLocker = new object();
|
||||
private readonly object _listenerLocker = new object();
|
||||
|
||||
partial void InternalStart()
|
||||
{
|
||||
@@ -22,12 +22,12 @@ namespace Renci.SshNet
|
||||
return;
|
||||
|
||||
IPAddress addr = this.BoundHost.GetIPAddress();
|
||||
var ep = new IPEndPoint(addr, (int)this.BoundPort);
|
||||
var ep = new IPEndPoint(addr, (int)this.BoundPort);
|
||||
|
||||
this._listener = new TcpListener(ep);
|
||||
this._listener.Start();
|
||||
// Update bound port if original was passed as zero
|
||||
this.BoundPort = (uint) ((IPEndPoint) _listener.LocalEndpoint).Port;
|
||||
this.BoundPort = (uint)((IPEndPoint)_listener.LocalEndpoint).Port;
|
||||
|
||||
this.Session.ErrorOccured += Session_ErrorOccured;
|
||||
this.Session.Disconnected += Session_Disconnected;
|
||||
@@ -55,13 +55,14 @@ namespace Renci.SshNet
|
||||
|
||||
this.RaiseRequestReceived(originatorEndPoint.Address.ToString(), (uint)originatorEndPoint.Port);
|
||||
|
||||
var channel = this.Session.CreateChannel<ChannelDirectTcpip>();
|
||||
using (var channel = this.Session.CreateChannel<ChannelDirectTcpip>())
|
||||
{
|
||||
channel.Open(this.Host, this.Port, socket);
|
||||
|
||||
channel.Open(this.Host, this.Port, socket);
|
||||
channel.Bind();
|
||||
|
||||
channel.Bind();
|
||||
|
||||
channel.Close();
|
||||
channel.Close();
|
||||
}
|
||||
}
|
||||
catch (Exception exp)
|
||||
{
|
||||
@@ -96,11 +97,11 @@ namespace Renci.SshNet
|
||||
if (!this.IsStarted)
|
||||
return;
|
||||
|
||||
lock (this._listenerLocker)
|
||||
{
|
||||
this._listener.Stop();
|
||||
this._listener = null;
|
||||
}
|
||||
this.Session.Disconnected -= Session_Disconnected;
|
||||
this.Session.ErrorOccured -= Session_ErrorOccured;
|
||||
|
||||
this.StopListener();
|
||||
|
||||
this._listenerTaskCompleted.WaitOne(this.Session.ConnectionInfo.Timeout);
|
||||
this._listenerTaskCompleted.Dispose();
|
||||
this._listenerTaskCompleted = null;
|
||||
@@ -108,14 +109,26 @@ namespace Renci.SshNet
|
||||
this.IsStarted = false;
|
||||
}
|
||||
|
||||
private void StopListener()
|
||||
{
|
||||
lock (this._listenerLocker)
|
||||
{
|
||||
if (this._listener != null)
|
||||
{
|
||||
this._listener.Stop();
|
||||
this._listener = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void Session_ErrorOccured(object sender, Common.ExceptionEventArgs e)
|
||||
{
|
||||
this._listener.Stop();
|
||||
this.StopListener();
|
||||
}
|
||||
|
||||
private void Session_Disconnected(object sender, EventArgs e)
|
||||
{
|
||||
this._listener.Stop();
|
||||
this.StopListener();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user