/* * Jitsi, the OpenSource Java VoIP and Instant Messaging client. * * Copyright @ 2015 Atlassian Pty Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.java.sip.communicator.impl.protocol.jabber.extensions.colibri; import java.util.*; import net.java.sip.communicator.impl.protocol.jabber.extensions.*; import net.java.sip.communicator.impl.protocol.jabber.extensions.jingle.*; import net.java.sip.communicator.util.*; import org.jivesoftware.smack.packet.*; /** * Implements <tt>AbstractPacketExtension</tt> for the <tt>source</tt> element * defined by <a href="http://hancke.name/jabber/jingle-sources"> * Source-Specific Media Attributes in Jingle</a>. * * @author Lyubomir Marinov * @author Pawel Domas */ public class SourcePacketExtension extends AbstractPacketExtension { private final static Logger logger = Logger.getLogger(SourcePacketExtension.class); /** * The XML name of the <tt>setup</tt> element defined by Source-Specific * Media Attributes in Jingle. */ public static final String ELEMENT_NAME = "source"; /** * The XML namespace of the <tt>setup</tt> element defined by * Source-Specific Media Attributes in Jingle. */ public static final String NAMESPACE = "urn:xmpp:jingle:apps:rtp:ssma:0"; /** * The XML name of the <tt>setup</tt> element's attribute which corresponds * to the <tt>ssrc</tt> media attribute in SDP. */ public static final String SSRC_ATTR_NAME = "ssrc"; /** Initializes a new <tt>SourcePacketExtension</tt> instance. */ public SourcePacketExtension() { super(NAMESPACE, ELEMENT_NAME); } /** * Adds a specific parameter (as defined by Source-Specific Media Attributes * in Jingle) to this source. * * @param parameter the <tt>ParameterPacketExtension</tt> to add to this * source */ public void addParameter(ParameterPacketExtension parameter) { addChildExtension(parameter); } /** * Gets the parameters (as defined by Source-Specific Media Attributes in * Jingle) of this source. * * @return the <tt>ParameterPacketExtension</tt>s of this source */ public List<ParameterPacketExtension> getParameters() { return getChildExtensionsOfType(ParameterPacketExtension.class); } /** * Finds the value of SSRC parameter identified by given name. * @param name the name of SSRC parameter to find. * @return value of SSRC parameter */ public String getParameter(String name) { for (ParameterPacketExtension param : getParameters()) { if (name.equals(param.getName())) return param.getValue(); } return null; } /** * Gets the synchronization source (SSRC) ID of this source. * * @return the synchronization source (SSRC) ID of this source */ public long getSSRC() { String s = getAttributeAsString(SSRC_ATTR_NAME); return (s == null) ? -1 : Long.parseLong(s); } /** * Sets the synchronization source (SSRC) ID of this source. * * @param ssrc the synchronization source (SSRC) ID to be set on this source */ public void setSSRC(long ssrc) { if (ssrc == -1) removeAttribute(SSRC_ATTR_NAME); else setAttribute(SSRC_ATTR_NAME, Long.toString(0xffffffffL & ssrc)); } /** * Returns deep copy of this <tt>SourcePacketExtension</tt>. */ public SourcePacketExtension copy() { SourcePacketExtension copy = AbstractPacketExtension.clone(this); // COPY SSRC PARAMS for (PacketExtension ppe : getChildExtensions()) { if (ppe instanceof AbstractPacketExtension) { copy.addChildExtension( AbstractPacketExtension.clone( (AbstractPacketExtension) ppe)); } else { logger.error("Failed to clone " + ppe); } } return copy; } }