summaryrefslogtreecommitdiffstats
path: root/telephony/java
diff options
context:
space:
mode:
authorRobert Greenwalt <robdroid@android.com>2010-06-15 15:43:39 -0700
committerRobert Greenwalt <robdroid@android.com>2010-07-13 18:07:41 -0700
commit47f69fe2999e46004f2f2463b70d38de9ff7079a (patch)
tree875b979084ecb5f10e78c70baec531ea8d8e8b91 /telephony/java
parent50331a1e2f1f36e78886832a694ca8fbc8d0cafc (diff)
downloadframeworks_base-47f69fe2999e46004f2f2463b70d38de9ff7079a.zip
frameworks_base-47f69fe2999e46004f2f2463b70d38de9ff7079a.tar.gz
frameworks_base-47f69fe2999e46004f2f2463b70d38de9ff7079a.tar.bz2
Pass network properties to ConnectivityService.
Used as a bag to hold ipaddr, gateway, dns, proxy info. addr's are InetAddresses for v4/v6 use. Cleaning up some old v4-only code bug:2655015 Change-Id: I7ac886fe5c519e8bab42f49cd82a5189d9c9ab59
Diffstat (limited to 'telephony/java')
-rw-r--r--telephony/java/com/android/internal/telephony/DataConnectionTracker.java55
-rw-r--r--telephony/java/com/android/internal/telephony/DefaultPhoneNotifier.java7
-rw-r--r--telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl4
-rw-r--r--telephony/java/com/android/internal/telephony/Phone.java7
-rw-r--r--telephony/java/com/android/internal/telephony/PhoneBase.java5
-rw-r--r--telephony/java/com/android/internal/telephony/PhoneProxy.java5
-rw-r--r--telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java3
-rw-r--r--telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java24
8 files changed, 108 insertions, 2 deletions
diff --git a/telephony/java/com/android/internal/telephony/DataConnectionTracker.java b/telephony/java/com/android/internal/telephony/DataConnectionTracker.java
index e71fe2e..06807c6 100644
--- a/telephony/java/com/android/internal/telephony/DataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/DataConnectionTracker.java
@@ -17,6 +17,7 @@
package com.android.internal.telephony;
import android.app.PendingIntent;
+import android.net.NetworkProperties;
import android.os.AsyncResult;
import android.os.Handler;
import android.os.Message;
@@ -26,6 +27,10 @@ import android.provider.Settings.SettingNotFoundException;
import android.text.TextUtils;
import android.util.Log;
+import java.net.InetAddress;
+import java.net.NetworkInterface;
+import java.net.SocketException;
+import java.net.UnknownHostException;
import java.util.ArrayList;
/**
@@ -191,6 +196,9 @@ public abstract class DataConnectionTracker extends Handler {
/** indication of our availability (preconditions to trysetupData are met) **/
protected boolean mAvailability = false;
+ /** all our network properties (dns, gateway, ip, etc) */
+ protected NetworkProperties mNetworkProperties;
+
/**
* Default constructor
*/
@@ -424,6 +432,15 @@ public abstract class DataConnectionTracker extends Handler {
protected abstract void setState(State s);
+ protected NetworkProperties getNetworkProperties(String apnType) {
+ int id = apnTypeToId(apnType);
+ if (isApnIdEnabled(id)) {
+ return mNetworkProperties;
+ } else {
+ return null;
+ }
+ }
+
// tell all active apns of the current condition
protected void notifyDataConnection(String reason) {
for (int id = 0; id < APN_NUM_TYPES; id++) {
@@ -668,5 +685,43 @@ public abstract class DataConnectionTracker extends Handler {
}
}
+ protected NetworkProperties makeNetworkProperties(DataConnection connection) {
+ NetworkProperties properties = new NetworkProperties();
+ try {
+ properties.setInterface(NetworkInterface.getByName(connection.getInterface()));
+ } catch (SocketException e) {
+ Log.e(LOG_TAG, "SocketException creating NetworkInterface: " + e);
+ } catch (NullPointerException e) {
+ Log.e(LOG_TAG, "NPE trying to makeNetworkProperties: " + e);
+ }
+
+ try {
+ properties.addAddress(InetAddress.getByName(connection.getIpAddress()));
+ } catch (UnknownHostException e) {
+ Log.e(LOG_TAG, "UnknownHostException setting IpAddress: " + e);
+ } catch (SecurityException e) {
+ Log.e(LOG_TAG, "SecurityException setting IpAddress: " + e);
+ }
+
+ try {
+ properties.setGateway(InetAddress.getByName(connection.getGatewayAddress()));
+ } catch (UnknownHostException e) {
+ Log.e(LOG_TAG, "UnknownHostException setting GatewayAddress: " + e);
+ } catch (SecurityException e) {
+ Log.e(LOG_TAG, "SecurityException setting GatewayAddress: " + e);
+ }
+ try {
+ String[] dnsStrings = connection.getDnsServers();
+ for (int i = 0; i<dnsStrings.length; i++) {
+ properties.addDns(InetAddress.getByName(dnsStrings[i]));
+ }
+ } catch (UnknownHostException e) {
+ Log.e(LOG_TAG, "UnknownHostException setting DnsAddress: " + e);
+ } catch (SecurityException e) {
+ Log.e(LOG_TAG, "SecurityException setting DnsAddress: " + e);
+ }
+ // TODO - set Proxy info
+ return properties;
+ }
}
diff --git a/telephony/java/com/android/internal/telephony/DefaultPhoneNotifier.java b/telephony/java/com/android/internal/telephony/DefaultPhoneNotifier.java
index 0646101..382c19f 100644
--- a/telephony/java/com/android/internal/telephony/DefaultPhoneNotifier.java
+++ b/telephony/java/com/android/internal/telephony/DefaultPhoneNotifier.java
@@ -16,6 +16,7 @@
package com.android.internal.telephony;
+import android.net.NetworkProperties;
import android.os.Bundle;
import android.os.RemoteException;
import android.os.ServiceManager;
@@ -107,13 +108,17 @@ public class DefaultPhoneNotifier implements PhoneNotifier {
// use apnType as the key to which connection we're talking about.
// pass apnType back up to fetch particular for this one.
TelephonyManager telephony = TelephonyManager.getDefault();
+ NetworkProperties networkProperties = null;
+ if (state == Phone.DataState.CONNECTED) {
+ networkProperties = sender.getNetworkProperties(apnType);
+ }
try {
mRegistry.notifyDataConnection(
convertDataState(state),
sender.isDataConnectivityPossible(), reason,
sender.getActiveApn(),
apnType,
- sender.getInterfaceName(null),
+ networkProperties,
((telephony!=null) ? telephony.getNetworkType() :
TelephonyManager.NETWORK_TYPE_UNKNOWN));
} catch (RemoteException ex) {
diff --git a/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl b/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl
index 79c2b40..f7b70ee 100644
--- a/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl
+++ b/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl
@@ -17,6 +17,7 @@
package com.android.internal.telephony;
import android.content.Intent;
+import android.net.NetworkProperties;
import android.os.Bundle;
import android.telephony.ServiceState;
import android.telephony.SignalStrength;
@@ -32,7 +33,8 @@ interface ITelephonyRegistry {
void notifyCallForwardingChanged(boolean cfi);
void notifyDataActivity(int state);
void notifyDataConnection(int state, boolean isDataConnectivityPossible,
- String reason, String apn, String apnType, String interfaceName, int networkType);
+ String reason, String apn, String apnType, in NetworkProperties networkProperties,
+ int networkType);
void notifyDataConnectionFailed(String reason, String apnType);
void notifyCellLocation(in Bundle cellLocation);
}
diff --git a/telephony/java/com/android/internal/telephony/Phone.java b/telephony/java/com/android/internal/telephony/Phone.java
index 7029031..769b2fc 100644
--- a/telephony/java/com/android/internal/telephony/Phone.java
+++ b/telephony/java/com/android/internal/telephony/Phone.java
@@ -18,6 +18,7 @@ package com.android.internal.telephony;
import android.content.Context;
import android.content.SharedPreferences;
+import android.net.NetworkProperties;
import android.os.Handler;
import android.os.Message;
import android.preference.PreferenceManager;
@@ -101,6 +102,7 @@ public interface Phone {
static final String STATE_CHANGE_REASON_KEY = "reason";
static final String DATA_APN_TYPE_KEY = "apnType";
static final String DATA_APN_KEY = "apn";
+ static final String DATA_NETWORK_PROPERTIES_KEY = "dataProperties";
static final String DATA_IFACE_NAME_KEY = "iface";
static final String NETWORK_UNAVAILABLE_KEY = "networkUnvailable";
@@ -319,6 +321,11 @@ public interface Phone {
String getActiveApn();
/**
+ * Return the NetworkProperties for the named apn or null if not available
+ */
+ NetworkProperties getNetworkProperties(String apnType);
+
+ /**
* Get current signal strength. No change notification available on this
* interface. Use <code>PhoneStateNotifier</code> or an equivalent.
* An ASU is 0-31 or -1 if unknown (for GSM, dBm = -113 - 2 * asu).
diff --git a/telephony/java/com/android/internal/telephony/PhoneBase.java b/telephony/java/com/android/internal/telephony/PhoneBase.java
index cf80691..e5968a7 100644
--- a/telephony/java/com/android/internal/telephony/PhoneBase.java
+++ b/telephony/java/com/android/internal/telephony/PhoneBase.java
@@ -21,6 +21,7 @@ import android.app.IActivityManager;
import android.content.Context;
import android.content.res.Configuration;
import android.content.SharedPreferences;
+import android.net.NetworkProperties;
import android.net.wifi.WifiManager;
import android.os.AsyncResult;
import android.os.Handler;
@@ -955,6 +956,10 @@ public abstract class PhoneBase extends Handler implements Phone {
return mDataConnection.getActiveApnTypes();
}
+ public NetworkProperties getNetworkProperties(String apnType) {
+ return mDataConnection.getNetworkProperties(apnType);
+ }
+
public String getActiveApn() {
return mDataConnection.getActiveApnString();
}
diff --git a/telephony/java/com/android/internal/telephony/PhoneProxy.java b/telephony/java/com/android/internal/telephony/PhoneProxy.java
index fb2a938..d84859c 100644
--- a/telephony/java/com/android/internal/telephony/PhoneProxy.java
+++ b/telephony/java/com/android/internal/telephony/PhoneProxy.java
@@ -21,6 +21,7 @@ import android.app.ActivityManagerNative;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
+import android.net.NetworkProperties;
import android.os.Handler;
import android.os.Message;
import android.os.SystemProperties;
@@ -211,6 +212,10 @@ public class PhoneProxy extends Handler implements Phone {
return mActivePhone.getActiveApnTypes();
}
+ public NetworkProperties getNetworkProperties(String apnType) {
+ return mActivePhone.getNetworkProperties(apnType);
+ }
+
public String getActiveApn() {
return mActivePhone.getActiveApn();
}
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
index bd103d4..8a3af3b 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
@@ -53,6 +53,7 @@ import com.android.internal.telephony.Phone;
import com.android.internal.telephony.RetryManager;
import com.android.internal.telephony.ServiceStateTracker;
+import java.net.NetworkInterface;
import java.util.ArrayList;
/**
@@ -736,6 +737,8 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
}
if (ar.exception == null) {
+ mNetworkProperties = makeNetworkProperties(mActiveDataConnection);
+
// everything is setup
notifyDefaultData(reason);
} else {
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
index 6826fa8..c76da80 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
@@ -30,6 +30,8 @@ import android.database.Cursor;
import android.net.ConnectivityManager;
import android.net.IConnectivityManager;
import android.net.NetworkInfo;
+import android.net.NetworkProperties;
+import android.net.ProxyProperties;
import android.net.TrafficStats;
import android.net.Uri;
import android.net.wifi.WifiManager;
@@ -58,6 +60,9 @@ import com.android.internal.telephony.EventLogTags;
import com.android.internal.telephony.DataConnection.FailCause;
import java.io.IOException;
+import java.net.InetAddress;
+import java.net.NetworkInterface;
+import java.net.UnknownHostException;
import java.util.ArrayList;
/**
@@ -1133,6 +1138,25 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
}
if (ar.exception == null) {
+ mNetworkProperties = makeNetworkProperties(mActivePdp);
+
+ ApnSetting apn = mActivePdp.getApn();
+ if (apn.proxy != null && apn.proxy.length() != 0) {
+ try {
+ ProxyProperties proxy = new ProxyProperties();
+ proxy.setAddress(InetAddress.getByName(apn.proxy));
+ proxy.setPort(Integer.parseInt(apn.port));
+ mNetworkProperties.setHttpProxy(proxy);
+ } catch (UnknownHostException e) {
+ Log.e(LOG_TAG, "UnknownHostException making ProxyProperties: " + e);
+ } catch (SecurityException e) {
+ Log.e(LOG_TAG, "SecurityException making ProxyProperties: " + e);
+ } catch (NumberFormatException e) {
+ Log.e(LOG_TAG, "NumberFormatException making ProxyProperties (" + apn.port +
+ "): " + e);
+ }
+ }
+
// everything is setup
if (isApnTypeActive(Phone.APN_TYPE_DEFAULT)) {
SystemProperties.set("gsm.defaultpdpcontext.active", "true");