1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/**
* $RCSfile$
* $Revision: 943 $
* $Date: 2005-02-04 01:53:20 -0300 (Fri, 04 Feb 2005) $
*
* Copyright (C) 2006 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.spi;
import org.jivesoftware.openfire.*;
import org.jivesoftware.openfire.container.BasicModule;
import org.xmpp.packet.IQ;
import org.xmpp.packet.Message;
import org.xmpp.packet.Packet;
import org.xmpp.packet.Presence;
/**
* An uber router that can handle any packet type.<p>
*
* The interface is provided primarily as a convenience for services
* that must route all packet types (e.g. s2s routing, e2e encryption, etc).
*
* @author Iain Shigeoka
*/
public class PacketRouterImpl extends BasicModule implements PacketRouter {
private IQRouter iqRouter;
private PresenceRouter presenceRouter;
private MessageRouter messageRouter;
/**
* Constructs a packet router.
*/
public PacketRouterImpl() {
super("XMPP Packet Router");
}
/**
* Routes the given packet based on packet recipient and sender. The
* router defers actual routing decisions to other classes.
* <h2>Warning</h2>
* Be careful to enforce concurrency DbC of concurrent by synchronizing
* any accesses to class resources.
*
* @param packet The packet to route
*/
public void route(Packet packet) {
if (packet instanceof Message) {
route((Message)packet);
}
else if (packet instanceof Presence) {
route((Presence)packet);
}
else if (packet instanceof IQ) {
route((IQ)packet);
}
else {
throw new IllegalArgumentException();
}
}
public void route(IQ packet) {
iqRouter.route(packet);
}
public void route(Message packet) {
messageRouter.route(packet);
}
public void route(Presence packet) {
presenceRouter.route(packet);
}
public void initialize(XMPPServer server) {
super.initialize(server);
iqRouter = server.getIQRouter();
messageRouter = server.getMessageRouter();
presenceRouter = server.getPresenceRouter();
}
}