mirror of
https://github.com/yggdrasil-network/yggdrasil-android.git
synced 2025-04-28 14:15:08 +03:00
Added DNS configuration functionality. (#24)
* Changed app icon from default to Yggdrasil leaf. * Added workaround for DNS-reslver and fix for unmetered networks. * Added DNS configuration functionality. * Changed DNS configuration UI. Disabled DNS config by default. Added DNS fix for Chrome-based browsers.
This commit is contained in:
parent
24573625a4
commit
772dfdef8c
16 changed files with 620 additions and 26 deletions
|
@ -17,6 +17,8 @@ import java.util.concurrent.atomic.AtomicBoolean
|
|||
import kotlin.concurrent.thread
|
||||
|
||||
|
||||
private const val TAG = "PacketTunnelProvider"
|
||||
|
||||
class PacketTunnelProvider: VpnService() {
|
||||
companion object {
|
||||
const val RECEIVER_INTENT = "eu.neilalexander.yggdrasil.PacketTunnelProvider.MESSAGE"
|
||||
|
@ -50,16 +52,16 @@ class PacketTunnelProvider: VpnService() {
|
|||
|
||||
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
|
||||
if (intent == null) {
|
||||
Log.d("PacketTunnelProvider", "Intent is null")
|
||||
Log.d(TAG, "Intent is null")
|
||||
return START_NOT_STICKY
|
||||
}
|
||||
return when (intent.action ?: ACTION_STOP) {
|
||||
ACTION_STOP -> {
|
||||
Log.d("PacketTunnelProvider", "Stopping...")
|
||||
Log.d(TAG, "Stopping...")
|
||||
stop(); START_NOT_STICKY
|
||||
}
|
||||
else -> {
|
||||
Log.d("PacketTunnelProvider", "Starting...")
|
||||
Log.d(TAG, "Starting...")
|
||||
start(); START_STICKY
|
||||
}
|
||||
}
|
||||
|
@ -70,11 +72,11 @@ class PacketTunnelProvider: VpnService() {
|
|||
return
|
||||
}
|
||||
|
||||
Log.d("PacketTunnelProvider", config.getJSON().toString())
|
||||
Log.d(TAG, config.getJSON().toString())
|
||||
yggdrasil.startJSON(config.getJSONByteArray())
|
||||
|
||||
val address = yggdrasil.addressString
|
||||
var builder = Builder()
|
||||
val builder = Builder()
|
||||
.addAddress(address, 7)
|
||||
.addRoute("200::", 7)
|
||||
// We do this to trick the DNS-resolver into thinking that we have "regular" IPv6,
|
||||
|
@ -97,6 +99,21 @@ class PacketTunnelProvider: VpnService() {
|
|||
builder.setMetered(false)
|
||||
}
|
||||
|
||||
val preferences = androidx.preference.PreferenceManager.getDefaultSharedPreferences(this.baseContext)
|
||||
val serverString = preferences.getString(KEY_DNS_SERVERS, "")
|
||||
if (serverString!!.isNotEmpty()) {
|
||||
val servers = serverString.split(",")
|
||||
if (servers.isNotEmpty()) {
|
||||
servers.forEach {
|
||||
Log.i(TAG, "Using DNS server $it")
|
||||
builder.addDnsServer(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (preferences.getBoolean(KEY_ENABLE_CHROME_FIX, false)) {
|
||||
builder.addRoute("2001:4860:4860::8888", 128)
|
||||
}
|
||||
|
||||
parcel = builder.establish()
|
||||
val parcel = parcel
|
||||
if (parcel == null || !parcel.fileDescriptor.valid()) {
|
||||
|
@ -123,7 +140,7 @@ class PacketTunnelProvider: VpnService() {
|
|||
intent.putExtra("ip", yggdrasil.addressString)
|
||||
intent.putExtra("subnet", yggdrasil.subnetString)
|
||||
intent.putExtra("coords", yggdrasil.coordsString)
|
||||
intent.putExtra("peers", JSONArray(yggdrasil.peersJSON).length())
|
||||
intent.putExtra("peers", yggdrasil.peersJSON)
|
||||
LocalBroadcastManager.getInstance(this).sendBroadcast(intent)
|
||||
}
|
||||
|
||||
|
@ -214,7 +231,7 @@ class PacketTunnelProvider: VpnService() {
|
|||
}
|
||||
|
||||
private fun reader() {
|
||||
var b = ByteArray(65535)
|
||||
val b = ByteArray(65535)
|
||||
reads@ while (started.get()) {
|
||||
val readerStream = readerStream
|
||||
val readerThread = readerThread
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue