summaryrefslogtreecommitdiffstats
path: root/core/java
diff options
context:
space:
mode:
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/net/TrafficStats.java64
1 files changed, 60 insertions, 4 deletions
diff --git a/core/java/android/net/TrafficStats.java b/core/java/android/net/TrafficStats.java
index eca06c5..7ee7a81 100644
--- a/core/java/android/net/TrafficStats.java
+++ b/core/java/android/net/TrafficStats.java
@@ -16,11 +16,10 @@
package android.net;
-import android.util.Log;
+import dalvik.system.BlockGuard;
-import java.io.File;
-import java.io.RandomAccessFile;
-import java.io.IOException;
+import java.net.Socket;
+import java.net.SocketException;
/**
* Class that provides network traffic statistics. These statistics include
@@ -37,6 +36,63 @@ public class TrafficStats {
public final static int UNSUPPORTED = -1;
/**
+ * Set active tag to use when accounting {@link Socket} traffic originating
+ * from the current thread. Only one active tag per thread is supported.
+ * <p>
+ * Changes only take effect during subsequent calls to
+ * {@link #tagSocket(Socket)}.
+ */
+ public static void setThreadStatsTag(String tag) {
+ BlockGuard.setThreadSocketStatsTag(tag);
+ }
+
+ public static void clearThreadStatsTag() {
+ BlockGuard.setThreadSocketStatsTag(null);
+ }
+
+ /**
+ * Set specific UID to use when accounting {@link Socket} traffic
+ * originating from the current thread. Designed for use when performing an
+ * operation on behalf of another application.
+ * <p>
+ * Changes only take effect during subsequent calls to
+ * {@link #tagSocket(Socket)}.
+ * <p>
+ * To take effect, caller must hold
+ * {@link android.Manifest.permission#UPDATE_DEVICE_STATS} permission.
+ *
+ * {@hide}
+ */
+ public static void setThreadStatsUid(int uid) {
+ BlockGuard.setThreadSocketStatsUid(uid);
+ }
+
+ /** {@hide} */
+ public static void clearThreadStatsUid() {
+ BlockGuard.setThreadSocketStatsUid(-1);
+ }
+
+ /**
+ * Tag the given {@link Socket} with any statistics parameters active for
+ * the current thread. Subsequent calls always replace any existing
+ * parameters. When finished, call {@link #untagSocket(Socket)} to remove
+ * statistics parameters.
+ *
+ * @see #setThreadStatsTag(String)
+ * @see #setThreadStatsUid(int)
+ */
+ public static void tagSocket(Socket socket) throws SocketException {
+ BlockGuard.tagSocketFd(socket.getFileDescriptor$());
+ }
+
+ /**
+ * Remove any statistics parameters from the given {@link Socket}.
+ */
+ public static void untagSocket(Socket socket) throws SocketException {
+ BlockGuard.untagSocketFd(socket.getFileDescriptor$());
+ }
+
+ /**
* Get the total number of packets transmitted through the mobile interface.
*
* @return number of packets. If the statistics are not supported by this device,