{
try
{
- mBuilder.addDnsServer(address);
- mCache.recordAddressFamily(address);
+ mCache.addDnsServer(address);
}
catch (IllegalArgumentException ex)
{
private final int mSplitTunneling;
private final SelectedAppsHandling mAppHandling;
private final SortedSet<String> mSelectedApps;
+ private final List<InetAddress> mDnsServers = new ArrayList<>();
private int mMtu;
- private boolean mIPv4Seen, mIPv6Seen;
+ private boolean mIPv4Seen, mIPv6Seen, mDnsServersConfigured;
public BuilderCache(VpnProfile profile)
{
}
mAppHandling = appHandling;
+ if (profile.getDnsServers() != null)
+ {
+ for (String server : profile.getDnsServers().split("\\s+"))
+ {
+ try
+ {
+ mDnsServers.add(InetAddress.getByName(server));
+ recordAddressFamily(server);
+ mDnsServersConfigured = true;
+ }
+ catch (UnknownHostException e)
+ {
+ e.printStackTrace();
+ }
+ }
+ }
+
/* set a default MTU, will be set by the daemon for regular interfaces */
Integer mtu = profile.getMTU();
mMtu = mtu == null ? Constants.MTU_MAX : mtu;
}
}
+ public void addDnsServer(String address)
+ {
+ /* ignore received DNS servers if any were configured */
+ if (mDnsServersConfigured)
+ {
+ return;
+ }
+
+ try
+ {
+ mDnsServers.add(InetAddress.getByName(address));
+ recordAddressFamily(address);
+ }
+ catch (UnknownHostException e)
+ {
+ e.printStackTrace();
+ }
+ }
+
public void addRoute(String address, int prefixLength)
{
try
{
builder.addAddress(address.getFrom(), address.getPrefix());
}
+ for (InetAddress server : mDnsServers)
+ {
+ builder.addDnsServer(server);
+ }
/* add routes depending on whether split tunneling is allowed or not,
* that is, whether we have to handle and block non-VPN traffic */
if ((mSplitTunneling & VpnProfile.SPLIT_TUNNELING_BLOCK_IPV4) == 0)