mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-01-19 18:14:44 +00:00
Organize packets in to their own packages
Also remove legacy CryptoStateManager
This commit is contained in:
parent
e41d0ac9c4
commit
ff4ea792ce
|
|
@ -1,8 +1,9 @@
|
|||
// Copyright (c) 2016 PSForever.net to present
|
||||
package net.psforever.packet
|
||||
|
||||
import net.psforever.packet.control.SlottedMetaPacket
|
||||
import scodec.bits.BitVector
|
||||
import scodec.{Err, DecodeResult, Attempt, Codec}
|
||||
import scodec.{Attempt, Codec, DecodeResult, Err}
|
||||
import scodec.codecs._
|
||||
|
||||
object ControlPacketOpcode extends Enumeration {
|
||||
|
|
@ -54,12 +55,12 @@ object ControlPacketOpcode extends Enumeration {
|
|||
import net.psforever
|
||||
|
||||
opcode match {
|
||||
case HandleGamePacket => psforever.packet.HandleGamePacket.decode
|
||||
case ServerStart => psforever.packet.ServerStart.decode
|
||||
case ClientStart => psforever.packet.ClientStart.decode
|
||||
case MultiPacket => psforever.packet.MultiPacket.decode
|
||||
case SlottedMetaPacket0 => psforever.packet.SlottedMetaPacket.decode
|
||||
case ConnectionClose => psforever.packet.ConnectionClose.decode
|
||||
case HandleGamePacket => control.HandleGamePacket.decode
|
||||
case ServerStart => control.ServerStart.decode
|
||||
case ClientStart => control.ClientStart.decode
|
||||
case MultiPacket => control.MultiPacket.decode
|
||||
case SlottedMetaPacket0 => SlottedMetaPacket.decode
|
||||
case ConnectionClose => control.ConnectionClose.decode
|
||||
case default => (a : BitVector) => Attempt.failure(Err(s"Could not find a marshaller for control packet ${opcode}"))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
package net.psforever.packet
|
||||
|
||||
import scodec.bits.BitVector
|
||||
import scodec.{Err, DecodeResult, Attempt}
|
||||
import scodec.{Attempt, DecodeResult, Err}
|
||||
|
||||
// this isnt actually used as an opcode (i.e not serialized)
|
||||
object CryptoPacketOpcode extends Enumeration {
|
||||
|
|
@ -14,10 +14,10 @@ object CryptoPacketOpcode extends Enumeration {
|
|||
import net.psforever
|
||||
|
||||
opcode match {
|
||||
case ClientChallengeXchg => psforever.packet.ClientChallengeXchg.decode
|
||||
case ServerChallengeXchg => psforever.packet.ServerChallengeXchg.decode
|
||||
case ServerFinished => psforever.packet.ServerFinished.decode
|
||||
case ClientFinished => psforever.packet.ClientFinished.decode
|
||||
case ClientChallengeXchg => crypto.ClientChallengeXchg.decode
|
||||
case ServerChallengeXchg => crypto.ServerChallengeXchg.decode
|
||||
case ServerFinished => crypto.ServerFinished.decode
|
||||
case ClientFinished => crypto.ClientFinished.decode
|
||||
case default => (a : BitVector) => Attempt.failure(Err(s"Could not find a marshaller for crypto packet ${opcode}")
|
||||
.pushContext("get_marshaller"))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
// Copyright (c) 2016 PSForever.net to present
|
||||
package net.psforever.packet
|
||||
|
||||
import scodec.{Err, DecodeResult, Attempt, Codec}
|
||||
import scodec.{Attempt, Codec, DecodeResult, Err}
|
||||
import scodec.bits.BitVector
|
||||
import scodec.codecs._
|
||||
|
||||
|
|
@ -35,9 +35,9 @@ object GamePacketOpcode extends Enumeration {
|
|||
import net.psforever
|
||||
|
||||
opcode match {
|
||||
case LoginMessage => psforever.packet.LoginMessage.decode
|
||||
case LoginRespMessage => psforever.packet.LoginRespMessage.decode
|
||||
case VNLWorldStatusMessage => psforever.packet.VNLWorldStatusMessage.decode
|
||||
case LoginMessage => game.LoginMessage.decode
|
||||
case LoginRespMessage => game.LoginRespMessage.decode
|
||||
case VNLWorldStatusMessage => game.VNLWorldStatusMessage.decode
|
||||
case default => (a : BitVector) => Attempt.failure(Err(s"Could not find a marshaller for game packet ${opcode}"))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
// Copyright (c) 2016 PSForever.net to present
|
||||
package net.psforever.packet
|
||||
package net.psforever.packet.control
|
||||
|
||||
import net.psforever.packet.{ControlPacketOpcode, Marshallable, PlanetSideControlPacket}
|
||||
import scodec.Codec
|
||||
import scodec.codecs._
|
||||
import scodec.bits._
|
||||
import scodec.codecs._
|
||||
|
||||
final case class ClientStart(clientNonce : Long)
|
||||
extends PlanetSideControlPacket {
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
// Copyright (c) 2016 PSForever.net to present
|
||||
package net.psforever.packet
|
||||
package net.psforever.packet.control
|
||||
|
||||
import net.psforever.packet._
|
||||
import scodec.Codec
|
||||
|
||||
final case class ConnectionClose()
|
||||
|
|
@ -1,8 +1,9 @@
|
|||
// Copyright (c) 2016 PSForever.net to present
|
||||
package net.psforever.packet
|
||||
package net.psforever.packet.control
|
||||
|
||||
import scodec.bits.ByteVector
|
||||
import net.psforever.packet.{ControlPacketOpcode, Marshallable, PlanetSideControlPacket}
|
||||
import scodec.Codec
|
||||
import scodec.bits.ByteVector
|
||||
import scodec.codecs._
|
||||
|
||||
final case class HandleGamePacket(packet : ByteVector)
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
// Copyright (c) 2016 PSForever.net to present
|
||||
package net.psforever.packet
|
||||
package net.psforever.packet.control
|
||||
|
||||
import scodec.bits.ByteVector
|
||||
import net.psforever.packet.{ControlPacketOpcode, Marshallable, PlanetSideControlPacket}
|
||||
import scodec.Codec
|
||||
import scodec.bits.ByteVector
|
||||
import scodec.codecs._
|
||||
import scodec.bits._
|
||||
|
||||
final case class MultiPacket(packets : Vector[ByteVector])
|
||||
extends PlanetSideControlPacket {
|
||||
|
|
@ -1,9 +1,10 @@
|
|||
// Copyright (c) 2016 PSForever.net to present
|
||||
package net.psforever.packet
|
||||
package net.psforever.packet.control
|
||||
|
||||
import net.psforever.packet.{ControlPacketOpcode, Marshallable, PlanetSideControlPacket}
|
||||
import scodec.Codec
|
||||
import scodec.codecs._
|
||||
import scodec.bits._
|
||||
import scodec.codecs._
|
||||
|
||||
final case class ServerStart(clientNonce : Long, serverNonce : Long)
|
||||
extends PlanetSideControlPacket {
|
||||
|
|
@ -1,8 +1,9 @@
|
|||
// Copyright (c) 2016 PSForever.net to present
|
||||
package net.psforever.packet
|
||||
package net.psforever.packet.control
|
||||
|
||||
import scodec.bits.ByteVector
|
||||
import net.psforever.packet.{ControlPacketOpcode, Marshallable, PlanetSideControlPacket}
|
||||
import scodec.Codec
|
||||
import scodec.bits.ByteVector
|
||||
import scodec.codecs._
|
||||
|
||||
final case class SlottedMetaPacket(/*slot : Int,*/ packet : ByteVector)
|
||||
|
|
@ -1,11 +1,10 @@
|
|||
// Copyright (c) 2016 PSForever.net to present
|
||||
package net.psforever.packet
|
||||
|
||||
import scodec.bits.ByteVector
|
||||
package net.psforever.packet.crypto
|
||||
|
||||
import net.psforever.packet.{CryptoPacketOpcode, Marshallable, PlanetSideCryptoPacket}
|
||||
import scodec.Codec
|
||||
import scodec.bits.{ByteVector, _}
|
||||
import scodec.codecs._
|
||||
import scodec.bits._
|
||||
|
||||
final case class ClientChallengeXchg(time : Long, challenge : ByteVector, p : ByteVector, g : ByteVector)
|
||||
extends PlanetSideCryptoPacket {
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
// Copyright (c) 2016 PSForever.net to present
|
||||
package net.psforever.packet
|
||||
package net.psforever.packet.crypto
|
||||
|
||||
import scodec.bits.ByteVector
|
||||
import net.psforever.packet.{CryptoPacketOpcode, Marshallable, PlanetSideCryptoPacket}
|
||||
import scodec.Codec
|
||||
import scodec.bits.{ByteVector, _}
|
||||
import scodec.codecs._
|
||||
import scodec.bits._
|
||||
|
||||
final case class ClientFinished(pubKey : ByteVector, challengeResult: ByteVector)
|
||||
extends PlanetSideCryptoPacket {
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
// Copyright (c) 2016 PSForever.net to present
|
||||
package net.psforever.packet
|
||||
package net.psforever.packet.crypto
|
||||
|
||||
import scodec.bits.ByteVector
|
||||
import net.psforever.packet.{CryptoPacketOpcode, Marshallable, PlanetSideCryptoPacket}
|
||||
import scodec.Codec
|
||||
import scodec.bits.{ByteVector, _}
|
||||
import scodec.codecs._
|
||||
import scodec.bits._
|
||||
|
||||
final case class ServerChallengeXchg(time : Long, challenge : ByteVector, pubKey : ByteVector)
|
||||
extends PlanetSideCryptoPacket {
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
// Copyright (c) 2016 PSForever.net to present
|
||||
package net.psforever.packet
|
||||
package net.psforever.packet.crypto
|
||||
|
||||
import scodec.bits.ByteVector
|
||||
import net.psforever.packet.{CryptoPacketOpcode, Marshallable, PlanetSideCryptoPacket}
|
||||
import scodec.Codec
|
||||
import scodec.bits.{ByteVector, _}
|
||||
import scodec.codecs._
|
||||
import scodec.bits._
|
||||
|
||||
final case class ServerFinished(challengeResult : ByteVector)
|
||||
extends PlanetSideCryptoPacket {
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
// Copyright (c) 2016 PSForever.net to present
|
||||
package net.psforever.packet
|
||||
package net.psforever.packet.game
|
||||
|
||||
import net.psforever.packet.{GamePacketOpcode, Marshallable, PlanetSideGamePacket}
|
||||
import scodec.Codec
|
||||
import scodec.codecs._
|
||||
|
||||
|
|
@ -1,9 +1,9 @@
|
|||
// Copyright (c) 2016 PSForever.net to present
|
||||
package net.psforever.packet
|
||||
package net.psforever.packet.game
|
||||
|
||||
import net.psforever.packet.{GamePacketOpcode, Marshallable, PacketHelpers, PlanetSideGamePacket}
|
||||
import scodec.Codec
|
||||
import scodec.codecs._
|
||||
import scodec.bits._
|
||||
import shapeless._
|
||||
|
||||
final case class LoginMessage(majorVersion : Long,
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
// Copyright (c) 2016 PSForever.net to present
|
||||
package net.psforever.packet
|
||||
package net.psforever.packet.game
|
||||
|
||||
import scodec.bits.ByteVector
|
||||
import net.psforever.packet.{GamePacketOpcode, Marshallable, PacketHelpers, PlanetSideGamePacket}
|
||||
import scodec.Codec
|
||||
import scodec.bits.ByteVector
|
||||
import scodec.codecs._
|
||||
import scodec.bits._
|
||||
|
||||
final case class LoginRespMessage(token : String, // printable ascii for 16
|
||||
unknown : ByteVector, // hex"00000000 18FABE0C 00000000 00000000"
|
||||
|
|
@ -1,8 +1,9 @@
|
|||
// Copyright (c) 2016 PSForever.net to present
|
||||
package net.psforever.packet
|
||||
package net.psforever.packet.game
|
||||
|
||||
import java.net.{InetAddress, InetSocketAddress}
|
||||
|
||||
import net.psforever.packet.{GamePacketOpcode, Marshallable, PacketHelpers, PlanetSideGamePacket}
|
||||
import scodec._
|
||||
import scodec.bits._
|
||||
import scodec.codecs._
|
||||
|
|
@ -1,6 +1,8 @@
|
|||
// Copyright (c) 2016 PSForever.net to present
|
||||
import org.specs2.mutable._
|
||||
import net.psforever.packet._
|
||||
import net.psforever.packet.control.{ClientStart, ServerStart}
|
||||
import net.psforever.packet.crypto.{ClientChallengeXchg, ClientFinished, ServerChallengeXchg, ServerFinished}
|
||||
import scodec.Codec
|
||||
import scodec.bits._
|
||||
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ import java.net.{InetAddress, InetSocketAddress}
|
|||
|
||||
import org.specs2.mutable._
|
||||
import net.psforever.packet._
|
||||
import net.psforever.packet.game._
|
||||
import scodec.bits._
|
||||
|
||||
class GamePacketTest extends Specification {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
// Copyright (c) 2016 PSForever.net to present
|
||||
import org.specs2.mutable._
|
||||
import net.psforever.packet._
|
||||
import net.psforever.packet.control.{ClientStart, ServerStart}
|
||||
import scodec.bits._
|
||||
|
||||
class PacketCodingTest extends Specification {
|
||||
|
|
|
|||
|
|
@ -11,6 +11,9 @@ import scodec.{Attempt, Codec, Err}
|
|||
import scodec.codecs.{bytes, uint16L, uint8L}
|
||||
import java.security.SecureRandom
|
||||
|
||||
import net.psforever.packet.control.{ClientStart, ServerStart}
|
||||
import net.psforever.packet.crypto._
|
||||
|
||||
/**
|
||||
* Actor that stores crypto state for a connection and filters away any packet metadata.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@ import java.net.{InetAddress, InetSocketAddress}
|
|||
|
||||
import akka.actor.{Actor, ActorLogging, ActorRef, Identify, MDCContextAware}
|
||||
import net.psforever.packet._
|
||||
import net.psforever.packet.control.{ConnectionClose, SlottedMetaPacket}
|
||||
import net.psforever.packet.game._
|
||||
import scodec.Attempt.{Failure, Successful}
|
||||
import scodec.bits._
|
||||
|
||||
|
|
@ -61,7 +63,7 @@ class LoginSessionActor extends Actor with MDCContextAware {
|
|||
}
|
||||
|
||||
def handleGamePkt(pkt : PlanetSideGamePacket) = {
|
||||
|
||||
log.debug(s"Unhandled GamePacket ${pkt}")
|
||||
}
|
||||
|
||||
def failWithError(error : String) = {
|
||||
|
|
|
|||
|
|
@ -1,41 +0,0 @@
|
|||
// Copyright (c) 2016 PSForever.net to present
|
||||
package net.psforever.crypto
|
||||
|
||||
import akka.actor.{Actor, ActorLogging, FSM}
|
||||
import akka.util.ByteString
|
||||
import scodec.Codec
|
||||
import scodec.bits.ByteVector
|
||||
|
||||
sealed trait CryptoState
|
||||
final case class ClientStart() extends CryptoState
|
||||
final case class ServerStart() extends CryptoState
|
||||
final case class ClientChallengeXchg() extends CryptoState
|
||||
final case class ServerChallengeXchg() extends CryptoState
|
||||
final case class ClientFinished() extends CryptoState
|
||||
final case class ServerFinished() extends CryptoState
|
||||
|
||||
sealed trait CryptoData
|
||||
final case class Uninitialized() extends CryptoData
|
||||
|
||||
class CryptoStateManager extends Actor with ActorLogging with FSM[CryptoState, CryptoData] {
|
||||
startWith(ClientStart(), Uninitialized())
|
||||
|
||||
when(ClientStart()) {
|
||||
/*case Event(RawPacket(msg), _) => {
|
||||
val decoded = Codec.decode[net.psforever.net.ClientStart](msg.bits)
|
||||
try {
|
||||
val packet = decoded.require.value
|
||||
println("Got cNonce: " + packet.clientNonce)
|
||||
}
|
||||
catch {
|
||||
case e : Exception =>
|
||||
println("Invalid packet: " + e.getMessage)
|
||||
}
|
||||
|
||||
stay
|
||||
}*/
|
||||
case _ => stay
|
||||
}
|
||||
|
||||
initialize()
|
||||
}
|
||||
Loading…
Reference in a new issue