org.xnio.channels.MulticastMessageChannel Maven / Gradle / Ivy
Go to download
This artifact provides a single jar that contains all classes required to use remote EJB and JMS, including
all dependencies. It is intended for use by those not using maven, maven users should just import the EJB and
JMS BOM's instead (shaded JAR's cause lots of problems with maven, as it is very easy to inadvertently end up
with different versions on classes on the class path).
/*
* JBoss, Home of Professional Open Source
*
* Copyright 2008 Red Hat, Inc. and/or its affiliates.
*
* 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 org.xnio.channels;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.io.IOException;
import java.io.Closeable;
import org.xnio.ChannelListener;
/**
* A multicast-capable point-to-multipoint channel. UDP channels are multipoint datagram channels which support multicast registration.
*
* @apiviz.landmark
*/
public interface MulticastMessageChannel extends BoundMultipointMessageChannel {
/**
* A registration key for a multicast group.
*
* @apiviz.exclude
*/
interface Key extends Closeable {
/**
* Block multicast packets from the given source address.
*
* If this membership key is not source-specific, and the implementation supports source filtering,
* then this method blocks multicast packets from the given source addresses. After a source address is blocked
* it may still be possible to receive datagrams from that source. This can arise when datagrams are waiting
* to be received in the socket's receive buffer.
*
* @param source the source address to block
* @return this key
* @throws IOException if an I/O error occurs
* @throws UnsupportedOperationException if the implementation does not support source filtering
* @throws IllegalStateException if this key is source-specific or is no longer valid
* @throws IllegalArgumentException if the {@code source} parameter is not a unicast address or is not the same address type as the multicast group
*/
Key block(InetAddress source) throws IOException, UnsupportedOperationException, IllegalStateException, IllegalArgumentException;
/**
* Unblock multicast packets from the given source address that was previously blocked using the {@link #block(InetAddress)} method.
*
* @param source the source address to unblock
* @return this key
* @throws IOException if an I/O error occurs
* @throws IllegalStateException if the given source address is not currently blocked or the key is no longer valid
* @throws UnsupportedOperationException if the implementation does not support source filtering
*/
Key unblock(InetAddress source) throws IOException, IllegalStateException, UnsupportedOperationException;
/**
* Return the channel associated with this key. This method will return the channel even after the membership
* is dropped.
*
* @return the channel
*/
MulticastMessageChannel getChannel();
/**
* Return the multicast group for which this key was created. This method will continue to return the group even
* after the membership is dropped.
*
* @return the multicast group
*/
InetAddress getGroup();
/**
* Return the network interface for which this key was created. This method will continue to return the network
* interface even after the membership is dropped or the channel is closed.
*
* @return the network interface
*/
NetworkInterface getNetworkInterface();
/**
* Return the source address if this membership key is source specific, or {@code null} if this membership is not
* source specific.
*
* @return the source address
*/
InetAddress getSourceAddress();
/**
* Determine if this membership is active.
*
* @return {@code true} if the membership is still active
*/
boolean isOpen();
}
/**
* Join a multicast group to begin receiving all datagrams sent to the group.
*
* A multicast channel may join several multicast groups, including the same group on more than one interface. An
* implementation may impose a limit on the number of groups that may be joined at the same time.
*
* @param group the multicast address to join
* @param iface the network interface to join on
* @return a new key
* @throws IOException if an I/O error occurs
* @throws IllegalStateException if the channel is already a member of the group on this interface
* @throws IllegalArgumentException if the {@code group} parameters is not a multicast address, or is an unsupported address type
* @throws SecurityException if a security manager is set, and its {@link SecurityManager#checkMulticast(InetAddress)} method denies access to the group
*/
Key join(InetAddress group, NetworkInterface iface) throws IOException;
/**
* Join a multicast group to begin receiving all datagrams sent to the group from a given source address.
*
* A multicast channel may join several multicast groups, including the same group on more than one interface. An
* implementation may impose a limit on the number of groups that may be joined at the same time.
*
* @param group the multicast address to join
* @param iface the network interface to join on
* @param source the source address to listen for
* @return a new key
* @throws IOException if an I/O error occurs
* @throws IllegalStateException if the channel is already a member of the group on this interface
* @throws IllegalArgumentException if the {@code group} parameters is not a multicast address, or is an unsupported address type
* @throws SecurityException if a security manager is set, and its {@link SecurityManager#checkMulticast(InetAddress)} method denies access to the group
* @throws UnsupportedOperationException if the implementation does not support source filtering
*/
Key join(InetAddress group, NetworkInterface iface, InetAddress source) throws IOException;
/** {@inheritDoc} */
ChannelListener.Setter extends MulticastMessageChannel> getReadSetter();
/** {@inheritDoc} */
ChannelListener.Setter extends MulticastMessageChannel> getCloseSetter();
/** {@inheritDoc} */
ChannelListener.Setter extends MulticastMessageChannel> getWriteSetter();
}