diff --git a/staticlibs/framework/com/android/net/module/util/DnsSvcbPacket.java b/staticlibs/framework/com/android/net/module/util/DnsSvcbPacket.java index c7ed3e6f29..d298599f32 100644 --- a/staticlibs/framework/com/android/net/module/util/DnsSvcbPacket.java +++ b/staticlibs/framework/com/android/net/module/util/DnsSvcbPacket.java @@ -21,7 +21,6 @@ import static android.net.DnsResolver.TYPE_AAAA; import android.annotation.NonNull; import android.annotation.Nullable; -import android.text.TextUtils; import android.util.Log; import java.net.InetAddress; @@ -29,7 +28,6 @@ import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.StringJoiner; /** * A class for a DNS SVCB response packet. @@ -159,16 +157,6 @@ public class DnsSvcbPacket extends DnsPacket { return out; } - @Override - public String toString() { - final StringJoiner out = new StringJoiner(" "); - out.add("QUERY: [" + TextUtils.join(", ", mRecords[QDSECTION]) + "]"); - out.add("ANSWER: [" + TextUtils.join(", ", mRecords[ANSECTION]) + "]"); - out.add("AUTHORITY: [" + TextUtils.join(", ", mRecords[NSSECTION]) + "]"); - out.add("ADDITIONAL: [" + TextUtils.join(", ", mRecords[ARSECTION]) + "]"); - return out.toString(); - } - /** * Creates a DnsSvcbPacket object from the given wire-format DNS answer. */ diff --git a/staticlibs/framework/com/android/net/module/util/DnsSvcbRecord.java b/staticlibs/framework/com/android/net/module/util/DnsSvcbRecord.java index 669725cd6f..935cdf6497 100644 --- a/staticlibs/framework/com/android/net/module/util/DnsSvcbRecord.java +++ b/staticlibs/framework/com/android/net/module/util/DnsSvcbRecord.java @@ -230,7 +230,7 @@ public final class DnsSvcbRecord extends DnsPacket.DnsRecord { /** * The base class for all SvcParam. */ - private abstract static class SvcParam { + private abstract static class SvcParam { private final int mKey; SvcParam(int key) { @@ -240,9 +240,11 @@ public final class DnsSvcbRecord extends DnsPacket.DnsRecord { int getKey() { return mKey; } + + abstract T getValue(); } - private static class SvcParamMandatory extends SvcParam { + private static class SvcParamMandatory extends SvcParam { private final short[] mValue; private SvcParamMandatory(@NonNull ByteBuffer buf) throws BufferUnderflowException, @@ -257,6 +259,12 @@ public final class DnsSvcbRecord extends DnsPacket.DnsRecord { } } + @Override + short[] getValue() { + /* Not yet implemented */ + return null; + } + @Override public String toString() { final StringJoiner valueJoiner = new StringJoiner(","); @@ -267,7 +275,7 @@ public final class DnsSvcbRecord extends DnsPacket.DnsRecord { } } - private static class SvcParamAlpn extends SvcParam { + private static class SvcParamAlpn extends SvcParam> { private final List mValue; SvcParamAlpn(@NonNull ByteBuffer buf) throws BufferUnderflowException, ParseException { @@ -281,6 +289,7 @@ public final class DnsSvcbRecord extends DnsPacket.DnsRecord { } } + @Override List getValue() { return Collections.unmodifiableList(mValue); } @@ -291,7 +300,7 @@ public final class DnsSvcbRecord extends DnsPacket.DnsRecord { } } - private static class SvcParamNoDefaultAlpn extends SvcParam { + private static class SvcParamNoDefaultAlpn extends SvcParam { SvcParamNoDefaultAlpn(@NonNull ByteBuffer buf) throws BufferUnderflowException, ParseException { super(KEY_NO_DEFAULT_ALPN); @@ -302,13 +311,18 @@ public final class DnsSvcbRecord extends DnsPacket.DnsRecord { } } + @Override + Void getValue() { + return null; + } + @Override public String toString() { return toKeyName(getKey()); } } - private static class SvcParamPort extends SvcParam { + private static class SvcParamPort extends SvcParam { private final int mValue; SvcParamPort(@NonNull ByteBuffer buf) throws BufferUnderflowException, ParseException { @@ -321,7 +335,8 @@ public final class DnsSvcbRecord extends DnsPacket.DnsRecord { mValue = Short.toUnsignedInt(buf.getShort()); } - int getValue() { + @Override + Integer getValue() { return mValue; } @@ -331,7 +346,7 @@ public final class DnsSvcbRecord extends DnsPacket.DnsRecord { } } - private static class SvcParamIpHint extends SvcParam { + private static class SvcParamIpHint extends SvcParam> { private final List mValue; private SvcParamIpHint(int key, @NonNull ByteBuffer buf, int addrLen) throws @@ -346,6 +361,7 @@ public final class DnsSvcbRecord extends DnsPacket.DnsRecord { } } + @Override List getValue() { return Collections.unmodifiableList(mValue); } @@ -378,7 +394,7 @@ public final class DnsSvcbRecord extends DnsPacket.DnsRecord { } } - private static class SvcParamDohPath extends SvcParam { + private static class SvcParamDohPath extends SvcParam { private final String mValue; SvcParamDohPath(@NonNull ByteBuffer buf) throws BufferUnderflowException, ParseException { @@ -390,6 +406,7 @@ public final class DnsSvcbRecord extends DnsPacket.DnsRecord { mValue = new String(value, StandardCharsets.UTF_8); } + @Override String getValue() { return mValue; } @@ -401,7 +418,7 @@ public final class DnsSvcbRecord extends DnsPacket.DnsRecord { } // For other unrecognized and unimplemented SvcParams, they are stored as SvcParamGeneric. - private static class SvcParamGeneric extends SvcParam { + private static class SvcParamGeneric extends SvcParam { private final byte[] mValue; SvcParamGeneric(int key, @NonNull ByteBuffer buf) throws BufferUnderflowException, @@ -413,6 +430,12 @@ public final class DnsSvcbRecord extends DnsPacket.DnsRecord { buf.get(mValue); } + @Override + byte[] getValue() { + /* Not yet implemented */ + return null; + } + @Override public String toString() { final StringBuilder out = new StringBuilder(); diff --git a/staticlibs/tests/unit/src/com/android/net/module/util/DnsSvcbPacketTest.java b/staticlibs/tests/unit/src/com/android/net/module/util/DnsSvcbPacketTest.java index 6778f8abe1..d59795f324 100644 --- a/staticlibs/tests/unit/src/com/android/net/module/util/DnsSvcbPacketTest.java +++ b/staticlibs/tests/unit/src/com/android/net/module/util/DnsSvcbPacketTest.java @@ -207,7 +207,7 @@ public class DnsSvcbPacketTest { os.write(shortToByteArray((short) mRdataLen)); } else { final byte[] targetNameLabels = - DnsPacketUtils.DnsRecordParser.domainNameToLabels(mTargetName); + DnsPacketUtils.DnsRecordParser.domainNameToLabels(mTargetName); mRdataLen += (Short.BYTES + targetNameLabels.length); os.write(shortToByteArray((short) mRdataLen)); os.write(shortToByteArray(mSvcPriority)); @@ -251,7 +251,9 @@ public class DnsSvcbPacketTest { // Check the content returned from toString() for now because the getter function for // this SvcParam hasn't been implemented. // TODO(b/240259333): Consider adding DnsSvcbRecord.isMandatory(String alpn) when needed. - assertTrue(record.toString().contains("mandatory=ipv4hint,alpn,key333")); + assertTrue(record.toString().contains("ipv4hint")); + assertTrue(record.toString().contains("alpn")); + assertTrue(record.toString().contains("key333")); } @Test