summaryrefslogtreecommitdiff
path: root/common/testutils/devicetests/com/android/testutils/TapPacketReader.java
diff options
context:
space:
mode:
Diffstat (limited to 'common/testutils/devicetests/com/android/testutils/TapPacketReader.java')
-rw-r--r--common/testutils/devicetests/com/android/testutils/TapPacketReader.java137
1 files changed, 0 insertions, 137 deletions
diff --git a/common/testutils/devicetests/com/android/testutils/TapPacketReader.java b/common/testutils/devicetests/com/android/testutils/TapPacketReader.java
deleted file mode 100644
index b25b9f21..00000000
--- a/common/testutils/devicetests/com/android/testutils/TapPacketReader.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (C) 2020 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.testutils;
-
-import android.os.Handler;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
-import com.android.net.module.util.ArrayTrackRecord;
-import com.android.net.module.util.PacketReader;
-
-import java.io.FileDescriptor;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.util.Arrays;
-import java.util.function.Predicate;
-
-import kotlin.Lazy;
-import kotlin.LazyKt;
-
-/**
- * A packet reader that runs on a TAP interface.
- *
- * It also implements facilities to reply to received packets.
- */
-public class TapPacketReader extends PacketReader {
- private final FileDescriptor mTapFd;
- private final ArrayTrackRecord<byte[]> mReceivedPackets = new ArrayTrackRecord<>();
- private final Lazy<ArrayTrackRecord<byte[]>.ReadHead> mReadHead =
- LazyKt.lazy(mReceivedPackets::newReadHead);
-
- public TapPacketReader(Handler h, FileDescriptor tapFd, int maxPacketSize) {
- super(h, maxPacketSize);
- mTapFd = tapFd;
- }
-
-
- /**
- * Attempt to start the FdEventsReader on its handler thread.
- *
- * As opposed to {@link android.net.util.FdEventsReader#start()}, this method will not report
- * failure to start, so it is only appropriate in tests that will fail later if that happens.
- */
- public void startAsyncForTest() {
- getHandler().post(this::start);
- }
-
- @Override
- protected FileDescriptor createFd() {
- return mTapFd;
- }
-
- @Override
- protected void handlePacket(byte[] recvbuf, int length) {
- final byte[] newPacket = Arrays.copyOf(recvbuf, length);
- if (!mReceivedPackets.add(newPacket)) {
- throw new AssertionError("More than " + Integer.MAX_VALUE + " packets outstanding!");
- }
- }
-
- /**
- * @deprecated This method does not actually "pop" (which generally means the last packet).
- * Use {@link #poll(long)}, which has the same behavior, instead.
- */
- @Nullable
- @Deprecated
- public byte[] popPacket(long timeoutMs) {
- return poll(timeoutMs);
- }
-
- /**
- * @deprecated This method does not actually "pop" (which generally means the last packet).
- * Use {@link #poll(long, Predicate)}, which has the same behavior, instead.
- */
- @Nullable
- @Deprecated
- public byte[] popPacket(long timeoutMs, @NonNull Predicate<byte[]> filter) {
- return poll(timeoutMs, filter);
- }
-
- /**
- * Get the next packet that was received on the interface.
- */
- @Nullable
- public byte[] poll(long timeoutMs) {
- return mReadHead.getValue().poll(timeoutMs, packet -> true);
- }
-
- /**
- * Get the next packet that was received on the interface and matches the specified filter.
- */
- @Nullable
- public byte[] poll(long timeoutMs, @NonNull Predicate<byte[]> filter) {
- return mReadHead.getValue().poll(timeoutMs, filter::test);
- }
-
- /**
- * Get the {@link ArrayTrackRecord} that records all packets received by the reader since its
- * creation.
- */
- public ArrayTrackRecord<byte[]> getReceivedPackets() {
- return mReceivedPackets;
- }
-
- /*
- * Send a response on the TAP interface.
- *
- * The passed ByteBuffer is flipped after use.
- *
- * @param packet The packet to send.
- * @throws IOException if the interface can't be written to.
- */
- public void sendResponse(final ByteBuffer packet) throws IOException {
- try (FileOutputStream out = new FileOutputStream(mTapFd)) {
- byte[] packetBytes = new byte[packet.limit()];
- packet.get(packetBytes);
- packet.flip(); // So we can reuse it in the future.
- out.write(packetBytes);
- }
- }
-}