Annotate

util-src/net.c @ 9091:519dea077d20

util.dataforms: Allow passing dynamically generated options as values (fixes traceback) This is awkward but there’s currently no better way to do this, short of dynamically generating the entire form each time
author Kim Alvefur <zash@zash.se>
date Fri, 03 Aug 2018 22:05:40 +0200
parent 8426:8b612ec00e4a
child 9150:c1d5f52274cf
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
7931
b619b85e01aa util.pposix, configure: Move _GNU_SOURCE macro into source files
Kim Alvefur <zash@zash.se>
parents: 7889
diff changeset
12 #define _GNU_SOURCE
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
13 #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
14 #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
15 #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
16
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17 #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
18 #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
19 #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
20 #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
21 #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
22 #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
23 #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
24 #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
25 #endif
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
26
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
27 #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
28 #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
29
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
30 #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
31 #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
32 #endif
a552f4170aed util-src/*.c: Add macro for compiling with Lua 5.2
Kim Alvefur <zash@zash.se>
parents: 6411
diff changeset
33
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
34 /* 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
35
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7818
diff changeset
36 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
37 "both",
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
38 "ipv4",
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
39 "ipv6",
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
40 NULL
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
41 };
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
42
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7818
diff changeset
43 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
44 #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
45 /* Link-local IPv4 addresses; see RFC 3927 and RFC 5735 */
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
46 const long ip4_linklocal = htonl(0xa9fe0000); /* 169.254.0.0 */
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
47 const long 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
48 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
49 #endif
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
50 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
51 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
52 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
53 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
54 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
55
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
56 #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
57
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
58 if(getifaddrs(&addr) < 0) {
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
59 lua_pushnil(L);
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
60 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
61 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
62 return 2;
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
63 }
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
64
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
65 #endif
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_newtable(L);
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
67
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
68 #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
69
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 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
71 int family;
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
72 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
73 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
74
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 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
76 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
77 }
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
78
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
79 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
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(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
82 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
83
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
84 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
85 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
86 }
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
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
88 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
89 } 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
90 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
91
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 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
93 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
94 }
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
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
96 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
97 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
98 }
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
99
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
100 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
101 }
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
102
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
103 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
104 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
105 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
106 }
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
107
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
108 /* 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
109 }
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
110
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
111 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
112 #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
113
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
114 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
115 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
116 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
117 }
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
118
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 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
120 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
121 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
122 }
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
123
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
124 #endif
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
125 return 1;
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
126 }
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
127
8426
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
128 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
129 char buf[16];
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
130 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
131 int errno_ = 0;
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
132 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
133
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
134 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
135 case 1:
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
136 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
137 return 1;
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
138
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
139 case -1:
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
140 errno_ = errno;
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
141 lua_pushnil(L);
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
142 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
143 lua_pushinteger(L, errno_);
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
144 return 3;
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
145
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
146 default:
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
147 case 0:
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
148 lua_pushnil(L);
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
149 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
150 lua_pushinteger(L, EINVAL);
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
151 return 3;
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
152 }
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
153
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
154 }
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
155
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
156 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
157 char buf[INET6_ADDRSTRLEN];
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
158 int family;
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
159 int errno_;
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
160 size_t l;
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
161 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
162
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
163 if(l == 16) {
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
164 family = AF_INET6;
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
165 }
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
166 else if(l == 4) {
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
167 family = AF_INET;
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 else {
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
170 lua_pushnil(L);
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
171 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
172 lua_pushinteger(L, EAFNOSUPPORT);
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
173 return 3;
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
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
176 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
177 {
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
178 errno_ = errno;
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
179 lua_pushnil(L);
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
180 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
181 lua_pushinteger(L, errno_);
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
182 return 3;
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
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
185 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
186 return 1;
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
187 }
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
188
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7818
diff changeset
189 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
190 #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
191 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
192 #endif
5699
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
193 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
194 { "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
195 { "pton", lc_pton },
8b612ec00e4a util.net: Add bindings to inet_ntop and inet_pton
Kim Alvefur <zash@zash.se>
parents: 7969
diff changeset
196 { "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
197 { NULL, NULL }
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
198 };
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
199
7969
1c6a07606309 util-src: Specify size of various tables to be allocated
Kim Alvefur <zash@zash.se>
parents: 7931
diff changeset
200 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
201 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
202 return 1;
e9f5384f5ff1 util.net: Add util.net, containing local_addresses() (removed from LuaSocket 3.0)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
203 }