add support for RESPONSE-ORIGIN and OTHER-ADDRESS attributes
This commit is contained in:
32
src/lib.rs
32
src/lib.rs
@ -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}");
|
||||
|
Reference in New Issue
Block a user