Skip to content

Commit f88509e

Browse files
committed
Ensure to mark port stopped when starting fails.
1 parent 5498b8f commit f88509e

File tree

1 file changed

+24
-14
lines changed

1 file changed

+24
-14
lines changed

src/Renci.SshNet/ForwardedPortRemote.cs

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -137,30 +137,40 @@ protected override void StartPort()
137137
if (!ForwardedPortStatus.ToStarting(ref _status))
138138
return;
139139

140-
Session.RegisterMessage("SSH_MSG_REQUEST_FAILURE");
141-
Session.RegisterMessage("SSH_MSG_REQUEST_SUCCESS");
142-
Session.RegisterMessage("SSH_MSG_CHANNEL_OPEN");
140+
InitializePendingChannelCountdown();
143141

144-
Session.RequestSuccessReceived += Session_RequestSuccess;
145-
Session.RequestFailureReceived += Session_RequestFailure;
146-
Session.ChannelOpenReceived += Session_ChannelOpening;
142+
try
143+
{
144+
Session.RegisterMessage("SSH_MSG_REQUEST_FAILURE");
145+
Session.RegisterMessage("SSH_MSG_REQUEST_SUCCESS");
146+
Session.RegisterMessage("SSH_MSG_CHANNEL_OPEN");
147147

148-
InitializePendingChannelCountdown();
148+
Session.RequestSuccessReceived += Session_RequestSuccess;
149+
Session.RequestFailureReceived += Session_RequestFailure;
150+
Session.ChannelOpenReceived += Session_ChannelOpening;
149151

150-
// send global request to start direct tcpip
151-
Session.SendMessage(new GlobalRequestMessage(GlobalRequestName.TcpIpForward, true, BoundHost, BoundPort));
152-
// wat for response on global request to start direct tcpip
153-
Session.WaitOnHandle(_globalRequestResponse);
152+
// send global request to start forwarding
153+
Session.SendMessage(new GlobalRequestMessage(GlobalRequestName.TcpIpForward, true, BoundHost, BoundPort));
154+
// wat for response on global request to start direct tcpip
155+
Session.WaitOnHandle(_globalRequestResponse);
154156

155-
if (!_requestStatus)
157+
if (!_requestStatus)
158+
{
159+
throw new SshException(string.Format(CultureInfo.CurrentCulture, "Port forwarding for '{0}' port '{1}' failed to start.", Host, Port));
160+
}
161+
}
162+
catch (Exception)
156163
{
157-
// when the request to start port forward was rejected, then we're no longer
164+
// mark port stopped
165+
_status = ForwardedPortStatus.Stopped;
166+
167+
// when the request to start port forward was rejected or failed, then we're no longer
158168
// interested in these events
159169
Session.RequestSuccessReceived -= Session_RequestSuccess;
160170
Session.RequestFailureReceived -= Session_RequestFailure;
161171
Session.ChannelOpenReceived -= Session_ChannelOpening;
162172

163-
throw new SshException(string.Format(CultureInfo.CurrentCulture, "Port forwarding for '{0}' port '{1}' failed to start.", Host, Port));
173+
throw;
164174
}
165175

166176
_status = ForwardedPortStatus.Started;

0 commit comments

Comments
 (0)