Annotate

util-src/net.c @ 10974:3b9d533da8fe

util.dependencies: Tone down lua-unbound dependency for now At least until packages are available Wording from MattJ
author Kim Alvefur <zash@zash.se>
date Sat, 27 Jun 2020 14:25:57 +0200
parent 10921:6eb5d2bb11af
child 12575:1f6f05a98fcd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1 /* Prosody IM
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2 --
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3 -- This project is MIT/X11 licensed. Please see the
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4 -- COPYING file in the source package for more information.
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5 --
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6 -- Copyright (C) 2012 Paul Aurich
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7 -- Copyright (C) 2013 Matthew Wild
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8 -- Copyright (C) 2013 Florian Zeitz
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9 --
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10 */
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11
9150
c1d5f52274cf net, pposix, signal: Check for redefined defines, fix warnings.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8426
diff changeset
12 #ifndef _GNU_SOURCE
7931
b619b85e01aa util.pposix, configure: Move _GNU_SOURCE macro into source files
Kim Alvefur <zash@zash.se>
parents: 7889
diff changeset
13 #define _GNU_SOURCE
9150
c1d5f52274cf net, pposix, signal: Check for redefined defines, fix warnings.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8426
diff changeset
14 #endif
c1d5f52274cf net, pposix, signal: Check for redefined defines, fix warnings.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8426
diff changeset
15
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
16 #include <stddef.h>
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17 #include <string.h>
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18 #include <errno.h>
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
19
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20 #ifndef _WIN32
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
21 #include <sys/ioctl.h>
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
22 #include <sys/types.h>
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
23 #include <sys/socket.h>
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
24 #include <net/if.h>
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
25 #include <ifaddrs.h>
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
26 #include <arpa/inet.h>
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
27 #include <netinet/in.h>
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
28 #endif
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
29
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
30 #include <lua.h>
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
31 #include <lauxlib.h>
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
32
6789
6b180e77c97a util-src/*.c: Invert Lua 5.2 compat to be 5.2+ by default and a macro to support 5.1
Kim Alvefur <zash@zash.se>
parents: 6615
diff changeset
33 #if (LUA_VERSION_NUM == 501)
6b180e77c97a util-src/*.c: Invert Lua 5.2 compat to be 5.2+ by default and a macro to support 5.1
Kim Alvefur <zash@zash.se>
parents: 6615
diff changeset
34 #define luaL_setfuncs(L, R, N) luaL_register(L, NULL, R)
6413
a552f4170aed util-src/*.c: Add macro for compiling with Lua 5.2
Kim Alvefur <zash@zash.se>
parents: 6411
diff changeset
35 #endif
10921
6eb5d2bb11af util-src: Use the luaL_pushfail API added in Lua 5.4 to highlight all failure conditions
Kim Alvefur <zash@zash.se>
parents: 10637
diff changeset
36 #if (LUA_VERSION_NUM < 504)
6eb5d2bb11af util-src: Use the luaL_pushfail API added in Lua 5.4 to highlight all failure conditions
Kim Alvefur <zash@zash.se>
parents: 10637
diff changeset
37 #define luaL_pushfail lua_pushnil
6eb5d2bb11af util-src: Use the luaL_pushfail API added in Lua 5.4 to highlight all failure conditions
Kim Alvefur <zash@zash.se>
parents: 10637
diff changeset
38 #endif
6413
a552f4170aed util-src/*.c: Add macro for compiling with Lua 5.2
Kim Alvefur <zash@zash.se>
parents: 6411
diff changeset
39
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
40 /* Enumerate all locally configured IP addresses */
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
41
10480
94cacf9fd0ae util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9150
diff changeset
42 static const char *const type_strings[] = {
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
43 "both",
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
44 "ipv4",
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
45 "ipv6",
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
46 NULL
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
47 };
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
48
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7818
diff changeset
49 static int lc_local_addresses(lua_State *L) {
5752
729c78581308 util.net: Fix compilation on Windows (outputs an empty list of addresses for now) (tested only in my head)
Matthew Wild <mwild1@gmail.com>
parents: 5750
diff changeset
50 #ifndef _WIN32
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
51 /* Link-local IPv4 addresses; see RFC 3927 and RFC 5735 */
10637
aa304109fa1b util.net: Fix signedness warning on ARM
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 10480
diff changeset
52 const uint32_t ip4_linklocal = htonl(0xa9fe0000); /* 169.254.0.0 */
aa304109fa1b util.net: Fix signedness warning on ARM
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 10480
diff changeset
53 const uint32_t ip4_mask = htonl(0xffff0000);
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7818
diff changeset
54 struct ifaddrs *addr = NULL, *a;
5810
99ad8d42d0c9 util.net: Fix s2sout on Windows (return 0.0.0.0 and :: instead of an empty list)
Kim Alvefur <zash@zash.se>
parents: 5752
diff changeset
55 #endif
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
56 int n = 1;
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
57 int type = luaL_checkoption(L, 1, "both", type_strings);
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
58 const char link_local = lua_toboolean(L, 2); /* defaults to 0 (false) */
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
59 const char ipv4 = (type == 0 || type == 1);
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
60 const char ipv6 = (type == 0 || type == 2);
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
61
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
62 #ifndef _WIN32
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
63
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
64 if(getifaddrs(&addr) < 0) {
10921
6eb5d2bb11af util-src: Use the luaL_pushfail API added in Lua 5.4 to highlight all failure conditions
Kim Alvefur <zash@zash.se>
parents: 10637
diff changeset
65 luaL_pushfail(L);
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
66 lua_pushfstring(L, "getifaddrs failed (%d): %s", errno,
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
67 strerror(errno));
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
68 return 2;
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
69 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
70
5752
729c78581308 util.net: Fix compilation on Windows (outputs an empty list of addresses for now) (tested only in my head)
Matthew Wild <mwild1@gmail.com>
parents: 5750
diff changeset
71 #endif
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
72 lua_newtable(L);
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
73
5752
729c78581308 util.net: Fix compilation on Windows (outputs an empty list of addresses for now) (tested only in my head)
Matthew Wild <mwild1@gmail.com>
parents: 5750
diff changeset
74 #ifndef _WIN32
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
75
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
76 for(a = addr; a; a = a->ifa_next) {
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
77 int family;
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
78 char ipaddr[INET6_ADDRSTRLEN];
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7818
diff changeset
79 const char *tmp = NULL;
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
80
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
81 if(a->ifa_addr == NULL || a->ifa_flags & IFF_LOOPBACK) {
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
82 continue;
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
83 }
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
84
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
85 family = a->ifa_addr->sa_family;
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
86
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
87 if(ipv4 && family == AF_INET) {
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7818
diff changeset
88 struct sockaddr_in *sa = (struct sockaddr_in *)a->ifa_addr;
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
89
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
90 if(!link_local && ((sa->sin_addr.s_addr & ip4_mask) == ip4_linklocal)) {
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
91 continue;
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
92 }
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
93
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
94 tmp = inet_ntop(family, &sa->sin_addr, ipaddr, sizeof(ipaddr));
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
95 } else if(ipv6 && family == AF_INET6) {
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7818
diff changeset
96 struct sockaddr_in6 *sa = (struct sockaddr_in6 *)a->ifa_addr;
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
97
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
98 if(!link_local && IN6_IS_ADDR_LINKLOCAL(&sa->sin6_addr)) {
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
99 continue;
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
100 }
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
101
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
102 if(IN6_IS_ADDR_V4MAPPED(&sa->sin6_addr) || IN6_IS_ADDR_V4COMPAT(&sa->sin6_addr)) {
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
103 continue;
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
104 }
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
105
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
106 tmp = inet_ntop(family, &sa->sin6_addr, ipaddr, sizeof(ipaddr));
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
107 }
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
108
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
109 if(tmp != NULL) {
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
110 lua_pushstring(L, tmp);
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
111 lua_rawseti(L, -2, n++);
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
112 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
113
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
114 /* TODO: Error reporting? */
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
115 }
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
116
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
117 freeifaddrs(addr);
5810
99ad8d42d0c9 util.net: Fix s2sout on Windows (return 0.0.0.0 and :: instead of an empty list)
Kim Alvefur <zash@zash.se>
parents: 5752
diff changeset
118 #else
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
119
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
120 if(ipv4) {
5810
99ad8d42d0c9 util.net: Fix s2sout on Windows (return 0.0.0.0 and :: instead of an empty list)
Kim Alvefur <zash@zash.se>
parents: 5752
diff changeset
121 lua_pushstring(L, "0.0.0.0");
99ad8d42d0c9 util.net: Fix s2sout on Windows (return 0.0.0.0 and :: instead of an empty list)
Kim Alvefur <zash@zash.se>
parents: 5752
diff changeset
122 lua_rawseti(L, -2, n++);
99ad8d42d0c9 util.net: Fix s2sout on Windows (return 0.0.0.0 and :: instead of an empty list)
Kim Alvefur <zash@zash.se>
parents: 5752
diff changeset
123 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
124
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
125 if(ipv6) {
5810
99ad8d42d0c9 util.net: Fix s2sout on Windows (return 0.0.0.0 and :: instead of an empty list)
Kim Alvefur <zash@zash.se>
parents: 5752
diff changeset
126 lua_pushstring(L, "::");
99ad8d42d0c9 util.net: Fix s2sout on Windows (return 0.0.0.0 and :: instead of an empty list)
Kim Alvefur <zash@zash.se>
parents: 5752
diff changeset
127 lua_rawseti(L, -2, n++);
99ad8d42d0c9 util.net: Fix s2sout on Windows (return 0.0.0.0 and :: instead of an empty list)
Kim Alvefur <zash@zash.se>
parents: 5752
diff changeset
128 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6413
diff changeset
129
5752
729c78581308 util.net: Fix compilation on Windows (outputs an empty list of addresses for now) (tested only in my head)
Matthew Wild <mwild1@gmail.com>
parents: 5750
diff changeset
130 #endif
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
131 return 1;
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
132 }
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
133
8426
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
134 static int lc_pton(lua_State *L) {
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
135 char buf[16];
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
136 const char *ipaddr = luaL_checkstring(L, 1);
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
137 int errno_ = 0;
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
138 int family = strchr(ipaddr, ':') ? AF_INET6 : AF_INET;
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
139
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
140 switch(inet_pton(family, ipaddr, &buf)) {
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
141 case 1:
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
142 lua_pushlstring(L, buf, family == AF_INET6 ? 16 : 4);
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
143 return 1;
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
144
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
145 case -1:
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
146 errno_ = errno;
10921
6eb5d2bb11af util-src: Use the luaL_pushfail API added in Lua 5.4 to highlight all failure conditions
Kim Alvefur <zash@zash.se>
parents: 10637
diff changeset
147 luaL_pushfail(L);
8426
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
148 lua_pushstring(L, strerror(errno_));
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
149 lua_pushinteger(L, errno_);
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
150 return 3;
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
151
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
152 default:
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
153 case 0:
10921
6eb5d2bb11af util-src: Use the luaL_pushfail API added in Lua 5.4 to highlight all failure conditions
Kim Alvefur <zash@zash.se>
parents: 10637
diff changeset
154 luaL_pushfail(L);
8426
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
155 lua_pushstring(L, strerror(EINVAL));
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
156 lua_pushinteger(L, EINVAL);
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
157 return 3;
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
158 }
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
159
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
160 }
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
161
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
162 static int lc_ntop(lua_State *L) {
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
163 char buf[INET6_ADDRSTRLEN];
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
164 int family;
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
165 int errno_;
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
166 size_t l;
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
167 const char *ipaddr = luaL_checklstring(L, 1, &l);
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
168
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
169 if(l == 16) {
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
170 family = AF_INET6;
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
171 }
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
172 else if(l == 4) {
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
173 family = AF_INET;
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
174 }
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
175 else {
10921
6eb5d2bb11af util-src: Use the luaL_pushfail API added in Lua 5.4 to highlight all failure conditions
Kim Alvefur <zash@zash.se>
parents: 10637
diff changeset
176 luaL_pushfail(L);
8426
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
177 lua_pushstring(L, strerror(EAFNOSUPPORT));
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
178 lua_pushinteger(L, EAFNOSUPPORT);
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
179 return 3;
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
180 }
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
181
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
182 if(!inet_ntop(family, ipaddr, buf, INET6_ADDRSTRLEN))
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
183 {
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
184 errno_ = errno;
10921
6eb5d2bb11af util-src: Use the luaL_pushfail API added in Lua 5.4 to highlight all failure conditions
Kim Alvefur <zash@zash.se>
parents: 10637
diff changeset
185 luaL_pushfail(L);
8426
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
186 lua_pushstring(L, strerror(errno_));
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
187 lua_pushinteger(L, errno_);
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
188 return 3;
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
189 }
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
190
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
191 lua_pushstring(L, (const char *)(&buf));
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
192 return 1;
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
193 }
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
194
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7818
diff changeset
195 int luaopen_util_net(lua_State *L) {
7818
54669df178c2 util-src: Make C modules assert that the Lua runtime matches what it was compiled for
Kim Alvefur <zash@zash.se>
parents: 6789
diff changeset
196 #if (LUA_VERSION_NUM > 501)
54669df178c2 util-src: Make C modules assert that the Lua runtime matches what it was compiled for
Kim Alvefur <zash@zash.se>
parents: 6789
diff changeset
197 luaL_checkversion(L);
54669df178c2 util-src: Make C modules assert that the Lua runtime matches what it was compiled for
Kim Alvefur <zash@zash.se>
parents: 6789
diff changeset
198 #endif
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
199 luaL_Reg exports[] = {
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
200 { "local_addresses", lc_local_addresses },
8426
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
201 { "pton", lc_pton },
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
202 { "ntop", lc_ntop },
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
203 { NULL, NULL }
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
204 };
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
205
7969
1c6a07606309 util-src: Specify size of various tables to be allocated
Kim Alvefur <zash@zash.se>
parents: 7931
diff changeset
206 lua_createtable(L, 0, 1);
6789
6b180e77c97a util-src/*.c: Invert Lua 5.2 compat to be 5.2+ by default and a macro to support 5.1
Kim Alvefur <zash@zash.se>
parents: 6615
diff changeset
207 luaL_setfuncs(L, exports, 0);
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
208 return 1;
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
209 }