package org.jivesoftware.openfire.plugin; import java.io.File; import java.util.Map; import org.jivesoftware.openfire.container.Plugin; import org.jivesoftware.openfire.container.PluginManager; import org.jivesoftware.openfire.event.GroupEventDispatcher; import org.jivesoftware.openfire.interceptor.InterceptorManager; import org.jivesoftware.openfire.interceptor.PacketInterceptor; import org.jivesoftware.openfire.interceptor.PacketRejectedException; import org.jivesoftware.openfire.plugin.rules.Rule; import org.jivesoftware.openfire.plugin.rules.RuleGroupEventListener; import org.jivesoftware.openfire.plugin.rules.RuleManager; import org.jivesoftware.openfire.plugin.rules.RuleManagerProxy; import org.jivesoftware.openfire.session.Session; import org.jivesoftware.util.JiveGlobals; import org.jivesoftware.util.PropertyEventListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.xmpp.packet.Packet; public class PacketFilterPlugin implements Plugin, PacketInterceptor, PropertyEventListener { private static final Logger Log = LoggerFactory.getLogger(PacketFilterPlugin.class); private static PluginManager pluginManager; public PacketFilterPlugin() { interceptorManager = InterceptorManager.getInstance(); } // Packet Filter private PacketFilter pf; // Hook for intercpetorn private InterceptorManager interceptorManager; private RuleGroupEventListener groupEvListener; public void initializePlugin(PluginManager manager, File pluginDirectory) { // register with interceptor manager interceptorManager.addInterceptor(this); pluginManager = manager; pf = PacketFilter.getInstance(); RuleManager ruleManager = new RuleManagerProxy(); pf.setRuleManager(ruleManager); if (JiveGlobals.getBooleanProperty(PacketFilterConstants.Properties.AUTOCREATE_GROUP_RULES, true)) { groupEvListener = new RuleGroupEventListener(); GroupEventDispatcher.addListener(groupEvListener); } } public void destroyPlugin() { // unregister with interceptor manager interceptorManager.removeInterceptor(this); GroupEventDispatcher.removeListener(groupEvListener); } public String getName() { return "packetFilter"; } public static PluginManager getPluginManager() { return pluginManager; } public void interceptPacket(Packet packet, Session session, boolean incoming, boolean processed) throws PacketRejectedException { if (processed) { return; } Rule rule = pf.findMatch(packet); if (rule != null) { rule.doAction(packet); } } @Override public void propertySet(String property, Map<String, Object> params) { if (property.equals(PacketFilterConstants.Properties.AUTOCREATE_GROUP_RULES)) { if (Boolean.parseBoolean((String) params.get("value"))) { GroupEventDispatcher.removeListener(groupEvListener); groupEvListener = new RuleGroupEventListener(); GroupEventDispatcher.addListener(groupEvListener); } else { GroupEventDispatcher.removeListener(groupEvListener); groupEvListener = null; } } } @Override public void propertyDeleted(String property, Map<String, Object> params) { GroupEventDispatcher.removeListener(groupEvListener); groupEvListener = new RuleGroupEventListener(); GroupEventDispatcher.addListener(groupEvListener); } @Override public void xmlPropertySet(String property, Map<String, Object> params) { // TODO Auto-generated method stub } @Override public void xmlPropertyDeleted(String property, Map<String, Object> params) { // TODO Auto-generated method stub } }