Crates.io | stun-format |
lib.rs | stun-format |
version | 1.0.1 |
source | src |
created_at | 2022-11-07 17:04:58.440875 |
updated_at | 2022-11-07 17:54:23.738479 |
description | No-std parser for all RFCs STUN messages |
homepage | |
repository | https://github.com/pradt2/stun-format |
max_upload_size | |
id | 707336 |
size | 175,802 |
No-std parser for all RFC STUN messages.
const MSG: [u8; 28] = [
0x00, 0x01, // type: Binding Request
0x00, 0x08, // length: 8 (header does not count)
0x21, 0x12, 0xA4, 0x42, // magic cookie
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, // transaction id (16 bytes total incl. magic cookie)
0x00, 0x03, // type: ChangeRequest
0x00, 0x04, // length: 4 (only value bytes count)
0x00, 0x00, 0x00, 0x40 | 0x20, // change both ip and port
];
let msg = Msg::from(MSG.as_slice());
let typ = msg.typ()?; // MsgType::BindingRequest
let cookie = msg.cookie()?; // 0x2112A442
let transaction_id = msg.tid()?; // 0x01
let attr = msg.attrs_iter().next()?; // Attr::ChangeRequest { change_ip: true, change_port: true }
const MSG: [u8; 28] = [
0x00, 0x01, // type: Binding Request
0x00, 0x08, // length: 8 (header does not count)
0x21, 0x12, 0xA4, 0x42, // magic cookie
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, // transaction id (16 bytes total incl. magic cookie)
0x00, 0x03, // type: ChangeRequest
0x00, 0x04, // length: 4 (only value bytes count)
0x00, 0x00, 0x00, 0x40 | 0x20, // change both ip and port
];
let mut buf = [0u8; MSG.len()];
let mut msg = MsgBuilder::from(buf.as_mut_slice());
msg.typ(MsgType::BindingRequest)?;
msg.tid(1)?;
msg.add_attr(Attr::ChangeRequest { change_ip: true, change_port: true })?;
assert_eq!(&MSG, msg.as_bytes());
Pull requests are welcome. Please make sure your contribution adheres to the Principles section above.