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) {