Software /
code /
prosody
Annotate
util-src/net.c @ 12314:898554323338
util.poll: Restructure to make adding additional system APIs easier
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Wed, 23 Feb 2022 20:30:22 +0100 |
parent | 10921:6eb5d2bb11af |
child | 12575:1f6f05a98fcd |
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 } |