You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by be...@apache.org on 2009/08/31 10:11:40 UTC
svn commit: r809496 -
/mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceAvailabilityHandler.java
Author: berndf
Date: Mon Aug 31 08:11:39 2009
New Revision: 809496
URL: http://svn.apache.org/viewvc?rev=809496&view=rev
Log:
VYSPER-6: route directed unavail presence
Modified:
mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceAvailabilityHandler.java
Modified: mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceAvailabilityHandler.java
URL: http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceAvailabilityHandler.java?rev=809496&r1=809495&r2=809496&view=diff
==============================================================================
--- mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceAvailabilityHandler.java (original)
+++ mina/sandbox/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceAvailabilityHandler.java Mon Aug 31 08:11:39 2009
@@ -141,6 +141,10 @@
SessionContext sessionContext, RosterManager rosterManager, Entity user,
ResourceRegistry registry) {
+ boolean hasTo = presenceStanza.getCoreVerifier().attributePresent("to");
+ if (hasTo) return handleOutboundDirectedPresence(presenceStanza, serverRuntimeContext, sessionContext,
+ rosterManager, user, registry, true);
+
if (!user.isResourceSet()) throw new RuntimeException("resource id not available");
registry.setResourceState(user.getResource(), ResourceState.UNAVAILABLE);
@@ -199,7 +203,7 @@
ResourceRegistry registry) {
boolean hasTo = presenceStanza.getCoreVerifier().attributePresent("to");
if (hasTo) return handleOutboundDirectedPresence(presenceStanza, serverRuntimeContext, sessionContext,
- rosterManager, user, registry);
+ rosterManager, user, registry, false);
if (!user.isResourceSet()) throw new RuntimeException("resource id not available");
String resourceId = user.getResource();
@@ -276,18 +280,17 @@
}
@SpecCompliant(spec = "RFC3921bis-08", section = "4.6.2")
- private PresenceStanza handleOutboundDirectedPresence(PresenceStanza presenceStanza,
- ServerRuntimeContext serverRuntimeContext,
- SessionContext sessionContext,
- RosterManager rosterManager,
- Entity user,
- ResourceRegistry registry) {
- PresenceStanza redirectDirectedStanza = presenceStanza;
+ private PresenceStanza handleOutboundDirectedPresence(PresenceStanza presenceStanza,
+ ServerRuntimeContext serverRuntimeContext,
+ SessionContext sessionContext,
+ RosterManager rosterManager,
+ Entity user,
+ ResourceRegistry registry,
+ final boolean unvailable) {
+ Stanza redirectDirectedStanza = presenceStanza;
if (presenceStanza.getFrom() == null) {
- StanzaBuilder builder = StanzaBuilder.createClone(presenceStanza, true, null);
EntityImpl from = new EntityImpl(sessionContext.getInitiatingEntity(), registry.getUniqueResourceForSession(sessionContext));
- builder.addAttribute("from", from.getFullQualifiedName());
- redirectDirectedStanza = (PresenceStanza)XMPPCoreStanza.getWrapper(builder.getFinalStanza());
+ redirectDirectedStanza = StanzaBuilder.createForwardStanza(presenceStanza, from, null);
}
try {
@@ -296,7 +299,7 @@
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
- logger.warn("directed presence is not yet implemented");
+ logger.warn("directed presence is not yet fully implemented");
return null;
}
@@ -386,7 +389,7 @@
}
private void relayTo(Entity from, List<Entity> tos, PresenceStanza original, SessionContext sessionContext) {
- List<Attribute> toFromReplacements = new ArrayList<Attribute>();
+ List<Attribute> toFromReplacements = new ArrayList<Attribute>(2);
toFromReplacements.add(new Attribute("from", from.getFullQualifiedName()));
for (Entity to : tos) {