10825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/* 20825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Copyright (C) 2009 Qualcomm Innovation Center, Inc. All Rights Reserved. 30825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Copyright (C) 2009 The Android Open Source Project 40825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 50825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Licensed under the Apache License, Version 2.0 (the "License"); 60825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * you may not use this file except in compliance with the License. 70825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * You may obtain a copy of the License at 80825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 90825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * http://www.apache.org/licenses/LICENSE-2.0 100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Unless required by applicable law or agreed to in writing, software 120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * distributed under the License is distributed on an "AS IS" BASIS, 130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * See the License for the specific language governing permissions and 150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * limitations under the License. 160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savillepackage com.android.internal.telephony.dataconnection; 190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 200825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.LinkAddress; 210825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.LinkProperties; 220825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.NetworkUtils; 230825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.RouteInfo; 240825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.SystemProperties; 2599c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Savilleimport android.telephony.Rlog; 260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 27ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savilleimport com.android.internal.telephony.dataconnection.DcFailCause; 280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 290825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.net.Inet4Address; 300825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.net.InetAddress; 310825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.net.UnknownHostException; 320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/** 340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * This is RIL_Data_Call_Response_v5 from ril.h 350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 36ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savillepublic class DataCallResponse { 370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private final boolean DBG = true; 38ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville private final String LOG_TAG = "DataCallResponse"; 390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int version = 0; 410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int status = 0; 420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int cid = 0; 430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int active = 0; 440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String type = ""; 450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String ifname = ""; 460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String [] addresses = new String[0]; 470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String [] dnses = new String[0]; 480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String[] gateways = new String[0]; 490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int suggestedRetryTime = -1; 500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Class returned by onSetupConnectionCompleted. 530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public enum SetupResult { 550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SUCCESS, 560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ERR_BadCommand, 570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ERR_UnacceptableParameter, 580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ERR_GetLastErrorFromRil, 590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ERR_Stale, 600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ERR_RilError; 610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 62ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville public DcFailCause mFailCause; 630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SetupResult() { 65ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville mFailCause = DcFailCause.fromInt(0); 660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String toString() { 700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return name() + " SetupResult.mFailCause=" + mFailCause; 710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String toString() { 760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville StringBuffer sb = new StringBuffer(); 77ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville sb.append("DataCallResponse: {") 780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .append("version=").append(version) 790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .append(" status=").append(status) 800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .append(" retry=").append(suggestedRetryTime) 810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .append(" cid=").append(cid) 820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .append(" active=").append(active) 830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .append(" type=").append(type) 840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .append("' ifname='").append(ifname); 850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sb.append("' addresses=["); 860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (String addr : addresses) { 870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sb.append(addr); 880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sb.append(","); 890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (addresses.length > 0) sb.deleteCharAt(sb.length()-1); 910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sb.append("] dnses=["); 920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (String addr : dnses) { 930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sb.append(addr); 940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sb.append(","); 950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (dnses.length > 0) sb.deleteCharAt(sb.length()-1); 970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sb.append("] gateways=["); 980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (String addr : gateways) { 990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sb.append(addr); 1000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sb.append(","); 1010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (gateways.length > 0) sb.deleteCharAt(sb.length()-1); 1030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sb.append("]}"); 1040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return sb.toString(); 1050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public SetupResult setLinkProperties(LinkProperties linkProperties, 1080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville boolean okToUseSystemPropertyDns) { 1090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SetupResult result; 1100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Start with clean network properties and if we have 1120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // a failure we'll clear again at the bottom of this code. 1130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (linkProperties == null) 1140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville linkProperties = new LinkProperties(); 1150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville else 1160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville linkProperties.clear(); 1170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 118ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville if (status == DcFailCause.NONE.getErrorCode()) { 1190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String propertyPrefix = "net." + ifname + "."; 1200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 1220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // set interface name 1230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville linkProperties.setInterfaceName(ifname); 1240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // set link addresses 1260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (addresses != null && addresses.length > 0) { 1270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (String addr : addresses) { 1280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr = addr.trim(); 1290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (addr.isEmpty()) continue; 1300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville LinkAddress la; 1310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int addrPrefixLen; 1320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String [] ap = addr.split("/"); 1340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ap.length == 2) { 1350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr = ap[0]; 1360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addrPrefixLen = Integer.parseInt(ap[1]); 1370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 1380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addrPrefixLen = 0; 1390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville InetAddress ia; 1410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 1420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ia = NetworkUtils.numericToInetAddress(addr); 1430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (IllegalArgumentException e) { 1440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville throw new UnknownHostException("Non-numeric ip addr=" + addr); 1450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (! ia.isAnyLocalAddress()) { 1470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (addrPrefixLen == 0) { 1480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Assume point to point 1490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addrPrefixLen = (ia instanceof Inet4Address) ? 32 : 128; 1500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15199c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville if (DBG) Rlog.d(LOG_TAG, "addr/pl=" + addr + "/" + addrPrefixLen); 1520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville la = new LinkAddress(ia, addrPrefixLen); 1530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville linkProperties.addLinkAddress(la); 1540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 1570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville throw new UnknownHostException("no address for ifname=" + ifname); 1580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // set dns servers 1610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (dnses != null && dnses.length > 0) { 1620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (String addr : dnses) { 1630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr = addr.trim(); 1640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (addr.isEmpty()) continue; 1650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville InetAddress ia; 1660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 1670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ia = NetworkUtils.numericToInetAddress(addr); 1680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (IllegalArgumentException e) { 1690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville throw new UnknownHostException("Non-numeric dns addr=" + addr); 1700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (! ia.isAnyLocalAddress()) { 1720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville linkProperties.addDns(ia); 1730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else if (okToUseSystemPropertyDns){ 1760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String dnsServers[] = new String[2]; 1770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville dnsServers[0] = SystemProperties.get(propertyPrefix + "dns1"); 1780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville dnsServers[1] = SystemProperties.get(propertyPrefix + "dns2"); 1790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (String dnsAddr : dnsServers) { 1800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville dnsAddr = dnsAddr.trim(); 1810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (dnsAddr.isEmpty()) continue; 1820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville InetAddress ia; 1830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 1840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ia = NetworkUtils.numericToInetAddress(dnsAddr); 1850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (IllegalArgumentException e) { 1860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville throw new UnknownHostException("Non-numeric dns addr=" + dnsAddr); 1870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (! ia.isAnyLocalAddress()) { 1890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville linkProperties.addDns(ia); 1900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 1930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville throw new UnknownHostException("Empty dns response and no system default dns"); 1940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // set gateways 1970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if ((gateways == null) || (gateways.length == 0)) { 1980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String sysGateways = SystemProperties.get(propertyPrefix + "gw"); 1990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (sysGateways != null) { 2000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville gateways = sysGateways.split(" "); 2010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 2020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville gateways = new String[0]; 2030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (String addr : gateways) { 2060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr = addr.trim(); 2070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (addr.isEmpty()) continue; 2080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville InetAddress ia; 2090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 2100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ia = NetworkUtils.numericToInetAddress(addr); 2110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (IllegalArgumentException e) { 2120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville throw new UnknownHostException("Non-numeric gateway addr=" + addr); 2130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 214ebc8af719102a64a2ae17cc2a836e23e2dbc3838Lorenzo Colitti // Allow 0.0.0.0 or :: as a gateway; this indicates a point-to-point interface. 215ebc8af719102a64a2ae17cc2a836e23e2dbc3838Lorenzo Colitti linkProperties.addRoute(new RouteInfo(ia)); 2160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville result = SetupResult.SUCCESS; 2190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (UnknownHostException e) { 22099c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.d(LOG_TAG, "setLinkProperties: UnknownHostException " + e); 2210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville e.printStackTrace(); 2220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville result = SetupResult.ERR_UnacceptableParameter; 2230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 2250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (version < 4) { 2260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville result = SetupResult.ERR_GetLastErrorFromRil; 2270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 2280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville result = SetupResult.ERR_RilError; 2290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // An error occurred so clear properties 2330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (result != SetupResult.SUCCESS) { 2340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if(DBG) { 23599c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.d(LOG_TAG, "setLinkProperties: error clearing LinkProperties " + 2360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "status=" + status + " result=" + result); 2370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville linkProperties.clear(); 2390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return result; 2420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville} 244