diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/PayloadTypePacketExtension.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/PayloadTypePacketExtension.java new file mode 100644 index 000000000..517d6b6cf --- /dev/null +++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/PayloadTypePacketExtension.java @@ -0,0 +1,324 @@ +/* + * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ +package net.java.sip.communicator.impl.protocol.jabber.extensions.jingle; + +import java.util.*; + +import org.jivesoftware.smack.packet.*; + +/** + * Represents the payload-type elements described in XEP-0167. + * + * @author Emil Ivov + */ +public class PayloadTypePacketExtension implements PacketExtension +{ + /** + * Payload types do not live in a namespace of their own so we have + * null here. + */ + public static final String NAMESPACE = null; + + /** + * The name of the "payload-type" element. + */ + public static final String ELEMENT_NAME = "payload-type"; + + /** + * The name of the channels payload-type argument. + */ + public static final String CHANNELS_ARG_NAME = "channels"; + + /** + * The name of the clockrate SDP argument. + */ + public static final String CLOCKRATE_ARG_NAME = "clockrate"; + + /** + * The name of the payload id SDP argument. + */ + public static final String ID_ARG_NAME = "id"; + + /** + * The name of the maxptime SDP argument. + */ + public static final String MAXPTIME_ARG_NAME = "maxptime"; + + /** + * The name of the name SDP argument. + */ + public static final String NAME_ARG_NAME = "name"; + + /** + * The name of the ptime SDP argument. + */ + public static final String PTIME_ARG_NAME = "ptime"; + + /** + * Number of channels in this payload. If omitted, it MUST be assumed to + * contain one channel. + */ + private int channels = -1; + + /** + * The sampling frequency in Hertz used by this encoding. + */ + private int clockrate = -1; + + /** + * The payload identifier for this encoding. + */ + private int id = -1; + + /** + * The maximum packet time as specified in RFC 4566 + */ + private int maxptime = -1; + + /** + * The name of the encoding, or as per the XEP. The appropriate subtype of + * the MIME type. Setting this field is RECOMMENDED for static payload + * types, REQUIRED for dynamic payload types. + */ + private String name; + + /** + * The packet time as specified in RFC 4566 + */ + private int ptime = -1; + + /** + * An optional list of format parameters (like the one we get with the + * fmtp: SDP param). + */ + private List parameters = new ArrayList(); + + /** + * Returns the name of the payload-type element. + * + * @return the name of the payload-type element. + */ + public String getElementName() + { + return ELEMENT_NAME; + } + + /** + * Returns the namespace for the payload-type element. + * + * @return the namespace for the payload-type element. + */ + public String getNamespace() + { + return NAMESPACE; + } + + /** + * Returns the XML representation of the payload-type element + * including all child elements. + * + * @return this packet extension as an XML String. + */ + public String toXML() + { + StringBuilder bldr = new StringBuilder( + "<" + getElementName() + " "); + + //channels + if(getChannels() > -1) + bldr.append(CHANNELS_ARG_NAME + "='"+ getChannels() +"' "); + + //clockrate + if(getClockrate() > -1) + bldr.append(CLOCKRATE_ARG_NAME + "='"+ getClockrate() +"' "); + + //id + bldr.append(ID_ARG_NAME + "=" + getID() + "' "); + + //maxptime + if (getMaxptime() != -1) + bldr.append(MAXPTIME_ARG_NAME + "=" + getMaxptime() + "' "); + + //payload name + bldr.append(NAME_ARG_NAME + "=" + getName() + "' "); + + //ptime + if (getPtime() != -1) + bldr.append(PTIME_ARG_NAME + "=" + getPtime() + "' "); + + + if (parameters.size() == 0) + { + bldr.append("/>"); + } + else + { + bldr.append(">"); + + for (PacketExtension parameter : parameters) + { + bldr.append(parameter.toXML()); + } + + bldr.append(""); + } + + return bldr.toString(); + } + + /** + * Sets the number of channels in this payload type. If omitted, it will be + * assumed to contain one channel. + * + * @param channels the number of channels in this payload type. + */ + public void setChannels(int channels) + { + this.channels = channels; + } + + /** + * Returns the number of channels in this payload type. + * + * @return the number of channels in this payload type. + */ + public int getChannels() + { + return channels; + } + + /** + * Specifies the sampling frequency in Hertz used by this encoding. + * + * @param clockrate the sampling frequency in Hertz used by this encoding. + */ + public void setClockrate(int clockrate) + { + this.clockrate = clockrate; + } + + /** + * Returns the sampling frequency in Hertz used by this encoding. + * + * @return the sampling frequency in Hertz used by this encoding. + */ + public int getClockrate() + { + return clockrate; + } + + /** + * Specifies the payload identifier for this encoding. + * + * @param id the payload type id + */ + public void setId(int id) + { + this.id = id; + } + + /** + * Returns the payload identifier for this encoding (as specified by RFC + * 3551 or a dynamic one). + * + * @return the payload identifier for this encoding (as specified by RFC + * 3551 or a dynamic one). + */ + public int getID() + { + return id; + } + + /** + * Sets the maximum packet time as specified in RFC 4566. + * + * @param maxptime the maximum packet time as specified in RFC 4566 + */ + public void setMaxptime(int maxptime) + { + this.maxptime = maxptime; + } + + /** + * Returns maximum packet time as specified in RFC 4566. + * + * @return maximum packet time as specified in RFC 4566 + */ + public int getMaxptime() + { + return maxptime; + } + + /** + * Sets the packet time as specified in RFC 4566. + * + * @param ptime the packet time as specified in RFC 4566 + */ + public void setPtime(int ptime) + { + this.ptime = ptime; + } + + /** + * Returns packet time as specified in RFC 4566. + * + * @return packet time as specified in RFC 4566 + */ + public int getPtime() + { + return ptime; + } + + /** + * Sets the name of the encoding, or as per the XEP: the appropriate subtype + * of the MIME type. Setting this field is RECOMMENDED for static payload + * types, REQUIRED for dynamic payload types. + * + * @param name the name of this encoding. + */ + public void setName(String name) + { + this.name = name; + } + + /** + * Returns the name of the encoding, or as per the XEP: the appropriate + * subtype of the MIME type. Setting this field is RECOMMENDED for static + * payload types, REQUIRED for dynamic payload types. + * + * @return the name of the encoding, or as per the XEP: the appropriate + * subtype of the MIME type. Setting this field is RECOMMENDED for static + * payload types, REQUIRED for dynamic payload types. + */ + public String getName() + { + return name; + } + + /** + * Adds an SDP parameter to the list that we already have registered for this + * payload type. + * + * @param parameter an SDP parameter for this encoding. + */ + public void addParameter(PacketExtension parameter) + { + this.parameters.add(parameter); + } + + /** + * Returns a reference to the the list of parameters currently + * registered for this payload type. + * + * @return a reference to the the list of parameters currently + * registered for this payload type. + */ + public List getParameters() + { + return parameters; + } +}