Software / code / prosody
Annotate
util-src/windows.c @ 3345:8520cd88b84c
xmpp{client,server}_listener: Convert some calls to tail calls for efficiency
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Fri, 09 Jul 2010 13:28:41 +0100 |
| parent | 2924:8dc4e2e00129 |
| child | 3748:2237796ba228 |
| rev | line source |
|---|---|
|
2924
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
1 /* Prosody IM |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
2 -- Copyright (C) 2008-2010 Matthew Wild |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
3 -- Copyright (C) 2008-2010 Waqas Hussain |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
4 -- |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
5 -- This project is MIT/X11 licensed. Please see the |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
6 -- COPYING file in the source package for more information. |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
7 -- |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
8 */ |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
9 |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
10 /* |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
11 * windows.c |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
12 * Windows support functions for Lua |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
13 */ |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
14 |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
15 #include <stdio.h> |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
16 #include <windows.h> |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
17 #include <windns.h> |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
18 |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
19 #include "lua.h" |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
20 #include "lauxlib.h" |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
21 |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
22 static int Lget_nameservers(lua_State *L) { |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
23 char stack_buffer[1024]; // stack allocated buffer |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
24 IP4_ARRAY* ips = (IP4_ARRAY*) stack_buffer; |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
25 DWORD len = sizeof(stack_buffer); |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
26 DNS_STATUS status; |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
27 |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
28 status = DnsQueryConfig(DnsConfigDnsServerList, FALSE, NULL, NULL, ips, &len); |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
29 if (status == 0) { |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
30 DWORD i; |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
31 lua_createtable(L, ips->AddrCount, 0); |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
32 for (i = 0; i < ips->AddrCount; i++) { |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
33 DWORD ip = ips->AddrArray[i]; |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
34 char ip_str[16] = ""; |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
35 sprintf_s(ip_str, sizeof(ip_str), "%d.%d.%d.%d", (ip >> 0) & 255, (ip >> 8) & 255, (ip >> 16) & 255, (ip >> 24) & 255); |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
36 lua_pushstring(L, ip_str); |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
37 lua_rawseti(L, -2, i+1); |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
38 } |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
39 return 1; |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
40 } else { |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
41 luaL_error(L, "DnsQueryConfig returned %d", status); |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
42 return 0; // unreachable, but prevents a compiler warning |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
43 } |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
44 } |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
45 |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
46 static const luaL_Reg Reg[] = |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
47 { |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
48 { "get_nameservers", Lget_nameservers }, |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
49 { NULL, NULL } |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
50 }; |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
51 |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
52 LUALIB_API int luaopen_util_windows(lua_State *L) { |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
53 luaL_register(L, "windows", Reg); |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
54 lua_pushliteral(L, "version"); /** version */ |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
55 lua_pushliteral(L, "-3.14"); |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
56 lua_settable(L,-3); |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
57 return 1; |
|
8dc4e2e00129
util.windows: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
58 } |