rust/nfs: convert parser to nom7 functions (NFS v2 records)

pull/6629/head
Pierre Chifflier 4 years ago committed by Victor Julien
parent ea1d03f8e3
commit acb3ec6db1

@ -22,8 +22,8 @@ use crate::nfs::types::*;
use crate::nfs::rpc_records::*;
use crate::nfs::nfs2_records::*;
use nom::IResult;
use nom::number::streaming::be_u32;
use nom7::IResult;
use nom7::number::streaming::be_u32;
impl NFSState {
/// complete request record

@ -16,24 +16,22 @@
*/
//! Nom parsers for NFSv2 records
use nom::combinator::rest;
use nom::number::streaming::be_u32;
use crate::nfs::nfs_records::*;
use nom7::bytes::streaming::take;
use nom7::combinator::rest;
use nom7::number::streaming::be_u32;
use nom7::IResult;
#[derive(Debug,PartialEq)]
pub struct Nfs2Handle<'a> {
pub value: &'a[u8],
}
named!(pub parse_nfs2_handle<Nfs2Handle>,
do_parse!(
handle: take!(32)
>> (
Nfs2Handle {
value:handle,
}
))
);
pub fn parse_nfs2_handle(i: &[u8]) -> IResult<&[u8], Nfs2Handle> {
let (i, value) = take(32_usize)(i)?;
Ok((i, Nfs2Handle { value }))
}
#[derive(Debug,PartialEq)]
pub struct Nfs2RequestLookup<'a> {
@ -41,19 +39,17 @@ pub struct Nfs2RequestLookup<'a> {
pub name_vec: Vec<u8>,
}
named!(pub parse_nfs2_request_lookup<Nfs2RequestLookup>,
do_parse!(
handle: parse_nfs2_handle
>> name_len: be_u32
>> name_contents: take!(name_len)
>> _name_padding: rest
>> (
Nfs2RequestLookup {
handle,
name_vec:name_contents.to_vec(),
}
))
);
pub fn parse_nfs2_request_lookup(i: &[u8]) -> IResult<&[u8], Nfs2RequestLookup> {
let (i, handle) = parse_nfs2_handle(i)?;
let (i, name_len) = be_u32(i)?;
let (i, name_contents) = take(name_len as usize)(i)?;
let (i, _name_padding) = rest(i)?;
let req = Nfs2RequestLookup {
handle,
name_vec: name_contents.to_vec(),
};
Ok((i, req))
}
#[derive(Debug,PartialEq)]
pub struct Nfs2RequestRead<'a> {
@ -61,37 +57,30 @@ pub struct Nfs2RequestRead<'a> {
pub offset: u32,
}
named!(pub parse_nfs2_request_read<Nfs2RequestRead>,
do_parse!(
handle: parse_nfs2_handle
>> offset: be_u32
>> _count: be_u32
>> (
Nfs2RequestRead {
handle,
offset
}
))
);
pub fn parse_nfs2_request_read(i: &[u8]) -> IResult<&[u8], Nfs2RequestRead> {
let (i, handle) = parse_nfs2_handle(i)?;
let (i, offset) = be_u32(i)?;
let (i, _count) = be_u32(i)?;
let req = Nfs2RequestRead { handle, offset };
Ok((i, req))
}
named!(pub parse_nfs2_reply_read<NfsReplyRead>,
do_parse!(
status: be_u32
>> attr_blob: take!(68)
>> data_len: be_u32
>> data_contents: rest
>> (
NfsReplyRead {
status,
attr_follows:1,
attr_blob,
count:data_len,
eof:false,
data_len,
data:data_contents,
}
))
);
pub fn parse_nfs2_reply_read(i: &[u8]) -> IResult<&[u8], NfsReplyRead> {
let (i, status) = be_u32(i)?;
let (i, attr_blob) = take(68_usize)(i)?;
let (i, data_len) = be_u32(i)?;
let (i, data_contents) = rest(i)?;
let reply = NfsReplyRead {
status,
attr_follows: 1,
attr_blob,
count: data_len,
eof: false,
data_len,
data: data_contents,
};
Ok((i, reply))
}
#[derive(Debug,PartialEq)]
pub struct Nfs2Attributes<> {
@ -99,16 +88,11 @@ pub struct Nfs2Attributes<> {
pub asize: u32,
}
named!(pub parse_nfs2_attribs<Nfs2Attributes>,
do_parse!(
atype: be_u32
>> _blob1: take!(16)
>> asize: be_u32
>> _blob2: take!(44)
>> (
Nfs2Attributes {
atype,
asize
}
))
);
pub fn parse_nfs2_attribs(i: &[u8]) -> IResult<&[u8], Nfs2Attributes> {
let (i, atype) = be_u32(i)?;
let (i, _blob1) = take(16_usize)(i)?;
let (i, asize) = be_u32(i)?;
let (i, _blob2) = take(44_usize)(i)?;
let attrs = Nfs2Attributes { atype, asize };
Ok((i, attrs))
}

@ -24,8 +24,8 @@ use crate::nfs::types::*;
use crate::nfs::rpc_records::*;
use crate::nfs::nfs3_records::*;
use nom::IResult;
use nom::number::streaming::be_u32;
use nom7::IResult;
use nom7::number::streaming::be_u32;
impl NFSState {
/// complete NFS3 request record

Loading…
Cancel
Save