Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7105430b authored by Amit Mahajan's avatar Amit Mahajan
Browse files

Call AnomalyReporter if CarrierMessagingService doesn't respond

Test: manual
Bug: 187767896
Change-Id: I7874f98edc2c034b8f61843687cac1e8ded1164f
parent e4b6d581
Loading
Loading
Loading
Loading
+17 −3
Original line number Diff line number Diff line
@@ -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;
@@ -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.
@@ -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;
@@ -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);
@@ -302,7 +309,7 @@ public class CarrierServicesSmsFilter {
            if (!mIsOnFilterCompleteCalled) {
                mIsOnFilterCompleteCalled = true;
                mCarrierMessagingServiceWrapper.disconnect();
                mFilterAggregator.onFilterComplete(result);
                mFilterAggregator.onFilterComplete(result, this);
            }
        }

@@ -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
@@ -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;
            }
+11 −4
Original line number Diff line number Diff line
@@ -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
@@ -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);
@@ -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,
@@ -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));
        }

        /**