198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang/* 298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * Copyright (C) 2010 The Android Open Source Project 398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * 498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * Licensed under the Apache License, Version 2.0 (the "License"); 598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * you may not use this file except in compliance with the License. 698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * You may obtain a copy of the License at 798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * 898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * http://www.apache.org/licenses/LICENSE-2.0 998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * 1098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * Unless required by applicable law or agreed to in writing, software 1198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * distributed under the License is distributed on an "AS IS" BASIS, 1298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * See the License for the specific language governing permissions and 1498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * limitations under the License. 1598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang */ 1698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 1798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wangpackage android.net.sip; 1898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 1998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wangimport android.os.Parcel; 2098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wangimport android.os.Parcelable; 2198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wangimport android.text.TextUtils; 2298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 232e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wangimport java.io.ObjectStreamException; 2498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wangimport java.io.Serializable; 2598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wangimport java.text.ParseException; 2698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wangimport javax.sip.InvalidArgumentException; 2798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wangimport javax.sip.ListeningPoint; 2898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wangimport javax.sip.PeerUnavailableException; 2998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wangimport javax.sip.SipFactory; 3098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wangimport javax.sip.address.Address; 3198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wangimport javax.sip.address.AddressFactory; 3298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wangimport javax.sip.address.SipURI; 3398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wangimport javax.sip.address.URI; 3498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 3598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang/** 3616b441b4ad92c6a5cbc6f27cb3705eaaaaee20c1Scott Main * Defines a SIP profile, including a SIP account, domain and server information. 3716b441b4ad92c6a5cbc6f27cb3705eaaaaee20c1Scott Main * <p>You can create a {@link SipProfile} using {@link 3816b441b4ad92c6a5cbc6f27cb3705eaaaaee20c1Scott Main * SipProfile.Builder}. You can also retrieve one from a {@link SipSession}, using {@link 3916b441b4ad92c6a5cbc6f27cb3705eaaaaee20c1Scott Main * SipSession#getLocalProfile} and {@link SipSession#getPeerProfile}.</p> 40b4074803f775e5a4616287804f3405fd17eecab3Joe Fernandez * 41b4074803f775e5a4616287804f3405fd17eecab3Joe Fernandez * <div class="special reference"> 42b4074803f775e5a4616287804f3405fd17eecab3Joe Fernandez * <h3>Developer Guides</h3> 43b4074803f775e5a4616287804f3405fd17eecab3Joe Fernandez * <p>For more information about using SIP, read the 44b4074803f775e5a4616287804f3405fd17eecab3Joe Fernandez * <a href="{@docRoot}guide/topics/network/sip.html">Session Initiation Protocol</a> 45b4074803f775e5a4616287804f3405fd17eecab3Joe Fernandez * developer guide.</p> 46b4074803f775e5a4616287804f3405fd17eecab3Joe Fernandez * </div> 4798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang */ 485fe3b0b82425192fc0079ccda44bc1c2747f2aecHung-ying Tyanpublic class SipProfile implements Parcelable, Serializable, Cloneable { 4998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang private static final long serialVersionUID = 1L; 5098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang private static final int DEFAULT_PORT = 5060; 512e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang private static final String TCP = "TCP"; 522e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang private static final String UDP = "UDP"; 5398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang private Address mAddress; 5498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang private String mProxyAddress; 5598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang private String mPassword; 5698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang private String mDomain; 572e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang private String mProtocol = UDP; 5898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang private String mProfileName; 591b666e24bacbe3695ca5fe2f996c177c3f10d5f0Chung-yih Wang private String mAuthUserName; 602e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang private int mPort = DEFAULT_PORT; 6198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang private boolean mSendKeepAlive = false; 6298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang private boolean mAutoRegistration = true; 638ea6eb25a01cc6429172655614ca4c560b2607d3Hung-ying Tyan private transient int mCallingUid = 0; 6498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 6598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang public static final Parcelable.Creator<SipProfile> CREATOR = 6698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang new Parcelable.Creator<SipProfile>() { 6798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang public SipProfile createFromParcel(Parcel in) { 6898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang return new SipProfile(in); 6998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 7098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 7198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang public SipProfile[] newArray(int size) { 7298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang return new SipProfile[size]; 7398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 7498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang }; 7598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 7698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang /** 7716b441b4ad92c6a5cbc6f27cb3705eaaaaee20c1Scott Main * Helper class for creating a {@link SipProfile}. 7898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang */ 7998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang public static class Builder { 8098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang private AddressFactory mAddressFactory; 8198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang private SipProfile mProfile = new SipProfile(); 8298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang private SipURI mUri; 8398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang private String mDisplayName; 8498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang private String mProxyAddress; 8598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 8698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang { 8798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang try { 8898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang mAddressFactory = 8998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang SipFactory.getInstance().createAddressFactory(); 9098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } catch (PeerUnavailableException e) { 9198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang throw new RuntimeException(e); 9298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 9398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 9498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 9598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang /** 965fe3b0b82425192fc0079ccda44bc1c2747f2aecHung-ying Tyan * Creates a builder based on the given profile. 975fe3b0b82425192fc0079ccda44bc1c2747f2aecHung-ying Tyan */ 985fe3b0b82425192fc0079ccda44bc1c2747f2aecHung-ying Tyan public Builder(SipProfile profile) { 995fe3b0b82425192fc0079ccda44bc1c2747f2aecHung-ying Tyan if (profile == null) throw new NullPointerException(); 1005fe3b0b82425192fc0079ccda44bc1c2747f2aecHung-ying Tyan try { 1015fe3b0b82425192fc0079ccda44bc1c2747f2aecHung-ying Tyan mProfile = (SipProfile) profile.clone(); 1025fe3b0b82425192fc0079ccda44bc1c2747f2aecHung-ying Tyan } catch (CloneNotSupportedException e) { 1035fe3b0b82425192fc0079ccda44bc1c2747f2aecHung-ying Tyan throw new RuntimeException("should not occur", e); 1045fe3b0b82425192fc0079ccda44bc1c2747f2aecHung-ying Tyan } 1055fe3b0b82425192fc0079ccda44bc1c2747f2aecHung-ying Tyan mProfile.mAddress = null; 1065fe3b0b82425192fc0079ccda44bc1c2747f2aecHung-ying Tyan mUri = profile.getUri(); 1075fe3b0b82425192fc0079ccda44bc1c2747f2aecHung-ying Tyan mUri.setUserPassword(profile.getPassword()); 1085fe3b0b82425192fc0079ccda44bc1c2747f2aecHung-ying Tyan mDisplayName = profile.getDisplayName(); 1095fe3b0b82425192fc0079ccda44bc1c2747f2aecHung-ying Tyan mProxyAddress = profile.getProxyAddress(); 1102e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang mProfile.mPort = profile.getPort(); 1115fe3b0b82425192fc0079ccda44bc1c2747f2aecHung-ying Tyan } 1125fe3b0b82425192fc0079ccda44bc1c2747f2aecHung-ying Tyan 1135fe3b0b82425192fc0079ccda44bc1c2747f2aecHung-ying Tyan /** 11498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * Constructor. 11598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * 11698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @param uriString the URI string as "sip:<user_name>@<domain>" 11798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @throws ParseException if the string is not a valid URI 11898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang */ 11998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang public Builder(String uriString) throws ParseException { 12098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang if (uriString == null) { 12198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang throw new NullPointerException("uriString cannot be null"); 12298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 12398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang URI uri = mAddressFactory.createURI(fix(uriString)); 12498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang if (uri instanceof SipURI) { 12598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang mUri = (SipURI) uri; 12698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } else { 12798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang throw new ParseException(uriString + " is not a SIP URI", 0); 12898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 12998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang mProfile.mDomain = mUri.getHost(); 13098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 13198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 13298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang /** 13398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * Constructor. 13498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * 13598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @param username username of the SIP account 13698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @param serverDomain the SIP server domain; if the network address 137901503e1cf8b6cfac1540a22c325eb5cdd879429Hung-ying Tyan * is different from the domain, use {@link #setOutboundProxy} to 138901503e1cf8b6cfac1540a22c325eb5cdd879429Hung-ying Tyan * set server address 13998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @throws ParseException if the parameters are not valid 14098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang */ 14198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang public Builder(String username, String serverDomain) 14298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang throws ParseException { 14398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang if ((username == null) || (serverDomain == null)) { 14498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang throw new NullPointerException( 14598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang "username and serverDomain cannot be null"); 14698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 14798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang mUri = mAddressFactory.createSipURI(username, serverDomain); 14898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang mProfile.mDomain = serverDomain; 14998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 15098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 15198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang private String fix(String uriString) { 15298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang return (uriString.trim().toLowerCase().startsWith("sip:") 15398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang ? uriString 15498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang : "sip:" + uriString); 15598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 15698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 15798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang /** 1581b666e24bacbe3695ca5fe2f996c177c3f10d5f0Chung-yih Wang * Sets the username used for authentication. 1591b666e24bacbe3695ca5fe2f996c177c3f10d5f0Chung-yih Wang * 1601c1df003bcf63b473d1ed90bd771963381e1be93Chung-yih Wang * @param name authentication username of the profile 1611b666e24bacbe3695ca5fe2f996c177c3f10d5f0Chung-yih Wang * @return this builder object 1621b666e24bacbe3695ca5fe2f996c177c3f10d5f0Chung-yih Wang */ 1631b666e24bacbe3695ca5fe2f996c177c3f10d5f0Chung-yih Wang public Builder setAuthUserName(String name) { 1641b666e24bacbe3695ca5fe2f996c177c3f10d5f0Chung-yih Wang mProfile.mAuthUserName = name; 1651b666e24bacbe3695ca5fe2f996c177c3f10d5f0Chung-yih Wang return this; 1661b666e24bacbe3695ca5fe2f996c177c3f10d5f0Chung-yih Wang } 1671b666e24bacbe3695ca5fe2f996c177c3f10d5f0Chung-yih Wang 1681b666e24bacbe3695ca5fe2f996c177c3f10d5f0Chung-yih Wang /** 16998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * Sets the name of the profile. This name is given by user. 17098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * 17198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @param name name of the profile 17298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @return this builder object 17398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang */ 17498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang public Builder setProfileName(String name) { 17598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang mProfile.mProfileName = name; 17698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang return this; 17798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 17898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 17998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang /** 18098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * Sets the password of the SIP account 18198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * 18298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @param password password of the SIP account 18398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @return this builder object 18498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang */ 18598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang public Builder setPassword(String password) { 18698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang mUri.setUserPassword(password); 18798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang return this; 18898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 18998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 19098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang /** 19198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * Sets the port number of the server. By default, it is 5060. 19298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * 19398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @param port port number of the server 19498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @return this builder object 1951ab079168ccc185408a8691c6b804021d79f7376Hung-ying Tyan * @throws IllegalArgumentException if the port number is out of range 19698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang */ 1971ab079168ccc185408a8691c6b804021d79f7376Hung-ying Tyan public Builder setPort(int port) throws IllegalArgumentException { 1982e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang if ((port > 65535) || (port < 1000)) { 19990189114df094fb8170c26f8385ff956175ab58cHung-ying Tyan throw new IllegalArgumentException("incorrect port arugment: " + port); 2001ab079168ccc185408a8691c6b804021d79f7376Hung-ying Tyan } 2012e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang mProfile.mPort = port; 2022e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang return this; 20398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 20498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 20598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang /** 20698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * Sets the protocol used to connect to the SIP server. Currently, 20798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * only "UDP" and "TCP" are supported. 20898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * 20998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @param protocol the protocol string 21098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @return this builder object 2111ab079168ccc185408a8691c6b804021d79f7376Hung-ying Tyan * @throws IllegalArgumentException if the protocol is not recognized 21298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang */ 21398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang public Builder setProtocol(String protocol) 2141ab079168ccc185408a8691c6b804021d79f7376Hung-ying Tyan throws IllegalArgumentException { 21598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang if (protocol == null) { 21698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang throw new NullPointerException("protocol cannot be null"); 21798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 21898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang protocol = protocol.toUpperCase(); 2192e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang if (!protocol.equals(UDP) && !protocol.equals(TCP)) { 2201ab079168ccc185408a8691c6b804021d79f7376Hung-ying Tyan throw new IllegalArgumentException( 22198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang "unsupported protocol: " + protocol); 22298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 22398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang mProfile.mProtocol = protocol; 22498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang return this; 22598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 22698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 22798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang /** 22898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * Sets the outbound proxy of the SIP server. 22998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * 23098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @param outboundProxy the network address of the outbound proxy 23198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @return this builder object 23298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang */ 23398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang public Builder setOutboundProxy(String outboundProxy) { 23498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang mProxyAddress = outboundProxy; 23598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang return this; 23698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 23798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 23898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang /** 23998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * Sets the display name of the user. 24098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * 24198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @param displayName display name of the user 24298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @return this builder object 24398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang */ 24498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang public Builder setDisplayName(String displayName) { 24598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang mDisplayName = displayName; 24698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang return this; 24798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 24898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 24998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang /** 25098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * Sets the send keep-alive flag. 25198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * 25298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @param flag true if sending keep-alive message is required, 25398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * false otherwise 25498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @return this builder object 25598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang */ 25698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang public Builder setSendKeepAlive(boolean flag) { 25798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang mProfile.mSendKeepAlive = flag; 25898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang return this; 25998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 26098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 26198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 26298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang /** 26398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * Sets the auto. registration flag. 26498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * 26598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @param flag true if the profile will be registered automatically, 26698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * false otherwise 26798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @return this builder object 26898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang */ 26998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang public Builder setAutoRegistration(boolean flag) { 27098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang mProfile.mAutoRegistration = flag; 27198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang return this; 27298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 27398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 27498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang /** 27598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * Builds and returns the SIP profile object. 27698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * 27798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @return the profile object created 27898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang */ 27998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang public SipProfile build() { 28098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang // remove password from URI 28198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang mProfile.mPassword = mUri.getUserPassword(); 28298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang mUri.setUserPassword(null); 28398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang try { 28498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang if (!TextUtils.isEmpty(mProxyAddress)) { 28598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang SipURI uri = (SipURI) 28698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang mAddressFactory.createURI(fix(mProxyAddress)); 28798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang mProfile.mProxyAddress = uri.getHost(); 2882e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang } else { 2892e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang if (!mProfile.mProtocol.equals(UDP)) { 2902e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang mUri.setTransportParam(mProfile.mProtocol); 2912e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang } 2922e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang if (mProfile.mPort != DEFAULT_PORT) { 2932e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang mUri.setPort(mProfile.mPort); 2942e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang } 29598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 2962e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang mProfile.mAddress = mAddressFactory.createAddress( 2972e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang mDisplayName, mUri); 2982e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang } catch (InvalidArgumentException e) { 2992e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang throw new RuntimeException(e); 30098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } catch (ParseException e) { 30198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang // must not occur 30298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang throw new RuntimeException(e); 30398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 30498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang return mProfile; 30598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 30698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 30798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 30898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang private SipProfile() { 30998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 31098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 31198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang private SipProfile(Parcel in) { 31298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang mAddress = (Address) in.readSerializable(); 31398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang mProxyAddress = in.readString(); 31498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang mPassword = in.readString(); 31598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang mDomain = in.readString(); 31698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang mProtocol = in.readString(); 31798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang mProfileName = in.readString(); 31898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang mSendKeepAlive = (in.readInt() == 0) ? false : true; 31998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang mAutoRegistration = (in.readInt() == 0) ? false : true; 320bfe4c0e1cdd340ca8a3d337305742d9108d0f2a5Chung-yih Wang mCallingUid = in.readInt(); 3212e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang mPort = in.readInt(); 3221b666e24bacbe3695ca5fe2f996c177c3f10d5f0Chung-yih Wang mAuthUserName = in.readString(); 32398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 32498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 3253adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan @Override 32698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang public void writeToParcel(Parcel out, int flags) { 32798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang out.writeSerializable(mAddress); 32898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang out.writeString(mProxyAddress); 32998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang out.writeString(mPassword); 33098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang out.writeString(mDomain); 33198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang out.writeString(mProtocol); 33298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang out.writeString(mProfileName); 33398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang out.writeInt(mSendKeepAlive ? 1 : 0); 33498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang out.writeInt(mAutoRegistration ? 1 : 0); 335bfe4c0e1cdd340ca8a3d337305742d9108d0f2a5Chung-yih Wang out.writeInt(mCallingUid); 3362e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang out.writeInt(mPort); 3371b666e24bacbe3695ca5fe2f996c177c3f10d5f0Chung-yih Wang out.writeString(mAuthUserName); 33898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 33998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 3403adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan @Override 34198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang public int describeContents() { 34298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang return 0; 34398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 34498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 34598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang /** 34698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * Gets the SIP URI of this profile. 34798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * 34898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @return the SIP URI of this profile 349901503e1cf8b6cfac1540a22c325eb5cdd879429Hung-ying Tyan * @hide 35098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang */ 35198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang public SipURI getUri() { 35298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang return (SipURI) mAddress.getURI(); 35398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 35498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 35598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang /** 35698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * Gets the SIP URI string of this profile. 35798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * 35898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @return the SIP URI string of this profile 35998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang */ 36098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang public String getUriString() { 3612e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang // We need to return the sip uri domain instead of 3622e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang // the SIP URI with transport, port information if 3632e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang // the outbound proxy address exists. 3642e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang if (!TextUtils.isEmpty(mProxyAddress)) { 3652e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang return "sip:" + getUserName() + "@" + mDomain; 3662e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang } 3672e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang return getUri().toString(); 36898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 36998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 37098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang /** 37198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * Gets the SIP address of this profile. 37298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * 37398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @return the SIP address of this profile 374901503e1cf8b6cfac1540a22c325eb5cdd879429Hung-ying Tyan * @hide 37598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang */ 37698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang public Address getSipAddress() { 37798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang return mAddress; 37898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 37998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 38098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang /** 38198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * Gets the display name of the user. 38298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * 38398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @return the display name of the user 38498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang */ 38598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang public String getDisplayName() { 38698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang return mAddress.getDisplayName(); 38798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 38898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 38998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang /** 39098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * Gets the username. 39198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * 39298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @return the username 39398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang */ 39498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang public String getUserName() { 39598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang return getUri().getUser(); 39698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 39798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 39898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang /** 3991b666e24bacbe3695ca5fe2f996c177c3f10d5f0Chung-yih Wang * Gets the username for authentication. If it is null, then the username 4001c1df003bcf63b473d1ed90bd771963381e1be93Chung-yih Wang * is used in authentication instead. 4011b666e24bacbe3695ca5fe2f996c177c3f10d5f0Chung-yih Wang * 4021c1df003bcf63b473d1ed90bd771963381e1be93Chung-yih Wang * @return the authentication username 4031c1df003bcf63b473d1ed90bd771963381e1be93Chung-yih Wang * @see #getUserName 4041b666e24bacbe3695ca5fe2f996c177c3f10d5f0Chung-yih Wang */ 4051b666e24bacbe3695ca5fe2f996c177c3f10d5f0Chung-yih Wang public String getAuthUserName() { 4061b666e24bacbe3695ca5fe2f996c177c3f10d5f0Chung-yih Wang return mAuthUserName; 4071b666e24bacbe3695ca5fe2f996c177c3f10d5f0Chung-yih Wang } 4081b666e24bacbe3695ca5fe2f996c177c3f10d5f0Chung-yih Wang 4091b666e24bacbe3695ca5fe2f996c177c3f10d5f0Chung-yih Wang /** 41098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * Gets the password. 41198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * 41298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @return the password 41398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang */ 41498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang public String getPassword() { 41598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang return mPassword; 41698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 41798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 41898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang /** 41998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * Gets the SIP domain. 42098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * 42198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @return the SIP domain 42298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang */ 42398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang public String getSipDomain() { 42498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang return mDomain; 42598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 42698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 42798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang /** 42898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * Gets the port number of the SIP server. 42998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * 43098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @return the port number of the SIP server 43198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang */ 43298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang public int getPort() { 4332e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang return mPort; 43498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 43598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 43698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang /** 43798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * Gets the protocol used to connect to the server. 43898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * 43998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @return the protocol 44098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang */ 44198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang public String getProtocol() { 44298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang return mProtocol; 44398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 44498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 44598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang /** 44698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * Gets the network address of the server outbound proxy. 44798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * 44898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @return the network address of the server outbound proxy 44998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang */ 45098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang public String getProxyAddress() { 45198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang return mProxyAddress; 45298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 45398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 45498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang /** 45598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * Gets the (user-defined) name of the profile. 45698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * 45798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @return name of the profile 45898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang */ 45998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang public String getProfileName() { 46098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang return mProfileName; 46198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 46298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 46398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang /** 46498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * Gets the flag of 'Sending keep-alive'. 46598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * 46698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @return the flag of sending SIP keep-alive messages. 46798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang */ 46898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang public boolean getSendKeepAlive() { 46998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang return mSendKeepAlive; 47098cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 47198cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang 47298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang /** 47398cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * Gets the flag of 'Auto Registration'. 47498cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * 47598cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang * @return the flag of registering the profile automatically. 47698cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang */ 47798cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang public boolean getAutoRegistration() { 47898cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang return mAutoRegistration; 47998cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang } 4805fe3b0b82425192fc0079ccda44bc1c2747f2aecHung-ying Tyan 4815fe3b0b82425192fc0079ccda44bc1c2747f2aecHung-ying Tyan /** 482bfe4c0e1cdd340ca8a3d337305742d9108d0f2a5Chung-yih Wang * Sets the calling process's Uid in the sip service. 483bfe4c0e1cdd340ca8a3d337305742d9108d0f2a5Chung-yih Wang * @hide 484bfe4c0e1cdd340ca8a3d337305742d9108d0f2a5Chung-yih Wang */ 485bfe4c0e1cdd340ca8a3d337305742d9108d0f2a5Chung-yih Wang public void setCallingUid(int uid) { 486bfe4c0e1cdd340ca8a3d337305742d9108d0f2a5Chung-yih Wang mCallingUid = uid; 487bfe4c0e1cdd340ca8a3d337305742d9108d0f2a5Chung-yih Wang } 488bfe4c0e1cdd340ca8a3d337305742d9108d0f2a5Chung-yih Wang 489bfe4c0e1cdd340ca8a3d337305742d9108d0f2a5Chung-yih Wang /** 490bfe4c0e1cdd340ca8a3d337305742d9108d0f2a5Chung-yih Wang * Gets the calling process's Uid in the sip settings. 491bfe4c0e1cdd340ca8a3d337305742d9108d0f2a5Chung-yih Wang * @hide 492bfe4c0e1cdd340ca8a3d337305742d9108d0f2a5Chung-yih Wang */ 493bfe4c0e1cdd340ca8a3d337305742d9108d0f2a5Chung-yih Wang public int getCallingUid() { 494bfe4c0e1cdd340ca8a3d337305742d9108d0f2a5Chung-yih Wang return mCallingUid; 495bfe4c0e1cdd340ca8a3d337305742d9108d0f2a5Chung-yih Wang } 4962e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang 4972e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang private Object readResolve() throws ObjectStreamException { 4982e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang // For compatibility. 4992e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang if (mPort == 0) mPort = DEFAULT_PORT; 5002e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang return this; 5012e45c0b8f84172a004df4e3a1f50dbf1235474ebChung-yih Wang } 50298cee0ce2354234e72bafb836864ec10a490ea4dChung-yih Wang} 503