|
Wildfire 3.1.1 Javadoc | ||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectorg.jivesoftware.wildfire.container.BasicModule
org.jivesoftware.wildfire.spi.RoutingTableImpl
public class RoutingTableImpl
Uses simple Maps for table storage.
Leaves in the tree are indicated by a PacketHandler, while branches are stored in Maps. Traverse the tree according to an XMPPAddress' fields (host -> name -> resource) and when you hit a PacketHandler, you have found the handler for that node and all sub-nodes.
| Constructor Summary | |
|---|---|
RoutingTableImpl()
|
|
| Method Summary | |
|---|---|
void |
addRoute(JID node,
RoutableChannelHandler destination)
Add a route to the routing table. |
ChannelHandler |
getBestRoute(JID node)
Obtain a route to a handler at the given node falling back to a user branch if no resource leaf exists. |
RoutableChannelHandler |
getRoute(JID node)
Obtain a route to a packet handler for the given node. |
List<ChannelHandler> |
getRoutes(JID node)
Obtain all child routes for the given node. |
void |
initialize(XMPPServer server)
Initializes the basic module. |
ChannelHandler |
removeRoute(JID node)
Remove a route from the routing table. |
| Methods inherited from class org.jivesoftware.wildfire.container.BasicModule |
|---|
destroy, getName, start, stop |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Constructor Detail |
|---|
public RoutingTableImpl()
| Method Detail |
|---|
public void addRoute(JID node,
RoutableChannelHandler destination)
RoutingTableAdd a route to the routing table.
A single access method allows you to add any of the acceptable route to the table. It is expected that routes are added and removed on a relatively rare occassion so routing tables should be optimized for lookup speed.
addRoute in interface RoutingTablenode - The route's destination nodedestination - The destination object for this routepublic RoutableChannelHandler getRoute(JID node)
RoutingTableObtain a route to a packet handler for the given node.
If a route doesn't exist, the method returns null.
getRoute in interface RoutingTablenode - The address we want a route to
public List<ChannelHandler> getRoutes(JID node)
RoutingTableObtain all child routes for the given node.
See the class documentation for the matching algorithm of child routes for any given node. If a route doesn't exist, the method returns an empty iterator (not null).
getRoutes in interface RoutingTablenode - The address we want a route to
public ChannelHandler getBestRoute(JID node)
RoutingTableObtain a route to a handler at the given node falling back to a user branch if no resource leaf exists.
Matching differs slightly from getRoute() which does matching according to the general matching algorithm described in the class notes. This method searches using the standard matching rules, and if that does not find a match and the address name component is not null, or empty, searches again with the resource set to null (wild card). This is essentially a convenience for falling back to the best route to a user node when a specific resource is not available.
For example, consider we're searching for a route to user@server.com/work. There is no route to that resource but a session is available at user@server.com/home. The routing table will contain entries for user@server.com and user@server.com/home. getBestLocalRoute() will first do a search for user@server.com/work and not find a match. It will then do another search on user@server.com and find the alias for the session user@server.com/home (the alias must be maintained by the session manager for the highest priority resource for any given user). In most cases, the caller doesn't care as long as they get a legitimate route to the user, so this behavior is 'better' than the exact matching used in getLocalRoute().
However, it is important to note that sometimes you don't want the best route to a node. In the previous example, if the packet is an error packet, it is probably only relevant to the sending session. If a route to that particular session can't be found, the error should not be sent to another session logged into the account.
If a route doesn't exist, the method returns null.
getBestRoute in interface RoutingTablenode - The address we want a route to
public ChannelHandler removeRoute(JID node)
RoutingTableRemove a route from the routing table.
If a route doesn't exist, the method returns null.
removeRoute in interface RoutingTablenode - The address we want a route to
public void initialize(XMPPServer server)
BasicModuleInitializes the basic module.
Inheriting classes that choose to override this method MUST call this initialize() method before accessing BasicModule resources.
initialize in interface Moduleinitialize in class BasicModuleserver - the server hosting this module.
|
Wildfire 3.1.1 Javadoc | ||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||