forked from apache/mina-sshd
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
apacheGH-268: Fix ClientConnectionService.sendHeartBeat()
If a reply is requested, but none arrives within the timeout, throw an exception and terminate the connection. This rolls back the changes made in ClientConnectionService in commit de2f8fe. It's quite all right to use the synchronous implementation of Session.request() because heartbeats are not sent from I/O threads. However, commit de2f8fe broke the contract specified in interface Session, which says Session.request() must return "the buffer if the request was successful, {@code null} otherwise." The implementation from commit de2f8fe threw an exception instead. This was wrong, and is corrected now in this commit. Note that this means that a caller cannot distinguish between the server replying SSH_MSG_UNIMPLEMENTED or SSH_MSG_REQUEST_FAILURE. Where such distinction is needed, use an asynchronous global request instead. Bug: apache#268
- Loading branch information
Showing
7 changed files
with
116 additions
and
48 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
53 changes: 53 additions & 0 deletions
53
sshd-core/src/main/java/org/apache/sshd/common/global/GlobalRequestException.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
/* | ||
* Licensed to the Apache Software Foundation (ASF) under one | ||
* or more contributor license agreements. See the NOTICE file | ||
* distributed with this work for additional information | ||
* regarding copyright ownership. The ASF licenses this file | ||
* to you under the Apache License, Version 2.0 (the | ||
* "License"); you may not use this file except in compliance | ||
* with the License. You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, | ||
* software distributed under the License is distributed on an | ||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||
* KIND, either express or implied. See the License for the | ||
* specific language governing permissions and limitations | ||
* under the License. | ||
*/ | ||
package org.apache.sshd.common.global; | ||
|
||
import org.apache.sshd.common.SshConstants; | ||
|
||
/** | ||
* An exception that can be set on a {@link org.apache.sshd.common.future.GlobalRequestFuture} to indicate that the | ||
* server sent back a failure reply. | ||
*/ | ||
public class GlobalRequestException extends Exception { | ||
|
||
private static final long serialVersionUID = 225802262556424684L; | ||
|
||
private final int code; | ||
|
||
/** | ||
* Creates a new {@link GlobalRequestException} with the given SSH message code. | ||
* | ||
* @param code SSH message code to set; normally {@link SshConstants#SSH_MSG_UNIMPLEMENTED} or | ||
* {@link SshConstants#SSH_MSG_REQUEST_FAILURE} | ||
*/ | ||
public GlobalRequestException(int code) { | ||
super(SshConstants.getCommandMessageName(code)); | ||
this.code = code; | ||
} | ||
|
||
/** | ||
* Retrieves the SSH message code. | ||
* | ||
* @return the code, normally {@link SshConstants#SSH_MSG_UNIMPLEMENTED} or | ||
* {@link SshConstants#SSH_MSG_REQUEST_FAILURE} | ||
*/ | ||
public int getCode() { | ||
return code; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters