Skip to content

Commit ffab9db

Browse files
committed
wire/dhcp: make some packet funcs infallible.
1 parent da59503 commit ffab9db

File tree

1 file changed

+17
-26
lines changed

1 file changed

+17
-26
lines changed

src/wire/dhcpv4.rs

Lines changed: 17 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -542,24 +542,19 @@ impl<T: AsRef<[u8]>> Packet<T> {
542542
let field = &self.buffer.as_ref()[field::FLAGS];
543543
Flags::from_bits_truncate(NetworkEndian::read_u16(field))
544544
}
545-
}
546545

547-
impl<'a, T: AsRef<[u8]> + ?Sized> Packet<&'a T> {
548546
/// Return a pointer to the options.
549547
#[inline]
550-
pub fn options(&self) -> Result<DhcpOptionsBuffer<&'a [u8]>> {
551-
let data = self.buffer.as_ref();
552-
data.get(field::OPTIONS)
553-
.ok_or(Error)
554-
.map(|buffer| DhcpOptionsBuffer {
555-
buffer,
556-
len: buffer.len(),
557-
})
548+
pub fn options(&self) -> DhcpOptionsBuffer<&[u8]> {
549+
let buffer = &self.buffer.as_ref()[field::OPTIONS];
550+
DhcpOptionsBuffer {
551+
buffer,
552+
len: buffer.len(),
553+
}
558554
}
559555

560-
pub fn get_sname(&self) -> Result<&'a str> {
561-
let data = self.buffer.as_ref();
562-
let data = data.get(field::SNAME).ok_or(Error)?;
556+
pub fn get_sname(&self) -> Result<&str> {
557+
let data = &self.buffer.as_ref()[field::SNAME];
563558
let len = data.iter().position(|&x| x == 0).ok_or(Error)?;
564559
if len == 0 {
565560
return Err(Error);
@@ -569,9 +564,8 @@ impl<'a, T: AsRef<[u8]> + ?Sized> Packet<&'a T> {
569564
Ok(data)
570565
}
571566

572-
pub fn get_boot_file(&self) -> Result<&'a str> {
573-
let data = self.buffer.as_ref();
574-
let data = data.get(field::FILE).ok_or(Error)?;
567+
pub fn get_boot_file(&self) -> Result<&str> {
568+
let data = &self.buffer.as_ref()[field::FILE];
575569
let len = data.iter().position(|&x| x == 0).ok_or(Error)?;
576570
if len == 0 {
577571
return Err(Error);
@@ -698,11 +692,8 @@ impl<T: AsRef<[u8]> + AsMut<[u8]>> Packet<T> {
698692
impl<'a, T: AsRef<[u8]> + AsMut<[u8]> + ?Sized> Packet<&'a mut T> {
699693
/// Return a pointer to the options.
700694
#[inline]
701-
pub fn options_mut(&mut self) -> Result<DhcpOptionsBuffer<&mut [u8]>> {
702-
let data = self.buffer.as_mut();
703-
data.get_mut(field::OPTIONS)
704-
.ok_or(Error)
705-
.map(DhcpOptionsBuffer::new)
695+
pub fn options_mut(&mut self) -> DhcpOptionsBuffer<&mut [u8]> {
696+
DhcpOptionsBuffer::new(&mut self.buffer.as_mut()[field::OPTIONS])
706697
}
707698
}
708699

@@ -866,7 +857,7 @@ impl<'a> Repr<'a> {
866857
}
867858

868859
/// Parse a DHCP packet and return a high-level representation.
869-
pub fn parse<T>(packet: &Packet<&'a T>) -> Result<Self>
860+
pub fn parse<T>(packet: &'a Packet<&'a T>) -> Result<Self>
870861
where
871862
T: AsRef<[u8]> + ?Sized,
872863
{
@@ -903,7 +894,7 @@ impl<'a> Repr<'a> {
903894
let mut max_size = None;
904895
let mut lease_duration = None;
905896

906-
for option in packet.options()?.parse() {
897+
for option in packet.options().parse() {
907898
match option {
908899
DhcpOption::EndOfList => break,
909900
DhcpOption::Pad => {}
@@ -1009,7 +1000,7 @@ impl<'a> Repr<'a> {
10091000
packet.set_flags(flags);
10101001

10111002
{
1012-
let mut options = packet.options_mut()?;
1003+
let mut options = packet.options_mut();
10131004
options.emit(
10141005
iter::IntoIterator::into_iter([
10151006
Some(DhcpOption::MessageType(self.message_type)),
@@ -1155,7 +1146,7 @@ mod test {
11551146
assert_eq!(packet.server_ip(), IP_NULL);
11561147
assert_eq!(packet.relay_agent_ip(), IP_NULL);
11571148
assert_eq!(packet.client_hardware_address(), CLIENT_MAC);
1158-
let options = packet.options().unwrap();
1149+
let options = packet.options();
11591150
assert_eq!(options.buffer_len(), 3 + 9 + 6 + 4 + 6 + 1 + 7);
11601151

11611152
let mut options = options.parse();
@@ -1203,7 +1194,7 @@ mod test {
12031194
packet.set_client_hardware_address(CLIENT_MAC);
12041195

12051196
{
1206-
let mut options = packet.options_mut().unwrap();
1197+
let mut options = packet.options_mut();
12071198
options
12081199
.emit([DhcpOption::MessageType(MessageType::Discover)])
12091200
.unwrap();

0 commit comments

Comments
 (0)