mirror of
				https://github.com/yggdrasil-network/yggdrasil-android.git
				synced 2025-11-04 11:15:08 +03:00 
			
		
		
		
	Made fast reconnect when network becomes up.
This commit is contained in:
		
							parent
							
								
									41569a9ee2
								
							
						
					
					
						commit
						04f2924661
					
				
					 5 changed files with 57 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -11,8 +11,8 @@ android {
 | 
			
		|||
        applicationId "eu.neilalexander.yggdrasil"
 | 
			
		||||
        minSdkVersion 21
 | 
			
		||||
        targetSdkVersion 29
 | 
			
		||||
        versionCode 9
 | 
			
		||||
        versionName "0.1"
 | 
			
		||||
        versionCode 10
 | 
			
		||||
        versionName "0.1-010"
 | 
			
		||||
 | 
			
		||||
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,7 @@
 | 
			
		|||
    package="eu.neilalexander.yggdrasil">
 | 
			
		||||
    <uses-permission android:name="android.permission.INTERNET" />
 | 
			
		||||
    <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
 | 
			
		||||
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 | 
			
		||||
 | 
			
		||||
    <application
 | 
			
		||||
        android:name=".GlobalApplication"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,6 +9,7 @@ class GlobalApplication: Application() {
 | 
			
		|||
    override fun onCreate() {
 | 
			
		||||
        super.onCreate()
 | 
			
		||||
        config = ConfigurationProxy(applicationContext)
 | 
			
		||||
        val callback = NetworkStateCallback(this)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun subscribe() {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,41 @@
 | 
			
		|||
package eu.neilalexander.yggdrasil
 | 
			
		||||
 | 
			
		||||
import android.content.Context
 | 
			
		||||
import android.content.Intent
 | 
			
		||||
import android.net.*
 | 
			
		||||
import android.util.Log
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
private const val TAG = "Network"
 | 
			
		||||
 | 
			
		||||
class NetworkStateCallback(val context: Context) : ConnectivityManager.NetworkCallback() {
 | 
			
		||||
 | 
			
		||||
    init {
 | 
			
		||||
        val request = NetworkRequest.Builder()
 | 
			
		||||
            .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
 | 
			
		||||
            .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
 | 
			
		||||
            .addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET)
 | 
			
		||||
            .build()
 | 
			
		||||
 | 
			
		||||
        val manager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
 | 
			
		||||
        manager.registerNetworkCallback(request, this)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun onAvailable(network: Network) {
 | 
			
		||||
        super.onAvailable(network)
 | 
			
		||||
        Log.d(TAG, "onAvailable")
 | 
			
		||||
 | 
			
		||||
        Thread {
 | 
			
		||||
            // The message often arrives before the connection is fully established
 | 
			
		||||
            Thread.sleep(1000)
 | 
			
		||||
            val intent = Intent(context, PacketTunnelProvider::class.java)
 | 
			
		||||
            intent.action = PacketTunnelProvider.ACTION_CONNECT
 | 
			
		||||
            context.startService(intent)
 | 
			
		||||
        }.start()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun onLost(network: Network) {
 | 
			
		||||
        super.onLost(network)
 | 
			
		||||
        Log.d(TAG, "onLost")
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -21,6 +21,7 @@ class PacketTunnelProvider: VpnService() {
 | 
			
		|||
 | 
			
		||||
        const val ACTION_START = "eu.neilalexander.yggdrasil.PacketTunnelProvider.START"
 | 
			
		||||
        const val ACTION_STOP = "eu.neilalexander.yggdrasil.PacketTunnelProvider.STOP"
 | 
			
		||||
        const val ACTION_CONNECT = "eu.neilalexander.yggdrasil.PacketTunnelProvider.CONNECT"
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private var yggdrasil = Yggdrasil()
 | 
			
		||||
| 
						 | 
				
			
			@ -56,6 +57,10 @@ class PacketTunnelProvider: VpnService() {
 | 
			
		|||
                Log.d(TAG, "Stopping...")
 | 
			
		||||
                stop(); START_NOT_STICKY
 | 
			
		||||
            }
 | 
			
		||||
            ACTION_CONNECT -> {
 | 
			
		||||
                Log.d(TAG, "Connecting...")
 | 
			
		||||
                connect(); START_STICKY
 | 
			
		||||
            }
 | 
			
		||||
            else -> {
 | 
			
		||||
                Log.d(TAG, "Starting...")
 | 
			
		||||
                start(); START_STICKY
 | 
			
		||||
| 
						 | 
				
			
			@ -181,6 +186,13 @@ class PacketTunnelProvider: VpnService() {
 | 
			
		|||
        stopSelf()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun connect() {
 | 
			
		||||
        if (!started.get()) {
 | 
			
		||||
            return
 | 
			
		||||
        }
 | 
			
		||||
        yggdrasil.connectAnyPeer()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun updater() {
 | 
			
		||||
        updates@ while (started.get()) {
 | 
			
		||||
            if ((application as  GlobalApplication).needUiUpdates()) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue