/** * $RCSfile$ * $Revision: 1200 $ * $Date: 2005-04-04 03:36:48 -0300 (Mon, 04 Apr 2005) $ * * Copyright (C) 2004 Jive Software. All rights reserved. * * This software is published under the terms of the GNU Public License (GPL), * a copy of which is included in this distribution. */ package org.jivesoftware.openfire.transport; import org.jivesoftware.openfire.container.BasicModule; import org.jivesoftware.util.LocaleUtils; import org.jivesoftware.util.Log; import org.jivesoftware.openfire.*; import org.jivesoftware.openfire.auth.UnauthorizedException; import org.xmpp.packet.JID; import org.xmpp.packet.Packet; import org.xmpp.packet.PacketError; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * Routes packets to the appropriate transport gateway or drops the packet. * * @author Iain Shigeoka */ public class TransportHandler extends BasicModule implements ChannelHandler { private Map<String, Channel> transports = new ConcurrentHashMap<String, Channel>(); private PacketDeliverer deliverer; public TransportHandler() { super("Transport handler"); } public void addTransport(Channel transport) { transports.put(transport.getName(), transport); } public void process(Packet packet) throws UnauthorizedException, PacketException { boolean handled = false; String host = packet.getTo().getDomain(); for (Channel channel : transports.values()) { if (channel.getName().equalsIgnoreCase(host)) { channel.add(packet); handled = true; } } if (!handled) { JID recipient = packet.getTo(); JID sender = packet.getFrom(); packet.setError(PacketError.Condition.remote_server_timeout); packet.setFrom(recipient); packet.setTo(sender); try { deliverer.deliver(packet); } catch (PacketException e) { Log.error(LocaleUtils.getLocalizedString("admin.error"), e); } } } public void initialize(XMPPServer server) { super.initialize(server); deliverer = server.getPacketDeliverer(); } }