mirror of
https://github.com/yggdrasil-network/crispa-android.git
synced 2024-11-09 20:11:01 +00:00
1. fix for DNS unavailability
This commit is contained in:
parent
5217204670
commit
bf491944d4
@ -127,7 +127,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
// No services have actually been discovered yet, so this method
|
// No services have actually been discovered yet, so this method
|
||||||
// can often be left blank. Code for peer discovery goes in the
|
// can often be left blank. Code for peer discovery goes in the
|
||||||
// onReceive method, detailed below.
|
// onReceive method, detailed below.
|
||||||
showToast("discover peers success")
|
//showToast("discover peers success")
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onFailure(reasonCode: Int) {
|
override fun onFailure(reasonCode: Int) {
|
||||||
@ -383,11 +383,11 @@ class MainActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun updateThisDevice(wifiP2pDevice: WifiP2pDevice) {
|
private fun updateThisDevice(wifiP2pDevice: WifiP2pDevice) {
|
||||||
showToast("update device:"+wifiP2pDevice.deviceName+" address:"+wifiP2pDevice.deviceAddress)
|
//showToast("update device:"+wifiP2pDevice.deviceName+" address:"+wifiP2pDevice.deviceAddress)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setIsWifiP2pEnabled(b: Boolean) {
|
private fun setIsWifiP2pEnabled(b: Boolean) {
|
||||||
showToast("WifiP2pEnabled="+b)
|
//showToast("WifiP2pEnabled="+b)
|
||||||
}
|
}
|
||||||
|
|
||||||
/** register the BroadcastReceiver with the intent values to be matched */
|
/** register the BroadcastReceiver with the intent values to be matched */
|
||||||
@ -413,7 +413,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
// If an AdapterView is backed by this data, notify it // of the change. For instance, if you have a ListView of available // peers, trigger an update.
|
// If an AdapterView is backed by this data, notify it // of the change. For instance, if you have a ListView of available // peers, trigger an update.
|
||||||
//((WiFiPeerListAdapter) getListAdapter()).notifyDataSetChanged(); if (peers.size() == 0) { Log.d(WiFiDirectActivity.TAG, "No devices found"); return; } }
|
//((WiFiPeerListAdapter) getListAdapter()).notifyDataSetChanged(); if (peers.size() == 0) { Log.d(WiFiDirectActivity.TAG, "No devices found"); return; } }
|
||||||
//just show message
|
//just show message
|
||||||
showToast("available peers:"+this@MainActivity.wirelessPeers.size)
|
//showToast("available peers:"+this@MainActivity.wirelessPeers.size)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,10 @@
|
|||||||
package io.github.chronosx88.yggdrasil
|
package io.github.chronosx88.yggdrasil
|
||||||
|
|
||||||
import android.app.PendingIntent
|
import android.app.PendingIntent
|
||||||
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
import android.net.ConnectivityManager
|
||||||
|
import android.net.Network
|
||||||
import android.net.VpnService
|
import android.net.VpnService
|
||||||
import android.os.ParcelFileDescriptor
|
import android.os.ParcelFileDescriptor
|
||||||
import android.system.OsConstants
|
import android.system.OsConstants
|
||||||
@ -17,6 +20,7 @@ import kotlinx.coroutines.*
|
|||||||
import mobile.Mobile
|
import mobile.Mobile
|
||||||
import mobile.Yggdrasil
|
import mobile.Yggdrasil
|
||||||
import java.io.*
|
import java.io.*
|
||||||
|
import java.net.Inet6Address
|
||||||
import java.nio.ByteBuffer
|
import java.nio.ByteBuffer
|
||||||
|
|
||||||
|
|
||||||
@ -63,7 +67,6 @@ class YggdrasilTunService : VpnService() {
|
|||||||
private fun setupIOStreams(dns: MutableSet<DNSInfo>){
|
private fun setupIOStreams(dns: MutableSet<DNSInfo>){
|
||||||
address = ygg.addressString
|
address = ygg.addressString
|
||||||
var builder = Builder()
|
var builder = Builder()
|
||||||
.addAddress(address, 7)
|
|
||||||
.allowFamily(OsConstants.AF_INET)
|
.allowFamily(OsConstants.AF_INET)
|
||||||
.setMtu(MAX_PACKET_SIZE)
|
.setMtu(MAX_PACKET_SIZE)
|
||||||
if (dns.size > 0) {
|
if (dns.size > 0) {
|
||||||
@ -72,6 +75,12 @@ class YggdrasilTunService : VpnService() {
|
|||||||
builder.addDnsServer(d.address)
|
builder.addDnsServer(d.address)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
fix for DNS unavailability
|
||||||
|
*/
|
||||||
|
if(!hasIpv6DefaultRoute()){
|
||||||
|
builder.addRoute("::",0)
|
||||||
|
}
|
||||||
if(tunInterface!=null){
|
if(tunInterface!=null){
|
||||||
tunInterface!!.close()
|
tunInterface!!.close()
|
||||||
tunInputStream!!.close()
|
tunInputStream!!.close()
|
||||||
@ -193,4 +202,20 @@ class YggdrasilTunService : VpnService() {
|
|||||||
super.onDestroy()
|
super.onDestroy()
|
||||||
stopSelf()
|
stopSelf()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun hasIpv6DefaultRoute(): Boolean {
|
||||||
|
val cm =
|
||||||
|
getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
|
||||||
|
val networks = cm.allNetworks
|
||||||
|
for (network in networks) {
|
||||||
|
val linkProperties = cm.getLinkProperties(network)
|
||||||
|
val routes = linkProperties.routes
|
||||||
|
for (route in routes) {
|
||||||
|
if (route.isDefaultRoute && route.gateway is Inet6Address) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user