aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2012-09-05 11:36:00 +0200
committerTobias Brunner <tobias@strongswan.org>2012-09-06 11:25:24 +0200
commit0326ceda64ba585094b8c4107d777484b5ca205d (patch)
treed3536792d4b4e9ddeb2a5f4261f0811422708b18 /src
parent4dbb193190725b0169cb7dc2f17dc867a3d2c61f (diff)
downloadstrongswan-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.java29
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();
}
}