diff options
author | Hung-ying Tyan <tyanh@google.com> | 2010-10-03 22:49:09 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2010-10-03 22:49:09 -0700 |
commit | 51d2adab83837425dae8062b7ff2a5bd1e732dd9 (patch) | |
tree | f1610b9d036e36b6a2cf5ad14707a65fe73dc162 /voip | |
parent | 4fd446f7b7e55dec61f15bcba8f9984af49b9c31 (diff) | |
parent | 1f34ffd7e36de5d1a12d4a3901c3ac4e4e56cb99 (diff) | |
download | frameworks_base-51d2adab83837425dae8062b7ff2a5bd1e732dd9.zip frameworks_base-51d2adab83837425dae8062b7ff2a5bd1e732dd9.tar.gz frameworks_base-51d2adab83837425dae8062b7ff2a5bd1e732dd9.tar.bz2 |
am 1f34ffd7: am 5cab38ba: Merge "SIP: minor fixes." into gingerbread
Merge commit '1f34ffd7e36de5d1a12d4a3901c3ac4e4e56cb99'
* commit '1f34ffd7e36de5d1a12d4a3901c3ac4e4e56cb99':
SIP: minor fixes.
Diffstat (limited to 'voip')
-rw-r--r-- | voip/java/android/net/sip/SipManager.java | 9 | ||||
-rw-r--r-- | voip/java/com/android/server/sip/SipSessionGroup.java | 23 |
2 files changed, 25 insertions, 7 deletions
diff --git a/voip/java/android/net/sip/SipManager.java b/voip/java/android/net/sip/SipManager.java index a589fe9..bd859e8 100644 --- a/voip/java/android/net/sip/SipManager.java +++ b/voip/java/android/net/sip/SipManager.java @@ -23,6 +23,7 @@ import android.os.IBinder; import android.os.Looper; import android.os.RemoteException; import android.os.ServiceManager; +import android.util.Log; import java.text.ParseException; @@ -83,6 +84,8 @@ public class SipManager { /** Part of the incoming call intent. */ public static final String EXTRA_OFFER_SD = "android:sipOfferSD"; + private static final String TAG = "SipManager"; + private ISipService mSipService; private Context mContext; @@ -525,8 +528,10 @@ public class SipManager { return ((session == null) ? mUri : session.getLocalProfile().getUriString()); - } catch (RemoteException e) { - throw new RuntimeException(e); + } catch (Throwable e) { + // SipService died? SIP stack died? + Log.w(TAG, "getUri(): " + e); + return null; } } diff --git a/voip/java/com/android/server/sip/SipSessionGroup.java b/voip/java/com/android/server/sip/SipSessionGroup.java index c68fa1b..bc377cf 100644 --- a/voip/java/com/android/server/sip/SipSessionGroup.java +++ b/voip/java/com/android/server/sip/SipSessionGroup.java @@ -49,6 +49,7 @@ import javax.sip.DialogTerminatedEvent; import javax.sip.IOExceptionEvent; import javax.sip.InvalidArgumentException; import javax.sip.ListeningPoint; +import javax.sip.ObjectInUseException; import javax.sip.RequestEvent; import javax.sip.ResponseEvent; import javax.sip.ServerTransaction; @@ -415,10 +416,24 @@ class SipSessionGroup implements SipListener { mPeerProfile = null; mState = SipSession.State.READY_TO_CALL; mInviteReceived = null; + mPeerSessionDescription = null; + + if (mDialog != null) mDialog.delete(); mDialog = null; + + try { + if (mServerTransaction != null) mServerTransaction.terminate(); + } catch (ObjectInUseException e) { + // ignored + } mServerTransaction = null; + + try { + if (mClientTransaction != null) mClientTransaction.terminate(); + } catch (ObjectInUseException e) { + // ignored + } mClientTransaction = null; - mPeerSessionDescription = null; cancelSessionTimer(); } @@ -884,8 +899,8 @@ class SipSessionGroup implements SipListener { generateTag()); mDialog = mClientTransaction.getDialog(); addSipSession(this); - mProxy.onCalling(this); startSessionTimer(cmd.getTimeout()); + mProxy.onCalling(this); return true; } else if (evt instanceof RegisterCommand) { mState = SipSession.State.REGISTERING; @@ -964,8 +979,8 @@ class SipSessionGroup implements SipListener { // ring back for better UX if (mState == SipSession.State.OUTGOING_CALL) { mState = SipSession.State.OUTGOING_CALL_RING_BACK; - mProxy.onRingingBack(this); cancelSessionTimer(); + mProxy.onRingingBack(this); } return true; case Response.OK: @@ -1222,14 +1237,12 @@ class SipSessionGroup implements SipListener { } private void onRegistrationFailed(Throwable exception) { - reset(); exception = getRootCause(exception); onRegistrationFailed(getErrorCode(exception), exception.toString()); } private void onRegistrationFailed(Response response) { - reset(); int statusCode = response.getStatusCode(); onRegistrationFailed(getErrorCode(statusCode), createErrorMessage(response)); |