Home | History | Annotate | Download | only in data
      1 /*
      2  * Copyright 2017 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package android.telephony.data;
     18 
     19 import android.os.Build;
     20 import android.os.Parcel;
     21 import android.os.Parcelable;
     22 import android.text.TextUtils;
     23 
     24 import com.android.internal.telephony.RILConstants;
     25 
     26 /**
     27  * Description of a mobile data profile used for establishing
     28  * data connections.
     29  *
     30  * @hide
     31  */
     32 public final class DataProfile implements Parcelable {
     33 
     34     // The types indicating the data profile is used on GSM (3GPP) or CDMA (3GPP2) network.
     35     public static final int TYPE_COMMON = 0;
     36     public static final int TYPE_3GPP = 1;
     37     public static final int TYPE_3GPP2 = 2;
     38 
     39     private final int mProfileId;
     40 
     41     private final String mApn;
     42 
     43     private final String mProtocol;
     44 
     45     private final int mAuthType;
     46 
     47     private final String mUserName;
     48 
     49     private final String mPassword;
     50 
     51     private final int mType;
     52 
     53     private final int mMaxConnsTime;
     54 
     55     private final int mMaxConns;
     56 
     57     private final int mWaitTime;
     58 
     59     private final boolean mEnabled;
     60 
     61     private final int mSupportedApnTypesBitmap;
     62 
     63     private final String mRoamingProtocol;
     64 
     65     private final int mBearerBitmap;
     66 
     67     private final int mMtu;
     68 
     69     private final String mMvnoType;
     70 
     71     private final String mMvnoMatchData;
     72 
     73     private final boolean mModemCognitive;
     74 
     75     public DataProfile(int profileId, String apn, String protocol, int authType,
     76                 String userName, String password, int type, int maxConnsTime, int maxConns,
     77                 int waitTime, boolean enabled, int supportedApnTypesBitmap, String roamingProtocol,
     78                 int bearerBitmap, int mtu, String mvnoType, String mvnoMatchData,
     79                 boolean modemCognitive) {
     80 
     81         this.mProfileId = profileId;
     82         this.mApn = apn;
     83         this.mProtocol = protocol;
     84         if (authType == -1) {
     85             authType = TextUtils.isEmpty(userName) ? RILConstants.SETUP_DATA_AUTH_NONE
     86                     : RILConstants.SETUP_DATA_AUTH_PAP_CHAP;
     87         }
     88         this.mAuthType = authType;
     89         this.mUserName = userName;
     90         this.mPassword = password;
     91         this.mType = type;
     92         this.mMaxConnsTime = maxConnsTime;
     93         this.mMaxConns = maxConns;
     94         this.mWaitTime = waitTime;
     95         this.mEnabled = enabled;
     96 
     97         this.mSupportedApnTypesBitmap = supportedApnTypesBitmap;
     98         this.mRoamingProtocol = roamingProtocol;
     99         this.mBearerBitmap = bearerBitmap;
    100         this.mMtu = mtu;
    101         this.mMvnoType = mvnoType;
    102         this.mMvnoMatchData = mvnoMatchData;
    103         this.mModemCognitive = modemCognitive;
    104     }
    105 
    106     public DataProfile(Parcel source) {
    107         mProfileId = source.readInt();
    108         mApn = source.readString();
    109         mProtocol = source.readString();
    110         mAuthType = source.readInt();
    111         mUserName = source.readString();
    112         mPassword = source.readString();
    113         mType = source.readInt();
    114         mMaxConnsTime = source.readInt();
    115         mMaxConns = source.readInt();
    116         mWaitTime = source.readInt();
    117         mEnabled = source.readBoolean();
    118         mSupportedApnTypesBitmap = source.readInt();
    119         mRoamingProtocol = source.readString();
    120         mBearerBitmap = source.readInt();
    121         mMtu = source.readInt();
    122         mMvnoType = source.readString();
    123         mMvnoMatchData = source.readString();
    124         mModemCognitive = source.readBoolean();
    125     }
    126 
    127     /**
    128      * @return Id of the data profile.
    129      */
    130     public int getProfileId() { return mProfileId; }
    131 
    132     /**
    133      * @return The APN to establish data connection.
    134      */
    135     public String getApn() { return mApn; }
    136 
    137     /**
    138      * @return The connection protocol, should be one of the PDP_type values in TS 27.007 section
    139      * 10.1.1. For example, "IP", "IPV6", "IPV4V6", or "PPP".
    140      */
    141     public String getProtocol() { return mProtocol; }
    142 
    143     /**
    144      * @return The authentication protocol used for this PDP context
    145      * (None: 0, PAP: 1, CHAP: 2, PAP&CHAP: 3)
    146      */
    147     public int getAuthType() { return mAuthType; }
    148 
    149     /**
    150      * @return The username for APN. Can be null.
    151      */
    152     public String getUserName() { return mUserName; }
    153 
    154     /**
    155      * @return The password for APN. Can be null.
    156      */
    157     public String getPassword() { return mPassword; }
    158 
    159     /**
    160      * @return The profile type. Could be one of TYPE_COMMON, TYPE_3GPP, or TYPE_3GPP2.
    161      */
    162     public int getType() { return mType; }
    163 
    164     /**
    165      * @return The period in seconds to limit the maximum connections.
    166      */
    167     public int getMaxConnsTime() { return mMaxConnsTime; }
    168 
    169     /**
    170      * @return The maximum connections allowed.
    171      */
    172     public int getMaxConns() { return mMaxConns; }
    173 
    174     /**
    175      * @return The required wait time in seconds after a successful UE initiated disconnect of a
    176      * given PDN connection before the device can send a new PDN connection request for that given
    177      * PDN.
    178      */
    179     public int getWaitTime() { return mWaitTime; }
    180 
    181     /**
    182      * @return True if the profile is enabled.
    183      */
    184     public boolean isEnabled() { return mEnabled; }
    185 
    186     /**
    187      * @return The supported APN types bitmap. See RIL_ApnTypes for the value of each bit.
    188      */
    189     public int getSupportedApnTypesBitmap() { return mSupportedApnTypesBitmap; }
    190 
    191     /**
    192      * @return  The connection protocol on roaming network, should be one of the PDP_type values in
    193      * TS 27.007 section 10.1.1. For example, "IP", "IPV6", "IPV4V6", or "PPP".
    194      */
    195     public String getRoamingProtocol() { return mRoamingProtocol; }
    196 
    197     /**
    198      * @return The bearer bitmap. See RIL_RadioAccessFamily for the value of each bit.
    199      */
    200     public int getBearerBitmap() { return mBearerBitmap; }
    201 
    202     /**
    203      * @return The maximum transmission unit (MTU) size in bytes.
    204      */
    205     public int getMtu() { return mMtu; }
    206 
    207     /**
    208      * @return The MVNO type: possible values are "imsi", "gid", "spn".
    209      */
    210     public String getMvnoType() { return mMvnoType; }
    211 
    212     /**
    213      * @return The MVNO match data. For example,
    214      * SPN: A MOBILE, BEN NL, ...
    215      * IMSI: 302720x94, 2060188, ...
    216      * GID: 4E, 33, ...
    217      */
    218     public String getMvnoMatchData() { return mMvnoMatchData; }
    219 
    220     /**
    221      * @return True if the data profile was sent to the modem through setDataProfile earlier.
    222      */
    223     public boolean isModemCognitive() { return mModemCognitive; }
    224 
    225     @Override
    226     public int describeContents() {
    227         return 0;
    228     }
    229 
    230     @Override
    231     public String toString() {
    232         return "DataProfile=" + mProfileId + "/" + mProtocol + "/" + mAuthType
    233                 + "/" + (Build.IS_USER ? "***/***/***" :
    234                          (mApn + "/" + mUserName + "/" + mPassword))
    235                 + "/" + mType + "/" + mMaxConnsTime
    236                 + "/" + mMaxConns + "/" + mWaitTime + "/" + mEnabled + "/"
    237                 + mSupportedApnTypesBitmap + "/" + mRoamingProtocol + "/" + mBearerBitmap + "/"
    238                 + mMtu + "/" + mMvnoType + "/" + mMvnoMatchData + "/" + mModemCognitive;
    239     }
    240 
    241     @Override
    242     public boolean equals(Object o) {
    243         if (o instanceof DataProfile == false) return false;
    244         return (o == this || toString().equals(o.toString()));
    245     }
    246 
    247     @Override
    248     public void writeToParcel(Parcel dest, int flags) {
    249         dest.writeInt(mProfileId);
    250         dest.writeString(mApn);
    251         dest.writeString(mProtocol);
    252         dest.writeInt(mAuthType);
    253         dest.writeString(mUserName);
    254         dest.writeString(mPassword);
    255         dest.writeInt(mType);
    256         dest.writeInt(mMaxConnsTime);
    257         dest.writeInt(mMaxConns);
    258         dest.writeInt(mWaitTime);
    259         dest.writeBoolean(mEnabled);
    260         dest.writeInt(mSupportedApnTypesBitmap);
    261         dest.writeString(mRoamingProtocol);
    262         dest.writeInt(mBearerBitmap);
    263         dest.writeInt(mMtu);
    264         dest.writeString(mMvnoType);
    265         dest.writeString(mMvnoMatchData);
    266         dest.writeBoolean(mModemCognitive);
    267     }
    268 
    269     public static final Parcelable.Creator<DataProfile> CREATOR =
    270             new Parcelable.Creator<DataProfile>() {
    271         @Override
    272         public DataProfile createFromParcel(Parcel source) {
    273             return new DataProfile(source);
    274         }
    275 
    276         @Override
    277         public DataProfile[] newArray(int size) {
    278             return new DataProfile[size];
    279         }
    280     };
    281 }
    282