diff options
Diffstat (limited to 'voip')
-rw-r--r-- | voip/java/com/android/server/sip/SipService.java | 62 | ||||
-rw-r--r-- | voip/java/com/android/server/sip/SipSessionGroup.java | 9 | ||||
-rw-r--r-- | voip/jni/rtp/AudioGroup.cpp | 9 |
3 files changed, 43 insertions, 37 deletions
diff --git a/voip/java/com/android/server/sip/SipService.java b/voip/java/com/android/server/sip/SipService.java index c553947..f417ddd 100644 --- a/voip/java/com/android/server/sip/SipService.java +++ b/voip/java/com/android/server/sip/SipService.java @@ -442,6 +442,7 @@ public final class SipService extends ISipService.Stub { if (wasConnected) { mLocalIp = null; + stopPortMappingMeasurement(); for (SipSessionGroupExt group : mSipGroups.values()) { group.onConnectivityChanged(false); } @@ -457,7 +458,6 @@ public final class SipService extends ISipService.Stub { if (isWifi && (mWifiLock != null)) stopWifiScanner(); } else { mMyWakeLock.reset(); // in case there's a leak - stopPortMappingMeasurement(); if (isWifi && (mWifiLock != null)) startWifiScanner(); } } catch (SipException e) { @@ -784,52 +784,50 @@ public final class SipService extends ISipService.Stub { private static final int PASS_THRESHOLD = 10; private static final int MAX_RETRY_COUNT = 5; private static final int NAT_MEASUREMENT_RETRY_INTERVAL = 120; // in seconds + private SipProfile mLocalProfile; private SipSessionGroupExt mGroup; private SipSessionGroup.SipSessionImpl mSession; private int mMinInterval; private int mMaxInterval; private int mInterval; - private int mPassCount = 0; + private int mPassCount; public IntervalMeasurementProcess(SipProfile localProfile, int minInterval, int maxInterval) { mMaxInterval = maxInterval; mMinInterval = minInterval; - mInterval = (maxInterval + minInterval) / 2; - - // Don't start measurement if the interval is too small - if (mInterval < DEFAULT_KEEPALIVE_INTERVAL) { - Log.w(TAG, "interval is too small; measurement aborted; " - + "maxInterval=" + mMaxInterval); - return; - } else if (checkTermination()) { - Log.w(TAG, "interval is too small; measurement aborted; " - + "interval=[" + mMinInterval + "," + mMaxInterval - + "]"); - return; - } - - try { - mGroup = new SipSessionGroupExt(localProfile, null, null); - // TODO: remove this line once SipWakeupTimer can better handle - // variety of timeout values - mGroup.setWakeupTimer(new SipWakeupTimer(mContext, mExecutor)); - } catch (Exception e) { - Log.w(TAG, "start interval measurement error: " + e); - } + mLocalProfile = localProfile; } public void start() { synchronized (SipService.this) { - Log.d(TAG, "start measurement w interval=" + mInterval); - if (mSession == null) { - mSession = (SipSessionGroup.SipSessionImpl) - mGroup.createSession(null); + if (mSession != null) { + return; } + + mInterval = (mMaxInterval + mMinInterval) / 2; + mPassCount = 0; + + // Don't start measurement if the interval is too small + if (mInterval < DEFAULT_KEEPALIVE_INTERVAL || checkTermination()) { + Log.w(TAG, "measurement aborted; interval=[" + + mMinInterval + "," + mMaxInterval + "]"); + return; + } + try { + Log.d(TAG, "start measurement w interval=" + mInterval); + + mGroup = new SipSessionGroupExt(mLocalProfile, null, null); + // TODO: remove this line once SipWakeupTimer can better handle + // variety of timeout values + mGroup.setWakeupTimer(new SipWakeupTimer(mContext, mExecutor)); + + mSession = (SipSessionGroup.SipSessionImpl) + mGroup.createSession(null); mSession.startKeepAliveProcess(mInterval, this); - } catch (SipException e) { - Log.e(TAG, "start()", e); + } catch (Throwable t) { + onError(SipErrorCode.CLIENT_ERROR, t.toString()); } } } @@ -840,6 +838,10 @@ public final class SipService extends ISipService.Stub { mSession.stopKeepAliveProcess(); mSession = null; } + if (mGroup != null) { + mGroup.close(); + mGroup = null; + } mTimer.cancel(this); } } diff --git a/voip/java/com/android/server/sip/SipSessionGroup.java b/voip/java/com/android/server/sip/SipSessionGroup.java index 49effa8..06cdaf2 100644 --- a/voip/java/com/android/server/sip/SipSessionGroup.java +++ b/voip/java/com/android/server/sip/SipSessionGroup.java @@ -100,7 +100,7 @@ class SipSessionGroup implements SipListener { private static final int EXPIRY_TIME = 3600; // in seconds private static final int CANCEL_CALL_TIMER = 3; // in seconds private static final int END_CALL_TIMER = 3; // in seconds - private static final int KEEPALIVE_TIMEOUT = 3; // in seconds + private static final int KEEPALIVE_TIMEOUT = 5; // in seconds private static final int INCALL_KEEPALIVE_INTERVAL = 10; // in seconds private static final long WAKE_LOCK_HOLDING_TIME = 500; // in milliseconds @@ -883,12 +883,15 @@ class SipSessionGroup implements SipListener { if (expires != null && (time < 0 || time > expires.getExpires())) { time = expires.getExpires(); } + if (time <= 0) { + time = EXPIRY_TIME; + } expires = (ExpiresHeader) response.getHeader(MinExpiresHeader.NAME); if (expires != null && time < expires.getExpires()) { time = expires.getExpires(); } Log.v(TAG, "Expiry time = " + time); - return (time > 0) ? time : EXPIRY_TIME; + return time; } private boolean registeringToReady(EventObject evt) @@ -1552,7 +1555,7 @@ class SipSessionGroup implements SipListener { try { sendKeepAlive(); } catch (Throwable t) { - Log.w(TAG, "keepalive error: " + ": " + Log.w(TAG, "keepalive error: " + mLocalProfile.getUriString(), getRootCause(t)); // It's possible that the keepalive process is being stopped // during session.sendKeepAlive() so need to check mRunning diff --git a/voip/jni/rtp/AudioGroup.cpp b/voip/jni/rtp/AudioGroup.cpp index 4955667..459756d 100644 --- a/voip/jni/rtp/AudioGroup.cpp +++ b/voip/jni/rtp/AudioGroup.cpp @@ -625,12 +625,13 @@ bool AudioGroup::setMode(int mode) if (mode < 0 || mode > LAST_MODE) { return false; } - //FIXME: temporary code to overcome echo and mic gain issues on herring board. - // Must be modified/removed when proper support for voice processing query and control - // is included in audio framework + // FIXME: temporary code to overcome echo and mic gain issues on herring and tuna boards. + // Must be modified/removed when the root cause of the issue is fixed in the hardware or + // driver char value[PROPERTY_VALUE_MAX]; property_get("ro.product.board", value, ""); - if (mode == NORMAL && !strcmp(value, "herring")) { + if (mode == NORMAL && + (!strcmp(value, "herring") || !strcmp(value, "tuna"))) { mode = ECHO_SUPPRESSION; } if (mMode == mode) { |