Fix documentation typos
[senf.git] / Socket / INetAddressing.hh
1 // $Id$
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 INet[46]Address and INet[46]AddressingPolicy public header
25  */
26
27 #ifndef HH_INetAddressing_
28 #define HH_INetAddressing_ 1
29
30 // Custom includes
31 #include <string>
32 #include <exception>
33 #include <netinet/in.h>
34 #include "SocketPolicy.hh"
35 #include "ClientSocketHandle.hh"
36 #include "CommunicationPolicy.hh"
37 #include "GenericAddressingPolicy.hh"
38
39 //#include "INetAddressing.mpp"
40 ///////////////////////////////hh.p////////////////////////////////////////
41
42 namespace senf {
43
44     /// \addtogroup addr_group
45     /// @{
46
47     /** \brief IPv4 socket address
48
49         INet4Address wrapps the standard sockaddr_in datatype. It provides simple accessor methods
50         to accss the host and port. It does \e not integrate \c gethostbyname or DNS lookup.
51
52         \todo Implement real INet4Address datatype and rename this one to INet4SockAddress ...
53         \todo Implement more complete interface
54         \todo  gethostbyname support ?
55      */
56     class INet4Address
57     {
58     public:
59         INet4Address();
60         INet4Address(char const * address); ///< Set address and port
61                                         /**< See INet4Address(std::string)
62                                              \throws InvalidINetAddressException
63                                              \fixme Why do I need this version? Shouldn't the
64                                              std::string version be enough ? */
65         INet4Address(std::string address); ///< Set address and port
66                                         /**< This constructor expects a string of the form
67                                              'xxx.xxx.xxx.xxx:pppp'. The constructor will use this
68                                              value to initialize the host and port members. This
69                                              constructor does \e only support numeric ip addresses
70                                              not hostnames 
71                                              \param[in] address Address and port 
72                                              \throws InvalidINetAddressException */
73         INet4Address(std::string host, unsigned port); ///< Set address and port explicitly
74                                         /**< \param[in] host ip address in dotted-quad notation
75                                              \param[in] port port number 
76                                              \throws InvalidINetAddressException */
77         
78
79         bool operator==(INet4Address const & other) const; ///< Check INet4Address for equality
80
81         std::string str() const;        ///< Return "address:port" string
82         std::string host() const;       ///< Return address in doted quad notation
83         unsigned port() const;          ///< Return portnumber
84
85         void clear();                   ///< Clear address/port to 0.0.0.0:0
86
87         /// \name Generic Address Interface
88         /// @{
89
90         struct sockaddr * sockaddr_p();
91         struct sockaddr const * sockaddr_p() const;
92         unsigned sockaddr_len() const;
93
94         /// @}
95
96     private:
97         void assignString(std::string addr);
98         
99         struct ::sockaddr_in addr_;
100     };
101
102     /** \brief Write address and port to os
103
104         \related INet4Address 
105      */
106     std::ostream & operator<<(std::ostream & os, INet4Address const & addr);
107
108     /** \brief IPv6 socket address
109
110         \todo Implement
111      */
112     class INet6Address
113     {
114     };
115
116     /** \brief Signal invalid INet address syntax
117
118         \related INet4Address
119         \relatesalso INet6Address
120      */
121     struct InvalidINetAddressException : public std::exception
122     { char const * what() const throw() { return "invalid inet address"; } };
123
124     /// @}
125
126     /// \addtogroup policy_impl_group
127     /// @{
128
129     /** \brief Addressing policy supporting IPv4 addressing
130         
131         \par Address Type:
132             INet4Address
133         
134         This addressing policy implements addressing using Internet V4
135         addresses.
136
137         The various members are directly importet from
138         GenericAddressingPolicy which see for a detailed
139         documentation.
140      */
141     struct INet4AddressingPolicy 
142         : public AddressingPolicyBase,
143           private GenericAddressingPolicy<INet4Address>
144     {
145         typedef INet4Address Address;
146
147         using GenericAddressingPolicy<INet4Address>::peer;
148         using GenericAddressingPolicy<INet4Address>::local;
149         using GenericAddressingPolicy<INet4Address>::connect;
150         using GenericAddressingPolicy<INet4Address>::bind;
151     };
152
153     /** \brief Addressing policy supporting IPv6 addressing
154         
155         \par Address Type:
156             INet6Address
157         
158         This addressing policy implements addressing using Internet V6
159         addresses.
160
161         The various members are directly importet from
162         GenericAddressingPolicy which see for a detailed
163         documentation.
164
165         \todo implement
166      */
167     struct INet6AddressingPolicy : public AddressingPolicyBase
168     {
169         typedef INet6Address Address;
170     };
171
172     /// @}
173
174 }
175
176 ///////////////////////////////hh.e////////////////////////////////////////
177 #include "INetAddressing.cci"
178 //#include "INetAddressing.ct"
179 //#include "INetAddressing.cti"
180 //#include "INetAddressing.mpp"
181 #endif
182
183 \f
184 // Local Variables:
185 // mode: c++
186 // c-file-style: "senf"
187 // fill-column: 100
188 // End: