]> git.lizzy.rs Git - hydra-dragonfire.git/blob - example/dump-traffic.lua
Event system
[hydra-dragonfire.git] / example / dump-traffic.lua
1 #!/usr/bin/env hydra-dragonfire
2 local escapes = require("escapes")
3 local base64 = require("base64")
4 local client = require("client")()
5
6 client:enable("pkts")
7 client.pkts:wildcard(true)
8
9 client:connect()
10
11 local function dump(val, indent)
12         local t = type(val)
13         local mt = getmetatable(val)
14
15         if t ~= "table" or mt and mt.__tostring then
16                 if t == "string" then
17                         val = val:gsub("\n", "\\n")
18                 end
19                 print(val)
20         else
21                 print()
22
23                 local idt = (indent or "") .. "  "
24                 for k, v in pairs(val) do
25                         io.write(idt .. k .. " ")
26                         dump(v, idt)
27                 end
28         end
29 end
30
31 while true do
32         local evt = client:poll()
33
34         if not evt or evt.type == "disconnect" or evt.type == "interrupt" then
35                 break
36         elseif evt.type == "error" then
37                 print(evt.error)
38         elseif evt.type == "pkt" then
39                 local type, data = evt.pkt_type, evt.pkt_data
40
41                 if type == "srp_bytes_salt_b" then
42                         data.b = base64.encode(data.b)
43                         data.salt = base64.encode(data.salt)
44                 end
45
46                 if type == "chat_msg" then
47                         data.text = escapes.strip_all(data.text)
48                 end
49
50                 if type == "blk_data" then
51                         data.blk.param0 = {}
52                         data.blk.param1 = {}
53                         data.blk.param2 = {}
54                 end
55
56                 io.write(type)
57                 dump(data)
58         end
59 end
60
61 client:close()