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

Commit de5715ea authored by Amy Zhang's avatar Amy Zhang
Browse files

Add context id setter in the IpFilterConfiguration

Test: make dist
Bug: 153595125
Change-Id: Ie949ea0c108cb020f028cf0ce24020235762d0cb
parent 4a11c440
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -5265,16 +5265,19 @@ package android.media.tv.tuner.filter {
    method @NonNull public static android.media.tv.tuner.filter.IpFilterConfiguration.Builder builder();
    method @NonNull @Size(min=4, max=16) public byte[] getDstIpAddress();
    method public int getDstPort();
    method public int getIpFilterContextId();
    method @NonNull @Size(min=4, max=16) public byte[] getSrcIpAddress();
    method public int getSrcPort();
    method public int getType();
    method public boolean isPassthrough();
    field public static final int INVALID_IP_FILTER_CONTEXT_ID = -1; // 0xffffffff
  }
  public static final class IpFilterConfiguration.Builder {
    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration build();
    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setDstIpAddress(@NonNull byte[]);
    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setDstPort(int);
    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setIpFilterContextId(int);
    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setPassthrough(boolean);
    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setSettings(@Nullable android.media.tv.tuner.filter.Settings);
    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setSrcIpAddress(@NonNull byte[]);
+37 −3
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.Size;
import android.annotation.SystemApi;
import android.media.tv.tuner.TunerVersionChecker;

/**
 * Filter configuration for a IP filter.
@@ -28,20 +29,28 @@ import android.annotation.SystemApi;
 */
@SystemApi
public final class IpFilterConfiguration extends FilterConfiguration {
    /**
     * Undefined filter type.
     */
    public static final int INVALID_IP_FILTER_CONTEXT_ID =
            android.hardware.tv.tuner.V1_1.Constants.Constant.INVALID_IP_FILTER_CONTEXT_ID;

    private final byte[] mSrcIpAddress;
    private final byte[] mDstIpAddress;
    private final int mSrcPort;
    private final int mDstPort;
    private final boolean mPassthrough;
    private final int mIpFilterContextId;

    private IpFilterConfiguration(Settings settings, byte[] srcAddr, byte[] dstAddr, int srcPort,
            int dstPort, boolean passthrough) {
            int dstPort, boolean passthrough, int ipCid) {
        super(settings);
        mSrcIpAddress = srcAddr;
        mDstIpAddress = dstAddr;
        mSrcPort = srcPort;
        mDstPort = dstPort;
        mPassthrough = passthrough;
        mIpFilterContextId = ipCid;
    }

    @Override
@@ -86,6 +95,15 @@ public final class IpFilterConfiguration extends FilterConfiguration {
    public boolean isPassthrough() {
        return mPassthrough;
    }
    /**
     * Gets the ip filter context id. Default value is {@link #INVALID_IP_FILTER_CONTEXT_ID}.
     *
     * <p>This API is only supported by Tuner HAL 1.1 or higher. Unsupported version would return
     * default value. Use {@link TunerVersionChecker.getTunerVersion()} to check the version.
     */
    public int getIpFilterContextId() {
        return mIpFilterContextId;
    }

    /**
     * Creates a builder for {@link IpFilterConfiguration}.
@@ -105,6 +123,7 @@ public final class IpFilterConfiguration extends FilterConfiguration {
        private int mDstPort = 0;
        private boolean mPassthrough = false;
        private Settings mSettings;
        private int mIpCid = INVALID_IP_FILTER_CONTEXT_ID;

        private Builder() {
        }
@@ -169,6 +188,21 @@ public final class IpFilterConfiguration extends FilterConfiguration {
            return this;
        }

        /**
         * Sets the ip filter context id. Default value is {@link #INVALID_IP_FILTER_CONTEXT_ID}.
         *
         * <p>This API is only supported by Tuner HAL 1.1 or higher. Unsupported version would cause
         * no-op. Use {@link TunerVersionChecker.getTunerVersion()} to check the version.
         */
        @NonNull
        public Builder setIpFilterContextId(int ipContextId) {
            if (TunerVersionChecker.checkHigherOrEqualVersionTo(
                        TunerVersionChecker.TUNER_VERSION_1_1, "setIpFilterContextId")) {
                mIpCid = ipContextId;
            }
            return this;
        }

        /**
         * Builds a {@link IpFilterConfiguration} object.
         */
@@ -180,8 +214,8 @@ public final class IpFilterConfiguration extends FilterConfiguration {
                    "The lengths of src and dst IP address must be 4 or 16 and must be the same."
                            + "srcLength=" + ipAddrLength + ", dstLength=" + mDstIpAddress.length);
            }
            return new IpFilterConfiguration(
                    mSettings, mSrcIpAddress, mDstIpAddress, mSrcPort, mDstPort, mPassthrough);
            return new IpFilterConfiguration(mSettings, mSrcIpAddress, mDstIpAddress, mSrcPort,
                    mDstPort, mPassthrough, mIpCid);
        }
    }
}
+30 −0
Original line number Diff line number Diff line
@@ -3041,6 +3041,29 @@ static DemuxFilterSettings getFilterConfiguration(
    return filterSettings;
}

static Result configureIpFilterContextId(
        JNIEnv *env, sp<IFilter> iFilterSp, jobject ipFilterConfigObj) {
    jclass clazz = env->FindClass(
            "android/media/tv/tuner/filter/IpFilterConfiguration");
    uint32_t cid = env->GetIntField(ipFilterConfigObj, env->GetFieldID(
            clazz, "mIpFilterContextId", "I"));
    Result res = Result::SUCCESS;
    if (cid != static_cast<uint32_t>(Constant::INVALID_IP_FILTER_CONTEXT_ID)) {
        sp<::android::hardware::tv::tuner::V1_1::IFilter> iFilterSp_1_1;
        iFilterSp_1_1 = ::android::hardware::tv::tuner::V1_1::IFilter::castFrom(iFilterSp);

        if (iFilterSp_1_1 != NULL) {
            res = iFilterSp_1_1->configureIpCid(cid);
            if (res != Result::SUCCESS) {
                return res;
            }
        } else {
            ALOGW("configureIpCid is not supported with the current HAL implementation.");
        }
    }
    return res;
}

static jint copyData(JNIEnv *env, std::unique_ptr<MQ>& mq, EventFlag* flag, jbyteArray buffer,
        jlong offset, jlong size) {
    ALOGD("copyData, size=%ld, offset=%ld", (long) size, (long) offset);
@@ -3084,6 +3107,13 @@ static jint android_media_tv_Tuner_configure_filter(
        return (jint) res;
    }

    if (static_cast<DemuxFilterMainType>(type) == DemuxFilterMainType::IP) {
        res = configureIpFilterContextId(env, iFilterSp, settings);
        if (res != Result::SUCCESS) {
            return (jint) res;
        }
    }

    MQDescriptorSync<uint8_t> filterMQDesc;
    Result getQueueDescResult = Result::UNKNOWN_ERROR;
    if (filterSp->mFilterMQ == NULL) {
+3 −0
Original line number Diff line number Diff line
@@ -5205,16 +5205,19 @@ package android.media.tv.tuner.filter {
    method @NonNull public static android.media.tv.tuner.filter.IpFilterConfiguration.Builder builder();
    method @NonNull @Size(min=4, max=16) public byte[] getDstIpAddress();
    method public int getDstPort();
    method public int getIpFilterContextId();
    method @NonNull @Size(min=4, max=16) public byte[] getSrcIpAddress();
    method public int getSrcPort();
    method public int getType();
    method public boolean isPassthrough();
    field public static final int INVALID_IP_FILTER_CONTEXT_ID = -1; // 0xffffffff
  }
  public static final class IpFilterConfiguration.Builder {
    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration build();
    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setDstIpAddress(@NonNull byte[]);
    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setDstPort(int);
    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setIpFilterContextId(int);
    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setPassthrough(boolean);
    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setSettings(@Nullable android.media.tv.tuner.filter.Settings);
    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setSrcIpAddress(@NonNull byte[]);