summaryrefslogtreecommitdiffstats
path: root/voip
diff options
context:
space:
mode:
authorHung-ying Tyan <tyanh@google.com>2010-09-14 21:28:12 +0800
committerHung-ying Tyan <tyanh@google.com>2010-09-14 21:36:10 +0800
commit13f6270eb14b409709c936b828e2a2fd40e427c4 (patch)
treeb295aa51786a830a101fe13c8a87cf39402ab33c /voip
parent99bf4e45c4566172189735b34b368b76660ca57a (diff)
downloadframeworks_base-13f6270eb14b409709c936b828e2a2fd40e427c4.zip
frameworks_base-13f6270eb14b409709c936b828e2a2fd40e427c4.tar.gz
frameworks_base-13f6270eb14b409709c936b828e2a2fd40e427c4.tar.bz2
SipAudioCall: use SipErrorCode instead of string in onError()
and fix callback in setListener(). Change-Id: Ic2622df992a2ad45cb1e3f71736f320897ae8fb3
Diffstat (limited to 'voip')
-rw-r--r--voip/java/android/net/sip/SipAudioCall.java7
-rw-r--r--voip/java/android/net/sip/SipAudioCallImpl.java69
2 files changed, 52 insertions, 24 deletions
diff --git a/voip/java/android/net/sip/SipAudioCall.java b/voip/java/android/net/sip/SipAudioCall.java
index 39083a5..1d1be69 100644
--- a/voip/java/android/net/sip/SipAudioCall.java
+++ b/voip/java/android/net/sip/SipAudioCall.java
@@ -88,10 +88,11 @@ public interface SipAudioCall {
* Called when an error occurs.
*
* @param call the call object that carries out the audio call
- * @param errorCode error code defined in {@link SipErrorCode}
+ * @param errorCode error code of this error
* @param errorMessage error message
*/
- void onError(SipAudioCall call, String errorCode, String errorMessage);
+ void onError(SipAudioCall call, SipErrorCode errorCode,
+ String errorMessage);
}
/**
@@ -125,7 +126,7 @@ public interface SipAudioCall {
public void onCallHeld(SipAudioCall call) {
onChanged(call);
}
- public void onError(SipAudioCall call, String errorCode,
+ public void onError(SipAudioCall call, SipErrorCode errorCode,
String errorMessage) {
onChanged(call);
}
diff --git a/voip/java/android/net/sip/SipAudioCallImpl.java b/voip/java/android/net/sip/SipAudioCallImpl.java
index 67ba97f..484eb1e 100644
--- a/voip/java/android/net/sip/SipAudioCallImpl.java
+++ b/voip/java/android/net/sip/SipAudioCallImpl.java
@@ -79,6 +79,9 @@ public class SipAudioCallImpl extends SipSessionAdapter
private WifiManager mWm;
private WifiManager.WifiLock mWifiHighPerfLock;
+ private SipErrorCode mErrorCode;
+ private String mErrorMessage;
+
public SipAudioCallImpl(Context context, SipProfile localProfile) {
mContext = context;
mLocalProfile = localProfile;
@@ -92,23 +95,33 @@ public class SipAudioCallImpl extends SipSessionAdapter
public void setListener(SipAudioCall.Listener listener,
boolean callbackImmediately) {
mListener = listener;
- if ((listener == null) || !callbackImmediately) return;
try {
- SipSessionState state = getState();
- switch (state) {
- case READY_TO_CALL:
- listener.onReadyToCall(this);
- break;
- case INCOMING_CALL:
- listener.onRinging(this, getPeerProfile(mSipSession));
- startRinging();
- break;
- case OUTGOING_CALL:
- listener.onCalling(this);
- break;
- default:
- listener.onError(this, SipErrorCode.CLIENT_ERROR.toString(),
- "wrong state to attach call: " + state);
+ if ((listener == null) || !callbackImmediately) {
+ // do nothing
+ } else if (mErrorCode != null) {
+ listener.onError(this, mErrorCode, mErrorMessage);
+ } else if (mInCall) {
+ if (mHold) {
+ listener.onCallHeld(this);
+ } else {
+ listener.onCallEstablished(this);
+ }
+ } else {
+ SipSessionState state = getState();
+ switch (state) {
+ case READY_TO_CALL:
+ listener.onReadyToCall(this);
+ break;
+ case INCOMING_CALL:
+ listener.onRinging(this, getPeerProfile(mSipSession));
+ break;
+ case OUTGOING_CALL:
+ listener.onCalling(this);
+ break;
+ case OUTGOING_CALL_RING_BACK:
+ listener.onRingingBack(this);
+ break;
+ }
}
} catch (Throwable t) {
Log.e(TAG, "setListener()", t);
@@ -135,6 +148,8 @@ public class SipAudioCallImpl extends SipSessionAdapter
mInCall = false;
mHold = false;
mSessionId = -1L;
+ mErrorCode = null;
+ mErrorMessage = null;
}
public synchronized SipProfile getLocalProfile() {
@@ -274,14 +289,20 @@ public class SipAudioCallImpl extends SipSessionAdapter
}
}
+ private SipErrorCode getErrorCode(String errorCode) {
+ return Enum.valueOf(SipErrorCode.class, errorCode);
+ }
+
@Override
public void onCallChangeFailed(ISipSession session, String errorCode,
String message) {
Log.d(TAG, "sip call change failed: " + message);
+ mErrorCode = getErrorCode(errorCode);
+ mErrorMessage = message;
Listener listener = mListener;
if (listener != null) {
try {
- listener.onError(SipAudioCallImpl.this, errorCode, message);
+ listener.onError(SipAudioCallImpl.this, mErrorCode, message);
} catch (Throwable t) {
Log.e(TAG, "onCallBusy()", t);
}
@@ -289,16 +310,20 @@ public class SipAudioCallImpl extends SipSessionAdapter
}
@Override
- public void onError(ISipSession session, String errorCode,
- String message) {
+ public void onError(ISipSession session, String errorCode, String message) {
Log.d(TAG, "sip session error: " + errorCode + ": " + message);
+ mErrorCode = getErrorCode(errorCode);
+ mErrorMessage = message;
synchronized (this) {
- if (!isInCall()) close(true);
+ if ((mErrorCode == SipErrorCode.DATA_CONNECTION_LOST)
+ || !isInCall()) {
+ close(true);
+ }
}
Listener listener = mListener;
if (listener != null) {
try {
- listener.onError(SipAudioCallImpl.this, errorCode, message);
+ listener.onError(SipAudioCallImpl.this, mErrorCode, message);
} catch (Throwable t) {
Log.e(TAG, "onError()", t);
}
@@ -311,6 +336,8 @@ public class SipAudioCallImpl extends SipSessionAdapter
try {
mPeerSd = new SdpSessionDescription(sessionDescription);
session.setListener(this);
+
+ if (getState() == SipSessionState.INCOMING_CALL) startRinging();
} catch (Throwable e) {
Log.e(TAG, "attachCall()", e);
throwSipException(e);