mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-21 09:20:19 +01:00
Add system HTTP proxy support to libsignal-net.
Co-authored-by: Cody Henthorne <cody@signal.org>
This commit is contained in:
committed by
Cody Henthorne
parent
8e880fe117
commit
74c6e76808
@@ -1,6 +1,9 @@
|
||||
package org.thoughtcrime.securesms.push
|
||||
|
||||
import android.content.Context
|
||||
import android.net.ConnectivityManager
|
||||
import android.os.Build
|
||||
import androidx.core.content.ContextCompat
|
||||
import com.google.i18n.phonenumbers.PhoneNumberUtil
|
||||
import okhttp3.CipherSuite
|
||||
import okhttp3.ConnectionSpec
|
||||
@@ -20,6 +23,7 @@ import org.thoughtcrime.securesms.net.SequentialDns
|
||||
import org.thoughtcrime.securesms.net.StandardUserAgentInterceptor
|
||||
import org.thoughtcrime.securesms.net.StaticDns
|
||||
import org.whispersystems.signalservice.api.push.TrustStore
|
||||
import org.whispersystems.signalservice.internal.configuration.HttpProxy
|
||||
import org.whispersystems.signalservice.internal.configuration.SignalCdnUrl
|
||||
import org.whispersystems.signalservice.internal.configuration.SignalCdsiUrl
|
||||
import org.whispersystems.signalservice.internal.configuration.SignalServiceConfiguration
|
||||
@@ -28,6 +32,7 @@ import org.whispersystems.signalservice.internal.configuration.SignalStorageUrl
|
||||
import org.whispersystems.signalservice.internal.configuration.SignalSvr2Url
|
||||
import java.io.IOException
|
||||
import java.util.Optional
|
||||
import android.net.Proxy as AndroidProxy
|
||||
|
||||
/**
|
||||
* Provides a [SignalServiceConfiguration] to be used with our service layer.
|
||||
@@ -133,6 +138,28 @@ class SignalServiceNetworkAccess(context: Context) {
|
||||
.build()
|
||||
|
||||
private val APP_CONNECTION_SPEC = ConnectionSpec.MODERN_TLS
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
private fun getSystemHttpProxy(context: Context): HttpProxy? {
|
||||
return if (Build.VERSION.SDK_INT >= 23) {
|
||||
val connectivityManager = ContextCompat.getSystemService(context, ConnectivityManager::class.java) ?: return null
|
||||
|
||||
connectivityManager
|
||||
.activeNetwork
|
||||
?.let { connectivityManager.getLinkProperties(it)?.httpProxy }
|
||||
?.takeIf { !it.exclusionList.contains(BuildConfig.SIGNAL_URL.stripProtocol()) }
|
||||
?.let { proxy -> HttpProxy(proxy.host, proxy.port) }
|
||||
} else {
|
||||
val host: String? = AndroidProxy.getHost(context)
|
||||
val port: Int = AndroidProxy.getPort(context)
|
||||
|
||||
if (host != null) {
|
||||
HttpProxy(host, port)
|
||||
} else {
|
||||
null
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private val serviceTrustStore: TrustStore = SignalServiceTrustStore(context)
|
||||
@@ -187,6 +214,7 @@ class SignalServiceNetworkAccess(context: Context) {
|
||||
networkInterceptors = interceptors,
|
||||
dns = Optional.of(DNS),
|
||||
signalProxy = Optional.empty(),
|
||||
systemHttpProxy = Optional.empty(),
|
||||
zkGroupServerPublicParams = zkGroupServerPublicParams,
|
||||
genericServerPublicParams = genericServerPublicParams,
|
||||
backupServerPublicParams = backupServerPublicParams,
|
||||
@@ -246,6 +274,7 @@ class SignalServiceNetworkAccess(context: Context) {
|
||||
networkInterceptors = interceptors,
|
||||
dns = Optional.of(DNS),
|
||||
signalProxy = if (SignalStore.proxy.isProxyEnabled) Optional.ofNullable(SignalStore.proxy.proxy) else Optional.empty(),
|
||||
systemHttpProxy = Optional.ofNullable(getSystemHttpProxy(context)),
|
||||
zkGroupServerPublicParams = zkGroupServerPublicParams,
|
||||
genericServerPublicParams = genericServerPublicParams,
|
||||
backupServerPublicParams = backupServerPublicParams,
|
||||
@@ -316,6 +345,7 @@ class SignalServiceNetworkAccess(context: Context) {
|
||||
networkInterceptors = interceptors,
|
||||
dns = Optional.of(DNS),
|
||||
signalProxy = Optional.empty(),
|
||||
systemHttpProxy = Optional.empty(),
|
||||
zkGroupServerPublicParams = zkGroupServerPublicParams,
|
||||
genericServerPublicParams = genericServerPublicParams,
|
||||
backupServerPublicParams = backupServerPublicParams,
|
||||
|
||||
Reference in New Issue
Block a user