13adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan/* 23adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * Copyright (C) 2010 The Android Open Source Project 33adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * 43adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * Licensed under the Apache License, Version 2.0 (the "License"); 53adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * you may not use this file except in compliance with the License. 63adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * You may obtain a copy of the License at 73adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * 83adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * http://www.apache.org/licenses/LICENSE-2.0 93adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * 103adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * Unless required by applicable law or agreed to in writing, software 113adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * distributed under the License is distributed on an "AS IS" BASIS, 123adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * See the License for the specific language governing permissions and 143adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * limitations under the License. 153adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan */ 163adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 173adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyanpackage android.net.sip; 183adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 193adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyanimport android.os.RemoteException; 209329db04f13480ccdff013dcc00cdb96f12a921cWink Savilleimport android.telephony.Rlog; 213adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 223adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan/** 2316b441b4ad92c6a5cbc6f27cb3705eaaaaee20c1Scott Main * Represents a SIP session that is associated with a SIP dialog or a standalone 243adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * transaction not within a dialog. 2516b441b4ad92c6a5cbc6f27cb3705eaaaaee20c1Scott Main * <p>You can get a {@link SipSession} from {@link SipManager} with {@link 2616b441b4ad92c6a5cbc6f27cb3705eaaaaee20c1Scott Main * SipManager#createSipSession createSipSession()} (when initiating calls) or {@link 2716b441b4ad92c6a5cbc6f27cb3705eaaaaee20c1Scott Main * SipManager#getSessionFor getSessionFor()} (when receiving calls).</p> 283adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan */ 293adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyanpublic final class SipSession { 303adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan private static final String TAG = "SipSession"; 313adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 323adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** 3316b441b4ad92c6a5cbc6f27cb3705eaaaaee20c1Scott Main * Defines SIP session states, such as "registering", "outgoing call", and "in call". 343adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan */ 353adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public static class State { 363adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** When session is ready to initiate a call or transaction. */ 373adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public static final int READY_TO_CALL = 0; 383adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 393adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** When the registration request is sent out. */ 403adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public static final int REGISTERING = 1; 413adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 423adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** When the unregistration request is sent out. */ 433adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public static final int DEREGISTERING = 2; 443adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 453adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** When an INVITE request is received. */ 463adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public static final int INCOMING_CALL = 3; 473adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 483adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** When an OK response is sent for the INVITE request received. */ 493adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public static final int INCOMING_CALL_ANSWERING = 4; 503adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 513adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** When an INVITE request is sent. */ 523adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public static final int OUTGOING_CALL = 5; 533adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 543adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** When a RINGING response is received for the INVITE request sent. */ 553adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public static final int OUTGOING_CALL_RING_BACK = 6; 563adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 573adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** When a CANCEL request is sent for the INVITE request sent. */ 583adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public static final int OUTGOING_CALL_CANCELING = 7; 593adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 603adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** When a call is established. */ 613adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public static final int IN_CALL = 8; 623adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 633adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** When an OPTIONS request is sent. */ 643adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public static final int PINGING = 9; 653adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 66ceb525d85512bde884b0f01a3aa93f2943dcf5f3Hung-ying Tyan /** When ending a call. @hide */ 67ceb525d85512bde884b0f01a3aa93f2943dcf5f3Hung-ying Tyan public static final int ENDING_CALL = 10; 68ceb525d85512bde884b0f01a3aa93f2943dcf5f3Hung-ying Tyan 693adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** Not defined. */ 703adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public static final int NOT_DEFINED = 101; 713adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 723adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** 733adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * Converts the state to string. 743adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan */ 753adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public static String toString(int state) { 763adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan switch (state) { 773adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan case READY_TO_CALL: 783adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan return "READY_TO_CALL"; 793adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan case REGISTERING: 803adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan return "REGISTERING"; 813adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan case DEREGISTERING: 823adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan return "DEREGISTERING"; 833adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan case INCOMING_CALL: 843adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan return "INCOMING_CALL"; 853adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan case INCOMING_CALL_ANSWERING: 863adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan return "INCOMING_CALL_ANSWERING"; 873adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan case OUTGOING_CALL: 883adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan return "OUTGOING_CALL"; 893adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan case OUTGOING_CALL_RING_BACK: 903adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan return "OUTGOING_CALL_RING_BACK"; 913adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan case OUTGOING_CALL_CANCELING: 923adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan return "OUTGOING_CALL_CANCELING"; 933adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan case IN_CALL: 943adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan return "IN_CALL"; 953adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan case PINGING: 963adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan return "PINGING"; 973adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan default: 983adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan return "NOT_DEFINED"; 993adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 1003adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 1013adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 1023adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan private State() { 1033adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 1043adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 1053adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 1063adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** 10716b441b4ad92c6a5cbc6f27cb3705eaaaaee20c1Scott Main * Listener for events relating to a SIP session, such as when a session is being registered 10816b441b4ad92c6a5cbc6f27cb3705eaaaaee20c1Scott Main * ("on registering") or a call is outgoing ("on calling"). 10916b441b4ad92c6a5cbc6f27cb3705eaaaaee20c1Scott Main * <p>Many of these events are also received by {@link SipAudioCall.Listener}.</p> 1103adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan */ 1113adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public static class Listener { 1123adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** 1133adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * Called when an INVITE request is sent to initiate a new call. 1143adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * 1153adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @param session the session object that carries out the transaction 1163adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan */ 1173adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public void onCalling(SipSession session) { 1183adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 1193adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 1203adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** 1213adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * Called when an INVITE request is received. 1223adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * 1233adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @param session the session object that carries out the transaction 1243adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @param caller the SIP profile of the caller 1253adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @param sessionDescription the caller's session description 1263adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan */ 1273adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public void onRinging(SipSession session, SipProfile caller, 1283adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan String sessionDescription) { 1293adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 1303adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 1313adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** 1323adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * Called when a RINGING response is received for the INVITE request sent 1333adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * 1343adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @param session the session object that carries out the transaction 1353adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan */ 1363adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public void onRingingBack(SipSession session) { 1373adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 1383adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 1393adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** 1403adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * Called when the session is established. 1413adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * 1423adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @param session the session object that is associated with the dialog 1433adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @param sessionDescription the peer's session description 1443adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan */ 1453adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public void onCallEstablished(SipSession session, 1463adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan String sessionDescription) { 1473adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 1483adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 1493adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** 1503adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * Called when the session is terminated. 1513adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * 1523adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @param session the session object that is associated with the dialog 1533adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan */ 1543adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public void onCallEnded(SipSession session) { 1553adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 1563adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 1573adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** 1583adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * Called when the peer is busy during session initialization. 1593adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * 1603adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @param session the session object that carries out the transaction 1613adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan */ 1623adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public void onCallBusy(SipSession session) { 1633adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 1643adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 1653adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** 16622ecc3df834674605daf86f7edf20169b6ca800brepo sync * Called when the call is being transferred to a new one. 16722ecc3df834674605daf86f7edf20169b6ca800brepo sync * 16822ecc3df834674605daf86f7edf20169b6ca800brepo sync * @hide 16922ecc3df834674605daf86f7edf20169b6ca800brepo sync * @param newSession the new session that the call will be transferred to 17022ecc3df834674605daf86f7edf20169b6ca800brepo sync * @param sessionDescription the new peer's session description 17122ecc3df834674605daf86f7edf20169b6ca800brepo sync */ 17222ecc3df834674605daf86f7edf20169b6ca800brepo sync public void onCallTransferring(SipSession newSession, 17322ecc3df834674605daf86f7edf20169b6ca800brepo sync String sessionDescription) { 17422ecc3df834674605daf86f7edf20169b6ca800brepo sync } 17522ecc3df834674605daf86f7edf20169b6ca800brepo sync 17622ecc3df834674605daf86f7edf20169b6ca800brepo sync /** 1773adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * Called when an error occurs during session initialization and 1783adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * termination. 1793adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * 1803adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @param session the session object that carries out the transaction 1813adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @param errorCode error code defined in {@link SipErrorCode} 1823adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @param errorMessage error message 1833adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan */ 1843adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public void onError(SipSession session, int errorCode, 1853adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan String errorMessage) { 1863adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 1873adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 1883adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** 1893adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * Called when an error occurs during session modification negotiation. 1903adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * 1913adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @param session the session object that carries out the transaction 1923adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @param errorCode error code defined in {@link SipErrorCode} 1933adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @param errorMessage error message 1943adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan */ 1953adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public void onCallChangeFailed(SipSession session, int errorCode, 1963adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan String errorMessage) { 1973adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 1983adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 1993adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** 2003adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * Called when a registration request is sent. 2013adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * 2023adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @param session the session object that carries out the transaction 2033adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan */ 2043adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public void onRegistering(SipSession session) { 2053adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 2063adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 2073adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** 2083adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * Called when registration is successfully done. 2093adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * 2103adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @param session the session object that carries out the transaction 2113adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @param duration duration in second before the registration expires 2123adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan */ 2133adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public void onRegistrationDone(SipSession session, int duration) { 2143adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 2153adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 2163adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** 2173adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * Called when the registration fails. 2183adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * 2193adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @param session the session object that carries out the transaction 2203adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @param errorCode error code defined in {@link SipErrorCode} 2213adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @param errorMessage error message 2223adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan */ 2233adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public void onRegistrationFailed(SipSession session, int errorCode, 2243adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan String errorMessage) { 2253adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 2263adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 2273adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** 2283adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * Called when the registration gets timed out. 2293adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * 2303adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @param session the session object that carries out the transaction 2313adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan */ 2323adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public void onRegistrationTimeout(SipSession session) { 2333adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 2343adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 2353adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 2363adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan private final ISipSession mSession; 2373adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan private Listener mListener; 2383adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 2393adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan SipSession(ISipSession realSession) { 2403adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan mSession = realSession; 2413adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan if (realSession != null) { 2423adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan try { 2433adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan realSession.setListener(createListener()); 2443adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } catch (RemoteException e) { 2459329db04f13480ccdff013dcc00cdb96f12a921cWink Saville loge("SipSession.setListener:", e); 2463adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 2473adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 2483adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 2493adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 2503adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan SipSession(ISipSession realSession, Listener listener) { 2513adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan this(realSession); 2523adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan setListener(listener); 2533adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 2543adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 2553adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** 2563adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * Gets the IP address of the local host on which this SIP session runs. 2573adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * 2583adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @return the IP address of the local host 2593adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan */ 2603adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public String getLocalIp() { 2613adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan try { 2623adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan return mSession.getLocalIp(); 2633adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } catch (RemoteException e) { 2649329db04f13480ccdff013dcc00cdb96f12a921cWink Saville loge("getLocalIp:", e); 2653adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan return "127.0.0.1"; 2663adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 2673adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 2683adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 2693adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** 2703adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * Gets the SIP profile that this session is associated with. 2713adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * 2723adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @return the SIP profile that this session is associated with 2733adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan */ 2743adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public SipProfile getLocalProfile() { 2753adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan try { 2763adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan return mSession.getLocalProfile(); 2773adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } catch (RemoteException e) { 2789329db04f13480ccdff013dcc00cdb96f12a921cWink Saville loge("getLocalProfile:", e); 2793adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan return null; 2803adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 2813adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 2823adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 2833adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** 2843adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * Gets the SIP profile that this session is connected to. Only available 2853adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * when the session is associated with a SIP dialog. 2863adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * 2873adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @return the SIP profile that this session is connected to 2883adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan */ 2893adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public SipProfile getPeerProfile() { 2903adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan try { 2913adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan return mSession.getPeerProfile(); 2923adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } catch (RemoteException e) { 2939329db04f13480ccdff013dcc00cdb96f12a921cWink Saville loge("getPeerProfile:", e); 2943adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan return null; 2953adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 2963adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 2973adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 2983adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** 2993adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * Gets the session state. The value returned must be one of the states in 3004e22f5d6687c18440e2f38c7e242d66ad834d1d7Hung-ying Tyan * {@link State}. 3013adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * 3023adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @return the session state 3033adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan */ 3043adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public int getState() { 3053adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan try { 3063adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan return mSession.getState(); 3073adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } catch (RemoteException e) { 3089329db04f13480ccdff013dcc00cdb96f12a921cWink Saville loge("getState:", e); 3093adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan return State.NOT_DEFINED; 3103adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 3113adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 3123adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 3133adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** 3143adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * Checks if the session is in a call. 3153adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * 3163adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @return true if the session is in a call 3173adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan */ 3183adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public boolean isInCall() { 3193adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan try { 3203adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan return mSession.isInCall(); 3213adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } catch (RemoteException e) { 3229329db04f13480ccdff013dcc00cdb96f12a921cWink Saville loge("isInCall:", e); 3233adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan return false; 3243adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 3253adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 3263adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 3273adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** 3283adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * Gets the call ID of the session. 3293adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * 3303adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @return the call ID 3313adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan */ 3323adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public String getCallId() { 3333adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan try { 3343adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan return mSession.getCallId(); 3353adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } catch (RemoteException e) { 3369329db04f13480ccdff013dcc00cdb96f12a921cWink Saville loge("getCallId:", e); 3373adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan return null; 3383adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 3393adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 3403adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 3413adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 3423adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** 3433adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * Sets the listener to listen to the session events. A {@code SipSession} 3443adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * can only hold one listener at a time. Subsequent calls to this method 3453adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * override the previous listener. 3463adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * 3473adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @param listener to listen to the session events of this object 3483adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan */ 3493adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public void setListener(Listener listener) { 3503adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan mListener = listener; 3513adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 3523adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 3533adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 3543adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** 3553adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * Performs registration to the server specified by the associated local 3563adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * profile. The session listener is called back upon success or failure of 3573adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * registration. The method is only valid to call when the session state is 3584e22f5d6687c18440e2f38c7e242d66ad834d1d7Hung-ying Tyan * in {@link State#READY_TO_CALL}. 3593adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * 3603adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @param duration duration in second before the registration expires 3613adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @see Listener 3623adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan */ 3633adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public void register(int duration) { 3643adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan try { 3653adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan mSession.register(duration); 3663adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } catch (RemoteException e) { 3679329db04f13480ccdff013dcc00cdb96f12a921cWink Saville loge("register:", e); 3683adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 3693adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 3703adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 3713adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** 3723adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * Performs unregistration to the server specified by the associated local 3733adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * profile. Unregistration is technically the same as registration with zero 3743adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * expiration duration. The session listener is called back upon success or 3753adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * failure of unregistration. The method is only valid to call when the 3764e22f5d6687c18440e2f38c7e242d66ad834d1d7Hung-ying Tyan * session state is in {@link State#READY_TO_CALL}. 3773adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * 3783adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @see Listener 3793adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan */ 3803adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public void unregister() { 3813adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan try { 3823adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan mSession.unregister(); 3833adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } catch (RemoteException e) { 3849329db04f13480ccdff013dcc00cdb96f12a921cWink Saville loge("unregister:", e); 3853adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 3863adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 3873adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 3883adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** 3893adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * Initiates a call to the specified profile. The session listener is called 3903adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * back upon defined session events. The method is only valid to call when 3914e22f5d6687c18440e2f38c7e242d66ad834d1d7Hung-ying Tyan * the session state is in {@link State#READY_TO_CALL}. 3923adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * 3933adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @param callee the SIP profile to make the call to 3943adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @param sessionDescription the session description of this call 3953adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @param timeout the session will be timed out if the call is not 3963adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * established within {@code timeout} seconds. Default value (defined 3973adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * by SIP protocol) is used if {@code timeout} is zero or negative. 3983adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @see Listener 3993adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan */ 4003adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public void makeCall(SipProfile callee, String sessionDescription, 4013adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan int timeout) { 4023adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan try { 4033adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan mSession.makeCall(callee, sessionDescription, timeout); 4043adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } catch (RemoteException e) { 4059329db04f13480ccdff013dcc00cdb96f12a921cWink Saville loge("makeCall:", e); 4063adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 4073adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 4083adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 4093adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** 4103adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * Answers an incoming call with the specified session description. The 4113adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * method is only valid to call when the session state is in 4124e22f5d6687c18440e2f38c7e242d66ad834d1d7Hung-ying Tyan * {@link State#INCOMING_CALL}. 4133adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * 4143adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @param sessionDescription the session description to answer this call 4153adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @param timeout the session will be timed out if the call is not 4163adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * established within {@code timeout} seconds. Default value (defined 4173adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * by SIP protocol) is used if {@code timeout} is zero or negative. 4183adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan */ 4193adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public void answerCall(String sessionDescription, int timeout) { 4203adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan try { 4213adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan mSession.answerCall(sessionDescription, timeout); 4223adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } catch (RemoteException e) { 4239329db04f13480ccdff013dcc00cdb96f12a921cWink Saville loge("answerCall:", e); 4243adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 4253adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 4263adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 4273adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** 4283adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * Ends an established call, terminates an outgoing call or rejects an 4293adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * incoming call. The method is only valid to call when the session state is 4304e22f5d6687c18440e2f38c7e242d66ad834d1d7Hung-ying Tyan * in {@link State#IN_CALL}, 4314e22f5d6687c18440e2f38c7e242d66ad834d1d7Hung-ying Tyan * {@link State#INCOMING_CALL}, 4324e22f5d6687c18440e2f38c7e242d66ad834d1d7Hung-ying Tyan * {@link State#OUTGOING_CALL} or 4334e22f5d6687c18440e2f38c7e242d66ad834d1d7Hung-ying Tyan * {@link State#OUTGOING_CALL_RING_BACK}. 4343adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan */ 4353adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public void endCall() { 4363adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan try { 4373adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan mSession.endCall(); 4383adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } catch (RemoteException e) { 4399329db04f13480ccdff013dcc00cdb96f12a921cWink Saville loge("endCall:", e); 4403adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 4413adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 4423adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 4433adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan /** 4443adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * Changes the session description during a call. The method is only valid 4454e22f5d6687c18440e2f38c7e242d66ad834d1d7Hung-ying Tyan * to call when the session state is in {@link State#IN_CALL}. 4463adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * 4473adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @param sessionDescription the new session description 4483adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * @param timeout the session will be timed out if the call is not 4493adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * established within {@code timeout} seconds. Default value (defined 4503adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan * by SIP protocol) is used if {@code timeout} is zero or negative. 4513adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan */ 4523adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public void changeCall(String sessionDescription, int timeout) { 4533adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan try { 4543adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan mSession.changeCall(sessionDescription, timeout); 4553adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } catch (RemoteException e) { 4569329db04f13480ccdff013dcc00cdb96f12a921cWink Saville loge("changeCall:", e); 4573adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 4583adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 4593adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 4603adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan ISipSession getRealSession() { 4613adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan return mSession; 4623adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 4633adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 4643adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan private ISipSessionListener createListener() { 4653adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan return new ISipSessionListener.Stub() { 4669329db04f13480ccdff013dcc00cdb96f12a921cWink Saville @Override 4673adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public void onCalling(ISipSession session) { 4683adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan if (mListener != null) { 4693adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan mListener.onCalling(SipSession.this); 4703adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 4713adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 4723adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 4739329db04f13480ccdff013dcc00cdb96f12a921cWink Saville @Override 4743adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public void onRinging(ISipSession session, SipProfile caller, 4753adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan String sessionDescription) { 4763adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan if (mListener != null) { 4773adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan mListener.onRinging(SipSession.this, caller, 4783adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan sessionDescription); 4793adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 4803adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 4813adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 4829329db04f13480ccdff013dcc00cdb96f12a921cWink Saville @Override 4833adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public void onRingingBack(ISipSession session) { 4843adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan if (mListener != null) { 4853adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan mListener.onRingingBack(SipSession.this); 4863adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 4873adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 4883adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 4899329db04f13480ccdff013dcc00cdb96f12a921cWink Saville @Override 4903adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public void onCallEstablished(ISipSession session, 4913adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan String sessionDescription) { 4923adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan if (mListener != null) { 4933adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan mListener.onCallEstablished(SipSession.this, 4943adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan sessionDescription); 4953adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 4963adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 4973adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 4989329db04f13480ccdff013dcc00cdb96f12a921cWink Saville @Override 4993adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public void onCallEnded(ISipSession session) { 5003adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan if (mListener != null) { 5013adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan mListener.onCallEnded(SipSession.this); 5023adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 5033adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 5043adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 5059329db04f13480ccdff013dcc00cdb96f12a921cWink Saville @Override 5063adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public void onCallBusy(ISipSession session) { 5073adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan if (mListener != null) { 5083adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan mListener.onCallBusy(SipSession.this); 5093adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 5103adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 5113adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 5129329db04f13480ccdff013dcc00cdb96f12a921cWink Saville @Override 51322ecc3df834674605daf86f7edf20169b6ca800brepo sync public void onCallTransferring(ISipSession session, 51422ecc3df834674605daf86f7edf20169b6ca800brepo sync String sessionDescription) { 51522ecc3df834674605daf86f7edf20169b6ca800brepo sync if (mListener != null) { 51622ecc3df834674605daf86f7edf20169b6ca800brepo sync mListener.onCallTransferring( 51722ecc3df834674605daf86f7edf20169b6ca800brepo sync new SipSession(session, SipSession.this.mListener), 51822ecc3df834674605daf86f7edf20169b6ca800brepo sync sessionDescription); 51922ecc3df834674605daf86f7edf20169b6ca800brepo sync 52022ecc3df834674605daf86f7edf20169b6ca800brepo sync } 52122ecc3df834674605daf86f7edf20169b6ca800brepo sync } 52222ecc3df834674605daf86f7edf20169b6ca800brepo sync 5239329db04f13480ccdff013dcc00cdb96f12a921cWink Saville @Override 5243adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public void onCallChangeFailed(ISipSession session, int errorCode, 5253adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan String message) { 5263adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan if (mListener != null) { 5273adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan mListener.onCallChangeFailed(SipSession.this, errorCode, 5283adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan message); 5293adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 5303adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 5313adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 5329329db04f13480ccdff013dcc00cdb96f12a921cWink Saville @Override 5333adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public void onError(ISipSession session, int errorCode, String message) { 5343adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan if (mListener != null) { 5353adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan mListener.onError(SipSession.this, errorCode, message); 5363adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 5373adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 5383adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 5399329db04f13480ccdff013dcc00cdb96f12a921cWink Saville @Override 5403adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public void onRegistering(ISipSession session) { 5413adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan if (mListener != null) { 5423adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan mListener.onRegistering(SipSession.this); 5433adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 5443adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 5453adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 5469329db04f13480ccdff013dcc00cdb96f12a921cWink Saville @Override 5473adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public void onRegistrationDone(ISipSession session, int duration) { 5483adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan if (mListener != null) { 5493adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan mListener.onRegistrationDone(SipSession.this, duration); 5503adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 5513adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 5523adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 5539329db04f13480ccdff013dcc00cdb96f12a921cWink Saville @Override 5543adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public void onRegistrationFailed(ISipSession session, int errorCode, 5553adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan String message) { 5563adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan if (mListener != null) { 5573adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan mListener.onRegistrationFailed(SipSession.this, errorCode, 5583adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan message); 5593adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 5603adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 5613adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan 5629329db04f13480ccdff013dcc00cdb96f12a921cWink Saville @Override 5633adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan public void onRegistrationTimeout(ISipSession session) { 5643adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan if (mListener != null) { 5653adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan mListener.onRegistrationTimeout(SipSession.this); 5663adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 5673adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 5683adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan }; 5693adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan } 5709329db04f13480ccdff013dcc00cdb96f12a921cWink Saville 5719329db04f13480ccdff013dcc00cdb96f12a921cWink Saville private void loge(String s, Throwable t) { 5729329db04f13480ccdff013dcc00cdb96f12a921cWink Saville Rlog.e(TAG, s, t); 5739329db04f13480ccdff013dcc00cdb96f12a921cWink Saville } 5743adf1946e78b52686fa5458e24645b05da57dc22Hung-ying Tyan} 575