/* -*- C++ -*- * Copyright (C) 2003 Thiago Macieira * * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef TDEMULTICASTSOCKETDEVICE_H #define TDEMULTICASTSOCKETDEVICE_H #include "tdesocketdevice.h" #include "knetworkinterface.h" #include "tdesocketaddress.h" namespace KNetwork { class KMulticastSocketImplPrivate; /** * @class KMulticastSocketImpl tdemulticastsocketdevice.h tdemulticastsocketdevice.h * @brief The low-level backend for multicasting sockets. * * This class is an interface providing methods for handling multicast * operations. * * @author Thiago Macieira */ class KMulticastSocketImpl: public TDESocketDevice { public: /** * Constructor. */ KMulticastSocketImpl(const TDESocketBase* = 0L); /** * Destructor */ virtual ~KMulticastSocketImpl(); /** * Sets our capabilities. */ virtual int capabilities() const; /** * Overrides the socket creation. */ virtual bool create(int family, int type, int protocol); /** * Overrides connection. Multicast sockets may not connect. */ virtual bool connect(const KResolverEntry& address); /** * Retrieves the time-to-live/hop count value on multicast packets being sent. */ virtual int timeToLive() const; /** * Sets the time-to-live/hop count for outgoing multicast packets. * * @param ttl the hop count, from 0 to 255 * @returns true if setting the value was successful. */ virtual bool setTimeToLive(int ttl); /** * Retrieves the flag indicating if sent packets will be echoed back * to sender. */ virtual bool multicastLoop() const; /** * Sets the flag indicating the loopback of packets to the sender. * * @param enable if true, will echo back * @returns true if setting the value was successful. */ virtual bool setMulticastLoop(bool enable); /** * Retrieves the network interface this socket is associated to. */ virtual KNetworkInterface networkInterface(); /** * Sets the network interface on which this socket should work. * * @param iface the interface to associate with * @return true if setting the value was successful. */ virtual bool setNetworkInterface(const KNetworkInterface& iface); /** * Joins a multicast group. The group to be joined is identified by the * @p group parameter. * * @param group the multicast group to join * @returns true on success */ virtual bool joinGroup(const TDESocketAddress& group); /** * @overload * Joins a multicast group. This function also specifies the network interface * to be used. */ virtual bool joinGroup(const TDESocketAddress& group, const KNetworkInterface& iface); /** * Leaves a multicast group. The group being left is given by its address in the * @p group parameter. * * @param group the group to leave * @returns true on successful leaving the group */ virtual bool leaveGroup(const TDESocketAddress& group); /** * @overload * Leaves a multicast group. */ virtual bool leaveGroup(const TDESocketAddress& group, const KNetworkInterface& iface); private: KMulticastSocketImplPrivate *d; }; } // namespace KNetwork #endif