diff options
author | John Wang <johnwang@google.com> | 2011-04-07 12:44:14 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-04-07 12:44:14 -0700 |
commit | 574d3c4b2cb120314b68bffa34aed2545d1b1158 (patch) | |
tree | 911fa375224a1358faea28c7199c29ff1d06f833 /telephony | |
parent | 5d6f1167039e22889545212ce18192460f9b503e (diff) | |
parent | d3ba7d5bec8243d56cc7af43aea284f6a623e6f8 (diff) | |
download | frameworks_base-574d3c4b2cb120314b68bffa34aed2545d1b1158.zip frameworks_base-574d3c4b2cb120314b68bffa34aed2545d1b1158.tar.gz frameworks_base-574d3c4b2cb120314b68bffa34aed2545d1b1158.tar.bz2 |
Merge "Refactor onSetupConnectionCompleted." into honeycomb-LTE
Diffstat (limited to 'telephony')
-rw-r--r-- | telephony/java/com/android/internal/telephony/DataCallState.java | 161 | ||||
-rw-r--r-- | telephony/java/com/android/internal/telephony/DataConnection.java | 172 |
2 files changed, 179 insertions, 154 deletions
diff --git a/telephony/java/com/android/internal/telephony/DataCallState.java b/telephony/java/com/android/internal/telephony/DataCallState.java index fda1e47..a883e8e 100644 --- a/telephony/java/com/android/internal/telephony/DataCallState.java +++ b/telephony/java/com/android/internal/telephony/DataCallState.java @@ -17,11 +17,26 @@ package com.android.internal.telephony; +import android.net.LinkAddress; +import android.net.LinkProperties; +import android.net.NetworkUtils; +import android.os.SystemProperties; +import android.util.Log; + +import com.android.internal.telephony.DataConnection.FailCause; + +import java.net.Inet4Address; +import java.net.InetAddress; +import java.net.UnknownHostException; + /** * This is RIL_Data_Call_Response_v5 from ril.h * TODO: Rename to DataCallResponse. */ public class DataCallState { + private final boolean DBG = true; + private final String LOG_TAG = "GSM"; + public int version = 0; public int status = 0; public int cid = 0; @@ -32,6 +47,29 @@ public class DataCallState { public String [] dnses = new String[0]; public String[] gateways = new String[0]; + /** + * Class returned by onSetupConnectionCompleted. + */ + protected enum SetupResult { + SUCCESS, + ERR_BadCommand, + ERR_UnacceptableParameter, + ERR_GetLastErrorFromRil, + ERR_Stale, + ERR_RilError; + + public FailCause mFailCause; + + SetupResult() { + mFailCause = FailCause.fromInt(0); + } + + @Override + public String toString() { + return name() + " SetupResult.mFailCause=" + mFailCause; + } + } + @Override public String toString() { StringBuffer sb = new StringBuffer(); @@ -63,4 +101,127 @@ public class DataCallState { sb.append("]}"); return sb.toString(); } + + public SetupResult setLinkProperties(LinkProperties linkProperties, + boolean okToUseSystemPropertyDns) { + SetupResult result; + + // Start with clean network properties and if we have + // a failure we'll clear again at the bottom of this code. + if (linkProperties == null) + linkProperties = new LinkProperties(); + else + linkProperties.clear(); + + if (status == FailCause.NONE.getErrorCode()) { + String propertyPrefix = "net." + ifname + "."; + + try { + // set interface name + linkProperties.setInterfaceName(ifname); + + // set link addresses + if (addresses != null && addresses.length > 0) { + for (String addr : addresses) { + LinkAddress la; + int addrPrefixLen; + + String [] ap = addr.split("/"); + if (ap.length == 2) { + addr = ap[0]; + addrPrefixLen = Integer.parseInt(ap[1]); + } else { + addrPrefixLen = 0; + } + InetAddress ia; + try { + ia = NetworkUtils.numericToInetAddress(addr); + } catch (IllegalArgumentException e) { + throw new UnknownHostException("Non-numeric ip addr=" + addr); + } + if (addrPrefixLen == 0) { + // Assume point to point + addrPrefixLen = (ia instanceof Inet4Address) ? 32 : 128; + } + if (DBG) Log.d(LOG_TAG, "addr/pl=" + addr + "/" + addrPrefixLen); + la = new LinkAddress(ia, addrPrefixLen); + linkProperties.addLinkAddress(la); + } + } else { + throw new UnknownHostException("no address for ifname=" + ifname); + } + + // set dns servers + if (dnses != null && dnses.length > 0) { + for (String addr : dnses) { + InetAddress ia; + try { + ia = NetworkUtils.numericToInetAddress(addr); + } catch (IllegalArgumentException e) { + throw new UnknownHostException("Non-numeric dns addr=" + addr); + } + linkProperties.addDns(ia); + } + } else if (okToUseSystemPropertyDns){ + String dnsServers[] = new String[2]; + dnsServers[0] = SystemProperties.get(propertyPrefix + "dns1"); + dnsServers[1] = SystemProperties.get(propertyPrefix + "dns2"); + for (String dnsAddr : dnsServers) { + InetAddress ia; + try { + ia = NetworkUtils.numericToInetAddress(dnsAddr); + } catch (IllegalArgumentException e) { + throw new UnknownHostException("Non-numeric dns addr=" + + dnsAddr); + } + linkProperties.addDns(ia); + } + } else { + throw new UnknownHostException("Empty dns response and no system default dns"); + } + + // set gateways + if ((gateways == null) || (gateways.length == 0)) { + String sysGateways = SystemProperties.get(propertyPrefix + "gw"); + if (sysGateways != null) { + gateways = sysGateways.split(" "); + } else { + gateways = new String[0]; + } + } + for (String addr : gateways) { + InetAddress ia; + try { + ia = NetworkUtils.numericToInetAddress(addr); + } catch (IllegalArgumentException e) { + throw new UnknownHostException("Non-numeric gateway addr=" + addr); + } + linkProperties.addGateway(ia); + } + + result = SetupResult.SUCCESS; + } catch (UnknownHostException e) { + Log.d(LOG_TAG, "onSetupCompleted: UnknownHostException " + e); + e.printStackTrace(); + result = SetupResult.ERR_UnacceptableParameter; + } + } else { + if (version < 4) { + result = SetupResult.ERR_GetLastErrorFromRil; + } else { + result = SetupResult.ERR_RilError; + } + } + + // An error occurred so clear properties + if (result != SetupResult.SUCCESS) { + if(DBG) Log.d(LOG_TAG, + "onSetupConnectionCompleted with an error, clearing LinkProperties"); + linkProperties.clear(); + } + + return result; + } } + + diff --git a/telephony/java/com/android/internal/telephony/DataConnection.java b/telephony/java/com/android/internal/telephony/DataConnection.java index e21e951..aafe5ef 100644 --- a/telephony/java/com/android/internal/telephony/DataConnection.java +++ b/telephony/java/com/android/internal/telephony/DataConnection.java @@ -62,29 +62,6 @@ public abstract class DataConnection extends HierarchicalStateMachine { protected static int mCount; /** - * Class returned by onSetupConnectionCompleted. - */ - protected enum SetupResult { - SUCCESS, - ERR_BadCommand, - ERR_UnacceptableParameter, - ERR_GetLastErrorFromRil, - ERR_Stale, - ERR_RilError; - - public FailCause mFailCause; - - SetupResult() { - mFailCause = FailCause.fromInt(0); - } - - @Override - public String toString() { - return name() + " SetupResult.mFailCause=" + mFailCause; - } - } - - /** * Used internally for saving connecting parameters. */ protected static class ConnectionParams { @@ -445,10 +422,10 @@ public abstract class DataConnection extends HierarchicalStateMachine { * @param ar is the result * @return SetupResult. */ - private SetupResult onSetupConnectionCompleted(AsyncResult ar) { + private DataCallState.SetupResult onSetupConnectionCompleted(AsyncResult ar) { DataCallState response = (DataCallState) ar.result; ConnectionParams cp = (ConnectionParams) ar.userObj; - SetupResult result; + DataCallState.SetupResult result; if (ar.exception != null) { if (DBG) { @@ -459,148 +436,35 @@ public abstract class DataConnection extends HierarchicalStateMachine { if (ar.exception instanceof CommandException && ((CommandException) (ar.exception)).getCommandError() == CommandException.Error.RADIO_NOT_AVAILABLE) { - result = SetupResult.ERR_BadCommand; + result = DataCallState.SetupResult.ERR_BadCommand; result.mFailCause = FailCause.RADIO_NOT_AVAILABLE; } else if ((response == null) || (response.version < 4)) { - result = SetupResult.ERR_GetLastErrorFromRil; + result = DataCallState.SetupResult.ERR_GetLastErrorFromRil; } else { - result = SetupResult.ERR_RilError; + result = DataCallState.SetupResult.ERR_RilError; result.mFailCause = FailCause.fromInt(response.status); } } else if (cp.tag != mTag) { if (DBG) { log("BUG: onSetupConnectionCompleted is stale cp.tag=" + cp.tag + ", mtag=" + mTag); } - result = SetupResult.ERR_Stale; + result = DataCallState.SetupResult.ERR_Stale; } else { log("onSetupConnectionCompleted received DataCallState: " + response); - // Start with clean network properties and if we have - // a failure we'll clear again at the bottom of this code. - LinkProperties linkProperties = new LinkProperties(); - if (response.status == FailCause.NONE.getErrorCode()) { - String propertyPrefix = "net." + response.ifname + "."; - - try { - cid = response.cid; - linkProperties.setInterfaceName(response.ifname); - if (response.addresses != null && response.addresses.length > 0) { - for (String addr : response.addresses) { - LinkAddress la; - int addrPrefixLen; - - String [] ap = addr.split("/"); - if (ap.length == 2) { - addr = ap[0]; - addrPrefixLen = Integer.parseInt(ap[1]); - } else { - addrPrefixLen = 0; - } - InetAddress ia; - try { - ia = NetworkUtils.numericToInetAddress(addr); - } catch (IllegalArgumentException e) { - EventLogTags.writeBadIpAddress(addr); - throw new UnknownHostException("Non-numeric ip addr=" + addr); - } - if (addrPrefixLen == 0) { - // Assume point to point - addrPrefixLen = (ia instanceof Inet4Address) ? 32 : 128; - } - if (DBG) log("addr/pl=" + addr + "/" + addrPrefixLen); - la = new LinkAddress(ia, addrPrefixLen); - linkProperties.addLinkAddress(la); - } - } else { - EventLogTags.writeBadIpAddress("no address for ifname=" + response.ifname); - throw new UnknownHostException("no address for ifname=" + response.ifname); - } - if (response.dnses != null && response.dnses.length > 0) { - for (String addr : response.dnses) { - InetAddress ia; - try { - ia = NetworkUtils.numericToInetAddress(addr); - } catch (IllegalArgumentException e) { - EventLogTags.writePdpBadDnsAddress("dns=" + addr); - throw new UnknownHostException("Non-numeric dns addr=" + addr); - } - linkProperties.addDns(ia); - } - result = SetupResult.SUCCESS; - } else { - String dnsServers[] = new String[2]; - dnsServers[0] = SystemProperties.get(propertyPrefix + "dns1"); - dnsServers[1] = SystemProperties.get(propertyPrefix + "dns2"); - if (isDnsOk(dnsServers)) { - for (String dnsAddr : dnsServers) { - InetAddress ia; - try { - ia = NetworkUtils.numericToInetAddress(dnsAddr); - } catch (IllegalArgumentException e) { - EventLogTags.writePdpBadDnsAddress("dnsAddr=" + dnsAddr); - throw new UnknownHostException("Non-numeric dns addr=" - + dnsAddr); - } - linkProperties.addDns(ia); - } - result = SetupResult.SUCCESS; - } else { - StringBuilder sb = new StringBuilder(); - for (String dnsAddr : dnsServers) { - sb.append(dnsAddr); - sb.append(" "); - } - EventLogTags.writePdpBadDnsAddress("Unacceptable dns addresses=" + sb); - throw new UnknownHostException("Unacceptable dns addresses=" + sb); - } - } - if ((response.gateways == null) || (response.gateways.length == 0)) { - String gateways = SystemProperties.get(propertyPrefix + "gw"); - if (gateways != null) { - response.gateways = gateways.split(" "); - } else { - response.gateways = new String[0]; - } - } - for (String addr : response.gateways) { - InetAddress ia; - try { - ia = NetworkUtils.numericToInetAddress(addr); - } catch (IllegalArgumentException e) { - EventLogTags.writePdpBadDnsAddress("gateway=" + addr); - throw new UnknownHostException("Non-numeric gateway addr=" + addr); - } - linkProperties.addGateway(ia); - } - result = SetupResult.SUCCESS; - } catch (UnknownHostException e) { - log("onSetupCompleted: UnknownHostException " + e); - e.printStackTrace(); - result = SetupResult.ERR_UnacceptableParameter; - } - } else { - if (response.version < 4) { - result = SetupResult.ERR_GetLastErrorFromRil; - } else { - result = SetupResult.ERR_RilError; - } - } + // Check if system property dns usable + boolean okToUseSystemPropertyDns = false; + String propertyPrefix = "net." + response.ifname + "."; + String dnsServers[] = new String[2]; + dnsServers[0] = SystemProperties.get(propertyPrefix + "dns1"); + dnsServers[1] = SystemProperties.get(propertyPrefix + "dns2"); + okToUseSystemPropertyDns = isDnsOk(dnsServers); - // An error occurred so clear properties - if (result != SetupResult.SUCCESS) { - log("onSetupConnectionCompleted with an error, clearing LinkProperties"); - linkProperties.clear(); - } - mLinkProperties = linkProperties; + // set link properties based on data call response + result = response.setLinkProperties(mLinkProperties, + okToUseSystemPropertyDns); } - if (DBG) { - log("onSetupConnectionCompleted: DataConnection setup result='" - + result + "' on cid=" + cid); - if (result == SetupResult.SUCCESS) { - log("onSetupConnectionCompleted: LinkProperties: " + mLinkProperties.toString()); - } - } return result; } @@ -746,7 +610,7 @@ public abstract class DataConnection extends HierarchicalStateMachine { ar = (AsyncResult) msg.obj; cp = (ConnectionParams) ar.userObj; - SetupResult result = onSetupConnectionCompleted(ar); + DataCallState.SetupResult result = onSetupConnectionCompleted(ar); if (DBG) log("DcActivatingState onSetupConnectionCompleted result=" + result); switch (result) { case SUCCESS: @@ -780,7 +644,7 @@ public abstract class DataConnection extends HierarchicalStateMachine { // Request is stale, ignore. break; default: - throw new RuntimeException("Unkown SetupResult, should not happen"); + throw new RuntimeException("Unknown SetupResult, should not happen"); } retVal = true; break; |