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