From 77a64a1dd79dbffe09506014fcd189cafc83b48d Mon Sep 17 00:00:00 2001 From: cyian-1756 Date: Tue, 31 Jul 2018 16:50:19 -0400 Subject: [PATCH 1/2] Timeout now applies to both connection and read --- .../java/com/rarchives/ripme/ripper/DownloadFileThread.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/com/rarchives/ripme/ripper/DownloadFileThread.java b/src/main/java/com/rarchives/ripme/ripper/DownloadFileThread.java index 55b8ffde..e704740e 100644 --- a/src/main/java/com/rarchives/ripme/ripper/DownloadFileThread.java +++ b/src/main/java/com/rarchives/ripme/ripper/DownloadFileThread.java @@ -8,6 +8,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.lang.reflect.Array; import java.net.HttpURLConnection; +import java.net.SocketTimeoutException; import java.net.URL; import java.net.URLConnection; import java.util.Arrays; @@ -110,6 +111,7 @@ class DownloadFileThread extends Thread { } huc.setInstanceFollowRedirects(true); huc.setConnectTimeout(TIMEOUT); + huc.setReadTimeout(TIMEOUT); huc.setRequestProperty("accept", "*/*"); if (!referrer.equals("")) { huc.setRequestProperty("Referer", referrer); // Sic @@ -222,6 +224,9 @@ class DownloadFileThread extends Thread { bis.close(); fos.close(); break; // Download successful: break out of infinite loop + } catch (SocketTimeoutException timeoutEx) { + logger.error(url.toExternalForm() + " timedout!"); + break; } catch (HttpStatusException hse) { logger.debug("HTTP status exception", hse); logger.error("[!] HTTP status " + hse.getStatusCode() + " while downloading from " + urlToDownload); From d71addb8a72a9836d741a827eb2011b53529ad4e Mon Sep 17 00:00:00 2001 From: cyian-1756 Date: Tue, 31 Jul 2018 16:55:21 -0400 Subject: [PATCH 2/2] improved logging message and added comment for timeouts --- .../java/com/rarchives/ripme/ripper/DownloadFileThread.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/rarchives/ripme/ripper/DownloadFileThread.java b/src/main/java/com/rarchives/ripme/ripper/DownloadFileThread.java index e704740e..f481919a 100644 --- a/src/main/java/com/rarchives/ripme/ripper/DownloadFileThread.java +++ b/src/main/java/com/rarchives/ripme/ripper/DownloadFileThread.java @@ -110,6 +110,8 @@ class DownloadFileThread extends Thread { huc = (HttpURLConnection) urlToDownload.openConnection(); } huc.setInstanceFollowRedirects(true); + // It is important to set both ConnectTimeout and ReadTimeout. If you don't then ripme will wait forever + // for the server to send data after connecting. huc.setConnectTimeout(TIMEOUT); huc.setReadTimeout(TIMEOUT); huc.setRequestProperty("accept", "*/*"); @@ -225,7 +227,9 @@ class DownloadFileThread extends Thread { fos.close(); break; // Download successful: break out of infinite loop } catch (SocketTimeoutException timeoutEx) { - logger.error(url.toExternalForm() + " timedout!"); + // Handle the timeout + logger.error("[!] " + url.toExternalForm() + " timedout!"); + // Download failed, break out of loop break; } catch (HttpStatusException hse) { logger.debug("HTTP status exception", hse);