disable resetting of sequence num to 0

This commit is contained in:
Jakob Gillich 2023-04-13 12:08:46 +00:00
parent 5c15a8a3cf
commit 65973fee8b
No known key found for this signature in database
GPG key ID: FD8BF52DB8452C91

View file

@ -193,10 +193,8 @@ class MiddlewareActor(
/** Queue of outgoing packets ready for sending */ /** Queue of outgoing packets ready for sending */
val outQueueBundled: mutable.Queue[PlanetSidePacket] = mutable.Queue() val outQueueBundled: mutable.Queue[PlanetSidePacket] = mutable.Queue()
/** Latest outbound sequence number; /** Latest outbound sequence number */
* the current sequence is one less than this number var outSequence = -1
*/
var outSequence = 0
/** /**
* Increment the outbound sequence number. * Increment the outbound sequence number.
@ -205,13 +203,18 @@ class MiddlewareActor(
* @return * @return
*/ */
def nextSequence: Int = { def nextSequence: Int = {
val r = outSequence if (outSequence >= 0xffff) {
if (outSequence == 0xffff) { // TODO resetting the sequence to 0 causes a client crash
outSequence = 0 // but that does not happen when we always send the same number
} else { // the solution is most likely to send the proper ResetSequence payload
outSequence += 1 // send(ResetSequence(), None, crypto)
// outSequence = -1
// return nextSequence
return outSequence
} }
r outSequence += 1
outSequence
} }
/** Latest outbound subslot number; /** Latest outbound subslot number;
@ -454,6 +457,11 @@ class MiddlewareActor(
case Successful((packet, Some(sequence))) => case Successful((packet, Some(sequence))) =>
activeSequenceFunc(packet, sequence) activeSequenceFunc(packet, sequence)
case Successful((packet, None)) => case Successful((packet, None)) =>
packet match {
case _: PlanetSideResetSequencePacket =>
log.info(s"ResetSequence: ${msg}, inSeq: ${inSequence}, outSeq: ${outSequence}")
case _ => ()
}
in(packet) in(packet)
case Failure(e) => case Failure(e) =>
log.error(s"Could not decode $connectionId's packet: $e") log.error(s"Could not decode $connectionId's packet: $e")
@ -569,9 +577,14 @@ class MiddlewareActor(
log.error(s"Unexpected crypto packet '$packet'") log.error(s"Unexpected crypto packet '$packet'")
Behaviors.same Behaviors.same
case _: PlanetSideResetSequencePacket => case packet: PlanetSideResetSequencePacket =>
log.debug("Received sequence reset request from client; complying") // TODO This is wrong
outSequence = 0 // I suspect ResetSequence is a notification that the remote sequence has been reset
// rather than a request to reset our outgoing sequence number
// Resetting it this way causes a client crash, see nextSequence
// log.debug(s"Received sequence reset request from client: $packet.}")
// outSequence = 0
Behaviors.same Behaviors.same
} }
} }