/*
* 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.service.protocol;
import java.io.*;
import java.util.*;
/**
* A JingleNodesDescriptor stores information necessary to create a
* JingleNodes tracker or relay candidate harvester that we could use with
* ICE4J. Descriptors are normally initialized by protocol wizards. They are
* then used to convert the data into a {@link String} form suitable for storage
* in an accounts properties Map.
*
* @author Yana Stamcheva
* @author Emil Ivov
* @author Sebastien Vincent
*/
public class JingleNodeDescriptor
implements Serializable
{
/**
* JingleNodes prefix to store configuration.
*/
public static final String JN_PREFIX = "JINGLENODES";
/**
* JingleNodes prefix to store server address in configuration.
*/
public static final String JN_ADDRESS = "ADDRESS";
/**
* JingleNodes prefix to store the relay capabilities in configuration.
*/
public static final String JN_IS_RELAY_SUPPORTED = "IS_RELAY_SUPPORTED";
/**
* The maximum number of stun servers that we would allow.
*/
public static final int MAX_JN_RELAY_COUNT = 100;
/**
* The address of the JingleNodes (JID).
*/
private String address;
/**
* If the relay is supported by this JingleNodes.
*/
private boolean relaySupported;
/**
* Creates an instance of JingleNodes by specifying all
* parameters.
*
* @param address address of the JingleNodes
* @param relaySupported if the JingleNodes supports relay
*/
public JingleNodeDescriptor(String address,
boolean relaySupported)
{
this.address = address;
this.relaySupported = relaySupported;
}
/**
* Returns the address of the JingleNodes
*
* @return the address of the JingleNodes
*/
public String getJID()
{
return address;
}
/**
* Sets the address of the JingleNodes.
*
* @param address the JID of the JingleNodes
*/
public void setAddress(String address)
{
this.address = address;
}
/**
* Returns if the JID has relay support.
*
* @return true if relay is supported, false otherwise
*/
public boolean isRelaySupported()
{
return relaySupported;
}
/**
* Sets the relay support corresponding to this JID.
*
* @param relaySupported relay value to set
*/
public void setRelay(boolean relaySupported)
{
this.relaySupported = relaySupported;
}
/**
* Stores this descriptor into the specified {@link Map}.The method is meant
* for use with account property maps. It also allows prepending an account
* prefix to all property names so that multiple descriptors can be stored
* in a single {@link Map}.
*
* @param props the account properties {@link Map} that we'd like to store
* this descriptor in.
* @param namePrefix the prefix that we should prepend to every property
* name.
*/
public void storeDescriptor(Map props, String namePrefix)
{
if(namePrefix == null)
namePrefix = "";
props.put(namePrefix + JN_ADDRESS, getJID());
props.put(namePrefix + JN_IS_RELAY_SUPPORTED,
Boolean.toString(isRelaySupported()));
}
/**
* Loads this descriptor from the specified {@link Map}.The method is meant
* for use with account property maps. It also allows prepending an account
* prefix to all property names so that multiple descriptors can be read
* in a single {@link Map}.
*
* @param props the account properties {@link Map} that we'd like to load
* this descriptor from.
* @param namePrefix the prefix that we should prepend to every property
* name.
*
* @return the newly created descriptor or null if no descriptor was found.
*/
public static JingleNodeDescriptor loadDescriptor(
Map props,
String namePrefix)
{
if(namePrefix == null)
namePrefix = "";
String relayAddress = props.get(namePrefix + JN_ADDRESS);
if (relayAddress == null)
return null;
String relayStr = props.get(namePrefix + JN_IS_RELAY_SUPPORTED);
boolean relay = false;
try
{
relay = Boolean.parseBoolean(relayStr);
}
catch(Throwable t)
{
}
JingleNodeDescriptor relayServer =
new JingleNodeDescriptor(relayAddress,
relay);
return relayServer;
}
/**
* Returns a String representation of this descriptor
*
* @return a String representation of this descriptor.
*/
@Override
public String toString()
{
return "JingleNodesDesc: " + getJID() + " relay:"
+ isRelaySupported();
}
}