diff --git a/eclair-core/src/main/scala/fr/acinq/eclair/io/Peer.scala b/eclair-core/src/main/scala/fr/acinq/eclair/io/Peer.scala index 79fea0691..12198312c 100644 --- a/eclair-core/src/main/scala/fr/acinq/eclair/io/Peer.scala +++ b/eclair-core/src/main/scala/fr/acinq/eclair/io/Peer.scala @@ -146,9 +146,12 @@ class Peer(val nodeParams: NodeParams, remoteNodeId: PublicKey, watcher: ActorRe context.system.eventStream.publish(swapOutResponse) stay - case Event(f: SendFCMToken, d: ConnectedData) => - log.info(s"peer forwarding $f to peerConnection") - d.peerConnection ! FCMToken(f.token) + case Event(f: SendSetFCMToken, d: ConnectedData) => + d.peerConnection ! SetFCMToken(f.token) + stay + + case Event(f: SendUnsetFCMToken, d: ConnectedData) => + d.peerConnection ! UnsetFCMToken stay case Event(c: Peer.OpenChannel, d: ConnectedData) => @@ -491,7 +494,8 @@ object Peer { case class SendSwapOutRequest(nodeId: PublicKey, amountSatoshis: Satoshi, bitcoinAddress: String, feeratePerKw: Long) case class SendSwapInRequest(nodeId: PublicKey) - case class SendFCMToken(nodeId: PublicKey, token: String) + case class SendSetFCMToken(nodeId: PublicKey, token: String) + case class SendUnsetFCMToken(nodeId: PublicKey) // @formatter:on def makeChannelParams(nodeParams: NodeParams, defaultFinalScriptPubkey: ByteVector, localPaymentBasepoint: Option[PublicKey], isFunder: Boolean, fundingAmount: Satoshi): LocalParams = { diff --git a/eclair-core/src/main/scala/fr/acinq/eclair/io/Switchboard.scala b/eclair-core/src/main/scala/fr/acinq/eclair/io/Switchboard.scala index 33ae1a9f2..b3b1893b2 100644 --- a/eclair-core/src/main/scala/fr/acinq/eclair/io/Switchboard.scala +++ b/eclair-core/src/main/scala/fr/acinq/eclair/io/Switchboard.scala @@ -81,10 +81,16 @@ class Switchboard(nodeParams: NodeParams, watcher: ActorRef, relayer: ActorRef, case None => sender ! Status.Failure(new RuntimeException("no connection to peer")) } - case f: Peer.SendFCMToken => + case f: Peer.SendSetFCMToken => getPeer(f.nodeId) match { case Some(peer) => peer forward f - case None => log.error(s"could not register fcm token=${f.token} with unknown peer=${f.nodeId}") + case None => log.error(s"could not register fcm token=${f.token} to unknown peer=${f.nodeId}") + } + + case f: Peer.SendUnsetFCMToken => + getPeer(f.nodeId) match { + case Some(peer) => peer forward f + case None => log.error(s"could not discard fcm token to unknown peer=${f.nodeId}") } case authenticated: PeerConnection.Authenticated => diff --git a/eclair-core/src/main/scala/fr/acinq/eclair/wire/LightningMessageCodecs.scala b/eclair-core/src/main/scala/fr/acinq/eclair/wire/LightningMessageCodecs.scala index 8d749317e..917d229b9 100644 --- a/eclair-core/src/main/scala/fr/acinq/eclair/wire/LightningMessageCodecs.scala +++ b/eclair-core/src/main/scala/fr/acinq/eclair/wire/LightningMessageCodecs.scala @@ -347,8 +347,10 @@ object LightningMessageCodecs { // - val fcmTokenCodec: Codec[FCMToken] = - ("fcmToken" | variableSizeBytes(uint16, utf8)).as[FCMToken] + val setFcmTokenCodec: Codec[SetFCMToken] = + ("fcmToken" | variableSizeBytes(uint16, utf8)).as[SetFCMToken] + + val unsetFcmToken: Codec[UnsetFCMToken.type ] = provide(UnsetFCMToken) val lightningMessageCodec = discriminated[LightningMessage].by(uint16) .typecase(16, initCodec) @@ -396,7 +398,8 @@ object LightningMessageCodecs { // - .typecase(35017, fcmTokenCodec) + .typecase(35017, setFcmTokenCodec) + .typecase(35019, unsetFcmToken) val meteredLightningMessageCodec = Codec[LightningMessage]( (msg: LightningMessage) => KamonExt.time(Metrics.EncodeDuration.withTag(Tags.MessageType, msg.getClass.getSimpleName))(lightningMessageCodec.encode(msg)), diff --git a/eclair-core/src/main/scala/fr/acinq/eclair/wire/LightningMessageTypes.scala b/eclair-core/src/main/scala/fr/acinq/eclair/wire/LightningMessageTypes.scala index 25118c010..acd0fe941 100644 --- a/eclair-core/src/main/scala/fr/acinq/eclair/wire/LightningMessageTypes.scala +++ b/eclair-core/src/main/scala/fr/acinq/eclair/wire/LightningMessageTypes.scala @@ -376,4 +376,5 @@ case class SwapOutResponse(chainHash: ByteVector32, // -case class FCMToken(token: String) extends LightningMessage +case class SetFCMToken(token: String) extends LightningMessage +case object UnsetFCMToken extends LightningMessage