155567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan/* 2d3aba7f7b67c758b2b325276538da6e1350cce69Hung-ying Tyan * Copyright (C) 2009, The Android Open Source Project 355567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan * 455567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan * Licensed under the Apache License, Version 2.0 (the "License"); 555567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan * you may not use this file except in compliance with the License. 655567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan * You may obtain a copy of the License at 755567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan * 855567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan * http://www.apache.org/licenses/LICENSE-2.0 955567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan * 1055567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan * Unless required by applicable law or agreed to in writing, software 1155567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan * distributed under the License is distributed on an "AS IS" BASIS, 1255567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1355567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan * See the License for the specific language governing permissions and 1455567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan * limitations under the License. 1555567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan */ 1655567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan 1755567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyanpackage android.net.vpn; 1855567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan 1955567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyanimport android.content.Context; 2055567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyanimport android.os.Parcel; 2155567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyanimport android.os.Parcelable; 2255567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan 2355567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyanimport java.io.IOException; 2455567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyanimport java.io.Serializable; 2555567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan 2655567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan/** 2755567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan * A VPN profile. 2855567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan * {@hide} 2955567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan */ 30f94b6444a3d4dc6d904754f80b2f940be90e432bHung-ying Tyanpublic abstract class VpnProfile implements Parcelable, Serializable { 31f94b6444a3d4dc6d904754f80b2f940be90e432bHung-ying Tyan private static final long serialVersionUID = 1L; 3255567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan private String mName; // unique display name 3355567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan private String mId; // unique identifier 344c424d61c72af64b4fa1da5e1c52eaebf60fe36eHung-ying Tyan private String mServerName; // VPN server name 3555567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan private String mDomainSuffices; // space separated list 3655567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan private String mRouteList; // space separated list 374c424d61c72af64b4fa1da5e1c52eaebf60fe36eHung-ying Tyan private String mSavedUsername; 3855567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan private boolean mIsCustomized; 3955567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan private transient VpnState mState = VpnState.IDLE; 4055567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan 4155567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan /** Sets a user-friendly name for this profile. */ 4255567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan public void setName(String name) { 4355567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan mName = name; 4455567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan } 4555567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan 4655567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan public String getName() { 4755567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan return mName; 4855567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan } 4955567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan 5055567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan /** 5155567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan * Sets an ID for this profile. The caller should make sure the 5255567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan * uniqueness of the ID. 5355567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan */ 5455567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan public void setId(String id) { 5555567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan mId = id; 5655567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan } 5755567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan 5855567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan public String getId() { 5955567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan return mId; 6055567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan } 6155567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan 6255567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan /** 634c424d61c72af64b4fa1da5e1c52eaebf60fe36eHung-ying Tyan * Sets the name of the VPN server. Used for DNS lookup. 644c424d61c72af64b4fa1da5e1c52eaebf60fe36eHung-ying Tyan */ 654c424d61c72af64b4fa1da5e1c52eaebf60fe36eHung-ying Tyan public void setServerName(String name) { 664c424d61c72af64b4fa1da5e1c52eaebf60fe36eHung-ying Tyan mServerName = name; 674c424d61c72af64b4fa1da5e1c52eaebf60fe36eHung-ying Tyan } 684c424d61c72af64b4fa1da5e1c52eaebf60fe36eHung-ying Tyan 694c424d61c72af64b4fa1da5e1c52eaebf60fe36eHung-ying Tyan public String getServerName() { 704c424d61c72af64b4fa1da5e1c52eaebf60fe36eHung-ying Tyan return mServerName; 714c424d61c72af64b4fa1da5e1c52eaebf60fe36eHung-ying Tyan } 724c424d61c72af64b4fa1da5e1c52eaebf60fe36eHung-ying Tyan 734c424d61c72af64b4fa1da5e1c52eaebf60fe36eHung-ying Tyan /** 7455567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan * Sets the domain suffices for DNS resolution. 7555567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan * 7655567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan * @param entries a comma-separated list of domain suffices 7755567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan */ 7855567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan public void setDomainSuffices(String entries) { 7955567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan mDomainSuffices = entries; 8055567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan } 8155567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan 8255567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan public String getDomainSuffices() { 8355567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan return mDomainSuffices; 8455567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan } 8555567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan 8655567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan /** 8755567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan * Sets the routing info for this VPN connection. 8855567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan * 8955567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan * @param entries a comma-separated list of routes; each entry is in the 9055567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan * format of "(network address)/(network mask)" 9155567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan */ 9255567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan public void setRouteList(String entries) { 9355567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan mRouteList = entries; 9455567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan } 9555567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan 9655567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan public String getRouteList() { 9755567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan return mRouteList; 9855567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan } 9955567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan 1004c424d61c72af64b4fa1da5e1c52eaebf60fe36eHung-ying Tyan public void setSavedUsername(String name) { 1014c424d61c72af64b4fa1da5e1c52eaebf60fe36eHung-ying Tyan mSavedUsername = name; 1024c424d61c72af64b4fa1da5e1c52eaebf60fe36eHung-ying Tyan } 1034c424d61c72af64b4fa1da5e1c52eaebf60fe36eHung-ying Tyan 1044c424d61c72af64b4fa1da5e1c52eaebf60fe36eHung-ying Tyan public String getSavedUsername() { 1054c424d61c72af64b4fa1da5e1c52eaebf60fe36eHung-ying Tyan return mSavedUsername; 1064c424d61c72af64b4fa1da5e1c52eaebf60fe36eHung-ying Tyan } 1074c424d61c72af64b4fa1da5e1c52eaebf60fe36eHung-ying Tyan 10855567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan public void setState(VpnState state) { 10955567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan mState = state; 11055567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan } 11155567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan 11255567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan public VpnState getState() { 11355567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan return ((mState == null) ? VpnState.IDLE : mState); 11455567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan } 11555567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan 11655567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan public boolean isIdle() { 11755567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan return (mState == VpnState.IDLE); 11855567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan } 11955567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan 12055567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan /** 12155567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan * Returns whether this profile is custom made (as opposed to being 12255567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan * created by provided user interface). 12355567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan */ 12455567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan public boolean isCustomized() { 12555567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan return mIsCustomized; 12655567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan } 12755567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan 12855567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan /** 12955567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan * Returns the VPN type of the profile. 13055567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan */ 13155567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan public abstract VpnType getType(); 13255567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan 13355567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan void setCustomized(boolean customized) { 13455567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan mIsCustomized = customized; 13555567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan } 13655567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan 13755567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan protected void readFromParcel(Parcel in) { 13855567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan mName = in.readString(); 13955567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan mId = in.readString(); 1404c424d61c72af64b4fa1da5e1c52eaebf60fe36eHung-ying Tyan mServerName = in.readString(); 14155567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan mDomainSuffices = in.readString(); 14255567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan mRouteList = in.readString(); 1434c424d61c72af64b4fa1da5e1c52eaebf60fe36eHung-ying Tyan mSavedUsername = in.readString(); 14455567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan } 14555567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan 14655567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan public static final Parcelable.Creator<VpnProfile> CREATOR = 14755567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan new Parcelable.Creator<VpnProfile>() { 14855567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan public VpnProfile createFromParcel(Parcel in) { 14955567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan VpnType type = Enum.valueOf(VpnType.class, in.readString()); 15055567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan boolean customized = in.readInt() > 0; 15155567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan VpnProfile p = new VpnManager(null).createVpnProfile(type, 15255567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan customized); 15355567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan if (p == null) return null; 15455567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan p.readFromParcel(in); 15555567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan return p; 15655567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan } 15755567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan 15855567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan public VpnProfile[] newArray(int size) { 15955567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan return new VpnProfile[size]; 16055567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan } 16155567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan }; 16255567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan 16355567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan public void writeToParcel(Parcel parcel, int flags) { 16455567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan parcel.writeString(getType().toString()); 16555567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan parcel.writeInt(mIsCustomized ? 1 : 0); 16655567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan parcel.writeString(mName); 16755567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan parcel.writeString(mId); 1684c424d61c72af64b4fa1da5e1c52eaebf60fe36eHung-ying Tyan parcel.writeString(mServerName); 16955567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan parcel.writeString(mDomainSuffices); 17055567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan parcel.writeString(mRouteList); 1714c424d61c72af64b4fa1da5e1c52eaebf60fe36eHung-ying Tyan parcel.writeString(mSavedUsername); 17255567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan } 17355567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan 17455567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan public int describeContents() { 17555567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan return 0; 17655567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan } 17755567efca99de7242b118cf7bf13cc773b01941cHung-ying Tyan} 178