diff options
author | Hung-ying Tyan <tyanh@google.com> | 2010-10-03 20:35:02 +0800 |
---|---|---|
committer | Hung-ying Tyan <tyanh@google.com> | 2010-10-04 08:07:42 +0800 |
commit | 9ea96c6cade1f25d4d77dcbd24854df431548b36 (patch) | |
tree | 56652bb681e2ff930fedffcabe4bd2f748e831a7 /voip | |
parent | 624380a14def6c2acdb473e09c36139acbcefbf9 (diff) | |
download | frameworks_base-9ea96c6cade1f25d4d77dcbd24854df431548b36.zip frameworks_base-9ea96c6cade1f25d4d77dcbd24854df431548b36.tar.gz frameworks_base-9ea96c6cade1f25d4d77dcbd24854df431548b36.tar.bz2 |
SIP: minor fixes.
+ Log error instead of crashing app process in SipManager's ListenerRelay.
+ Terminate dialog and transaction in SipSessionGroup.reset().
+ Remove redundant reset() in SipSessionGroup.
Change-Id: Ifbf29d2c9607ffe1a1a50b0c131ee3a4e81a0d0e
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)); |