Organize packets in to their own packages

Also remove legacy CryptoStateManager
This commit is contained in:
Chord 2016-05-03 20:11:45 -04:00
parent e41d0ac9c4
commit ff4ea792ce
23 changed files with 65 additions and 90 deletions

View file

@ -1,8 +1,9 @@
// Copyright (c) 2016 PSForever.net to present // Copyright (c) 2016 PSForever.net to present
package net.psforever.packet package net.psforever.packet
import net.psforever.packet.control.SlottedMetaPacket
import scodec.bits.BitVector import scodec.bits.BitVector
import scodec.{Err, DecodeResult, Attempt, Codec} import scodec.{Attempt, Codec, DecodeResult, Err}
import scodec.codecs._ import scodec.codecs._
object ControlPacketOpcode extends Enumeration { object ControlPacketOpcode extends Enumeration {
@ -54,12 +55,12 @@ object ControlPacketOpcode extends Enumeration {
import net.psforever import net.psforever
opcode match { opcode match {
case HandleGamePacket => psforever.packet.HandleGamePacket.decode case HandleGamePacket => control.HandleGamePacket.decode
case ServerStart => psforever.packet.ServerStart.decode case ServerStart => control.ServerStart.decode
case ClientStart => psforever.packet.ClientStart.decode case ClientStart => control.ClientStart.decode
case MultiPacket => psforever.packet.MultiPacket.decode case MultiPacket => control.MultiPacket.decode
case SlottedMetaPacket0 => psforever.packet.SlottedMetaPacket.decode case SlottedMetaPacket0 => SlottedMetaPacket.decode
case ConnectionClose => psforever.packet.ConnectionClose.decode case ConnectionClose => control.ConnectionClose.decode
case default => (a : BitVector) => Attempt.failure(Err(s"Could not find a marshaller for control packet ${opcode}")) case default => (a : BitVector) => Attempt.failure(Err(s"Could not find a marshaller for control packet ${opcode}"))
} }
} }

View file

@ -2,7 +2,7 @@
package net.psforever.packet package net.psforever.packet
import scodec.bits.BitVector 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) // this isnt actually used as an opcode (i.e not serialized)
object CryptoPacketOpcode extends Enumeration { object CryptoPacketOpcode extends Enumeration {
@ -14,10 +14,10 @@ object CryptoPacketOpcode extends Enumeration {
import net.psforever import net.psforever
opcode match { opcode match {
case ClientChallengeXchg => psforever.packet.ClientChallengeXchg.decode case ClientChallengeXchg => crypto.ClientChallengeXchg.decode
case ServerChallengeXchg => psforever.packet.ServerChallengeXchg.decode case ServerChallengeXchg => crypto.ServerChallengeXchg.decode
case ServerFinished => psforever.packet.ServerFinished.decode case ServerFinished => crypto.ServerFinished.decode
case ClientFinished => psforever.packet.ClientFinished.decode case ClientFinished => crypto.ClientFinished.decode
case default => (a : BitVector) => Attempt.failure(Err(s"Could not find a marshaller for crypto packet ${opcode}") case default => (a : BitVector) => Attempt.failure(Err(s"Could not find a marshaller for crypto packet ${opcode}")
.pushContext("get_marshaller")) .pushContext("get_marshaller"))
} }

View file

@ -1,7 +1,7 @@
// Copyright (c) 2016 PSForever.net to present // Copyright (c) 2016 PSForever.net to present
package net.psforever.packet package net.psforever.packet
import scodec.{Err, DecodeResult, Attempt, Codec} import scodec.{Attempt, Codec, DecodeResult, Err}
import scodec.bits.BitVector import scodec.bits.BitVector
import scodec.codecs._ import scodec.codecs._
@ -35,9 +35,9 @@ object GamePacketOpcode extends Enumeration {
import net.psforever import net.psforever
opcode match { opcode match {
case LoginMessage => psforever.packet.LoginMessage.decode case LoginMessage => game.LoginMessage.decode
case LoginRespMessage => psforever.packet.LoginRespMessage.decode case LoginRespMessage => game.LoginRespMessage.decode
case VNLWorldStatusMessage => psforever.packet.VNLWorldStatusMessage.decode case VNLWorldStatusMessage => game.VNLWorldStatusMessage.decode
case default => (a : BitVector) => Attempt.failure(Err(s"Could not find a marshaller for game packet ${opcode}")) case default => (a : BitVector) => Attempt.failure(Err(s"Could not find a marshaller for game packet ${opcode}"))
} }
} }

View file

@ -1,9 +1,10 @@
// Copyright (c) 2016 PSForever.net to present // 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.Codec
import scodec.codecs._
import scodec.bits._ import scodec.bits._
import scodec.codecs._
final case class ClientStart(clientNonce : Long) final case class ClientStart(clientNonce : Long)
extends PlanetSideControlPacket { extends PlanetSideControlPacket {

View file

@ -1,6 +1,7 @@
// Copyright (c) 2016 PSForever.net to present // Copyright (c) 2016 PSForever.net to present
package net.psforever.packet package net.psforever.packet.control
import net.psforever.packet._
import scodec.Codec import scodec.Codec
final case class ConnectionClose() final case class ConnectionClose()

View file

@ -1,8 +1,9 @@
// Copyright (c) 2016 PSForever.net to present // 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.Codec
import scodec.bits.ByteVector
import scodec.codecs._ import scodec.codecs._
final case class HandleGamePacket(packet : ByteVector) final case class HandleGamePacket(packet : ByteVector)

View file

@ -1,10 +1,10 @@
// Copyright (c) 2016 PSForever.net to present // 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.Codec
import scodec.bits.ByteVector
import scodec.codecs._ import scodec.codecs._
import scodec.bits._
final case class MultiPacket(packets : Vector[ByteVector]) final case class MultiPacket(packets : Vector[ByteVector])
extends PlanetSideControlPacket { extends PlanetSideControlPacket {

View file

@ -1,9 +1,10 @@
// Copyright (c) 2016 PSForever.net to present // 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.Codec
import scodec.codecs._
import scodec.bits._ import scodec.bits._
import scodec.codecs._
final case class ServerStart(clientNonce : Long, serverNonce : Long) final case class ServerStart(clientNonce : Long, serverNonce : Long)
extends PlanetSideControlPacket { extends PlanetSideControlPacket {

View file

@ -1,8 +1,9 @@
// Copyright (c) 2016 PSForever.net to present // 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.Codec
import scodec.bits.ByteVector
import scodec.codecs._ import scodec.codecs._
final case class SlottedMetaPacket(/*slot : Int,*/ packet : ByteVector) final case class SlottedMetaPacket(/*slot : Int,*/ packet : ByteVector)

View file

@ -1,11 +1,10 @@
// Copyright (c) 2016 PSForever.net to present // 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.Codec
import scodec.bits.{ByteVector, _}
import scodec.codecs._ import scodec.codecs._
import scodec.bits._
final case class ClientChallengeXchg(time : Long, challenge : ByteVector, p : ByteVector, g : ByteVector) final case class ClientChallengeXchg(time : Long, challenge : ByteVector, p : ByteVector, g : ByteVector)
extends PlanetSideCryptoPacket { extends PlanetSideCryptoPacket {

View file

@ -1,10 +1,10 @@
// Copyright (c) 2016 PSForever.net to present // 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.Codec
import scodec.bits.{ByteVector, _}
import scodec.codecs._ import scodec.codecs._
import scodec.bits._
final case class ClientFinished(pubKey : ByteVector, challengeResult: ByteVector) final case class ClientFinished(pubKey : ByteVector, challengeResult: ByteVector)
extends PlanetSideCryptoPacket { extends PlanetSideCryptoPacket {

View file

@ -1,10 +1,10 @@
// Copyright (c) 2016 PSForever.net to present // 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.Codec
import scodec.bits.{ByteVector, _}
import scodec.codecs._ import scodec.codecs._
import scodec.bits._
final case class ServerChallengeXchg(time : Long, challenge : ByteVector, pubKey : ByteVector) final case class ServerChallengeXchg(time : Long, challenge : ByteVector, pubKey : ByteVector)
extends PlanetSideCryptoPacket { extends PlanetSideCryptoPacket {

View file

@ -1,10 +1,10 @@
// Copyright (c) 2016 PSForever.net to present // 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.Codec
import scodec.bits.{ByteVector, _}
import scodec.codecs._ import scodec.codecs._
import scodec.bits._
final case class ServerFinished(challengeResult : ByteVector) final case class ServerFinished(challengeResult : ByteVector)
extends PlanetSideCryptoPacket { extends PlanetSideCryptoPacket {

View file

@ -1,6 +1,7 @@
// Copyright (c) 2016 PSForever.net to present // 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.Codec
import scodec.codecs._ import scodec.codecs._

View file

@ -1,9 +1,9 @@
// Copyright (c) 2016 PSForever.net to present // 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.Codec
import scodec.codecs._ import scodec.codecs._
import scodec.bits._
import shapeless._ import shapeless._
final case class LoginMessage(majorVersion : Long, final case class LoginMessage(majorVersion : Long,

View file

@ -1,10 +1,10 @@
// Copyright (c) 2016 PSForever.net to present // 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.Codec
import scodec.bits.ByteVector
import scodec.codecs._ import scodec.codecs._
import scodec.bits._
final case class LoginRespMessage(token : String, // printable ascii for 16 final case class LoginRespMessage(token : String, // printable ascii for 16
unknown : ByteVector, // hex"00000000 18FABE0C 00000000 00000000" unknown : ByteVector, // hex"00000000 18FABE0C 00000000 00000000"

View file

@ -1,8 +1,9 @@
// Copyright (c) 2016 PSForever.net to present // Copyright (c) 2016 PSForever.net to present
package net.psforever.packet package net.psforever.packet.game
import java.net.{InetAddress, InetSocketAddress} import java.net.{InetAddress, InetSocketAddress}
import net.psforever.packet.{GamePacketOpcode, Marshallable, PacketHelpers, PlanetSideGamePacket}
import scodec._ import scodec._
import scodec.bits._ import scodec.bits._
import scodec.codecs._ import scodec.codecs._

View file

@ -1,6 +1,8 @@
// Copyright (c) 2016 PSForever.net to present // Copyright (c) 2016 PSForever.net to present
import org.specs2.mutable._ import org.specs2.mutable._
import net.psforever.packet._ 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.Codec
import scodec.bits._ import scodec.bits._

View file

@ -3,6 +3,7 @@ import java.net.{InetAddress, InetSocketAddress}
import org.specs2.mutable._ import org.specs2.mutable._
import net.psforever.packet._ import net.psforever.packet._
import net.psforever.packet.game._
import scodec.bits._ import scodec.bits._
class GamePacketTest extends Specification { class GamePacketTest extends Specification {

View file

@ -1,6 +1,7 @@
// Copyright (c) 2016 PSForever.net to present // Copyright (c) 2016 PSForever.net to present
import org.specs2.mutable._ import org.specs2.mutable._
import net.psforever.packet._ import net.psforever.packet._
import net.psforever.packet.control.{ClientStart, ServerStart}
import scodec.bits._ import scodec.bits._
class PacketCodingTest extends Specification { class PacketCodingTest extends Specification {

View file

@ -11,6 +11,9 @@ import scodec.{Attempt, Codec, Err}
import scodec.codecs.{bytes, uint16L, uint8L} import scodec.codecs.{bytes, uint16L, uint8L}
import java.security.SecureRandom 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. * Actor that stores crypto state for a connection and filters away any packet metadata.
*/ */

View file

@ -3,6 +3,8 @@ import java.net.{InetAddress, InetSocketAddress}
import akka.actor.{Actor, ActorLogging, ActorRef, Identify, MDCContextAware} import akka.actor.{Actor, ActorLogging, ActorRef, Identify, MDCContextAware}
import net.psforever.packet._ import net.psforever.packet._
import net.psforever.packet.control.{ConnectionClose, SlottedMetaPacket}
import net.psforever.packet.game._
import scodec.Attempt.{Failure, Successful} import scodec.Attempt.{Failure, Successful}
import scodec.bits._ import scodec.bits._
@ -61,7 +63,7 @@ class LoginSessionActor extends Actor with MDCContextAware {
} }
def handleGamePkt(pkt : PlanetSideGamePacket) = { def handleGamePkt(pkt : PlanetSideGamePacket) = {
log.debug(s"Unhandled GamePacket ${pkt}")
} }
def failWithError(error : String) = { def failWithError(error : String) = {

View file

@ -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()
}