package info.kghost.android.openvpn;
import java.io.Serializable;
import android.os.Parcel;
import android.os.Parcelable;
/**
* A VPN profile. {@hide}
*/
public class OpenvpnProfile implements Parcelable, Serializable {
private static final long serialVersionUID = 1L;
private static final String PROTO_UDP = "udp";
private static final String PROTO_TCP = "tcp";
private String mName; // unique display name
private String mId; // unique identifier
private String mDomainSuffices; // space separated list
private String mRouteList; // space separated list
private String mSavedUsername;
// Standard Settings
private String mServerName; // VPN server name
private boolean mUserAuth = false;
private byte[] mCert;
private String mUserCert;
// Advanced Settings
private int mPort = 1194;
private String mProto = PROTO_UDP;
private boolean mUseCompLzo = false;
private String mNsCertType = "server";
private boolean mRedirectGateway = false;
private boolean mSupplyAddr = false;
private String mLocalAddr;
private String mRemoteAddr;
private String mCipher;
private int mKeySize;
private boolean mUseTlsAuth;
private String mTlsAuthKey;
private String mTlsAuthKeyDirection;
private String mExtra;
/** Sets a user-friendly name for this profile. */
public void setName(String name) {
mName = name;
}
public String getName() {
return mName;
}
/**
* Sets an ID for this profile. The caller should make sure the uniqueness
* of the ID.
*/
public void setId(String id) {
mId = id;
}
public String getId() {
return mId;
}
/**
* Sets the name of the VPN server. Used for DNS lookup.
*/
public void setServerName(String name) {
mServerName = name;
}
public String getServerName() {
return mServerName;
}
/**
* Sets the domain suffices for DNS resolution.
*
* @param entries
* a comma-separated list of domain suffices
*/
public void setDomainSuffices(String entries) {
mDomainSuffices = entries;
}
public String getDomainSuffices() {
return mDomainSuffices;
}
/**
* Sets the routing info for this VPN connection.
*
* @param entries
* a comma-separated list of routes; each entry is in the format
* of "(network address)/(network mask)"
*/
public void setRouteList(String entries) {
mRouteList = entries;
}
public String getRouteList() {
return mRouteList;
}
public void setSavedUsername(String name) {
mSavedUsername = name;
}
public String getSavedUsername() {
return mSavedUsername;
}
public static final Parcelable.Creator<OpenvpnProfile> CREATOR = new Parcelable.Creator<OpenvpnProfile>() {
public OpenvpnProfile createFromParcel(Parcel in) {
OpenvpnProfile p = new OpenvpnProfile();
p.readFromParcel(in);
return p;
}
public OpenvpnProfile[] newArray(int size) {
return new OpenvpnProfile[size];
}
};
public int describeContents() {
return 0;
}
public void setPort(String port) {
try {
mPort = Integer.parseInt(port);
} catch (NumberFormatException e) {
// no update
}
}
public String getPort() {
return Integer.toString(mPort);
}
public String getProto() {
return mProto;
}
public CharSequence[] getProtoList() {
String[] s = new String[2];
s[0] = PROTO_UDP;
s[1] = PROTO_TCP;
return s;
}
public void setProto(String p) {
if (p.contains(PROTO_TCP))
mProto = PROTO_TCP;
else if (p.contains(PROTO_UDP))
mProto = PROTO_UDP;
}
public boolean getUserAuth() {
return mUserAuth;
}
public void setUserAuth(boolean auth) {
mUserAuth = auth;
}
public byte[] getCertName() {
if (mCert != null && mCert.length == 0)
return null;
return mCert;
}
public void setCertName(byte[] name) {
mCert = name;
}
public String getUserCertName() {
return mUserCert;
}
public void setUserCertName(String name) {
mUserCert = name;
}
public void setUseCompLzo(boolean b) {
mUseCompLzo = b;
}
public boolean getUseCompLzo() {
return mUseCompLzo;
}
public String getNsCertType() {
return mNsCertType;
}
public void setNsCertType(String type) {
this.mNsCertType = type;
}
public void setRedirectGateway(boolean b) {
mRedirectGateway = b;
}
public boolean getRedirectGateway() {
return mRedirectGateway;
}
public void setSupplyAddr(boolean b) {
mSupplyAddr = b;
}
public boolean getSupplyAddr() {
return mSupplyAddr;
}
public void setLocalAddr(String addr) {
mLocalAddr = addr;
}
public String getLocalAddr() {
return mLocalAddr;
}
public void setRemoteAddr(String addr) {
mRemoteAddr = addr;
}
public String getRemoteAddr() {
return mRemoteAddr;
}
public void setCipher(String cipher) {
mCipher = cipher;
}
public String getCipher() {
return mCipher;
}
public void setKeySize(String keysize) {
try {
if (keysize.equals("0"))
mKeySize = 0;
else
mKeySize = Integer.parseInt(keysize);
} catch (NumberFormatException e) {
// no update
}
}
public String getKeySize() {
return Integer.toString(mKeySize);
}
public void setUseTlsAuth(boolean t) {
mUseTlsAuth = t;
}
public boolean getUseTlsAuth() {
return mUseTlsAuth;
}
public void setTlsAuthKey(String k) {
mTlsAuthKey = k;
}
public String getTlsAuthKey() {
return mTlsAuthKey;
}
public void setTlsAuthKeyDirection(String d) {
mTlsAuthKeyDirection = d;
}
public String getTlsAuthKeyDirection() {
return mTlsAuthKeyDirection;
}
public void setExtra(String extra) {
mExtra = extra;
}
public String getExtra() {
return mExtra;
}
protected void readFromParcel(Parcel in) {
mName = in.readString();
mId = in.readString();
mServerName = in.readString();
mDomainSuffices = in.readString();
mRouteList = in.readString();
mSavedUsername = in.readString();
mPort = in.readInt();
mProto = in.readString();
mUserAuth = in.readInt() == 1;
mCert = new byte[in.readInt()];
in.readByteArray(mCert);
mUserCert = in.readString();
mUseCompLzo = in.readInt() == 1;
mNsCertType = in.readString();
mRedirectGateway = in.readInt() == 1;
mSupplyAddr = in.readInt() == 1;
mLocalAddr = in.readString();
mRemoteAddr = in.readString();
mCipher = in.readString();
mKeySize = in.readInt();
mExtra = in.readString();
mUseTlsAuth = in.readInt() == 1;
mTlsAuthKey = in.readString();
mTlsAuthKeyDirection = in.readString();
}
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeString(mName);
parcel.writeString(mId);
parcel.writeString(mServerName);
parcel.writeString(mDomainSuffices);
parcel.writeString(mRouteList);
parcel.writeString(mSavedUsername);
parcel.writeInt(mPort);
parcel.writeString(mProto);
parcel.writeInt(mUserAuth ? 1 : 0);
if (mCert != null) {
parcel.writeInt(mCert.length);
parcel.writeByteArray(mCert);
} else {
parcel.writeInt(0);
parcel.writeByteArray(new byte[0]);
}
parcel.writeString(mUserCert);
parcel.writeInt(mUseCompLzo ? 1 : 0);
parcel.writeString(mNsCertType);
parcel.writeInt(mRedirectGateway ? 1 : 0);
parcel.writeInt(mSupplyAddr ? 1 : 0);
parcel.writeString(mLocalAddr);
parcel.writeString(mRemoteAddr);
parcel.writeString(mCipher);
parcel.writeInt(mKeySize);
parcel.writeString(mExtra);
parcel.writeInt(mUseTlsAuth ? 1 : 0);
parcel.writeString(mTlsAuthKey);
parcel.writeString(mTlsAuthKeyDirection);
}
}