summaryrefslogtreecommitdiff
path: root/src/de/blinkt/openvpn/OpenVpnService.java
diff options
context:
space:
mode:
authorArne Schwabe <arne@rfc2549.org>2012-06-03 14:57:16 +0200
committerArne Schwabe <arne@rfc2549.org>2012-06-03 14:57:16 +0200
commit9e22aa6aff4627a08cb23f649e323f2b42f0d34d (patch)
tree7853c4afaa5d49815073031fa1a68cd244f1bf59 /src/de/blinkt/openvpn/OpenVpnService.java
parent4ddf2ac169fbb4931b5268962b02cdca33323ccd (diff)
Implement reconnect on network change (closes issue #37)
Diffstat (limited to 'src/de/blinkt/openvpn/OpenVpnService.java')
-rw-r--r--src/de/blinkt/openvpn/OpenVpnService.java18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/de/blinkt/openvpn/OpenVpnService.java b/src/de/blinkt/openvpn/OpenVpnService.java
index 2b44fe03..8c172115 100644
--- a/src/de/blinkt/openvpn/OpenVpnService.java
+++ b/src/de/blinkt/openvpn/OpenVpnService.java
@@ -24,6 +24,8 @@ import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
+import android.content.IntentFilter;
+import android.net.ConnectivityManager;
import android.net.LocalSocket;
import android.net.LocalSocketAddress;
import android.net.VpnService;
@@ -50,6 +52,8 @@ public class OpenVpnService extends VpnService {
private String mLocalIPv6=null;
private Notification mNotification=null;
+ private NetworkSateReceiver mNetworkStateReceiver;
+
private static final int HELLO_ID = 1;
@Override
@@ -112,6 +116,13 @@ public class OpenVpnService extends VpnService {
return sock;
}
+
+ void registerNetworkStateReceiver() {
+ // Registers BroadcastReceiver to track network connection changes.
+ IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
+ mNetworkStateReceiver = new NetworkSateReceiver(mSocketManager);
+ this.registerReceiver(mNetworkStateReceiver, filter);
+ }
@Override
@@ -161,7 +172,8 @@ public class OpenVpnService extends VpnService {
mServiceThread = new Thread(serviceThread, "OpenVPNServiceThread");
mServiceThread.start();
-
+
+
// Open the Management Interface
mgmtsocket = openManagmentInterface(8);
@@ -170,6 +182,7 @@ public class OpenVpnService extends VpnService {
mSocketManager = new OpenVpnManagementThread(mProfile,mgmtsocket,this);
mSocketManagerThread = new Thread(mSocketManager,"OpenVPNMgmtThread");
mSocketManagerThread.start();
+ registerNetworkStateReceiver();
}
return START_NOT_STICKY;
@@ -182,6 +195,9 @@ public class OpenVpnService extends VpnService {
mServiceThread.interrupt();
}
+ if (mNetworkStateReceiver!= null) {
+ this.unregisterReceiver(mNetworkStateReceiver);
+ }
}