1/*
2 * Copyright (C) 2014 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
17package com.android.internal.telephony.dataconnection;
18
19import android.os.Parcel;
20import android.telephony.ServiceState;
21
22public class DataProfile {
23
24    static final int TYPE_COMMON = 0;
25    static final int TYPE_3GPP = 1;
26    static final int TYPE_3GPP2 = 2;
27
28    //id of the data profile
29    public final int profileId;
30    //the APN to connect to
31    public final String apn;
32    //one of the PDP_type values in TS 27.007 section 10.1.1.
33    //For example, "IP", "IPV6", "IPV4V6", or "PPP".
34    public final String protocol;
35    //authentication protocol used for this PDP context
36    //(None: 0, PAP: 1, CHAP: 2, PAP&CHAP: 3)
37    public final int authType;
38    //the username for APN, or NULL
39    public final String user;
40    //the password for APN, or NULL
41    public final String password;
42    //the profile type, TYPE_COMMON, TYPE_3GPP, TYPE_3GPP2
43    public final int type;
44    //the period in seconds to limit the maximum connections
45    public final int maxConnsTime;
46    //the maximum connections during maxConnsTime
47    public final int maxConns;
48    //the required wait time in seconds after a successful UE initiated
49    //disconnect of a given PDN connection before the device can send
50    //a new PDN connection request for that given PDN
51    public final int waitTime;
52    //true to enable the profile, false to disable
53    public final boolean enabled;
54
55
56    DataProfile(int profileId, String apn, String protocol, int authType,
57            String user, String password, int type, int maxConnsTime, int maxConns,
58            int waitTime, boolean enabled) {
59
60        this.profileId = profileId;
61        this.apn = apn;
62        this.protocol = protocol;
63        this.authType = authType;
64        this.user = user;
65        this.password = password;
66        this.type = type;
67        this.maxConnsTime = maxConnsTime;
68        this.maxConns = maxConns;
69        this.waitTime = waitTime;
70        this.enabled = enabled;
71    }
72
73    DataProfile(ApnSetting apn, boolean isRoaming) {
74        this(apn.profileId, apn.apn, isRoaming? apn.protocol : apn.roamingProtocol,
75                apn.authType, apn.user, apn.password, apn.bearer == 0 ? TYPE_COMMON :
76                (ServiceState.isCdma(apn.bearer) ? TYPE_3GPP2 : TYPE_3GPP), apn.maxConnsTime,
77                apn.maxConns, apn.waitTime, apn.carrierEnabled);
78    }
79
80    public static Parcel toParcel(Parcel pc, DataProfile[] dps) {
81
82        if(pc == null) {
83            return null;
84        }
85
86        pc.writeInt(dps.length);
87        for(int i = 0; i < dps.length; i++) {
88            pc.writeInt(dps[i].profileId);
89            pc.writeString(dps[i].apn);
90            pc.writeString(dps[i].protocol);
91            pc.writeInt(dps[i].authType);
92            pc.writeString(dps[i].user);
93            pc.writeString(dps[i].password);
94            pc.writeInt(dps[i].type);
95            pc.writeInt(dps[i].maxConnsTime);
96            pc.writeInt(dps[i].maxConns);
97            pc.writeInt(dps[i].waitTime);
98            pc.writeInt(dps[i].enabled ? 1 : 0);
99        }
100        return pc;
101    }
102
103    @Override
104    public String toString() {
105        return "DataProfile " + profileId + "/" + apn + "/" + protocol + "/" + authType
106                + "/" + user + "/" + password + "/" + type + "/" + maxConnsTime
107                + "/" + maxConns + "/" + waitTime + "/" + enabled;
108    }
109
110    @Override
111    public boolean equals(Object o) {
112        if (o instanceof DataProfile == false) return false;
113        return (toString().equals(o.toString()));
114    }
115}
116