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); |