aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGirish Moturu <gmoturu@google.com>2017-07-12 08:15:14 +0000
committerandroid-build-merger <android-build-merger@google.com>2017-07-12 08:15:14 +0000
commitac5221fbd0195e5231942c28e2f63103c35adf5a (patch)
tree39bc617673973ffe860cf1468f916d558a924db5
parent08bbc1fcd804c4b48180067e7693bc6b4aefdda3 (diff)
parentb632bc7d83a50e33ee73582c0fd268c4b5b5d5fc (diff)
downloadsl4a-ac5221fbd0195e5231942c28e2f63103c35adf5a.tar.gz
Merge "Facade functions for wifi tethering tests" am: d0393a27bd am: 67c41d5c23
am: b632bc7d83 Change-Id: I3bc817e7ef528d3a553b06fee1d2c680fad25668
-rw-r--r--Common/src/com/googlecode/android_scripting/facade/ConnectivityManagerFacade.java116
1 files changed, 109 insertions, 7 deletions
diff --git a/Common/src/com/googlecode/android_scripting/facade/ConnectivityManagerFacade.java b/Common/src/com/googlecode/android_scripting/facade/ConnectivityManagerFacade.java
index 482f3437..98bfed5a 100644
--- a/Common/src/com/googlecode/android_scripting/facade/ConnectivityManagerFacade.java
+++ b/Common/src/com/googlecode/android_scripting/facade/ConnectivityManagerFacade.java
@@ -17,6 +17,8 @@
package com.googlecode.android_scripting.facade;
import android.app.Service;
+import android.app.usage.NetworkStats.Bucket;
+import android.app.usage.NetworkStatsManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -28,11 +30,13 @@ import android.net.LinkProperties;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
+import android.net.NetworkPolicy;
+import android.net.NetworkPolicyManager;
import android.net.NetworkRequest;
import android.net.StringNetworkSpecifier;
import android.os.Bundle;
+import android.os.RemoteException;
import android.provider.Settings;
-
import com.googlecode.android_scripting.Log;
import com.googlecode.android_scripting.facade.wifi.WifiAwareManagerFacade;
import com.googlecode.android_scripting.jsonrpc.RpcReceiver;
@@ -44,13 +48,17 @@ import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
+import java.net.Inet4Address;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
+import java.util.List;
/**
* Access ConnectivityManager functions.
@@ -408,6 +416,8 @@ public class ConnectivityManagerFacade extends RpcReceiver {
}
private final ConnectivityManager mManager;
+ private NetworkPolicyManager mNetPolicyManager;
+ private NetworkStatsManager mNetStatsManager;
private final Service mService;
private final Context mContext;
private final ConnectivityReceiver mConnectivityReceiver;
@@ -425,6 +435,9 @@ public class ConnectivityManagerFacade extends RpcReceiver {
mService = manager.getService();
mContext = mService.getBaseContext();
mManager = (ConnectivityManager) mService.getSystemService(Context.CONNECTIVITY_SERVICE);
+ mNetPolicyManager = NetworkPolicyManager.from(mContext);
+ mNetStatsManager = (NetworkStatsManager)
+ mService.getSystemService(Context.NETWORK_STATS_SERVICE);
mEventFacade = manager.getReceiver(EventFacade.class);
mConnectivityReceiver = new ConnectivityReceiver();
mTrackingConnectivityStateChange = false;
@@ -791,9 +804,7 @@ public class ConnectivityManagerFacade extends RpcReceiver {
mManager.stopTethering(type);
}
- @Rpc(description = "Returns the link local IPv6 address of the interface.")
- public String connectivityGetLinkLocalIpv6Address(@RpcParameter(name = "ifaceName")
- String ifaceName) {
+ private Enumeration<InetAddress> getInetAddrsForInterface(String ifaceName) {
NetworkInterface iface = null;
try {
iface = NetworkInterface.getByName(ifaceName);
@@ -801,12 +812,20 @@ public class ConnectivityManagerFacade extends RpcReceiver {
return null;
}
- if (iface == null) {
+ if (iface == null)
return null;
- }
+ return iface.getInetAddresses();
+ }
+ @Rpc(description = "Returns the link local IPv6 address of the interface.")
+ public String connectivityGetLinkLocalIpv6Address(@RpcParameter(name = "ifaceName")
+ String ifaceName) {
Inet6Address inet6Address = null;
- Enumeration<InetAddress> inetAddresses = iface.getInetAddresses();
+ Enumeration<InetAddress> inetAddresses = getInetAddrsForInterface(ifaceName);
+ if (inetAddresses == null) {
+ return null;
+ }
+
while (inetAddresses.hasMoreElements()) {
InetAddress addr = inetAddresses.nextElement();
if (addr instanceof Inet6Address) {
@@ -824,11 +843,94 @@ public class ConnectivityManagerFacade extends RpcReceiver {
return inet6Address.getHostAddress();
}
+ @Rpc(description = "Return IPv4 address of an interface")
+ public List<String> connectivityGetIPv4Addresses(
+ @RpcParameter(name = "ifaceName") String ifaceName) {
+ Enumeration<InetAddress> inetAddresses
+ = getInetAddrsForInterface(ifaceName);
+ if (inetAddresses == null)
+ return null;
+
+ List<String> inetAddrs = new ArrayList<String>();
+ while (inetAddresses.hasMoreElements()) {
+ InetAddress addr = inetAddresses.nextElement();
+ if (addr instanceof Inet4Address) {
+ Inet4Address inet4Address = (Inet4Address) addr;
+ inetAddrs.add(inet4Address.getHostAddress());
+ }
+ }
+
+ return inetAddrs;
+ }
+
+ @Rpc(description = "Return IPv6 addrs of an interface except link local")
+ public List<String> connectivityGetIPv6Addresses(
+ @RpcParameter(name = "ifaceName") String ifaceName) {
+ Enumeration<InetAddress> inetAddresses
+ = getInetAddrsForInterface(ifaceName);
+ if (inetAddresses == null)
+ return null;
+
+ List<String> inetAddrs = new ArrayList<String>();
+ while (inetAddresses.hasMoreElements()) {
+ InetAddress addr = inetAddresses.nextElement();
+ if (addr instanceof Inet6Address) {
+ if (((Inet6Address) addr).isLinkLocalAddress())
+ continue;
+ Inet6Address inet6Address = (Inet6Address) addr;
+ inetAddrs.add(inet6Address.getHostAddress());
+ }
+ }
+
+ return inetAddrs;
+ }
+
@Rpc(description = "Returns active link properties")
public LinkProperties connectivityGetActiveLinkProperties() {
return mManager.getActiveLinkProperties();
}
+ @Rpc(description = "Factory reset of network policies")
+ public void connectivityFactoryResetNetworkPolicies(String subscriberId) {
+ mNetPolicyManager.factoryReset(subscriberId);
+ }
+
+ @Rpc(description = "Set data usage limit for subscription ID")
+ public void connectivitySetDataUsageLimit(
+ String subscriberId, String dataLimit) {
+ NetworkPolicy[] allPolicies = mNetPolicyManager.getNetworkPolicies();
+ for(int i=0; i<allPolicies.length; i++) {
+ String subId = allPolicies[i].template.getSubscriberId();
+ if(subId!=null && subId.equals(subscriberId)) {
+ allPolicies[i].limitBytes = Long.valueOf(dataLimit);
+ break;
+ }
+ }
+ mNetPolicyManager.setNetworkPolicies(allPolicies);
+ }
+
+ @Rpc(description = "Get network stats for device")
+ public long connectivityQuerySummaryForDevice(
+ String subscriberId, Long startTime, Long endTime)
+ throws SecurityException, RemoteException {
+ Bucket bucket = mNetStatsManager.querySummaryForDevice(
+ ConnectivityManager.TYPE_MOBILE, subscriberId, startTime, endTime);
+ return bucket.getTxBytes() + bucket.getRxBytes();
+ }
+
+ @Rpc(description = "Returns all interfaces on the android deivce")
+ public List<NetworkInterface> connectivityGetNetworkInterfaces() {
+ List<NetworkInterface> interfaces = null;
+ try {
+ interfaces = Collections.list(
+ NetworkInterface.getNetworkInterfaces());
+ } catch (SocketException e) {
+ return null;
+ };
+
+ return interfaces;
+ }
+
@Override
public void shutdown() {
connectivityStopTrackingConnectivityStateChange();