private CompletableFuture<?> propagateOutbound( @Nonnull Packet stanza, @Nonnull MUCOccupant sender )
    {
        Log.trace("(room: '{}'): Propagate outbound, stanza: {}, sender: {}", room.getJID(), stanza, sender);

        if ( outboundJoin == null )
        {
            if ( outboundJoinProgress != null ) {
                Log.trace("(room: '{}'): Remote MUC joining in progress. Queuing outbound propagation until after the join has been established.", room.getJID());
                return outboundJoinProgress.addToQueue( stanza, sender );
            }
            else
            {
                Log.trace("(room: '{}'): No remote MUC joined. No need to propagate outbound.", room.getJID());
                return CompletableFuture.completedFuture(null);
            }
        }

        if ( !outboundJoin.wantsStanzasSentBy( sender ) ) {
            Log.trace("(room: '{}'): Skipping outbound propagation to peer '{}', as this peer needs not be sent stanzas sent by '{}' (potentially because it's a master-master mode joined FMUC and the sender originates on that node).", room.getJID(), outboundJoin.getPeer(), sender );
            return CompletableFuture.completedFuture(null);
        }

        final CompletableFuture<?> result = new CompletableFuture<>();
        doPropagateOutbound( stanza, sender, result );

        return result;
    }
Sends a stanza to the joined FMUC node, when the local node has established such an outbound join.

Note that when a master-slave mode is active, we need to wait for an echo back, before the message can be
broadcasted locally. This method will return a CompletableFuture object that is completed as soon as processing
can continue. This doesn't necessarily mean that processing/propagating has been completed (eg: when the FMUC
is configured to use master-master mode, a completed Future instance will be returned.

@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