From 2d6c580262ba1c19fc4f20c3566889e332fbdcb6 Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Wed, 2 May 2012 16:00:52 -0700 Subject: [PATCH] Support full 32 bits for socket tags. Bug: 5321184 Change-Id: Iadb3a4ad541ef012cea35b70ad440eca4c879f42 --- .../server/NetworkManagementSocketTagger.java | 14 ++++++-------- .../internal/net/NetworkStatsFactoryTest.java | 7 +++++++ 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/core/java/com/android/server/NetworkManagementSocketTagger.java b/core/java/com/android/server/NetworkManagementSocketTagger.java index c77992d8f8a98..06ef4c9d6443e 100644 --- a/core/java/com/android/server/NetworkManagementSocketTagger.java +++ b/core/java/com/android/server/NetworkManagementSocketTagger.java @@ -16,20 +16,14 @@ package com.android.server; -import android.net.NetworkStats; import android.os.SystemProperties; import android.util.Log; import android.util.Slog; import dalvik.system.SocketTagger; -import libcore.io.IoUtils; import java.io.FileDescriptor; -import java.io.FileOutputStream; -import java.io.IOException; -import java.math.BigInteger; import java.net.SocketException; -import java.nio.charset.Charsets; /** * Assigns tags to sockets for traffic stats. @@ -141,8 +135,12 @@ public final class NetworkManagementSocketTagger extends SocketTagger { * format like {@code 0x7fffffff00000000}. */ public static int kernelToTag(String string) { - // TODO: migrate to direct integer instead of odd shifting - return (int) (Long.decode(string) >> 32); + int length = string.length(); + if (length > 10) { + return Long.decode(string.substring(0, length - 8)).intValue(); + } else { + return 0; + } } private static native int native_tagSocketFd(FileDescriptor fd, int tag, int uid); diff --git a/core/tests/coretests/src/com/android/internal/net/NetworkStatsFactoryTest.java b/core/tests/coretests/src/com/android/internal/net/NetworkStatsFactoryTest.java index 58269a8b46983..b9944832b3584 100644 --- a/core/tests/coretests/src/com/android/internal/net/NetworkStatsFactoryTest.java +++ b/core/tests/coretests/src/com/android/internal/net/NetworkStatsFactoryTest.java @@ -25,6 +25,7 @@ import static com.android.server.NetworkManagementSocketTagger.kernelToTag; import android.content.res.Resources; import android.net.NetworkStats; +import android.net.TrafficStats; import android.test.AndroidTestCase; import com.android.frameworks.coretests.R; @@ -138,6 +139,12 @@ public class NetworkStatsFactoryTest extends AndroidTestCase { assertEquals(2147483647, kernelToTag("0x7fffffff00000000")); assertEquals(0, kernelToTag("0x0000000000000000")); assertEquals(2147483136, kernelToTag("0x7FFFFE0000000000")); + + assertEquals(0, kernelToTag("0x0")); + assertEquals(0, kernelToTag("0xf00d")); + assertEquals(1, kernelToTag("0x100000000")); + assertEquals(14438007, kernelToTag("0xdc4e7700000000")); + assertEquals(TrafficStats.TAG_SYSTEM_DOWNLOAD, kernelToTag("0xffffff0100000000")); } public void testNetworkStatsWithSet() throws Exception {