diff --git a/src/main/java/com/sheepit/client/Error.java b/src/main/java/com/sheepit/client/Error.java index a86dd7f..c88c526 100644 --- a/src/main/java/com/sheepit/client/Error.java +++ b/src/main/java/com/sheepit/client/Error.java @@ -60,6 +60,7 @@ public class Error { ERROR_BAD_UPLOAD_RESPONSE(101), PATH_INVALID(102), NO_WRITE_PERMISSION(103), + SERVER_DOWN(104), ; private final int id; @@ -162,6 +163,8 @@ public class Error { return "Corrupt response from the server when trying to upload data. The server might be overloaded or be encountering other issues. Will try again in a few minutes."; case NETWORK_ISSUE: return "Could not connect to the server, please check your connection to the internet."; + case SERVER_DOWN: + return "Server is down."; case TOO_OLD_CLIENT: return "This client is too old, you need to update it."; case AUTHENTICATION_FAILED: diff --git a/src/main/java/com/sheepit/client/Server.java b/src/main/java/com/sheepit/client/Server.java index a16bfbf..094816e 100644 --- a/src/main/java/com/sheepit/client/Server.java +++ b/src/main/java/com/sheepit/client/Server.java @@ -219,7 +219,7 @@ public class Server extends Thread { this.log.debug("Server::getConfiguration url " + remoteURL.build().toString()); - Response response = this.HTTPRequest(remoteURL, formBody); + Response response = this.HTTPRequest(remoteURL, formBody, false); int r = response.code(); String contentType = response.body().contentType().toString(); @@ -239,6 +239,10 @@ public class Server extends Thread { this.user_config.setPassword(publickey); } } + else if (r == HttpURLConnection.HTTP_NOT_FOUND) { + // most likely the server instance is down but not the frontend proxy (traefik) + return Error.Type.SERVER_DOWN; + } } catch (ConnectException e) { this.log.error("Server::getConfiguration error ConnectException " + e); @@ -451,6 +455,34 @@ public class Server extends Thread { } } + public Response HTTPRequest(HttpUrl.Builder httpUrlBuilder, RequestBody data_, boolean checkIsSuccessful) throws IOException { + String url = httpUrlBuilder.build().toString(); + Request.Builder builder = new Request.Builder().addHeader("User-Agent", HTTP_USER_AGENT).url(url); + + this.log.debug("Server::HTTPRequest url(" + url + ")"); + + if (data_ != null) { + builder.post(data_); + } + + Request request = builder.build(); + Response response = null; + + try { + response = httpClient.newCall(request).execute(); + + if (checkIsSuccessful && !response.isSuccessful()) { + throw new IOException("Unexpected code " + response); + } + + this.lastRequestTime = new Date().getTime(); + return response; + } + catch (IOException e) { + throw new IOException("Unexpected response from HTTP Stack" + e.getMessage()); + } + } + public Error.Type HTTPGetFile(String url_, String destination_, Gui gui_, String status_) throws FermeException { InputStream is = null; OutputStream output = null;