From 873a0ab249719f91dafff07d61a4316b6a72ffe6 Mon Sep 17 00:00:00 2001 From: Moxie Marlinspike Date: Sat, 30 Jan 2016 14:16:50 -0800 Subject: [PATCH] Only attempt MMS "direct connect" on Sprint MCCMNCs. Fixes #5134 // FREEBIE --- .../mms/IncomingLegacyMmsConnection.java | 3 ++- .../securesms/mms/LegacyMmsConnection.java | 26 +++++++++++++------ .../mms/OutgoingLegacyMmsConnection.java | 2 +- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/org/thoughtcrime/securesms/mms/IncomingLegacyMmsConnection.java b/src/org/thoughtcrime/securesms/mms/IncomingLegacyMmsConnection.java index ddee0a2fa9..547a711cd8 100644 --- a/src/org/thoughtcrime/securesms/mms/IncomingLegacyMmsConnection.java +++ b/src/org/thoughtcrime/securesms/mms/IncomingLegacyMmsConnection.java @@ -65,7 +65,8 @@ public class IncomingLegacyMmsConnection extends LegacyMmsConnection implements { MmsRadio radio = MmsRadio.getInstance(context); Apn contentApn = new Apn(contentLocation, apn.getProxy(), Integer.toString(apn.getPort()), apn.getUsername(), apn.getPassword()); - if (isCdmaDevice()) { + + if (isDirectConnect()) { Log.w(TAG, "Connecting directly..."); try { return retrieve(contentApn, transactionId, false, false); diff --git a/src/org/thoughtcrime/securesms/mms/LegacyMmsConnection.java b/src/org/thoughtcrime/securesms/mms/LegacyMmsConnection.java index 135f990df9..47ddc59979 100644 --- a/src/org/thoughtcrime/securesms/mms/LegacyMmsConnection.java +++ b/src/org/thoughtcrime/securesms/mms/LegacyMmsConnection.java @@ -18,8 +18,6 @@ package org.thoughtcrime.securesms.mms; import android.content.Context; import android.net.ConnectivityManager; -import android.net.NetworkInfo; -import android.support.annotation.Nullable; import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.Log; @@ -39,14 +37,12 @@ import org.apache.http.impl.client.LaxRedirectStrategy; import org.apache.http.impl.conn.BasicHttpClientConnectionManager; import org.apache.http.message.BasicHeader; import org.thoughtcrime.securesms.database.ApnDatabase; -import org.thoughtcrime.securesms.util.TelephonyUtil; import org.thoughtcrime.securesms.util.Conversions; +import org.thoughtcrime.securesms.util.ServiceUtil; +import org.thoughtcrime.securesms.util.TelephonyUtil; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.Util; import org.whispersystems.libaxolotl.util.guava.Optional; -import com.google.i18n.phonenumbers.PhoneNumberUtil; -import com.google.i18n.phonenumbers.NumberParseException; -import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber; import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; @@ -56,8 +52,10 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.InetAddress; import java.net.URL; +import java.util.HashSet; import java.util.LinkedList; import java.util.List; +import java.util.Set; @SuppressWarnings("deprecation") public abstract class LegacyMmsConnection { @@ -91,8 +89,20 @@ public abstract class LegacyMmsConnection { } } - protected boolean isCdmaDevice() { - return ((TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE)).getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA; + protected boolean isDirectConnect() { + // We think Sprint supports direct connection over wifi/data, but not Verizon + Set sprintMccMncs = new HashSet() {{ + add("312530"); + add("311880"); + add("311870"); + add("311490"); + add("310120"); + add("316010"); + add("312190"); + }}; + + return ServiceUtil.getTelephonyManager(context).getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA && + sprintMccMncs.contains(TelephonyUtil.getMccMnc(context)); } @SuppressWarnings("TryWithIdenticalCatches") diff --git a/src/org/thoughtcrime/securesms/mms/OutgoingLegacyMmsConnection.java b/src/org/thoughtcrime/securesms/mms/OutgoingLegacyMmsConnection.java index 3272b75d94..eda1836235 100644 --- a/src/org/thoughtcrime/securesms/mms/OutgoingLegacyMmsConnection.java +++ b/src/org/thoughtcrime/securesms/mms/OutgoingLegacyMmsConnection.java @@ -76,7 +76,7 @@ public class OutgoingLegacyMmsConnection extends LegacyMmsConnection implements try { MmsRadio radio = MmsRadio.getInstance(context); - if (isCdmaDevice()) { + if (isDirectConnect()) { Log.w(TAG, "Sending MMS directly without radio change..."); try { return send(pduBytes, false, false);