Skip to content

Commit

Permalink
Merge pull request #275 from denami/master
Browse files Browse the repository at this point in the history
[JENKINS-51818] Add JNLP port availability check
  • Loading branch information
oleg-nenashev authored Jun 21, 2018
2 parents 1f210e2 + 7b48cea commit 02bb70b
Showing 1 changed file with 32 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import java.net.NoRouteToHostException;
import java.net.Proxy;
import java.net.ProxySelector;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.SocketTimeoutException;
import java.net.URI;
Expand Down Expand Up @@ -279,6 +280,11 @@ public JnlpAgentEndpoint resolve() throws IOException {
firstError = chain(firstError, new IOException(jenkinsUrl + " is publishing an invalid port"));
continue;
}
if (!isPortVisible(host, port, 5000)) {
firstError = chain(firstError, new IOException(jenkinsUrl + " provided port:" + port
+ " is not reachable"));
continue;
}
// sort the URLs so that the winner is the one we try first next time
final String winningJenkinsUrl = jenkinsUrl;
Collections.sort(jenkinsUrls, new Comparator<String>() {
Expand Down Expand Up @@ -312,6 +318,32 @@ public int compare(String o1, String o2) {
return null;
}

private boolean isPortVisible(String hostname, int port, int timeout) {
boolean exitStatus = false;
Socket s = null;

try {
s = new Socket();
s.setReuseAddress(true);
SocketAddress sa = new InetSocketAddress(hostname, port);
s.connect(sa, timeout);
} catch (IOException e) {
LOGGER.warning(e.getMessage());
} finally {
if (s != null) {
if (s.isConnected()) {
exitStatus = true;
}
try {
s.close();
} catch (IOException e) {
LOGGER.warning(e.getMessage());
}
}
}
return exitStatus;
}

@Nonnull
private URL toAgentListenerURL(@Nonnull String jenkinsUrl) throws MalformedURLException {
return jenkinsUrl.endsWith("/")
Expand Down

0 comments on commit 02bb70b

Please sign in to comment.