cbb427b8ce1708292974b07e8baaff1a65b38452
[senf.git] / Socket / Protocols / INet / UDPSocketHandle.hh
1 // $Id$
2 //
3 // Copyright (C) 2006
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 UDPv4SocketHandle and UDPv6SocketHandle public header
25
26     \todo Implement possibly non-blocking connect and SO_ERROR in the
27     protocol interface
28  */
29
30 #ifndef HH_UDPSocketHandle_
31 #define HH_UDPSocketHandle_ 1
32
33 // Custom includes
34 #include "INetSocketProtocol.hh"
35 #include "UDPSocketProtocol.hh"
36 #include "MulticastSocketProtocol.hh"
37 #include "../../../Socket/Protocols/BSDSocketProtocol.hh"
38 #include "../../../Socket/Protocols/DatagramSocketProtocol.hh"
39 #include "../../../Socket/FramingPolicy.hh"
40 #include "../../../Socket/CommunicationPolicy.hh"
41 #include "../../../Socket/ReadWritePolicy.hh"
42 #include "../../../Socket/ProtocolClientSocketHandle.hh"
43
44 //#include "UDPSocketHandle.mpp"
45 ///////////////////////////////hh.p////////////////////////////////////////
46
47 namespace senf {
48
49     /// \addtogroup concrete_protocol_group
50     /// @{
51
52     typedef MakeSocketPolicy<
53         INet4AddressingPolicy,
54         DatagramFramingPolicy,
55         UnconnectedCommunicationPolicy,
56         ReadablePolicy,
57         WriteablePolicy
58         >::policy UDPv4Socket_Policy;   ///< Socket Policy of the UDPv4 Protocol
59
60     /** \brief IPv4 UDP Socket Protocol
61
62         \par Socket Handle typedefs:
63             \ref UDPv4ClientSocketHandle (ProtocolClientSocketHandle)
64
65         \par Policy Interface:
66             ClientSocketHandle::read(), ClientSocketHandle::readfrom(),
67             ClientSocketHandle::writeto(), ClientSocketHandle::bind(), ClientSocketHandle::local(),
68             ClientSocketHandle::rcvbuf(), ClientSocketHandle::sndbuf()
69
70         \par Address Type:
71             INet4Address
72
73         UDPv4SocketProtocol provides an internet protocol stream socket based on the UDP protocol
74         and IPv4 addressing.
75
76         This class is utilized as the protocol class of the ProtocolClientSocketHandle
77         via the Socket Handle typedefs above.
78
79         \see UDPv6SocketProtocol
80      */
81     class UDPv4SocketProtocol
82         : public ConcreteSocketProtocol<UDPv4Socket_Policy, UDPv4SocketProtocol>,
83           public UDPSocketProtocol,
84           public MulticastSocketProtocol,
85           public INet4MulticastSocketProtocol,
86           public BSDSocketProtocol,
87           public DatagramSocketProtocol,
88           public AddressableBSDSocketProtocol
89     {
90     public:
91         ///////////////////////////////////////////////////////////////////////////
92         // internal interface
93
94         ///\name Constructors
95         ///@{
96
97         void init_client() const;       ///< Create unconnected client socket
98                                         /**< \note This member is implicitly called from the
99                                              ProtocolClientSocketHandle::ProtocolClientSocketHandle()
100                                              constructor */
101         void init_client(INet4SocketAddress const & address) const;
102                                         ///< Create client socket and bind
103                                         /**< Creates a new client socket and bind to the given
104                                              address.
105                                              \param[in] address local address to bind to */
106                                         /**< \note This member is implicitly called from the
107                                             ProtocolClientSocketHandle::ProtocolClientSocketHandle()
108                                              constructor */
109
110         ///@}
111
112     };
113
114     typedef ProtocolClientSocketHandle<UDPv4SocketProtocol> UDPv4ClientSocketHandle;
115
116     typedef MakeSocketPolicy<
117         UDPv4Socket_Policy,
118         INet6AddressingPolicy
119         >::policy UDPv6Socket_Policy;
120
121     /** \brief IPv6 UDP Socket Protocol
122
123         \par Socket Handle typedefs:
124         \ref UDPv6ClientSocketHandle (ProtocolClientSocketHandle)
125
126         \par Policy Interface: 
127             ClientSocketHandle::read(), ClientSocketHandle::readfrom(),
128             ClientSocketHandle::writeto(), ClientSocketHandle::bind(), ClientSocketHandle::local(),
129             ClientSocketHandle::rcvbuf(), ClientSocketHandle::sndbuf()
130
131         \par Address Type:
132             INet6Address
133
134         UDPv6SocketProtocol provides an internet protocol stream socket based on the UDP protocol
135         and IPv6 addressing.
136
137         This class is utilized as the protocol class of the ProtocolClientSocketHandle
138         via the Socket Handle typedefs above.
139
140         \see UDPv4SocketProtocol
141      */
142     class UDPv6SocketProtocol
143         : public ConcreteSocketProtocol<UDPv6Socket_Policy, UDPv6SocketProtocol>,
144           public UDPSocketProtocol,
145           public MulticastSocketProtocol,
146           public INet6MulticastSocketProtocol,
147           public BSDSocketProtocol,
148           public DatagramSocketProtocol,
149           public AddressableBSDSocketProtocol
150     {
151     public:
152         ///////////////////////////////////////////////////////////////////////////
153         // internal interface
154
155         ///\name Constructors
156         ///@{
157
158         void init_client() const;       ///< Create unconnected client socket
159                                         /**< \note This member is implicitly called from the
160                                              ProtocolClientSocketHandle::ProtocolClientSocketHandle()
161                                              constructor */
162         void init_client(INet6SocketAddress const & address) const;
163                                         ///< Create client socket and connect
164                                         /**< Creates a new client socket and bind to the given
165                                              address.
166                                              \param[in] address local address to bind to */
167                                         /**< \note This member is implicitly called from the
168                                              ProtocolClientSocketHandle::ProtocolClientSocketHandle()
169                                              constructor */
170
171         ///@}
172     };
173
174     typedef ProtocolClientSocketHandle<UDPv6SocketProtocol> UDPv6ClientSocketHandle;
175
176     /// @}
177
178 }
179
180 ///////////////////////////////hh.e////////////////////////////////////////
181 //#include "UDPSocketHandle.cci"
182 //#include "UDPSocketHandle.ct"
183 //#include "UDPSocketHandle.cti"
184 #endif
185
186 \f
187 // Local Variables:
188 // mode: c++
189 // fill-column: 100
190 // c-file-style: "senf"
191 // indent-tabs-mode: nil
192 // ispell-local-dictionary: "american"
193 // compile-command: "scons -u test"
194 // comment-column: 40
195 // End: