diff options
Diffstat (limited to 'main/src/main/java/de/blinkt/openvpn')
3 files changed, 26 insertions, 5 deletions
diff --git a/main/src/main/java/de/blinkt/openvpn/core/DeviceStateReceiver.java b/main/src/main/java/de/blinkt/openvpn/core/DeviceStateReceiver.java index 68b30bce..41e8ff0a 100644 --- a/main/src/main/java/de/blinkt/openvpn/core/DeviceStateReceiver.java +++ b/main/src/main/java/de/blinkt/openvpn/core/DeviceStateReceiver.java @@ -172,15 +172,19 @@ public class DeviceStateReceiver extends BroadcastReceiver implements ByteCountL int newnet = networkInfo.getType();
network = connectState.SHOULDBECONNECTED;
- if (sendusr1 && lastNetwork != newnet) {
+ if (lastNetwork != newnet) {
if (screen == connectState.PENDINGDISCONNECT)
screen = connectState.DISCONNECTED;
if (shouldBeConnected()) {
- if (lastNetwork == -1) {
- mManagement.resume();
+ if (sendusr1) {
+ if (lastNetwork == -1) {
+ mManagement.resume();
+ } else {
+ mManagement.reconnect();
+ }
} else {
- mManagement.reconnect();
+ mManagement.networkChange();
}
}
diff --git a/main/src/main/java/de/blinkt/openvpn/core/OpenVPNManagement.java b/main/src/main/java/de/blinkt/openvpn/core/OpenVPNManagement.java index ce8d38c2..a5a3e9f4 100644 --- a/main/src/main/java/de/blinkt/openvpn/core/OpenVPNManagement.java +++ b/main/src/main/java/de/blinkt/openvpn/core/OpenVPNManagement.java @@ -17,4 +17,8 @@ public interface OpenVPNManagement { boolean stopVPN(); + /* + * Rebind the interface + */ + void networkChange(); } diff --git a/main/src/main/java/de/blinkt/openvpn/core/OpenVpnManagementThread.java b/main/src/main/java/de/blinkt/openvpn/core/OpenVpnManagementThread.java index 1937ffc0..6ef41e1b 100644 --- a/main/src/main/java/de/blinkt/openvpn/core/OpenVpnManagementThread.java +++ b/main/src/main/java/de/blinkt/openvpn/core/OpenVpnManagementThread.java @@ -158,7 +158,10 @@ public class OpenVpnManagementThread implements Runnable, OpenVPNManagement { // You can even get more evil by parsing toString() and extract the int from that :)
- mOpenVPNService.protect(fdint);
+ boolean result = mOpenVPNService.protect(fdint);
+ if (!result)
+ VpnStatus.logWarning("Could not protect VPN socket");
+
//ParcelFileDescriptor pfd = ParcelFileDescriptor.fromFd(fdint);
//pfd.close();
@@ -232,6 +235,10 @@ public class OpenVpnManagementThread implements Runnable, OpenVPNManagement { } else if (command.startsWith("SUCCESS:")) {
/* Ignore this kind of message too */
return;
+ } else if (command.startsWith("PROTECTFD: ")) {
+ FileDescriptor fdtoprotect = mFDList.pollFirst();
+ if (fdtoprotect!=null)
+ protectFileDescriptor(fdtoprotect);
} else {
Log.i(TAG, "Got unrecognized line from managment" + command);
VpnStatus.logWarning("MGMT: Got unrecognized line from management:" + command);
@@ -535,6 +542,12 @@ public class OpenVpnManagementThread implements Runnable, OpenVPNManagement { return sendCMD;
}
+ @Override
+ public void networkChange() {
+ if(!mWaitingForRelease)
+ managmentCommand("network-change\n");
+ }
+
public void signalusr1() {
mReleaseHold=false;
|