1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
use crate::definitions::StunTransactionId;
use crate::header::StunHeader;
use rand::Rng;
use std::io::Cursor;
/// Checks for a STUN message header
///
/// This function is intended to be used with multiplexed streams in order to separate STUN packets from other protocols
///
/// Arguments:
/// * `data_bytes`: Streaming data bytes that need to be checked. Note that only the first 20 bytes are processed.
pub fn check_for_stun_message_header(data_bytes: &[u8]) -> Option<StunHeader> {
StunHeader::decode(&mut Cursor::new(data_bytes)).ok()
}
/// Generates a random Transaction Id to be used in a StunMessage
///
/// The [Transaction Id is a randomly selected 96-bit number](https://tools.ietf.org/html/rfc5389#section-3) represented here by StunTransactionId
pub fn generate_transaction_id() -> StunTransactionId {
let mut rng = rand::thread_rng();
let buf: StunTransactionId = rng.gen();
buf
}