458bafc3abeb4169345c6cd585f6b846a2b13317
[senf.git] / Socket / Protocols / INet / UDPProtocol.hh
1 // $Id$
2 //
3 // Copyright (C) 2007
4 // Fraunhofer Institute for Open Communication Systems (FOKUS) 
5 // Competence Center NETwork research (NET), St. Augustin, GERMANY 
6 //     Stefan Bund <g0dil@berlios.de>
7 //
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.
12 //
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.
17 //
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.
22
23 /** \file
24     \brief UDPProtocol public header
25  */
26
27 #ifndef HH_UDPProtocol_
28 #define HH_UDPProtocol_ 1
29
30 // Custom includes
31 #include "../../../Socket/SocketProtocol.hh"
32 #include "INetAddressing.hh"
33
34 //#include "UDPProtocol.mpp"
35 ///////////////////////////////hh.p////////////////////////////////////////
36
37 namespace senf {
38
39     /// \addtogroup protocol_facets_group
40     /// @{
41
42     /** \brief Protocol facat to support UDP operations
43
44         This protocol facet provides all those protocol functions,
45         which are available on any UDP socket.
46         
47         \todo the multicast add/remove/iface semantics are quite unclear ...
48      */
49     class UDPProtocol
50         : public virtual SocketProtocol
51     {
52     public:
53         unsigned mcTTL() const;         ///< Return current multicast TTL
54         void mcTTL(unsigned value) const; ///< Set multicast TTL
55
56         bool mcLoop() const;            ///< Return current multicast loopback state
57         void mcLoop(bool value) const;  ///< Set multicast loopback state
58
59         void mcAddMembership(INet4SocketAddress const & mcAddr) const;
60                                         ///< Join multicast group
61                                         /**< This member will add \a mcAddr to the list of multicast
62                                              groups received. The group is joined on the default
63                                              interface.
64                                              \param[in] mcAddr address of group to join
65                                              \todo fix this as soon as we have a real address class
66                                                  (different from the sockaddress class */
67         void mcAddMembership(INet4SocketAddress const & mcAddr, INet4SocketAddress const & localAddr) const;
68                                         ///< join multicast group on a specific address/interface
69                                         /**< This member will add \a mcAddr to the list of multicast
70                                              groups received. The group is joined on the interface
71                                              with the given local address.
72                                              \param[in] mcAddr address of group to join
73                                              \param[in] localAddr address of interface to join on
74                                              \todo fix this as soon as we have a real address class
75                                                  (different from the sockaddress class */
76
77         void mcDropMembership(INet4SocketAddress const & mcAddr) const;
78                                         ///< Leave multicast group
79                                         /**< This member will remove \a mcAddr from the list of
80                                              multicast groups received. The group is left from the
81                                              default interface.
82                                              \param[in] mcAddr address of group to leave
83                                              \todo fix this as soon as we have a real address class
84                                                  (different from the sockaddress class */
85         void mcDropMembership(INet4SocketAddress const & mcAddr, INet4SocketAddress const & localAddr) const;
86                                         ///< leave multicast group on a specific address/interface
87                                         /**< This member will remove \a mcAddr from the list of
88                                              multicast groups received. The group is left from the
89                                              interface with the given local address.
90                                              \param[in] mcAddr address of group to leave
91                                              \param[in] localAddr address of interface to leave from
92                                              \todo fix this as soon as we have a real address class
93                                                  (different from the sockaddress class */
94
95         void mcIface(std::string const & iface = std::string()) const;
96                                         ///< set default multicast interface of the socket
97                                         /**< \param[in] iface name of interface */
98     
99
100         ///\name Abstract Interface Implementation
101         ///@{
102
103         unsigned available() const;
104         bool eof() const;
105
106         ///@}
107     };
108
109     /// @}
110 }
111
112 ///////////////////////////////hh.e////////////////////////////////////////
113 //#include "UDPProtocol.cci"
114 //#include "UDPProtocol.ct"
115 //#include "UDPProtocol.cti"
116 #endif
117
118 \f
119 // Local Variables:
120 // mode: c++
121 // fill-column: 100
122 // c-file-style: "senf"
123 // indent-tabs-mode: nil
124 // ispell-local-dictionary: "american"
125 // compile-command: "scons -u test"
126 // comment-column: 40
127 // End: