diff options
Diffstat (limited to 'main/src')
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;
  | 
