private CompletableFuture<?> propagateInbound( @Nonnull Packet stanza, @Nonnull MUCOccupant sender )
    {
        Log.trace("(room: '{}'): Propagate inbound, stanza: {}, sender: {}", room.getJID(), stanza, sender);
        if ( inboundJoins.isEmpty() )
        {
            Log.trace("(room: '{}'): No remote MUC joining us. No need to propagate inbound.", room.getJID());
            return CompletableFuture.completedFuture(null);
        }

        Log.trace( "(room: '{}'): Propagating a stanza (type '{}') from user '{}' (as '{}') to the all {} joining FMUC nodes.", room.getJID(), stanza.getClass().getSimpleName(), sender.getUserAddress(), sender.getOccupantJID(), inboundJoins.size() );

        for( final InboundJoin inboundJoin : inboundJoins.values() )
        {
            if ( !inboundJoin.wantsStanzasSentBy( sender ) ) {
                Log.trace("(room: '{}'): Skipping inbound propagation to peer '{}', as this peer needs not be sent stanzas sent by '{}' (potentially because it's a master-slave mode joined FMUC and the sender originates on that node).", room.getJID(), inboundJoin.getPeer(), sender );
                continue;
            }

            Log.trace( "(room: '{}'): Propagating a stanza (type '{}') from user '{}' (as '{}') to the joining FMUC node '{}'", room.getJID(), stanza.getClass().getSimpleName(), sender.getUserAddress(), sender.getOccupantJID(), inboundJoin.getPeer() );
            final Packet enriched = enrichWithFMUCElement( stanza, sender );
            enriched.setFrom( sender.getOccupantJID() );
            enriched.setTo( inboundJoin.getPeer() );
            XMPPServer.getInstance().getPacketRouter().route( enriched );
        }
        return CompletableFuture.completedFuture(null);
    }
Sends a stanza to all joined FMUC node, when the local node has accepted such inbound joins from remote peers.

Optionally, the address if one particular peer can be provided to avoid propagation of the stanza to that
particular node. This is to be used to prevent 'echos back' to the originating FMUC node, when appropriate.

@param stanza The stanza to be sent.
@param sender Representation of the sender of the stanza.
@return A future object that completes when the stanza can be propagated locally.
xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/FMUCHandler.java