add support for RESPONSE-ORIGIN and OTHER-ADDRESS attributes

This commit is contained in:
Keenan Tims
2025-02-14 18:06:41 -08:00
parent 903bf23646
commit 6985ed6614

View File

@ -31,6 +31,8 @@ const ATTR_UNKNOWN_ATTRIBUTES: u16 = 0x000a;
const ATTR_REALM: u16 = 0x0014;
const ATTR_NONCE: u16 = 0x0015;
const ATTR_ALTERNATE_SERVER: u16 = 0x8023;
const ATTR_RESPONSE_ORIGIN: u16 = 0x802b;
const ATTR_OTHER_ADDRESS: u16 = 0x802c;
const SOFTWARE: [u8; 8] = *b"tailnode";
const BINDING_REQUEST: [u8; 2] = [0x00, 0x01];
@ -149,6 +151,8 @@ pub enum StunAttribute {
UnknownAttributes(Vec<u16>),
Software(String),
AlternateServer(AddrPort),
ResponseOrigin(AddrPort),
OtherAddress(AddrPort),
Unknown((u16, Vec<u8>)),
}
@ -223,8 +227,26 @@ impl fmt::Display for StunAttribute {
a.port
)
}
StunAttribute::ResponseOrigin(a) => {
write!(
f,
" ResponseOrigin ({}) {}:{}",
addr_family(&a.address),
a.address,
a.port
)
},
StunAttribute::OtherAddress(a) => {
write!(
f,
" OtherAddress ({}) {}:{}",
addr_family(&a.address),
a.address,
a.port
)
},
StunAttribute::Unknown((attr_type, data)) => {
write!(f, " Unknown ({}) {:?}", attr_type, data)
write!(f, " Unknown ({:04x}) {:?}", attr_type, data)
}
}
}
@ -488,6 +510,14 @@ where
let (_residual, addr) = parse_stun_address(attr_data)?;
StunAttribute::AlternateServer(addr)
}
ATTR_RESPONSE_ORIGIN => {
let (_residual, addr) = parse_stun_address(attr_data)?;
StunAttribute::ResponseOrigin(addr)
}
ATTR_OTHER_ADDRESS => {
let (_residual, addr) = parse_stun_address(attr_data)?;
StunAttribute::OtherAddress(addr)
}
t => {
warn!("Unknown STUN attribute type {t}");