Skip to content

Commit

Permalink
Generates unique Colibri endpoint IDs for participants who re-join th…
Browse files Browse the repository at this point in the history
…e room with the same nickname.
  • Loading branch information
paweldomas committed May 29, 2015
1 parent dd92aa5 commit 3d2323f
Show file tree
Hide file tree
Showing 8 changed files with 75 additions and 41 deletions.
17 changes: 15 additions & 2 deletions src/org/jitsi/impl/protocol/xmpp/ChatMemberImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
* @author Pawel Domas
*/
public class ChatMemberImpl
implements XmppChatMember
implements MeetChatMember
{
/**
* The logger.
Expand Down Expand Up @@ -48,15 +48,22 @@ public class ChatMemberImpl
*/
private final String address;

/**
* ID of Colibri endpoint assigned to conference participant represented by
* this XMPP MUC member instance.
*/
private final String endpointId;

private ChatRoomMemberRole role;

public ChatMemberImpl(String participant, ChatRoomImpl chatRoom,
int joinOrderNumber)
int joinOrderNumber, String endpointGenerator)
{
this.address = participant;
this.nickname = participant.substring(participant.lastIndexOf("/")+1);
this.chatRoom = chatRoom;
this.joinOrderNumber = joinOrderNumber;
this.endpointId = nickname + "_" + endpointGenerator;
}

@Override
Expand Down Expand Up @@ -138,6 +145,12 @@ public String getJabberID()
return chatRoom.getMemberJid(address);
}

@Override
public String getEndpointID()
{
return endpointId;
}

@Override
public int getJoinOrderNumber()
{
Expand Down
13 changes: 11 additions & 2 deletions src/org/jitsi/impl/protocol/xmpp/ChatRoomImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,14 @@ public class ChatRoomImpl
*/
private Integer participantNumber = 0;

/**
* We generate Colibri endpoint IDs based on chat nicknames to have relation
* with Colibri endpoint and chat member for debugging purpose from JVB logs.
* This counter is used to generate unique endpoint IDs even for chat
* members who re-join later with the same nickname.
*/
private int endpointGenerator = 0;

/**
* Creates new instance of <tt>ChatRoomImpl</tt>.
*
Expand Down Expand Up @@ -829,8 +837,9 @@ private ChatMemberImpl addMember(String participant)
participantNumber++;
}

newMember = new ChatMemberImpl(participant, ChatRoomImpl.this,
participantNumber);
newMember = new ChatMemberImpl(
participant, ChatRoomImpl.this,
participantNumber, String.valueOf(endpointGenerator++));

members.put(participant, newMember);

Expand Down
16 changes: 8 additions & 8 deletions src/org/jitsi/jicofo/ChatRoomRoleAndPresence.java
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,7 @@ else if (ChatRoomMemberRole.OWNER.compareTo(member.getRole()) >=0)
try
{
chatRoom.grantOwnership(
((XmppChatMember)member).getJabberID());
((MeetChatMember)member).getJabberID());

logger.info(
"Granted owner to " + member.getContactAddress());
Expand Down Expand Up @@ -327,8 +327,8 @@ private void grantOwnersToAuthUsers()

private void checkGrantOwnerToAuthUser(ChatRoomMember member)
{
XmppChatMember xmppMember = (XmppChatMember) member;
String jabberId = xmppMember.getJabberID();
MeetChatMember meetChatMember = (MeetChatMember) member;
String jabberId = meetChatMember.getJabberID();
if (StringUtils.isNullOrEmpty(jabberId))
{
return;
Expand All @@ -350,9 +350,9 @@ private void checkGrantOwnerToAuthUser(ChatRoomMember member)

eventAdmin.sendEvent(
EventFactory.endpointAuthenticated(
authSessionId,
conference.getId(),
Participant.getEndpointId(member)
authSessionId,
conference.getId(),
meetChatMember.getEndpointID()
)
);
}
Expand All @@ -365,8 +365,8 @@ public void jidAuthenticated(String realJid, String identity,
{
for (ChatRoomMember member : chatRoom.getMembers())
{
XmppChatMember xmppMember = (XmppChatMember) member;
if (realJid.equals(xmppMember.getJabberID()))
MeetChatMember meetChatMember = (MeetChatMember) member;
if (realJid.equals(meetChatMember.getJabberID()))
{
checkGrantOwnerToAuthUser(member);
}
Expand Down
6 changes: 3 additions & 3 deletions src/org/jitsi/jicofo/JitsiMeetConference.java
Original file line number Diff line number Diff line change
Expand Up @@ -428,7 +428,7 @@ private void inviteChatMember(final ChatRoomMember chatRoomMember,
if (findParticipantForChatMember(chatRoomMember) != null)
return;

newParticipant = new Participant((XmppChatMember) chatRoomMember);
newParticipant = new Participant((MeetChatMember) chatRoomMember);

participants.add(newParticipant);

Expand Down Expand Up @@ -480,9 +480,9 @@ private final boolean[] hasToStartMuted(ChatRoomMember member,
}

int participantNumber = 0;
if(member != null && member instanceof XmppChatMember)
if(member != null && member instanceof MeetChatMember)
{
participantNumber = ((XmppChatMember)member).getJoinOrderNumber();
participantNumber = ((MeetChatMember)member).getJoinOrderNumber();
}
else
{
Expand Down
25 changes: 6 additions & 19 deletions src/org/jitsi/jicofo/Participant.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public class Participant
/**
* MUC chat member of this participant.
*/
private final XmppChatMember roomMember;
private final MeetChatMember roomMember;

/**
* Jingle session(if any) established with this peer.
Expand Down Expand Up @@ -91,26 +91,13 @@ public class Participant
*/
private String displayName = null;

/**
* Returns the endpoint ID for a participant in the videobridge(Colibri)
* context. This method can be used before <tt>Participant</tt> instance is
* created for the <tt>ChatRoomMember</tt>.
*
* @param chatRoomMember XMPP MUC chat room member which represent a
* <tt>Participant</tt>.
*/
static public String getEndpointId(ChatRoomMember chatRoomMember)
{
return chatRoomMember.getName(); // XMPP MUC Nickname
}

/**
* Creates new {@link Participant} for given chat room member.
*
* @param roomMember the {@link XmppChatMember} that represent this
* @param roomMember the {@link MeetChatMember} that represent this
* participant in MUC conference room.
*/
public Participant(XmppChatMember roomMember)
public Participant(MeetChatMember roomMember)
{
if (roomMember == null)
{
Expand Down Expand Up @@ -138,10 +125,10 @@ public void setJingleSession(JingleSession jingleSession)
}

/**
* Returns {@link XmppChatMember} that represents this participant in
* Returns {@link MeetChatMember} that represents this participant in
* conference multi-user chat room.
*/
public XmppChatMember getChatMember()
public MeetChatMember getChatMember()
{
return roomMember;
}
Expand Down Expand Up @@ -462,7 +449,7 @@ public void removeSSRCGroups(MediaSSRCGroupMap ssrcGroupsToRemove)
*/
public String getEndpointId()
{
return getEndpointId(roomMember);
return roomMember.getEndpointID();
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,24 @@
import net.java.sip.communicator.service.protocol.*;

/**
* XMPP extended interface of {@link ChatRoomMember}.
* Extended interface {@link ChatRoomMember} for the purpose of Jitsi-meet.
*
* @author Pawel Domas
*/
public interface XmppChatMember
public interface MeetChatMember
extends ChatRoomMember
{
/**
* Returns ths original user's connection Jabber ID and not the MUC address.
*/
String getJabberID();

/**
* Returns unique Colibri endpoint ID for conference participant represented
* by this chat member.
*/
String getEndpointID();

/**
* Returns number based on the order of joining of the members in the room.
* @return number based on the order of joining of the members in the room.
Expand Down
16 changes: 13 additions & 3 deletions test/mock/muc/MockMultiUserChat.java
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,9 @@ public void joinAs(String nickname, byte[] password)
isJoined = true;

MockRoomMember member
= new MockRoomMember(createAddressForName(nickname), this);
= new MockRoomMember(
createAddressForName(nickname),
this, generateEndpointId(nickname));

// FIXME: for mock purposes we are always the owner on join()
boolean isOwner = true;//= members.size() == 0;
Expand All @@ -133,7 +135,8 @@ public void joinAs(String nickname, byte[] password)

public MockRoomMember mockOwnerJoin(String name)
{
MockRoomMember member = new MockRoomMember(name, this);
MockRoomMember member
= new MockRoomMember(name, this, generateEndpointId(name));

member.setRole(ChatRoomMemberRole.OWNER);

Expand All @@ -151,7 +154,14 @@ public MockRoomMember mockJoin(String nickname)
public MockRoomMember createMockRoomMember(String nickname)
{
return new MockRoomMember(
createAddressForName(nickname), this);
createAddressForName(nickname), this, generateEndpointId(nickname));
}

private int generator = 0;

private synchronized String generateEndpointId(String nickname)
{
return nickname + "_" + generator++;
}

public MockRoomMember mockJoin(MockRoomMember member)
Expand Down
13 changes: 11 additions & 2 deletions test/mock/muc/MockRoomMember.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,21 +18,24 @@
* @author Pawel Domas
*/
public class MockRoomMember
implements XmppChatMember
implements MeetChatMember
{
private final String name;

private final String address;

private final MockMultiUserChat room;

private final String endpointId;

private ChatRoomMemberRole role = ChatRoomMemberRole.MEMBER;

MockRoomMember(String address, MockMultiUserChat chatRoom)
MockRoomMember(String address, MockMultiUserChat chatRoom, String endpointId)
{
this.address = address;
this.name = address.substring(address.lastIndexOf("/")+1);
this.room = chatRoom;
this.endpointId = endpointId;
}

public void setupFeatures(boolean useBundle)
Expand Down Expand Up @@ -128,6 +131,12 @@ public String getJabberID()
return null;
}

@Override
public String getEndpointID()
{
return endpointId;
}

@Override
public int getJoinOrderNumber()
{
Expand Down

0 comments on commit 3d2323f

Please sign in to comment.