You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by ng...@apache.org on 2009/08/10 16:46:44 UTC
svn commit: r802813 - in
/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src:
main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/
test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/
Author: ngn
Date: Mon Aug 10 14:46:44 2009
New Revision: 802813
URL: http://svn.apache.org/viewvc?rev=802813&view=rev
Log:
Support for sending extra information for non-anonymous and semi-anonymous rooms on entering (VYSPER-109)
Modified:
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCEnterRoomHandler.java
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCEnterRoomHandlerTestCase.java
Modified: mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCEnterRoomHandler.java
URL: http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCEnterRoomHandler.java?rev=802813&r1=802812&r2=802813&view=diff
==============================================================================
--- mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCEnterRoomHandler.java (original)
+++ mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCEnterRoomHandler.java Mon Aug 10 14:46:44 2009
@@ -27,7 +27,9 @@
import org.apache.vysper.xmpp.modules.core.base.handler.DefaultPresenceHandler;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Conference;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Occupant;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Role;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Room;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.RoomType;
import org.apache.vysper.xmpp.protocol.NamespaceURIs;
import org.apache.vysper.xmpp.server.ServerRuntimeContext;
import org.apache.vysper.xmpp.server.SessionContext;
@@ -112,7 +114,7 @@
// relay presence of the newly added occupant to all existing occupants
for(Occupant occupant : room.getOccupants()) {
- sendNewOccupantPresence(newOccupant, occupant, room, sessionContext);
+ sendNewOccupantPresenceToExisting(newOccupant, occupant, room, sessionContext);
}
return null;
@@ -144,17 +146,32 @@
relayStanza(newOccupant.getJid(), builder.getFinalStanza(), sessionContext);
}
- private void sendNewOccupantPresence(Occupant newOccupant, Occupant existingOccupant, Room room, SessionContext sessionContext) {
+ private void sendNewOccupantPresenceToExisting(Occupant newOccupant, Occupant existingOccupant, Room room, SessionContext sessionContext) {
Entity roomAndNewUserNick = new EntityImpl(room.getJID(), newOccupant.getName());
StanzaBuilder builder = StanzaBuilder.createPresenceStanza(roomAndNewUserNick, existingOccupant.getJid(), null, null, null, null);
builder.startInnerElement("x", NamespaceURIs.XEP0045_MUC_USER);
builder.startInnerElement("item")
.addAttribute("affiliation", newOccupant.getAffiliation().toString())
- .addAttribute("role", newOccupant.getRole().toString())
- .endInnerElement();
+ .addAttribute("role", newOccupant.getRole().toString());
+
+ // section 7.1.5
+ if(room.getRoomTypes().contains(RoomType.NonAnonymous) ||
+ (room.getRoomTypes().contains(RoomType.SemiAnonymous) && existingOccupant.getRole() == Role.Moderator)) {
+ // room is non-anonymous or semi-anonmoys and the occupant a moderator, send full user JID
+ builder.addAttribute("jid", newOccupant.getJid().getFullQualifiedName());
+ // TODO unit test for semi + moderator
+ }
+
+ builder.endInnerElement();
if(existingOccupant.getJid().equals(newOccupant.getJid())) {
+
+ if(room.getRoomTypes().contains(RoomType.NonAnonymous)) {
+ // notify the user that this is a non-anonymous room
+ builder.startInnerElement("status").addAttribute("code", "100").endInnerElement();
+ }
+
// send status to indicate that this is the users own presence
builder.startInnerElement("status").addAttribute("code", "110").endInnerElement();
}
Modified: mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCEnterRoomHandlerTestCase.java
URL: http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCEnterRoomHandlerTestCase.java?rev=802813&r1=802812&r2=802813&view=diff
==============================================================================
--- mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCEnterRoomHandlerTestCase.java (original)
+++ mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCEnterRoomHandlerTestCase.java Mon Aug 10 14:46:44 2009
@@ -153,6 +153,16 @@
assertEquals(room1Jid.getFullQualifiedName() + "/nick", user2JoinedStanza.getFrom().getFullQualifiedName());
// should be to the existing user
assertEquals(occupant1Jid, user2JoinedStanza.getTo());
+
+ XMLElement xElement = user2JoinedStanza.getSingleInnerElementsNamed("x");
+ assertEquals(NamespaceURIs.XEP0045_MUC_USER, xElement.getNamespaceURI());
+
+ // since this room is non-anonymous, x must contain an item element with the users full JID
+ XMLElement itemElement = xElement.getSingleInnerElementsNamed("item");
+ assertEquals(occupant2Jid.getFullQualifiedName(), itemElement.getAttributeValue("jid"));
+ assertEquals("none", itemElement.getAttributeValue("affiliation"));
+ assertEquals("participant", itemElement.getAttributeValue("role"));
+
// verify stanzas to the new user on all existing users, including himself with status=110 element
// own presence must be sent last
@@ -162,14 +172,15 @@
assertEquals(room1Jid.getFullQualifiedName() + "/Some nick", stanza.getFrom().getFullQualifiedName());
assertEquals(occupant2Jid, stanza.getTo());
- // assert stanza from the joining user, must have extra status=110 element
+ // assert stanza from the joining user, must have extra status=110 element
stanza = occupant2Queue.getNext();
assertNotNull(stanza);
assertEquals(room1JidWithNick, stanza.getFrom());
assertEquals(occupant2Jid, stanza.getTo());
- XMLElement statusElement = stanza.getFirstInnerElement().getSingleInnerElementsNamed("status");
- assertNotNull(statusElement);
- assertEquals("110", statusElement.getAttributeValue("code"));
+ List<XMLElement> statusElements = stanza.getFirstInnerElement().getInnerElementsNamed("status");
+ assertEquals(2, statusElements.size());
+ assertEquals("100", statusElements.get(0).getAttributeValue("code"));
+ assertEquals("110", statusElements.get(1).getAttributeValue("code"));
}
}