am 4565933f: Merge "SipService: deliver connectivity change to all sessions." into gingerbread

Merge commit '4565933f03a99750a333e97e95408c404984510f' into gingerbread-plus-aosp

* commit '4565933f03a99750a333e97e95408c404984510f':
  SipService: deliver connectivity change to all sessions.
This commit is contained in:
Hung-ying Tyan
2010-09-14 09:43:17 -07:00
committed by Android Git Automerger
4 changed files with 24 additions and 9 deletions

View File

@@ -404,6 +404,7 @@ public final class SipService extends ISipService.Stub {
public void onConnectivityChanged(boolean connected) public void onConnectivityChanged(boolean connected)
throws SipException { throws SipException {
mSipGroup.onConnectivityChanged();
if (connected) { if (connected) {
resetGroup(mLocalIp); resetGroup(mLocalIp);
if (mOpened) openToReceiveCalls(); if (mOpened) openToReceiveCalls();

View File

@@ -153,6 +153,13 @@ class SipSessionGroup implements SipListener {
mSessionMap.clear(); mSessionMap.clear();
} }
synchronized void onConnectivityChanged() {
for (SipSessionImpl s : mSessionMap.values()) {
s.onError(SipErrorCode.DATA_CONNECTION_LOST,
"data connection lost");
}
}
public SipProfile getLocalProfile() { public SipProfile getLocalProfile() {
return mLocalProfile; return mLocalProfile;
} }
@@ -210,10 +217,10 @@ class SipSessionGroup implements SipListener {
private synchronized SipSessionImpl getSipSession(EventObject event) { private synchronized SipSessionImpl getSipSession(EventObject event) {
String key = SipHelper.getCallId(event); String key = SipHelper.getCallId(event);
Log.d(TAG, " sesssion key from event: " + key); Log.d(TAG, "sesssion key from event: " + key);
Log.d(TAG, " active sessions:"); Log.d(TAG, "active sessions:");
for (String k : mSessionMap.keySet()) { for (String k : mSessionMap.keySet()) {
Log.d(TAG, " ..... '" + k + "': " + mSessionMap.get(k)); Log.d(TAG, " ..." + k + ": " + mSessionMap.get(k));
} }
SipSessionImpl session = mSessionMap.get(key); SipSessionImpl session = mSessionMap.get(key);
return ((session != null) ? session : mCallReceiverSession); return ((session != null) ? session : mCallReceiverSession);
@@ -222,7 +229,7 @@ class SipSessionGroup implements SipListener {
private synchronized void addSipSession(SipSessionImpl newSession) { private synchronized void addSipSession(SipSessionImpl newSession) {
removeSipSession(newSession); removeSipSession(newSession);
String key = newSession.getCallId(); String key = newSession.getCallId();
Log.d(TAG, " +++++ add a session with key: '" + key + "'"); Log.d(TAG, "+++ add a session with key: '" + key + "'");
mSessionMap.put(key, newSession); mSessionMap.put(key, newSession);
for (String k : mSessionMap.keySet()) { for (String k : mSessionMap.keySet()) {
Log.d(TAG, " ..... " + k + ": " + mSessionMap.get(k)); Log.d(TAG, " ..... " + k + ": " + mSessionMap.get(k));
@@ -998,7 +1005,8 @@ class SipSessionGroup implements SipListener {
onRegistrationFailed(errorCode, message); onRegistrationFailed(errorCode, message);
break; break;
default: default:
if (mInCall) { if ((errorCode != SipErrorCode.DATA_CONNECTION_LOST)
&& mInCall) {
fallbackToPreviousInCall(errorCode, message); fallbackToPreviousInCall(errorCode, message);
} else { } else {
endCallOnError(errorCode, message); endCallOnError(errorCode, message);

View File

@@ -635,9 +635,9 @@ public class SipPhone extends SipPhoneBase {
@Override @Override
protected void onError(DisconnectCause cause) { protected void onError(DisconnectCause cause) {
Log.w(LOG_TAG, "SIP error: " + cause); Log.w(LOG_TAG, "SIP error: " + cause);
if (mSipAudioCall.isInCall()) { if (mSipAudioCall.isInCall()
// Don't end the call when in call. && (cause != DisconnectCause.LOST_SIGNAL)) {
// TODO: how to deliver the error to PhoneApp // Don't end the call when in a call.
return; return;
} }
@@ -829,6 +829,9 @@ public class SipPhone extends SipPhoneBase {
case TRANSACTION_TERMINTED: case TRANSACTION_TERMINTED:
onError(Connection.DisconnectCause.TIMED_OUT); onError(Connection.DisconnectCause.TIMED_OUT);
break; break;
case DATA_CONNECTION_LOST:
onError(Connection.DisconnectCause.LOST_SIGNAL);
break;
case INVALID_CREDENTIALS: case INVALID_CREDENTIALS:
onError(Connection.DisconnectCause.INVALID_CREDENTIALS); onError(Connection.DisconnectCause.INVALID_CREDENTIALS);
break; break;

View File

@@ -47,5 +47,8 @@ public enum SipErrorCode {
INVALID_CREDENTIALS, INVALID_CREDENTIALS,
/** The client is in a transaction and cannot initiate a new one. */ /** The client is in a transaction and cannot initiate a new one. */
IN_PROGRESS; IN_PROGRESS,
/** When data connection is lost. */
DATA_CONNECTION_LOST;
} }