aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2017-09-11 19:14:31 +0200
committerTobias Brunner <tobias@strongswan.org>2017-09-18 11:00:58 +0200
commit66b7a08884261e1308fabb4853da6acca8755786 (patch)
treee0d40066b4a4501f2282c66657d2613d12d8423a
parent86c10a958fadb207d64ef11eedfeba2bc3eed46c (diff)
downloadstrongswan-66b7a08884261e1308fabb4853da6acca8755786.tar.bz2
strongswan-66b7a08884261e1308fabb4853da6acca8755786.tar.xz
android: Ignore IllegalArgumentException for multicast addresses
Some Android versions seem to reject routes that use multicast addresses. Fixes #2420.
-rw-r--r--src/frontends/android/app/src/main/java/org/strongswan/android/logic/CharonVpnService.java25
1 files changed, 23 insertions, 2 deletions
diff --git a/src/frontends/android/app/src/main/java/org/strongswan/android/logic/CharonVpnService.java b/src/frontends/android/app/src/main/java/org/strongswan/android/logic/CharonVpnService.java
index ba3d434ce..61535ffa2 100644
--- a/src/frontends/android/app/src/main/java/org/strongswan/android/logic/CharonVpnService.java
+++ b/src/frontends/android/app/src/main/java/org/strongswan/android/logic/CharonVpnService.java
@@ -934,7 +934,18 @@ public class CharonVpnService extends VpnService implements Runnable, VpnStateSe
ranges.remove(mExcludedSubnets);
for (IPRange subnet : ranges.subnets())
{
- builder.addRoute(subnet.getFrom(), subnet.getPrefix());
+ try
+ {
+ builder.addRoute(subnet.getFrom(), subnet.getPrefix());
+ }
+ catch (IllegalArgumentException e)
+ { /* some Android versions don't seem to like multicast addresses here,
+ * ignore it for now */
+ if (!subnet.getFrom().isMulticastAddress())
+ {
+ throw e;
+ }
+ }
}
}
else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
@@ -964,7 +975,17 @@ public class CharonVpnService extends VpnService implements Runnable, VpnStateSe
ranges.remove(mExcludedSubnets);
for (IPRange subnet : ranges.subnets())
{
- builder.addRoute(subnet.getFrom(), subnet.getPrefix());
+ try
+ {
+ builder.addRoute(subnet.getFrom(), subnet.getPrefix());
+ }
+ catch (IllegalArgumentException e)
+ {
+ if (!subnet.getFrom().isMulticastAddress())
+ {
+ throw e;
+ }
+ }
}
}
else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)