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

Commit c775ee81 authored by Jayachandran C's avatar Jayachandran C
Browse files

QOS: check for portRange validity before filter matching

Bug: 191810683
Test: Manual
      atest com.android.internal.telephony.dataconnection.QosCallbackTrackerTest
Change-Id: I3866513e42c30b44eab05e8eea30d232bd407582
parent 3c5a43e3
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -206,15 +206,19 @@ public class QosCallbackTracker {

        for (final QosBearerFilter sessionFilter : qosBearerSession.getQosBearerFilterList()) {
           if (!sessionFilter.getLocalAddresses().isEmpty()
                   && !sessionFilter.getRemoteAddresses().isEmpty()) {
                   && !sessionFilter.getRemoteAddresses().isEmpty()
                   && sessionFilter.getLocalPortRange().isValid()
                   && sessionFilter.getRemotePortRange().isValid()) {
               if (matchesByRemoteAndLocalAddress(sessionFilter, filter)) {
                   qosFilter = getFilterByPrecedence(qosFilter, sessionFilter);
               }
           } else if (!sessionFilter.getRemoteAddresses().isEmpty()) {
           } else if (!sessionFilter.getRemoteAddresses().isEmpty()
                   && sessionFilter.getRemotePortRange().isValid()) {
               if (matchesByRemoteAddress(sessionFilter, filter)) {
                   qosFilter = getFilterByPrecedence(qosFilter, sessionFilter);
               }
           } else if (!sessionFilter.getLocalAddresses().isEmpty()) {
           } else if (!sessionFilter.getLocalAddresses().isEmpty()
                   && sessionFilter.getLocalPortRange().isValid()) {
               if (matchesByLocalAddress(sessionFilter, filter)) {
                   qosFilter = getFilterByPrecedence(qosFilter, sessionFilter);
               }
+29 −0
Original line number Diff line number Diff line
@@ -452,5 +452,34 @@ public class QosCallbackTrackerTest extends TelephonyTest {
        verify(mDcNetworkAgent, times(1)).notifyQosSessionLost(eq(1), eq(1234), eq(1));
        verify(mDcNetworkAgent, times(1)).notifyQosSessionLost(eq(2), eq(1235), eq(1));
    }

    @Test
    @SmallTest
    public void testQosSessionWithInvalidPortRange() throws Exception {
        // Non-matching QosBearerFilter
        ArrayList<QosBearerFilter> qosFilters1 = new ArrayList<>();
        qosFilters1.add(createIpv4QosFilter("155.55.55.55",
                new QosBearerFilter.PortRange(0,0), 45));

        ArrayList<QosBearerSession> qosSessions = new ArrayList<>();
        qosSessions.add(new QosBearerSession(1234, createEpsQos(5, 6, 7, 8), qosFilters1));

        // Matching QosBearerFilter
        ArrayList<QosBearerFilter> qosFilters2 = new ArrayList<>();
        qosFilters2.add(createIpv4QosFilter("122.22.22.22",
                new QosBearerFilter.PortRange(-1, 1), 45));
        qosSessions.add(new QosBearerSession(1235, createEpsQos(5, 6, 7, 8), qosFilters2));

        mQosCallbackTracker.updateSessions(qosSessions);

        // Add filter after updateSessions
        Filter filter = new Filter(new InetSocketAddress(
                InetAddresses.parseNumericAddress("122.22.22.22"), 2222));
        mQosCallbackTracker.addFilter(1, filter);

        verify(mDcNetworkAgent, never()).notifyQosSessionAvailable(eq(1),
                eq(1235), any(EpsBearerQosSessionAttributes.class));

    }
}