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> 403aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * 413aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <div class="special reference"> 423aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <h3>Developer Guides</h3> 433aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <p>For more information about using SIP, read the 443aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <a href="{@docRoot}guide/topics/network/sip.html">Session Initiation Protocol</a> 453aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * developer guide.</p> 463aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * </div> 47363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 48cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyanpublic class SipProfile implements Parcelable, Serializable, Cloneable { 49363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private static final long serialVersionUID = 1L; 50363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private static final int DEFAULT_PORT = 5060; 51f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang private static final String TCP = "TCP"; 52f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang private static final String UDP = "UDP"; 53363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private Address mAddress; 54363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private String mProxyAddress; 55363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private String mPassword; 56363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private String mDomain; 57f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang private String mProtocol = UDP; 58363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private String mProfileName; 590f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang private String mAuthUserName; 60f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang private int mPort = DEFAULT_PORT; 61363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private boolean mSendKeepAlive = false; 62363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private boolean mAutoRegistration = true; 6360264b306453a3043442719b970f2edb3f46f51bHung-ying Tyan private transient int mCallingUid = 0; 64363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 65363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public static final Parcelable.Creator<SipProfile> CREATOR = 66363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang new Parcelable.Creator<SipProfile>() { 67363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public SipProfile createFromParcel(Parcel in) { 68363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return new SipProfile(in); 69363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 70363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 71363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public SipProfile[] newArray(int size) { 72363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return new SipProfile[size]; 73363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 74363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang }; 75363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 76363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 7702b1d685cc287d7c53141872b3d80be4ee5dd59eScott Main * Helper class for creating a {@link SipProfile}. 78363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 79363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public static class Builder { 80363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private AddressFactory mAddressFactory; 81363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private SipProfile mProfile = new SipProfile(); 82363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private SipURI mUri; 83363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private String mDisplayName; 84363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private String mProxyAddress; 85363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 86363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang { 87363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang try { 88363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mAddressFactory = 89363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang SipFactory.getInstance().createAddressFactory(); 90363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } catch (PeerUnavailableException e) { 91363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang throw new RuntimeException(e); 92363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 93363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 94363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 95363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 96cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan * Creates a builder based on the given profile. 97cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan */ 98cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan public Builder(SipProfile profile) { 99cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan if (profile == null) throw new NullPointerException(); 100cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan try { 101cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan mProfile = (SipProfile) profile.clone(); 102cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan } catch (CloneNotSupportedException e) { 103cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan throw new RuntimeException("should not occur", e); 104cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan } 105cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan mProfile.mAddress = null; 106cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan mUri = profile.getUri(); 107cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan mUri.setUserPassword(profile.getPassword()); 108cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan mDisplayName = profile.getDisplayName(); 109cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan mProxyAddress = profile.getProxyAddress(); 110f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang mProfile.mPort = profile.getPort(); 111cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan } 112cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan 113cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan /** 114363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Constructor. 115363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 116363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @param uriString the URI string as "sip:<user_name>@<domain>" 117363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @throws ParseException if the string is not a valid URI 118363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 119363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public Builder(String uriString) throws ParseException { 120363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang if (uriString == null) { 121363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang throw new NullPointerException("uriString cannot be null"); 122363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 123363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang URI uri = mAddressFactory.createURI(fix(uriString)); 124363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang if (uri instanceof SipURI) { 125363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mUri = (SipURI) uri; 126363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } else { 127363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang throw new ParseException(uriString + " is not a SIP URI", 0); 128363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 129363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mProfile.mDomain = mUri.getHost(); 130363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 131363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 132363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 133363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Constructor. 134363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 135363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @param username username of the SIP account 136363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @param serverDomain the SIP server domain; if the network address 137286bb5a00bdb9f0cb0815aef441ec72f231c84eaHung-ying Tyan * is different from the domain, use {@link #setOutboundProxy} to 138286bb5a00bdb9f0cb0815aef441ec72f231c84eaHung-ying Tyan * set server address 139363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @throws ParseException if the parameters are not valid 140363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 141363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public Builder(String username, String serverDomain) 142363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang throws ParseException { 143363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang if ((username == null) || (serverDomain == null)) { 144363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang throw new NullPointerException( 145363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang "username and serverDomain cannot be null"); 146363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 147363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mUri = mAddressFactory.createSipURI(username, serverDomain); 148363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mProfile.mDomain = serverDomain; 149363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 150363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 151363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private String fix(String uriString) { 152363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return (uriString.trim().toLowerCase().startsWith("sip:") 153363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang ? uriString 154363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang : "sip:" + uriString); 155363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 156363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 157363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 1580f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang * Sets the username used for authentication. 1590f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang * 1609e25df44631e3c7881a6816cf26f34ea24055c72Chung-yih Wang * @param name authentication username of the profile 1610f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang * @return this builder object 1620f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang */ 1630f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang public Builder setAuthUserName(String name) { 1640f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang mProfile.mAuthUserName = name; 1650f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang return this; 1660f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang } 1670f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang 1680f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang /** 169363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Sets the name of the profile. This name is given by user. 170363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 171363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @param name name of the profile 172363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return this builder object 173363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 174363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public Builder setProfileName(String name) { 175363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mProfile.mProfileName = name; 176363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return this; 177363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 178363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 179363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 180363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Sets the password of the SIP account 181363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 182363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @param password password of the SIP account 183363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return this builder object 184363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 185363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public Builder setPassword(String password) { 186363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mUri.setUserPassword(password); 187363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return this; 188363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 189363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 190363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 191363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Sets the port number of the server. By default, it is 5060. 192363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 193363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @param port port number of the server 194363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return this builder object 19599bf4e45c4566172189735b34b368b76660ca57aHung-ying Tyan * @throws IllegalArgumentException if the port number is out of range 196363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 19799bf4e45c4566172189735b34b368b76660ca57aHung-ying Tyan public Builder setPort(int port) throws IllegalArgumentException { 198f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang if ((port > 65535) || (port < 1000)) { 199eecf4a6f11129461088d620afadb6014edab3086Hung-ying Tyan throw new IllegalArgumentException("incorrect port arugment: " + port); 20099bf4e45c4566172189735b34b368b76660ca57aHung-ying Tyan } 201f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang mProfile.mPort = port; 202f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang return this; 203363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 204363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 205363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 206363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Sets the protocol used to connect to the SIP server. Currently, 207363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * only "UDP" and "TCP" are supported. 208363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 209363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @param protocol the protocol string 210363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return this builder object 21199bf4e45c4566172189735b34b368b76660ca57aHung-ying Tyan * @throws IllegalArgumentException if the protocol is not recognized 212363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 213363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public Builder setProtocol(String protocol) 21499bf4e45c4566172189735b34b368b76660ca57aHung-ying Tyan throws IllegalArgumentException { 215363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang if (protocol == null) { 216363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang throw new NullPointerException("protocol cannot be null"); 217363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 218363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang protocol = protocol.toUpperCase(); 219f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang if (!protocol.equals(UDP) && !protocol.equals(TCP)) { 22099bf4e45c4566172189735b34b368b76660ca57aHung-ying Tyan throw new IllegalArgumentException( 221363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang "unsupported protocol: " + protocol); 222363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 223363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mProfile.mProtocol = protocol; 224363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return this; 225363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 226363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 227363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 228363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Sets the outbound proxy of the SIP server. 229363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 230363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @param outboundProxy the network address of the outbound proxy 231363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return this builder object 232363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 233363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public Builder setOutboundProxy(String outboundProxy) { 234363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mProxyAddress = outboundProxy; 235363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return this; 236363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 237363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 238363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 239363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Sets the display name of the user. 240363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 241363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @param displayName display name of the user 242363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return this builder object 243363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 244363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public Builder setDisplayName(String displayName) { 245363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mDisplayName = displayName; 246363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return this; 247363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 248363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 249363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 250363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Sets the send keep-alive flag. 251363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 252363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @param flag true if sending keep-alive message is required, 253363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * false otherwise 254363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return this builder object 255363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 256363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public Builder setSendKeepAlive(boolean flag) { 257363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mProfile.mSendKeepAlive = flag; 258363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return this; 259363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 260363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 261363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 262363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 263363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Sets the auto. registration flag. 264363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 265363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @param flag true if the profile will be registered automatically, 266363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * false otherwise 267363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return this builder object 268363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 269363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public Builder setAutoRegistration(boolean flag) { 270363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mProfile.mAutoRegistration = flag; 271363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return this; 272363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 273363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 274363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 275363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Builds and returns the SIP profile object. 276363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 277363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return the profile object created 278363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 279363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public SipProfile build() { 280363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang // remove password from URI 281363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mProfile.mPassword = mUri.getUserPassword(); 282363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mUri.setUserPassword(null); 283363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang try { 284363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang if (!TextUtils.isEmpty(mProxyAddress)) { 285363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang SipURI uri = (SipURI) 286363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mAddressFactory.createURI(fix(mProxyAddress)); 287363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mProfile.mProxyAddress = uri.getHost(); 288f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang } else { 289f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang if (!mProfile.mProtocol.equals(UDP)) { 290f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang mUri.setTransportParam(mProfile.mProtocol); 291f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang } 292f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang if (mProfile.mPort != DEFAULT_PORT) { 293f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang mUri.setPort(mProfile.mPort); 294f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang } 295363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 296f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang mProfile.mAddress = mAddressFactory.createAddress( 297f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang mDisplayName, mUri); 298f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang } catch (InvalidArgumentException e) { 299f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang throw new RuntimeException(e); 300363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } catch (ParseException e) { 301363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang // must not occur 302363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang throw new RuntimeException(e); 303363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 304363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return mProfile; 305363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 306363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 307363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 308363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private SipProfile() { 309363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 310363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 311363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang private SipProfile(Parcel in) { 312363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mAddress = (Address) in.readSerializable(); 313363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mProxyAddress = in.readString(); 314363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mPassword = in.readString(); 315363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mDomain = in.readString(); 316363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mProtocol = in.readString(); 317363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mProfileName = in.readString(); 318363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mSendKeepAlive = (in.readInt() == 0) ? false : true; 319363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang mAutoRegistration = (in.readInt() == 0) ? false : true; 3205424c8dcacf1c227fe7deb0185510614122ab447Chung-yih Wang mCallingUid = in.readInt(); 321f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang mPort = in.readInt(); 3220f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang mAuthUserName = in.readString(); 323363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 324363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 32584a357bb6a8005e1c5e924e96a8ecf310e77c47cHung-ying Tyan @Override 326363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public void writeToParcel(Parcel out, int flags) { 327363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang out.writeSerializable(mAddress); 328363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang out.writeString(mProxyAddress); 329363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang out.writeString(mPassword); 330363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang out.writeString(mDomain); 331363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang out.writeString(mProtocol); 332363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang out.writeString(mProfileName); 333363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang out.writeInt(mSendKeepAlive ? 1 : 0); 334363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang out.writeInt(mAutoRegistration ? 1 : 0); 3355424c8dcacf1c227fe7deb0185510614122ab447Chung-yih Wang out.writeInt(mCallingUid); 336f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang out.writeInt(mPort); 3370f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang out.writeString(mAuthUserName); 338363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 339363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 34084a357bb6a8005e1c5e924e96a8ecf310e77c47cHung-ying Tyan @Override 341363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public int describeContents() { 342363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return 0; 343363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 344363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 345363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 346363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Gets the SIP URI of this profile. 347363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 348363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return the SIP URI of this profile 349286bb5a00bdb9f0cb0815aef441ec72f231c84eaHung-ying Tyan * @hide 350363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 351363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public SipURI getUri() { 352363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return (SipURI) mAddress.getURI(); 353363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 354363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 355363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 356363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Gets the SIP URI string of this profile. 357363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 358363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return the SIP URI string of this profile 359363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 360363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public String getUriString() { 361f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang // We need to return the sip uri domain instead of 362f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang // the SIP URI with transport, port information if 363f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang // the outbound proxy address exists. 364f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang if (!TextUtils.isEmpty(mProxyAddress)) { 365f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang return "sip:" + getUserName() + "@" + mDomain; 366f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang } 367f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang return getUri().toString(); 368363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 369363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 370363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 371363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Gets the SIP address of this profile. 372363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 373363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return the SIP address of this profile 374286bb5a00bdb9f0cb0815aef441ec72f231c84eaHung-ying Tyan * @hide 375363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 376363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public Address getSipAddress() { 377363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return mAddress; 378363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 379363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 380363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 381363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Gets the display name of the user. 382363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 383363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return the display name of the user 384363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 385363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public String getDisplayName() { 386363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return mAddress.getDisplayName(); 387363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 388363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 389363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 390363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Gets the username. 391363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 392363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return the username 393363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 394363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public String getUserName() { 395363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return getUri().getUser(); 396363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 397363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 398363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 3990f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang * Gets the username for authentication. If it is null, then the username 4009e25df44631e3c7881a6816cf26f34ea24055c72Chung-yih Wang * is used in authentication instead. 4010f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang * 4029e25df44631e3c7881a6816cf26f34ea24055c72Chung-yih Wang * @return the authentication username 4039e25df44631e3c7881a6816cf26f34ea24055c72Chung-yih Wang * @see #getUserName 4040f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang */ 4050f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang public String getAuthUserName() { 4060f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang return mAuthUserName; 4070f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang } 4080f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang 4090f7de88cb9eef781117fa2f2b69ba2698237637eChung-yih Wang /** 410363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Gets the password. 411363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 412363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return the password 413363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 414363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public String getPassword() { 415363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return mPassword; 416363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 417363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 418363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 419363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Gets the SIP domain. 420363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 421363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return the SIP domain 422363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 423363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public String getSipDomain() { 424363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return mDomain; 425363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 426363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 427363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 428363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Gets the port number of the SIP server. 429363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 430363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return the port number of the SIP server 431363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 432363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public int getPort() { 433f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang return mPort; 434363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 435363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 436363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 437363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Gets the protocol used to connect to the server. 438363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 439363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return the protocol 440363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 441363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public String getProtocol() { 442363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return mProtocol; 443363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 444363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 445363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 446363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Gets the network address of the server outbound proxy. 447363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 448363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return the network address of the server outbound proxy 449363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 450363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public String getProxyAddress() { 451363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return mProxyAddress; 452363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 453363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 454363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 455363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Gets the (user-defined) name of the profile. 456363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 457363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return name of the profile 458363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 459363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public String getProfileName() { 460363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return mProfileName; 461363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 462363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 463363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 464363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Gets the flag of 'Sending keep-alive'. 465363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 466363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return the flag of sending SIP keep-alive messages. 467363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 468363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public boolean getSendKeepAlive() { 469363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return mSendKeepAlive; 470363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 471363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang 472363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang /** 473363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * Gets the flag of 'Auto Registration'. 474363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * 475363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang * @return the flag of registering the profile automatically. 476363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang */ 477363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang public boolean getAutoRegistration() { 478363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang return mAutoRegistration; 479363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang } 480cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan 481cf95f5d26363d4cd3815d31f5798f932a7720c17Hung-ying Tyan /** 4825424c8dcacf1c227fe7deb0185510614122ab447Chung-yih Wang * Sets the calling process's Uid in the sip service. 4835424c8dcacf1c227fe7deb0185510614122ab447Chung-yih Wang * @hide 4845424c8dcacf1c227fe7deb0185510614122ab447Chung-yih Wang */ 4855424c8dcacf1c227fe7deb0185510614122ab447Chung-yih Wang public void setCallingUid(int uid) { 4865424c8dcacf1c227fe7deb0185510614122ab447Chung-yih Wang mCallingUid = uid; 4875424c8dcacf1c227fe7deb0185510614122ab447Chung-yih Wang } 4885424c8dcacf1c227fe7deb0185510614122ab447Chung-yih Wang 4895424c8dcacf1c227fe7deb0185510614122ab447Chung-yih Wang /** 4905424c8dcacf1c227fe7deb0185510614122ab447Chung-yih Wang * Gets the calling process's Uid in the sip settings. 4915424c8dcacf1c227fe7deb0185510614122ab447Chung-yih Wang * @hide 4925424c8dcacf1c227fe7deb0185510614122ab447Chung-yih Wang */ 4935424c8dcacf1c227fe7deb0185510614122ab447Chung-yih Wang public int getCallingUid() { 4945424c8dcacf1c227fe7deb0185510614122ab447Chung-yih Wang return mCallingUid; 4955424c8dcacf1c227fe7deb0185510614122ab447Chung-yih Wang } 496f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang 497f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang private Object readResolve() throws ObjectStreamException { 498f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang // For compatibility. 499f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang if (mPort == 0) mPort = DEFAULT_PORT; 500f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang return this; 501f053292d7a46c30abbe6f12ca04dbc03ec964d80Chung-yih Wang } 502363c2ab82cca4f095e9e0c8465e28f6d27a24bf8Chung-yih Wang} 503