Adapter class added around VpnService.Builder which allows to access it via JNI

This commit is contained in:
Tobias Brunner
2012-08-13 11:00:29 +02:00
parent f12b3ad2c9
commit 5215d512bf
@@ -37,6 +37,7 @@ import android.content.ServiceConnection;
import android.net.VpnService;
import android.os.Bundle;
import android.os.IBinder;
import android.os.ParcelFileDescriptor;
import android.util.Log;
public class CharonVpnService extends VpnService implements Runnable
@@ -447,6 +448,104 @@ public class CharonVpnService extends VpnService implements Runnable
return null;
}
/**
* Adapter for VpnService.Builder which is used to access it safely via JNI.
*/
public class BuilderAdapter
{
VpnService.Builder builder;
public BuilderAdapter(String name)
{
builder = new CharonVpnService.Builder();
builder.setSession(name);
}
public synchronized boolean addAddress(String address, int prefixLength)
{
try
{
builder.addAddress(address, prefixLength);
}
catch (IllegalArgumentException ex)
{
return false;
}
return true;
}
public synchronized boolean addDnsServer(String address)
{
try
{
builder.addDnsServer(address);
}
catch (IllegalArgumentException ex)
{
return false;
}
return true;
}
public synchronized boolean addRoute(String address, int prefixLength)
{
try
{
builder.addRoute(address, prefixLength);
}
catch (IllegalArgumentException ex)
{
return false;
}
return true;
}
public synchronized boolean addSearchDomain(String domain)
{
try
{
builder.addSearchDomain(domain);
}
catch (IllegalArgumentException ex)
{
return false;
}
return true;
}
public synchronized boolean setMtu(int mtu)
{
try
{
builder.setMtu(mtu);
}
catch (IllegalArgumentException ex)
{
return false;
}
return true;
}
public synchronized int establish()
{
ParcelFileDescriptor fd;
try
{
fd = builder.establish();
}
catch (Exception ex)
{
ex.printStackTrace();
return -1;
}
if (fd == null)
{
return -1;
}
return fd.detachFd();
}
}
/*
* The libraries are extracted to /data/data/org.strongswan.android/...
* during installation.