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
10 ** DESCRIPTION : Internet address class implementation
12 ** EXPORTED OBJECTS : class InternetAddress
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
22 **************************************************************************/
25 #include "inetaddress.h"
28 /*=========================================================================
29 ** NAME : InternetAddress::InternetAddress
32 ** RETURN VALUE : None
34 ** DESCRIPTION : Create an IP address from a character array.
40 ** LAST MODIFIED : Mar 02, 2012
41 **=========================================================================
44 InternetAddress::InternetAddress(const char *addr)
46 if (strchr(addr, ':') != 0)
55 if (inet_pton(af, addr, inet_addr) != 1)
61 /*=========================================================================
62 ** NAME : InternetAddress::InternetAddress
65 ** RETURN VALUE : None
67 ** DESCRIPTION : Create an IP address from a struct addrinfo
73 ** LAST MODIFIED : Mar 02, 2012
74 **=========================================================================
77 InternetAddress::InternetAddress(const struct addrinfo *addr)
79 if (addr->ai_family == AF_INET6)
81 struct sockaddr_in6 *sa;
84 sa = (sockaddr_in6 *)addr->ai_addr;
85 memcpy(inet_addr, &sa->sin6_addr, sizeof(struct in6_addr));
87 else if (addr->ai_family == AF_INET)
89 struct sockaddr_in *sa;
92 sa = (sockaddr_in *)addr->ai_addr;
93 memcpy(inet_addr, &sa->sin_addr, sizeof(struct in_addr));
101 /*=========================================================================
102 ** NAME : InternetAddress::InternetAddress
105 ** RETURN VALUE : None
107 ** DESCRIPTION : Create an IP address from a struct in6_addr
113 ** LAST MODIFIED : Mar 02, 2012
114 **=========================================================================
117 InternetAddress::InternetAddress(const struct in6_addr addr)
120 memcpy(inet_addr, &addr, sizeof(struct in6_addr));
123 /*=========================================================================
124 ** NAME : InternetAddress::InternetAddress
127 ** RETURN VALUE : None
129 ** DESCRIPTION : Create an IP address from a struct in_addr
135 ** LAST MODIFIED : Mar 02, 2012
136 **=========================================================================
139 InternetAddress::InternetAddress(const struct in_addr addr)
142 memcpy(inet_addr, &addr, sizeof(struct in_addr));
145 /*=========================================================================
146 ** NAME : InternetAddress::String
149 ** RETURN VALUE : None
151 ** DESCRIPTION : Create an IP address froma character array.
157 ** LAST MODIFIED : Mar 02, 2012
158 **=========================================================================
161 InternetAddress::operator String()
163 char _buf[INET6_ADDRSTRLEN];
165 inet_ntop(af, inet_addr, _buf, INET6_ADDRSTRLEN);
170 /*=========================================================================
171 ** NAME : InternetAddress::get_in6_addr
174 ** RETURN VALUE : None
176 ** DESCRIPTION : Convert IP address to a in6_addr structure.
182 ** LAST MODIFIED : Mar 02, 2012
183 **=========================================================================
186 struct in6_addr InternetAddress::get_in6_addr()
188 struct in6_addr addr;
190 memcpy(&addr, inet_addr, sizeof(struct in6_addr));
194 /*=========================================================================
195 ** NAME : InternetAddress::get_in_addr
198 ** RETURN VALUE : None
200 ** DESCRIPTION : Convert IP address to a in_addr structure.
206 ** LAST MODIFIED : Mar 02, 2012
207 **=========================================================================
210 struct in_addr InternetAddress::get_in_addr()
214 memcpy(&addr, inet_addr, sizeof(struct in_addr));