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