All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.littleshoot.stun.stack.message.turn.ConnectionStatusIndication Maven / Gradle / Ivy

The newest version!
package org.littleshoot.stun.stack.message.turn;

import java.net.InetSocketAddress;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import org.apache.commons.id.uuid.UUID;
import org.littleshoot.stun.stack.message.AbstractStunMessage;
import org.littleshoot.stun.stack.message.StunMessageType;
import org.littleshoot.stun.stack.message.StunMessageVisitor;
import org.littleshoot.stun.stack.message.attributes.StunAttribute;
import org.littleshoot.stun.stack.message.attributes.StunAttributeType;
import org.littleshoot.stun.stack.message.attributes.turn.ConnectionStatus;
import org.littleshoot.stun.stack.message.attributes.turn.ConnectionStatusAttribute;
import org.littleshoot.stun.stack.message.attributes.turn.RemoteAddressAttribute;

/**
 * Message indicating the connection status of a specific remote host.
 */
public class ConnectionStatusIndication extends AbstractStunMessage
    {

    private final InetSocketAddress m_remoteAddress;
    private final ConnectionStatus m_connectionStatus;


    /**
     * Creates a new connection status indication message.
     * 
     * @param transactionId The ID of the transaction.
     * @param attributes The message attributes.
     */
    public ConnectionStatusIndication(final UUID transactionId, 
        final Map attributes)
        {
        super(transactionId, StunMessageType.CONNECTION_STATUS_INDICATION,
            attributes);
        final RemoteAddressAttribute att = 
            (RemoteAddressAttribute)attributes.get(
                StunAttributeType.REMOTE_ADDRESS);
        this.m_remoteAddress = att.getInetSocketAddress();
        
        final ConnectionStatusAttribute csa =
            (ConnectionStatusAttribute)attributes.get(
                StunAttributeType.CONNECT_STAT);
        this.m_connectionStatus = csa.getConnectionStatus();
        }

    /**
     * Creates a new connection status indication message.
     * 
     * @param remoteAddress The remote address we're indicating the status of.
     * @param connectionStatus The connection status.
     */
    public ConnectionStatusIndication(final InetSocketAddress remoteAddress, 
        final ConnectionStatus connectionStatus)
        {
        super(UUID.randomUUID(), StunMessageType.CONNECTION_STATUS_INDICATION,
            createAttributes(remoteAddress, connectionStatus));
        this.m_remoteAddress = remoteAddress;
        this.m_connectionStatus = connectionStatus;
        }

    private static Map createAttributes(
        final InetSocketAddress remoteAddress, 
        final ConnectionStatus connectionStatus)
        {
        final Map attributes = 
            new ConcurrentHashMap();
        final StunAttribute remoteAddressAttribute =
            new RemoteAddressAttribute(remoteAddress);
        final StunAttribute status = 
            new ConnectionStatusAttribute(connectionStatus);
        attributes.put(remoteAddressAttribute.getAttributeType(), 
            remoteAddressAttribute);
        attributes.put(status.getAttributeType(), status);
        return attributes;
        }

    public  T accept(StunMessageVisitor visitor)
        {
        return visitor.visitConnectionStatusIndication(this);
        }

    /**
     * Accessor for the connection status.
     * 
     * @return The connection status.
     */
    public ConnectionStatus getConnectionStatus()
        {
        return m_connectionStatus;
        }

    /**
     * Accessor for the remote address.
     * 
     * @return The remote address.
     */
    public InetSocketAddress getRemoteAddress()
        {
        return m_remoteAddress;
        }

    }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy