From 043a17382850b930cd477e036435326a03ef080f Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Mon, 13 Dec 2021 11:30:50 -0300 Subject: [PATCH] Migrate OkHttp to bramble-core --- .../bramble/api}/WeakSingletonProvider.java | 6 ++-- bramble-core/build.gradle | 4 +++ .../org/briarproject/bramble/io/IoModule.java | 31 +++++++++++++++++++ bramble-core/witness.gradle | 2 ++ briar-core/build.gradle | 4 +-- .../briar/feed/FeedManagerImpl.java | 1 + .../briarproject/briar/feed/FeedModule.java | 30 ------------------ .../briar/feed/FeedManagerImplTest.java | 3 +- build.gradle | 2 ++ 9 files changed, 47 insertions(+), 36 deletions(-) rename {briar-core/src/main/java/org/briarproject/briar/feed => bramble-api/src/main/java/org/briarproject/bramble/api}/WeakSingletonProvider.java (83%) diff --git a/briar-core/src/main/java/org/briarproject/briar/feed/WeakSingletonProvider.java b/bramble-api/src/main/java/org/briarproject/bramble/api/WeakSingletonProvider.java similarity index 83% rename from briar-core/src/main/java/org/briarproject/briar/feed/WeakSingletonProvider.java rename to bramble-api/src/main/java/org/briarproject/bramble/api/WeakSingletonProvider.java index cf3b85ffe..bef7184d8 100644 --- a/briar-core/src/main/java/org/briarproject/briar/feed/WeakSingletonProvider.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/WeakSingletonProvider.java @@ -1,4 +1,4 @@ -package org.briarproject.briar.feed; +package org.briarproject.bramble.api; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; @@ -13,7 +13,7 @@ import javax.inject.Provider; * collected. */ @NotNullByDefault -abstract class WeakSingletonProvider implements Provider { +public abstract class WeakSingletonProvider implements Provider { private final Object lock = new Object(); @GuardedBy("lock") @@ -31,5 +31,5 @@ abstract class WeakSingletonProvider implements Provider { } } - abstract T createInstance(); + public abstract T createInstance(); } diff --git a/bramble-core/build.gradle b/bramble-core/build.gradle index 8038e0a58..8f77f18d2 100644 --- a/bramble-core/build.gradle +++ b/bramble-core/build.gradle @@ -11,12 +11,16 @@ apply from: '../dagger.gradle' dependencies { implementation project(path: ':bramble-api', configuration: 'default') implementation 'org.bouncycastle:bcprov-jdk15to18:1.70' + //noinspection GradleDependency implementation 'com.h2database:h2:1.4.192' // The last version that supports Java 1.6 implementation 'org.bitlet:weupnp:0.1.4' implementation 'net.i2p.crypto:eddsa:0.2.0' implementation 'org.whispersystems:curve25519-java:0.5.0' implementation 'org.briarproject:jtorctl:0.3' + //noinspection GradleDependency + implementation "com.squareup.okhttp3:okhttp:$okhttp_version" + annotationProcessor "com.google.dagger:dagger-compiler:$dagger_version" testImplementation project(path: ':bramble-api', configuration: 'testOutput') diff --git a/bramble-core/src/main/java/org/briarproject/bramble/io/IoModule.java b/bramble-core/src/main/java/org/briarproject/bramble/io/IoModule.java index f8aed8ae3..f95d37adf 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/io/IoModule.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/io/IoModule.java @@ -1,18 +1,49 @@ package org.briarproject.bramble.io; +import org.briarproject.bramble.api.WeakSingletonProvider; import org.briarproject.bramble.api.io.TimeoutMonitor; +import javax.annotation.Nonnull; import javax.inject.Singleton; +import javax.net.SocketFactory; import dagger.Module; import dagger.Provides; +import okhttp3.Dns; +import okhttp3.OkHttpClient; + +import static java.util.concurrent.TimeUnit.MILLISECONDS; @Module public class IoModule { + private static final int CONNECT_TIMEOUT = 60_000; // Milliseconds + @Provides @Singleton TimeoutMonitor provideTimeoutMonitor(TimeoutMonitorImpl timeoutMonitor) { return timeoutMonitor; } + + // Share an HTTP client instance between requests where possible, while + // allowing the client to be garbage-collected between requests. The + // provider keeps a weak reference to the last client instance and reuses + // the instance until it gets garbage-collected. See + // https://medium.com/@leandromazzuquini/if-you-are-using-okhttp-you-should-know-this-61d68e065a2b + @Provides + @Singleton + WeakSingletonProvider provideOkHttpClientProvider( + SocketFactory torSocketFactory, Dns noDnsLookups) { + return new WeakSingletonProvider() { + @Override + @Nonnull + public OkHttpClient createInstance() { + return new OkHttpClient.Builder() + .socketFactory(torSocketFactory) + .dns(noDnsLookups) // Don't make local DNS lookups + .connectTimeout(CONNECT_TIMEOUT, MILLISECONDS) + .build(); + } + }; + } } diff --git a/bramble-core/witness.gradle b/bramble-core/witness.gradle index 345bda58b..e60375e4b 100644 --- a/bramble-core/witness.gradle +++ b/bramble-core/witness.gradle @@ -15,6 +15,8 @@ dependencyVerification { 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava:listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar:b372a037d4230aa57fbeffdef30fd6123f9c0c2db85d0aced00c91b974f33f99', 'com.google.j2objc:j2objc-annotations:1.1:j2objc-annotations-1.1.jar:2994a7eb78f2710bd3d3bfb639b2c94e219cedac0d4d084d516e78c16dddecf6', 'com.h2database:h2:1.4.192:h2-1.4.192.jar:225b22e9857235c46c93861410b60b8c81c10dc8985f4faf188985ba5445126c', + 'com.squareup.okhttp3:okhttp:3.12.13:okhttp-3.12.13.jar:508234e024ef7e270ab1a6d5b356f5b98e786511239ca986d684fd1e2cf7bc82', + 'com.squareup.okio:okio:1.15.0:okio-1.15.0.jar:693fa319a7e8843300602b204023b7674f106ebcb577f2dd5807212b66118bd2', 'com.squareup:javapoet:1.13.0:javapoet-1.13.0.jar:4c7517e848a71b36d069d12bb3bf46a70fd4cda3105d822b0ed2e19c00b69291', 'javax.annotation:jsr250-api:1.0:jsr250-api-1.0.jar:a1a922d0d9b6d183ed3800dfac01d1e1eb159f0e8c6f94736931c1def54a941f', 'javax.inject:javax.inject:1:javax.inject-1.jar:91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff', diff --git a/briar-core/build.gradle b/briar-core/build.gradle index 758f1ab85..9f19fe98a 100644 --- a/briar-core/build.gradle +++ b/briar-core/build.gradle @@ -12,8 +12,8 @@ dependencies { implementation project(path: ':briar-api', configuration: 'default') implementation 'com.rometools:rome:1.15.0' implementation 'org.jdom:jdom2:2.0.6' - // okhttp 3.12.x is supported until end of 2020, newer versions need minSdk 21 - implementation 'com.squareup.okhttp3:okhttp:3.12.13' + //noinspection GradleDependency + implementation "com.squareup.okhttp3:okhttp:$okhttp_version" implementation 'org.jsoup:jsoup:1.13.1' annotationProcessor "com.google.dagger:dagger-compiler:$dagger_version" diff --git a/briar-core/src/main/java/org/briarproject/briar/feed/FeedManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/feed/FeedManagerImpl.java index a229809b7..323bf7cfa 100644 --- a/briar-core/src/main/java/org/briarproject/briar/feed/FeedManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/feed/FeedManagerImpl.java @@ -8,6 +8,7 @@ import com.rometools.rome.io.SyndFeedInput; import com.rometools.rome.io.XmlReader; import org.briarproject.bramble.api.FormatException; +import org.briarproject.bramble.api.WeakSingletonProvider; import org.briarproject.bramble.api.client.ClientHelper; import org.briarproject.bramble.api.client.ContactGroupFactory; import org.briarproject.bramble.api.data.BdfDictionary; diff --git a/briar-core/src/main/java/org/briarproject/briar/feed/FeedModule.java b/briar-core/src/main/java/org/briarproject/briar/feed/FeedModule.java index 2936cbd32..683015199 100644 --- a/briar-core/src/main/java/org/briarproject/briar/feed/FeedModule.java +++ b/briar-core/src/main/java/org/briarproject/briar/feed/FeedModule.java @@ -5,23 +5,15 @@ import org.briarproject.bramble.api.lifecycle.LifecycleManager; import org.briarproject.briar.api.blog.BlogManager; import org.briarproject.briar.api.feed.FeedManager; -import javax.annotation.Nonnull; import javax.inject.Inject; import javax.inject.Singleton; -import javax.net.SocketFactory; import dagger.Module; import dagger.Provides; -import okhttp3.Dns; -import okhttp3.OkHttpClient; - -import static java.util.concurrent.TimeUnit.MILLISECONDS; @Module public class FeedModule { - private static final int CONNECT_TIMEOUT = 60_000; // Milliseconds - public static class EagerSingletons { @Inject FeedManager feedManager; @@ -42,26 +34,4 @@ public class FeedModule { FeedFactory provideFeedFactory(FeedFactoryImpl feedFactory) { return feedFactory; } - - // Share an HTTP client instance between requests where possible, while - // allowing the client to be garbage-collected between requests. The - // provider keeps a weak reference to the last client instance and reuses - // the instance until it gets garbage-collected. See - // https://medium.com/@leandromazzuquini/if-you-are-using-okhttp-you-should-know-this-61d68e065a2b - @Provides - @Singleton - WeakSingletonProvider provideOkHttpClientProvider( - SocketFactory torSocketFactory, Dns noDnsLookups) { - return new WeakSingletonProvider() { - @Override - @Nonnull - public OkHttpClient createInstance() { - return new OkHttpClient.Builder() - .socketFactory(torSocketFactory) - .dns(noDnsLookups) // Don't make local DNS lookups - .connectTimeout(CONNECT_TIMEOUT, MILLISECONDS) - .build(); - } - }; - } } diff --git a/briar-core/src/test/java/org/briarproject/briar/feed/FeedManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/feed/FeedManagerImplTest.java index 36f401e69..a87018047 100644 --- a/briar-core/src/test/java/org/briarproject/briar/feed/FeedManagerImplTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/feed/FeedManagerImplTest.java @@ -3,6 +3,7 @@ package org.briarproject.briar.feed; import com.rometools.rome.feed.synd.SyndEntry; import com.rometools.rome.feed.synd.SyndEntryImpl; +import org.briarproject.bramble.api.WeakSingletonProvider; import org.briarproject.bramble.api.client.ClientHelper; import org.briarproject.bramble.api.client.ContactGroupFactory; import org.briarproject.bramble.api.data.BdfDictionary; @@ -71,7 +72,7 @@ public class FeedManagerImplTest extends BrambleMockTestCase { new WeakSingletonProvider() { @Override @Nonnull - OkHttpClient createInstance() { + public OkHttpClient createInstance() { return client; } }; diff --git a/build.gradle b/build.gradle index 54bb99862..d5863b881 100644 --- a/build.gradle +++ b/build.gradle @@ -35,6 +35,8 @@ buildscript { } ext { dagger_version = "2.33" + // okhttp 3.12.x is supported until end of 2021, newer versions need minSdk 21 + okhttp_version = "3.12.13" tor_version = "0.3.5.17" obfs4proxy_version = "0.0.12-dev-40245c4a" junit_version = "4.13.2"