Software /
code /
prosody
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 |
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 } |