Author: mjakl
Date: Tue Jul 7 19:24:52 2009
New Revision: 791946
URL: http://svn.apache.org/viewvc?rev=791946&view=rev
Log:
Refactoring: added a extractSenderJID and rename determineFrom to
extraceUniqueSenderJID to XMPPCoreStanzaHandler.
Also added a small note to getFrom of "Stanza" that it returns not sender most
of the time.
Modified:
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/XMPPCoreStanzaHandler.java
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceAvailabilityHandler.java
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/AbstractPublishSubscribeIQHandler.java
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubCreateNodeHandler.java
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubPublishHandler.java
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubSubscribeHandler.java
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubUnsubscribeHandler.java
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/owner/PubSubOwnerDeleteNodeHandler.java
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/roster/handler/RosterIQHandler.java
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/stanza/Stanza.java
Modified:
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/XMPPCoreStanzaHandler.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/XMPPCoreStanzaHandler.java?rev=791946&r1=791945&r2=791946&view=diff
==============================================================================
---
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/XMPPCoreStanzaHandler.java
(original)
+++
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/XMPPCoreStanzaHandler.java
Tue Jul 7 19:24:52 2009
@@ -26,8 +26,8 @@
import org.apache.vysper.xmpp.protocol.SessionStateHolder;
import org.apache.vysper.xmpp.protocol.StanzaHandler;
import org.apache.vysper.xmpp.protocol.StreamErrorCondition;
-import org.apache.vysper.xmpp.server.SessionContext;
import org.apache.vysper.xmpp.server.ServerRuntimeContext;
+import org.apache.vysper.xmpp.server.SessionContext;
import org.apache.vysper.xmpp.server.response.ServerErrorResponses;
import org.apache.vysper.xmpp.stanza.IQStanzaType;
import org.apache.vysper.xmpp.stanza.Stanza;
@@ -119,26 +119,56 @@
protected abstract Stanza executeCore(XMPPCoreStanza stanza,
ServerRuntimeContext serverRuntimeContext, boolean isOutboundStanza,
SessionContext sessionContext);
/**
- * a client might send a stanza without a 'from' attribute, if the sending
(bare or full) entity can be determined
+ * Extracts the from address either from the "from" attribute of the
stanza, if this isn't given
+ * retracts to using the address of the initiating entity plus the
resource of the sessionContext (if available).
+ *
+ * A client might send a stanza without a 'from' attribute, if the sending
(bare or full) entity can be determined
* from the context. such a missing from is determined here, if possible.
* for a formal discussion, see RFC3921bis/Resource Binding/Binding
multiple resources/From Addresses
+ *
* @param stanza
* @param sessionContext
+ * @return The JID of the sender, either from the stanza or the context. A
bare JID is returned if no, or more than one resource is bound.
*/
- public static Entity determineFrom(XMPPCoreStanza stanza, SessionContext
sessionContext) {
+ public static Entity extractSenderJID(XMPPCoreStanza stanza,
SessionContext sessionContext) {
Entity from = stanza.getFrom();
- if (from != null) return from;
+ if (from == null) {
+ from = new EntityImpl(sessionContext.getInitiatingEntity(),
+
sessionContext.getServerRuntimeContext().getResourceRegistry().getUniqueResourceForSession(sessionContext));
+ }
+ return from;
+ }
+
+ /**
+ * Extracts the from address either from the "from" attribute of the
stanza, if this isn't given
+ * retracts to using the address of the initiating entity plus the
resource of the sessionContext.
+ *
+ * A client might send a stanza without a 'from' attribute, if the sending
(bare or full) entity can be determined
+ * from the context. such a missing from is determined here, if possible.
+ * for a formal discussion, see RFC3921bis/Resource Binding/Binding
multiple resources/From Addresses
+ *
+ * @param stanza
+ * @param sessionContext
+ * @return The JID of the sender, either from the stanza or the context.
If there is no, or multiple resources bound, it returns null.
+ */
+ public static Entity extractUniqueSenderJID(XMPPCoreStanza stanza,
SessionContext sessionContext) {
+ Entity from = stanza.getFrom();
+ if (from != null) {
+ return from;
+ }
- // try to build something together from initiating entity and a bound
resource
+ // Use the information stored within the context
Entity initiatingEntity = sessionContext.getInitiatingEntity();
- if (initiatingEntity == null) throw new RuntimeException("no 'from'
attribute, and initiating entity not set: cannot determine sender of roster
IQ");
+ if (initiatingEntity == null) {
+ throw new RuntimeException("no 'from' attribute, and initiating
entity not set");
+ }
String resourceId =
sessionContext.getServerRuntimeContext().getResourceRegistry().getUniqueResourceForSession(sessionContext);
if (resourceId == null) {
logger.warn("no 'from' attribute, and cannot uniquely determine
sending resource for initiating entity {} in session {}",
initiatingEntity.getFullQualifiedName(), sessionContext.getSessionId());
return null;
}
- from = new EntityImpl(initiatingEntity, resourceId);
- return from;
+
+ return new EntityImpl(initiatingEntity, resourceId);
}
}
Modified:
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceAvailabilityHandler.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceAvailabilityHandler.java?rev=791946&r1=791945&r2=791946&view=diff
==============================================================================
---
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceAvailabilityHandler.java
(original)
+++
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceAvailabilityHandler.java
Tue Jul 7 19:24:52 2009
@@ -86,7 +86,7 @@
boolean available = PresenceStanzaType.isAvailable(type);
if (isOutboundStanza) {
- Entity user = XMPPCoreStanzaHandler.determineFrom(presenceStanza,
sessionContext);
+ Entity user =
XMPPCoreStanzaHandler.extractUniqueSenderJID(presenceStanza, sessionContext);
if (user == null) {
return
ServerErrorResponses.getInstance().getStanzaError(StanzaErrorCondition.UNKNOWN_SENDER,
presenceStanza, StanzaErrorType.MODIFY, "sender info insufficient: " + ((user
== null) ? "no from" : user.getFullQualifiedName()), null, null);
}
Modified:
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/AbstractPublishSubscribeIQHandler.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/AbstractPublishSubscribeIQHandler.java?rev=791946&r1=791945&r2=791946&view=diff
==============================================================================
---
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/AbstractPublishSubscribeIQHandler.java
(original)
+++
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/AbstractPublishSubscribeIQHandler.java
Tue Jul 7 19:24:52 2009
@@ -19,11 +19,9 @@
*/
package org.apache.vysper.xmpp.modules.extension.xep0060_pubsub;
-import org.apache.vysper.xmpp.addressing.Entity;
import org.apache.vysper.xmpp.modules.core.base.handler.DefaultIQHandler;
import
org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.handler.ErrorStanzaGenerator;
import
org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.model.CollectionNode;
-import org.apache.vysper.xmpp.server.SessionContext;
import org.apache.vysper.xmpp.stanza.IQStanza;
import org.apache.vysper.xmpp.stanza.Stanza;
import org.apache.vysper.xmpp.uuid.JVMBuiltinUUIDGenerator;
@@ -104,22 +102,6 @@
protected abstract String getWorkerElement();
/**
- * Extracts the from address either from the "from" attribute of the
stanza, if this isn't given
- * retracts to using the address of the initiating entity.
- *
- * @param stanza
- * @param sessionContext
- * @return The JID of the sender.
- */
- protected Entity getFromAddress(IQStanza stanza, SessionContext
sessionContext) {
- Entity sender = stanza.getFrom();
- if(sender == null) {
- sender = sessionContext.getInitiatingEntity();
- }
- return sender;
- }
-
- /**
* Extracts the node name from a given IQ stanza. The node attribute
* takes precedence over the JID resource. The standard requires only
* one of these addressing methods.
Modified:
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubCreateNodeHandler.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubCreateNodeHandler.java?rev=791946&r1=791945&r2=791946&view=diff
==============================================================================
---
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubCreateNodeHandler.java
(original)
+++
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubCreateNodeHandler.java
Tue Jul 7 19:24:52 2009
@@ -70,7 +70,7 @@
protected Stanza handleSet(IQStanza stanza,
ServerRuntimeContext serverRuntimeContext,
SessionContext sessionContext) {
- Entity sender = getFromAddress(stanza, sessionContext);
+ Entity sender = extractSenderJID(stanza, sessionContext);
Entity receiver = sessionContext.getServerJID();
String iqStanzaID = stanza.getAttributeValue("id");
Modified:
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubPublishHandler.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubPublishHandler.java?rev=791946&r1=791945&r2=791946&view=diff
==============================================================================
---
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubPublishHandler.java
(original)
+++
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubPublishHandler.java
Tue Jul 7 19:24:52 2009
@@ -78,7 +78,7 @@
protected Stanza handleSet(IQStanza stanza,
ServerRuntimeContext serverRuntimeContext,
SessionContext sessionContext) {
- Entity sender = getFromAddress(stanza, sessionContext);
+ Entity sender = extractSenderJID(stanza, sessionContext);
Entity receiver = stanza.getTo();
String iqStanzaID = stanza.getAttributeValue("id");
Modified:
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubSubscribeHandler.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubSubscribeHandler.java?rev=791946&r1=791945&r2=791946&view=diff
==============================================================================
---
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubSubscribeHandler.java
(original)
+++
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubSubscribeHandler.java
Tue Jul 7 19:24:52 2009
@@ -82,7 +82,7 @@
protected Stanza handleSet(IQStanza stanza,
ServerRuntimeContext serverRuntimeContext,
SessionContext sessionContext) {
- Entity sender = getFromAddress(stanza, sessionContext);
+ Entity sender = extractSenderJID(stanza, sessionContext);
Entity receiver = stanza.getTo();
Entity subJID = null;
Modified:
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubUnsubscribeHandler.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubUnsubscribeHandler.java?rev=791946&r1=791945&r2=791946&view=diff
==============================================================================
---
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubUnsubscribeHandler.java
(original)
+++
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubUnsubscribeHandler.java
Tue Jul 7 19:24:52 2009
@@ -77,7 +77,7 @@
protected Stanza handleSet(IQStanza stanza,
ServerRuntimeContext serverRuntimeContext,
SessionContext sessionContext) {
- Entity sender = getFromAddress(stanza, sessionContext);
+ Entity sender = extractSenderJID(stanza, sessionContext);
Entity receiver = stanza.getTo();
Entity subJID = null;
Modified:
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/owner/PubSubOwnerDeleteNodeHandler.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/owner/PubSubOwnerDeleteNodeHandler.java?rev=791946&r1=791945&r2=791946&view=diff
==============================================================================
---
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/owner/PubSubOwnerDeleteNodeHandler.java
(original)
+++
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/owner/PubSubOwnerDeleteNodeHandler.java
Tue Jul 7 19:24:52 2009
@@ -73,7 +73,7 @@
protected Stanza handleSet(IQStanza stanza,
ServerRuntimeContext serverRuntimeContext,
SessionContext sessionContext) {
- Entity sender = getFromAddress(stanza, sessionContext);
+ Entity sender = extractSenderJID(stanza, sessionContext);
Entity receiver = sessionContext.getServerJID();
String iqStanzaID = stanza.getAttributeValue("id");
StanzaBuilder sb = StanzaBuilder.createIQStanza(receiver, sender,
IQStanzaType.RESULT, iqStanzaID);
Modified:
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/roster/handler/RosterIQHandler.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/roster/handler/RosterIQHandler.java?rev=791946&r1=791945&r2=791946&view=diff
==============================================================================
---
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/roster/handler/RosterIQHandler.java
(original)
+++
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/roster/handler/RosterIQHandler.java
Tue Jul 7 19:24:52 2009
@@ -94,7 +94,7 @@
return handleCannotRetrieveRoster(stanza, sessionContext);
}
- Entity from = determineFrom(stanza, sessionContext);
+ Entity from = extractUniqueSenderJID(stanza, sessionContext);
if (from == null || !from.isResourceSet()) {
return
ServerErrorResponses.getInstance().getStanzaError(StanzaErrorCondition.UNKNOWN_SENDER,
stanza, StanzaErrorType.MODIFY, "sender info insufficient: " + ((from == null)
? "no from" : from.getFullQualifiedName()), null, null);
}
@@ -132,7 +132,7 @@
return handleCannotRetrieveRoster(stanza, sessionContext);
}
- Entity user = determineFrom(stanza, sessionContext);
+ Entity user = extractUniqueSenderJID(stanza, sessionContext);
if (user == null || !user.isResourceSet()) {
return
ServerErrorResponses.getInstance().getStanzaError(StanzaErrorCondition.UNKNOWN_SENDER,
stanza, StanzaErrorType.MODIFY, "sender info insufficient: " + ((user == null)
? "no from" : user.getFullQualifiedName()), null, null);
}
Modified:
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/stanza/Stanza.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/stanza/Stanza.java?rev=791946&r1=791945&r2=791946&view=diff
==============================================================================
---
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/stanza/Stanza.java
(original)
+++
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/stanza/Stanza.java
Tue Jul 7 19:24:52 2009
@@ -26,6 +26,7 @@
import org.apache.vysper.xmpp.addressing.Entity;
import org.apache.vysper.xmpp.addressing.EntityImpl;
import org.apache.vysper.xmpp.addressing.EntityFormatException;
+import org.apache.vysper.xmpp.modules.core.base.handler.XMPPCoreStanzaHandler;
import org.apache.vysper.xmpp.writer.DenseStanzaLogRenderer;
import java.util.List;
@@ -59,6 +60,13 @@
return parseEntityAttribute("to");
}
+ /**
+ * Returns the from attribute <b>if</b> it is sent with the stanza (rare).
+ * Use {...@link XMPPCoreStanzaHandler#extractSenderJID()} to make sure
you get
+ * a JID (either with or without resource).
+ *
+ * @return the sender JID, or null if not set.
+ */
public Entity getFrom() {
return parseEntityAttribute("from");
}