diff --git a/library/src/main/java/com/danikula/videocache/Config.java b/library/src/main/java/com/danikula/videocache/Config.java index 29ab95c9..07848c8f 100644 --- a/library/src/main/java/com/danikula/videocache/Config.java +++ b/library/src/main/java/com/danikula/videocache/Config.java @@ -6,6 +6,7 @@ import com.danikula.videocache.sourcestorage.SourceInfoStorage; import java.io.File; +import java.net.Proxy; /** * Configuration for proxy cache. @@ -19,13 +20,15 @@ class Config { public final DiskUsage diskUsage; public final SourceInfoStorage sourceInfoStorage; public final HeaderInjector headerInjector; + public final Proxy proxy; - Config(File cacheRoot, FileNameGenerator fileNameGenerator, DiskUsage diskUsage, SourceInfoStorage sourceInfoStorage, HeaderInjector headerInjector) { + Config(File cacheRoot, FileNameGenerator fileNameGenerator, DiskUsage diskUsage, SourceInfoStorage sourceInfoStorage, HeaderInjector headerInjector, Proxy proxy) { this.cacheRoot = cacheRoot; this.fileNameGenerator = fileNameGenerator; this.diskUsage = diskUsage; this.sourceInfoStorage = sourceInfoStorage; this.headerInjector = headerInjector; + this.proxy = proxy; } File generateCacheFile(String url) { diff --git a/library/src/main/java/com/danikula/videocache/HttpProxyCacheServer.java b/library/src/main/java/com/danikula/videocache/HttpProxyCacheServer.java index 1f34ae8f..254ab77f 100644 --- a/library/src/main/java/com/danikula/videocache/HttpProxyCacheServer.java +++ b/library/src/main/java/com/danikula/videocache/HttpProxyCacheServer.java @@ -19,6 +19,7 @@ import java.io.File; import java.io.IOException; import java.net.InetAddress; +import java.net.Proxy; import java.net.ServerSocket; import java.net.Socket; import java.net.SocketException; @@ -353,6 +354,7 @@ public static final class Builder { private DiskUsage diskUsage; private SourceInfoStorage sourceInfoStorage; private HeaderInjector headerInjector; + private Proxy proxy; public Builder(Context context) { this.sourceInfoStorage = SourceInfoStorageFactory.newSourceInfoStorage(context); @@ -441,6 +443,12 @@ public Builder headerInjector(HeaderInjector headerInjector) { return this; } + + public Builder proxy(Proxy proxy) { + this.proxy = checkNotNull(proxy); + return this; + } + /** * Builds new instance of {@link HttpProxyCacheServer}. * @@ -452,7 +460,7 @@ public HttpProxyCacheServer build() { } private Config buildConfig() { - return new Config(cacheRoot, fileNameGenerator, diskUsage, sourceInfoStorage, headerInjector); + return new Config(cacheRoot, fileNameGenerator, diskUsage, sourceInfoStorage, headerInjector, proxy); } } diff --git a/library/src/main/java/com/danikula/videocache/HttpProxyCacheServerClients.java b/library/src/main/java/com/danikula/videocache/HttpProxyCacheServerClients.java index df126223..43332ebc 100644 --- a/library/src/main/java/com/danikula/videocache/HttpProxyCacheServerClients.java +++ b/library/src/main/java/com/danikula/videocache/HttpProxyCacheServerClients.java @@ -79,7 +79,7 @@ public int getClientsCount() { } private HttpProxyCache newHttpProxyCache() throws ProxyCacheException { - HttpUrlSource source = new HttpUrlSource(url, config.sourceInfoStorage, config.headerInjector); + HttpUrlSource source = new HttpUrlSource(url, config.sourceInfoStorage, config.headerInjector, config.proxy); FileCache cache = new FileCache(config.generateCacheFile(url), config.diskUsage); HttpProxyCache httpProxyCache = new HttpProxyCache(source, cache); httpProxyCache.registerCacheListener(uiCacheListener); diff --git a/library/src/main/java/com/danikula/videocache/HttpUrlSource.java b/library/src/main/java/com/danikula/videocache/HttpUrlSource.java index c7fb8ada..601193e0 100644 --- a/library/src/main/java/com/danikula/videocache/HttpUrlSource.java +++ b/library/src/main/java/com/danikula/videocache/HttpUrlSource.java @@ -15,6 +15,7 @@ import java.io.InputStream; import java.io.InterruptedIOException; import java.net.HttpURLConnection; +import java.net.Proxy; import java.net.URL; import java.util.Map; @@ -38,6 +39,7 @@ public class HttpUrlSource implements Source { private static final int MAX_REDIRECTS = 5; private final SourceInfoStorage sourceInfoStorage; private final HeaderInjector headerInjector; + public final Proxy proxy; private SourceInfo sourceInfo; private HttpURLConnection connection; private InputStream inputStream; @@ -47,12 +49,13 @@ public HttpUrlSource(String url) { } public HttpUrlSource(String url, SourceInfoStorage sourceInfoStorage) { - this(url, sourceInfoStorage, new EmptyHeadersInjector()); + this(url, sourceInfoStorage, new EmptyHeadersInjector(),null); } - public HttpUrlSource(String url, SourceInfoStorage sourceInfoStorage, HeaderInjector headerInjector) { + public HttpUrlSource(String url, SourceInfoStorage sourceInfoStorage, HeaderInjector headerInjector, Proxy proxy) { this.sourceInfoStorage = checkNotNull(sourceInfoStorage); this.headerInjector = checkNotNull(headerInjector); + this.proxy = proxy; SourceInfo sourceInfo = sourceInfoStorage.get(url); this.sourceInfo = sourceInfo != null ? sourceInfo : new SourceInfo(url, Integer.MIN_VALUE, ProxyCacheUtils.getSupposablyMime(url)); @@ -62,6 +65,7 @@ public HttpUrlSource(HttpUrlSource source) { this.sourceInfo = source.sourceInfo; this.sourceInfoStorage = source.sourceInfoStorage; this.headerInjector = source.headerInjector; + this.proxy = null; } @Override @@ -159,7 +163,8 @@ private HttpURLConnection openConnection(long offset, int timeout) throws IOExce String url = this.sourceInfo.url; do { LOG.debug("Open connection " + (offset > 0 ? " with offset " + offset : "") + " to " + url); - connection = (HttpURLConnection) new URL(url).openConnection(); + if (proxy == null)connection = (HttpURLConnection) new URL(url).openConnection(); + else connection = (HttpURLConnection) new URL(url).openConnection(proxy); injectCustomHeaders(connection, url); if (offset > 0) { connection.setRequestProperty("Range", "bytes=" + offset + "-");