001package ball.upnp.ssdp;
002/*-
003 * ##########################################################################
004 * UPnP/SSDP Implementation Classes
005 * $Id: SSDPMulticastSocket.java 7215 2021-01-03 18:39:51Z ball $
006 * $HeadURL: svn+ssh://svn.hcf.dev/var/spool/scm/repository.svn/ball-upnp/trunk/src/main/java/ball/upnp/ssdp/SSDPMulticastSocket.java $
007 * %%
008 * Copyright (C) 2013 - 2021 Allen D. Ball
009 * %%
010 * Licensed under the Apache License, Version 2.0 (the "License");
011 * you may not use this file except in compliance with the License.
012 * You may obtain a copy of the License at
013 *
014 *      http://www.apache.org/licenses/LICENSE-2.0
015 *
016 * Unless required by applicable law or agreed to in writing, software
017 * distributed under the License is distributed on an "AS IS" BASIS,
018 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
019 * See the License for the specific language governing permissions and
020 * limitations under the License.
021 * ##########################################################################
022 */
023import java.io.IOException;
024import java.net.InetSocketAddress;
025import java.net.MulticastSocket;
026import lombok.ToString;
027
028/**
029 * SSDP discovery {@link MulticastSocket} implementation.
030 *
031 * {@bean.info}
032 *
033 * @author {@link.uri mailto:ball@hcf.dev Allen D. Ball}
034 * @version $Revision: 7215 $
035 */
036@ToString
037public class SSDPMulticastSocket extends MulticastSocket {
038    private static final String ADDRESS = "239.255.255.250";
039    private static final int PORT = 1900;
040
041    /**
042     * SSDP IPv4 multicast {@link InetSocketAddress}.
043     */
044    public static final InetSocketAddress INET_SOCKET_ADDRESS =
045        new InetSocketAddress(ADDRESS, PORT);
046
047    /**
048     * Sole constructor.
049     */
050    public SSDPMulticastSocket() throws IOException {
051        super(PORT);
052
053        setReuseAddress(true);
054        setLoopbackMode(false);
055        setTimeToLive(2);
056        joinGroup(INET_SOCKET_ADDRESS.getAddress());
057    }
058}