diff options
| author | Robert Greenwalt <robdroid@android.com> | 2010-06-15 15:43:39 -0700 |
|---|---|---|
| committer | Robert Greenwalt <robdroid@android.com> | 2010-07-13 18:07:41 -0700 |
| commit | 47f69fe2999e46004f2f2463b70d38de9ff7079a (patch) | |
| tree | 875b979084ecb5f10e78c70baec531ea8d8e8b91 /telephony/java | |
| parent | 50331a1e2f1f36e78886832a694ca8fbc8d0cafc (diff) | |
| download | frameworks_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')
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"); |
