/*
 * Copyright (C) 2009 Qualcomm Innovation Center, Inc.  All Rights Reserved.
 * Copyright (C) 2009 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.telephony.data;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.net.LinkAddress;
import android.os.Parcel;
import android.os.Parcelable;

import java.net.InetAddress;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

Description of the response of a setup data call connection request.
@hide
/** * Description of the response of a setup data call connection request. * * @hide */
public final class DataCallResponse implements Parcelable { private final int mStatus; private final int mSuggestedRetryTime; private final int mCid; private final int mActive; private final String mType; private final String mIfname; private final List<LinkAddress> mAddresses; private final List<InetAddress> mDnses; private final List<InetAddress> mGateways; private final List<String> mPcscfs; private final int mMtu;
Params:
  • status – Data call fail cause. 0 indicates no error.
  • suggestedRetryTime – The suggested data retry time in milliseconds.
  • cid – The unique id of the data connection.
  • active – Data connection active status. 0 = inactive, 1 = active/physical link down, 2 = active/physical link up.
  • type – The connection protocol, should be one of the PDP_type values in TS 27.007 section 10.1.1. For example, "IP", "IPV6", "IPV4V6", or "PPP".
  • ifname – The network interface name.
  • addresses – A list of addresses with optional "/" prefix length, e.g., "192.0.1.3" or "192.0.1.11/16 2001:db8::1/64". Typically 1 IPv4 or 1 IPv6 or one of each. If the prefix length is absent the addresses are assumed to be point to point with IPv4 having a prefix length of 32 and IPv6 128.
  • dnses – A list of DNS server addresses, e.g., "192.0.1.3" or "192.0.1.11 2001:db8::1". Null if no dns server addresses returned.
  • gateways – A list of default gateway addresses, e.g., "192.0.1.3" or "192.0.1.11 2001:db8::1". When null, the addresses represent point to point connections.
  • pcscfs – A list of Proxy Call State Control Function address via PCO(Protocol Configuration Option) for IMS client.
  • mtu – MTU (Maximum transmission unit) received from network Value <= 0 means network has either not sent a value or sent an invalid value.
/** * @param status Data call fail cause. 0 indicates no error. * @param suggestedRetryTime The suggested data retry time in milliseconds. * @param cid The unique id of the data connection. * @param active Data connection active status. 0 = inactive, 1 = active/physical link down, * 2 = active/physical link up. * @param type The connection protocol, should be one of the PDP_type values in TS 27.007 * section 10.1.1. For example, "IP", "IPV6", "IPV4V6", or "PPP". * @param ifname The network interface name. * @param addresses A list of addresses with optional "/" prefix length, e.g., * "192.0.1.3" or "192.0.1.11/16 2001:db8::1/64". Typically 1 IPv4 or 1 IPv6 or * one of each. If the prefix length is absent the addresses are assumed to be * point to point with IPv4 having a prefix length of 32 and IPv6 128. * @param dnses A list of DNS server addresses, e.g., "192.0.1.3" or * "192.0.1.11 2001:db8::1". Null if no dns server addresses returned. * @param gateways A list of default gateway addresses, e.g., "192.0.1.3" or * "192.0.1.11 2001:db8::1". When null, the addresses represent point to point * connections. * @param pcscfs A list of Proxy Call State Control Function address via PCO(Protocol * Configuration Option) for IMS client. * @param mtu MTU (Maximum transmission unit) received from network Value <= 0 means network has * either not sent a value or sent an invalid value. */
public 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) { mStatus = status; mSuggestedRetryTime = suggestedRetryTime; mCid = cid; mActive = active; mType = (type == null) ? "" : type; mIfname = (ifname == null) ? "" : ifname; mAddresses = (addresses == null) ? new ArrayList<>() : addresses; mDnses = (dnses == null) ? new ArrayList<>() : dnses; mGateways = (gateways == null) ? new ArrayList<>() : gateways; mPcscfs = (pcscfs == null) ? new ArrayList<>() : pcscfs; mMtu = mtu; } public DataCallResponse(Parcel source) { mStatus = source.readInt(); mSuggestedRetryTime = source.readInt(); mCid = source.readInt(); mActive = source.readInt(); mType = source.readString(); mIfname = source.readString(); mAddresses = new ArrayList<>(); source.readList(mAddresses, LinkAddress.class.getClassLoader()); mDnses = new ArrayList<>(); source.readList(mDnses, InetAddress.class.getClassLoader()); mGateways = new ArrayList<>(); source.readList(mGateways, InetAddress.class.getClassLoader()); mPcscfs = new ArrayList<>(); source.readList(mPcscfs, InetAddress.class.getClassLoader()); mMtu = source.readInt(); }
Returns:Data call fail cause. 0 indicates no error.
/** * @return Data call fail cause. 0 indicates no error. */
public int getStatus() { return mStatus; }
Returns:The suggested data retry time in milliseconds.
/** * @return The suggested data retry time in milliseconds. */
public int getSuggestedRetryTime() { return mSuggestedRetryTime; }
Returns:The unique id of the data connection.
/** * @return The unique id of the data connection. */
public int getCallId() { return mCid; }
Returns:0 = inactive, 1 = active/physical link down, 2 = active/physical link up.
/** * @return 0 = inactive, 1 = active/physical link down, 2 = active/physical link up. */
public int getActive() { return mActive; }
Returns:The connection protocol, should be one of the PDP_type values in TS 27.007 section 10.1.1. For example, "IP", "IPV6", "IPV4V6", or "PPP".
/** * @return The connection protocol, should be one of the PDP_type values in TS 27.007 section * 10.1.1. For example, "IP", "IPV6", "IPV4V6", or "PPP". */
@NonNull public String getType() { return mType; }
Returns:The network interface name.
/** * @return The network interface name. */
@NonNull public String getIfname() { return mIfname; }
Returns:A list of LinkAddress
/** * @return A list of {@link LinkAddress} */
@NonNull public List<LinkAddress> getAddresses() { return mAddresses; }
Returns:A list of DNS server addresses, e.g., "192.0.1.3" or "192.0.1.11 2001:db8::1". Empty list if no dns server addresses returned.
/** * @return A list of DNS server addresses, e.g., "192.0.1.3" or * "192.0.1.11 2001:db8::1". Empty list if no dns server addresses returned. */
@NonNull public List<InetAddress> getDnses() { return mDnses; }
Returns:A list of default gateway addresses, e.g., "192.0.1.3" or "192.0.1.11 2001:db8::1". Empty list if the addresses represent point to point connections.
/** * @return A list of default gateway addresses, e.g., "192.0.1.3" or * "192.0.1.11 2001:db8::1". Empty list if the addresses represent point to point connections. */
@NonNull public List<InetAddress> getGateways() { return mGateways; }
Returns:A list of Proxy Call State Control Function address via PCO(Protocol Configuration Option) for IMS client.
/** * @return A list of Proxy Call State Control Function address via PCO(Protocol Configuration * Option) for IMS client. */
@NonNull public List<String> getPcscfs() { return mPcscfs; }
Returns:MTU received from network Value <= 0 means network has either not sent a value or sent an invalid value
/** * @return MTU received from network Value <= 0 means network has either not sent a value or * sent an invalid value */
public int getMtu() { return mMtu; } @Override public String toString() { StringBuffer sb = new StringBuffer(); sb.append("DataCallResponse: {") .append(" status=").append(mStatus) .append(" retry=").append(mSuggestedRetryTime) .append(" cid=").append(mCid) .append(" active=").append(mActive) .append(" type=").append(mType) .append(" ifname=").append(mIfname) .append(" addresses=").append(mAddresses) .append(" dnses=").append(mDnses) .append(" gateways=").append(mGateways) .append(" pcscf=").append(mPcscfs) .append(" mtu=").append(mMtu) .append("}"); return sb.toString(); } @Override public boolean equals (Object o) { if (this == o) return true; if (o == null || !(o instanceof DataCallResponse)) { return false; } DataCallResponse other = (DataCallResponse) o; return this.mStatus == other.mStatus && this.mSuggestedRetryTime == other.mSuggestedRetryTime && this.mCid == other.mCid && this.mActive == other.mActive && this.mType.equals(other.mType) && this.mIfname.equals(other.mIfname) && mAddresses.size() == other.mAddresses.size() && mAddresses.containsAll(other.mAddresses) && mDnses.size() == other.mDnses.size() && mDnses.containsAll(other.mDnses) && mGateways.size() == other.mGateways.size() && mGateways.containsAll(other.mGateways) && mPcscfs.size() == other.mPcscfs.size() && mPcscfs.containsAll(other.mPcscfs) && mMtu == other.mMtu; } @Override public int hashCode() { return Objects.hash(mStatus, mSuggestedRetryTime, mCid, mActive, mType, mIfname, mAddresses, mDnses, mGateways, mPcscfs, mMtu); } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(mStatus); dest.writeInt(mSuggestedRetryTime); dest.writeInt(mCid); dest.writeInt(mActive); dest.writeString(mType); dest.writeString(mIfname); dest.writeList(mAddresses); dest.writeList(mDnses); dest.writeList(mGateways); dest.writeList(mPcscfs); dest.writeInt(mMtu); } public static final Parcelable.Creator<DataCallResponse> CREATOR = new Parcelable.Creator<DataCallResponse>() { @Override public DataCallResponse createFromParcel(Parcel source) { return new DataCallResponse(source); } @Override public DataCallResponse[] newArray(int size) { return new DataCallResponse[size]; } }; }