From aa7bc8d78920ae91ad3d126c3245596e8729e4d6 Mon Sep 17 00:00:00 2001 From: "Jason_DiDonato@yahoo.com" Date: Wed, 21 Jul 2021 09:36:36 -0400 Subject: [PATCH] method to send raw hexadecimal packet code, whether or not that packet code is valid --- .../actors/net/MiddlewareActor.scala | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/main/scala/net/psforever/actors/net/MiddlewareActor.scala b/src/main/scala/net/psforever/actors/net/MiddlewareActor.scala index a5947987..443e515a 100644 --- a/src/main/scala/net/psforever/actors/net/MiddlewareActor.scala +++ b/src/main/scala/net/psforever/actors/net/MiddlewareActor.scala @@ -22,7 +22,7 @@ import net.psforever.objects.Default import net.psforever.packet._ import net.psforever.packet.control._ import net.psforever.packet.crypto.{ClientChallengeXchg, ClientFinished, ServerChallengeXchg, ServerFinished} -import net.psforever.packet.game.{ChangeFireModeMessage, CharacterInfoMessage, KeepAliveMessage, PingMsg} +import net.psforever.packet.game._ import net.psforever.packet.PacketCoding.CryptoCoding import net.psforever.util.{Config, DiffieHellman, Md5Mac} @@ -89,6 +89,16 @@ object MiddlewareActor { /** Send outgoing packet */ final case class Send(msg: PlanetSidePacket) extends Command + /** Send outgoing packet as its hexadecimal directly */ + final case class Raw(msg: BitVector, exclusive: Boolean) extends Command + object Raw { + def apply(msg: BitVector): Raw = Raw(msg, exclusive = false) + + def apply(msg: ByteVector): Raw = Raw(msg.toBitVector, exclusive = false) + + def apply(msg: ByteVector, exclusive: Boolean): Raw = Raw(msg, exclusive) + } + /** Teardown connection */ final case class Teardown() extends Command @@ -442,6 +452,14 @@ class MiddlewareActor( out(packet) Behaviors.same + case Raw(msg, exclusive) => + if (exclusive) { + outQueue.enqueue((KeepAliveMessage(), msg)) //caught by bundling isolation filter + } else { + outQueue.enqueue((ActionResultMessage.Pass, msg)) + } + Behaviors.same + case ProcessQueue() => processQueue() Behaviors.same