3 * Copyright (C) 2009 Tomas 'ZeXx86' Jedrzejek (zexx86@zexos.org)
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
23 #include <arpa/inet.h>
24 #include <sys/socket.h>
25 #include <netinet/in.h>
27 #define NET_IPV4_TO_ADDR(a, b, c, d) \
28 (((unsigned)(d) << 24) | (((unsigned)(c) & 0xff) << 16) | (((unsigned)(b) & 0xff) << 8) | ((unsigned)(a) & 0xff))
30 void NET_IPV6_TO_ADDR (struct in6_addr
*ip
, unsigned short a
, unsigned short b
, unsigned short c
, unsigned short d
,
31 unsigned short e
, unsigned short f
, unsigned short g
, unsigned short h
) {
33 unsigned short buf
[8];
44 memcpy (ip
, (void *) buf
, sizeof (struct in6_addr
));
47 int inet_pton (int af
, const char *src
, void *dst
)
53 unsigned *ip
= (unsigned *) src
;
62 unsigned y
= strlen (src
);
67 char *str
= (char *) malloc (sizeof (char) * (y
+ 1));
99 g
= NET_IPV4_TO_ADDR (a
, b
, c
, d
);
101 memcpy (dst
, &g
, sizeof (struct in_addr
));
104 } else if (af
== AF_INET6
) {
116 unsigned y
= strlen (src
);
118 char *ip
= strndup (src
, y
);
140 a
= strtol (ip
, &endptr
, 16);
141 b
= strtol (ip
+k
[0], &endptr
, 16);
142 c
= strtol (ip
+k
[1], &endptr
, 16);
143 d
= strtol (ip
+k
[2], &endptr
, 16);
144 e
= strtol (ip
+k
[3], &endptr
, 16);
145 f
= strtol (ip
+k
[4], &endptr
, 16);
146 g
= strtol (ip
+k
[5], &endptr
, 16);
147 h
= strtol (ip
+k
[6], &endptr
, 16);
149 NET_IPV6_TO_ADDR ((struct in6_addr
*) dst
, a
, b
, c
, d
, e
, f
, g
, h
);