ForwardedPortDynamic
Provides functionality for forwarding connections from the client to destination servers via the SSH server,
also known as dynamic port forwarding.
using System;
using System.Threading;
namespace Renci.SshNet
{
public class ForwardedPortDynamic : ForwardedPort
{
private EventWaitHandle _listenerCompleted;
private bool _isDisposed;
public string BoundHost { get; set; }
public uint BoundPort { get; set; }
public override bool IsStarted {
get {
if (_listenerCompleted != null)
return !_listenerCompleted.WaitOne(0);
return false;
}
}
public ForwardedPortDynamic(uint port)
: this(string.Empty, port)
{
}
public ForwardedPortDynamic(string host, uint port)
{
BoundHost = host;
BoundPort = port;
}
protected override void StartPort()
{
}
protected override void StopPort(TimeSpan timeout)
{
if (IsStarted)
base.StopPort(timeout);
}
protected override void CheckDisposed()
{
if (_isDisposed)
throw new ObjectDisposedException(GetType().FullName);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected override void Dispose(bool disposing)
{
if (!_isDisposed) {
base.Dispose(disposing);
if (disposing) {
EventWaitHandle listenerCompleted = _listenerCompleted;
if (listenerCompleted != null) {
listenerCompleted.Dispose();
_listenerCompleted = null;
}
}
_isDisposed = true;
}
}
~ForwardedPortDynamic()
{
Dispose(false);
}
}
}