4 // Fraunhofer Institute for Open Communication Systems (FOKUS)
5 // Competence Center NETwork research (NET), St. Augustin, GERMANY
6 // Stefan Bund <g0dil@berlios.de>
8 // This program is free software; you can redistribute it and/or modify
9 // it under the terms of the GNU General Public License as published by
10 // the Free Software Foundation; either version 2 of the License, or
11 // (at your option) any later version.
13 // This program is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 // GNU General Public License for more details.
18 // You should have received a copy of the GNU General Public License
19 // along with this program; if not, write to the
20 // Free Software Foundation, Inc.,
21 // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24 \brief MulticastSocketProtocol public header */
26 #ifndef HH_MulticastSocketProtocol_
27 #define HH_MulticastSocketProtocol_ 1
30 #include "../../../Socket/SocketProtocol.hh"
31 #include "INet4Address.hh"
32 #include "INet6Address.hh"
34 //#include "MulticastSocketProtocol.mpp"
35 ///////////////////////////////hh.p////////////////////////////////////////
39 ///\addtogroup protocol_facets_group
42 /** \brief Generic addressing type independent multicast protocol facet
44 class MulticastSocketProtocol
45 : public virtual SocketProtocol
48 void broadcastEnabled(bool v) const; ///< Enable broadcast send/receive
49 /**< If this option is enabled, broadcast UDP messages will
50 be received on the socket and the socket will be
51 allowed to send out broadcast UDP messages
52 \param[in] v \c true to enable broadcast send/receive,
53 \c false to disable */
55 bool broadcastEnabled() const; ///< Get broadcast send/receive state
56 /**< \returns Current state of the broadcastEnabled()
60 unsigned mcTTL() const; ///< Return current multicast TTL
61 void mcTTL(unsigned value) const; ///< Set multicast TTL
63 bool mcLoop() const; ///< Return current multicast loopback state.
64 void mcLoop(bool value) const; ///< Set multicast loopback state
65 /**< If set to false via \c mcLoop(value) multicast messages will not be looped back to local sockets. Default value is \c true (1). */
67 void mcIface(std::string const & iface = std::string()) const;
68 ///< Set multicast send interface of the socket
69 /**< \param[in] iface name of interface to send multicast
73 /** \brief Multicast protocol facet for INet4 addressable multicast enabled sockets
75 class INet4MulticastSocketProtocol
76 : public MulticastSocketProtocol
79 void mcAddMembership(INet4Address const & mcAddr) const;
80 ///< Join multicast group on default interface
81 /**< This member will add \a mcAddr to the list of multicast
82 groups received. The group is joined on the default
84 \param[in] mcAddr address of group to join */
85 void mcAddMembership(INet4Address const & mcAddr, INet4Address const & localAddr)
87 ///< join multicast group on a specific interface
88 /**< This member will add \a mcAddr to the list of multicast
89 groups received. The group is joined on the interface
90 with the given local address.
91 \deprecated Use \link mcAddMembership(INet4Address const & mcAddr, std::string const & iface) const mcAddMembership( \a mcAddr , \a iface )\endlink
92 for compatibility with the IPv6 API.
93 \param[in] mcAddr address of group to join
94 \param[in] localAddr address of interface to join on */
95 void mcAddMembership(INet4Address const & mcAddr, std::string const & iface) const;
96 ///< join multicast group on a specific interface
97 /**< This member will add \a mcAddr to the list of multicast
98 groups received. The group is joined on the given
100 \param[in] mcAddr address of group to join
101 \param[in] iface interface name */
103 void mcDropMembership(INet4Address const & mcAddr) const;
104 ///< Leave multicast group
105 /**< This member will remove \a mcAddr from the list of
106 multicast groups received. The group is left from the
108 \param[in] mcAddr address of group to leave */
109 void mcDropMembership(INet4Address const & mcAddr, INet4Address const & localAddr)
111 ///< leave multicast group on a specific interface
112 /**< This member will remove \a mcAddr from the list of
113 multicast groups received. The group is left from the
114 interface with the given local address.
115 \deprecated Use \link mcDropMembership(INet4Address const & mcAddr, std::string const & iface) const mcDropMembership( \a mcAddr , \a iface )\endlink
116 for compatibility with the IPv6 API.
117 \param[in] mcAddr address of group to leave
118 \param[in] localAddr address of interface to leave
120 void mcDropMembership(INet4Address const & mcAddr, std::string const & iface)
122 ///< leave multicast group on a specific interface
123 /**< This member will remove \a mcAddr from the list of
124 multicast groups received. The group is left from the
125 interface with the given local address.
126 \param[in] mcAddr address of group to leave
127 \param[in] iface interface name */
130 /** \brief Multicast protocol facet for INet6 addressable multicast enabled sockets
132 This implementation supports INet6 mapped INet4 multicast addresses. This is a linux
133 specific extension and NOT part of the relevant RFCs.
135 class INet6MulticastSocketProtocol
136 : public MulticastSocketProtocol
139 void mcAddMembership(INet6Address const & mcAddr) const;
140 ///< Join multicast group on default interface
141 /**< This member will add \a mcAddr to the list of multicast
142 groups received. The group is joined on the default
144 \param[in] mcAddr address of group to join */
145 void mcAddMembership(INet6Address const & mcAddr, std::string const & iface);
146 ///< join multicast group on a specific interface
147 /**< This member will add \a mcAddr to the list of multicast
148 groups received. The group is joined on the given
150 \param[in] mcAddr address of group to join
151 \param[in] iface interface name */
153 void mcDropMembership(INet6Address const & mcAddr) const;
154 ///< Leave multicast group
155 /**< This member will remove \a mcAddr from the list of
156 multicast groups received. The group is left from the
158 \param[in] mcAddr address of group to leave */
159 void mcDropMembership(INet6Address const & mcAddr, std::string const & iface)
161 ///< leave multicast group on a specific interface
162 /**< This member will remove \a mcAddr from the list of
163 multicast groups received. The group is left from the
164 interface with the given local address.
165 \param[in] mcAddr address of group to leave
166 \param[in] iface interface name */
172 ///////////////////////////////hh.e////////////////////////////////////////
173 //#include "MulticastSocketProtocol.cci"
174 //#include "MulticastSocketProtocol.ct"
175 //#include "MulticastSocketProtocol.cti"
182 // comment-column: 40
183 // c-file-style: "senf"
184 // indent-tabs-mode: nil
185 // ispell-local-dictionary: "american"
186 // compile-command: "scons -u test"