Commit e4191659 authored by Gaston Dombiak's avatar Gaston Dombiak Committed by gato

Packets with node or resource not null may now be delivered to components. JM-381

git-svn-id: http://svn.igniterealtime.org/svn/repos/messenger/trunk@2715 b35dd754-fafc-0310-a699-88a17e54d16e
parent 7cbdfe05
...@@ -179,6 +179,19 @@ public class XMPPServer { ...@@ -179,6 +179,19 @@ public class XMPPServer {
return false; return false;
} }
/**
* Returns true if the given address matches a component service JID.
*
* @param jid the JID to check.
* @return true if the given address matches a component service JID.
*/
public boolean matchesComponent(JID jid) {
if (jid != null) {
return componentManager.getComponent(jid.getDomain()) != null;
}
return false;
}
/** /**
* Creates an XMPPAddress local to this server. * Creates an XMPPAddress local to this server.
* *
......
/** /**
* $RCSfile$ * $RCSfile: SocketPacketWriteHandler.java,v $
* $Revision$ * $Revision$
* $Date$ * $Date$
* *
...@@ -44,10 +44,11 @@ public class SocketPacketWriteHandler implements ChannelHandler { ...@@ -44,10 +44,11 @@ public class SocketPacketWriteHandler implements ChannelHandler {
public void process(Packet packet) throws UnauthorizedException, PacketException { public void process(Packet packet) throws UnauthorizedException, PacketException {
try { try {
JID recipient = packet.getTo(); JID recipient = packet.getTo();
// Check if the target domain belongs to a remote server // Check if the target domain belongs to a remote server or a component
if (server.isRemote(recipient)) { if (server.matchesComponent(recipient) || server.isRemote(recipient)) {
try { try {
// Locate the route to the remote server and ask it to process the packet // Locate the route to the remote server or component and ask it
// to process the packet
routingTable.getRoute(recipient).process(packet); routingTable.getRoute(recipient).process(packet);
} }
catch (NoSuchRouteException e) { catch (NoSuchRouteException e) {
......
/** /**
* $RCSfile$ * $RCSfile: PacketDelivererImpl.java,v $
* $Revision$ * $Revision$
* $Date$ * $Date$
* *
...@@ -12,12 +12,9 @@ ...@@ -12,12 +12,9 @@
package org.jivesoftware.messenger.spi; package org.jivesoftware.messenger.spi;
import org.jivesoftware.messenger.*; import org.jivesoftware.messenger.*;
import org.jivesoftware.messenger.component.InternalComponentManager;
import org.jivesoftware.messenger.auth.UnauthorizedException; import org.jivesoftware.messenger.auth.UnauthorizedException;
import org.jivesoftware.messenger.container.BasicModule; import org.jivesoftware.messenger.container.BasicModule;
import org.jivesoftware.messenger.net.SocketPacketWriteHandler; import org.jivesoftware.messenger.net.SocketPacketWriteHandler;
import org.xmpp.component.Component;
import org.xmpp.packet.JID;
import org.xmpp.packet.Packet; import org.xmpp.packet.Packet;
/** /**
...@@ -35,11 +32,8 @@ public class PacketDelivererImpl extends BasicModule implements PacketDeliverer ...@@ -35,11 +32,8 @@ public class PacketDelivererImpl extends BasicModule implements PacketDeliverer
private OfflineMessageStrategy messageStrategy; private OfflineMessageStrategy messageStrategy;
private SessionManager sessionManager; private SessionManager sessionManager;
private InternalComponentManager componentManager;
public PacketDelivererImpl() { public PacketDelivererImpl() {
super("Packet Delivery"); super("Packet Delivery");
componentManager = InternalComponentManager.getInstance();
} }
public void deliver(Packet packet) throws UnauthorizedException, PacketException { public void deliver(Packet packet) throws UnauthorizedException, PacketException {
...@@ -49,17 +43,6 @@ public class PacketDelivererImpl extends BasicModule implements PacketDeliverer ...@@ -49,17 +43,6 @@ public class PacketDelivererImpl extends BasicModule implements PacketDeliverer
if (deliverHandler == null) { if (deliverHandler == null) {
throw new PacketException("Could not send packet - no route" + packet.toString()); throw new PacketException("Could not send packet - no route" + packet.toString());
} }
// Check if the target of the packet is the a component itself. If it does then just pass
// the packet to the component for processing it
JID recipient = packet.getTo();
if (recipient != null && recipient.getNode() == null && recipient.getResource() == null) {
// Check for registered components
Component component = componentManager.getComponent(recipient);
if (component != null) {
component.processPacket(packet);
return;
}
}
// Let the SocketPacketWriteHandler process the packet. SocketPacketWriteHandler may send // Let the SocketPacketWriteHandler process the packet. SocketPacketWriteHandler may send
// it over the socket or store it when user is offline or drop it. // it over the socket or store it when user is offline or drop it.
deliverHandler.process(packet); deliverHandler.process(packet);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment