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
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}"))
}
}

View file

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

View file

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

View file

@ -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 {

View file

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

View file

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

View file

@ -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 {

View file

@ -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 {

View file

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

View file

@ -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 {

View file

@ -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 {

View file

@ -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 {

View file

@ -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 {

View file

@ -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._

View file

@ -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,

View file

@ -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"

View file

@ -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._

View file

@ -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._

View file

@ -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 {

View file

@ -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 {

View file

@ -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.
*/

View file

@ -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) = {

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