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");
     }


Reply via email to