summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2016-12-15 03:02:44 -0700
committerLinux Build Service Account <lnxbuild@localhost>2016-12-15 03:02:44 -0700
commitdea32500a2fa98278b05c3933d9deda918be4988 (patch)
treed1e53da429ea6575ecafffd8e19b58b658287d41
parenteeb364a1e8916609bee877b893443bd940ea87da (diff)
parent8ede3c6777ca9730b714a41ec93e1d19e1ea3ee5 (diff)
downloadandroid_packages_services_Mms-staging/cm-14.1-cafrebase.tar.gz
android_packages_services_Mms-staging/cm-14.1-cafrebase.tar.bz2
android_packages_services_Mms-staging/cm-14.1-cafrebase.zip
Merge 8ede3c6777ca9730b714a41ec93e1d19e1ea3ee5 on remote branchstaging/cm-14.1-cafrebase
Change-Id: Ib162c61960099886ff8d93210e248a7402149990
-rw-r--r--src/com/android/mms/service/MmsHttpClient.java11
-rw-r--r--src/com/android/mms/service/MmsNetworkManager.java3
-rw-r--r--src/com/android/mms/service/MmsRequest.java4
3 files changed, 15 insertions, 3 deletions
diff --git a/src/com/android/mms/service/MmsHttpClient.java b/src/com/android/mms/service/MmsHttpClient.java
index 1c88bbf..b117086 100644
--- a/src/com/android/mms/service/MmsHttpClient.java
+++ b/src/com/android/mms/service/MmsHttpClient.java
@@ -21,6 +21,7 @@ import android.net.ConnectivityManager;
import android.net.LinkProperties;
import android.net.Network;
import android.os.Bundle;
+import android.telephony.CarrierConfigManager;
import android.telephony.SmsManager;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
@@ -61,6 +62,7 @@ public class MmsHttpClient {
private static final String HEADER_ACCEPT = "Accept";
private static final String HEADER_ACCEPT_LANGUAGE = "Accept-Language";
private static final String HEADER_USER_AGENT = "User-Agent";
+ private static final String HEADER_CONNECTION = "Connection";
// The "Accept" header value
private static final String HEADER_VALUE_ACCEPT =
@@ -70,6 +72,7 @@ public class MmsHttpClient {
"application/vnd.wap.mms-message; charset=utf-8";
private static final String HEADER_VALUE_CONTENT_TYPE_WITHOUT_CHARSET =
"application/vnd.wap.mms-message";
+ private static final String HEADER_CONNECTION_CLOSE = "close";
private static final int IPV4_WAIT_ATTEMPTS = 15;
private static final long IPV4_WAIT_DELAY_MS = 1000; // 1 seconds
@@ -146,6 +149,14 @@ public class MmsHttpClient {
LogUtil.i(requestId, "HTTP: UaProfUrl=" + uaProfUrl);
connection.setRequestProperty(uaProfUrlTagName, uaProfUrl);
}
+ // Header: Connection: close (if needed)
+ // Some carriers require that the HTTP connection's socket is closed
+ // after an MMS request/response is complete. In these cases keep alive
+ // is disabled. See https://tools.ietf.org/html/rfc7230#section-6.6
+ if (mmsConfig.getBoolean(SmsManager.MMS_CONFIG_CLOSE_CONNECTION, false)) {
+ LogUtil.i(requestId, "HTTP: Connection close after request");
+ connection.setRequestProperty(HEADER_CONNECTION, HEADER_CONNECTION_CLOSE);
+ }
// Add extra headers specified by mms_config.xml's httpparams
addExtraHeaders(connection, mmsConfig, subId);
// Different stuff for GET and POST
diff --git a/src/com/android/mms/service/MmsNetworkManager.java b/src/com/android/mms/service/MmsNetworkManager.java
index 67b0af6..c2e2f6a 100644
--- a/src/com/android/mms/service/MmsNetworkManager.java
+++ b/src/com/android/mms/service/MmsNetworkManager.java
@@ -31,7 +31,8 @@ import com.android.mms.service.exception.MmsNetworkException;
*/
public class MmsNetworkManager {
// Timeout used to call ConnectivityManager.requestNetwork
- private static final int NETWORK_REQUEST_TIMEOUT_MILLIS = 60 * 1000;
+ // Given that the telephony layer will retry on failures, this timeout should be high enough.
+ private static final int NETWORK_REQUEST_TIMEOUT_MILLIS = 30 * 60 * 1000;
// Wait timeout for this class, a little bit longer than the above timeout
// to make sure we don't bail prematurely
private static final int NETWORK_ACQUIRE_TIMEOUT_MILLIS =
diff --git a/src/com/android/mms/service/MmsRequest.java b/src/com/android/mms/service/MmsRequest.java
index e4ebdc4..4eeac08 100644
--- a/src/com/android/mms/service/MmsRequest.java
+++ b/src/com/android/mms/service/MmsRequest.java
@@ -147,7 +147,7 @@ public abstract class MmsRequest {
result = SmsManager.MMS_ERROR_IO_ERROR;
} else { // Execute
long retryDelaySecs = 2;
- // Try multiple times of MMS HTTP request
+ // Try multiple times of MMS HTTP request, depending on the error.
for (int i = 0; i < RETRY_TIMES; i++) {
try {
networkManager.acquireNetwork(requestId);
@@ -182,7 +182,7 @@ public abstract class MmsRequest {
} catch (MmsNetworkException e) {
LogUtil.e(requestId, "MMS network acquiring failure", e);
result = SmsManager.MMS_ERROR_UNABLE_CONNECT_MMS;
- // Retry
+ break;
} catch (MmsHttpException e) {
LogUtil.e(requestId, "HTTP or network I/O failure", e);
result = SmsManager.MMS_ERROR_HTTP_FAILURE;