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
