diff options
author | Tobias Brunner <tobias@strongswan.org> | 2012-09-05 11:36:00 +0200 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2012-09-06 11:25:24 +0200 |
commit | 0326ceda64ba585094b8c4107d777484b5ca205d (patch) | |
tree | d3536792d4b4e9ddeb2a5f4261f0811422708b18 /src | |
parent | 4dbb193190725b0169cb7dc2f17dc867a3d2c61f (diff) | |
download | strongswan-0326ceda64ba585094b8c4107d777484b5ca205d.tar.bz2 strongswan-0326ceda64ba585094b8c4107d777484b5ca205d.tar.xz |
android: Create a new VpnService.Builder after VPN has been established
Diffstat (limited to 'src')
-rw-r--r-- | src/frontends/android/src/org/strongswan/android/logic/CharonVpnService.java | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/src/frontends/android/src/org/strongswan/android/logic/CharonVpnService.java b/src/frontends/android/src/org/strongswan/android/logic/CharonVpnService.java index 9b502e89a..3a91c2f23 100644 --- a/src/frontends/android/src/org/strongswan/android/logic/CharonVpnService.java +++ b/src/frontends/android/src/org/strongswan/android/logic/CharonVpnService.java @@ -519,12 +519,19 @@ public class CharonVpnService extends VpnService implements Runnable */ public class BuilderAdapter { - VpnService.Builder builder; + private final String mName; + private VpnService.Builder mBuilder; public BuilderAdapter(String name) { - builder = new CharonVpnService.Builder(); - builder.setSession(name); + mName = name; + mBuilder = createBuilder(name); + } + + private VpnService.Builder createBuilder(String name) + { + VpnService.Builder builder = new CharonVpnService.Builder(); + builder.setSession(mName); /* even though the option displayed in the system dialog says "Configure" * we just use our main Activity */ @@ -533,13 +540,14 @@ public class CharonVpnService extends VpnService implements Runnable PendingIntent pending = PendingIntent.getActivity(context, 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK); builder.setConfigureIntent(pending); + return builder; } public synchronized boolean addAddress(String address, int prefixLength) { try { - builder.addAddress(address, prefixLength); + mBuilder.addAddress(address, prefixLength); } catch (IllegalArgumentException ex) { @@ -552,7 +560,7 @@ public class CharonVpnService extends VpnService implements Runnable { try { - builder.addDnsServer(address); + mBuilder.addDnsServer(address); } catch (IllegalArgumentException ex) { @@ -565,7 +573,7 @@ public class CharonVpnService extends VpnService implements Runnable { try { - builder.addRoute(address, prefixLength); + mBuilder.addRoute(address, prefixLength); } catch (IllegalArgumentException ex) { @@ -578,7 +586,7 @@ public class CharonVpnService extends VpnService implements Runnable { try { - builder.addSearchDomain(domain); + mBuilder.addSearchDomain(domain); } catch (IllegalArgumentException ex) { @@ -591,7 +599,7 @@ public class CharonVpnService extends VpnService implements Runnable { try { - builder.setMtu(mtu); + mBuilder.setMtu(mtu); } catch (IllegalArgumentException ex) { @@ -605,7 +613,7 @@ public class CharonVpnService extends VpnService implements Runnable ParcelFileDescriptor fd; try { - fd = builder.establish(); + fd = mBuilder.establish(); } catch (Exception ex) { @@ -616,6 +624,9 @@ public class CharonVpnService extends VpnService implements Runnable { return -1; } + /* now that the TUN device is created we don't need the current + * builder anymore, but we might need another when reestablishing */ + mBuilder = createBuilder(mName); return fd.detachFd(); } } |