/* * Copyright (C) 2005-2008 Jive Software. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jivesoftware.openfire.sip.log; import org.dom4j.Element; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.xmpp.component.Component; import org.xmpp.component.ComponentManager; import org.xmpp.packet.IQ; import org.xmpp.packet.JID; import org.xmpp.packet.Packet; /** * Component that process CallLogExtension packets * * @author Thiago Rocha Camargo */ public class LogComponent implements Component{ private static final Logger Log = LoggerFactory.getLogger(LogComponent.class); ComponentManager componentManager = null; private LogListener logListener = null; /** * Namespace of the packet extension. */ public static final String NAMESPACE = "http://www.jivesoftware.com/protocol/log"; public static final String PROPNAME = "plugin.logger.serviceName"; public static final String NAME = "logger"; public LogComponent(LogListener logListener){ this.componentManager = logListener.getComponentManager(); this.logListener = logListener; } public void initialize(JID jid, ComponentManager componentManager) { } public void start() { } public void shutdown() { } // Component Interface public void processPacket(Packet packet) { if (packet instanceof IQ) { // Handle disco packets IQ iq = (IQ) packet; // Ignore IQs of type ERROR or RESULT if (IQ.Type.error == iq.getType() || IQ.Type.result == iq.getType()) { return; } processIQ(iq); } } private void processIQ(IQ iq) { IQ reply = IQ.createResultIQ(iq); Element childElement = iq.getChildElement(); String namespace = childElement.getNamespaceURI(); Element childElementCopy = iq.getChildElement().createCopy(); reply.setChildElement(childElementCopy); if ("http://jabber.org/protocol/disco#info".equals(namespace)) { if (iq.getTo().getNode() == null) { // Return service identity and features Element identity = childElementCopy.addElement("identity"); identity.addAttribute("category", "component"); identity.addAttribute("type", "generic"); identity.addAttribute("name", "Remote Logger"); childElementCopy.addElement("feature").addAttribute("var", "http://jabber.org/protocol/disco#info"); childElementCopy.addElement("feature").addAttribute("var", NAMESPACE); } } else if (NAMESPACE.equals(namespace)) { if (iq.getTo().getNode() == null && iq.getFrom() != null) { reply = logListener.logReceived(reply); //reply.setTo(reply.getFrom()); }else{ reply.getChildElement().addAttribute("type","unregistered"); } } try { componentManager.sendPacket(this, reply); } catch (Exception e) { Log.error(e.getMessage(), e); } } // Other Methods public String getDescription() { // Get the description from the plugin.xml file. return "Remote Logger"; } public String getName() { // Get the name from the plugin.xml file. return NAME; } }