From 34337d18fa0c1ed090c8f1e5af5f929ac8bb6140 Mon Sep 17 00:00:00 2001 From: tarsin Date: Tue, 7 Mar 2023 10:16:04 +0800 Subject: [PATCH] Revert to use ktor as okhttp delegate Ktor CIO is still not a jvm-heapless http client, actually it does the same thing okhttp does, decrypt TLS packet to JVM heap, and copy it to direct buffer, then write it to fd... , just the same thing we do use transferFrom with Okio Buffer.. let's implement a native zero-copy ktor client now! --- app/build.gradle.kts | 2 +- .../java/com/hippo/ehviewer/EhApplication.kt | 50 ++----------------- 2 files changed, 4 insertions(+), 48 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index c188e49f0..f1070fe7c 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -214,7 +214,7 @@ dependencies { // https://coil-kt.github.io/coil/changelog/ implementation("io.coil-kt:coil-compose:2.2.2") - implementation("io.ktor:ktor-client-cio:2.2.4") + implementation("io.ktor:ktor-client-okhttp:2.2.4") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4") implementation("org.jetbrains.kotlinx:kotlinx-serialization-cbor:1.5.0") implementation("org.jsoup:jsoup:1.15.4") diff --git a/app/src/main/java/com/hippo/ehviewer/EhApplication.kt b/app/src/main/java/com/hippo/ehviewer/EhApplication.kt index 67243e049..b1d312dd7 100644 --- a/app/src/main/java/com/hippo/ehviewer/EhApplication.kt +++ b/app/src/main/java/com/hippo/ehviewer/EhApplication.kt @@ -16,7 +16,6 @@ package com.hippo.ehviewer -import android.annotation.SuppressLint import android.app.Activity import android.app.Application import android.content.ComponentCallbacks2 @@ -48,17 +47,13 @@ import eu.kanade.tachiyomi.core.preference.AndroidPreferenceStore import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences import eu.kanade.tachiyomi.util.lang.launchIO import io.ktor.client.HttpClient -import io.ktor.client.engine.cio.CIO -import io.ktor.client.plugins.cookies.HttpCookies +import io.ktor.client.engine.okhttp.OkHttp import kotlinx.coroutines.DelicateCoroutinesApi import okhttp3.OkHttpClient import okio.Path.Companion.toOkioPath import java.io.File -import java.net.InetAddress -import java.net.InetSocketAddress import java.net.Proxy import java.security.KeyStore -import java.security.cert.X509Certificate import javax.net.ssl.TrustManagerFactory import javax.net.ssl.X509TrustManager @@ -264,48 +259,9 @@ class EhApplication : Application(), DefaultLifecycleObserver, ImageLoaderFactor } val ktorClient by lazy { - HttpClient(CIO) { + HttpClient(OkHttp) { engine { - proxy = when (Settings.proxyType) { - EhProxySelector.TYPE_DIRECT -> Proxy.NO_PROXY - EhProxySelector.TYPE_SYSTEM -> null - EhProxySelector.TYPE_HTTP -> { - val ip = Settings.proxyIp - val port = Settings.proxyPort - val iNetAddress = InetAddress.getByName(ip) - val socketAddress = InetSocketAddress(iNetAddress, port) - Proxy(Proxy.Type.HTTP, socketAddress) - } - // CIO does not support Socks proxy yet - else -> null - } - https { - serverName = "0.0.0.0".takeIf { Settings.dF } - trustManager = @SuppressLint("CustomX509TrustManager") - object : X509TrustManager { - @SuppressLint("TrustAllX509TrustManager") - override fun checkClientTrusted( - p0: Array?, - p1: String? - ) { - } - - @SuppressLint("TrustAllX509TrustManager") - override fun checkServerTrusted( - p0: Array?, - p1: String? - ) { - } - - override fun getAcceptedIssuers(): Array { - return arrayOfNulls(0) - } - } - } - pipelining = true - } - install(HttpCookies) { - storage = EhCookieStore + preconfigured = okHttpClient } } }