Software /
code /
prosody
Changeset
12374:0602245fc84e
net.stun: Support for xor-relayed-address attribute
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Sat, 05 Mar 2022 11:30:55 +0000 |
parents | 12373:5417ec7e2ee8 |
children | 12375:ea5e46601cfb |
files | net/stun.lua |
diffstat | 1 files changed, 20 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/net/stun.lua Sat Mar 05 11:15:25 2022 +0000 +++ b/net/stun.lua Sat Mar 05 11:30:55 2022 +0000 @@ -197,13 +197,18 @@ return self; end -function packet_methods:get_attribute(attr_type) +function packet_methods:get_attribute(attr_type, idx) + idx = math.max(idx or 1, 1); if type(attr_type) == "string" then attr_type = assert(attribute_lookup[attr_type:lower()], "unknown attribute: "..attr_type); end for _, attribute in ipairs(self.attributes) do if struct.unpack(">I2", attribute) == attr_type then - return attribute:sub(5); + if idx == 1 then + return attribute:sub(5); + else + idx = idx - 1; + end end end end @@ -249,6 +254,19 @@ self:add_attribute("xor-peer-address", self:_pack_address(family, parsed_ip.packed, port or 0, true)); end +function packet_methods:get_xor_relayed_address(idx) + local data = self:get_attribute("xor-relayed-address", idx); + if not data then return; end + return self:_unpack_address(data, true); +end + +function packet_methods:get_xor_relayed_addresses() + return { + self:get_xor_relayed_address(1); + self:get_xor_relayed_address(2); + }; +end + function packet_methods:add_message_integrity(key) -- Add attribute with a dummy value so we can artificially increase -- the packet 'length'