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); ///< 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(); ///< 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 virtual SocketProtocol
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 class INet6MulticastSocketProtocol
133 : public virtual SocketProtocol
136 void mcAddMembership(INet6Address const & mcAddr) const;
137 ///< Join multicast group on default interface
138 /**< This member will add \a mcAddr to the list of multicast
139 groups received. The group is joined on the default
141 \param[in] mcAddr address of group to join */
142 void mcAddMembership(INet6Address const & mcAddr, INet6Address const & localAddr)
144 ///< join multicast group on a specific interface
145 /**< This member will add \a mcAddr to the list of multicast
146 groups received. The group is joined on the interface
147 with the given local address.
148 \param[in] mcAddr address of group to join
149 \param[in] localAddr address of interface to join on */
150 void mcAddMembership(INet6Address const & mcAddr, std::string const & iface);
151 ///< join multicast group on a specific interface
152 /**< This member will add \a mcAddr to the list of multicast
153 groups received. The group is joined on the given
155 \param[in] mcAddr address of group to join
156 \param[in] iface interface name */
158 void mcDropMembership(INet6Address const & mcAddr) const;
159 ///< Leave multicast group
160 /**< This member will remove \a mcAddr from the list of
161 multicast groups received. The group is left from the
163 \param[in] mcAddr address of group to leave */
164 void mcDropMembership(INet6Address const & mcAddr, INet6Address const & localAddr)
166 ///< leave multicast group on a specific interface
167 /**< This member will remove \a mcAddr from the list of
168 multicast groups received. The group is left from the
169 interface with the given local address.
170 \param[in] mcAddr address of group to leave
171 \param[in] localAddr address of interface to leave
173 void mcDropMembership(INet6Address const & mcAddr, std::string const & iface)
175 ///< leave multicast group on a specific interface
176 /**< This member will remove \a mcAddr from the list of
177 multicast groups received. The group is left from the
178 interface with the given local address.
179 \param[in] mcAddr address of group to leave
180 \param[in] localAddr address of interface to leave
187 ///////////////////////////////hh.e////////////////////////////////////////
188 //#include "MulticastSocketProtocol.cci"
189 //#include "MulticastSocketProtocol.ct"
190 //#include "MulticastSocketProtocol.cti"
197 // comment-column: 40
198 // c-file-style: "senf"
199 // indent-tabs-mode: nil
200 // ispell-local-dictionary: "american"
201 // compile-command: "scons -u test"