Parcourir la source

Auto mechanism on protocol working...

Khubaib il y a 1 an
Parent
commit
c027cd1bef

+ 2 - 0
app/src/main/java/com/vpn/fastestvpnservice/MainActivity.kt

@@ -105,6 +105,8 @@ class MainActivity : ComponentActivity() {
 
     companion object {
         var isWGDown: Boolean = true
+        var isAutoEnabled: Boolean = false
+        var isSnrNotify: Boolean = false
     }
 }
 

+ 9 - 0
app/src/main/java/com/vpn/fastestvpnservice/helpers/BasePreferenceHelper.kt

@@ -44,6 +44,7 @@ class BasePreferenceHelper(private val context: Context) : PreferencesHelper() {
         removePreference(context, KEY_FILENAME, FILTER)
         removePreference(context, KEY_FILENAME, SMART)
         removePreference(context, KEY_FILENAME, KEY_SMART_SERVER)
+        removePreference(context, KEY_FILENAME, KEY_AUTO_OPENVPN)
     }
 
     fun saveUser(user: UserResponse) {
@@ -466,6 +467,13 @@ class BasePreferenceHelper(private val context: Context) : PreferencesHelper() {
         putIntegerPreference(context, KEY_FILENAME, KEY_ISCONNECT, state)
     }
 
+    fun isAutoOpenVpnConnected(): Boolean {
+        return getBooleanPreference(context, KEY_FILENAME, KEY_AUTO_OPENVPN)
+    }
+
+    fun setAutoOpenVpnConnected(state: Boolean) {
+        putBooleanPreference(context, KEY_FILENAME, KEY_AUTO_OPENVPN, state)
+    }
     fun getFcmToken(): String {
         return getStringPreference(context, KEY_FILENAME, KEY_FCM)
     }
@@ -525,5 +533,6 @@ class BasePreferenceHelper(private val context: Context) : PreferencesHelper() {
         private const val FILTER = "keydata_filter"
         private const val SMART = "keydata_smart"
         private const val KEY_SMART_SERVER = "keydata_smart_server"
+        private const val KEY_AUTO_OPENVPN = "keydata_auto_openvpn"
     }
 }

+ 79 - 12
app/src/main/java/com/vpn/fastestvpnservice/utils/VPNConnectionsUtil.kt

@@ -13,9 +13,11 @@ import android.net.NetworkCapabilities
 import android.os.AsyncTask
 import android.os.Build
 import android.os.CountDownTimer
+import android.os.Handler
 import android.os.IBinder
 import android.os.RemoteException
 import android.util.Log
+import android.widget.Toast
 import androidx.activity.ComponentActivity
 import androidx.compose.runtime.livedata.observeAsState
 import androidx.localbroadcastmanager.content.LocalBroadcastManager
@@ -168,11 +170,13 @@ class VPNConnectionsUtil: VpnStatus.StateListener {
 
     fun startTcpUDP() {
         Log.d("Auto test connect", "ACTION_VPN_SERVER_NOT_RESPONDING startTcpUDP")
+        Log.d("ServerNotResponding", "startTcpUDP -> ${isBound}")
 
 
         /*Connect UDP,TCP*/
         App.connection_status = App.CONNECTION_STATE_CONNECTING
         homeViewModel.setConnectState(App.CONNECTING)
+        Log.d("ServerNotResponding", "startTcpUDP -> CONNECTING")
 
 //        val widgetIntent = Intent(context, SimpleAppWidget::class.java)
 //        widgetIntent.action = SimpleAppWidget.ACTION_CONNECTING_VPN
@@ -424,13 +428,13 @@ class VPNConnectionsUtil: VpnStatus.StateListener {
         Log.d("test_wg", "stop vpn")
         Log.d("isConnect_State_vpn", "stopVpn Util")
 
-
         try {
 //            Log.d("App.connection stop", App.connection_status.toString())
 
             /*Disconnect IKEV2*/
             if (basePreferenceHelper.getProtocol().title.contentEquals(AppEnum.IKEV2_PROTOCOL.key)) {
                 Log.d("isConnect_State_vpn", "Disconnect IKEV2")
+                Log.d("ServerNotResponding", "Disconnect IKEV2")
                 val intent = Intent(context, VpnProfileControlActivity::class.java)
                 intent.action = VpnProfileControlActivity.DISCONNECT
                 context.startActivity(intent)
@@ -443,13 +447,16 @@ class VPNConnectionsUtil: VpnStatus.StateListener {
             }
             /*Disconnect Wireguard*/
             else if (basePreferenceHelper.getProtocol().title.toLowerCase()
-                    .contentEquals(AppEnum.WG_PROTOCOL.key.toLowerCase())
-            )
+                    .contentEquals(AppEnum.WG_PROTOCOL.key.toLowerCase()))
             {
+                Log.d("ServerNotResponding", "Disconnect WG")
                 vpnWireGuardPermission(false)
 
-            } else {
-                /*Disconnect TCP,UDP*/
+            }
+            /*Disconnect TCP,UDP*/
+            else {
+                Log.d("ServerNotResponding", "Disconnect TCP/UDP")
+
                 App.connection_status = App.CONNECTION_STATE_DISCONNECTED
                 homeViewModel.setConnectState(App.DISCONNECTED)
 
@@ -479,10 +486,13 @@ class VPNConnectionsUtil: VpnStatus.StateListener {
             }
 
 
-
-
-
-
+            if (basePreferenceHelper.getProtocol().index == 0) {
+                val state = basePreferenceHelper.isAutoOpenVpnConnected()
+                Log.d("ServerNotResponding", "Auto StopVpn $state")
+                if (state) {
+                    stopTcpUdp()
+                }
+            }
 
 //            val widgetIntent = Intent(context, SimpleAppWidget::class.java)
 //            widgetIntent.action = SimpleAppWidget.ACTION_STOP_SERVICE
@@ -493,6 +503,33 @@ class VPNConnectionsUtil: VpnStatus.StateListener {
         }
     }
 
+    fun stopTcpUdp() {
+        Log.d("ServerNotResponding", "Auto stopTcpUdp")
+
+        App.connection_status = App.CONNECTION_STATE_DISCONNECTED
+        homeViewModel.setConnectState(App.DISCONNECTED)
+        basePreferenceHelper.setAutoOpenVpnConnected(false)
+        App.isShowNotify = false
+        OpenVPNService.abortConnectionVPN = true
+        ProfileManager.setConntectedVpnProfileDisconnected(context)
+        if (App.mService != null) {
+            Log.d("test_openvpn", "if => ${App.mService}")
+            try {
+                Log.d("test_openvpn", "try => ${App.mService}")
+                App.mService!!.stopVPN(false)
+            } catch (e: RemoteException) {
+                e.printStackTrace()
+            }
+            try {
+                pm = ProfileManager.getInstance(context)
+                vp = pm?.getProfileByName(Build.MODEL)
+                pm?.removeProfile(context, vp)
+            } catch (e: Exception) {
+                e.printStackTrace()
+            }
+        }
+    }
+
     fun countDownTimer() {
         countDownTimer = object : CountDownTimer(32000, 1000) {
             override fun onTick(millisUntilFinished: Long) {
@@ -558,6 +595,7 @@ class VPNConnectionsUtil: VpnStatus.StateListener {
                         Log.d("vpnConnectionCall_ip", "ACTION_VPN_DISCONNECTED $connectState")
 
                         if (connectState == App.CONNECTING) {
+                            Log.d("vpnConnectionCall_con", "CONNECTING $connectState")
                             App.connection_status = App.CONNECTION_STATE_CONNECTING
                             homeViewModel.setConnectState(App.CONNECTING)
                         }
@@ -576,7 +614,8 @@ class VPNConnectionsUtil: VpnStatus.StateListener {
                         homeViewModel.getIp()
                     }
                     CharonVpnService.ACTION_VPN_CONNECTING -> {
-                        Log.d("vpnConnectionCall_ip", "ACTION_VPN_CONNECTING")
+                        val connectState = homeViewModel.isConnect.value
+                        Log.d("vpnConnectionCall_con", "ACTION_VPN_CONNECTING $connectState")
                         App.connection_status = App.CONNECTION_STATE_CONNECTING
                         homeViewModel.setConnectState(App.CONNECTING)
 //                        val widgetIntent1 = Intent(context, SimpleAppWidget::class.java)
@@ -586,9 +625,37 @@ class VPNConnectionsUtil: VpnStatus.StateListener {
                     CharonVpnService.ACTION_VPN_SERVER_NOT_RESPONDING -> {
                         Log.d("vpnConnectionCall_ip", "ACTION_VPN_SERVER_NOT_RESPONDING")
                         App.connection_status = App.CONNECTION_STATE_SERVER_NOT_RESPONDING
-                        if (context != null) {
-                            ikev2Callback.ServerNotResponding(context, homeViewModel)
+
+                        if (basePreferenceHelper.getProtocol().index == 0) {
+                            Log.d("ServerNotResponding", "Auto -> ${isBound}")
+                            if (MainActivity.isAutoEnabled) {
+                                Log.d("test_auto_p", "Inside()")
+                                stopVpn()
+                                Log.d("test_auto_p", "stopVpn()")
+                                Handler().postDelayed(Runnable {
+                                    basePreferenceHelper.setAutoOpenVpnConnected(true)
+                                    startTcpUDP()
+                                    Log.d("test_auto_p", "startTcpUDP()")
+                                    Log.d("test_auto_p", "false")
+                                }, 1000)
+                                MainActivity.isAutoEnabled = false
+                                Log.d("test_auto_p", "Out...()")
+                            }
+                        } else {
+                            Log.d("ServerNotResponding", "IKEv2 -> ${isBound}")
+                            if (MainActivity.isSnrNotify) {
+                                Toast.makeText(
+                                    context,
+                                    R.string.server_not_responding,
+                                    Toast.LENGTH_SHORT
+                                ).show()
+                                MainActivity.isSnrNotify = false
+                            }
                         }
+
+//                        if (context != null) {
+//                            ikev2Callback.ServerNotResponding(context, homeViewModel)
+//                        }
                     }
                 }
             }

+ 4 - 0
app/src/main/java/org/strongswan/android/logic/VpnStateService.java

@@ -29,6 +29,7 @@ import android.util.Log;
 import androidx.core.content.ContextCompat;
 import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 
+import com.vpn.fastestvpnservice.MainActivity;
 import com.vpn.fastestvpnservice.R;
 
 import org.strongswan.android.data.VpnProfile;
@@ -313,6 +314,9 @@ public class VpnStateService extends Service
 			profileInfo.putBoolean(CharonVpnService.KEY_IS_RETRY, true);
 //			Toast.makeText(getBaseContext(), getString(R.string.server_not_responding), Toast.LENGTH_SHORT).show(); //three lines from this added be for, if server down in ikev
 			Intent in = new Intent(CharonVpnService.ACTION_VPN_SERVER_NOT_RESPONDING);
+			Log.d("test_server_not_r", "VpnStateService SNR");
+			MainActivity.Companion.setSnrNotify(true);
+			MainActivity.Companion.setAutoEnabled(true);
 			LocalBroadcastManager.getInstance(getBaseContext()).sendBroadcast(in);
 			disconnect();
 			return;