Passo a passo para criar o plugin disable-carbon Openfire XMPP (desativa o suporte a Message Carbons (XEP-0280) no servidor, evitando a duplicação de mensagens no Gajim)


1. Preparando o ambiente

O que você vai precisar:

  • Um servidor Linux com Openfire instalado (ex: em /opt/openfire)
  • Java JDK instalado (versão 11 ou superior)
  • Acesso ao terminal shell (SSH)
  • Permissão para copiar arquivos para /opt/openfire/plugins/
  • Editor de texto (vim, nano, code, etc)

2. Estrutura de pastas do plugin

O plugin precisa de uma estrutura de diretórios e arquivos assim:

disable-carbon/
├── plugin.xml
└── src/
    └── org/
        └── devdata/
            └── disablecarbon/
                └── DisableCarbonPlugin.java

3. Criando os arquivos

3.1 plugin.xml

Crie o arquivo plugin.xml dentro da pasta disable-carbon/ com este conteúdo:

<plugin>
    <class>org.devdata.disablecarbon.DisableCarbonPlugin</class>
    <name>Disable Carbon</name>
    <description>Plugin para desabilitar Message Carbons (XEP-0280) no Openfire</description>
    <author>Anderson Kemper</author>
    <version>1.0</version>
    <minServerVersion>5.0.0</minServerVersion>
</plugin>

3.2 Código Java: DisableCarbonPlugin.java

Crie o arquivo DisableCarbonPlugin.java dentro da pasta disable-carbon/src/org/devdata/disablecarbon/ com este código:

package org.devdata.disablecarbon;

import org.jivesoftware.openfire.container.Plugin;
import org.jivesoftware.openfire.container.PluginManager;
import org.jivesoftware.openfire.disco.ServerFeaturesProvider;

import java.io.File;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class DisableCarbonPlugin implements Plugin, ServerFeaturesProvider {

    @Override
    public void initializePlugin(PluginManager manager, File pluginDirectory) {
        org.jivesoftware.openfire.disco.DiscoverItems.addServerFeatureProvider(this);
        System.out.println("DisableCarbonPlugin iniciado.");
    }

    @Override
    public void destroyPlugin() {
        org.jivesoftware.openfire.disco.DiscoverItems.removeServerFeatureProvider(this);
        System.out.println("DisableCarbonPlugin destruído.");
    }

    @Override
    public Iterator<String> getFeatures() {
        // Aqui removemos o suporte à carbons, omitindo "urn:xmpp:carbons:2"
        Set<String> features = new HashSet<>();
        features.add("http://jabber.org/protocol/disco#info");
        return features.iterator();
    }
}

4. Compilando o plugin

4.1 Organizando diretórios no Linux (exemplo)

mkdir -p ~/disable-carbon/src/org/devdata/disablecarbon

Copie o código Java para:
~/disable-carbon/src/org/devdata/disablecarbon/DisableCarbonPlugin.java

E o plugin.xml para:
~/disable-carbon/plugin.xml


4.2 Compilar o código

Use o javac apontando para as libs do Openfire:

mkdir -p ~/disable-carbon/build/classes
javac -cp "/opt/openfire/lib/*" -d ~/disable-carbon/build/classes ~/disable-carbon/src/org/devdata/disablecarbon/DisableCarbonPlugin.java

4.3 Empacotar o .jar com as classes compiladas

cd ~/disable-carbon/build/classes
jar cf ~/disable-carbon/disable-carbon.jar org

4.4 Empacotar o plugin com o plugin.xml

cd ~/disable-carbon
mkdir plugin-package
cp disable-carbon.jar plugin.xml plugin-package/
cd plugin-package
jar cf ../disable-carbon-openfire-plugin.jar *

5. Instalando no Openfire

Copie o plugin para a pasta de plugins do Openfire:

sudo cp ~/disable-carbon/disable-carbon-openfire-plugin.jar /opt/openfire/plugins/
sudo chown openfire:openfire /opt/openfire/plugins/disable-carbon-openfire-plugin.jar
sudo chmod 644 /opt/openfire/plugins/disable-carbon-openfire-plugin.jar
sudo systemctl restart openfire

6. Testando

  • Acesse a interface web do Openfire:
    http://<IP-do-servidor>:9090/plugins.jsp
  • Verifique se o plugin Disable Carbon aparece na lista e está ativo.

7. Confirmação

  • O servidor não vai anunciar mais suporte a urn:xmpp:carbons:2
  • O Gajim não deve ativar a duplicação causada pelo carbon copy
  • O plugin é leve, simples e seguro
Rolar para cima