1 /* 2 * Copyright (C) 2009 Qualcomm Innovation Center, Inc. All Rights Reserved. 3 * Copyright (C) 2009 The Android Open Source Project 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 package android.telephony.data; 19 20 import android.annotation.NonNull; 21 import android.annotation.Nullable; 22 import android.net.LinkAddress; 23 import android.os.Parcel; 24 import android.os.Parcelable; 25 26 import java.net.InetAddress; 27 import java.util.ArrayList; 28 import java.util.List; 29 import java.util.Objects; 30 31 /** 32 * Description of the response of a setup data call connection request. 33 * 34 * @hide 35 */ 36 public final class DataCallResponse implements Parcelable { 37 private final int mStatus; 38 private final int mSuggestedRetryTime; 39 private final int mCid; 40 private final int mActive; 41 private final String mType; 42 private final String mIfname; 43 private final List<LinkAddress> mAddresses; 44 private final List<InetAddress> mDnses; 45 private final List<InetAddress> mGateways; 46 private final List<String> mPcscfs; 47 private final int mMtu; 48 49 /** 50 * @param status Data call fail cause. 0 indicates no error. 51 * @param suggestedRetryTime The suggested data retry time in milliseconds. 52 * @param cid The unique id of the data connection. 53 * @param active Data connection active status. 0 = inactive, 1 = active/physical link down, 54 * 2 = active/physical link up. 55 * @param type The connection protocol, should be one of the PDP_type values in TS 27.007 56 * section 10.1.1. For example, "IP", "IPV6", "IPV4V6", or "PPP". 57 * @param ifname The network interface name. 58 * @param addresses A list of addresses with optional "/" prefix length, e.g., 59 * "192.0.1.3" or "192.0.1.11/16 2001:db8::1/64". Typically 1 IPv4 or 1 IPv6 or 60 * one of each. If the prefix length is absent the addresses are assumed to be 61 * point to point with IPv4 having a prefix length of 32 and IPv6 128. 62 * @param dnses A list of DNS server addresses, e.g., "192.0.1.3" or 63 * "192.0.1.11 2001:db8::1". Null if no dns server addresses returned. 64 * @param gateways A list of default gateway addresses, e.g., "192.0.1.3" or 65 * "192.0.1.11 2001:db8::1". When null, the addresses represent point to point 66 * connections. 67 * @param pcscfs A list of Proxy Call State Control Function address via PCO(Protocol 68 * Configuration Option) for IMS client. 69 * @param mtu MTU (Maximum transmission unit) received from network Value <= 0 means network has 70 * either not sent a value or sent an invalid value. 71 */ DataCallResponse(int status, int suggestedRetryTime, int cid, int active, @Nullable String type, @Nullable String ifname, @Nullable List<LinkAddress> addresses, @Nullable List<InetAddress> dnses, @Nullable List<InetAddress> gateways, @Nullable List<String> pcscfs, int mtu)72 public DataCallResponse(int status, int suggestedRetryTime, int cid, int active, 73 @Nullable String type, @Nullable String ifname, 74 @Nullable List<LinkAddress> addresses, 75 @Nullable List<InetAddress> dnses, 76 @Nullable List<InetAddress> gateways, 77 @Nullable List<String> pcscfs, int mtu) { 78 mStatus = status; 79 mSuggestedRetryTime = suggestedRetryTime; 80 mCid = cid; 81 mActive = active; 82 mType = (type == null) ? "" : type; 83 mIfname = (ifname == null) ? "" : ifname; 84 mAddresses = (addresses == null) ? new ArrayList<>() : addresses; 85 mDnses = (dnses == null) ? new ArrayList<>() : dnses; 86 mGateways = (gateways == null) ? new ArrayList<>() : gateways; 87 mPcscfs = (pcscfs == null) ? new ArrayList<>() : pcscfs; 88 mMtu = mtu; 89 } 90 DataCallResponse(Parcel source)91 public DataCallResponse(Parcel source) { 92 mStatus = source.readInt(); 93 mSuggestedRetryTime = source.readInt(); 94 mCid = source.readInt(); 95 mActive = source.readInt(); 96 mType = source.readString(); 97 mIfname = source.readString(); 98 mAddresses = new ArrayList<>(); 99 source.readList(mAddresses, LinkAddress.class.getClassLoader()); 100 mDnses = new ArrayList<>(); 101 source.readList(mDnses, InetAddress.class.getClassLoader()); 102 mGateways = new ArrayList<>(); 103 source.readList(mGateways, InetAddress.class.getClassLoader()); 104 mPcscfs = new ArrayList<>(); 105 source.readList(mPcscfs, InetAddress.class.getClassLoader()); 106 mMtu = source.readInt(); 107 } 108 109 /** 110 * @return Data call fail cause. 0 indicates no error. 111 */ getStatus()112 public int getStatus() { return mStatus; } 113 114 /** 115 * @return The suggested data retry time in milliseconds. 116 */ getSuggestedRetryTime()117 public int getSuggestedRetryTime() { return mSuggestedRetryTime; } 118 119 /** 120 * @return The unique id of the data connection. 121 */ getCallId()122 public int getCallId() { return mCid; } 123 124 /** 125 * @return 0 = inactive, 1 = active/physical link down, 2 = active/physical link up. 126 */ getActive()127 public int getActive() { return mActive; } 128 129 /** 130 * @return The connection protocol, should be one of the PDP_type values in TS 27.007 section 131 * 10.1.1. For example, "IP", "IPV6", "IPV4V6", or "PPP". 132 */ 133 @NonNull getType()134 public String getType() { return mType; } 135 136 /** 137 * @return The network interface name. 138 */ 139 @NonNull getIfname()140 public String getIfname() { return mIfname; } 141 142 /** 143 * @return A list of {@link LinkAddress} 144 */ 145 @NonNull getAddresses()146 public List<LinkAddress> getAddresses() { return mAddresses; } 147 148 /** 149 * @return A list of DNS server addresses, e.g., "192.0.1.3" or 150 * "192.0.1.11 2001:db8::1". Empty list if no dns server addresses returned. 151 */ 152 @NonNull getDnses()153 public List<InetAddress> getDnses() { return mDnses; } 154 155 /** 156 * @return A list of default gateway addresses, e.g., "192.0.1.3" or 157 * "192.0.1.11 2001:db8::1". Empty list if the addresses represent point to point connections. 158 */ 159 @NonNull getGateways()160 public List<InetAddress> getGateways() { return mGateways; } 161 162 /** 163 * @return A list of Proxy Call State Control Function address via PCO(Protocol Configuration 164 * Option) for IMS client. 165 */ 166 @NonNull getPcscfs()167 public List<String> getPcscfs() { return mPcscfs; } 168 169 /** 170 * @return MTU received from network Value <= 0 means network has either not sent a value or 171 * sent an invalid value 172 */ getMtu()173 public int getMtu() { return mMtu; } 174 175 @Override toString()176 public String toString() { 177 StringBuffer sb = new StringBuffer(); 178 sb.append("DataCallResponse: {") 179 .append(" status=").append(mStatus) 180 .append(" retry=").append(mSuggestedRetryTime) 181 .append(" cid=").append(mCid) 182 .append(" active=").append(mActive) 183 .append(" type=").append(mType) 184 .append(" ifname=").append(mIfname) 185 .append(" addresses=").append(mAddresses) 186 .append(" dnses=").append(mDnses) 187 .append(" gateways=").append(mGateways) 188 .append(" pcscf=").append(mPcscfs) 189 .append(" mtu=").append(mMtu) 190 .append("}"); 191 return sb.toString(); 192 } 193 194 @Override equals(Object o)195 public boolean equals (Object o) { 196 if (this == o) return true; 197 198 if (o == null || !(o instanceof DataCallResponse)) { 199 return false; 200 } 201 202 DataCallResponse other = (DataCallResponse) o; 203 return this.mStatus == other.mStatus 204 && this.mSuggestedRetryTime == other.mSuggestedRetryTime 205 && this.mCid == other.mCid 206 && this.mActive == other.mActive 207 && this.mType.equals(other.mType) 208 && this.mIfname.equals(other.mIfname) 209 && mAddresses.size() == other.mAddresses.size() 210 && mAddresses.containsAll(other.mAddresses) 211 && mDnses.size() == other.mDnses.size() 212 && mDnses.containsAll(other.mDnses) 213 && mGateways.size() == other.mGateways.size() 214 && mGateways.containsAll(other.mGateways) 215 && mPcscfs.size() == other.mPcscfs.size() 216 && mPcscfs.containsAll(other.mPcscfs) 217 && mMtu == other.mMtu; 218 } 219 220 @Override hashCode()221 public int hashCode() { 222 return Objects.hash(mStatus, mSuggestedRetryTime, mCid, mActive, mType, mIfname, mAddresses, 223 mDnses, mGateways, mPcscfs, mMtu); 224 } 225 226 @Override describeContents()227 public int describeContents() { 228 return 0; 229 } 230 231 @Override writeToParcel(Parcel dest, int flags)232 public void writeToParcel(Parcel dest, int flags) { 233 dest.writeInt(mStatus); 234 dest.writeInt(mSuggestedRetryTime); 235 dest.writeInt(mCid); 236 dest.writeInt(mActive); 237 dest.writeString(mType); 238 dest.writeString(mIfname); 239 dest.writeList(mAddresses); 240 dest.writeList(mDnses); 241 dest.writeList(mGateways); 242 dest.writeList(mPcscfs); 243 dest.writeInt(mMtu); 244 } 245 246 public static final Parcelable.Creator<DataCallResponse> CREATOR = 247 new Parcelable.Creator<DataCallResponse>() { 248 @Override 249 public DataCallResponse createFromParcel(Parcel source) { 250 return new DataCallResponse(source); 251 } 252 253 @Override 254 public DataCallResponse[] newArray(int size) { 255 return new DataCallResponse[size]; 256 } 257 }; 258 }