summaryrefslogtreecommitdiffstats
path: root/voip
diff options
context:
space:
mode:
authorHung-ying Tyan <tyanh@google.com>2010-10-03 22:49:09 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2010-10-03 22:49:09 -0700
commit51d2adab83837425dae8062b7ff2a5bd1e732dd9 (patch)
treef1610b9d036e36b6a2cf5ad14707a65fe73dc162 /voip
parent4fd446f7b7e55dec61f15bcba8f9984af49b9c31 (diff)
parent1f34ffd7e36de5d1a12d4a3901c3ac4e4e56cb99 (diff)
downloadframeworks_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.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));