diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jitsimeet/MediaPresenceExtension.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jitsimeet/MediaPresenceExtension.java new file mode 100644 index 000000000..74d6fd4dd --- /dev/null +++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jitsimeet/MediaPresenceExtension.java @@ -0,0 +1,163 @@ +/* + * Jitsi, 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.jitsimeet; + +import net.java.sip.communicator.impl.protocol.jabber.extensions.*; +import org.jivesoftware.smack.provider.*; + +/** + * Packet extension used by Jitsi Meet to advertise local media SSRCs in MUC + * presence. + * + * @author Pawel Domas + */ +public class MediaPresenceExtension + extends AbstractPacketExtension +{ + /** + * The namespace of this packet extension. + */ + public static final String NAMESPACE = "http://estos.de/ns/mjs"; + + /** + * XML element name of this packet extension. + */ + public static final String ELEMENT_NAME = "media"; + + /** + * Creates an MediaPresenceExtension instance. + * + */ + public MediaPresenceExtension() + { + super(NAMESPACE, ELEMENT_NAME); + } + + /** + * Registers packet Jitsi Meet media presence packet extensions in given + * providerManager. + * + * @param providerManager the ProviderManager to which media + * presence extensions will be registered to. + */ + public static void registerExtensions(ProviderManager providerManager) + { + // + providerManager.addExtensionProvider( + MediaPresenceExtension.ELEMENT_NAME, + MediaPresenceExtension.NAMESPACE, + new DefaultPacketExtensionProvider( + MediaPresenceExtension.class)); + + // + providerManager.addExtensionProvider( + MediaPresenceExtension.Source.ELEMENT_NAME, + MediaPresenceExtension.Source.NAMESPACE, + new DefaultPacketExtensionProvider( + Source.class)); + } + + /** + * Source extension element that specifies into about media SSRC. + */ + public static class Source + extends AbstractPacketExtension + { + /** + * Source XML element name. + */ + public final static String ELEMENT_NAME = "source"; + + /** + * No namespace attached. + */ + public final static String NAMESPACE = ""; + + /** + * SSRC media type attribute name. Can be 'audio' or 'video'. + */ + public final static String MEDIA_TYPE_ATTR_NAME = "type"; + + /** + * SSRC number attribute name. + */ + public final static String SOURCE_ATTR_NAME = "ssrc"; + + /** + * Media direction as used in SDP('sendrecv', 'recvonly', 'sendonly'). + */ + public final static String DIRECTION_ATTR_NAME = "direction"; + + /** + * Creates new instance of Source packet extension with default + * 'sendrecv' direction set. + */ + public Source() + { + super(NAMESPACE, ELEMENT_NAME); + + // Default direction + setDirection("sendrecv"); + } + + /** + * Returns media direction + * (values like used in SDP 'sendrecv', 'recvonly'...). + */ + public String getDirection() + { + return getAttributeAsString(DIRECTION_ATTR_NAME); + } + + /** + * Returns media synchronization source identifier. + */ + public String getSSRC() + { + return getAttributeAsString(SOURCE_ATTR_NAME); + } + + /** + * Sets media type of the media represented by this source packet + * extensions. + * @param mediaType media type string('audio' or 'video'). + */ + public void setMediaType(String mediaType) + { + setAttribute(MEDIA_TYPE_ATTR_NAME, mediaType); + } + + /** + * Direction of the media represented by this source packet extension. + * @param direction media direction like used in SDP + * ('sendrecv, 'recvonly'...). + */ + public void setDirection(String direction) + { + setAttribute(DIRECTION_ATTR_NAME, direction); + } + + /** + * Sets synchronization source identifier of the media represented by + * this source packet extension. + * @param ssrc synchronization source identifier to set. + */ + public void setSSRC(String ssrc) + { + setAttribute(SOURCE_ATTR_NAME, ssrc); + } + + /** + * @return type of the media(audio or video) represented by this source + * packet extension. + */ + public String getMediaType() + { + return getAttributeAsString(MEDIA_TYPE_ATTR_NAME); + } + } +}