SipAudioCall: use SipErrorCode instead of string in onError()

and fix callback in setListener().

Change-Id: Ic2622df992a2ad45cb1e3f71736f320897ae8fb3
This commit is contained in:
Hung-ying Tyan
2010-09-14 21:28:12 +08:00
parent 99bf4e45c4
commit 13f6270eb1
3 changed files with 54 additions and 26 deletions

View File

@@ -819,9 +819,9 @@ public class SipPhone extends SipPhoneBase {
}
@Override
public void onError(SipAudioCall call, String errorCode,
public void onError(SipAudioCall call, SipErrorCode errorCode,
String errorMessage) {
switch (Enum.valueOf(SipErrorCode.class, errorCode)) {
switch (errorCode) {
case INVALID_REMOTE_URI:
onError(Connection.DisconnectCause.INVALID_NUMBER);
break;

View File

@@ -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);
}

View File

@@ -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);