/*
* Jicofo, the Jitsi Conference Focus.
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package org.jitsi.protocol.xmpp;
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.service.protocol.*;
import org.jitsi.jicofo.*;
import org.jitsi.protocol.*;
import java.util.*;
/**
* Operation set exposes an interface for direct Colibri protocol communication
* with the videobridge. Allows to allocate new channels, update transport info
* and finally expire colibri channels.
*
* @author Pawel Domas
*/
public interface OperationSetColibriConference
extends OperationSet
{
/**
* Sets Jitsi videobridge XMPP address to be used to allocate
* the conferences.
*
* @param videobridgeJid the videobridge address to be set.
*/
void setJitsiVideobridge(String videobridgeJid);
/**
* Returns XMPP address of curently used videobridge or <tt>null</tt>
* if the isn't any.
*/
String getJitsiVideobridge();
/**
* Sets conference configuration instance that will be used to adjust
* Colibri channels properties.
* @param config an instance of <tt>JitsiMeetConfig</tt> to be used by this
* Colibri operation set.
*/
void setJitsiMeetConfig(JitsiMeetConfig config);
/**
* Returns the identifier assigned for our conference by the videobridge.
* Will returns <tt>null</tt> if no conference has been allocated yet.
*/
String getConferenceId();
/**
* Creates channels on the videobridge for given parameters.
*
* @param useBundle <tt>true</tt> if channel transport bundle should be used
* for this allocation.
* @param endpointName the name that will identify channels endpoint.
* @param peerIsInitiator <tt>true</tt> if peer is ICE an initiator
* of ICE session.
* @param contents content list that describes peer media.
*
* @return <tt>ColibriConferenceIQ</tt> that describes allocated channels.
*
* @throws OperationFailedException if channel allocation failed due to
* network or bridge failure.
*/
ColibriConferenceIQ createColibriChannels(
boolean useBundle,
String endpointName,
boolean peerIsInitiator,
List<ContentPacketExtension> contents)
throws OperationFailedException;
/**
* Updates transport information for active channels
* (existing on the bridge).
*
* @param initiator <tt>true</tt> if peer is the initiator of ICE session.
* @param map the map of content name to transport packet extension.
* @param localChannelsInfo <tt>ColibriConferenceIQ</tt> that contains
* the description of the channel for which
* transport information will be updated
* on the bridge.
*/
void updateTransportInfo(
boolean initiator,
Map<String, IceUdpTransportPacketExtension> map,
ColibriConferenceIQ localChannelsInfo);
/**
* Updates simulcast layers on the bridge.
* @param ssrcGroups the map of media SSRC groups that will be updated on
* the bridge.
* @param localChannelsInfo <<tt>ColibriConferenceIQ</tt> that contains
* the description of the channel for which
* SSRC groups information will be updated
* on the bridge.</tt>
*/
void updateSsrcGroupsInfo(
MediaSSRCGroupMap ssrcGroups,
ColibriConferenceIQ localChannelsInfo);
/**
* Updates channel bundle transport information for channels described by
* <tt>localChannelsInfo</tt>. Single transport is set on the bundle shared
* by all channels described by given IQ and only one bundle group can be
* updated by single call to this method.
*
* @param initiator <tt>true</tt> if peer is the initiator of ICE session.
* @param transport the transport packet extension that contains channel
* bundle transport candidates.
* @param localChannelsInfo <tt>ColibriConferenceIQ</tt> that contains
* the description of the channels sharing the same
* bundle group.
*/
void updateBundleTransportInfo(
boolean initiator,
IceUdpTransportPacketExtension transport,
ColibriConferenceIQ localChannelsInfo);
/**
* Expires the channels described by given <tt>ColibriConferenceIQ</tt>.
*
* @param channelInfo the <tt>ColibriConferenceIQ</tt> that contains
* information about the channel to be expired.
*/
void expireChannels(ColibriConferenceIQ channelInfo);
/**
* Expires all channels in current conference and resets conference state.
*/
void expireConference();
/**
* Mutes audio channels described in given IQ by changing their media
* direction to {@link org.jitsi.service.neomedia.MediaDirection#SENDONLY}.
* @param channelsInfo the IQ that describes the channels to be muted.
* @param mute <tt>true</tt> to mute or <tt>false</tt> to unmute audio
* channels described in <tt>channelsInfo</tt>.
* @return <tt>true</tt> if the operation has succeeded or <tt>false</tt>
* otherwise.
*/
boolean muteParticipant(ColibriConferenceIQ channelsInfo, boolean mute);
}