@@ -542,24 +542,19 @@ impl<T: AsRef<[u8]>> Packet<T> {
542
542
let field = & self . buffer . as_ref ( ) [ field:: FLAGS ] ;
543
543
Flags :: from_bits_truncate ( NetworkEndian :: read_u16 ( field) )
544
544
}
545
- }
546
545
547
- impl < ' a , T : AsRef < [ u8 ] > + ?Sized > Packet < & ' a T > {
548
546
/// Return a pointer to the options.
549
547
#[ 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
+ }
558
554
}
559
555
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 ] ;
563
558
let len = data. iter ( ) . position ( |& x| x == 0 ) . ok_or ( Error ) ?;
564
559
if len == 0 {
565
560
return Err ( Error ) ;
@@ -569,9 +564,8 @@ impl<'a, T: AsRef<[u8]> + ?Sized> Packet<&'a T> {
569
564
Ok ( data)
570
565
}
571
566
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 ] ;
575
569
let len = data. iter ( ) . position ( |& x| x == 0 ) . ok_or ( Error ) ?;
576
570
if len == 0 {
577
571
return Err ( Error ) ;
@@ -698,11 +692,8 @@ impl<T: AsRef<[u8]> + AsMut<[u8]>> Packet<T> {
698
692
impl < ' a , T : AsRef < [ u8 ] > + AsMut < [ u8 ] > + ?Sized > Packet < & ' a mut T > {
699
693
/// Return a pointer to the options.
700
694
#[ 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 ] )
706
697
}
707
698
}
708
699
@@ -866,7 +857,7 @@ impl<'a> Repr<'a> {
866
857
}
867
858
868
859
/// 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 >
870
861
where
871
862
T : AsRef < [ u8 ] > + ?Sized ,
872
863
{
@@ -903,7 +894,7 @@ impl<'a> Repr<'a> {
903
894
let mut max_size = None ;
904
895
let mut lease_duration = None ;
905
896
906
- for option in packet. options ( ) ? . parse ( ) {
897
+ for option in packet. options ( ) . parse ( ) {
907
898
match option {
908
899
DhcpOption :: EndOfList => break ,
909
900
DhcpOption :: Pad => { }
@@ -1009,7 +1000,7 @@ impl<'a> Repr<'a> {
1009
1000
packet. set_flags ( flags) ;
1010
1001
1011
1002
{
1012
- let mut options = packet. options_mut ( ) ? ;
1003
+ let mut options = packet. options_mut ( ) ;
1013
1004
options. emit (
1014
1005
iter:: IntoIterator :: into_iter ( [
1015
1006
Some ( DhcpOption :: MessageType ( self . message_type ) ) ,
@@ -1155,7 +1146,7 @@ mod test {
1155
1146
assert_eq ! ( packet. server_ip( ) , IP_NULL ) ;
1156
1147
assert_eq ! ( packet. relay_agent_ip( ) , IP_NULL ) ;
1157
1148
assert_eq ! ( packet. client_hardware_address( ) , CLIENT_MAC ) ;
1158
- let options = packet. options ( ) . unwrap ( ) ;
1149
+ let options = packet. options ( ) ;
1159
1150
assert_eq ! ( options. buffer_len( ) , 3 + 9 + 6 + 4 + 6 + 1 + 7 ) ;
1160
1151
1161
1152
let mut options = options. parse ( ) ;
@@ -1203,7 +1194,7 @@ mod test {
1203
1194
packet. set_client_hardware_address ( CLIENT_MAC ) ;
1204
1195
1205
1196
{
1206
- let mut options = packet. options_mut ( ) . unwrap ( ) ;
1197
+ let mut options = packet. options_mut ( ) ;
1207
1198
options
1208
1199
. emit ( [ DhcpOption :: MessageType ( MessageType :: Discover ) ] )
1209
1200
. unwrap ( ) ;
0 commit comments