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

Commit 7cb88dda authored by Robert Greenwalt's avatar Robert Greenwalt
Browse files

Be careful sharing connections when dun is in play

A request for a DUN connection should only use the carriers requested dun connection.  Don't
share another connection unless it matches the carriers settings.

bug:5701374
Change-Id: I75a65fcfce1b218bd9ca4ce2ab85cbe850813321
parent 0433c157
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -189,4 +189,11 @@ public class ApnSetting {
        }
        return false;
    }

    // TODO - if we have this function we should also have hashCode.
    // Also should handle changes in type order and perhaps case-insensitivity
    public boolean equals(Object o) {
        if (o instanceof ApnSetting == false) return false;
        return (this.toString().equals(o.toString()));
    }
}
+15 −1
Original line number Diff line number Diff line
@@ -1720,11 +1720,25 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
    private DataConnection checkForConnectionForApnContext(ApnContext apnContext) {
        // Loop through all apnContexts looking for one with a conn that satisfies this apnType
        String apnType = apnContext.getApnType();
        ApnSetting dunSetting = null;

        if (Phone.APN_TYPE_DUN.equals(apnType)) {
            dunSetting = fetchDunApn();
        }

        for (ApnContext c : mApnContexts.values()) {
            DataConnection conn = c.getDataConnection();
            if (conn != null) {
                ApnSetting apnSetting = c.getApnSetting();
                if (apnSetting != null && apnSetting.canHandleType(apnType)) {
                if (dunSetting != null) {
                    if (dunSetting.equals(apnSetting)) {
                        if (DBG) {
                            log("checkForConnectionForApnContext: apnContext=" + apnContext +
                                    " found conn=" + conn);
                        }
                        return conn;
                    }
                } else if (apnSetting != null && apnSetting.canHandleType(apnType)) {
                    if (DBG) {
                        log("checkForConnectionForApnContext: apnContext=" + apnContext +
                                " found conn=" + conn);