From 88ac2f35f744f1087e88f5b5bf9a2045aeed07bf Mon Sep 17 00:00:00 2001 From: Resaec Date: Wed, 27 Dec 2023 01:47:25 +0100 Subject: [PATCH] Append opportunistic overhang data consumer --- .../packet/game/VoiceHostRequest.scala | 7 ++-- .../scala/game/VoiceHostRequestTest.scala | 34 +++++++++++-------- 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/src/main/scala/net/psforever/packet/game/VoiceHostRequest.scala b/src/main/scala/net/psforever/packet/game/VoiceHostRequest.scala index 2e143231f..a5902c1b5 100644 --- a/src/main/scala/net/psforever/packet/game/VoiceHostRequest.scala +++ b/src/main/scala/net/psforever/packet/game/VoiceHostRequest.scala @@ -3,6 +3,7 @@ package net.psforever.packet.game import net.psforever.packet.{GamePacketOpcode, Marshallable, PacketHelpers, PlanetSideGamePacket} import scodec.Codec +import scodec.bits.ByteVector import scodec.codecs._ /** @@ -19,7 +20,8 @@ final case class VoiceHostRequest( remote_host: Boolean, port: Int, bandwidth: Int, - remote_ip: String + remote_ip: String, + data: ByteVector ) extends PlanetSideGamePacket { require(port > 0) require(port <= 65535) @@ -35,6 +37,7 @@ object VoiceHostRequest extends Marshallable[VoiceHostRequest] { ("remote_host" | bool) :: ("port" | uint16L) :: ("bandwidth" | uint8L) :: - ("remote_ip" | PacketHelpers.encodedStringAligned(7)) + ("remote_ip" | PacketHelpers.encodedStringAligned(7)) :: + ("data" | bytes) ).as[VoiceHostRequest] } diff --git a/src/test/scala/game/VoiceHostRequestTest.scala b/src/test/scala/game/VoiceHostRequestTest.scala index 51cae071e..d1bf096cf 100644 --- a/src/test/scala/game/VoiceHostRequestTest.scala +++ b/src/test/scala/game/VoiceHostRequestTest.scala @@ -7,25 +7,26 @@ import net.psforever.packet.game._ import scodec.bits._ class VoiceHostRequestTest extends Specification { - val string_request_local_75_high = hex"b0 25 80 01c000" - val string_request_local_1111_mid = hex"b0 2b 82 64c000" - val string_request_local_1112_mid = hex"b0 2c 02 64c000" - val string_request_remote_12345_high = hex"b0 9c 98 01c780 3131312e3232322e3132332e323334" + val string_request_local_75_high = hex"b0 2580 01 c0 00" + val string_request_local_1111_mid = hex"b0 2b82 64 c0 00" + val string_request_local_1112_mid = hex"b0 2c02 64 c0 00" + val string_request_remote_12345_high = hex"b0 9c98 01 c7 803131312e3232322e3132332e323334" "decode local 75 high" in { PacketCoding.decodePacket(string_request_local_75_high).require match { - case VoiceHostRequest(remote_host, port, bandwidth, data) => + case VoiceHostRequest(remote_host, port, bandwidth, server_ip, data) => remote_host mustEqual false port mustEqual 75 bandwidth mustEqual 3 - data mustEqual "" + server_ip mustEqual "" + data mustEqual ByteVector.empty case _ => ko } } "encode local 75 high" in { - val msg = VoiceHostRequest(remote_host = false, 75, 3, "") + val msg = VoiceHostRequest(remote_host = false, 75, 3, "", ByteVector.empty) val pkt = PacketCoding.encodePacket(msg).require.toByteVector pkt mustEqual string_request_local_75_high @@ -33,18 +34,19 @@ class VoiceHostRequestTest extends Specification { "decode local 1111 mid" in { PacketCoding.decodePacket(string_request_local_1111_mid).require match { - case VoiceHostRequest(remote_host, port, bandwidth, data) => + case VoiceHostRequest(remote_host, port, bandwidth, server_ip, data) => remote_host mustEqual false port mustEqual 1111 bandwidth mustEqual 201 - data mustEqual "" + server_ip mustEqual "" + data mustEqual ByteVector.empty case _ => ko } } "encode local 1111 mid" in { - val msg = VoiceHostRequest(remote_host = false, 1111, 201, "") + val msg = VoiceHostRequest(remote_host = false, 1111, 201, "", ByteVector.empty) val pkt = PacketCoding.encodePacket(msg).require.toByteVector pkt mustEqual string_request_local_1111_mid @@ -52,18 +54,19 @@ class VoiceHostRequestTest extends Specification { "decode local 1112 mid" in { PacketCoding.decodePacket(string_request_local_1112_mid).require match { - case VoiceHostRequest(remote_host, port, bandwidth, data) => + case VoiceHostRequest(remote_host, port, bandwidth, server_ip, data) => remote_host mustEqual false port mustEqual 1112 bandwidth mustEqual 201 - data mustEqual "" + server_ip mustEqual "" + data mustEqual ByteVector.empty case _ => ko } } "encode local 1112 mid" in { - val msg = VoiceHostRequest(remote_host = false, 1112, 201, "") + val msg = VoiceHostRequest(remote_host = false, 1112, 201, "", ByteVector.empty) val pkt = PacketCoding.encodePacket(msg).require.toByteVector pkt mustEqual string_request_local_1112_mid @@ -71,18 +74,19 @@ class VoiceHostRequestTest extends Specification { "decode remote 12345 high" in { PacketCoding.decodePacket(string_request_remote_12345_high).require match { - case VoiceHostRequest(remote, port, codec, server_ip) => + case VoiceHostRequest(remote, port, codec, server_ip, data) => remote mustEqual true port mustEqual 12345 codec mustEqual 3 server_ip mustEqual "111.222.123.234" + data mustEqual ByteVector.empty case _ => ko } } "encode remote 12345 high" in { - val msg = VoiceHostRequest(remote_host = true, port = 12345, bandwidth = 3, remote_ip = "111.222.123.234") + val msg = VoiceHostRequest(remote_host = true, port = 12345, bandwidth = 3, remote_ip = "111.222.123.234", ByteVector.empty) val pkt = PacketCoding.encodePacket(msg).require.toByteVector pkt mustEqual string_request_remote_12345_high