diff options
author | Istvan Ruzman <istvan@ruzman.eu> | 2019-12-17 21:44:05 +0100 |
---|---|---|
committer | Istvan Ruzman <istvan@ruzman.eu> | 2019-12-17 21:44:05 +0100 |
commit | e328aa9b17cc10caec5cf632062d49d50cbc435c (patch) | |
tree | d0e96b12280f17597f01a04db89da28ef9bb2840 /src/lib.rs | |
parent | ea8cbf5a153f2612da906a579bef70fbe5420175 (diff) |
restructure code and introduce builders
before the structs used a `&mut` directly, this was kind of unflexible.
The code is changed to use builders for the `mutable` part. Parsing can
only be done on the immutable struct versions.
Diffstat (limited to 'src/lib.rs')
-rw-r--r-- | src/lib.rs | 30 |
1 files changed, 17 insertions, 13 deletions
@@ -4,10 +4,10 @@ pub mod socket; pub use socket::Socket; pub mod header; -pub use header::{Code, Header}; +pub use header::{Code, Header, HeaderBuilder}; pub mod packet; -pub use packet::Packet; +pub use packet::{Packet, PacketBuilder}; pub mod error; pub mod eth; @@ -29,7 +29,7 @@ mod tests { let mut receive_buffer = [0u8; 1450]; let mut buffer = [0u8; 1450]; - let mut packet = Packet::new_discovery_packet( + let mut packet = PacketBuilder::new_discovery_packet( &mut buffer[..], [0xfe, 0xb9, 0x04, 0x2a, 0xb2, 0x35], [0xff, 0xff, 0xff, 0xff, 0xff, 0xff], @@ -37,15 +37,19 @@ mod tests { .unwrap(); { - let pppoe_header = packet.pppoe_header_mut(); + let pppoe_header = packet.pppoe_header(); pppoe_header.add_tag(Tag::PppMaxMtu(2000)).unwrap(); pppoe_header.add_tag(Tag::ServiceName(b"\0")).unwrap(); pppoe_header.add_tag(Tag::RelaySessionId(b"abc")).unwrap(); - pppoe_header.add_tag(Tag::HostUniq(b"abcanretadi\0arnedt")).unwrap(); - pppoe_header.add_vendor_tag_with_callback(|buffer| { - Tr101Information::with_both_ids("circuit", "remoteid") - .and_then(|tr101| tr101.write(buffer)) - }).unwrap(); + pppoe_header + .add_tag(Tag::HostUniq(b"abcanretadi\0arnedt")) + .unwrap(); + pppoe_header + .add_vendor_tag_with_callback(|buffer| { + Tr101Information::with_both_ids("circuit", "remoteid") + .and_then(|tr101| tr101.write(buffer)) + }) + .unwrap(); pppoe_header.add_tag(Tag::EndOfList).unwrap(); } @@ -53,12 +57,12 @@ mod tests { assert!(ret.is_ok()); let len = sock.recv(&mut receive_buffer[..]).unwrap(); - let pado = Packet::from_buffer(&mut receive_buffer[..len]).unwrap(); + let pado = Packet::with_buffer(&mut receive_buffer[..len]).unwrap(); { let dst = pado.ethernet_header().src_address(); - packet.ethernet_header_mut().set_dst_address(dst); - let pppoe_header = packet.pppoe_header_mut(); + packet.ethernet_header().set_dst_address(dst); + let pppoe_header = packet.pppoe_header(); pppoe_header.set_code(Code::Padr); pppoe_header.clear_eol(); @@ -74,6 +78,6 @@ mod tests { let ret = sock.send(packet.as_bytes()); assert!(ret.is_ok()); - let len = sock.recv(&mut receive_buffer[..]).unwrap(); + let _len = sock.recv(&mut receive_buffer[..]).unwrap(); } } |