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

Commit 6c7b8cab authored by Jack Yu's avatar Jack Yu Committed by Gerrit Code Review
Browse files

Merge changes Ic6bdeac0,I633a681c

* changes:
  Fixed NPE when local or remote port range does not exist
  Added a new network capability MMTEL
parents c7dc05a9 e8db41ba
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -130,6 +130,7 @@ public class DataUtils {
            case NetworkCapabilities.NET_CAPABILITY_VSIM:                 return "VSIM";
            case NetworkCapabilities.NET_CAPABILITY_BIP:                  return "BIP";
            case NetworkCapabilities.NET_CAPABILITY_HEAD_UNIT:            return "HEAD_UNIT";
            case NetworkCapabilities.NET_CAPABILITY_MMTEL:                return "MMTEL";
            default:
                return "Unknown(" + Integer.toString(netCap) + ")";
        }
+1 −0
Original line number Diff line number Diff line
@@ -557,6 +557,7 @@ public class PhoneSwitcher extends Handler {
                .addCapability(NetworkCapabilities.NET_CAPABILITY_CBS)
                .addCapability(NetworkCapabilities.NET_CAPABILITY_IA)
                .addCapability(NetworkCapabilities.NET_CAPABILITY_RCS)
                .addCapability(NetworkCapabilities.NET_CAPABILITY_MMTEL)
                .addCapability(NetworkCapabilities.NET_CAPABILITY_XCAP)
                .addCapability(NetworkCapabilities.NET_CAPABILITY_ENTERPRISE)
                .addCapability(NetworkCapabilities.NET_CAPABILITY_EIMS)
+16 −5
Original line number Diff line number Diff line
@@ -280,6 +280,7 @@ public class QosCallbackTracker extends Handler {

    private boolean matchesByLocalAddress(final @NonNull QosBearerFilter sessionFilter,
            final @NonNull IFilter filter) {
        if (sessionFilter.getLocalPortRange() == null) return false;
        for (final LinkAddress qosAddress : sessionFilter.getLocalAddresses()) {
            return filter.matchesLocalAddress(qosAddress.getAddress(),
                    sessionFilter.getLocalPortRange().getStart(),
@@ -290,6 +291,7 @@ public class QosCallbackTracker extends Handler {

    private boolean matchesByRemoteAddress(@NonNull QosBearerFilter sessionFilter,
            final @NonNull IFilter filter) {
        if (sessionFilter.getRemotePortRange() == null) return false;
        for (final LinkAddress qosAddress : sessionFilter.getRemoteAddresses()) {
            return filter.matchesRemoteAddress(qosAddress.getAddress(),
                    sessionFilter.getRemotePortRange().getStart(),
@@ -300,6 +302,8 @@ public class QosCallbackTracker extends Handler {

    private boolean matchesByRemoteAndLocalAddress(@NonNull QosBearerFilter sessionFilter,
            final @NonNull IFilter filter) {
        if (sessionFilter.getLocalPortRange() == null
                || sessionFilter.getRemotePortRange() == null) return false;
        for (final LinkAddress remoteAddress : sessionFilter.getRemoteAddresses()) {
            for (final LinkAddress localAddress : sessionFilter.getLocalAddresses()) {
                return filter.matchesRemoteAddress(remoteAddress.getAddress(),
@@ -327,17 +331,21 @@ public class QosCallbackTracker extends Handler {
        for (final QosBearerFilter sessionFilter : qosBearerSession.getQosBearerFilterList()) {
            if (!sessionFilter.getLocalAddresses().isEmpty()
                    && !sessionFilter.getRemoteAddresses().isEmpty()
                    && sessionFilter.getLocalPortRange() != null
                    && sessionFilter.getLocalPortRange().isValid()
                    && sessionFilter.getRemotePortRange() != null
                    && sessionFilter.getRemotePortRange().isValid()) {
                if (matchesByRemoteAndLocalAddress(sessionFilter, filter)) {
                    qosFilter = getFilterByPrecedence(qosFilter, sessionFilter);
                }
            } else if (!sessionFilter.getRemoteAddresses().isEmpty()
                    && sessionFilter.getRemotePortRange() != null
                    && sessionFilter.getRemotePortRange().isValid()) {
                if (matchesByRemoteAddress(sessionFilter, filter)) {
                    qosFilter = getFilterByPrecedence(qosFilter, sessionFilter);
                }
            } else if (!sessionFilter.getLocalAddresses().isEmpty()
                    && sessionFilter.getLocalPortRange() != null
                    && sessionFilter.getLocalPortRange().isValid()) {
                if (matchesByLocalAddress(sessionFilter, filter)) {
                    qosFilter = getFilterByPrecedence(qosFilter, sessionFilter);
@@ -351,7 +359,8 @@ public class QosCallbackTracker extends Handler {
            @NonNull IFilter filter) {
        QosBearerFilter qosBearerFilter = getMatchingQosBearerFilter(session, filter);
        List<InetSocketAddress> remoteAddresses = new ArrayList<>();
        if (qosBearerFilter.getRemoteAddresses().size() > 0) {
        if (qosBearerFilter.getRemoteAddresses().size() > 0
                && qosBearerFilter.getRemotePortRange() != null) {
            remoteAddresses.add(
                    new InetSocketAddress(qosBearerFilter.getRemoteAddresses().get(0).getAddress(),
                            qosBearerFilter.getRemotePortRange().getStart()));
@@ -437,6 +446,7 @@ public class QosCallbackTracker extends Handler {
    private boolean doesLocalConnectionInfoExist(final QosBearerSession qosBearerSession) {
        for (final QosBearerFilter sessionFilter : qosBearerSession.getQosBearerFilterList()) {
            if (!sessionFilter.getLocalAddresses().isEmpty()
                    && sessionFilter.getLocalPortRange() != null
                    && sessionFilter.getLocalPortRange().isValid()) {
                return true;
            }
@@ -447,6 +457,7 @@ public class QosCallbackTracker extends Handler {
    private boolean doesRemoteConnectionInfoExist(final QosBearerSession qosBearerSession) {
        for (final QosBearerFilter sessionFilter : qosBearerSession.getQosBearerFilterList()) {
            if (!sessionFilter.getRemoteAddresses().isEmpty()
                    && sessionFilter.getRemotePortRange() != null
                    && sessionFilter.getRemotePortRange().isValid()) {
                return true;
            }
+1 −0
Original line number Diff line number Diff line
@@ -156,6 +156,7 @@ public class TelephonyNetworkFactory extends NetworkFactory {
                .addCapability(NetworkCapabilities.NET_CAPABILITY_CBS)
                .addCapability(NetworkCapabilities.NET_CAPABILITY_IA)
                .addCapability(NetworkCapabilities.NET_CAPABILITY_RCS)
                .addCapability(NetworkCapabilities.NET_CAPABILITY_MMTEL)
                .addCapability(NetworkCapabilities.NET_CAPABILITY_XCAP)
                .addCapability(NetworkCapabilities.NET_CAPABILITY_ENTERPRISE)
                .addCapability(NetworkCapabilities.NET_CAPABILITY_EIMS)
+68 −0
Original line number Diff line number Diff line
/*
 * Copyright 2022 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.internal.telephony.data;

import static com.android.internal.telephony.data.QosCallbackTrackerTest.createEpsQos;
import static com.android.internal.telephony.data.QosCallbackTrackerTest.createIpv4QosFilter;

import static com.google.common.truth.Truth.assertThat;

import android.os.Parcel;
import android.telephony.data.QosBearerFilter;
import android.telephony.data.QosBearerSession;

import com.android.internal.telephony.TelephonyTest;

import org.junit.Test;

import java.util.ArrayList;

public class QosBearerSessionTest extends TelephonyTest {

    @Test
    public void testParcel() {
        ArrayList<QosBearerFilter> qosFilters = new ArrayList<>();
        qosFilters.add(createIpv4QosFilter("122.22.22.22",
                new QosBearerFilter.PortRange(2222, 2222), 45));
        QosBearerSession qosBearerSession = new QosBearerSession(1235,
                createEpsQos(5, 6, 7, 8), qosFilters);

        Parcel p = Parcel.obtain();
        qosBearerSession.writeToParcel(p, 0);
        p.setDataPosition(0);

        QosBearerSession qosBearerSession2 = QosBearerSession.CREATOR.createFromParcel(p);
        assertThat(qosBearerSession).isEqualTo(qosBearerSession2);
    }

    @Test
    public void testEquals() {
        ArrayList<QosBearerFilter> qosFilters = new ArrayList<>();
        qosFilters.add(createIpv4QosFilter("122.22.22.22",
                new QosBearerFilter.PortRange(2222, 2222), 45));
        QosBearerSession qosBearerSession = new QosBearerSession(1235,
                createEpsQos(5, 6, 7, 8), qosFilters);

        ArrayList<QosBearerFilter> qosFilters2 = new ArrayList<>();
        qosFilters2.add(createIpv4QosFilter("122.22.22.22",
                new QosBearerFilter.PortRange(2222, 2222), 45));
        QosBearerSession qosBearerSession2 = new QosBearerSession(1235,
                createEpsQos(5, 6, 7, 8), qosFilters2);

        assertThat(qosBearerSession).isEqualTo(qosBearerSession2);
    }
}