android: fix most untagged OkHttp sockets

This commit is contained in:
Harsh Shandilya 2022-08-06 00:58:57 +05:30
parent bb88d50a31
commit d8332d6b90
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80
2 changed files with 67 additions and 0 deletions

View file

@ -1,12 +1,16 @@
package dev.msfjarvis.claw.android.injection
import android.content.Context
import android.net.TrafficStats
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import dagger.multibindings.IntoSet
import dev.msfjarvis.claw.android.network.DelegatingSocketFactory
import java.net.Socket
import javax.net.SocketFactory
import okhttp3.Cache
import okhttp3.Interceptor
import okhttp3.OkHttpClient
@ -20,15 +24,27 @@ object OkHttpModule {
return Cache(context.cacheDir, 10 * 1024 * 1024)
}
@Provides
fun provideSocketFactory(): SocketFactory {
return object : DelegatingSocketFactory(getDefault()) {
override fun configureSocket(socket: Socket): Socket {
TrafficStats.setThreadStatsTag(0x000090000)
return super.configureSocket(socket)
}
}
}
@Provides
fun provideClient(
cache: Cache,
socketFactory: SocketFactory,
interceptors: Set<@JvmSuppressWildcards Interceptor>,
): OkHttpClient {
return OkHttpClient.Builder()
.apply {
cache(cache)
interceptors.forEach(::addNetworkInterceptor)
socketFactory(socketFactory)
}
.build()
}

View file

@ -0,0 +1,51 @@
package dev.msfjarvis.claw.android.network
import java.net.InetAddress
import java.net.Socket
import javax.net.SocketFactory
/**
* A [SocketFactory] that delegates calls. Sockets can be configured after creation by overriding
* [configureSocket].
*/
open class DelegatingSocketFactory(private val delegate: SocketFactory) : SocketFactory() {
override fun createSocket(): Socket {
val socket = delegate.createSocket()
return configureSocket(socket)
}
override fun createSocket(host: String, port: Int): Socket {
val socket = delegate.createSocket(host, port)
return configureSocket(socket)
}
override fun createSocket(
host: String,
port: Int,
localAddress: InetAddress,
localPort: Int
): Socket {
val socket = delegate.createSocket(host, port, localAddress, localPort)
return configureSocket(socket)
}
override fun createSocket(host: InetAddress, port: Int): Socket {
val socket = delegate.createSocket(host, port)
return configureSocket(socket)
}
override fun createSocket(
host: InetAddress,
port: Int,
localAddress: InetAddress,
localPort: Int
): Socket {
val socket = delegate.createSocket(host, port, localAddress, localPort)
return configureSocket(socket)
}
open fun configureSocket(socket: Socket): Socket {
// No-op by default.
return socket
}
}