Loading src/java/com/android/internal/telephony/CarrierServicesSmsFilter.java +17 −3 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import android.service.carrier.CarrierMessagingService; import android.service.carrier.CarrierMessagingServiceWrapper; import android.service.carrier.CarrierMessagingServiceWrapper.CarrierMessagingCallback; import android.service.carrier.MessagePdu; import android.telephony.AnomalyReporter; import android.util.LocalLog; import com.android.internal.annotations.VisibleForTesting; Loading @@ -40,6 +41,8 @@ import java.util.HashSet; import java.util.List; import java.util.Optional; import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; /** * Filters incoming SMS with carrier services. Loading @@ -59,6 +62,10 @@ public class CarrierServicesSmsFilter { /** onFilterComplete timeout. */ public static final int FILTER_COMPLETE_TIMEOUT_MS = 10 * 60 * 1000; //10 minutes /** SMS anomaly uuid -- CarrierMessagingService did not respond */ private static final UUID sAnomalyNoResponseFromCarrierMessagingService = UUID.fromString("94095e8e-b516-4065-a8be-e05b84071002"); private final Context mContext; private final Phone mPhone; private final byte[][] mPdus; Loading Loading @@ -122,7 +129,7 @@ public class CarrierServicesSmsFilter { mFilterAggregator = new FilterAggregator(numPackages); //start the timer mCallbackTimeoutHandler.sendMessageDelayed(mCallbackTimeoutHandler .obtainMessage(EVENT_ON_FILTER_COMPLETE_NOT_CALLED), .obtainMessage(EVENT_ON_FILTER_COMPLETE_NOT_CALLED, mFilterAggregator), FILTER_COMPLETE_TIMEOUT_MS); for (String smsFilterPackage : smsFilterPackages) { filterWithPackage(smsFilterPackage, mFilterAggregator); Loading Loading @@ -302,7 +309,7 @@ public class CarrierServicesSmsFilter { if (!mIsOnFilterCompleteCalled) { mIsOnFilterCompleteCalled = true; mCarrierMessagingServiceWrapper.disconnect(); mFilterAggregator.onFilterComplete(result); mFilterAggregator.onFilterComplete(result, this); } } Loading Loading @@ -343,9 +350,10 @@ public class CarrierServicesSmsFilter { mFilterResult = CarrierMessagingService.RECEIVE_OPTIONS_DEFAULT; } void onFilterComplete(int result) { void onFilterComplete(int result, CarrierSmsFilterCallback callback) { synchronized (mFilterLock) { mNumPendingFilters--; mCallbacks.remove(callback); combine(result); if (mNumPendingFilters == 0) { // Calling identity was the CarrierMessagingService in this callback, change it Loading Loading @@ -393,6 +401,12 @@ public class CarrierServicesSmsFilter { case EVENT_ON_FILTER_COMPLETE_NOT_CALLED: mLocalLog.log("CarrierServicesSmsFilter: onFilterComplete timeout: not" + " called before " + FILTER_COMPLETE_TIMEOUT_MS + " milliseconds."); FilterAggregator filterAggregator = (FilterAggregator) msg.obj; String packages = filterAggregator.mCallbacks.stream() .map(callback -> callback.mPackageName) .collect(Collectors.joining(", ")); AnomalyReporter.reportAnomaly(sAnomalyNoResponseFromCarrierMessagingService, "No response from " + packages); handleFilterCallbacksTimeout(); break; } Loading src/java/com/android/internal/telephony/SMSDispatcher.java +11 −4 Original line number Diff line number Diff line Loading @@ -162,6 +162,9 @@ public abstract class SMSDispatcher extends Handler { private static final int SEND_RETRY_DELAY = 2000; /** Message sending queue limit */ private static final int MO_MSG_QUEUE_LIMIT = 5; /** SMS anomaly uuid -- CarrierMessagingService did not respond */ private static final UUID sAnomalyNoResponseFromCarrierMessagingService = UUID.fromString("279d9fbc-462d-4fc2-802c-bf21ddd9dd90"); /** * Message reference for a CONCATENATED_8_BIT_REFERENCE or Loading Loading @@ -408,6 +411,8 @@ public abstract class SMSDispatcher extends Handler { if (msg.what == EVENT_TIMEOUT) { logWithLocalLog("handleMessage: did not receive response from " + mCarrierPackageName + " for " + mCarrierMessagingTimeout + " ms"); AnomalyReporter.reportAnomaly(sAnomalyNoResponseFromCarrierMessagingService, "No response from " + mCarrierPackageName); onSendComplete(CarrierMessagingService.SEND_STATUS_RETRY_ON_CARRIER_NETWORK); } else { logWithLocalLog("handleMessage: received unexpected message " + msg.what); Loading Loading @@ -2025,8 +2030,9 @@ public abstract class SMSDispatcher extends Handler { private Boolean mIsFromDefaultSmsApplication; // SMS anomaly uuid private final UUID mAnomalyUUID = UUID.fromString("43043600-ea7a-44d2-9ae6-a58567ac7886"); // SMS anomaly uuid -- unexpected error from RIL private final UUID mAnomalyUnexpectedErrorFromRilUUID = UUID.fromString("43043600-ea7a-44d2-9ae6-a58567ac7886"); private SmsTracker(HashMap<String, Object> data, PendingIntent sentIntent, PendingIntent deliveryIntent, PackageInfo appInfo, String destAddr, String format, Loading Loading @@ -2262,8 +2268,9 @@ public abstract class SMSDispatcher extends Handler { private UUID generateUUID(int error, int errorCode) { long lerror = error; long lerrorCode = errorCode; return new UUID(mAnomalyUUID.getMostSignificantBits(), mAnomalyUUID.getLeastSignificantBits() + ((lerrorCode << 32) + lerror)); return new UUID(mAnomalyUnexpectedErrorFromRilUUID.getMostSignificantBits(), mAnomalyUnexpectedErrorFromRilUUID.getLeastSignificantBits() + ((lerrorCode << 32) + lerror)); } /** Loading Loading
src/java/com/android/internal/telephony/CarrierServicesSmsFilter.java +17 −3 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import android.service.carrier.CarrierMessagingService; import android.service.carrier.CarrierMessagingServiceWrapper; import android.service.carrier.CarrierMessagingServiceWrapper.CarrierMessagingCallback; import android.service.carrier.MessagePdu; import android.telephony.AnomalyReporter; import android.util.LocalLog; import com.android.internal.annotations.VisibleForTesting; Loading @@ -40,6 +41,8 @@ import java.util.HashSet; import java.util.List; import java.util.Optional; import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; /** * Filters incoming SMS with carrier services. Loading @@ -59,6 +62,10 @@ public class CarrierServicesSmsFilter { /** onFilterComplete timeout. */ public static final int FILTER_COMPLETE_TIMEOUT_MS = 10 * 60 * 1000; //10 minutes /** SMS anomaly uuid -- CarrierMessagingService did not respond */ private static final UUID sAnomalyNoResponseFromCarrierMessagingService = UUID.fromString("94095e8e-b516-4065-a8be-e05b84071002"); private final Context mContext; private final Phone mPhone; private final byte[][] mPdus; Loading Loading @@ -122,7 +129,7 @@ public class CarrierServicesSmsFilter { mFilterAggregator = new FilterAggregator(numPackages); //start the timer mCallbackTimeoutHandler.sendMessageDelayed(mCallbackTimeoutHandler .obtainMessage(EVENT_ON_FILTER_COMPLETE_NOT_CALLED), .obtainMessage(EVENT_ON_FILTER_COMPLETE_NOT_CALLED, mFilterAggregator), FILTER_COMPLETE_TIMEOUT_MS); for (String smsFilterPackage : smsFilterPackages) { filterWithPackage(smsFilterPackage, mFilterAggregator); Loading Loading @@ -302,7 +309,7 @@ public class CarrierServicesSmsFilter { if (!mIsOnFilterCompleteCalled) { mIsOnFilterCompleteCalled = true; mCarrierMessagingServiceWrapper.disconnect(); mFilterAggregator.onFilterComplete(result); mFilterAggregator.onFilterComplete(result, this); } } Loading Loading @@ -343,9 +350,10 @@ public class CarrierServicesSmsFilter { mFilterResult = CarrierMessagingService.RECEIVE_OPTIONS_DEFAULT; } void onFilterComplete(int result) { void onFilterComplete(int result, CarrierSmsFilterCallback callback) { synchronized (mFilterLock) { mNumPendingFilters--; mCallbacks.remove(callback); combine(result); if (mNumPendingFilters == 0) { // Calling identity was the CarrierMessagingService in this callback, change it Loading Loading @@ -393,6 +401,12 @@ public class CarrierServicesSmsFilter { case EVENT_ON_FILTER_COMPLETE_NOT_CALLED: mLocalLog.log("CarrierServicesSmsFilter: onFilterComplete timeout: not" + " called before " + FILTER_COMPLETE_TIMEOUT_MS + " milliseconds."); FilterAggregator filterAggregator = (FilterAggregator) msg.obj; String packages = filterAggregator.mCallbacks.stream() .map(callback -> callback.mPackageName) .collect(Collectors.joining(", ")); AnomalyReporter.reportAnomaly(sAnomalyNoResponseFromCarrierMessagingService, "No response from " + packages); handleFilterCallbacksTimeout(); break; } Loading
src/java/com/android/internal/telephony/SMSDispatcher.java +11 −4 Original line number Diff line number Diff line Loading @@ -162,6 +162,9 @@ public abstract class SMSDispatcher extends Handler { private static final int SEND_RETRY_DELAY = 2000; /** Message sending queue limit */ private static final int MO_MSG_QUEUE_LIMIT = 5; /** SMS anomaly uuid -- CarrierMessagingService did not respond */ private static final UUID sAnomalyNoResponseFromCarrierMessagingService = UUID.fromString("279d9fbc-462d-4fc2-802c-bf21ddd9dd90"); /** * Message reference for a CONCATENATED_8_BIT_REFERENCE or Loading Loading @@ -408,6 +411,8 @@ public abstract class SMSDispatcher extends Handler { if (msg.what == EVENT_TIMEOUT) { logWithLocalLog("handleMessage: did not receive response from " + mCarrierPackageName + " for " + mCarrierMessagingTimeout + " ms"); AnomalyReporter.reportAnomaly(sAnomalyNoResponseFromCarrierMessagingService, "No response from " + mCarrierPackageName); onSendComplete(CarrierMessagingService.SEND_STATUS_RETRY_ON_CARRIER_NETWORK); } else { logWithLocalLog("handleMessage: received unexpected message " + msg.what); Loading Loading @@ -2025,8 +2030,9 @@ public abstract class SMSDispatcher extends Handler { private Boolean mIsFromDefaultSmsApplication; // SMS anomaly uuid private final UUID mAnomalyUUID = UUID.fromString("43043600-ea7a-44d2-9ae6-a58567ac7886"); // SMS anomaly uuid -- unexpected error from RIL private final UUID mAnomalyUnexpectedErrorFromRilUUID = UUID.fromString("43043600-ea7a-44d2-9ae6-a58567ac7886"); private SmsTracker(HashMap<String, Object> data, PendingIntent sentIntent, PendingIntent deliveryIntent, PackageInfo appInfo, String destAddr, String format, Loading Loading @@ -2262,8 +2268,9 @@ public abstract class SMSDispatcher extends Handler { private UUID generateUUID(int error, int errorCode) { long lerror = error; long lerrorCode = errorCode; return new UUID(mAnomalyUUID.getMostSignificantBits(), mAnomalyUUID.getLeastSignificantBits() + ((lerrorCode << 32) + lerror)); return new UUID(mAnomalyUnexpectedErrorFromRilUUID.getMostSignificantBits(), mAnomalyUnexpectedErrorFromRilUUID.getLeastSignificantBits() + ((lerrorCode << 32) + lerror)); } /** Loading