Move include files in debian packge into 'senf' subdirectory
[senf.git] / Socket / Protocols / INet / ConnectedUDPSocketHandle.hh
1 // $Id: ConnectedUDPSocketHandle.hh 357 2007-07-26 22:48:39Z g0dil $
2 //
3 // Copyright (C) 2006
4 // Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
5 // Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
6 //     Stefan Bund <stefan.bund@fokus.fraunhofer.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_ConnectedUDPSocketHandle_
31 #define HH_ConnectedUDPSocketHandle_ 1
32
33 // Custom includes
34 #include "INetProtocol.hh"
35 #include "UDPProtocol.hh"
36 #include "../../../Socket/Protocols/BSDSocketProtocol.hh"
37 #include "../../../Socket/FramingPolicy.hh"
38 #include "../../../Socket/CommunicationPolicy.hh"
39 #include "../../../Socket/ReadWritePolicy.hh"
40 #include "../../../Socket/BufferingPolicy.hh"
41 #include "../../../Socket/ProtocolClientSocketHandle.hh"
42
43 //#include "ConnectedUDPSocketHandle.mpp"
44 ///////////////////////////////hh.p////////////////////////////////////////
45
46 namespace senf {
47
48     /// \addtogroup concrete_protocol_group
49     /// @{
50
51     typedef MakeSocketPolicy<
52         INet4AddressingPolicy,
53         DatagramFramingPolicy,
54         ConnectedCommunicationPolicy,
55         ReadablePolicy,
56         WriteablePolicy,
57         SocketBufferingPolicy
58         >::policy ConnectedUDPv4Socket_Policy;   ///< Socket Policy of the UDPv4 Protocol
59
60     /** \brief IPv4 UDP Socket Protocol, connected
61
62         \par Socket Handle typedefs:
63             \ref ConnectedUDPv4ClientSocketHandle (ProtocolClientSocketHandle)
64
65         \par Policy Interface:
66             ClientSocketHandle::read(), ClientSocketHandle::write(), ClientSocketHandle::bind(),
67             ClientSocketHandle::local(), ClientSocketHandle::connect(), ClientSocketHandle::peer(),
68             ClientSocketHandle::rcvbuf(), ClientSocketHandle::sndbuf()
69
70         \par Address Type:
71             INet4Address
72         
73         ConnectedUDPv4SocketProtocol provides an internet protocol stream socket based on the UDP
74         protocol 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 ConnectedUDPv6SocketProtocol
80      */
81     class ConnectedUDPv4SocketProtocol
82         : public ConcreteSocketProtocol<ConnectedUDPv4Socket_Policy>,
83           public IPv4Protocol,
84           public UDPProtocol,
85           public BSDSocketProtocol,
86           public AddressableBSDSocketProtocol,
87           public senf::pool_alloc_mixin<ConnectedUDPv4SocketProtocol>
88     {
89     public:
90         ///////////////////////////////////////////////////////////////////////////
91         // internal interface
92
93         ///\name Constructors
94         ///@{
95
96         void init_client() const;       ///< Create unconnected client socket
97                                         /**< \note This member is implicitly called from the
98                                              ProtocolClientSocketHandle::ProtocolClientSocketHandle()
99                                              constructor */
100         void init_client(INet4SocketAddress const & address) const;
101                                         ///< Create client socket and connect
102                                         /**< Creates a new client socket and connects to the given
103                                              address.
104
105                                              \param[in] address remote address to connect to */
106                                         /**< \note This member is implicitly called from the
107                                              ProtocolClientSocketHandle::ProtocolClientSocketHandle()
108                                              constructor */
109
110         ///@}
111         ///\name Abstract Interface Implementation
112
113         std::auto_ptr<SocketProtocol> clone() const;
114
115         ///@}
116     };
117
118     typedef ProtocolClientSocketHandle<
119         ConnectedUDPv4SocketProtocol> ConnectedUDPv4ClientSocketHandle;
120
121     typedef MakeSocketPolicy<
122         ConnectedUDPv4Socket_Policy,
123         INet6AddressingPolicy
124         >::policy  ConnectedUDPv6Socket_Policy;
125
126     /** \brief IPv6 UDP Socket Protocol, connected
127
128         \par Socket Handle typedefs:
129             \ref ConnectedUDPv6ClientSocketHandle (ProtocolClientSocketHandle)
130
131         \par Policy Interface:
132             ClientSocketHandle::read(), ClientSocketHandle::write(), ClientSocketHandle::bind(),
133             ClientSocketHandle::local(), ClientSocketHandle::connect(), ClientSocketHandle::peer(),
134             ClientSocketHandle::rcvbuf(), ClientSocketHandle::sndbuf()
135
136         \par Address Type:
137             INet6Address
138
139         ConnectedUDPv6SocketProtocol provides an internet protocol stream socket based on the UDP
140         protocol and IPv6 addressing.
141
142         This class is utilized as the protocol class of the ProtocolClientSocketHandle
143         via the Socket Handle typedefs above.
144
145         \see ConnectedUDPv4SocketProtocol
146      */
147     class ConnectedUDPv6SocketProtocol
148         : public ConcreteSocketProtocol<ConnectedUDPv6Socket_Policy>,
149           public IPv6Protocol,
150           public UDPProtocol,
151           public BSDSocketProtocol,
152           public AddressableBSDSocketProtocol,
153           public senf::pool_alloc_mixin<ConnectedUDPv6SocketProtocol>
154     {
155     public:
156         ///////////////////////////////////////////////////////////////////////////
157         // internal interface
158
159         ///\name Constructors
160         ///@{
161
162         void init_client() const;       ///< Create unconnected client socket
163                                         /**< \note This member is implicitly called from the
164                                              ProtocolClientSocketHandle::ProtocolClientSocketHandle()
165                                              constructor */
166         void init_client(INet6SocketAddress const & address) const;
167                                         ///< Create client socket and connect
168                                         /**< Creates a new client socket and connects to the given
169                                              address.
170
171                                              \param[in] address remote address to connect to */
172                                         /**< \note This member is implicitly called from the
173                                              ProtocolClientSocketHandle::ProtocolClientSocketHandle()
174                                              constructor */
175
176         ///@}
177         ///\name Abstract Interface Implementation
178
179         std::auto_ptr<SocketProtocol> clone() const;
180
181         ///@}
182     };
183
184     typedef ProtocolClientSocketHandle<
185         ConnectedUDPv6SocketProtocol> ConnectedUDPv6ClientSocketHandle;
186
187     /// @}
188
189 }
190
191 ///////////////////////////////hh.e////////////////////////////////////////
192 //#include "ConnectedUDPSocketHandle.cci"
193 //#include "ConnectedUDPSocketHandle.ct"
194 //#include "ConnectedUDPSocketHandle.cti"
195 #endif
196
197 \f
198 // Local Variables:
199 // mode: c++
200 // fill-column: 100
201 // c-file-style: "senf"
202 // indent-tabs-mode: nil
203 // ispell-local-dictionary: "american"
204 // compile-command: "scons -u test"
205 // comment-column: 40
206 // End: