diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/de/blinkt/openvpn/OpenVpnService.java | 27 | ||||
| -rw-r--r-- | src/de/blinkt/openvpn/VpnProfile.java | 4 | 
2 files changed, 23 insertions, 8 deletions
| diff --git a/src/de/blinkt/openvpn/OpenVpnService.java b/src/de/blinkt/openvpn/OpenVpnService.java index 031f2a14..644b060f 100644 --- a/src/de/blinkt/openvpn/OpenVpnService.java +++ b/src/de/blinkt/openvpn/OpenVpnService.java @@ -65,16 +65,27 @@ public class OpenVpnService extends VpnService implements Handler.Callback {  			String[] ipt = mask.split("\\.");  			long netmask=0; -			netmask += Integer.parseInt(ipt[0]); -			netmask += Integer.parseInt(ipt[1])<< 8; -			netmask += Integer.parseInt(ipt[2])<< 16; -			netmask += Integer.parseInt(ipt[3])<< 24; - -			len =0; -			while((netmask & 0x1) == 1) { -				len++; +			netmask += Long.parseLong(ipt[0])<< 24; +			netmask += Integer.parseInt(ipt[1])<< 16; +			netmask += Integer.parseInt(ipt[2])<< 8; +			netmask += Integer.parseInt(ipt[3]); + +			// Add 33. bit to ensure the loop terminates +			netmask += 1l << 32; +			 +			int lenZeros = 0; +			while((netmask & 0x1) == 0) { +				lenZeros++;  				netmask = netmask >> 1;  			} +			// Check if rest of netmask is only 1s +			if(netmask != (0x1ffffffffl >> lenZeros)) { +				// Asume no CIDR, set /32 +				len=32; +			} else { +				len =32 -lenZeros;  +			} +			  		}  		@Override  		public String toString() { diff --git a/src/de/blinkt/openvpn/VpnProfile.java b/src/de/blinkt/openvpn/VpnProfile.java index 4028f3d0..a1b7a06f 100644 --- a/src/de/blinkt/openvpn/VpnProfile.java +++ b/src/de/blinkt/openvpn/VpnProfile.java @@ -300,6 +300,10 @@ public class VpnProfile implements  Serializable{  	private Collection<String> getCustomRoutes() {  		Vector<String> cidrRoutes=new Vector<String>(); +		if(mCustomRoutes==null) { +			// No routes set, return empty vector +			return cidrRoutes; +		}  		for(String route:mCustomRoutes.split("[\n \t]")) {  			if(!route.equals("")) {  				String cidrroute = cidrToIPAndNetmask(route); | 
