switch to new MPL based Fraunhofer FOKUS Public License
[senf.git] / senf / Socket / Protocols / INet / INetAddressing.cci
1 // $Id$
2 //
3 // Copyright (C) 2006
4 // Fraunhofer Institute for Open Communication Systems (FOKUS)
5 //
6 // The contents of this file are subject to the Fraunhofer FOKUS Public License
7 // Version 1.0 (the "License"); you may not use this file except in compliance
8 // with the License. You may obtain a copy of the License at 
9 // http://senf.berlios.de/license.html
10 //
11 // The Fraunhofer FOKUS Public License Version 1.0 is based on, 
12 // but modifies the Mozilla Public License Version 1.1.
13 // See the full license text for the amendments.
14 //
15 // Software distributed under the License is distributed on an "AS IS" basis, 
16 // WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 
17 // for the specific language governing rights and limitations under the License.
18 //
19 // The Original Code is Fraunhofer FOKUS code.
20 //
21 // The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V. 
22 // (registered association), Hansastraße 27 c, 80686 Munich, Germany.
23 // All Rights Reserved.
24 //
25 // Contributor(s):
26 //   Stefan Bund <g0dil@berlios.de>
27
28 /** \file
29     \brief INet[46]Address and INet[46]AddressingPolicy inline non-template implementation
30  */
31
32 // Custom includes
33 #include <arpa/inet.h>
34
35 #define prefix_ inline
36 //-/////////////////////////////////////////////////////////////////////////////////////////////////
37
38 //-/////////////////////////////////////////////////////////////////////////////////////////////////
39 // senf::INet4Address
40
41 prefix_ senf::INet4SocketAddress::INet4SocketAddress()
42     : BSDSocketAddress (sizeof(sockaddr_in), AF_INET)
43 {}
44
45 prefix_ senf::INet4SocketAddress::INet4SocketAddress(const INet4SocketAddress& other)
46     : BSDSocketAddress(other)
47 {}
48
49 prefix_ senf::INet4SocketAddress&
50 senf::INet4SocketAddress::operator=(const INet4SocketAddress& other)
51 {
52     BSDSocketAddress::operator=(other);
53     return *this;
54 }
55
56 prefix_ senf::INet4Address senf::INet4SocketAddress::address()
57     const
58 {
59     return INet4Address::from_inaddr(addr_.sin_addr.s_addr);
60 }
61
62 prefix_ unsigned senf::INet4SocketAddress::port()
63     const
64 {
65     return ntohs(addr_.sin_port);
66 }
67
68 prefix_ void senf::INet4SocketAddress::address(INet4Address const & addr)
69 {
70     addr_.sin_addr.s_addr = addr.inaddr();
71 }
72
73 prefix_ void senf::INet4SocketAddress::port(unsigned p)
74 {
75     addr_.sin_port = htons(p);
76 }
77
78 //-/////////////////////////////////////////////////////////////////////////////////////////////////
79 // senf::INet6SocketAddress
80
81 prefix_ senf::INet6SocketAddress::INet6SocketAddress()
82     : BSDSocketAddress (sizeof(sockaddr_in6), AF_INET6)
83 {}
84
85 prefix_ senf::INet6SocketAddress::INet6SocketAddress(INet6Address const & addr, unsigned port)
86     : BSDSocketAddress (sizeof(sockaddr_in6), AF_INET6)
87 {
88     std::copy(addr.begin(), addr.end(), &sockaddr_.sin6_addr.s6_addr[0]);
89     sockaddr_.sin6_port = htons(port);
90 }
91
92 prefix_ senf::INet6SocketAddress::INet6SocketAddress(INet6Address const & addr, unsigned port,
93                                                      std::string const & iface)
94     : BSDSocketAddress (sizeof(sockaddr_in6), AF_INET6)
95 {
96     std::copy(addr.begin(), addr.end(), &sockaddr_.sin6_addr.s6_addr[0]);
97     sockaddr_.sin6_port = htons(port);
98     assignIface(iface);
99 }
100
101 prefix_ senf::INet6SocketAddress::INet6SocketAddress(unsigned port)
102     : BSDSocketAddress (sizeof(sockaddr_in6), AF_INET6)
103 {
104     sockaddr_.sin6_port = htons(port);
105 }
106
107 prefix_ senf::INet6SocketAddress::INet6SocketAddress(const INet6SocketAddress& other)
108     : BSDSocketAddress (other)
109 {}
110
111 prefix_ senf::INet6SocketAddress&
112 senf::INet6SocketAddress::operator=(const INet6SocketAddress& other)
113 {
114     BSDSocketAddress::operator=(other);
115     return *this;
116 }
117
118 prefix_ senf::INet6Address senf::INet6SocketAddress::address()
119     const
120 {
121     return INet6Address::from_data(&sockaddr_.sin6_addr.s6_addr[0]);
122 }
123
124 prefix_ void senf::INet6SocketAddress::address(INet6Address const & addr)
125 {
126     std::copy(addr.begin(), addr.end(), &sockaddr_.sin6_addr.s6_addr[0]);
127 }
128
129 prefix_ unsigned senf::INet6SocketAddress::port()
130     const
131 {
132     return ntohs(sockaddr_.sin6_port);
133 }
134
135 prefix_ void senf::INet6SocketAddress::port(unsigned port)
136 {
137     sockaddr_.sin6_port = htons(port);
138 }
139
140 prefix_ void senf::INet6SocketAddress::iface(std::string const & iface)
141 {
142     assignIface(iface);
143 }
144
145 //-/////////////////////////////////////////////////////////////////////////////////////////////////
146 #undef prefix_
147
148 \f
149 // Local Variables:
150 // mode: c++
151 // fill-column: 100
152 // c-file-style: "senf"
153 // indent-tabs-mode: nil
154 // ispell-local-dictionary: "american"
155 // compile-command: "scons -u test"
156 // comment-column: 40
157 // End: