You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by be...@apache.org on 2008/07/06 13:12:34 UTC

svn commit: r674283 - in /labs/vysper/src: main/java/org/apache/vysper/xmpp/authorization/ main/java/org/apache/vysper/xmpp/modules/core/bind/handler/ main/java/org/apache/vysper/xmpp/modules/core/im/handler/ main/java/org/apache/vysper/xmpp/modules/co...

Author: berndf
Date: Sun Jul  6 04:12:34 2008
New Revision: 674283

URL: http://svn.apache.org/viewvc?rev=674283&view=rev
Log:
[vysper] improve roster subscripton workflow (LABS-132)

Modified:
    labs/vysper/src/main/java/org/apache/vysper/xmpp/authorization/SimpleUserAuthorization.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/authorization/UserAuthorization.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/bind/handler/BindIQHandler.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceSubscriptionHandler.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/session/handler/SessionIQHandler.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/MutableRoster.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/Roster.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/RosterItem.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/RosterStanzaUtils.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/handler/RosterIQHandler.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/protocol/ProtocolWorker.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/resourcebinding/ResourceRegistry.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/stanza/StanzaBuilder.java
    labs/vysper/src/test/java/org/apache/vysper/smack/BasicClient.java
    labs/vysper/src/test/java/org/apache/vysper/xmpp/modules/roster/handler/RosterIQHandlerTestCase.java
    labs/vysper/src/test/java/org/apache/vysper/xmpp/protocol/ProtocolWorkerProcessTestCase.java

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/authorization/SimpleUserAuthorization.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/authorization/SimpleUserAuthorization.java?rev=674283&r1=674282&r2=674283&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/authorization/SimpleUserAuthorization.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/authorization/SimpleUserAuthorization.java Sun Jul  6 04:12:34 2008
@@ -47,6 +47,10 @@
         return verify(username, passwordCleartext);
     }
 
+    public boolean verifyUserExists(Entity jid) {
+        return userPasswordMap.get(jid.getBareJID().getFullQualifiedName()) != null;
+    }
+
     private boolean verify(String username, String passwordCleartext) {
         return passwordCleartext.equals(userPasswordMap.get(username));
     }

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/authorization/UserAuthorization.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/authorization/UserAuthorization.java?rev=674283&r1=674282&r2=674283&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/authorization/UserAuthorization.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/authorization/UserAuthorization.java Sun Jul  6 04:12:34 2008
@@ -25,4 +25,5 @@
 public interface UserAuthorization {
     boolean verifyCredentials(Entity jid, String passwordCleartext, Object credentials);
     boolean verifyCredentials(String username, String passwordCleartext, Object credentials);
+    boolean verifyUserExists(Entity jid);
 }

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/bind/handler/BindIQHandler.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/bind/handler/BindIQHandler.java?rev=674283&r1=674282&r2=674283&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/bind/handler/BindIQHandler.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/bind/handler/BindIQHandler.java Sun Jul  6 04:12:34 2008
@@ -82,7 +82,7 @@
         Entity entity = new EntityImpl(sessionContext.getInitiatingEntity(), resourceId);
                          
         StanzaBuilder stanzaBuilder =
-            StanzaBuilder.createIQStanza(IQStanzaType.RESULT, stanza.getID()).
+            StanzaBuilder.createIQStanza(null, null, IQStanzaType.RESULT, stanza.getID()).
             startInnerElement("bind").
                     addNamespaceAttribute(NamespaceURIs.URN_IETF_PARAMS_XML_NS_XMPP_BIND).
                     startInnerElement("jid").addText(entity.getFullQualifiedName()).endInnerElement().
@@ -93,7 +93,7 @@
 
     private Stanza bindError(IQStanza stanza, SessionContext sessionContext) {
         StanzaBuilder stanzaBuilder =
-            StanzaBuilder.createIQStanza(IQStanzaType.ERROR, stanza.getID()).
+            StanzaBuilder.createIQStanza(null, null, IQStanzaType.ERROR, stanza.getID()).
             startInnerElement("error").
                     addAttribute("type", "cancel").
                     startInnerElement("not-allowed", NamespaceURIs.URN_IETF_PARAMS_XML_NS_XMPP_STANZAS).

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceSubscriptionHandler.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceSubscriptionHandler.java?rev=674283&r1=674282&r2=674283&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceSubscriptionHandler.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceSubscriptionHandler.java Sun Jul  6 04:12:34 2008
@@ -24,6 +24,7 @@
 import org.apache.vysper.xmpp.delivery.StanzaRelay;
 import org.apache.vysper.xmpp.delivery.failure.IgnoreFailureStrategy;
 import org.apache.vysper.xmpp.modules.roster.AskSubscriptionType;
+import org.apache.vysper.xmpp.modules.roster.RosterException;
 import org.apache.vysper.xmpp.modules.roster.RosterItem;
 import org.apache.vysper.xmpp.modules.roster.RosterStanzaUtils;
 import org.apache.vysper.xmpp.modules.roster.SubscriptionType;
@@ -81,21 +82,25 @@
 
                 case SUBSCRIBE:
                     // RFC3921bis-04#3.1.2
+                    // user requests subsription to contact
                     handleOutboundSubscriptionRequest(stampedStanza, sessionContext, registry);
                     break;
                 
                 case SUBSCRIBED:
                     // RFC3921bis-04#3.1.5
-                    handleOutboundSubscriptionApproval(stampedStanza, sessionContext, registry);
+                    // user approves subscription to requesting contact
+                    handleOutboundSubscriptionApproval(stampedStanza, sessionContext, registry, rosterManager);
                     break;
                 
                 case UNSUBSCRIBE:
                     // RFC3921bis-04#3.3.2
+                    // user removes subscription from contact
                     handleOutboundUnsubscription(stampedStanza, sessionContext, registry);
                     break;
                 
                 case UNSUBSCRIBED:
                     // RFC3921bis-04#3.2.2
+                    // user approves unsubscription of contact 
                     handleOutboundSubscriptionCancellation(stampedStanza, sessionContext, registry);
                     break;
                 
@@ -109,18 +114,22 @@
 
                 case SUBSCRIBE:
                     // RFC3921bis-04#3.1.3
-                    return handleInboundSubscriptionRequest(presenceStanza, sessionContext, registry);
+                    // contact requests subscription to user
+                    return handleInboundSubscriptionRequest(presenceStanza, sessionContext, registry, rosterManager);
 
                 case SUBSCRIBED:
                     // RFC3921bis-04#3.1.6
+                    // contact approves user's subsription request
                     return handleInboundSubscriptionApproval(presenceStanza, sessionContext, registry);
 
                 case UNSUBSCRIBE:
                     // RFC3921bis-04#3.3.3
+                    // contact unsubscribes 
                     handleInboundUnsubscription(presenceStanza, sessionContext, registry);
 
                 case UNSUBSCRIBED:
                     // RFC3921bis-04#3.2.3
+                    // contact denies subsription
                     handleInboundSubscriptionCancellation(presenceStanza, sessionContext, registry);
 
                 default:
@@ -214,20 +223,32 @@
 
 	@SpecCompliant(spec = "RFC3921bis-04", section = "3.1.5")
 	private void handleOutboundSubscriptionApproval(PresenceStanza stanza,
-                                                 SessionContext sessionContext, ResourceRegistry registry) {
+                                                 SessionContext sessionContext, ResourceRegistry registry, RosterManager rosterManager) {
 		Entity user = stanza.getFrom();
 		Entity contact = stanza.getTo();
 
-		relayStanza(contact, stanza, sessionContext);
+        Entity userBareJid = user.getBareJID();
 
-		// send roster push to all of the user's interested resources
+        // TODO check if BOTH is needed
+        SubscriptionType newSubscriptionType = SubscriptionType.FROM;
+        RosterItem newItem = new RosterItem(contact.getBareJID(), newSubscriptionType);
+        try {
+            rosterManager.addContact(contact, newItem);
+        } catch (RosterException e) {
+            // TODO internal server error
+            // contact could not be added
+        }
+        
+        relayStanza(contact, stanza, sessionContext);
+
+        // send roster push to all of the user's interested resources
 		List<String> resources = registry.getInterestedResources(user);
 
 		for (String resource : resources) {
 			Entity userResource = new EntityImpl(user, resource);
 			Stanza push = buildRosterPushStanza(userResource,
 					sessionContext.nextSequenceValue(), contact.getBareJID(),
-					SubscriptionType.FROM, null /*TODO ask? */);
+                    newSubscriptionType, null);
 
 			relayStanza(userResource, push, sessionContext);
 		}
@@ -269,28 +290,34 @@
 
 	@SpecCompliant(spec = "RFC3920bis-04", section = "3.1.3")
 	private Stanza handleInboundSubscriptionRequest(PresenceStanza stanza,
-                                                 SessionContext sessionContext, ResourceRegistry registry) {
+                                                 SessionContext sessionContext, ResourceRegistry registry, RosterManager rosterManager) {
 		Entity contact = stanza.getFrom();
 		Entity user = stanza.getTo();
+        
+        Entity userBareJid = user.getBareJID();
 
-		// TODO: verify that user actually exists on this server
-		if (false) {
+        boolean userExists = sessionContext.getServerRuntimeContext().getUserAuthorization().verifyUserExists(userBareJid);
+        if (!userExists) {
 			// user does not exist
-			return buildPresenceStanza(user.getBareJID(), contact.getBareJID(), UNSUBSCRIBED, stanza);
+			return buildPresenceStanza(userBareJid, contact.getBareJID(), UNSUBSCRIBED, stanza);
 		}
-		// assert: user exists
 
-		// TODO: check whether user already has a subscription to
-		// contact
-		if (false) {
-			return buildPresenceStanza(user.getBareJID(), contact.getBareJID(), SUBSCRIBED, stanza);
+
+        RosterItem item = null;
+        try {
+            item = rosterManager.retrieve(userBareJid).getEntry(contact);
+        } catch (RosterException e) {
+            // item could not be retrieved
+        }
+        // check whether user already has a subscription to contact
+		if (item != null && item.hasFrom() ) {
+			return buildPresenceStanza(userBareJid, contact.getBareJID(), SUBSCRIBED, stanza);
 		}
 
 		// user exists and doesn't have a subscription
 		// to the contact and user is currently online (# of
 		// interested resources > 0)
-		List<String> interestedResources = registry
-				.getInterestedResources(user);
+		List<String> interestedResources = registry.getInterestedOrAvailableResources(user);
 		if (!interestedResources.isEmpty()) {
 			for (String resource : interestedResources) {
 				Entity userResource = new EntityImpl(user, resource);
@@ -323,8 +350,7 @@
 		Entity contact = stanza.getTo();
 
 		// send roster push to all of the user's interested resources
-		List<String> resources = registry.getInterestedResources(user);
-		resources.addAll(registry.getAvailableResources(user));
+		List<String> resources = registry.getInterestedOrAvailableResources(user);
 		for (String resource : resources) {
 			Entity userResource = new EntityImpl(user, resource);
 			Stanza push = buildRosterPushStanza(userResource,

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/session/handler/SessionIQHandler.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/session/handler/SessionIQHandler.java?rev=674283&r1=674282&r2=674283&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/session/handler/SessionIQHandler.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/session/handler/SessionIQHandler.java Sun Jul  6 04:12:34 2008
@@ -41,7 +41,7 @@
         switch (stanza.getIQType()) {
 
             case SET:
-                return StanzaBuilder.createIQStanza(IQStanzaType.RESULT, stanza.getID())
+                return StanzaBuilder.createIQStanza(null, null, IQStanzaType.RESULT, stanza.getID())
                                     .addAttribute("from", sessionContext.getServerJID().getFullQualifiedName()).getFinalStanza();
 
             case GET:

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/MutableRoster.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/MutableRoster.java?rev=674283&r1=674282&r2=674283&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/MutableRoster.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/MutableRoster.java Sun Jul  6 04:12:34 2008
@@ -1,5 +1,7 @@
 package org.apache.vysper.xmpp.modules.roster;
 
+import org.apache.vysper.xmpp.addressing.Entity;
+
 import java.util.List;
 import java.util.ArrayList;
 import java.util.Iterator;
@@ -13,6 +15,15 @@
         return items.iterator();
     }
 
+    public RosterItem getEntry(Entity contact) {
+        for (RosterItem item : items) {
+            if (item.getJid().equals(contact)) {
+                return item;
+            }
+        }
+        return null;
+    }
+
     public void addItem(RosterItem rosterItem) {
         items.add(rosterItem);
     }

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/Roster.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/Roster.java?rev=674283&r1=674282&r2=674283&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/Roster.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/Roster.java Sun Jul  6 04:12:34 2008
@@ -16,6 +16,8 @@
  ***********************************************************************/
 package org.apache.vysper.xmpp.modules.roster;
 
+import org.apache.vysper.xmpp.addressing.Entity;
+
 import java.util.Iterator;
 
 /**
@@ -24,5 +26,6 @@
 public interface Roster extends Iterable<RosterItem> {
     
     public Iterator<RosterItem> iterator();
-    
+
+    public RosterItem getEntry(Entity contact);
 }

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/RosterItem.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/RosterItem.java?rev=674283&r1=674282&r2=674283&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/RosterItem.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/RosterItem.java Sun Jul  6 04:12:34 2008
@@ -17,6 +17,8 @@
 package org.apache.vysper.xmpp.modules.roster;
 
 import org.apache.vysper.xmpp.addressing.Entity;
+import static org.apache.vysper.xmpp.modules.roster.SubscriptionType.*;
+import static org.apache.vysper.xmpp.modules.roster.AskSubscriptionType.*;
 
 import java.util.List;
 import java.util.ArrayList;
@@ -45,7 +47,7 @@
         this.jid = jid;
         this.name = name;
         this.subscriptionType = subscriptionType;
-        this.askSubscriptionType = askSubscriptionType == null ? AskSubscriptionType.NOT_SET : askSubscriptionType;
+        this.askSubscriptionType = askSubscriptionType == null ? NOT_SET : askSubscriptionType;
     }
 
     public Entity getJid() {
@@ -67,4 +69,16 @@
     public AskSubscriptionType getAskSubscriptionType() {
         return askSubscriptionType;
     }
+    
+    public boolean hasTo() {
+        return subscriptionType == TO || subscriptionType == BOTH; 
+    }
+    
+    public boolean hasFrom() {
+        return subscriptionType == FROM || subscriptionType == BOTH; 
+    }
+    
+    public boolean isBoth() {
+        return subscriptionType == BOTH; 
+    }
 }

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/RosterStanzaUtils.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/RosterStanzaUtils.java?rev=674283&r1=674282&r2=674283&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/RosterStanzaUtils.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/RosterStanzaUtils.java Sun Jul  6 04:12:34 2008
@@ -16,9 +16,10 @@
  ***********************************************************************/
 package org.apache.vysper.xmpp.modules.roster;
 
-import org.apache.vysper.xmpp.stanza.StanzaBuilder;
-import org.apache.vysper.xmpp.stanza.IQStanzaType;
+import org.apache.vysper.xmpp.addressing.Entity;
 import org.apache.vysper.xmpp.protocol.NamespaceURIs;
+import org.apache.vysper.xmpp.stanza.IQStanzaType;
+import org.apache.vysper.xmpp.stanza.StanzaBuilder;
 
 import java.util.List;
 
@@ -26,8 +27,8 @@
  */
 public class RosterStanzaUtils {
     
-    public static StanzaBuilder createRosterItemPushIQ(String id, IQStanzaType type, Iterable<RosterItem> rosterItems) {
-        StanzaBuilder stanzaBuilder = StanzaBuilder.createIQStanza(type, id).
+    public static StanzaBuilder createRosterItemPushIQ(Entity to, String id, IQStanzaType type, Iterable<RosterItem> rosterItems) {
+        StanzaBuilder stanzaBuilder = StanzaBuilder.createIQStanza(null, to, type, id).
             startInnerElement("query").
             addNamespaceAttribute(NamespaceURIs.JABBER_IQ_ROSTER);
         

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/handler/RosterIQHandler.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/handler/RosterIQHandler.java?rev=674283&r1=674282&r2=674283&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/handler/RosterIQHandler.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/roster/handler/RosterIQHandler.java Sun Jul  6 04:12:34 2008
@@ -31,6 +31,7 @@
 import org.apache.vysper.xmpp.stanza.IQStanzaType;
 import org.apache.vysper.xmpp.stanza.Stanza;
 import org.apache.vysper.xmpp.stanza.StanzaBuilder;
+import org.apache.vysper.xmpp.addressing.Entity;
 
 /**
  * handles roster get, set, push & result requests
@@ -82,15 +83,22 @@
             registry.setResourceState(resourceId, ResourceState.INTERESTED);
         }
 
+        Entity from = stanza.getFrom();
+        if (from == null) {
+            if (sessionContext.getInitiatingEntity() == null) throw new RuntimeException("handle this case");
+            else from = sessionContext.getInitiatingEntity();
+        }
+        
         Roster roster = null;
         try {
-            roster = rosterManager.retrieve(stanza.getFrom().getBareJID());
+            roster = rosterManager.retrieve(from.getBareJID());
             if (roster == null) return handleCannotRetrieveRoster(stanza, sessionContext);
         } catch (RosterException e) {
             return handleCannotRetrieveRoster(stanza, sessionContext);
         }
 
-        StanzaBuilder stanzaBuilder = RosterStanzaUtils.createRosterItemPushIQ(stanza.getID(), IQStanzaType.RESULT, roster);
+        // from becomes to
+        StanzaBuilder stanzaBuilder = RosterStanzaUtils.createRosterItemPushIQ(from, stanza.getID(), IQStanzaType.RESULT, roster);
         return stanzaBuilder.getFinalStanza();
     }
 

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/protocol/ProtocolWorker.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/protocol/ProtocolWorker.java?rev=674283&r1=674282&r2=674283&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/protocol/ProtocolWorker.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/protocol/ProtocolWorker.java Sun Jul  6 04:12:34 2008
@@ -147,9 +147,14 @@
             }
         }
 
-        stateAwareProtocolWorker.processStanza(sessionContext, sessionStateHolder,
-                                               stanza, stanzaHandler,
-                                               responseWriter);
+        try {
+            stateAwareProtocolWorker.processStanza(sessionContext, sessionStateHolder,
+                                                   stanza, stanzaHandler,
+                                                   responseWriter);
+        } catch (Exception e) {
+            System.err.println("error executing handler " + stanzaHandler.getClass().getName());
+            e.printStackTrace();
+        }
     }
     
     public void processTLSEstablished(SessionContext sessionContext, SessionStateHolder sessionStateHolder) {

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/resourcebinding/ResourceRegistry.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/resourcebinding/ResourceRegistry.java?rev=674283&r1=674282&r2=674283&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/resourcebinding/ResourceRegistry.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/resourcebinding/ResourceRegistry.java Sun Jul  6 04:12:34 2008
@@ -298,6 +298,12 @@
 		return filterResources(entity, ResourceState.AVAILABLE);
 	}
 
+	public List<String> getInterestedOrAvailableResources(Entity entity) {
+        List<String> resources = filterResources(entity, ResourceState.INTERESTED);
+        resources.addAll(filterResources(entity, ResourceState.AVAILABLE));
+        return resources;
+	}
+
 	private List<String> filterResources(Entity entity, ResourceState state) {
 		if (state == null || entity == null) {
 			throw new IllegalArgumentException(

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/stanza/StanzaBuilder.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/stanza/StanzaBuilder.java?rev=674283&r1=674282&r2=674283&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/stanza/StanzaBuilder.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/stanza/StanzaBuilder.java Sun Jul  6 04:12:34 2008
@@ -34,8 +34,10 @@
  */
 public class StanzaBuilder {
 
-    public static StanzaBuilder createIQStanza(IQStanzaType type, String id) {
+    public static StanzaBuilder createIQStanza(Entity from, Entity to, IQStanzaType type, String id) {
         StanzaBuilder stanzaBuilder = new StanzaBuilder("iq");
+        if (from != null) stanzaBuilder.addAttribute("from", from.getFullQualifiedName());
+        if (to != null) stanzaBuilder.addAttribute("to", to.getFullQualifiedName());
         stanzaBuilder.addAttribute("type", type.value());
         stanzaBuilder.addAttribute("id", id);
         return stanzaBuilder;        

Modified: labs/vysper/src/test/java/org/apache/vysper/smack/BasicClient.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/test/java/org/apache/vysper/smack/BasicClient.java?rev=674283&r1=674282&r2=674283&view=diff
==============================================================================
--- labs/vysper/src/test/java/org/apache/vysper/smack/BasicClient.java (original)
+++ labs/vysper/src/test/java/org/apache/vysper/smack/BasicClient.java Sun Jul  6 04:12:34 2008
@@ -19,14 +19,13 @@
 import org.jivesoftware.smack.Chat;
 import org.jivesoftware.smack.ConnectionConfiguration;
 import org.jivesoftware.smack.MessageListener;
+import org.jivesoftware.smack.Roster;
 import org.jivesoftware.smack.SASLAuthentication;
 import org.jivesoftware.smack.XMPPConnection;
 import org.jivesoftware.smack.XMPPException;
-import org.jivesoftware.smack.Roster;
 import org.jivesoftware.smack.packet.Message;
 import org.jivesoftware.smack.packet.Presence;
 
-import java.util.Date;
 import java.util.Random;
 
 /**
@@ -78,7 +77,9 @@
                 try { Thread.sleep((new Random().nextInt(9)+1)*1000 ); } catch (InterruptedException e) { ; }
             }
 
-            try { Thread.sleep(120*1000 ); } catch (InterruptedException e) { ; }
+            for (int i = 0; i < 2000; i++) {
+                try { Thread.sleep(500); } catch (InterruptedException e) { ; }
+            }
             
             connection.disconnect(); 
         } catch (Throwable e) {

Modified: labs/vysper/src/test/java/org/apache/vysper/xmpp/modules/roster/handler/RosterIQHandlerTestCase.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/test/java/org/apache/vysper/xmpp/modules/roster/handler/RosterIQHandlerTestCase.java?rev=674283&r1=674282&r2=674283&view=diff
==============================================================================
--- labs/vysper/src/test/java/org/apache/vysper/xmpp/modules/roster/handler/RosterIQHandlerTestCase.java (original)
+++ labs/vysper/src/test/java/org/apache/vysper/xmpp/modules/roster/handler/RosterIQHandlerTestCase.java Sun Jul  6 04:12:34 2008
@@ -35,7 +35,7 @@
 
     public void testRosterGet() {
         
-        StanzaBuilder stanzaBuilder = StanzaBuilder.createIQStanza(IQStanzaType.GET, "id1");
+        StanzaBuilder stanzaBuilder = StanzaBuilder.createIQStanza(null, null, IQStanzaType.GET, "id1");
         stanzaBuilder.addAttribute("from", client.getFullQualifiedName());
         stanzaBuilder.startInnerElement("query").addNamespaceAttribute(NamespaceURIs.JABBER_IQ_ROSTER).endInnerElement();
 

Modified: labs/vysper/src/test/java/org/apache/vysper/xmpp/protocol/ProtocolWorkerProcessTestCase.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/test/java/org/apache/vysper/xmpp/protocol/ProtocolWorkerProcessTestCase.java?rev=674283&r1=674282&r2=674283&view=diff
==============================================================================
--- labs/vysper/src/test/java/org/apache/vysper/xmpp/protocol/ProtocolWorkerProcessTestCase.java (original)
+++ labs/vysper/src/test/java/org/apache/vysper/xmpp/protocol/ProtocolWorkerProcessTestCase.java Sun Jul  6 04:12:34 2008
@@ -166,7 +166,7 @@
         CallTestStanzaHandler stanzaHandler = new CallTestStanzaHandler("iq");
         namespaceHandlerDictionary.register(stanzaHandler);
 
-        StanzaBuilder stanzaBuilder = StanzaBuilder.createIQStanza(IQStanzaType.GET, "test");
+        StanzaBuilder stanzaBuilder = StanzaBuilder.createIQStanza(null, null, IQStanzaType.GET, "test");
         // we set a different from user name 'ernest'!
         stanzaBuilder.addAttribute("from", new EntityImpl("ernest", server.getDomain(), null).getFullQualifiedName());
         stanzaBuilder.startInnerElement("query").addNamespaceAttribute("jabber:iq:roster").endInnerElement();
@@ -195,7 +195,7 @@
 
         String onlyBoundResource = sessionContext.bindResource();
 
-        StanzaBuilder stanzaBuilder = StanzaBuilder.createIQStanza(IQStanzaType.GET, "test");
+        StanzaBuilder stanzaBuilder = StanzaBuilder.createIQStanza(null, null, IQStanzaType.GET, "test");
         stanzaBuilder.addAttribute("from", new EntityImpl("charlotte", server.getDomain(), onlyBoundResource).getFullQualifiedName());
         stanzaBuilder.startInnerElement("query").addNamespaceAttribute("testNSURI").endInnerElement();
         
@@ -217,7 +217,7 @@
         String onlyBoundResource = sessionContext.bindResource();
         String arbitraryUnboundResource = "unboundResourceID";
         
-        StanzaBuilder stanzaBuilder = StanzaBuilder.createIQStanza(IQStanzaType.GET, "test");
+        StanzaBuilder stanzaBuilder = StanzaBuilder.createIQStanza(null, null, IQStanzaType.GET, "test");
         
         stanzaBuilder.addAttribute("from", new EntityImpl("charlotte", server.getDomain(), arbitraryUnboundResource).getFullQualifiedName());
         stanzaBuilder.startInnerElement("query").addNamespaceAttribute("testNSURI").endInnerElement();
@@ -250,7 +250,7 @@
         String firstBoundResource = sessionContext.bindResource();
         String secondBoundResource = sessionContext.bindResource();
 
-        StanzaBuilder stanzaBuilder = StanzaBuilder.createIQStanza(IQStanzaType.GET, "test");
+        StanzaBuilder stanzaBuilder = StanzaBuilder.createIQStanza(null, null, IQStanzaType.GET, "test");
         stanzaBuilder.addAttribute("from", new EntityImpl("lea", server.getDomain(), null).getFullQualifiedName());
         stanzaBuilder.startInnerElement("query").addNamespaceAttribute("testNSURI").endInnerElement();
         
@@ -263,7 +263,7 @@
         sessionContext.getServerRuntimeContext().getResourceRegistry().unbindResource(secondBoundResource);
         
         // bare id allowed, only one resource is bound
-        stanzaBuilder = StanzaBuilder.createIQStanza(IQStanzaType.GET, "test");
+        stanzaBuilder = StanzaBuilder.createIQStanza(null, null, IQStanzaType.GET, "test");
         stanzaBuilder.addAttribute("from", new EntityImpl("lea", server.getDomain(), null).getFullQualifiedName());
         stanzaBuilder.startInnerElement("query").addNamespaceAttribute("testNSURI").endInnerElement();
         protocolWorker.processStanza(sessionContext, stanzaBuilder.getFinalStanza(), sessionStateHolder);
@@ -271,7 +271,7 @@
         sessionContext.write(null); // reset
 
         // second resource is now invalid and cannot be used anymore in a full qualified entity
-        stanzaBuilder = StanzaBuilder.createIQStanza(IQStanzaType.GET, "test");
+        stanzaBuilder = StanzaBuilder.createIQStanza(null, null, IQStanzaType.GET, "test");
         stanzaBuilder.addAttribute("from", new EntityImpl("lea", server.getDomain(), secondBoundResource).getFullQualifiedName());
         stanzaBuilder.startInnerElement("query").addNamespaceAttribute("testNSURI").endInnerElement();
         protocolWorker.processStanza(sessionContext, stanzaBuilder.getFinalStanza(), sessionStateHolder);



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org