First commit of release 0.1
[sockstream.git] / src / inetaddress.cpp
1 /**************************************************************************
2 **  (c) Copyright 2012, Andromeda Technology & Automation
3 ***************************************************************************
4 ** MODULE INFORMATION *
5 ***********************
6 **      FILE NAME      : inetaddress.cpp
7 **      SYSTEM NAME    : Network and socket classes
8 **      VERSION NUMBER : 0.1
9 **
10 **  DESCRIPTION      :  Internet address class implementation
11 **
12 **  EXPORTED OBJECTS : class InternetAddress
13 **  LOCAL    OBJECTS : 
14 **  MODULES  USED    :
15 ***************************************************************************
16 **  ADMINISTRATIVE INFORMATION *
17 ********************************
18 **      ORIGINAL AUTHOR : Arjen Baart - arjen@andromeda.nl
19 **      CREATION DATE   : Mar 02, 2012
20 **      LAST UPDATE     : Mar 02, 2012
21 **      MODIFICATIONS   : 
22 **************************************************************************/
23
24
25 #include "inetaddress.h"
26
27
28 /*=========================================================================
29 **  NAME           : InternetAddress::InternetAddress
30 **  SYNOPSIS       :
31 **  PARAMETERS     :
32 **  RETURN VALUE   : None
33 **
34 **  DESCRIPTION    : Create an IP address from a character array.
35 **
36 **  VARS USED      :
37 **  VARS CHANGED   :
38 **  FUNCTIONS USED :
39 **  SEE ALSO       :
40 **  LAST MODIFIED  : Mar 02, 2012
41 **=========================================================================
42 */
43
44 InternetAddress::InternetAddress(const char *addr)
45 {
46    if (strchr(addr, ':') != 0)
47    {
48       af = AF_INET6;
49    }
50    else
51    {
52       af = AF_INET;
53    }
54
55    if (inet_pton(af, addr, inet_addr) != 1)
56    {
57       af = AF_UNSPEC;
58    }
59 }
60
61 /*=========================================================================
62 **  NAME           : InternetAddress::InternetAddress
63 **  SYNOPSIS       :
64 **  PARAMETERS     :
65 **  RETURN VALUE   : None
66 **
67 **  DESCRIPTION    : Create an IP address from a struct addrinfo
68 **
69 **  VARS USED      :
70 **  VARS CHANGED   :
71 **  FUNCTIONS USED :
72 **  SEE ALSO       :
73 **  LAST MODIFIED  : Mar 02, 2012
74 **=========================================================================
75 */
76
77 InternetAddress::InternetAddress(const struct addrinfo *addr)
78 {
79    if (addr->ai_family == AF_INET6)
80    {
81       struct sockaddr_in6 *sa;
82
83       af = AF_INET6;
84       sa = (sockaddr_in6 *)addr->ai_addr;
85       memcpy(inet_addr, &sa->sin6_addr, sizeof(struct in6_addr));
86    }
87    else if (addr->ai_family == AF_INET)
88    {
89       struct sockaddr_in *sa;
90
91       af = AF_INET;
92       sa = (sockaddr_in *)addr->ai_addr;
93       memcpy(inet_addr, &sa->sin_addr, sizeof(struct in_addr));
94    }
95    else
96    {
97       af = AF_UNSPEC;
98    }
99 }
100
101 /*=========================================================================
102 **  NAME           : InternetAddress::InternetAddress
103 **  SYNOPSIS       :
104 **  PARAMETERS     :
105 **  RETURN VALUE   : None
106 **
107 **  DESCRIPTION    : Create an IP address from a struct in6_addr
108 **
109 **  VARS USED      :
110 **  VARS CHANGED   :
111 **  FUNCTIONS USED :
112 **  SEE ALSO       :
113 **  LAST MODIFIED  : Mar 02, 2012
114 **=========================================================================
115 */
116
117 InternetAddress::InternetAddress(const struct in6_addr addr)
118 {
119    af = AF_INET6;
120    memcpy(inet_addr, &addr, sizeof(struct in6_addr));
121 }
122
123 /*=========================================================================
124 **  NAME           : InternetAddress::InternetAddress
125 **  SYNOPSIS       :
126 **  PARAMETERS     :
127 **  RETURN VALUE   : None
128 **
129 **  DESCRIPTION    : Create an IP address from a struct in_addr
130 **
131 **  VARS USED      :
132 **  VARS CHANGED   :
133 **  FUNCTIONS USED :
134 **  SEE ALSO       :
135 **  LAST MODIFIED  : Mar 02, 2012
136 **=========================================================================
137 */
138
139 InternetAddress::InternetAddress(const struct in_addr addr)
140 {
141    af = AF_INET;
142    memcpy(inet_addr, &addr, sizeof(struct in_addr));
143 }
144
145 /*=========================================================================
146 **  NAME           : InternetAddress::String
147 **  SYNOPSIS       :
148 **  PARAMETERS     :
149 **  RETURN VALUE   : None
150 **
151 **  DESCRIPTION    : Create an IP address froma character array.
152 **
153 **  VARS USED      :
154 **  VARS CHANGED   :
155 **  FUNCTIONS USED :
156 **  SEE ALSO       :
157 **  LAST MODIFIED  : Mar 02, 2012
158 **=========================================================================
159 */
160
161 InternetAddress::operator String()
162 {
163    char _buf[INET6_ADDRSTRLEN];
164
165    inet_ntop(af, inet_addr, _buf, INET6_ADDRSTRLEN);
166
167    return String(_buf);
168 }
169
170 /*=========================================================================
171 **  NAME           : InternetAddress::get_in6_addr
172 **  SYNOPSIS       :
173 **  PARAMETERS     :
174 **  RETURN VALUE   : None
175 **
176 **  DESCRIPTION    : Convert IP address to a in6_addr structure.
177 **
178 **  VARS USED      :
179 **  VARS CHANGED   :
180 **  FUNCTIONS USED :
181 **  SEE ALSO       :
182 **  LAST MODIFIED  : Mar 02, 2012
183 **=========================================================================
184 */
185
186 struct in6_addr InternetAddress::get_in6_addr()
187 {
188    struct in6_addr addr;
189
190    memcpy(&addr, inet_addr, sizeof(struct in6_addr));
191    return addr;
192 }
193
194 /*=========================================================================
195 **  NAME           : InternetAddress::get_in_addr
196 **  SYNOPSIS       :
197 **  PARAMETERS     :
198 **  RETURN VALUE   : None
199 **
200 **  DESCRIPTION    : Convert IP address to a in_addr structure.
201 **
202 **  VARS USED      :
203 **  VARS CHANGED   :
204 **  FUNCTIONS USED :
205 **  SEE ALSO       :
206 **  LAST MODIFIED  : Mar 02, 2012
207 **=========================================================================
208 */
209
210 struct in_addr  InternetAddress::get_in_addr()
211 {
212    struct in_addr addr;
213
214    memcpy(&addr, inet_addr, sizeof(struct in_addr));
215    return addr;
216 }
217