diff options
author | Hung-ying Tyan <tyanh@google.com> | 2010-10-03 22:45:49 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2010-10-03 22:45:49 -0700 |
commit | 1f34ffd7e36de5d1a12d4a3901c3ac4e4e56cb99 (patch) | |
tree | 7d87618171ad661c5d7f19f8a389297d54e9de7a /voip | |
parent | 3d019a374fa41a11fb7b718770076e61235d1c45 (diff) | |
parent | 5cab38ba11d976c54f28f4bdbced78040cba1cbb (diff) | |
download | frameworks_base-1f34ffd7e36de5d1a12d4a3901c3ac4e4e56cb99.zip frameworks_base-1f34ffd7e36de5d1a12d4a3901c3ac4e4e56cb99.tar.gz frameworks_base-1f34ffd7e36de5d1a12d4a3901c3ac4e4e56cb99.tar.bz2 |
am 5cab38ba: Merge "SIP: minor fixes." into gingerbread
Merge commit '5cab38ba11d976c54f28f4bdbced78040cba1cbb' into gingerbread-plus-aosp
* commit '5cab38ba11d976c54f28f4bdbced78040cba1cbb':
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)); |