From 73f914bdc1a681f827ed2375820c2d171e31bb0b Mon Sep 17 00:00:00 2001 From: Arne Schwabe Date: Mon, 30 Apr 2012 04:51:43 +0200 Subject: Version 0.4.4 Fix parsing of certain netmasks Fix custom Routes parsing --- src/de/blinkt/openvpn/OpenVpnService.java | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) (limited to 'src/de/blinkt/openvpn/OpenVpnService.java') diff --git a/src/de/blinkt/openvpn/OpenVpnService.java b/src/de/blinkt/openvpn/OpenVpnService.java index 031f2a1..644b060 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() { -- cgit v1.2.3