SipProfile.java revision 0f7de88cb9eef781117fa2f2b69ba2698237637e
1363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang/* 2363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Copyright (C) 2010 The Android Open Source Project 3363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 4363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Licensed under the Apache License, Version 2.0 (the "License"); 5363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * you may not use this file except in compliance with the License. 6363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * You may obtain a copy of the License at 7363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 8363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * http://www.apache.org/licenses/LICENSE-2.0 9363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 10363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Unless required by applicable law or agreed to in writing, software 11363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * distributed under the License is distributed on an "AS IS" BASIS, 12363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * See the License for the specific language governing permissions and 14363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * limitations under the License. 15363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 16363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 17363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wangpackage android.net.sip; 18363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 19363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wangimport android.os.Parcel; 20363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wangimport android.os.Parcelable; 21363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wangimport android.text.TextUtils; 22363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 23f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wangimport java.io.ObjectStreamException; 24363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wangimport java.io.Serializable; 25363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wangimport java.text.ParseException; 26363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wangimport javax.sip.InvalidArgumentException; 27363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wangimport javax.sip.ListeningPoint; 28363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wangimport javax.sip.PeerUnavailableException; 29363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wangimport javax.sip.SipFactory; 30363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wangimport javax.sip.address.Address; 31363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wangimport javax.sip.address.AddressFactory; 32363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wangimport javax.sip.address.SipURI; 33363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wangimport javax.sip.address.URI; 34363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 35363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang/** 3602b1d685cc287d7c53141872b3d80be4ee5dd59eScott Main * Defines a SIP profile, including a SIP account, domain and server information. 3702b1d685cc287d7c53141872b3d80be4ee5dd59eScott Main * <p>You can create a {@link SipProfile} using {@link 3802b1d685cc287d7c53141872b3d80be4ee5dd59eScott Main * SipProfile.Builder}. You can also retrieve one from a {@link SipSession}, using {@link 3902b1d685cc287d7c53141872b3d80be4ee5dd59eScott Main * SipSession#getLocalProfile} and {@link SipSession#getPeerProfile}.</p> 40363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 41cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyanpublic class SipProfile implements Parcelable, Serializable, Cloneable { 42363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private static final long serialVersionUID = 1L; 43363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private static final int DEFAULT_PORT = 5060; 44f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang private static final String TCP = "TCP"; 45f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang private static final String UDP = "UDP"; 46363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private Address mAddress; 47363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private String mProxyAddress; 48363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private String mPassword; 49363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private String mDomain; 50f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang private String mProtocol = UDP; 51363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private String mProfileName; 520f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang private String mAuthUserName; 53f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang private int mPort = DEFAULT_PORT; 54363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private boolean mSendKeepAlive = false; 55363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private boolean mAutoRegistration = true; 5660264b306453a3043442719b970f2edb3f46f51bHung-ying Tyan private transient int mCallingUid = 0; 57363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 58363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public static final Parcelable.Creator<SipProfile> CREATOR = 59363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang new Parcelable.Creator<SipProfile>() { 60363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public SipProfile createFromParcel(Parcel in) { 61363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return new SipProfile(in); 62363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 63363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 64363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public SipProfile[] newArray(int size) { 65363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return new SipProfile[size]; 66363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 67363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang }; 68363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 69363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 7002b1d685cc287d7c53141872b3d80be4ee5dd59eScott Main * Helper class for creating a {@link SipProfile}. 71363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 72363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public static class Builder { 73363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private AddressFactory mAddressFactory; 74363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private SipProfile mProfile = new SipProfile(); 75363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private SipURI mUri; 76363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private String mDisplayName; 77363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private String mProxyAddress; 78363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 79363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang { 80363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang try { 81363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mAddressFactory = 82363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang SipFactory.getInstance().createAddressFactory(); 83363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } catch (PeerUnavailableException e) { 84363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang throw new RuntimeException(e); 85363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 86363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 87363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 88363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 89cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan * Creates a builder based on the given profile. 90cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan */ 91cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan public Builder(SipProfile profile) { 92cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan if (profile == null) throw new NullPointerException(); 93cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan try { 94cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan mProfile = (SipProfile) profile.clone(); 95cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan } catch (CloneNotSupportedException e) { 96cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan throw new RuntimeException("should not occur", e); 97cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan } 98cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan mProfile.mAddress = null; 99cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan mUri = profile.getUri(); 100cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan mUri.setUserPassword(profile.getPassword()); 101cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan mDisplayName = profile.getDisplayName(); 102cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan mProxyAddress = profile.getProxyAddress(); 103f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang mProfile.mPort = profile.getPort(); 104cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan } 105cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan 106cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan /** 107363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Constructor. 108363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 109363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @param uriString the URI string as "sip:<user_name>@<domain>" 110363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @throws ParseException if the string is not a valid URI 111363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 112363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public Builder(String uriString) throws ParseException { 113363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang if (uriString == null) { 114363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang throw new NullPointerException("uriString cannot be null"); 115363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 116363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang URI uri = mAddressFactory.createURI(fix(uriString)); 117363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang if (uri instanceof SipURI) { 118363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mUri = (SipURI) uri; 119363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } else { 120363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang throw new ParseException(uriString + " is not a SIP URI", 0); 121363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 122363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mProfile.mDomain = mUri.getHost(); 123363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 124363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 125363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 126363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Constructor. 127363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 128363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @param username username of the SIP account 129363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @param serverDomain the SIP server domain; if the network address 130286bb5a00bdb9f0cb0815aef441ec72f231c84eaHung-ying Tyan * is different from the domain, use {@link #setOutboundProxy} to 131286bb5a00bdb9f0cb0815aef441ec72f231c84eaHung-ying Tyan * set server address 132363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @throws ParseException if the parameters are not valid 133363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 134363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public Builder(String username, String serverDomain) 135363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang throws ParseException { 136363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang if ((username == null) || (serverDomain == null)) { 137363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang throw new NullPointerException( 138363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang "username and serverDomain cannot be null"); 139363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 140363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mUri = mAddressFactory.createSipURI(username, serverDomain); 141363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mProfile.mDomain = serverDomain; 142363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 143363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 144363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private String fix(String uriString) { 145363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return (uriString.trim().toLowerCase().startsWith("sip:") 146363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang ? uriString 147363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang : "sip:" + uriString); 148363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 149363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 150363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 1510f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang * Sets the username used for authentication. 1520f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang * 1530f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang * @param name auth. name of the profile 1540f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang * @return this builder object 1550f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang * @hide // TODO: remove when we make it public 1560f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang */ 1570f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang public Builder setAuthUserName(String name) { 1580f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang mProfile.mAuthUserName = name; 1590f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang return this; 1600f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang } 1610f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang 1620f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang /** 163363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Sets the name of the profile. This name is given by user. 164363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 165363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @param name name of the profile 166363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return this builder object 167363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 168363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public Builder setProfileName(String name) { 169363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mProfile.mProfileName = name; 170363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return this; 171363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 172363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 173363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 174363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Sets the password of the SIP account 175363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 176363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @param password password of the SIP account 177363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return this builder object 178363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 179363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public Builder setPassword(String password) { 180363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mUri.setUserPassword(password); 181363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return this; 182363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 183363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 184363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 185363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Sets the port number of the server. By default, it is 5060. 186363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 187363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @param port port number of the server 188363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return this builder object 18999bf4e45c4566172189735b34b368b76660ca57aHung-ying Tyan * @throws IllegalArgumentException if the port number is out of range 190363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 19199bf4e45c4566172189735b34b368b76660ca57aHung-ying Tyan public Builder setPort(int port) throws IllegalArgumentException { 192f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang if ((port > 65535) || (port < 1000)) { 193eecf4a6f11129461088d620afadb6014edab3086Hung-ying Tyan throw new IllegalArgumentException("incorrect port arugment: " + port); 19499bf4e45c4566172189735b34b368b76660ca57aHung-ying Tyan } 195f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang mProfile.mPort = port; 196f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang return this; 197363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 198363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 199363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 200363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Sets the protocol used to connect to the SIP server. Currently, 201363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * only "UDP" and "TCP" are supported. 202363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 203363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @param protocol the protocol string 204363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return this builder object 20599bf4e45c4566172189735b34b368b76660ca57aHung-ying Tyan * @throws IllegalArgumentException if the protocol is not recognized 206363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 207363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public Builder setProtocol(String protocol) 20899bf4e45c4566172189735b34b368b76660ca57aHung-ying Tyan throws IllegalArgumentException { 209363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang if (protocol == null) { 210363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang throw new NullPointerException("protocol cannot be null"); 211363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 212363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang protocol = protocol.toUpperCase(); 213f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang if (!protocol.equals(UDP) && !protocol.equals(TCP)) { 21499bf4e45c4566172189735b34b368b76660ca57aHung-ying Tyan throw new IllegalArgumentException( 215363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang "unsupported protocol: " + protocol); 216363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 217363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mProfile.mProtocol = protocol; 218363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return this; 219363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 220363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 221363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 222363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Sets the outbound proxy of the SIP server. 223363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 224363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @param outboundProxy the network address of the outbound proxy 225363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return this builder object 226363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 227363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public Builder setOutboundProxy(String outboundProxy) { 228363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mProxyAddress = outboundProxy; 229363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return this; 230363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 231363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 232363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 233363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Sets the display name of the user. 234363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 235363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @param displayName display name of the user 236363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return this builder object 237363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 238363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public Builder setDisplayName(String displayName) { 239363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mDisplayName = displayName; 240363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return this; 241363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 242363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 243363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 244363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Sets the send keep-alive flag. 245363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 246363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @param flag true if sending keep-alive message is required, 247363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * false otherwise 248363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return this builder object 249363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 250363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public Builder setSendKeepAlive(boolean flag) { 251363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mProfile.mSendKeepAlive = flag; 252363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return this; 253363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 254363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 255363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 256363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 257363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Sets the auto. registration flag. 258363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 259363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @param flag true if the profile will be registered automatically, 260363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * false otherwise 261363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return this builder object 262363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 263363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public Builder setAutoRegistration(boolean flag) { 264363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mProfile.mAutoRegistration = flag; 265363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return this; 266363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 267363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 268363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 269363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Builds and returns the SIP profile object. 270363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 271363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return the profile object created 272363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 273363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public SipProfile build() { 274363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang // remove password from URI 275363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mProfile.mPassword = mUri.getUserPassword(); 276363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mUri.setUserPassword(null); 277363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang try { 278363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang if (!TextUtils.isEmpty(mProxyAddress)) { 279363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang SipURI uri = (SipURI) 280363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mAddressFactory.createURI(fix(mProxyAddress)); 281363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mProfile.mProxyAddress = uri.getHost(); 282f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang } else { 283f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang if (!mProfile.mProtocol.equals(UDP)) { 284f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang mUri.setTransportParam(mProfile.mProtocol); 285f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang } 286f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang if (mProfile.mPort != DEFAULT_PORT) { 287f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang mUri.setPort(mProfile.mPort); 288f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang } 289363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 290f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang mProfile.mAddress = mAddressFactory.createAddress( 291f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang mDisplayName, mUri); 292f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang } catch (InvalidArgumentException e) { 293f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang throw new RuntimeException(e); 294363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } catch (ParseException e) { 295363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang // must not occur 296363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang throw new RuntimeException(e); 297363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 298363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return mProfile; 299363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 300363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 301363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 302363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private SipProfile() { 303363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 304363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 305363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private SipProfile(Parcel in) { 306363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mAddress = (Address) in.readSerializable(); 307363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mProxyAddress = in.readString(); 308363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mPassword = in.readString(); 309363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mDomain = in.readString(); 310363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mProtocol = in.readString(); 311363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mProfileName = in.readString(); 312363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mSendKeepAlive = (in.readInt() == 0) ? false : true; 313363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mAutoRegistration = (in.readInt() == 0) ? false : true; 3145424c8dcacf1c227fe7deb0185510614122ab447Chung-yih Wang mCallingUid = in.readInt(); 315f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang mPort = in.readInt(); 3160f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang mAuthUserName = in.readString(); 317363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 318363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 31984a357bb6a8005e1c5e924e96a8ecf310e77c47cHung-ying Tyan @Override 320363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public void writeToParcel(Parcel out, int flags) { 321363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang out.writeSerializable(mAddress); 322363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang out.writeString(mProxyAddress); 323363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang out.writeString(mPassword); 324363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang out.writeString(mDomain); 325363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang out.writeString(mProtocol); 326363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang out.writeString(mProfileName); 327363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang out.writeInt(mSendKeepAlive ? 1 : 0); 328363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang out.writeInt(mAutoRegistration ? 1 : 0); 3295424c8dcacf1c227fe7deb0185510614122ab447Chung-yih Wang out.writeInt(mCallingUid); 330f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang out.writeInt(mPort); 3310f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang out.writeString(mAuthUserName); 332363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 333363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 33484a357bb6a8005e1c5e924e96a8ecf310e77c47cHung-ying Tyan @Override 335363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public int describeContents() { 336363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return 0; 337363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 338363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 339363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 340363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Gets the SIP URI of this profile. 341363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 342363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return the SIP URI of this profile 343286bb5a00bdb9f0cb0815aef441ec72f231c84eaHung-ying Tyan * @hide 344363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 345363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public SipURI getUri() { 346363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return (SipURI) mAddress.getURI(); 347363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 348363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 349363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 350363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Gets the SIP URI string of this profile. 351363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 352363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return the SIP URI string of this profile 353363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 354363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public String getUriString() { 355f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang // We need to return the sip uri domain instead of 356f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang // the SIP URI with transport, port information if 357f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang // the outbound proxy address exists. 358f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang if (!TextUtils.isEmpty(mProxyAddress)) { 359f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang return "sip:" + getUserName() + "@" + mDomain; 360f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang } 361f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang return getUri().toString(); 362363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 363363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 364363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 365363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Gets the SIP address of this profile. 366363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 367363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return the SIP address of this profile 368286bb5a00bdb9f0cb0815aef441ec72f231c84eaHung-ying Tyan * @hide 369363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 370363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public Address getSipAddress() { 371363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return mAddress; 372363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 373363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 374363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 375363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Gets the display name of the user. 376363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 377363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return the display name of the user 378363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 379363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public String getDisplayName() { 380363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return mAddress.getDisplayName(); 381363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 382363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 383363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 384363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Gets the username. 385363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 386363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return the username 387363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 388363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public String getUserName() { 389363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return getUri().getUser(); 390363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 391363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 392363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 3930f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang * Gets the username for authentication. If it is null, then the username 3940f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang * should be used in authentication instead. 3950f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang * 3960f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang * @return the auth. username 3970f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang * @hide // TODO: remove when we make it public 3980f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang */ 3990f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang public String getAuthUserName() { 4000f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang return mAuthUserName; 4010f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang } 4020f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang 4030f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang /** 404363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Gets the password. 405363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 406363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return the password 407363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 408363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public String getPassword() { 409363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return mPassword; 410363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 411363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 412363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 413363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Gets the SIP domain. 414363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 415363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return the SIP domain 416363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 417363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public String getSipDomain() { 418363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return mDomain; 419363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 420363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 421363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 422363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Gets the port number of the SIP server. 423363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 424363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return the port number of the SIP server 425363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 426363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public int getPort() { 427f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang return mPort; 428363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 429363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 430363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 431363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Gets the protocol used to connect to the server. 432363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 433363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return the protocol 434363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 435363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public String getProtocol() { 436363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return mProtocol; 437363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 438363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 439363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 440363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Gets the network address of the server outbound proxy. 441363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 442363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return the network address of the server outbound proxy 443363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 444363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public String getProxyAddress() { 445363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return mProxyAddress; 446363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 447363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 448363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 449363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Gets the (user-defined) name of the profile. 450363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 451363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return name of the profile 452363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 453363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public String getProfileName() { 454363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return mProfileName; 455363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 456363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 457363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 458363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Gets the flag of 'Sending keep-alive'. 459363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 460363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return the flag of sending SIP keep-alive messages. 461363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 462363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public boolean getSendKeepAlive() { 463363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return mSendKeepAlive; 464363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 465363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 466363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 467363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Gets the flag of 'Auto Registration'. 468363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 469363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return the flag of registering the profile automatically. 470363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 471363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public boolean getAutoRegistration() { 472363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return mAutoRegistration; 473363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 474cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan 475cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan /** 4765424c8dcacf1c227fe7deb0185510614122ab447Chung-yih Wang * Sets the calling process's Uid in the sip service. 4775424c8dcacf1c227fe7deb0185510614122ab447Chung-yih Wang * @hide 4785424c8dcacf1c227fe7deb0185510614122ab447Chung-yih Wang */ 4795424c8dcacf1c227fe7deb0185510614122ab447Chung-yih Wang public void setCallingUid(int uid) { 4805424c8dcacf1c227fe7deb0185510614122ab447Chung-yih Wang mCallingUid = uid; 4815424c8dcacf1c227fe7deb0185510614122ab447Chung-yih Wang } 4825424c8dcacf1c227fe7deb0185510614122ab447Chung-yih Wang 4835424c8dcacf1c227fe7deb0185510614122ab447Chung-yih Wang /** 4845424c8dcacf1c227fe7deb0185510614122ab447Chung-yih Wang * Gets the calling process's Uid in the sip settings. 4855424c8dcacf1c227fe7deb0185510614122ab447Chung-yih Wang * @hide 4865424c8dcacf1c227fe7deb0185510614122ab447Chung-yih Wang */ 4875424c8dcacf1c227fe7deb0185510614122ab447Chung-yih Wang public int getCallingUid() { 4885424c8dcacf1c227fe7deb0185510614122ab447Chung-yih Wang return mCallingUid; 4895424c8dcacf1c227fe7deb0185510614122ab447Chung-yih Wang } 490f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang 491f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang private Object readResolve() throws ObjectStreamException { 492f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang // For compatibility. 493f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang if (mPort == 0) mPort = DEFAULT_PORT; 494f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang return this; 495f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang } 496363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang} 497