summaryrefslogtreecommitdiffstats
path: root/voip
diff options
context:
space:
mode:
authorHung-ying Tyan <tyanh@google.com>2010-10-03 20:35:02 +0800
committerHung-ying Tyan <tyanh@google.com>2010-10-04 08:07:42 +0800
commit9ea96c6cade1f25d4d77dcbd24854df431548b36 (patch)
tree56652bb681e2ff930fedffcabe4bd2f748e831a7 /voip
parent624380a14def6c2acdb473e09c36139acbcefbf9 (diff)
downloadframeworks_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.java9
-rw-r--r--voip/java/com/android/server/sip/SipSessionGroup.java23
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));