mirror of
https://github.com/permissionlesstech/bitchat-android.git
synced 2026-07-24 21:45:21 +00:00
* tor started * tor works * tor code * improve manager * works * move tor icon * werks * arti works * arti works * arti works with reconnect * delay fix * refactor
54 lines
1.6 KiB
Kotlin
54 lines
1.6 KiB
Kotlin
package com.bitchat.android.net
|
|
|
|
import okhttp3.OkHttpClient
|
|
import java.net.InetSocketAddress
|
|
import java.net.Proxy
|
|
import java.util.concurrent.TimeUnit
|
|
import java.util.concurrent.atomic.AtomicReference
|
|
|
|
/**
|
|
* Centralized OkHttp provider to ensure all network traffic honors Tor settings.
|
|
*/
|
|
object OkHttpProvider {
|
|
private val httpClientRef = AtomicReference<OkHttpClient?>(null)
|
|
private val wsClientRef = AtomicReference<OkHttpClient?>(null)
|
|
|
|
fun reset() {
|
|
httpClientRef.set(null)
|
|
wsClientRef.set(null)
|
|
}
|
|
|
|
fun httpClient(): OkHttpClient {
|
|
httpClientRef.get()?.let { return it }
|
|
val client = baseBuilderForCurrentProxy()
|
|
.callTimeout(15, TimeUnit.SECONDS)
|
|
.connectTimeout(10, TimeUnit.SECONDS)
|
|
.readTimeout(15, TimeUnit.SECONDS)
|
|
.build()
|
|
httpClientRef.set(client)
|
|
return client
|
|
}
|
|
|
|
fun webSocketClient(): OkHttpClient {
|
|
wsClientRef.get()?.let { return it }
|
|
val client = baseBuilderForCurrentProxy()
|
|
.connectTimeout(10, TimeUnit.SECONDS)
|
|
.readTimeout(0, TimeUnit.SECONDS)
|
|
.writeTimeout(10, TimeUnit.SECONDS)
|
|
.build()
|
|
wsClientRef.set(client)
|
|
return client
|
|
}
|
|
|
|
private fun baseBuilderForCurrentProxy(): OkHttpClient.Builder {
|
|
val builder = OkHttpClient.Builder()
|
|
val socks: InetSocketAddress? = TorManager.currentSocksAddress()
|
|
if (socks != null && TorManager.isProxyEnabled()) {
|
|
val proxy = Proxy(Proxy.Type.SOCKS, socks)
|
|
builder.proxy(proxy)
|
|
}
|
|
return builder
|
|
}
|
|
}
|
|
|