Adapter class added around VpnService.Builder which allows to access it via JNI
This commit is contained in:
@@ -37,6 +37,7 @@ import android.content.ServiceConnection;
|
|||||||
import android.net.VpnService;
|
import android.net.VpnService;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
|
import android.os.ParcelFileDescriptor;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
public class CharonVpnService extends VpnService implements Runnable
|
public class CharonVpnService extends VpnService implements Runnable
|
||||||
@@ -447,6 +448,104 @@ public class CharonVpnService extends VpnService implements Runnable
|
|||||||
return null;
|
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/...
|
* The libraries are extracted to /data/data/org.strongswan.android/...
|
||||||
* during installation.
|
* during installation.
|
||||||
|
|||||||
Reference in New Issue
Block a user