summaryrefslogtreecommitdiffstats
path: root/voip
diff options
context:
space:
mode:
Diffstat (limited to 'voip')
-rw-r--r--voip/java/com/android/server/sip/SipService.java62
-rw-r--r--voip/java/com/android/server/sip/SipSessionGroup.java9
-rw-r--r--voip/jni/rtp/AudioGroup.cpp9
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) {