/*
* Jicofo, the Jitsi Conference Focus.
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package org.jitsi.protocol;
import net.java.sip.communicator.util.Logger;
import org.jitsi.util.*;
import java.util.*;
/**
* Class encapsulates configuration properties for Jitsi Meet conference that
* are attached to create conference request
* {@link org.jitsi.impl.protocol.xmpp.extensions.ConferenceIq}. Options are
* configured in 'config.js' file of Jitsi Meet Java Script application.
*
* @author Pawel Domas
*/
public class JitsiMeetConfig
{
/**
* The logger.
*/
private final static Logger logger
= Logger.getLogger(JitsiMeetConfig.class);
/**
* The name the configuration property used to configure videobridge
* instance. It will be used when all auto-detected instances fail(or if we
* fail to detect any bridges at all).
*/
public static final String BRIDGE_PNAME = "bridge";
/**
* The name of the configuration property used to configure Jigasi(SIP
* gateway) instance.
*/
public static final String SIP_GATEWAY_PNAME = "call_control";
/**
* The name of channel last N configuration property. Should be non-negative
* number. Pass <tt>-1</tt> to disable last N functionality.
*/
public static final String CHANNEL_LAST_N_PNAME = "channelLastN";
/**
* The name of adaptive last N configuration property. Pass 'true' to enable
* or 'false' to disable.
*/
public static final String ADAPTIVE_LAST_N_PNAME = "adaptiveLastN";
/**
* The name of adaptive simulcast configuration property. Pass 'true' to
* enable or 'false' to disable.
*/
public static final String ADAPTIVE_SIMULCAST_PNAME = "adaptiveSimulcast";
/*
* The name of the open sctp configuration property. Pass 'true' to
* enable or 'false' to disable.
*/
public static final String OPEN_SCTP_PNAME = "openSctp";
/*
* The name of the enable firefox hacks configuration property. Pass 'true'
* to enable or 'false' to disable.
*/
public static final String ENABLE_FIREFOX_HACKS_PNAME
= "enableFirefoxHacks";
private final Map<String, String> properties;
/**
* Creates new <tt>JitsiMeetConfig</tt> from given properties map.
* @param properties a string to string map that contains name to value
* mapping of configuration properties.
*/
public JitsiMeetConfig(Map<String, String> properties)
{
this.properties = properties;
}
/**
* Returns pre-configured JVB address or <tt>null</tt> if no bridge was
* passed in the config.
*/
public String getPreConfiguredVideobridge()
{
return properties.get(BRIDGE_PNAME);
}
/**
* Returns pre-configured XMPP address of SIP gateway or <tt>null</tt> if
* no info was passed in the config.
*/
public String getPreConfiguredSipGateway()
{
return properties.get(SIP_GATEWAY_PNAME);
}
/**
* Returns an integer value of channel last N property or <tt>null</tt>
* if it has not been specified.
*/
public Integer getChannelLastN()
{
return getInt(CHANNEL_LAST_N_PNAME);
}
/**
* Returns a boolean value of adaptive last N property or <tt>null</tt>
* if it has not been specified.
*/
public Boolean isAdaptiveLastNEnabled()
{
return getBoolean(ADAPTIVE_LAST_N_PNAME);
}
/**
* Returns a boolean value of adaptive simulcast property or <tt>null</tt>
* if it has not been specified.
*/
public Boolean isAdaptiveSimulcastEnabled()
{
return getBoolean(ADAPTIVE_SIMULCAST_PNAME);
}
/**
* Returns the value of the open sctp configuration property or
* <tt>null</tt> if it has not been specified.
*/
public Boolean openSctp()
{
return getBoolean(OPEN_SCTP_PNAME);
}
/**
* Returns the value of the enable firefox hacks configuration property or
* <tt>null</tt> if it has not been specified.
*/
public Boolean enableFirefoxHacks()
{
return getBoolean(ENABLE_FIREFOX_HACKS_PNAME);
}
private Boolean getBoolean(String name)
{
String stringValue = properties.get(name);
Boolean boolValue = null;
if (!StringUtils.isNullOrEmpty(stringValue))
{
//try
//{
boolValue = Boolean.parseBoolean(stringValue);
//}
//catch (NumberFormatException ex)
//{
// logger.error(
// "Error parsing: " + name + ", v: " + stringValue, ex);
//}
}
return boolValue;
}
private Integer getInt(String name)
{
String stringValue = properties.get(name);
Integer intValue = null;
if (!StringUtils.isNullOrEmpty(stringValue))
{
try
{
intValue = Integer.parseInt(stringValue);
}
catch (NumberFormatException ex)
{
logger.error(
"Error parsing: " + name + ", v: " + stringValue, ex);
}
}
return intValue;
}
}