feat: HTTP/3

This commit is contained in:
Canny 2022-10-09 18:48:54 +03:00
parent 8f41b2e284
commit 2d1b80c70f
No known key found for this signature in database
GPG Key ID: 395CCB0AA979F27B
2 changed files with 20 additions and 15 deletions

View File

@ -135,4 +135,6 @@ dependencies {
implementation("com.google.guava:guava:31.0.1-android") implementation("com.google.guava:guava:31.0.1-android")
implementation("androidx.concurrent:concurrent-futures:1.1.0") implementation("androidx.concurrent:concurrent-futures:1.1.0")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.6.4") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.6.4")
implementation("com.github.niusounds:cronet-engine:0.1.0")
} }

View File

@ -1,29 +1,26 @@
package app.revanced.manager.di package app.revanced.manager.di
import android.content.Context
import com.niusounds.ktor.client.engine.cronet.Cronet
import io.ktor.client.* import io.ktor.client.*
import io.ktor.client.engine.okhttp.*
import io.ktor.client.plugins.* import io.ktor.client.plugins.*
import io.ktor.client.plugins.cache.*
import io.ktor.client.plugins.contentnegotiation.* import io.ktor.client.plugins.contentnegotiation.*
import io.ktor.serialization.kotlinx.json.* import io.ktor.serialization.kotlinx.json.*
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
import okhttp3.Dns import org.koin.android.ext.koin.androidContext
import org.koin.core.module.dsl.singleOf
import org.koin.dsl.module import org.koin.dsl.module
import java.net.Inet4Address
import java.net.InetAddress
val httpModule = module { val httpModule = module {
fun provideHttpClient() = HttpClient(OkHttp) { fun provideHttpClient(appContext: Context) = HttpClient(
engine { engine = Cronet.create {
config { context = appContext
dns(object : Dns { config = {
override fun lookup(hostname: String): List<InetAddress> { enableBrotli(true)
val addresses = Dns.SYSTEM.lookup(hostname) enableQuic(true)
return addresses.filterIsInstance<Inet4Address>()
}
})
} }
} }
) {
BrowserUserAgent() BrowserUserAgent()
install(ContentNegotiation) { install(ContentNegotiation) {
json(Json { json(Json {
@ -32,7 +29,13 @@ val httpModule = module {
ignoreUnknownKeys = true ignoreUnknownKeys = true
}) })
} }
install(HttpRequestRetry) {
retryOnServerErrors(maxRetries = 5)
}
install(HttpCache)
} }
singleOf(::provideHttpClient) single {
provideHttpClient(androidContext())
}
} }