use nom::IResult;
use nom::combinator::rest;
use nom::error::ErrorKind;
-use nom::multi::length_data;
use nom::number::streaming::{be_u8, be_u16, be_u32};
use nom;
use crate::dns::dns::*;
pos = &pos[1..];
break;
} else if len & 0b1100_0000 == 0 {
- match length_data(be_u8)(pos) as IResult<&[u8],_> {
- Ok((rem, label)) => {
- if name.len() > 0 {
- name.push('.' as u8);
- }
- name.extend(label);
- pos = rem;
- }
- _ => {
- return Err(nom::Err::Error(
- error_position!(pos, ErrorKind::OctDigit)));
- }
+ let (rem, label) = nom::length_data!(pos, be_u8)?;
+ if name.len() > 0 {
+ name.push('.' as u8);
}
+ name.extend(label);
+ pos = rem;
} else if len & 0b1100_0000 == 0b1100_0000 {
- match be_u16(pos) as IResult<&[u8],_> {
- Ok((rem, leader)) => {
- let offset = usize::from(leader) & 0x3fff;
- if offset > message.len() {
- return Err(nom::Err::Error(
- error_position!(pos, ErrorKind::OctDigit)));
- }
- pos = &message[offset..];
- if pivot == start {
- pivot = rem;
- }
- }
- _ => {
- return Err(nom::Err::Error(
- error_position!(pos, ErrorKind::OctDigit)));
- }
+ let (rem, leader) = be_u16(pos)?;
+ let offset = usize::from(leader) & 0x3fff;
+ if offset > message.len() {
+ return Err(nom::Err::Error(error_position!(pos, nom::error::ErrorKind::OctDigit)));
+ }
+ pos = &message[offset..];
+ if pivot == start {
+ pivot = rem;
}
} else {
return Err(nom::Err::Error(