/*
* Jicofo, the Jitsi Conference Focus.
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package org.jitsi.jicofo;
import net.java.sip.communicator.impl.protocol.jabber.extensions.colibri.*;
import net.java.sip.communicator.impl.protocol.jabber.extensions.jingle.*;
import net.java.sip.communicator.impl.protocol.jabber.jinglesdp.*;
import org.jitsi.util.*;
import java.util.*;
/**
* Wrapper for <tt>SourceGroupPacketExtension</tt>.
*
* @author Pawel Domas
*/
public class SSRCGroup
{
/**
* Underlying source group packet extension.
*/
private final SourceGroupPacketExtension group;
/**
* Extracts SSRC groups from Jingle content packet extension.
* @param content the <tt>ContentPacketExtension</tt> that contains(or not)
* the description of SSRC groups.
* @return the list of <tt>SSRCGroup</tt>s described by given
* <tt>ContentPacketExtension</tt>.
*/
public static List<SSRCGroup> getSSRCGroupsForContent(
ContentPacketExtension content)
{
List<SSRCGroup> groups = new ArrayList<SSRCGroup>();
RtpDescriptionPacketExtension rtpDescPe
= JingleUtils.getRtpDescription(content);
if (rtpDescPe == null)
{
return groups;
}
List<SourceGroupPacketExtension> groupExtensions
= rtpDescPe.getChildExtensionsOfType(
SourceGroupPacketExtension.class);
for (SourceGroupPacketExtension groupPe : groupExtensions)
{
groups.add(new SSRCGroup(groupPe));
}
return groups;
}
/**
* Creates new instance of <tt>SSRCGroup</tt>.
* @param group the packet extension that described SSRC group to be wrapped
* by new object.
*/
public SSRCGroup(SourceGroupPacketExtension group)
{
this.group = group;
}
/**
* Returns deep copy of underlying <tt>SourceGroupPacketExtension</tt>.
*/
public SourceGroupPacketExtension getExtensionCopy()
{
return group.copy();
}
/**
* Returns full copy of this <tt>SSRCGroup</tt>.
*/
public SSRCGroup copy()
{
return new SSRCGroup(getExtensionCopy());
}
@Override
public boolean equals(Object obj)
{
if (!(obj instanceof SSRCGroup))
{
return false;
}
SSRCGroup other = (SSRCGroup) obj;
String semantics = other.group.getSemantics();
if (StringUtils.isNullOrEmpty(semantics)
&& !StringUtils.isNullOrEmpty(group.getSemantics()))
{
return false;
}
if (!group.getSemantics().equals(semantics))
{
return false;
}
for (SourcePacketExtension ssrcToFind : group.getSources())
{
boolean found = false;
for (SourcePacketExtension ssrc : other.group.getSources())
{
if (ssrc.getSSRC() == ssrcToFind.getSSRC())
{
found = true;
break;
}
}
if (!found)
{
return false;
}
}
return true;
}
}