1
0
Fork 0
mirror of https://github.com/ACINQ/eclair.git synced 2025-03-12 19:01:39 +01:00

Add code with fallback and unknown message codec

This commit is contained in:
Dominique Padiou 2024-11-21 11:46:54 +01:00
parent 90d560bd2f
commit b9109a99dd
No known key found for this signature in database
GPG key ID: 574C8C6A1673E987
2 changed files with 13 additions and 3 deletions

View file

@ -23,7 +23,7 @@ import fr.acinq.eclair.wire.Monitoring.{Metrics, Tags}
import fr.acinq.eclair.{Features, KamonExt, wire}
import scodec.bits.{BitVector, ByteVector}
import scodec.codecs._
import scodec.{Attempt, Codec}
import scodec.{Attempt, Codec, DecodeResult, SizeBound}
import scodec.bits._
/**
@ -370,6 +370,11 @@ object LightningMessageCodecs {
val phoenixAndroidLegacyMigrateResponseCodec: Codec[PhoenixAndroidLegacyMigrateResponse] =
("newNodeId" | publicKey).as[PhoenixAndroidLegacyMigrateResponse]
val unknownMessageCodec: Codec[UnknownMessage] = (
("tag" | uint16) ::
("message" | bytes)
).as[UnknownMessage]
val lightningMessageCodec = discriminated[LightningMessage].by(uint16)
.typecase(16, initCodec)
.typecase(17, errorCodec)
@ -421,12 +426,15 @@ object LightningMessageCodecs {
.typecase(35025, phoenixAndroidLegacyMigrateCodec)
.typecase(35027, phoenixAndroidLegacyMigrateResponseCodec)
val lightningMessageCodecWithFallback: Codec[LightningMessage] =
discriminatorWithDefault(lightningMessageCodec, unknownMessageCodec.upcast)
val meteredLightningMessageCodec = Codec[LightningMessage](
(msg: LightningMessage) => KamonExt.time(Metrics.EncodeDuration.withTag(Tags.MessageType, msg.getClass.getSimpleName))(lightningMessageCodec.encode(msg)),
(msg: LightningMessage) => KamonExt.time(Metrics.EncodeDuration.withTag(Tags.MessageType, msg.getClass.getSimpleName))(lightningMessageCodecWithFallback.encode(msg)),
(bits: BitVector) => {
// this is a bit more involved, because we don't know beforehand what the type of the message will be
val begin = System.nanoTime()
val res = lightningMessageCodec.decode(bits)
val res = lightningMessageCodecWithFallback.decode(bits)
val end = System.nanoTime()
val messageType = res match {
case Attempt.Successful(decoded) => decoded.value.getClass.getSimpleName

View file

@ -380,3 +380,5 @@ case object UnsetFCMToken extends LightningMessage
//
case class PhoenixAndroidLegacyMigrate(newNodeId: PublicKey) extends LightningMessage
case class PhoenixAndroidLegacyMigrateResponse(newNodeId: PublicKey) extends LightningMessage
case class UnknownMessage(tag: Int, data: ByteVector) extends LightningMessage