am 5306e0a8: Merge "SIP: add PEER_NOT_REACHABLE error feedback." into gingerbread

Merge commit '5306e0a85dabd4c18a7b3f81acc0f582f9429482' into gingerbread-plus-aosp

* commit '5306e0a85dabd4c18a7b3f81acc0f582f9429482':
  SIP: add PEER_NOT_REACHABLE error feedback.
This commit is contained in:
Hung-ying Tyan
2010-09-15 07:42:48 -07:00
committed by Android Git Automerger
4 changed files with 21 additions and 2 deletions

View File

@@ -1036,8 +1036,7 @@ class SipSessionGroup implements SipListener {
private void onError(Response response) {
int statusCode = response.getStatusCode();
if (!mInCall && ((statusCode == Response.TEMPORARILY_UNAVAILABLE)
|| (statusCode == Response.BUSY_HERE))) {
if (!mInCall && (statusCode == Response.BUSY_HERE)) {
endCallOnBusy();
} else {
onError(getErrorCode(statusCode), createErrorMessage(response));
@@ -1046,11 +1045,22 @@ class SipSessionGroup implements SipListener {
private SipErrorCode getErrorCode(int responseStatusCode) {
switch (responseStatusCode) {
case Response.TEMPORARILY_UNAVAILABLE:
case Response.FORBIDDEN:
case Response.GONE:
case Response.NOT_FOUND:
case Response.NOT_ACCEPTABLE:
case Response.NOT_ACCEPTABLE_HERE:
return SipErrorCode.PEER_NOT_REACHABLE;
case Response.REQUEST_URI_TOO_LONG:
case Response.ADDRESS_INCOMPLETE:
case Response.AMBIGUOUS:
return SipErrorCode.INVALID_REMOTE_URI;
case Response.REQUEST_TIMEOUT:
return SipErrorCode.TIME_OUT;
default:
if (responseStatusCode < 500) {
return SipErrorCode.CLIENT_ERROR;

View File

@@ -39,6 +39,7 @@ public abstract class Connection {
CONGESTION, /* outgoing call to congested network */
MMI, /* not presently used; dial() returns null */
INVALID_NUMBER, /* invalid dial string */
NUMBER_UNREACHABLE, /* cannot reach the peer */
INVALID_CREDENTIALS, /* invalid credentials */
TIMED_OUT, /* client timed out */
LOST_SIGNAL,

View File

@@ -606,6 +606,7 @@ public class SipPhone extends SipPhoneBase {
}
synchronized (SipPhone.class) {
setState(Call.State.DISCONNECTED);
mSipAudioCall.close();
mOwner.onConnectionEnded(SipConnection.this);
Log.v(LOG_TAG, "-------- connection ended: "
+ mPeer.getUriString() + ": "
@@ -822,6 +823,9 @@ public class SipPhone extends SipPhoneBase {
public void onError(SipAudioCall call, SipErrorCode errorCode,
String errorMessage) {
switch (errorCode) {
case PEER_NOT_REACHABLE:
onError(Connection.DisconnectCause.NUMBER_UNREACHABLE);
break;
case INVALID_REMOTE_URI:
onError(Connection.DisconnectCause.INVALID_NUMBER);
break;
@@ -839,6 +843,7 @@ public class SipPhone extends SipPhoneBase {
case SERVER_ERROR:
case CLIENT_ERROR:
default:
Log.w(LOG_TAG, "error: " + errorCode + ": " + errorMessage);
onError(Connection.DisconnectCause.ERROR_UNSPECIFIED);
}
}

View File

@@ -43,6 +43,9 @@ public enum SipErrorCode {
/** When the remote URI is not valid. */
INVALID_REMOTE_URI,
/** When the peer is not reachable. */
PEER_NOT_REACHABLE,
/** When invalid credentials are provided. */
INVALID_CREDENTIALS,