Comparison

util/prosodyctl/check.lua @ 13580:836efad8483c 0.12 0.12.5

util.prosodyctl.check: Improve error handling of UDP socket setup (for #1803) Not necessarily a fix, but may give us more information about failure cases.
author Matthew Wild <mwild1@gmail.com>
date Fri, 20 Dec 2024 14:21:02 +0000
parent 13465:54a936345aaa
child 13581:c71feb7686c0
comparison
equal deleted inserted replaced
13559:eedae7d47784 13580:836efad8483c
68 68
69 local function check_turn_service(turn_service, ping_service) 69 local function check_turn_service(turn_service, ping_service)
70 local ip = require "util.ip"; 70 local ip = require "util.ip";
71 local stun = require "net.stun"; 71 local stun = require "net.stun";
72 72
73 local result = { warnings = {} };
74
73 -- Create UDP socket for communication with the server 75 -- Create UDP socket for communication with the server
74 local sock = assert(require "socket".udp()); 76 local sock = assert(require "socket".udp());
75 sock:setsockname("*", 0); 77 do
76 sock:setpeername(turn_service.host, turn_service.port); 78 local ok, err = sock:setsockname("*", 0);
79 if not ok then
80 result.error = "Unable to perform TURN test: setsockname: "..tostring(err);
81 return result;
82 end
83 ok, err = sock:setpeername(turn_service.host, turn_service.port);
84 if not ok then
85 result.error = "Unable to perform TURN test: setpeername: "..tostring(err);
86 return result;
87 end
88 end
77 sock:settimeout(10); 89 sock:settimeout(10);
78 90
79 -- Helper function to receive a packet 91 -- Helper function to receive a packet
80 local function receive_packet() 92 local function receive_packet()
81 local raw_packet, err = sock:receive(); 93 local raw_packet, err = sock:receive();
82 if not raw_packet then 94 if not raw_packet then
83 return nil, err; 95 return nil, err;
84 end 96 end
85 return stun.new_packet():deserialize(raw_packet); 97 return stun.new_packet():deserialize(raw_packet);
86 end 98 end
87
88 local result = { warnings = {} };
89 99
90 -- Send a "binding" query, i.e. a request for our external IP/port 100 -- Send a "binding" query, i.e. a request for our external IP/port
91 local bind_query = stun.new_packet("binding", "request"); 101 local bind_query = stun.new_packet("binding", "request");
92 bind_query:add_attribute("software", "prosodyctl check turn"); 102 bind_query:add_attribute("software", "prosodyctl check turn");
93 sock:send(bind_query:serialize()); 103 sock:send(bind_query:serialize());