am c8c398e1: am fb28414b: am d0868c89: Implement VpnService.setBlocking().
* commit 'c8c398e192a565811e7e1e4a0e3d54aa0fe7c852':
Implement VpnService.setBlocking().
diff --git a/core/java/android/net/VpnService.java b/core/java/android/net/VpnService.java
index 0967fa8..3fd415f 100644
--- a/core/java/android/net/VpnService.java
+++ b/core/java/android/net/VpnService.java
@@ -577,7 +577,7 @@
* @return this {@link Builder} object to facilitate chaining method calls.
*/
public Builder setBlocking(boolean blocking) {
- // TODO
+ mConfig.blocking = blocking;
return this;
}
diff --git a/core/java/com/android/internal/net/VpnConfig.java b/core/java/com/android/internal/net/VpnConfig.java
index 73d3738..c552a41 100644
--- a/core/java/com/android/internal/net/VpnConfig.java
+++ b/core/java/com/android/internal/net/VpnConfig.java
@@ -73,6 +73,7 @@
public PendingIntent configureIntent;
public long startTime = -1;
public boolean legacy;
+ public boolean blocking;
public void addLegacyRoutes(String routesStr) {
if (routesStr.trim().equals("")) {
@@ -120,6 +121,7 @@
out.writeParcelable(configureIntent, flags);
out.writeLong(startTime);
out.writeInt(legacy ? 1 : 0);
+ out.writeInt(blocking ? 1 : 0);
}
public static final Parcelable.Creator<VpnConfig> CREATOR =
@@ -138,6 +140,7 @@
config.configureIntent = in.readParcelable(null);
config.startTime = in.readLong();
config.legacy = in.readInt() != 0;
+ config.blocking = in.readInt() != 0;
return config;
}
diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java
index 7b68d55..4b5a2cb 100644
--- a/services/core/java/com/android/server/connectivity/Vpn.java
+++ b/services/core/java/com/android/server/connectivity/Vpn.java
@@ -77,6 +77,7 @@
import com.android.server.net.BaseNetworkObserver;
import java.io.File;
+import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
@@ -470,6 +471,13 @@
if (oldInterface != null && !oldInterface.equals(interfaze)) {
jniReset(oldInterface);
}
+
+ try {
+ IoUtils.setBlocking(tun.getFileDescriptor(), config.blocking);
+ } catch (IOException e) {
+ throw new IllegalStateException(
+ "Cannot set tunnel's fd as blocking=" + config.blocking, e);
+ }
} catch (RuntimeException e) {
IoUtils.closeQuietly(tun);
agentDisconnect();