async_ws/frame/frame_payload/
mod.rs

1pub mod decode;
2pub use decode::*;
3
4// Masks or unmasks a buffer with payload bytes. The offset is the offset of the buffer within the
5// frames payload segment. Any multiple of 4 may be added to or subtracted from the offset without
6// any effect on the result.
7pub fn payload_mask(mask: [u8; 4], mut offset: usize, buffer: &mut [u8]) {
8    if mask != [0u8, 0u8, 0u8, 0u8] {
9        for byte in buffer.iter_mut() {
10            offset = offset % 4;
11            *byte ^= mask[offset];
12            offset += 1;
13        }
14    }
15}
16
17// Calculate maximum payload length given a maximum frame size.
18pub fn max_payload_len(masked: bool, max_frame_size: u64) -> u64 {
19    match (masked, max_frame_size) {
20        (true, 0..=6) => 0,
21        (true, 7..=132) => max_frame_size - 6,
22        (true, 133..=134) => 126,
23        (true, 135..=65542) => max_frame_size - 8,
24        (true, 65543..=65548) => 65536,
25        (true, 65549..=2147483661) => max_frame_size - 14,
26        (false, 0..=2) => 0,
27        (false, 3..=128) => max_frame_size - 2,
28        (false, 129..=130) => 126,
29        (false, 131..=65538) => max_frame_size - 4,
30        (false, 65539..=65544) => 65536,
31        (false, 65545..=2147483657) => max_frame_size - 10,
32        _ => 2147483647,
33    }
34}