diff --git a/app/src/main/java/org/fdroid/fdroid/IndexV1Updater.java b/app/src/main/java/org/fdroid/fdroid/IndexV1Updater.java index 8e11fbf4c..310541f86 100644 --- a/app/src/main/java/org/fdroid/fdroid/IndexV1Updater.java +++ b/app/src/main/java/org/fdroid/fdroid/IndexV1Updater.java @@ -47,11 +47,19 @@ import org.fdroid.fdroid.data.Schema; import org.fdroid.fdroid.net.Downloader; import org.fdroid.fdroid.net.DownloaderFactory; +import javax.net.ssl.SSLHandshakeException; +import javax.net.ssl.SSLKeyException; +import javax.net.ssl.SSLPeerUnverifiedException; +import javax.net.ssl.SSLProtocolException; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.ConnectException; +import java.net.HttpRetryException; +import java.net.NoRouteToHostException; +import java.net.ProtocolException; import java.net.SocketTimeoutException; +import java.net.UnknownHostException; import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.Date; @@ -94,6 +102,7 @@ public class IndexV1Updater extends RepoUpdater { /** * @return whether this successfully found an index of this version * @throws RepoUpdater.UpdateException + * @see org.fdroid.fdroid.net.DownloaderService#handleIntent(android.content.Intent) */ @Override public boolean update() throws RepoUpdater.UpdateException { @@ -119,7 +128,10 @@ public class IndexV1Updater extends RepoUpdater { } processDownloadedIndex(downloader.outputFile, downloader.getCacheTag()); - } catch (ConnectException | SocketTimeoutException e) { + } catch (ConnectException | HttpRetryException | NoRouteToHostException | SocketTimeoutException + | SSLHandshakeException | SSLKeyException | SSLPeerUnverifiedException | SSLProtocolException + | ProtocolException | UnknownHostException e) { + // if the above list changes, also change below and in DownloaderService.handleIntent() Utils.debugLog(TAG, "Trying to download the index from a mirror"); // Mirror logic here, so that the default download code is untouched. String mirrorUrl; @@ -146,7 +158,9 @@ public class IndexV1Updater extends RepoUpdater { processDownloadedIndex(downloader.outputFile, downloader.getCacheTag()); break; - } catch (ConnectException | SocketTimeoutException e2) { + } catch (ConnectException | HttpRetryException | NoRouteToHostException | SocketTimeoutException + | SSLHandshakeException | SSLKeyException | SSLPeerUnverifiedException | SSLProtocolException + | ProtocolException | UnknownHostException e2) { // We'll just let this try the next mirror Utils.debugLog(TAG, "Trying next mirror"); } catch (IOException e2) { diff --git a/app/src/main/java/org/fdroid/fdroid/net/DownloaderService.java b/app/src/main/java/org/fdroid/fdroid/net/DownloaderService.java index c670baf71..0aaea76b7 100644 --- a/app/src/main/java/org/fdroid/fdroid/net/DownloaderService.java +++ b/app/src/main/java/org/fdroid/fdroid/net/DownloaderService.java @@ -47,6 +47,7 @@ import java.io.IOException; import java.net.ConnectException; import java.net.HttpRetryException; import java.net.NoRouteToHostException; +import java.net.ProtocolException; import java.net.SocketTimeoutException; import java.net.UnknownHostException; @@ -193,6 +194,7 @@ public class DownloaderService extends Service { * * @param intent The {@link Intent} passed via {@link * android.content.Context#startService(Intent)}. + * @see org.fdroid.fdroid.IndexV1Updater#update() */ private void handleIntent(Intent intent) { final Uri uri = intent.getData(); @@ -225,7 +227,8 @@ public class DownloaderService extends Service { sendBroadcast(uri, Downloader.ACTION_INTERRUPTED, localFile, repoId, originalUrlString); } catch (ConnectException | HttpRetryException | NoRouteToHostException | SocketTimeoutException | SSLHandshakeException | SSLKeyException | SSLPeerUnverifiedException | SSLProtocolException - | UnknownHostException e) { + | ProtocolException | UnknownHostException e) { + // if the above list of exceptions changes, also change it in IndexV1Updater.update() Log.e(TAG, e.getLocalizedMessage()); sendBroadcast(uri, Downloader.ACTION_CONNECTION_FAILED, localFile, repoId, originalUrlString); } catch (IOException e) { diff --git a/app/src/main/java/org/fdroid/fdroid/net/HttpDownloader.java b/app/src/main/java/org/fdroid/fdroid/net/HttpDownloader.java index 63bfe99b2..87ba6a81d 100644 --- a/app/src/main/java/org/fdroid/fdroid/net/HttpDownloader.java +++ b/app/src/main/java/org/fdroid/fdroid/net/HttpDownloader.java @@ -37,7 +37,6 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; -import java.net.ConnectException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.SocketTimeoutException; @@ -106,7 +105,7 @@ public class HttpDownloader extends Downloader { * @see Cookieless cookies */ @Override - public void download() throws ConnectException, IOException, InterruptedException { + public void download() throws IOException, InterruptedException { // get the file size from the server HttpURLConnection tmpConn = getConnection(); tmpConn.setRequestMethod("HEAD");