Software /
code /
prosody
Comparison
net/stun.lua @ 12370:9889b1815d31
net.stun: Factor out address unpack, an operation common to multiple attributes
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Sat, 05 Mar 2022 11:03:44 +0000 |
parent | 12369:f2ae9c6d1d9f |
child | 12371:9a8b0c5b4b14 |
comparison
equal
deleted
inserted
replaced
12369:f2ae9c6d1d9f | 12370:9889b1815d31 |
---|---|
205 return attribute:sub(5); | 205 return attribute:sub(5); |
206 end | 206 end |
207 end | 207 end |
208 end | 208 end |
209 | 209 |
210 function packet_methods:get_mapped_address() | 210 function packet_methods:_unpack_address(data, xor) |
211 local data = self:get_attribute("mapped-address"); | |
212 if not data then return; end | |
213 local family, port = struct.unpack("x>BI2", data); | 211 local family, port = struct.unpack("x>BI2", data); |
214 local addr = data:sub(5); | 212 local addr = data:sub(5); |
213 if xor then | |
214 port = bit32.bxor(port, 0x2112); | |
215 addr = sxor(addr, magic_cookie..self.transaction_id); | |
216 end | |
215 return { | 217 return { |
216 family = addr_families[family] or "unknown"; | 218 family = addr_families[family] or "unknown"; |
217 port = port; | 219 port = port; |
218 address = net.ntop(addr); | 220 address = net.ntop(addr); |
219 }; | 221 }; |
220 end | 222 end |
221 | 223 |
224 | |
225 function packet_methods:get_mapped_address() | |
226 local data = self:get_attribute("mapped-address"); | |
227 if not data then return; end | |
228 return self:_unpack_address(data, false); | |
229 end | |
222 function packet_methods:get_xor_mapped_address() | 230 function packet_methods:get_xor_mapped_address() |
223 local data = self:get_attribute("xor-mapped-address"); | 231 local data = self:get_attribute("xor-mapped-address"); |
224 if not data then return; end | 232 if not data then return; end |
225 local family, port = struct.unpack("x>BI2", data); | 233 return self:_unpack_address(data, true); |
226 local addr = sxor(data:sub(5), magic_cookie..self.transaction_id); | |
227 return { | |
228 family = addr_families[family] or "unknown"; | |
229 port = bit32.bxor(port, 0x2112); | |
230 address = net.ntop(addr); | |
231 address_raw = data:sub(5); | |
232 }; | |
233 end | 234 end |
234 | 235 |
235 function packet_methods:add_message_integrity(key) | 236 function packet_methods:add_message_integrity(key) |
236 -- Add attribute with a dummy value so we can artificially increase | 237 -- Add attribute with a dummy value so we can artificially increase |
237 -- the packet 'length' | 238 -- the packet 'length' |