Software / code / prosody
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()); |