| OLD | NEW |
| 1 /* | 1 /* |
| 2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 2 * This file is part of Adblock Plus <https://adblockplus.org/>, |
| 3 * Copyright (C) 2006-2016 Eyeo GmbH | 3 * Copyright (C) 2006-2016 Eyeo GmbH |
| 4 * | 4 * |
| 5 * Adblock Plus is free software: you can redistribute it and/or modify | 5 * Adblock Plus is free software: you can redistribute it and/or modify |
| 6 * it under the terms of the GNU General Public License version 3 as | 6 * it under the terms of the GNU General Public License version 3 as |
| 7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
| 8 * | 8 * |
| 9 * Adblock Plus is distributed in the hope that it will be useful, | 9 * Adblock Plus is distributed in the hope that it will be useful, |
| 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 import java.net.URL; | 24 import java.net.URL; |
| 25 import java.nio.charset.StandardCharsets; | 25 import java.nio.charset.StandardCharsets; |
| 26 import java.util.HashMap; | 26 import java.util.HashMap; |
| 27 import java.util.HashSet; | 27 import java.util.HashSet; |
| 28 import java.util.Map; | 28 import java.util.Map; |
| 29 import java.util.Map.Entry; | 29 import java.util.Map.Entry; |
| 30 import java.util.concurrent.LinkedBlockingQueue; | 30 import java.util.concurrent.LinkedBlockingQueue; |
| 31 import java.util.concurrent.TimeUnit; | 31 import java.util.concurrent.TimeUnit; |
| 32 import java.util.concurrent.locks.ReentrantLock; | 32 import java.util.concurrent.locks.ReentrantLock; |
| 33 import android.annotation.SuppressLint; | 33 import android.annotation.SuppressLint; |
| 34 import android.content.Context; | |
| 35 import android.util.Log; | 34 import android.util.Log; |
| 36 | 35 |
| 37 @SuppressLint("DefaultLocale") | 36 @SuppressLint("DefaultLocale") |
| 38 final class Downloader | 37 final class Downloader |
| 39 { | 38 { |
| 40 private static final int MAX_RETRIES = 5; | 39 private static final int MAX_RETRIES = 5; |
| 41 | 40 |
| 42 private static final String TAG = Downloader.class.getSimpleName(); | 41 private static final String TAG = Downloader.class.getSimpleName(); |
| 43 private final Engine engine; | 42 private final Engine engine; |
| 44 private final ReentrantLock accessLock = new ReentrantLock(); | 43 private final ReentrantLock accessLock = new ReentrantLock(); |
| 45 private Thread downloaderThread; | 44 private Thread downloaderThread; |
| 46 private LinkedBlockingQueue<DownloadJob> downloadJobs = new LinkedBlockingQueu
e<>(); | 45 private final LinkedBlockingQueue<DownloadJob> downloadJobs = new LinkedBlocki
ngQueue<>(); |
| 47 private HashSet<String> enqueuedIds = new HashSet<>(); | 46 private final HashSet<String> enqueuedIds = new HashSet<>(); |
| 48 private boolean downloaderEnabled = true; | 47 private boolean downloaderEnabled = true; |
| 49 | 48 |
| 50 private Downloader(final Engine engine) | 49 private Downloader(final Engine engine) |
| 51 { | 50 { |
| 52 this.engine = engine; | 51 this.engine = engine; |
| 53 } | 52 } |
| 54 | 53 |
| 55 void lock() | 54 void lock() |
| 56 { | 55 { |
| 57 this.accessLock.lock(); | 56 this.accessLock.lock(); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 70 Log.d(TAG, "Re-checking download permission"); | 69 Log.d(TAG, "Re-checking download permission"); |
| 71 } | 70 } |
| 72 this.downloaderEnabled = true; | 71 this.downloaderEnabled = true; |
| 73 this.unlock(); | 72 this.unlock(); |
| 74 } | 73 } |
| 75 | 74 |
| 76 static void download(final DownloadJob job) throws IOException | 75 static void download(final DownloadJob job) throws IOException |
| 77 { | 76 { |
| 78 final HttpURLConnection connection = (HttpURLConnection) job.url.openConnect
ion(); | 77 final HttpURLConnection connection = (HttpURLConnection) job.url.openConnect
ion(); |
| 79 connection.setRequestMethod("GET"); | 78 connection.setRequestMethod("GET"); |
| 80 if (job.headers != null) | 79 for (final Entry<String, String> e : job.headers.entrySet()) |
| 81 { | 80 { |
| 82 for (final Entry<String, String> e : job.headers.entrySet()) | 81 connection.addRequestProperty(e.getKey(), e.getValue()); |
| 83 { | |
| 84 connection.addRequestProperty(e.getKey(), e.getValue()); | |
| 85 } | |
| 86 } | 82 } |
| 87 connection.connect(); | 83 connection.connect(); |
| 88 | 84 |
| 89 job.responseCode = connection.getResponseCode(); | 85 job.responseCode = connection.getResponseCode(); |
| 90 job.responseHeaders.clear(); | 86 job.responseHeaders.clear(); |
| 91 job.responseText = null; | 87 job.responseText = null; |
| 92 | 88 |
| 93 for (int i = 1;; i++) | 89 for (int i = 1;; i++) |
| 94 { | 90 { |
| 95 final String key = connection.getHeaderFieldKey(i); | 91 final String key = connection.getHeaderFieldKey(i); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 123 this.enqueuedIds.add(id); | 119 this.enqueuedIds.add(id); |
| 124 this.downloadJobs.add(new DownloadJob(url, id, headers)); | 120 this.downloadJobs.add(new DownloadJob(url, id, headers)); |
| 125 } | 121 } |
| 126 } | 122 } |
| 127 finally | 123 finally |
| 128 { | 124 { |
| 129 this.unlock(); | 125 this.unlock(); |
| 130 } | 126 } |
| 131 } | 127 } |
| 132 | 128 |
| 133 public static Downloader create(final Context context, final Engine engine) | 129 public static Downloader create(final Engine engine) |
| 134 { | 130 { |
| 135 final Downloader downloader = new Downloader(engine); | 131 final Downloader downloader = new Downloader(engine); |
| 136 | 132 |
| 137 downloader.downloaderThread = new Thread(new DownloaderHandler(downloader)); | 133 downloader.downloaderThread = new Thread(new DownloaderHandler(downloader)); |
| 138 downloader.downloaderThread.setDaemon(true); | 134 downloader.downloaderThread.setDaemon(true); |
| 139 downloader.downloaderThread.start(); | 135 downloader.downloaderThread.start(); |
| 140 | 136 |
| 141 return downloader; | 137 return downloader; |
| 142 } | 138 } |
| 143 | 139 |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 242 } | 238 } |
| 243 | 239 |
| 244 private static class DownloadJob | 240 private static class DownloadJob |
| 245 { | 241 { |
| 246 private final URL url; | 242 private final URL url; |
| 247 private final String id; | 243 private final String id; |
| 248 private final HashMap<String, String> headers = new HashMap<>(); | 244 private final HashMap<String, String> headers = new HashMap<>(); |
| 249 private int retryCount = 0; | 245 private int retryCount = 0; |
| 250 | 246 |
| 251 private int responseCode = 0; | 247 private int responseCode = 0; |
| 252 private HashMap<String, String> responseHeaders = new HashMap<>(); | 248 private final HashMap<String, String> responseHeaders = new HashMap<>(); |
| 253 private String responseText = null; | 249 private String responseText = null; |
| 254 | 250 |
| 255 public DownloadJob(final URL url, final String id, final Map<String, String>
headers) | 251 public DownloadJob(final URL url, final String id, final Map<String, String>
headers) |
| 256 { | 252 { |
| 257 this.url = url; | 253 this.url = url; |
| 258 this.id = id; | 254 this.id = id; |
| 259 if (headers != null) | 255 if (headers != null) |
| 260 { | 256 { |
| 261 this.headers.putAll(headers); | 257 this.headers.putAll(headers); |
| 262 } | 258 } |
| 263 } | 259 } |
| 264 } | 260 } |
| 265 } | 261 } |
| OLD | NEW |