pub struct PonkAssembler { /* private fields */ }Implementations§
Source§impl PonkAssembler
impl PonkAssembler
Sourcepub fn with_max_assemblies(max_assemblies: usize) -> Self
pub fn with_max_assemblies(max_assemblies: usize) -> Self
Creates an assembler with the default byte, geometry, and timeout limits and the requested concurrent assembly limit.
A zero assembly limit ignores multipart frames without retaining data.
Examples found in repository?
examples/receive_reassemble.rs (line 20)
13fn main() -> std::io::Result<()> {
14 let group = Ipv4Addr::from(MULTICAST_ADDR);
15 let socket = UdpSocket::bind((Ipv4Addr::UNSPECIFIED, DEFAULT_PORT))?;
16 socket.join_multicast_v4(&group, &Ipv4Addr::UNSPECIFIED)?;
17 println!("listening for PONK on {group}:{DEFAULT_PORT} — Ctrl-C to stop");
18
19 // Cap in-progress assemblies so untrusted senders cannot exhaust memory.
20 let mut assembler = PonkAssembler::with_max_assemblies(64);
21 let mut buffer = [0u8; RECV_BUFFER_SIZE];
22
23 loop {
24 let (len, peer): (usize, SocketAddr) = socket.recv_from(&mut buffer)?;
25 match assembler.push_datagram(&buffer[..len], peer) {
26 Ok(Some(frame)) => {
27 let points: usize = frame.paths.iter().map(|p| p.points.len()).sum();
28 println!(
29 "frame from {:?} (id {}): {} path(s), {} point(s)",
30 frame.sender_name,
31 frame.sender_id,
32 frame.paths.len(),
33 points,
34 );
35 }
36 Ok(None) => {}
37 Err(error) => eprintln!("malformed datagram from {peer}: {error}"),
38 }
39 }
40}Sourcepub fn with_limits(limits: PonkLimits) -> Self
pub fn with_limits(limits: PonkLimits) -> Self
Creates an assembler with caller-provided resource limits.
pub fn assembly_count(&self) -> usize
pub fn buffered_bytes(&self) -> usize
Sourcepub fn prune_stale(&mut self)
pub fn prune_stale(&mut self)
Drops incomplete frames that have exceeded assembly_timeout.
Sourcepub fn push_datagram(
&mut self,
datagram: &[u8],
peer_addr: SocketAddr,
) -> Result<Option<PonkFrame>, PonkError>
pub fn push_datagram( &mut self, datagram: &[u8], peer_addr: SocketAddr, ) -> Result<Option<PonkFrame>, PonkError>
Examples found in repository?
examples/receive_reassemble.rs (line 25)
13fn main() -> std::io::Result<()> {
14 let group = Ipv4Addr::from(MULTICAST_ADDR);
15 let socket = UdpSocket::bind((Ipv4Addr::UNSPECIFIED, DEFAULT_PORT))?;
16 socket.join_multicast_v4(&group, &Ipv4Addr::UNSPECIFIED)?;
17 println!("listening for PONK on {group}:{DEFAULT_PORT} — Ctrl-C to stop");
18
19 // Cap in-progress assemblies so untrusted senders cannot exhaust memory.
20 let mut assembler = PonkAssembler::with_max_assemblies(64);
21 let mut buffer = [0u8; RECV_BUFFER_SIZE];
22
23 loop {
24 let (len, peer): (usize, SocketAddr) = socket.recv_from(&mut buffer)?;
25 match assembler.push_datagram(&buffer[..len], peer) {
26 Ok(Some(frame)) => {
27 let points: usize = frame.paths.iter().map(|p| p.points.len()).sum();
28 println!(
29 "frame from {:?} (id {}): {} path(s), {} point(s)",
30 frame.sender_name,
31 frame.sender_id,
32 frame.paths.len(),
33 points,
34 );
35 }
36 Ok(None) => {}
37 Err(error) => eprintln!("malformed datagram from {peer}: {error}"),
38 }
39 }
40}Trait Implementations§
Auto Trait Implementations§
impl Freeze for PonkAssembler
impl RefUnwindSafe for PonkAssembler
impl Send for PonkAssembler
impl Sync for PonkAssembler
impl Unpin for PonkAssembler
impl UnsafeUnpin for PonkAssembler
impl UnwindSafe for PonkAssembler
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more