@@ -167,7 +167,7 @@ open class GossipRouter(
167167 super .onPeerActive(peer)
168168 eventBroadcaster.notifyConnected(peer.peerId, peer.getRemoteAddress())
169169 heartbeatTask.hashCode() // force lazy initialization
170- sendExtensionsControl (peer)
170+ sendControlExtensions (peer)
171171 }
172172
173173 override fun notifyUnseenMessage (peer : PeerHandler , msg : PubsubMessage ) {
@@ -400,35 +400,56 @@ open class GossipRouter(
400400 ) {
401401 logger.trace(" Received control extension {}" , ctrlExtensions.toString())
402402
403- if (gossipExtensionsState.hasReceivedExtensionControlFrom (receivedFrom.peerId)) {
403+ if (gossipExtensionsState.hasReceivedControlExtensionsFrom (receivedFrom.peerId)) {
404404 // TODO Should disconnect peers that send control extension multiple times (https://github.com/libp2p/jvm-libp2p/issues/437)
405405 logger.trace(
406406 " Received another control extension message from peer {}" ,
407407 receivedFrom.peerId
408408 )
409409 return
410410 } else {
411- gossipExtensionsState.onExtensionControlMessage (ctrlExtensions, receivedFrom.peerId)
411+ gossipExtensionsState.onControlExtensionsMessage (ctrlExtensions, receivedFrom.peerId)
412412 }
413413 }
414414
415415 override fun processExtensions (msg : Rpc .RPC , receivedFrom : PeerHandler ) {
416416 val peerSupportedExtensions =
417417 gossipExtensionsState.peerSupportedExtensions(receivedFrom.peerId)
418- if (peerSupportedExtensions == null ) {
418+
419+ // TODO Revisit this logic as part of adding feature flags (https://github.com/libp2p/jvm-libp2p/issues/441)
420+
421+ when {
422+ msg.hasTestExtension() && checkPeerExtensionSupport(
423+ peerSupportedExtensions,
424+ Rpc .ControlExtensions ::hasTestExtension
425+ ) ->
426+ processTestExtensionMessage(msg.testExtension, receivedFrom)
427+
428+ msg.hasPartial() && checkPeerExtensionSupport(
429+ peerSupportedExtensions,
430+ Rpc .ControlExtensions ::hasPartialMessages
431+ ) ->
432+ processPartialMessageExtension(msg.partial, receivedFrom)
433+ }
434+ }
435+
436+ private fun checkPeerExtensionSupport (
437+ peerSavedPreferences : Rpc .ControlExtensions ? ,
438+ checkSupportFunction : (Rpc .ControlExtensions ) -> Boolean
439+ ): Boolean {
440+ if (peerSavedPreferences == null ) {
441+ return false
442+ }
443+
444+ if (! checkSupportFunction.invoke(peerSavedPreferences)) {
419445 logger.trace(
420- " Ignoring extension messages from peer {} - did it send an extension control message?" ,
421- receivedFrom.peerId
446+ " Ignoring extension messages from peer {} - did it send an control extensions message?" ,
447+ peerSavedPreferences
422448 )
423- } else {
424- when {
425- peerSupportedExtensions.hasTestExtension() && msg.hasTestExtension() ->
426- processTestExtensionMessage(msg.testExtension, receivedFrom)
427-
428- peerSupportedExtensions.hasPartialMessages() && msg.hasPartial() ->
429- processPartialMessageExtension(msg.partial, receivedFrom)
430- }
449+ return false
431450 }
451+
452+ return true
432453 }
433454
434455 private fun processTestExtensionMessage (
@@ -582,7 +603,7 @@ open class GossipRouter(
582603 lastPublished - = topic
583604 }
584605
585- activePeers.forEach { sendExtensionsControl (it) }
606+ activePeers.forEach { sendControlExtensions (it) }
586607 }
587608
588609 override fun unsubscribe (topic : Topic ) {
@@ -783,23 +804,25 @@ open class GossipRouter(
783804 send(peer, iDontWant)
784805 }
785806
786- private fun sendExtensionsControl (peer : PeerHandler ) {
807+ private fun sendControlExtensions (peer : PeerHandler ) {
787808 if (! this .protocol.supportsExtensions()) {
788809 logger.trace(
789- " Protocol does not support extensions. Won't send extensions control message."
810+ " Protocol does not support extensions. Won't send control extensions message."
790811 )
791812 return
792813 }
793814
794- if (gossipExtensionsState.hasSentExtensionControlTo (peer.peerId)) {
815+ if (gossipExtensionsState.hasSentControlExtensionsTo (peer.peerId)) {
795816 logger.trace(
796- " Already sent extension control msg to peer {}. Won't send another one." ,
817+ " Already sent control extensions msg to peer {}. Won't send another one." ,
797818 peer.peerId
798819 )
799820 return
800821 }
801822
802- pendingRpcParts.getQueue(peer).addExtensionsControl(
823+ logger.trace(" Sending control extensions message to peer {}" , peer.peerId)
824+
825+ pendingRpcParts.getQueue(peer).addControlExtensions(
803826 Rpc .ControlExtensions .newBuilder()
804827 .setTestExtension(true )
805828 .setPartialMessages(true )
0 commit comments